Repository: DxWnd/DxWnd.reloaded Branch: master Commit: 7235efb7388b Files: 1038 Total size: 7.0 MB Directory structure: gitextract_mry0xxmd/ ├── .gitattributes ├── Disasm201/ │ ├── Disasm.bpr │ ├── Disasm.c │ ├── cmdlist.c │ ├── disasm.def │ ├── disasm.h │ ├── disasm.vs2008.sln │ ├── disasm.vs2008.vcproj │ └── main.c ├── Include/ │ ├── ---dsound.h │ ├── 3DFX.H │ ├── D3D10.h │ ├── D3D10_1.h │ ├── D3D10_1shader.h │ ├── D3D10effect.h │ ├── D3D10shader.h │ ├── D3D11.h │ ├── D3D11SDKLayers.h │ ├── D3D11Shader.h │ ├── D3Dcommon.h │ ├── DShow.h │ ├── FXDLL.H │ ├── FXGLOB.H │ ├── FXOS.H │ ├── MinHook.h │ ├── SST1VID.H │ ├── TlHelp32.h │ ├── Vfw.h │ ├── amstream.h │ ├── d3d.h │ ├── d3d10misc.h │ ├── d3d10sdklayers.h │ ├── d3d8.h │ ├── d3d8caps.h │ ├── d3d8types.h │ ├── d3d9.h │ ├── d3d9.wine.h │ ├── d3d9caps.h │ ├── d3d9types.h │ ├── d3dcaps.h │ ├── d3dtypes.h │ ├── ddraw.h │ ├── ddrawex.h │ ├── ddrawi.h │ ├── dds.h │ ├── dinput.h │ ├── disasm.h │ ├── dsound.h │ ├── dxdiag.h │ ├── dxwnd.h │ ├── gl/ │ │ ├── gl.h │ │ ├── glext.h │ │ ├── glxext.h │ │ └── wglext.h │ ├── gl.h │ ├── glext.h │ ├── glide.h │ ├── glidesys.h │ ├── glideutl.h │ ├── glu.h │ ├── qmixer.h │ └── sst1init.h ├── README.md ├── build/ │ ├── README.FIRST.txt │ ├── exports/ │ │ ├── 007 NightFire.dxw │ │ ├── 101 The Airborne Invasion of Normandy.dxw │ │ ├── 11th Hour, the.dxw │ │ ├── 25 to Life.dxw │ │ ├── 3D Cube Hopper.dxw │ │ ├── 3D Frog Man.dxw │ │ ├── 4x4 Evolution.dxw │ │ ├── 688(I) Hunter Killer.dxw │ │ ├── 7th Guest (window port).dxw │ │ ├── 8th Wonder.dxw │ │ ├── A10 Cuba.dxw │ │ ├── Abomination.dxw │ │ ├── Abuse.dxw │ │ ├── Abyss Incident at Europa.dxw │ │ ├── Actua Ice Hockey.dxw │ │ ├── Actua Soccer 3.dxw │ │ ├── Adrenix 3D.dxw │ │ ├── Adrenix.dxw │ │ ├── AeroStyle.dxw │ │ ├── Affari Tuoi.dxw │ │ ├── Agassi Tennis Generation.dxw │ │ ├── Age of Empires Expansion Trial.dxw │ │ ├── Age of Empires II.dxw │ │ ├── Age of Empires III.dxw │ │ ├── Age of Empires.dxw │ │ ├── Age of Wanderer.dxw │ │ ├── Age of Wonders II.dxw │ │ ├── Age of Wonders.dxw │ │ ├── Agile Warrior F111X.dxw │ │ ├── AirXonix.dxw │ │ ├── Airfix Dogfighter.dxw │ │ ├── Akuma Demon Spawn - Lamentation Sword.dxw │ │ ├── Al Unser Arcade Racing (original EXE).dxw │ │ ├── Al Unser Arcade Racing.dxw │ │ ├── Alien Ambush.dxw │ │ ├── Alien Nations (GOG).dxw │ │ ├── Alien Nations.dxw │ │ ├── Alien Swarm (Steam).dxw │ │ ├── Alien vs. Predator Gold.dxw │ │ ├── Alone in the Dark the New Nightmare.dxw │ │ ├── Alphanatix.dxw │ │ ├── American McGee's Alice.dxw │ │ ├── Amerzone.dxw │ │ ├── Ancient Evil demo.dxw │ │ ├── Apache for Win95.dxw │ │ ├── Arcade Pool 2.dxw │ │ ├── Area 51.dxw │ │ ├── Armor Command.dxw │ │ ├── Armored Fist 3.dxw │ │ ├── Army Men RTS.dxw │ │ ├── Art is Dead.dxw │ │ ├── Arthur's Quest.dxw │ │ ├── Arx Fatalis.dxw │ │ ├── Ashes to Ashes.dxw │ │ ├── Atlantis - The Lost Tales.dxw │ │ ├── Attack of the Saucerman.dxw │ │ ├── Aura 2 The Sacred Rings.dxw │ │ ├── Avadon 2 The Corruption (Steam).dxw │ │ ├── Avadon the Black Fortress (Steam).dxw │ │ ├── Avernum 2 Crystal Souls (Steam).dxw │ │ ├── Avernum 4 (Steam).dxw │ │ ├── Avernum 5 (Steam).dxw │ │ ├── Avernum 6 (Steam).dxw │ │ ├── Avernum Escape From the Pit (Steam).dxw │ │ ├── Avernum demo.dxw │ │ ├── Axis & Allies Iron Blitz Edition.dxw │ │ ├── Aztec Wars.dxw │ │ ├── Baldur's Gate.dxw │ │ ├── Banzai Bug.dxw │ │ ├── Barbie Riding Club.dxw │ │ ├── Bard's Tale, the.dxw │ │ ├── Batman Vengeance.dxw │ │ ├── Battery Check.dxw │ │ ├── Battle Isle - the Andosia War.dxw │ │ ├── Battle Realms.dxw │ │ ├── Battlezone (1998).dxw │ │ ├── Beavis & Butthead Do U..dxw │ │ ├── Beetle Crazy Cup.dxw │ │ ├── Betrayal in Antara.dxw │ │ ├── Beyond Divinity.dxw │ │ ├── Big BumpZ.dxw │ │ ├── Black & White.dxw │ │ ├── Black Moon Chronicles.dxw │ │ ├── Black Thorn.dxw │ │ ├── Blade Runner (4CD version).dxw │ │ ├── Blade Runner (Win7).dxw │ │ ├── Blade Runner.dxw │ │ ├── Blair Witch Volume One - Rustin Parr.dxw │ │ ├── Blair Witch Volume Three - Elly Kedward.dxw │ │ ├── Blair Witch Volume Two.dxw │ │ ├── Blaze and Blade.dxw │ │ ├── Blood 2 the Chosen.dxw │ │ ├── Bomberbabe.dxw │ │ ├── Breath of Fire IV.dxw │ │ ├── Bugdom.dxw │ │ ├── Bugriders the Race of Kings.dxw │ │ ├── Bugs Bunny Lost In Time.dxw │ │ ├── Bunnies must die.dxw │ │ ├── Bust A Move 3DX.dxw │ │ ├── C&C Generals.dxw │ │ ├── C&C Red Alert 2 Yuri's Revenge.dxw │ │ ├── Call Of Cthulhu DCotE.dxw │ │ ├── Call To Power 2.dxw │ │ ├── Carmageddon (gore).dxw │ │ ├── Carmageddon (no gore).dxw │ │ ├── Carmageddon 2 (GLIDE).dxw │ │ ├── Carmageddon 2 (SW).dxw │ │ ├── Carnivores 3DFX.dxw │ │ ├── Carnivores.dxw │ │ ├── Catechumen (3DFX).dxw │ │ ├── Cave Story.dxw │ │ ├── Celtic Kings Rage of War.dxw │ │ ├── Championship Manager 03 04.dxw │ │ ├── Chaos Island (rip).dxw │ │ ├── Chaos Island.dxw │ │ ├── Chaos Overlords.dxw │ │ ├── Chariots of War.dxw │ │ ├── Chicago 1930.dxw │ │ ├── Chicken Invaders 2.dxw │ │ ├── Circus Fighters.dxw │ │ ├── Close Combat 2 a bridge too far.dxw │ │ ├── Close Combat 5 Invasion Normandy.dxw │ │ ├── Codename Tenka.dxw │ │ ├── Colin McRae Rally 2.0.dxw │ │ ├── Command & Conquer - Red Alert The Aftermath.dxw │ │ ├── Command & Conquer Red Alert 2.dxw │ │ ├── Conflict Zone.dxw │ │ ├── Contrast.dxw │ │ ├── Cool Pool Eightball Demo.dxw │ │ ├── Corsairs Gold (GOG).dxw │ │ ├── Corsairs.dxw │ │ ├── Cossacks II.dxw │ │ ├── Crimson Skies (DEMO).dxw │ │ ├── Crimson Skies.dxw │ │ ├── Croc - Legend of the Gobbos.dxw │ │ ├── Croc 2.dxw │ │ ├── Crusaders of Might and Magic (GOG).dxw │ │ ├── Crusaders of Might and Magic Demo.dxw │ │ ├── Cyber Gladiators (3dfx).dxw │ │ ├── Cydonia.dxw │ │ ├── D.O.G. - Fight for Your Life.dxw │ │ ├── DOSBox-0.74.dxw │ │ ├── DX-Ball2.dxw │ │ ├── Daemonstar.dxw │ │ ├── Daikatana.dxw │ │ ├── Damage Incorporated.dxw │ │ ├── Dangerous Waters.dxw │ │ ├── Darius Gaiden.dxw │ │ ├── Dark Angael.dxw │ │ ├── Dark Colony (16 bit).dxw │ │ ├── Dark Colony.dxw │ │ ├── Dark Disciples 1.dxw │ │ ├── Dark Disciples 2.dxw │ │ ├── Dark Earth.dxw │ │ ├── Dark Fall - The Journal (GOG 2.0.0.6).dxw │ │ ├── Dark Planet Battle for Natrolis.dxw │ │ ├── Dark Reign.dxw │ │ ├── Dark Vengeance.dxw │ │ ├── Darkened Skye.dxw │ │ ├── Daytona USA Deluxe Edition.dxw │ │ ├── Daytona USA Deluxe.dxw │ │ ├── Dead Rising 2 Off The Record.dxw │ │ ├── Deadlock II.dxw │ │ ├── DeathSpank The Baconing.dxw │ │ ├── Deathtrap Dungeon.dxw │ │ ├── Deer Hunter.dxw │ │ ├── Defiance (D3D).dxw │ │ ├── Defiance.dxw │ │ ├── Deo Gratias.dxw │ │ ├── Dethkarz.dxw │ │ ├── Devastation.dxw │ │ ├── Devil Inside, the.dxw │ │ ├── Diablo MP demo.dxw │ │ ├── Diablo.dxw │ │ ├── Die Hard Nakatomi Plaza.dxw │ │ ├── Die Hard Trilogy (Game 1).dxw │ │ ├── Die Hard Trilogy (Game 2).dxw │ │ ├── Die Hard Trilogy (Game 3).dxw │ │ ├── Die Hard Trilogy (launcher).dxw │ │ ├── Digger XP.dxw │ │ ├── Dink Smallwood.dxw │ │ ├── Dinosaur Resurrection.dxw │ │ ├── Dirt Track Racing 2 Demo.dxw │ │ ├── Dirt Track Racing 2.dxw │ │ ├── Dirt Track Racing.dxw │ │ ├── Disciples II - Dark Prophecy.dxw │ │ ├── Disney Groove It.dxw │ │ ├── Divide, the.dxw │ │ ├── Divine Divinity (GOG).dxw │ │ ├── Divine Divinity.dxw │ │ ├── Dominant Species.dxw │ │ ├── Doom 3.dxw │ │ ├── Doom Shareware for Windows 95.dxw │ │ ├── Doom95.dxw │ │ ├── Dracula - The Resurrection (GOG).dxw │ │ ├── Dracula Twins.dxw │ │ ├── Dragon Dice.dxw │ │ ├── Dragon Heart.dxw │ │ ├── Drakan Order of the Flame (10th anniversary).dxw │ │ ├── Drome Racers.dxw │ │ ├── Duckman.dxw │ │ ├── Duke Nukem - Manhattan Project (D3D8).dxw │ │ ├── Duke Nukem Forever.dxw │ │ ├── Dune 2000.dxw │ │ ├── Dungeon Keeper II.dxw │ │ ├── Dungeon Lords MMXII.dxw │ │ ├── Dungeon Odyssey (Demo).dxw │ │ ├── Dweep Gold.dxw │ │ ├── Dylan Dog Horror at Luna Park.dxw │ │ ├── Earth 2150.dxw │ │ ├── Earthworm Jim 3D.dxw │ │ ├── Eat my Dust.dxw │ │ ├── Echelon.dxw │ │ ├── Ed Hunter.dxw │ │ ├── Empire Earth.dxw │ │ ├── Empire of the Ants (ITA).dxw │ │ ├── Empire of the Ants.dxw │ │ ├── End of Twilight.dxw │ │ ├── Enemy Zero.dxw │ │ ├── Esoteria.dxw │ │ ├── European Air War.dxw │ │ ├── Evil Dead Hail to the King.dxw │ │ ├── Evil Islands.dxw │ │ ├── Evolva.dxw │ │ ├── Excalibur.dxw │ │ ├── Extreme-G_2.dxw │ │ ├── F-16 Agressor.dxw │ │ ├── F-16 Fighting Falcon.dxw │ │ ├── F-16 Multirole Fighter.dxw │ │ ├── F1 Manager 2000.dxw │ │ ├── FIFA 2000.dxw │ │ ├── Fallout.dxw │ │ ├── Fatal Abyss.dxw │ │ ├── Fate.dxw │ │ ├── Faust the seven games of the soul.dxw │ │ ├── Fifa 99 (Direct3D).dxw │ │ ├── Fifa 99 (sw renderer).dxw │ │ ├── Fighting Force.dxw │ │ ├── Fin-Fin.dxw │ │ ├── Final Odyssey.dxw │ │ ├── FireCrow.dxw │ │ ├── Flying Heroes.dxw │ │ ├── Flying Saucer.dxw │ │ ├── Force 21.dxw │ │ ├── Forsaken (HW).dxw │ │ ├── Future Cop L.A.P.D..dxw │ │ ├── G-Darius.dxw │ │ ├── G-Nome.dxw │ │ ├── GP 500 (win2k obfuscated).dxw │ │ ├── GP 500.dxw │ │ ├── GTA 3.dxw │ │ ├── GTA window.dxw │ │ ├── GTA2.dxw │ │ ├── Galapagos demo.dxw │ │ ├── Galapagos.dxw │ │ ├── Garfield - Caught in the Act.dxw │ │ ├── Geneforge (Steam).dxw │ │ ├── Geneforge 2 (Steam).dxw │ │ ├── Geneforge 3 (Steam).dxw │ │ ├── Geneforge 4 (Steam).dxw │ │ ├── Geneforge.dxw │ │ ├── Genocide (ORIGINAL).dxw │ │ ├── Genocide (REMIXED VERSION).dxw │ │ ├── Gooka The Mystery of Janatris.dxw │ │ ├── Gorky 17.dxw │ │ ├── Grand Prix Legends.dxw │ │ ├── Grand Prix World.dxw │ │ ├── Grand Theft Auto 3 Vice City.dxw │ │ ├── Ground Control (sw renderer).dxw │ │ ├── Ground Control.dxw │ │ ├── Gruntz.dxw │ │ ├── Gunbound (fullscreen).dxw │ │ ├── Gunbound.dxw │ │ ├── H.E.D.Z..dxw │ │ ├── Hamsterball.dxw │ │ ├── Heart of Darkness.dxw │ │ ├── Hearts of Iron III.dxw │ │ ├── Heavy Gear.dxw │ │ ├── Hercules.dxw │ │ ├── Heroes of Might and Magic 4 Complete.dxw │ │ ├── Heroes of Might and Magic IV.dxw │ │ ├── Hesperian Wars.dxw │ │ ├── Hexen II (GDI).dxw │ │ ├── Hexen II (OpenGl).dxw │ │ ├── Hexen95.dxw │ │ ├── Hexplore.dxw │ │ ├── Hitchcock the Final Cut.dxw │ │ ├── Hitman - Codename 47.dxw │ │ ├── Hitman 2 Silent Assassin.dxw │ │ ├── Hollywood Monsters.dxw │ │ ├── Homeworld 2.dxw │ │ ├── Homeworld.dxw │ │ ├── Hoppop'n.dxw │ │ ├── Horde 2 the Citadel.dxw │ │ ├── Horde.dxw │ │ ├── Hot Chix 'n' Gear Stix (demo).dxw │ │ ├── House of the Dead 2.dxw │ │ ├── Hoyle Casino 2001.dxw │ │ ├── Hoyle Casino Empire (GDI emulation).dxw │ │ ├── Hoyle Casino Empire (fullscreen).dxw │ │ ├── Hoyle Casino Empire.dxw │ │ ├── Hundred Swords.dxw │ │ ├── Hydro Thunder.dxw │ │ ├── Hyper Crazy Climber.dxw │ │ ├── HyperBlade.dxw │ │ ├── I-War.dxw │ │ ├── Icewind Dale 2.dxw │ │ ├── Icewind Dale II.dxw │ │ ├── Icewind Dale.dxw │ │ ├── Imperialism II.dxw │ │ ├── Imperialism.dxw │ │ ├── In the Hunt.dxw │ │ ├── Incoming (GOG).dxw │ │ ├── Incoming Forces (GOG).dxw │ │ ├── Indiana Jones and the Infernal Machine.dxw │ │ ├── IndyCar Series.dxw │ │ ├── Inquisition.dxw │ │ ├── Insane.dxw │ │ ├── Intensity XS.dxw │ │ ├── International Football 2000.dxw │ │ ├── Interstate 76 Nitro Pack.dxw │ │ ├── Interstate 76.dxw │ │ ├── Jagged Alliance 2 Gold.dxw │ │ ├── Janes FA18.dxw │ │ ├── Jazz Jackrabbit 2.dxw │ │ ├── Jeff Gordon XS Racing demo.dxw │ │ ├── Jeff Wayne's - The War of the Worlds.dxw │ │ ├── Jet Moto.dxw │ │ ├── JetMoto.dxw │ │ ├── Jolly Rover.dxw │ │ ├── Jumpgate Classic.dxw │ │ ├── KA52 Team Alligator.dxw │ │ ├── KKND Xtreme.dxw │ │ ├── Kasbrik 3D.dxw │ │ ├── Killing Time.dxw │ │ ├── Kingpin Life Of Crime (intro).dxw │ │ ├── Kingpin Life Of Crime.dxw │ │ ├── Kiss Psycho Circus.dxw │ │ ├── Knight Moves.dxw │ │ ├── KnightShift.dxw │ │ ├── Knights Of Honor.dxw │ │ ├── Knights_And_Merchants (1024).dxw │ │ ├── Knights_And_Merchants (800).dxw │ │ ├── Kohan II Kings of War.dxw │ │ ├── L'Elefante a Strisce.dxw │ │ ├── LEGO Pirates.dxw │ │ ├── LEGO Star Wars - The Complete Saga.dxw │ │ ├── LEGO Star Wars.dxw │ │ ├── LEGO Stunt Rally.dxw │ │ ├── Land of the Dead.dxw │ │ ├── Lander.dxw │ │ ├── Largo Winch.dxw │ │ ├── Last Bronx.dxw │ │ ├── Last Half od Darkness.dxw │ │ ├── Layer Section.dxw │ │ ├── Legacy of Kain Soul Reaver (GOG).dxw │ │ ├── Legacy of Kain Soul Reaver 2.dxw │ │ ├── Legend of the Prophet & Assassin, the.dxw │ │ ├── Les adventures de Robby le Robot - Mission Code de la route.dxw │ │ ├── Little Big Adventure 2 (Windows patch).dxw │ │ ├── Lode Runner 2.dxw │ │ ├── Loonyland 2 CE.dxw │ │ ├── Lords of Magic Special Edition.dxw │ │ ├── Lose Your Marbles.dxw │ │ ├── Lost Valley.dxw │ │ ├── LuXiaoFeng.dxw │ │ ├── M1 Tank Platoon 2.dxw │ │ ├── MDK2.dxw │ │ ├── Machine Hunter.dxw │ │ ├── Madden NFL 08.dxw │ │ ├── Mageslayer.dxw │ │ ├── Magic & Mayhem.dxw │ │ ├── Mall Tycoon 3.dxw │ │ ├── Mall Tycoon.dxw │ │ ├── Man TT Super Bike (fake fullscreen).dxw │ │ ├── Man TT Super Bike.dxw │ │ ├── Marbles.dxw │ │ ├── Martian Gothic Unification.dxw │ │ ├── Mechcommander Gold.dxw │ │ ├── Mechwarrior 3 (high res).dxw │ │ ├── Mechwarrior 3.dxw │ │ ├── Medford Asylum.dxw │ │ ├── Men in Black.dxw │ │ ├── Mephisto Chess.dxw │ │ ├── Metal Gear Solid VR.dxw │ │ ├── Metal Gear Solid.dxw │ │ ├── Metal Knight.dxw │ │ ├── Microsoft Golf '98 trial (win).dxw │ │ ├── Microsoft Golf '98 trial.dxw │ │ ├── Microsoft Golf 1998 Edition.dxw │ │ ├── Microsoft Golf 1999 Edition.dxw │ │ ├── Microsoft Golf 2001.dxw │ │ ├── Microsoft Midtown Madness.dxw │ │ ├── Microsoft Motocross Madness 2 (emu).dxw │ │ ├── Microsoft Motocross Madness 2 trial.dxw │ │ ├── Microsoft Motocross Madness.dxw │ │ ├── Microsoft Pandora's Box.dxw │ │ ├── Microsotf Motocross Madness 2.dxw │ │ ├── Midnight GT Primary Racer.dxw │ │ ├── Mig 29 Fulcrum.dxw │ │ ├── Millennium Racer Y2K fighters.dxw │ │ ├── Minigolf Master Miniverse (demo).dxw │ │ ├── Mirror's Edge.dxw │ │ ├── Moon Tycoon.dxw │ │ ├── MoonBase Commander (640x480).dxw │ │ ├── More Aggressive.dxw │ │ ├── Moto Racer 2 (GOG sw mode).dxw │ │ ├── Moto Racer demo.dxw │ │ ├── Motocross Madness (RIP).dxw │ │ ├── Motocross Madness Trial.dxw │ │ ├── Motocross Madness.dxw │ │ ├── Mr. Driller.dxw │ │ ├── Myth III - The Wolf Age.dxw │ │ ├── Myth the Fallen Lords.dxw │ │ ├── NASCAR 2000.dxw │ │ ├── NHL 2002.dxw │ │ ├── NHL 99.dxw │ │ ├── Nascar Pinball.dxw │ │ ├── Nascar Racing 3 (3DFX).dxw │ │ ├── Nascar Racing 3.dxw │ │ ├── Nebula Fighter.dxw │ │ ├── Need 4 Speed IV High Stakes.dxw │ │ ├── Need For Speed 3.dxw │ │ ├── Need For Speed SE.dxw │ │ ├── Need for Speed 5 Porsche Unleashed.dxw │ │ ├── Need for Speed Underground 2.dxw │ │ ├── Neophyte Koplio's Story.dxw │ │ ├── NetStorm - Islands at War.dxw │ │ ├── New York Race.dxw │ │ ├── Nightmare Creatures demo (sw mode).dxw │ │ ├── Nightmare Creatures demo.dxw │ │ ├── No Respect (1.1).dxw │ │ ├── No Respect.dxw │ │ ├── Nocturne.dxw │ │ ├── Nox (GOG).dxw │ │ ├── Nox (RIP).dxw │ │ ├── Nuclear Strike (3dfx).dxw │ │ ├── O.D.T. Escape Or Die Trying (SW 640X480).dxw │ │ ├── O.D.T. Escape Or Die Trying (HW 640X480).dxw │ │ ├── O.D.T. Escape Or Die Trying.dxw │ │ ├── O.R.B. Offword Rescue Base.dxw │ │ ├── Of Light and Darkness.dxw │ │ ├── Ominous Horizons.dxw │ │ ├── One Must Fall - Battlegrounds.dxw │ │ ├── Open Ice 2 on 2 Challenge.dxw │ │ ├── Outcast 1999 CD Retail release.dxw │ │ ├── Outcast.dxw │ │ ├── Outlaws.dxw │ │ ├── Outwars.dxw │ │ ├── PBA Bowling 2 Demo.dxw │ │ ├── PC Ciclismo 2001 (HAL).dxw │ │ ├── PC Ciclismo 2001 (through RGB sw emulation).dxw │ │ ├── POD Gold (D3D).dxw │ │ ├── Paladin 3 RIP.dxw │ │ ├── Pandemonium 2 (GLIDE).dxw │ │ ├── Panzer Commander.dxw │ │ ├── Panzer Dragoon.dxw │ │ ├── Panzer General 3 Scorched Earth.dxw │ │ ├── Panzer General 3D Assault (GOG).dxw │ │ ├── Panzer General 3D Assault.dxw │ │ ├── Paradise Cracked.dxw │ │ ├── Patrician III.dxw │ │ ├── Pax Corpus.dxw │ │ ├── Phantasmagoria 2.dxw │ │ ├── Planet of the Apes.dxw │ │ ├── Populous 3 (GOG - D3D).dxw │ │ ├── Populous 3 (GOG).dxw │ │ ├── Port Royale 2.dxw │ │ ├── Portugal 1111.dxw │ │ ├── Post Mortem (CD version).dxw │ │ ├── Postal.dxw │ │ ├── Powerslide.dxw │ │ ├── Praetorians.dxw │ │ ├── Premier Manager 98.dxw │ │ ├── Prey.dxw │ │ ├── Primitive Wars.dxw │ │ ├── Prince of Persia - Warrior Within (GOG).dxw │ │ ├── Prince of Persia 3D Demo.dxw │ │ ├── Prince of Persia 3D.dxw │ │ ├── Prince of Persia The Two Thrones (GOG).dxw │ │ ├── Prison Tycoon.dxw │ │ ├── Prisoner of War.dxw │ │ ├── Project Eden.dxw │ │ ├── Project IGI.dxw │ │ ├── Psychoballs.dxw │ │ ├── Puma World Football.dxw │ │ ├── Puyo Puyo Sun.dxw │ │ ├── Puzzle Agent Nelson Tethers.dxw │ │ ├── Quake (OpenGL 3DFX).dxw │ │ ├── Quake (win).dxw │ │ ├── Queen of Heart 98.dxw │ │ ├── RHEM.dxw │ │ ├── Railroad Tycoon II.dxw │ │ ├── Rapanui.dxw │ │ ├── Rayman 2 (GOG).dxw │ │ ├── Rayman 2 Demo.dxw │ │ ├── Re-Volt.dxw │ │ ├── Reah.dxw │ │ ├── Real War Air Land Sea.dxw │ │ ├── Reap, the.dxw │ │ ├── Recoil.dxw │ │ ├── Requiem Avenging Angel (D3D).dxw │ │ ├── Requiem Avenging Angel (software).dxw │ │ ├── Resident Evil (sw mode).dxw │ │ ├── Restricted Area.dxw │ │ ├── Return Fire 2 (OpenGL).dxw │ │ ├── Return Fire 2 (SW).dxw │ │ ├── Return to Castle Wolfenstein.dxw │ │ ├── Rift Space.dxw │ │ ├── Risk II (Hasbro).dxw │ │ ├── Rites of War Demo.dxw │ │ ├── Road Rash.dxw │ │ ├── Robin Hood - The Legend of Sherwood (GOG).dxw │ │ ├── RoboRumble (dx5).dxw │ │ ├── RoboRumble (sw).dxw │ │ ├── Robocop 2D 2.dxw │ │ ├── Robocop 2D.dxw │ │ ├── Robocop.dxw │ │ ├── Rollcage (3DFX).dxw │ │ ├── Rollcage (D3D).dxw │ │ ├── Rollcage 2 (D3D).dxw │ │ ├── RollerCoaster Tycoon 2 demo.dxw │ │ ├── RollerCoaster Tycoon 2.dxw │ │ ├── RollerCoaster Tycoon 3.dxw │ │ ├── RollerCoaster Tycoon Deluxe.dxw │ │ ├── RollerCoaster Tycoon.dxw │ │ ├── Runaway.dxw │ │ ├── Rune War.dxw │ │ ├── Rune.dxw │ │ ├── SPWaW 2016.dxw │ │ ├── STCC Swedish TouringCar Championship.dxw │ │ ├── Scrapland.dxw │ │ ├── Settlers 3, the.dxw │ │ ├── Settlers 4, the, with NVIDIA or VirtualBox.dxw │ │ ├── Shadow Watch.dxw │ │ ├── Sheep Dog'n Wolf.dxw │ │ ├── Sherlock Holmes - Mistery of the Mummy (steam).dxw │ │ ├── Sherlock Holmes The Mystery of The Mummy demo.dxw │ │ ├── ShipWreckers demo.dxw │ │ ├── Shogo Mobile Armor Division.dxw │ │ ├── Sid Meier's Alpha Centauri (GOG).dxw │ │ ├── Sid Meier's Civilization III Complete.dxw │ │ ├── Sid Meiers SimGolf CLASS.dxw │ │ ├── Sid Meyer's Gettysburg Demo.dxw │ │ ├── Silent Hill 2 Director's Cut.dxw │ │ ├── Silent Hunter III.dxw │ │ ├── Silver.dxw │ │ ├── SimCity 3000.dxw │ │ ├── Slam Tilt.dxw │ │ ├── Slave Zero.dxw │ │ ├── Snowboard Racer.dxw │ │ ├── Snowmobile Racing.dxw │ │ ├── Space Hulk.dxw │ │ ├── Space Rangers.dxw │ │ ├── Spearhead.dxw │ │ ├── SpellForce GOLD Edition.dxw │ │ ├── Spike the Hedgehog.dxw │ │ ├── Spirit Warrior.dxw │ │ ├── Sports Car GT Demo.dxw │ │ ├── Sports Car GT.dxw │ │ ├── St. Row the Third (DX11).dxw │ │ ├── St. Row the Third (DX9).dxw │ │ ├── Stahlfabrik.dxw │ │ ├── Star Defender 1.dxw │ │ ├── Star Defender 2.dxw │ │ ├── Star Trek Armada.dxw │ │ ├── Star Trek Birth of the Federation.dxw │ │ ├── Star Trek Generations.dxw │ │ ├── Star Trek Hidden Evil.dxw │ │ ├── Star Trek Klingon Academy.dxw │ │ ├── Star Trek Starfleet Command.dxw │ │ ├── Star Wars Episode I Racer (emulated).dxw │ │ ├── Star Wars Episode I Racer.dxw │ │ ├── Star Wars Jedi Knight II (multiplayer).dxw │ │ ├── Star Wars Jedi Knight II (singleplayer).dxw │ │ ├── Star Wars Phantom Menace.dxw │ │ ├── Star Wars Rogue Squadron 3D.dxw │ │ ├── Star Wars Shadow of the Empire (DEMO).dxw │ │ ├── Star Wars Shadow of the Empire.dxw │ │ ├── Star Wars Tie Fighter (virtual joystick).dxw │ │ ├── Star Wars Tie Fighter.dxw │ │ ├── Star Wars X-Wing Alliance (GOG).dxw │ │ ├── Star Wars X-Wing Alliance.dxw │ │ ├── Star Wars X-Wing vs. Tie-Fighter (GOG).dxw │ │ ├── StarCraft.dxw │ │ ├── Starfleet Academy (d3d).dxw │ │ ├── Starfleet Academy (sw).dxw │ │ ├── Starsiege - Tribes.dxw │ │ ├── State of Emergency.dxw │ │ ├── State of War Warmonger.dxw │ │ ├── Steel Saviour demo (T-Zwei).dxw │ │ ├── Steel Saviour.dxw │ │ ├── Still Life (GOG).dxw │ │ ├── Stratego.dxw │ │ ├── Street Fighters Zero.dxw │ │ ├── Street Wars.dxw │ │ ├── Streets of Sim City (2000 re-release, 3DFX).dxw │ │ ├── Strength & Honour.dxw │ │ ├── Stronghold Crusader HD.dxw │ │ ├── Stronghold Crusader.dxw │ │ ├── Sub Command.dxw │ │ ├── SubCulture (3DFX).dxw │ │ ├── SubCulture (D3D).dxw │ │ ├── SubCulture (sw).dxw │ │ ├── Subspace the Captain's Chair.dxw │ │ ├── Summoner, the.dxw │ │ ├── Super Puzzle Fighter 2 Turbo.dxw │ │ ├── Super Real Mahjong P7.dxw │ │ ├── SuperBike 2000.dxw │ │ ├── SuperChix'76 (demo).dxw │ │ ├── Swat 3 (GOG).dxw │ │ ├── Swat 3.dxw │ │ ├── Syberia 2.dxw │ │ ├── Syberia.dxw │ │ ├── TOCA Touring Car Championship.dxw │ │ ├── Tails Gear.dxw │ │ ├── Taito Legends 2.dxw │ │ ├── Take no Prisoners.dxw │ │ ├── Talis Gear.dxw │ │ ├── Tanktics.dxw │ │ ├── Tarzan Action Game.dxw │ │ ├── Taz Wanted.dxw │ │ ├── Tenka.dxw │ │ ├── Tetris Worlds.dxw │ │ ├── The Creed (SW DEMO).dxw │ │ ├── The Creed.dxw │ │ ├── The Hobbit(TM) Demo.dxw │ │ ├── The Hobbit(TM).dxw │ │ ├── The Hulk Demo.dxw │ │ ├── The Mummy.dxw │ │ ├── The Sting!.dxw │ │ ├── The Thing.dxw │ │ ├── The Watchmaker.dxw │ │ ├── The Westerner.dxw │ │ ├── The Wonderful End of the World (Steam demo).dxw │ │ ├── The Wonderful End of the World.dxw │ │ ├── Theme Hospital.dxw │ │ ├── Theme Park World.dxw │ │ ├── Theocracy.dxw │ │ ├── Theseus.dxw │ │ ├── Thief the Dark Project GOLD (GOG).dxw │ │ ├── Thief the Dark Project GOLD.dxw │ │ ├── Thorgal.dxw │ │ ├── TieFighter 95.dxw │ │ ├── Tiger Woods PGA TOUR 08 Demo.dxw │ │ ├── Titanic.dxw │ │ ├── Tlon - a misty story.dxw │ │ ├── Tomb Raider - Anniversary Demo.dxw │ │ ├── Tomb Raider - Underworld.dxw │ │ ├── Tomb Raider III (HW acceleration).dxw │ │ ├── Tomb Raider III (SW emulation).dxw │ │ ├── Tomb Raider III.dxw │ │ ├── Tomb Raider Underworld.dxw │ │ ├── Tone Rebellion Leviathan.dxw │ │ ├── Tonic Trouble.dxw │ │ ├── Tony Hawk's Pro Skater 3.dxw │ │ ├── Total Annihilation Kingdoms.dxw │ │ ├── Total Annihilation.dxw │ │ ├── Total Immersion Racing.dxw │ │ ├── Total Soccer 2000 (3DFX).dxw │ │ ├── Total Soccer 2000 (DirectX).dxw │ │ ├── Totò Sapore e il magico sapore della pizza.dxw │ │ ├── Toy Factory.dxw │ │ ├── Trials2 - Second Edition.dxw │ │ ├── TrickStyle (D3D).dxw │ │ ├── Tropico Paradise Island.dxw │ │ ├── Tungusskiy Meteorit.dxw │ │ ├── Typing of the Dead, the.dxw │ │ ├── Ultim@te Race Pro.dxw │ │ ├── Ultimate Soccer Manager 98.dxw │ │ ├── Ultimate Spiderman.dxw │ │ ├── Unreal Tournament.dxw │ │ ├── Unreal.dxw │ │ ├── Urban Chaos.dxw │ │ ├── V-Rally 2 Expert Edition.dxw │ │ ├── V-Rally 3.dxw │ │ ├── V2000.dxw │ │ ├── Vangers.dxw │ │ ├── Viper Racing.dxw │ │ ├── Virtua Cop 2.dxw │ │ ├── Virtua Cop.dxw │ │ ├── Virtua Fighter 2.dxw │ │ ├── Virtua Fighter PC.dxw │ │ ├── Virtua Fighter.dxw │ │ ├── Vital Device.dxw │ │ ├── Wacky Races.dxw │ │ ├── WarWind.dxw │ │ ├── Warcraft 2 Battlenet Ed.dxw │ │ ├── Warcraft Adventures - Lord Of The Clans.dxw │ │ ├── Wargames.dxw │ │ ├── Wargasm.dxw │ │ ├── Warhammer - Shadow of the Horned Rat (x2).dxw │ │ ├── Warhammer - Shadow of the Horned Rat.dxw │ │ ├── Warhammer 40K Chaos Gate.dxw │ │ ├── Warhammer 40K Final Liberation.dxw │ │ ├── Warhammer 40K Rites of War.dxw │ │ ├── Warhammer Dark Omen.dxw │ │ ├── Warlords 3.dxw │ │ ├── Warlords Battlecry 2.dxw │ │ ├── Warlords Battlecry 3 (GOG).dxw │ │ ├── Warlords Battlecry III.dxw │ │ ├── Warpath.dxw │ │ ├── Warrior Kings.dxw │ │ ├── Wars & Warriors Joan of Arc.dxw │ │ ├── Warwind 2.dxw │ │ ├── Weird War.dxw │ │ ├── Wetrix.dxw │ │ ├── Whiteout.dxw │ │ ├── Wildfire.dxw │ │ ├── Wind Fantasy SP.dxw │ │ ├── Wizardry 8 (3DfX).dxw │ │ ├── Wizardry Chronicles V0984b - English.exe.dxw │ │ ├── Wizardry Chronicles.dxw │ │ ├── World Racing (Demo) MX.dxw │ │ ├── World Racing (Demo).dxw │ │ ├── Worms 2 (GOG).dxw │ │ ├── Worms 2.dxw │ │ ├── Worms Pinball.dxw │ │ ├── Wrestling MPire Remix.dxw │ │ ├── X - Beyond the Frontier (dx6).dxw │ │ ├── X - Beyond the Frontier.dxw │ │ ├── X-COM Interceptor.dxw │ │ ├── X-Files, the.dxw │ │ ├── XENIC.dxw │ │ ├── XIII.dxw │ │ ├── Xwing vs. Tie-Fighter demo.dxw │ │ ├── Yu No (english patch).dxw │ │ ├── ZPC Zero Population Count.dxw │ │ ├── Zanzarah The Hidden Portal.dxw │ │ ├── Zenfar.dxw │ │ ├── Zero Critical.dxw │ │ ├── Zero Divide.dxw │ │ ├── Zero Zone.dxw │ │ ├── Zoo Tycoon.dxw │ │ ├── ZugyA.dxw │ │ ├── Zulu Assault.dxw │ │ ├── eXpendable.dxw │ │ └── mdk 95.dxw │ ├── help/ │ │ └── placeholder.txt │ └── readme-relnotes.txt ├── dll/ │ ├── Inject.cpp │ ├── advapi.cpp │ ├── avifile.cpp │ ├── comctl32.cpp │ ├── comdlg32.cpp │ ├── cpulimit.cpp │ ├── d3d10.cpp │ ├── d3dtexture.cpp │ ├── ddblit.cpp │ ├── ddcreates.cpp │ ├── ddraw.cpp │ ├── ddrawex.cpp │ ├── ddshot.cpp │ ├── ddtexture.cpp │ ├── dibdump.cpp │ ├── dinput.cpp │ ├── dsound.cpp │ ├── dwhide.cpp │ ├── dxdds.h │ ├── dxdiaghook.cpp │ ├── dxemublt.cpp │ ├── dxhelper.cpp │ ├── dxhelper.h │ ├── dxhook.cpp │ ├── dxhook.h │ ├── dxmapping.cpp │ ├── dxwcapsdb.cpp │ ├── dxwcore.cpp │ ├── dxwcore.hpp │ ├── dxwnd.aps │ ├── dxwnd.cpp │ ├── dxwnd.def │ ├── dxwnd.dll.manifest │ ├── dxwnd.rc │ ├── dxwnd.suo │ ├── dxwnd.vs2008.sln │ ├── dxwnd.vs2008.suo │ ├── dxwnd.vs2008.vcproj │ ├── dxwsstack.cpp │ ├── dxwwstack.cpp │ ├── emulateddc.cpp │ ├── fontstack.cpp │ ├── gdi32.cpp │ ├── gdiblt.cpp │ ├── glhook.h │ ├── glide.cpp │ ├── glidehook.h │ ├── hd3d.cpp │ ├── hd3d.doc.hpp │ ├── hd3d.h │ ├── hd3d7.cpp │ ├── hd3d8.cpp │ ├── hd3d9.cpp │ ├── hddraw.h │ ├── hdinput.cpp │ ├── hdinput.h │ ├── hexdump.cpp │ ├── hint.cpp │ ├── hotpatch.cpp │ ├── iatpatch.cpp │ ├── imagehlp.cpp │ ├── imelib.cpp │ ├── kernel32.cpp │ ├── libMinHook.x86.lib │ ├── logall.h │ ├── mincaps.cpp │ ├── msghook.cpp │ ├── msims32.cpp │ ├── msvfw.cpp │ ├── msvfwhook.h │ ├── ole32.cpp │ ├── opengl.cpp │ ├── queryint.cpp │ ├── rad.h │ ├── resource.h │ ├── shareddc.cpp │ ├── shareddc.hpp │ ├── smack.cpp │ ├── smack.h │ ├── stb_dxt.h │ ├── supmodes.cpp │ ├── syslibs.h │ ├── toggle_fs.cpp │ ├── user32.cpp │ ├── virtualdc.cpp │ ├── walkmod.cpp │ ├── wing32.cpp │ ├── winmm.cpp │ ├── winproc.cpp │ └── wintrust.cpp ├── filter/ │ ├── bilinear16_555.cpp │ ├── bilinear16_565.cpp │ ├── bilinear32.cpp │ ├── filter.def │ ├── filter.sln │ └── filter.vcproj ├── host/ │ ├── CDragEdit.cpp │ ├── CDragEdit.h │ ├── CGlobalSettings.cpp │ ├── CGlobalSettings.h │ ├── CoolUtils.cpp │ ├── CoolUtils.h │ ├── CppUACSelfElevation.cpp │ ├── DesktopDialog.cpp │ ├── DesktopDialog.h │ ├── KillProc.cpp │ ├── KillProcTree.cpp │ ├── MainFrm.cpp │ ├── MainFrm.h │ ├── MessageBox.cpp │ ├── OutTrace.cpp │ ├── PaletteDialog.cpp │ ├── PaletteDialog.h │ ├── Resource.h │ ├── ShimsDialog.cpp │ ├── ShimsDialog.h │ ├── SpecialEdit.cpp │ ├── SpecialEdit.h │ ├── StatusDialog.cpp │ ├── StatusDialog.h │ ├── StdAfx.cpp │ ├── StdAfx.h │ ├── SystemTray.cpp │ ├── SystemTray.h │ ├── TabColor.cpp │ ├── TabColor.h │ ├── TabCompat.cpp │ ├── TabCompat.h │ ├── TabDebug.cpp │ ├── TabDebug.h │ ├── TabDirect3D.cpp │ ├── TabDirect3D.h │ ├── TabDirectX.cpp │ ├── TabDirectX.h │ ├── TabDirectX2.cpp │ ├── TabDirectX2.h │ ├── TabHook.cpp │ ├── TabHook.h │ ├── TabInput.cpp │ ├── TabInput.h │ ├── TabLogs.cpp │ ├── TabLogs.h │ ├── TabNotes.cpp │ ├── TabNotes.h │ ├── TabOpenGL.cpp │ ├── TabOpenGL.h │ ├── TabProgram.cpp │ ├── TabProgram.h │ ├── TabRegistry.cpp │ ├── TabRegistry.h │ ├── TabSysLibs.cpp │ ├── TabSysLibs.h │ ├── TabTiming.cpp │ ├── TabTiming.h │ ├── TabWindow.cpp │ ├── TabWindow.h │ ├── TargetDlg.cpp │ ├── TargetDlg.h │ ├── TimeSliderDialog.h │ ├── TimeSliderDlg.cpp │ ├── TlHelp32.h │ ├── VJoyDialog.cpp │ ├── VJoyDialog.h │ ├── ViewFlagsDialog.cpp │ ├── ViewFlagsDialog.h │ ├── bmpext.h │ ├── cdib.cpp │ ├── cdib.h │ ├── dib.cpp │ ├── dxTabCtrl.cpp │ ├── dxTabCtrl.h │ ├── dxelevate.cpp │ ├── dxwnd.manifest │ ├── dxwndhost.aps │ ├── dxwndhost.cpp │ ├── dxwndhost.h │ ├── dxwndhost.rc │ ├── dxwndhost.vs2008.sln │ ├── dxwndhost.vs2008.suo │ ├── dxwndhost.vs2008.vcproj │ ├── dxwndhostDoc.cpp │ ├── dxwndhostDoc.h │ ├── dxwndhostView.cpp │ ├── dxwndhostView.h │ ├── findwindow.cpp │ ├── getfname.cpp │ ├── host.aps │ ├── host.rc │ ├── res/ │ │ └── dxwndhost.rc2 │ ├── resource │ └── resource1.h ├── locale/ │ ├── cn/ │ │ ├── Resources_CN.rc │ │ ├── Resources_Cn.sln │ │ ├── Resources_Cn.suo │ │ └── Resources_Cn.vcproj │ ├── en/ │ │ ├── Resources_EN.rc │ │ ├── Resources_En.sln │ │ ├── Resources_En.suo │ │ └── Resources_En.vcproj │ ├── it/ │ │ ├── Resources_IT.rc │ │ ├── Resources_It.sln │ │ ├── Resources_It.suo │ │ └── Resources_It.vcproj │ └── ru/ │ ├── Resources_RU.rc │ ├── Resources_Ru.sln │ ├── Resources_Ru.suo │ └── Resources_Ru.vcproj ├── proxy/ │ ├── d3d8.cpp │ ├── d3d8.def │ ├── d3d8.sln │ ├── d3d8.suo │ ├── d3d8.vcproj │ ├── d3d9.cpp │ ├── d3d9.def │ ├── d3d9.sln │ ├── d3d9.suo │ ├── d3d9.txt │ ├── d3d9.vcproj │ ├── ddraw.cpp │ ├── ddraw.def │ ├── ddraw.sln │ ├── ddraw.suo │ ├── ddraw.vcproj │ ├── init.cpp │ ├── wing32.cpp │ ├── wing32.def │ ├── wing32.sln │ ├── wing32.suo │ └── wing32.vcproj └── wing/ ├── wing32.cpp ├── wing32.def ├── wing32.sln ├── wing32.suo └── wing32.vcproj ================================================ FILE CONTENTS ================================================ ================================================ FILE: .gitattributes ================================================ *.dll filter=lfs diff=lfs merge=lfs -text *.exe filter=lfs diff=lfs merge=lfs -text ================================================ FILE: Disasm201/Disasm.bpr ================================================ [Version Info] IncludeVerInfo=0 AutoIncBuild=0 MajorVer=1 MinorVer=0 Release=0 Build=0 Debug=0 PreRelease=0 Special=0 Private=0 DLL=0 Locale=1033 CodePage=1252 [Version Info Keys] CompanyName= FileDescription= FileVersion=1.0.0.0 InternalName= LegalCopyright= LegalTrademarks= OriginalFilename= ProductName= ProductVersion=1.0.0.0 Comments= [HistoryLists\hlIncludePath] Count=1 Item0=$(BCB)\include;$(BCB)\include\vcl [HistoryLists\hlDebugSourcePath] Count=1 Item0=$(BCB)\source\vcl [HistoryLists\hlConditionals] Count=1 Item0=_DEBUG [Debugging] DebugSourceDirs=$(BCB)\source\vcl [Parameters] RunParams= HostApplication= RemoteHost= RemotePath= RemoteDebug=0 [Compiler] ShowInfoMsgs=0 LinkDebugVcl=0 LinkCGLIB=0 ================================================ FILE: Disasm201/Disasm.c ================================================ //////////////////////////////////////////////////////////////////////////////// // // // OllyDbg Disassembling Engine v2.01 // // // // Copyright (c) 2007-2013 Oleh Yuschuk, ollydbg@t-online.de // // // // This code is part of the OllyDbg Disassembler v2.01 // // // // Disassembling engine 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 3 of the License, or (at // // your option) any later version. // // // // This code 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, see . // // // //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// // // // This is a fast disassembler that can be used to determine the length of // // the binary 80x86 32-bit command and its attributes, to convert it to the // // human-readable text form, highlight its operands, and create hexadecimal // // dump of the binary command. // // // // It is a stripped down version of the disassembler used by OllyDbg 2.01. // // It can't analyse and comment the contents of the operands, or predict the // // results of the command execution. Analysis-dependent features are not // // included, too. Most other features are kept. // // // // Disassembler supports integer, FPU, MMX, 3DNow, SSE1-SSE4.1 and AVX // // instructions. 64-bit mode, AVX2, FMA and XOP are not (yet) supported. // // // // This code can be compiled either in ASCII or UNICODE mode. It is reentrant // // (thread-safe, feature not available in the original OllyDbg code). // // // // Typical operation speed on 3-GHz Phenom II in MASM mode is: // // // // Command length and info: 130 ns/command (7,700,000 commands/s) // // Disassembly: 290 ns/command (3,400,000 commands/s) // // Disassembly, dump, highlighting: 350 ns/command (2,800,000 commands/s) // // // //////////////////////////////////////////////////////////////////////////////// #include #include #include #include #include #pragma hdrstop #include "disasm.h" //////////////////////////////////////////////////////////////////////////////// //////////////////////////////// SYMBOLIC NAMES //////////////////////////////// // 8-bit register names, sorted by 'natural' index (as understood by CPU, not // in the alphabetical order as some 'programmers' prefer). const tchar *regname8[NREG] = { T("AL"), T("CL"), T("DL"), T("BL"), T("AH"), T("CH"), T("DH"), T("BH") }; // 16-bit register names. const tchar *regname16[NREG] = { T("AX"), T("CX"), T("DX"), T("BX"), T("SP"), T("BP"), T("SI"), T("DI") }; // 32-bit register names. const tchar *regname32[NREG] = { T("EAX"), T("ECX"), T("EDX"), T("EBX"), T("ESP"), T("EBP"), T("ESI"), T("EDI") }; // Names of segment registers. const tchar *segname[NREG] = { T("ES"), T("CS"), T("SS"), T("DS"), T("FS"), T("GS"), T("SEG6:"), T("SEG7:") }; // Names of FPU registers, classical form. const tchar *fpulong[NREG] = { T("ST(0)"), T("ST(1)"), T("ST(2)"), T("ST(3)"), T("ST(4)"), T("ST(5)"), T("ST(6)"), T("ST(7)") }; // Names of FPU registers, short form. const tchar *fpushort[NREG] = { T("ST0"), T("ST1"), T("ST2"), T("ST3"), T("ST4"), T("ST5"), T("ST6"), T("ST7") }; // Names of MMX/3DNow! registers. const tchar *mmxname[NREG] = { T("MM0"), T("MM1"), T("MM2"), T("MM3"), T("MM4"), T("MM5"), T("MM6"), T("MM7") }; // Names of 128-bit SSE registers. const tchar *sse128[NREG] = { T("XMM0"), T("XMM1"), T("XMM2"), T("XMM3"), T("XMM4"), T("XMM5"), T("XMM6"), T("XMM7") }; // Names of 256-bit SSE registers. const tchar *sse256[NREG] = { T("YMM0"), T("YMM1"), T("YMM2"), T("YMM3"), T("YMM4"), T("YMM5"), T("YMM6"), T("YMM7") }; // Names of control registers. const tchar *crname[NREG] = { T("CR0"), T("CR1"), T("CR2"), T("CR3"), T("CR4"), T("CR5"), T("CR6"), T("CR7") }; // Names of debug registers. const tchar *drname[NREG] = { T("DR0"), T("DR1"), T("DR2"), T("DR3"), T("DR4"), T("DR5"), T("DR6"), T("DR7") }; // Declarations for data types. Depending on ssesizemode, name of 16-byte data // type (DQWORD) may be changed to XMMWORD and that of 32-bit type (QQWORD) to // YMMWORD. const tchar *sizename[33] = { NULL, T("BYTE"), T("WORD"), NULL, T("DWORD"), NULL, T("FWORD"), NULL, T("QWORD"), NULL, T("TBYTE"), NULL, NULL, NULL, NULL, NULL, T("DQWORD"), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, T("QQWORD") }; // Keywords for immediate data. HLA uses sizename[] instead of sizekey[]. const tchar *sizekey[33] = { NULL, T("DB"), T("DW"), NULL, T("DD"), NULL, T("DF"), NULL, T("DQ"), NULL, T("DT"), NULL, NULL, NULL, NULL, NULL, T("DDQ"), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, T("DQQ") }; // Keywords for immediate data in AT&T format. const tchar *sizeatt[33] = { NULL, T(".BYTE"), T(".WORD"), NULL, T(".LONG"), NULL, T(".FWORD"), NULL, T(".QUAD"), NULL, T(".TBYTE"), NULL, NULL, NULL, NULL, NULL, T(".DQUAD"), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, T(".QQUAD") }; // Comparison predicates in SSE [0..7] and VEX commands [0..31]. const tchar *ssepredicate[32] = { T("EQ"), T("LT"), T("LE"), T("UNORD"), T("NEQ"), T("NLT"), T("NLE"), T("ORD"), T("EQ_UQ"), T("NGE"), T("NGT"), T("FALSE"), T("NEQ_OQ"), T("GE"), T("GT"), T("TRUE"), T("EQ_OS"), T("LT_OQ"), T("LE_OQ"), T("UNORD_S"), T("NEQ_US"), T("NLT_UQ"), T("NLE_UQ"), T("ORD_S"), T("EQ_US"), T("NGE_UQ"), T("NGT_UQ"), T("FALSE_OS"), T("NEQ_OS"), T("GE_OQ"), T("GT_OQ"), T("TRUE_US") }; //////////////////////////////////////////////////////////////////////////////// ///////////////////////////////// DISASSEMBLER ///////////////////////////////// typedef struct t_imdata { // Intermediate disassembler data t_disasm *da; // Result of disassembly ulong damode; // Disassembling mode, set of DA_xxx t_config *config; // Disassembler configuration int (*decodeaddress)(tchar *s,ulong addr); ulong prefixlist; // List of command's prefixes, PF_xxx int ssesize; // Size of SSE operands (16/32 bytes) ulong immsize1; // Size of first immediate constant ulong immsize2; // Size of second immediate constant ulong mainsize; // Size of command with prefixes ulong modsize; // Size of ModRegRM/SIB bytes ulong dispsize; // Size of address offset int usesdatasize; // May have data size prefix int usesaddrsize; // May have address size prefix int usessegment; // May have segment override prefix } t_imdata; static t_config defconfig = { // Default disassembler configuration DAMODE_MASM, // Main style, one of DAMODE_xxx NUM_STD|NUM_DECIMAL, // Constant part of address, NUM_xxx NUM_STD|NUM_LONG, // Jump/call destination, NUM_xxx NUM_STD|NUM_LONG, // Binary constants, NUM_xxx NUM_STD|NUM_DECIMAL, // Numeric constants, NUM_xxx 0, // Force lowercase display 0, // Tab between mnemonic and arguments 0, // Extra space between arguments 0, // Use RET instead of RETN 1, // Use short form of string commands 0, // Display default segments in listing 1, // Always show memory size 0, // Show NEAR modifiers 1, // How to decode size of SSE operands 0, // How to decode jump hints 0, // How to decode size-sensitive mnemonics 0, // How to decode top of FPU stack 0 // Highlight operands }; static t_config attconfig = { // AT&T disassembler configuration DAMODE_ATT, // Main style, one of DAMODE_xxx NUM_X|NUM_DECIMAL, // Constant part of address, NUM_xxx NUM_X|NUM_LONG, // Jump/call destination, NUM_xxx NUM_X|NUM_LONG, // Binary constants, NUM_xxx NUM_X|NUM_DECIMAL, // Numeric constants, NUM_xxx 1, // Force lowercase display 1, // Tab between mnemonic and arguments 1, // Extra space between arguments 0, // Use RET instead of RETN 1, // Use short form of string commands 0, // Display default segments in listing 0, // Always show memory size 0, // Show NEAR modifiers 1, // How to decode size of SSE operands 0, // How to decode jump hints 0, // How to decode size-sensitive mnemonics 0, // How to decode top of FPU stack 0 // Highlight operands }; //////////////////////////////////////////////////////////////////////////////// ////////////////////////////// SERVICE FUNCTIONS /////////////////////////////// static tchar hexcharu[16] = { // Nibble-to-hexdigit table, uppercase T('0'), T('1'), T('2'), T('3'), T('4'), T('5'), T('6'), T('7'), T('8'), T('9'), T('A'), T('B'), T('C'), T('D'), T('E'), T('F') }; static tchar hexcharl[16] = { // Nibble-to-hexdigit table, lowercase T('0'), T('1'), T('2'), T('3'), T('4'), T('5'), T('6'), T('7'), T('8'), T('9'), T('a'), T('b'), T('c'), T('d'), T('e'), T('f') }; static tchar cvtlower[256]; // Copies at most n-1 wide characters from src to dest and assures that dest is // null-terminated. Slow but reliable. Returns number of copied characters, not // including the terminal null. Attention, does not check that input parameters // are correct! static int Tstrcopy(tchar *dest,int n,const tchar *src) { int i; if (n<=0) return 0; for (i=0; i0) { d=*code++; s[n++]=hexchar[(d>>4) & 0x0F]; s[n++]=hexchar[d & 0x0F]; ncode--; }; s[n]=T('\0'); return n; }; // Converts unsigned 1-, 2- or 4-byte number to hexadecimal text, according to // the specified mode and type of argument. String s must be at least SHORTNAME // characters long. Returns length of resulting text in characters, not // including the terminal zero. static int Hexprint(int size,tchar *s,ulong u,const t_imdata *im,ulong arg) { int i,k,ndigit,lastdigit; ulong nummode,mod; tchar buf[SHORTNAME]; static tchar *hexchar; if (size==1) u&=0x000000FF; // 8-bit number else if (size==2) u&=0x0000FFFF; // 16-bit number else size=4; // Correct possible errors mod=arg & B_MODMASK; if (mod==B_ADDR) nummode=im->config->memmode; else if (mod==B_JMPCALL || mod==B_JMPCALLFAR) nummode=im->config->jmpmode; else if (mod==B_BINARY) nummode=im->config->binconstmode; else nummode=im->config->constmode; hexchar=(im->config->lowercase?hexcharl:hexcharu); buf[SHORTNAME-1]=T('\0'); k=SHORTNAME-1; if ((nummode & NUM_DECIMAL)!=0 && (mod==B_SIGNED || mod==B_UNSIGNED || (u=10) buf[--k]=T('.'); // Period marks decimals in OllyDbg do { buf[--k]=hexchar[u%10]; u/=10; } while (u!=0); } else { // Decode as hexadecimal number. if (nummode & NUM_LONG) // 2, 4 or 8 significant digits ndigit=size*2; else ndigit=1; if ((nummode & NUM_STYLE)==NUM_STD) buf[--k]=T('h'); for (i=0; i>4) & 0x0FFFFFFF; }; if ((nummode & NUM_STYLE)==NUM_X) { buf[--k]=T('x'); buf[--k]=T('0'); } else if (lastdigit>=10 && ((nummode & NUM_STYLE)!=NUM_OLLY || i<(mod==B_BINARY?size*2:8))) buf[--k]=T('0'); ; }; return Tstrcopy(s,SHORTNAME,buf+k); }; //////////////////////////////////////////////////////////////////////////////// ///////////////////////// INTERNAL DISASSEMBLER TABLES ///////////////////////// t_chain *cmdchain; // Commands sorted by first CMDMASK bits t_modrm modrm16[256]; // 16-bit ModRM decodings t_modrm modrm32[256]; // 32-bit ModRM decodings without SIB t_modrm sib0[256]; // ModRM-SIB decodings with Mod=00 t_modrm sib1[256]; // ModRM-SIB decodings with Mod=01 t_modrm sib2[256]; // ModRM-SIB decodings with Mod=10 // Initializes disassembler tables. Call this function once during startup. // Returns 0 on success and -1 if initialization was unsuccessful. In the last // case, continuation is not possible and program must terminate. int Preparedisasm(void) { int n,c,reg,sreg,scale,nchain; ulong u,code,mask; const t_bincmd *pcmd; t_chain *pchain; t_modrm *pmrm,*psib; if (cmdchain!=NULL) return 0; // Already initialized // Sort command descriptors into command chains by first CMDMASK bits. cmdchain=(t_chain *)malloc(NCHAIN*sizeof(t_chain)); if (cmdchain==NULL) // Low memory return -1; memset(cmdchain,0,NCHAIN*sizeof(t_chain)); nchain=CMDMASK+1; // Number of command chains for (pcmd=bincmd; pcmd->length!=0; pcmd++) { if ((pcmd->cmdtype & D_CMDTYPE)==D_PSEUDO) continue; // Pseudocommand, for search models only code=pcmd->code; mask=pcmd->mask & CMDMASK; for (u=0; upcmd!=NULL && pchain->pnext!=NULL) pchain=pchain->pnext; // Walk chain to the end if (pchain->pcmd==NULL) pchain->pcmd=pcmd; else if (nchain>=NCHAIN) return -1; // Too many commands else { pchain->pnext=cmdchain+nchain; // Prolongate chain pchain=pchain->pnext; pchain->pcmd=pcmd; nchain++; }; }; }; // Prepare 16-bit ModRM decodings. memset(modrm16,0,sizeof(modrm16)); for (c=0x00,pmrm=modrm16; c<=0xFF; c++,pmrm++) { reg=c & 0x07; if ((c & 0xC0)==0xC0) { // Register in ModRM. pmrm->size=1; pmrm->features=0; // Register, its type as yet unknown pmrm->reg=reg; pmrm->defseg=SEG_UNDEF; pmrm->basereg=REG_UNDEF; } else if ((c & 0xC7)==0x06) { // Special case of immediate address. pmrm->size=3; pmrm->dispsize=2; pmrm->features=OP_MEMORY|OP_OPCONST|OP_ADDR16; pmrm->reg=REG_UNDEF; pmrm->defseg=SEG_DS; pmrm->basereg=REG_UNDEF; } else { pmrm->features=OP_MEMORY|OP_INDEXED|OP_ADDR16; if ((c & 0xC0)==0x40) { pmrm->dispsize=1; pmrm->features|=OP_OPCONST; } else if ((c & 0xC0)==0x80) { pmrm->dispsize=2; pmrm->features|=OP_OPCONST; }; pmrm->size=pmrm->dispsize+1; pmrm->reg=REG_UNDEF; switch (reg) { case 0: pmrm->scale[REG_EBX]=1; pmrm->scale[REG_ESI]=1; pmrm->defseg=SEG_DS; tstrcpy(pmrm->ardec,T("BX+SI")); tstrcpy(pmrm->aratt,T("%BX,%SI")); pmrm->aregs=(1<basereg=REG_ESI; break; case 1: pmrm->scale[REG_EBX]=1; pmrm->scale[REG_EDI]=1; pmrm->defseg=SEG_DS; tstrcpy(pmrm->ardec,T("BX+DI")); tstrcpy(pmrm->aratt,T("%BX,%DI")); pmrm->aregs=(1<basereg=REG_EDI; break; case 2: pmrm->scale[REG_EBP]=1; pmrm->scale[REG_ESI]=1; pmrm->defseg=SEG_SS; tstrcpy(pmrm->ardec,T("BP+SI")); tstrcpy(pmrm->aratt,T("%BP,%SI")); pmrm->aregs=(1<basereg=REG_ESI; break; case 3: pmrm->scale[REG_EBP]=1; pmrm->scale[REG_EDI]=1; pmrm->defseg=SEG_SS; tstrcpy(pmrm->ardec,T("BP+DI")); tstrcpy(pmrm->aratt,T("%BP,%DI")); pmrm->aregs=(1<basereg=REG_EDI; break; case 4: pmrm->scale[REG_ESI]=1; pmrm->defseg=SEG_DS; tstrcpy(pmrm->ardec,T("SI")); tstrcpy(pmrm->aratt,T("%SI")); pmrm->aregs=(1<basereg=REG_ESI; break; case 5: pmrm->scale[REG_EDI]=1; pmrm->defseg=SEG_DS; tstrcpy(pmrm->ardec,T("DI")); tstrcpy(pmrm->aratt,T("%DI")); pmrm->aregs=(1<basereg=REG_EDI; break; case 6: pmrm->scale[REG_EBP]=1; pmrm->defseg=SEG_SS; tstrcpy(pmrm->ardec,T("BP")); tstrcpy(pmrm->aratt,T("%BP")); pmrm->aregs=(1<basereg=REG_EBP; break; case 7: pmrm->scale[REG_EBX]=1; pmrm->defseg=SEG_DS; tstrcpy(pmrm->ardec,T("BX")); tstrcpy(pmrm->aratt,T("%BX")); pmrm->aregs=(1<basereg=REG_EBX; break; }; }; }; // Prepare 32-bit ModRM decodings without SIB. memset(modrm32,0,sizeof(modrm32)); for (c=0x00,pmrm=modrm32; c<=0xFF; c++,pmrm++) { reg=c & 0x07; if ((c & 0xC0)==0xC0) { // Register in ModRM. pmrm->size=1; pmrm->features=0; // Register, its type as yet unknown pmrm->reg=reg; pmrm->defseg=SEG_UNDEF; pmrm->basereg=REG_UNDEF; } else if ((c & 0xC7)==0x05) { // Special case of 32-bit immediate address. pmrm->size=5; pmrm->dispsize=4; pmrm->features=OP_MEMORY|OP_OPCONST; pmrm->reg=REG_UNDEF; pmrm->defseg=SEG_DS; pmrm->basereg=REG_UNDEF; } else { // Regular memory address. pmrm->features=OP_MEMORY; pmrm->reg=REG_UNDEF; if ((c & 0xC0)==0x40) { pmrm->dispsize=1; // 8-bit sign-extended displacement pmrm->features|=OP_OPCONST; } else if ((c & 0xC0)==0x80) { pmrm->dispsize=4; // 32-bit displacement pmrm->features|=OP_OPCONST; }; if (reg==REG_ESP) { // SIB byte follows, decode with sib32. if ((c & 0xC0)==0x00) pmrm->psib=sib0; else if ((c & 0xC0)==0x40) pmrm->psib=sib1; else pmrm->psib=sib2; pmrm->basereg=REG_UNDEF; } else { pmrm->size=1+pmrm->dispsize; pmrm->features|=OP_INDEXED; pmrm->defseg=(reg==REG_EBP?SEG_SS:SEG_DS); pmrm->scale[reg]=1; tstrcpy(pmrm->ardec,regname32[reg]); pmrm->aratt[0]=T('%'); Tstrcopy(pmrm->aratt+1,SHORTNAME-1,regname32[reg]); pmrm->aregs=(1<basereg=reg; }; }; }; // Prepare 32-bit ModRM decodings with SIB, case Mod=00: usually no disp. memset(sib0,0,sizeof(sib0)); for (c=0x00,psib=sib0; c<=0xFF; c++,psib++) { psib->features=OP_MEMORY; psib->reg=REG_UNDEF; reg=c & 0x07; sreg=(c>>3) & 0x07; if ((c & 0xC0)==0) scale=1; else if ((c & 0xC0)==0x40) scale=2; else if ((c & 0xC0)==0x80) scale=4; else scale=8; if (sreg!=REG_ESP) { psib->scale[sreg]=(uchar)scale; n=Tstrcopy(psib->ardec,SHORTNAME,regname32[sreg]); psib->aregs=(1<features|=OP_INDEXED; if (scale>1) { psib->ardec[n++]=T('*'); psib->ardec[n++]=(tchar)(T('0')+scale); psib->ardec[n]=T('\0'); }; } else n=0; if (reg==REG_EBP) { psib->size=6; psib->dispsize=4; psib->features|=OP_OPCONST; psib->defseg=SEG_DS; psib->basereg=REG_UNDEF; } else { psib->size=2; psib->defseg=((reg==REG_ESP || reg==REG_EBP)?SEG_SS:SEG_DS); psib->scale[reg]++; psib->features|=OP_INDEXED; if (n!=0) psib->ardec[n++]=T('+'); Tstrcopy(psib->ardec+n,SHORTNAME-n,regname32[reg]); psib->aregs|=(1<basereg=reg; }; if (reg!=REG_EBP) { psib->aratt[0]=T('%'); n=1; n+=Tstrcopy(psib->aratt+n,SHORTNAME-n,regname32[reg]); } else n=0; if (sreg!=REG_ESP) { n+=Tstrcopy(psib->aratt+n,SHORTNAME-n,T(",%")); n+=Tstrcopy(psib->aratt+n,SHORTNAME-n,regname32[sreg]); if (scale>1) { psib->aratt[n++]=T(','); psib->aratt[n++]=(tchar)(T('0')+scale); psib->aratt[n]=T('\0'); }; }; }; // Prepare 32-bit ModRM decodings with SIB, case Mod=01: 8-bit displacement. memset(sib1,0,sizeof(sib1)); for (c=0x00,psib=sib1; c<=0xFF; c++,psib++) { psib->features=OP_MEMORY|OP_INDEXED|OP_OPCONST; psib->reg=REG_UNDEF; reg=c & 0x07; sreg=(c>>3) & 0x07; if ((c & 0xC0)==0) scale=1; else if ((c & 0xC0)==0x40) scale=2; else if ((c & 0xC0)==0x80) scale=4; else scale=8; psib->size=3; psib->dispsize=1; psib->defseg=((reg==REG_ESP || reg==REG_EBP)?SEG_SS:SEG_DS); psib->scale[reg]=1; psib->basereg=reg; psib->aregs=(1<scale[sreg]+=(uchar)scale; n=Tstrcopy(psib->ardec,SHORTNAME,regname32[sreg]); psib->aregs|=(1<1) { psib->ardec[n++]=T('*'); psib->ardec[n++]=(tchar)(T('0')+scale); }; } else n=0; if (n!=0) psib->ardec[n++]=T('+'); Tstrcopy(psib->ardec+n,SHORTNAME-n,regname32[reg]); psib->aratt[0]=T('%'); n=1; n+=Tstrcopy(psib->aratt+n,SHORTNAME-n,regname32[reg]); if (sreg!=REG_ESP) { n+=Tstrcopy(psib->aratt+n,SHORTNAME-n,T(",%")); n+=Tstrcopy(psib->aratt+n,SHORTNAME-n,regname32[sreg]); if (scale>1) { psib->aratt[n++]=T(','); psib->aratt[n++]=(tchar)(T('0')+scale); psib->aratt[n]=T('\0'); }; }; }; // Prepare 32-bit ModRM decodings with SIB, case Mod=10: 32-bit displacement. memset(sib2,0,sizeof(sib2)); for (c=0x00,psib=sib2; c<=0xFF; c++,psib++) { psib->features=OP_MEMORY|OP_INDEXED|OP_OPCONST; psib->reg=REG_UNDEF; reg=c & 0x07; sreg=(c>>3) & 0x07; if ((c & 0xC0)==0) scale=1; else if ((c & 0xC0)==0x40) scale=2; else if ((c & 0xC0)==0x80) scale=4; else scale=8; psib->size=6; psib->dispsize=4; psib->defseg=((reg==REG_ESP || reg==REG_EBP)?SEG_SS:SEG_DS); psib->scale[reg]=1; psib->basereg=reg; psib->aregs=(1<scale[sreg]+=(uchar)scale; n=Tstrcopy(psib->ardec,SHORTNAME,regname32[sreg]); psib->aregs|=(1<1) { psib->ardec[n++]=T('*'); psib->ardec[n++]=(tchar)(T('0')+scale); }; } else n=0; if (n!=0) psib->ardec[n++]=T('+'); Tstrcopy(psib->ardec+n,SHORTNAME-n,regname32[reg]); psib->aratt[0]=T('%'); n=1; n+=Tstrcopy(psib->aratt+n,SHORTNAME-n,regname32[reg]); if (sreg!=REG_ESP) { n+=Tstrcopy(psib->aratt+n,SHORTNAME-n,T(",%")); n+=Tstrcopy(psib->aratt+n,SHORTNAME-n,regname32[sreg]); if (scale>1) { psib->aratt[n++]=T(','); psib->aratt[n++]=(tchar)(T('0')+scale); psib->aratt[n]=T('\0'); }; }; }; // Fill lowercase conversion table. This table replaces tolower(). When // compiled with Borland C++ Builder, spares significant time. for (c=0; c<256; c++) cvtlower[c]=(tchar)ttolower(c); // Report success. return 0; }; // Frees resources allocated by Preparedisasm(). Call this function once // during shutdown after disassembling service is no longer necessary. void Finishdisasm(void) { if (cmdchain!=NULL) { free(cmdchain); cmdchain=NULL; }; }; //////////////////////////////////////////////////////////////////////////////// ////////////////////////////// AUXILIARY ROUTINES ////////////////////////////// // Given index of byte register, returns index of 32-bit container. static int Byteregtodwordreg(int bytereg) { if (bytereg<0 || bytereg>=NREG) return REG_UNDEF; if (bytereg>=4) return bytereg-4; return bytereg; }; // Checks prefix override flags and generates warnings if prefix is superfluous. // Returns index of segment register. Note that Disasm() assures that two // segment override bits in im->prefixlist can't be set simultaneously. static int Getsegment(t_imdata *im,int arg,int defseg) { if ((im->prefixlist & PF_SEGMASK)==0) return defseg; // Optimization for most frequent case switch (im->prefixlist & PF_SEGMASK) { case PF_ES: if (defseg==SEG_ES) im->da->warnings|=DAW_DEFSEG; if (arg & B_NOSEG) im->da->warnings|=DAW_SEGPREFIX; return SEG_ES; case PF_CS: if (defseg==SEG_CS) im->da->warnings|=DAW_DEFSEG; if (arg & B_NOSEG) im->da->warnings|=DAW_SEGPREFIX; return SEG_CS; case PF_SS: if (defseg==SEG_SS) im->da->warnings|=DAW_DEFSEG; if (arg & B_NOSEG) im->da->warnings|=DAW_SEGPREFIX; return SEG_SS; case PF_DS: if (defseg==SEG_DS) im->da->warnings|=DAW_DEFSEG; if (arg & B_NOSEG) im->da->warnings|=DAW_SEGPREFIX; return SEG_DS; case PF_FS: if (defseg==SEG_FS) im->da->warnings|=DAW_DEFSEG; if (arg & B_NOSEG) im->da->warnings|=DAW_SEGPREFIX; return SEG_FS; case PF_GS: if (defseg==SEG_GS) im->da->warnings|=DAW_DEFSEG; if (arg & B_NOSEG) im->da->warnings|=DAW_SEGPREFIX; return SEG_GS; default: return defseg; // Most frequent case of default segment }; }; // Decodes generalized memory address to text. static void Memaddrtotext(t_imdata *im,int arg,int datasize,int seg, const tchar *regpart,long constpart,tchar *s) { int n; tchar label[TEXTLEN]; if (im->config->disasmmode==DAMODE_ATT) { // AT&T memory address syntax is so different from Intel that I process it // separately from the rest. n=0; if ((arg & B_MODMASK)==B_JMPCALL) s[n++]=T('*'); // On request, I show only explicit segments. if ((im->config->putdefseg && (arg & B_NOSEG)==0) || (im->prefixlist & PF_SEGMASK)!=0 ) { s[n++]=T('%'); n+=Tcopycase(s+n,TEXTLEN-n,segname[seg],im->config->lowercase); s[n++]=T(':'); }; // Add constant part (offset). if (constpart<0 && constpart>NEGLIMIT) { s[n++]=T('-'); n+=Hexprint((im->prefixlist & PF_ASIZE?2:4),s+n,-constpart,im,B_ADDR); } else if (constpart!=0) { if (seg!=SEG_FS && seg!=SEG_GS && im->decodeaddress!=NULL && im->decodeaddress(label,constpart)!=0) n+=Tstrcopy(s+n,TEXTLEN-n,label); else n+=Hexprint((im->prefixlist & PF_ASIZE?2:4),s+n,constpart,im,B_ADDR); ; }; // Add register part of address, may be absent. if (regpart[0]!=T('\0')) { n+=Tstrcopy(s+n,TEXTLEN-n,T("(")); n+=Tcopycase(s+n,TEXTLEN-n,regpart,im->config->lowercase); n+=Tstrcopy(s+n,TEXTLEN-n,T(")")); }; } else { // Mark far and near jump/call addresses. if ((arg & B_MODMASK)==B_JMPCALLFAR) n=Tcopycase(s,TEXTLEN,T("FAR "),im->config->lowercase); else if (im->config->shownear && (arg & B_MODMASK)==B_JMPCALL) n=Tcopycase(s,TEXTLEN,T("NEAR "),im->config->lowercase); else n=0; if (im->config->disasmmode!=DAMODE_MASM) { s[n++]=T('['); if ((im->prefixlist & PF_ASIZE)!=0 && regpart[0]==T('\0')) n+=Tcopycase(s+n,TEXTLEN-n,T("SMALL "),im->config->lowercase); ; }; // If operand is longer than 32 bytes or of type B_ANYMEM (memory contents // unimportant), its size is not displayed. Otherwise, bit B_SHOWSIZE // indicates that explicit operand's size can't be omitted. if (datasize<=32 && (arg & B_ARGMASK)!=B_ANYMEM && (im->config->showmemsize!=0 || (arg & B_SHOWSIZE)!=0) ) { if (im->config->disasmmode==DAMODE_HLA) n+=Tcopycase(s+n,TEXTLEN-n,T("TYPE "),im->config->lowercase); if ((arg & B_ARGMASK)==B_INTPAIR && im->config->disasmmode==DAMODE_IDEAL){ // If operand is a pair of integers (BOUND), Borland in IDEAL mode // expects size of single integer, whereas MASM requires size of the // whole pair. n+=Tcopycase(s+n,TEXTLEN-n,sizename[datasize/2],im->config->lowercase); s[n++]=T(' '); } else if (datasize==16 && im->config->ssesizemode==1) n+=Tcopycase(s+n,TEXTLEN-n,T("XMMWORD "),im->config->lowercase); else if (datasize==32 && im->config->ssesizemode==1) n+=Tcopycase(s+n,TEXTLEN-n,T("YMMWORD "),im->config->lowercase); else { n+=Tcopycase(s+n,TEXTLEN-n,sizename[datasize],im->config->lowercase); s[n++]=T(' '); }; if (im->config->disasmmode==DAMODE_MASM) n+=Tcopycase(s+n,TEXTLEN-n,T("PTR "),im->config->lowercase); ; }; // On request, I show only explicit segments. if ((im->config->putdefseg && (arg & B_NOSEG)==0) || (im->prefixlist & PF_SEGMASK)!=0 ) { n+=Tcopycase(s+n,TEXTLEN-n,segname[seg],im->config->lowercase); s[n++]=T(':'); }; if (im->config->disasmmode==DAMODE_MASM) { s[n++]=T('['); if ((im->prefixlist & PF_ASIZE)!=0 && regpart[0]==T('\0')) n+=Tcopycase(s+n,TEXTLEN-n,T("SMALL "),im->config->lowercase); ; }; // Add register part of address, may be absent. if (regpart[0]!=T('\0')) n+=Tcopycase(s+n,TEXTLEN-n,regpart,im->config->lowercase); if (regpart[0]!=T('\0') && constpart<0 && constpart>NEGLIMIT) { s[n++]=T('-'); n+=Hexprint((im->prefixlist & PF_ASIZE?2:4),s+n,-constpart,im,B_ADDR); } else if (constpart!=0 || regpart[0]==T('\0')) { if (regpart[0]!=T('\0')) s[n++]=T('+'); if (seg!=SEG_FS && seg!=SEG_GS && im->decodeaddress!=NULL && im->decodeaddress(label,constpart)!=0) n+=Tstrcopy(s+n,TEXTLEN-n,label); else n+=Hexprint((im->prefixlist & PF_ASIZE?2:4),s+n,constpart,im,B_ADDR); ; }; n+=Tstrcopy(s+n,TEXTLEN-n,T("]")); }; s[n]=T('\0'); }; // Service function, returns granularity of MMX, 3DNow! and SSE operands. static int Getgranularity(ulong arg) { int granularity; switch (arg & B_ARGMASK) { case B_MREG8x8: // MMX register as 8 8-bit integers case B_MMX8x8: // MMX reg/memory as 8 8-bit integers case B_MMX8x8DI: // MMX 8 8-bit integers at [DS:(E)DI] case B_XMM0I8x16: // XMM0 as 16 8-bit integers case B_SREGI8x16: // SSE register as 16 8-bit sigints case B_SVEXI8x16: // SSE reg in VEX as 16 8-bit sigints case B_SIMMI8x16: // SSE reg in immediate 8-bit constant case B_SSEI8x16: // SSE reg/memory as 16 8-bit sigints case B_SSEI8x16DI: // SSE 16 8-bit sigints at [DS:(E)DI] case B_SSEI8x8L: // Low 8 8-bit ints in SSE reg/memory case B_SSEI8x4L: // Low 4 8-bit ints in SSE reg/memory case B_SSEI8x2L: // Low 2 8-bit ints in SSE reg/memory granularity=1; break; case B_MREG16x4: // MMX register as 4 16-bit integers case B_MMX16x4: // MMX reg/memory as 4 16-bit integers case B_SREGI16x8: // SSE register as 8 16-bit sigints case B_SVEXI16x8: // SSE reg in VEX as 8 16-bit sigints case B_SSEI16x8: // SSE reg/memory as 8 16-bit sigints case B_SSEI16x4L: // Low 4 16-bit ints in SSE reg/memory case B_SSEI16x2L: // Low 2 16-bit ints in SSE reg/memory granularity=2; break; case B_MREG32x2: // MMX register as 2 32-bit integers case B_MMX32x2: // MMX reg/memory as 2 32-bit integers case B_3DREG: // 3DNow! register as 2 32-bit floats case B_3DNOW: // 3DNow! reg/memory as 2 32-bit floats case B_SREGF32x4: // SSE register as 4 32-bit floats case B_SVEXF32x4: // SSE reg in VEX as 4 32-bit floats case B_SREGF32L: // Low 32-bit float in SSE register case B_SVEXF32L: // Low 32-bit float in SSE in VEX case B_SREGF32x2L: // Low 2 32-bit floats in SSE register case B_SSEF32x4: // SSE reg/memory as 4 32-bit floats case B_SSEF32L: // Low 32-bit float in SSE reg/memory case B_SSEF32x2L: // Low 2 32-bit floats in SSE reg/memory granularity=4; break; case B_XMM0I32x4: // XMM0 as 4 32-bit integers case B_SREGI32x4: // SSE register as 4 32-bit sigints case B_SVEXI32x4: // SSE reg in VEX as 4 32-bit sigints case B_SREGI32L: // Low 32-bit sigint in SSE register case B_SREGI32x2L: // Low 2 32-bit sigints in SSE register case B_SSEI32x4: // SSE reg/memory as 4 32-bit sigints case B_SSEI32x2L: // Low 2 32-bit sigints in SSE reg/memory granularity=4; break; case B_MREG64: // MMX register as 1 64-bit integer case B_MMX64: // MMX reg/memory as 1 64-bit integer case B_XMM0I64x2: // XMM0 as 2 64-bit integers case B_SREGF64x2: // SSE register as 2 64-bit floats case B_SVEXF64x2: // SSE reg in VEX as 2 64-bit floats case B_SREGF64L: // Low 64-bit float in SSE register case B_SVEXF64L: // Low 64-bit float in SSE in VEX case B_SSEF64x2: // SSE reg/memory as 2 64-bit floats case B_SSEF64L: // Low 64-bit float in SSE reg/memory granularity=8; break; case B_SREGI64x2: // SSE register as 2 64-bit sigints case B_SVEXI64x2: // SSE reg in VEX as 2 64-bit sigints case B_SSEI64x2: // SSE reg/memory as 2 64-bit sigints case B_SREGI64L: // Low 64-bit sigint in SSE register granularity=8; break; default: granularity=1; // Treat unknown ops as string of bytes break; }; return granularity; }; //////////////////////////////////////////////////////////////////////////////// ////////////////////////// OPERAND DECODING ROUTINES /////////////////////////// // Decodes 8/16/32-bit integer register operand. ATTENTION, calling routine // must set usesdatasize and usesaddrsize by itself! static void Operandintreg(t_imdata *im,ulong datasize,int index,t_operand *op) { int n,reg32; op->features=OP_REGISTER; op->opsize=op->granularity=datasize; op->reg=index; op->seg=SEG_UNDEF; // Add container register to lists of used and modified registers. if (datasize==1) reg32=Byteregtodwordreg(index); else reg32=index; if ((op->arg & B_CHG)==0) { op->uses=(1<da->uses|=(1<arg & (B_CHG|B_UPD)) { op->modifies=(1<da->modifies|=(1<arg & B_NOESP)!=0 && reg32==REG_ESP) im->da->warnings|=DAW_NOESP; // Decode name of integer register. if (im->damode & DA_TEXT) { n=0; if (im->config->disasmmode==DAMODE_ATT) { if ((op->arg & B_MODMASK)==B_JMPCALL) op->text[n++]=T('*'); op->text[n++]=T('%'); }; if (datasize==4) // Most frequent case first Tcopycase(op->text+n,TEXTLEN-n,regname32[index],im->config->lowercase); else if (datasize==1) Tcopycase(op->text+n,TEXTLEN-n,regname8[index],im->config->lowercase); else // 16-bit registers are seldom Tcopycase(op->text+n,TEXTLEN-n,regname16[index],im->config->lowercase); ; }; }; // Decodes 16/32-bit memory address in ModRM/SIB bytes. Returns full length of // address (ModRM+SIB+displacement) in bytes, 0 if ModRM indicates register // operand and -1 on error. ATTENTION, calling routine must set usesdatasize, // granularity (preset to datasize) and reg together with OP_MODREG by itself! static int Operandmodrm(t_imdata *im,ulong datasize,uchar *cmd,ulong cmdsize, t_operand *op) { tchar *ardec; t_modrm *pmrm; if (cmdsize==0) { im->da->errors|=DAE_CROSS; // Command crosses end of memory block return -1; }; // Decode ModRM/SIB. Most of the work is already done in Preparedisasm(), we // only need to find corresponding t_modrm. if (im->prefixlist & PF_ASIZE) { pmrm=modrm16+cmd[0]; // 16-bit address im->modsize=1; } else { pmrm=modrm32+cmd[0]; if (pmrm->psib==NULL) im->modsize=1; // No SIB byte else { if (cmdsize<2) { im->da->errors|=DAE_CROSS; // Command crosses end of memory block return -1; }; pmrm=pmrm->psib+cmd[1]; im->modsize=2; // Both ModRM and SIB }; }; // Check whether ModRM indicates register operand and immediately return if // true. As a side effect, modsize is already set. if ((cmd[0] & 0xC0)==0xC0) return 0; // Operand in memory. op->opsize=datasize; op->granularity=datasize; // Default, may be overriden later op->reg=REG_UNDEF; im->usesaddrsize=1; // Address size prefix is meaningful im->usessegment=1; // Segment override prefix is meaningful // Fetch precalculated t_modrm fields. op->features=pmrm->features; memcpy(op->scale,pmrm->scale,8); op->aregs=pmrm->aregs; im->da->uses|=pmrm->aregs; // Mark registers used to form address // Get displacement, if any. im->dispsize=pmrm->dispsize; if (pmrm->dispsize!=0) { if (cmdsizesize) { im->da->errors|=DAE_CROSS; // Command crosses end of memory block return -1; }; if (pmrm->dispsize==1) // 8-bit displacement is sign-extended op->opconst=im->da->memconst=(signed char)cmd[im->modsize]; else if (pmrm->dispsize==4) { // 32-bit full displacement im->da->memfixup= im->mainsize+im->modsize; // Possible 32-bit fixup op->opconst=im->da->memconst=*(ulong *)(cmd+im->modsize); } else // 16-bit displacement, very rare op->opconst=im->da->memconst=*(ushort *)(cmd+im->modsize); ; }; // Get segment. op->seg=Getsegment(im,op->arg,pmrm->defseg); // Warn if memory contents is 16-bit jump/call destination. if (datasize==2 && (op->arg & B_MODMASK)==B_JMPCALL) im->da->warnings|=DAW_JMP16; // Decode memory operand to text, if requested. if (im->damode & DA_TEXT) { ardec=(im->config->disasmmode==DAMODE_ATT?pmrm->aratt:pmrm->ardec); Memaddrtotext(im,op->arg,datasize,op->seg,ardec,op->opconst,op->text); }; return pmrm->size; }; // Decodes 16/32-bit immediate address (used only for 8/16/32-bit memory- // accumulator moves). ATTENTION, calling routine must set usesdatasize by // itself! static void Operandimmaddr(t_imdata *im,ulong datasize,uchar *cmd, ulong cmdsize,t_operand *op) { if (im->prefixlist & PF_ASIZE) im->dispsize=2; else im->dispsize=4; if (cmdsizedispsize) { im->da->errors|=DAE_CROSS; // Command crosses end of memory block return; }; op->features=OP_MEMORY|OP_OPCONST; op->opsize=op->granularity=datasize; op->reg=REG_UNDEF; im->usesaddrsize=1; // Address size prefix is meaningful im->usessegment=1; // Segment override prefix is meaningful if (im->dispsize==4) { // 32-bit immediate address // 32-bit address means possible fixup, calculate offset. im->da->memfixup=im->mainsize; op->opconst=im->da->memconst=*(ulong *)cmd; } else { // 16-bit immediate address, very rare op->opconst=im->da->memconst=*(ushort *)cmd; op->features|=OP_ADDR16; }; // Get segment. op->seg=Getsegment(im,op->arg,SEG_DS); // Decode memory operand to text, if requested. if (im->damode & DA_TEXT) Memaddrtotext(im,op->arg,datasize,op->seg,T(""),op->opconst,op->text); ; }; // Decodes simple register address ([reg16] or [reg32]). Flag changesreg must // be 0 if register remains unchanged and 1 if it changes. If fixseg is set to // SEG_UNDEF, assumes overridable DS:, otherwise assumes fixsegment that cannot // be overriden with segment prefix. If fixaddrsize is 2 or 4, assumes 16- or // 32-bit addressing only, otherwise uses default. ATTENTION, calling routine // must set usesdatasize by itself! static void Operandindirect(t_imdata *im,int index,int changesreg,int fixseg, int fixaddrsize,ulong datasize,t_operand *op) { int n; ulong originallist; tchar ardec[SHORTNAME]; op->features=OP_MEMORY|OP_INDEXED; if (changesreg) { op->features|=OP_MODREG; op->reg=index; im->da->modifies|=(1<reg=REG_UNDEF; if (fixaddrsize==2) op->features|=OP_ADDR16; else if (fixaddrsize==0) { im->usesaddrsize=1; // Address size prefix is meaningful if (im->prefixlist & PF_ASIZE) { op->features|=OP_ADDR16; fixaddrsize=2; }; }; // Get segment. if (fixseg==SEG_UNDEF) { op->seg=Getsegment(im,op->arg,SEG_DS); im->usessegment=1; } // Segment override prefix is meaningful else op->seg=fixseg; op->opsize=datasize; op->granularity=datasize; // Default, may be overriden later op->scale[index]=1; op->aregs=(1<da->uses|=(1<arg & B_MODMASK)==B_JMPCALL) im->da->warnings|=DAW_JMP16; // Decode source operand to text, if requested. if (im->damode & DA_TEXT) { if (im->config->disasmmode==DAMODE_ATT) { ardec[0]=T('%'); n=1; } else n=0; if (fixaddrsize==2) Tstrcopy(ardec+n,SHORTNAME-n,regname16[index]); else Tstrcopy(ardec+n,SHORTNAME-n,regname32[index]); if (fixseg==SEG_UNDEF) Memaddrtotext(im,op->arg,datasize,op->seg,ardec,0,op->text); else { originallist=im->prefixlist; im->prefixlist&=~PF_SEGMASK; Memaddrtotext(im,op->arg,datasize,op->seg,ardec,0,op->text); im->prefixlist=originallist; }; }; }; // Decodes XLAT source address ([(E)BX+AL]). Note that I set scale of EAX to 1, // which is not exactly true. ATTENTION, calling routine must set usesdatasize // by itself! static void Operandxlat(t_imdata *im,t_operand *op) { tchar *ardec; op->features=OP_MEMORY|OP_INDEXED; if (im->prefixlist & PF_ASIZE) op->features|=OP_ADDR16; im->usesaddrsize=1; // Address size prefix is meaningful im->usessegment=1; // Segment override prefix is meaningful op->opsize=1; op->granularity=1; op->reg=REG_UNDEF; // Get segment. op->seg=Getsegment(im,op->arg,SEG_DS); op->scale[REG_EAX]=1; // This is not correct! op->scale[REG_EBX]=1; op->aregs=(1<da->uses|=op->aregs; // Decode address to text, if requested. if (im->damode & DA_TEXT) { if (im->config->disasmmode==DAMODE_ATT) ardec=(im->prefixlist & PF_ASIZE?T("%BX,%AL"):T("%EBX,%AL")); else ardec=(im->prefixlist & PF_ASIZE?T("BX+AL"):T("EBX+AL")); Memaddrtotext(im,op->arg,1,op->seg,ardec,0,op->text); }; }; // Decodes stack pushes of any size, including implicit return address in // CALLs. ATTENTION, calling routine must set usesdatasize by itself! static void Operandpush(t_imdata *im,ulong datasize,t_operand *op) { int n,addrsize; ulong originallist; tchar ardec[SHORTNAME]; op->features=OP_MEMORY|OP_INDEXED|OP_MODREG; op->reg=REG_ESP; op->aregs=(1<da->modifies|=op->aregs; im->usesaddrsize=1; // Address size prefix is meaningful if (im->prefixlist & PF_ASIZE) { op->features|=OP_ADDR16; addrsize=2; } else addrsize=4; // Flat model! op->seg=SEG_SS; if ((op->arg & B_ARGMASK)==B_PUSHA) { im->da->uses=0xFF; // Uses all general registers op->opsize=datasize*8; } else if ((op->arg & B_ARGMASK)==B_PUSHRETF) { im->da->uses|=op->aregs; op->opsize=datasize*2; } else { im->da->uses|=op->aregs; // Warn if memory contents is 16-bit jump/call destination. if (datasize==2 && (op->arg & B_MODMASK)==B_JMPCALL) im->da->warnings|=DAW_JMP16; op->opsize=datasize; }; op->opconst=-(long)op->opsize; // ESP is predecremented op->granularity=datasize; // Default, may be overriden later op->scale[REG_ESP]=1; // Decode source operand to text, if requested. if (im->damode & DA_TEXT) { if (im->config->disasmmode==DAMODE_ATT) { ardec[0]=T('%'); n=1; } else n=0; if (addrsize==2) Tstrcopy(ardec+n,SHORTNAME-n,regname16[REG_ESP]); else Tstrcopy(ardec+n,SHORTNAME-n,regname32[REG_ESP]); originallist=im->prefixlist; im->prefixlist&=~PF_SEGMASK; Memaddrtotext(im,op->arg,datasize,op->seg,ardec,0,op->text); im->prefixlist=originallist; }; }; // Decodes segment register. static void Operandsegreg(t_imdata *im,int index,t_operand *op) { int n; op->features=OP_SEGREG; if (index>=NSEG) { op->features|=OP_INVALID; // Invalid segment register im->da->errors|=DAE_BADSEG; }; op->opsize=op->granularity=2; op->reg=index; op->seg=SEG_UNDEF; // Because this is not a memory address if (op->arg & (B_CHG|B_UPD)) im->da->warnings|=DAW_SEGMOD; // Modifies segment register // Decode name of segment register. if (im->damode & DA_TEXT) { n=0; if (im->config->disasmmode==DAMODE_ATT) op->text[n++]=T('%'); Tcopycase(op->text+n,TEXTLEN-n,segname[index],im->config->lowercase); }; }; // Decodes FPU register operand. static void Operandfpureg(t_imdata *im,int index,t_operand *op) { op->features=OP_FPUREG; op->opsize=op->granularity=10; op->reg=index; op->seg=SEG_UNDEF; // Because this is not a memory address // Decode name of FPU register. if (im->damode & DA_TEXT) { if (im->config->disasmmode==DAMODE_ATT) { if (im->config->simplifiedst && index==0) Tcopycase(op->text,TEXTLEN,T("%ST"),im->config->lowercase); else { op->text[0]=T('%'); Tcopycase(op->text+1,TEXTLEN-1,fpushort[index],im->config->lowercase); }; } else if (im->config->simplifiedst && index==0) Tcopycase(op->text,TEXTLEN,T("ST"),im->config->lowercase); else if (im->config->disasmmode!=DAMODE_HLA) Tcopycase(op->text,TEXTLEN,fpulong[index],im->config->lowercase); else Tcopycase(op->text,TEXTLEN,fpushort[index],im->config->lowercase); ; }; }; // Decodes MMX register operands. ATTENTION, does not set correct granularity! static void Operandmmxreg(t_imdata *im,int index,t_operand *op) { int n; op->features=OP_MMXREG; op->opsize=8; op->granularity=4; // Default, correct it later! op->reg=index; op->seg=SEG_UNDEF; // Decode name of MMX/3DNow! register. if (im->damode & DA_TEXT) { n=0; if (im->config->disasmmode==DAMODE_ATT) op->text[n++]=T('%'); Tcopycase(op->text+n,TEXTLEN-n,mmxname[index],im->config->lowercase); }; }; // Decodes 3DNow! register operands. ATTENTION, does not set correct // granularity! static void Operandnowreg(t_imdata *im,int index,t_operand *op) { int n; op->features=OP_3DNOWREG; op->opsize=8; op->granularity=4; // Default, correct it later! op->reg=index; op->seg=SEG_UNDEF; // Decode name of MMX/3DNow! register. if (im->damode & DA_TEXT) { n=0; if (im->config->disasmmode==DAMODE_ATT) op->text[n++]=T('%'); Tcopycase(op->text+n,TEXTLEN-n,mmxname[index],im->config->lowercase); }; }; // Decodes SSE register operands. ATTENTION, does not set correct granularity! static void Operandssereg(t_imdata *im,int index,t_operand *op) { int n; op->features=OP_SSEREG; if (op->arg & B_NOVEXSIZE) op->opsize=16; else op->opsize=im->ssesize; op->granularity=4; // Default, correct it later! op->reg=index; op->seg=SEG_UNDEF; // Note that some rare SSE commands may use Reg without ModRM. if (im->modsize==0) im->modsize=1; // Decode name of SSE register. if (im->damode & DA_TEXT) { n=0; if (im->config->disasmmode==DAMODE_ATT) op->text[n++]=T('%'); if (op->opsize==32) Tcopycase(op->text+n,TEXTLEN-n,sse256[index],im->config->lowercase); else Tcopycase(op->text+n,TEXTLEN-n,sse128[index],im->config->lowercase); ; }; }; // Decodes flag register EFL. static void Operandefl(t_imdata *im,ulong datasize,t_operand *op) { op->features=OP_OTHERREG; op->opsize=op->granularity=datasize; op->reg=REG_UNDEF; op->seg=SEG_UNDEF; // Decode name of register. if (im->damode & DA_TEXT) { if (im->config->disasmmode==DAMODE_ATT) Tcopycase(op->text,TEXTLEN,T("%EFL"),im->config->lowercase); else Tcopycase(op->text,TEXTLEN,T("EFL"),im->config->lowercase); ; }; }; // Decodes 8/16/32-bit immediate jump/call offset relative to EIP of next // command. static void Operandoffset(t_imdata *im,ulong offsetsize,ulong datasize, uchar *cmd,ulong cmdsize,ulong offsaddr,t_operand *op) { int n; tchar label[TEXTLEN]; if (cmdsizeda->errors|=DAE_CROSS; // Command crosses end of memory block return; }; op->features=OP_CONST; op->opsize=op->granularity=datasize; // NOT offsetsize! im->immsize1=offsetsize; op->reg=REG_UNDEF; op->seg=SEG_UNDEF; offsaddr+=offsetsize; if (offsetsize==1) // Sign-extandable constant op->opconst=*(signed char *)cmd+offsaddr; else if (offsetsize==2) // 16-bit immediate offset, rare op->opconst=*(ushort *)cmd+offsaddr; else // 32-bit immediate offset op->opconst=*(ulong *)cmd+offsaddr; if (datasize==2) { op->opconst&=0x0000FFFF; im->da->warnings|=DAW_JMP16; }; // Practically unused in Win32 code im->usesdatasize=1; // Decode address of destination to text, if requested. if (im->damode & DA_TEXT) { if (offsetsize==1 && im->config->disasmmode!=DAMODE_HLA && im->config->disasmmode!=DAMODE_ATT) n=Tcopycase(op->text,TEXTLEN,T("SHORT "),im->config->lowercase); else n=0; if (datasize==4) { if (im->decodeaddress!=NULL && im->decodeaddress(label,op->opconst)!=0) Tstrcopy(op->text+n,TEXTLEN-n,label); else { if (im->config->disasmmode==DAMODE_ATT) op->text[n++]=T('$'); Hexprint(4,op->text+n,op->opconst,im,op->arg); }; } else { if (im->config->disasmmode==DAMODE_ATT) op->text[n++]=T('$'); Hexprint(2,op->text+n,op->opconst,im,op->arg); }; }; }; // Decodes 16:16/16:32-bit immediate absolute far jump/call address. static void Operandimmfaraddr(t_imdata *im,ulong datasize,uchar *cmd, ulong cmdsize,t_operand *op) { int n; if (cmdsizeda->errors|=DAE_CROSS; // Command crosses end of memory block return; }; op->features=OP_CONST|OP_SELECTOR; op->opsize=datasize+2; op->granularity=datasize; // Attention, non-standard case! op->reg=REG_UNDEF; op->seg=SEG_UNDEF; im->immsize1=datasize; im->immsize2=2; if (datasize==2) { op->opconst=*(ushort *)cmd; im->da->warnings|=DAW_JMP16; } // Practically unused in Win32 code else { op->opconst=*(ulong *)cmd; im->da->immfixup=im->mainsize; }; op->selector=*(ushort *)(cmd+datasize); im->usesdatasize=1; // Decode address of destination to text, if requested. if (im->damode & DA_TEXT) { if (im->config->disasmmode==DAMODE_ATT) { op->text[0]=T('$'); n=1; } else n=Tcopycase(op->text,TEXTLEN,T("FAR "),im->config->lowercase); n+=Hexprint(2,op->text+n,op->selector,im,op->arg); op->text[n++]=T(':'); if (im->config->disasmmode==DAMODE_ATT) op->text[n++]=T('$'); Hexprint(4,op->text+n,op->opconst,im,op->arg); }; }; // Decodes immediate constant 1 used in shift operations. static void Operandone(t_imdata *im,t_operand *op) { op->features=OP_CONST; op->opsize=op->granularity=1; // Just to make it defined op->reg=REG_UNDEF; op->seg=SEG_UNDEF; op->opconst=1; if (im->damode & DA_TEXT) { if (im->config->disasmmode==DAMODE_ATT) Tstrcopy(op->text,TEXTLEN,T("$1")); else Tstrcopy(op->text,TEXTLEN,T("1")); ; }; }; // Decodes 8/16/32-bit immediate constant (possibly placed after ModRegRM-SIB- // Disp combination). Constant is nbytes long in the command and extends to // constsize bytes. If constant is a count, it deals with data of size datasize. // ATTENTION, calling routine must set usesdatasize by itself! static void Operandimmconst(t_imdata *im,ulong nbytes,ulong constsize, ulong datasize,uchar *cmd,ulong cmdsize,int issecond,t_operand *op) { int n; ulong u,mod; tchar label[TEXTLEN]; if (cmdsizemodsize+im->dispsize+nbytes+(issecond?im->immsize1:0)) { im->da->errors|=DAE_CROSS; // Command crosses end of memory block return; }; op->features=OP_CONST; op->opsize=op->granularity=constsize; cmd+=im->modsize+im->dispsize; if (issecond==0) im->immsize1=nbytes; // First constant else { im->immsize2=nbytes; // Second constant (ENTER only) cmd+=im->immsize1; }; op->reg=REG_UNDEF; op->seg=SEG_UNDEF; if (nbytes==4) { // 32-bit immediate constant op->opconst=*(ulong *)cmd; im->da->immfixup=im->mainsize+im->modsize+im->dispsize+ (issecond?im->immsize1:0); ; } else if (nbytes==1) // 8-byte constant, maybe sign-extendable op->opconst=*(signed char *)cmd; else // 16-bite immediate constant, rare op->opconst=*(ushort *)cmd; if (constsize==1) op->opconst&=0x000000FF; else if (constsize==2) op->opconst&=0x0000FFFF; switch (op->arg & B_MODMASK) { case B_BITCNT: // Constant is a bit count if ((datasize==4 && op->opconst>31) || (datasize==1 && op->opconst>7) || (datasize==2 && op->opconst>15)) im->da->warnings|=DAW_SHIFT; break; case B_SHIFTCNT: // Constant is a shift count if (op->opconst==0 || (datasize==4 && op->opconst>31) || (datasize==1 && op->opconst>7) || (datasize==2 && op->opconst>15)) im->da->warnings|=DAW_SHIFT; break; case B_STACKINC: // Stack increment must be DWORD-aligned if ((op->opconst & 0x3)!=0) im->da->warnings|=DAW_STACK; im->da->stackinc=op->opconst; break; default: break; }; if (im->damode & DA_TEXT) { mod=op->arg & B_MODMASK; n=0; if (constsize==1) { // 8-bit constant if (im->config->disasmmode==DAMODE_ATT) op->text[n++]=T('$'); Hexprint(1,op->text+n,op->opconst,im,op->arg); } else if (constsize==4) { // 32-bit constant if (im->decodeaddress!=NULL && (mod==B_NONSPEC || mod==B_JMPCALL || mod==B_JMPCALLFAR) && im->decodeaddress(label,op->opconst)!=0) Tstrcopy(op->text+n,TEXTLEN-n,label); else { if (im->config->disasmmode==DAMODE_ATT) op->text[n++]=T('$'); if (mod!=B_UNSIGNED && mod!=B_BINARY && mod!=B_PORT && (long)op->opconst<0 && (mod==B_SIGNED || (long)op->opconst>NEGLIMIT) ) { op->text[n++]=T('-'); u=-(long)op->opconst; } else u=op->opconst; Hexprint(4,op->text+n,u,im,op->arg); }; } else { // 16-bit constant if (im->config->disasmmode==DAMODE_ATT) op->text[n++]=T('$'); else if ((op->arg & B_SHOWSIZE)!=0) { n+=Tcopycase(op->text+n,TEXTLEN-n,sizename[constsize], im->config->lowercase); n+=Tstrcopy(op->text+n,TEXTLEN-n,T(" ")); }; Hexprint(2,op->text+n,op->opconst,im,op->arg); }; }; return; }; // Decodes contrtol register operands. static void Operandcreg(t_imdata *im,int index,t_operand *op) { int n; op->features=OP_CREG; op->opsize=op->granularity=4; op->reg=index; op->seg=SEG_UNDEF; // Decode name of control register. if (im->damode & DA_TEXT) { n=0; if (im->config->disasmmode==DAMODE_ATT) op->text[n++]=T('%'); Tcopycase(op->text+n,TEXTLEN-n,crname[index],im->config->lowercase); }; // Some control registers are physically absent. if (index!=0 && index!=2 && index!=3 && index!=4) im->da->errors|=DAE_BADCR; ; }; // Decodes debug register operands. static void Operanddreg(t_imdata *im,int index,t_operand *op) { int n; op->features=OP_DREG; op->opsize=op->granularity=4; op->reg=index; op->seg=SEG_UNDEF; // Decode name of debug register. if (im->damode & DA_TEXT) { n=0; if (im->config->disasmmode==DAMODE_ATT) op->text[n++]=T('%'); Tcopycase(op->text+n,TEXTLEN-n,drname[index],im->config->lowercase); }; }; // Decodes FPU status register FST. static void Operandfst(t_imdata *im,t_operand *op) { op->features=OP_OTHERREG; op->opsize=op->granularity=2; op->reg=REG_UNDEF; op->seg=SEG_UNDEF; // Decode name of register. if (im->damode & DA_TEXT) { if (im->config->disasmmode==DAMODE_ATT) Tcopycase(op->text,TEXTLEN,T("%FST"),im->config->lowercase); else Tcopycase(op->text,TEXTLEN,T("FST"),im->config->lowercase); ; }; }; // Decodes FPU control register FCW. static void Operandfcw(t_imdata *im,t_operand *op) { op->features=OP_OTHERREG; op->opsize=op->granularity=2; op->reg=REG_UNDEF; op->seg=SEG_UNDEF; // Decode name of register. if (im->damode & DA_TEXT) { if (im->config->disasmmode==DAMODE_ATT) Tcopycase(op->text,TEXTLEN,T("%FCW"),im->config->lowercase); else Tcopycase(op->text,TEXTLEN,T("FCW"),im->config->lowercase); ; }; }; // Decodes SSE control register MXCSR. static void Operandmxcsr(t_imdata *im,t_operand *op) { op->features=OP_OTHERREG; op->opsize=op->granularity=4; op->reg=REG_UNDEF; op->seg=SEG_UNDEF; // Decode name of register. if (im->damode & DA_TEXT) { if (im->config->disasmmode==DAMODE_ATT) Tcopycase(op->text,TEXTLEN,T("%MXCSR"),im->config->lowercase); else Tcopycase(op->text,TEXTLEN,T("MXCSR"),im->config->lowercase); ; }; }; //////////////////////////////////////////////////////////////////////////////// ///////////////////////////////// DISASSEMBLER ///////////////////////////////// // Disassembles first command in the binary code of given length at given // address. Assumes that address and data size attributes of all participating // segments are 32 bit (flat model). Returns length of the command or 0 in case // of severe error. ulong Disasm(uchar const *cmd,ulong cmdsize,ulong ip,t_disasm *da, int damode,t_config *config,int (*decodeaddress)(tchar *s,ulong addr)) { int i,j,k,q,noperand,nout,enclose,vexreg,success,cfill,ofill; ulong m,n,u,prefix,prefixmask,code,arg,cmdtype,datasize; ulong type,vex,vexlead; t_imdata im; const t_chain *pchain; const t_bincmd *pcmd; const t_modrm *pmrm; t_operand *op,pseudoop; // Verify input parameters. if (cmd==NULL || cmdsize==0 || da==NULL || cmdchain==NULL) return 0; // Error in parameters or uninitialized // Initialize t_disasm structure that receives results of disassembly. This // structure is very large, memset() or several memset()'s would take much, // much longer. da->ip=ip; da->memfixup=da->immfixup=-1; da->errors=DAE_NOERR; da->warnings=DAW_NOWARN; da->uses=0; da->modifies=0; da->memconst=0; da->stackinc=0; for (i=0,op=da->op; ifeatures=0; op->arg=0; op->opsize=op->granularity=0; op->reg=REG_UNDEF; op->uses=0; op->modifies=0; op->seg=SEG_UNDEF; ((ulong *)op->scale)[0]=0; ((ulong *)op->scale)[1]=0; op->aregs=0; op->opconst=0; op->selector=0; op->text[0]=T('\0'); }; da->dump[0]=T('\0'); da->result[0]=T('\0'); da->masksize=0; // Prepare intermediate data. This data allows to keep Disasm() reentrant // (thread-safe). im.da=da; im.damode=damode; if (config==NULL) im.config=config=&defconfig; // Use default configuration else im.config=config; im.decodeaddress=decodeaddress; im.prefixlist=0; im.ssesize=16; // Default im.immsize1=im.immsize2=0; // Correct 80x86 command may contain up to 4 prefixes belonging to different // prefix groups. If Disasm() detects second prefix from the same group, it // flushes first prefix in the sequence as a pseudocommand. (This is not // quite true; all CPUs that I have tested accept repeating prefixes. Still, // who will place superfluous and possibly nonportable prefixes into the // code?) for (n=0; ; n++) { if (n>=cmdsize) { // Command crosses end of memory block n=0; im.prefixlist=0; // Decode as standalone prefix break; }; // Note that some CPUs treat REPx and LOCK as belonging to the same group. switch (cmd[n]) { case 0x26: prefix=PF_ES; prefixmask=PF_SEGMASK; break; case 0x2E: prefix=PF_CS; prefixmask=PF_SEGMASK; break; case 0x36: prefix=PF_SS; prefixmask=PF_SEGMASK; break; case 0x3E: prefix=PF_DS; prefixmask=PF_SEGMASK; break; case 0x64: prefix=PF_FS; prefixmask=PF_SEGMASK; break; case 0x65: prefix=PF_GS; prefixmask=PF_SEGMASK; break; case 0x66: prefix=prefixmask=PF_DSIZE; break; case 0x67: prefix=prefixmask=PF_ASIZE; break; case 0xF0: prefix=prefixmask=PF_LOCK; break; case 0xF2: prefix=PF_REPNE; prefixmask=PF_REPMASK; break; case 0xF3: prefix=PF_REP; prefixmask=PF_REPMASK; break; default: prefix=0; break; }; if (prefix==0) break; if (im.prefixlist & prefixmask) { da->errors|=DAE_SAMEPREF; // Two prefixes from the same group break; }; im.prefixlist|=prefix; }; // There may be VEX prefix preceding command body. Yes, VEX is supported in // the 32-bit mode! And even in the 16-bit, but who cares? vex=0; vexlead=0; if (cmdsize>=n+3 && (*(ushort *)(cmd+n) & 0xC0FE)==0xC0C4) { // VEX is not compatible with LOCK, 66, F2 and F3 prefixes. VEX is not // compatible with REX, too, but REX prefixes are missing in 32-bit mode. if (im.prefixlist & (PF_LOCK|PF_66|PF_F2|PF_F3)) da->errors|=DAE_SAMEPREF; // Incompatible prefixes else { if (cmd[n]==0xC5) { // 2-byte VEX prefix. im.prefixlist|=PF_VEX2; vex=cmd[n+1]; vexlead=DX_VEX|DX_LEAD0F; n+=2; } else { // 3-byte VEX prefix. im.prefixlist|=PF_VEX3; vex=cmd[n+2]+(cmd[n+1]<<8); // Note the order of the bytes! switch (vex & 0x1F00) { case 0x0100: vexlead=DX_VEX|DX_LEAD0F; n+=3; break; case 0x0200: vexlead=DX_VEX|DX_LEAD38; n+=3; break; case 0x0300: vexlead=DX_VEX|DX_LEAD3A; n+=3; break; default: vex=0; break; // Unsupported VEX, decode as LES }; }; if (vex!=0) { // Get size of operands. if (vex & 0x0004) im.ssesize=32; // 256-bit SSE operands // Get register encoded in VEX prefix. vexreg=(~vex>>3) & 0x07; // Check for SIMD prefix. switch (vex & 0x3) { case 0x0001: im.prefixlist|=PF_66; break; case 0x0002: im.prefixlist|=PF_F3; break; case 0x0003: im.prefixlist|=PF_F2; break; }; }; }; if (n>=cmdsize) { // Command crosses end of memory block n=0; vex=0; im.prefixlist=0; // Decode as LES }; }; // We have gathered all prefixes, including those that are integral part of // the SSE command. if (n>4 || (da->errors & DAE_SAMEPREF)!=0) { if (n>4) da->errors|=DAE_MANYPREF; n=0; im.prefixlist=0; }; // Decode as standalone prefix da->prefixes=im.prefixlist; da->nprefix=n; // Fetch first 4 bytes of the command and find start of command chain in the // command table. if (cmdsize>=n+sizeof(ulong)) code=*(ulong *)(cmd+n); // Optimization for most frequent case else { code=cmd[n]; if (cmdsize>n+1) ((uchar *)&code)[1]=cmd[n+1]; if (cmdsize>n+2) ((uchar *)&code)[2]=cmd[n+2]; if (cmdsize>n+3) ((uchar *)&code)[3]=cmd[n+3]; }; // Walk chain and search for matching command. Command is matched if: // (1) code bits allowed in mask coincide in command and descriptor; // (2) when command type contains D_MEMORY, ModRegRM byte must indicate // memory, and when type contains D_REGISTER, Mod must indicate register; // (3) when bits D_DATAxx or D_ADDRxx are set, size of data and/or code must // match these bits; // (4) field D_MUSTMASK must match gathered prefixes; // (5) presence or absence of VEX prefix must be matched by DX_VEX. If VEX // is present, implied leading bytes must match vexlead and bit L must // match DX_VLMASK; // (6) if short form of string commands is requested, bit D_LONGFORM must be // cleared, or segment override prefix other that DS:, or address size // prefix must be present; // (7) when bit D_POSTBYTE is set, byte after ModRegRM/SIB/offset must match // postbyte. Note that all postbyted commands include memory address in // ModRegRM form and do not include immediate constants; // (8) if alternative forms of conditional commands are requested, command // is conditional, and it is marked as DX_ZEROMASK or DX_CARRYMASK, // check whether these bits match damode. (Conditional branch on flag // Z!=0 can be disassembled either as JZ or JE. First form is preferrable // after SUB or DEC; second form is more natural after CMP); // (9) if command has mnemonics RETN but alternative form RET is expected, // skip it - RET will follow. success=0; for (pchain=cmdchain+(code & CMDMASK); ; pchain=pchain->pnext) { if (pchain==NULL || pchain->pcmd==NULL) break; // End of chain, no match pcmd=pchain->pcmd; if (((code ^ pcmd->code) & pcmd->mask)!=0) continue; // (1) Different code bits cmdtype=pcmd->cmdtype; if ((damode & DA_TEXT)!=0) { if ((pcmd->exttype & DX_RETN)!=0 && config->useretform!=0) continue; // (9) RET form of near return expected if ((cmdtype & D_COND)!=0 && (pcmd->exttype & (DX_ZEROMASK|DX_CARRYMASK))!=0 ) { if ((damode & DA_JZ)!=0 && (pcmd->exttype & DX_ZEROMASK)==DX_JE) continue; // (8) Wait for DX_JZ if ((damode & DA_JC)!=0 && (pcmd->exttype & DX_CARRYMASK)==DX_JB) continue; // (8) Wait for DX_JC ; }; }; if ((pcmd->exttype & (DX_VEX|DX_LEADMASK))!=vexlead) continue; // (5) Unmatched VEX prefix if (pcmd->exttype & DX_VEX) { if (((pcmd->exttype & DX_VLMASK)==DX_LSHORT && (vex & 0x04)!=0) || ((pcmd->exttype & DX_VLMASK)==DX_LLONG && (vex & 0x04)==0)) continue; // (5) Unmatched VEX.L ; }; if ((cmdtype & (D_MEMORY|D_REGISTER|D_LONGFORM|D_SIZEMASK|D_MUSTMASK|D_POSTBYTE))==0 ) { success=1; break; }; // Optimization for most frequent case switch (cmdtype & D_MUSTMASK) { case D_MUST66: // (4) (SSE) Requires 66, no F2 or F3 if ((im.prefixlist & (PF_66|PF_F2|PF_F3))!=PF_66) continue; break; case D_MUSTF2: // (4) (SSE) Requires F2, no 66 or F3 if ((im.prefixlist & (PF_66|PF_F2|PF_F3))!=PF_F2) continue; break; case D_MUSTF3: // (4) (SSE) Requires F3, no 66 or F2 if ((im.prefixlist & (PF_66|PF_F2|PF_F3))!=PF_F3) continue; break; case D_MUSTNONE: // (4) (MMX,SSE) Requires no 66, F2, F3 if ((im.prefixlist & (PF_66|PF_F2|PF_F3))!=0) continue; break; case D_NEEDF2: // (4) (SSE) Requires F2, no F3 if ((im.prefixlist & (PF_F2|PF_F3))!=PF_F2) continue; break; case D_NEEDF3: // (4) (SSE) Requires F3, no F2 if ((im.prefixlist & (PF_F2|PF_F3))!=PF_F3) continue; break; case D_NOREP: // (4) Must not include F2 or F3 if ((im.prefixlist & (PF_REP|PF_REPNE))!=0) continue; break; case D_MUSTREP: // (4) Must include F3 (REP) case D_MUSTREPE: // (4) Must include F3 (REPE) if ((im.prefixlist & PF_REP)==0) continue; break; case D_MUSTREPNE: // (4) Must include F2 (REPNE) if ((im.prefixlist & PF_REPNE)==0) continue; break; default: break; }; if ((cmdtype & D_DATA16)!=0 && (im.prefixlist & PF_DSIZE)==0) continue; // (3) 16-bit data expected if ((cmdtype & D_DATA32)!=0 && (im.prefixlist & PF_DSIZE)!=0) continue; // (3) 32-bit data expected if ((cmdtype & D_ADDR16)!=0 && (im.prefixlist & PF_ASIZE)==0) continue; // (3) 16-bit address expected if ((cmdtype & D_ADDR32)!=0 && (im.prefixlist & PF_ASIZE)!=0) continue; // (3) 32-bit address expected if ((cmdtype & D_LONGFORM)!=0 && config->shortstringcmds!=0 && (im.prefixlist & (PF_ES|PF_CS|PF_SS|PF_FS|PF_GS|PF_ASIZE))==0) continue; // (6) Short form of string cmd expected if (cmdtype & D_MEMORY) { // (2) Command expects operand in memory (Mod in ModRegRM is not 11b). if (n+pcmd->length>=cmdsize) break; // Command longer than available code if ((cmd[n+pcmd->length] & 0xC0)==0xC0) continue; } else if (cmdtype & D_REGISTER) { // (2) Command expects operand in register (Mod in ModRegRM is 11b). if (n+pcmd->length>=cmdsize) break; // Command longer than available code if ((cmd[n+pcmd->length] & 0xC0)!=0xC0) continue; } if (cmdtype & D_POSTBYTE) { // Command expects postbyte after ModRegRM/SIB/offset as part of the // code. If command is longer than available code, immediately report // match - error will be reported elsewhere. m=n+pcmd->length; // Offset to ModRegRM byte if (m>=cmdsize) break; // Command longer than available code if (im.prefixlist & PF_ASIZE) m+=modrm16[cmd[m]].size; // 16-bit address else { pmrm=modrm32+cmd[m]; if (pmrm->psib==NULL) // 32-bit address without SIB m+=pmrm->size; else if (m+1>=cmdsize) // Command longer than available code break; else // 32-bit address with SIB m+=pmrm->psib[cmd[m+1]].size; ; }; if (m>=cmdsize) break; // Command longer than available code // Asterisk in SSE and AVX commands means comparison predicate. Check // for predefined range. if (cmd[m]==(uchar)pcmd->postbyte || ((cmdtype & D_WILDCARD)!=0 && cmd[m]<(pcmd->exttype & DX_VEX?32:8))) im.immsize1=1; // (7) Interprete postbyte as imm const else continue; // (7) ; }; success=1; break; // Perfect match, command found }; // If command is bad but preceded with prefixes, decode first prefix as // standalone. In this case, list of command's prefixes is empty. if (success==0) { pcmd=NULL; if (im.prefixlist!=0) { n=0; da->nprefix=0; da->prefixes=im.prefixlist=0; code=cmd[n] & CMDMASK; for (pchain=cmdchain+code; ; pchain=pchain->pnext) { if (pchain==NULL || pchain->pcmd==NULL) { pcmd=NULL; break; }; // End of chain, no match pcmd=pchain->pcmd; if ((pcmd->cmdtype & D_CMDTYPE)!=D_PREFIX) continue; if (((code ^ pcmd->code) & pcmd->mask)==0) { cmdtype=pcmd->cmdtype; da->errors|=DAE_BADCMD; break; }; }; }; // If matching command is still not found, report error and return one byte // as a command length. if (pcmd==NULL) { if (damode & DA_DUMP) Thexdump(da->dump,cmd,1,config->lowercase); if (damode & DA_TEXT) { if (config->disasmmode==DAMODE_HLA) j=Tcopycase(da->result,TEXTLEN,sizename[1],config->lowercase); else if (config->disasmmode==DAMODE_ATT) j=Tcopycase(da->result,TEXTLEN,sizeatt[1],config->lowercase); else j=Tcopycase(da->result,TEXTLEN,sizekey[1],config->lowercase); j+=Tstrcopy(da->result+j,TEXTLEN-j,T(" ")); Thexdump(da->result+j,cmd,1,config->lowercase); }; da->size=1; da->nprefix=0; da->prefixes=0; da->cmdtype=D_BAD; da->exttype=0; da->errors|=DAE_BADCMD; // Unrecognized command if (damode & DA_HILITE) { da->masksize=tstrlen(da->result); memset(da->mask,DRAW_SUSPECT,da->masksize); }; return 1; }; }; // Exclude prefixes that are integral part of the command from the list of // prefixes. First comparison optimizes for the most frequent case of no // obligatory prefixes. if (cmdtype & (D_SIZEMASK|D_MUSTMASK)) { switch (cmdtype & D_MUSTMASK) { case D_MUST66: // (SSE) Requires 66, no F2 or F3 case D_MUSTF2: // (SSE) Requires F2, no 66 or F3 case D_MUSTF3: // (SSE) Requires F3, no 66 or F2 im.prefixlist&=~(PF_66|PF_F2|PF_F3); break; case D_NEEDF2: // (SSE) Requires F2, no F3 case D_NEEDF3: // (SSE) Requires F3, no F2 im.prefixlist&=~(PF_F2|PF_F3); break; default: break; }; if (cmdtype & D_DATA16) // Must include data size prefix im.prefixlist&=~PF_DSIZE; if (cmdtype & D_ADDR16) // Must include address size prefix im.prefixlist&=~PF_ASIZE; ; }; // Prepare for disassembling. im.modsize=0; // Size of ModRegRM/SIB bytes im.dispsize=0; // Size of address offset im.usesdatasize=0; im.usesaddrsize=0; im.usessegment=0; da->cmdtype=cmdtype; da->exttype=pcmd->exttype; n+=pcmd->length; // Offset of ModRegRM or imm constant if (n>cmdsize) { da->errors|=DAE_CROSS; // Command crosses end of memory block goto error; }; im.mainsize=n; // Size of command with prefixes // Set default data size (note that many commands and operands override it). if ((cmdtype & D_SIZE01)!=0 && (cmd[n-1] & 0x01)==0) { if (im.prefixlist & PF_DSIZE) da->warnings|=DAW_DATASIZE; // Superfluous data size prefix datasize=1; } else if (im.prefixlist & PF_DSIZE) datasize=2; else datasize=4; // Process operands. noperand=0; for (i=0; iarg[i]; if ((arg & B_ARGMASK)==B_NONE) break; // Optimization for most frequent case // If pseudooperands to be skipped, I process them nevertheless. Such // operands may contain important information. if ((arg & B_PSEUDO)!=0 && (damode & DA_PSEUDO)==0) op=&pseudoop; // Request to skip pseudooperands else op=da->op+noperand++; op->arg=arg; switch (arg & B_ARGMASK) { case B_AL: // Register AL Operandintreg(&im,1,REG_AL,op); break; case B_AH: // Register AH Operandintreg(&im,1,REG_AH,op); break; case B_AX: // Register AX Operandintreg(&im,2,REG_EAX,op); break; case B_CL: // Register CL Operandintreg(&im,1,REG_CL,op); break; case B_CX: // Register CX Operandintreg(&im,2,REG_ECX,op); break; case B_DX: // Register DX Operandintreg(&im,2,REG_EDX,op); break; case B_DXPORT: // Register DX as I/O port address Operandintreg(&im,2,REG_EDX,op); op->features|=OP_PORT; break; case B_EAX: // Register EAX Operandintreg(&im,4,REG_EAX,op); break; case B_EBX: // Register EBX Operandintreg(&im,4,REG_EBX,op); break; case B_ECX: // Register ECX Operandintreg(&im,4,REG_ECX,op); break; case B_EDX: // Register EDX Operandintreg(&im,4,REG_EDX,op); break; case B_ACC: // Accumulator (AL/AX/EAX) Operandintreg(&im,datasize,REG_EAX,op); im.usesdatasize=1; break; case B_STRCNT: // Register CX or ECX as REPxx counter Operandintreg(&im,(im.prefixlist & PF_ASIZE?2:4),REG_ECX,op); im.usesaddrsize=1; break; case B_DXEDX: // Register DX or EDX in DIV/MUL Operandintreg(&im,datasize,REG_EDX,op); im.usesdatasize=1; break; case B_BPEBP: // Register BP or EBP in ENTER/LEAVE Operandintreg(&im,datasize,REG_EBP,op); im.usesdatasize=1; break; case B_REG: // 8/16/32-bit register in Reg // Note that all commands that use B_REG have also another operand // that requires ModRM, so we don't need to set modsize here. if (n>=cmdsize) da->errors|=DAE_CROSS; // Command crosses end of memory block else { Operandintreg(&im,datasize,(cmd[n]>>3) & 0x07,op); im.usesdatasize=1; }; break; case B_REG16: // 16-bit register in Reg if (n>=cmdsize) da->errors|=DAE_CROSS; // Command crosses end of memory block else Operandintreg(&im,2,(cmd[n]>>3) & 0x07,op); break; case B_REG32: // 32-bit register in Reg if (n>=cmdsize) da->errors|=DAE_CROSS; // Command crosses end of memory block else Operandintreg(&im,4,(cmd[n]>>3) & 0x07,op); break; case B_REGCMD: // 16/32-bit register in last cmd byte Operandintreg(&im,datasize,cmd[n-1] & 0x07,op); im.usesdatasize=1; break; case B_REGCMD8: // 8-bit register in last cmd byte Operandintreg(&im,1,cmd[n-1] & 0x07,op); break; case B_ANYREG: // Reg field is unused, any allowed break; case B_INT: // 8/16/32-bit register/memory in ModRM case B_INT1632: // 16/32-bit register/memory in ModRM k=Operandmodrm(&im,datasize,cmd+n,cmdsize-n,op); if (k<0) break; // Error in address if (k==0) Operandintreg(&im,datasize,cmd[n] & 0x07,op); im.usesdatasize=1; break; case B_INT8: // 8-bit register/memory in ModRM k=Operandmodrm(&im,1,cmd+n,cmdsize-n,op); if (k<0) break; // Error in address if (k==0) Operandintreg(&im,1,cmd[n] & 0x07,op); break; case B_INT16: // 16-bit register/memory in ModRM k=Operandmodrm(&im,2,cmd+n,cmdsize-n,op); if (k<0) break; // Error in address if (k==0) Operandintreg(&im,2,cmd[n] & 0x07,op); break; case B_INT32: // 32-bit register/memory in ModRM k=Operandmodrm(&im,4,cmd+n,cmdsize-n,op); if (k<0) break; // Error in address if (k==0) Operandintreg(&im,4,cmd[n] & 0x07,op); break; case B_INT64: // 64-bit integer in ModRM, memory only k=Operandmodrm(&im,8,cmd+n,cmdsize-n,op); if (k<0) break; // Error in address if (k==0) { // Register is not allowed, decode as 32-bit register and set error. Operandintreg(&im,4,cmd[n] & 0x07,op); op->features|=OP_INVALID; da->errors|=DAE_MEMORY; break; }; break; case B_INT128: // 128-bit integer in ModRM, memory only k=Operandmodrm(&im,16,cmd+n,cmdsize-n,op); if (k<0) break; // Error in address if (k==0) { // Register is not allowed, decode as 32-bit register and set error. Operandintreg(&im,4,cmd[n] & 0x07,op); op->features|=OP_INVALID; da->errors|=DAE_MEMORY; break; }; break; case B_IMMINT: // 8/16/32-bit int at immediate addr Operandimmaddr(&im,datasize,cmd+n,cmdsize-n,op); im.usesdatasize=1; break; case B_INTPAIR: // Two signed 16/32 in ModRM, memory only k=Operandmodrm(&im,2*datasize,cmd+n,cmdsize-n,op); if (k<0) break; // Error in address op->granularity=datasize; if (k==0) { // Register is not allowed, decode as register and set error. Operandintreg(&im,datasize,cmd[n] & 0x07,op); op->features|=OP_INVALID; da->errors|=DAE_MEMORY; break; }; im.usesdatasize=1; break; case B_SEGOFFS: // 16:16/16:32 absolute address in memory k=Operandmodrm(&im,datasize+2,cmd+n,cmdsize-n,op); if (k<0) break; // Error in address if (k==0) { // Register is not allowed, decode and set error. Operandintreg(&im,datasize,cmd[n] & 0x07,op); op->features|=OP_INVALID; da->errors|=DAE_MEMORY; break; }; im.usesdatasize=1; break; case B_STRDEST: // 8/16/32-bit string dest, [ES:(E)DI] Operandindirect(&im,REG_EDI,1,SEG_ES,0,datasize,op); im.usesdatasize=1; break; case B_STRDEST8: // 8-bit string destination, [ES:(E)DI] Operandindirect(&im,REG_EDI,1,SEG_ES,0,1,op); break; case B_STRSRC: // 8/16/32-bit string source, [(E)SI] Operandindirect(&im,REG_ESI,1,SEG_UNDEF,0,datasize,op); im.usesdatasize=1; break; case B_STRSRC8: // 8-bit string source, [(E)SI] Operandindirect(&im,REG_ESI,1,SEG_UNDEF,0,1,op); break; case B_XLATMEM: // 8-bit memory in XLAT, [(E)BX+AL] Operandxlat(&im,op); break; case B_EAXMEM: // Reference to memory addressed by [EAX] Operandindirect(&im,REG_EAX,0,SEG_UNDEF,4,1,op); break; case B_LONGDATA: // Long data in ModRM, mem only k=Operandmodrm(&im,256,cmd+n,cmdsize-n,op); if (k<0) break; // Error in address op->granularity=1; // Just a trick if (k==0) { // Register is not allowed, decode and set error. Operandintreg(&im,4,cmd[n] & 0x07,op); op->features|=OP_INVALID; da->errors|=DAE_MEMORY; break; }; im.usesdatasize=1; // Caveat user break; case B_ANYMEM: // Reference to memory, data unimportant k=Operandmodrm(&im,1,cmd+n,cmdsize-n,op); if (k<0) break; // Error in address if (k==0) { // Register is not allowed, decode and set error. Operandintreg(&im,4,cmd[n] & 0x07,op); op->features|=OP_INVALID; da->errors|=DAE_MEMORY; }; break; case B_STKTOP: // 16/32-bit int top of stack Operandindirect(&im,REG_ESP,1,SEG_SS,0,datasize,op); im.usesdatasize=1; break; case B_STKTOPFAR: // Top of stack (16:16/16:32 far addr) Operandindirect(&im,REG_ESP,1,SEG_SS,0,datasize*2,op); op->granularity=datasize; im.usesdatasize=1; break; case B_STKTOPEFL: // 16/32-bit flags on top of stack Operandindirect(&im,REG_ESP,1,SEG_SS,0,datasize,op); im.usesdatasize=1; break; case B_STKTOPA: // 16/32-bit top of stack all registers Operandindirect(&im,REG_ESP,1,SEG_SS,0,datasize*8,op); op->granularity=datasize; op->modifies=da->modifies=0xFF; im.usesdatasize=1; break; case B_PUSH: // 16/32-bit int push to stack case B_PUSHRET: // 16/32-bit push of return address case B_PUSHRETF: // 16:16/16:32-bit push of far retaddr case B_PUSHA: // 16/32-bit push all registers Operandpush(&im,datasize,op); im.usesdatasize=1; break; case B_EBPMEM: // 16/32-bit int at [EBP] Operandindirect(&im,REG_EBP,1,SEG_SS,0,datasize,op); im.usesdatasize=1; break; case B_SEG: // Segment register in Reg if (n>=cmdsize) da->errors|=DAE_CROSS; // Command crosses end of memory block else Operandsegreg(&im,(cmd[n]>>3) & 0x07,op); break; case B_SEGNOCS: // Segment register in Reg, but not CS if (n>=cmdsize) da->errors|=DAE_CROSS; // Command crosses end of memory block else { k=(cmd[n]>>3) & 0x07; Operandsegreg(&im,k,op); if (k==SEG_SS) da->exttype|=DX_WONKYTRAP; if (k==SEG_CS) { op->features|=OP_INVALID; da->errors|=DAE_BADSEG; }; }; break; case B_SEGCS: // Segment register CS Operandsegreg(&im,SEG_CS,op); break; case B_SEGDS: // Segment register DS Operandsegreg(&im,SEG_DS,op); break; case B_SEGES: // Segment register ES Operandsegreg(&im,SEG_ES,op); break; case B_SEGFS: // Segment register FS Operandsegreg(&im,SEG_FS,op); break; case B_SEGGS: // Segment register GS Operandsegreg(&im,SEG_GS,op); break; case B_SEGSS: // Segment register SS Operandsegreg(&im,SEG_SS,op); break; case B_ST: // 80-bit FPU register in last cmd byte Operandfpureg(&im,cmd[n-1] & 0x07,op); break; case B_ST0: // 80-bit FPU register ST0 Operandfpureg(&im,0,op); break; case B_ST1: // 80-bit FPU register ST1 Operandfpureg(&im,1,op); break; case B_FLOAT32: // 32-bit float in ModRM, memory only k=Operandmodrm(&im,4,cmd+n,cmdsize-n,op); if (k<0) break; // Error in address if (k==0) { // Register is not allowed, decode as FPU register and set error. Operandfpureg(&im,cmd[n] & 0x07,op); op->features|=OP_INVALID; da->errors|=DAE_MEMORY; }; break; case B_FLOAT64: // 64-bit float in ModRM, memory only k=Operandmodrm(&im,8,cmd+n,cmdsize-n,op); if (k<0) break; // Error in address if (k==0) { // Register is not allowed, decode as FPU register and set error. Operandfpureg(&im,cmd[n] & 0x07,op); op->features|=OP_INVALID; da->errors|=DAE_MEMORY; }; break; case B_FLOAT80: // 80-bit float in ModRM, memory only k=Operandmodrm(&im,10,cmd+n,cmdsize-n,op); if (k<0) break; // Error in address if (k==0) { // Register is not allowed, decode as FPU register and set error. Operandfpureg(&im,cmd[n] & 0x07,op); op->features|=OP_INVALID; da->errors|=DAE_MEMORY; }; break; case B_BCD: // 80-bit BCD in ModRM, memory only k=Operandmodrm(&im,10,cmd+n,cmdsize-n,op); if (k<0) break; // Error in address if (k==0) { // Register is not allowed, decode as FPU register and set error. Operandfpureg(&im,cmd[n] & 0x07,op); op->features|=OP_INVALID; da->errors|=DAE_MEMORY; }; break; case B_MREG8x8: // MMX register as 8 8-bit integers case B_MREG16x4: // MMX register as 4 16-bit integers case B_MREG32x2: // MMX register as 2 32-bit integers case B_MREG64: // MMX register as 1 64-bit integer if (n>=cmdsize) da->errors|=DAE_CROSS; // Command crosses end of memory block else { Operandmmxreg(&im,(cmd[n]>>3) & 0x07,op); op->granularity=Getgranularity(arg); }; break; case B_MMX8x8: // MMX reg/memory as 8 8-bit integers case B_MMX16x4: // MMX reg/memory as 4 16-bit integers case B_MMX32x2: // MMX reg/memory as 2 32-bit integers case B_MMX64: // MMX reg/memory as 1 64-bit integer k=Operandmodrm(&im,8,cmd+n,cmdsize-n,op); if (k<0) break; // Error in address if (k==0) Operandmmxreg(&im,cmd[n] & 0x07,op); op->granularity=Getgranularity(arg); break; case B_MMX8x8DI: // MMX 8 8-bit integers at [DS:(E)DI] Operandindirect(&im,REG_EDI,0,SEG_UNDEF,0,8,op); op->granularity=Getgranularity(arg); break; case B_3DREG: // 3DNow! register as 2 32-bit floats if (n>=cmdsize) da->errors|=DAE_CROSS; // Command crosses end of memory block else { Operandnowreg(&im,(cmd[n]>>3) & 0x07,op); op->granularity=4; }; break; case B_3DNOW: // 3DNow! reg/memory as 2 32-bit floats k=Operandmodrm(&im,8,cmd+n,cmdsize-n,op); if (k<0) break; // Error in address if (k==0) Operandnowreg(&im,cmd[n] & 0x07,op); op->granularity=4; break; case B_SREGF32x4: // SSE register as 4 32-bit floats case B_SREGF32L: // Low 32-bit float in SSE register case B_SREGF32x2L: // Low 2 32-bit floats in SSE register case B_SREGF64x2: // SSE register as 2 64-bit floats case B_SREGF64L: // Low 64-bit float in SSE register if (n>=cmdsize) da->errors|=DAE_CROSS; // Command crosses end of memory block else { Operandssereg(&im,(cmd[n]>>3) & 0x07,op); op->granularity=Getgranularity(arg); }; break; case B_SVEXF32x4: // SSE reg in VEX as 4 32-bit floats case B_SVEXF32L: // Low 32-bit float in SSE in VEX case B_SVEXF64x2: // SSE reg in VEX as 2 64-bit floats case B_SVEXF64L: // Low 64-bit float in SSE in VEX Operandssereg(&im,vexreg,op); op->granularity=Getgranularity(arg); break; case B_SSEF32x4: // SSE reg/memory as 4 32-bit floats case B_SSEF64x2: // SSE reg/memory as 2 64-bit floats k=Operandmodrm(&im, (arg & B_NOVEXSIZE?16:im.ssesize),cmd+n,cmdsize-n,op); if (k<0) break; // Error in address if (k==0) Operandssereg(&im,cmd[n] & 0x07,op); op->granularity=Getgranularity(arg); break; case B_SSEF32L: // Low 32-bit float in SSE reg/memory k=Operandmodrm(&im,4,cmd+n,cmdsize-n,op); if (k<0) break; // Error in address if (k==0) // Operand in SSE register Operandssereg(&im,cmd[n] & 0x07,op); op->granularity=4; break; case B_SSEF32x2L: // Low 2 32-bit floats in SSE reg/memory k=Operandmodrm(&im, (arg & B_NOVEXSIZE?16:im.ssesize)/2,cmd+n,cmdsize-n,op); if (k<0) break; // Error in address if (k==0) // Operand in SSE register Operandssereg(&im,cmd[n] & 0x07,op); op->granularity=4; break; case B_SSEF64L: // Low 64-bit float in SSE reg/memory k=Operandmodrm(&im,8,cmd+n,cmdsize-n,op); if (k<0) break; // Error in address if (k==0) // Operand in SSE register Operandssereg(&im,cmd[n] & 0x07,op); op->granularity=8; break; case B_XMM0I32x4: // XMM0 as 4 32-bit integers case B_XMM0I64x2: // XMM0 as 2 64-bit integers case B_XMM0I8x16: // XMM0 as 16 8-bit integers Operandssereg(&im,0,op); op->granularity=Getgranularity(arg); break; case B_SREGI8x16: // SSE register as 16 8-bit sigints case B_SREGI16x8: // SSE register as 8 16-bit sigints case B_SREGI32x4: // SSE register as 4 32-bit sigints case B_SREGI64x2: // SSE register as 2 64-bit sigints case B_SREGI32L: // Low 32-bit sigint in SSE register case B_SREGI32x2L: // Low 2 32-bit sigints in SSE register case B_SREGI64L: // Low 64-bit sigint in SSE register if (n>=cmdsize) da->errors|=DAE_CROSS; // Command crosses end of memory block else { Operandssereg(&im,(cmd[n]>>3) & 0x07,op); op->granularity=Getgranularity(arg); }; break; case B_SVEXI8x16: // SSE reg in VEX as 16 8-bit sigints case B_SVEXI16x8: // SSE reg in VEX as 8 16-bit sigints case B_SVEXI32x4: // SSE reg in VEX as 4 32-bit sigints case B_SVEXI64x2: // SSE reg in VEX as 2 64-bit sigints Operandssereg(&im,vexreg,op); op->granularity=Getgranularity(arg); break; case B_SSEI8x16: // SSE reg/memory as 16 8-bit sigints case B_SSEI16x8: // SSE reg/memory as 8 16-bit sigints case B_SSEI32x4: // SSE reg/memory as 4 32-bit sigints case B_SSEI64x2: // SSE reg/memory as 2 64-bit sigints k=Operandmodrm(&im, (arg & B_NOVEXSIZE?16:im.ssesize),cmd+n,cmdsize-n,op); if (k<0) break; // Error in address if (k==0) Operandssereg(&im,cmd[n] & 0x07,op); op->granularity=Getgranularity(arg); break; case B_SSEI8x8L: // Low 8 8-bit ints in SSE reg/memory case B_SSEI16x4L: // Low 4 16-bit ints in SSE reg/memory case B_SSEI32x2L: // Low 2 32-bit sigints in SSE reg/memory k=Operandmodrm(&im, (arg & B_NOVEXSIZE?16:im.ssesize)/2,cmd+n,cmdsize-n,op); if (k<0) break; // Error in address if (k==0) Operandssereg(&im,cmd[n] & 0x07,op); op->granularity=Getgranularity(arg); break; case B_SSEI8x4L: // Low 4 8-bit ints in SSE reg/memory case B_SSEI16x2L: // Low 2 16-bit ints in SSE reg/memory k=Operandmodrm(&im,4,cmd+n,cmdsize-n,op); if (k<0) break; // Error in address if (k==0) Operandssereg(&im,cmd[n] & 0x07,op); op->granularity=Getgranularity(arg); break; case B_SSEI8x2L: // Low 2 8-bit ints in SSE reg/memory k=Operandmodrm(&im,2,cmd+n,cmdsize-n,op); if (k<0) break; // Error in address if (k==0) Operandssereg(&im,cmd[n] & 0x07,op); op->granularity=Getgranularity(arg); break; case B_SSEI8x16DI: // SSE 16 8-bit sigints at [DS:(E)DI] Operandindirect(&im,REG_EDI,0,SEG_UNDEF,0, (arg & B_NOVEXSIZE?16:im.ssesize),op); op->granularity=1; break; case B_EFL: // Flags register EFL Operandefl(&im,4,op); break; case B_FLAGS8: // Flags (low byte) Operandefl(&im,1,op); break; case B_OFFSET: // 16/32 const offset from next command Operandoffset(&im,datasize,datasize,cmd+n,cmdsize-n,da->ip+n,op); break; case B_BYTEOFFS: // 8-bit sxt const offset from next cmd Operandoffset(&im,1,datasize,cmd+n,cmdsize-n,da->ip+n,op); break; case B_FARCONST: // 16:16/16:32 absolute address constant Operandimmfaraddr(&im,datasize,cmd+n,cmdsize-n,op); break; case B_DESCR: // 16:32 descriptor in ModRM k=Operandmodrm(&im,6,cmd+n,cmdsize-n,op); if (k<0) break; // Error in address if (k==0) { // Register is not allowed, decode as 32-bit register and set error. Operandintreg(&im,4,cmd[n] & 0x07,op); op->features|=OP_INVALID; da->errors|=DAE_MEMORY; }; break; case B_1: // Immediate constant 1 Operandone(&im,op); break; case B_CONST8: // Immediate 8-bit constant Operandimmconst(&im,1,1,datasize,cmd+n,cmdsize-n,0,op); if (arg & B_PORT) op->features|=OP_PORT; break; case B_SIMMI8x16: // SSE reg in immediate 8-bit constant if (cmdsize-nerrors|=DAE_CROSS; // Command crosses end of memory block break; }; im.immsize1=1; Operandssereg(&im,(cmd[n+im.modsize+im.dispsize]>>4) & 0x07,op); op->granularity=Getgranularity(arg); break; case B_CONST8_2: // Immediate 8-bit const, second in cmd Operandimmconst(&im,1,1,datasize,cmd+n,cmdsize-n,1,op); break; case B_CONST16: // Immediate 16-bit constant Operandimmconst(&im,2,2,datasize,cmd+n,cmdsize-n,0,op); break; case B_CONST: // Immediate 8/16/32-bit constant case B_CONSTL: // Immediate 16/32-bit constant Operandimmconst(&im,datasize,datasize,datasize,cmd+n,cmdsize-n,0,op); im.usesdatasize=1; break; case B_SXTCONST: // Immediate 8-bit sign-extended to size Operandimmconst(&im,1,datasize,datasize,cmd+n,cmdsize-n,0,op); im.usesdatasize=1; break; case B_CR: // Control register in Reg Operandcreg(&im,(cmd[n]>>3) & 0x07,op); break; case B_CR0: // Control register CR0 Operandcreg(&im,0,op); break; case B_DR: // Debug register in Reg Operanddreg(&im,(cmd[n]>>3) & 0x07,op); break; case B_FST: // FPU status register Operandfst(&im,op); break; case B_FCW: // FPU control register Operandfcw(&im,op); break; case B_MXCSR: // SSE media control and status register Operandmxcsr(&im,op); break; default: // Internal error da->errors|=DAE_INTERN; break; }; if ((arg & B_32BITONLY)!=0 && op->opsize!=4) da->warnings|=DAW_NONCLASS; if ((arg & B_MODMASK)==B_JMPCALLFAR) da->warnings|=DAW_FARADDR; if (arg & B_PSEUDO) op->features|=OP_PSEUDO; if (arg & (B_CHG|B_UPD)) op->features|=OP_MOD; }; if (im.prefixlist!=0) { // Optimization for most frequent case // If LOCK prefix is present, report error if prefix is not allowed by // command and warning otherwise. Application code usually doesn't need // atomic bus access. if ((im.prefixlist & PF_LOCK)!=0) { if ((cmdtype & D_LOCKABLE)==0) da->errors|=DAE_LOCK; else da->warnings|=DAW_LOCK; }; // Warn if data size prefix is present but not used by command. if ((im.prefixlist & PF_DSIZE)!=0 && im.usesdatasize==0 && (pcmd->exttype & DX_TYPEMASK)!=DX_NOP) da->warnings|=DAW_DATASIZE; // Warn if address size prefix is present but not used by command. if ((im.prefixlist & PF_ASIZE)!=0 && im.usesaddrsize==0) da->warnings|=DAW_ADDRSIZE; // Warn if segment override prefix is present but command doesn't access // memory. Prefixes CS: and DS: are also used as branch hints in // conditional branches. if ((im.prefixlist & PF_SEGMASK)!=0 && im.usessegment==0) { if ((cmdtype & D_BHINT)==0 || (im.prefixlist & PF_HINT)==0) da->warnings|=DAW_SEGPREFIX; }; // Warn if REPxx prefix is present but not used by command. Attention, // Intel frequently uses these prefixes for different means! if (im.prefixlist & PF_REPMASK) { if (((im.prefixlist & PF_REP)!=0 && (cmdtype & D_MUSTMASK)!=D_MUSTREP && (cmdtype & D_MUSTMASK)!=D_MUSTREPE) || ((im.prefixlist & PF_REPNE)!=0 && (cmdtype & D_MUSTMASK)!=D_MUSTREPNE)) da->warnings|=DAW_REPPREFIX; }; }; // Warn on unaligned stack, I/O and privileged commands. switch (cmdtype & D_CMDTYPE) { case D_PUSH: if (datasize==2) da->warnings|=DAW_STACK; break; case D_INT: da->warnings|=DAW_INTERRUPT; break; case D_IO: da->warnings|=DAW_IO; break; case D_PRIVILEGED: da->warnings|=DAW_PRIV; break; }; // Warn on system, privileged and undocumented commands. if ((cmdtype & D_USEMASK)!=0) { if ((cmdtype & D_USEMASK)==D_RARE || (cmdtype & D_USEMASK)==D_SUSPICIOUS) da->warnings|=DAW_RARE; if ((cmdtype & D_USEMASK)==D_UNDOC) da->warnings|=DAW_NONCLASS; }; // If command implicitly changes ESP, it uses and modifies this register. if (cmdtype & D_CHGESP) { da->uses|=(1<modifies|=(1<errors & DAE_CROSS) // Incomplete command Thexdump(da->dump,cmd,cmdsize,config->lowercase); else { j=0; // Dump prefixes. REPxx is treated as prefix and separated from command // with semicolon; prefixes 66, F2 and F3 that are part of SSE command // are glued with command's body - well, at least if there are no other // prefixes inbetween. for (u=0; unprefix; u++) { j+=Thexdump(da->dump+j,cmd+u,1,config->lowercase); if (cmd[u]==0x66 && (cmdtype & D_MUSTMASK)==D_MUST66) continue; if (cmd[u]==0xF2 && ((cmdtype & D_MUSTMASK)==D_MUSTF2 || (cmdtype & D_MUSTMASK)==D_NEEDF2)) continue; if (cmd[u]==0xF3 && ((cmdtype & D_MUSTMASK)==D_MUSTF3 || (cmdtype & D_MUSTMASK)==D_NEEDF3)) continue; if ((im.prefixlist & (PF_VEX2|PF_VEX3))!=0 && u==da->nprefix-2) continue; if ((im.prefixlist & PF_VEX3)!=0 && u==da->nprefix-3) continue; da->dump[j++]=T(':'); }; // Dump body of the command, including ModRegRM and SIB bytes. j+=Thexdump(da->dump+j,cmd+u,im.mainsize+im.modsize-u, config->lowercase); // Dump displacement, if any, separated with space from command's body. if (im.dispsize>0) { da->dump[j++]=T(' '); j+=Thexdump(da->dump+j,cmd+im.mainsize+im.modsize,im.dispsize, config->lowercase); ; }; // Dump immediate constants, if any. if (im.immsize1>0) { da->dump[j++]=T(' '); j+=Thexdump(da->dump+j,cmd+im.mainsize+im.modsize+im.dispsize, im.immsize1,config->lowercase) ; }; if (im.immsize2>0) { da->dump[j++]=T(' '); Thexdump(da->dump+j,cmd+im.mainsize+im.modsize+im.dispsize+im.immsize1, im.immsize2,config->lowercase); ; }; }; }; // Prepare disassembled command. There are many options that control look // and feel of disassembly, so the procedure is a bit, errr, boring. if (damode & DA_TEXT) { if (da->errors & DAE_CROSS) { // Incomplete command q=Tstrcopy(da->result,TEXTLEN,T("???")); if (damode & DA_HILITE) { memset(da->mask,DRAW_SUSPECT,q); da->masksize=q; }; } else { j=0; // If LOCK and/or REPxx prefix is present, prepend it to the command. // Such cases are rare, first comparison makes small optimization. if (im.prefixlist & (PF_LOCK|PF_REPMASK)) { if (im.prefixlist & PF_LOCK) j=Tcopycase(da->result,TEXTLEN,T("LOCK "),config->lowercase); if (im.prefixlist & PF_REPNE) j+=Tcopycase(da->result+j,TEXTLEN-j,T("REPNE "),config->lowercase); else if (im.prefixlist & PF_REP) { if ((cmdtype & D_MUSTMASK)==D_MUSTREPE) j+=Tcopycase(da->result+j,TEXTLEN-j,T("REPE "),config->lowercase); else j+=Tcopycase(da->result+j,TEXTLEN-j,T("REP "),config->lowercase); ; }; }; // If there is a branch hint, prefix jump mnemonics with '+' (taken) or // '-' (not taken), or use pseudoprefixes BHT/BHNT. I don't know how MASM // indicates hints. if (cmdtype & D_BHINT) { if (config->jumphintmode==0) { if (im.prefixlist & PF_TAKEN) da->result[j++]=T('+'); else if (im.prefixlist & PF_NOTTAKEN) da->result[j++]=T('-'); ; } else { if (im.prefixlist & PF_TAKEN) j+=Tcopycase(da->result+j,TEXTLEN-j,T("BHT "),config->lowercase); else if (im.prefixlist & PF_NOTTAKEN) j+=Tcopycase(da->result+j,TEXTLEN-j,T("BHNT "),config->lowercase); ; }; }; // Get command mnemonics. If mnemonics contains asterisk, it must be // replaced by W, D or none according to sizesens. Asterisk in SSE and // AVX commands means comparison predicate. if (cmdtype & D_WILDCARD) { for (i=0; ; i++) { if (pcmd->name[i]==T('\0')) break; else if (pcmd->name[i]!=T('*')) da->result[j++]=pcmd->name[i]; else if (cmdtype & D_POSTBYTE) j+=Tstrcopy(da->result+j,TEXTLEN-j, ssepredicate[cmd[im.mainsize+im.modsize+im.dispsize]]); else if (datasize==4 && (config->sizesens==0 || config->sizesens==1)) da->result[j++]=T('D'); else if (datasize==2 && (config->sizesens==1 || config->sizesens==2)) da->result[j++]=T('W'); ; }; da->result[j]=T('\0'); if (config->lowercase) tstrlwr(da->result); } else { j+=Tcopycase(da->result+j,TEXTLEN-j,pcmd->name,config->lowercase); if (config->disasmmode==DAMODE_ATT && im.usesdatasize!=0) { // AT&T mnemonics are suffixed with the operand's size. if ((cmdtype & D_CMDTYPE)!=D_CMD && (cmdtype & D_CMDTYPE)!=D_MOV && (cmdtype & D_CMDTYPE)!=D_MOVC && (cmdtype & D_CMDTYPE)!=D_TEST && (cmdtype & D_CMDTYPE)!=D_STRING && (cmdtype & D_CMDTYPE)!=D_PUSH && (cmdtype & D_CMDTYPE)!=D_POP) ; else if (datasize==1) j+=Tcopycase(da->result+j,TEXTLEN-j, T("B"),config->lowercase); else if (datasize==2) j+=Tcopycase(da->result+j,TEXTLEN-j, T("W"),config->lowercase); else if (datasize==4) j+=Tcopycase(da->result+j,TEXTLEN-j, T("L"),config->lowercase); else if (datasize==8) j+=Tcopycase(da->result+j,TEXTLEN-j, T("Q"),config->lowercase); ; }; }; if (damode & DA_HILITE) { type=cmdtype & D_CMDTYPE; if (da->errors!=0) cfill=DRAW_SUSPECT; else switch (cmdtype & D_CMDTYPE) { case D_JMP: // Unconditional near jump case D_JMPFAR: // Unconditional far jump cfill=DRAW_JUMP; break; case D_JMC: // Conditional jump on flags case D_JMCX: // Conditional jump on (E)CX (and flags) cfill=DRAW_CJMP; break; case D_PUSH: // PUSH exactly 1 (d)word of data case D_POP: // POP exactly 1 (d)word of data cfill=DRAW_PUSHPOP; break; case D_CALL: // Plain near call case D_CALLFAR: // Far call case D_INT: // Interrupt cfill=DRAW_CALL; break; case D_RET: // Plain near return from call case D_RETFAR: // Far return or IRET cfill=DRAW_RET; break; case D_FPU: // FPU command case D_MMX: // MMX instruction, incl. SSE extensions case D_3DNOW: // 3DNow! instruction case D_SSE: // SSE instruction case D_AVX: // AVX instruction cfill=DRAW_FPU; break; case D_IO: // Accesses I/O ports case D_SYS: // Legal but useful in system code only case D_PRIVILEGED: // Privileged (non-Ring3) command cfill=DRAW_SUSPECT; break; default: cfill=DRAW_PLAIN; break; }; memset(da->mask,cfill,j); da->masksize=j; }; // Add decoded operands. In HLA mode, order of operands is inverted // except for comparison commands (marked with bit D_HLADIR) and // arguments are enclosed in parenthesis (except for immediate jumps). // In AT&T mode, order of operands is always inverted. Operands of type // B_PSEUDO are implicit and don't appear in text. if (config->disasmmode==DAMODE_HLA && (pcmd->arg[0] & B_ARGMASK)!=B_OFFSET && (pcmd->arg[0] & B_ARGMASK)!=B_BYTEOFFS && (pcmd->arg[0] & B_ARGMASK)!=B_FARCONST) enclose=1; // Enclose operand list in parenthesis else enclose=0; if ((damode & DA_HILITE)!=0 && config->hiliteoperands!=0) cfill=DRAW_PLAIN; nout=0; for (i=0; idisasmmode==DAMODE_HLA && (cmdtype & D_HLADIR)==0) || config->disasmmode==DAMODE_ATT) k=noperand-1-i; // Inverted (HLA/AT&T) order of operands else k=i; // Direct (Intel's) order of operands arg=da->op[k].arg; if ((arg & B_ARGMASK)==B_NONE || (arg & B_PSEUDO)!=0) continue; // Empty or implicit operand q=j; if (nout==0) { // Spaces between mnemonic and first operand. da->result[j++]=T(' '); if (config->tabarguments) { for ( ; j<8; j++) da->result[j]=T(' '); }; if (enclose) { da->result[j++]=T('('); if (config->extraspace) da->result[j++]=(' '); }; } else { // Comma and optional space between operands. da->result[j++]=T(','); if (config->extraspace) da->result[j++]=T(' '); }; if (damode & DA_HILITE) { memset(da->mask+q,cfill,j-q); da->masksize=j; }; // Operand itself. q=j; op=da->op+k; j+=Tstrcopy(da->result+j,TEXTLEN-j-10,op->text); if (damode & DA_HILITE) { if (config->hiliteoperands==0) ofill=cfill; else if (op->features & OP_REGISTER) ofill=DRAW_IREG; else if (op->features & (OP_FPUREG|OP_MMXREG|OP_3DNOWREG|OP_SSEREG)) ofill=DRAW_FREG; else if (op->features & (OP_SEGREG|OP_CREG|OP_DREG)) ofill=DRAW_SYSREG; else if (op->features & OP_MEMORY) { if (op->scale[REG_ESP]!=0 || op->scale[REG_EBP]!=0) ofill=DRAW_STKMEM; else ofill=DRAW_MEM; ; } else if (op->features & OP_CONST) ofill=DRAW_CONST; else ofill=cfill; memset(da->mask+q,ofill,j-q); da->masksize=j; }; nout++; }; // All arguments added, close list. if (enclose && nout!=0) { q=j; if (config->extraspace) da->result[j++]=T(' '); da->result[j++]=T(')'); if (damode & DA_HILITE) { memset(da->mask+q,cfill,j-q); da->masksize=j; }; }; da->result[j]=T('\0'); }; }; // Calculate total size of command. if (da->errors & DAE_CROSS) // Incomplete command n=cmdsize; else n+=im.modsize+im.dispsize+im.immsize1+im.immsize2; da->size=n; return n; }; // Given error and warning lists, returns pointer to the string describing // relatively most severe error or warning, or NULL if there are no errors or // warnings. tchar *Geterrwarnmessage(ulong errors,ulong warnings) { tchar *ps; if (errors==0 && warnings==0) ps=NULL; else if (errors & DAE_BADCMD) ps=T("Unknown command"); else if (errors & DAE_CROSS) ps=T("Command crosses end of memory block"); else if (errors & DAE_MEMORY) ps=T("Illegal use of register"); else if (errors & DAE_REGISTER) ps=T("Memory address is not allowed"); else if (errors & DAE_LOCK) ps=T("LOCK prefix is not allowed"); else if (errors & DAE_BADSEG) ps=T("Invalid segment register"); else if (errors & DAE_SAMEPREF) ps=T("Two prefixes from the same group"); else if (errors & DAE_MANYPREF) ps=T("More than 4 prefixes"); else if (errors & DAE_BADCR) ps=T("Invalid CR register"); else if (errors & DAE_INTERN) ps=T("Internal OllyDbg error"); else if (warnings & DAW_DATASIZE) ps=T("Superfluous operand size prefix"); else if (warnings & DAW_ADDRSIZE) ps=T("Superfluous address size prefix"); else if (warnings & DAW_SEGPREFIX) ps=T("Superfluous segment override prefix"); else if (warnings & DAW_REPPREFIX) ps=T("Superfluous REPxx prefix"); else if (warnings & DAW_DEFSEG) ps=T("Explicit default segment register"); else if (warnings & DAW_JMP16) ps=T("16-bit jump, call or return"); else if (warnings & DAW_FARADDR) ps=T("Far jump or call"); else if (warnings & DAW_SEGMOD) ps=T("Modification of segment register"); else if (warnings & DAW_PRIV) ps=T("Privileged instruction"); else if (warnings & DAW_IO) ps=T("I/O command"); else if (warnings & DAW_SHIFT) ps=T("Shift out of range"); else if (warnings & DAW_LOCK) ps=T("Command uses (valid) LOCK prefix"); else if (warnings & DAW_STACK) ps=T("Unaligned stack operation"); else if (warnings & DAW_NOESP) ps=T("Suspicious use of stack pointer"); else if (warnings & DAW_NONCLASS) ps=T("Undocumented instruction or encoding"); else ps=NULL; return ps; }; ================================================ FILE: Disasm201/cmdlist.c ================================================ //////////////////////////////////////////////////////////////////////////////// // // // OllyDbg Disassembling Engine v2.01 // // // // Copyright (c) 2007-2013 Oleh Yuschuk, ollydbg@t-online.de // // // // This code is part of the OllyDbg Disassembler v2.01 // // // // Disassembling engine 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 3 of the License, or (at // // your option) any later version. // // // // This code 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, see . // // // //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// // // // This is a fast disassembler that can be used to determine the length of // // the binary 80x86 32-bit command and its attributes, to convert it to the // // human-readable text form, highlight its operands, and create hexadecimal // // dump of the binary command. // // // // It is a stripped down version of the disassembler used by OllyDbg 2.01. // // It can't analyse and comment the contents of the operands, or predict the // // results of the command execution. Analysis-dependent features are not // // included, too. Most other features are kept. // // // // Disassembler supports integer, FPU, MMX, 3DNow, SSE1-SSE4.1 and AVX // // instructions. 64-bit mode, AVX2, FMA and XOP are not (yet) supported. // // // // This code can be compiled either in ASCII or UNICODE mode. It is reentrant // // (thread-safe, feature not available in the original OllyDbg code). // // // // Typical operation speed on 3-GHz Phenom II in MASM mode is: // // // // Command length and info: 130 ns/command (7,700,000 commands/s) // // Disassembly: 290 ns/command (3,400,000 commands/s) // // Disassembly, dump, highlighting: 350 ns/command (2,800,000 commands/s) // // // //////////////////////////////////////////////////////////////////////////////// #include #pragma hdrstop #include "disasm.h" const t_bincmd bincmd[] = { { T("PAUSE"), D_SSE|D_MUSTF3, 0, 1, 0x000000FF, 0x00000090, 0x00, B_NONE, B_NONE, B_NONE, B_NONE }, { T("NOP"), D_CMD, DX_NOP, 1, 0x000000FF, 0x00000090, 0x00, B_NONE, B_NONE, B_NONE, B_NONE }, { T("NOP"), D_CMD|D_UNDOC, DX_NOP, 2, 0x0000FFFF, 0x0000190F, 0x00, B_INT, B_NONE, B_NONE, B_NONE }, { T("NOP"), D_CMD|D_UNDOC, DX_NOP, 2, 0x0000FFFF, 0x00001A0F, 0x00, B_INT, B_NONE, B_NONE, B_NONE }, { T("NOP"), D_CMD|D_UNDOC, DX_NOP, 2, 0x0000FFFF, 0x00001B0F, 0x00, B_INT, B_NONE, B_NONE, B_NONE }, { T("NOP"), D_CMD|D_UNDOC, DX_NOP, 2, 0x0000FFFF, 0x00001C0F, 0x00, B_INT, B_NONE, B_NONE, B_NONE }, { T("NOP"), D_CMD|D_UNDOC, DX_NOP, 2, 0x0000FFFF, 0x00001D0F, 0x00, B_INT, B_NONE, B_NONE, B_NONE }, { T("NOP"), D_CMD|D_UNDOC, DX_NOP, 2, 0x0000FFFF, 0x00001E0F, 0x00, B_INT, B_NONE, B_NONE, B_NONE }, { T("NOP"), D_CMD, DX_NOP, 2, 0x0000FFFF, 0x00001F0F, 0x00, B_INT, B_NONE, B_NONE, B_NONE }, { T("MONITOR"), D_SYS|D_RARE, 0, 3, 0x00FFFFFF, 0x00C8010F, 0x00, B_EAXMEM|B_PSEUDO, B_ECX|B_BINARY|B_PSEUDO, B_EDX|B_BINARY|B_PSEUDO, B_NONE }, { T("MWAIT"), D_SYS|D_RARE, 0, 3, 0x00FFFFFF, 0x00C9010F, 0x00, B_EAX|B_BINARY|B_PSEUDO, B_ECX|B_BINARY|B_PSEUDO, B_NONE, B_NONE }, { T("CLAC"), D_SYS|D_RARE, 0, 3, 0x00FFFFFF, 0x00CA010F, 0x00, B_EAX|B_BINARY|B_PSEUDO, B_ECX|B_BINARY|B_PSEUDO, B_NONE, B_NONE }, { T("STAC"), D_SYS|D_RARE, 0, 3, 0x00FFFFFF, 0x00CB010F, 0x00, B_EAX|B_BINARY|B_PSEUDO, B_ECX|B_BINARY|B_PSEUDO, B_NONE, B_NONE }, { T("AAA"), D_CMD|D_ALLFLAGS|D_RARE, 0, 1, 0x000000FF, 0x00000037, 0x00, B_AL|B_UPD|B_PSEUDO, B_NONE, B_NONE, B_NONE }, { T("AAD"), D_CMD|D_ALLFLAGS|D_RARE, 0, 2, 0x0000FFFF, 0x00000AD5, 0x00, B_AX|B_UPD|B_PSEUDO, B_NONE, B_NONE, B_NONE }, { T("AAD"), D_CMD|D_ALLFLAGS|D_RARE, 0, 1, 0x000000FF, 0x000000D5, 0x00, B_AX|B_UPD|B_PSEUDO, B_CONST8|B_UNSIGNED, B_NONE, B_NONE }, { T("AAM"), D_CMD|D_ALLFLAGS|D_RARE, 0, 2, 0x0000FFFF, 0x00000AD4, 0x00, B_AX|B_UPD|B_PSEUDO, B_NONE, B_NONE, B_NONE }, { T("AAM"), D_CMD|D_ALLFLAGS|D_RARE, 0, 1, 0x000000FF, 0x000000D4, 0x00, B_AX|B_UPD|B_PSEUDO, B_CONST8|B_UNSIGNED, B_NONE, B_NONE }, { T("AAS"), D_CMD|D_ALLFLAGS|D_RARE, 0, 1, 0x000000FF, 0x0000003F, 0x00, B_AL|B_UPD|B_PSEUDO, B_NONE, B_NONE, B_NONE }, { T("ADC"), D_CMD|D_SIZE01|D_ALLFLAGS|D_USESCARRY, DX_JZ|DX_JB, 1, 0x000000FE, 0x00000014, 0x00, B_ACC|B_UPD, B_CONST|B_NOADDR, B_NONE, B_NONE }, { T("ADC"), D_CMD|D_SIZE01|D_LOCKABLE|D_ALLFLAGS|D_USESCARRY, DX_JZ|DX_JB, 1, 0x000038FE, 0x00001080, 0x00, B_INT|B_SHOWSIZE|B_UPD, B_CONST|B_NOADDR, B_NONE, B_NONE }, { T("ADC"), D_CMD|D_SIZE01|D_LOCKABLE|D_ALLFLAGS|D_USESCARRY, DX_JZ|DX_JB, 1, 0x000038FE, 0x00001082, 0x00, B_INT|B_SHOWSIZE|B_UPD, B_SXTCONST, B_NONE, B_NONE }, { T("ADC"), D_CMD|D_SIZE01|D_LOCKABLE|D_ALLFLAGS|D_USESCARRY, DX_JZ|DX_JB, 1, 0x000000FE, 0x00000010, 0x00, B_INT|B_UPD, B_REG, B_NONE, B_NONE }, { T("ADC"), D_CMD|D_SIZE01|D_ALLFLAGS|D_USESCARRY, DX_JZ|DX_JB, 1, 0x000000FE, 0x00000012, 0x00, B_REG|B_UPD, B_INT, B_NONE, B_NONE }, { T("ADD"), D_CMD|D_SIZE01|D_ALLFLAGS, DX_JZ|DX_JB|DX_ADD, 1, 0x000000FE, 0x00000004, 0x00, B_ACC|B_UPD, B_CONST, B_NONE, B_NONE }, { T("ADD"), D_CMD|D_SIZE01|D_LOCKABLE|D_ALLFLAGS, DX_JZ|DX_JB|DX_ADD, 1, 0x000038FE, 0x00000080, 0x00, B_INT|B_SHOWSIZE|B_UPD, B_CONST, B_NONE, B_NONE }, { T("ADD"), D_CMD|D_SIZE01|D_LOCKABLE|D_ALLFLAGS, DX_JZ|DX_JB|DX_ADD, 1, 0x000038FE, 0x00000082, 0x00, B_INT|B_SHOWSIZE|B_UPD, B_SXTCONST, B_NONE, B_NONE }, { T("ADD"), D_CMD|D_SIZE01|D_LOCKABLE|D_ALLFLAGS, DX_JZ|DX_JB|DX_ADD, 1, 0x000000FE, 0x00000000, 0x00, B_INT|B_UPD, B_REG, B_NONE, B_NONE }, { T("ADD"), D_CMD|D_SIZE01|D_ALLFLAGS, DX_JZ|DX_JB|DX_ADD, 1, 0x000000FE, 0x00000002, 0x00, B_REG|B_UPD, B_INT, B_NONE, B_NONE }, { T("AND"), D_TEST|D_SIZE01|D_ALLFLAGS, DX_JZ, 1, 0x000000FE, 0x00000024, 0x00, B_ACC|B_BINARY|B_UPD, B_CONST|B_BINARY, B_NONE, B_NONE }, { T("AND"), D_TEST|D_SIZE01|D_LOCKABLE|D_ALLFLAGS, DX_JZ, 1, 0x000038FE, 0x00002080, 0x00, B_INT|B_BINARY|B_SHOWSIZE|B_UPD, B_CONST|B_BINARY, B_NONE, B_NONE }, { T("AND"), D_TEST|D_SIZE01|D_LOCKABLE|D_ALLFLAGS, DX_JZ, 1, 0x000038FE, 0x00002082, 0x00, B_INT|B_BINARY|B_SHOWSIZE|B_UPD, B_SXTCONST|B_BINARY, B_NONE, B_NONE }, { T("AND"), D_TEST|D_SIZE01|D_LOCKABLE|D_ALLFLAGS, DX_JZ, 1, 0x000000FE, 0x00000020, 0x00, B_INT|B_BINARY|B_UPD, B_REG|B_BINARY, B_NONE, B_NONE }, { T("AND"), D_TEST|D_SIZE01|D_ALLFLAGS, DX_JZ, 1, 0x000000FE, 0x00000022, 0x00, B_REG|B_BINARY|B_UPD, B_INT|B_BINARY, B_NONE, B_NONE }, { T("ARPL"), D_SYS|D_FLAGZ|D_RARE, 0, 1, 0x000000FF, 0x00000063, 0x00, B_INT16|B_UPD, B_REG16, B_NONE, B_NONE }, { T("BOUND"), D_CMD|D_RARE, 0, 1, 0x000000FF, 0x00000062, 0x00, B_REG|B_SIGNED, B_INTPAIR|B_MEMONLY, B_NONE, B_NONE }, { T("BSF"), D_CMD|D_ALLFLAGS, DX_JZ, 2, 0x0000FFFF, 0x0000BC0F, 0x00, B_REG|B_CHG, B_INT|B_BINARY, B_NONE, B_NONE }, { T("BSR"), D_CMD|D_NOREP|D_ALLFLAGS, DX_JZ, 2, 0x0000FFFF, 0x0000BD0F, 0x00, B_REG|B_CHG, B_INT|B_BINARY, B_NONE, B_NONE }, { T("BSWAP"), D_CMD, 0, 2, 0x0000F8FF, 0x0000C80F, 0x00, B_REGCMD|B_32BITONLY|B_NOESP|B_UPD, B_NONE, B_NONE, B_NONE }, { T("BT"), D_TEST|D_ALLFLAGS, DX_JC, 2, 0x0000FFFF, 0x0000A30F, 0x00, B_INT|B_BINARY, B_REG|B_BITCNT, B_NONE, B_NONE }, { T("BT"), D_TEST|D_ALLFLAGS, DX_JC, 2, 0x0038FFFF, 0x0020BA0F, 0x00, B_INT|B_BINARY|B_SHOWSIZE, B_CONST8|B_BITCNT, B_NONE, B_NONE }, { T("BTC"), D_CMD|D_LOCKABLE|D_ALLFLAGS, DX_JC, 2, 0x0000FFFF, 0x0000BB0F, 0x00, B_INT|B_BINARY|B_NOESP|B_UPD, B_REG|B_BITCNT, B_NONE, B_NONE }, { T("BTC"), D_CMD|D_LOCKABLE|D_ALLFLAGS, DX_JC, 2, 0x0038FFFF, 0x0038BA0F, 0x00, B_INT|B_BINARY|B_NOESP|B_SHOWSIZE|B_UPD, B_CONST8|B_BITCNT, B_NONE, B_NONE }, { T("BTR"), D_CMD|D_LOCKABLE|D_ALLFLAGS, DX_JC, 2, 0x0000FFFF, 0x0000B30F, 0x00, B_INT|B_BINARY|B_NOESP|B_UPD, B_REG|B_BITCNT, B_NONE, B_NONE }, { T("BTR"), D_CMD|D_LOCKABLE|D_ALLFLAGS, DX_JC, 2, 0x0038FFFF, 0x0030BA0F, 0x00, B_INT|B_BINARY|B_NOESP|B_SHOWSIZE|B_UPD, B_CONST8|B_BITCNT, B_NONE, B_NONE }, { T("BTS"), D_CMD|D_LOCKABLE|D_ALLFLAGS, DX_JC, 2, 0x0000FFFF, 0x0000AB0F, 0x00, B_INT|B_BINARY|B_NOESP|B_UPD, B_REG|B_BITCNT, B_NONE, B_NONE }, { T("BTS"), D_CMD|D_LOCKABLE|D_ALLFLAGS, DX_JC, 2, 0x0038FFFF, 0x0028BA0F, 0x00, B_INT|B_BINARY|B_NOESP|B_SHOWSIZE|B_UPD, B_CONST8|B_BITCNT, B_NONE, B_NONE }, { T("CALL"), D_CALL|D_CHGESP, 0, 1, 0x000000FF, 0x000000E8, 0x00, B_OFFSET|B_JMPCALL, B_PUSHRET|B_CHG|B_PSEUDO, B_NONE, B_NONE }, { T("CALL"), D_CALL|D_CHGESP, 0, 1, 0x000038FF, 0x000010FF, 0x00, B_INT|B_JMPCALL, B_PUSHRET|B_CHG|B_PSEUDO, B_NONE, B_NONE }, { T("CALL"), D_CALLFAR|D_CHGESP|D_RARE, 0, 1, 0x000000FF, 0x0000009A, 0x00, B_FARCONST|B_JMPCALLFAR, B_PUSHRETF|B_CHG|B_PSEUDO, B_NONE, B_NONE }, { T("CALL"), D_CALLFAR|D_CHGESP|D_RARE, 0, 1, 0x000038FF, 0x000018FF, 0x00, B_SEGOFFS|B_JMPCALLFAR|B_MEMONLY, B_PUSHRETF|B_CHG|B_PSEUDO, B_NONE, B_NONE }, { T("CBW"), D_CMD|D_DATA16, 0, 1, 0x000000FF, 0x00000098, 0x00, B_AX|B_UPD|B_PSEUDO, B_AL|B_PSEUDO, B_NONE, B_NONE }, { T("CBW"), D_CMD|D_DATA16, 0, 1, 0x000000FF, 0x00000098, 0x00, B_AX|B_UPD|B_PSEUDO, B_AL, B_NONE, B_NONE }, { T("CDQ"), D_CMD|D_DATA32, 0, 1, 0x000000FF, 0x00000099, 0x00, B_EDX|B_CHG|B_PSEUDO, B_EAX|B_PSEUDO, B_NONE, B_NONE }, { T("CDQ"), D_CMD|D_DATA32, 0, 1, 0x000000FF, 0x00000099, 0x00, B_EDX|B_CHG|B_PSEUDO, B_EAX, B_NONE, B_NONE }, { T("CLC"), D_CMD|D_FLAGC, 0, 1, 0x000000FF, 0x000000F8, 0x00, B_NONE, B_NONE, B_NONE, B_NONE }, { T("CLD"), D_CMD|D_FLAGD, 0, 1, 0x000000FF, 0x000000FC, 0x00, B_NONE, B_NONE, B_NONE, B_NONE }, { T("CLFLUSH"), D_CMD|D_MEMORY|D_RARE, 0, 2, 0x0038FFFF, 0x0038AE0F, 0x00, B_ANYMEM|B_MEMONLY, B_NONE, B_NONE, B_NONE }, { T("CLI"), D_CMD|D_RARE, 0, 1, 0x000000FF, 0x000000FA, 0x00, B_NONE, B_NONE, B_NONE, B_NONE }, { T("CLTS"), D_PRIVILEGED|D_RARE, 0, 2, 0x0000FFFF, 0x0000060F, 0x00, B_CR0|B_UPD|B_PSEUDO, B_NONE, B_NONE, B_NONE }, { T("CMC"), D_CMD|D_FLAGC, 0, 1, 0x000000FF, 0x000000F5, 0x00, B_NONE, B_NONE, B_NONE, B_NONE }, { T("CMOVO"), D_MOVC|D_COND, 0, 2, 0x0000FFFF, 0x0000400F, 0x00, B_REG|B_UPD, B_INT, B_NONE, B_NONE }, { T("CMOVNO"), D_MOVC|D_COND, 0, 2, 0x0000FFFF, 0x0000410F, 0x00, B_REG|B_UPD, B_INT, B_NONE, B_NONE }, { T("CMOVB"), D_MOVC|D_COND|D_USESCARRY, DX_JB, 2, 0x0000FFFF, 0x0000420F, 0x00, B_REG|B_UPD, B_INT, B_NONE, B_NONE }, { T("CMOVC"), D_MOVC|D_COND|D_USESCARRY, DX_JC, 2, 0x0000FFFF, 0x0000420F, 0x00, B_REG|B_UPD, B_INT, B_NONE, B_NONE }, { T("CMOVNAE"), D_MOVC|D_COND|D_USESCARRY, DX_JB, 2, 0x0000FFFF, 0x0000420F, 0x00, B_REG|B_UPD, B_INT, B_NONE, B_NONE }, { T("CMOVAE"), D_MOVC|D_COND|D_USESCARRY, DX_JB, 2, 0x0000FFFF, 0x0000430F, 0x00, B_REG|B_UPD, B_INT, B_NONE, B_NONE }, { T("CMOVNB"), D_MOVC|D_COND|D_USESCARRY, DX_JB, 2, 0x0000FFFF, 0x0000430F, 0x00, B_REG|B_UPD, B_INT, B_NONE, B_NONE }, { T("CMOVNC"), D_MOVC|D_COND|D_USESCARRY, DX_JC, 2, 0x0000FFFF, 0x0000430F, 0x00, B_REG|B_UPD, B_INT, B_NONE, B_NONE }, { T("CMOVE"), D_MOVC|D_COND, DX_JE, 2, 0x0000FFFF, 0x0000440F, 0x00, B_REG|B_UPD, B_INT, B_NONE, B_NONE }, { T("CMOVZ"), D_MOVC|D_COND, DX_JZ, 2, 0x0000FFFF, 0x0000440F, 0x00, B_REG|B_UPD, B_INT, B_NONE, B_NONE }, { T("CMOVNE"), D_MOVC|D_COND, DX_JE, 2, 0x0000FFFF, 0x0000450F, 0x00, B_REG|B_UPD, B_INT, B_NONE, B_NONE }, { T("CMOVNZ"), D_MOVC|D_COND, DX_JZ, 2, 0x0000FFFF, 0x0000450F, 0x00, B_REG|B_UPD, B_INT, B_NONE, B_NONE }, { T("CMOVBE"), D_MOVC|D_COND|D_USESCARRY, 0, 2, 0x0000FFFF, 0x0000460F, 0x00, B_REG|B_UPD, B_INT, B_NONE, B_NONE }, { T("CMOVNA"), D_MOVC|D_COND|D_USESCARRY, 0, 2, 0x0000FFFF, 0x0000460F, 0x00, B_REG|B_UPD, B_INT, B_NONE, B_NONE }, { T("CMOVA"), D_MOVC|D_COND|D_USESCARRY, 0, 2, 0x0000FFFF, 0x0000470F, 0x00, B_REG|B_UPD, B_INT, B_NONE, B_NONE }, { T("CMOVNBE"), D_MOVC|D_COND|D_USESCARRY, 0, 2, 0x0000FFFF, 0x0000470F, 0x00, B_REG|B_UPD, B_INT, B_NONE, B_NONE }, { T("CMOVS"), D_MOVC|D_COND, 0, 2, 0x0000FFFF, 0x0000480F, 0x00, B_REG|B_UPD, B_INT, B_NONE, B_NONE }, { T("CMOVNS"), D_MOVC|D_COND, 0, 2, 0x0000FFFF, 0x0000490F, 0x00, B_REG|B_UPD, B_INT, B_NONE, B_NONE }, { T("CMOVPE"), D_MOVC|D_COND, 0, 2, 0x0000FFFF, 0x00004A0F, 0x00, B_REG|B_UPD, B_INT, B_NONE, B_NONE }, { T("CMOVP"), D_MOVC|D_COND, 0, 2, 0x0000FFFF, 0x00004A0F, 0x00, B_REG|B_UPD, B_INT, B_NONE, B_NONE }, { T("CMOVPO"), D_MOVC|D_COND, 0, 2, 0x0000FFFF, 0x00004B0F, 0x00, B_REG|B_UPD, B_INT, B_NONE, B_NONE }, { T("CMOVNP"), D_MOVC|D_COND, 0, 2, 0x0000FFFF, 0x00004B0F, 0x00, B_REG|B_UPD, B_INT, B_NONE, B_NONE }, { T("CMOVL"), D_MOVC|D_COND, 0, 2, 0x0000FFFF, 0x00004C0F, 0x00, B_REG|B_UPD, B_INT, B_NONE, B_NONE }, { T("CMOVNGE"), D_MOVC|D_COND, 0, 2, 0x0000FFFF, 0x00004C0F, 0x00, B_REG|B_UPD, B_INT, B_NONE, B_NONE }, { T("CMOVGE"), D_MOVC|D_COND, 0, 2, 0x0000FFFF, 0x00004D0F, 0x00, B_REG|B_UPD, B_INT, B_NONE, B_NONE }, { T("CMOVNL"), D_MOVC|D_COND, 0, 2, 0x0000FFFF, 0x00004D0F, 0x00, B_REG|B_UPD, B_INT, B_NONE, B_NONE }, { T("CMOVLE"), D_MOVC|D_COND, 0, 2, 0x0000FFFF, 0x00004E0F, 0x00, B_REG|B_UPD, B_INT, B_NONE, B_NONE }, { T("CMOVNG"), D_MOVC|D_COND, 0, 2, 0x0000FFFF, 0x00004E0F, 0x00, B_REG|B_UPD, B_INT, B_NONE, B_NONE }, { T("CMOVG"), D_MOVC|D_COND, 0, 2, 0x0000FFFF, 0x00004F0F, 0x00, B_REG|B_UPD, B_INT, B_NONE, B_NONE }, { T("CMOVNLE"), D_MOVC|D_COND, 0, 2, 0x0000FFFF, 0x00004F0F, 0x00, B_REG|B_UPD, B_INT, B_NONE, B_NONE }, { T("CMP"), D_TEST|D_SIZE01|D_ALLFLAGS|D_HLADIR, DX_JE|DX_JB, 1, 0x000000FE, 0x0000003C, 0x00, B_ACC, B_CONST, B_NONE, B_NONE }, { T("CMP"), D_TEST|D_SIZE01|D_ALLFLAGS|D_HLADIR, DX_JE|DX_JB, 1, 0x000038FE, 0x00003880, 0x00, B_INT|B_SHOWSIZE, B_CONST, B_NONE, B_NONE }, { T("CMP"), D_TEST|D_SIZE01|D_ALLFLAGS|D_HLADIR, DX_JE|DX_JB, 1, 0x000038FE, 0x00003882, 0x00, B_INT|B_SHOWSIZE, B_SXTCONST, B_NONE, B_NONE }, { T("CMP"), D_TEST|D_SIZE01|D_ALLFLAGS|D_HLADIR, DX_JE|DX_JB, 1, 0x000000FE, 0x00000038, 0x00, B_INT, B_REG, B_NONE, B_NONE }, { T("CMP"), D_TEST|D_SIZE01|D_ALLFLAGS|D_HLADIR, DX_JE|DX_JB, 1, 0x000000FE, 0x0000003A, 0x00, B_REG, B_INT, B_NONE, B_NONE }, { T("CMPXCHG"), D_CMD|D_SIZE01|D_LOCKABLE|D_ALLFLAGS|D_HLADIR, DX_JE|DX_JB, 2, 0x0000FEFF, 0x0000B00F, 0x00, B_INT|B_UPD, B_REG, B_ACC|B_UPD|B_PSEUDO, B_NONE }, { T("CMPXCHG8B"), D_CMD|D_LOCKABLE|D_MEMORY|D_ALLFLAGS, DX_JE|DX_JB, 2, 0x0038FFFF, 0x0008C70F, 0x00, B_INT64|B_MEMONLY|B_UPD, B_EAX|B_UPD|B_PSEUDO, B_EDX|B_UPD|B_PSEUDO, B_EBX|B_PSEUDO }, { T("CPUID"), D_CMD, 0, 2, 0x0000FFFF, 0x0000A20F, 0x00, B_EAX|B_CHG|B_PSEUDO, B_EBX|B_CHG|B_PSEUDO, B_ECX|B_CHG|B_PSEUDO, B_EDX|B_CHG|B_PSEUDO }, { T("CWD"), D_CMD|D_DATA16, 0, 1, 0x000000FF, 0x00000099, 0x00, B_DX|B_CHG|B_PSEUDO, B_AX|B_PSEUDO, B_NONE, B_NONE }, { T("CWD"), D_CMD|D_DATA16, 0, 1, 0x000000FF, 0x00000099, 0x00, B_DX|B_CHG|B_PSEUDO, B_AX, B_NONE, B_NONE }, { T("CWDE"), D_CMD|D_DATA32, 0, 1, 0x000000FF, 0x00000098, 0x00, B_EAX|B_UPD|B_PSEUDO, B_AX|B_PSEUDO, B_NONE, B_NONE }, { T("CWDE"), D_CMD|D_DATA32, 0, 1, 0x000000FF, 0x00000098, 0x00, B_EAX|B_UPD|B_PSEUDO, B_AX, B_NONE, B_NONE }, { T("DAA"), D_CMD|D_ALLFLAGS|D_USESCARRY|D_RARE, DX_JC, 1, 0x000000FF, 0x00000027, 0x00, B_AL|B_UPD|B_PSEUDO, B_NONE, B_NONE, B_NONE }, { T("DAS"), D_CMD|D_ALLFLAGS|D_USESCARRY|D_RARE, DX_JC, 1, 0x000000FF, 0x0000002F, 0x00, B_AL|B_UPD|B_PSEUDO, B_NONE, B_NONE, B_NONE }, { T("DEC"), D_CMD|D_SIZE01|D_LOCKABLE|D_NOCFLAG, DX_JZ, 1, 0x000038FE, 0x000008FE, 0x00, B_INT|B_SHOWSIZE|B_UPD, B_NONE, B_NONE, B_NONE }, { T("DEC"), D_CMD|D_NOCFLAG, DX_JZ, 1, 0x000000F8, 0x00000048, 0x00, B_REGCMD|B_UPD, B_NONE, B_NONE, B_NONE }, { T("DIV"), D_CMD|D_ALLFLAGS, 0, 1, 0x000038FF, 0x000030F6, 0x00, B_INT8|B_SHOWSIZE, B_AX|B_UPD|B_PSEUDO, B_NONE, B_NONE }, { T("DIV"), D_CMD|D_ALLFLAGS, 0, 1, 0x000038FF, 0x000030F7, 0x00, B_INT1632|B_UNSIGNED|B_NOESP|B_SHOWSIZE, B_DXEDX|B_UPD|B_PSEUDO, B_ACC|B_UPD|B_PSEUDO, B_NONE }, { T("EMMS"), D_CMD, 0, 2, 0x0000FFFF, 0x0000770F, 0x00, B_NONE, B_NONE, B_NONE, B_NONE }, { T("ENTER"), D_CMD|D_CHGESP, 0, 1, 0x000000FF, 0x000000C8, 0x00, B_CONST16|B_STACKINC, B_CONST8_2|B_UNSIGNED, B_PUSH|B_CHG|B_PSEUDO, B_BPEBP|B_CHG|B_PSEUDO }, { T("WAIT"), D_CMD, 0, 1, 0x000000FF, 0x0000009B, 0x00, B_NONE, B_NONE, B_NONE, B_NONE }, { T("FWAIT"), D_CMD, 0, 1, 0x000000FF, 0x0000009B, 0x00, B_NONE, B_NONE, B_NONE, B_NONE }, { T("HLT"), D_PRIVILEGED|D_RARE, 0, 1, 0x000000FF, 0x000000F4, 0x00, B_NONE, B_NONE, B_NONE, B_NONE }, { T("IDIV"), D_CMD|D_ALLFLAGS, 0, 1, 0x000038FF, 0x000038F6, 0x00, B_INT8|B_SIGNED|B_SHOWSIZE, B_AX|B_UPD|B_PSEUDO, B_NONE, B_NONE }, { T("IDIV"), D_CMD|D_ALLFLAGS, 0, 1, 0x000038FF, 0x000038F7, 0x00, B_INT1632|B_SIGNED|B_NOESP|B_SHOWSIZE, B_DXEDX|B_UPD|B_PSEUDO, B_ACC|B_UPD|B_PSEUDO, B_NONE }, { T("IMUL"), D_CMD|D_ALLFLAGS, 0, 1, 0x000038FF, 0x000028F6, 0x00, B_AX|B_UPD|B_PSEUDO, B_INT8|B_SIGNED|B_SHOWSIZE, B_AL|B_SIGNED|B_PSEUDO, B_NONE }, { T("IMUL"), D_CMD|D_ALLFLAGS, 0, 1, 0x000038FF, 0x000028F7, 0x00, B_DXEDX|B_CHG|B_PSEUDO, B_ACC|B_UPD|B_PSEUDO, B_INT1632|B_SIGNED|B_NOESP|B_SHOWSIZE, B_NONE }, { T("IMUL"), D_CMD|D_ALLFLAGS, 0, 2, 0x0000FFFF, 0x0000AF0F, 0x00, B_REG|B_UPD, B_INT|B_NOESP, B_NONE, B_NONE }, { T("IMUL"), D_CMD|D_ALLFLAGS, 0, 1, 0x000000FF, 0x0000006B, 0x00, B_REG|B_CHG, B_INT|B_NOESP, B_SXTCONST, B_NONE }, { T("IMUL"), D_CMD|D_ALLFLAGS, 0, 1, 0x000000FF, 0x00000069, 0x00, B_REG|B_CHG, B_INT|B_NOESP, B_CONST|B_SIGNED, B_NONE }, { T("IN"), D_IO|D_SIZE01|D_RARE, 0, 1, 0x000000FE, 0x000000E4, 0x00, B_ACC|B_CHG, B_CONST8|B_PORT, B_NONE, B_NONE }, { T("IN"), D_IO|D_SIZE01|D_RARE, 0, 1, 0x000000FE, 0x000000EC, 0x00, B_ACC|B_CHG, B_DXPORT|B_PORT, B_NONE, B_NONE }, { T("INC"), D_CMD|D_SIZE01|D_LOCKABLE|D_NOCFLAG, DX_JZ, 1, 0x000038FE, 0x000000FE, 0x00, B_INT|B_SHOWSIZE|B_UPD, B_NONE, B_NONE, B_NONE }, { T("INC"), D_CMD|D_NOCFLAG, DX_JZ, 1, 0x000000F8, 0x00000040, 0x00, B_REGCMD|B_UPD, B_NONE, B_NONE, B_NONE }, { T("INT"), D_INT, 0, 1, 0x000000FF, 0x000000CD, 0x00, B_CONST8, B_NONE, B_NONE, B_NONE }, { T("INT3"), D_INT|D_RARE, 0, 1, 0x000000FF, 0x000000CC, 0x00, B_NONE, B_NONE, B_NONE, B_NONE }, { T("INTO"), D_INT|D_RARE, 0, 1, 0x000000FF, 0x000000CE, 0x00, B_NONE, B_NONE, B_NONE, B_NONE }, { T("INT1"), D_INT|D_UNDOC, 0, 1, 0x000000FF, 0x000000F1, 0x00, B_NONE, B_NONE, B_NONE, B_NONE }, { T("ICEBP"), D_INT|D_UNDOC, 0, 1, 0x000000FF, 0x000000F1, 0x00, B_NONE, B_NONE, B_NONE, B_NONE }, { T("INVD"), D_PRIVILEGED|D_RARE, 0, 2, 0x0000FFFF, 0x0000080F, 0x00, B_NONE, B_NONE, B_NONE, B_NONE }, { T("INVLPG"), D_PRIVILEGED|D_MEMORY|D_RARE, 0, 2, 0x0038FFFF, 0x0038010F, 0x00, B_ANYMEM|B_MEMONLY, B_NONE, B_NONE, B_NONE }, { T("IRET*"), D_RETFAR|D_ALLFLAGS|D_CHGESP|D_WILDCARD|D_RARE, 0, 1, 0x000000FF, 0x000000CF, 0x00, B_STKTOPFAR|B_JMPCALLFAR|B_PSEUDO, B_NONE, B_NONE, B_NONE }, { T("JO"), D_JMC|D_BHINT|D_COND, 0, 1, 0x000000FF, 0x00000070, 0x00, B_BYTEOFFS|B_JMPCALL, B_NONE, B_NONE, B_NONE }, { T("JO"), D_JMC|D_BHINT|D_COND, 0, 2, 0x0000FFFF, 0x0000800F, 0x00, B_OFFSET|B_JMPCALL, B_NONE, B_NONE, B_NONE }, { T("JNO"), D_JMC|D_BHINT|D_COND, 0, 1, 0x000000FF, 0x00000071, 0x00, B_BYTEOFFS|B_JMPCALL, B_NONE, B_NONE, B_NONE }, { T("JNO"), D_JMC|D_BHINT|D_COND, 0, 2, 0x0000FFFF, 0x0000810F, 0x00, B_OFFSET|B_JMPCALL, B_NONE, B_NONE, B_NONE }, { T("JB"), D_JMC|D_BHINT|D_COND|D_USESCARRY, DX_JB, 1, 0x000000FF, 0x00000072, 0x00, B_BYTEOFFS|B_JMPCALL, B_NONE, B_NONE, B_NONE }, { T("JC"), D_JMC|D_BHINT|D_COND|D_USESCARRY, DX_JC, 1, 0x000000FF, 0x00000072, 0x00, B_BYTEOFFS|B_JMPCALL, B_NONE, B_NONE, B_NONE }, { T("JNAE"), D_JMC|D_BHINT|D_COND|D_USESCARRY, DX_JB, 1, 0x000000FF, 0x00000072, 0x00, B_BYTEOFFS|B_JMPCALL, B_NONE, B_NONE, B_NONE }, { T("JB"), D_JMC|D_BHINT|D_COND|D_USESCARRY, DX_JB, 2, 0x0000FFFF, 0x0000820F, 0x00, B_OFFSET|B_JMPCALL, B_NONE, B_NONE, B_NONE }, { T("JC"), D_JMC|D_BHINT|D_COND|D_USESCARRY, DX_JC, 2, 0x0000FFFF, 0x0000820F, 0x00, B_OFFSET|B_JMPCALL, B_NONE, B_NONE, B_NONE }, { T("JNAE"), D_JMC|D_BHINT|D_COND|D_USESCARRY, DX_JB, 2, 0x0000FFFF, 0x0000820F, 0x00, B_OFFSET|B_JMPCALL, B_NONE, B_NONE, B_NONE }, { T("JAE"), D_JMC|D_BHINT|D_COND|D_USESCARRY, DX_JB, 1, 0x000000FF, 0x00000073, 0x00, B_BYTEOFFS|B_JMPCALL, B_NONE, B_NONE, B_NONE }, { T("JNB"), D_JMC|D_BHINT|D_COND|D_USESCARRY, DX_JB, 1, 0x000000FF, 0x00000073, 0x00, B_BYTEOFFS|B_JMPCALL, B_NONE, B_NONE, B_NONE }, { T("JNC"), D_JMC|D_BHINT|D_COND|D_USESCARRY, DX_JC, 1, 0x000000FF, 0x00000073, 0x00, B_BYTEOFFS|B_JMPCALL, B_NONE, B_NONE, B_NONE }, { T("JAE"), D_JMC|D_BHINT|D_COND|D_USESCARRY, DX_JB, 2, 0x0000FFFF, 0x0000830F, 0x00, B_OFFSET|B_JMPCALL, B_NONE, B_NONE, B_NONE }, { T("JNB"), D_JMC|D_BHINT|D_COND|D_USESCARRY, DX_JB, 2, 0x0000FFFF, 0x0000830F, 0x00, B_OFFSET|B_JMPCALL, B_NONE, B_NONE, B_NONE }, { T("JNC"), D_JMC|D_BHINT|D_COND|D_USESCARRY, DX_JC, 2, 0x0000FFFF, 0x0000830F, 0x00, B_OFFSET|B_JMPCALL, B_NONE, B_NONE, B_NONE }, { T("JE"), D_JMC|D_BHINT|D_COND, DX_JE, 1, 0x000000FF, 0x00000074, 0x00, B_BYTEOFFS|B_JMPCALL, B_NONE, B_NONE, B_NONE }, { T("JZ"), D_JMC|D_BHINT|D_COND, DX_JZ, 1, 0x000000FF, 0x00000074, 0x00, B_BYTEOFFS|B_JMPCALL, B_NONE, B_NONE, B_NONE }, { T("JE"), D_JMC|D_BHINT|D_COND, DX_JE, 2, 0x0000FFFF, 0x0000840F, 0x00, B_OFFSET|B_JMPCALL, B_NONE, B_NONE, B_NONE }, { T("JZ"), D_JMC|D_BHINT|D_COND, DX_JZ, 2, 0x0000FFFF, 0x0000840F, 0x00, B_OFFSET|B_JMPCALL, B_NONE, B_NONE, B_NONE }, { T("JNE"), D_JMC|D_BHINT|D_COND, DX_JE, 1, 0x000000FF, 0x00000075, 0x00, B_BYTEOFFS|B_JMPCALL, B_NONE, B_NONE, B_NONE }, { T("JNZ"), D_JMC|D_BHINT|D_COND, DX_JZ, 1, 0x000000FF, 0x00000075, 0x00, B_BYTEOFFS|B_JMPCALL, B_NONE, B_NONE, B_NONE }, { T("JNE"), D_JMC|D_BHINT|D_COND, DX_JE, 2, 0x0000FFFF, 0x0000850F, 0x00, B_OFFSET|B_JMPCALL, B_NONE, B_NONE, B_NONE }, { T("JNZ"), D_JMC|D_BHINT|D_COND, DX_JZ, 2, 0x0000FFFF, 0x0000850F, 0x00, B_OFFSET|B_JMPCALL, B_NONE, B_NONE, B_NONE }, { T("JBE"), D_JMC|D_BHINT|D_COND|D_USESCARRY, 0, 1, 0x000000FF, 0x00000076, 0x00, B_BYTEOFFS|B_JMPCALL, B_NONE, B_NONE, B_NONE }, { T("JNA"), D_JMC|D_BHINT|D_COND|D_USESCARRY, 0, 1, 0x000000FF, 0x00000076, 0x00, B_BYTEOFFS|B_JMPCALL, B_NONE, B_NONE, B_NONE }, { T("JBE"), D_JMC|D_BHINT|D_COND|D_USESCARRY, 0, 2, 0x0000FFFF, 0x0000860F, 0x00, B_OFFSET|B_JMPCALL, B_NONE, B_NONE, B_NONE }, { T("JNA"), D_JMC|D_BHINT|D_COND|D_USESCARRY, 0, 2, 0x0000FFFF, 0x0000860F, 0x00, B_OFFSET|B_JMPCALL, B_NONE, B_NONE, B_NONE }, { T("JA"), D_JMC|D_BHINT|D_COND|D_USESCARRY, 0, 1, 0x000000FF, 0x00000077, 0x00, B_BYTEOFFS|B_JMPCALL, B_NONE, B_NONE, B_NONE }, { T("JNBE"), D_JMC|D_BHINT|D_COND|D_USESCARRY, 0, 1, 0x000000FF, 0x00000077, 0x00, B_BYTEOFFS|B_JMPCALL, B_NONE, B_NONE, B_NONE }, { T("JA"), D_JMC|D_BHINT|D_COND|D_USESCARRY, 0, 2, 0x0000FFFF, 0x0000870F, 0x00, B_OFFSET|B_JMPCALL, B_NONE, B_NONE, B_NONE }, { T("JNBE"), D_JMC|D_BHINT|D_COND|D_USESCARRY, 0, 2, 0x0000FFFF, 0x0000870F, 0x00, B_OFFSET|B_JMPCALL, B_NONE, B_NONE, B_NONE }, { T("JS"), D_JMC|D_BHINT|D_COND, 0, 1, 0x000000FF, 0x00000078, 0x00, B_BYTEOFFS|B_JMPCALL, B_NONE, B_NONE, B_NONE }, { T("JS"), D_JMC|D_BHINT|D_COND, 0, 2, 0x0000FFFF, 0x0000880F, 0x00, B_OFFSET|B_JMPCALL, B_NONE, B_NONE, B_NONE }, { T("JNS"), D_JMC|D_BHINT|D_COND, 0, 1, 0x000000FF, 0x00000079, 0x00, B_BYTEOFFS|B_JMPCALL, B_NONE, B_NONE, B_NONE }, { T("JNS"), D_JMC|D_BHINT|D_COND, 0, 2, 0x0000FFFF, 0x0000890F, 0x00, B_OFFSET|B_JMPCALL, B_NONE, B_NONE, B_NONE }, { T("JPE"), D_JMC|D_BHINT|D_COND|D_RARE, 0, 1, 0x000000FF, 0x0000007A, 0x00, B_BYTEOFFS|B_JMPCALL, B_NONE, B_NONE, B_NONE }, { T("JP"), D_JMC|D_BHINT|D_COND|D_RARE, 0, 1, 0x000000FF, 0x0000007A, 0x00, B_BYTEOFFS|B_JMPCALL, B_NONE, B_NONE, B_NONE }, { T("JPE"), D_JMC|D_BHINT|D_COND|D_RARE, 0, 2, 0x0000FFFF, 0x00008A0F, 0x00, B_OFFSET|B_JMPCALL, B_NONE, B_NONE, B_NONE }, { T("JP"), D_JMC|D_BHINT|D_COND|D_RARE, 0, 2, 0x0000FFFF, 0x00008A0F, 0x00, B_OFFSET|B_JMPCALL, B_NONE, B_NONE, B_NONE }, { T("JPO"), D_JMC|D_BHINT|D_COND|D_RARE, 0, 1, 0x000000FF, 0x0000007B, 0x00, B_BYTEOFFS|B_JMPCALL, B_NONE, B_NONE, B_NONE }, { T("JNP"), D_JMC|D_BHINT|D_COND|D_RARE, 0, 1, 0x000000FF, 0x0000007B, 0x00, B_BYTEOFFS|B_JMPCALL, B_NONE, B_NONE, B_NONE }, { T("JPO"), D_JMC|D_BHINT|D_COND|D_RARE, 0, 2, 0x0000FFFF, 0x00008B0F, 0x00, B_OFFSET|B_JMPCALL, B_NONE, B_NONE, B_NONE }, { T("JNP"), D_JMC|D_BHINT|D_COND|D_RARE, 0, 2, 0x0000FFFF, 0x00008B0F, 0x00, B_OFFSET|B_JMPCALL, B_NONE, B_NONE, B_NONE }, { T("JL"), D_JMC|D_BHINT|D_COND, 0, 1, 0x000000FF, 0x0000007C, 0x00, B_BYTEOFFS|B_JMPCALL, B_NONE, B_NONE, B_NONE }, { T("JNGE"), D_JMC|D_BHINT|D_COND, 0, 1, 0x000000FF, 0x0000007C, 0x00, B_BYTEOFFS|B_JMPCALL, B_NONE, B_NONE, B_NONE }, { T("JL"), D_JMC|D_BHINT|D_COND, 0, 2, 0x0000FFFF, 0x00008C0F, 0x00, B_OFFSET|B_JMPCALL, B_NONE, B_NONE, B_NONE }, { T("JNGE"), D_JMC|D_BHINT|D_COND, 0, 2, 0x0000FFFF, 0x00008C0F, 0x00, B_OFFSET|B_JMPCALL, B_NONE, B_NONE, B_NONE }, { T("JGE"), D_JMC|D_BHINT|D_COND, 0, 1, 0x000000FF, 0x0000007D, 0x00, B_BYTEOFFS|B_JMPCALL, B_NONE, B_NONE, B_NONE }, { T("JNL"), D_JMC|D_BHINT|D_COND, 0, 1, 0x000000FF, 0x0000007D, 0x00, B_BYTEOFFS|B_JMPCALL, B_NONE, B_NONE, B_NONE }, { T("JGE"), D_JMC|D_BHINT|D_COND, 0, 2, 0x0000FFFF, 0x00008D0F, 0x00, B_OFFSET|B_JMPCALL, B_NONE, B_NONE, B_NONE }, { T("JNL"), D_JMC|D_BHINT|D_COND, 0, 2, 0x0000FFFF, 0x00008D0F, 0x00, B_OFFSET|B_JMPCALL, B_NONE, B_NONE, B_NONE }, { T("JLE"), D_JMC|D_BHINT|D_COND, 0, 1, 0x000000FF, 0x0000007E, 0x00, B_BYTEOFFS|B_JMPCALL, B_NONE, B_NONE, B_NONE }, { T("JNG"), D_JMC|D_BHINT|D_COND, 0, 1, 0x000000FF, 0x0000007E, 0x00, B_BYTEOFFS|B_JMPCALL, B_NONE, B_NONE, B_NONE }, { T("JLE"), D_JMC|D_BHINT|D_COND, 0, 2, 0x0000FFFF, 0x00008E0F, 0x00, B_OFFSET|B_JMPCALL, B_NONE, B_NONE, B_NONE }, { T("JNG"), D_JMC|D_BHINT|D_COND, 0, 2, 0x0000FFFF, 0x00008E0F, 0x00, B_OFFSET|B_JMPCALL, B_NONE, B_NONE, B_NONE }, { T("JG"), D_JMC|D_BHINT|D_COND, 0, 1, 0x000000FF, 0x0000007F, 0x00, B_BYTEOFFS|B_JMPCALL, B_NONE, B_NONE, B_NONE }, { T("JNLE"), D_JMC|D_BHINT|D_COND, 0, 1, 0x000000FF, 0x0000007F, 0x00, B_BYTEOFFS|B_JMPCALL, B_NONE, B_NONE, B_NONE }, { T("JG"), D_JMC|D_BHINT|D_COND, 0, 2, 0x0000FFFF, 0x00008F0F, 0x00, B_OFFSET|B_JMPCALL, B_NONE, B_NONE, B_NONE }, { T("JNLE"), D_JMC|D_BHINT|D_COND, 0, 2, 0x0000FFFF, 0x00008F0F, 0x00, B_OFFSET|B_JMPCALL, B_NONE, B_NONE, B_NONE }, { T("JCXZ"), D_JMCX|D_ADDR16|D_BHINT, 0, 1, 0x000000FF, 0x000000E3, 0x00, B_CX|B_PSEUDO, B_BYTEOFFS|B_JMPCALL, B_NONE, B_NONE }, { T("JECXZ"), D_JMCX|D_ADDR32|D_BHINT, 0, 1, 0x000000FF, 0x000000E3, 0x00, B_ECX|B_PSEUDO, B_BYTEOFFS|B_JMPCALL, B_NONE, B_NONE }, { T("JMP"), D_JMP, 0, 1, 0x000000FF, 0x000000EB, 0x00, B_BYTEOFFS|B_JMPCALL, B_NONE, B_NONE, B_NONE }, { T("JMP"), D_JMP, 0, 1, 0x000000FF, 0x000000E9, 0x00, B_OFFSET|B_JMPCALL, B_NONE, B_NONE, B_NONE }, { T("JMP"), D_JMP, 0, 1, 0x000038FF, 0x000020FF, 0x00, B_INT|B_JMPCALL, B_NONE, B_NONE, B_NONE }, { T("JMP"), D_JMPFAR|D_SUSPICIOUS, 0, 1, 0x000000FF, 0x000000EA, 0x00, B_FARCONST|B_JMPCALLFAR, B_NONE, B_NONE, B_NONE }, { T("JMP"), D_JMPFAR|D_RARE, 0, 1, 0x000038FF, 0x000028FF, 0x00, B_SEGOFFS|B_JMPCALLFAR|B_MEMONLY|B_SHOWSIZE, B_NONE, B_NONE, B_NONE }, { T("LAHF"), D_CMD, 0, 1, 0x000000FF, 0x0000009F, 0x00, B_AH|B_CHG|B_PSEUDO, B_FLAGS8|B_PSEUDO, B_NONE, B_NONE }, { T("LAR"), D_CMD|D_FLAGZ|D_RARE, DX_JZ, 2, 0x0000FFFF, 0x0000020F, 0x00, B_REG|B_BINARY|B_NOESP|B_CHG, B_INT|B_BINARY|B_NOESP, B_NONE, B_NONE }, { T("LDS"), D_CMD|D_RARE, 0, 1, 0x000000FF, 0x000000C5, 0x00, B_SEGDS|B_CHG|B_PSEUDO, B_REG|B_BINARY|B_CHG, B_SEGOFFS|B_MEMONLY, B_NONE }, { T("LES"), D_CMD|D_RARE, 0, 1, 0x000000FF, 0x000000C4, 0x00, B_SEGES|B_CHG|B_PSEUDO, B_REG|B_BINARY|B_CHG, B_SEGOFFS|B_MEMONLY, B_NONE }, { T("LFS"), D_CMD|D_RARE, 0, 2, 0x0000FFFF, 0x0000B40F, 0x00, B_SEGFS|B_CHG|B_PSEUDO, B_REG|B_BINARY|B_CHG, B_SEGOFFS|B_MEMONLY, B_NONE }, { T("LGS"), D_CMD|D_RARE, 0, 2, 0x0000FFFF, 0x0000B50F, 0x00, B_SEGGS|B_CHG|B_PSEUDO, B_REG|B_BINARY|B_CHG, B_SEGOFFS|B_MEMONLY, B_NONE }, { T("LSS"), D_CMD|D_RARE, 0, 2, 0x0000FFFF, 0x0000B20F, 0x00, B_SEGSS|B_CHG|B_PSEUDO, B_REG|B_BINARY|B_CHG, B_SEGOFFS|B_MEMONLY, B_NONE }, { T("LEA"), D_CMD|D_HLADIR, DX_LEA, 1, 0x000000FF, 0x0000008D, 0x00, B_REG|B_BINARY|B_CHG, B_ANYMEM|B_MEMONLY|B_NOSEG, B_NONE, B_NONE }, { T("LEAVE"), D_CMD|D_CHGESP, 0, 1, 0x000000FF, 0x000000C9, 0x00, B_BPEBP|B_CHG|B_PSEUDO, B_EBPMEM|B_PSEUDO, B_NONE, B_NONE }, { T("LGDT"), D_PRIVILEGED|D_MEMORY|D_RARE, 0, 2, 0x0038FFFF, 0x0010010F, 0x00, B_DESCR|B_MEMONLY, B_NONE, B_NONE, B_NONE }, { T("LIDT"), D_PRIVILEGED|D_MEMORY|D_RARE, 0, 2, 0x0038FFFF, 0x0018010F, 0x00, B_DESCR|B_MEMONLY, B_NONE, B_NONE, B_NONE }, { T("LLDT"), D_PRIVILEGED|D_RARE, 0, 2, 0x0038FFFF, 0x0010000F, 0x00, B_INT16|B_NOESP, B_NONE, B_NONE, B_NONE }, { T("LMSW"), D_PRIVILEGED|D_RARE, 0, 2, 0x0038FFFF, 0x0030010F, 0x00, B_CR0|B_UPD|B_PSEUDO, B_INT16|B_NOESP, B_NONE, B_NONE }, { T("LOOP"), D_JMCX|D_ADDR32, 0, 1, 0x000000FF, 0x000000E2, 0x00, B_ECX|B_UPD|B_PSEUDO, B_BYTEOFFS|B_JMPCALL, B_NONE, B_NONE }, { T("LOOPD"), D_JMCX|D_ADDR32, 0, 1, 0x000000FF, 0x000000E2, 0x00, B_ECX|B_UPD|B_PSEUDO, B_BYTEOFFS|B_JMPCALL, B_NONE, B_NONE }, { T("LOOPW"), D_JMCX|D_ADDR16, 0, 1, 0x000000FF, 0x000000E2, 0x00, B_CX|B_UPD|B_PSEUDO, B_BYTEOFFS|B_JMPCALL, B_NONE, B_NONE }, { T("LOOPZ"), D_JMCX|D_ADDR32|D_COND, 0, 1, 0x000000FF, 0x000000E1, 0x00, B_ECX|B_UPD|B_PSEUDO, B_BYTEOFFS|B_JMPCALL, B_NONE, B_NONE }, { T("LOOPDZ"), D_JMCX|D_ADDR32|D_COND, 0, 1, 0x000000FF, 0x000000E1, 0x00, B_ECX|B_UPD|B_PSEUDO, B_BYTEOFFS|B_JMPCALL, B_NONE, B_NONE }, { T("LOOPWZ"), D_JMCX|D_ADDR16|D_COND, 0, 1, 0x000000FF, 0x000000E1, 0x00, B_CX|B_UPD|B_PSEUDO, B_BYTEOFFS|B_JMPCALL, B_NONE, B_NONE }, { T("LOOPE"), D_JMCX|D_ADDR32|D_COND, 0, 1, 0x000000FF, 0x000000E1, 0x00, B_ECX|B_UPD|B_PSEUDO, B_BYTEOFFS|B_JMPCALL, B_NONE, B_NONE }, { T("LOOPDE"), D_JMCX|D_ADDR32|D_COND, 0, 1, 0x000000FF, 0x000000E1, 0x00, B_ECX|B_UPD|B_PSEUDO, B_BYTEOFFS|B_JMPCALL, B_NONE, B_NONE }, { T("LOOPWE"), D_JMCX|D_ADDR16|D_COND, 0, 1, 0x000000FF, 0x000000E1, 0x00, B_CX|B_UPD|B_PSEUDO, B_BYTEOFFS|B_JMPCALL, B_NONE, B_NONE }, { T("LOOPNZ"), D_JMCX|D_ADDR32|D_COND, 0, 1, 0x000000FF, 0x000000E0, 0x00, B_ECX|B_UPD|B_PSEUDO, B_BYTEOFFS|B_JMPCALL, B_NONE, B_NONE }, { T("LOOPDNZ"), D_JMCX|D_ADDR32|D_COND, 0, 1, 0x000000FF, 0x000000E0, 0x00, B_ECX|B_UPD|B_PSEUDO, B_BYTEOFFS|B_JMPCALL, B_NONE, B_NONE }, { T("LOOPWNZ"), D_JMCX|D_ADDR16|D_COND, 0, 1, 0x000000FF, 0x000000E0, 0x00, B_CX|B_UPD|B_PSEUDO, B_BYTEOFFS|B_JMPCALL, B_NONE, B_NONE }, { T("LOOPNE"), D_JMCX|D_ADDR32|D_COND, 0, 1, 0x000000FF, 0x000000E0, 0x00, B_ECX|B_UPD|B_PSEUDO, B_BYTEOFFS|B_JMPCALL, B_NONE, B_NONE }, { T("LOOPDNE"), D_JMCX|D_ADDR32|D_COND, 0, 1, 0x000000FF, 0x000000E0, 0x00, B_ECX|B_UPD|B_PSEUDO, B_BYTEOFFS|B_JMPCALL, B_NONE, B_NONE }, { T("LOOPWNE"), D_JMCX|D_ADDR16|D_COND, 0, 1, 0x000000FF, 0x000000E0, 0x00, B_CX|B_UPD|B_PSEUDO, B_BYTEOFFS|B_JMPCALL, B_NONE, B_NONE }, { T("LSL"), D_SYS|D_FLAGZ|D_RARE, 0, 2, 0x0000FFFF, 0x0000030F, 0x00, B_REG|B_NOESP|B_CHG, B_INT|B_BINARY|B_NOESP, B_NONE, B_NONE }, { T("LTR"), D_PRIVILEGED|D_RARE, 0, 2, 0x0038FFFF, 0x0018000F, 0x00, B_INT16|B_NOESP, B_NONE, B_NONE, B_NONE }, { T("MOV"), D_MOV|D_SIZE01, 0, 1, 0x000000FE, 0x00000088, 0x00, B_INT|B_CHG, B_REG, B_NONE, B_NONE }, { T("MOV"), D_MOV|D_SIZE01, 0, 1, 0x000000FE, 0x0000008A, 0x00, B_REG|B_CHG, B_INT, B_NONE, B_NONE }, { T("MOV"), D_CMD|D_REGISTER|D_RARE, 0, 1, 0x0000C0FF, 0x0000C08C, 0x00, B_INT|B_REGISTER|B_NOESP|B_CHG, B_SEG, B_NONE, B_NONE }, { T("MOV"), D_CMD|D_MEMORY|D_RARE, 0, 1, 0x000000FF, 0x0000008C, 0x00, B_INT16|B_MEMORY|B_CHG, B_SEG, B_NONE, B_NONE }, { T("MOV"), D_CMD|D_RARE, 0, 1, 0x000000FF, 0x0000008E, 0x00, B_SEGNOCS|B_CHG, B_INT|B_REGISTER|B_NOESP, B_NONE, B_NONE }, { T("MOV"), D_CMD|D_RARE, 0, 1, 0x000000FF, 0x0000008E, 0x00, B_SEGNOCS|B_CHG, B_INT16|B_MEMORY|B_NOESP, B_NONE, B_NONE }, { T("MOV"), D_MOV|D_SIZE01, 0, 1, 0x000000FE, 0x000000A0, 0x00, B_ACC|B_CHG, B_IMMINT, B_NONE, B_NONE }, { T("MOV"), D_MOV|D_SIZE01, 0, 1, 0x000000FE, 0x000000A2, 0x00, B_IMMINT|B_CHG, B_ACC, B_NONE, B_NONE }, { T("MOV"), D_MOV, 0, 1, 0x000000F8, 0x000000B0, 0x00, B_REGCMD8|B_CHG, B_CONST8, B_NONE, B_NONE }, { T("MOV"), D_MOV, 0, 1, 0x000000F8, 0x000000B8, 0x00, B_REGCMD|B_NOESP|B_CHG, B_CONST, B_NONE, B_NONE }, { T("MOV"), D_MOV|D_SIZE01, 0, 1, 0x000038FE, 0x000000C6, 0x00, B_INT|B_NOESP|B_SHOWSIZE|B_CHG, B_CONST, B_NONE, B_NONE }, { T("MOV"), D_PRIVILEGED|D_RARE, 0, 2, 0x0000FFFF, 0x0000220F, 0x00, B_CR|B_CHG, B_INT32|B_BINARY|B_REGONLY|B_NOESP, B_NONE, B_NONE }, { T("MOV"), D_PRIVILEGED|D_RARE, 0, 2, 0x0000FFFF, 0x0000200F, 0x00, B_INT32|B_BINARY|B_REGONLY|B_NOESP|B_CHG, B_CR, B_NONE, B_NONE }, { T("MOV"), D_PRIVILEGED|D_RARE, 0, 2, 0x0000FFFF, 0x0000230F, 0x00, B_DR|B_CHG, B_INT32|B_BINARY|B_REGONLY|B_NOESP, B_NONE, B_NONE }, { T("MOV"), D_PRIVILEGED|D_RARE, 0, 2, 0x0000FFFF, 0x0000210F, 0x00, B_INT32|B_BINARY|B_REGONLY|B_NOESP|B_CHG, B_DR, B_NONE, B_NONE }, { T("MOVSX"), D_MOV, 0, 2, 0x0000FFFF, 0x0000BE0F, 0x00, B_REG|B_NOESP|B_CHG, B_INT8|B_SIGNED|B_SHOWSIZE, B_NONE, B_NONE }, { T("MOVSX"), D_MOV, 0, 2, 0x0000FFFF, 0x0000BF0F, 0x00, B_REG32|B_NOESP|B_CHG, B_INT16|B_SIGNED|B_SHOWSIZE, B_NONE, B_NONE }, { T("MOVZX"), D_MOV, 0, 2, 0x0000FFFF, 0x0000B60F, 0x00, B_REG|B_NOESP|B_CHG, B_INT8|B_SHOWSIZE, B_NONE, B_NONE }, { T("MOVZX"), D_MOV, 0, 2, 0x0000FFFF, 0x0000B70F, 0x00, B_REG32|B_NOESP|B_CHG, B_INT16|B_SHOWSIZE, B_NONE, B_NONE }, { T("MUL"), D_CMD|D_ALLFLAGS, 0, 1, 0x000038FF, 0x000020F6, 0x00, B_AX|B_UPD|B_PSEUDO, B_AL|B_PSEUDO, B_INT8|B_UNSIGNED|B_SHOWSIZE, B_NONE }, { T("MUL"), D_CMD|D_ALLFLAGS, 0, 1, 0x000038FF, 0x000020F7, 0x00, B_DXEDX|B_CHG|B_PSEUDO, B_ACC|B_UPD|B_PSEUDO, B_INT1632|B_UNSIGNED|B_NOESP|B_SHOWSIZE, B_NONE }, { T("NEG"), D_CMD|D_SIZE01|D_LOCKABLE|D_ALLFLAGS, DX_JZ|DX_JC, 1, 0x000038FE, 0x000018F6, 0x00, B_INT|B_NOESP|B_SHOWSIZE|B_UPD, B_NONE, B_NONE, B_NONE }, { T("NOT"), D_CMD|D_SIZE01|D_LOCKABLE, 0, 1, 0x000038FE, 0x000010F6, 0x00, B_INT|B_NOESP|B_SHOWSIZE|B_UPD, B_NONE, B_NONE, B_NONE }, { T("OR"), D_CMD|D_SIZE01|D_ALLFLAGS, DX_JZ|DX_JB, 1, 0x000000FE, 0x0000000C, 0x00, B_ACC|B_BINARY|B_UPD, B_CONST|B_BINARY, B_NONE, B_NONE }, { T("OR"), D_CMD|D_SIZE01|D_LOCKABLE|D_ALLFLAGS, DX_JZ|DX_JB, 1, 0x000038FE, 0x00000880, 0x00, B_INT|B_BINARY|B_NOESP|B_SHOWSIZE|B_UPD, B_CONST|B_BINARY, B_NONE, B_NONE }, { T("OR"), D_CMD|D_SIZE01|D_LOCKABLE|D_ALLFLAGS, DX_JZ|DX_JB, 1, 0x000038FE, 0x00000882, 0x00, B_INT|B_BINARY|B_NOESP|B_SHOWSIZE|B_UPD, B_SXTCONST|B_BINARY, B_NONE, B_NONE }, { T("OR"), D_CMD|D_SIZE01|D_LOCKABLE|D_ALLFLAGS, DX_JZ|DX_JB, 1, 0x000000FE, 0x00000008, 0x00, B_INT|B_BINARY|B_NOESP|B_UPD, B_REG|B_BINARY, B_NONE, B_NONE }, { T("OR"), D_CMD|D_SIZE01|D_ALLFLAGS, DX_JZ|DX_JB, 1, 0x000000FE, 0x0000000A, 0x00, B_REG|B_BINARY|B_NOESP|B_UPD, B_INT|B_BINARY, B_NONE, B_NONE }, { T("OUT"), D_IO|D_SIZE01|D_RARE, 0, 1, 0x000000FE, 0x000000E6, 0x00, B_CONST8|B_PORT, B_ACC, B_NONE, B_NONE }, { T("OUT"), D_IO|D_SIZE01|D_RARE, 0, 1, 0x000000FE, 0x000000EE, 0x00, B_DXPORT|B_PORT, B_ACC, B_NONE, B_NONE }, { T("POP"), D_POP|D_CHGESP, 0, 1, 0x000038FF, 0x0000008F, 0x00, B_INT|B_SHOWSIZE|B_CHG, B_STKTOP|B_PSEUDO, B_NONE, B_NONE }, { T("POP"), D_POP|D_CHGESP, 0, 1, 0x000000F8, 0x00000058, 0x00, B_REGCMD|B_CHG, B_STKTOP|B_PSEUDO, B_NONE, B_NONE }, { T("POP"), D_POP|D_CHGESP|D_RARE, 0, 1, 0x000000FF, 0x0000001F, 0x00, B_SEGDS|B_CHG, B_STKTOP|B_PSEUDO, B_NONE, B_NONE }, { T("POP"), D_POP|D_CHGESP|D_RARE, 0, 1, 0x000000FF, 0x00000007, 0x00, B_SEGES|B_CHG, B_STKTOP|B_PSEUDO, B_NONE, B_NONE }, { T("POP"), D_POP|D_CHGESP|D_RARE, DX_JB, 1, 0x000000FF, 0x00000017, 0x00, B_SEGSS|B_CHG, B_STKTOP|B_PSEUDO, B_NONE, B_NONE }, { T("POP"), D_POP|D_CHGESP|D_RARE, 0, 2, 0x0000FFFF, 0x0000A10F, 0x00, B_SEGFS|B_CHG, B_STKTOP|B_PSEUDO, B_NONE, B_NONE }, { T("POP"), D_POP|D_CHGESP|D_RARE, 0, 2, 0x0000FFFF, 0x0000A90F, 0x00, B_SEGGS|B_CHG, B_STKTOP|B_PSEUDO, B_NONE, B_NONE }, { T("POPA*"), D_CMD|D_CHGESP|D_WILDCARD, 0, 1, 0x000000FF, 0x00000061, 0x00, B_STKTOPA|B_PSEUDO, B_NONE, B_NONE, B_NONE }, { T("POPF*"), D_POP|D_ALLFLAGS|D_CHGESP|D_WILDCARD, 0, 1, 0x000000FF, 0x0000009D, 0x00, B_EFL|B_CHG|B_PSEUDO, B_STKTOPEFL|B_PSEUDO, B_NONE, B_NONE }, { T("PUSH"), D_PUSH|D_CHGESP, 0, 1, 0x000038FF, 0x000030FF, 0x00, B_INT|B_SHOWSIZE, B_PUSH|B_CHG|B_PSEUDO, B_NONE, B_NONE }, { T("PUSH"), D_PUSH|D_CHGESP, 0, 1, 0x000000F8, 0x00000050, 0x00, B_REGCMD, B_PUSH|B_CHG|B_PSEUDO, B_NONE, B_NONE }, { T("PUSH"), D_PUSH|D_CHGESP, 0, 1, 0x000000FF, 0x0000006A, 0x00, B_SXTCONST|B_SHOWSIZE, B_PUSH|B_CHG|B_PSEUDO, B_NONE, B_NONE }, { T("PUSH"), D_PUSH|D_CHGESP, 0, 1, 0x000000FF, 0x00000068, 0x00, B_CONSTL|B_SHOWSIZE, B_PUSH|B_CHG|B_PSEUDO, B_NONE, B_NONE }, { T("PUSH"), D_PUSH|D_CHGESP|D_RARE, 0, 1, 0x000000FF, 0x0000000E, 0x00, B_SEGCS, B_PUSH|B_CHG|B_PSEUDO, B_NONE, B_NONE }, { T("PUSH"), D_PUSH|D_CHGESP|D_RARE, 0, 1, 0x000000FF, 0x00000016, 0x00, B_SEGSS, B_PUSH|B_CHG|B_PSEUDO, B_NONE, B_NONE }, { T("PUSH"), D_PUSH|D_CHGESP|D_RARE, 0, 1, 0x000000FF, 0x0000001E, 0x00, B_SEGDS, B_PUSH|B_CHG|B_PSEUDO, B_NONE, B_NONE }, { T("PUSH"), D_PUSH|D_CHGESP|D_RARE, 0, 1, 0x000000FF, 0x00000006, 0x00, B_SEGES, B_PUSH|B_CHG|B_PSEUDO, B_NONE, B_NONE }, { T("PUSH"), D_PUSH|D_CHGESP|D_RARE, 0, 2, 0x0000FFFF, 0x0000A00F, 0x00, B_SEGFS, B_PUSH|B_CHG|B_PSEUDO, B_NONE, B_NONE }, { T("PUSH"), D_PUSH|D_CHGESP|D_RARE, 0, 2, 0x0000FFFF, 0x0000A80F, 0x00, B_SEGGS, B_PUSH|B_CHG|B_PSEUDO, B_NONE, B_NONE }, { T("PUSHA*"), D_CMD|D_CHGESP|D_WILDCARD, 0, 1, 0x000000FF, 0x00000060, 0x00, B_PUSHA|B_CHG|B_PSEUDO, B_NONE, B_NONE, B_NONE }, { T("PUSHF*"), D_PUSH|D_CHGESP|D_WILDCARD, DX_JB, 1, 0x000000FF, 0x0000009C, 0x00, B_EFL|B_PSEUDO, B_PUSH|B_CHG|B_PSEUDO, B_NONE, B_NONE }, { T("RCL"), D_CMD|D_SIZE01|D_FLAGSCO|D_USESCARRY, DX_JC, 1, 0x000038FE, 0x000010D0, 0x00, B_INT|B_NOESP|B_SHOWSIZE|B_UPD, B_1|B_SHIFTCNT, B_NONE, B_NONE }, { T("RCL"), D_CMD|D_SIZE01|D_FLAGSCO|D_USESCARRY, DX_JC, 1, 0x000038FE, 0x000010D2, 0x00, B_INT|B_NOESP|B_SHOWSIZE|B_UPD, B_CL|B_SHIFTCNT, B_NONE, B_NONE }, { T("RCL"), D_CMD|D_SIZE01|D_FLAGSCO|D_USESCARRY, DX_JC, 1, 0x000038FE, 0x000010C0, 0x00, B_INT|B_NOESP|B_SHOWSIZE|B_UPD, B_CONST8|B_SHIFTCNT, B_NONE, B_NONE }, { T("RCR"), D_CMD|D_SIZE01|D_FLAGSCO|D_USESCARRY, DX_JC, 1, 0x000038FE, 0x000018D0, 0x00, B_INT|B_NOESP|B_SHOWSIZE|B_UPD, B_1|B_SHIFTCNT, B_NONE, B_NONE }, { T("RCR"), D_CMD|D_SIZE01|D_FLAGSCO|D_USESCARRY, DX_JC, 1, 0x000038FE, 0x000018D2, 0x00, B_INT|B_NOESP|B_SHOWSIZE|B_UPD, B_CL|B_SHIFTCNT, B_NONE, B_NONE }, { T("RCR"), D_CMD|D_SIZE01|D_FLAGSCO|D_USESCARRY, DX_JC, 1, 0x000038FE, 0x000018C0, 0x00, B_INT|B_NOESP|B_SHOWSIZE|B_UPD, B_CONST8|B_SHIFTCNT, B_NONE, B_NONE }, { T("ROL"), D_CMD|D_SIZE01|D_FLAGSCO, DX_JC, 1, 0x000038FE, 0x000000D0, 0x00, B_INT|B_NOESP|B_SHOWSIZE|B_UPD, B_1|B_SHIFTCNT, B_NONE, B_NONE }, { T("ROL"), D_CMD|D_SIZE01|D_FLAGSCO, DX_JC, 1, 0x000038FE, 0x000000D2, 0x00, B_INT|B_NOESP|B_SHOWSIZE|B_UPD, B_CL|B_SHIFTCNT, B_NONE, B_NONE }, { T("ROL"), D_CMD|D_SIZE01|D_FLAGSCO, DX_JC, 1, 0x000038FE, 0x000000C0, 0x00, B_INT|B_NOESP|B_SHOWSIZE|B_UPD, B_CONST8|B_SHIFTCNT, B_NONE, B_NONE }, { T("ROR"), D_CMD|D_SIZE01|D_FLAGSCO, DX_JC, 1, 0x000038FE, 0x000008D0, 0x00, B_INT|B_NOESP|B_SHOWSIZE|B_UPD, B_1|B_SHIFTCNT, B_NONE, B_NONE }, { T("ROR"), D_CMD|D_SIZE01|D_FLAGSCO, DX_JC, 1, 0x000038FE, 0x000008D2, 0x00, B_INT|B_NOESP|B_SHOWSIZE|B_UPD, B_CL|B_SHIFTCNT, B_NONE, B_NONE }, { T("ROR"), D_CMD|D_SIZE01|D_FLAGSCO, DX_JC, 1, 0x000038FE, 0x000008C0, 0x00, B_INT|B_NOESP|B_SHOWSIZE|B_UPD, B_CONST8|B_SHIFTCNT, B_NONE, B_NONE }, { T("RDMSR"), D_PRIVILEGED|D_RARE, 0, 2, 0x0000FFFF, 0x0000320F, 0x00, B_EDX|B_BINARY|B_CHG|B_PSEUDO, B_EAX|B_BINARY|B_CHG|B_PSEUDO, B_ECX|B_PSEUDO, B_NONE }, { T("RDPMC"), D_SYS|D_RARE, 0, 2, 0x0000FFFF, 0x0000330F, 0x00, B_EDX|B_BINARY|B_CHG|B_PSEUDO, B_EAX|B_BINARY|B_CHG|B_PSEUDO, B_ECX|B_PSEUDO, B_NONE }, { T("RDTSC"), D_SYS|D_RARE, 0, 2, 0x0000FFFF, 0x0000310F, 0x00, B_EDX|B_BINARY|B_CHG|B_PSEUDO, B_EAX|B_BINARY|B_CHG|B_PSEUDO, B_NONE, B_NONE }, { T("RDTSCP"), D_SYS|D_RARE, 0, 3, 0x00FFFFFF, 0x00F9010F, 0x00, B_EDX|B_BINARY|B_CHG|B_PSEUDO, B_EAX|B_BINARY|B_CHG|B_PSEUDO, B_ECX|B_BINARY|B_CHG|B_PSEUDO, B_NONE }, { T("RETN"), D_RET|D_NOREP|D_CHGESP, DX_RETN, 1, 0x000000FF, 0x000000C3, 0x00, B_STKTOP|B_JMPCALL|B_PSEUDO, B_NONE, B_NONE, B_NONE }, { T("RET"), D_RET|D_NOREP|D_CHGESP, 0, 1, 0x000000FF, 0x000000C3, 0x00, B_STKTOP|B_JMPCALL|B_PSEUDO, B_NONE, B_NONE, B_NONE }, { T("RETN"), D_RET|D_MUSTREP|D_CHGESP, DX_RETN, 1, 0x000000FF, 0x000000C3, 0x00, B_STKTOP|B_JMPCALL|B_PSEUDO, B_NONE, B_NONE, B_NONE }, { T("RET"), D_RET|D_MUSTREP|D_CHGESP, 0, 1, 0x000000FF, 0x000000C3, 0x00, B_STKTOP|B_JMPCALL|B_PSEUDO, B_NONE, B_NONE, B_NONE }, { T("RETN"), D_RET|D_CHGESP, DX_RETN, 1, 0x000000FF, 0x000000C2, 0x00, B_STKTOP|B_JMPCALL|B_PSEUDO, B_CONST16|B_STACKINC, B_NONE, B_NONE }, { T("RET"), D_RET|D_CHGESP, 0, 1, 0x000000FF, 0x000000C2, 0x00, B_STKTOP|B_JMPCALL|B_PSEUDO, B_CONST16|B_STACKINC, B_NONE, B_NONE }, { T("RETF"), D_RETFAR|D_CHGESP|D_RARE, 0, 1, 0x000000FF, 0x000000CB, 0x00, B_STKTOPFAR|B_JMPCALLFAR|B_PSEUDO, B_NONE, B_NONE, B_NONE }, { T("RETF"), D_RETFAR|D_CHGESP|D_RARE, 0, 1, 0x000000FF, 0x000000CA, 0x00, B_STKTOPFAR|B_JMPCALLFAR|B_PSEUDO, B_CONST16|B_STACKINC, B_NONE, B_NONE }, { T("RSM"), D_PRIVILEGED|D_RARE, 0, 2, 0x0000FFFF, 0x0000AA0F, 0x00, B_NONE, B_NONE, B_NONE, B_NONE }, { T("SAHF"), D_CMD|D_ALLFLAGS, 0, 1, 0x000000FF, 0x0000009E, 0x00, B_AH|B_PSEUDO, B_NONE, B_NONE, B_NONE }, { T("SHL"), D_CMD|D_SIZE01|D_ALLFLAGS, DX_JZ|DX_JC, 1, 0x000038FE, 0x000020D0, 0x00, B_INT|B_NOESP|B_SHOWSIZE|B_UPD, B_1|B_SHIFTCNT, B_NONE, B_NONE }, { T("SHL"), D_CMD|D_SIZE01|D_ALLFLAGS, DX_JZ|DX_JC, 1, 0x000038FE, 0x000020D2, 0x00, B_INT|B_NOESP|B_SHOWSIZE|B_UPD, B_CL|B_SHIFTCNT, B_NONE, B_NONE }, { T("SHL"), D_CMD|D_SIZE01|D_ALLFLAGS, DX_JZ|DX_JC, 1, 0x000038FE, 0x000020C0, 0x00, B_INT|B_NOESP|B_SHOWSIZE|B_UPD, B_CONST8|B_SHIFTCNT, B_NONE, B_NONE }, { T("SAL"), D_CMD|D_SIZE01|D_ALLFLAGS, DX_JZ|DX_JC, 1, 0x000038FE, 0x000020D0, 0x00, B_INT|B_NOESP|B_SHOWSIZE|B_UPD, B_1|B_SHIFTCNT, B_NONE, B_NONE }, { T("SAL"), D_CMD|D_SIZE01|D_ALLFLAGS, DX_JZ|DX_JC, 1, 0x000038FE, 0x000020D2, 0x00, B_INT|B_NOESP|B_SHOWSIZE|B_UPD, B_CL|B_SHIFTCNT, B_NONE, B_NONE }, { T("SAL"), D_CMD|D_SIZE01|D_ALLFLAGS, DX_JZ|DX_JC, 1, 0x000038FE, 0x000020C0, 0x00, B_INT|B_NOESP|B_SHOWSIZE|B_UPD, B_CONST8|B_SHIFTCNT, B_NONE, B_NONE }, { T("SAL"), D_CMD|D_SIZE01|D_ALLFLAGS|D_UNDOC, DX_JZ|DX_JC, 1, 0x000038FE, 0x000030D0, 0x00, B_INT|B_NOESP|B_SHOWSIZE|B_UPD, B_1|B_SHIFTCNT, B_NONE, B_NONE }, { T("SAL"), D_CMD|D_SIZE01|D_ALLFLAGS|D_UNDOC, DX_JZ|DX_JC, 1, 0x000038FE, 0x000030D2, 0x00, B_INT|B_NOESP|B_SHOWSIZE|B_UPD, B_CL|B_SHIFTCNT, B_NONE, B_NONE }, { T("SAL"), D_CMD|D_SIZE01|D_ALLFLAGS|D_UNDOC, DX_JZ|DX_JC, 1, 0x000038FE, 0x000030C0, 0x00, B_INT|B_NOESP|B_SHOWSIZE|B_UPD, B_CONST8|B_SHIFTCNT, B_NONE, B_NONE }, { T("SALC"), D_CMD|D_ALLFLAGS|D_UNDOC, DX_JZ|DX_JC, 1, 0x000000FF, 0x000000D6, 0x00, B_AL|B_UPD|B_PSEUDO, B_NONE, B_NONE, B_NONE }, { T("SHR"), D_CMD|D_SIZE01|D_ALLFLAGS, DX_JZ|DX_JC, 1, 0x000038FE, 0x000028D0, 0x00, B_INT|B_NOESP|B_SHOWSIZE|B_UPD, B_1|B_SHIFTCNT, B_NONE, B_NONE }, { T("SHR"), D_CMD|D_SIZE01|D_ALLFLAGS, DX_JZ|DX_JC, 1, 0x000038FE, 0x000028D2, 0x00, B_INT|B_NOESP|B_SHOWSIZE|B_UPD, B_CL|B_SHIFTCNT, B_NONE, B_NONE }, { T("SHR"), D_CMD|D_SIZE01|D_ALLFLAGS, DX_JZ|DX_JC, 1, 0x000038FE, 0x000028C0, 0x00, B_INT|B_NOESP|B_SHOWSIZE|B_UPD, B_CONST8|B_SHIFTCNT, B_NONE, B_NONE }, { T("SAR"), D_CMD|D_SIZE01|D_ALLFLAGS, DX_JZ|DX_JC, 1, 0x000038FE, 0x000038D0, 0x00, B_INT|B_NOESP|B_SHOWSIZE|B_UPD, B_1|B_SHIFTCNT, B_NONE, B_NONE }, { T("SAR"), D_CMD|D_SIZE01|D_ALLFLAGS, DX_JZ|DX_JC, 1, 0x000038FE, 0x000038D2, 0x00, B_INT|B_NOESP|B_SHOWSIZE|B_UPD, B_CL|B_SHIFTCNT, B_NONE, B_NONE }, { T("SAR"), D_CMD|D_SIZE01|D_ALLFLAGS, DX_JZ|DX_JC, 1, 0x000038FE, 0x000038C0, 0x00, B_INT|B_NOESP|B_SHOWSIZE|B_UPD, B_CONST8|B_SHIFTCNT, B_NONE, B_NONE }, { T("SBB"), D_CMD|D_SIZE01|D_ALLFLAGS|D_USESCARRY, DX_JZ|DX_JB, 1, 0x000000FE, 0x0000001C, 0x00, B_ACC|B_UPD, B_CONST, B_NONE, B_NONE }, { T("SBB"), D_CMD|D_SIZE01|D_LOCKABLE|D_ALLFLAGS|D_USESCARRY, DX_JZ|DX_JB, 1, 0x000038FE, 0x00001880, 0x00, B_INT|B_SHOWSIZE|B_UPD, B_CONST, B_NONE, B_NONE }, { T("SBB"), D_CMD|D_SIZE01|D_LOCKABLE|D_ALLFLAGS|D_USESCARRY, DX_JZ|DX_JB, 1, 0x000038FE, 0x00001882, 0x00, B_INT|B_SHOWSIZE|B_UPD, B_SXTCONST, B_NONE, B_NONE }, { T("SBB"), D_CMD|D_SIZE01|D_LOCKABLE|D_ALLFLAGS|D_USESCARRY, DX_JZ|DX_JB, 1, 0x000000FE, 0x00000018, 0x00, B_INT|B_UPD, B_REG, B_NONE, B_NONE }, { T("SBB"), D_CMD|D_SIZE01|D_ALLFLAGS|D_USESCARRY, DX_JZ|DX_JB, 1, 0x000000FE, 0x0000001A, 0x00, B_REG|B_UPD, B_INT, B_NONE, B_NONE }, { T("SETO"), D_SETC|D_COND, 0, 2, 0x0000FFFF, 0x0000900F, 0x00, B_INT8|B_CHG, B_ANYREG|B_PSEUDO, B_NONE, B_NONE }, { T("SETNO"), D_SETC|D_COND, 0, 2, 0x0000FFFF, 0x0000910F, 0x00, B_INT8|B_CHG, B_ANYREG|B_PSEUDO, B_NONE, B_NONE }, { T("SETB"), D_SETC|D_COND|D_USESCARRY, DX_JB, 2, 0x0000FFFF, 0x0000920F, 0x00, B_INT8|B_CHG, B_ANYREG|B_PSEUDO, B_NONE, B_NONE }, { T("SETC"), D_SETC|D_COND|D_USESCARRY, DX_JC, 2, 0x0000FFFF, 0x0000920F, 0x00, B_INT8|B_CHG, B_ANYREG|B_PSEUDO, B_NONE, B_NONE }, { T("SETNAE"), D_SETC|D_COND|D_USESCARRY, DX_JB, 2, 0x0000FFFF, 0x0000920F, 0x00, B_INT8|B_CHG, B_ANYREG|B_PSEUDO, B_NONE, B_NONE }, { T("SETAE"), D_SETC|D_COND|D_USESCARRY, DX_JB, 2, 0x0000FFFF, 0x0000930F, 0x00, B_INT8|B_CHG, B_ANYREG|B_PSEUDO, B_NONE, B_NONE }, { T("SETNB"), D_SETC|D_COND|D_USESCARRY, DX_JB, 2, 0x0000FFFF, 0x0000930F, 0x00, B_INT8|B_CHG, B_ANYREG|B_PSEUDO, B_NONE, B_NONE }, { T("SETNC"), D_SETC|D_COND|D_USESCARRY, DX_JC, 2, 0x0000FFFF, 0x0000930F, 0x00, B_INT8|B_CHG, B_ANYREG|B_PSEUDO, B_NONE, B_NONE }, { T("SETE"), D_SETC|D_COND, DX_JE, 2, 0x0000FFFF, 0x0000940F, 0x00, B_INT8|B_CHG, B_ANYREG|B_PSEUDO, B_NONE, B_NONE }, { T("SETZ"), D_SETC|D_COND, DX_JZ, 2, 0x0000FFFF, 0x0000940F, 0x00, B_INT8|B_CHG, B_ANYREG|B_PSEUDO, B_NONE, B_NONE }, { T("SETNE"), D_SETC|D_COND, DX_JE, 2, 0x0000FFFF, 0x0000950F, 0x00, B_INT8|B_CHG, B_ANYREG|B_PSEUDO, B_NONE, B_NONE }, { T("SETNZ"), D_SETC|D_COND, DX_JZ, 2, 0x0000FFFF, 0x0000950F, 0x00, B_INT8|B_CHG, B_ANYREG|B_PSEUDO, B_NONE, B_NONE }, { T("SETBE"), D_SETC|D_COND|D_USESCARRY, 0, 2, 0x0000FFFF, 0x0000960F, 0x00, B_INT8|B_CHG, B_ANYREG|B_PSEUDO, B_NONE, B_NONE }, { T("SETNA"), D_SETC|D_COND|D_USESCARRY, 0, 2, 0x0000FFFF, 0x0000960F, 0x00, B_INT8|B_CHG, B_ANYREG|B_PSEUDO, B_NONE, B_NONE }, { T("SETA"), D_SETC|D_COND|D_USESCARRY, 0, 2, 0x0000FFFF, 0x0000970F, 0x00, B_INT8|B_CHG, B_ANYREG|B_PSEUDO, B_NONE, B_NONE }, { T("SETNBE"), D_SETC|D_COND|D_USESCARRY, 0, 2, 0x0000FFFF, 0x0000970F, 0x00, B_INT8|B_CHG, B_ANYREG|B_PSEUDO, B_NONE, B_NONE }, { T("SETS"), D_SETC|D_COND, 0, 2, 0x0000FFFF, 0x0000980F, 0x00, B_INT8|B_CHG, B_ANYREG|B_PSEUDO, B_NONE, B_NONE }, { T("SETNS"), D_SETC|D_COND, 0, 2, 0x0000FFFF, 0x0000990F, 0x00, B_INT8|B_CHG, B_ANYREG|B_PSEUDO, B_NONE, B_NONE }, { T("SETPE"), D_SETC|D_COND|D_RARE, 0, 2, 0x0000FFFF, 0x00009A0F, 0x00, B_INT8|B_CHG, B_ANYREG|B_PSEUDO, B_NONE, B_NONE }, { T("SETP"), D_SETC|D_COND|D_RARE, 0, 2, 0x0000FFFF, 0x00009A0F, 0x00, B_INT8|B_CHG, B_ANYREG|B_PSEUDO, B_NONE, B_NONE }, { T("SETPO"), D_SETC|D_COND|D_RARE, 0, 2, 0x0000FFFF, 0x00009B0F, 0x00, B_INT8|B_CHG, B_ANYREG|B_PSEUDO, B_NONE, B_NONE }, { T("SETNP"), D_SETC|D_COND|D_RARE, 0, 2, 0x0000FFFF, 0x00009B0F, 0x00, B_INT8|B_CHG, B_ANYREG|B_PSEUDO, B_NONE, B_NONE }, { T("SETL"), D_SETC|D_COND, 0, 2, 0x0000FFFF, 0x00009C0F, 0x00, B_INT8|B_CHG, B_ANYREG|B_PSEUDO, B_NONE, B_NONE }, { T("SETNGE"), D_SETC|D_COND, 0, 2, 0x0000FFFF, 0x00009C0F, 0x00, B_INT8|B_CHG, B_ANYREG|B_PSEUDO, B_NONE, B_NONE }, { T("SETGE"), D_SETC|D_COND, 0, 2, 0x0000FFFF, 0x00009D0F, 0x00, B_INT8|B_CHG, B_ANYREG|B_PSEUDO, B_NONE, B_NONE }, { T("SETNL"), D_SETC|D_COND, 0, 2, 0x0000FFFF, 0x00009D0F, 0x00, B_INT8|B_CHG, B_ANYREG|B_PSEUDO, B_NONE, B_NONE }, { T("SETLE"), D_SETC|D_COND, 0, 2, 0x0000FFFF, 0x00009E0F, 0x00, B_INT8|B_CHG, B_ANYREG|B_PSEUDO, B_NONE, B_NONE }, { T("SETNG"), D_SETC|D_COND, 0, 2, 0x0000FFFF, 0x00009E0F, 0x00, B_INT8|B_CHG, B_ANYREG|B_PSEUDO, B_NONE, B_NONE }, { T("SETG"), D_SETC|D_COND, 0, 2, 0x0000FFFF, 0x00009F0F, 0x00, B_INT8|B_CHG, B_ANYREG|B_PSEUDO, B_NONE, B_NONE }, { T("SETNLE"), D_SETC|D_COND, 0, 2, 0x0000FFFF, 0x00009F0F, 0x00, B_INT8|B_CHG, B_ANYREG|B_PSEUDO, B_NONE, B_NONE }, { T("SGDT"), D_SYS|D_MEMORY|D_RARE, 0, 2, 0x0038FFFF, 0x0000010F, 0x00, B_DESCR|B_MEMONLY|B_CHG, B_NONE, B_NONE, B_NONE }, { T("SIDT"), D_SYS|D_MEMORY|D_RARE, 0, 2, 0x0038FFFF, 0x0008010F, 0x00, B_DESCR|B_MEMONLY|B_CHG, B_NONE, B_NONE, B_NONE }, { T("SHLD"), D_CMD|D_ALLFLAGS, DX_JZ|DX_JC, 2, 0x0000FFFF, 0x0000A40F, 0x00, B_INT|B_NOESP|B_UPD, B_REG, B_CONST8|B_SHIFTCNT, B_NONE }, { T("SHLD"), D_CMD|D_ALLFLAGS, DX_JZ|DX_JC, 2, 0x0000FFFF, 0x0000A50F, 0x00, B_INT|B_NOESP|B_UPD, B_REG, B_CL|B_SHIFTCNT, B_NONE }, { T("SHRD"), D_CMD|D_ALLFLAGS, DX_JZ|DX_JC, 2, 0x0000FFFF, 0x0000AC0F, 0x00, B_INT|B_NOESP|B_UPD, B_REG, B_CONST8|B_SHIFTCNT, B_NONE }, { T("SHRD"), D_CMD|D_ALLFLAGS, DX_JZ|DX_JC, 2, 0x0000FFFF, 0x0000AD0F, 0x00, B_INT|B_NOESP|B_UPD, B_REG, B_CL|B_SHIFTCNT, B_NONE }, { T("SLDT"), D_SYS|D_RARE, 0, 2, 0x0038FFFF, 0x0000000F, 0x00, B_INT|B_NOESP|B_CHG, B_NONE, B_NONE, B_NONE }, { T("SMSW"), D_SYS|D_MEMORY|D_RARE, 0, 2, 0x0038FFFF, 0x0020010F, 0x00, B_INT16|B_MEMONLY|B_CHG, B_CR0|B_PSEUDO, B_NONE, B_NONE }, { T("SMSW"), D_SYS|D_REGISTER|D_RARE, 0, 2, 0x0038FFFF, 0x0020010F, 0x00, B_INT|B_REGONLY|B_NOESP|B_CHG, B_CR0|B_PSEUDO, B_NONE, B_NONE }, { T("STC"), D_CMD|D_FLAGC, 0, 1, 0x000000FF, 0x000000F9, 0x00, B_NONE, B_NONE, B_NONE, B_NONE }, { T("STD"), D_CMD|D_FLAGD, 0, 1, 0x000000FF, 0x000000FD, 0x00, B_NONE, B_NONE, B_NONE, B_NONE }, { T("STI"), D_CMD|D_RARE, 0, 1, 0x000000FF, 0x000000FB, 0x00, B_NONE, B_NONE, B_NONE, B_NONE }, { T("STMXCSR"), D_CMD|D_MEMORY, 0, 2, 0x0038FFFF, 0x0018AE0F, 0x00, B_INT32|B_BINARY|B_MEMONLY|B_NOESP|B_SHOWSIZE|B_CHG, B_MXCSR|B_PSEUDO, B_NONE, B_NONE }, { T("STR"), D_SYS|D_MEMORY|D_RARE, 0, 2, 0x0038FFFF, 0x0008000F, 0x00, B_INT16|B_MEMONLY|B_CHG, B_NONE, B_NONE, B_NONE }, { T("STR"), D_SYS|D_REGISTER|D_RARE, 0, 2, 0x0038FFFF, 0x0008000F, 0x00, B_INT|B_REGONLY|B_NOESP|B_CHG, B_NONE, B_NONE, B_NONE }, { T("SUB"), D_CMD|D_SIZE01|D_ALLFLAGS, DX_JZ|DX_JB|DX_SUB, 1, 0x000000FE, 0x0000002C, 0x00, B_ACC|B_UPD, B_CONST, B_NONE, B_NONE }, { T("SUB"), D_CMD|D_SIZE01|D_LOCKABLE|D_ALLFLAGS, DX_JZ|DX_JB|DX_SUB, 1, 0x000038FE, 0x00002880, 0x00, B_INT|B_SHOWSIZE|B_UPD, B_CONST, B_NONE, B_NONE }, { T("SUB"), D_CMD|D_SIZE01|D_LOCKABLE|D_ALLFLAGS, DX_JZ|DX_JB|DX_SUB, 1, 0x000038FE, 0x00002882, 0x00, B_INT|B_SHOWSIZE|B_UPD, B_SXTCONST, B_NONE, B_NONE }, { T("SUB"), D_CMD|D_SIZE01|D_LOCKABLE|D_ALLFLAGS, DX_JZ|DX_JB|DX_SUB, 1, 0x000000FE, 0x00000028, 0x00, B_INT|B_UPD, B_REG, B_NONE, B_NONE }, { T("SUB"), D_CMD|D_SIZE01|D_ALLFLAGS, DX_JZ|DX_JB|DX_SUB, 1, 0x000000FE, 0x0000002A, 0x00, B_REG|B_UPD, B_INT, B_NONE, B_NONE }, { T("SYSENTER"), D_SYS|D_RARE, 0, 2, 0x0000FFFF, 0x0000340F, 0x00, B_NONE, B_NONE, B_NONE, B_NONE }, { T("SYSEXIT"), D_SYS|D_ALLFLAGS|D_SUSPICIOUS, 0, 2, 0x0000FFFF, 0x0000350F, 0x00, B_NONE, B_NONE, B_NONE, B_NONE }, { T("TEST"), D_TEST|D_SIZE01|D_ALLFLAGS, DX_JZ, 1, 0x000000FE, 0x000000A8, 0x00, B_ACC|B_BINARY, B_CONST|B_BINARY, B_NONE, B_NONE }, { T("TEST"), D_TEST|D_SIZE01|D_ALLFLAGS, DX_JZ, 1, 0x000038FE, 0x000000F6, 0x00, B_INT|B_BINARY|B_SHOWSIZE, B_CONST|B_BINARY, B_NONE, B_NONE }, { T("TEST"), D_TEST|D_SIZE01|D_ALLFLAGS|D_UNDOC, DX_JZ, 1, 0x000038FE, 0x000008F6, 0x00, B_INT|B_BINARY|B_SHOWSIZE, B_CONST|B_BINARY, B_NONE, B_NONE }, { T("TEST"), D_TEST|D_SIZE01|D_ALLFLAGS, DX_JZ, 1, 0x000000FE, 0x00000084, 0x00, B_INT|B_BINARY, B_REG|B_BINARY, B_NONE, B_NONE }, { T("TEST"), D_TEST|D_SIZE01|D_ALLFLAGS, DX_JZ, 1, 0x000000FE, 0x00000084, 0x00, B_REG|B_BINARY, B_INT|B_BINARY, B_NONE, B_NONE }, { T("UD1"), D_CMD|D_UNDOC, 0, 2, 0x0000FFFF, 0x0000B90F, 0x00, B_NONE, B_NONE, B_NONE, B_NONE }, { T("UD2"), D_CMD, 0, 2, 0x0000FFFF, 0x00000B0F, 0x00, B_NONE, B_NONE, B_NONE, B_NONE }, { T("VERR"), D_CMD|D_FLAGZ|D_RARE, 0, 2, 0x0038FFFF, 0x0020000F, 0x00, B_INT16|B_NOESP, B_NONE, B_NONE, B_NONE }, { T("VERW"), D_CMD|D_FLAGZ|D_RARE, 0, 2, 0x0038FFFF, 0x0028000F, 0x00, B_INT16|B_NOESP, B_NONE, B_NONE, B_NONE }, { T("WBINVD"), D_PRIVILEGED|D_RARE, 0, 2, 0x0000FFFF, 0x0000090F, 0x00, B_NONE, B_NONE, B_NONE, B_NONE }, { T("WRMSR"), D_PRIVILEGED|D_RARE, 0, 2, 0x0000FFFF, 0x0000300F, 0x00, B_EDX|B_BINARY|B_PSEUDO, B_EAX|B_BINARY|B_PSEUDO, B_ECX|B_PSEUDO, B_NONE }, { T("XADD"), D_CMD|D_SIZE01|D_LOCKABLE|D_ALLFLAGS, DX_JE|DX_JB, 2, 0x0000FEFF, 0x0000C00F, 0x00, B_INT|B_UPD, B_REG|B_CHG, B_NONE, B_NONE }, { T("XCHG"), D_MOV|D_LOCKABLE, 0, 1, 0x000000F8, 0x00000090, 0x00, B_ACC|B_CHG, B_REGCMD|B_CHG, B_NONE, B_NONE }, { T("XCHG"), D_MOV, 0, 1, 0x000000F8, 0x00000090, 0x00, B_REGCMD|B_CHG, B_ACC|B_CHG, B_NONE, B_NONE }, { T("XCHG"), D_MOV|D_SIZE01|D_LOCKABLE, 0, 1, 0x000000FE, 0x00000086, 0x00, B_INT|B_CHG, B_REG|B_CHG, B_NONE, B_NONE }, { T("XCHG"), D_MOV|D_SIZE01|D_LOCKABLE, 0, 1, 0x000000FE, 0x00000086, 0x00, B_REG|B_CHG, B_INT|B_CHG, B_NONE, B_NONE }, { T("XLAT"), D_CMD, 0, 1, 0x000000FF, 0x000000D7, 0x00, B_AL|B_CHG|B_PSEUDO, B_XLATMEM, B_NONE, B_NONE }, { T("XLATB"), D_CMD, 0, 1, 0x000000FF, 0x000000D7, 0x00, B_AL|B_UPD|B_PSEUDO, B_XLATMEM|B_PSEUDO, B_NONE, B_NONE }, { T("XOR"), D_CMD|D_SIZE01|D_ALLFLAGS, DX_JZ, 1, 0x000000FE, 0x00000034, 0x00, B_ACC|B_BINARY|B_UPD, B_CONST|B_BINARY, B_NONE, B_NONE }, { T("XOR"), D_CMD|D_SIZE01|D_LOCKABLE|D_ALLFLAGS, DX_JZ, 1, 0x000038FE, 0x00003080, 0x00, B_INT|B_BINARY|B_NOESP|B_SHOWSIZE|B_UPD, B_CONST|B_BINARY, B_NONE, B_NONE }, { T("XOR"), D_CMD|D_SIZE01|D_LOCKABLE|D_ALLFLAGS, DX_JZ, 1, 0x000038FE, 0x00003082, 0x00, B_INT|B_BINARY|B_NOESP|B_SHOWSIZE|B_UPD, B_SXTCONST|B_BINARY, B_NONE, B_NONE }, { T("XOR"), D_CMD|D_SIZE01|D_LOCKABLE|D_ALLFLAGS, DX_JZ, 1, 0x000000FE, 0x00000030, 0x00, B_INT|B_BINARY|B_UPD, B_REG|B_BINARY, B_NONE, B_NONE }, { T("XOR"), D_CMD|D_SIZE01|D_ALLFLAGS, DX_JZ, 1, 0x000000FE, 0x00000032, 0x00, B_REG|B_BINARY|B_UPD, B_INT|B_BINARY, B_NONE, B_NONE }, { T("CMPS"), D_CMD|D_SIZE01|D_LONGFORM|D_NOREP|D_ALLFLAGS|D_HLADIR, DX_JE|DX_JB, 1, 0x000000FE, 0x000000A6, 0x00, B_STRSRC|B_SHOWSIZE, B_STRDEST|B_SHOWSIZE, B_NONE, B_NONE }, { T("CMPSB"), D_CMD|D_NOREP|D_ALLFLAGS, DX_JE|DX_JB, 1, 0x000000FF, 0x000000A6, 0x00, B_STRSRC8|B_PSEUDO, B_STRDEST8|B_PSEUDO, B_NONE, B_NONE }, { T("CMPS*"), D_CMD|D_NOREP|D_ALLFLAGS|D_WILDCARD, DX_JE|DX_JB, 1, 0x000000FF, 0x000000A7, 0x00, B_STRSRC|B_PSEUDO, B_STRDEST|B_PSEUDO, B_NONE, B_NONE }, { T("CMPS"), D_STRING|D_SIZE01|D_LONGFORM|D_MUSTREPE|D_ALLFLAGS|D_HLADIR, 0, 1, 0x000000FE, 0x000000A6, 0x00, B_STRSRC|B_SHOWSIZE, B_STRDEST|B_SHOWSIZE, B_STRCNT|B_UPD|B_PSEUDO, B_NONE }, { T("CMPSB"), D_STRING|D_MUSTREPE|D_ALLFLAGS, 0, 1, 0x000000FF, 0x000000A6, 0x00, B_STRSRC8|B_PSEUDO, B_STRDEST8|B_PSEUDO, B_STRCNT|B_UPD|B_PSEUDO, B_NONE }, { T("CMPS*"), D_STRING|D_MUSTREPE|D_ALLFLAGS|D_WILDCARD, 0, 1, 0x000000FF, 0x000000A7, 0x00, B_STRSRC|B_PSEUDO, B_STRDEST|B_PSEUDO, B_STRCNT|B_UPD|B_PSEUDO, B_NONE }, { T("CMPS"), D_STRING|D_SIZE01|D_LONGFORM|D_MUSTREPNE|D_ALLFLAGS|D_HLADIR, 0, 1, 0x000000FE, 0x000000A6, 0x00, B_STRSRC|B_SHOWSIZE, B_STRDEST|B_SHOWSIZE, B_STRCNT|B_UPD|B_PSEUDO, B_NONE }, { T("CMPSB"), D_STRING|D_MUSTREPNE|D_ALLFLAGS, 0, 1, 0x000000FF, 0x000000A6, 0x00, B_STRSRC8|B_PSEUDO, B_STRDEST8|B_PSEUDO, B_STRCNT|B_UPD|B_PSEUDO, B_NONE }, { T("CMPS*"), D_STRING|D_MUSTREPNE|D_ALLFLAGS|D_WILDCARD, 0, 1, 0x000000FF, 0x000000A7, 0x00, B_STRSRC|B_PSEUDO, B_STRDEST|B_PSEUDO, B_STRCNT|B_UPD|B_PSEUDO, B_NONE }, { T("LODS"), D_CMD|D_SIZE01|D_LONGFORM|D_NOREP, 0, 1, 0x000000FE, 0x000000AC, 0x00, B_ACC|B_CHG|B_PSEUDO, B_STRSRC|B_SHOWSIZE, B_NONE, B_NONE }, { T("LODSB"), D_CMD|D_NOREP, 0, 1, 0x000000FF, 0x000000AC, 0x00, B_AL|B_CHG|B_PSEUDO, B_STRSRC8|B_PSEUDO, B_NONE, B_NONE }, { T("LODS*"), D_CMD|D_NOREP|D_WILDCARD, 0, 1, 0x000000FF, 0x000000AD, 0x00, B_ACC|B_CHG|B_PSEUDO, B_STRSRC|B_PSEUDO, B_NONE, B_NONE }, { T("LODS"), D_STRING|D_SIZE01|D_LONGFORM|D_MUSTREP|D_RARE, 0, 1, 0x000000FE, 0x000000AC, 0x00, B_ACC|B_CHG|B_PSEUDO, B_STRSRC|B_SHOWSIZE, B_STRCNT|B_UPD|B_PSEUDO, B_NONE }, { T("LODSB"), D_STRING|D_MUSTREP|D_RARE, 0, 1, 0x000000FF, 0x000000AC, 0x00, B_AL|B_CHG|B_PSEUDO, B_STRSRC8|B_PSEUDO, B_STRCNT|B_UPD|B_PSEUDO, B_NONE }, { T("LODS*"), D_STRING|D_MUSTREP|D_WILDCARD|D_RARE, 0, 1, 0x000000FF, 0x000000AD, 0x00, B_ACC|B_CHG|B_PSEUDO, B_STRSRC|B_PSEUDO, B_STRCNT|B_UPD|B_PSEUDO, B_NONE }, { T("LODS"), D_STRING|D_SIZE01|D_LONGFORM|D_MUSTREPNE|D_UNDOC, 0, 1, 0x000000FE, 0x000000AC, 0x00, B_ACC|B_CHG|B_PSEUDO, B_STRSRC|B_SHOWSIZE, B_STRCNT|B_UPD|B_PSEUDO, B_NONE }, { T("LODSB"), D_STRING|D_MUSTREPNE|D_UNDOC, 0, 1, 0x000000FF, 0x000000AC, 0x00, B_AL|B_CHG|B_PSEUDO, B_STRSRC8|B_PSEUDO, B_STRCNT|B_UPD|B_PSEUDO, B_NONE }, { T("LODS*"), D_STRING|D_MUSTREPNE|D_WILDCARD|D_UNDOC, 0, 1, 0x000000FF, 0x000000AD, 0x00, B_ACC|B_CHG|B_PSEUDO, B_STRSRC|B_PSEUDO, B_STRCNT|B_UPD|B_PSEUDO, B_NONE }, { T("MOVS"), D_CMD|D_SIZE01|D_LONGFORM|D_NOREP, 0, 1, 0x000000FE, 0x000000A4, 0x00, B_STRDEST|B_SHOWSIZE|B_CHG, B_STRSRC|B_SHOWSIZE, B_NONE, B_NONE }, { T("MOVSB"), D_CMD|D_NOREP, 0, 1, 0x000000FF, 0x000000A4, 0x00, B_STRDEST8|B_CHG|B_PSEUDO, B_STRSRC8|B_PSEUDO, B_NONE, B_NONE }, { T("MOVS*"), D_CMD|D_NOREP|D_WILDCARD, 0, 1, 0x000000FF, 0x000000A5, 0x00, B_STRDEST|B_CHG|B_PSEUDO, B_STRSRC|B_PSEUDO, B_NONE, B_NONE }, { T("MOVS"), D_STRING|D_SIZE01|D_LONGFORM|D_MUSTREP, 0, 1, 0x000000FE, 0x000000A4, 0x00, B_STRDEST|B_SHOWSIZE|B_CHG, B_STRSRC|B_SHOWSIZE, B_STRCNT|B_UPD|B_PSEUDO, B_NONE }, { T("MOVSB"), D_STRING|D_MUSTREP, 0, 1, 0x000000FF, 0x000000A4, 0x00, B_STRDEST8|B_CHG|B_PSEUDO, B_STRSRC8|B_PSEUDO, B_STRCNT|B_UPD|B_PSEUDO, B_NONE }, { T("MOVS*"), D_STRING|D_MUSTREP|D_WILDCARD, 0, 1, 0x000000FF, 0x000000A5, 0x00, B_STRDEST|B_CHG|B_PSEUDO, B_STRSRC|B_PSEUDO, B_STRCNT|B_UPD|B_PSEUDO, B_NONE }, { T("MOVS"), D_STRING|D_SIZE01|D_LONGFORM|D_MUSTREPNE|D_UNDOC, 0, 1, 0x000000FE, 0x000000A4, 0x00, B_STRDEST|B_SHOWSIZE|B_CHG, B_STRSRC|B_SHOWSIZE, B_STRCNT|B_UPD|B_PSEUDO, B_NONE }, { T("MOVSB"), D_STRING|D_MUSTREPNE|D_UNDOC, 0, 1, 0x000000FF, 0x000000A4, 0x00, B_STRDEST8|B_CHG|B_PSEUDO, B_STRSRC8|B_PSEUDO, B_STRCNT|B_UPD|B_PSEUDO, B_NONE }, { T("MOVS*"), D_STRING|D_MUSTREPNE|D_WILDCARD|D_UNDOC, 0, 1, 0x000000FF, 0x000000A5, 0x00, B_STRDEST|B_CHG|B_PSEUDO, B_STRSRC|B_PSEUDO, B_STRCNT|B_UPD|B_PSEUDO, B_NONE }, { T("SCAS"), D_CMD|D_SIZE01|D_LONGFORM|D_NOREP|D_ALLFLAGS, DX_JE|DX_JB, 1, 0x000000FE, 0x000000AE, 0x00, B_STRDEST|B_SHOWSIZE, B_ACC|B_PSEUDO, B_NONE, B_NONE }, { T("SCASB"), D_CMD|D_NOREP|D_ALLFLAGS, DX_JE|DX_JB, 1, 0x000000FF, 0x000000AE, 0x00, B_STRDEST8|B_PSEUDO, B_AL|B_PSEUDO, B_NONE, B_NONE }, { T("SCAS*"), D_CMD|D_NOREP|D_ALLFLAGS|D_WILDCARD, DX_JE|DX_JB, 1, 0x000000FF, 0x000000AF, 0x00, B_STRDEST|B_PSEUDO, B_ACC|B_PSEUDO, B_NONE, B_NONE }, { T("SCAS"), D_STRING|D_SIZE01|D_LONGFORM|D_MUSTREPE|D_ALLFLAGS, 0, 1, 0x000000FE, 0x000000AE, 0x00, B_STRDEST|B_SHOWSIZE, B_ACC|B_PSEUDO, B_STRCNT|B_UPD|B_PSEUDO, B_NONE }, { T("SCASB"), D_STRING|D_MUSTREPE|D_ALLFLAGS, 0, 1, 0x000000FF, 0x000000AE, 0x00, B_STRDEST8|B_PSEUDO, B_AL|B_PSEUDO, B_STRCNT|B_UPD|B_PSEUDO, B_NONE }, { T("SCAS*"), D_STRING|D_MUSTREPE|D_ALLFLAGS|D_WILDCARD, 0, 1, 0x000000FF, 0x000000AF, 0x00, B_STRDEST|B_PSEUDO, B_ACC|B_PSEUDO, B_STRCNT|B_UPD|B_PSEUDO, B_NONE }, { T("SCAS"), D_STRING|D_SIZE01|D_LONGFORM|D_MUSTREPNE|D_ALLFLAGS, 0, 1, 0x000000FE, 0x000000AE, 0x00, B_STRDEST|B_SHOWSIZE, B_ACC|B_PSEUDO, B_STRCNT|B_UPD|B_PSEUDO, B_NONE }, { T("SCASB"), D_STRING|D_MUSTREPNE|D_ALLFLAGS, 0, 1, 0x000000FF, 0x000000AE, 0x00, B_STRDEST8|B_PSEUDO, B_AL|B_PSEUDO, B_STRCNT|B_UPD|B_PSEUDO, B_NONE }, { T("SCAS*"), D_STRING|D_MUSTREPNE|D_ALLFLAGS|D_WILDCARD, 0, 1, 0x000000FF, 0x000000AF, 0x00, B_STRDEST|B_PSEUDO, B_ACC|B_PSEUDO, B_STRCNT|B_UPD|B_PSEUDO, B_NONE }, { T("STOS"), D_CMD|D_SIZE01|D_LONGFORM|D_NOREP, 0, 1, 0x000000FE, 0x000000AA, 0x00, B_STRDEST|B_SHOWSIZE|B_CHG, B_ACC|B_PSEUDO, B_NONE, B_NONE }, { T("STOSB"), D_CMD|D_NOREP, 0, 1, 0x000000FF, 0x000000AA, 0x00, B_STRDEST8|B_CHG|B_PSEUDO, B_AL|B_PSEUDO, B_NONE, B_NONE }, { T("STOS*"), D_CMD|D_NOREP|D_WILDCARD, 0, 1, 0x000000FF, 0x000000AB, 0x00, B_STRDEST|B_CHG|B_PSEUDO, B_ACC|B_PSEUDO, B_NONE, B_NONE }, { T("STOS"), D_STRING|D_SIZE01|D_LONGFORM|D_MUSTREP, 0, 1, 0x000000FE, 0x000000AA, 0x00, B_STRDEST|B_SHOWSIZE|B_CHG, B_ACC|B_PSEUDO, B_STRCNT|B_UPD|B_PSEUDO, B_NONE }, { T("STOSB"), D_STRING|D_MUSTREP, 0, 1, 0x000000FF, 0x000000AA, 0x00, B_STRDEST8|B_CHG|B_PSEUDO, B_AL|B_PSEUDO, B_STRCNT|B_UPD|B_PSEUDO, B_NONE }, { T("STOS*"), D_STRING|D_MUSTREP|D_WILDCARD, 0, 1, 0x000000FF, 0x000000AB, 0x00, B_STRDEST|B_CHG|B_PSEUDO, B_ACC|B_PSEUDO, B_STRCNT|B_UPD|B_PSEUDO, B_NONE }, { T("STOS"), D_STRING|D_SIZE01|D_LONGFORM|D_MUSTREPNE|D_UNDOC, 0, 1, 0x000000FE, 0x000000AA, 0x00, B_STRDEST|B_SHOWSIZE|B_CHG, B_ACC|B_PSEUDO, B_STRCNT|B_UPD|B_PSEUDO, B_NONE }, { T("STOSB"), D_STRING|D_MUSTREPNE|D_UNDOC, 0, 1, 0x000000FF, 0x000000AA, 0x00, B_STRDEST8|B_CHG|B_PSEUDO, B_AL|B_PSEUDO, B_STRCNT|B_UPD|B_PSEUDO, B_NONE }, { T("STOS*"), D_STRING|D_MUSTREPNE|D_WILDCARD|D_UNDOC, 0, 1, 0x000000FF, 0x000000AB, 0x00, B_STRDEST|B_CHG|B_PSEUDO, B_ACC|B_PSEUDO, B_STRCNT|B_UPD|B_PSEUDO, B_NONE }, { T("INS"), D_IO|D_SIZE01|D_LONGFORM|D_NOREP|D_RARE, 0, 1, 0x000000FE, 0x0000006C, 0x00, B_STRDEST|B_SHOWSIZE|B_CHG, B_DXPORT|B_PORT, B_NONE, B_NONE }, { T("INSB"), D_IO|D_NOREP|D_RARE, 0, 1, 0x000000FF, 0x0000006C, 0x00, B_STRDEST8|B_CHG|B_PSEUDO, B_DXPORT|B_PORT|B_PSEUDO, B_NONE, B_NONE }, { T("INS*"), D_IO|D_NOREP|D_WILDCARD|D_RARE, 0, 1, 0x000000FF, 0x0000006D, 0x00, B_STRDEST|B_CHG|B_PSEUDO, B_DXPORT|B_PORT|B_PSEUDO, B_NONE, B_NONE }, { T("INS"), D_IO|D_SIZE01|D_LONGFORM|D_MUSTREP|D_RARE, 0, 1, 0x000000FE, 0x0000006C, 0x00, B_STRDEST|B_SHOWSIZE|B_CHG, B_DXPORT|B_PORT, B_STRCNT|B_UPD|B_PSEUDO, B_NONE }, { T("INSB"), D_IO|D_MUSTREP|D_RARE, 0, 1, 0x000000FF, 0x0000006C, 0x00, B_STRDEST8|B_CHG|B_PSEUDO, B_DXPORT|B_PORT|B_PSEUDO, B_STRCNT|B_UPD|B_PSEUDO, B_NONE }, { T("INS*"), D_IO|D_MUSTREP|D_WILDCARD|D_RARE, 0, 1, 0x000000FF, 0x0000006D, 0x00, B_STRDEST|B_CHG|B_PSEUDO, B_DXPORT|B_PORT|B_PSEUDO, B_STRCNT|B_UPD|B_PSEUDO, B_NONE }, { T("INS"), D_IO|D_SIZE01|D_LONGFORM|D_MUSTREPNE|D_UNDOC, 0, 1, 0x000000FE, 0x0000006C, 0x00, B_STRDEST|B_SHOWSIZE|B_CHG, B_DXPORT|B_PORT, B_STRCNT|B_UPD|B_PSEUDO, B_NONE }, { T("INSB"), D_IO|D_MUSTREPNE|D_UNDOC, 0, 1, 0x000000FF, 0x0000006C, 0x00, B_STRDEST8|B_CHG|B_PSEUDO, B_DXPORT|B_PORT|B_PSEUDO, B_STRCNT|B_UPD|B_PSEUDO, B_NONE }, { T("INS*"), D_IO|D_MUSTREPNE|D_WILDCARD|D_UNDOC, 0, 1, 0x000000FF, 0x0000006D, 0x00, B_STRDEST|B_CHG|B_PSEUDO, B_DXPORT|B_PORT|B_PSEUDO, B_STRCNT|B_UPD|B_PSEUDO, B_NONE }, { T("OUTS"), D_IO|D_SIZE01|D_LONGFORM|D_NOREP|D_RARE, 0, 1, 0x000000FE, 0x0000006E, 0x00, B_DXPORT|B_PORT, B_STRSRC|B_SHOWSIZE, B_NONE, B_NONE }, { T("OUTSB"), D_IO|D_NOREP|D_RARE, 0, 1, 0x000000FF, 0x0000006E, 0x00, B_DXPORT|B_PORT|B_PSEUDO, B_STRSRC8|B_PSEUDO, B_NONE, B_NONE }, { T("OUTS*"), D_IO|D_NOREP|D_WILDCARD|D_RARE, 0, 1, 0x000000FF, 0x0000006F, 0x00, B_DXPORT|B_PORT|B_PSEUDO, B_STRSRC|B_PSEUDO, B_NONE, B_NONE }, { T("OUTS"), D_IO|D_SIZE01|D_LONGFORM|D_MUSTREP|D_RARE, 0, 1, 0x000000FE, 0x0000006E, 0x00, B_DXPORT|B_PORT, B_STRSRC|B_SHOWSIZE, B_STRCNT|B_UPD|B_PSEUDO, B_NONE }, { T("OUTSB"), D_IO|D_MUSTREP|D_RARE, 0, 1, 0x000000FF, 0x0000006E, 0x00, B_DXPORT|B_PORT|B_PSEUDO, B_STRSRC8|B_PSEUDO, B_STRCNT|B_UPD|B_PSEUDO, B_NONE }, { T("OUTS*"), D_IO|D_MUSTREP|D_WILDCARD|D_RARE, 0, 1, 0x000000FF, 0x0000006F, 0x00, B_DXPORT|B_PORT|B_PSEUDO, B_STRSRC|B_PSEUDO, B_STRCNT|B_UPD|B_PSEUDO, B_NONE }, { T("OUTS"), D_IO|D_SIZE01|D_LONGFORM|D_MUSTREPNE|D_UNDOC, 0, 1, 0x000000FE, 0x0000006E, 0x00, B_DXPORT|B_PORT, B_STRSRC|B_SHOWSIZE, B_STRCNT|B_UPD|B_PSEUDO, B_NONE }, { T("OUTSB"), D_IO|D_MUSTREPNE|D_UNDOC, 0, 1, 0x000000FF, 0x0000006E, 0x00, B_DXPORT|B_PORT|B_PSEUDO, B_STRSRC8|B_PSEUDO, B_STRCNT|B_UPD|B_PSEUDO, B_NONE }, { T("OUTS*"), D_IO|D_MUSTREPNE|D_WILDCARD|D_UNDOC, 0, 1, 0x000000FF, 0x0000006F, 0x00, B_DXPORT|B_PORT|B_PSEUDO, B_STRSRC|B_PSEUDO, B_STRCNT|B_UPD|B_PSEUDO, B_NONE }, { T("MOVBE"), D_CMD|D_NOREP, 0, 3, 0x00FFFFFF, 0x00F0380F, 0x00, B_REG|B_CHG, B_INT|B_MEMONLY, B_NONE, B_NONE }, { T("MOVBE"), D_CMD|D_NOREP, 0, 3, 0x00FFFFFF, 0x00F1380F, 0x00, B_INT|B_MEMONLY|B_CHG, B_REG, B_NONE, B_NONE }, { T("XGETBV"), D_SYS|D_MUSTNONE|D_RARE, 0, 3, 0x00FFFFFF, 0x00D0010F, 0x00, B_EAX|B_CHG|B_PSEUDO, B_EDX|B_CHG|B_PSEUDO, B_ECX|B_PSEUDO, B_NONE }, { T("XSETBV"), D_PRIVILEGED|D_MUSTNONE|D_RARE, 0, 3, 0x00FFFFFF, 0x00D1010F, 0x00, B_EAX|B_PSEUDO, B_EDX|B_PSEUDO, B_ECX|B_PSEUDO, B_NONE }, { T("XRSTOR"), D_SYS|D_MUSTNONE|D_MEMORY|D_RARE, 0, 2, 0x0038FFFF, 0x0028AE0F, 0x00, B_ANYMEM|B_MEMONLY, B_EAX|B_PSEUDO, B_EDX|B_PSEUDO, B_NONE }, { T("XSAVE"), D_SYS|D_MUSTNONE|D_MEMORY|D_RARE, 0, 2, 0x0038FFFF, 0x0020AE0F, 0x00, B_ANYMEM|B_MEMONLY|B_CHG, B_EAX|B_PSEUDO, B_EDX|B_PSEUDO, B_NONE }, { T("F2XM1"), D_FPU, 0, 2, 0x0000FFFF, 0x0000F0D9, 0x00, B_ST0|B_CHG|B_PSEUDO, B_NONE, B_NONE, B_NONE }, { T("FABS"), D_FPU, 0, 2, 0x0000FFFF, 0x0000E1D9, 0x00, B_ST0|B_UPD|B_PSEUDO, B_NONE, B_NONE, B_NONE }, { T("FCHS"), D_FPU, 0, 2, 0x0000FFFF, 0x0000E0D9, 0x00, B_ST0|B_UPD|B_PSEUDO, B_NONE, B_NONE, B_NONE }, { T("FCLEX"), D_FPU, 0, 2, 0x0000FFFF, 0x0000E2DB, 0x00, B_FST|B_UPD|B_PSEUDO, B_NONE, B_NONE, B_NONE }, { T("FCOMPP"), D_FPU|D_FPUPOP2, 0, 2, 0x0000FFFF, 0x0000D9DE, 0x00, B_ST0|B_PSEUDO, B_ST1|B_PSEUDO, B_NONE, B_NONE }, { T("FCOS"), D_FPU, 0, 2, 0x0000FFFF, 0x0000FFD9, 0x00, B_ST0|B_UPD|B_PSEUDO, B_NONE, B_NONE, B_NONE }, { T("FDECSTP"), D_FPU|D_FPUPUSH, 0, 2, 0x0000FFFF, 0x0000F6D9, 0x00, B_NONE, B_NONE, B_NONE, B_NONE }, { T("FINCSTP"), D_FPU|D_FPUPOP, 0, 2, 0x0000FFFF, 0x0000F7D9, 0x00, B_NONE, B_NONE, B_NONE, B_NONE }, { T("FINIT"), D_FPU, 0, 2, 0x0000FFFF, 0x0000E3DB, 0x00, B_NONE, B_NONE, B_NONE, B_NONE }, { T("FLD1"), D_FPU|D_FPUPUSH, 0, 2, 0x0000FFFF, 0x0000E8D9, 0x00, B_NONE, B_NONE, B_NONE, B_NONE }, { T("FLDL2T"), D_FPU|D_FPUPUSH, 0, 2, 0x0000FFFF, 0x0000E9D9, 0x00, B_NONE, B_NONE, B_NONE, B_NONE }, { T("FLDL2E"), D_FPU|D_FPUPUSH, 0, 2, 0x0000FFFF, 0x0000EAD9, 0x00, B_NONE, B_NONE, B_NONE, B_NONE }, { T("FLDPI"), D_FPU|D_FPUPUSH, 0, 2, 0x0000FFFF, 0x0000EBD9, 0x00, B_NONE, B_NONE, B_NONE, B_NONE }, { T("FLDLG2"), D_FPU|D_FPUPUSH, 0, 2, 0x0000FFFF, 0x0000ECD9, 0x00, B_NONE, B_NONE, B_NONE, B_NONE }, { T("FLDLN2"), D_FPU|D_FPUPUSH, 0, 2, 0x0000FFFF, 0x0000EDD9, 0x00, B_NONE, B_NONE, B_NONE, B_NONE }, { T("FLDZ"), D_FPU|D_FPUPUSH, 0, 2, 0x0000FFFF, 0x0000EED9, 0x00, B_NONE, B_NONE, B_NONE, B_NONE }, { T("FNOP"), D_FPU, 0, 2, 0x0000FFFF, 0x0000D0D9, 0x00, B_NONE, B_NONE, B_NONE, B_NONE }, { T("FPATAN"), D_FPU|D_FPUPOP, 0, 2, 0x0000FFFF, 0x0000F3D9, 0x00, B_ST1|B_UPD|B_PSEUDO, B_ST0|B_PSEUDO, B_NONE, B_NONE }, { T("FPREM"), D_FPU, 0, 2, 0x0000FFFF, 0x0000F8D9, 0x00, B_ST0|B_UPD|B_PSEUDO, B_ST1|B_PSEUDO, B_NONE, B_NONE }, { T("FPREM1"), D_FPU, 0, 2, 0x0000FFFF, 0x0000F5D9, 0x00, B_ST0|B_UPD|B_PSEUDO, B_ST1|B_PSEUDO, B_NONE, B_NONE }, { T("FPTAN"), D_FPU|D_FPUPUSH, 0, 2, 0x0000FFFF, 0x0000F2D9, 0x00, B_ST0|B_UPD|B_PSEUDO, B_NONE, B_NONE, B_NONE }, { T("FRNDINT"), D_FPU, 0, 2, 0x0000FFFF, 0x0000FCD9, 0x00, B_ST0|B_UPD|B_PSEUDO, B_NONE, B_NONE, B_NONE }, { T("FSCALE"), D_FPU, 0, 2, 0x0000FFFF, 0x0000FDD9, 0x00, B_ST0|B_UPD|B_PSEUDO, B_ST1|B_PSEUDO, B_NONE, B_NONE }, { T("FSIN"), D_FPU, 0, 2, 0x0000FFFF, 0x0000FED9, 0x00, B_ST0|B_UPD|B_PSEUDO, B_NONE, B_NONE, B_NONE }, { T("FSINCOS"), D_FPU|D_FPUPUSH, 0, 2, 0x0000FFFF, 0x0000FBD9, 0x00, B_ST0|B_UPD|B_PSEUDO, B_NONE, B_NONE, B_NONE }, { T("FSQRT"), D_FPU, 0, 2, 0x0000FFFF, 0x0000FAD9, 0x00, B_ST0|B_UPD|B_PSEUDO, B_NONE, B_NONE, B_NONE }, { T("FSTSW"), D_FPU, 0, 2, 0x0000FFFF, 0x0000E0DF, 0x00, B_AX|B_CHG, B_FST|B_PSEUDO, B_NONE, B_NONE }, { T("FTST"), D_FPU, 0, 2, 0x0000FFFF, 0x0000E4D9, 0x00, B_ST0|B_PSEUDO, B_NONE, B_NONE, B_NONE }, { T("FUCOMPP"), D_FPU|D_FPUPOP2, 0, 2, 0x0000FFFF, 0x0000E9DA, 0x00, B_ST0|B_PSEUDO, B_ST1|B_PSEUDO, B_NONE, B_NONE }, { T("FXAM"), D_FPU, 0, 2, 0x0000FFFF, 0x0000E5D9, 0x00, B_ST0|B_PSEUDO, B_NONE, B_NONE, B_NONE }, { T("FXTRACT"), D_FPU|D_FPUPUSH, 0, 2, 0x0000FFFF, 0x0000F4D9, 0x00, B_ST0|B_UPD|B_PSEUDO, B_NONE, B_NONE, B_NONE }, { T("FYL2X"), D_FPU|D_FPUPOP, 0, 2, 0x0000FFFF, 0x0000F1D9, 0x00, B_ST1|B_UPD|B_PSEUDO, B_ST0|B_PSEUDO, B_NONE, B_NONE }, { T("FYL2XP1"), D_FPU|D_FPUPOP, 0, 2, 0x0000FFFF, 0x0000F9D9, 0x00, B_ST1|B_UPD|B_PSEUDO, B_ST0|B_PSEUDO, B_NONE, B_NONE }, { T("FENI"), D_FPU|D_RARE, 0, 2, 0x0000FFFF, 0x0000E0DB, 0x00, B_NONE, B_NONE, B_NONE, B_NONE }, { T("FDISI"), D_FPU|D_RARE, 0, 2, 0x0000FFFF, 0x0000E1DB, 0x00, B_NONE, B_NONE, B_NONE, B_NONE }, { T("FADD"), D_FPU, 0, 2, 0x0000F8FF, 0x0000C0D8, 0x00, B_ST0|B_UPD, B_ST, B_NONE, B_NONE }, { T("FADD"), D_FPU, 0, 2, 0x0000F8FF, 0x0000C0DC, 0x00, B_ST|B_UPD, B_ST0, B_NONE, B_NONE }, { T("FADDP"), D_FPU|D_FPUPOP, 0, 2, 0x0000F8FF, 0x0000C0DE, 0x00, B_ST|B_UPD, B_ST0, B_NONE, B_NONE }, { T("FADDP"), D_FPU|D_FPUPOP, 0, 2, 0x0000FFFF, 0x0000C1DE, 0x00, B_ST1|B_UPD|B_PSEUDO, B_ST0|B_PSEUDO, B_NONE, B_NONE }, { T("FCMOVB"), D_FPU|D_COND, 0, 2, 0x0000F8FF, 0x0000C0DA, 0x00, B_ST0|B_CHG, B_ST, B_NONE, B_NONE }, { T("FCMOVE"), D_FPU|D_COND, 0, 2, 0x0000F8FF, 0x0000C8DA, 0x00, B_ST0|B_CHG, B_ST, B_NONE, B_NONE }, { T("FCMOVBE"), D_FPU|D_COND, 0, 2, 0x0000F8FF, 0x0000D0DA, 0x00, B_ST0|B_CHG, B_ST, B_NONE, B_NONE }, { T("FCMOVU"), D_FPU|D_COND, 0, 2, 0x0000F8FF, 0x0000D8DA, 0x00, B_ST0|B_CHG, B_ST, B_NONE, B_NONE }, { T("FCMOVNB"), D_FPU|D_COND, 0, 2, 0x0000F8FF, 0x0000C0DB, 0x00, B_ST0|B_CHG, B_ST, B_NONE, B_NONE }, { T("FCMOVNE"), D_FPU|D_COND, 0, 2, 0x0000F8FF, 0x0000C8DB, 0x00, B_ST0|B_CHG, B_ST, B_NONE, B_NONE }, { T("FCMOVNBE"), D_FPU|D_COND, 0, 2, 0x0000F8FF, 0x0000D0DB, 0x00, B_ST0|B_CHG, B_ST, B_NONE, B_NONE }, { T("FCMOVNU"), D_FPU|D_COND, 0, 2, 0x0000F8FF, 0x0000D8DB, 0x00, B_ST0|B_CHG, B_ST, B_NONE, B_NONE }, { T("FCOM"), D_FPU, 0, 2, 0x0000F8FF, 0x0000D0D8, 0x00, B_ST0|B_PSEUDO, B_ST, B_NONE, B_NONE }, { T("FCOM"), D_FPU, 0, 2, 0x0000FFFF, 0x0000D1D8, 0x00, B_ST0|B_PSEUDO, B_ST1|B_PSEUDO, B_NONE, B_NONE }, { T("FCOMP"), D_FPU|D_FPUPOP, 0, 2, 0x0000F8FF, 0x0000D8D8, 0x00, B_ST0|B_PSEUDO, B_ST, B_NONE, B_NONE }, { T("FCOMP"), D_FPU|D_FPUPOP, 0, 2, 0x0000FFFF, 0x0000D9D8, 0x00, B_ST0|B_PSEUDO, B_ST1|B_PSEUDO, B_NONE, B_NONE }, { T("FCOMI"), D_FPU|D_FLAGSZPC, 0, 2, 0x0000F8FF, 0x0000F0DB, 0x00, B_ST0, B_ST, B_NONE, B_NONE }, { T("FCOMIP"), D_FPU|D_FLAGSZPC|D_FPUPOP, 0, 2, 0x0000F8FF, 0x0000F0DF, 0x00, B_ST0, B_ST, B_NONE, B_NONE }, { T("FUCOMI"), D_FPU|D_FLAGSZPC, 0, 2, 0x0000F8FF, 0x0000E8DB, 0x00, B_ST0, B_ST, B_NONE, B_NONE }, { T("FUCOMIP"), D_FPU|D_FLAGSZPC|D_FPUPOP, 0, 2, 0x0000F8FF, 0x0000E8DF, 0x00, B_ST0, B_ST, B_NONE, B_NONE }, { T("FDIV"), D_FPU, 0, 2, 0x0000F8FF, 0x0000F0D8, 0x00, B_ST0|B_UPD, B_ST, B_NONE, B_NONE }, { T("FDIV"), D_FPU, 0, 2, 0x0000F8FF, 0x0000F8DC, 0x00, B_ST|B_UPD, B_ST0, B_NONE, B_NONE }, { T("FDIVP"), D_FPU|D_FPUPOP, 0, 2, 0x0000F8FF, 0x0000F8DE, 0x00, B_ST|B_UPD, B_ST0, B_NONE, B_NONE }, { T("FDIVP"), D_FPU|D_FPUPOP, 0, 2, 0x0000FFFF, 0x0000F9DE, 0x00, B_ST1|B_UPD|B_PSEUDO, B_ST0|B_PSEUDO, B_NONE, B_NONE }, { T("FDIVR"), D_FPU, 0, 2, 0x0000F8FF, 0x0000F8D8, 0x00, B_ST0|B_UPD, B_ST, B_NONE, B_NONE }, { T("FDIVR"), D_FPU, 0, 2, 0x0000F8FF, 0x0000F0DC, 0x00, B_ST|B_UPD, B_ST0, B_NONE, B_NONE }, { T("FDIVRP"), D_FPU|D_FPUPOP, 0, 2, 0x0000F8FF, 0x0000F0DE, 0x00, B_ST|B_UPD, B_ST0, B_NONE, B_NONE }, { T("FDIVRP"), D_FPU|D_FPUPOP, 0, 2, 0x0000FFFF, 0x0000F1DE, 0x00, B_ST1|B_UPD|B_PSEUDO, B_ST0|B_PSEUDO, B_NONE, B_NONE }, { T("FFREE"), D_FPU, 0, 2, 0x0000F8FF, 0x0000C0DD, 0x00, B_ST, B_NONE, B_NONE, B_NONE }, { T("FFREEP"), D_FPU|D_FPUPOP|D_UNDOC, 0, 2, 0x0000F8FF, 0x0000C0DF, 0x00, B_ST, B_NONE, B_NONE, B_NONE }, { T("FLD"), D_FPU|D_FPUPUSH, 0, 2, 0x0000F8FF, 0x0000C0D9, 0x00, B_ST, B_NONE, B_NONE, B_NONE }, { T("FMUL"), D_FPU, 0, 2, 0x0000F8FF, 0x0000C8D8, 0x00, B_ST0|B_UPD, B_ST, B_NONE, B_NONE }, { T("FMUL"), D_FPU, 0, 2, 0x0000F8FF, 0x0000C8DC, 0x00, B_ST|B_UPD, B_ST0, B_NONE, B_NONE }, { T("FMULP"), D_FPU|D_FPUPOP, 0, 2, 0x0000F8FF, 0x0000C8DE, 0x00, B_ST|B_UPD, B_ST0, B_NONE, B_NONE }, { T("FMULP"), D_FPU|D_FPUPOP, 0, 2, 0x0000FFFF, 0x0000C9DE, 0x00, B_ST1|B_UPD|B_PSEUDO, B_ST0|B_PSEUDO, B_NONE, B_NONE }, { T("FST"), D_FPU, 0, 2, 0x0000F8FF, 0x0000D0DD, 0x00, B_ST|B_CHG, B_ST0|B_PSEUDO, B_NONE, B_NONE }, { T("FSTP"), D_FPU|D_FPUPOP, 0, 2, 0x0000F8FF, 0x0000D8DD, 0x00, B_ST|B_CHG, B_ST0|B_PSEUDO, B_NONE, B_NONE }, { T("FSUB"), D_FPU, 0, 2, 0x0000F8FF, 0x0000E0D8, 0x00, B_ST0|B_UPD, B_ST, B_NONE, B_NONE }, { T("FSUB"), D_FPU, 0, 2, 0x0000F8FF, 0x0000E8DC, 0x00, B_ST|B_UPD, B_ST0, B_NONE, B_NONE }, { T("FSUBP"), D_FPU|D_FPUPOP, 0, 2, 0x0000F8FF, 0x0000E8DE, 0x00, B_ST|B_UPD, B_ST0, B_NONE, B_NONE }, { T("FSUBP"), D_FPU|D_FPUPOP, 0, 2, 0x0000FFFF, 0x0000E9DE, 0x00, B_ST1|B_UPD|B_PSEUDO, B_ST0|B_PSEUDO, B_NONE, B_NONE }, { T("FSUBR"), D_FPU, 0, 2, 0x0000F8FF, 0x0000E8D8, 0x00, B_ST0|B_UPD, B_ST, B_NONE, B_NONE }, { T("FSUBR"), D_FPU, 0, 2, 0x0000F8FF, 0x0000E0DC, 0x00, B_ST|B_UPD, B_ST0, B_NONE, B_NONE }, { T("FSUBRP"), D_FPU|D_FPUPOP, 0, 2, 0x0000F8FF, 0x0000E0DE, 0x00, B_ST|B_UPD, B_ST0, B_NONE, B_NONE }, { T("FSUBRP"), D_FPU|D_FPUPOP, 0, 2, 0x0000FFFF, 0x0000E1DE, 0x00, B_ST1|B_UPD|B_PSEUDO, B_ST0|B_PSEUDO, B_NONE, B_NONE }, { T("FUCOM"), D_FPU, 0, 2, 0x0000F8FF, 0x0000E0DD, 0x00, B_ST0|B_PSEUDO, B_ST, B_NONE, B_NONE }, { T("FUCOM"), D_FPU, 0, 2, 0x0000FFFF, 0x0000E1DD, 0x00, B_ST0|B_PSEUDO, B_ST1|B_PSEUDO, B_NONE, B_NONE }, { T("FUCOMP"), D_FPU|D_FPUPOP, 0, 2, 0x0000F8FF, 0x0000E8DD, 0x00, B_ST0|B_PSEUDO, B_ST, B_NONE, B_NONE }, { T("FUCOMP"), D_FPU|D_FPUPOP, 0, 2, 0x0000FFFF, 0x0000E9DD, 0x00, B_ST0|B_PSEUDO, B_ST1|B_PSEUDO, B_NONE, B_NONE }, { T("FXCH"), D_FPU, 0, 2, 0x0000F8FF, 0x0000C8D9, 0x00, B_ST0|B_CHG|B_PSEUDO, B_ST|B_CHG, B_NONE, B_NONE }, { T("FXCH"), D_FPU, 0, 2, 0x0000FFFF, 0x0000C9D9, 0x00, B_ST0|B_CHG|B_PSEUDO, B_ST1|B_CHG|B_PSEUDO, B_NONE, B_NONE }, { T("FADD"), D_FPU|D_MEMORY, 0, 1, 0x000038FF, 0x000000D8, 0x00, B_ST0|B_UPD|B_PSEUDO, B_FLOAT32|B_MEMORY|B_SHOWSIZE, B_NONE, B_NONE }, { T("FADD"), D_FPU|D_MEMORY, 0, 1, 0x000038FF, 0x000000DC, 0x00, B_ST0|B_UPD|B_PSEUDO, B_FLOAT64|B_MEMORY|B_SHOWSIZE, B_NONE, B_NONE }, { T("FIADD"), D_FPU|D_MEMORY, 0, 1, 0x000038FF, 0x000000DA, 0x00, B_ST0|B_UPD|B_PSEUDO, B_INT32|B_SIGNED|B_MEMORY|B_SHOWSIZE, B_NONE, B_NONE }, { T("FIADD"), D_FPU|D_MEMORY, 0, 1, 0x000038FF, 0x000000DE, 0x00, B_ST0|B_UPD|B_PSEUDO, B_INT16|B_SIGNED|B_MEMORY|B_SHOWSIZE, B_NONE, B_NONE }, { T("FBLD"), D_FPU|D_MEMORY|D_FPUPUSH|D_RARE, 0, 1, 0x000038FF, 0x000020DF, 0x00, B_BCD|B_MEMORY, B_NONE, B_NONE, B_NONE }, { T("FBSTP"), D_FPU|D_MEMORY|D_FPUPOP|D_RARE, 0, 1, 0x000038FF, 0x000030DF, 0x00, B_BCD|B_MEMORY|B_CHG, B_ST0|B_PSEUDO, B_NONE, B_NONE }, { T("FCOM"), D_FPU|D_MEMORY, 0, 1, 0x000038FF, 0x000010D8, 0x00, B_ST0|B_PSEUDO, B_FLOAT32|B_MEMORY|B_SHOWSIZE, B_NONE, B_NONE }, { T("FCOM"), D_FPU|D_MEMORY, 0, 1, 0x000038FF, 0x000010DC, 0x00, B_ST0|B_PSEUDO, B_FLOAT64|B_MEMORY|B_SHOWSIZE, B_NONE, B_NONE }, { T("FCOMP"), D_FPU|D_MEMORY|D_FPUPOP, 0, 1, 0x000038FF, 0x000018D8, 0x00, B_ST0|B_PSEUDO, B_FLOAT32|B_MEMORY|B_SHOWSIZE, B_NONE, B_NONE }, { T("FCOMP"), D_FPU|D_MEMORY|D_FPUPOP, 0, 1, 0x000038FF, 0x000018DC, 0x00, B_ST0|B_PSEUDO, B_FLOAT64|B_MEMORY|B_SHOWSIZE, B_NONE, B_NONE }, { T("FDIV"), D_FPU|D_MEMORY, 0, 1, 0x000038FF, 0x000030D8, 0x00, B_ST0|B_UPD|B_PSEUDO, B_FLOAT32|B_MEMORY|B_SHOWSIZE, B_NONE, B_NONE }, { T("FDIV"), D_FPU|D_MEMORY, 0, 1, 0x000038FF, 0x000030DC, 0x00, B_ST0|B_UPD|B_PSEUDO, B_FLOAT64|B_MEMORY|B_SHOWSIZE, B_NONE, B_NONE }, { T("FIDIV"), D_FPU|D_MEMORY, 0, 1, 0x000038FF, 0x000030DA, 0x00, B_ST0|B_UPD|B_PSEUDO, B_INT32|B_SIGNED|B_MEMORY|B_SHOWSIZE, B_NONE, B_NONE }, { T("FIDIV"), D_FPU|D_MEMORY, 0, 1, 0x000038FF, 0x000030DE, 0x00, B_ST0|B_UPD|B_PSEUDO, B_INT16|B_SIGNED|B_MEMORY|B_SHOWSIZE, B_NONE, B_NONE }, { T("FDIVR"), D_FPU|D_MEMORY, 0, 1, 0x000038FF, 0x000038D8, 0x00, B_ST0|B_UPD|B_PSEUDO, B_FLOAT32|B_MEMORY|B_SHOWSIZE, B_NONE, B_NONE }, { T("FDIVR"), D_FPU|D_MEMORY, 0, 1, 0x000038FF, 0x000038DC, 0x00, B_ST0|B_UPD|B_PSEUDO, B_FLOAT64|B_MEMORY|B_SHOWSIZE, B_NONE, B_NONE }, { T("FIDIVR"), D_FPU|D_MEMORY, 0, 1, 0x000038FF, 0x000038DA, 0x00, B_ST0|B_UPD|B_PSEUDO, B_INT32|B_SIGNED|B_MEMORY|B_SHOWSIZE, B_NONE, B_NONE }, { T("FIDIVR"), D_FPU|D_MEMORY, 0, 1, 0x000038FF, 0x000038DE, 0x00, B_ST0|B_UPD|B_PSEUDO, B_INT16|B_SIGNED|B_MEMORY|B_SHOWSIZE, B_NONE, B_NONE }, { T("FICOM"), D_FPU|D_MEMORY, 0, 1, 0x000038FF, 0x000010DE, 0x00, B_ST0|B_PSEUDO, B_INT16|B_SIGNED|B_MEMORY|B_SHOWSIZE, B_NONE, B_NONE }, { T("FICOM"), D_FPU|D_MEMORY, 0, 1, 0x000038FF, 0x000010DA, 0x00, B_ST0|B_PSEUDO, B_INT32|B_SIGNED|B_MEMORY|B_SHOWSIZE, B_NONE, B_NONE }, { T("FICOMP"), D_FPU|D_MEMORY|D_FPUPOP, 0, 1, 0x000038FF, 0x000018DE, 0x00, B_ST0|B_PSEUDO, B_INT16|B_SIGNED|B_MEMORY|B_SHOWSIZE, B_NONE, B_NONE }, { T("FICOMP"), D_FPU|D_MEMORY|D_FPUPOP, 0, 1, 0x000038FF, 0x000018DA, 0x00, B_ST0|B_PSEUDO, B_INT32|B_SIGNED|B_MEMORY|B_SHOWSIZE, B_NONE, B_NONE }, { T("FILD"), D_FPU|D_MEMORY|D_FPUPUSH, 0, 1, 0x000038FF, 0x000000DF, 0x00, B_INT16|B_SIGNED|B_MEMORY|B_SHOWSIZE, B_NONE, B_NONE, B_NONE }, { T("FILD"), D_FPU|D_MEMORY|D_FPUPUSH, 0, 1, 0x000038FF, 0x000000DB, 0x00, B_INT32|B_SIGNED|B_MEMORY|B_SHOWSIZE, B_NONE, B_NONE, B_NONE }, { T("FILD"), D_FPU|D_MEMORY|D_FPUPUSH, 0, 1, 0x000038FF, 0x000028DF, 0x00, B_INT64|B_SIGNED|B_MEMORY|B_SHOWSIZE, B_NONE, B_NONE, B_NONE }, { T("FIST"), D_FPU|D_MEMORY, 0, 1, 0x000038FF, 0x000010DF, 0x00, B_INT16|B_SIGNED|B_MEMORY|B_SHOWSIZE|B_CHG, B_ST0|B_PSEUDO, B_NONE, B_NONE }, { T("FIST"), D_FPU|D_MEMORY, 0, 1, 0x000038FF, 0x000010DB, 0x00, B_INT32|B_SIGNED|B_MEMORY|B_SHOWSIZE|B_CHG, B_ST0|B_PSEUDO, B_NONE, B_NONE }, { T("FISTP"), D_FPU|D_MEMORY|D_FPUPOP, 0, 1, 0x000038FF, 0x000018DF, 0x00, B_INT16|B_SIGNED|B_MEMORY|B_SHOWSIZE|B_CHG, B_ST0|B_PSEUDO, B_NONE, B_NONE }, { T("FISTP"), D_FPU|D_MEMORY|D_FPUPOP, 0, 1, 0x000038FF, 0x000018DB, 0x00, B_INT32|B_SIGNED|B_MEMORY|B_SHOWSIZE|B_CHG, B_ST0|B_PSEUDO, B_NONE, B_NONE }, { T("FISTP"), D_FPU|D_MEMORY|D_FPUPOP, 0, 1, 0x000038FF, 0x000038DF, 0x00, B_INT64|B_SIGNED|B_MEMORY|B_SHOWSIZE|B_CHG, B_ST0|B_PSEUDO, B_NONE, B_NONE }, { T("FISTTP"), D_FPU|D_MEMORY|D_FPUPOP, 0, 1, 0x000038FF, 0x000008DF, 0x00, B_INT16|B_SIGNED|B_MEMORY|B_SHOWSIZE|B_CHG, B_ST0|B_PSEUDO, B_NONE, B_NONE }, { T("FISTTP"), D_FPU|D_MEMORY|D_FPUPOP, 0, 1, 0x000038FF, 0x000008DB, 0x00, B_INT32|B_SIGNED|B_MEMORY|B_SHOWSIZE|B_CHG, B_ST0|B_PSEUDO, B_NONE, B_NONE }, { T("FISTTP"), D_FPU|D_MEMORY|D_FPUPOP, 0, 1, 0x000038FF, 0x000008DD, 0x00, B_INT64|B_SIGNED|B_MEMORY|B_SHOWSIZE|B_CHG, B_ST0|B_PSEUDO, B_NONE, B_NONE }, { T("FLD"), D_FPU|D_MEMORY|D_FPUPUSH, 0, 1, 0x000038FF, 0x000000D9, 0x00, B_FLOAT32|B_MEMORY|B_SHOWSIZE, B_NONE, B_NONE, B_NONE }, { T("FLD"), D_FPU|D_MEMORY|D_FPUPUSH, 0, 1, 0x000038FF, 0x000000DD, 0x00, B_FLOAT64|B_MEMORY|B_SHOWSIZE, B_NONE, B_NONE, B_NONE }, { T("FLD"), D_FPU|D_MEMORY|D_FPUPUSH, 0, 1, 0x000038FF, 0x000028DB, 0x00, B_FLOAT80|B_MEMORY|B_SHOWSIZE, B_NONE, B_NONE, B_NONE }, { T("FLDCW"), D_FPU|D_MEMORY, 0, 1, 0x000038FF, 0x000028D9, 0x00, B_FCW|B_CHG|B_PSEUDO, B_INT16|B_BINARY|B_MEMORY, B_NONE, B_NONE }, { T("FLDENV"), D_FPU|D_MEMORY, 0, 1, 0x000038FF, 0x000020D9, 0x00, B_LONGDATA|B_MEMORY, B_NONE, B_NONE, B_NONE }, { T("FMUL"), D_FPU|D_MEMORY, 0, 1, 0x000038FF, 0x000008D8, 0x00, B_ST0|B_UPD|B_PSEUDO, B_FLOAT32|B_MEMORY|B_SHOWSIZE, B_NONE, B_NONE }, { T("FMUL"), D_FPU|D_MEMORY, 0, 1, 0x000038FF, 0x000008DC, 0x00, B_ST0|B_UPD|B_PSEUDO, B_FLOAT64|B_MEMORY|B_SHOWSIZE, B_NONE, B_NONE }, { T("FIMUL"), D_FPU|D_MEMORY, 0, 1, 0x000038FF, 0x000008DA, 0x00, B_ST0|B_UPD|B_PSEUDO, B_INT32|B_SIGNED|B_MEMORY|B_SHOWSIZE, B_NONE, B_NONE }, { T("FIMUL"), D_FPU|D_MEMORY, 0, 1, 0x000038FF, 0x000008DE, 0x00, B_ST0|B_UPD|B_PSEUDO, B_INT16|B_SIGNED|B_MEMORY|B_SHOWSIZE, B_NONE, B_NONE }, { T("FRSTOR"), D_FPU|D_MEMORY, 0, 1, 0x000038FF, 0x000020DD, 0x00, B_LONGDATA|B_MEMORY, B_NONE, B_NONE, B_NONE }, { T("FSAVE"), D_FPU|D_MEMORY, 0, 1, 0x000038FF, 0x000030DD, 0x00, B_LONGDATA|B_MEMORY|B_CHG, B_NONE, B_NONE, B_NONE }, { T("FST"), D_FPU|D_MEMORY, 0, 1, 0x000038FF, 0x000010D9, 0x00, B_FLOAT32|B_MEMORY|B_SHOWSIZE|B_CHG, B_ST0|B_PSEUDO, B_NONE, B_NONE }, { T("FST"), D_FPU|D_MEMORY, 0, 1, 0x000038FF, 0x000010DD, 0x00, B_FLOAT64|B_MEMORY|B_SHOWSIZE|B_CHG, B_ST0|B_PSEUDO, B_NONE, B_NONE }, { T("FSTP"), D_FPU|D_MEMORY|D_FPUPOP, 0, 1, 0x000038FF, 0x000018D9, 0x00, B_FLOAT32|B_MEMORY|B_SHOWSIZE|B_CHG, B_ST0|B_PSEUDO, B_NONE, B_NONE }, { T("FSTP"), D_FPU|D_MEMORY|D_FPUPOP, 0, 1, 0x000038FF, 0x000018DD, 0x00, B_FLOAT64|B_MEMORY|B_SHOWSIZE|B_CHG, B_ST0|B_PSEUDO, B_NONE, B_NONE }, { T("FSTP"), D_FPU|D_MEMORY|D_FPUPOP, 0, 1, 0x000038FF, 0x000038DB, 0x00, B_FLOAT80|B_MEMORY|B_SHOWSIZE|B_CHG, B_ST0|B_PSEUDO, B_NONE, B_NONE }, { T("FSTCW"), D_FPU|D_MEMORY, 0, 1, 0x000038FF, 0x000038D9, 0x00, B_INT16|B_BINARY|B_MEMORY|B_CHG, B_FCW|B_PSEUDO, B_NONE, B_NONE }, { T("FSTENV"), D_FPU|D_MEMORY, 0, 1, 0x000038FF, 0x000030D9, 0x00, B_LONGDATA|B_MEMORY|B_CHG, B_NONE, B_NONE, B_NONE }, { T("FSTSW"), D_FPU|D_MEMORY, 0, 1, 0x000038FF, 0x000038DD, 0x00, B_INT16|B_BINARY|B_MEMORY|B_CHG, B_FST|B_PSEUDO, B_NONE, B_NONE }, { T("FSUB"), D_FPU|D_MEMORY, 0, 1, 0x000038FF, 0x000020D8, 0x00, B_ST0|B_UPD|B_PSEUDO, B_FLOAT32|B_MEMORY|B_SHOWSIZE, B_NONE, B_NONE }, { T("FSUB"), D_FPU|D_MEMORY, 0, 1, 0x000038FF, 0x000020DC, 0x00, B_ST0|B_UPD|B_PSEUDO, B_FLOAT64|B_MEMORY|B_SHOWSIZE, B_NONE, B_NONE }, { T("FISUB"), D_FPU|D_MEMORY, 0, 1, 0x000038FF, 0x000020DA, 0x00, B_ST0|B_UPD|B_PSEUDO, B_INT32|B_SIGNED|B_MEMORY|B_SHOWSIZE, B_NONE, B_NONE }, { T("FISUB"), D_FPU|D_MEMORY, 0, 1, 0x000038FF, 0x000020DE, 0x00, B_ST0|B_UPD|B_PSEUDO, B_INT16|B_SIGNED|B_MEMORY|B_SHOWSIZE, B_NONE, B_NONE }, { T("FSUBR"), D_FPU|D_MEMORY, 0, 1, 0x000038FF, 0x000028D8, 0x00, B_ST0|B_UPD|B_PSEUDO, B_FLOAT32|B_MEMORY|B_SHOWSIZE, B_NONE, B_NONE }, { T("FSUBR"), D_FPU|D_MEMORY, 0, 1, 0x000038FF, 0x000028DC, 0x00, B_ST0|B_UPD|B_PSEUDO, B_FLOAT64|B_MEMORY|B_SHOWSIZE, B_NONE, B_NONE }, { T("FISUBR"), D_FPU|D_MEMORY, 0, 1, 0x000038FF, 0x000028DA, 0x00, B_ST0|B_UPD|B_PSEUDO, B_INT32|B_SIGNED|B_MEMORY|B_SHOWSIZE, B_NONE, B_NONE }, { T("FISUBR"), D_FPU|D_MEMORY, 0, 1, 0x000038FF, 0x000028DE, 0x00, B_ST0|B_UPD|B_PSEUDO, B_INT16|B_SIGNED|B_MEMORY|B_SHOWSIZE, B_NONE, B_NONE }, { T("FSETPM"), D_FPU|D_UNDOC, 0, 2, 0x0000FFFF, 0x0000E4DB, 0x00, B_NONE, B_NONE, B_NONE, B_NONE }, { T("ADDPD"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x0000580F, 0x00, B_SREGF64x2|B_UPD, B_SSEF64x2, B_NONE, B_NONE }, { T("VADDPD"), D_AVX|D_MUST66, DX_VEX|DX_LBOTH, 1, 0x000000FF, 0x00000058, 0x00, B_SREGF64x2|B_CHG, B_SVEXF64x2, B_SSEF64x2, B_NONE }, { T("ADDPS"), D_SSE|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x0000580F, 0x00, B_SREGF32x4|B_UPD, B_SSEF32x4, B_NONE, B_NONE }, { T("VADDPS"), D_AVX|D_MUSTNONE, DX_VEX|DX_LBOTH, 1, 0x000000FF, 0x00000058, 0x00, B_SREGF32x4|B_CHG, B_SVEXF32x4, B_SSEF32x4, B_NONE }, { T("ADDSD"), D_SSE|D_MUSTF2, 0, 2, 0x0000FFFF, 0x0000580F, 0x00, B_SREGF64L|B_UPD, B_SSEF64L, B_NONE, B_NONE }, { T("VADDSD"), D_AVX|D_MUSTF2, DX_VEX|DX_IGNOREL, 1, 0x000000FF, 0x00000058, 0x00, B_SREGF64L|B_CHG, B_SVEXF64L, B_SSEF64L, B_NONE }, { T("ADDSS"), D_SSE|D_MUSTF3, 0, 2, 0x0000FFFF, 0x0000580F, 0x00, B_SREGF32L|B_UPD, B_SSEF32L, B_NONE, B_NONE }, { T("VADDSS"), D_AVX|D_MUSTF3, DX_VEX|DX_IGNOREL, 1, 0x000000FF, 0x00000058, 0x00, B_SREGF32L|B_CHG, B_SVEXF32L, B_SSEF32L, B_NONE }, { T("ADDSUBPD"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x0000D00F, 0x00, B_SREGF64x2|B_UPD, B_SSEF64x2, B_NONE, B_NONE }, { T("VADDSUBPD"), D_AVX|D_MUST66, DX_VEX|DX_LBOTH, 1, 0x000000FF, 0x000000D0, 0x00, B_SREGF64x2|B_CHG, B_SVEXF64x2, B_SSEF64x2, B_NONE }, { T("ADDSUBPS"), D_SSE|D_MUSTF2, 0, 2, 0x0000FFFF, 0x0000D00F, 0x00, B_SREGF32x4|B_UPD, B_SSEF32x4, B_NONE, B_NONE }, { T("VADDSUBPS"), D_AVX|D_MUSTF2, DX_VEX|DX_LBOTH, 1, 0x000000FF, 0x000000D0, 0x00, B_SREGF32x4|B_CHG, B_SVEXF32x4, B_SSEF32x4, B_NONE }, { T("ANDPD"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x0000540F, 0x00, B_SREGF64x2|B_UPD, B_SSEF64x2, B_NONE, B_NONE }, { T("VANDPD"), D_AVX|D_MUST66, DX_VEX|DX_LBOTH, 1, 0x000000FF, 0x00000054, 0x00, B_SREGF64x2|B_CHG, B_SVEXF64x2, B_SSEF64x2, B_NONE }, { T("ANDPS"), D_SSE|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x0000540F, 0x00, B_SREGF32x4|B_UPD, B_SSEF32x4, B_NONE, B_NONE }, { T("VANDPS"), D_AVX|D_MUSTNONE, DX_VEX|DX_LBOTH, 1, 0x000000FF, 0x00000054, 0x00, B_SREGF32x4|B_CHG, B_SVEXF32x4, B_SSEF32x4, B_NONE }, { T("ANDNPD"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x0000550F, 0x00, B_SREGF64x2|B_UPD, B_SSEF64x2, B_NONE, B_NONE }, { T("VANDNPD"), D_AVX|D_MUST66, DX_VEX|DX_LBOTH, 1, 0x000000FF, 0x00000055, 0x00, B_SREGF64x2|B_CHG, B_SVEXF64x2, B_SSEF64x2, B_NONE }, { T("ANDNPS"), D_SSE|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x0000550F, 0x00, B_SREGF32x4|B_UPD, B_SSEF32x4, B_NONE, B_NONE }, { T("VANDNPS"), D_AVX|D_MUSTNONE, DX_VEX|DX_LBOTH, 1, 0x000000FF, 0x00000055, 0x00, B_SREGF32x4|B_CHG, B_SVEXF32x4, B_SSEF32x4, B_NONE }, { T("CMP*PD"), D_SSE|D_POSTBYTE|D_MUST66|D_WILDCARD, 0, 2, 0x0000FFFF, 0x0000C20F, 0x00, B_SREGF64x2|B_UPD, B_SSEF64x2, B_NONE, B_NONE }, { T("VCMP*PD"), D_AVX|D_POSTBYTE|D_MUST66|D_WILDCARD, DX_VEX|DX_LBOTH, 1, 0x000000FF, 0x000000C2, 0x00, B_SREGF64x2|B_CHG, B_SVEXF64x2, B_SSEF64x2, B_NONE }, { T("CMPPD"), D_SSE|D_MUST66|D_SUSPICIOUS, 0, 2, 0x0000FFFF, 0x0000C20F, 0x00, B_SREGF64x2|B_UPD, B_SSEF64x2, B_CONST8, B_NONE }, { T("VCMPPD"), D_AVX|D_MUST66|D_SUSPICIOUS, DX_VEX|DX_LBOTH, 1, 0x000000FF, 0x000000C2, 0x00, B_SREGF64x2|B_CHG, B_SVEXF64x2, B_SSEF64x2, B_CONST8 }, { T("CMP*PS"), D_SSE|D_POSTBYTE|D_MUSTNONE|D_WILDCARD, 0, 2, 0x0000FFFF, 0x0000C20F, 0x00, B_SREGF32x4|B_UPD, B_SSEF32x4, B_NONE, B_NONE }, { T("VCMP*PS"), D_AVX|D_POSTBYTE|D_MUSTNONE|D_WILDCARD, DX_VEX|DX_LBOTH, 1, 0x000000FF, 0x000000C2, 0x00, B_SREGF32x4|B_CHG, B_SVEXF32x4, B_SSEF32x4, B_NONE }, { T("CMPPS"), D_SSE|D_MUSTNONE|D_SUSPICIOUS, 0, 2, 0x0000FFFF, 0x0000C20F, 0x00, B_SREGF32x4|B_UPD, B_SSEF32x4, B_CONST8, B_NONE }, { T("VCMPPS"), D_AVX|D_MUSTNONE|D_SUSPICIOUS, DX_VEX|DX_LBOTH, 1, 0x000000FF, 0x000000C2, 0x00, B_SREGF32x4|B_CHG, B_SVEXF32x4, B_SSEF32x4, B_CONST8 }, { T("CMP*SD"), D_SSE|D_POSTBYTE|D_MUSTF2|D_WILDCARD, 0, 2, 0x0000FFFF, 0x0000C20F, 0x00, B_SREGF64L|B_UPD, B_SSEF64L, B_NONE, B_NONE }, { T("VCMP*SD"), D_AVX|D_POSTBYTE|D_MUSTF2|D_WILDCARD, DX_VEX|DX_IGNOREL, 1, 0x000000FF, 0x000000C2, 0x00, B_SREGF64L|B_CHG, B_SVEXF64L, B_SSEF64L, B_NONE }, { T("CMPSD"), D_SSE|D_MUSTF2|D_SUSPICIOUS, 0, 2, 0x0000FFFF, 0x0000C20F, 0x00, B_SREGF64L|B_UPD, B_SVEXF64L, B_CONST8, B_NONE }, { T("VCMPSD"), D_AVX|D_MUSTF2|D_SUSPICIOUS, DX_VEX|DX_IGNOREL, 1, 0x000000FF, 0x000000C2, 0x00, B_SREGF64L|B_CHG, B_SVEXF64L, B_SSEF64L, B_CONST8 }, { T("CMP*SS"), D_SSE|D_POSTBYTE|D_MUSTF3|D_WILDCARD, 0, 2, 0x0000FFFF, 0x0000C20F, 0x00, B_SREGF32L|B_UPD, B_SSEF32L, B_NONE, B_NONE }, { T("VCMP*SS"), D_AVX|D_POSTBYTE|D_MUSTF3|D_WILDCARD, DX_VEX|DX_IGNOREL, 1, 0x000000FF, 0x000000C2, 0x00, B_SREGF32L|B_CHG, B_SVEXF32L, B_SSEF32L, B_NONE }, { T("CMPSS"), D_SSE|D_MUSTF3|D_SUSPICIOUS, 0, 2, 0x0000FFFF, 0x0000C20F, 0x00, B_SREGF32L|B_UPD, B_SSEF32L, B_CONST8, B_NONE }, { T("VCMPSS"), D_AVX|D_MUSTF3|D_SUSPICIOUS, DX_VEX|DX_IGNOREL, 1, 0x000000FF, 0x000000C2, 0x00, B_SREGF32L|B_CHG, B_SVEXF32L, B_SSEF32L, B_CONST8 }, { T("COMISD"), D_SSE|D_MUST66|D_ALLFLAGS, 0, 2, 0x0000FFFF, 0x00002F0F, 0x00, B_SREGF64L, B_SSEF64L, B_NONE, B_NONE }, { T("VCOMISD"), D_AVX|D_MUST66|D_ALLFLAGS, DX_VEX|DX_IGNOREL|DX_NOVREG, 1, 0x000000FF, 0x0000002F, 0x00, B_SREGF64L, B_SSEF64L, B_NONE, B_NONE }, { T("COMISS"), D_SSE|D_MUSTNONE|D_ALLFLAGS, 0, 2, 0x0000FFFF, 0x00002F0F, 0x00, B_SREGF32L, B_SSEF32L, B_NONE, B_NONE }, { T("VCOMISS"), D_AVX|D_MUSTNONE|D_ALLFLAGS, DX_VEX|DX_IGNOREL|DX_NOVREG, 1, 0x000000FF, 0x0000002F, 0x00, B_SREGF32L, B_SSEF32L, B_NONE, B_NONE }, { T("CVTDQ2PD"), D_SSE|D_MUSTF3, 0, 2, 0x0000FFFF, 0x0000E60F, 0x00, B_SREGF64x2|B_CHG, B_SSEI32x2L, B_NONE, B_NONE }, { T("VCVTDQ2PD"), D_AVX|D_MUSTF3|D_REGISTER, DX_VEX|DX_LBOTH|DX_NOVREG, 1, 0x000000FF, 0x000000E6, 0x00, B_SREGF64x2|B_CHG, B_SSEI32x2L|B_REGISTER|B_NOVEXSIZE|B_SHOWSIZE, B_NONE, B_NONE }, { T("VCVTDQ2PD"), D_AVX|D_MUSTF3|D_MEMORY, DX_VEX|DX_LBOTH|DX_NOVREG, 1, 0x000000FF, 0x000000E6, 0x00, B_SREGF64x2|B_CHG, B_SSEI32x2L|B_MEMORY|B_SHOWSIZE, B_NONE, B_NONE }, { T("CVTDQ2PS"), D_SSE|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x00005B0F, 0x00, B_SREGF32x4|B_CHG, B_SSEI32x4, B_NONE, B_NONE }, { T("VCVTDQ2PS"), D_AVX|D_MUSTNONE, DX_VEX|DX_LBOTH|DX_NOVREG, 1, 0x000000FF, 0x0000005B, 0x00, B_SREGF32x4|B_CHG, B_SSEI32x4, B_NONE, B_NONE }, { T("CVTPD2DQ"), D_SSE|D_MUSTF2, 0, 2, 0x0000FFFF, 0x0000E60F, 0x00, B_SREGI32x2L|B_CHG, B_SSEF64x2, B_NONE, B_NONE }, { T("VCVTPD2DQ"), D_AVX|D_MUSTF2, DX_VEX|DX_LBOTH|DX_NOVREG, 1, 0x000000FF, 0x000000E6, 0x00, B_SREGI32x2L|B_NOVEXSIZE|B_CHG, B_SSEF64x2|B_SHOWSIZE, B_NONE, B_NONE }, { T("CVTPD2PI"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x00002D0F, 0x00, B_MREG32x2|B_SIGNED|B_CHG, B_SSEF64x2, B_NONE, B_NONE }, { T("CVTPD2PS"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x00005A0F, 0x00, B_SREGF32x2L|B_CHG, B_SSEF64x2, B_NONE, B_NONE }, { T("VCVTPD2PS"), D_AVX|D_MUST66, DX_VEX|DX_LBOTH|DX_NOVREG, 1, 0x000000FF, 0x0000005A, 0x00, B_SREGF32x2L|B_NOVEXSIZE|B_CHG, B_SSEF64x2|B_SHOWSIZE, B_NONE, B_NONE }, { T("CVTPI2PD"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x00002A0F, 0x00, B_SREGF64x2|B_CHG, B_MMX32x2|B_SIGNED, B_NONE, B_NONE }, { T("CVTPI2PS"), D_SSE|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x00002A0F, 0x00, B_SREGF32x2L|B_CHG, B_MMX32x2|B_SIGNED, B_NONE, B_NONE }, { T("CVTPS2DQ"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x00005B0F, 0x00, B_SREGI32x4|B_CHG, B_SSEF32x4, B_NONE, B_NONE }, { T("VCVTPS2DQ"), D_AVX|D_MUST66, DX_VEX|DX_LBOTH|DX_NOVREG, 1, 0x000000FF, 0x0000005B, 0x00, B_SREGI32x4|B_CHG, B_SSEF32x4, B_NONE, B_NONE }, { T("CVTPS2PD"), D_SSE|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x00005A0F, 0x00, B_SREGF64x2|B_CHG, B_SSEF32x2L, B_NONE, B_NONE }, { T("VCVTPS2PD"), D_AVX|D_MUSTNONE|D_REGISTER, DX_VEX|DX_LBOTH|DX_NOVREG, 1, 0x000000FF, 0x0000005A, 0x00, B_SREGF64x2|B_CHG, B_SSEF32x2L|B_REGISTER|B_NOVEXSIZE|B_SHOWSIZE, B_NONE, B_NONE }, { T("VCVTPS2PD"), D_AVX|D_MUSTNONE|D_MEMORY, DX_VEX|DX_LBOTH|DX_NOVREG, 1, 0x000000FF, 0x0000005A, 0x00, B_SREGF64x2|B_CHG, B_SSEF32x2L|B_MEMORY|B_SHOWSIZE, B_NONE, B_NONE }, { T("CVTPS2PI"), D_SSE|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x00002D0F, 0x00, B_MREG32x2|B_CHG, B_SSEF32x2L, B_NONE, B_NONE }, { T("CVTSD2SI"), D_SSE|D_MUSTF2, 0, 2, 0x0000FFFF, 0x00002D0F, 0x00, B_REG32|B_CHG, B_SSEF64L, B_NONE, B_NONE }, { T("VCVTSD2SI"), D_AVX|D_MUSTF2, DX_VEX|DX_IGNOREL|DX_NOVREG, 1, 0x000000FF, 0x0000002D, 0x00, B_REG32|B_CHG, B_SSEF64L, B_NONE, B_NONE }, { T("CVTSD2SS"), D_SSE|D_MUSTF2, 0, 2, 0x0000FFFF, 0x00005A0F, 0x00, B_SREGF32L|B_CHG, B_SSEF64L, B_NONE, B_NONE }, { T("VCVTSD2SS"), D_AVX|D_MUSTF2, DX_VEX|DX_IGNOREL, 1, 0x000000FF, 0x0000005A, 0x00, B_SREGF32L|B_CHG, B_SVEXF32L, B_SSEF64L, B_NONE }, { T("CVTSI2SD"), D_SSE|D_MUSTF2, 0, 2, 0x0000FFFF, 0x00002A0F, 0x00, B_SREGF64L|B_CHG, B_INT32|B_SIGNED, B_NONE, B_NONE }, { T("VCVTSI2SD"), D_AVX|D_MUSTF2, DX_VEX|DX_IGNOREL, 1, 0x000000FF, 0x0000002A, 0x00, B_SREGF64L|B_CHG, B_SVEXF64L, B_INT32|B_SIGNED, B_NONE }, { T("CVTSI2SS"), D_SSE|D_MUSTF3, 0, 2, 0x0000FFFF, 0x00002A0F, 0x00, B_SREGF32L|B_CHG, B_INT32|B_SIGNED, B_NONE, B_NONE }, { T("VCVTSI2SS"), D_AVX|D_MUSTF3, DX_VEX|DX_IGNOREL, 1, 0x000000FF, 0x0000002A, 0x00, B_SREGF32L|B_CHG, B_SVEXF32L, B_INT32|B_SIGNED, B_NONE }, { T("CVTSS2SD"), D_SSE|D_MUSTF3, 0, 2, 0x0000FFFF, 0x00005A0F, 0x00, B_SREGF64L|B_CHG, B_SSEF32L, B_NONE, B_NONE }, { T("VCVTSS2SD"), D_AVX|D_MUSTF3, DX_VEX|DX_IGNOREL, 1, 0x000000FF, 0x0000005A, 0x00, B_SREGF64L|B_CHG, B_SVEXF64L, B_SSEF32L, B_NONE }, { T("CVTSS2SI"), D_SSE|D_MUSTF3, 0, 2, 0x0000FFFF, 0x00002D0F, 0x00, B_REG32|B_CHG, B_SSEF32L, B_NONE, B_NONE }, { T("VCVTSS2SI"), D_AVX|D_MUSTF3, DX_VEX|DX_IGNOREL|DX_NOVREG, 1, 0x000000FF, 0x0000002D, 0x00, B_REG32|B_CHG, B_SSEF32L, B_NONE, B_NONE }, { T("CVTTPD2PI"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x00002C0F, 0x00, B_MREG32x2|B_CHG, B_SSEF64x2, B_NONE, B_NONE }, { T("CVTTPD2DQ"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x0000E60F, 0x00, B_SREGI32x2L|B_CHG, B_SSEF64x2, B_NONE, B_NONE }, { T("VCVTTPD2DQ"), D_AVX|D_MUST66, DX_VEX|DX_LBOTH|DX_NOVREG, 1, 0x000000FF, 0x000000E6, 0x00, B_SREGI32x2L|B_NOVEXSIZE|B_CHG, B_SSEF64x2|B_SHOWSIZE, B_NONE, B_NONE }, { T("CVTTPS2DQ"), D_SSE|D_MUSTF3, 0, 2, 0x0000FFFF, 0x00005B0F, 0x00, B_SREGI32x4|B_CHG, B_SSEF32x4, B_NONE, B_NONE }, { T("VCVTTPS2DQ"), D_AVX|D_MUSTF3, DX_VEX|DX_LBOTH|DX_NOVREG, 1, 0x000000FF, 0x0000005B, 0x00, B_SREGI32x4|B_CHG, B_SSEF32x4, B_NONE, B_NONE }, { T("CVTTPS2PI"), D_SSE|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x00002C0F, 0x00, B_MREG32x2|B_CHG, B_SSEF32x2L, B_NONE, B_NONE }, { T("CVTTSD2SI"), D_SSE|D_MUSTF2, 0, 2, 0x0000FFFF, 0x00002C0F, 0x00, B_REG32|B_CHG, B_SSEF64L, B_NONE, B_NONE }, { T("VCVTTSD2SI"), D_AVX|D_MUSTF2, DX_VEX|DX_IGNOREL|DX_NOVREG, 1, 0x000000FF, 0x0000002C, 0x00, B_REG32|B_CHG, B_SSEF64L, B_NONE, B_NONE }, { T("CVTTSS2SI"), D_SSE|D_MUSTF3, 0, 2, 0x0000FFFF, 0x00002C0F, 0x00, B_REG32|B_CHG, B_SSEF32L, B_NONE, B_NONE }, { T("VCVTTSS2SI"), D_AVX|D_MUSTF3, DX_VEX|DX_IGNOREL|DX_NOVREG, 1, 0x000000FF, 0x0000002C, 0x00, B_REG32|B_CHG, B_SSEF32L, B_NONE, B_NONE }, { T("DIVPD"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x00005E0F, 0x00, B_SREGF64x2|B_UPD, B_SSEF64x2, B_NONE, B_NONE }, { T("VDIVPD"), D_AVX|D_MUST66, DX_VEX|DX_LBOTH, 1, 0x000000FF, 0x0000005E, 0x00, B_SREGF64x2|B_CHG, B_SVEXF64x2, B_SSEF64x2, B_NONE }, { T("DIVPS"), D_SSE|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x00005E0F, 0x00, B_SREGF32x4|B_UPD, B_SSEF32x4, B_NONE, B_NONE }, { T("VDIVPS"), D_AVX|D_MUSTNONE, DX_VEX|DX_LBOTH, 1, 0x000000FF, 0x0000005E, 0x00, B_SREGF32x4|B_CHG, B_SVEXF32x4, B_SSEF32x4, B_NONE }, { T("DIVSD"), D_SSE|D_MUSTF2, 0, 2, 0x0000FFFF, 0x00005E0F, 0x00, B_SREGF64L|B_UPD, B_SSEF64L, B_NONE, B_NONE }, { T("VDIVSD"), D_AVX|D_MUSTF2, DX_VEX|DX_IGNOREL, 1, 0x000000FF, 0x0000005E, 0x00, B_SREGF64L|B_CHG, B_SVEXF64L, B_SSEF64L, B_NONE }, { T("DIVSS"), D_SSE|D_MUSTF3, 0, 2, 0x0000FFFF, 0x00005E0F, 0x00, B_SREGF32L|B_UPD, B_SSEF32L, B_NONE, B_NONE }, { T("VDIVSS"), D_AVX|D_MUSTF3, DX_VEX|DX_IGNOREL, 1, 0x000000FF, 0x0000005E, 0x00, B_SREGF32L|B_CHG, B_SVEXF32L, B_SSEF32L, B_NONE }, { T("HADDPD"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x00007C0F, 0x00, B_SREGF64x2|B_UPD, B_SSEF64x2, B_NONE, B_NONE }, { T("VHADDPD"), D_AVX|D_MUST66, DX_VEX|DX_LBOTH, 1, 0x000000FF, 0x0000007C, 0x00, B_SREGF64x2|B_CHG, B_SVEXF64x2, B_SSEF64x2, B_NONE }, { T("HADDPS"), D_SSE|D_MUSTF2, 0, 2, 0x0000FFFF, 0x00007C0F, 0x00, B_SREGF32x4|B_UPD, B_SSEF32x4, B_NONE, B_NONE }, { T("VHADDPS"), D_AVX|D_MUSTF2, DX_VEX|DX_LBOTH, 1, 0x000000FF, 0x0000007C, 0x00, B_SREGF32x4|B_CHG, B_SVEXF32x4, B_SSEF32x4, B_NONE }, { T("HSUBPD"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x00007D0F, 0x00, B_SREGF64x2|B_UPD, B_SSEF64x2, B_NONE, B_NONE }, { T("VHSUBPD"), D_AVX|D_MUST66, DX_VEX|DX_LBOTH, 1, 0x000000FF, 0x0000007D, 0x00, B_SREGF64x2|B_CHG, B_SVEXF64x2, B_SSEF64x2, B_NONE }, { T("HSUBPS"), D_SSE|D_MUSTF2, 0, 2, 0x0000FFFF, 0x00007D0F, 0x00, B_SREGF32x4|B_UPD, B_SSEF32x4, B_NONE, B_NONE }, { T("VHSUBPS"), D_AVX|D_MUSTF2, DX_VEX|DX_LBOTH, 1, 0x000000FF, 0x0000007D, 0x00, B_SREGF32x4|B_CHG, B_SVEXF32x4, B_SSEF32x4, B_NONE }, { T("LDDQU"), D_SSE|D_MUSTF2, 0, 2, 0x0000FFFF, 0x0000F00F, 0x00, B_SREGF64x2|B_CHG, B_SSEF64x2, B_NONE, B_NONE }, { T("VLDDQU"), D_AVX|D_MUSTF2, DX_VEX|DX_LBOTH|DX_NOVREG, 1, 0x000000FF, 0x000000F0, 0x00, B_SREGF64x2|B_CHG, B_SSEF64x2, B_NONE, B_NONE }, { T("LDMXCSR"), D_CMD|D_MEMORY, 0, 2, 0x0038FFFF, 0x0010AE0F, 0x00, B_MXCSR|B_CHG|B_PSEUDO, B_INT32|B_BINARY|B_MEMORY, B_NONE, B_NONE }, { T("VLDMXCSR"), D_CMD|D_MEMORY, DX_VEX|DX_LSHORT|DX_NOVREG, 1, 0x000038FF, 0x000010AE, 0x00, B_MXCSR|B_CHG|B_PSEUDO, B_INT32|B_BINARY|B_MEMORY, B_NONE, B_NONE }, { T("VSTMXCSR"), D_CMD|D_MEMORY, DX_VEX|DX_LSHORT|DX_NOVREG, 1, 0x000038FF, 0x000018AE, 0x00, B_INT32|B_BINARY|B_MEMONLY|B_NOESP|B_SHOWSIZE|B_CHG, B_MXCSR|B_PSEUDO, B_NONE, B_NONE }, { T("MASKMOVDQU"), D_SSE|D_MUST66|D_REGISTER, 0, 2, 0x00C0FFFF, 0x00C0F70F, 0x00, B_SSEI8x16DI|B_UPD|B_PSEUDO, B_SREGI8x16|B_BINARY, B_SSEI8x16|B_REGISTER, B_NONE }, { T("VMASKMOVDQU"), D_AVX|D_MUST66|D_REGISTER, DX_VEX|DX_LSHORT|DX_NOVREG, 1, 0x0000C0FF, 0x0000C0F7, 0x00, B_SSEI8x16DI|B_UPD|B_PSEUDO, B_SREGI8x16|B_BINARY, B_SSEI8x16|B_REGISTER, B_NONE }, { T("MASKMOVQ"), D_MMX|D_MUSTNONE|D_REGISTER, 0, 2, 0x00C0FFFF, 0x00C0F70F, 0x00, B_MMX8x8DI|B_UPD|B_PSEUDO, B_MREG8x8, B_MMX8x8|B_REGISTER, B_NONE }, { T("MAXPD"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x00005F0F, 0x00, B_SREGF64x2|B_UPD, B_SSEF64x2, B_NONE, B_NONE }, { T("VMAXPD"), D_AVX|D_MUST66, DX_VEX|DX_LBOTH, 1, 0x000000FF, 0x0000005F, 0x00, B_SREGF64x2|B_CHG, B_SVEXF64x2, B_SSEF64x2, B_NONE }, { T("MAXPS"), D_SSE|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x00005F0F, 0x00, B_SREGF32x4|B_UPD, B_SSEF32x4, B_NONE, B_NONE }, { T("VMAXPS"), D_AVX|D_MUSTNONE, DX_VEX|DX_LBOTH, 1, 0x000000FF, 0x0000005F, 0x00, B_SREGF32x4|B_CHG, B_SVEXF32x4, B_SSEF32x4, B_NONE }, { T("MAXSD"), D_SSE|D_MUSTF2, 0, 2, 0x0000FFFF, 0x00005F0F, 0x00, B_SREGF64L|B_UPD, B_SSEF64L, B_NONE, B_NONE }, { T("VMAXSD"), D_AVX|D_MUSTF2, DX_VEX|DX_IGNOREL, 1, 0x000000FF, 0x0000005F, 0x00, B_SREGF64L|B_CHG, B_SVEXF64L, B_SSEF64L, B_NONE }, { T("MAXSS"), D_SSE|D_MUSTF3, 0, 2, 0x0000FFFF, 0x00005F0F, 0x00, B_SREGF32L|B_UPD, B_SSEF32L, B_NONE, B_NONE }, { T("VMAXSS"), D_AVX|D_MUSTF3, DX_VEX|DX_IGNOREL, 1, 0x000000FF, 0x0000005F, 0x00, B_SREGF32L|B_CHG, B_SVEXF32L, B_SSEF32L, B_NONE }, { T("MFENCE"), D_SSE, 0, 3, 0x00FFFFFF, 0x00F0AE0F, 0x00, B_NONE, B_NONE, B_NONE, B_NONE }, { T("MINPD"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x00005D0F, 0x00, B_SREGF64x2|B_UPD, B_SSEF64x2, B_NONE, B_NONE }, { T("VMINPD"), D_AVX|D_MUST66, DX_VEX|DX_LBOTH, 1, 0x000000FF, 0x0000005D, 0x00, B_SREGF64x2|B_CHG, B_SVEXF64x2, B_SSEF64x2, B_NONE }, { T("MINPS"), D_SSE|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x00005D0F, 0x00, B_SREGF32x4|B_UPD, B_SSEF32x4, B_NONE, B_NONE }, { T("VMINPS"), D_AVX|D_MUSTNONE, DX_VEX|DX_LBOTH, 1, 0x000000FF, 0x0000005D, 0x00, B_SREGF32x4|B_CHG, B_SVEXF32x4, B_SSEF32x4, B_NONE }, { T("MINSD"), D_SSE|D_MUSTF2, 0, 2, 0x0000FFFF, 0x00005D0F, 0x00, B_SREGF64L|B_UPD, B_SSEF64L, B_NONE, B_NONE }, { T("VMINSD"), D_AVX|D_MUSTF2, DX_VEX|DX_IGNOREL, 1, 0x000000FF, 0x0000005D, 0x00, B_SREGF64L|B_CHG, B_SVEXF64L, B_SSEF64L, B_NONE }, { T("MINSS"), D_SSE|D_MUSTF3, 0, 2, 0x0000FFFF, 0x00005D0F, 0x00, B_SREGF32L|B_UPD, B_SSEF32L, B_NONE, B_NONE }, { T("VMINSS"), D_AVX|D_MUSTF3, DX_VEX|DX_IGNOREL, 1, 0x000000FF, 0x0000005D, 0x00, B_SREGF32L|B_CHG, B_SVEXF32L, B_SSEF32L, B_NONE }, { T("MOVAPD"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x0000280F, 0x00, B_SREGF64x2|B_CHG, B_SSEF64x2, B_NONE, B_NONE }, { T("VMOVAPD"), D_AVX|D_MUST66, DX_VEX|DX_LBOTH|DX_NOVREG, 1, 0x000000FF, 0x00000028, 0x00, B_SREGF64x2|B_CHG, B_SSEF64x2, B_NONE, B_NONE }, { T("MOVAPD"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x0000290F, 0x00, B_SSEF64x2|B_CHG, B_SREGF64x2, B_NONE, B_NONE }, { T("VMOVAPD"), D_AVX|D_MUST66, DX_VEX|DX_LBOTH|DX_NOVREG, 1, 0x000000FF, 0x00000029, 0x00, B_SSEF64x2|B_CHG, B_SREGF64x2, B_NONE, B_NONE }, { T("MOVAPS"), D_SSE|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x0000280F, 0x00, B_SREGF32x4|B_CHG, B_SSEF32x4, B_NONE, B_NONE }, { T("VMOVAPS"), D_AVX|D_MUSTNONE, DX_VEX|DX_LBOTH|DX_NOVREG, 1, 0x000000FF, 0x00000028, 0x00, B_SREGF32x4|B_CHG, B_SSEF32x4, B_NONE, B_NONE }, { T("MOVAPS"), D_SSE|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x0000290F, 0x00, B_SSEF32x4|B_CHG, B_SREGF32x4, B_NONE, B_NONE }, { T("VMOVAPS"), D_AVX|D_MUSTNONE, DX_VEX|DX_LBOTH|DX_NOVREG, 1, 0x000000FF, 0x00000029, 0x00, B_SSEF32x4|B_CHG, B_SREGF32x4, B_NONE, B_NONE }, { T("MOVD"), D_MMX|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x00006E0F, 0x00, B_MREG32x2|B_CHG, B_INT32, B_NONE, B_NONE }, { T("MOVD"), D_MMX|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x00007E0F, 0x00, B_INT32|B_CHG, B_MREG32x2, B_NONE, B_NONE }, { T("MOVD"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x00006E0F, 0x00, B_SREGI32x2L|B_CHG, B_INT32, B_NONE, B_NONE }, { T("VMOVD"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_NOVREG, 1, 0x000000FF, 0x0000006E, 0x00, B_SREGI32x2L|B_CHG, B_INT32, B_NONE, B_NONE }, { T("MOVD"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x00007E0F, 0x00, B_INT32|B_CHG, B_SREGI32L, B_NONE, B_NONE }, { T("VMOVD"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_NOVREG, 1, 0x000000FF, 0x0000007E, 0x00, B_INT32|B_CHG, B_SREGI32L, B_NONE, B_NONE }, { T("MOVDDUP"), D_SSE|D_MUSTF2, 0, 2, 0x0000FFFF, 0x0000120F, 0x00, B_SREGF64x2|B_CHG, B_SSEF64L, B_NONE, B_NONE }, { T("VMOVDDUP"), D_AVX|D_MUSTF2, DX_VEX|DX_LBOTH|DX_NOVREG, 1, 0x000000FF, 0x00000012, 0x00, B_SREGF64x2|B_CHG, B_SSEF64x2, B_NONE, B_NONE }, { T("MOVDQA"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x00006F0F, 0x00, B_SREGF64x2|B_CHG, B_SSEF64x2, B_NONE, B_NONE }, { T("VMOVDQA"), D_AVX|D_MUST66, DX_VEX|DX_LBOTH|DX_NOVREG, 1, 0x000000FF, 0x0000006F, 0x00, B_SREGF64x2|B_CHG, B_SSEF64x2, B_NONE, B_NONE }, { T("MOVDQA"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x00007F0F, 0x00, B_SSEF64x2|B_CHG, B_SREGF64x2, B_NONE, B_NONE }, { T("VMOVDQA"), D_AVX|D_MUST66, DX_VEX|DX_LBOTH|DX_NOVREG, 1, 0x000000FF, 0x0000007F, 0x00, B_SSEF64x2|B_CHG, B_SREGF64x2, B_NONE, B_NONE }, { T("MOVDQU"), D_SSE|D_MUSTF3, 0, 2, 0x0000FFFF, 0x00006F0F, 0x00, B_SREGF64x2|B_CHG, B_SSEF64x2, B_NONE, B_NONE }, { T("VMOVDQU"), D_AVX|D_MUSTF3, DX_VEX|DX_LBOTH|DX_NOVREG, 1, 0x000000FF, 0x0000006F, 0x00, B_SREGF64x2|B_CHG, B_SSEF64x2, B_NONE, B_NONE }, { T("MOVDQU"), D_SSE|D_MUSTF3, 0, 2, 0x0000FFFF, 0x00007F0F, 0x00, B_SSEF64x2|B_CHG, B_SREGF64x2, B_NONE, B_NONE }, { T("VMOVDQU"), D_AVX|D_MUSTF3, DX_VEX|DX_LBOTH|DX_NOVREG, 1, 0x000000FF, 0x0000007F, 0x00, B_SSEF64x2|B_CHG, B_SREGF64x2, B_NONE, B_NONE }, { T("MOVDQ2Q"), D_MMX|D_MUSTF2|D_REGISTER, 0, 2, 0x00C0FFFF, 0x00C0D60F, 0x00, B_MREG32x2|B_CHG, B_SSEI32x2L|B_REGISTER, B_NONE, B_NONE }, { T("MOVHLPS"), D_SSE|D_MUSTNONE|D_REGISTER, 0, 2, 0x00C0FFFF, 0x00C0120F, 0x00, B_SREGF32x4|B_UPD, B_SSEF32x4|B_REGISTER, B_NONE, B_NONE }, { T("VMOVHLPS"), D_AVX|D_MUSTNONE|D_REGISTER, DX_VEX|DX_LSHORT, 1, 0x0000C0FF, 0x0000C012, 0x00, B_SREGF32x4|B_CHG, B_SVEXF32x4, B_SSEF32x4|B_REGISTER, B_NONE }, { T("MOVHPD"), D_SSE|D_MUST66|D_MEMORY, 0, 2, 0x0000FFFF, 0x0000160F, 0x00, B_SREGF64x2|B_UPD, B_SSEF64L|B_MEMORY, B_NONE, B_NONE }, { T("VMOVHPD"), D_AVX|D_MUST66|D_MEMORY, DX_VEX|DX_LSHORT, 1, 0x000000FF, 0x00000016, 0x00, B_SREGF64x2|B_CHG, B_SVEXF64x2, B_SSEF64L|B_MEMORY, B_NONE }, { T("MOVHPD"), D_SSE|D_MUST66|D_MEMORY, 0, 2, 0x0000FFFF, 0x0000170F, 0x00, B_SSEF64L|B_MEMORY|B_UPD, B_SREGF64x2, B_NONE, B_NONE }, { T("VMOVHPD"), D_AVX|D_MUST66|D_MEMORY, DX_VEX|DX_LSHORT|DX_NOVREG, 1, 0x000000FF, 0x00000017, 0x00, B_SSEF64L|B_MEMORY|B_UPD, B_SREGF64x2, B_NONE, B_NONE }, { T("MOVHPS"), D_SSE|D_MUSTNONE|D_MEMORY, 0, 2, 0x0000FFFF, 0x0000160F, 0x00, B_SREGF32x4|B_UPD, B_SSEF32x2L|B_MEMORY, B_NONE, B_NONE }, { T("VMOVHPS"), D_AVX|D_MUSTNONE|D_MEMORY, DX_VEX|DX_LSHORT, 1, 0x000000FF, 0x00000016, 0x00, B_SREGF32x4|B_CHG, B_SVEXF32x4, B_SSEF32x2L|B_MEMORY, B_NONE }, { T("MOVHPS"), D_SSE|D_MUSTNONE|D_MEMORY, 0, 2, 0x0000FFFF, 0x0000170F, 0x00, B_SSEF32x2L|B_MEMORY|B_UPD, B_SREGF32x4, B_NONE, B_NONE }, { T("VMOVHPS"), D_AVX|D_MUSTNONE|D_MEMORY, DX_VEX|DX_LSHORT|DX_NOVREG, 1, 0x000000FF, 0x00000017, 0x00, B_SSEF32x2L|B_MEMORY|B_UPD, B_SREGF32x4, B_NONE, B_NONE }, { T("MOVLHPS"), D_SSE|D_MUSTNONE|D_REGISTER, 0, 2, 0x00C0FFFF, 0x00C0160F, 0x00, B_SREGF32x4|B_UPD, B_SSEF32x2L|B_REGISTER, B_NONE, B_NONE }, { T("VMOVLHPS"), D_AVX|D_MUSTNONE|D_REGISTER, DX_VEX|DX_LSHORT, 1, 0x0000C0FF, 0x0000C016, 0x00, B_SREGF32x4|B_UPD, B_SVEXF32x4, B_SSEF32x2L|B_REGISTER, B_NONE }, { T("MOVLPD"), D_SSE|D_MUST66|D_MEMORY, 0, 2, 0x0000FFFF, 0x0000120F, 0x00, B_SREGF64L|B_UPD, B_SSEF64L|B_MEMORY, B_NONE, B_NONE }, { T("VMOVLPD"), D_AVX|D_MUST66|D_MEMORY, DX_VEX|DX_LSHORT, 1, 0x000000FF, 0x00000012, 0x00, B_SREGF64x2|B_UPD, B_SVEXF64x2, B_SSEF64L|B_MEMORY, B_NONE }, { T("MOVLPD"), D_SSE|D_MUST66|D_MEMORY, 0, 2, 0x0000FFFF, 0x0000130F, 0x00, B_SSEF64L|B_MEMORY|B_UPD, B_SREGF64L, B_NONE, B_NONE }, { T("VMOVLPD"), D_AVX|D_MUST66|D_MEMORY, DX_VEX|DX_LSHORT|DX_NOVREG, 1, 0x000000FF, 0x00000013, 0x00, B_SSEF64L|B_MEMORY|B_UPD, B_SREGF64L, B_NONE, B_NONE }, { T("MOVLPS"), D_SSE|D_MUSTNONE|D_MEMORY, 0, 2, 0x0000FFFF, 0x0000120F, 0x00, B_SREGF32x2L|B_UPD, B_SSEF32x2L|B_MEMORY, B_NONE, B_NONE }, { T("VMOVLPS"), D_AVX|D_MUSTNONE|D_MEMORY, DX_VEX|DX_LSHORT, 1, 0x000000FF, 0x00000012, 0x00, B_SREGF32x4|B_UPD, B_SVEXF32x4, B_SSEF32x2L|B_MEMORY, B_NONE }, { T("MOVLPS"), D_SSE|D_MUSTNONE|D_MEMORY, 0, 2, 0x0000FFFF, 0x0000130F, 0x00, B_SSEF32x2L|B_MEMORY|B_UPD, B_SREGF32x2L, B_NONE, B_NONE }, { T("VMOVLPS"), D_AVX|D_MUSTNONE|D_MEMORY, DX_VEX|DX_LSHORT|DX_NOVREG, 1, 0x000000FF, 0x00000013, 0x00, B_SSEF32x2L|B_MEMORY|B_UPD, B_SREGF32x2L, B_NONE, B_NONE }, { T("MOVMSKPD"), D_SSE|D_MUST66|D_REGISTER, 0, 2, 0x00C0FFFF, 0x00C0500F, 0x00, B_REG32|B_CHG, B_SSEF64x2|B_REGONLY, B_NONE, B_NONE }, { T("VMOVMSKPD"), D_AVX|D_MUST66|D_REGISTER, DX_VEX|DX_LBOTH|DX_NOVREG, 1, 0x0000C0FF, 0x0000C050, 0x00, B_REG32|B_CHG, B_SSEF64x2|B_REGONLY, B_NONE, B_NONE }, { T("MOVMSKPS"), D_SSE|D_MUSTNONE|D_REGISTER, 0, 2, 0x00C0FFFF, 0x00C0500F, 0x00, B_REG32|B_CHG, B_SSEF32x4|B_REGONLY, B_NONE, B_NONE }, { T("VMOVMSKPS"), D_AVX|D_MUSTNONE|D_REGISTER, DX_VEX|DX_LBOTH|DX_NOVREG, 1, 0x0000C0FF, 0x0000C050, 0x00, B_REG32|B_CHG, B_SSEF32x4|B_REGONLY, B_NONE, B_NONE }, { T("MOVNTDQ"), D_SSE|D_MUST66|D_MEMORY, 0, 2, 0x0000FFFF, 0x0000E70F, 0x00, B_SSEI8x16|B_MEMORY|B_CHG, B_SREGI8x16|B_BINARY, B_NONE, B_NONE }, { T("VMOVNTDQ"), D_AVX|D_MUST66|D_MEMORY, DX_VEX|DX_LBOTH|DX_NOVREG, 1, 0x000000FF, 0x000000E7, 0x00, B_SSEI8x16|B_MEMORY|B_CHG, B_SREGI8x16|B_BINARY, B_NONE, B_NONE }, { T("MOVNTI"), D_SSE|D_MUSTNONE|D_MEMORY, 0, 2, 0x0000FFFF, 0x0000C30F, 0x00, B_INT32|B_MEMORY|B_CHG, B_REG32, B_NONE, B_NONE }, { T("MOVNTPD"), D_SSE|D_MUST66|D_MEMORY, 0, 2, 0x0000FFFF, 0x00002B0F, 0x00, B_SSEF64x2|B_MEMORY|B_CHG, B_SREGF64x2, B_NONE, B_NONE }, { T("VMOVNTPD"), D_AVX|D_MUST66|D_MEMORY, DX_VEX|DX_LBOTH|DX_NOVREG, 1, 0x000000FF, 0x0000002B, 0x00, B_SSEF64x2|B_MEMORY|B_CHG, B_SREGF64x2, B_NONE, B_NONE }, { T("MOVNTPS"), D_SSE|D_MUSTNONE|D_MEMORY, 0, 2, 0x0000FFFF, 0x00002B0F, 0x00, B_SSEF32x4|B_MEMORY|B_CHG, B_SREGF32x4, B_NONE, B_NONE }, { T("VMOVNTPS"), D_AVX|D_MUSTNONE|D_MEMORY, DX_VEX|DX_LBOTH|DX_NOVREG, 1, 0x000000FF, 0x0000002B, 0x00, B_SSEF32x4|B_MEMORY|B_CHG, B_SREGF32x4, B_NONE, B_NONE }, { T("MOVNTQ"), D_MMX|D_MUSTNONE|D_MEMORY, 0, 2, 0x0000FFFF, 0x0000E70F, 0x00, B_MMX64|B_MEMORY|B_CHG, B_MREG64, B_NONE, B_NONE }, { T("MOVQ"), D_MMX|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x00006F0F, 0x00, B_MREG64|B_CHG, B_MMX64, B_NONE, B_NONE }, { T("MOVQ"), D_MMX|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x00007F0F, 0x00, B_MMX64|B_CHG, B_MREG64, B_NONE, B_NONE }, { T("MOVQ"), D_SSE|D_MUSTF3, 0, 2, 0x0000FFFF, 0x00007E0F, 0x00, B_SREGF64L|B_CHG, B_SSEF64L, B_NONE, B_NONE }, { T("VMOVQ"), D_AVX|D_MUSTF3, DX_VEX|DX_LSHORT|DX_NOVREG, 1, 0x000000FF, 0x0000007E, 0x00, B_SREGF64L|B_CHG, B_SSEF64L, B_NONE, B_NONE }, { T("MOVQ"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x0000D60F, 0x00, B_SSEF64L|B_CHG, B_SREGF64L, B_NONE, B_NONE }, { T("VMOVQ"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_NOVREG, 1, 0x000000FF, 0x000000D6, 0x00, B_SSEF64L|B_CHG, B_SREGF64L, B_NONE, B_NONE }, { T("MOVQ2DQ"), D_MMX|D_MUSTF3|D_REGISTER, 0, 2, 0x00C0FFFF, 0x00C0D60F, 0x00, B_SREGF64L|B_UPD, B_MMX8x8|B_REGISTER, B_NONE, B_NONE }, { T("MOVSD"), D_SSE|D_MUSTF2, 0, 2, 0x0000FFFF, 0x0000100F, 0x00, B_SREGF64L|B_UPD, B_SSEF64L, B_NONE, B_NONE }, { T("VMOVSD"), D_AVX|D_MUSTF2|D_MEMORY, DX_VEX|DX_IGNOREL|DX_NOVREG, 1, 0x000000FF, 0x00000010, 0x00, B_SREGF64L|B_UPD, B_SSEF64L, B_NONE, B_NONE }, { T("VMOVSD"), D_AVX|D_MUSTF2|D_REGISTER, DX_VEX|DX_IGNOREL, 1, 0x000000FF, 0x00000010, 0x00, B_SREGF64L|B_UPD, B_SVEXF64x2, B_SSEF64L, B_NONE }, { T("MOVSD"), D_SSE|D_MUSTF2, 0, 2, 0x0000FFFF, 0x0000110F, 0x00, B_SSEF64L|B_UPD, B_SREGF64L, B_NONE, B_NONE }, { T("VMOVSD"), D_AVX|D_MUSTF2|D_MEMORY, DX_VEX|DX_IGNOREL|DX_NOVREG, 1, 0x000000FF, 0x00000011, 0x00, B_SSEF64L|B_UPD, B_SREGF64L, B_NONE, B_NONE }, { T("VMOVSD"), D_AVX|D_MUSTF2|D_REGISTER, DX_VEX|DX_IGNOREL, 1, 0x000000FF, 0x00000011, 0x00, B_SSEF64L|B_UPD, B_SVEXF64x2, B_SREGF64L, B_NONE }, { T("MOVSS"), D_SSE|D_MUSTF3, 0, 2, 0x0000FFFF, 0x0000100F, 0x00, B_SREGF32L|B_UPD, B_SSEF32L, B_NONE, B_NONE }, { T("VMOVSS"), D_AVX|D_MUSTF3|D_MEMORY, DX_VEX|DX_IGNOREL|DX_NOVREG, 1, 0x000000FF, 0x00000010, 0x00, B_SREGF32L|B_UPD, B_SSEF32L, B_NONE, B_NONE }, { T("VMOVSS"), D_AVX|D_MUSTF3|D_REGISTER, DX_VEX|DX_IGNOREL, 1, 0x000000FF, 0x00000010, 0x00, B_SREGF32L|B_UPD, B_SVEXF32x4, B_SSEF32L, B_NONE }, { T("MOVSS"), D_SSE|D_MUSTF3, 0, 2, 0x0000FFFF, 0x0000110F, 0x00, B_SSEF32L|B_UPD, B_SREGF32L, B_NONE, B_NONE }, { T("VMOVSS"), D_AVX|D_MUSTF3|D_MEMORY, DX_VEX|DX_IGNOREL|DX_NOVREG, 1, 0x000000FF, 0x00000011, 0x00, B_SSEF32L|B_UPD, B_SREGF32L, B_NONE, B_NONE }, { T("VMOVSS"), D_AVX|D_MUSTF3|D_REGISTER, DX_VEX|DX_IGNOREL, 1, 0x000000FF, 0x00000011, 0x00, B_SSEF32L|B_UPD, B_SVEXF32x4, B_SREGF32L, B_NONE }, { T("MOVSHDUP"), D_SSE|D_MUSTF3, 0, 2, 0x0000FFFF, 0x0000160F, 0x00, B_SREGF32x4|B_CHG, B_SSEF32x4, B_NONE, B_NONE }, { T("VMOVSHDUP"), D_AVX|D_MUSTF3, DX_VEX|DX_LBOTH|DX_NOVREG, 1, 0x000000FF, 0x00000016, 0x00, B_SREGF32x4|B_CHG, B_SSEF32x4, B_NONE, B_NONE }, { T("MOVSLDUP"), D_SSE|D_MUSTF3, 0, 2, 0x0000FFFF, 0x0000120F, 0x00, B_SREGF32x4|B_CHG, B_SSEF32x4, B_NONE, B_NONE }, { T("VMOVSLDUP"), D_AVX|D_MUSTF3, DX_VEX|DX_LBOTH|DX_NOVREG, 1, 0x000000FF, 0x00000012, 0x00, B_SREGF32x4|B_CHG, B_SSEF32x4, B_NONE, B_NONE }, { T("MOVUPD"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x0000100F, 0x00, B_SREGF64x2|B_CHG, B_SSEF64x2, B_NONE, B_NONE }, { T("VMOVUPD"), D_AVX|D_MUST66, DX_VEX|DX_LBOTH|DX_NOVREG, 1, 0x000000FF, 0x00000010, 0x00, B_SREGF64x2|B_CHG, B_SSEF64x2, B_NONE, B_NONE }, { T("MOVUPD"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x0000110F, 0x00, B_SSEF64x2|B_CHG, B_SREGF64x2, B_NONE, B_NONE }, { T("VMOVUPD"), D_AVX|D_MUST66, DX_VEX|DX_LBOTH|DX_NOVREG, 1, 0x000000FF, 0x00000011, 0x00, B_SSEF64x2|B_CHG, B_SREGF64x2, B_NONE, B_NONE }, { T("MOVUPS"), D_SSE|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x0000100F, 0x00, B_SREGF32x4|B_CHG, B_SSEF32x4, B_NONE, B_NONE }, { T("VMOVUPS"), D_AVX|D_MUSTNONE, DX_VEX|DX_LBOTH|DX_NOVREG, 1, 0x000000FF, 0x00000010, 0x00, B_SREGF32x4|B_CHG, B_SSEF32x4, B_NONE, B_NONE }, { T("MOVUPS"), D_SSE|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x0000110F, 0x00, B_SSEF32x4|B_CHG, B_SREGF32x4, B_NONE, B_NONE }, { T("VMOVUPS"), D_AVX|D_MUSTNONE, DX_VEX|DX_LBOTH|DX_NOVREG, 1, 0x000000FF, 0x00000011, 0x00, B_SSEF32x4|B_CHG, B_SREGF32x4, B_NONE, B_NONE }, { T("MULPD"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x0000590F, 0x00, B_SREGF64x2|B_UPD, B_SSEF64x2, B_NONE, B_NONE }, { T("VMULPD"), D_AVX|D_MUST66, DX_VEX|DX_LBOTH, 1, 0x000000FF, 0x00000059, 0x00, B_SREGF64x2|B_UPD, B_SVEXF64x2, B_SSEF64x2, B_NONE }, { T("MULPS"), D_SSE|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x0000590F, 0x00, B_SREGF32x4|B_UPD, B_SSEF32x4, B_NONE, B_NONE }, { T("VMULPS"), D_AVX|D_MUSTNONE, DX_VEX|DX_LBOTH, 1, 0x000000FF, 0x00000059, 0x00, B_SREGF32x4|B_UPD, B_SVEXF32x4, B_SSEF32x4, B_NONE }, { T("MULSD"), D_SSE|D_MUSTF2, 0, 2, 0x0000FFFF, 0x0000590F, 0x00, B_SREGF64L|B_UPD, B_SSEF64L, B_NONE, B_NONE }, { T("VMULSD"), D_AVX|D_MUSTF2, DX_VEX|DX_IGNOREL, 1, 0x000000FF, 0x00000059, 0x00, B_SREGF64L|B_UPD, B_SVEXF64L, B_SSEF64L, B_NONE }, { T("MULSS"), D_SSE|D_MUSTF3, 0, 2, 0x0000FFFF, 0x0000590F, 0x00, B_SREGF32L|B_UPD, B_SSEF32L, B_NONE, B_NONE }, { T("VMULSS"), D_AVX|D_MUSTF3, DX_VEX|DX_IGNOREL, 1, 0x000000FF, 0x00000059, 0x00, B_SREGF32L|B_UPD, B_SVEXF32L, B_SSEF32L, B_NONE }, { T("ORPD"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x0000560F, 0x00, B_SREGF64x2|B_UPD, B_SSEF64x2, B_NONE, B_NONE }, { T("VORPD"), D_AVX|D_MUST66, DX_VEX|DX_LBOTH, 1, 0x000000FF, 0x00000056, 0x00, B_SREGF64x2|B_UPD, B_SVEXF64x2, B_SSEF64x2, B_NONE }, { T("ORPS"), D_SSE|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x0000560F, 0x00, B_SREGF32x4|B_UPD, B_SSEF32x4, B_NONE, B_NONE }, { T("VORPS"), D_AVX|D_MUSTNONE, DX_VEX|DX_LBOTH, 1, 0x000000FF, 0x00000056, 0x00, B_SREGF32x4|B_UPD, B_SVEXF32x4, B_SSEF32x4, B_NONE }, { T("PACKSSWB"), D_MMX|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x0000630F, 0x00, B_MREG16x4|B_UPD, B_MMX16x4, B_NONE, B_NONE }, { T("PACKSSWB"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x0000630F, 0x00, B_SREGI16x8|B_UPD, B_SSEI16x8, B_NONE, B_NONE }, { T("VPACKSSWB"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT, 1, 0x000000FF, 0x00000063, 0x00, B_SREGI8x16|B_UPD, B_SVEXI16x8, B_SSEI16x8, B_NONE }, { T("PACKSSDW"), D_MMX|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x00006B0F, 0x00, B_MREG32x2|B_UPD, B_MMX32x2, B_NONE, B_NONE }, { T("PACKSSDW"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x00006B0F, 0x00, B_SREGI32x4|B_UPD, B_SSEI32x4, B_NONE, B_NONE }, { T("VPACKSSDW"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT, 1, 0x000000FF, 0x0000006B, 0x00, B_SREGI16x8|B_UPD, B_SVEXI32x4, B_SSEI32x4, B_NONE }, { T("PACKUSWB"), D_MMX|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x0000670F, 0x00, B_MREG16x4|B_UPD, B_MMX16x4, B_NONE, B_NONE }, { T("PACKUSWB"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x0000670F, 0x00, B_SREGI16x8|B_UPD, B_SSEI16x8, B_NONE, B_NONE }, { T("VPACKUSWB"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT, 1, 0x000000FF, 0x00000067, 0x00, B_SREGI8x16|B_UPD, B_SVEXI16x8, B_SSEI16x8, B_NONE }, { T("PADDB"), D_MMX|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x0000FC0F, 0x00, B_MREG8x8|B_UPD, B_MMX8x8, B_NONE, B_NONE }, { T("PADDW"), D_MMX|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x0000FD0F, 0x00, B_MREG16x4|B_UPD, B_MMX16x4, B_NONE, B_NONE }, { T("PADDD"), D_MMX|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x0000FE0F, 0x00, B_MREG32x2|B_UPD, B_MMX32x2, B_NONE, B_NONE }, { T("PADDB"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x0000FC0F, 0x00, B_SREGI8x16|B_UPD, B_SSEI8x16, B_NONE, B_NONE }, { T("VPADDB"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT, 1, 0x000000FF, 0x000000FC, 0x00, B_SREGI8x16|B_UPD, B_SVEXI8x16, B_SSEI8x16, B_NONE }, { T("PADDW"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x0000FD0F, 0x00, B_SREGI16x8|B_UPD, B_SSEI16x8, B_NONE, B_NONE }, { T("VPADDW"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT, 1, 0x000000FF, 0x000000FD, 0x00, B_SREGI16x8|B_UPD, B_SVEXI16x8, B_SSEI16x8, B_NONE }, { T("PADDD"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x0000FE0F, 0x00, B_SREGI32x4|B_UPD, B_SSEI32x4, B_NONE, B_NONE }, { T("VPADDD"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT, 1, 0x000000FF, 0x000000FE, 0x00, B_SREGI32x4|B_UPD, B_SVEXI32x4, B_SSEI32x4, B_NONE }, { T("PADDQ"), D_MMX|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x0000D40F, 0x00, B_MREG64|B_UPD, B_MMX64, B_NONE, B_NONE }, { T("PADDQ"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x0000D40F, 0x00, B_SREGI64x2|B_UPD, B_SSEI64x2, B_NONE, B_NONE }, { T("VPADDQ"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT, 1, 0x000000FF, 0x000000D4, 0x00, B_SREGI64x2|B_UPD, B_SVEXI64x2, B_SSEI64x2, B_NONE }, { T("PADDSB"), D_MMX|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x0000EC0F, 0x00, B_MREG8x8|B_UPD, B_MMX8x8, B_NONE, B_NONE }, { T("PADDSW"), D_MMX|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x0000ED0F, 0x00, B_MREG16x4|B_UPD, B_MMX16x4, B_NONE, B_NONE }, { T("PADDSB"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x0000EC0F, 0x00, B_SREGI8x16|B_UPD, B_SSEI8x16, B_NONE, B_NONE }, { T("VPADDSB"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT, 1, 0x000000FF, 0x000000EC, 0x00, B_SREGI8x16|B_UPD, B_SVEXI8x16, B_SSEI8x16, B_NONE }, { T("PADDSW"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x0000ED0F, 0x00, B_SREGI16x8|B_UPD, B_SSEI16x8, B_NONE, B_NONE }, { T("VPADDSW"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT, 1, 0x000000FF, 0x000000ED, 0x00, B_SREGI16x8|B_UPD, B_SVEXI16x8, B_SSEI16x8, B_NONE }, { T("PADDUSB"), D_MMX|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x0000DC0F, 0x00, B_MREG8x8|B_UPD, B_MMX8x8, B_NONE, B_NONE }, { T("PADDUSW"), D_MMX|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x0000DD0F, 0x00, B_MREG16x4|B_UPD, B_MMX16x4, B_NONE, B_NONE }, { T("PADDUSB"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x0000DC0F, 0x00, B_SREGI8x16|B_UPD, B_SSEI8x16, B_NONE, B_NONE }, { T("VPADDUSB"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT, 1, 0x000000FF, 0x000000DC, 0x00, B_SREGI8x16|B_UPD, B_SVEXI8x16, B_SSEI8x16, B_NONE }, { T("PADDUSW"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x0000DD0F, 0x00, B_SREGI16x8|B_UPD, B_SSEI16x8, B_NONE, B_NONE }, { T("VPADDUSW"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT, 1, 0x000000FF, 0x000000DD, 0x00, B_SREGI16x8|B_UPD, B_SVEXI16x8, B_SSEI16x8, B_NONE }, { T("PAND"), D_MMX|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x0000DB0F, 0x00, B_MREG8x8|B_UPD, B_MMX8x8, B_NONE, B_NONE }, { T("PAND"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x0000DB0F, 0x00, B_SREGI8x16|B_UPD, B_SSEI8x16, B_NONE, B_NONE }, { T("VPAND"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT, 1, 0x000000FF, 0x000000DB, 0x00, B_SREGI8x16|B_UPD, B_SVEXI8x16, B_SSEI8x16, B_NONE }, { T("PANDN"), D_MMX|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x0000DF0F, 0x00, B_MREG8x8|B_UPD, B_MMX8x8, B_NONE, B_NONE }, { T("PANDN"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x0000DF0F, 0x00, B_SREGI8x16|B_UPD, B_SSEI8x16, B_NONE, B_NONE }, { T("VPANDN"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT, 1, 0x000000FF, 0x000000DF, 0x00, B_SREGI8x16|B_UPD, B_SVEXI8x16, B_SSEI8x16, B_NONE }, { T("PAVGB"), D_MMX|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x0000E00F, 0x00, B_MREG8x8|B_UPD, B_MMX8x8, B_NONE, B_NONE }, { T("PAVGW"), D_MMX|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x0000E30F, 0x00, B_MREG16x4|B_UPD, B_MMX16x4, B_NONE, B_NONE }, { T("PAVGB"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x0000E00F, 0x00, B_SREGI8x16|B_UPD, B_SSEI8x16, B_NONE, B_NONE }, { T("VPAVGB"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT, 1, 0x000000FF, 0x000000E0, 0x00, B_SREGI8x16|B_UPD, B_SVEXI8x16, B_SSEI8x16, B_NONE }, { T("PAVGW"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x0000E30F, 0x00, B_SREGI16x8|B_UPD, B_SSEI16x8, B_NONE, B_NONE }, { T("VPAVGW"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT, 1, 0x000000FF, 0x000000E3, 0x00, B_SREGI16x8|B_UPD, B_SVEXI16x8, B_SSEI16x8, B_NONE }, { T("PCMPEQB"), D_MMX|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x0000740F, 0x00, B_MREG8x8|B_UPD, B_MMX8x8, B_NONE, B_NONE }, { T("PCMPEQW"), D_MMX|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x0000750F, 0x00, B_MREG16x4|B_UPD, B_MMX16x4, B_NONE, B_NONE }, { T("PCMPEQD"), D_MMX|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x0000760F, 0x00, B_MREG32x2|B_UPD, B_MMX32x2, B_NONE, B_NONE }, { T("PCMPEQB"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x0000740F, 0x00, B_SREGI8x16|B_UPD, B_SSEI8x16, B_NONE, B_NONE }, { T("VPCMPEQB"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT, 1, 0x000000FF, 0x00000074, 0x00, B_SREGI8x16|B_UPD, B_SVEXI8x16, B_SSEI8x16, B_NONE }, { T("PCMPEQW"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x0000750F, 0x00, B_SREGI16x8|B_UPD, B_SSEI16x8, B_NONE, B_NONE }, { T("VPCMPEQW"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT, 1, 0x000000FF, 0x00000075, 0x00, B_SREGI16x8|B_UPD, B_SVEXI16x8, B_SSEI16x8, B_NONE }, { T("PCMPEQD"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x0000760F, 0x00, B_SREGI32x4|B_UPD, B_SSEI32x4, B_NONE, B_NONE }, { T("VPCMPEQD"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT, 1, 0x000000FF, 0x00000076, 0x00, B_SREGI32x4|B_UPD, B_SVEXI32x4, B_SSEI32x4, B_NONE }, { T("PCMPGTB"), D_MMX|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x0000640F, 0x00, B_MREG8x8|B_UPD, B_MMX8x8, B_NONE, B_NONE }, { T("PCMPGTW"), D_MMX|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x0000650F, 0x00, B_MREG16x4|B_UPD, B_MMX16x4, B_NONE, B_NONE }, { T("PCMPGTD"), D_MMX|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x0000660F, 0x00, B_MREG32x2|B_UPD, B_MMX32x2, B_NONE, B_NONE }, { T("PCMPGTB"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x0000640F, 0x00, B_SREGI8x16|B_UPD, B_SSEI8x16, B_NONE, B_NONE }, { T("VPCMPGTB"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT, 1, 0x000000FF, 0x00000064, 0x00, B_SREGI8x16|B_UPD, B_SVEXI8x16, B_SSEI8x16, B_NONE }, { T("PCMPGTW"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x0000650F, 0x00, B_SREGI16x8|B_UPD, B_SSEI16x8, B_NONE, B_NONE }, { T("VPCMPGTW"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT, 1, 0x000000FF, 0x00000065, 0x00, B_SREGI16x8|B_UPD, B_SVEXI16x8, B_SSEI16x8, B_NONE }, { T("PCMPGTD"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x0000660F, 0x00, B_SREGI32x4|B_UPD, B_SSEI32x4, B_NONE, B_NONE }, { T("VPCMPGTD"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT, 1, 0x000000FF, 0x00000066, 0x00, B_SREGI32x4|B_UPD, B_SVEXI32x4, B_SSEI32x4, B_NONE }, { T("PEXTRW"), D_MMX|D_MUSTNONE|D_REGISTER, 0, 2, 0x00C0FFFF, 0x00C0C50F, 0x00, B_REG32|B_CHG, B_MMX16x4|B_REGISTER, B_CONST8|B_COUNT, B_NONE }, { T("PEXTRW"), D_SSE|D_MUST66|D_REGISTER, 0, 2, 0x00C0FFFF, 0x00C0C50F, 0x00, B_REG32|B_CHG, B_SSEI16x8|B_REGISTER, B_CONST8|B_COUNT, B_NONE }, { T("VPEXTRW"), D_AVX|D_MUST66|D_REGISTER, DX_VEX|DX_LSHORT|DX_NOVREG, 1, 0x0000C0FF, 0x0000C0C5, 0x00, B_REG32|B_CHG, B_SSEI16x8|B_REGISTER, B_CONST8|B_COUNT, B_NONE }, { T("PINSRW"), D_MMX|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x0000C40F, 0x00, B_MREG16x4|B_UPD, B_INT16, B_CONST8|B_COUNT, B_NONE }, { T("PINSRW"), D_MMX|D_MUSTNONE, 0, 2, 0x00C0FFFF, 0x00C0C40F, 0x00, B_MREG16x4|B_UPD, B_INT32|B_REGISTER, B_CONST8|B_COUNT, B_NONE }, { T("PINSRW"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x0000C40F, 0x00, B_SREGI16x8|B_UPD, B_INT16, B_CONST8|B_COUNT, B_NONE }, { T("VPINSRW"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT, 1, 0x000000FF, 0x000000C4, 0x00, B_SREGI16x8|B_UPD, B_SVEXI16x8, B_INT16, B_CONST8|B_COUNT }, { T("PINSRW"), D_SSE|D_MUST66, 0, 2, 0x00C0FFFF, 0x00C0C40F, 0x00, B_SREGI16x8|B_UPD, B_INT32|B_REGISTER, B_CONST8|B_COUNT, B_NONE }, { T("VPINSRW"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT, 1, 0x0000C0FF, 0x0000C0C4, 0x00, B_SREGI16x8|B_UPD, B_SVEXI16x8, B_INT32|B_REGISTER, B_CONST8|B_COUNT }, { T("PMADDWD"), D_MMX|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x0000F50F, 0x00, B_MREG16x4|B_UPD, B_MMX16x4, B_NONE, B_NONE }, { T("PMADDWD"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x0000F50F, 0x00, B_SREGI16x8|B_UPD, B_SSEI16x8, B_NONE, B_NONE }, { T("VPMADDWD"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT, 1, 0x000000FF, 0x000000F5, 0x00, B_SREGI16x8|B_UPD, B_SVEXI16x8, B_SSEI16x8, B_NONE }, { T("PMAXSW"), D_MMX|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x0000EE0F, 0x00, B_MREG16x4|B_UPD, B_MMX16x4, B_NONE, B_NONE }, { T("PMAXSW"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x0000EE0F, 0x00, B_SREGI16x8|B_UPD, B_SSEI16x8, B_NONE, B_NONE }, { T("VPMAXSW"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT, 1, 0x000000FF, 0x000000EE, 0x00, B_SREGI16x8|B_UPD, B_SVEXI16x8, B_SSEI16x8, B_NONE }, { T("PMAXUB"), D_MMX|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x0000DE0F, 0x00, B_MREG8x8|B_UPD, B_MMX8x8, B_NONE, B_NONE }, { T("PMAXUB"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x0000DE0F, 0x00, B_SREGI8x16|B_UPD, B_SSEI8x16, B_NONE, B_NONE }, { T("VPMAXUB"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT, 1, 0x000000FF, 0x000000DE, 0x00, B_SREGI8x16|B_UPD, B_SVEXI8x16, B_SSEI8x16, B_NONE }, { T("PMINSW"), D_MMX|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x0000EA0F, 0x00, B_MREG16x4|B_UPD, B_MMX16x4, B_NONE, B_NONE }, { T("PMINSW"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x0000EA0F, 0x00, B_SREGI16x8|B_UPD, B_SSEI16x8, B_NONE, B_NONE }, { T("VPMINSW"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT, 1, 0x000000FF, 0x000000EA, 0x00, B_SREGI16x8|B_UPD, B_SVEXI16x8, B_SSEI16x8, B_NONE }, { T("PMINUB"), D_MMX|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x0000DA0F, 0x00, B_MREG8x8|B_UPD, B_MMX8x8, B_NONE, B_NONE }, { T("PMINUB"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x0000DA0F, 0x00, B_SREGI8x16|B_UPD, B_SSEI8x16, B_NONE, B_NONE }, { T("VPMINUB"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT, 1, 0x000000FF, 0x000000DA, 0x00, B_SREGI8x16|B_UPD, B_SVEXI8x16, B_SSEI8x16, B_NONE }, { T("PMOVMSKB"), D_MMX|D_MUSTNONE|D_REGISTER, 0, 2, 0x00C0FFFF, 0x00C0D70F, 0x00, B_REG32|B_CHG, B_MMX8x8|B_REGISTER, B_NONE, B_NONE }, { T("PMOVMSKB"), D_SSE|D_MUST66|D_REGISTER, 0, 2, 0x00C0FFFF, 0x00C0D70F, 0x00, B_REG32|B_CHG, B_SSEI8x16|B_REGISTER, B_NONE, B_NONE }, { T("VPMOVMSKB"), D_AVX|D_MUST66|D_REGISTER, DX_VEX|DX_LSHORT|DX_NOVREG, 1, 0x0000C0FF, 0x0000C0D7, 0x00, B_REG32|B_CHG, B_SSEI8x16|B_REGISTER, B_NONE, B_NONE }, { T("PMULHUW"), D_MMX|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x0000E40F, 0x00, B_MREG16x4|B_UPD, B_MMX16x4, B_NONE, B_NONE }, { T("PMULHUW"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x0000E40F, 0x00, B_SREGI16x8|B_UPD, B_SSEI16x8, B_NONE, B_NONE }, { T("VPMULHUW"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT, 1, 0x000000FF, 0x000000E4, 0x00, B_SREGI16x8|B_UPD, B_SVEXI16x8, B_SSEI16x8, B_NONE }, { T("PMULHW"), D_MMX|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x0000E50F, 0x00, B_MREG16x4|B_UPD, B_MMX16x4, B_NONE, B_NONE }, { T("PMULHW"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x0000E50F, 0x00, B_SREGI16x8|B_UPD, B_SSEI16x8, B_NONE, B_NONE }, { T("VPMULHW"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT, 1, 0x000000FF, 0x000000E5, 0x00, B_SREGI16x8|B_UPD, B_SVEXI16x8, B_SSEI16x8, B_NONE }, { T("PMULLW"), D_MMX|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x0000D50F, 0x00, B_MREG16x4|B_UPD, B_MMX16x4, B_NONE, B_NONE }, { T("PMULLW"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x0000D50F, 0x00, B_SREGI16x8|B_UPD, B_SSEI16x8, B_NONE, B_NONE }, { T("VPMULLW"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT, 1, 0x000000FF, 0x000000D5, 0x00, B_SREGI16x8|B_UPD, B_SVEXI16x8, B_SSEI16x8, B_NONE }, { T("PMULUDQ"), D_MMX|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x0000F40F, 0x00, B_MREG32x2|B_UPD, B_MMX32x2, B_NONE, B_NONE }, { T("PMULUDQ"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x0000F40F, 0x00, B_SREGI32x4|B_UPD, B_SSEI32x4, B_NONE, B_NONE }, { T("VPMULUDQ"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT, 1, 0x000000FF, 0x000000F4, 0x00, B_SREGI32x4|B_UPD, B_SVEXI32x4, B_SSEI32x4, B_NONE }, { T("POR"), D_MMX|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x0000EB0F, 0x00, B_MREG8x8|B_UPD, B_MMX8x8, B_NONE, B_NONE }, { T("POR"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x0000EB0F, 0x00, B_SREGI8x16|B_BINARY|B_UPD, B_SSEI8x16, B_NONE, B_NONE }, { T("VPOR"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT, 1, 0x000000FF, 0x000000EB, 0x00, B_SREGI8x16|B_BINARY|B_UPD, B_SVEXI8x16|B_BINARY, B_SSEI8x16, B_NONE }, { T("PSADBW"), D_MMX|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x0000F60F, 0x00, B_MREG8x8|B_UPD, B_MMX8x8, B_NONE, B_NONE }, { T("PSADBW"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x0000F60F, 0x00, B_SREGI8x16|B_UPD, B_SSEI8x16, B_NONE, B_NONE }, { T("VPSADBW"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT, 1, 0x000000FF, 0x000000F6, 0x00, B_SREGI8x16|B_UPD, B_SVEXI8x16, B_SSEI8x16, B_NONE }, { T("PSHUFD"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x0000700F, 0x00, B_SREGI32x4|B_CHG, B_SSEI32x4, B_CONST8|B_BINARY, B_NONE }, { T("VPSHUFD"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_NOVREG, 1, 0x000000FF, 0x00000070, 0x00, B_SREGI32x4|B_CHG, B_SSEI32x4, B_CONST8|B_BINARY, B_NONE }, { T("PSHUFHW"), D_SSE|D_MUSTF3, 0, 2, 0x0000FFFF, 0x0000700F, 0x00, B_SREGI16x8|B_CHG, B_SSEI16x8, B_CONST8|B_BINARY, B_NONE }, { T("VPSHUFHW"), D_AVX|D_MUSTF3, DX_VEX|DX_LSHORT|DX_NOVREG, 1, 0x000000FF, 0x00000070, 0x00, B_SREGI16x8|B_CHG, B_SSEI16x8, B_CONST8|B_BINARY, B_NONE }, { T("PSHUFLW"), D_SSE|D_MUSTF2, 0, 2, 0x0000FFFF, 0x0000700F, 0x00, B_SREGI16x8|B_CHG, B_SSEI16x8, B_CONST8|B_BINARY, B_NONE }, { T("VPSHUFLW"), D_AVX|D_MUSTF2, DX_VEX|DX_LSHORT|DX_NOVREG, 1, 0x000000FF, 0x00000070, 0x00, B_SREGI16x8|B_CHG, B_SSEI16x8, B_CONST8|B_BINARY, B_NONE }, { T("PSHUFW"), D_MMX|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x0000700F, 0x00, B_MREG16x4|B_CHG, B_MMX16x4, B_CONST8|B_BINARY, B_NONE }, { T("PSLLDQ"), D_SSE|D_MUST66|D_REGISTER, 0, 2, 0x00F8FFFF, 0x00F8730F, 0x00, B_SSEI8x16|B_REGISTER|B_UPD, B_CONST8|B_COUNT, B_NONE, B_NONE }, { T("VPSLLDQ"), D_AVX|D_MUST66|D_REGISTER, DX_VEX|DX_LSHORT, 1, 0x0000F8FF, 0x0000F873, 0x00, B_SVEXI8x16|B_UPD, B_SSEI8x16|B_REGISTER, B_CONST8|B_COUNT, B_NONE }, { T("PSLLW"), D_MMX|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x0000F10F, 0x00, B_MREG16x4|B_UPD, B_MMX16x4, B_NONE, B_NONE }, { T("PSLLW"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x0000F10F, 0x00, B_SREGI16x8|B_UPD, B_SSEI16x8, B_NONE, B_NONE }, { T("VPSLLW"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT, 1, 0x000000FF, 0x000000F1, 0x00, B_SREGI16x8|B_UPD, B_SVEXI16x8, B_SSEI16x8, B_NONE }, { T("PSLLW"), D_MMX|D_MUSTNONE|D_REGISTER, 0, 2, 0x00F8FFFF, 0x00F0710F, 0x00, B_MMX16x4|B_REGISTER|B_UPD, B_CONST8|B_COUNT, B_NONE, B_NONE }, { T("PSLLW"), D_SSE|D_MUST66|D_REGISTER, 0, 2, 0x00F8FFFF, 0x00F0710F, 0x00, B_SSEI16x8|B_REGISTER|B_UPD, B_CONST8|B_COUNT, B_NONE, B_NONE }, { T("VPSLLW"), D_AVX|D_MUST66|D_REGISTER, DX_VEX|DX_LSHORT, 1, 0x0000F8FF, 0x0000F071, 0x00, B_SVEXI16x8|B_UPD, B_SSEI16x8|B_REGISTER, B_CONST8|B_COUNT, B_NONE }, { T("PSLLD"), D_MMX|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x0000F20F, 0x00, B_MREG32x2|B_UPD, B_MMX32x2, B_NONE, B_NONE }, { T("PSLLD"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x0000F20F, 0x00, B_SREGI32x4|B_UPD, B_SSEI32x4, B_NONE, B_NONE }, { T("VPSLLD"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT, 1, 0x000000FF, 0x000000F2, 0x00, B_SREGI32x4|B_UPD, B_SVEXI32x4, B_SSEI32x4, B_NONE }, { T("PSLLD"), D_MMX|D_MUSTNONE|D_REGISTER, 0, 2, 0x00F8FFFF, 0x00F0720F, 0x00, B_MMX32x2|B_REGISTER|B_UPD, B_CONST8|B_COUNT, B_NONE, B_NONE }, { T("PSLLD"), D_SSE|D_MUST66|D_REGISTER, 0, 2, 0x00F8FFFF, 0x00F0720F, 0x00, B_SSEI32x4|B_REGISTER|B_UPD, B_CONST8|B_COUNT, B_NONE, B_NONE }, { T("VPSLLD"), D_AVX|D_MUST66|D_REGISTER, DX_VEX|DX_LSHORT, 1, 0x0000F8FF, 0x0000F072, 0x00, B_SVEXI32x4|B_UPD, B_SSEI32x4|B_REGISTER, B_CONST8|B_COUNT, B_NONE }, { T("PSLLQ"), D_MMX|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x0000F30F, 0x00, B_MREG64|B_UPD, B_MMX64, B_NONE, B_NONE }, { T("PSLLQ"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x0000F30F, 0x00, B_SREGI64x2|B_UPD, B_SSEI64x2, B_NONE, B_NONE }, { T("VPSLLQ"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT, 1, 0x000000FF, 0x000000F3, 0x00, B_SREGI64x2|B_UPD, B_SVEXI64x2, B_SSEI64x2, B_NONE }, { T("PSLLQ"), D_MMX|D_MUSTNONE|D_REGISTER, 0, 2, 0x00F8FFFF, 0x00F0730F, 0x00, B_MMX64|B_REGISTER|B_UPD, B_CONST8|B_COUNT, B_NONE, B_NONE }, { T("PSLLQ"), D_SSE|D_MUST66|D_REGISTER, 0, 2, 0x00F8FFFF, 0x00F0730F, 0x00, B_SSEI64x2|B_REGISTER|B_UPD, B_CONST8|B_COUNT, B_NONE, B_NONE }, { T("VPSLLQ"), D_AVX|D_MUST66|D_REGISTER, DX_VEX|DX_LSHORT, 1, 0x0000F8FF, 0x0000F073, 0x00, B_SVEXI64x2|B_UPD, B_SSEI64x2|B_REGISTER, B_CONST8|B_COUNT, B_NONE }, { T("PSRAW"), D_MMX|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x0000E10F, 0x00, B_MREG16x4|B_UPD, B_MMX16x4, B_NONE, B_NONE }, { T("PSRAW"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x0000E10F, 0x00, B_SREGI16x8|B_UPD, B_SSEI16x8, B_NONE, B_NONE }, { T("VPSRAW"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT, 1, 0x000000FF, 0x000000E1, 0x00, B_SREGI16x8|B_UPD, B_SVEXI16x8, B_SSEI16x8, B_NONE }, { T("PSRAW"), D_MMX|D_MUSTNONE|D_REGISTER, 0, 2, 0x00F8FFFF, 0x00E0710F, 0x00, B_MMX16x4|B_REGISTER|B_UPD, B_CONST8|B_COUNT, B_NONE, B_NONE }, { T("PSRAW"), D_SSE|D_MUST66|D_REGISTER, 0, 2, 0x00F8FFFF, 0x00E0710F, 0x00, B_SSEI16x8|B_REGISTER|B_UPD, B_CONST8|B_COUNT, B_NONE, B_NONE }, { T("VPSRAW"), D_AVX|D_MUST66|D_REGISTER, DX_VEX|DX_LSHORT, 1, 0x0000F8FF, 0x0000E071, 0x00, B_SVEXI16x8|B_UPD, B_SSEI16x8|B_REGISTER, B_CONST8|B_COUNT, B_NONE }, { T("PSRAD"), D_MMX|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x0000E20F, 0x00, B_MREG32x2|B_UPD, B_MMX32x2, B_NONE, B_NONE }, { T("PSRAD"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x0000E20F, 0x00, B_SREGI32x4|B_UPD, B_SSEI32x4, B_NONE, B_NONE }, { T("VPSRAD"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT, 1, 0x000000FF, 0x000000E2, 0x00, B_SREGI32x4|B_UPD, B_SVEXI32x4, B_SSEI32x4, B_NONE }, { T("PSRAD"), D_MMX|D_MUSTNONE|D_REGISTER, 0, 2, 0x00F8FFFF, 0x00E0720F, 0x00, B_MMX32x2|B_REGISTER|B_UPD, B_CONST8|B_COUNT, B_NONE, B_NONE }, { T("PSRAD"), D_SSE|D_MUST66|D_REGISTER, 0, 2, 0x00F8FFFF, 0x00E0720F, 0x00, B_SSEI32x4|B_REGISTER|B_UPD, B_CONST8|B_COUNT, B_NONE, B_NONE }, { T("VPSRAD"), D_AVX|D_MUST66|D_REGISTER, DX_VEX|DX_LSHORT, 1, 0x0000F8FF, 0x0000E072, 0x00, B_SVEXI32x4|B_UPD, B_SSEI32x4|B_REGISTER, B_CONST8|B_COUNT, B_NONE }, { T("PSRLDQ"), D_SSE|D_MUST66|D_REGISTER, 0, 2, 0x00F8FFFF, 0x00D8730F, 0x00, B_SSEI8x16|B_REGISTER|B_UPD, B_CONST8|B_COUNT, B_NONE, B_NONE }, { T("VPSRLDQ"), D_AVX|D_MUST66|D_REGISTER, DX_VEX|DX_LSHORT, 1, 0x0000F8FF, 0x0000D873, 0x00, B_SVEXI8x16|B_UPD, B_SSEI8x16|B_REGISTER, B_CONST8|B_COUNT, B_NONE }, { T("PSRLW"), D_MMX|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x0000D10F, 0x00, B_MREG16x4|B_UPD, B_MMX16x4, B_NONE, B_NONE }, { T("PSRLW"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x0000D10F, 0x00, B_SREGI16x8|B_UPD, B_SSEI16x8, B_NONE, B_NONE }, { T("VPSRLW"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT, 1, 0x000000FF, 0x000000D1, 0x00, B_SREGI16x8|B_UPD, B_SVEXI16x8, B_SSEI16x8, B_NONE }, { T("PSRLW"), D_MMX|D_MUSTNONE|D_REGISTER, 0, 2, 0x00F8FFFF, 0x00D0710F, 0x00, B_MMX16x4|B_REGISTER|B_UPD, B_CONST8|B_COUNT, B_NONE, B_NONE }, { T("PSRLW"), D_SSE|D_MUST66|D_REGISTER, 0, 2, 0x00F8FFFF, 0x00D0710F, 0x00, B_SSEI16x8|B_REGISTER|B_UPD, B_CONST8|B_COUNT, B_NONE, B_NONE }, { T("VPSRLW"), D_AVX|D_MUST66|D_REGISTER, DX_VEX|DX_LSHORT, 1, 0x0000F8FF, 0x0000D071, 0x00, B_SVEXI16x8|B_UPD, B_SSEI16x8|B_REGISTER, B_CONST8|B_COUNT, B_NONE }, { T("PSRLD"), D_MMX|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x0000D20F, 0x00, B_MREG32x2|B_UPD, B_MMX32x2, B_NONE, B_NONE }, { T("PSRLD"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x0000D20F, 0x00, B_SREGI32x4|B_UPD, B_SSEI32x4, B_NONE, B_NONE }, { T("VPSRLD"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT, 1, 0x000000FF, 0x000000D2, 0x00, B_SREGI32x4|B_UPD, B_SVEXI32x4, B_SSEI32x4, B_NONE }, { T("PSRLD"), D_MMX|D_MUSTNONE|D_REGISTER, 0, 2, 0x00F8FFFF, 0x00D0720F, 0x00, B_MMX32x2|B_REGISTER|B_UPD, B_CONST8|B_COUNT, B_NONE, B_NONE }, { T("PSRLD"), D_SSE|D_MUST66|D_REGISTER, 0, 2, 0x00F8FFFF, 0x00D0720F, 0x00, B_SSEI32x4|B_REGISTER|B_UPD, B_CONST8|B_COUNT, B_NONE, B_NONE }, { T("VPSRLD"), D_AVX|D_MUST66|D_REGISTER, DX_VEX|DX_LSHORT, 1, 0x0000F8FF, 0x0000D072, 0x00, B_SVEXI32x4|B_UPD, B_SSEI32x4|B_REGISTER, B_CONST8|B_COUNT, B_NONE }, { T("PSRLQ"), D_MMX|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x0000D30F, 0x00, B_MREG64|B_UPD, B_MMX64, B_NONE, B_NONE }, { T("PSRLQ"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x0000D30F, 0x00, B_SREGI64x2|B_UPD, B_SSEI64x2, B_NONE, B_NONE }, { T("VPSRLQ"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT, 1, 0x000000FF, 0x000000D3, 0x00, B_SREGI64x2|B_UPD, B_SVEXI64x2, B_SSEI64x2, B_NONE }, { T("PSRLQ"), D_MMX|D_MUSTNONE|D_REGISTER, 0, 2, 0x00F8FFFF, 0x00D0730F, 0x00, B_MMX64|B_REGISTER|B_UPD, B_CONST8|B_COUNT, B_NONE, B_NONE }, { T("PSRLQ"), D_SSE|D_MUST66|D_REGISTER, 0, 2, 0x00F8FFFF, 0x00D0730F, 0x00, B_SSEI64x2|B_REGISTER|B_UPD, B_CONST8|B_COUNT, B_NONE, B_NONE }, { T("VPSRLQ"), D_AVX|D_MUST66|D_REGISTER, DX_VEX|DX_LSHORT, 1, 0x0000F8FF, 0x0000D073, 0x00, B_SVEXI64x2|B_UPD, B_SSEI64x2|B_REGISTER, B_CONST8|B_COUNT, B_NONE }, { T("PSUBB"), D_MMX|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x0000F80F, 0x00, B_MREG8x8|B_UPD, B_MMX8x8, B_NONE, B_NONE }, { T("PSUBW"), D_MMX|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x0000F90F, 0x00, B_MREG16x4|B_UPD, B_MMX16x4, B_NONE, B_NONE }, { T("PSUBD"), D_MMX|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x0000FA0F, 0x00, B_MREG32x2|B_UPD, B_MMX32x2, B_NONE, B_NONE }, { T("PSUBB"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x0000F80F, 0x00, B_SREGI8x16|B_UPD, B_SSEI8x16, B_NONE, B_NONE }, { T("VPSUBB"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT, 1, 0x000000FF, 0x000000F8, 0x00, B_SREGI8x16|B_UPD, B_SVEXI8x16, B_SSEI8x16, B_NONE }, { T("PSUBW"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x0000F90F, 0x00, B_SREGI16x8|B_UPD, B_SSEI16x8, B_NONE, B_NONE }, { T("VPSUBW"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT, 1, 0x000000FF, 0x000000F9, 0x00, B_SREGI16x8|B_UPD, B_SVEXI16x8, B_SSEI16x8, B_NONE }, { T("PSUBD"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x0000FA0F, 0x00, B_SREGI32x4|B_UPD, B_SSEI32x4, B_NONE, B_NONE }, { T("VPSUBD"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT, 1, 0x000000FF, 0x000000FA, 0x00, B_SREGI32x4|B_UPD, B_SVEXI32x4, B_SSEI32x4, B_NONE }, { T("PSUBQ"), D_MMX|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x0000FB0F, 0x00, B_MREG64|B_UPD, B_MMX64, B_NONE, B_NONE }, { T("PSUBQ"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x0000FB0F, 0x00, B_SREGI64x2|B_UPD, B_SSEI64x2, B_NONE, B_NONE }, { T("VPSUBQ"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT, 1, 0x000000FF, 0x000000FB, 0x00, B_SREGI64x2|B_UPD, B_SVEXI64x2, B_SSEI64x2, B_NONE }, { T("PSUBSB"), D_MMX|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x0000E80F, 0x00, B_MREG8x8|B_UPD, B_MMX8x8, B_NONE, B_NONE }, { T("PSUBSW"), D_MMX|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x0000E90F, 0x00, B_MREG16x4|B_UPD, B_MMX16x4, B_NONE, B_NONE }, { T("PSUBSB"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x0000E80F, 0x00, B_SREGI8x16|B_UPD, B_SSEI8x16, B_NONE, B_NONE }, { T("VPSUBSB"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT, 1, 0x000000FF, 0x000000E8, 0x00, B_SREGI8x16|B_UPD, B_SVEXI8x16, B_SSEI8x16, B_NONE }, { T("PSUBSW"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x0000E90F, 0x00, B_SREGI16x8|B_UPD, B_SSEI16x8, B_NONE, B_NONE }, { T("VPSUBSW"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT, 1, 0x000000FF, 0x000000E9, 0x00, B_SREGI16x8|B_UPD, B_SVEXI16x8, B_SSEI16x8, B_NONE }, { T("PSUBUSB"), D_MMX|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x0000D80F, 0x00, B_MREG8x8|B_UPD, B_MMX8x8, B_NONE, B_NONE }, { T("PSUBUSW"), D_MMX|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x0000D90F, 0x00, B_MREG16x4|B_UPD, B_MMX16x4, B_NONE, B_NONE }, { T("PSUBUSB"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x0000D80F, 0x00, B_SREGI8x16|B_UPD, B_SSEI8x16, B_NONE, B_NONE }, { T("VPSUBUSB"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT, 1, 0x000000FF, 0x000000D8, 0x00, B_SREGI8x16|B_UPD, B_SVEXI8x16, B_SSEI8x16, B_NONE }, { T("PSUBUSW"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x0000D90F, 0x00, B_SREGI16x8|B_UPD, B_SSEI16x8, B_NONE, B_NONE }, { T("VPSUBUSW"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT, 1, 0x000000FF, 0x000000D9, 0x00, B_SREGI16x8|B_UPD, B_SVEXI16x8, B_SSEI16x8, B_NONE }, { T("PUNPCKHBW"), D_MMX|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x0000680F, 0x00, B_MREG8x8|B_UPD, B_MMX8x8, B_NONE, B_NONE }, { T("PUNPCKHBW"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x0000680F, 0x00, B_SREGI8x16|B_UPD, B_SSEI8x16, B_NONE, B_NONE }, { T("VPUNPCKHBW"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT, 1, 0x000000FF, 0x00000068, 0x00, B_SREGI8x16|B_UPD, B_SVEXI8x16, B_SSEI8x16, B_NONE }, { T("PUNPCKHWD"), D_MMX|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x0000690F, 0x00, B_MREG16x4|B_UPD, B_MMX16x4, B_NONE, B_NONE }, { T("PUNPCKHWD"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x0000690F, 0x00, B_SREGI16x8|B_UPD, B_SSEI16x8, B_NONE, B_NONE }, { T("VPUNPCKHWD"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT, 1, 0x000000FF, 0x00000069, 0x00, B_SREGI16x8|B_UPD, B_SVEXI16x8, B_SSEI16x8, B_NONE }, { T("PUNPCKHDQ"), D_MMX|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x00006A0F, 0x00, B_MREG32x2|B_UPD, B_MMX32x2, B_NONE, B_NONE }, { T("PUNPCKHDQ"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x00006A0F, 0x00, B_SREGI32x4|B_UPD, B_SSEI32x4, B_NONE, B_NONE }, { T("VPUNPCKHDQ"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT, 1, 0x000000FF, 0x0000006A, 0x00, B_SREGI32x4|B_UPD, B_SVEXI32x4, B_SSEI32x4, B_NONE }, { T("PUNPCKHQDQ"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x00006D0F, 0x00, B_SREGI32x4|B_UPD, B_SSEI32x4, B_NONE, B_NONE }, { T("VPUNPCKHQDQ"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT, 1, 0x000000FF, 0x0000006D, 0x00, B_SREGI32x4|B_UPD, B_SVEXI32x4, B_SSEI32x4, B_NONE }, { T("PUNPCKLBW"), D_MMX|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x0000600F, 0x00, B_MREG8x8|B_UPD, B_MMX8x8, B_NONE, B_NONE }, { T("PUNPCKLBW"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x0000600F, 0x00, B_SREGI8x16|B_UPD, B_SSEI8x16, B_NONE, B_NONE }, { T("VPUNPCKLBW"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT, 1, 0x000000FF, 0x00000060, 0x00, B_SREGI8x16|B_UPD, B_SVEXI8x16, B_SSEI8x16, B_NONE }, { T("PUNPCKLWD"), D_MMX|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x0000610F, 0x00, B_MREG16x4|B_UPD, B_MMX16x4, B_NONE, B_NONE }, { T("PUNPCKLWD"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x0000610F, 0x00, B_SREGI16x8|B_UPD, B_SSEI16x8, B_NONE, B_NONE }, { T("VPUNPCKLWD"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT, 1, 0x000000FF, 0x00000061, 0x00, B_SREGI16x8|B_UPD, B_SVEXI16x8, B_SSEI16x8, B_NONE }, { T("PUNPCKLDQ"), D_MMX|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x0000620F, 0x00, B_MREG32x2|B_UPD, B_MMX32x2, B_NONE, B_NONE }, { T("PUNPCKLDQ"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x0000620F, 0x00, B_SREGI32x4|B_UPD, B_SSEI32x4, B_NONE, B_NONE }, { T("VPUNPCKLDQ"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT, 1, 0x000000FF, 0x00000062, 0x00, B_SREGI32x4|B_UPD, B_SVEXI32x4, B_SSEI32x4, B_NONE }, { T("PUNPCKLQDQ"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x00006C0F, 0x00, B_SREGI32x4|B_UPD, B_SSEI32x4, B_NONE, B_NONE }, { T("VPUNPCKLQDQ"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT, 1, 0x000000FF, 0x0000006C, 0x00, B_SREGI32x4|B_UPD, B_SVEXI32x4, B_SSEI32x4, B_NONE }, { T("PXOR"), D_MMX|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x0000EF0F, 0x00, B_MREG8x8|B_UPD, B_MMX8x8, B_NONE, B_NONE }, { T("PXOR"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x0000EF0F, 0x00, B_SREGI8x16|B_BINARY|B_UPD, B_SSEI8x16, B_NONE, B_NONE }, { T("VPXOR"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT, 1, 0x000000FF, 0x000000EF, 0x00, B_SREGI8x16|B_BINARY|B_UPD, B_SVEXI8x16|B_BINARY, B_SSEI8x16, B_NONE }, { T("RCPPS"), D_SSE|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x0000530F, 0x00, B_SREGF32x4|B_CHG, B_SSEF32x4, B_NONE, B_NONE }, { T("VRCPPS"), D_AVX|D_MUSTNONE, DX_VEX|DX_LBOTH|DX_NOVREG, 1, 0x000000FF, 0x00000053, 0x00, B_SREGF32x4|B_CHG, B_SSEF32x4, B_NONE, B_NONE }, { T("RCPSS"), D_SSE|D_MUSTF3, 0, 2, 0x0000FFFF, 0x0000530F, 0x00, B_SREGF32L|B_CHG, B_SSEF32L, B_NONE, B_NONE }, { T("VRCPSS"), D_AVX|D_MUSTF3, DX_VEX|DX_IGNOREL, 1, 0x000000FF, 0x00000053, 0x00, B_SREGF32L|B_CHG, B_SVEXF32L|B_CHG, B_SSEF32L, B_NONE }, { T("RSQRTPS"), D_SSE|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x0000520F, 0x00, B_SREGF32x4|B_CHG, B_SSEF32x4, B_NONE, B_NONE }, { T("VRSQRTPS"), D_AVX|D_MUSTNONE, DX_VEX|DX_LBOTH|DX_NOVREG, 1, 0x000000FF, 0x00000052, 0x00, B_SREGF32x4|B_CHG, B_SSEF32x4, B_NONE, B_NONE }, { T("RSQRTSS"), D_SSE|D_MUSTF3, 0, 2, 0x0000FFFF, 0x0000520F, 0x00, B_SREGF32L|B_CHG, B_SSEF32L, B_NONE, B_NONE }, { T("VRSQRTSS"), D_AVX|D_MUSTF3, DX_VEX|DX_IGNOREL, 1, 0x000000FF, 0x00000052, 0x00, B_SREGF32L|B_CHG, B_SVEXF32L, B_SSEF32L, B_NONE }, { T("SHUFPD"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x0000C60F, 0x00, B_SREGF64x2|B_UPD, B_SSEF64x2, B_CONST8|B_BINARY, B_NONE }, { T("VSHUFPD"), D_AVX|D_MUST66, DX_VEX|DX_LBOTH, 1, 0x000000FF, 0x000000C6, 0x00, B_SREGF64x2|B_UPD, B_SVEXF64x2, B_SSEF64x2, B_CONST8|B_BINARY }, { T("SHUFPS"), D_SSE|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x0000C60F, 0x00, B_SREGF32x4|B_UPD, B_SSEF32x4, B_CONST8|B_BINARY, B_NONE }, { T("VSHUFPS"), D_AVX|D_MUSTNONE, DX_VEX|DX_LBOTH, 1, 0x000000FF, 0x000000C6, 0x00, B_SREGF32x4|B_UPD, B_SVEXF32x4, B_SSEF32x4, B_CONST8|B_BINARY }, { T("SQRTPD"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x0000510F, 0x00, B_SREGF64x2|B_CHG, B_SSEF64x2, B_NONE, B_NONE }, { T("VSQRTPD"), D_AVX|D_MUST66, DX_VEX|DX_LBOTH|DX_NOVREG, 1, 0x000000FF, 0x00000051, 0x00, B_SREGF64x2|B_CHG, B_SSEF64x2, B_NONE, B_NONE }, { T("SQRTPS"), D_SSE|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x0000510F, 0x00, B_SREGF32x4|B_CHG, B_SSEF32x4, B_NONE, B_NONE }, { T("VSQRTPS"), D_AVX|D_MUSTNONE, DX_VEX|DX_LBOTH|DX_NOVREG, 1, 0x000000FF, 0x00000051, 0x00, B_SREGF32x4|B_CHG, B_SSEF32x4, B_NONE, B_NONE }, { T("SQRTSD"), D_SSE|D_MUSTF2, 0, 2, 0x0000FFFF, 0x0000510F, 0x00, B_SREGF64L|B_CHG, B_SSEF64L, B_NONE, B_NONE }, { T("VSQRTSD"), D_AVX|D_MUSTF2, DX_VEX|DX_IGNOREL, 1, 0x000000FF, 0x00000051, 0x00, B_SREGF64L|B_CHG, B_SVEXF64L, B_SSEF64L, B_NONE }, { T("SQRTSS"), D_SSE|D_MUSTF3, 0, 2, 0x0000FFFF, 0x0000510F, 0x00, B_SREGF32L|B_CHG, B_SSEF32L, B_NONE, B_NONE }, { T("VSQRTSS"), D_AVX|D_MUSTF3, DX_VEX|DX_IGNOREL, 1, 0x000000FF, 0x00000051, 0x00, B_SREGF32L|B_CHG, B_SVEXF32L, B_SSEF32L, B_NONE }, { T("SUBPD"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x00005C0F, 0x00, B_SREGF64x2|B_UPD, B_SSEF64x2, B_NONE, B_NONE }, { T("VSUBPD"), D_AVX|D_MUST66, DX_VEX|DX_LBOTH, 1, 0x000000FF, 0x0000005C, 0x00, B_SREGF64x2|B_UPD, B_SVEXF64x2, B_SSEF64x2, B_NONE }, { T("SUBPS"), D_SSE|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x00005C0F, 0x00, B_SREGF32x4|B_UPD, B_SSEF32x4, B_NONE, B_NONE }, { T("VSUBPS"), D_AVX|D_MUSTNONE, DX_VEX|DX_LBOTH, 1, 0x000000FF, 0x0000005C, 0x00, B_SREGF32x4|B_UPD, B_SVEXF32x4, B_SSEF32x4, B_NONE }, { T("SUBSD"), D_SSE|D_MUSTF2, 0, 2, 0x0000FFFF, 0x00005C0F, 0x00, B_SREGF64L|B_UPD, B_SSEF64L, B_NONE, B_NONE }, { T("VSUBSD"), D_AVX|D_MUSTF2, DX_VEX|DX_IGNOREL, 1, 0x000000FF, 0x0000005C, 0x00, B_SREGF64L|B_UPD, B_SVEXF64L, B_SSEF64L, B_NONE }, { T("SUBSS"), D_SSE|D_MUSTF3, 0, 2, 0x0000FFFF, 0x00005C0F, 0x00, B_SREGF32L|B_UPD, B_SSEF32L, B_NONE, B_NONE }, { T("VSUBSS"), D_AVX|D_MUSTF3, DX_VEX|DX_IGNOREL, 1, 0x000000FF, 0x0000005C, 0x00, B_SREGF32L|B_UPD, B_SVEXF32L, B_SSEF32L, B_NONE }, { T("UNPCKHPD"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x0000150F, 0x00, B_SREGF64x2|B_UPD, B_SSEF64x2, B_NONE, B_NONE }, { T("VUNPCKHPD"), D_AVX|D_MUST66, DX_VEX|DX_LBOTH, 1, 0x000000FF, 0x00000015, 0x00, B_SREGF64x2|B_UPD, B_SVEXF64x2, B_SSEF64x2, B_NONE }, { T("UNPCKHPS"), D_SSE|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x0000150F, 0x00, B_SREGF32x4|B_UPD, B_SSEF32x4, B_NONE, B_NONE }, { T("VUNPCKHPS"), D_AVX|D_MUSTNONE, DX_VEX|DX_LBOTH, 1, 0x000000FF, 0x00000015, 0x00, B_SREGF32x4|B_UPD, B_SVEXF32x4, B_SSEF32x4, B_NONE }, { T("UNPCKLPD"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x0000140F, 0x00, B_SREGF64x2|B_UPD, B_SSEF64x2, B_NONE, B_NONE }, { T("VUNPCKLPD"), D_AVX|D_MUST66, DX_VEX|DX_LBOTH, 1, 0x000000FF, 0x00000014, 0x00, B_SREGF64x2|B_UPD, B_SVEXF64x2, B_SSEF64x2, B_NONE }, { T("UNPCKLPS"), D_SSE|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x0000140F, 0x00, B_SREGF32x4|B_UPD, B_SSEF32x4, B_NONE, B_NONE }, { T("VUNPCKLPS"), D_AVX|D_MUSTNONE, DX_VEX|DX_LBOTH, 1, 0x000000FF, 0x00000014, 0x00, B_SREGF32x4|B_UPD, B_SVEXF32x4, B_SSEF32x4, B_NONE }, { T("UCOMISD"), D_SSE|D_MUST66|D_ALLFLAGS, 0, 2, 0x0000FFFF, 0x00002E0F, 0x00, B_SREGF64L, B_SSEF64L, B_NONE, B_NONE }, { T("VUCOMISD"), D_AVX|D_MUST66|D_ALLFLAGS, DX_VEX|DX_IGNOREL|DX_NOVREG, 1, 0x000000FF, 0x0000002E, 0x00, B_SREGF64L, B_SSEF64L, B_NONE, B_NONE }, { T("UCOMISS"), D_SSE|D_MUSTNONE|D_ALLFLAGS, 0, 2, 0x0000FFFF, 0x00002E0F, 0x00, B_SREGF32L, B_SSEF32L, B_NONE, B_NONE }, { T("VUCOMISS"), D_AVX|D_MUSTNONE|D_ALLFLAGS, DX_VEX|DX_IGNOREL|DX_NOVREG, 1, 0x000000FF, 0x0000002E, 0x00, B_SREGF32L, B_SSEF32L, B_NONE, B_NONE }, { T("XORPD"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x0000570F, 0x00, B_SREGF64x2|B_UPD, B_SSEF64x2, B_NONE, B_NONE }, { T("VXORPD"), D_AVX|D_MUST66, DX_VEX|DX_LBOTH, 1, 0x000000FF, 0x00000057, 0x00, B_SREGF64x2|B_UPD, B_SVEXF64x2, B_SSEF64x2, B_NONE }, { T("XORPS"), D_SSE|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x0000570F, 0x00, B_SREGF32x4|B_UPD, B_SSEF32x4, B_NONE, B_NONE }, { T("VXORPS"), D_AVX|D_MUSTNONE, DX_VEX|DX_LBOTH, 1, 0x000000FF, 0x00000057, 0x00, B_SREGF32x4|B_UPD, B_SVEXF32x4, B_SSEF32x4, B_NONE }, { T("FXRSTOR"), D_SSE|D_MEMORY, 0, 2, 0x0038FFFF, 0x0008AE0F, 0x00, B_LONGDATA|B_MEMORY, B_NONE, B_NONE, B_NONE }, { T("FXSAVE"), D_SSE|D_MEMORY, 0, 2, 0x0038FFFF, 0x0000AE0F, 0x00, B_LONGDATA|B_MEMORY|B_CHG, B_NONE, B_NONE, B_NONE }, { T("LFENCE"), D_SSE, 0, 3, 0x00FFFFFF, 0x00E8AE0F, 0x00, B_NONE, B_NONE, B_NONE, B_NONE }, { T("PREFETCHT0"), D_SSE|D_MUSTNONE|D_MEMORY, 0, 2, 0x0038FFFF, 0x0008180F, 0x00, B_ANYMEM|B_MEMORY, B_NONE, B_NONE, B_NONE }, { T("PREFETCHT1"), D_SSE|D_MUSTNONE|D_MEMORY, 0, 2, 0x0038FFFF, 0x0010180F, 0x00, B_ANYMEM|B_MEMORY, B_NONE, B_NONE, B_NONE }, { T("PREFETCHT2"), D_SSE|D_MUSTNONE|D_MEMORY, 0, 2, 0x0038FFFF, 0x0018180F, 0x00, B_ANYMEM|B_MEMORY, B_NONE, B_NONE, B_NONE }, { T("PREFETCHNTA"), D_SSE|D_MUSTNONE|D_MEMORY, 0, 2, 0x0038FFFF, 0x0000180F, 0x00, B_ANYMEM|B_MEMORY, B_NONE, B_NONE, B_NONE }, { T("NOP"), D_SSE|D_MUSTNONE|D_MEMORY|D_UNDOC, DX_NOP, 2, 0x0020FFFF, 0x0020180F, 0x00, B_ANYMEM|B_MEMORY, B_NONE, B_NONE, B_NONE }, { T("PREFETCH"), D_SSE|D_MUSTNONE|D_MEMORY, 0, 2, 0x0038FFFF, 0x00000D0F, 0x00, B_ANYMEM|B_MEMORY, B_NONE, B_NONE, B_NONE }, { T("PREFETCHW"), D_SSE|D_MUSTNONE|D_MEMORY, 0, 2, 0x0038FFFF, 0x00080D0F, 0x00, B_ANYMEM|B_MEMORY, B_NONE, B_NONE, B_NONE }, { T("SFENCE"), D_SSE, 0, 3, 0x00FFFFFF, 0x00F8AE0F, 0x00, B_NONE, B_NONE, B_NONE, B_NONE }, { T("BLENDPD"), D_SSE|D_MUST66, 0, 3, 0x00FFFFFF, 0x000D3A0F, 0x00, B_SREGF64x2|B_UPD, B_SSEF64x2, B_CONST8|B_BINARY, B_NONE }, { T("VBLENDPD"), D_AVX|D_MUST66, DX_VEX|DX_LBOTH|DX_LEAD3A, 1, 0x000000FF, 0x0000000D, 0x00, B_SREGF64x2|B_UPD, B_SVEXF64x2, B_SSEF64x2, B_CONST8|B_BINARY }, { T("BLENDPS"), D_SSE|D_MUST66, 0, 3, 0x00FFFFFF, 0x000C3A0F, 0x00, B_SREGF32x4|B_UPD, B_SSEF32x4, B_CONST8|B_BINARY, B_NONE }, { T("VBLENDPS"), D_AVX|D_MUST66, DX_VEX|DX_LBOTH|DX_LEAD3A, 1, 0x000000FF, 0x0000000C, 0x00, B_SREGF32x4|B_UPD, B_SVEXF32x4, B_SSEF32x4, B_CONST8|B_BINARY }, { T("BLENDVPD"), D_SSE|D_MUST66, 0, 3, 0x00FFFFFF, 0x0015380F, 0x00, B_SREGF64x2|B_UPD, B_SSEF64x2, B_XMM0I64x2, B_NONE }, { T("BLENDVPD"), D_SSE|D_MUST66, 0, 3, 0x00FFFFFF, 0x0015380F, 0x00, B_SREGF64x2|B_UPD, B_SSEF64x2, B_XMM0I64x2|B_PSEUDO, B_NONE }, { T("VBLENDVPD"), D_AVX|D_MUST66, DX_VEX|DX_LBOTH|DX_W0|DX_LEAD3A, 1, 0x000000FF, 0x0000004B, 0x00, B_SREGF64x2|B_UPD, B_SVEXF64x2, B_SSEF64x2, B_SIMMI8x16 }, { T("BLENDVPS"), D_SSE|D_MUST66, 0, 3, 0x00FFFFFF, 0x0014380F, 0x00, B_SREGF32x4|B_UPD, B_SSEF32x4, B_XMM0I32x4, B_NONE }, { T("BLENDVPS"), D_SSE|D_MUST66, 0, 3, 0x00FFFFFF, 0x0014380F, 0x00, B_SREGF32x4|B_UPD, B_SSEF32x4, B_XMM0I32x4|B_PSEUDO, B_NONE }, { T("VBLENDVPS"), D_AVX|D_MUST66, DX_VEX|DX_LBOTH|DX_W0|DX_LEAD3A, 1, 0x000000FF, 0x0000004A, 0x00, B_SREGF32x4|B_UPD, B_SVEXF32x4, B_SSEF32x4, B_SIMMI8x16 }, { T("CRC32"), D_CMD|D_NEEDF2, 0, 3, 0x00FFFFFF, 0x00F0380F, 0x00, B_REG32|B_NOADDR|B_UPD, B_INT8|B_SHOWSIZE, B_NONE, B_NONE }, { T("CRC32"), D_CMD|D_NEEDF2, 0, 3, 0x00FFFFFF, 0x00F1380F, 0x00, B_REG32|B_NOADDR|B_UPD, B_INT1632|B_NOADDR|B_SHOWSIZE, B_NONE, B_NONE }, { T("DPPD"), D_SSE|D_MUST66, 0, 3, 0x00FFFFFF, 0x00413A0F, 0x00, B_SREGF64x2|B_UPD, B_SSEF64x2, B_CONST8|B_BINARY, B_NONE }, { T("VDPPD"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD3A, 1, 0x000000FF, 0x00000041, 0x00, B_SREGF64x2|B_UPD, B_SVEXF64x2, B_SSEF64x2, B_CONST8|B_BINARY }, { T("DPPS"), D_SSE|D_MUST66, 0, 3, 0x00FFFFFF, 0x00403A0F, 0x00, B_SREGF32x4|B_UPD, B_SSEF32x4, B_CONST8|B_BINARY, B_NONE }, { T("VDPPS"), D_AVX|D_MUST66, DX_VEX|DX_LBOTH|DX_LEAD3A, 1, 0x000000FF, 0x00000040, 0x00, B_SREGF32x4|B_UPD, B_SVEXF32x4, B_SSEF32x4, B_CONST8|B_BINARY }, { T("EXTRACTPS"), D_SSE|D_MUST66, 0, 3, 0x00FFFFFF, 0x00173A0F, 0x00, B_INT32|B_CHG, B_SREGF32x4, B_CONST8|B_BINARY, B_NONE }, { T("VEXTRACTPS"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_NOVREG|DX_LEAD3A, 1, 0x000000FF, 0x00000017, 0x00, B_INT32|B_CHG, B_SREGF32x4, B_CONST8|B_BINARY, B_NONE }, { T("INSERTPS"), D_SSE|D_MUST66, 0, 3, 0x00FFFFFF, 0x00213A0F, 0x00, B_SREGF32x4|B_UPD, B_SSEF32L, B_CONST8|B_BINARY, B_NONE }, { T("VINSERTPS"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD3A, 1, 0x000000FF, 0x00000021, 0x00, B_SREGF32x4|B_UPD, B_SVEXF32x4, B_SSEF32L, B_CONST8|B_BINARY }, { T("MOVNTDQA"), D_SSE|D_MUST66|D_MEMORY, 0, 3, 0x00FFFFFF, 0x002A380F, 0x00, B_SREGI8x16|B_BINARY|B_CHG, B_SSEI8x16|B_MEMORY, B_NONE, B_NONE }, { T("VMOVNTDQA"), D_AVX|D_MUST66|D_MEMORY, DX_VEX|DX_LSHORT|DX_NOVREG|DX_LEAD38, 1, 0x000000FF, 0x0000002A, 0x00, B_SREGI8x16|B_BINARY|B_CHG, B_SSEI8x16|B_MEMORY, B_NONE, B_NONE }, { T("MPSADBW"), D_SSE|D_MUST66, 0, 3, 0x00FFFFFF, 0x00423A0F, 0x00, B_SREGI8x16|B_UPD, B_SSEI8x16, B_CONST8|B_BINARY, B_NONE }, { T("VMPSADBW"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD3A, 1, 0x000000FF, 0x00000042, 0x00, B_SREGI8x16|B_UPD, B_SVEXI8x16, B_SSEI8x16, B_CONST8|B_BINARY }, { T("PACKUSDW"), D_SSE|D_MUST66, 0, 3, 0x00FFFFFF, 0x002B380F, 0x00, B_SREGI32x4|B_UPD, B_SSEI32x4, B_NONE, B_NONE }, { T("VPACKUSDW"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD38, 1, 0x000000FF, 0x0000002B, 0x00, B_SREGI32x4|B_UPD, B_SVEXI32x4|B_UPD, B_SSEI32x4, B_NONE }, { T("PBLENDVB"), D_SSE|D_MUST66, 0, 3, 0x00FFFFFF, 0x0010380F, 0x00, B_SREGI8x16|B_UPD, B_SSEI8x16, B_XMM0I8x16, B_NONE }, { T("PBLENDVB"), D_SSE|D_MUST66, 0, 3, 0x00FFFFFF, 0x0010380F, 0x00, B_SREGI8x16|B_UPD, B_SSEI8x16, B_XMM0I8x16|B_PSEUDO, B_NONE }, { T("VPBLENDVB"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_W0|DX_LEAD3A, 1, 0x000000FF, 0x0000004C, 0x00, B_SREGI8x16|B_UPD, B_SVEXI8x16, B_SSEI8x16, B_SIMMI8x16 }, { T("PBLENDW"), D_SSE|D_MUST66, 0, 3, 0x00FFFFFF, 0x000E3A0F, 0x00, B_SREGI16x8|B_UPD, B_SSEI16x8, B_CONST8|B_BINARY, B_NONE }, { T("VPBLENDW"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD3A, 1, 0x000000FF, 0x0000000E, 0x00, B_SREGI16x8|B_UPD, B_SVEXI16x8, B_SSEI16x8, B_CONST8|B_BINARY }, { T("PCLMULLQLQDQ"), D_SSE|D_POSTBYTE|D_MUST66, 0, 3, 0x00FFFFFF, 0x00443A0F, 0x00, B_SREGI64x2|B_UPD, B_SSEI64x2, B_NONE, B_NONE }, { T("VPCLMULLQLQDQ"), D_AVX|D_POSTBYTE|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD3A, 1, 0x000000FF, 0x00000044, 0x00, B_SREGI64x2|B_UPD, B_SVEXI64x2, B_SSEI64x2, B_NONE }, { T("PCLMULHQLQDQ"), D_SSE|D_POSTBYTE|D_MUST66, 0, 3, 0x00FFFFFF, 0x00443A0F, 0x01, B_SREGI64x2|B_UPD, B_SSEI64x2, B_NONE, B_NONE }, { T("VPCLMULHQLQDQ"), D_AVX|D_POSTBYTE|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD3A, 1, 0x000000FF, 0x00000044, 0x01, B_SREGI64x2|B_UPD, B_SVEXI64x2, B_SSEI64x2, B_NONE }, { T("PCLMULLQHDQ"), D_SSE|D_POSTBYTE|D_MUST66, 0, 3, 0x00FFFFFF, 0x00443A0F, 0x10, B_SREGI64x2|B_UPD, B_SSEI64x2, B_NONE, B_NONE }, { T("VPCLMULLQHDQ"), D_AVX|D_POSTBYTE|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD3A, 1, 0x000000FF, 0x00000044, 0x10, B_SREGI64x2|B_UPD, B_SVEXI64x2, B_SSEI64x2, B_NONE }, { T("PCLMULHQHDQ"), D_SSE|D_POSTBYTE|D_MUST66, 0, 3, 0x00FFFFFF, 0x00443A0F, 0x11, B_SREGI64x2|B_UPD, B_SSEI64x2, B_NONE, B_NONE }, { T("VPCLMULHQHDQ"), D_AVX|D_POSTBYTE|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD3A, 1, 0x000000FF, 0x00000044, 0x11, B_SREGI64x2|B_UPD, B_SVEXI64x2, B_SSEI64x2, B_NONE }, { T("PCLMULQDQ"), D_SSE|D_MUST66, 0, 3, 0x00FFFFFF, 0x00443A0F, 0x00, B_SREGI64x2|B_UPD, B_SSEI64x2, B_CONST8|B_BINARY, B_NONE }, { T("VPCLMULQDQ"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD3A, 1, 0x000000FF, 0x00000044, 0x00, B_SREGI64x2|B_UPD, B_SVEXI64x2, B_SSEI64x2, B_CONST8|B_BINARY }, { T("PCMPEQQ"), D_SSE|D_MUST66, 0, 3, 0x00FFFFFF, 0x0029380F, 0x00, B_SREGI64x2|B_UPD, B_SSEI64x2, B_NONE, B_NONE }, { T("VPCMPEQQ"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD38, 1, 0x000000FF, 0x00000029, 0x00, B_SREGI64x2|B_UPD, B_SVEXI64x2, B_SSEI64x2, B_NONE }, { T("PCMPESTRI"), D_SSE|D_MUST66|D_ALLFLAGS, 0, 3, 0x00FFFFFF, 0x00613A0F, 0x00, B_SREGI8x16, B_SSEI8x16, B_CONST8|B_BINARY, B_NONE }, { T("VPCMPESTRI"), D_AVX|D_MUST66|D_ALLFLAGS, DX_VEX|DX_LSHORT|DX_NOVREG|DX_LEAD3A, 1, 0x000000FF, 0x00000061, 0x00, B_SREGI8x16, B_SSEI8x16, B_CONST8|B_BINARY, B_NONE }, { T("PCMPESTRM"), D_SSE|D_MUST66|D_ALLFLAGS, 0, 3, 0x00FFFFFF, 0x00603A0F, 0x00, B_SREGI8x16, B_SSEI8x16, B_CONST8|B_BINARY, B_NONE }, { T("VPCMPESTRM"), D_AVX|D_MUST66|D_ALLFLAGS, DX_VEX|DX_LSHORT|DX_NOVREG|DX_LEAD3A, 1, 0x000000FF, 0x00000060, 0x00, B_SREGI8x16, B_SSEI8x16, B_CONST8|B_BINARY, B_NONE }, { T("PCMPISTRI"), D_SSE|D_MUST66|D_ALLFLAGS, 0, 3, 0x00FFFFFF, 0x00633A0F, 0x00, B_SREGI8x16, B_SSEI8x16, B_CONST8|B_BINARY, B_NONE }, { T("VPCMPISTRI"), D_AVX|D_MUST66|D_ALLFLAGS, DX_VEX|DX_LSHORT|DX_NOVREG|DX_LEAD3A, 1, 0x000000FF, 0x00000063, 0x00, B_SREGI8x16, B_SSEI8x16, B_CONST8|B_BINARY, B_NONE }, { T("PCMPISTRM"), D_SSE|D_MUST66|D_ALLFLAGS, 0, 3, 0x00FFFFFF, 0x00623A0F, 0x00, B_SREGI8x16, B_SSEI8x16, B_CONST8|B_BINARY, B_NONE }, { T("VPCMPISTRM"), D_AVX|D_MUST66|D_ALLFLAGS, DX_VEX|DX_LSHORT|DX_NOVREG|DX_LEAD3A, 1, 0x000000FF, 0x00000062, 0x00, B_SREGI8x16, B_SSEI8x16, B_CONST8|B_BINARY, B_NONE }, { T("PCMPGTQ"), D_SSE|D_MUST66, 0, 3, 0x00FFFFFF, 0x0037380F, 0x00, B_SREGI64x2|B_UPD, B_SSEI64x2, B_NONE, B_NONE }, { T("VPCMPGTQ"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD38, 1, 0x000000FF, 0x00000037, 0x00, B_SREGI64x2|B_UPD, B_SVEXI64x2, B_SSEI64x2, B_NONE }, { T("PEXTRB"), D_SSE|D_MUST66|D_MEMORY, 0, 3, 0x00FFFFFF, 0x00143A0F, 0x00, B_INT8|B_MEMORY|B_CHG, B_SREGI8x16, B_CONST8|B_BINARY, B_NONE }, { T("PEXTRB"), D_SSE|D_MUST66|D_REGISTER, 0, 3, 0x00FFFFFF, 0x00143A0F, 0x00, B_INT32|B_REGISTER|B_CHG, B_SREGI8x16, B_CONST8|B_BINARY, B_NONE }, { T("VPEXTRB"), D_AVX|D_MUST66|D_MEMORY, DX_VEX|DX_LSHORT|DX_NOVREG|DX_W0|DX_LEAD3A, 1, 0x000000FF, 0x00000014, 0x00, B_INT8|B_MEMORY|B_CHG, B_SREGI8x16, B_CONST8|B_BINARY, B_NONE }, { T("VPEXTRB"), D_AVX|D_MUST66|D_REGISTER, DX_VEX|DX_LSHORT|DX_NOVREG|DX_W0|DX_LEAD3A, 1, 0x000000FF, 0x00000014, 0x00, B_INT32|B_REGISTER|B_CHG, B_SREGI8x16, B_CONST8|B_BINARY, B_NONE }, { T("PEXTRD"), D_SSE|D_MUST66, 0, 3, 0x00FFFFFF, 0x00163A0F, 0x00, B_INT32|B_CHG, B_SREGI32x4, B_CONST8|B_BINARY, B_NONE }, { T("VPEXTRD"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_NOVREG|DX_LEAD3A, 1, 0x000000FF, 0x00000016, 0x00, B_INT32|B_CHG, B_SREGI32x4, B_CONST8|B_BINARY, B_NONE }, { T("PEXTRW"), D_SSE|D_MUST66|D_MEMORY, 0, 3, 0x00FFFFFF, 0x00153A0F, 0x00, B_INT16|B_MEMORY|B_CHG, B_SREGI16x8, B_CONST8|B_BINARY, B_NONE }, { T("PEXTRW"), D_SSE|D_MUST66|D_REGISTER, 0, 3, 0x00FFFFFF, 0x00153A0F, 0x00, B_INT32|B_REGISTER|B_CHG, B_SREGI16x8, B_CONST8|B_BINARY, B_NONE }, { T("VPEXTRW"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_NOVREG|DX_LEAD3A, 1, 0x000000FF, 0x00000015, 0x00, B_INT16|B_CHG, B_SREGI16x8, B_CONST8|B_BINARY, B_NONE }, { T("PHMINPOSUW"), D_SSE|D_MUST66, 0, 3, 0x00FFFFFF, 0x0041380F, 0x00, B_SREGI16x8|B_CHG, B_SSEI16x8, B_NONE, B_NONE }, { T("VPHMINPOSUW"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_NOVREG|DX_LEAD38, 1, 0x000000FF, 0x00000041, 0x00, B_SREGI16x8|B_CHG, B_SSEI16x8, B_NONE, B_NONE }, { T("PINSRB"), D_SSE|D_MUST66|D_MEMORY, 0, 3, 0x00FFFFFF, 0x00203A0F, 0x00, B_SREGI8x16|B_UPD, B_INT8|B_MEMORY, B_CONST8|B_BINARY, B_NONE }, { T("VPINSRB"), D_AVX|D_MUST66|D_MEMORY, DX_VEX|DX_LSHORT|DX_W0|DX_LEAD3A, 1, 0x000000FF, 0x00000020, 0x00, B_SREGI8x16|B_UPD, B_SVEXI8x16, B_INT8|B_MEMORY, B_CONST8|B_BINARY }, { T("PINSRB"), D_SSE|D_MUST66|D_REGISTER, 0, 3, 0x00FFFFFF, 0x00203A0F, 0x00, B_SREGI8x16|B_UPD, B_INT32|B_REGISTER, B_CONST8|B_BINARY, B_NONE }, { T("VPINSRB"), D_AVX|D_MUST66|D_REGISTER, DX_VEX|DX_LSHORT|DX_W0|DX_LEAD3A, 1, 0x000000FF, 0x00000020, 0x00, B_SREGI8x16|B_UPD, B_SVEXI8x16, B_INT32|B_REGISTER, B_CONST8|B_BINARY }, { T("PINSRD"), D_SSE|D_MUST66, 0, 3, 0x00FFFFFF, 0x00223A0F, 0x00, B_SREGI32x4|B_UPD, B_INT32, B_CONST8|B_BINARY, B_NONE }, { T("VPINSRD"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_W0|DX_LEAD3A, 1, 0x000000FF, 0x00000022, 0x00, B_SREGI32x4|B_UPD, B_SVEXI32x4, B_INT32, B_CONST8|B_BINARY }, { T("PMAXSB"), D_SSE|D_MUST66, 0, 3, 0x00FFFFFF, 0x003C380F, 0x00, B_SREGI8x16|B_SIGNED|B_UPD, B_SSEI8x16|B_SIGNED, B_NONE, B_NONE }, { T("VPMAXSB"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD38, 1, 0x000000FF, 0x0000003C, 0x00, B_SREGI8x16|B_SIGNED|B_UPD, B_SVEXI8x16|B_SIGNED, B_SSEI8x16|B_SIGNED, B_NONE }, { T("PMAXSD"), D_SSE|D_MUST66, 0, 3, 0x00FFFFFF, 0x003D380F, 0x00, B_SREGI32x4|B_SIGNED|B_UPD, B_SSEI32x4|B_SIGNED, B_NONE, B_NONE }, { T("VPMAXSD"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD38, 1, 0x000000FF, 0x0000003D, 0x00, B_SREGI32x4|B_SIGNED|B_UPD, B_SVEXI32x4|B_SIGNED, B_SSEI32x4|B_SIGNED, B_NONE }, { T("PMAXUD"), D_SSE|D_MUST66, 0, 3, 0x00FFFFFF, 0x003F380F, 0x00, B_SREGI32x4|B_UNSIGNED|B_UPD, B_SSEI32x4|B_UNSIGNED, B_NONE, B_NONE }, { T("VPMAXUD"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD38, 1, 0x000000FF, 0x0000003F, 0x00, B_SREGI32x4|B_UNSIGNED|B_UPD, B_SVEXI32x4|B_UNSIGNED, B_SSEI32x4|B_UNSIGNED, B_NONE }, { T("PMAXUW"), D_SSE|D_MUST66, 0, 3, 0x00FFFFFF, 0x003E380F, 0x00, B_SREGI16x8|B_UNSIGNED|B_UPD, B_SSEI16x8|B_UNSIGNED, B_NONE, B_NONE }, { T("VPMAXUW"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD38, 1, 0x000000FF, 0x0000003E, 0x00, B_SREGI16x8|B_UNSIGNED|B_UPD, B_SVEXI16x8|B_UNSIGNED, B_SSEI16x8|B_UNSIGNED, B_NONE }, { T("PMINSB"), D_SSE|D_MUST66, 0, 3, 0x00FFFFFF, 0x0038380F, 0x00, B_SREGI8x16|B_SIGNED|B_UPD, B_SSEI8x16|B_SIGNED, B_NONE, B_NONE }, { T("VPMINSB"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD38, 1, 0x000000FF, 0x00000038, 0x00, B_SREGI8x16|B_SIGNED|B_UPD, B_SVEXI8x16|B_SIGNED, B_SSEI8x16|B_SIGNED, B_NONE }, { T("PMINSD"), D_SSE|D_MUST66, 0, 3, 0x00FFFFFF, 0x0039380F, 0x00, B_SREGI32x4|B_SIGNED|B_UPD, B_SSEI32x4|B_SIGNED, B_NONE, B_NONE }, { T("VPMINSD"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD38, 1, 0x000000FF, 0x00000039, 0x00, B_SREGI32x4|B_SIGNED|B_UPD, B_SVEXI32x4|B_SIGNED, B_SSEI32x4|B_SIGNED, B_NONE }, { T("PMINUD"), D_SSE|D_MUST66, 0, 3, 0x00FFFFFF, 0x003B380F, 0x00, B_SREGI32x4|B_UNSIGNED|B_UPD, B_SSEI32x4|B_UNSIGNED, B_NONE, B_NONE }, { T("VPMINUD"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD38, 1, 0x000000FF, 0x0000003B, 0x00, B_SREGI32x4|B_UNSIGNED|B_UPD, B_SVEXI32x4|B_UNSIGNED, B_SSEI32x4|B_UNSIGNED, B_NONE }, { T("PMINUW"), D_SSE|D_MUST66, 0, 3, 0x00FFFFFF, 0x003A380F, 0x00, B_SREGI16x8|B_UNSIGNED|B_UPD, B_SSEI16x8|B_UNSIGNED, B_NONE, B_NONE }, { T("VPMINUW"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD38, 1, 0x000000FF, 0x0000003A, 0x00, B_SREGI16x8|B_UNSIGNED|B_UPD, B_SVEXI16x8|B_UNSIGNED, B_SSEI16x8|B_UNSIGNED, B_NONE }, { T("PMOVSXBW"), D_SSE|D_MUST66, 0, 3, 0x00FFFFFF, 0x0020380F, 0x00, B_SREGI16x8|B_SIGNED|B_CHG, B_SSEI8x8L, B_NONE, B_NONE }, { T("VPMOVSXBW"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_NOVREG|DX_LEAD38, 1, 0x000000FF, 0x00000020, 0x00, B_SREGI16x8|B_SIGNED|B_CHG, B_SSEI8x8L, B_NONE, B_NONE }, { T("PMOVSXBD"), D_SSE|D_MUST66, 0, 3, 0x00FFFFFF, 0x0021380F, 0x00, B_SREGI32x4|B_SIGNED|B_CHG, B_SSEI8x4L, B_NONE, B_NONE }, { T("VPMOVSXBD"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_NOVREG|DX_LEAD38, 1, 0x000000FF, 0x00000021, 0x00, B_SREGI32x4|B_SIGNED|B_CHG, B_SSEI8x4L, B_NONE, B_NONE }, { T("PMOVSXBQ"), D_SSE|D_MUST66, 0, 3, 0x00FFFFFF, 0x0022380F, 0x00, B_SREGI64x2|B_SIGNED|B_CHG, B_SSEI8x2L, B_NONE, B_NONE }, { T("VPMOVSXBQ"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_NOVREG|DX_LEAD38, 1, 0x000000FF, 0x00000022, 0x00, B_SREGI64x2|B_SIGNED|B_CHG, B_SSEI8x2L, B_NONE, B_NONE }, { T("PMOVSXWD"), D_SSE|D_MUST66, 0, 3, 0x00FFFFFF, 0x0023380F, 0x00, B_SREGI32x4|B_SIGNED|B_CHG, B_SSEI16x4L, B_NONE, B_NONE }, { T("VPMOVSXWD"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_NOVREG|DX_LEAD38, 1, 0x000000FF, 0x00000023, 0x00, B_SREGI32x4|B_SIGNED|B_CHG, B_SSEI16x4L, B_NONE, B_NONE }, { T("PMOVSXWQ"), D_SSE|D_MUST66, 0, 3, 0x00FFFFFF, 0x0024380F, 0x00, B_SREGI64x2|B_SIGNED|B_CHG, B_SSEI16x2L, B_NONE, B_NONE }, { T("VPMOVSXWQ"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_NOVREG|DX_LEAD38, 1, 0x000000FF, 0x00000024, 0x00, B_SREGI64x2|B_SIGNED|B_CHG, B_SSEI16x2L, B_NONE, B_NONE }, { T("PMOVSXDQ"), D_SSE|D_MUST66, 0, 3, 0x00FFFFFF, 0x0025380F, 0x00, B_SREGI64x2|B_SIGNED|B_CHG, B_SSEI32x2L, B_NONE, B_NONE }, { T("VPMOVSXDQ"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_NOVREG|DX_LEAD38, 1, 0x000000FF, 0x00000025, 0x00, B_SREGI64x2|B_SIGNED|B_CHG, B_SSEI32x2L, B_NONE, B_NONE }, { T("PMOVZXBW"), D_SSE|D_MUST66, 0, 3, 0x00FFFFFF, 0x0030380F, 0x00, B_SREGI16x8|B_CHG, B_SSEI8x8L, B_NONE, B_NONE }, { T("VPMOVZXBW"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_NOVREG|DX_LEAD38, 1, 0x000000FF, 0x00000030, 0x00, B_SREGI16x8|B_CHG, B_SSEI8x8L, B_NONE, B_NONE }, { T("PMOVZXBD"), D_SSE|D_MUST66, 0, 3, 0x00FFFFFF, 0x0031380F, 0x00, B_SREGI32x4|B_CHG, B_SSEI8x4L, B_NONE, B_NONE }, { T("VPMOVZXBD"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_NOVREG|DX_LEAD38, 1, 0x000000FF, 0x00000031, 0x00, B_SREGI32x4|B_CHG, B_SSEI8x4L, B_NONE, B_NONE }, { T("PMOVZXBQ"), D_SSE|D_MUST66, 0, 3, 0x00FFFFFF, 0x0032380F, 0x00, B_SREGI64x2|B_CHG, B_SSEI8x2L, B_NONE, B_NONE }, { T("VPMOVZXBQ"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_NOVREG|DX_LEAD38, 1, 0x000000FF, 0x00000032, 0x00, B_SREGI64x2|B_CHG, B_SSEI8x2L, B_NONE, B_NONE }, { T("PMOVZXWD"), D_SSE|D_MUST66, 0, 3, 0x00FFFFFF, 0x0033380F, 0x00, B_SREGI32x4|B_CHG, B_SSEI16x4L, B_NONE, B_NONE }, { T("VPMOVZXWD"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_NOVREG|DX_LEAD38, 1, 0x000000FF, 0x00000033, 0x00, B_SREGI32x4|B_CHG, B_SSEI16x4L, B_NONE, B_NONE }, { T("PMOVZXWQ"), D_SSE|D_MUST66, 0, 3, 0x00FFFFFF, 0x0034380F, 0x00, B_SREGI64x2|B_CHG, B_SSEI16x2L, B_NONE, B_NONE }, { T("VPMOVZXWQ"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_NOVREG|DX_LEAD38, 1, 0x000000FF, 0x00000034, 0x00, B_SREGI64x2|B_CHG, B_SSEI16x2L, B_NONE, B_NONE }, { T("PMOVZXDQ"), D_SSE|D_MUST66, 0, 3, 0x00FFFFFF, 0x0035380F, 0x00, B_SREGI64x2|B_CHG, B_SSEI32x2L, B_NONE, B_NONE }, { T("VPMOVZXDQ"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_NOVREG|DX_LEAD38, 1, 0x000000FF, 0x00000035, 0x00, B_SREGI64x2|B_CHG, B_SSEI32x2L, B_NONE, B_NONE }, { T("PMULDQ"), D_SSE|D_MUST66, 0, 3, 0x00FFFFFF, 0x0028380F, 0x00, B_SREGI32x4|B_SIGNED|B_UPD, B_SSEI32x4|B_SIGNED, B_NONE, B_NONE }, { T("VPMULDQ"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD38, 1, 0x000000FF, 0x00000028, 0x00, B_SREGI32x4|B_SIGNED|B_UPD, B_SVEXI32x4|B_SIGNED, B_SSEI32x4|B_SIGNED, B_NONE }, { T("PMULLD"), D_SSE|D_MUST66, 0, 3, 0x00FFFFFF, 0x0040380F, 0x00, B_SREGI32x4|B_SIGNED|B_UPD, B_SSEI32x4|B_SIGNED, B_NONE, B_NONE }, { T("VPMULLD"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD38, 1, 0x000000FF, 0x00000040, 0x00, B_SREGI32x4|B_SIGNED|B_UPD, B_SVEXI32x4|B_SIGNED, B_SSEI32x4|B_SIGNED, B_NONE }, { T("PTEST"), D_SSE|D_MUST66|D_ALLFLAGS, 0, 3, 0x00FFFFFF, 0x0017380F, 0x00, B_SREGI32x4, B_SSEI32x4, B_NONE, B_NONE }, { T("VPTEST"), D_AVX|D_MUST66|D_ALLFLAGS, DX_VEX|DX_LBOTH|DX_NOVREG|DX_LEAD38, 1, 0x000000FF, 0x00000017, 0x00, B_SREGI32x4, B_SSEI32x4, B_NONE, B_NONE }, { T("ROUNDPD"), D_SSE|D_MUST66, 0, 3, 0x00FFFFFF, 0x00093A0F, 0x00, B_SREGF64x2|B_CHG, B_SSEF64x2, B_CONST8|B_BINARY, B_NONE }, { T("VROUNDPD"), D_AVX|D_MUST66, DX_VEX|DX_LBOTH|DX_NOVREG|DX_LEAD3A, 1, 0x000000FF, 0x00000009, 0x00, B_SREGF64x2|B_CHG, B_SSEF64x2, B_CONST8|B_BINARY, B_NONE }, { T("ROUNDPS"), D_SSE|D_MUST66, 0, 3, 0x00FFFFFF, 0x00083A0F, 0x00, B_SREGF32x4|B_CHG, B_SSEF32x4, B_CONST8|B_BINARY, B_NONE }, { T("VROUNDPS"), D_AVX|D_MUST66, DX_VEX|DX_LBOTH|DX_NOVREG|DX_LEAD3A, 1, 0x000000FF, 0x00000008, 0x00, B_SREGF32x4|B_CHG, B_SSEF32x4, B_CONST8|B_BINARY, B_NONE }, { T("ROUNDSD"), D_SSE|D_MUST66, 0, 3, 0x00FFFFFF, 0x000B3A0F, 0x00, B_SREGF64L|B_CHG, B_SSEF64L, B_CONST8|B_BINARY, B_NONE }, { T("VROUNDSD"), D_AVX|D_MUST66, DX_VEX|DX_IGNOREL|DX_LEAD3A, 1, 0x000000FF, 0x0000000B, 0x00, B_SREGF64L|B_CHG, B_SVEXF64L, B_SSEF64L, B_CONST8|B_BINARY }, { T("ROUNDSS"), D_SSE|D_MUST66, 0, 3, 0x00FFFFFF, 0x000A3A0F, 0x00, B_SREGF32L|B_CHG, B_SSEF32L, B_CONST8|B_BINARY, B_NONE }, { T("VROUNDSS"), D_AVX|D_MUST66, DX_VEX|DX_IGNOREL|DX_LEAD3A, 1, 0x000000FF, 0x0000000A, 0x00, B_SREGF32L|B_CHG, B_SVEXF32L, B_SSEF32L, B_CONST8|B_BINARY }, { T("PABSB"), D_MMX|D_MUSTNONE, 0, 3, 0x00FFFFFF, 0x001C380F, 0x00, B_MREG8x8|B_UNSIGNED|B_CHG, B_MMX8x8|B_SIGNED, B_NONE, B_NONE }, { T("PABSB"), D_SSE|D_MUST66, 0, 3, 0x00FFFFFF, 0x001C380F, 0x00, B_SREGI8x16|B_UNSIGNED|B_CHG, B_SSEI8x16|B_SIGNED, B_NONE, B_NONE }, { T("VPABSB"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_NOVREG|DX_LEAD38, 1, 0x000000FF, 0x0000001C, 0x00, B_SREGI8x16|B_UNSIGNED|B_CHG, B_SSEI8x16|B_SIGNED, B_NONE, B_NONE }, { T("PABSW"), D_MMX|D_MUSTNONE, 0, 3, 0x00FFFFFF, 0x001D380F, 0x00, B_MREG16x4|B_UNSIGNED|B_CHG, B_MMX16x4|B_SIGNED, B_NONE, B_NONE }, { T("PABSW"), D_SSE|D_MUST66, 0, 3, 0x00FFFFFF, 0x001D380F, 0x00, B_SREGI16x8|B_UNSIGNED|B_CHG, B_SSEI16x8|B_SIGNED, B_NONE, B_NONE }, { T("VPABSW"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_NOVREG|DX_LEAD38, 1, 0x000000FF, 0x0000001D, 0x00, B_SREGI16x8|B_UNSIGNED|B_CHG, B_SSEI16x8|B_SIGNED, B_NONE, B_NONE }, { T("PABSD"), D_MMX|D_MUSTNONE, 0, 3, 0x00FFFFFF, 0x001E380F, 0x00, B_MREG32x2|B_UNSIGNED|B_CHG, B_MMX32x2|B_SIGNED, B_NONE, B_NONE }, { T("PABSD"), D_SSE|D_MUST66, 0, 3, 0x00FFFFFF, 0x001E380F, 0x00, B_SREGI32x4|B_UNSIGNED|B_CHG, B_SSEI32x4|B_SIGNED, B_NONE, B_NONE }, { T("VPABSD"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_NOVREG|DX_LEAD38, 1, 0x000000FF, 0x0000001E, 0x00, B_SREGI32x4|B_UNSIGNED|B_CHG, B_SSEI32x4|B_SIGNED, B_NONE, B_NONE }, { T("PALIGNR"), D_MMX|D_MUSTNONE, 0, 3, 0x00FFFFFF, 0x000F3A0F, 0x00, B_MREG8x8|B_BINARY|B_UPD, B_MMX8x8|B_BINARY, B_CONST8|B_UNSIGNED, B_NONE }, { T("PALIGNR"), D_SSE|D_MUST66, 0, 3, 0x00FFFFFF, 0x000F3A0F, 0x00, B_SREGI8x16|B_BINARY|B_UPD, B_SSEI8x16|B_BINARY, B_CONST8|B_UNSIGNED, B_NONE }, { T("VPALIGNR"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD3A, 1, 0x000000FF, 0x0000000F, 0x00, B_SREGI8x16|B_BINARY|B_UPD, B_SVEXI8x16|B_BINARY, B_SSEI8x16|B_BINARY, B_CONST8|B_UNSIGNED }, { T("PHADDW"), D_MMX|D_MUSTNONE, 0, 3, 0x00FFFFFF, 0x0001380F, 0x00, B_MREG16x4|B_UPD, B_MMX16x4, B_NONE, B_NONE }, { T("PHADDW"), D_SSE|D_MUST66, 0, 3, 0x00FFFFFF, 0x0001380F, 0x00, B_SREGI16x8|B_UPD, B_SSEI16x8, B_NONE, B_NONE }, { T("VPHADDW"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD38, 1, 0x000000FF, 0x00000001, 0x00, B_SREGI16x8|B_UPD, B_SVEXI16x8, B_SSEI16x8, B_NONE }, { T("PHADDD"), D_MMX|D_MUSTNONE, 0, 3, 0x00FFFFFF, 0x0002380F, 0x00, B_MREG32x2|B_UPD, B_MMX32x2, B_NONE, B_NONE }, { T("PHADDD"), D_SSE|D_MUST66, 0, 3, 0x00FFFFFF, 0x0002380F, 0x00, B_SREGI32x4|B_UPD, B_SSEI32x4, B_NONE, B_NONE }, { T("VPHADDD"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD38, 1, 0x000000FF, 0x00000002, 0x00, B_SREGI32x4|B_UPD, B_SVEXI32x4, B_SSEI32x4, B_NONE }, { T("PHSUBW"), D_MMX|D_MUSTNONE, 0, 3, 0x00FFFFFF, 0x0005380F, 0x00, B_MREG16x4|B_UPD, B_MMX16x4, B_NONE, B_NONE }, { T("PHSUBW"), D_SSE|D_MUST66, 0, 3, 0x00FFFFFF, 0x0005380F, 0x00, B_SREGI16x8|B_UPD, B_SSEI16x8, B_NONE, B_NONE }, { T("VPHSUBW"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD38, 1, 0x000000FF, 0x00000005, 0x00, B_SREGI16x8|B_UPD, B_SVEXI16x8, B_SSEI16x8, B_NONE }, { T("PHSUBD"), D_MMX|D_MUSTNONE, 0, 3, 0x00FFFFFF, 0x0006380F, 0x00, B_MREG32x2|B_UPD, B_MMX32x2, B_NONE, B_NONE }, { T("PHSUBD"), D_SSE|D_MUST66, 0, 3, 0x00FFFFFF, 0x0006380F, 0x00, B_SREGI32x4|B_UPD, B_SSEI32x4, B_NONE, B_NONE }, { T("VPHSUBD"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD38, 1, 0x000000FF, 0x00000006, 0x00, B_SREGI32x4|B_UPD, B_SVEXI32x4, B_SSEI32x4, B_NONE }, { T("PHADDSW"), D_MMX|D_MUSTNONE, 0, 3, 0x00FFFFFF, 0x0003380F, 0x00, B_MREG16x4|B_UPD, B_MMX16x4, B_NONE, B_NONE }, { T("PHADDSW"), D_SSE|D_MUST66, 0, 3, 0x00FFFFFF, 0x0003380F, 0x00, B_SREGI16x8|B_UPD, B_SSEI16x8, B_NONE, B_NONE }, { T("VPHADDSW"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD38, 1, 0x000000FF, 0x00000003, 0x00, B_SREGI16x8|B_UPD, B_SVEXI16x8, B_SSEI16x8, B_NONE }, { T("PHSUBSW"), D_MMX|D_MUSTNONE, 0, 3, 0x00FFFFFF, 0x0007380F, 0x00, B_MREG16x4|B_UPD, B_MMX16x4, B_NONE, B_NONE }, { T("PHSUBSW"), D_SSE|D_MUST66, 0, 3, 0x00FFFFFF, 0x0007380F, 0x00, B_SREGI16x8|B_UPD, B_SSEI16x8, B_NONE, B_NONE }, { T("VPHSUBSW"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD38, 1, 0x000000FF, 0x00000007, 0x00, B_SREGI16x8|B_UPD, B_SVEXI16x8, B_SSEI16x8, B_NONE }, { T("PMADDUBSW"), D_MMX|D_MUSTNONE, 0, 3, 0x00FFFFFF, 0x0004380F, 0x00, B_MREG8x8|B_UNSIGNED|B_UPD, B_MMX8x8|B_SIGNED, B_NONE, B_NONE }, { T("PMADDUBSW"), D_SSE|D_MUST66, 0, 3, 0x00FFFFFF, 0x0004380F, 0x00, B_SREGI8x16|B_UNSIGNED|B_UPD, B_SSEI8x16|B_SIGNED, B_NONE, B_NONE }, { T("VPMADDUBSW"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD38, 1, 0x000000FF, 0x00000004, 0x00, B_SREGI8x16|B_UNSIGNED|B_UPD, B_SVEXI8x16|B_UNSIGNED, B_SSEI8x16|B_SIGNED, B_NONE }, { T("PMULHRSW"), D_MMX|D_MUSTNONE, 0, 3, 0x00FFFFFF, 0x000B380F, 0x00, B_MREG16x4|B_UPD, B_MMX16x4, B_NONE, B_NONE }, { T("PMULHRSW"), D_SSE|D_MUST66, 0, 3, 0x00FFFFFF, 0x000B380F, 0x00, B_SREGI16x8|B_UPD, B_SSEI16x8, B_NONE, B_NONE }, { T("VPMULHRSW"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD38, 1, 0x000000FF, 0x0000000B, 0x00, B_SREGI16x8|B_UPD, B_SVEXI16x8, B_SSEI16x8, B_NONE }, { T("PSHUFB"), D_MMX|D_MUSTNONE, 0, 3, 0x00FFFFFF, 0x0000380F, 0x00, B_MREG8x8|B_UPD, B_MMX8x8|B_BINARY, B_NONE, B_NONE }, { T("PSHUFB"), D_SSE|D_MUST66, 0, 3, 0x00FFFFFF, 0x0000380F, 0x00, B_SREGI8x16|B_UPD, B_SSEI8x16|B_BINARY, B_NONE, B_NONE }, { T("VPSHUFB"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD38, 1, 0x000000FF, 0x00000000, 0x00, B_SREGI8x16|B_UPD, B_SVEXI8x16, B_SSEI8x16|B_BINARY, B_NONE }, { T("PSIGNB"), D_MMX|D_MUSTNONE, 0, 3, 0x00FFFFFF, 0x0008380F, 0x00, B_MREG8x8|B_SIGNED|B_UPD, B_MMX8x8|B_SIGNED, B_NONE, B_NONE }, { T("PSIGNB"), D_SSE|D_MUST66, 0, 3, 0x00FFFFFF, 0x0008380F, 0x00, B_SREGI8x16|B_SIGNED|B_UPD, B_SSEI8x16|B_SIGNED, B_NONE, B_NONE }, { T("VPSIGNB"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD38, 1, 0x000000FF, 0x00000008, 0x00, B_SREGI8x16|B_SIGNED|B_UPD, B_SVEXI8x16|B_SIGNED, B_SSEI8x16|B_SIGNED, B_NONE }, { T("PSIGNW"), D_MMX|D_MUSTNONE, 0, 3, 0x00FFFFFF, 0x0009380F, 0x00, B_MREG16x4|B_SIGNED|B_UPD, B_MMX16x4|B_SIGNED, B_NONE, B_NONE }, { T("PSIGNW"), D_SSE|D_MUST66, 0, 3, 0x00FFFFFF, 0x0009380F, 0x00, B_SREGI16x8|B_SIGNED|B_UPD, B_SSEI16x8|B_SIGNED, B_NONE, B_NONE }, { T("VPSIGNW"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD38, 1, 0x000000FF, 0x00000009, 0x00, B_SREGI16x8|B_SIGNED|B_UPD, B_SVEXI16x8|B_SIGNED, B_SSEI16x8|B_SIGNED, B_NONE }, { T("PSIGND"), D_MMX|D_MUSTNONE, 0, 3, 0x00FFFFFF, 0x000A380F, 0x00, B_MREG32x2|B_SIGNED|B_UPD, B_MMX32x2|B_SIGNED, B_NONE, B_NONE }, { T("PSIGND"), D_SSE|D_MUST66, 0, 3, 0x00FFFFFF, 0x000A380F, 0x00, B_SREGI32x4|B_SIGNED|B_UPD, B_SSEI32x4|B_SIGNED, B_NONE, B_NONE }, { T("VPSIGND"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD38, 1, 0x000000FF, 0x0000000A, 0x00, B_SREGI32x4|B_SIGNED|B_UPD, B_SVEXI32x4|B_SIGNED, B_SSEI32x4|B_SIGNED, B_NONE }, { T("VBROADCASTSS"), D_AVX|D_MUST66|D_MEMORY, DX_VEX|DX_LBOTH|DX_NOVREG|DX_W0|DX_LEAD38, 1, 0x000000FF, 0x00000018, 0x00, B_SREGF32x4|B_CHG, B_SSEF32L|B_MEMORY, B_NONE, B_NONE }, { T("VBROADCASTSD"), D_AVX|D_MUST66|D_MEMORY, DX_VEX|DX_LLONG|DX_NOVREG|DX_W0|DX_LEAD38, 1, 0x000000FF, 0x00000019, 0x00, B_SREGF64x2|B_CHG, B_SSEF64L|B_MEMORY, B_NONE, B_NONE }, { T("VBROADCASTF128"), D_AVX|D_MUST66|D_MEMORY, DX_VEX|DX_LLONG|DX_NOVREG|DX_W0|DX_LEAD38, 1, 0x000000FF, 0x0000001A, 0x00, B_SREGF64x2|B_CHG, B_SSEF64x2|B_MEMORY|B_NOVEXSIZE|B_SHOWSIZE, B_NONE, B_NONE }, { T("VEXTRACTF128"), D_AVX|D_MUST66, DX_VEX|DX_LLONG|DX_NOVREG|DX_W0|DX_LEAD3A, 1, 0x000000FF, 0x00000019, 0x00, B_SSEF64x2|B_NOVEXSIZE|B_SHOWSIZE|B_CHG, B_SREGF64x2, B_CONST8, B_NONE }, { T("VINSERTF128"), D_AVX|D_MUST66, DX_VEX|DX_LLONG|DX_W0|DX_LEAD3A, 1, 0x000000FF, 0x00000018, 0x00, B_SREGF64x2|B_CHG, B_SVEXF64x2, B_SSEF64x2|B_NOVEXSIZE|B_SHOWSIZE, B_CONST8 }, { T("VMASKMOVPS"), D_AVX|D_MUST66|D_MEMORY, DX_VEX|DX_LBOTH|DX_W0|DX_LEAD38, 1, 0x000000FF, 0x0000002C, 0x00, B_SREGF32x4|B_CHG, B_SVEXF32x4, B_SSEF32x4|B_MEMORY, B_NONE }, { T("VMASKMOVPS"), D_AVX|D_MUST66|D_MEMORY, DX_VEX|DX_LBOTH|DX_W0|DX_LEAD38, 1, 0x000000FF, 0x0000002E, 0x00, B_SSEF32x4|B_MEMORY|B_CHG, B_SVEXF32x4, B_SREGF32x4, B_NONE }, { T("VMASKMOVPD"), D_AVX|D_MUST66|D_MEMORY, DX_VEX|DX_LBOTH|DX_W0|DX_LEAD38, 1, 0x000000FF, 0x0000002D, 0x00, B_SREGF64x2|B_CHG, B_SVEXF64x2, B_SSEF64x2|B_MEMORY, B_NONE }, { T("VMASKMOVPD"), D_AVX|D_MUST66|D_MEMORY, DX_VEX|DX_LBOTH|DX_W0|DX_LEAD38, 1, 0x000000FF, 0x0000002F, 0x00, B_SSEF64x2|B_MEMORY|B_CHG, B_SVEXF64x2, B_SREGF64x2, B_NONE }, { T("VPERMILPD"), D_AVX|D_MUST66, DX_VEX|DX_LBOTH|DX_W0|DX_LEAD38, 1, 0x000000FF, 0x0000000D, 0x00, B_SREGF64x2|B_CHG, B_SVEXF64x2, B_SSEI64x2, B_NONE }, { T("VPERMILPD"), D_AVX|D_MUST66, DX_VEX|DX_LBOTH|DX_NOVREG|DX_W0|DX_LEAD3A, 1, 0x000000FF, 0x00000005, 0x00, B_SREGF64x2|B_CHG, B_SSEF64x2, B_CONST8, B_NONE }, { T("VPERMILPS"), D_AVX|D_MUST66, DX_VEX|DX_LBOTH|DX_W0|DX_LEAD38, 1, 0x000000FF, 0x0000000C, 0x00, B_SREGF32x4|B_CHG, B_SVEXF32x4, B_SSEI32x4, B_NONE }, { T("VPERMILPS"), D_AVX|D_MUST66, DX_VEX|DX_LBOTH|DX_NOVREG|DX_W0|DX_LEAD3A, 1, 0x000000FF, 0x00000004, 0x00, B_SREGF32x4|B_CHG, B_SSEF32x4, B_CONST8, B_NONE }, { T("VPERM2F128"), D_AVX|D_MUST66, DX_VEX|DX_LLONG|DX_W0|DX_LEAD3A, 1, 0x000000FF, 0x00000006, 0x00, B_SREGF64x2|B_CHG, B_SVEXF64x2, B_SSEF64x2, B_CONST8 }, { T("VTESTPS"), D_AVX|D_MUST66|D_ALLFLAGS, DX_VEX|DX_LBOTH|DX_NOVREG|DX_W0|DX_LEAD38, 1, 0x000000FF, 0x0000000E, 0x00, B_SREGF32x4, B_SSEF32x4, B_NONE, B_NONE }, { T("VTESTPD"), D_AVX|D_MUST66|D_ALLFLAGS, DX_VEX|DX_LBOTH|DX_NOVREG|DX_W0|DX_LEAD38, 1, 0x000000FF, 0x0000000F, 0x00, B_SREGF64x2, B_SSEF64x2, B_NONE, B_NONE }, { T("VZEROALL"), D_AVX|D_MUSTNONE, DX_VEX|DX_LLONG|DX_NOVREG, 1, 0x000000FF, 0x00000077, 0x00, B_NONE, B_NONE, B_NONE, B_NONE }, { T("VZEROUPPER"), D_AVX|D_MUSTNONE, DX_VEX|DX_LSHORT|DX_NOVREG, 1, 0x000000FF, 0x00000077, 0x00, B_NONE, B_NONE, B_NONE, B_NONE }, { T("AESDEC"), D_SSE|D_MUST66, 0, 3, 0x00FFFFFF, 0x00DE380F, 0x00, B_SREGI8x16|B_UPD, B_SSEI8x16, B_NONE, B_NONE }, { T("VAESDEC"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD38, 1, 0x000000FF, 0x000000DE, 0x00, B_SREGI8x16|B_CHG, B_SVEXI8x16, B_SSEI8x16, B_NONE }, { T("AESDECLAST"), D_SSE|D_MUST66, 0, 3, 0x00FFFFFF, 0x00DF380F, 0x00, B_SREGI8x16|B_UPD, B_SSEI8x16, B_NONE, B_NONE }, { T("VAESDECLAST"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD38, 1, 0x000000FF, 0x000000DF, 0x00, B_SREGI8x16|B_CHG, B_SVEXI8x16, B_SSEI8x16, B_NONE }, { T("AESENC"), D_SSE|D_MUST66, 0, 3, 0x00FFFFFF, 0x00DC380F, 0x00, B_SREGI8x16|B_UPD, B_SSEI8x16, B_NONE, B_NONE }, { T("VAESENC"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD38, 1, 0x000000FF, 0x000000DC, 0x00, B_SREGI8x16|B_CHG, B_SVEXI8x16, B_SSEI8x16, B_NONE }, { T("AESENCLAST"), D_SSE|D_MUST66, 0, 3, 0x00FFFFFF, 0x00DD380F, 0x00, B_SREGI8x16|B_UPD, B_SSEI8x16, B_NONE, B_NONE }, { T("VAESENCLAST"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD38, 1, 0x000000FF, 0x000000DD, 0x00, B_SREGI8x16|B_CHG, B_SVEXI8x16, B_SSEI8x16, B_NONE }, { T("AESIMC"), D_SSE|D_MUST66, 0, 3, 0x00FFFFFF, 0x00DB380F, 0x00, B_SREGI8x16|B_CHG, B_SSEI8x16, B_NONE, B_NONE }, { T("VAESIMC"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_NOVREG|DX_LEAD38, 1, 0x000000FF, 0x000000DB, 0x00, B_SREGI8x16|B_CHG, B_SSEI8x16, B_NONE, B_NONE }, { T("AESKEYGENASSIST"), D_SSE|D_MUST66, 0, 3, 0x00FFFFFF, 0x00DF3A0F, 0x00, B_SREGI8x16|B_CHG, B_SSEI8x16, B_CONST8|B_COUNT, B_NONE }, { T("VAESKEYGENASSIST"), D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_NOVREG|DX_LEAD3A, 1, 0x000000FF, 0x000000DF, 0x00, B_SREGI8x16|B_CHG, B_SSEI8x16, B_CONST8|B_COUNT, B_NONE }, { T("VCVTPH2PS"), D_AVX|D_MUST66, DX_VEX|DX_LBOTH|DX_NOVREG|DX_W0|DX_LEAD38, 1, 0x000000FF, 0x00000013, 0x00, B_SREGF32x4|B_CHG, B_SSEI16x4L, B_NONE, B_NONE }, { T("VCVTPS2PH"), D_AVX|D_MUST66, DX_VEX|DX_LBOTH|DX_NOVREG|DX_W0|DX_LEAD3A, 1, 0x000000FF, 0x0000001D, 0x00, B_SSEI16x4L|B_CHG, B_SREGF32x4, B_NONE, B_NONE }, { T("LZCNT"), D_CMD|D_NEEDF3|D_ALLFLAGS, 0, 2, 0x0000FFFF, 0x0000BD0F, 0x00, B_REG|B_CHG, B_INT|B_BINARY, B_NONE, B_NONE }, { T("POPCNT"), D_CMD|D_NEEDF3|D_ALLFLAGS, 0, 2, 0x0000FFFF, 0x0000B80F, 0x00, B_REG|B_CHG, B_INT|B_NOADDR, B_NONE, B_NONE }, { T("EXTRQ"), D_SSE|D_MUST66, 0, 2, 0x0038FFFF, 0x0000780F, 0x00, B_SSEI8x16|B_REGONLY|B_UPD, B_CONST8|B_COUNT, B_CONST8_2|B_COUNT, B_NONE }, { T("EXTRQ"), D_SSE|D_MUST66, 0, 2, 0x0000FFFF, 0x0000790F, 0x00, B_SREGI8x16|B_UPD, B_SSEI8x2L|B_REGONLY, B_NONE, B_NONE }, { T("INSERTQ"), D_SSE|D_MUSTF2, 0, 2, 0x0000FFFF, 0x0000780F, 0x00, B_SREGI8x16|B_REGONLY|B_UPD, B_SSEI8x8L, B_CONST8|B_COUNT, B_CONST8_2|B_COUNT }, { T("INSERTQ"), D_SSE|D_MUSTF2, 0, 2, 0x0000FFFF, 0x0000790F, 0x00, B_SREGI8x16|B_REGONLY|B_UPD, B_SSEI8x16, B_NONE, B_NONE }, { T("MOVNTSD"), D_SSE|D_MUSTF2, 0, 2, 0x0000FFFF, 0x00002B0F, 0x00, B_SSEF64L|B_MEMONLY|B_CHG, B_SREGF64L, B_NONE, B_NONE }, { T("MOVNTSS"), D_SSE|D_MUSTF3, 0, 2, 0x0000FFFF, 0x00002B0F, 0x00, B_SSEF32L|B_MEMONLY|B_CHG, B_SREGF32L, B_NONE, B_NONE }, { T("INVEPT"), D_PRIVILEGED|D_MUST66|D_MEMORY|D_RARE, 0, 3, 0x00FFFFFF, 0x0080380F, 0x00, B_REG32, B_INT128, B_NONE, B_NONE }, { T("INVVPID"), D_PRIVILEGED|D_MUST66|D_MEMORY|D_RARE, 0, 3, 0x00FFFFFF, 0x0081380F, 0x00, B_REG32, B_INT128, B_NONE, B_NONE }, { T("VMCALL"), D_PRIVILEGED|D_RARE, 0, 3, 0x00FFFFFF, 0x00C1010F, 0x00, B_NONE, B_NONE, B_NONE, B_NONE }, { T("VMCLEAR"), D_PRIVILEGED|D_MUST66|D_MEMORY|D_RARE, 0, 2, 0x0038FFFF, 0x0030C70F, 0x00, B_INT64|B_MEMONLY, B_NONE, B_NONE, B_NONE }, { T("VMLAUNCH"), D_PRIVILEGED|D_RARE, 0, 3, 0x00FFFFFF, 0x00C2010F, 0x00, B_NONE, B_NONE, B_NONE, B_NONE }, { T("VMFUNC"), D_PRIVILEGED|D_RARE, 0, 3, 0x00FFFFFF, 0x00D4010F, 0x00, B_EAX|B_PSEUDO, B_NONE, B_NONE, B_NONE }, { T("XEND"), D_PRIVILEGED|D_RARE, 0, 3, 0x00FFFFFF, 0x00D5010F, 0x00, B_EAX|B_PSEUDO, B_NONE, B_NONE, B_NONE }, { T("XTEST"), D_PRIVILEGED|D_RARE, 0, 3, 0x00FFFFFF, 0x00D6010F, 0x00, B_EAX|B_PSEUDO, B_NONE, B_NONE, B_NONE }, { T("VMRESUME"), D_PRIVILEGED|D_RARE, 0, 3, 0x00FFFFFF, 0x00C3010F, 0x00, B_NONE, B_NONE, B_NONE, B_NONE }, { T("VMPTRLD"), D_PRIVILEGED|D_MUSTNONE|D_MEMORY|D_RARE, 0, 2, 0x0038FFFF, 0x0030C70F, 0x00, B_INT64|B_MEMONLY, B_NONE, B_NONE, B_NONE }, { T("VMPTRST"), D_PRIVILEGED|D_MUSTNONE|D_MEMORY|D_RARE, 0, 2, 0x0038FFFF, 0x0038C70F, 0x00, B_INT64|B_MEMONLY|B_CHG, B_NONE, B_NONE, B_NONE }, { T("VMREAD"), D_PRIVILEGED|D_MUSTNONE|D_RARE, 0, 2, 0x0000FFFF, 0x0000780F, 0x00, B_INT32|B_CHG, B_REG32, B_NONE, B_NONE }, { T("VMWRITE"), D_PRIVILEGED|D_RARE, 0, 2, 0x0000FFFF, 0x0000790F, 0x00, B_REG32, B_INT32, B_NONE, B_NONE }, { T("VMXOFF"), D_PRIVILEGED|D_RARE, 0, 3, 0x00FFFFFF, 0x00C4010F, 0x00, B_NONE, B_NONE, B_NONE, B_NONE }, { T("VMXON"), D_PRIVILEGED|D_MUSTF3|D_MEMORY|D_RARE, 0, 2, 0x0038FFFF, 0x0030C70F, 0x00, B_INT64, B_NONE, B_NONE, B_NONE }, { T("GETSEC"), D_PRIVILEGED|D_RARE, 0, 2, 0x0000FFFF, 0x0000370F, 0x00, B_EAX|B_UPD|B_PSEUDO, B_EBX|B_PSEUDO, B_ECX|B_PSEUDO, B_NONE }, { T("FEMMS"), D_CMD, 0, 2, 0x0000FFFF, 0x00000E0F, 0x00, B_NONE, B_NONE, B_NONE, B_NONE }, { T("PAVGUSB"), D_MMX|D_POSTBYTE|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x00000F0F, 0xBF, B_MREG8x8|B_UPD, B_MMX8x8, B_NONE, B_NONE }, { T("PF2ID"), D_3DNOW|D_POSTBYTE, 0, 2, 0x0000FFFF, 0x00000F0F, 0x1D, B_MREG32x2|B_CHG, B_3DNOW, B_NONE, B_NONE }, { T("PFACC"), D_3DNOW|D_POSTBYTE, 0, 2, 0x0000FFFF, 0x00000F0F, 0xAE, B_3DREG|B_UPD, B_3DNOW, B_NONE, B_NONE }, { T("PFADD"), D_3DNOW|D_POSTBYTE, 0, 2, 0x0000FFFF, 0x00000F0F, 0x9E, B_3DREG|B_UPD, B_3DNOW, B_NONE, B_NONE }, { T("PFCMPEQ"), D_3DNOW|D_POSTBYTE, 0, 2, 0x0000FFFF, 0x00000F0F, 0xB0, B_3DREG|B_UPD, B_3DNOW, B_NONE, B_NONE }, { T("PFCMPGE"), D_3DNOW|D_POSTBYTE, 0, 2, 0x0000FFFF, 0x00000F0F, 0x90, B_3DREG|B_UPD, B_3DNOW, B_NONE, B_NONE }, { T("PFCMPGT"), D_3DNOW|D_POSTBYTE, 0, 2, 0x0000FFFF, 0x00000F0F, 0xA0, B_3DREG|B_UPD, B_3DNOW, B_NONE, B_NONE }, { T("PFMAX"), D_3DNOW|D_POSTBYTE, 0, 2, 0x0000FFFF, 0x00000F0F, 0xA4, B_3DREG|B_UPD, B_3DNOW, B_NONE, B_NONE }, { T("PFMIN"), D_3DNOW|D_POSTBYTE, 0, 2, 0x0000FFFF, 0x00000F0F, 0x94, B_3DREG|B_UPD, B_3DNOW, B_NONE, B_NONE }, { T("PFMUL"), D_3DNOW|D_POSTBYTE, 0, 2, 0x0000FFFF, 0x00000F0F, 0xB4, B_3DREG|B_UPD, B_3DNOW, B_NONE, B_NONE }, { T("PFRCP"), D_3DNOW|D_POSTBYTE, 0, 2, 0x0000FFFF, 0x00000F0F, 0x96, B_3DREG|B_UPD, B_3DNOW, B_NONE, B_NONE }, { T("PFRCPIT1"), D_3DNOW|D_POSTBYTE, 0, 2, 0x0000FFFF, 0x00000F0F, 0xA6, B_3DREG|B_UPD, B_3DNOW, B_NONE, B_NONE }, { T("PFRCPIT2"), D_3DNOW|D_POSTBYTE, 0, 2, 0x0000FFFF, 0x00000F0F, 0xB6, B_3DREG|B_UPD, B_3DNOW, B_NONE, B_NONE }, { T("PFRSQIT1"), D_3DNOW|D_POSTBYTE, 0, 2, 0x0000FFFF, 0x00000F0F, 0xA7, B_3DREG|B_UPD, B_3DNOW, B_NONE, B_NONE }, { T("PFRSQRT"), D_3DNOW|D_POSTBYTE, 0, 2, 0x0000FFFF, 0x00000F0F, 0x97, B_3DREG|B_UPD, B_3DNOW, B_NONE, B_NONE }, { T("PFSUB"), D_3DNOW|D_POSTBYTE, 0, 2, 0x0000FFFF, 0x00000F0F, 0x9A, B_3DREG|B_UPD, B_3DNOW, B_NONE, B_NONE }, { T("PFSUBR"), D_3DNOW|D_POSTBYTE, 0, 2, 0x0000FFFF, 0x00000F0F, 0xAA, B_3DREG|B_UPD, B_3DNOW, B_NONE, B_NONE }, { T("PI2FD"), D_3DNOW|D_POSTBYTE, 0, 2, 0x0000FFFF, 0x00000F0F, 0x0D, B_3DREG|B_UPD, B_MMX32x2|B_SIGNED, B_NONE, B_NONE }, { T("PMULHRW"), D_MMX|D_POSTBYTE|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x00000F0F, 0xB7, B_MREG16x4|B_UPD, B_MMX16x4, B_NONE, B_NONE }, { T("PF2IW"), D_3DNOW|D_POSTBYTE, 0, 2, 0x0000FFFF, 0x00000F0F, 0x1C, B_MREG32x2|B_UPD, B_3DNOW, B_NONE, B_NONE }, { T("PFNACC"), D_3DNOW|D_POSTBYTE, 0, 2, 0x0000FFFF, 0x00000F0F, 0x8A, B_3DREG|B_UPD, B_3DNOW, B_NONE, B_NONE }, { T("PFPNACC"), D_3DNOW|D_POSTBYTE, 0, 2, 0x0000FFFF, 0x00000F0F, 0x8E, B_3DREG|B_UPD, B_3DNOW, B_NONE, B_NONE }, { T("PI2FW"), D_3DNOW|D_POSTBYTE, 0, 2, 0x0000FFFF, 0x00000F0F, 0x0C, B_3DREG|B_UPD, B_MMX16x4, B_NONE, B_NONE }, { T("PSWAPD"), D_MMX|D_POSTBYTE|D_MUSTNONE, 0, 2, 0x0000FFFF, 0x00000F0F, 0xBB, B_MREG32x2|B_UPD, B_MMX32x2, B_NONE, B_NONE }, { T("SYSCALL"), D_SYS|D_RARE, 0, 2, 0x0000FFFF, 0x0000050F, 0x00, B_NONE, B_NONE, B_NONE, B_NONE }, { T("SYSRET"), D_SYS|D_ALLFLAGS|D_SUSPICIOUS, 0, 2, 0x0000FFFF, 0x0000070F, 0x00, B_NONE, B_NONE, B_NONE, B_NONE }, { T("CLGI"), D_PRIVILEGED, 0, 3, 0x00FFFFFF, 0x00DD010F, 0x00, B_NONE, B_NONE, B_NONE, B_NONE }, { T("STGI"), D_PRIVILEGED, 0, 3, 0x00FFFFFF, 0x00DC010F, 0x00, B_NONE, B_NONE, B_NONE, B_NONE }, { T("INVLPGA"), D_PRIVILEGED|D_RARE, 0, 3, 0x00FFFFFF, 0x00DF010F, 0x00, B_EAX|B_PSEUDO, B_ECX|B_PSEUDO, B_NONE, B_NONE }, { T("SKINIT"), D_PRIVILEGED, 0, 3, 0x00FFFFFF, 0x00DE010F, 0x00, B_EAX|B_PSEUDO, B_NONE, B_NONE, B_NONE }, { T("VMLOAD"), D_PRIVILEGED, 0, 3, 0x00FFFFFF, 0x00DA010F, 0x00, B_EAX|B_PSEUDO, B_NONE, B_NONE, B_NONE }, { T("VMMCALL"), D_SYS|D_SUSPICIOUS, 0, 3, 0x00FFFFFF, 0x00D9010F, 0x00, B_NONE, B_NONE, B_NONE, B_NONE }, { T("VMRUN"), D_PRIVILEGED, 0, 3, 0x00FFFFFF, 0x00D8010F, 0x00, B_EAX|B_PSEUDO, B_NONE, B_NONE, B_NONE }, { T("VMSAVE"), D_PRIVILEGED, 0, 3, 0x00FFFFFF, 0x00DB010F, 0x00, B_EAX|B_PSEUDO, B_NONE, B_NONE, B_NONE }, { T("ES:"), D_PREFIX|D_SUSPICIOUS, 0, 1, 0x000000FF, 0x00000026, 0x00, B_NONE, B_NONE, B_NONE, B_NONE }, { T("CS:"), D_PREFIX|D_SUSPICIOUS, 0, 1, 0x000000FF, 0x0000002E, 0x00, B_NONE, B_NONE, B_NONE, B_NONE }, { T("SS:"), D_PREFIX|D_SUSPICIOUS, 0, 1, 0x000000FF, 0x00000036, 0x00, B_NONE, B_NONE, B_NONE, B_NONE }, { T("DS:"), D_PREFIX|D_SUSPICIOUS, 0, 1, 0x000000FF, 0x0000003E, 0x00, B_NONE, B_NONE, B_NONE, B_NONE }, { T("FS:"), D_PREFIX|D_SUSPICIOUS, 0, 1, 0x000000FF, 0x00000064, 0x00, B_NONE, B_NONE, B_NONE, B_NONE }, { T("GS:"), D_PREFIX|D_SUSPICIOUS, 0, 1, 0x000000FF, 0x00000065, 0x00, B_NONE, B_NONE, B_NONE, B_NONE }, { T("DATASIZE:"), D_PREFIX|D_SUSPICIOUS, 0, 1, 0x000000FF, 0x00000066, 0x00, B_NONE, B_NONE, B_NONE, B_NONE }, { T("ADDRSIZE:"), D_PREFIX|D_SUSPICIOUS, 0, 1, 0x000000FF, 0x00000067, 0x00, B_NONE, B_NONE, B_NONE, B_NONE }, { T("LOCK"), D_PREFIX|D_SUSPICIOUS, 0, 1, 0x000000FF, 0x000000F0, 0x00, B_NONE, B_NONE, B_NONE, B_NONE }, { T("REPNE"), D_PREFIX|D_SUSPICIOUS, 0, 1, 0x000000FF, 0x000000F2, 0x00, B_NONE, B_NONE, B_NONE, B_NONE }, { T("REPNZ"), D_PREFIX|D_SUSPICIOUS, 0, 1, 0x000000FF, 0x000000F2, 0x00, B_NONE, B_NONE, B_NONE, B_NONE }, { T("REP"), D_PREFIX|D_SUSPICIOUS, 0, 1, 0x000000FF, 0x000000F3, 0x00, B_NONE, B_NONE, B_NONE, B_NONE }, { T("REPE"), D_PREFIX|D_SUSPICIOUS, 0, 1, 0x000000FF, 0x000000F3, 0x00, B_NONE, B_NONE, B_NONE, B_NONE }, { T("REPZ"), D_PREFIX|D_SUSPICIOUS, 0, 1, 0x000000FF, 0x000000F3, 0x00, B_NONE, B_NONE, B_NONE, B_NONE }, { T("JCC"), D_PSEUDO|D_BHINT|D_COND, 0, 1, 0x000000F0, 0x00000070, 0x00, B_BYTEOFFS|B_JMPCALL, B_NONE, B_NONE, B_NONE }, { T("JCC"), D_PSEUDO|D_BHINT|D_COND, 0, 2, 0x0000F0FF, 0x0000800F, 0x00, B_OFFSET|B_JMPCALL, B_NONE, B_NONE, B_NONE }, { T("SETCC"), D_PSEUDO|D_COND, 0, 2, 0x0038F0FF, 0x0000900F, 0x00, B_INT8|B_SHOWSIZE|B_CHG, B_NONE, B_NONE, B_NONE }, { T("CMOVCC"), D_PSEUDO|D_COND, 0, 2, 0x0000F0FF, 0x0000400F, 0x00, B_REG|B_UPD, B_INT, B_NONE, B_NONE }, { T("FCMOVCC"), D_PSEUDO|D_COND, 0, 2, 0x0000E0FF, 0x0000C0DA, 0x00, B_ST0|B_CHG, B_ST, B_NONE, B_NONE }, { T("FCMOVCC"), D_PSEUDO|D_COND, 0, 2, 0x0000E0FF, 0x0000C0DB, 0x00, B_ST0|B_CHG, B_ST, B_NONE, B_NONE }, { NULL, 0, 0, 0, 0x00000000, 0x00000000, 0x00, B_NONE, B_NONE, B_NONE, B_NONE } }; ================================================ FILE: Disasm201/disasm.def ================================================ LIBRARY disasm EXPORTS Preparedisasm @1 Finishdisasm @2 Disasm @3 Geterrwarnmessage @4 ================================================ FILE: Disasm201/disasm.h ================================================ //////////////////////////////////////////////////////////////////////////////// // // // OllyDbg Disassembling Engine v2.01 // // // // Copyright (c) 2007-2013 Oleh Yuschuk, ollydbg@t-online.de // // // // This code is part of the OllyDbg Disassembler v2.01 // // // // Disassembling engine 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 3 of the License, or (at // // your option) any later version. // // // // This code 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, see . // // // //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// // // // This is a fast disassembler that can be used to determine the length of // // the binary 80x86 32-bit command and its attributes, to convert it to the // // human-readable text form, highlight its operands, and create hexadecimal // // dump of the binary command. // // // // It is a stripped down version of the disassembler used by OllyDbg 2.01. // // It can't analyse and comment the contents of the operands, or predict the // // results of the command execution. Analysis-dependent features are not // // included, too. Most other features are kept. // // // // Disassembler supports integer, FPU, MMX, 3DNow, SSE1-SSE4.1 and AVX // // instructions. 64-bit mode, AVX2, FMA and XOP are not (yet) supported. // // // // This code can be compiled either in ASCII or UNICODE mode. It is reentrant // // (thread-safe, feature not available in the original OllyDbg code). // // // // Typical operation speed on 3-GHz Phenom II in MASM mode is: // // // // Command length and info: 130 ns/command (7,700,000 commands/s) // // Disassembly: 290 ns/command (3,400,000 commands/s) // // Disassembly, dump, highlighting: 350 ns/command (2,800,000 commands/s) // // // //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// ////////////// PREFERRED SETTINGS AND FIXES FOR BORLAND COMPILERS ////////////// #ifdef __BORLANDC__ #pragma option -a1 // Byte alignment #pragma option -w-pin // Disable "partially bracketed" warning // Redefinition of MAKELONG removes nasty warning under Borland Builder 4.0: // boolean OR in one row with arithmetical shift. #undef MAKELONG #define MAKELONG(lo,hi) ((LONG)(((WORD)(lo))|(((DWORD)((WORD)(hi)))<<16))) #endif #define MAKEWP(lo,hi) ((WPARAM)MAKELONG(lo,hi)) #define MAKELP(lo,hi) ((LPARAM)MAKELONG(lo,hi)) #define LOINT(l) ((signed short)((WORD)(l))) #define HIINT(l) ((signed short)(((DWORD)(l)>>16) & 0xFFFF)) #ifndef FIELD_OFFSET #define FIELD_OFFSET(type,field) ((long)&(((type *)0)->field)) #endif //////////////////////////////////////////////////////////////////////////////// #define TEXTLEN 256 // Max length of text string #define SHORTNAME 32 // Max length of short or module name #ifdef UNICODE #define tchar wchar_t // Or replace it with TCHAR #define T(x) L##x #define tstrlen wcslen #define tstrcpy wcscpy #define tstrcmp wcscmp #define tstrlwr _wcslwr #define tsprintf swprintf #define ttolower towlower #else #define tchar char #define T(x) x #define tstrlen strlen #define tstrcpy strcpy #define tstrcmp strcmp #define tstrlwr strlwr #define tsprintf sprintf #define ttolower tolower #endif #define NOPERAND 4 // Maximal allowed number of operands #define NREG 8 // Number of registers (of any type) #define NSEG 6 // Number of valid segment registers #define MAXCMDSIZE 16 // Maximal length of valid 80x86 command #define NEGLIMIT (-16384) // Limit to decode offsets as negative #define DECLIMIT 16384 // Limit to decode constants as decimal typedef unsigned char uchar; // Unsigned character (byte) typedef unsigned short ushort; // Unsigned short typedef unsigned int uint; // Unsigned integer typedef unsigned long ulong; // Unsigned long // CMDMASK can be used to balance between the necessary memory size and the // disassembly time. #define CMDMASK 0x3FFF // Search mask for Disassembler, 2**n-1 #define NCHAIN 44300 // Max allowed number of chain links // Registers. #define REG_UNDEF (-1) // Codes of general purpose registers #define REG_EAX 0 #define REG_ECX 1 #define REG_EDX 2 #define REG_EBX 3 #define REG_ESP 4 #define REG_EBP 5 #define REG_ESI 6 #define REG_EDI 7 #define REG_AL 0 // Symbolic indices of 8-bit registers #define REG_CL 1 #define REG_DL 2 #define REG_BL 3 #define REG_AH 4 #define REG_CH 5 #define REG_DH 6 #define REG_BH 7 #define SEG_UNDEF (-1) // Codes of segment/selector registers #define SEG_ES 0 #define SEG_CS 1 #define SEG_SS 2 #define SEG_DS 3 #define SEG_FS 4 #define SEG_GS 5 // Command highlighting. #define DRAW_PLAIN '.' //0x0000000C // Plain commands #define DRAW_JUMP '>' //0x0000000D // Unconditional jump commands #define DRAW_CJMP '?' //0x0000000E // Conditional jump commands #define DRAW_PUSHPOP '=' //0x0000000F // PUSH/POP commands #define DRAW_CALL '@' //0x00000010 // CALL commands #define DRAW_RET '<' //0x00000011 // RET commands #define DRAW_FPU '1' //0x00000012 // FPU, MMX, 3DNow! and SSE commands #define DRAW_SUSPECT '!' //0x00000013 // Bad, system and privileged commands // Operand highlighting. #define DRAW_IREG 'R' //0x00000018 // General purpose registers #define DRAW_FREG 'F' //0x00000019 // FPU, MMX and SSE registers #define DRAW_SYSREG 'S' //0x0000001A // Segment and system registers #define DRAW_STKMEM 'K' //0x0000001B // Memory accessed over ESP or EBP #define DRAW_MEM 'M' //0x0000001C // Any other memory #define DRAW_CONST 'C' //0x0000001E // Constant #define D_NONE 0x00000000 // No special features // General type of command, only one is allowed. #define D_CMDTYPE 0x0000001F // Mask to extract type of command #define D_CMD 0x00000000 // Ordinary (none of listed below) #define D_MOV 0x00000001 // Move to or from integer register #define D_MOVC 0x00000002 // Conditional move to integer register #define D_SETC 0x00000003 // Conditional set integer register #define D_TEST 0x00000004 // Used to test data (CMP, TEST, AND...) #define D_STRING 0x00000005 // String command with REPxxx prefix #define D_JMP 0x00000006 // Unconditional near jump #define D_JMPFAR 0x00000007 // Unconditional far jump #define D_JMC 0x00000008 // Conditional jump on flags #define D_JMCX 0x00000009 // Conditional jump on (E)CX (and flags) #define D_PUSH 0x0000000A // PUSH exactly 1 (d)word of data #define D_POP 0x0000000B // POP exactly 1 (d)word of data #define D_CALL 0x0000000C // Plain near call #define D_CALLFAR 0x0000000D // Far call #define D_INT 0x0000000E // Interrupt #define D_RET 0x0000000F // Plain near return from call #define D_RETFAR 0x00000010 // Far return or IRET #define D_FPU 0x00000011 // FPU command #define D_MMX 0x00000012 // MMX instruction, incl. SSE extensions #define D_3DNOW 0x00000013 // 3DNow! instruction #define D_SSE 0x00000014 // SSE instruction #define D_IO 0x00000015 // Accesses I/O ports #define D_SYS 0x00000016 // Legal but useful in system code only #define D_PRIVILEGED 0x00000017 // Privileged (non-Ring3) command #define D_AVX 0x00000018 // AVX instruction #define D_XOP 0x00000019 // AMD instruction with XOP prefix #define D_DATA 0x0000001C // Data recognized by Analyser #define D_PSEUDO 0x0000001D // Pseudocommand, for search models only #define D_PREFIX 0x0000001E // Standalone prefix #define D_BAD 0x0000001F // Bad or unrecognized command // Additional parts of the command. #define D_SIZE01 0x00000020 // Bit 0x01 in last cmd is data size #define D_POSTBYTE 0x00000040 // Command continues in postbyte // For string commands, either long or short form can be selected. #define D_LONGFORM 0x00000080 // Long form of string command // Decoding of some commands depends on data or address size. #define D_SIZEMASK 0x00000F00 // Mask for data/address size dependence #define D_DATA16 0x00000100 // Requires 16-bit data size #define D_DATA32 0x00000200 // Requires 32-bit data size #define D_ADDR16 0x00000400 // Requires 16-bit address size #define D_ADDR32 0x00000800 // Requires 32-bit address size // Prefixes that command may, must or must not possess. #define D_MUSTMASK 0x0000F000 // Mask for fixed set of prefixes #define D_NOMUST 0x00000000 // No obligatory prefixes (default) #define D_MUST66 0x00001000 // (SSE,AVX) Requires 66, no F2 or F3 #define D_MUSTF2 0x00002000 // (SSE,AVX) Requires F2, no 66 or F3 #define D_MUSTF3 0x00003000 // (SSE,AVX) Requires F3, no 66 or F2 #define D_MUSTNONE 0x00004000 // (MMX,SSE,AVX) Requires no 66, F2, F3 #define D_NEEDF2 0x00005000 // (SSE,AVX) Requires F2, no F3 #define D_NEEDF3 0x00006000 // (SSE,AVX) Requires F3, no F2 #define D_NOREP 0x00007000 // Must not include F2 or F3 #define D_MUSTREP 0x00008000 // Must include F3 (REP) #define D_MUSTREPE 0x00009000 // Must include F3 (REPE) #define D_MUSTREPNE 0x0000A000 // Must include F2 (REPNE) #define D_LOCKABLE 0x00010000 // Allows for F0 (LOCK, memory only) #define D_BHINT 0x00020000 // Allows for branch hints (2E, 3E) // Decoding of some commands with ModRM-SIB depends whether register or memory. #define D_MEMORY 0x00040000 // Mod field must indicate memory #define D_REGISTER 0x00080000 // Mod field must indicate register // Side effects caused by command. #define D_FLAGMASK 0x00700000 // Mask to extract modified flags #define D_NOFLAGS 0x00000000 // Flags S,Z,P,O,C remain unchanged #define D_ALLFLAGS 0x00100000 // Modifies flags S,Z,P,O,C #define D_FLAGZ 0x00200000 // Modifies flag Z only #define D_FLAGC 0x00300000 // Modifies flag C only #define D_FLAGSCO 0x00400000 // Modifies flag C and O only #define D_FLAGD 0x00500000 // Modifies flag D only #define D_FLAGSZPC 0x00600000 // Modifies flags Z, P and C only (FPU) #define D_NOCFLAG 0x00700000 // S,Z,P,O modified, C unaffected #define D_FPUMASK 0x01800000 // Mask for effects on FPU stack #define D_FPUSAME 0x00000000 // Doesn't rotate FPU stack (default) #define D_FPUPOP 0x00800000 // Pops FPU stack #define D_FPUPOP2 0x01000000 // Pops FPU stack twice #define D_FPUPUSH 0x01800000 // Pushes FPU stack #define D_CHGESP 0x02000000 // Command indirectly modifies ESP // Command features. #define D_HLADIR 0x04000000 // Nonstandard order of operands in HLA #define D_WILDCARD 0x08000000 // Mnemonics contains W/D wildcard ('*') #define D_COND 0x10000000 // Conditional (action depends on flags) #define D_USESCARRY 0x20000000 // Uses Carry flag #define D_USEMASK 0xC0000000 // Mask to detect unusual commands #define D_RARE 0x40000000 // Rare or obsolete in Win32 apps #define D_SUSPICIOUS 0x80000000 // Suspicious command #define D_UNDOC 0xC0000000 // Undocumented command // Extension of D_xxx. #define DX_ZEROMASK 0x00000003 // How to decode FLAGS.Z flag #define DX_JE 0x00000001 // JE, JNE instead of JZ, JNZ #define DX_JZ 0x00000002 // JZ, JNZ instead of JE, JNE #define DX_CARRYMASK 0x0000000C // How to decode FLAGS.C flag #define DX_JB 0x00000004 // JAE, JB instead of JC, JNC #define DX_JC 0x00000008 // JC, JNC instead of JAE, JB #define DX_RETN 0x00000010 // The mnemonics is RETN #define DX_VEX 0x00000100 // Requires VEX prefix #define DX_VLMASK 0x00000600 // Mask to extract VEX operand length #define DX_LSHORT 0x00000000 // 128-bit only #define DX_LBOTH 0x00000200 // Both 128- and 256-bit versions #define DX_LLONG 0x00000400 // 256-bit only #define DX_IGNOREL 0x00000600 // Ignore VEX.L #define DX_NOVREG 0x00000800 // VEX.vvvv must be set to all 1's #define DX_VWMASK 0x00003000 // Mask to extract VEX.W #define DX_W0 0x00001000 // VEX.W must be 0 #define DX_W1 0x00002000 // VEX.W must be 1 #define DX_LEADMASK 0x00070000 // Mask to extract leading opcode bytes #define DX_LEAD0F 0x00000000 // Implied 0F leading byte (default) #define DX_LEAD38 0x00010000 // Implied 0F 38 leading opcode bytes #define DX_LEAD3A 0x00020000 // Implied 0F 3A leading opcode bytes #define DX_WONKYTRAP 0x00800000 // Don't single-step this command #define DX_TYPEMASK 0xFF000000 // Precised command type mask #define DX_ADD 0x01000000 // The command is integer ADD #define DX_SUB 0x02000000 // The command is integer SUB #define DX_LEA 0x03000000 // The command is LEA #define DX_NOP 0x04000000 // The command is NOP //#define DX_LVEX (DX_VEX|DX_LBOTH) //#define DX_GVEX (DX_VEX|DX_LLONG) // Type of operand, only one is allowed. Size of SSE operands is given for the // case of 128-bit operations and usually doubles for 256-bit AVX commands. If // B_NOVEXSIZE is set, memory may double but XMM registers are not promoted to // YMM. #define B_ARGMASK 0x000000FF // Mask to extract type of argument #define B_NONE 0x00000000 // Operand absent #define B_AL 0x00000001 // Register AL #define B_AH 0x00000002 // Register AH #define B_AX 0x00000003 // Register AX #define B_CL 0x00000004 // Register CL #define B_CX 0x00000005 // Register CX #define B_DX 0x00000006 // Register DX #define B_DXPORT 0x00000007 // Register DX as I/O port address #define B_EAX 0x00000008 // Register EAX #define B_EBX 0x00000009 // Register EBX #define B_ECX 0x0000000A // Register ECX #define B_EDX 0x0000000B // Register EDX #define B_ACC 0x0000000C // Accumulator (AL/AX/EAX) #define B_STRCNT 0x0000000D // Register CX or ECX as REPxx counter #define B_DXEDX 0x0000000E // Register DX or EDX in DIV/MUL #define B_BPEBP 0x0000000F // Register BP or EBP in ENTER/LEAVE #define B_REG 0x00000010 // 8/16/32-bit register in Reg #define B_REG16 0x00000011 // 16-bit register in Reg #define B_REG32 0x00000012 // 32-bit register in Reg #define B_REGCMD 0x00000013 // 16/32-bit register in last cmd byte #define B_REGCMD8 0x00000014 // 8-bit register in last cmd byte #define B_ANYREG 0x00000015 // Reg field is unused, any allowed #define B_INT 0x00000016 // 8/16/32-bit register/memory in ModRM #define B_INT8 0x00000017 // 8-bit register/memory in ModRM #define B_INT16 0x00000018 // 16-bit register/memory in ModRM #define B_INT32 0x00000019 // 32-bit register/memory in ModRM #define B_INT1632 0x0000001A // 16/32-bit register/memory in ModRM #define B_INT64 0x0000001B // 64-bit integer in ModRM, memory only #define B_INT128 0x0000001C // 128-bit integer in ModRM, memory only #define B_IMMINT 0x0000001D // 8/16/32-bit int at immediate addr #define B_INTPAIR 0x0000001E // Two signed 16/32 in ModRM, memory only #define B_SEGOFFS 0x0000001F // 16:16/16:32 absolute address in memory #define B_STRDEST 0x00000020 // 8/16/32-bit string dest, [ES:(E)DI] #define B_STRDEST8 0x00000021 // 8-bit string destination, [ES:(E)DI] #define B_STRSRC 0x00000022 // 8/16/32-bit string source, [(E)SI] #define B_STRSRC8 0x00000023 // 8-bit string source, [(E)SI] #define B_XLATMEM 0x00000024 // 8-bit memory in XLAT, [(E)BX+AL] #define B_EAXMEM 0x00000025 // Reference to memory addressed by [EAX] #define B_LONGDATA 0x00000026 // Long data in ModRM, mem only #define B_ANYMEM 0x00000027 // Reference to memory, data unimportant #define B_STKTOP 0x00000028 // 16/32-bit int top of stack #define B_STKTOPFAR 0x00000029 // Top of stack (16:16/16:32 far addr) #define B_STKTOPEFL 0x0000002A // 16/32-bit flags on top of stack #define B_STKTOPA 0x0000002B // 16/32-bit top of stack all registers #define B_PUSH 0x0000002C // 16/32-bit int push to stack #define B_PUSHRET 0x0000002D // 16/32-bit push of return address #define B_PUSHRETF 0x0000002E // 16:16/16:32-bit push of far retaddr #define B_PUSHA 0x0000002F // 16/32-bit push all registers #define B_EBPMEM 0x00000030 // 16/32-bit int at [EBP] #define B_SEG 0x00000031 // Segment register in Reg #define B_SEGNOCS 0x00000032 // Segment register in Reg, but not CS #define B_SEGCS 0x00000033 // Segment register CS #define B_SEGDS 0x00000034 // Segment register DS #define B_SEGES 0x00000035 // Segment register ES #define B_SEGFS 0x00000036 // Segment register FS #define B_SEGGS 0x00000037 // Segment register GS #define B_SEGSS 0x00000038 // Segment register SS #define B_ST 0x00000039 // 80-bit FPU register in last cmd byte #define B_ST0 0x0000003A // 80-bit FPU register ST0 #define B_ST1 0x0000003B // 80-bit FPU register ST1 #define B_FLOAT32 0x0000003C // 32-bit float in ModRM, memory only #define B_FLOAT64 0x0000003D // 64-bit float in ModRM, memory only #define B_FLOAT80 0x0000003E // 80-bit float in ModRM, memory only #define B_BCD 0x0000003F // 80-bit BCD in ModRM, memory only #define B_MREG8x8 0x00000040 // MMX register as 8 8-bit integers #define B_MMX8x8 0x00000041 // MMX reg/memory as 8 8-bit integers #define B_MMX8x8DI 0x00000042 // MMX 8 8-bit integers at [DS:(E)DI] #define B_MREG16x4 0x00000043 // MMX register as 4 16-bit integers #define B_MMX16x4 0x00000044 // MMX reg/memory as 4 16-bit integers #define B_MREG32x2 0x00000045 // MMX register as 2 32-bit integers #define B_MMX32x2 0x00000046 // MMX reg/memory as 2 32-bit integers #define B_MREG64 0x00000047 // MMX register as 1 64-bit integer #define B_MMX64 0x00000048 // MMX reg/memory as 1 64-bit integer #define B_3DREG 0x00000049 // 3DNow! register as 2 32-bit floats #define B_3DNOW 0x0000004A // 3DNow! reg/memory as 2 32-bit floats #define B_XMM0I32x4 0x0000004B // XMM0 as 4 32-bit integers #define B_XMM0I64x2 0x0000004C // XMM0 as 2 64-bit integers #define B_XMM0I8x16 0x0000004D // XMM0 as 16 8-bit integers #define B_SREGF32x4 0x0000004E // SSE register as 4 32-bit floats #define B_SREGF32L 0x0000004F // Low 32-bit float in SSE register #define B_SREGF32x2L 0x00000050 // Low 2 32-bit floats in SSE register #define B_SSEF32x4 0x00000051 // SSE reg/memory as 4 32-bit floats #define B_SSEF32L 0x00000052 // Low 32-bit float in SSE reg/memory #define B_SSEF32x2L 0x00000053 // Low 2 32-bit floats in SSE reg/memory #define B_SREGF64x2 0x00000054 // SSE register as 2 64-bit floats #define B_SREGF64L 0x00000055 // Low 64-bit float in SSE register #define B_SSEF64x2 0x00000056 // SSE reg/memory as 2 64-bit floats #define B_SSEF64L 0x00000057 // Low 64-bit float in SSE reg/memory #define B_SREGI8x16 0x00000058 // SSE register as 16 8-bit sigints #define B_SSEI8x16 0x00000059 // SSE reg/memory as 16 8-bit sigints #define B_SSEI8x16DI 0x0000005A // SSE 16 8-bit sigints at [DS:(E)DI] #define B_SSEI8x8L 0x0000005B // Low 8 8-bit ints in SSE reg/memory #define B_SSEI8x4L 0x0000005C // Low 4 8-bit ints in SSE reg/memory #define B_SSEI8x2L 0x0000005D // Low 2 8-bit ints in SSE reg/memory #define B_SREGI16x8 0x0000005E // SSE register as 8 16-bit sigints #define B_SSEI16x8 0x0000005F // SSE reg/memory as 8 16-bit sigints #define B_SSEI16x4L 0x00000060 // Low 4 16-bit ints in SSE reg/memory #define B_SSEI16x2L 0x00000061 // Low 2 16-bit ints in SSE reg/memory #define B_SREGI32x4 0x00000062 // SSE register as 4 32-bit sigints #define B_SREGI32L 0x00000063 // Low 32-bit sigint in SSE register #define B_SREGI32x2L 0x00000064 // Low 2 32-bit sigints in SSE register #define B_SSEI32x4 0x00000065 // SSE reg/memory as 4 32-bit sigints #define B_SSEI32x2L 0x00000066 // Low 2 32-bit sigints in SSE reg/memory #define B_SREGI64x2 0x00000067 // SSE register as 2 64-bit sigints #define B_SSEI64x2 0x00000068 // SSE reg/memory as 2 64-bit sigints #define B_SREGI64L 0x00000069 // Low 64-bit sigint in SSE register #define B_EFL 0x0000006A // Flags register EFL #define B_FLAGS8 0x0000006B // Flags (low byte) #define B_OFFSET 0x0000006C // 16/32 const offset from next command #define B_BYTEOFFS 0x0000006D // 8-bit sxt const offset from next cmd #define B_FARCONST 0x0000006E // 16:16/16:32 absolute address constant #define B_DESCR 0x0000006F // 16:32 descriptor in ModRM #define B_1 0x00000070 // Immediate constant 1 #define B_CONST8 0x00000071 // Immediate 8-bit constant #define B_CONST8_2 0x00000072 // Immediate 8-bit const, second in cmd #define B_CONST16 0x00000073 // Immediate 16-bit constant #define B_CONST 0x00000074 // Immediate 8/16/32-bit constant #define B_CONSTL 0x00000075 // Immediate 16/32-bit constant #define B_SXTCONST 0x00000076 // Immediate 8-bit sign-extended to size #define B_CR 0x00000077 // Control register in Reg #define B_CR0 0x00000078 // Control register CR0 #define B_DR 0x00000079 // Debug register in Reg #define B_FST 0x0000007A // FPU status register #define B_FCW 0x0000007B // FPU control register #define B_MXCSR 0x0000007C // SSE media control and status register #define B_SVEXF32x4 0x0000007D // SSE reg in VEX as 4 32-bit floats #define B_SVEXF32L 0x0000007E // Low 32-bit float in SSE in VEX #define B_SVEXF64x2 0x0000007F // SSE reg in VEX as 2 64-bit floats #define B_SVEXF64L 0x00000080 // Low 64-bit float in SSE in VEX #define B_SVEXI8x16 0x00000081 // SSE reg in VEX as 16 8-bit sigints #define B_SVEXI16x8 0x00000082 // SSE reg in VEX as 8 16-bit sigints #define B_SVEXI32x4 0x00000083 // SSE reg in VEX as 4 32-bit sigints #define B_SVEXI64x2 0x00000084 // SSE reg in VEX as 2 64-bit sigints #define B_SIMMI8x16 0x00000085 // SSE reg in immediate 8-bit constant // Type modifiers, used for interpretation of contents, only one is allowed. #define B_MODMASK 0x000F0000 // Mask to extract type modifier #define B_NONSPEC 0x00000000 // Non-specific operand #define B_UNSIGNED 0x00010000 // Decode as unsigned decimal #define B_SIGNED 0x00020000 // Decode as signed decimal #define B_BINARY 0x00030000 // Decode as binary (full hex) data #define B_BITCNT 0x00040000 // Bit count #define B_SHIFTCNT 0x00050000 // Shift count #define B_COUNT 0x00060000 // General-purpose count #define B_NOADDR 0x00070000 // Not an address #define B_JMPCALL 0x00080000 // Near jump/call/return destination #define B_JMPCALLFAR 0x00090000 // Far jump/call/return destination #define B_STACKINC 0x000A0000 // Unsigned stack increment/decrement #define B_PORT 0x000B0000 // I/O port #define B_ADDR 0x000F0000 // Used internally // Validity markers. #define B_MEMORY 0x00100000 // Memory only, reg version different #define B_REGISTER 0x00200000 // Register only, mem version different #define B_MEMONLY 0x00400000 // Warn if operand in register #define B_REGONLY 0x00800000 // Warn if operand in memory #define B_32BITONLY 0x01000000 // Warn if 16-bit operand #define B_NOESP 0x02000000 // ESP is not allowed // Miscellaneous options. #define B_NOVEXSIZE 0x04000000 // Always 128-bit SSE in 256-bit AVX #define B_SHOWSIZE 0x08000000 // Always show argument size in disasm #define B_CHG 0x10000000 // Changed, old contents is not used #define B_UPD 0x20000000 // Modified using old contents #define B_PSEUDO 0x40000000 // Pseoudooperand, not in assembler cmd #define B_NOSEG 0x80000000 // Don't add offset of selector // Location of operand, only one bit is allowed. #define OP_SOMEREG 0x000000FF // Mask for any kind of register #define OP_REGISTER 0x00000001 // Operand is a general-purpose register #define OP_SEGREG 0x00000002 // Operand is a segment register #define OP_FPUREG 0x00000004 // Operand is a FPU register #define OP_MMXREG 0x00000008 // Operand is a MMX register #define OP_3DNOWREG 0x00000010 // Operand is a 3DNow! register #define OP_SSEREG 0x00000020 // Operand is a SSE register #define OP_CREG 0x00000040 // Operand is a control register #define OP_DREG 0x00000080 // Operand is a debug register #define OP_MEMORY 0x00000100 // Operand is in memory #define OP_CONST 0x00000200 // Operand is an immediate constant // Additional operand properties. #define OP_PORT 0x00000400 // Used to access I/O port #define OP_OTHERREG 0x00000800 // Special register like EFL or MXCSR #define OP_INVALID 0x00001000 // Invalid operand, like reg in mem-only #define OP_PSEUDO 0x00002000 // Pseudooperand (not in mnenonics) #define OP_MOD 0x00004000 // Command may change/update operand #define OP_MODREG 0x00008000 // Memory, but modifies reg (POP,MOVSD) #define OP_IMPORT 0x00020000 // Value imported from different module #define OP_SELECTOR 0x00040000 // Includes immediate selector // Additional properties of memory address. #define OP_INDEXED 0x00080000 // Memory address contains registers #define OP_OPCONST 0x00100000 // Memory address contains constant #define OP_ADDR16 0x00200000 // 16-bit memory address #define OP_ADDR32 0x00400000 // Explicit 32-bit memory address #define DAMODE_MASM 0 // MASM assembling/disassembling style #define DAMODE_IDEAL 1 // IDEAL assembling/disassembling style #define DAMODE_HLA 2 // HLA assembling/disassembling style #define DAMODE_ATT 3 // AT&T disassembling style #define NUM_STYLE 0x0003 // Mask to extract hex style #define NUM_STD 0x0000 // 123, 12345678h, 0ABCD1234h #define NUM_X 0x0001 // 123, 0x12345678, 0xABCD1234 #define NUM_OLLY 0x0002 // 123., 12345678, 0ABCD1234 #define NUM_LONG 0x0010 // 00001234h instead of 1234h #define NUM_DECIMAL 0x0020 // 123 instead of 7Bh if under DECLIMIT // Disassembling options. #define DA_TEXT 0x00000001 // Decode command to text and comment #define DA_HILITE 0x00000002 // Use syntax highlighting #define DA_JZ 0x00000004 // JZ, JNZ instead of JE, JNE #define DA_JC 0x00000008 // JC, JNC instead of JAE, JB #define DA_DUMP 0x00000020 // Dump command to hexadecimal text #define DA_PSEUDO 0x00000400 // List pseudooperands // Disassembling errors. #define DAE_NOERR 0x00000000 // No errors #define DAE_BADCMD 0x00000001 // Unrecognized command #define DAE_CROSS 0x00000002 // Command crosses end of memory block #define DAE_MEMORY 0x00000004 // Register where only memory allowed #define DAE_REGISTER 0x00000008 // Memory where only register allowed #define DAE_LOCK 0x00000010 // LOCK prefix is not allowed #define DAE_BADSEG 0x00000020 // Invalid segment register #define DAE_SAMEPREF 0x00000040 // Two prefixes from the same group #define DAE_MANYPREF 0x00000080 // More than 4 prefixes #define DAE_BADCR 0x00000100 // Invalid CR register #define DAE_INTERN 0x00000200 // Internal error // Disassembling warnings. #define DAW_NOWARN 0x00000000 // No warnings #define DAW_DATASIZE 0x00000001 // Superfluous data size prefix #define DAW_ADDRSIZE 0x00000002 // Superfluous address size prefix #define DAW_SEGPREFIX 0x00000004 // Superfluous segment override prefix #define DAW_REPPREFIX 0x00000008 // Superfluous REPxx prefix #define DAW_DEFSEG 0x00000010 // Segment prefix coincides with default #define DAW_JMP16 0x00000020 // 16-bit jump, call or return #define DAW_FARADDR 0x00000040 // Far jump or call #define DAW_SEGMOD 0x00000080 // Modifies segment register #define DAW_PRIV 0x00000100 // Privileged command #define DAW_IO 0x00000200 // I/O command #define DAW_SHIFT 0x00000400 // Shift out of range 1..31 #define DAW_LOCK 0x00000800 // Command with valid LOCK prefix #define DAW_STACK 0x00001000 // Unaligned stack operation #define DAW_NOESP 0x00002000 // Suspicious use of stack pointer #define DAW_RARE 0x00004000 // Rare, seldom used command #define DAW_NONCLASS 0x00008000 // Non-standard or non-documented code #define DAW_INTERRUPT 0x00010000 // Interrupt command // List of prefixes. #define PF_SEGMASK 0x0000003F // Mask for segment override prefixes #define PF_ES 0x00000001 // 0x26, ES segment override #define PF_CS 0x00000002 // 0x2E, CS segment override #define PF_SS 0x00000004 // 0x36, SS segment override #define PF_DS 0x00000008 // 0x3E, DS segment override #define PF_FS 0x00000010 // 0x64, FS segment override #define PF_GS 0x00000020 // 0x65, GS segment override #define PF_DSIZE 0x00000040 // 0x66, data size override #define PF_ASIZE 0x00000080 // 0x67, address size override #define PF_LOCK 0x00000100 // 0xF0, bus lock #define PF_REPMASK 0x00000600 // Mask for repeat prefixes #define PF_REPNE 0x00000200 // 0xF2, REPNE prefix #define PF_REP 0x00000400 // 0xF3, REP/REPE prefix #define PF_BYTE 0x00000800 // Size bit in command, used in cmdexec #define PF_MUSTMASK D_MUSTMASK // Necessary prefixes, used in t_asmmod #define PF_VEX2 0x00010000 // 2-byte VEX prefix #define PF_VEX3 0x00020000 // 3-byte VEX prefix // Useful shortcuts. #define PF_66 PF_DSIZE // Alternative names for SSE prefixes #define PF_F2 PF_REPNE #define PF_F3 PF_REP #define PF_HINT (PF_CS|PF_DS) // Alternative names for branch hints #define PF_NOTTAKEN PF_CS #define PF_TAKEN PF_DS #define PF_VEX (PF_VEX2|PF_VEX3) typedef struct t_modrm { // ModRM byte decoding ulong size; // Total size with SIB and disp, bytes struct t_modrm *psib; // Pointer to SIB table or NULL ulong dispsize; // Size of displacement or 0 if none ulong features; // Operand features, set of OP_xxx int reg; // Register index or REG_UNDEF int defseg; // Default selector (SEG_xxx) uchar scale[NREG]; // Scales of registers in memory address ulong aregs; // List of registers used in address int basereg; // Register used as base or REG_UNDEF tchar ardec[SHORTNAME]; // Register part of address, INTEL fmt tchar aratt[SHORTNAME]; // Register part of address, AT&T fmt } t_modrm; typedef struct t_bincmd { // Description of 80x86 command tchar *name; // Symbolic name for this command ulong cmdtype; // Command's features, set of D_xxx ulong exttype; // More features, set of DX_xxx ulong length; // Length of main code (before ModRM/SIB) ulong mask; // Mask for first 4 bytes of the command ulong code; // Compare masked bytes with this ulong postbyte; // Postbyte ulong arg[NOPERAND]; // Types of arguments, set of B_xxx } t_bincmd; typedef struct t_chain { // Element of command chain const t_bincmd *pcmd; // Pointer to command descriptor or NULL struct t_chain *pnext; // Pointer to next element in chain } t_chain; typedef struct t_config { // Disassembler configuration int disasmmode; // Main style, one of DAMODE_xxx int memmode; // Constant part of address, NUM_xxx int jmpmode; // Jump/call destination, NUM_xxx int binconstmode; // Binary constants, NUM_xxx int constmode; // Numeric constants, NUM_xxx int lowercase; // Force lowercase display int tabarguments; // Tab between mnemonic and arguments int extraspace; // Extra space between arguments int useretform; // Use RET instead of RETN int shortstringcmds; // Use short form of string commands int putdefseg; // Display default segments in listing int showmemsize; // Always show memory size int shownear; // Show NEAR modifiers int ssesizemode; // How to decode size of SSE operands int jumphintmode; // How to decode jump hints int sizesens; // How to decode size-sensitive mnemonics int simplifiedst; // How to decode top of FPU stack int hiliteoperands; // Highlight operands } t_config; typedef struct t_operand { // Description of disassembled operand // Description of operand. ulong features; // Operand features, set of OP_xxx ulong arg; // Operand type, set of B_xxx // int optype; // DEC_INT, DEC_FLOAT or DEC_UNKNOWN int opsize; // Total size of data, bytes int granularity; // Size of element (opsize exc. MMX/SSE) int reg; // REG_xxx (also ESP in POP) or REG_UNDEF ulong uses; // List of used regs (not in address!) ulong modifies; // List of modified regs (not in addr!) // Description of memory address. int seg; // Selector (SEG_xxx) uchar scale[NREG]; // Scales of registers in memory address ulong aregs; // List of registers used in address ulong opconst; // Constant or const part of address ulong selector; // Immediate selector in far jump/call // Textual decoding. tchar text[TEXTLEN]; // Operand, decoded to text } t_operand; // Note that used registers are those which contents is necessary to create // result. Modified registers are those which value is changed. For example, // command MOV EAX,[EBX+ECX] uses EBX and ECX and modifies EAX. Command // ADD ESI,EDI uses ESI and EDI and modifies ESI. typedef struct t_disasm { // Disassembled command ulong ip; // Address of first command byte ulong size; // Full length of command, bytes ulong cmdtype; // Type of command, D_xxx ulong exttype; // More features, set of DX_xxx ulong prefixes; // List of prefixes, set of PF_xxx ulong nprefix; // Number of prefixes, including SSE2 ulong memfixup; // Offset of first 4-byte fixup or -1 ulong immfixup; // Offset of second 4-byte fixup or -1 int errors; // Set of DAE_xxx int warnings; // Set of DAW_xxx ulong uses; // List of used registers ulong modifies; // List of modified registers ulong memconst; // Constant in memory address or 0 ulong stackinc; // Data size in ENTER/RETN/RETF t_operand op[NOPERAND]; // Operands tchar dump[TEXTLEN]; // Hex dump of the command tchar result[TEXTLEN]; // Fully decoded command as text uchar mask[TEXTLEN]; // Mask to highlight result int masksize; // Length of mask corresponding to result } t_disasm; extern t_modrm modrm16[256]; // 16-bit ModRM decodings extern t_modrm modrm32[256]; // 32-bit ModRM decodings without SIB extern t_modrm sib0[256]; // ModRM-SIB decodings with Mod=00 extern t_modrm sib1[256]; // ModRM-SIB decodings with Mod=01 extern t_modrm sib2[256]; // ModRM-SIB decodings with Mod=10 extern const t_bincmd bincmd[]; // List of 80x86 commands extern t_chain *cmdchain; // Commands sorted by first CMDMASK bits int Preparedisasm(void); void Finishdisasm(void); ulong Disasm(uchar const *cmd,ulong cmdsize,ulong cmdip, t_disasm *da,int cmdmode,t_config *cmdconfig, int (*decodeaddress)(tchar *s,ulong addr)); tchar *Geterrwarnmessage(ulong errors,ulong warnings); ================================================ FILE: Disasm201/disasm.vs2008.sln ================================================  Microsoft Visual Studio Solution File, Format Version 10.00 # Visual Studio 2008 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "disasm", "disasm.vs2008.vcproj", "{579E7FE7-2745-4100-A802-23511711FCDE}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Release|Win32 = Release|Win32 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {579E7FE7-2745-4100-A802-23511711FCDE}.Debug|Win32.ActiveCfg = Debug|Win32 {579E7FE7-2745-4100-A802-23511711FCDE}.Debug|Win32.Build.0 = Debug|Win32 {579E7FE7-2745-4100-A802-23511711FCDE}.Release|Win32.ActiveCfg = Release|Win32 {579E7FE7-2745-4100-A802-23511711FCDE}.Release|Win32.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal ================================================ FILE: Disasm201/disasm.vs2008.vcproj ================================================ ================================================ FILE: Disasm201/main.c ================================================ #include #include #include #pragma hdrstop #include "disasm.h" int Decodeaddress(tchar *s,ulong addr) { if (addr<1024 || addr>50000) return 0; return sprintf(s,"LABEL_%x",addr); }; int main(int argc,tchar* argv[]) { int m,n,len,cmdlen,pos,ncmd; uchar *cmd; tchar *pmsg,s[512]; ulong t; t_disasm da; FILE *f,*g; Preparedisasm(); f=fopen("disasm.exe","rb"); fseek(f,0,SEEK_END); len=ftell(f); fseek(f,0,SEEK_SET); cmd=(uchar *)malloc(len); fread(cmd,len,1,f); fclose(f); // First loop: determine length of the command, no text. printf("Determine command length and get information:\n"); pos=0; ncmd=0; t=GetTickCount(); while (pos0) { for (n=0; n<30; n++) s[n]=T(' '); for (m=0; m #define COM_NO_WINDOWS_H #include #define _FACDS 0x878 #define MAKE_DSHRESULT(code) MAKE_HRESULT(1, _FACDS, code) #ifdef __cplusplus extern "C" { #endif // __cplusplus // Direct Sound Component GUID {47D4D946-62E8-11cf-93BC-444553540000} DEFINE_GUID(CLSID_DirectSound, 0x47d4d946, 0x62e8, 0x11cf, 0x93, 0xbc, 0x44, 0x45, 0x53, 0x54, 0x0, 0x0); // DirectSound Capture Component GUID {B0210780-89CD-11d0-AF08-00A0C925CD16} DEFINE_GUID(CLSID_DirectSoundCapture, 0xb0210780, 0x89cd, 0x11d0, 0xaf, 0x8, 0x0, 0xa0, 0xc9, 0x25, 0xcd, 0x16); // // Structures // #ifdef __cplusplus // 'struct' not 'class' per the way DECLARE_INTERFACE_ is defined struct IDirectSound; struct IDirectSoundBuffer; struct IDirectSound3DListener; struct IDirectSound3DBuffer; struct IDirectSoundCapture; struct IDirectSoundCaptureBuffer; struct IDirectSoundNotify; #endif // __cplusplus typedef struct IDirectSound *LPDIRECTSOUND; typedef struct IDirectSoundBuffer *LPDIRECTSOUNDBUFFER; typedef struct IDirectSound3DListener *LPDIRECTSOUND3DLISTENER; typedef struct IDirectSound3DBuffer *LPDIRECTSOUND3DBUFFER; typedef struct IDirectSoundCapture *LPDIRECTSOUNDCAPTURE; typedef struct IDirectSoundCaptureBuffer *LPDIRECTSOUNDCAPTUREBUFFER; typedef struct IDirectSoundNotify *LPDIRECTSOUNDNOTIFY; typedef struct _DSCAPS { DWORD dwSize; DWORD dwFlags; DWORD dwMinSecondarySampleRate; DWORD dwMaxSecondarySampleRate; DWORD dwPrimaryBuffers; DWORD dwMaxHwMixingAllBuffers; DWORD dwMaxHwMixingStaticBuffers; DWORD dwMaxHwMixingStreamingBuffers; DWORD dwFreeHwMixingAllBuffers; DWORD dwFreeHwMixingStaticBuffers; DWORD dwFreeHwMixingStreamingBuffers; DWORD dwMaxHw3DAllBuffers; DWORD dwMaxHw3DStaticBuffers; DWORD dwMaxHw3DStreamingBuffers; DWORD dwFreeHw3DAllBuffers; DWORD dwFreeHw3DStaticBuffers; DWORD dwFreeHw3DStreamingBuffers; DWORD dwTotalHwMemBytes; DWORD dwFreeHwMemBytes; DWORD dwMaxContigFreeHwMemBytes; DWORD dwUnlockTransferRateHwBuffers; DWORD dwPlayCpuOverheadSwBuffers; DWORD dwReserved1; DWORD dwReserved2; } DSCAPS, *LPDSCAPS; typedef const DSCAPS *LPCDSCAPS; typedef struct _DSBCAPS { DWORD dwSize; DWORD dwFlags; DWORD dwBufferBytes; DWORD dwUnlockTransferRate; DWORD dwPlayCpuOverhead; } DSBCAPS, *LPDSBCAPS; typedef const DSBCAPS *LPCDSBCAPS; typedef struct _DSBUFFERDESC { DWORD dwSize; DWORD dwFlags; DWORD dwBufferBytes; DWORD dwReserved; LPWAVEFORMATEX lpwfxFormat; } DSBUFFERDESC, *LPDSBUFFERDESC; typedef const DSBUFFERDESC *LPCDSBUFFERDESC; typedef struct _DS3DBUFFER { DWORD dwSize; D3DVECTOR vPosition; D3DVECTOR vVelocity; DWORD dwInsideConeAngle; DWORD dwOutsideConeAngle; D3DVECTOR vConeOrientation; LONG lConeOutsideVolume; D3DVALUE flMinDistance; D3DVALUE flMaxDistance; DWORD dwMode; } DS3DBUFFER, *LPDS3DBUFFER; typedef const DS3DBUFFER *LPCDS3DBUFFER; typedef struct _DS3DLISTENER { DWORD dwSize; D3DVECTOR vPosition; D3DVECTOR vVelocity; D3DVECTOR vOrientFront; D3DVECTOR vOrientTop; D3DVALUE flDistanceFactor; D3DVALUE flRolloffFactor; D3DVALUE flDopplerFactor; } DS3DLISTENER, *LPDS3DLISTENER; typedef const DS3DLISTENER *LPCDS3DLISTENER; typedef struct _DSCCAPS { DWORD dwSize; DWORD dwFlags; DWORD dwFormats; DWORD dwChannels; } DSCCAPS, *LPDSCCAPS; typedef const DSCCAPS *LPCDSCCAPS; typedef struct _DSCBUFFERDESC { DWORD dwSize; DWORD dwFlags; DWORD dwBufferBytes; DWORD dwReserved; LPWAVEFORMATEX lpwfxFormat; } DSCBUFFERDESC, *LPDSCBUFFERDESC; typedef const DSCBUFFERDESC *LPCDSCBUFFERDESC; typedef struct _DSCBCAPS { DWORD dwSize; DWORD dwFlags; DWORD dwBufferBytes; DWORD dwReserved; } DSCBCAPS, *LPDSCBCAPS; typedef const DSCBCAPS *LPCDSCBCAPS; typedef struct _DSBPOSITIONNOTIFY { DWORD dwOffset; HANDLE hEventNotify; } DSBPOSITIONNOTIFY, *LPDSBPOSITIONNOTIFY; typedef const DSBPOSITIONNOTIFY *LPCDSBPOSITIONNOTIFY; // // Compatibility typedefs // typedef LPDIRECTSOUND *LPLPDIRECTSOUND; typedef LPDIRECTSOUNDBUFFER *LPLPDIRECTSOUNDBUFFER; typedef LPDIRECTSOUND3DLISTENER *LPLPDIRECTSOUND3DLISTENER; typedef LPDIRECTSOUND3DBUFFER *LPLPDIRECTSOUND3DBUFFER; typedef LPDIRECTSOUNDCAPTURE *LPLPDIRECTSOUNDCAPTURE; typedef LPDIRECTSOUNDCAPTUREBUFFER *LPLPDIRECTSOUNDCAPTUREBUFFER; typedef LPDIRECTSOUNDNOTIFY *LPLPDIRECTSOUNDNOTIFY; typedef LPVOID *LPLPVOID; typedef const WAVEFORMATEX *LPCWAVEFORMATEX; // // DirectSound API // typedef BOOL (CALLBACK *LPDSENUMCALLBACKW)(LPGUID, LPCWSTR, LPCWSTR, LPVOID); typedef BOOL (CALLBACK *LPDSENUMCALLBACKA)(LPGUID, LPCSTR, LPCSTR, LPVOID); extern HRESULT WINAPI DirectSoundCreate(LPGUID, LPDIRECTSOUND *, LPUNKNOWN); extern HRESULT WINAPI DirectSoundEnumerateW(LPDSENUMCALLBACKW, LPVOID); extern HRESULT WINAPI DirectSoundEnumerateA(LPDSENUMCALLBACKA, LPVOID); extern HRESULT WINAPI DirectSoundCaptureCreate(LPGUID, LPDIRECTSOUNDCAPTURE *, LPUNKNOWN); extern HRESULT WINAPI DirectSoundCaptureEnumerateW(LPDSENUMCALLBACKW, LPVOID); extern HRESULT WINAPI DirectSoundCaptureEnumerateA(LPDSENUMCALLBACKA, LPVOID); #ifdef UNICODE #define LPDSENUMCALLBACK LPDSENUMCALLBACKW #define DirectSoundEnumerate DirectSoundEnumerateW #define DirectSoundCaptureEnumerate DirectSoundCaptureEnumerateW #else // UNICODE #define LPDSENUMCALLBACK LPDSENUMCALLBACKA #define DirectSoundEnumerate DirectSoundEnumerateA #define DirectSoundCaptureEnumerate DirectSoundCaptureEnumerateA #endif // UNICODE // // IDirectSound // DEFINE_GUID(IID_IDirectSound, 0x279AFA83, 0x4981, 0x11CE, 0xA5, 0x21, 0x00, 0x20, 0xAF, 0x0B, 0xE5, 0x60); #undef INTERFACE #define INTERFACE IDirectSound DECLARE_INTERFACE_(IDirectSound, IUnknown) { // IUnknown methods STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // IDirectSound methods STDMETHOD(CreateSoundBuffer) (THIS_ LPCDSBUFFERDESC, LPDIRECTSOUNDBUFFER *, LPUNKNOWN) PURE; STDMETHOD(GetCaps) (THIS_ LPDSCAPS) PURE; STDMETHOD(DuplicateSoundBuffer) (THIS_ LPDIRECTSOUNDBUFFER, LPDIRECTSOUNDBUFFER *) PURE; STDMETHOD(SetCooperativeLevel) (THIS_ HWND, DWORD) PURE; STDMETHOD(Compact) (THIS) PURE; STDMETHOD(GetSpeakerConfig) (THIS_ LPDWORD) PURE; STDMETHOD(SetSpeakerConfig) (THIS_ DWORD) PURE; STDMETHOD(Initialize) (THIS_ LPGUID) PURE; }; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirectSound_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectSound_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectSound_Release(p) (p)->lpVtbl->Release(p) #define IDirectSound_CreateSoundBuffer(p,a,b,c) (p)->lpVtbl->CreateSoundBuffer(p,a,b,c) #define IDirectSound_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a) #define IDirectSound_DuplicateSoundBuffer(p,a,b) (p)->lpVtbl->DuplicateSoundBuffer(p,a,b) #define IDirectSound_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b) #define IDirectSound_Compact(p) (p)->lpVtbl->Compact(p) #define IDirectSound_GetSpeakerConfig(p,a) (p)->lpVtbl->GetSpeakerConfig(p,a) #define IDirectSound_SetSpeakerConfig(p,b) (p)->lpVtbl->SetSpeakerConfig(p,b) #define IDirectSound_Initialize(p,a) (p)->lpVtbl->Initialize(p,a) #else // !defined(__cplusplus) || defined(CINTERFACE) #define IDirectSound_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirectSound_AddRef(p) (p)->AddRef() #define IDirectSound_Release(p) (p)->Release() #define IDirectSound_CreateSoundBuffer(p,a,b,c) (p)->CreateSoundBuffer(a,b,c) #define IDirectSound_GetCaps(p,a) (p)->GetCaps(a) #define IDirectSound_DuplicateSoundBuffer(p,a,b) (p)->DuplicateSoundBuffer(a,b) #define IDirectSound_SetCooperativeLevel(p,a,b) (p)->SetCooperativeLevel(a,b) #define IDirectSound_Compact(p) (p)->Compact() #define IDirectSound_GetSpeakerConfig(p,a) (p)->GetSpeakerConfig(a) #define IDirectSound_SetSpeakerConfig(p,b) (p)->SetSpeakerConfig(b) #define IDirectSound_Initialize(p,a) (p)->Initialize(a) #endif // !defined(__cplusplus) || defined(CINTERFACE) // // IDirectSoundBuffer // DEFINE_GUID(IID_IDirectSoundBuffer, 0x279AFA85, 0x4981, 0x11CE, 0xA5, 0x21, 0x00, 0x20, 0xAF, 0x0B, 0xE5, 0x60); #undef INTERFACE #define INTERFACE IDirectSoundBuffer DECLARE_INTERFACE_(IDirectSoundBuffer, IUnknown) { // IUnknown methods STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // IDirectSoundBuffer methods STDMETHOD(GetCaps) (THIS_ LPDSBCAPS) PURE; STDMETHOD(GetCurrentPosition) (THIS_ LPDWORD, LPDWORD) PURE; STDMETHOD(GetFormat) (THIS_ LPWAVEFORMATEX, DWORD, LPDWORD) PURE; STDMETHOD(GetVolume) (THIS_ LPLONG) PURE; STDMETHOD(GetPan) (THIS_ LPLONG) PURE; STDMETHOD(GetFrequency) (THIS_ LPDWORD) PURE; STDMETHOD(GetStatus) (THIS_ LPDWORD) PURE; STDMETHOD(Initialize) (THIS_ LPDIRECTSOUND, LPCDSBUFFERDESC) PURE; STDMETHOD(Lock) (THIS_ DWORD, DWORD, LPVOID *, LPDWORD, LPVOID *, LPDWORD, DWORD) PURE; STDMETHOD(Play) (THIS_ DWORD, DWORD, DWORD) PURE; STDMETHOD(SetCurrentPosition) (THIS_ DWORD) PURE; STDMETHOD(SetFormat) (THIS_ LPCWAVEFORMATEX) PURE; STDMETHOD(SetVolume) (THIS_ LONG) PURE; STDMETHOD(SetPan) (THIS_ LONG) PURE; STDMETHOD(SetFrequency) (THIS_ DWORD) PURE; STDMETHOD(Stop) (THIS) PURE; STDMETHOD(Unlock) (THIS_ LPVOID, DWORD, LPVOID, DWORD) PURE; STDMETHOD(Restore) (THIS) PURE; }; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirectSoundBuffer_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectSoundBuffer_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectSoundBuffer_Release(p) (p)->lpVtbl->Release(p) #define IDirectSoundBuffer_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a) #define IDirectSoundBuffer_GetCurrentPosition(p,a,b) (p)->lpVtbl->GetCurrentPosition(p,a,b) #define IDirectSoundBuffer_GetFormat(p,a,b,c) (p)->lpVtbl->GetFormat(p,a,b,c) #define IDirectSoundBuffer_GetVolume(p,a) (p)->lpVtbl->GetVolume(p,a) #define IDirectSoundBuffer_GetPan(p,a) (p)->lpVtbl->GetPan(p,a) #define IDirectSoundBuffer_GetFrequency(p,a) (p)->lpVtbl->GetFrequency(p,a) #define IDirectSoundBuffer_GetStatus(p,a) (p)->lpVtbl->GetStatus(p,a) #define IDirectSoundBuffer_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b) #define IDirectSoundBuffer_Lock(p,a,b,c,d,e,f,g) (p)->lpVtbl->Lock(p,a,b,c,d,e,f,g) #define IDirectSoundBuffer_Play(p,a,b,c) (p)->lpVtbl->Play(p,a,b,c) #define IDirectSoundBuffer_SetCurrentPosition(p,a) (p)->lpVtbl->SetCurrentPosition(p,a) #define IDirectSoundBuffer_SetFormat(p,a) (p)->lpVtbl->SetFormat(p,a) #define IDirectSoundBuffer_SetVolume(p,a) (p)->lpVtbl->SetVolume(p,a) #define IDirectSoundBuffer_SetPan(p,a) (p)->lpVtbl->SetPan(p,a) #define IDirectSoundBuffer_SetFrequency(p,a) (p)->lpVtbl->SetFrequency(p,a) #define IDirectSoundBuffer_Stop(p) (p)->lpVtbl->Stop(p) #define IDirectSoundBuffer_Unlock(p,a,b,c,d) (p)->lpVtbl->Unlock(p,a,b,c,d) #define IDirectSoundBuffer_Restore(p) (p)->lpVtbl->Restore(p) #else // !defined(__cplusplus) || defined(CINTERFACE) #define IDirectSoundBuffer_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirectSoundBuffer_AddRef(p) (p)->AddRef() #define IDirectSoundBuffer_Release(p) (p)->Release() #define IDirectSoundBuffer_GetCaps(p,a) (p)->GetCaps(a) #define IDirectSoundBuffer_GetCurrentPosition(p,a,b) (p)->GetCurrentPosition(a,b) #define IDirectSoundBuffer_GetFormat(p,a,b,c) (p)->GetFormat(a,b,c) #define IDirectSoundBuffer_GetVolume(p,a) (p)->GetVolume(a) #define IDirectSoundBuffer_GetPan(p,a) (p)->GetPan(a) #define IDirectSoundBuffer_GetFrequency(p,a) (p)->GetFrequency(a) #define IDirectSoundBuffer_GetStatus(p,a) (p)->GetStatus(a) #define IDirectSoundBuffer_Initialize(p,a,b) (p)->Initialize(a,b) #define IDirectSoundBuffer_Lock(p,a,b,c,d,e,f,g) (p)->Lock(a,b,c,d,e,f,g) #define IDirectSoundBuffer_Play(p,a,b,c) (p)->Play(a,b,c) #define IDirectSoundBuffer_SetCurrentPosition(p,a) (p)->SetCurrentPosition(a) #define IDirectSoundBuffer_SetFormat(p,a) (p)->SetFormat(a) #define IDirectSoundBuffer_SetVolume(p,a) (p)->SetVolume(a) #define IDirectSoundBuffer_SetPan(p,a) (p)->SetPan(a) #define IDirectSoundBuffer_SetFrequency(p,a) (p)->SetFrequency(a) #define IDirectSoundBuffer_Stop(p) (p)->Stop() #define IDirectSoundBuffer_Unlock(p,a,b,c,d) (p)->Unlock(a,b,c,d) #define IDirectSoundBuffer_Restore(p) (p)->Restore() #endif // !defined(__cplusplus) || defined(CINTERFACE) // // IDirectSound3DListener // DEFINE_GUID(IID_IDirectSound3DListener, 0x279AFA84, 0x4981, 0x11CE, 0xA5, 0x21, 0x00, 0x20, 0xAF, 0x0B, 0xE5, 0x60); #undef INTERFACE #define INTERFACE IDirectSound3DListener DECLARE_INTERFACE_(IDirectSound3DListener, IUnknown) { // IUnknown methods STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // IDirectSound3D methods STDMETHOD(GetAllParameters) (THIS_ LPDS3DLISTENER) PURE; STDMETHOD(GetDistanceFactor) (THIS_ LPD3DVALUE) PURE; STDMETHOD(GetDopplerFactor) (THIS_ LPD3DVALUE) PURE; STDMETHOD(GetOrientation) (THIS_ LPD3DVECTOR, LPD3DVECTOR) PURE; STDMETHOD(GetPosition) (THIS_ LPD3DVECTOR) PURE; STDMETHOD(GetRolloffFactor) (THIS_ LPD3DVALUE) PURE; STDMETHOD(GetVelocity) (THIS_ LPD3DVECTOR) PURE; STDMETHOD(SetAllParameters) (THIS_ LPCDS3DLISTENER, DWORD) PURE; STDMETHOD(SetDistanceFactor) (THIS_ D3DVALUE, DWORD) PURE; STDMETHOD(SetDopplerFactor) (THIS_ D3DVALUE, DWORD) PURE; STDMETHOD(SetOrientation) (THIS_ D3DVALUE, D3DVALUE, D3DVALUE, D3DVALUE, D3DVALUE, D3DVALUE, DWORD) PURE; STDMETHOD(SetPosition) (THIS_ D3DVALUE, D3DVALUE, D3DVALUE, DWORD) PURE; STDMETHOD(SetRolloffFactor) (THIS_ D3DVALUE, DWORD) PURE; STDMETHOD(SetVelocity) (THIS_ D3DVALUE, D3DVALUE, D3DVALUE, DWORD) PURE; STDMETHOD(CommitDeferredSettings) (THIS) PURE; }; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirectSound3DListener_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectSound3DListener_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectSound3DListener_Release(p) (p)->lpVtbl->Release(p) #define IDirectSound3DListener_GetAllParameters(p,a) (p)->lpVtbl->GetAllParameters(p,a) #define IDirectSound3DListener_GetDistanceFactor(p,a) (p)->lpVtbl->GetDistanceFactor(p,a) #define IDirectSound3DListener_GetDopplerFactor(p,a) (p)->lpVtbl->GetDopplerFactor(p,a) #define IDirectSound3DListener_GetOrientation(p,a,b) (p)->lpVtbl->GetOrientation(p,a,b) #define IDirectSound3DListener_GetPosition(p,a) (p)->lpVtbl->GetPosition(p,a) #define IDirectSound3DListener_GetRolloffFactor(p,a) (p)->lpVtbl->GetRolloffFactor(p,a) #define IDirectSound3DListener_GetVelocity(p,a) (p)->lpVtbl->GetVelocity(p,a) #define IDirectSound3DListener_SetAllParameters(p,a,b) (p)->lpVtbl->SetAllParameters(p,a,b) #define IDirectSound3DListener_SetDistanceFactor(p,a,b) (p)->lpVtbl->SetDistanceFactor(p,a,b) #define IDirectSound3DListener_SetDopplerFactor(p,a,b) (p)->lpVtbl->SetDopplerFactor(p,a,b) #define IDirectSound3DListener_SetOrientation(p,a,b,c,d,e,f,g) (p)->lpVtbl->SetOrientation(p,a,b,c,d,e,f,g) #define IDirectSound3DListener_SetPosition(p,a,b,c,d) (p)->lpVtbl->SetPosition(p,a,b,c,d) #define IDirectSound3DListener_SetRolloffFactor(p,a,b) (p)->lpVtbl->SetRolloffFactor(p,a,b) #define IDirectSound3DListener_SetVelocity(p,a,b,c,d) (p)->lpVtbl->SetVelocity(p,a,b,c,d) #define IDirectSound3DListener_CommitDeferredSettings(p) (p)->lpVtbl->CommitDeferredSettings(p) #else // !defined(__cplusplus) || defined(CINTERFACE) #define IDirectSound3DListener_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirectSound3DListener_AddRef(p) (p)->AddRef() #define IDirectSound3DListener_Release(p) (p)->Release() #define IDirectSound3DListener_GetAllParameters(p,a) (p)->GetAllParameters(a) #define IDirectSound3DListener_GetDistanceFactor(p,a) (p)->GetDistanceFactor(a) #define IDirectSound3DListener_GetDopplerFactor(p,a) (p)->GetDopplerFactor(a) #define IDirectSound3DListener_GetOrientation(p,a,b) (p)->GetOrientation(a,b) #define IDirectSound3DListener_GetPosition(p,a) (p)->GetPosition(a) #define IDirectSound3DListener_GetRolloffFactor(p,a) (p)->GetRolloffFactor(a) #define IDirectSound3DListener_GetVelocity(p,a) (p)->GetVelocity(a) #define IDirectSound3DListener_SetAllParameters(p,a,b) (p)->SetAllParameters(a,b) #define IDirectSound3DListener_SetDistanceFactor(p,a,b) (p)->SetDistanceFactor(a,b) #define IDirectSound3DListener_SetDopplerFactor(p,a,b) (p)->SetDopplerFactor(a,b) #define IDirectSound3DListener_SetOrientation(p,a,b,c,d,e,f,g) (p)->SetOrientation(a,b,c,d,e,f,g) #define IDirectSound3DListener_SetPosition(p,a,b,c,d) (p)->SetPosition(a,b,c,d) #define IDirectSound3DListener_SetRolloffFactor(p,a,b) (p)->SetRolloffFactor(a,b) #define IDirectSound3DListener_SetVelocity(p,a,b,c,d) (p)->SetVelocity(a,b,c,d) #define IDirectSound3DListener_CommitDeferredSettings(p) (p)->CommitDeferredSettings() #endif // !defined(__cplusplus) || defined(CINTERFACE) // // IDirectSound3DBuffer // DEFINE_GUID(IID_IDirectSound3DBuffer, 0x279AFA86, 0x4981, 0x11CE, 0xA5, 0x21, 0x00, 0x20, 0xAF, 0x0B, 0xE5, 0x60); #undef INTERFACE #define INTERFACE IDirectSound3DBuffer DECLARE_INTERFACE_(IDirectSound3DBuffer, IUnknown) { // IUnknown methods STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // IDirectSoundBuffer3D methods STDMETHOD(GetAllParameters) (THIS_ LPDS3DBUFFER) PURE; STDMETHOD(GetConeAngles) (THIS_ LPDWORD, LPDWORD) PURE; STDMETHOD(GetConeOrientation) (THIS_ LPD3DVECTOR) PURE; STDMETHOD(GetConeOutsideVolume) (THIS_ LPLONG) PURE; STDMETHOD(GetMaxDistance) (THIS_ LPD3DVALUE) PURE; STDMETHOD(GetMinDistance) (THIS_ LPD3DVALUE) PURE; STDMETHOD(GetMode) (THIS_ LPDWORD) PURE; STDMETHOD(GetPosition) (THIS_ LPD3DVECTOR) PURE; STDMETHOD(GetVelocity) (THIS_ LPD3DVECTOR) PURE; STDMETHOD(SetAllParameters) (THIS_ LPCDS3DBUFFER, DWORD) PURE; STDMETHOD(SetConeAngles) (THIS_ DWORD, DWORD, DWORD) PURE; STDMETHOD(SetConeOrientation) (THIS_ D3DVALUE, D3DVALUE, D3DVALUE, DWORD) PURE; STDMETHOD(SetConeOutsideVolume) (THIS_ LONG, DWORD) PURE; STDMETHOD(SetMaxDistance) (THIS_ D3DVALUE, DWORD) PURE; STDMETHOD(SetMinDistance) (THIS_ D3DVALUE, DWORD) PURE; STDMETHOD(SetMode) (THIS_ DWORD, DWORD) PURE; STDMETHOD(SetPosition) (THIS_ D3DVALUE, D3DVALUE, D3DVALUE, DWORD) PURE; STDMETHOD(SetVelocity) (THIS_ D3DVALUE, D3DVALUE, D3DVALUE, DWORD) PURE; }; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirectSound3DBuffer_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectSound3DBuffer_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectSound3DBuffer_Release(p) (p)->lpVtbl->Release(p) #define IDirectSound3DBuffer_GetAllParameters(p,a) (p)->lpVtbl->GetAllParameters(p,a) #define IDirectSound3DBuffer_GetConeAngles(p,a,b) (p)->lpVtbl->GetConeAngles(p,a,b) #define IDirectSound3DBuffer_GetConeOrientation(p,a) (p)->lpVtbl->GetConeOrientation(p,a) #define IDirectSound3DBuffer_GetConeOutsideVolume(p,a) (p)->lpVtbl->GetConeOutsideVolume(p,a) #define IDirectSound3DBuffer_GetPosition(p,a) (p)->lpVtbl->GetPosition(p,a) #define IDirectSound3DBuffer_GetMinDistance(p,a) (p)->lpVtbl->GetMinDistance(p,a) #define IDirectSound3DBuffer_GetMaxDistance(p,a) (p)->lpVtbl->GetMaxDistance(p,a) #define IDirectSound3DBuffer_GetMode(p,a) (p)->lpVtbl->GetMode(p,a) #define IDirectSound3DBuffer_GetVelocity(p,a) (p)->lpVtbl->GetVelocity(p,a) #define IDirectSound3DBuffer_SetAllParameters(p,a,b) (p)->lpVtbl->SetAllParameters(p,a,b) #define IDirectSound3DBuffer_SetConeAngles(p,a,b,c) (p)->lpVtbl->SetConeAngles(p,a,b,c) #define IDirectSound3DBuffer_SetConeOrientation(p,a,b,c,d) (p)->lpVtbl->SetConeOrientation(p,a,b,c,d) #define IDirectSound3DBuffer_SetConeOutsideVolume(p,a,b)(p)->lpVtbl->SetConeOutsideVolume(p,a,b) #define IDirectSound3DBuffer_SetPosition(p,a,b,c,d) (p)->lpVtbl->SetPosition(p,a,b,c,d) #define IDirectSound3DBuffer_SetMinDistance(p,a,b) (p)->lpVtbl->SetMinDistance(p,a,b) #define IDirectSound3DBuffer_SetMaxDistance(p,a,b) (p)->lpVtbl->SetMaxDistance(p,a,b) #define IDirectSound3DBuffer_SetMode(p,a,b) (p)->lpVtbl->SetMode(p,a,b) #define IDirectSound3DBuffer_SetVelocity(p,a,b,c,d) (p)->lpVtbl->SetVelocity(p,a,b,c,d) #else // !defined(__cplusplus) || defined(CINTERFACE) #define IDirectSound3DBuffer_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirectSound3DBuffer_AddRef(p) (p)->AddRef() #define IDirectSound3DBuffer_Release(p) (p)->Release() #define IDirectSound3DBuffer_GetAllParameters(p,a) (p)->GetAllParameters(a) #define IDirectSound3DBuffer_GetConeAngles(p,a,b) (p)->GetConeAngles(a,b) #define IDirectSound3DBuffer_GetConeOrientation(p,a) (p)->GetConeOrientation(a) #define IDirectSound3DBuffer_GetConeOutsideVolume(p,a) (p)->GetConeOutsideVolume(a) #define IDirectSound3DBuffer_GetPosition(p,a) (p)->GetPosition(a) #define IDirectSound3DBuffer_GetMinDistance(p,a) (p)->GetMinDistance(a) #define IDirectSound3DBuffer_GetMaxDistance(p,a) (p)->GetMaxDistance(a) #define IDirectSound3DBuffer_GetMode(p,a) (p)->GetMode(a) #define IDirectSound3DBuffer_GetVelocity(p,a) (p)->GetVelocity(a) #define IDirectSound3DBuffer_SetAllParameters(p,a,b) (p)->SetAllParameters(a,b) #define IDirectSound3DBuffer_SetConeAngles(p,a,b,c) (p)->SetConeAngles(a,b,c) #define IDirectSound3DBuffer_SetConeOrientation(p,a,b,c,d) (p)->SetConeOrientation(a,b,c,d) #define IDirectSound3DBuffer_SetConeOutsideVolume(p,a,b)(p)->SetConeOutsideVolume(a,b) #define IDirectSound3DBuffer_SetPosition(p,a,b,c,d) (p)->SetPosition(a,b,c,d) #define IDirectSound3DBuffer_SetMinDistance(p,a,b) (p)->SetMinDistance(a,b) #define IDirectSound3DBuffer_SetMaxDistance(p,a,b) (p)->SetMaxDistance(a,b) #define IDirectSound3DBuffer_SetMode(p,a,b) (p)->SetMode(a,b) #define IDirectSound3DBuffer_SetVelocity(p,a,b,c,d) (p)->SetVelocity(a,b,c,d) #endif // !defined(__cplusplus) || defined(CINTERFACE) // // IDirectSoundCapture // DEFINE_GUID(IID_IDirectSoundCapture, 0xb0210781, 0x89cd, 0x11d0, 0xaf, 0x8, 0x0, 0xa0, 0xc9, 0x25, 0xcd, 0x16); #undef INTERFACE #define INTERFACE IDirectSoundCapture DECLARE_INTERFACE_(IDirectSoundCapture, IUnknown) { // IUnknown methods STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // IDirectSoundCapture methods STDMETHOD(CreateCaptureBuffer) (THIS_ LPCDSCBUFFERDESC, LPDIRECTSOUNDCAPTUREBUFFER *, LPUNKNOWN) PURE; STDMETHOD(GetCaps) (THIS_ LPDSCCAPS ) PURE; STDMETHOD(Initialize) (THIS_ LPGUID) PURE; }; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirectSoundCapture_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectSoundCapture_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectSoundCapture_Release(p) (p)->lpVtbl->Release(p) #define IDirectSoundCapture_CreateCaptureBuffer(p,a,b,c) (p)->lpVtbl->CreateCaptureBuffer(p,a,b,c) #define IDirectSoundCapture_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a) #define IDirectSoundCapture_Initialize(p,a) (p)->lpVtbl->Initialize(p,a) #else // !defined(__cplusplus) || defined(CINTERFACE) #define IDirectSoundCapture_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirectSoundCapture_AddRef(p) (p)->AddRef() #define IDirectSoundCapture_Release(p) (p)->Release() #define IDirectSoundCapture_CreateCaptureBuffer(p,a,b,c) (p)->CreateCaptureBuffer(a,b,c) #define IDirectSoundCapture_GetCaps(p,a) (p)->GetCaps(a) #define IDirectSoundCapture_Initialize(p,a) (p)->Initialize(a) #endif // !defined(__cplusplus) || defined(CINTERFACE) // // IDirectSoundCaptureBuffer // DEFINE_GUID(IID_IDirectSoundCaptureBuffer, 0xb0210782, 0x89cd, 0x11d0, 0xaf, 0x8, 0x0, 0xa0, 0xc9, 0x25, 0xcd, 0x16); #undef INTERFACE #define INTERFACE IDirectSoundCaptureBuffer DECLARE_INTERFACE_(IDirectSoundCaptureBuffer, IUnknown) { // IUnknown methods STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // IDirectSoundCaptureBuffer methods STDMETHOD(GetCaps) (THIS_ LPDSCBCAPS ) PURE; STDMETHOD(GetCurrentPosition) (THIS_ LPDWORD, LPDWORD ) PURE; STDMETHOD(GetFormat) (THIS_ LPWAVEFORMATEX, DWORD, LPDWORD ) PURE; STDMETHOD(GetStatus) (THIS_ LPDWORD ) PURE; STDMETHOD(Initialize) (THIS_ LPDIRECTSOUNDCAPTURE, LPCDSCBUFFERDESC) PURE; STDMETHOD(Lock) (THIS_ DWORD, DWORD, LPVOID *, LPDWORD, LPVOID *, LPDWORD, DWORD) PURE; STDMETHOD(Start) (THIS_ DWORD) PURE; STDMETHOD(Stop) (THIS) PURE; STDMETHOD(Unlock) (THIS_ LPVOID, DWORD, LPVOID, DWORD) PURE; }; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirectSoundCaptureBuffer_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectSoundCaptureBuffer_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectSoundCaptureBuffer_Release(p) (p)->lpVtbl->Release(p) #define IDirectSoundCaptureBuffer_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a) #define IDirectSoundCaptureBuffer_GetCurrentPosition(p,a,b) (p)->lpVtbl->GetCurrentPosition(p,a,b) #define IDirectSoundCaptureBuffer_GetFormat(p,a,b,c) (p)->lpVtbl->GetFormat(p,a,b,c) #define IDirectSoundCaptureBuffer_GetStatus(p,a) (p)->lpVtbl->GetStatus(p,a) #define IDirectSoundCaptureBuffer_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b) #define IDirectSoundCaptureBuffer_Lock(p,a,b,c,d,e,f,g) (p)->lpVtbl->Lock(p,a,b,c,d,e,f,g) #define IDirectSoundCaptureBuffer_Start(p,a) (p)->lpVtbl->Start(p,a) #define IDirectSoundCaptureBuffer_Stop(p) (p)->lpVtbl->Stop(p) #define IDirectSoundCaptureBuffer_Unlock(p,a,b,c,d) (p)->lpVtbl->Unlock(p,a,b,c,d) #else // !defined(__cplusplus) || defined(CINTERFACE) #define IDirectSoundCaptureBuffer_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirectSoundCaptureBuffer_AddRef(p) (p)->AddRef() #define IDirectSoundCaptureBuffer_Release(p) (p)->Release() #define IDirectSoundCaptureBuffer_GetCaps(p,a) (p)->GetCaps(a) #define IDirectSoundCaptureBuffer_GetCurrentPosition(p,a,b) (p)->GetCurrentPosition(a,b) #define IDirectSoundCaptureBuffer_GetFormat(p,a,b,c) (p)->GetFormat(a,b,c) #define IDirectSoundCaptureBuffer_GetStatus(p,a) (p)->GetStatus(a) #define IDirectSoundCaptureBuffer_Initialize(p,a,b) (p)->Initialize(a,b) #define IDirectSoundCaptureBuffer_Lock(p,a,b,c,d,e,f,g) (p)->Lock(a,b,c,d,e,f,g) #define IDirectSoundCaptureBuffer_Start(p,a) (p)->Start(a) #define IDirectSoundCaptureBuffer_Stop(p) (p)->Stop() #define IDirectSoundCaptureBuffer_Unlock(p,a,b,c,d) (p)->Unlock(a,b,c,d) #endif // !defined(__cplusplus) || defined(CINTERFACE) // // IDirectSoundNotify // DEFINE_GUID(IID_IDirectSoundNotify, 0xb0210783, 0x89cd, 0x11d0, 0xaf, 0x8, 0x0, 0xa0, 0xc9, 0x25, 0xcd, 0x16); #undef INTERFACE #define INTERFACE IDirectSoundNotify DECLARE_INTERFACE_(IDirectSoundNotify, IUnknown) { // IUnknown methods STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // IDirectSoundNotify methods STDMETHOD(SetNotificationPositions) (THIS_ DWORD, LPCDSBPOSITIONNOTIFY) PURE; }; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirectSoundNotify_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectSoundNotify_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectSoundNotify_Release(p) (p)->lpVtbl->Release(p) #define IDirectSoundNotify_SetNotificationPositions(p,a,b) (p)->lpVtbl->SetNotificationPositions(p,a,b) #else // !defined(__cplusplus) || defined(CINTERFACE) #define IDirectSoundNotify_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirectSoundNotify_AddRef(p) (p)->AddRef() #define IDirectSoundNotify_Release(p) (p)->Release() #define IDirectSoundNotify_SetNotificationPositions(p,a,b) (p)->SetNotificationPositions(a,b) #endif // !defined(__cplusplus) || defined(CINTERFACE) // // IKsPropertySet // #ifndef _IKsPropertySet_ #define _IKsPropertySet_ #ifdef __cplusplus // 'struct' not 'class' per the way DECLARE_INTERFACE_ is defined struct IKsPropertySet; #endif // __cplusplus typedef struct IKsPropertySet *LPKSPROPERTYSET; #define KSPROPERTY_SUPPORT_GET 0x00000001 #define KSPROPERTY_SUPPORT_SET 0x00000002 DEFINE_GUID(IID_IKsPropertySet, 0x31efac30, 0x515c, 0x11d0, 0xa9, 0xaa, 0x00, 0xaa, 0x00, 0x61, 0xbe, 0x93); #undef INTERFACE #define INTERFACE IKsPropertySet DECLARE_INTERFACE_(IKsPropertySet, IUnknown) { // IUnknown methods STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // IKsPropertySet methods STDMETHOD(Get) (THIS_ REFGUID, ULONG, LPVOID, ULONG, LPVOID, ULONG, PULONG) PURE; STDMETHOD(Set) (THIS_ REFGUID, ULONG, LPVOID, ULONG, LPVOID, ULONG) PURE; STDMETHOD(QuerySupport) (THIS_ REFGUID, ULONG, PULONG) PURE; }; #if !defined(__cplusplus) || defined(CINTERFACE) #define IKsPropertySet_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IKsPropertySet_AddRef(p) (p)->lpVtbl->AddRef(p) #define IKsPropertySet_Release(p) (p)->lpVtbl->Release(p) #define IKsPropertySet_Get(p,a,b,c,d,e,f,g) (p)->lpVtbl->Get(p,a,b,c,d,e,f,g) #define IKsPropertySet_Set(p,a,b,c,d,e,f) (p)->lpVtbl->Set(p,a,b,c,d,e,f) #define IKsPropertySet_QuerySupport(p,a,b,c) (p)->lpVtbl->QuerySupport(p,a,b,c) #else // !defined(__cplusplus) || defined(CINTERFACE) #define IKsPropertySet_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IKsPropertySet_AddRef(p) (p)->AddRef() #define IKsPropertySet_Release(p) (p)->Release() #define IKsPropertySet_Get(p,a,b,c,d,e,f,g) (p)->Get(a,b,c,d,e,f,g) #define IKsPropertySet_Set(p,a,b,c,d,e,f) (p)->Set(a,b,c,d,e,f) #define IKsPropertySet_QuerySupport(p,a,b,c) (p)->QuerySupport(a,b,c) #endif // !defined(__cplusplus) || defined(CINTERFACE) #endif // _IKsPropertySet_ // // Return Codes // #define DS_OK 0 // The call failed because resources (such as a priority level) // were already being used by another caller. #define DSERR_ALLOCATED MAKE_DSHRESULT(10) // The control (vol,pan,etc.) requested by the caller is not available. #define DSERR_CONTROLUNAVAIL MAKE_DSHRESULT(30) // An invalid parameter was passed to the returning function #define DSERR_INVALIDPARAM E_INVALIDARG // This call is not valid for the current state of this object #define DSERR_INVALIDCALL MAKE_DSHRESULT(50) // An undetermined error occured inside the DirectSound subsystem #define DSERR_GENERIC E_FAIL // The caller does not have the priority level required for the function to // succeed. #define DSERR_PRIOLEVELNEEDED MAKE_DSHRESULT(70) // Not enough free memory is available to complete the operation #define DSERR_OUTOFMEMORY E_OUTOFMEMORY // The specified WAVE format is not supported #define DSERR_BADFORMAT MAKE_DSHRESULT(100) // The function called is not supported at this time #define DSERR_UNSUPPORTED E_NOTIMPL // No sound driver is available for use #define DSERR_NODRIVER MAKE_DSHRESULT(120) // This object is already initialized #define DSERR_ALREADYINITIALIZED MAKE_DSHRESULT(130) // This object does not support aggregation #define DSERR_NOAGGREGATION CLASS_E_NOAGGREGATION // The buffer memory has been lost, and must be restored. #define DSERR_BUFFERLOST MAKE_DSHRESULT(150) // Another app has a higher priority level, preventing this call from // succeeding. #define DSERR_OTHERAPPHASPRIO MAKE_DSHRESULT(160) // This object has not been initialized #define DSERR_UNINITIALIZED MAKE_DSHRESULT(170) // The requested COM interface is not available #define DSERR_NOINTERFACE E_NOINTERFACE // // Flags // #define DSCAPS_PRIMARYMONO 0x00000001 #define DSCAPS_PRIMARYSTEREO 0x00000002 #define DSCAPS_PRIMARY8BIT 0x00000004 #define DSCAPS_PRIMARY16BIT 0x00000008 #define DSCAPS_CONTINUOUSRATE 0x00000010 #define DSCAPS_EMULDRIVER 0x00000020 #define DSCAPS_CERTIFIED 0x00000040 #define DSCAPS_SECONDARYMONO 0x00000100 #define DSCAPS_SECONDARYSTEREO 0x00000200 #define DSCAPS_SECONDARY8BIT 0x00000400 #define DSCAPS_SECONDARY16BIT 0x00000800 #define DSBPLAY_LOOPING 0x00000001 #define DSBSTATUS_PLAYING 0x00000001 #define DSBSTATUS_BUFFERLOST 0x00000002 #define DSBSTATUS_LOOPING 0x00000004 #define DSBLOCK_FROMWRITECURSOR 0x00000001 #define DSBLOCK_ENTIREBUFFER 0x00000002 #define DSSCL_NORMAL 0x00000001 #define DSSCL_PRIORITY 0x00000002 #define DSSCL_EXCLUSIVE 0x00000003 #define DSSCL_WRITEPRIMARY 0x00000004 #define DS3DMODE_NORMAL 0x00000000 #define DS3DMODE_HEADRELATIVE 0x00000001 #define DS3DMODE_DISABLE 0x00000002 #define DS3D_IMMEDIATE 0x00000000 #define DS3D_DEFERRED 0x00000001 #define DS3D_MINDISTANCEFACTOR 0.0f #define DS3D_MAXDISTANCEFACTOR 10.0f #define DS3D_DEFAULTDISTANCEFACTOR 1.0f #define DS3D_MINROLLOFFFACTOR 0.0f #define DS3D_MAXROLLOFFFACTOR 10.0f #define DS3D_DEFAULTROLLOFFFACTOR 1.0f #define DS3D_MINDOPPLERFACTOR 0.0f #define DS3D_MAXDOPPLERFACTOR 10.0f #define DS3D_DEFAULTDOPPLERFACTOR 1.0f #define DS3D_DEFAULTMINDISTANCE 1.0f #define DS3D_DEFAULTMAXDISTANCE 1000000000.0f #define DS3D_MINCONEANGLE 0 #define DS3D_MAXCONEANGLE 360 #define DS3D_DEFAULTCONEANGLE 360 #define DS3D_DEFAULTCONEOUTSIDEVOLUME 0 #define DSBCAPS_PRIMARYBUFFER 0x00000001 #define DSBCAPS_STATIC 0x00000002 #define DSBCAPS_LOCHARDWARE 0x00000004 #define DSBCAPS_LOCSOFTWARE 0x00000008 #define DSBCAPS_CTRL3D 0x00000010 #define DSBCAPS_CTRLFREQUENCY 0x00000020 #define DSBCAPS_CTRLPAN 0x00000040 #define DSBCAPS_CTRLVOLUME 0x00000080 #define DSBCAPS_CTRLPOSITIONNOTIFY 0x00000100 #define DSBCAPS_CTRLDEFAULT 0x000000E0 #define DSBCAPS_CTRLALL 0x000001F0 #define DSBCAPS_STICKYFOCUS 0x00004000 #define DSBCAPS_GLOBALFOCUS 0x00008000 #define DSBCAPS_GETCURRENTPOSITION2 0x00010000 #define DSBCAPS_MUTE3DATMAXDISTANCE 0x00020000 #define DSCBCAPS_WAVEMAPPED 0x80000000 #define DSSPEAKER_HEADPHONE 0x00000001 #define DSSPEAKER_MONO 0x00000002 #define DSSPEAKER_QUAD 0x00000003 #define DSSPEAKER_STEREO 0x00000004 #define DSSPEAKER_SURROUND 0x00000005 #define DSSPEAKER_GEOMETRY_MIN 0x00000005 // 5 degrees #define DSSPEAKER_GEOMETRY_NARROW 0x0000000A // 10 degrees #define DSSPEAKER_GEOMETRY_WIDE 0x00000014 // 20 degrees #define DSSPEAKER_GEOMETRY_MAX 0x000000B4 // 180 degrees #define DSSPEAKER_COMBINED(c, g) ((DWORD)(((BYTE)(c)) | ((DWORD)((BYTE)(g))) << 16)) #define DSSPEAKER_CONFIG(a) ((BYTE)(a)) #define DSSPEAKER_GEOMETRY(a) ((BYTE)(((DWORD)(a) >> 16) & 0x00FF)) #define DSCCAPS_EMULDRIVER 0x00000020 #define DSCBLOCK_ENTIREBUFFER 0x00000001 #define DSCBSTATUS_CAPTURING 0x00000001 #define DSCBSTATUS_LOOPING 0x00000002 #define DSCBSTART_LOOPING 0x00000001 #define DSBFREQUENCY_MIN 100 #define DSBFREQUENCY_MAX 100000 #define DSBFREQUENCY_ORIGINAL 0 #define DSBPAN_LEFT -10000 #define DSBPAN_CENTER 0 #define DSBPAN_RIGHT 10000 #define DSBVOLUME_MIN -10000 #define DSBVOLUME_MAX 0 #define DSBSIZE_MIN 4 #define DSBSIZE_MAX 0x0FFFFFFF #define DSBPN_OFFSETSTOP 0xFFFFFFFF #ifdef __cplusplus }; #endif // __cplusplus #endif // __DSOUND_INCLUDED__ ================================================ FILE: Include/3DFX.H ================================================ /* ** Copyright (c) 1995, 3Dfx Interactive, Inc. ** All Rights Reserved. ** ** This is UNPUBLISHED PROPRIETARY SOURCE CODE of 3Dfx Interactive, Inc.; ** the contents of this file may not be disclosed to third parties, copied or ** duplicated in any form, in whole or in part, without the prior written ** permission of 3Dfx Interactive, Inc. ** ** RESTRICTED RIGHTS LEGEND: ** Use, duplication or disclosure by the Government is subject to restrictions ** as set forth in subdivision (c)(1)(ii) of the Rights in Technical Data ** and Computer Software clause at DFARS 252.227-7013, and/or in similar or ** successor clauses in the FAR, DOD or NASA FAR Supplement. Unpublished - ** rights reserved under the Copyright Laws of the United States. ** ** $Revision: 9 $ ** $Date: 12/23/97 9:57a $ */ #ifndef __3DFX_H__ #define __3DFX_H__ /* ** basic data types */ typedef unsigned char FxU8; typedef signed char FxI8; typedef unsigned short FxU16; typedef signed short FxI16; typedef signed long FxI32; typedef unsigned long FxU32; typedef int FxBool; typedef float FxFloat; typedef double FxDouble; /* ** color types */ typedef unsigned long FxColor_t; typedef struct { float r, g, b, a; } FxColor4; /* ** fundamental types */ #define FXTRUE 1 #define FXFALSE 0 /* ** helper macros */ #define FXUNUSED( a ) ((void)(a)) #define FXBIT( i ) ( 1L << (i) ) /* ** export macros */ #if defined(__MSC__) # if defined (MSVC16) # define FX_ENTRY # define FX_CALL # else # define FX_ENTRY extern # define FX_CALL __stdcall # endif #elif defined(__WATCOMC__) # define FX_ENTRY extern # define FX_CALL __stdcall #elif defined (__IBMC__) || defined (__IBMCPP__) /* IBM Visual Age C/C++: */ # define FX_ENTRY extern # define FX_CALL __stdcall #elif defined(__DJGPP__) # define FX_ENTRY extern # define FX_CALL #elif defined(__unix__) # define FX_ENTRY extern # define FX_CALL #elif defined(__MWERKS__) # if macintosh # define FX_ENTRY extern # define FX_CALL # else /* !macintosh */ # error "Unknown MetroWerks target platform" # endif /* !macintosh */ #else # warning define FX_ENTRY & FX_CALL for your compiler # define FX_ENTRY extern # define FX_CALL #endif /* ** x86 compiler specific stuff */ #if defined(__BORLANDC_) # define REALMODE # define REGW( a, b ) ((a).x.b) # define REGB( a, b ) ((a).h.b) # define INT86( a, b, c ) int86(a,b,c) # define INT86X( a, b, c, d ) int86x(a,b,c,d) # define RM_SEG( a ) FP_SEG( a ) # define RM_OFF( a ) FP_OFF( a ) #elif defined(__WATCOMC__) # undef FP_SEG # undef FP_OFF # define REGW( a, b ) ((a).w.b) # define REGB( a, b ) ((a).h.b) # define INT86( a, b, c ) int386(a,b,c) # define INT86X( a, b, c, d ) int386x(a,b,c,d) # define RM_SEG( a ) ( ( ( ( FxU32 ) (a) ) & 0x000F0000 ) >> 4 ) # define RM_OFF( a ) ( ( FxU16 ) (a) ) #endif #endif /* !__3DFX_H__ */ ================================================ FILE: Include/D3D10.h ================================================ /*------------------------------------------------------------------------------------- * * Copyright (c) Microsoft Corporation * *-------------------------------------------------------------------------------------*/ /* this ALWAYS GENERATED file contains the definitions for the interfaces */ /* File created by MIDL compiler version 7.00.0555 */ /* @@MIDL_FILE_HEADING( ) */ #pragma warning( disable: 4049 ) /* more than 64k source lines */ /* verify that the version is high enough to compile this file*/ #ifndef __REQUIRED_RPCNDR_H_VERSION__ #define __REQUIRED_RPCNDR_H_VERSION__ 475 #endif /* verify that the version is high enough to compile this file*/ #ifndef __REQUIRED_RPCSAL_H_VERSION__ #define __REQUIRED_RPCSAL_H_VERSION__ 100 #endif #include "rpc.h" #include "rpcndr.h" #ifndef __RPCNDR_H_VERSION__ #error this stub requires an updated version of #endif // __RPCNDR_H_VERSION__ #ifndef COM_NO_WINDOWS_H #include "windows.h" #include "ole2.h" #endif /*COM_NO_WINDOWS_H*/ #ifndef __d3d10_h__ #define __d3d10_h__ #if defined(_MSC_VER) && (_MSC_VER >= 1020) #pragma once #endif /* Forward Declarations */ #ifndef __ID3D10DeviceChild_FWD_DEFINED__ #define __ID3D10DeviceChild_FWD_DEFINED__ typedef interface ID3D10DeviceChild ID3D10DeviceChild; #endif /* __ID3D10DeviceChild_FWD_DEFINED__ */ #ifndef __ID3D10DepthStencilState_FWD_DEFINED__ #define __ID3D10DepthStencilState_FWD_DEFINED__ typedef interface ID3D10DepthStencilState ID3D10DepthStencilState; #endif /* __ID3D10DepthStencilState_FWD_DEFINED__ */ #ifndef __ID3D10BlendState_FWD_DEFINED__ #define __ID3D10BlendState_FWD_DEFINED__ typedef interface ID3D10BlendState ID3D10BlendState; #endif /* __ID3D10BlendState_FWD_DEFINED__ */ #ifndef __ID3D10RasterizerState_FWD_DEFINED__ #define __ID3D10RasterizerState_FWD_DEFINED__ typedef interface ID3D10RasterizerState ID3D10RasterizerState; #endif /* __ID3D10RasterizerState_FWD_DEFINED__ */ #ifndef __ID3D10Resource_FWD_DEFINED__ #define __ID3D10Resource_FWD_DEFINED__ typedef interface ID3D10Resource ID3D10Resource; #endif /* __ID3D10Resource_FWD_DEFINED__ */ #ifndef __ID3D10Buffer_FWD_DEFINED__ #define __ID3D10Buffer_FWD_DEFINED__ typedef interface ID3D10Buffer ID3D10Buffer; #endif /* __ID3D10Buffer_FWD_DEFINED__ */ #ifndef __ID3D10Texture1D_FWD_DEFINED__ #define __ID3D10Texture1D_FWD_DEFINED__ typedef interface ID3D10Texture1D ID3D10Texture1D; #endif /* __ID3D10Texture1D_FWD_DEFINED__ */ #ifndef __ID3D10Texture2D_FWD_DEFINED__ #define __ID3D10Texture2D_FWD_DEFINED__ typedef interface ID3D10Texture2D ID3D10Texture2D; #endif /* __ID3D10Texture2D_FWD_DEFINED__ */ #ifndef __ID3D10Texture3D_FWD_DEFINED__ #define __ID3D10Texture3D_FWD_DEFINED__ typedef interface ID3D10Texture3D ID3D10Texture3D; #endif /* __ID3D10Texture3D_FWD_DEFINED__ */ #ifndef __ID3D10View_FWD_DEFINED__ #define __ID3D10View_FWD_DEFINED__ typedef interface ID3D10View ID3D10View; #endif /* __ID3D10View_FWD_DEFINED__ */ #ifndef __ID3D10ShaderResourceView_FWD_DEFINED__ #define __ID3D10ShaderResourceView_FWD_DEFINED__ typedef interface ID3D10ShaderResourceView ID3D10ShaderResourceView; #endif /* __ID3D10ShaderResourceView_FWD_DEFINED__ */ #ifndef __ID3D10RenderTargetView_FWD_DEFINED__ #define __ID3D10RenderTargetView_FWD_DEFINED__ typedef interface ID3D10RenderTargetView ID3D10RenderTargetView; #endif /* __ID3D10RenderTargetView_FWD_DEFINED__ */ #ifndef __ID3D10DepthStencilView_FWD_DEFINED__ #define __ID3D10DepthStencilView_FWD_DEFINED__ typedef interface ID3D10DepthStencilView ID3D10DepthStencilView; #endif /* __ID3D10DepthStencilView_FWD_DEFINED__ */ #ifndef __ID3D10VertexShader_FWD_DEFINED__ #define __ID3D10VertexShader_FWD_DEFINED__ typedef interface ID3D10VertexShader ID3D10VertexShader; #endif /* __ID3D10VertexShader_FWD_DEFINED__ */ #ifndef __ID3D10GeometryShader_FWD_DEFINED__ #define __ID3D10GeometryShader_FWD_DEFINED__ typedef interface ID3D10GeometryShader ID3D10GeometryShader; #endif /* __ID3D10GeometryShader_FWD_DEFINED__ */ #ifndef __ID3D10PixelShader_FWD_DEFINED__ #define __ID3D10PixelShader_FWD_DEFINED__ typedef interface ID3D10PixelShader ID3D10PixelShader; #endif /* __ID3D10PixelShader_FWD_DEFINED__ */ #ifndef __ID3D10InputLayout_FWD_DEFINED__ #define __ID3D10InputLayout_FWD_DEFINED__ typedef interface ID3D10InputLayout ID3D10InputLayout; #endif /* __ID3D10InputLayout_FWD_DEFINED__ */ #ifndef __ID3D10SamplerState_FWD_DEFINED__ #define __ID3D10SamplerState_FWD_DEFINED__ typedef interface ID3D10SamplerState ID3D10SamplerState; #endif /* __ID3D10SamplerState_FWD_DEFINED__ */ #ifndef __ID3D10Asynchronous_FWD_DEFINED__ #define __ID3D10Asynchronous_FWD_DEFINED__ typedef interface ID3D10Asynchronous ID3D10Asynchronous; #endif /* __ID3D10Asynchronous_FWD_DEFINED__ */ #ifndef __ID3D10Query_FWD_DEFINED__ #define __ID3D10Query_FWD_DEFINED__ typedef interface ID3D10Query ID3D10Query; #endif /* __ID3D10Query_FWD_DEFINED__ */ #ifndef __ID3D10Predicate_FWD_DEFINED__ #define __ID3D10Predicate_FWD_DEFINED__ typedef interface ID3D10Predicate ID3D10Predicate; #endif /* __ID3D10Predicate_FWD_DEFINED__ */ #ifndef __ID3D10Counter_FWD_DEFINED__ #define __ID3D10Counter_FWD_DEFINED__ typedef interface ID3D10Counter ID3D10Counter; #endif /* __ID3D10Counter_FWD_DEFINED__ */ #ifndef __ID3D10Device_FWD_DEFINED__ #define __ID3D10Device_FWD_DEFINED__ typedef interface ID3D10Device ID3D10Device; #endif /* __ID3D10Device_FWD_DEFINED__ */ #ifndef __ID3D10Multithread_FWD_DEFINED__ #define __ID3D10Multithread_FWD_DEFINED__ typedef interface ID3D10Multithread ID3D10Multithread; #endif /* __ID3D10Multithread_FWD_DEFINED__ */ /* header files for imported files */ #include "oaidl.h" #include "ocidl.h" #include "dxgi.h" #include "d3dcommon.h" #ifdef __cplusplus extern "C"{ #endif /* interface __MIDL_itf_d3d10_0000_0000 */ /* [local] */ #ifndef _D3D10_CONSTANTS #define _D3D10_CONSTANTS #define D3D10_16BIT_INDEX_STRIP_CUT_VALUE ( 0xffff ) #define D3D10_32BIT_INDEX_STRIP_CUT_VALUE ( 0xffffffff ) #define D3D10_8BIT_INDEX_STRIP_CUT_VALUE ( 0xff ) #define D3D10_ARRAY_AXIS_ADDRESS_RANGE_BIT_COUNT ( 9 ) #define D3D10_CLIP_OR_CULL_DISTANCE_COUNT ( 8 ) #define D3D10_CLIP_OR_CULL_DISTANCE_ELEMENT_COUNT ( 2 ) #define D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT ( 14 ) #define D3D10_COMMONSHADER_CONSTANT_BUFFER_COMPONENTS ( 4 ) #define D3D10_COMMONSHADER_CONSTANT_BUFFER_COMPONENT_BIT_COUNT ( 32 ) #define D3D10_COMMONSHADER_CONSTANT_BUFFER_HW_SLOT_COUNT ( 15 ) #define D3D10_COMMONSHADER_CONSTANT_BUFFER_REGISTER_COMPONENTS ( 4 ) #define D3D10_COMMONSHADER_CONSTANT_BUFFER_REGISTER_COUNT ( 15 ) #define D3D10_COMMONSHADER_CONSTANT_BUFFER_REGISTER_READS_PER_INST ( 1 ) #define D3D10_COMMONSHADER_CONSTANT_BUFFER_REGISTER_READ_PORTS ( 1 ) #define D3D10_COMMONSHADER_FLOWCONTROL_NESTING_LIMIT ( 64 ) #define D3D10_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_COMPONENTS ( 4 ) #define D3D10_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_COUNT ( 1 ) #define D3D10_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_READS_PER_INST ( 1 ) #define D3D10_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_READ_PORTS ( 1 ) #define D3D10_COMMONSHADER_IMMEDIATE_VALUE_COMPONENT_BIT_COUNT ( 32 ) #define D3D10_COMMONSHADER_INPUT_RESOURCE_REGISTER_COMPONENTS ( 1 ) #define D3D10_COMMONSHADER_INPUT_RESOURCE_REGISTER_COUNT ( 128 ) #define D3D10_COMMONSHADER_INPUT_RESOURCE_REGISTER_READS_PER_INST ( 1 ) #define D3D10_COMMONSHADER_INPUT_RESOURCE_REGISTER_READ_PORTS ( 1 ) #define D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT ( 128 ) #define D3D10_COMMONSHADER_SAMPLER_REGISTER_COMPONENTS ( 1 ) #define D3D10_COMMONSHADER_SAMPLER_REGISTER_COUNT ( 16 ) #define D3D10_COMMONSHADER_SAMPLER_REGISTER_READS_PER_INST ( 1 ) #define D3D10_COMMONSHADER_SAMPLER_REGISTER_READ_PORTS ( 1 ) #define D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT ( 16 ) #define D3D10_COMMONSHADER_SUBROUTINE_NESTING_LIMIT ( 32 ) #define D3D10_COMMONSHADER_TEMP_REGISTER_COMPONENTS ( 4 ) #define D3D10_COMMONSHADER_TEMP_REGISTER_COMPONENT_BIT_COUNT ( 32 ) #define D3D10_COMMONSHADER_TEMP_REGISTER_COUNT ( 4096 ) #define D3D10_COMMONSHADER_TEMP_REGISTER_READS_PER_INST ( 3 ) #define D3D10_COMMONSHADER_TEMP_REGISTER_READ_PORTS ( 3 ) #define D3D10_COMMONSHADER_TEXCOORD_RANGE_REDUCTION_MAX ( 10 ) #define D3D10_COMMONSHADER_TEXCOORD_RANGE_REDUCTION_MIN ( -10 ) #define D3D10_COMMONSHADER_TEXEL_OFFSET_MAX_NEGATIVE ( -8 ) #define D3D10_COMMONSHADER_TEXEL_OFFSET_MAX_POSITIVE ( 7 ) #define D3D10_DEFAULT_BLEND_FACTOR_ALPHA ( 1.0f ) #define D3D10_DEFAULT_BLEND_FACTOR_BLUE ( 1.0f ) #define D3D10_DEFAULT_BLEND_FACTOR_GREEN ( 1.0f ) #define D3D10_DEFAULT_BLEND_FACTOR_RED ( 1.0f ) #define D3D10_DEFAULT_BORDER_COLOR_COMPONENT ( 0.0f ) #define D3D10_DEFAULT_DEPTH_BIAS ( 0 ) #define D3D10_DEFAULT_DEPTH_BIAS_CLAMP ( 0.0f ) #define D3D10_DEFAULT_MAX_ANISOTROPY ( 16.0f ) #define D3D10_DEFAULT_MIP_LOD_BIAS ( 0.0f ) #define D3D10_DEFAULT_RENDER_TARGET_ARRAY_INDEX ( 0 ) #define D3D10_DEFAULT_SAMPLE_MASK ( 0xffffffff ) #define D3D10_DEFAULT_SCISSOR_ENDX ( 0 ) #define D3D10_DEFAULT_SCISSOR_ENDY ( 0 ) #define D3D10_DEFAULT_SCISSOR_STARTX ( 0 ) #define D3D10_DEFAULT_SCISSOR_STARTY ( 0 ) #define D3D10_DEFAULT_SLOPE_SCALED_DEPTH_BIAS ( 0.0f ) #define D3D10_DEFAULT_STENCIL_READ_MASK ( 0xff ) #define D3D10_DEFAULT_STENCIL_REFERENCE ( 0 ) #define D3D10_DEFAULT_STENCIL_WRITE_MASK ( 0xff ) #define D3D10_DEFAULT_VIEWPORT_AND_SCISSORRECT_INDEX ( 0 ) #define D3D10_DEFAULT_VIEWPORT_HEIGHT ( 0 ) #define D3D10_DEFAULT_VIEWPORT_MAX_DEPTH ( 0.0f ) #define D3D10_DEFAULT_VIEWPORT_MIN_DEPTH ( 0.0f ) #define D3D10_DEFAULT_VIEWPORT_TOPLEFTX ( 0 ) #define D3D10_DEFAULT_VIEWPORT_TOPLEFTY ( 0 ) #define D3D10_DEFAULT_VIEWPORT_WIDTH ( 0 ) #define D3D10_FLOAT16_FUSED_TOLERANCE_IN_ULP ( 0.6 ) #define D3D10_FLOAT32_MAX ( 3.402823466e+38f ) #define D3D10_FLOAT32_TO_INTEGER_TOLERANCE_IN_ULP ( 0.6f ) #define D3D10_FLOAT_TO_SRGB_EXPONENT_DENOMINATOR ( 2.4f ) #define D3D10_FLOAT_TO_SRGB_EXPONENT_NUMERATOR ( 1.0f ) #define D3D10_FLOAT_TO_SRGB_OFFSET ( 0.055f ) #define D3D10_FLOAT_TO_SRGB_SCALE_1 ( 12.92f ) #define D3D10_FLOAT_TO_SRGB_SCALE_2 ( 1.055f ) #define D3D10_FLOAT_TO_SRGB_THRESHOLD ( 0.0031308f ) #define D3D10_FTOI_INSTRUCTION_MAX_INPUT ( 2147483647.999f ) #define D3D10_FTOI_INSTRUCTION_MIN_INPUT ( -2147483648.999f ) #define D3D10_FTOU_INSTRUCTION_MAX_INPUT ( 4294967295.999f ) #define D3D10_FTOU_INSTRUCTION_MIN_INPUT ( 0.0f ) #define D3D10_GS_INPUT_PRIM_CONST_REGISTER_COMPONENTS ( 1 ) #define D3D10_GS_INPUT_PRIM_CONST_REGISTER_COMPONENT_BIT_COUNT ( 32 ) #define D3D10_GS_INPUT_PRIM_CONST_REGISTER_COUNT ( 1 ) #define D3D10_GS_INPUT_PRIM_CONST_REGISTER_READS_PER_INST ( 2 ) #define D3D10_GS_INPUT_PRIM_CONST_REGISTER_READ_PORTS ( 1 ) #define D3D10_GS_INPUT_REGISTER_COMPONENTS ( 4 ) #define D3D10_GS_INPUT_REGISTER_COMPONENT_BIT_COUNT ( 32 ) #define D3D10_GS_INPUT_REGISTER_COUNT ( 16 ) #define D3D10_GS_INPUT_REGISTER_READS_PER_INST ( 2 ) #define D3D10_GS_INPUT_REGISTER_READ_PORTS ( 1 ) #define D3D10_GS_INPUT_REGISTER_VERTICES ( 6 ) #define D3D10_GS_OUTPUT_ELEMENTS ( 32 ) #define D3D10_GS_OUTPUT_REGISTER_COMPONENTS ( 4 ) #define D3D10_GS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT ( 32 ) #define D3D10_GS_OUTPUT_REGISTER_COUNT ( 32 ) #define D3D10_IA_DEFAULT_INDEX_BUFFER_OFFSET_IN_BYTES ( 0 ) #define D3D10_IA_DEFAULT_PRIMITIVE_TOPOLOGY ( 0 ) #define D3D10_IA_DEFAULT_VERTEX_BUFFER_OFFSET_IN_BYTES ( 0 ) #define D3D10_IA_INDEX_INPUT_RESOURCE_SLOT_COUNT ( 1 ) #define D3D10_IA_INSTANCE_ID_BIT_COUNT ( 32 ) #define D3D10_IA_INTEGER_ARITHMETIC_BIT_COUNT ( 32 ) #define D3D10_IA_PRIMITIVE_ID_BIT_COUNT ( 32 ) #define D3D10_IA_VERTEX_ID_BIT_COUNT ( 32 ) #define D3D10_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT ( 16 ) #define D3D10_IA_VERTEX_INPUT_STRUCTURE_ELEMENTS_COMPONENTS ( 64 ) #define D3D10_IA_VERTEX_INPUT_STRUCTURE_ELEMENT_COUNT ( 16 ) #define D3D10_INTEGER_DIVIDE_BY_ZERO_QUOTIENT ( 0xffffffff ) #define D3D10_INTEGER_DIVIDE_BY_ZERO_REMAINDER ( 0xffffffff ) #define D3D10_LINEAR_GAMMA ( 1.0f ) #define D3D10_MAX_BORDER_COLOR_COMPONENT ( 1.0f ) #define D3D10_MAX_DEPTH ( 1.0f ) #define D3D10_MAX_MAXANISOTROPY ( 16 ) #define D3D10_MAX_MULTISAMPLE_SAMPLE_COUNT ( 32 ) #define D3D10_MAX_POSITION_VALUE ( 3.402823466e+34f ) #define D3D10_MAX_TEXTURE_DIMENSION_2_TO_EXP ( 17 ) #define D3D10_MIN_BORDER_COLOR_COMPONENT ( 0.0f ) #define D3D10_MIN_DEPTH ( 0.0f ) #define D3D10_MIN_MAXANISOTROPY ( 0 ) #define D3D10_MIP_LOD_BIAS_MAX ( 15.99f ) #define D3D10_MIP_LOD_BIAS_MIN ( -16.0f ) #define D3D10_MIP_LOD_FRACTIONAL_BIT_COUNT ( 6 ) #define D3D10_MIP_LOD_RANGE_BIT_COUNT ( 8 ) #define D3D10_MULTISAMPLE_ANTIALIAS_LINE_WIDTH ( 1.4f ) #define D3D10_NONSAMPLE_FETCH_OUT_OF_RANGE_ACCESS_RESULT ( 0 ) #define D3D10_PIXEL_ADDRESS_RANGE_BIT_COUNT ( 13 ) #define D3D10_PRE_SCISSOR_PIXEL_ADDRESS_RANGE_BIT_COUNT ( 15 ) #define D3D10_PS_FRONTFACING_DEFAULT_VALUE ( 0xffffffff ) #define D3D10_PS_FRONTFACING_FALSE_VALUE ( 0 ) #define D3D10_PS_FRONTFACING_TRUE_VALUE ( 0xffffffff ) #define D3D10_PS_INPUT_REGISTER_COMPONENTS ( 4 ) #define D3D10_PS_INPUT_REGISTER_COMPONENT_BIT_COUNT ( 32 ) #define D3D10_PS_INPUT_REGISTER_COUNT ( 32 ) #define D3D10_PS_INPUT_REGISTER_READS_PER_INST ( 2 ) #define D3D10_PS_INPUT_REGISTER_READ_PORTS ( 1 ) #define D3D10_PS_LEGACY_PIXEL_CENTER_FRACTIONAL_COMPONENT ( 0.0f ) #define D3D10_PS_OUTPUT_DEPTH_REGISTER_COMPONENTS ( 1 ) #define D3D10_PS_OUTPUT_DEPTH_REGISTER_COMPONENT_BIT_COUNT ( 32 ) #define D3D10_PS_OUTPUT_DEPTH_REGISTER_COUNT ( 1 ) #define D3D10_PS_OUTPUT_REGISTER_COMPONENTS ( 4 ) #define D3D10_PS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT ( 32 ) #define D3D10_PS_OUTPUT_REGISTER_COUNT ( 8 ) #define D3D10_PS_PIXEL_CENTER_FRACTIONAL_COMPONENT ( 0.5f ) #define D3D10_REQ_BLEND_OBJECT_COUNT_PER_CONTEXT ( 4096 ) #define D3D10_REQ_BUFFER_RESOURCE_TEXEL_COUNT_2_TO_EXP ( 27 ) #define D3D10_REQ_CONSTANT_BUFFER_ELEMENT_COUNT ( 4096 ) #define D3D10_REQ_DEPTH_STENCIL_OBJECT_COUNT_PER_CONTEXT ( 4096 ) #define D3D10_REQ_DRAWINDEXED_INDEX_COUNT_2_TO_EXP ( 32 ) #define D3D10_REQ_DRAW_VERTEX_COUNT_2_TO_EXP ( 32 ) #define D3D10_REQ_FILTERING_HW_ADDRESSABLE_RESOURCE_DIMENSION ( 8192 ) #define D3D10_REQ_GS_INVOCATION_32BIT_OUTPUT_COMPONENT_LIMIT ( 1024 ) #define D3D10_REQ_IMMEDIATE_CONSTANT_BUFFER_ELEMENT_COUNT ( 4096 ) #define D3D10_REQ_MAXANISOTROPY ( 16 ) #define D3D10_REQ_MIP_LEVELS ( 14 ) #define D3D10_REQ_MULTI_ELEMENT_STRUCTURE_SIZE_IN_BYTES ( 2048 ) #define D3D10_REQ_RASTERIZER_OBJECT_COUNT_PER_CONTEXT ( 4096 ) #define D3D10_REQ_RENDER_TO_BUFFER_WINDOW_WIDTH ( 8192 ) #define D3D10_REQ_RESOURCE_SIZE_IN_MEGABYTES ( 128 ) #define D3D10_REQ_RESOURCE_VIEW_COUNT_PER_CONTEXT_2_TO_EXP ( 20 ) #define D3D10_REQ_SAMPLER_OBJECT_COUNT_PER_CONTEXT ( 4096 ) #define D3D10_REQ_TEXTURE1D_ARRAY_AXIS_DIMENSION ( 512 ) #define D3D10_REQ_TEXTURE1D_U_DIMENSION ( 8192 ) #define D3D10_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION ( 512 ) #define D3D10_REQ_TEXTURE2D_U_OR_V_DIMENSION ( 8192 ) #define D3D10_REQ_TEXTURE3D_U_V_OR_W_DIMENSION ( 2048 ) #define D3D10_REQ_TEXTURECUBE_DIMENSION ( 8192 ) #define D3D10_RESINFO_INSTRUCTION_MISSING_COMPONENT_RETVAL ( 0 ) #define D3D10_SHADER_MAJOR_VERSION ( 4 ) #define D3D10_SHADER_MINOR_VERSION ( 0 ) #define D3D10_SHIFT_INSTRUCTION_PAD_VALUE ( 0 ) #define D3D10_SHIFT_INSTRUCTION_SHIFT_VALUE_BIT_COUNT ( 5 ) #define D3D10_SIMULTANEOUS_RENDER_TARGET_COUNT ( 8 ) #define D3D10_SO_BUFFER_MAX_STRIDE_IN_BYTES ( 2048 ) #define D3D10_SO_BUFFER_MAX_WRITE_WINDOW_IN_BYTES ( 256 ) #define D3D10_SO_BUFFER_SLOT_COUNT ( 4 ) #define D3D10_SO_DDI_REGISTER_INDEX_DENOTING_GAP ( 0xffffffff ) #define D3D10_SO_MULTIPLE_BUFFER_ELEMENTS_PER_BUFFER ( 1 ) #define D3D10_SO_SINGLE_BUFFER_COMPONENT_LIMIT ( 64 ) #define D3D10_SRGB_GAMMA ( 2.2f ) #define D3D10_SRGB_TO_FLOAT_DENOMINATOR_1 ( 12.92f ) #define D3D10_SRGB_TO_FLOAT_DENOMINATOR_2 ( 1.055f ) #define D3D10_SRGB_TO_FLOAT_EXPONENT ( 2.4f ) #define D3D10_SRGB_TO_FLOAT_OFFSET ( 0.055f ) #define D3D10_SRGB_TO_FLOAT_THRESHOLD ( 0.04045f ) #define D3D10_SRGB_TO_FLOAT_TOLERANCE_IN_ULP ( 0.5f ) #define D3D10_STANDARD_COMPONENT_BIT_COUNT ( 32 ) #define D3D10_STANDARD_COMPONENT_BIT_COUNT_DOUBLED ( 64 ) #define D3D10_STANDARD_MAXIMUM_ELEMENT_ALIGNMENT_BYTE_MULTIPLE ( 4 ) #define D3D10_STANDARD_PIXEL_COMPONENT_COUNT ( 128 ) #define D3D10_STANDARD_PIXEL_ELEMENT_COUNT ( 32 ) #define D3D10_STANDARD_VECTOR_SIZE ( 4 ) #define D3D10_STANDARD_VERTEX_ELEMENT_COUNT ( 16 ) #define D3D10_STANDARD_VERTEX_TOTAL_COMPONENT_COUNT ( 64 ) #define D3D10_SUBPIXEL_FRACTIONAL_BIT_COUNT ( 8 ) #define D3D10_SUBTEXEL_FRACTIONAL_BIT_COUNT ( 6 ) #define D3D10_TEXEL_ADDRESS_RANGE_BIT_COUNT ( 18 ) #define D3D10_UNBOUND_MEMORY_ACCESS_RESULT ( 0 ) #define D3D10_VIEWPORT_AND_SCISSORRECT_MAX_INDEX ( 15 ) #define D3D10_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE ( 16 ) #define D3D10_VIEWPORT_BOUNDS_MAX ( 16383 ) #define D3D10_VIEWPORT_BOUNDS_MIN ( -16384 ) #define D3D10_VS_INPUT_REGISTER_COMPONENTS ( 4 ) #define D3D10_VS_INPUT_REGISTER_COMPONENT_BIT_COUNT ( 32 ) #define D3D10_VS_INPUT_REGISTER_COUNT ( 16 ) #define D3D10_VS_INPUT_REGISTER_READS_PER_INST ( 2 ) #define D3D10_VS_INPUT_REGISTER_READ_PORTS ( 1 ) #define D3D10_VS_OUTPUT_REGISTER_COMPONENTS ( 4 ) #define D3D10_VS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT ( 32 ) #define D3D10_VS_OUTPUT_REGISTER_COUNT ( 16 ) #define D3D10_WHQL_CONTEXT_COUNT_FOR_RESOURCE_LIMIT ( 10 ) #define D3D10_WHQL_DRAWINDEXED_INDEX_COUNT_2_TO_EXP ( 25 ) #define D3D10_WHQL_DRAW_VERTEX_COUNT_2_TO_EXP ( 25 ) #define D3D_MAJOR_VERSION ( 10 ) #define D3D_MINOR_VERSION ( 0 ) #define D3D_SPEC_DATE_DAY ( 8 ) #define D3D_SPEC_DATE_MONTH ( 8 ) #define D3D_SPEC_DATE_YEAR ( 2006 ) #define D3D_SPEC_VERSION ( 1.050005 ) #endif #if !defined( __d3d10_1_h__ ) && !(D3D10_HEADER_MINOR_VERSION >= 1) #define D3D10_1_IA_VERTEX_INPUT_STRUCTURE_ELEMENT_COUNT D3D10_IA_VERTEX_INPUT_STRUCTURE_ELEMENT_COUNT #define D3D10_1_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT D3D10_IA_VERTEX_INPUT_STRUCTURE_ELEMENT_COUNT #endif #define _FACD3D10 ( 0x879 ) #define _FACD3D10DEBUG ( ( _FACD3D10 + 1 ) ) #define MAKE_D3D10_HRESULT( code ) MAKE_HRESULT( 1, _FACD3D10, code ) #define MAKE_D3D10_STATUS( code ) MAKE_HRESULT( 0, _FACD3D10, code ) #define D3D10_ERROR_TOO_MANY_UNIQUE_STATE_OBJECTS MAKE_D3D10_HRESULT(1) #define D3D10_ERROR_FILE_NOT_FOUND MAKE_D3D10_HRESULT(2) #if __SAL_H_FULL_VER < 140050727 #undef __in_range #undef __in_xcount_opt #define __in_range(x, y) #define __in_xcount_opt(x) #endif typedef enum D3D10_INPUT_CLASSIFICATION { D3D10_INPUT_PER_VERTEX_DATA = 0, D3D10_INPUT_PER_INSTANCE_DATA = 1 } D3D10_INPUT_CLASSIFICATION; #define D3D10_APPEND_ALIGNED_ELEMENT ( 0xffffffff ) typedef struct D3D10_INPUT_ELEMENT_DESC { LPCSTR SemanticName; UINT SemanticIndex; DXGI_FORMAT Format; UINT InputSlot; UINT AlignedByteOffset; D3D10_INPUT_CLASSIFICATION InputSlotClass; UINT InstanceDataStepRate; } D3D10_INPUT_ELEMENT_DESC; typedef enum D3D10_FILL_MODE { D3D10_FILL_WIREFRAME = 2, D3D10_FILL_SOLID = 3 } D3D10_FILL_MODE; typedef D3D_PRIMITIVE_TOPOLOGY D3D10_PRIMITIVE_TOPOLOGY; typedef D3D_PRIMITIVE D3D10_PRIMITIVE; typedef enum D3D10_CULL_MODE { D3D10_CULL_NONE = 1, D3D10_CULL_FRONT = 2, D3D10_CULL_BACK = 3 } D3D10_CULL_MODE; typedef struct D3D10_SO_DECLARATION_ENTRY { LPCSTR SemanticName; UINT SemanticIndex; BYTE StartComponent; BYTE ComponentCount; BYTE OutputSlot; } D3D10_SO_DECLARATION_ENTRY; typedef struct D3D10_VIEWPORT { INT TopLeftX; INT TopLeftY; UINT Width; UINT Height; FLOAT MinDepth; FLOAT MaxDepth; } D3D10_VIEWPORT; typedef enum D3D10_RESOURCE_DIMENSION { D3D10_RESOURCE_DIMENSION_UNKNOWN = 0, D3D10_RESOURCE_DIMENSION_BUFFER = 1, D3D10_RESOURCE_DIMENSION_TEXTURE1D = 2, D3D10_RESOURCE_DIMENSION_TEXTURE2D = 3, D3D10_RESOURCE_DIMENSION_TEXTURE3D = 4 } D3D10_RESOURCE_DIMENSION; typedef D3D_SRV_DIMENSION D3D10_SRV_DIMENSION; typedef enum D3D10_DSV_DIMENSION { D3D10_DSV_DIMENSION_UNKNOWN = 0, D3D10_DSV_DIMENSION_TEXTURE1D = 1, D3D10_DSV_DIMENSION_TEXTURE1DARRAY = 2, D3D10_DSV_DIMENSION_TEXTURE2D = 3, D3D10_DSV_DIMENSION_TEXTURE2DARRAY = 4, D3D10_DSV_DIMENSION_TEXTURE2DMS = 5, D3D10_DSV_DIMENSION_TEXTURE2DMSARRAY = 6 } D3D10_DSV_DIMENSION; typedef enum D3D10_RTV_DIMENSION { D3D10_RTV_DIMENSION_UNKNOWN = 0, D3D10_RTV_DIMENSION_BUFFER = 1, D3D10_RTV_DIMENSION_TEXTURE1D = 2, D3D10_RTV_DIMENSION_TEXTURE1DARRAY = 3, D3D10_RTV_DIMENSION_TEXTURE2D = 4, D3D10_RTV_DIMENSION_TEXTURE2DARRAY = 5, D3D10_RTV_DIMENSION_TEXTURE2DMS = 6, D3D10_RTV_DIMENSION_TEXTURE2DMSARRAY = 7, D3D10_RTV_DIMENSION_TEXTURE3D = 8 } D3D10_RTV_DIMENSION; typedef enum D3D10_USAGE { D3D10_USAGE_DEFAULT = 0, D3D10_USAGE_IMMUTABLE = 1, D3D10_USAGE_DYNAMIC = 2, D3D10_USAGE_STAGING = 3 } D3D10_USAGE; typedef enum D3D10_BIND_FLAG { D3D10_BIND_VERTEX_BUFFER = 0x1L, D3D10_BIND_INDEX_BUFFER = 0x2L, D3D10_BIND_CONSTANT_BUFFER = 0x4L, D3D10_BIND_SHADER_RESOURCE = 0x8L, D3D10_BIND_STREAM_OUTPUT = 0x10L, D3D10_BIND_RENDER_TARGET = 0x20L, D3D10_BIND_DEPTH_STENCIL = 0x40L } D3D10_BIND_FLAG; typedef enum D3D10_CPU_ACCESS_FLAG { D3D10_CPU_ACCESS_WRITE = 0x10000L, D3D10_CPU_ACCESS_READ = 0x20000L } D3D10_CPU_ACCESS_FLAG; typedef enum D3D10_RESOURCE_MISC_FLAG { D3D10_RESOURCE_MISC_GENERATE_MIPS = 0x1L, D3D10_RESOURCE_MISC_SHARED = 0x2L, D3D10_RESOURCE_MISC_TEXTURECUBE = 0x4L, D3D10_RESOURCE_MISC_SHARED_KEYEDMUTEX = 0x10L, D3D10_RESOURCE_MISC_GDI_COMPATIBLE = 0x20L } D3D10_RESOURCE_MISC_FLAG; typedef enum D3D10_MAP { D3D10_MAP_READ = 1, D3D10_MAP_WRITE = 2, D3D10_MAP_READ_WRITE = 3, D3D10_MAP_WRITE_DISCARD = 4, D3D10_MAP_WRITE_NO_OVERWRITE = 5 } D3D10_MAP; typedef enum D3D10_MAP_FLAG { D3D10_MAP_FLAG_DO_NOT_WAIT = 0x100000L } D3D10_MAP_FLAG; typedef enum D3D10_RAISE_FLAG { D3D10_RAISE_FLAG_DRIVER_INTERNAL_ERROR = 0x1L } D3D10_RAISE_FLAG; typedef enum D3D10_CLEAR_FLAG { D3D10_CLEAR_DEPTH = 0x1L, D3D10_CLEAR_STENCIL = 0x2L } D3D10_CLEAR_FLAG; typedef RECT D3D10_RECT; typedef struct D3D10_BOX { UINT left; UINT top; UINT front; UINT right; UINT bottom; UINT back; } D3D10_BOX; extern RPC_IF_HANDLE __MIDL_itf_d3d10_0000_0000_v0_0_c_ifspec; extern RPC_IF_HANDLE __MIDL_itf_d3d10_0000_0000_v0_0_s_ifspec; #ifndef __ID3D10DeviceChild_INTERFACE_DEFINED__ #define __ID3D10DeviceChild_INTERFACE_DEFINED__ /* interface ID3D10DeviceChild */ /* [unique][local][object][uuid] */ EXTERN_C const IID IID_ID3D10DeviceChild; #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("9B7E4C00-342C-4106-A19F-4F2704F689F0") ID3D10DeviceChild : public IUnknown { public: virtual void STDMETHODCALLTYPE GetDevice( /* [annotation] */ __out ID3D10Device **ppDevice) = 0; virtual HRESULT STDMETHODCALLTYPE GetPrivateData( /* [annotation] */ __in REFGUID guid, /* [annotation] */ __inout UINT *pDataSize, /* [annotation] */ __out_bcount_opt(*pDataSize) void *pData) = 0; virtual HRESULT STDMETHODCALLTYPE SetPrivateData( /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in UINT DataSize, /* [annotation] */ __in_bcount_opt(DataSize) const void *pData) = 0; virtual HRESULT STDMETHODCALLTYPE SetPrivateDataInterface( /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in_opt const IUnknown *pData) = 0; }; #else /* C style interface */ typedef struct ID3D10DeviceChildVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ID3D10DeviceChild * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ __RPC__deref_out void **ppvObject); ULONG ( STDMETHODCALLTYPE *AddRef )( ID3D10DeviceChild * This); ULONG ( STDMETHODCALLTYPE *Release )( ID3D10DeviceChild * This); void ( STDMETHODCALLTYPE *GetDevice )( ID3D10DeviceChild * This, /* [annotation] */ __out ID3D10Device **ppDevice); HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( ID3D10DeviceChild * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __inout UINT *pDataSize, /* [annotation] */ __out_bcount_opt(*pDataSize) void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( ID3D10DeviceChild * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in UINT DataSize, /* [annotation] */ __in_bcount_opt(DataSize) const void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( ID3D10DeviceChild * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in_opt const IUnknown *pData); END_INTERFACE } ID3D10DeviceChildVtbl; interface ID3D10DeviceChild { CONST_VTBL struct ID3D10DeviceChildVtbl *lpVtbl; }; #ifdef COBJMACROS #define ID3D10DeviceChild_QueryInterface(This,riid,ppvObject) \ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) #define ID3D10DeviceChild_AddRef(This) \ ( (This)->lpVtbl -> AddRef(This) ) #define ID3D10DeviceChild_Release(This) \ ( (This)->lpVtbl -> Release(This) ) #define ID3D10DeviceChild_GetDevice(This,ppDevice) \ ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) #define ID3D10DeviceChild_GetPrivateData(This,guid,pDataSize,pData) \ ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) #define ID3D10DeviceChild_SetPrivateData(This,guid,DataSize,pData) \ ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) #define ID3D10DeviceChild_SetPrivateDataInterface(This,guid,pData) \ ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) #endif /* COBJMACROS */ #endif /* C style interface */ #endif /* __ID3D10DeviceChild_INTERFACE_DEFINED__ */ /* interface __MIDL_itf_d3d10_0000_0001 */ /* [local] */ typedef enum D3D10_COMPARISON_FUNC { D3D10_COMPARISON_NEVER = 1, D3D10_COMPARISON_LESS = 2, D3D10_COMPARISON_EQUAL = 3, D3D10_COMPARISON_LESS_EQUAL = 4, D3D10_COMPARISON_GREATER = 5, D3D10_COMPARISON_NOT_EQUAL = 6, D3D10_COMPARISON_GREATER_EQUAL = 7, D3D10_COMPARISON_ALWAYS = 8 } D3D10_COMPARISON_FUNC; typedef enum D3D10_DEPTH_WRITE_MASK { D3D10_DEPTH_WRITE_MASK_ZERO = 0, D3D10_DEPTH_WRITE_MASK_ALL = 1 } D3D10_DEPTH_WRITE_MASK; typedef enum D3D10_STENCIL_OP { D3D10_STENCIL_OP_KEEP = 1, D3D10_STENCIL_OP_ZERO = 2, D3D10_STENCIL_OP_REPLACE = 3, D3D10_STENCIL_OP_INCR_SAT = 4, D3D10_STENCIL_OP_DECR_SAT = 5, D3D10_STENCIL_OP_INVERT = 6, D3D10_STENCIL_OP_INCR = 7, D3D10_STENCIL_OP_DECR = 8 } D3D10_STENCIL_OP; typedef struct D3D10_DEPTH_STENCILOP_DESC { D3D10_STENCIL_OP StencilFailOp; D3D10_STENCIL_OP StencilDepthFailOp; D3D10_STENCIL_OP StencilPassOp; D3D10_COMPARISON_FUNC StencilFunc; } D3D10_DEPTH_STENCILOP_DESC; typedef struct D3D10_DEPTH_STENCIL_DESC { BOOL DepthEnable; D3D10_DEPTH_WRITE_MASK DepthWriteMask; D3D10_COMPARISON_FUNC DepthFunc; BOOL StencilEnable; UINT8 StencilReadMask; UINT8 StencilWriteMask; D3D10_DEPTH_STENCILOP_DESC FrontFace; D3D10_DEPTH_STENCILOP_DESC BackFace; } D3D10_DEPTH_STENCIL_DESC; extern RPC_IF_HANDLE __MIDL_itf_d3d10_0000_0001_v0_0_c_ifspec; extern RPC_IF_HANDLE __MIDL_itf_d3d10_0000_0001_v0_0_s_ifspec; #ifndef __ID3D10DepthStencilState_INTERFACE_DEFINED__ #define __ID3D10DepthStencilState_INTERFACE_DEFINED__ /* interface ID3D10DepthStencilState */ /* [unique][local][object][uuid] */ EXTERN_C const IID IID_ID3D10DepthStencilState; #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("2B4B1CC8-A4AD-41f8-8322-CA86FC3EC675") ID3D10DepthStencilState : public ID3D10DeviceChild { public: virtual void STDMETHODCALLTYPE GetDesc( /* [annotation] */ __out D3D10_DEPTH_STENCIL_DESC *pDesc) = 0; }; #else /* C style interface */ typedef struct ID3D10DepthStencilStateVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ID3D10DepthStencilState * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ __RPC__deref_out void **ppvObject); ULONG ( STDMETHODCALLTYPE *AddRef )( ID3D10DepthStencilState * This); ULONG ( STDMETHODCALLTYPE *Release )( ID3D10DepthStencilState * This); void ( STDMETHODCALLTYPE *GetDevice )( ID3D10DepthStencilState * This, /* [annotation] */ __out ID3D10Device **ppDevice); HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( ID3D10DepthStencilState * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __inout UINT *pDataSize, /* [annotation] */ __out_bcount_opt(*pDataSize) void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( ID3D10DepthStencilState * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in UINT DataSize, /* [annotation] */ __in_bcount_opt(DataSize) const void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( ID3D10DepthStencilState * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in_opt const IUnknown *pData); void ( STDMETHODCALLTYPE *GetDesc )( ID3D10DepthStencilState * This, /* [annotation] */ __out D3D10_DEPTH_STENCIL_DESC *pDesc); END_INTERFACE } ID3D10DepthStencilStateVtbl; interface ID3D10DepthStencilState { CONST_VTBL struct ID3D10DepthStencilStateVtbl *lpVtbl; }; #ifdef COBJMACROS #define ID3D10DepthStencilState_QueryInterface(This,riid,ppvObject) \ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) #define ID3D10DepthStencilState_AddRef(This) \ ( (This)->lpVtbl -> AddRef(This) ) #define ID3D10DepthStencilState_Release(This) \ ( (This)->lpVtbl -> Release(This) ) #define ID3D10DepthStencilState_GetDevice(This,ppDevice) \ ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) #define ID3D10DepthStencilState_GetPrivateData(This,guid,pDataSize,pData) \ ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) #define ID3D10DepthStencilState_SetPrivateData(This,guid,DataSize,pData) \ ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) #define ID3D10DepthStencilState_SetPrivateDataInterface(This,guid,pData) \ ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) #define ID3D10DepthStencilState_GetDesc(This,pDesc) \ ( (This)->lpVtbl -> GetDesc(This,pDesc) ) #endif /* COBJMACROS */ #endif /* C style interface */ #endif /* __ID3D10DepthStencilState_INTERFACE_DEFINED__ */ /* interface __MIDL_itf_d3d10_0000_0002 */ /* [local] */ typedef enum D3D10_BLEND { D3D10_BLEND_ZERO = 1, D3D10_BLEND_ONE = 2, D3D10_BLEND_SRC_COLOR = 3, D3D10_BLEND_INV_SRC_COLOR = 4, D3D10_BLEND_SRC_ALPHA = 5, D3D10_BLEND_INV_SRC_ALPHA = 6, D3D10_BLEND_DEST_ALPHA = 7, D3D10_BLEND_INV_DEST_ALPHA = 8, D3D10_BLEND_DEST_COLOR = 9, D3D10_BLEND_INV_DEST_COLOR = 10, D3D10_BLEND_SRC_ALPHA_SAT = 11, D3D10_BLEND_BLEND_FACTOR = 14, D3D10_BLEND_INV_BLEND_FACTOR = 15, D3D10_BLEND_SRC1_COLOR = 16, D3D10_BLEND_INV_SRC1_COLOR = 17, D3D10_BLEND_SRC1_ALPHA = 18, D3D10_BLEND_INV_SRC1_ALPHA = 19 } D3D10_BLEND; typedef enum D3D10_BLEND_OP { D3D10_BLEND_OP_ADD = 1, D3D10_BLEND_OP_SUBTRACT = 2, D3D10_BLEND_OP_REV_SUBTRACT = 3, D3D10_BLEND_OP_MIN = 4, D3D10_BLEND_OP_MAX = 5 } D3D10_BLEND_OP; typedef enum D3D10_COLOR_WRITE_ENABLE { D3D10_COLOR_WRITE_ENABLE_RED = 1, D3D10_COLOR_WRITE_ENABLE_GREEN = 2, D3D10_COLOR_WRITE_ENABLE_BLUE = 4, D3D10_COLOR_WRITE_ENABLE_ALPHA = 8, D3D10_COLOR_WRITE_ENABLE_ALL = ( ( ( D3D10_COLOR_WRITE_ENABLE_RED | D3D10_COLOR_WRITE_ENABLE_GREEN ) | D3D10_COLOR_WRITE_ENABLE_BLUE ) | D3D10_COLOR_WRITE_ENABLE_ALPHA ) } D3D10_COLOR_WRITE_ENABLE; typedef struct D3D10_BLEND_DESC { BOOL AlphaToCoverageEnable; BOOL BlendEnable[ 8 ]; D3D10_BLEND SrcBlend; D3D10_BLEND DestBlend; D3D10_BLEND_OP BlendOp; D3D10_BLEND SrcBlendAlpha; D3D10_BLEND DestBlendAlpha; D3D10_BLEND_OP BlendOpAlpha; UINT8 RenderTargetWriteMask[ 8 ]; } D3D10_BLEND_DESC; extern RPC_IF_HANDLE __MIDL_itf_d3d10_0000_0002_v0_0_c_ifspec; extern RPC_IF_HANDLE __MIDL_itf_d3d10_0000_0002_v0_0_s_ifspec; #ifndef __ID3D10BlendState_INTERFACE_DEFINED__ #define __ID3D10BlendState_INTERFACE_DEFINED__ /* interface ID3D10BlendState */ /* [unique][local][object][uuid] */ EXTERN_C const IID IID_ID3D10BlendState; #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("EDAD8D19-8A35-4d6d-8566-2EA276CDE161") ID3D10BlendState : public ID3D10DeviceChild { public: virtual void STDMETHODCALLTYPE GetDesc( /* [annotation] */ __out D3D10_BLEND_DESC *pDesc) = 0; }; #else /* C style interface */ typedef struct ID3D10BlendStateVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ID3D10BlendState * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ __RPC__deref_out void **ppvObject); ULONG ( STDMETHODCALLTYPE *AddRef )( ID3D10BlendState * This); ULONG ( STDMETHODCALLTYPE *Release )( ID3D10BlendState * This); void ( STDMETHODCALLTYPE *GetDevice )( ID3D10BlendState * This, /* [annotation] */ __out ID3D10Device **ppDevice); HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( ID3D10BlendState * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __inout UINT *pDataSize, /* [annotation] */ __out_bcount_opt(*pDataSize) void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( ID3D10BlendState * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in UINT DataSize, /* [annotation] */ __in_bcount_opt(DataSize) const void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( ID3D10BlendState * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in_opt const IUnknown *pData); void ( STDMETHODCALLTYPE *GetDesc )( ID3D10BlendState * This, /* [annotation] */ __out D3D10_BLEND_DESC *pDesc); END_INTERFACE } ID3D10BlendStateVtbl; interface ID3D10BlendState { CONST_VTBL struct ID3D10BlendStateVtbl *lpVtbl; }; #ifdef COBJMACROS #define ID3D10BlendState_QueryInterface(This,riid,ppvObject) \ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) #define ID3D10BlendState_AddRef(This) \ ( (This)->lpVtbl -> AddRef(This) ) #define ID3D10BlendState_Release(This) \ ( (This)->lpVtbl -> Release(This) ) #define ID3D10BlendState_GetDevice(This,ppDevice) \ ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) #define ID3D10BlendState_GetPrivateData(This,guid,pDataSize,pData) \ ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) #define ID3D10BlendState_SetPrivateData(This,guid,DataSize,pData) \ ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) #define ID3D10BlendState_SetPrivateDataInterface(This,guid,pData) \ ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) #define ID3D10BlendState_GetDesc(This,pDesc) \ ( (This)->lpVtbl -> GetDesc(This,pDesc) ) #endif /* COBJMACROS */ #endif /* C style interface */ #endif /* __ID3D10BlendState_INTERFACE_DEFINED__ */ /* interface __MIDL_itf_d3d10_0000_0003 */ /* [local] */ typedef struct D3D10_RASTERIZER_DESC { D3D10_FILL_MODE FillMode; D3D10_CULL_MODE CullMode; BOOL FrontCounterClockwise; INT DepthBias; FLOAT DepthBiasClamp; FLOAT SlopeScaledDepthBias; BOOL DepthClipEnable; BOOL ScissorEnable; BOOL MultisampleEnable; BOOL AntialiasedLineEnable; } D3D10_RASTERIZER_DESC; extern RPC_IF_HANDLE __MIDL_itf_d3d10_0000_0003_v0_0_c_ifspec; extern RPC_IF_HANDLE __MIDL_itf_d3d10_0000_0003_v0_0_s_ifspec; #ifndef __ID3D10RasterizerState_INTERFACE_DEFINED__ #define __ID3D10RasterizerState_INTERFACE_DEFINED__ /* interface ID3D10RasterizerState */ /* [unique][local][object][uuid] */ EXTERN_C const IID IID_ID3D10RasterizerState; #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("A2A07292-89AF-4345-BE2E-C53D9FBB6E9F") ID3D10RasterizerState : public ID3D10DeviceChild { public: virtual void STDMETHODCALLTYPE GetDesc( /* [annotation] */ __out D3D10_RASTERIZER_DESC *pDesc) = 0; }; #else /* C style interface */ typedef struct ID3D10RasterizerStateVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ID3D10RasterizerState * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ __RPC__deref_out void **ppvObject); ULONG ( STDMETHODCALLTYPE *AddRef )( ID3D10RasterizerState * This); ULONG ( STDMETHODCALLTYPE *Release )( ID3D10RasterizerState * This); void ( STDMETHODCALLTYPE *GetDevice )( ID3D10RasterizerState * This, /* [annotation] */ __out ID3D10Device **ppDevice); HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( ID3D10RasterizerState * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __inout UINT *pDataSize, /* [annotation] */ __out_bcount_opt(*pDataSize) void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( ID3D10RasterizerState * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in UINT DataSize, /* [annotation] */ __in_bcount_opt(DataSize) const void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( ID3D10RasterizerState * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in_opt const IUnknown *pData); void ( STDMETHODCALLTYPE *GetDesc )( ID3D10RasterizerState * This, /* [annotation] */ __out D3D10_RASTERIZER_DESC *pDesc); END_INTERFACE } ID3D10RasterizerStateVtbl; interface ID3D10RasterizerState { CONST_VTBL struct ID3D10RasterizerStateVtbl *lpVtbl; }; #ifdef COBJMACROS #define ID3D10RasterizerState_QueryInterface(This,riid,ppvObject) \ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) #define ID3D10RasterizerState_AddRef(This) \ ( (This)->lpVtbl -> AddRef(This) ) #define ID3D10RasterizerState_Release(This) \ ( (This)->lpVtbl -> Release(This) ) #define ID3D10RasterizerState_GetDevice(This,ppDevice) \ ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) #define ID3D10RasterizerState_GetPrivateData(This,guid,pDataSize,pData) \ ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) #define ID3D10RasterizerState_SetPrivateData(This,guid,DataSize,pData) \ ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) #define ID3D10RasterizerState_SetPrivateDataInterface(This,guid,pData) \ ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) #define ID3D10RasterizerState_GetDesc(This,pDesc) \ ( (This)->lpVtbl -> GetDesc(This,pDesc) ) #endif /* COBJMACROS */ #endif /* C style interface */ #endif /* __ID3D10RasterizerState_INTERFACE_DEFINED__ */ /* interface __MIDL_itf_d3d10_0000_0004 */ /* [local] */ #if !defined( D3D10_NO_HELPERS ) && defined( __cplusplus ) inline UINT D3D10CalcSubresource( UINT MipSlice, UINT ArraySlice, UINT MipLevels ) { return MipSlice + ArraySlice * MipLevels; } #endif typedef struct D3D10_SUBRESOURCE_DATA { const void *pSysMem; UINT SysMemPitch; UINT SysMemSlicePitch; } D3D10_SUBRESOURCE_DATA; extern RPC_IF_HANDLE __MIDL_itf_d3d10_0000_0004_v0_0_c_ifspec; extern RPC_IF_HANDLE __MIDL_itf_d3d10_0000_0004_v0_0_s_ifspec; #ifndef __ID3D10Resource_INTERFACE_DEFINED__ #define __ID3D10Resource_INTERFACE_DEFINED__ /* interface ID3D10Resource */ /* [unique][local][object][uuid] */ EXTERN_C const IID IID_ID3D10Resource; #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("9B7E4C01-342C-4106-A19F-4F2704F689F0") ID3D10Resource : public ID3D10DeviceChild { public: virtual void STDMETHODCALLTYPE GetType( /* [annotation] */ __out D3D10_RESOURCE_DIMENSION *rType) = 0; virtual void STDMETHODCALLTYPE SetEvictionPriority( /* [annotation] */ __in UINT EvictionPriority) = 0; virtual UINT STDMETHODCALLTYPE GetEvictionPriority( void) = 0; }; #else /* C style interface */ typedef struct ID3D10ResourceVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ID3D10Resource * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ __RPC__deref_out void **ppvObject); ULONG ( STDMETHODCALLTYPE *AddRef )( ID3D10Resource * This); ULONG ( STDMETHODCALLTYPE *Release )( ID3D10Resource * This); void ( STDMETHODCALLTYPE *GetDevice )( ID3D10Resource * This, /* [annotation] */ __out ID3D10Device **ppDevice); HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( ID3D10Resource * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __inout UINT *pDataSize, /* [annotation] */ __out_bcount_opt(*pDataSize) void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( ID3D10Resource * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in UINT DataSize, /* [annotation] */ __in_bcount_opt(DataSize) const void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( ID3D10Resource * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in_opt const IUnknown *pData); void ( STDMETHODCALLTYPE *GetType )( ID3D10Resource * This, /* [annotation] */ __out D3D10_RESOURCE_DIMENSION *rType); void ( STDMETHODCALLTYPE *SetEvictionPriority )( ID3D10Resource * This, /* [annotation] */ __in UINT EvictionPriority); UINT ( STDMETHODCALLTYPE *GetEvictionPriority )( ID3D10Resource * This); END_INTERFACE } ID3D10ResourceVtbl; interface ID3D10Resource { CONST_VTBL struct ID3D10ResourceVtbl *lpVtbl; }; #ifdef COBJMACROS #define ID3D10Resource_QueryInterface(This,riid,ppvObject) \ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) #define ID3D10Resource_AddRef(This) \ ( (This)->lpVtbl -> AddRef(This) ) #define ID3D10Resource_Release(This) \ ( (This)->lpVtbl -> Release(This) ) #define ID3D10Resource_GetDevice(This,ppDevice) \ ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) #define ID3D10Resource_GetPrivateData(This,guid,pDataSize,pData) \ ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) #define ID3D10Resource_SetPrivateData(This,guid,DataSize,pData) \ ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) #define ID3D10Resource_SetPrivateDataInterface(This,guid,pData) \ ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) #define ID3D10Resource_GetType(This,rType) \ ( (This)->lpVtbl -> GetType(This,rType) ) #define ID3D10Resource_SetEvictionPriority(This,EvictionPriority) \ ( (This)->lpVtbl -> SetEvictionPriority(This,EvictionPriority) ) #define ID3D10Resource_GetEvictionPriority(This) \ ( (This)->lpVtbl -> GetEvictionPriority(This) ) #endif /* COBJMACROS */ #endif /* C style interface */ #endif /* __ID3D10Resource_INTERFACE_DEFINED__ */ /* interface __MIDL_itf_d3d10_0000_0005 */ /* [local] */ typedef struct D3D10_BUFFER_DESC { UINT ByteWidth; D3D10_USAGE Usage; UINT BindFlags; UINT CPUAccessFlags; UINT MiscFlags; } D3D10_BUFFER_DESC; #if !defined( D3D10_NO_HELPERS ) && defined( __cplusplus ) struct CD3D10_BUFFER_DESC : public D3D10_BUFFER_DESC { CD3D10_BUFFER_DESC() {} explicit CD3D10_BUFFER_DESC( const D3D10_BUFFER_DESC& o ) : D3D10_BUFFER_DESC( o ) {} explicit CD3D10_BUFFER_DESC( UINT byteWidth, UINT bindFlags, D3D10_USAGE usage = D3D10_USAGE_DEFAULT, UINT cpuaccessFlags = 0, UINT miscFlags = 0 ) { ByteWidth = byteWidth; Usage = usage; BindFlags = bindFlags; CPUAccessFlags = cpuaccessFlags ; MiscFlags = miscFlags; } ~CD3D10_BUFFER_DESC() {} operator const D3D10_BUFFER_DESC&() const { return *this; } }; #endif extern RPC_IF_HANDLE __MIDL_itf_d3d10_0000_0005_v0_0_c_ifspec; extern RPC_IF_HANDLE __MIDL_itf_d3d10_0000_0005_v0_0_s_ifspec; #ifndef __ID3D10Buffer_INTERFACE_DEFINED__ #define __ID3D10Buffer_INTERFACE_DEFINED__ /* interface ID3D10Buffer */ /* [unique][local][object][uuid] */ EXTERN_C const IID IID_ID3D10Buffer; #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("9B7E4C02-342C-4106-A19F-4F2704F689F0") ID3D10Buffer : public ID3D10Resource { public: virtual HRESULT STDMETHODCALLTYPE Map( /* [annotation] */ __in D3D10_MAP MapType, /* [annotation] */ __in UINT MapFlags, /* [annotation] */ __out void **ppData) = 0; virtual void STDMETHODCALLTYPE Unmap( void) = 0; virtual void STDMETHODCALLTYPE GetDesc( /* [annotation] */ __out D3D10_BUFFER_DESC *pDesc) = 0; }; #else /* C style interface */ typedef struct ID3D10BufferVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ID3D10Buffer * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ __RPC__deref_out void **ppvObject); ULONG ( STDMETHODCALLTYPE *AddRef )( ID3D10Buffer * This); ULONG ( STDMETHODCALLTYPE *Release )( ID3D10Buffer * This); void ( STDMETHODCALLTYPE *GetDevice )( ID3D10Buffer * This, /* [annotation] */ __out ID3D10Device **ppDevice); HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( ID3D10Buffer * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __inout UINT *pDataSize, /* [annotation] */ __out_bcount_opt(*pDataSize) void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( ID3D10Buffer * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in UINT DataSize, /* [annotation] */ __in_bcount_opt(DataSize) const void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( ID3D10Buffer * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in_opt const IUnknown *pData); void ( STDMETHODCALLTYPE *GetType )( ID3D10Buffer * This, /* [annotation] */ __out D3D10_RESOURCE_DIMENSION *rType); void ( STDMETHODCALLTYPE *SetEvictionPriority )( ID3D10Buffer * This, /* [annotation] */ __in UINT EvictionPriority); UINT ( STDMETHODCALLTYPE *GetEvictionPriority )( ID3D10Buffer * This); HRESULT ( STDMETHODCALLTYPE *Map )( ID3D10Buffer * This, /* [annotation] */ __in D3D10_MAP MapType, /* [annotation] */ __in UINT MapFlags, /* [annotation] */ __out void **ppData); void ( STDMETHODCALLTYPE *Unmap )( ID3D10Buffer * This); void ( STDMETHODCALLTYPE *GetDesc )( ID3D10Buffer * This, /* [annotation] */ __out D3D10_BUFFER_DESC *pDesc); END_INTERFACE } ID3D10BufferVtbl; interface ID3D10Buffer { CONST_VTBL struct ID3D10BufferVtbl *lpVtbl; }; #ifdef COBJMACROS #define ID3D10Buffer_QueryInterface(This,riid,ppvObject) \ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) #define ID3D10Buffer_AddRef(This) \ ( (This)->lpVtbl -> AddRef(This) ) #define ID3D10Buffer_Release(This) \ ( (This)->lpVtbl -> Release(This) ) #define ID3D10Buffer_GetDevice(This,ppDevice) \ ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) #define ID3D10Buffer_GetPrivateData(This,guid,pDataSize,pData) \ ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) #define ID3D10Buffer_SetPrivateData(This,guid,DataSize,pData) \ ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) #define ID3D10Buffer_SetPrivateDataInterface(This,guid,pData) \ ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) #define ID3D10Buffer_GetType(This,rType) \ ( (This)->lpVtbl -> GetType(This,rType) ) #define ID3D10Buffer_SetEvictionPriority(This,EvictionPriority) \ ( (This)->lpVtbl -> SetEvictionPriority(This,EvictionPriority) ) #define ID3D10Buffer_GetEvictionPriority(This) \ ( (This)->lpVtbl -> GetEvictionPriority(This) ) #define ID3D10Buffer_Map(This,MapType,MapFlags,ppData) \ ( (This)->lpVtbl -> Map(This,MapType,MapFlags,ppData) ) #define ID3D10Buffer_Unmap(This) \ ( (This)->lpVtbl -> Unmap(This) ) #define ID3D10Buffer_GetDesc(This,pDesc) \ ( (This)->lpVtbl -> GetDesc(This,pDesc) ) #endif /* COBJMACROS */ #endif /* C style interface */ #endif /* __ID3D10Buffer_INTERFACE_DEFINED__ */ /* interface __MIDL_itf_d3d10_0000_0006 */ /* [local] */ typedef struct D3D10_TEXTURE1D_DESC { UINT Width; UINT MipLevels; UINT ArraySize; DXGI_FORMAT Format; D3D10_USAGE Usage; UINT BindFlags; UINT CPUAccessFlags; UINT MiscFlags; } D3D10_TEXTURE1D_DESC; #if !defined( D3D10_NO_HELPERS ) && defined( __cplusplus ) struct CD3D10_TEXTURE1D_DESC : public D3D10_TEXTURE1D_DESC { CD3D10_TEXTURE1D_DESC() {} explicit CD3D10_TEXTURE1D_DESC( const D3D10_TEXTURE1D_DESC& o ) : D3D10_TEXTURE1D_DESC( o ) {} explicit CD3D10_TEXTURE1D_DESC( DXGI_FORMAT format, UINT width, UINT arraySize = 1, UINT mipLevels = 0, UINT bindFlags = D3D10_BIND_SHADER_RESOURCE, D3D10_USAGE usage = D3D10_USAGE_DEFAULT, UINT cpuaccessFlags= 0, UINT miscFlags = 0 ) { Width = width; MipLevels = mipLevels; ArraySize = arraySize; Format = format; Usage = usage; BindFlags = bindFlags; CPUAccessFlags = cpuaccessFlags; MiscFlags = miscFlags; } ~CD3D10_TEXTURE1D_DESC() {} operator const D3D10_TEXTURE1D_DESC&() const { return *this; } }; #endif extern RPC_IF_HANDLE __MIDL_itf_d3d10_0000_0006_v0_0_c_ifspec; extern RPC_IF_HANDLE __MIDL_itf_d3d10_0000_0006_v0_0_s_ifspec; #ifndef __ID3D10Texture1D_INTERFACE_DEFINED__ #define __ID3D10Texture1D_INTERFACE_DEFINED__ /* interface ID3D10Texture1D */ /* [unique][local][object][uuid] */ EXTERN_C const IID IID_ID3D10Texture1D; #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("9B7E4C03-342C-4106-A19F-4F2704F689F0") ID3D10Texture1D : public ID3D10Resource { public: virtual HRESULT STDMETHODCALLTYPE Map( /* [annotation] */ __in UINT Subresource, /* [annotation] */ __in D3D10_MAP MapType, /* [annotation] */ __in UINT MapFlags, /* [annotation] */ __out void **ppData) = 0; virtual void STDMETHODCALLTYPE Unmap( /* [annotation] */ __in UINT Subresource) = 0; virtual void STDMETHODCALLTYPE GetDesc( /* [annotation] */ __out D3D10_TEXTURE1D_DESC *pDesc) = 0; }; #else /* C style interface */ typedef struct ID3D10Texture1DVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ID3D10Texture1D * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ __RPC__deref_out void **ppvObject); ULONG ( STDMETHODCALLTYPE *AddRef )( ID3D10Texture1D * This); ULONG ( STDMETHODCALLTYPE *Release )( ID3D10Texture1D * This); void ( STDMETHODCALLTYPE *GetDevice )( ID3D10Texture1D * This, /* [annotation] */ __out ID3D10Device **ppDevice); HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( ID3D10Texture1D * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __inout UINT *pDataSize, /* [annotation] */ __out_bcount_opt(*pDataSize) void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( ID3D10Texture1D * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in UINT DataSize, /* [annotation] */ __in_bcount_opt(DataSize) const void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( ID3D10Texture1D * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in_opt const IUnknown *pData); void ( STDMETHODCALLTYPE *GetType )( ID3D10Texture1D * This, /* [annotation] */ __out D3D10_RESOURCE_DIMENSION *rType); void ( STDMETHODCALLTYPE *SetEvictionPriority )( ID3D10Texture1D * This, /* [annotation] */ __in UINT EvictionPriority); UINT ( STDMETHODCALLTYPE *GetEvictionPriority )( ID3D10Texture1D * This); HRESULT ( STDMETHODCALLTYPE *Map )( ID3D10Texture1D * This, /* [annotation] */ __in UINT Subresource, /* [annotation] */ __in D3D10_MAP MapType, /* [annotation] */ __in UINT MapFlags, /* [annotation] */ __out void **ppData); void ( STDMETHODCALLTYPE *Unmap )( ID3D10Texture1D * This, /* [annotation] */ __in UINT Subresource); void ( STDMETHODCALLTYPE *GetDesc )( ID3D10Texture1D * This, /* [annotation] */ __out D3D10_TEXTURE1D_DESC *pDesc); END_INTERFACE } ID3D10Texture1DVtbl; interface ID3D10Texture1D { CONST_VTBL struct ID3D10Texture1DVtbl *lpVtbl; }; #ifdef COBJMACROS #define ID3D10Texture1D_QueryInterface(This,riid,ppvObject) \ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) #define ID3D10Texture1D_AddRef(This) \ ( (This)->lpVtbl -> AddRef(This) ) #define ID3D10Texture1D_Release(This) \ ( (This)->lpVtbl -> Release(This) ) #define ID3D10Texture1D_GetDevice(This,ppDevice) \ ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) #define ID3D10Texture1D_GetPrivateData(This,guid,pDataSize,pData) \ ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) #define ID3D10Texture1D_SetPrivateData(This,guid,DataSize,pData) \ ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) #define ID3D10Texture1D_SetPrivateDataInterface(This,guid,pData) \ ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) #define ID3D10Texture1D_GetType(This,rType) \ ( (This)->lpVtbl -> GetType(This,rType) ) #define ID3D10Texture1D_SetEvictionPriority(This,EvictionPriority) \ ( (This)->lpVtbl -> SetEvictionPriority(This,EvictionPriority) ) #define ID3D10Texture1D_GetEvictionPriority(This) \ ( (This)->lpVtbl -> GetEvictionPriority(This) ) #define ID3D10Texture1D_Map(This,Subresource,MapType,MapFlags,ppData) \ ( (This)->lpVtbl -> Map(This,Subresource,MapType,MapFlags,ppData) ) #define ID3D10Texture1D_Unmap(This,Subresource) \ ( (This)->lpVtbl -> Unmap(This,Subresource) ) #define ID3D10Texture1D_GetDesc(This,pDesc) \ ( (This)->lpVtbl -> GetDesc(This,pDesc) ) #endif /* COBJMACROS */ #endif /* C style interface */ #endif /* __ID3D10Texture1D_INTERFACE_DEFINED__ */ /* interface __MIDL_itf_d3d10_0000_0007 */ /* [local] */ typedef struct D3D10_TEXTURE2D_DESC { UINT Width; UINT Height; UINT MipLevels; UINT ArraySize; DXGI_FORMAT Format; DXGI_SAMPLE_DESC SampleDesc; D3D10_USAGE Usage; UINT BindFlags; UINT CPUAccessFlags; UINT MiscFlags; } D3D10_TEXTURE2D_DESC; #if !defined( D3D10_NO_HELPERS ) && defined( __cplusplus ) struct CD3D10_TEXTURE2D_DESC : public D3D10_TEXTURE2D_DESC { CD3D10_TEXTURE2D_DESC() {} explicit CD3D10_TEXTURE2D_DESC( const D3D10_TEXTURE2D_DESC& o ) : D3D10_TEXTURE2D_DESC( o ) {} explicit CD3D10_TEXTURE2D_DESC( DXGI_FORMAT format, UINT width, UINT height, UINT arraySize = 1, UINT mipLevels = 0, UINT bindFlags = D3D10_BIND_SHADER_RESOURCE, D3D10_USAGE usage = D3D10_USAGE_DEFAULT, UINT cpuaccessFlags = 0, UINT sampleCount = 1, UINT sampleQuality = 0, UINT miscFlags = 0 ) { Width = width; Height = height; MipLevels = mipLevels; ArraySize = arraySize; Format = format; SampleDesc.Count = sampleCount; SampleDesc.Quality = sampleQuality; Usage = usage; BindFlags = bindFlags; CPUAccessFlags = cpuaccessFlags; MiscFlags = miscFlags; } ~CD3D10_TEXTURE2D_DESC() {} operator const D3D10_TEXTURE2D_DESC&() const { return *this; } }; #endif typedef struct D3D10_MAPPED_TEXTURE2D { void *pData; UINT RowPitch; } D3D10_MAPPED_TEXTURE2D; extern RPC_IF_HANDLE __MIDL_itf_d3d10_0000_0007_v0_0_c_ifspec; extern RPC_IF_HANDLE __MIDL_itf_d3d10_0000_0007_v0_0_s_ifspec; #ifndef __ID3D10Texture2D_INTERFACE_DEFINED__ #define __ID3D10Texture2D_INTERFACE_DEFINED__ /* interface ID3D10Texture2D */ /* [unique][local][object][uuid] */ EXTERN_C const IID IID_ID3D10Texture2D; #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("9B7E4C04-342C-4106-A19F-4F2704F689F0") ID3D10Texture2D : public ID3D10Resource { public: virtual HRESULT STDMETHODCALLTYPE Map( /* [annotation] */ __in UINT Subresource, /* [annotation] */ __in D3D10_MAP MapType, /* [annotation] */ __in UINT MapFlags, /* [annotation] */ __out D3D10_MAPPED_TEXTURE2D *pMappedTex2D) = 0; virtual void STDMETHODCALLTYPE Unmap( /* [annotation] */ __in UINT Subresource) = 0; virtual void STDMETHODCALLTYPE GetDesc( /* [annotation] */ __out D3D10_TEXTURE2D_DESC *pDesc) = 0; }; #else /* C style interface */ typedef struct ID3D10Texture2DVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ID3D10Texture2D * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ __RPC__deref_out void **ppvObject); ULONG ( STDMETHODCALLTYPE *AddRef )( ID3D10Texture2D * This); ULONG ( STDMETHODCALLTYPE *Release )( ID3D10Texture2D * This); void ( STDMETHODCALLTYPE *GetDevice )( ID3D10Texture2D * This, /* [annotation] */ __out ID3D10Device **ppDevice); HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( ID3D10Texture2D * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __inout UINT *pDataSize, /* [annotation] */ __out_bcount_opt(*pDataSize) void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( ID3D10Texture2D * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in UINT DataSize, /* [annotation] */ __in_bcount_opt(DataSize) const void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( ID3D10Texture2D * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in_opt const IUnknown *pData); void ( STDMETHODCALLTYPE *GetType )( ID3D10Texture2D * This, /* [annotation] */ __out D3D10_RESOURCE_DIMENSION *rType); void ( STDMETHODCALLTYPE *SetEvictionPriority )( ID3D10Texture2D * This, /* [annotation] */ __in UINT EvictionPriority); UINT ( STDMETHODCALLTYPE *GetEvictionPriority )( ID3D10Texture2D * This); HRESULT ( STDMETHODCALLTYPE *Map )( ID3D10Texture2D * This, /* [annotation] */ __in UINT Subresource, /* [annotation] */ __in D3D10_MAP MapType, /* [annotation] */ __in UINT MapFlags, /* [annotation] */ __out D3D10_MAPPED_TEXTURE2D *pMappedTex2D); void ( STDMETHODCALLTYPE *Unmap )( ID3D10Texture2D * This, /* [annotation] */ __in UINT Subresource); void ( STDMETHODCALLTYPE *GetDesc )( ID3D10Texture2D * This, /* [annotation] */ __out D3D10_TEXTURE2D_DESC *pDesc); END_INTERFACE } ID3D10Texture2DVtbl; interface ID3D10Texture2D { CONST_VTBL struct ID3D10Texture2DVtbl *lpVtbl; }; #ifdef COBJMACROS #define ID3D10Texture2D_QueryInterface(This,riid,ppvObject) \ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) #define ID3D10Texture2D_AddRef(This) \ ( (This)->lpVtbl -> AddRef(This) ) #define ID3D10Texture2D_Release(This) \ ( (This)->lpVtbl -> Release(This) ) #define ID3D10Texture2D_GetDevice(This,ppDevice) \ ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) #define ID3D10Texture2D_GetPrivateData(This,guid,pDataSize,pData) \ ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) #define ID3D10Texture2D_SetPrivateData(This,guid,DataSize,pData) \ ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) #define ID3D10Texture2D_SetPrivateDataInterface(This,guid,pData) \ ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) #define ID3D10Texture2D_GetType(This,rType) \ ( (This)->lpVtbl -> GetType(This,rType) ) #define ID3D10Texture2D_SetEvictionPriority(This,EvictionPriority) \ ( (This)->lpVtbl -> SetEvictionPriority(This,EvictionPriority) ) #define ID3D10Texture2D_GetEvictionPriority(This) \ ( (This)->lpVtbl -> GetEvictionPriority(This) ) #define ID3D10Texture2D_Map(This,Subresource,MapType,MapFlags,pMappedTex2D) \ ( (This)->lpVtbl -> Map(This,Subresource,MapType,MapFlags,pMappedTex2D) ) #define ID3D10Texture2D_Unmap(This,Subresource) \ ( (This)->lpVtbl -> Unmap(This,Subresource) ) #define ID3D10Texture2D_GetDesc(This,pDesc) \ ( (This)->lpVtbl -> GetDesc(This,pDesc) ) #endif /* COBJMACROS */ #endif /* C style interface */ #endif /* __ID3D10Texture2D_INTERFACE_DEFINED__ */ /* interface __MIDL_itf_d3d10_0000_0008 */ /* [local] */ typedef struct D3D10_TEXTURE3D_DESC { UINT Width; UINT Height; UINT Depth; UINT MipLevels; DXGI_FORMAT Format; D3D10_USAGE Usage; UINT BindFlags; UINT CPUAccessFlags; UINT MiscFlags; } D3D10_TEXTURE3D_DESC; #if !defined( D3D10_NO_HELPERS ) && defined( __cplusplus ) struct CD3D10_TEXTURE3D_DESC : public D3D10_TEXTURE3D_DESC { CD3D10_TEXTURE3D_DESC() {} explicit CD3D10_TEXTURE3D_DESC( const D3D10_TEXTURE3D_DESC& o ) : D3D10_TEXTURE3D_DESC( o ) {} explicit CD3D10_TEXTURE3D_DESC( DXGI_FORMAT format, UINT width, UINT height, UINT depth, UINT mipLevels = 0, UINT bindFlags = D3D10_BIND_SHADER_RESOURCE, D3D10_USAGE usage = D3D10_USAGE_DEFAULT, UINT cpuaccessFlags = 0, UINT miscFlags = 0 ) { Width = width; Height = height; Depth = depth; MipLevels = mipLevels; Format = format; Usage = usage; BindFlags = bindFlags; CPUAccessFlags = cpuaccessFlags; MiscFlags = miscFlags; } ~CD3D10_TEXTURE3D_DESC() {} operator const D3D10_TEXTURE3D_DESC&() const { return *this; } }; #endif typedef struct D3D10_MAPPED_TEXTURE3D { void *pData; UINT RowPitch; UINT DepthPitch; } D3D10_MAPPED_TEXTURE3D; extern RPC_IF_HANDLE __MIDL_itf_d3d10_0000_0008_v0_0_c_ifspec; extern RPC_IF_HANDLE __MIDL_itf_d3d10_0000_0008_v0_0_s_ifspec; #ifndef __ID3D10Texture3D_INTERFACE_DEFINED__ #define __ID3D10Texture3D_INTERFACE_DEFINED__ /* interface ID3D10Texture3D */ /* [unique][local][object][uuid] */ EXTERN_C const IID IID_ID3D10Texture3D; #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("9B7E4C05-342C-4106-A19F-4F2704F689F0") ID3D10Texture3D : public ID3D10Resource { public: virtual HRESULT STDMETHODCALLTYPE Map( /* [annotation] */ __in UINT Subresource, /* [annotation] */ __in D3D10_MAP MapType, /* [annotation] */ __in UINT MapFlags, /* [annotation] */ __out D3D10_MAPPED_TEXTURE3D *pMappedTex3D) = 0; virtual void STDMETHODCALLTYPE Unmap( /* [annotation] */ __in UINT Subresource) = 0; virtual void STDMETHODCALLTYPE GetDesc( /* [annotation] */ __out D3D10_TEXTURE3D_DESC *pDesc) = 0; }; #else /* C style interface */ typedef struct ID3D10Texture3DVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ID3D10Texture3D * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ __RPC__deref_out void **ppvObject); ULONG ( STDMETHODCALLTYPE *AddRef )( ID3D10Texture3D * This); ULONG ( STDMETHODCALLTYPE *Release )( ID3D10Texture3D * This); void ( STDMETHODCALLTYPE *GetDevice )( ID3D10Texture3D * This, /* [annotation] */ __out ID3D10Device **ppDevice); HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( ID3D10Texture3D * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __inout UINT *pDataSize, /* [annotation] */ __out_bcount_opt(*pDataSize) void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( ID3D10Texture3D * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in UINT DataSize, /* [annotation] */ __in_bcount_opt(DataSize) const void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( ID3D10Texture3D * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in_opt const IUnknown *pData); void ( STDMETHODCALLTYPE *GetType )( ID3D10Texture3D * This, /* [annotation] */ __out D3D10_RESOURCE_DIMENSION *rType); void ( STDMETHODCALLTYPE *SetEvictionPriority )( ID3D10Texture3D * This, /* [annotation] */ __in UINT EvictionPriority); UINT ( STDMETHODCALLTYPE *GetEvictionPriority )( ID3D10Texture3D * This); HRESULT ( STDMETHODCALLTYPE *Map )( ID3D10Texture3D * This, /* [annotation] */ __in UINT Subresource, /* [annotation] */ __in D3D10_MAP MapType, /* [annotation] */ __in UINT MapFlags, /* [annotation] */ __out D3D10_MAPPED_TEXTURE3D *pMappedTex3D); void ( STDMETHODCALLTYPE *Unmap )( ID3D10Texture3D * This, /* [annotation] */ __in UINT Subresource); void ( STDMETHODCALLTYPE *GetDesc )( ID3D10Texture3D * This, /* [annotation] */ __out D3D10_TEXTURE3D_DESC *pDesc); END_INTERFACE } ID3D10Texture3DVtbl; interface ID3D10Texture3D { CONST_VTBL struct ID3D10Texture3DVtbl *lpVtbl; }; #ifdef COBJMACROS #define ID3D10Texture3D_QueryInterface(This,riid,ppvObject) \ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) #define ID3D10Texture3D_AddRef(This) \ ( (This)->lpVtbl -> AddRef(This) ) #define ID3D10Texture3D_Release(This) \ ( (This)->lpVtbl -> Release(This) ) #define ID3D10Texture3D_GetDevice(This,ppDevice) \ ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) #define ID3D10Texture3D_GetPrivateData(This,guid,pDataSize,pData) \ ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) #define ID3D10Texture3D_SetPrivateData(This,guid,DataSize,pData) \ ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) #define ID3D10Texture3D_SetPrivateDataInterface(This,guid,pData) \ ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) #define ID3D10Texture3D_GetType(This,rType) \ ( (This)->lpVtbl -> GetType(This,rType) ) #define ID3D10Texture3D_SetEvictionPriority(This,EvictionPriority) \ ( (This)->lpVtbl -> SetEvictionPriority(This,EvictionPriority) ) #define ID3D10Texture3D_GetEvictionPriority(This) \ ( (This)->lpVtbl -> GetEvictionPriority(This) ) #define ID3D10Texture3D_Map(This,Subresource,MapType,MapFlags,pMappedTex3D) \ ( (This)->lpVtbl -> Map(This,Subresource,MapType,MapFlags,pMappedTex3D) ) #define ID3D10Texture3D_Unmap(This,Subresource) \ ( (This)->lpVtbl -> Unmap(This,Subresource) ) #define ID3D10Texture3D_GetDesc(This,pDesc) \ ( (This)->lpVtbl -> GetDesc(This,pDesc) ) #endif /* COBJMACROS */ #endif /* C style interface */ #endif /* __ID3D10Texture3D_INTERFACE_DEFINED__ */ /* interface __MIDL_itf_d3d10_0000_0009 */ /* [local] */ typedef enum D3D10_TEXTURECUBE_FACE { D3D10_TEXTURECUBE_FACE_POSITIVE_X = 0, D3D10_TEXTURECUBE_FACE_NEGATIVE_X = 1, D3D10_TEXTURECUBE_FACE_POSITIVE_Y = 2, D3D10_TEXTURECUBE_FACE_NEGATIVE_Y = 3, D3D10_TEXTURECUBE_FACE_POSITIVE_Z = 4, D3D10_TEXTURECUBE_FACE_NEGATIVE_Z = 5 } D3D10_TEXTURECUBE_FACE; extern RPC_IF_HANDLE __MIDL_itf_d3d10_0000_0009_v0_0_c_ifspec; extern RPC_IF_HANDLE __MIDL_itf_d3d10_0000_0009_v0_0_s_ifspec; #ifndef __ID3D10View_INTERFACE_DEFINED__ #define __ID3D10View_INTERFACE_DEFINED__ /* interface ID3D10View */ /* [unique][local][object][uuid] */ EXTERN_C const IID IID_ID3D10View; #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("C902B03F-60A7-49BA-9936-2A3AB37A7E33") ID3D10View : public ID3D10DeviceChild { public: virtual void STDMETHODCALLTYPE GetResource( /* [annotation] */ __out ID3D10Resource **ppResource) = 0; }; #else /* C style interface */ typedef struct ID3D10ViewVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ID3D10View * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ __RPC__deref_out void **ppvObject); ULONG ( STDMETHODCALLTYPE *AddRef )( ID3D10View * This); ULONG ( STDMETHODCALLTYPE *Release )( ID3D10View * This); void ( STDMETHODCALLTYPE *GetDevice )( ID3D10View * This, /* [annotation] */ __out ID3D10Device **ppDevice); HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( ID3D10View * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __inout UINT *pDataSize, /* [annotation] */ __out_bcount_opt(*pDataSize) void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( ID3D10View * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in UINT DataSize, /* [annotation] */ __in_bcount_opt(DataSize) const void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( ID3D10View * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in_opt const IUnknown *pData); void ( STDMETHODCALLTYPE *GetResource )( ID3D10View * This, /* [annotation] */ __out ID3D10Resource **ppResource); END_INTERFACE } ID3D10ViewVtbl; interface ID3D10View { CONST_VTBL struct ID3D10ViewVtbl *lpVtbl; }; #ifdef COBJMACROS #define ID3D10View_QueryInterface(This,riid,ppvObject) \ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) #define ID3D10View_AddRef(This) \ ( (This)->lpVtbl -> AddRef(This) ) #define ID3D10View_Release(This) \ ( (This)->lpVtbl -> Release(This) ) #define ID3D10View_GetDevice(This,ppDevice) \ ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) #define ID3D10View_GetPrivateData(This,guid,pDataSize,pData) \ ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) #define ID3D10View_SetPrivateData(This,guid,DataSize,pData) \ ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) #define ID3D10View_SetPrivateDataInterface(This,guid,pData) \ ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) #define ID3D10View_GetResource(This,ppResource) \ ( (This)->lpVtbl -> GetResource(This,ppResource) ) #endif /* COBJMACROS */ #endif /* C style interface */ #endif /* __ID3D10View_INTERFACE_DEFINED__ */ /* interface __MIDL_itf_d3d10_0000_0010 */ /* [local] */ typedef struct D3D10_BUFFER_SRV { union { UINT FirstElement; UINT ElementOffset; } ; union { UINT NumElements; UINT ElementWidth; } ; } D3D10_BUFFER_SRV; typedef struct D3D10_TEX1D_SRV { UINT MostDetailedMip; UINT MipLevels; } D3D10_TEX1D_SRV; typedef struct D3D10_TEX1D_ARRAY_SRV { UINT MostDetailedMip; UINT MipLevels; UINT FirstArraySlice; UINT ArraySize; } D3D10_TEX1D_ARRAY_SRV; typedef struct D3D10_TEX2D_SRV { UINT MostDetailedMip; UINT MipLevels; } D3D10_TEX2D_SRV; typedef struct D3D10_TEX2D_ARRAY_SRV { UINT MostDetailedMip; UINT MipLevels; UINT FirstArraySlice; UINT ArraySize; } D3D10_TEX2D_ARRAY_SRV; typedef struct D3D10_TEX3D_SRV { UINT MostDetailedMip; UINT MipLevels; } D3D10_TEX3D_SRV; typedef struct D3D10_TEXCUBE_SRV { UINT MostDetailedMip; UINT MipLevels; } D3D10_TEXCUBE_SRV; typedef struct D3D10_TEX2DMS_SRV { UINT UnusedField_NothingToDefine; } D3D10_TEX2DMS_SRV; typedef struct D3D10_TEX2DMS_ARRAY_SRV { UINT FirstArraySlice; UINT ArraySize; } D3D10_TEX2DMS_ARRAY_SRV; typedef struct D3D10_SHADER_RESOURCE_VIEW_DESC { DXGI_FORMAT Format; D3D10_SRV_DIMENSION ViewDimension; union { D3D10_BUFFER_SRV Buffer; D3D10_TEX1D_SRV Texture1D; D3D10_TEX1D_ARRAY_SRV Texture1DArray; D3D10_TEX2D_SRV Texture2D; D3D10_TEX2D_ARRAY_SRV Texture2DArray; D3D10_TEX2DMS_SRV Texture2DMS; D3D10_TEX2DMS_ARRAY_SRV Texture2DMSArray; D3D10_TEX3D_SRV Texture3D; D3D10_TEXCUBE_SRV TextureCube; } ; } D3D10_SHADER_RESOURCE_VIEW_DESC; extern RPC_IF_HANDLE __MIDL_itf_d3d10_0000_0010_v0_0_c_ifspec; extern RPC_IF_HANDLE __MIDL_itf_d3d10_0000_0010_v0_0_s_ifspec; #ifndef __ID3D10ShaderResourceView_INTERFACE_DEFINED__ #define __ID3D10ShaderResourceView_INTERFACE_DEFINED__ /* interface ID3D10ShaderResourceView */ /* [unique][local][object][uuid] */ EXTERN_C const IID IID_ID3D10ShaderResourceView; #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("9B7E4C07-342C-4106-A19F-4F2704F689F0") ID3D10ShaderResourceView : public ID3D10View { public: virtual void STDMETHODCALLTYPE GetDesc( /* [annotation] */ __out D3D10_SHADER_RESOURCE_VIEW_DESC *pDesc) = 0; }; #else /* C style interface */ typedef struct ID3D10ShaderResourceViewVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ID3D10ShaderResourceView * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ __RPC__deref_out void **ppvObject); ULONG ( STDMETHODCALLTYPE *AddRef )( ID3D10ShaderResourceView * This); ULONG ( STDMETHODCALLTYPE *Release )( ID3D10ShaderResourceView * This); void ( STDMETHODCALLTYPE *GetDevice )( ID3D10ShaderResourceView * This, /* [annotation] */ __out ID3D10Device **ppDevice); HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( ID3D10ShaderResourceView * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __inout UINT *pDataSize, /* [annotation] */ __out_bcount_opt(*pDataSize) void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( ID3D10ShaderResourceView * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in UINT DataSize, /* [annotation] */ __in_bcount_opt(DataSize) const void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( ID3D10ShaderResourceView * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in_opt const IUnknown *pData); void ( STDMETHODCALLTYPE *GetResource )( ID3D10ShaderResourceView * This, /* [annotation] */ __out ID3D10Resource **ppResource); void ( STDMETHODCALLTYPE *GetDesc )( ID3D10ShaderResourceView * This, /* [annotation] */ __out D3D10_SHADER_RESOURCE_VIEW_DESC *pDesc); END_INTERFACE } ID3D10ShaderResourceViewVtbl; interface ID3D10ShaderResourceView { CONST_VTBL struct ID3D10ShaderResourceViewVtbl *lpVtbl; }; #ifdef COBJMACROS #define ID3D10ShaderResourceView_QueryInterface(This,riid,ppvObject) \ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) #define ID3D10ShaderResourceView_AddRef(This) \ ( (This)->lpVtbl -> AddRef(This) ) #define ID3D10ShaderResourceView_Release(This) \ ( (This)->lpVtbl -> Release(This) ) #define ID3D10ShaderResourceView_GetDevice(This,ppDevice) \ ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) #define ID3D10ShaderResourceView_GetPrivateData(This,guid,pDataSize,pData) \ ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) #define ID3D10ShaderResourceView_SetPrivateData(This,guid,DataSize,pData) \ ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) #define ID3D10ShaderResourceView_SetPrivateDataInterface(This,guid,pData) \ ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) #define ID3D10ShaderResourceView_GetResource(This,ppResource) \ ( (This)->lpVtbl -> GetResource(This,ppResource) ) #define ID3D10ShaderResourceView_GetDesc(This,pDesc) \ ( (This)->lpVtbl -> GetDesc(This,pDesc) ) #endif /* COBJMACROS */ #endif /* C style interface */ #endif /* __ID3D10ShaderResourceView_INTERFACE_DEFINED__ */ /* interface __MIDL_itf_d3d10_0000_0011 */ /* [local] */ typedef struct D3D10_BUFFER_RTV { union { UINT FirstElement; UINT ElementOffset; } ; union { UINT NumElements; UINT ElementWidth; } ; } D3D10_BUFFER_RTV; typedef struct D3D10_TEX1D_RTV { UINT MipSlice; } D3D10_TEX1D_RTV; typedef struct D3D10_TEX1D_ARRAY_RTV { UINT MipSlice; UINT FirstArraySlice; UINT ArraySize; } D3D10_TEX1D_ARRAY_RTV; typedef struct D3D10_TEX2D_RTV { UINT MipSlice; } D3D10_TEX2D_RTV; typedef struct D3D10_TEX2DMS_RTV { UINT UnusedField_NothingToDefine; } D3D10_TEX2DMS_RTV; typedef struct D3D10_TEX2D_ARRAY_RTV { UINT MipSlice; UINT FirstArraySlice; UINT ArraySize; } D3D10_TEX2D_ARRAY_RTV; typedef struct D3D10_TEX2DMS_ARRAY_RTV { UINT FirstArraySlice; UINT ArraySize; } D3D10_TEX2DMS_ARRAY_RTV; typedef struct D3D10_TEX3D_RTV { UINT MipSlice; UINT FirstWSlice; UINT WSize; } D3D10_TEX3D_RTV; typedef struct D3D10_RENDER_TARGET_VIEW_DESC { DXGI_FORMAT Format; D3D10_RTV_DIMENSION ViewDimension; union { D3D10_BUFFER_RTV Buffer; D3D10_TEX1D_RTV Texture1D; D3D10_TEX1D_ARRAY_RTV Texture1DArray; D3D10_TEX2D_RTV Texture2D; D3D10_TEX2D_ARRAY_RTV Texture2DArray; D3D10_TEX2DMS_RTV Texture2DMS; D3D10_TEX2DMS_ARRAY_RTV Texture2DMSArray; D3D10_TEX3D_RTV Texture3D; } ; } D3D10_RENDER_TARGET_VIEW_DESC; extern RPC_IF_HANDLE __MIDL_itf_d3d10_0000_0011_v0_0_c_ifspec; extern RPC_IF_HANDLE __MIDL_itf_d3d10_0000_0011_v0_0_s_ifspec; #ifndef __ID3D10RenderTargetView_INTERFACE_DEFINED__ #define __ID3D10RenderTargetView_INTERFACE_DEFINED__ /* interface ID3D10RenderTargetView */ /* [unique][local][object][uuid] */ EXTERN_C const IID IID_ID3D10RenderTargetView; #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("9B7E4C08-342C-4106-A19F-4F2704F689F0") ID3D10RenderTargetView : public ID3D10View { public: virtual void STDMETHODCALLTYPE GetDesc( /* [annotation] */ __out D3D10_RENDER_TARGET_VIEW_DESC *pDesc) = 0; }; #else /* C style interface */ typedef struct ID3D10RenderTargetViewVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ID3D10RenderTargetView * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ __RPC__deref_out void **ppvObject); ULONG ( STDMETHODCALLTYPE *AddRef )( ID3D10RenderTargetView * This); ULONG ( STDMETHODCALLTYPE *Release )( ID3D10RenderTargetView * This); void ( STDMETHODCALLTYPE *GetDevice )( ID3D10RenderTargetView * This, /* [annotation] */ __out ID3D10Device **ppDevice); HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( ID3D10RenderTargetView * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __inout UINT *pDataSize, /* [annotation] */ __out_bcount_opt(*pDataSize) void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( ID3D10RenderTargetView * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in UINT DataSize, /* [annotation] */ __in_bcount_opt(DataSize) const void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( ID3D10RenderTargetView * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in_opt const IUnknown *pData); void ( STDMETHODCALLTYPE *GetResource )( ID3D10RenderTargetView * This, /* [annotation] */ __out ID3D10Resource **ppResource); void ( STDMETHODCALLTYPE *GetDesc )( ID3D10RenderTargetView * This, /* [annotation] */ __out D3D10_RENDER_TARGET_VIEW_DESC *pDesc); END_INTERFACE } ID3D10RenderTargetViewVtbl; interface ID3D10RenderTargetView { CONST_VTBL struct ID3D10RenderTargetViewVtbl *lpVtbl; }; #ifdef COBJMACROS #define ID3D10RenderTargetView_QueryInterface(This,riid,ppvObject) \ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) #define ID3D10RenderTargetView_AddRef(This) \ ( (This)->lpVtbl -> AddRef(This) ) #define ID3D10RenderTargetView_Release(This) \ ( (This)->lpVtbl -> Release(This) ) #define ID3D10RenderTargetView_GetDevice(This,ppDevice) \ ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) #define ID3D10RenderTargetView_GetPrivateData(This,guid,pDataSize,pData) \ ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) #define ID3D10RenderTargetView_SetPrivateData(This,guid,DataSize,pData) \ ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) #define ID3D10RenderTargetView_SetPrivateDataInterface(This,guid,pData) \ ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) #define ID3D10RenderTargetView_GetResource(This,ppResource) \ ( (This)->lpVtbl -> GetResource(This,ppResource) ) #define ID3D10RenderTargetView_GetDesc(This,pDesc) \ ( (This)->lpVtbl -> GetDesc(This,pDesc) ) #endif /* COBJMACROS */ #endif /* C style interface */ #endif /* __ID3D10RenderTargetView_INTERFACE_DEFINED__ */ /* interface __MIDL_itf_d3d10_0000_0012 */ /* [local] */ typedef struct D3D10_TEX1D_DSV { UINT MipSlice; } D3D10_TEX1D_DSV; typedef struct D3D10_TEX1D_ARRAY_DSV { UINT MipSlice; UINT FirstArraySlice; UINT ArraySize; } D3D10_TEX1D_ARRAY_DSV; typedef struct D3D10_TEX2D_DSV { UINT MipSlice; } D3D10_TEX2D_DSV; typedef struct D3D10_TEX2D_ARRAY_DSV { UINT MipSlice; UINT FirstArraySlice; UINT ArraySize; } D3D10_TEX2D_ARRAY_DSV; typedef struct D3D10_TEX2DMS_DSV { UINT UnusedField_NothingToDefine; } D3D10_TEX2DMS_DSV; typedef struct D3D10_TEX2DMS_ARRAY_DSV { UINT FirstArraySlice; UINT ArraySize; } D3D10_TEX2DMS_ARRAY_DSV; typedef struct D3D10_DEPTH_STENCIL_VIEW_DESC { DXGI_FORMAT Format; D3D10_DSV_DIMENSION ViewDimension; union { D3D10_TEX1D_DSV Texture1D; D3D10_TEX1D_ARRAY_DSV Texture1DArray; D3D10_TEX2D_DSV Texture2D; D3D10_TEX2D_ARRAY_DSV Texture2DArray; D3D10_TEX2DMS_DSV Texture2DMS; D3D10_TEX2DMS_ARRAY_DSV Texture2DMSArray; } ; } D3D10_DEPTH_STENCIL_VIEW_DESC; extern RPC_IF_HANDLE __MIDL_itf_d3d10_0000_0012_v0_0_c_ifspec; extern RPC_IF_HANDLE __MIDL_itf_d3d10_0000_0012_v0_0_s_ifspec; #ifndef __ID3D10DepthStencilView_INTERFACE_DEFINED__ #define __ID3D10DepthStencilView_INTERFACE_DEFINED__ /* interface ID3D10DepthStencilView */ /* [unique][local][object][uuid] */ EXTERN_C const IID IID_ID3D10DepthStencilView; #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("9B7E4C09-342C-4106-A19F-4F2704F689F0") ID3D10DepthStencilView : public ID3D10View { public: virtual void STDMETHODCALLTYPE GetDesc( /* [annotation] */ __out D3D10_DEPTH_STENCIL_VIEW_DESC *pDesc) = 0; }; #else /* C style interface */ typedef struct ID3D10DepthStencilViewVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ID3D10DepthStencilView * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ __RPC__deref_out void **ppvObject); ULONG ( STDMETHODCALLTYPE *AddRef )( ID3D10DepthStencilView * This); ULONG ( STDMETHODCALLTYPE *Release )( ID3D10DepthStencilView * This); void ( STDMETHODCALLTYPE *GetDevice )( ID3D10DepthStencilView * This, /* [annotation] */ __out ID3D10Device **ppDevice); HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( ID3D10DepthStencilView * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __inout UINT *pDataSize, /* [annotation] */ __out_bcount_opt(*pDataSize) void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( ID3D10DepthStencilView * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in UINT DataSize, /* [annotation] */ __in_bcount_opt(DataSize) const void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( ID3D10DepthStencilView * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in_opt const IUnknown *pData); void ( STDMETHODCALLTYPE *GetResource )( ID3D10DepthStencilView * This, /* [annotation] */ __out ID3D10Resource **ppResource); void ( STDMETHODCALLTYPE *GetDesc )( ID3D10DepthStencilView * This, /* [annotation] */ __out D3D10_DEPTH_STENCIL_VIEW_DESC *pDesc); END_INTERFACE } ID3D10DepthStencilViewVtbl; interface ID3D10DepthStencilView { CONST_VTBL struct ID3D10DepthStencilViewVtbl *lpVtbl; }; #ifdef COBJMACROS #define ID3D10DepthStencilView_QueryInterface(This,riid,ppvObject) \ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) #define ID3D10DepthStencilView_AddRef(This) \ ( (This)->lpVtbl -> AddRef(This) ) #define ID3D10DepthStencilView_Release(This) \ ( (This)->lpVtbl -> Release(This) ) #define ID3D10DepthStencilView_GetDevice(This,ppDevice) \ ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) #define ID3D10DepthStencilView_GetPrivateData(This,guid,pDataSize,pData) \ ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) #define ID3D10DepthStencilView_SetPrivateData(This,guid,DataSize,pData) \ ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) #define ID3D10DepthStencilView_SetPrivateDataInterface(This,guid,pData) \ ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) #define ID3D10DepthStencilView_GetResource(This,ppResource) \ ( (This)->lpVtbl -> GetResource(This,ppResource) ) #define ID3D10DepthStencilView_GetDesc(This,pDesc) \ ( (This)->lpVtbl -> GetDesc(This,pDesc) ) #endif /* COBJMACROS */ #endif /* C style interface */ #endif /* __ID3D10DepthStencilView_INTERFACE_DEFINED__ */ #ifndef __ID3D10VertexShader_INTERFACE_DEFINED__ #define __ID3D10VertexShader_INTERFACE_DEFINED__ /* interface ID3D10VertexShader */ /* [unique][local][object][uuid] */ EXTERN_C const IID IID_ID3D10VertexShader; #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("9B7E4C0A-342C-4106-A19F-4F2704F689F0") ID3D10VertexShader : public ID3D10DeviceChild { public: }; #else /* C style interface */ typedef struct ID3D10VertexShaderVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ID3D10VertexShader * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ __RPC__deref_out void **ppvObject); ULONG ( STDMETHODCALLTYPE *AddRef )( ID3D10VertexShader * This); ULONG ( STDMETHODCALLTYPE *Release )( ID3D10VertexShader * This); void ( STDMETHODCALLTYPE *GetDevice )( ID3D10VertexShader * This, /* [annotation] */ __out ID3D10Device **ppDevice); HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( ID3D10VertexShader * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __inout UINT *pDataSize, /* [annotation] */ __out_bcount_opt(*pDataSize) void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( ID3D10VertexShader * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in UINT DataSize, /* [annotation] */ __in_bcount_opt(DataSize) const void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( ID3D10VertexShader * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in_opt const IUnknown *pData); END_INTERFACE } ID3D10VertexShaderVtbl; interface ID3D10VertexShader { CONST_VTBL struct ID3D10VertexShaderVtbl *lpVtbl; }; #ifdef COBJMACROS #define ID3D10VertexShader_QueryInterface(This,riid,ppvObject) \ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) #define ID3D10VertexShader_AddRef(This) \ ( (This)->lpVtbl -> AddRef(This) ) #define ID3D10VertexShader_Release(This) \ ( (This)->lpVtbl -> Release(This) ) #define ID3D10VertexShader_GetDevice(This,ppDevice) \ ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) #define ID3D10VertexShader_GetPrivateData(This,guid,pDataSize,pData) \ ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) #define ID3D10VertexShader_SetPrivateData(This,guid,DataSize,pData) \ ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) #define ID3D10VertexShader_SetPrivateDataInterface(This,guid,pData) \ ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) #endif /* COBJMACROS */ #endif /* C style interface */ #endif /* __ID3D10VertexShader_INTERFACE_DEFINED__ */ #ifndef __ID3D10GeometryShader_INTERFACE_DEFINED__ #define __ID3D10GeometryShader_INTERFACE_DEFINED__ /* interface ID3D10GeometryShader */ /* [unique][local][object][uuid] */ EXTERN_C const IID IID_ID3D10GeometryShader; #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("6316BE88-54CD-4040-AB44-20461BC81F68") ID3D10GeometryShader : public ID3D10DeviceChild { public: }; #else /* C style interface */ typedef struct ID3D10GeometryShaderVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ID3D10GeometryShader * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ __RPC__deref_out void **ppvObject); ULONG ( STDMETHODCALLTYPE *AddRef )( ID3D10GeometryShader * This); ULONG ( STDMETHODCALLTYPE *Release )( ID3D10GeometryShader * This); void ( STDMETHODCALLTYPE *GetDevice )( ID3D10GeometryShader * This, /* [annotation] */ __out ID3D10Device **ppDevice); HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( ID3D10GeometryShader * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __inout UINT *pDataSize, /* [annotation] */ __out_bcount_opt(*pDataSize) void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( ID3D10GeometryShader * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in UINT DataSize, /* [annotation] */ __in_bcount_opt(DataSize) const void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( ID3D10GeometryShader * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in_opt const IUnknown *pData); END_INTERFACE } ID3D10GeometryShaderVtbl; interface ID3D10GeometryShader { CONST_VTBL struct ID3D10GeometryShaderVtbl *lpVtbl; }; #ifdef COBJMACROS #define ID3D10GeometryShader_QueryInterface(This,riid,ppvObject) \ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) #define ID3D10GeometryShader_AddRef(This) \ ( (This)->lpVtbl -> AddRef(This) ) #define ID3D10GeometryShader_Release(This) \ ( (This)->lpVtbl -> Release(This) ) #define ID3D10GeometryShader_GetDevice(This,ppDevice) \ ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) #define ID3D10GeometryShader_GetPrivateData(This,guid,pDataSize,pData) \ ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) #define ID3D10GeometryShader_SetPrivateData(This,guid,DataSize,pData) \ ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) #define ID3D10GeometryShader_SetPrivateDataInterface(This,guid,pData) \ ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) #endif /* COBJMACROS */ #endif /* C style interface */ #endif /* __ID3D10GeometryShader_INTERFACE_DEFINED__ */ #ifndef __ID3D10PixelShader_INTERFACE_DEFINED__ #define __ID3D10PixelShader_INTERFACE_DEFINED__ /* interface ID3D10PixelShader */ /* [unique][local][object][uuid] */ EXTERN_C const IID IID_ID3D10PixelShader; #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("4968B601-9D00-4cde-8346-8E7F675819B6") ID3D10PixelShader : public ID3D10DeviceChild { public: }; #else /* C style interface */ typedef struct ID3D10PixelShaderVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ID3D10PixelShader * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ __RPC__deref_out void **ppvObject); ULONG ( STDMETHODCALLTYPE *AddRef )( ID3D10PixelShader * This); ULONG ( STDMETHODCALLTYPE *Release )( ID3D10PixelShader * This); void ( STDMETHODCALLTYPE *GetDevice )( ID3D10PixelShader * This, /* [annotation] */ __out ID3D10Device **ppDevice); HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( ID3D10PixelShader * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __inout UINT *pDataSize, /* [annotation] */ __out_bcount_opt(*pDataSize) void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( ID3D10PixelShader * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in UINT DataSize, /* [annotation] */ __in_bcount_opt(DataSize) const void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( ID3D10PixelShader * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in_opt const IUnknown *pData); END_INTERFACE } ID3D10PixelShaderVtbl; interface ID3D10PixelShader { CONST_VTBL struct ID3D10PixelShaderVtbl *lpVtbl; }; #ifdef COBJMACROS #define ID3D10PixelShader_QueryInterface(This,riid,ppvObject) \ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) #define ID3D10PixelShader_AddRef(This) \ ( (This)->lpVtbl -> AddRef(This) ) #define ID3D10PixelShader_Release(This) \ ( (This)->lpVtbl -> Release(This) ) #define ID3D10PixelShader_GetDevice(This,ppDevice) \ ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) #define ID3D10PixelShader_GetPrivateData(This,guid,pDataSize,pData) \ ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) #define ID3D10PixelShader_SetPrivateData(This,guid,DataSize,pData) \ ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) #define ID3D10PixelShader_SetPrivateDataInterface(This,guid,pData) \ ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) #endif /* COBJMACROS */ #endif /* C style interface */ #endif /* __ID3D10PixelShader_INTERFACE_DEFINED__ */ #ifndef __ID3D10InputLayout_INTERFACE_DEFINED__ #define __ID3D10InputLayout_INTERFACE_DEFINED__ /* interface ID3D10InputLayout */ /* [unique][local][object][uuid] */ EXTERN_C const IID IID_ID3D10InputLayout; #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("9B7E4C0B-342C-4106-A19F-4F2704F689F0") ID3D10InputLayout : public ID3D10DeviceChild { public: }; #else /* C style interface */ typedef struct ID3D10InputLayoutVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ID3D10InputLayout * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ __RPC__deref_out void **ppvObject); ULONG ( STDMETHODCALLTYPE *AddRef )( ID3D10InputLayout * This); ULONG ( STDMETHODCALLTYPE *Release )( ID3D10InputLayout * This); void ( STDMETHODCALLTYPE *GetDevice )( ID3D10InputLayout * This, /* [annotation] */ __out ID3D10Device **ppDevice); HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( ID3D10InputLayout * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __inout UINT *pDataSize, /* [annotation] */ __out_bcount_opt(*pDataSize) void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( ID3D10InputLayout * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in UINT DataSize, /* [annotation] */ __in_bcount_opt(DataSize) const void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( ID3D10InputLayout * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in_opt const IUnknown *pData); END_INTERFACE } ID3D10InputLayoutVtbl; interface ID3D10InputLayout { CONST_VTBL struct ID3D10InputLayoutVtbl *lpVtbl; }; #ifdef COBJMACROS #define ID3D10InputLayout_QueryInterface(This,riid,ppvObject) \ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) #define ID3D10InputLayout_AddRef(This) \ ( (This)->lpVtbl -> AddRef(This) ) #define ID3D10InputLayout_Release(This) \ ( (This)->lpVtbl -> Release(This) ) #define ID3D10InputLayout_GetDevice(This,ppDevice) \ ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) #define ID3D10InputLayout_GetPrivateData(This,guid,pDataSize,pData) \ ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) #define ID3D10InputLayout_SetPrivateData(This,guid,DataSize,pData) \ ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) #define ID3D10InputLayout_SetPrivateDataInterface(This,guid,pData) \ ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) #endif /* COBJMACROS */ #endif /* C style interface */ #endif /* __ID3D10InputLayout_INTERFACE_DEFINED__ */ /* interface __MIDL_itf_d3d10_0000_0017 */ /* [local] */ typedef enum D3D10_FILTER { D3D10_FILTER_MIN_MAG_MIP_POINT = 0, D3D10_FILTER_MIN_MAG_POINT_MIP_LINEAR = 0x1, D3D10_FILTER_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x4, D3D10_FILTER_MIN_POINT_MAG_MIP_LINEAR = 0x5, D3D10_FILTER_MIN_LINEAR_MAG_MIP_POINT = 0x10, D3D10_FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x11, D3D10_FILTER_MIN_MAG_LINEAR_MIP_POINT = 0x14, D3D10_FILTER_MIN_MAG_MIP_LINEAR = 0x15, D3D10_FILTER_ANISOTROPIC = 0x55, D3D10_FILTER_COMPARISON_MIN_MAG_MIP_POINT = 0x80, D3D10_FILTER_COMPARISON_MIN_MAG_POINT_MIP_LINEAR = 0x81, D3D10_FILTER_COMPARISON_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x84, D3D10_FILTER_COMPARISON_MIN_POINT_MAG_MIP_LINEAR = 0x85, D3D10_FILTER_COMPARISON_MIN_LINEAR_MAG_MIP_POINT = 0x90, D3D10_FILTER_COMPARISON_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x91, D3D10_FILTER_COMPARISON_MIN_MAG_LINEAR_MIP_POINT = 0x94, D3D10_FILTER_COMPARISON_MIN_MAG_MIP_LINEAR = 0x95, D3D10_FILTER_COMPARISON_ANISOTROPIC = 0xd5, D3D10_FILTER_TEXT_1BIT = 0x80000000 } D3D10_FILTER; typedef enum D3D10_FILTER_TYPE { D3D10_FILTER_TYPE_POINT = 0, D3D10_FILTER_TYPE_LINEAR = 1 } D3D10_FILTER_TYPE; #define D3D10_FILTER_TYPE_MASK ( 0x3 ) #define D3D10_MIN_FILTER_SHIFT ( 4 ) #define D3D10_MAG_FILTER_SHIFT ( 2 ) #define D3D10_MIP_FILTER_SHIFT ( 0 ) #define D3D10_COMPARISON_FILTERING_BIT ( 0x80 ) #define D3D10_ANISOTROPIC_FILTERING_BIT ( 0x40 ) #define D3D10_TEXT_1BIT_BIT ( 0x80000000 ) #define D3D10_ENCODE_BASIC_FILTER( min, mag, mip, bComparison ) \ ( ( D3D10_FILTER ) ( \ ( ( bComparison ) ? D3D10_COMPARISON_FILTERING_BIT : 0 ) | \ ( ( ( min ) & D3D10_FILTER_TYPE_MASK ) << D3D10_MIN_FILTER_SHIFT ) | \ ( ( ( mag ) & D3D10_FILTER_TYPE_MASK ) << D3D10_MAG_FILTER_SHIFT ) | \ ( ( ( mip ) & D3D10_FILTER_TYPE_MASK ) << D3D10_MIP_FILTER_SHIFT ) ) ) #define D3D10_ENCODE_ANISOTROPIC_FILTER( bComparison ) \ ( ( D3D10_FILTER ) ( \ D3D10_ANISOTROPIC_FILTERING_BIT | \ D3D10_ENCODE_BASIC_FILTER( D3D10_FILTER_TYPE_LINEAR, \ D3D10_FILTER_TYPE_LINEAR, \ D3D10_FILTER_TYPE_LINEAR, \ bComparison ) ) ) #define D3D10_DECODE_MIN_FILTER( d3d10Filter ) \ ( ( D3D10_FILTER_TYPE ) \ ( ( ( d3d10Filter ) >> D3D10_MIN_FILTER_SHIFT ) & D3D10_FILTER_TYPE_MASK ) ) #define D3D10_DECODE_MAG_FILTER( d3d10Filter ) \ ( ( D3D10_FILTER_TYPE ) \ ( ( ( d3d10Filter ) >> D3D10_MAG_FILTER_SHIFT ) & D3D10_FILTER_TYPE_MASK ) ) #define D3D10_DECODE_MIP_FILTER( d3d10Filter ) \ ( ( D3D10_FILTER_TYPE ) \ ( ( ( d3d10Filter ) >> D3D10_MIP_FILTER_SHIFT ) & D3D10_FILTER_TYPE_MASK ) ) #define D3D10_DECODE_IS_COMPARISON_FILTER( d3d10Filter ) \ ( ( d3d10Filter ) & D3D10_COMPARISON_FILTERING_BIT ) #define D3D10_DECODE_IS_ANISOTROPIC_FILTER( d3d10Filter ) \ ( ( ( d3d10Filter ) & D3D10_ANISOTROPIC_FILTERING_BIT ) && \ ( D3D10_FILTER_TYPE_LINEAR == D3D10_DECODE_MIN_FILTER( d3d10Filter ) ) && \ ( D3D10_FILTER_TYPE_LINEAR == D3D10_DECODE_MAG_FILTER( d3d10Filter ) ) && \ ( D3D10_FILTER_TYPE_LINEAR == D3D10_DECODE_MIP_FILTER( d3d10Filter ) ) ) #define D3D10_DECODE_IS_TEXT_1BIT_FILTER( d3d10Filter ) \ ( ( d3d10Filter ) == D3D10_TEXT_1BIT_BIT ) typedef enum D3D10_TEXTURE_ADDRESS_MODE { D3D10_TEXTURE_ADDRESS_WRAP = 1, D3D10_TEXTURE_ADDRESS_MIRROR = 2, D3D10_TEXTURE_ADDRESS_CLAMP = 3, D3D10_TEXTURE_ADDRESS_BORDER = 4, D3D10_TEXTURE_ADDRESS_MIRROR_ONCE = 5 } D3D10_TEXTURE_ADDRESS_MODE; typedef struct D3D10_SAMPLER_DESC { D3D10_FILTER Filter; D3D10_TEXTURE_ADDRESS_MODE AddressU; D3D10_TEXTURE_ADDRESS_MODE AddressV; D3D10_TEXTURE_ADDRESS_MODE AddressW; FLOAT MipLODBias; UINT MaxAnisotropy; D3D10_COMPARISON_FUNC ComparisonFunc; FLOAT BorderColor[ 4 ]; FLOAT MinLOD; FLOAT MaxLOD; } D3D10_SAMPLER_DESC; extern RPC_IF_HANDLE __MIDL_itf_d3d10_0000_0017_v0_0_c_ifspec; extern RPC_IF_HANDLE __MIDL_itf_d3d10_0000_0017_v0_0_s_ifspec; #ifndef __ID3D10SamplerState_INTERFACE_DEFINED__ #define __ID3D10SamplerState_INTERFACE_DEFINED__ /* interface ID3D10SamplerState */ /* [unique][local][object][uuid] */ EXTERN_C const IID IID_ID3D10SamplerState; #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("9B7E4C0C-342C-4106-A19F-4F2704F689F0") ID3D10SamplerState : public ID3D10DeviceChild { public: virtual void STDMETHODCALLTYPE GetDesc( /* [annotation] */ __out D3D10_SAMPLER_DESC *pDesc) = 0; }; #else /* C style interface */ typedef struct ID3D10SamplerStateVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ID3D10SamplerState * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ __RPC__deref_out void **ppvObject); ULONG ( STDMETHODCALLTYPE *AddRef )( ID3D10SamplerState * This); ULONG ( STDMETHODCALLTYPE *Release )( ID3D10SamplerState * This); void ( STDMETHODCALLTYPE *GetDevice )( ID3D10SamplerState * This, /* [annotation] */ __out ID3D10Device **ppDevice); HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( ID3D10SamplerState * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __inout UINT *pDataSize, /* [annotation] */ __out_bcount_opt(*pDataSize) void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( ID3D10SamplerState * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in UINT DataSize, /* [annotation] */ __in_bcount_opt(DataSize) const void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( ID3D10SamplerState * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in_opt const IUnknown *pData); void ( STDMETHODCALLTYPE *GetDesc )( ID3D10SamplerState * This, /* [annotation] */ __out D3D10_SAMPLER_DESC *pDesc); END_INTERFACE } ID3D10SamplerStateVtbl; interface ID3D10SamplerState { CONST_VTBL struct ID3D10SamplerStateVtbl *lpVtbl; }; #ifdef COBJMACROS #define ID3D10SamplerState_QueryInterface(This,riid,ppvObject) \ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) #define ID3D10SamplerState_AddRef(This) \ ( (This)->lpVtbl -> AddRef(This) ) #define ID3D10SamplerState_Release(This) \ ( (This)->lpVtbl -> Release(This) ) #define ID3D10SamplerState_GetDevice(This,ppDevice) \ ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) #define ID3D10SamplerState_GetPrivateData(This,guid,pDataSize,pData) \ ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) #define ID3D10SamplerState_SetPrivateData(This,guid,DataSize,pData) \ ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) #define ID3D10SamplerState_SetPrivateDataInterface(This,guid,pData) \ ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) #define ID3D10SamplerState_GetDesc(This,pDesc) \ ( (This)->lpVtbl -> GetDesc(This,pDesc) ) #endif /* COBJMACROS */ #endif /* C style interface */ #endif /* __ID3D10SamplerState_INTERFACE_DEFINED__ */ /* interface __MIDL_itf_d3d10_0000_0018 */ /* [local] */ typedef enum D3D10_FORMAT_SUPPORT { D3D10_FORMAT_SUPPORT_BUFFER = 0x1, D3D10_FORMAT_SUPPORT_IA_VERTEX_BUFFER = 0x2, D3D10_FORMAT_SUPPORT_IA_INDEX_BUFFER = 0x4, D3D10_FORMAT_SUPPORT_SO_BUFFER = 0x8, D3D10_FORMAT_SUPPORT_TEXTURE1D = 0x10, D3D10_FORMAT_SUPPORT_TEXTURE2D = 0x20, D3D10_FORMAT_SUPPORT_TEXTURE3D = 0x40, D3D10_FORMAT_SUPPORT_TEXTURECUBE = 0x80, D3D10_FORMAT_SUPPORT_SHADER_LOAD = 0x100, D3D10_FORMAT_SUPPORT_SHADER_SAMPLE = 0x200, D3D10_FORMAT_SUPPORT_SHADER_SAMPLE_COMPARISON = 0x400, D3D10_FORMAT_SUPPORT_SHADER_SAMPLE_MONO_TEXT = 0x800, D3D10_FORMAT_SUPPORT_MIP = 0x1000, D3D10_FORMAT_SUPPORT_MIP_AUTOGEN = 0x2000, D3D10_FORMAT_SUPPORT_RENDER_TARGET = 0x4000, D3D10_FORMAT_SUPPORT_BLENDABLE = 0x8000, D3D10_FORMAT_SUPPORT_DEPTH_STENCIL = 0x10000, D3D10_FORMAT_SUPPORT_CPU_LOCKABLE = 0x20000, D3D10_FORMAT_SUPPORT_MULTISAMPLE_RESOLVE = 0x40000, D3D10_FORMAT_SUPPORT_DISPLAY = 0x80000, D3D10_FORMAT_SUPPORT_CAST_WITHIN_BIT_LAYOUT = 0x100000, D3D10_FORMAT_SUPPORT_MULTISAMPLE_RENDERTARGET = 0x200000, D3D10_FORMAT_SUPPORT_MULTISAMPLE_LOAD = 0x400000, D3D10_FORMAT_SUPPORT_SHADER_GATHER = 0x800000, D3D10_FORMAT_SUPPORT_BACK_BUFFER_CAST = 0x1000000 } D3D10_FORMAT_SUPPORT; extern RPC_IF_HANDLE __MIDL_itf_d3d10_0000_0018_v0_0_c_ifspec; extern RPC_IF_HANDLE __MIDL_itf_d3d10_0000_0018_v0_0_s_ifspec; #ifndef __ID3D10Asynchronous_INTERFACE_DEFINED__ #define __ID3D10Asynchronous_INTERFACE_DEFINED__ /* interface ID3D10Asynchronous */ /* [unique][local][object][uuid] */ EXTERN_C const IID IID_ID3D10Asynchronous; #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("9B7E4C0D-342C-4106-A19F-4F2704F689F0") ID3D10Asynchronous : public ID3D10DeviceChild { public: virtual void STDMETHODCALLTYPE Begin( void) = 0; virtual void STDMETHODCALLTYPE End( void) = 0; virtual HRESULT STDMETHODCALLTYPE GetData( /* [annotation] */ __out_bcount_opt(DataSize) void *pData, /* [annotation] */ __in UINT DataSize, /* [annotation] */ __in UINT GetDataFlags) = 0; virtual UINT STDMETHODCALLTYPE GetDataSize( void) = 0; }; #else /* C style interface */ typedef struct ID3D10AsynchronousVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ID3D10Asynchronous * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ __RPC__deref_out void **ppvObject); ULONG ( STDMETHODCALLTYPE *AddRef )( ID3D10Asynchronous * This); ULONG ( STDMETHODCALLTYPE *Release )( ID3D10Asynchronous * This); void ( STDMETHODCALLTYPE *GetDevice )( ID3D10Asynchronous * This, /* [annotation] */ __out ID3D10Device **ppDevice); HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( ID3D10Asynchronous * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __inout UINT *pDataSize, /* [annotation] */ __out_bcount_opt(*pDataSize) void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( ID3D10Asynchronous * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in UINT DataSize, /* [annotation] */ __in_bcount_opt(DataSize) const void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( ID3D10Asynchronous * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in_opt const IUnknown *pData); void ( STDMETHODCALLTYPE *Begin )( ID3D10Asynchronous * This); void ( STDMETHODCALLTYPE *End )( ID3D10Asynchronous * This); HRESULT ( STDMETHODCALLTYPE *GetData )( ID3D10Asynchronous * This, /* [annotation] */ __out_bcount_opt(DataSize) void *pData, /* [annotation] */ __in UINT DataSize, /* [annotation] */ __in UINT GetDataFlags); UINT ( STDMETHODCALLTYPE *GetDataSize )( ID3D10Asynchronous * This); END_INTERFACE } ID3D10AsynchronousVtbl; interface ID3D10Asynchronous { CONST_VTBL struct ID3D10AsynchronousVtbl *lpVtbl; }; #ifdef COBJMACROS #define ID3D10Asynchronous_QueryInterface(This,riid,ppvObject) \ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) #define ID3D10Asynchronous_AddRef(This) \ ( (This)->lpVtbl -> AddRef(This) ) #define ID3D10Asynchronous_Release(This) \ ( (This)->lpVtbl -> Release(This) ) #define ID3D10Asynchronous_GetDevice(This,ppDevice) \ ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) #define ID3D10Asynchronous_GetPrivateData(This,guid,pDataSize,pData) \ ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) #define ID3D10Asynchronous_SetPrivateData(This,guid,DataSize,pData) \ ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) #define ID3D10Asynchronous_SetPrivateDataInterface(This,guid,pData) \ ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) #define ID3D10Asynchronous_Begin(This) \ ( (This)->lpVtbl -> Begin(This) ) #define ID3D10Asynchronous_End(This) \ ( (This)->lpVtbl -> End(This) ) #define ID3D10Asynchronous_GetData(This,pData,DataSize,GetDataFlags) \ ( (This)->lpVtbl -> GetData(This,pData,DataSize,GetDataFlags) ) #define ID3D10Asynchronous_GetDataSize(This) \ ( (This)->lpVtbl -> GetDataSize(This) ) #endif /* COBJMACROS */ #endif /* C style interface */ #endif /* __ID3D10Asynchronous_INTERFACE_DEFINED__ */ /* interface __MIDL_itf_d3d10_0000_0019 */ /* [local] */ typedef enum D3D10_ASYNC_GETDATA_FLAG { D3D10_ASYNC_GETDATA_DONOTFLUSH = 0x1 } D3D10_ASYNC_GETDATA_FLAG; typedef enum D3D10_QUERY { D3D10_QUERY_EVENT = 0, D3D10_QUERY_OCCLUSION = ( D3D10_QUERY_EVENT + 1 ) , D3D10_QUERY_TIMESTAMP = ( D3D10_QUERY_OCCLUSION + 1 ) , D3D10_QUERY_TIMESTAMP_DISJOINT = ( D3D10_QUERY_TIMESTAMP + 1 ) , D3D10_QUERY_PIPELINE_STATISTICS = ( D3D10_QUERY_TIMESTAMP_DISJOINT + 1 ) , D3D10_QUERY_OCCLUSION_PREDICATE = ( D3D10_QUERY_PIPELINE_STATISTICS + 1 ) , D3D10_QUERY_SO_STATISTICS = ( D3D10_QUERY_OCCLUSION_PREDICATE + 1 ) , D3D10_QUERY_SO_OVERFLOW_PREDICATE = ( D3D10_QUERY_SO_STATISTICS + 1 ) } D3D10_QUERY; typedef enum D3D10_QUERY_MISC_FLAG { D3D10_QUERY_MISC_PREDICATEHINT = 0x1 } D3D10_QUERY_MISC_FLAG; typedef struct D3D10_QUERY_DESC { D3D10_QUERY Query; UINT MiscFlags; } D3D10_QUERY_DESC; extern RPC_IF_HANDLE __MIDL_itf_d3d10_0000_0019_v0_0_c_ifspec; extern RPC_IF_HANDLE __MIDL_itf_d3d10_0000_0019_v0_0_s_ifspec; #ifndef __ID3D10Query_INTERFACE_DEFINED__ #define __ID3D10Query_INTERFACE_DEFINED__ /* interface ID3D10Query */ /* [unique][local][object][uuid] */ EXTERN_C const IID IID_ID3D10Query; #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("9B7E4C0E-342C-4106-A19F-4F2704F689F0") ID3D10Query : public ID3D10Asynchronous { public: virtual void STDMETHODCALLTYPE GetDesc( /* [annotation] */ __out D3D10_QUERY_DESC *pDesc) = 0; }; #else /* C style interface */ typedef struct ID3D10QueryVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ID3D10Query * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ __RPC__deref_out void **ppvObject); ULONG ( STDMETHODCALLTYPE *AddRef )( ID3D10Query * This); ULONG ( STDMETHODCALLTYPE *Release )( ID3D10Query * This); void ( STDMETHODCALLTYPE *GetDevice )( ID3D10Query * This, /* [annotation] */ __out ID3D10Device **ppDevice); HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( ID3D10Query * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __inout UINT *pDataSize, /* [annotation] */ __out_bcount_opt(*pDataSize) void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( ID3D10Query * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in UINT DataSize, /* [annotation] */ __in_bcount_opt(DataSize) const void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( ID3D10Query * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in_opt const IUnknown *pData); void ( STDMETHODCALLTYPE *Begin )( ID3D10Query * This); void ( STDMETHODCALLTYPE *End )( ID3D10Query * This); HRESULT ( STDMETHODCALLTYPE *GetData )( ID3D10Query * This, /* [annotation] */ __out_bcount_opt(DataSize) void *pData, /* [annotation] */ __in UINT DataSize, /* [annotation] */ __in UINT GetDataFlags); UINT ( STDMETHODCALLTYPE *GetDataSize )( ID3D10Query * This); void ( STDMETHODCALLTYPE *GetDesc )( ID3D10Query * This, /* [annotation] */ __out D3D10_QUERY_DESC *pDesc); END_INTERFACE } ID3D10QueryVtbl; interface ID3D10Query { CONST_VTBL struct ID3D10QueryVtbl *lpVtbl; }; #ifdef COBJMACROS #define ID3D10Query_QueryInterface(This,riid,ppvObject) \ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) #define ID3D10Query_AddRef(This) \ ( (This)->lpVtbl -> AddRef(This) ) #define ID3D10Query_Release(This) \ ( (This)->lpVtbl -> Release(This) ) #define ID3D10Query_GetDevice(This,ppDevice) \ ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) #define ID3D10Query_GetPrivateData(This,guid,pDataSize,pData) \ ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) #define ID3D10Query_SetPrivateData(This,guid,DataSize,pData) \ ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) #define ID3D10Query_SetPrivateDataInterface(This,guid,pData) \ ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) #define ID3D10Query_Begin(This) \ ( (This)->lpVtbl -> Begin(This) ) #define ID3D10Query_End(This) \ ( (This)->lpVtbl -> End(This) ) #define ID3D10Query_GetData(This,pData,DataSize,GetDataFlags) \ ( (This)->lpVtbl -> GetData(This,pData,DataSize,GetDataFlags) ) #define ID3D10Query_GetDataSize(This) \ ( (This)->lpVtbl -> GetDataSize(This) ) #define ID3D10Query_GetDesc(This,pDesc) \ ( (This)->lpVtbl -> GetDesc(This,pDesc) ) #endif /* COBJMACROS */ #endif /* C style interface */ #endif /* __ID3D10Query_INTERFACE_DEFINED__ */ #ifndef __ID3D10Predicate_INTERFACE_DEFINED__ #define __ID3D10Predicate_INTERFACE_DEFINED__ /* interface ID3D10Predicate */ /* [unique][local][object][uuid] */ EXTERN_C const IID IID_ID3D10Predicate; #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("9B7E4C10-342C-4106-A19F-4F2704F689F0") ID3D10Predicate : public ID3D10Query { public: }; #else /* C style interface */ typedef struct ID3D10PredicateVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ID3D10Predicate * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ __RPC__deref_out void **ppvObject); ULONG ( STDMETHODCALLTYPE *AddRef )( ID3D10Predicate * This); ULONG ( STDMETHODCALLTYPE *Release )( ID3D10Predicate * This); void ( STDMETHODCALLTYPE *GetDevice )( ID3D10Predicate * This, /* [annotation] */ __out ID3D10Device **ppDevice); HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( ID3D10Predicate * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __inout UINT *pDataSize, /* [annotation] */ __out_bcount_opt(*pDataSize) void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( ID3D10Predicate * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in UINT DataSize, /* [annotation] */ __in_bcount_opt(DataSize) const void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( ID3D10Predicate * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in_opt const IUnknown *pData); void ( STDMETHODCALLTYPE *Begin )( ID3D10Predicate * This); void ( STDMETHODCALLTYPE *End )( ID3D10Predicate * This); HRESULT ( STDMETHODCALLTYPE *GetData )( ID3D10Predicate * This, /* [annotation] */ __out_bcount_opt(DataSize) void *pData, /* [annotation] */ __in UINT DataSize, /* [annotation] */ __in UINT GetDataFlags); UINT ( STDMETHODCALLTYPE *GetDataSize )( ID3D10Predicate * This); void ( STDMETHODCALLTYPE *GetDesc )( ID3D10Predicate * This, /* [annotation] */ __out D3D10_QUERY_DESC *pDesc); END_INTERFACE } ID3D10PredicateVtbl; interface ID3D10Predicate { CONST_VTBL struct ID3D10PredicateVtbl *lpVtbl; }; #ifdef COBJMACROS #define ID3D10Predicate_QueryInterface(This,riid,ppvObject) \ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) #define ID3D10Predicate_AddRef(This) \ ( (This)->lpVtbl -> AddRef(This) ) #define ID3D10Predicate_Release(This) \ ( (This)->lpVtbl -> Release(This) ) #define ID3D10Predicate_GetDevice(This,ppDevice) \ ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) #define ID3D10Predicate_GetPrivateData(This,guid,pDataSize,pData) \ ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) #define ID3D10Predicate_SetPrivateData(This,guid,DataSize,pData) \ ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) #define ID3D10Predicate_SetPrivateDataInterface(This,guid,pData) \ ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) #define ID3D10Predicate_Begin(This) \ ( (This)->lpVtbl -> Begin(This) ) #define ID3D10Predicate_End(This) \ ( (This)->lpVtbl -> End(This) ) #define ID3D10Predicate_GetData(This,pData,DataSize,GetDataFlags) \ ( (This)->lpVtbl -> GetData(This,pData,DataSize,GetDataFlags) ) #define ID3D10Predicate_GetDataSize(This) \ ( (This)->lpVtbl -> GetDataSize(This) ) #define ID3D10Predicate_GetDesc(This,pDesc) \ ( (This)->lpVtbl -> GetDesc(This,pDesc) ) #endif /* COBJMACROS */ #endif /* C style interface */ #endif /* __ID3D10Predicate_INTERFACE_DEFINED__ */ /* interface __MIDL_itf_d3d10_0000_0021 */ /* [local] */ typedef struct D3D10_QUERY_DATA_TIMESTAMP_DISJOINT { UINT64 Frequency; BOOL Disjoint; } D3D10_QUERY_DATA_TIMESTAMP_DISJOINT; typedef struct D3D10_QUERY_DATA_PIPELINE_STATISTICS { UINT64 IAVertices; UINT64 IAPrimitives; UINT64 VSInvocations; UINT64 GSInvocations; UINT64 GSPrimitives; UINT64 CInvocations; UINT64 CPrimitives; UINT64 PSInvocations; } D3D10_QUERY_DATA_PIPELINE_STATISTICS; typedef struct D3D10_QUERY_DATA_SO_STATISTICS { UINT64 NumPrimitivesWritten; UINT64 PrimitivesStorageNeeded; } D3D10_QUERY_DATA_SO_STATISTICS; typedef enum D3D10_COUNTER { D3D10_COUNTER_GPU_IDLE = 0, D3D10_COUNTER_VERTEX_PROCESSING = ( D3D10_COUNTER_GPU_IDLE + 1 ) , D3D10_COUNTER_GEOMETRY_PROCESSING = ( D3D10_COUNTER_VERTEX_PROCESSING + 1 ) , D3D10_COUNTER_PIXEL_PROCESSING = ( D3D10_COUNTER_GEOMETRY_PROCESSING + 1 ) , D3D10_COUNTER_OTHER_GPU_PROCESSING = ( D3D10_COUNTER_PIXEL_PROCESSING + 1 ) , D3D10_COUNTER_HOST_ADAPTER_BANDWIDTH_UTILIZATION = ( D3D10_COUNTER_OTHER_GPU_PROCESSING + 1 ) , D3D10_COUNTER_LOCAL_VIDMEM_BANDWIDTH_UTILIZATION = ( D3D10_COUNTER_HOST_ADAPTER_BANDWIDTH_UTILIZATION + 1 ) , D3D10_COUNTER_VERTEX_THROUGHPUT_UTILIZATION = ( D3D10_COUNTER_LOCAL_VIDMEM_BANDWIDTH_UTILIZATION + 1 ) , D3D10_COUNTER_TRIANGLE_SETUP_THROUGHPUT_UTILIZATION = ( D3D10_COUNTER_VERTEX_THROUGHPUT_UTILIZATION + 1 ) , D3D10_COUNTER_FILLRATE_THROUGHPUT_UTILIZATION = ( D3D10_COUNTER_TRIANGLE_SETUP_THROUGHPUT_UTILIZATION + 1 ) , D3D10_COUNTER_VS_MEMORY_LIMITED = ( D3D10_COUNTER_FILLRATE_THROUGHPUT_UTILIZATION + 1 ) , D3D10_COUNTER_VS_COMPUTATION_LIMITED = ( D3D10_COUNTER_VS_MEMORY_LIMITED + 1 ) , D3D10_COUNTER_GS_MEMORY_LIMITED = ( D3D10_COUNTER_VS_COMPUTATION_LIMITED + 1 ) , D3D10_COUNTER_GS_COMPUTATION_LIMITED = ( D3D10_COUNTER_GS_MEMORY_LIMITED + 1 ) , D3D10_COUNTER_PS_MEMORY_LIMITED = ( D3D10_COUNTER_GS_COMPUTATION_LIMITED + 1 ) , D3D10_COUNTER_PS_COMPUTATION_LIMITED = ( D3D10_COUNTER_PS_MEMORY_LIMITED + 1 ) , D3D10_COUNTER_POST_TRANSFORM_CACHE_HIT_RATE = ( D3D10_COUNTER_PS_COMPUTATION_LIMITED + 1 ) , D3D10_COUNTER_TEXTURE_CACHE_HIT_RATE = ( D3D10_COUNTER_POST_TRANSFORM_CACHE_HIT_RATE + 1 ) , D3D10_COUNTER_DEVICE_DEPENDENT_0 = 0x40000000 } D3D10_COUNTER; typedef enum D3D10_COUNTER_TYPE { D3D10_COUNTER_TYPE_FLOAT32 = 0, D3D10_COUNTER_TYPE_UINT16 = ( D3D10_COUNTER_TYPE_FLOAT32 + 1 ) , D3D10_COUNTER_TYPE_UINT32 = ( D3D10_COUNTER_TYPE_UINT16 + 1 ) , D3D10_COUNTER_TYPE_UINT64 = ( D3D10_COUNTER_TYPE_UINT32 + 1 ) } D3D10_COUNTER_TYPE; typedef struct D3D10_COUNTER_DESC { D3D10_COUNTER Counter; UINT MiscFlags; } D3D10_COUNTER_DESC; typedef struct D3D10_COUNTER_INFO { D3D10_COUNTER LastDeviceDependentCounter; UINT NumSimultaneousCounters; UINT8 NumDetectableParallelUnits; } D3D10_COUNTER_INFO; extern RPC_IF_HANDLE __MIDL_itf_d3d10_0000_0021_v0_0_c_ifspec; extern RPC_IF_HANDLE __MIDL_itf_d3d10_0000_0021_v0_0_s_ifspec; #ifndef __ID3D10Counter_INTERFACE_DEFINED__ #define __ID3D10Counter_INTERFACE_DEFINED__ /* interface ID3D10Counter */ /* [unique][local][object][uuid] */ EXTERN_C const IID IID_ID3D10Counter; #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("9B7E4C11-342C-4106-A19F-4F2704F689F0") ID3D10Counter : public ID3D10Asynchronous { public: virtual void STDMETHODCALLTYPE GetDesc( /* [annotation] */ __out D3D10_COUNTER_DESC *pDesc) = 0; }; #else /* C style interface */ typedef struct ID3D10CounterVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ID3D10Counter * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ __RPC__deref_out void **ppvObject); ULONG ( STDMETHODCALLTYPE *AddRef )( ID3D10Counter * This); ULONG ( STDMETHODCALLTYPE *Release )( ID3D10Counter * This); void ( STDMETHODCALLTYPE *GetDevice )( ID3D10Counter * This, /* [annotation] */ __out ID3D10Device **ppDevice); HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( ID3D10Counter * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __inout UINT *pDataSize, /* [annotation] */ __out_bcount_opt(*pDataSize) void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( ID3D10Counter * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in UINT DataSize, /* [annotation] */ __in_bcount_opt(DataSize) const void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( ID3D10Counter * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in_opt const IUnknown *pData); void ( STDMETHODCALLTYPE *Begin )( ID3D10Counter * This); void ( STDMETHODCALLTYPE *End )( ID3D10Counter * This); HRESULT ( STDMETHODCALLTYPE *GetData )( ID3D10Counter * This, /* [annotation] */ __out_bcount_opt(DataSize) void *pData, /* [annotation] */ __in UINT DataSize, /* [annotation] */ __in UINT GetDataFlags); UINT ( STDMETHODCALLTYPE *GetDataSize )( ID3D10Counter * This); void ( STDMETHODCALLTYPE *GetDesc )( ID3D10Counter * This, /* [annotation] */ __out D3D10_COUNTER_DESC *pDesc); END_INTERFACE } ID3D10CounterVtbl; interface ID3D10Counter { CONST_VTBL struct ID3D10CounterVtbl *lpVtbl; }; #ifdef COBJMACROS #define ID3D10Counter_QueryInterface(This,riid,ppvObject) \ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) #define ID3D10Counter_AddRef(This) \ ( (This)->lpVtbl -> AddRef(This) ) #define ID3D10Counter_Release(This) \ ( (This)->lpVtbl -> Release(This) ) #define ID3D10Counter_GetDevice(This,ppDevice) \ ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) #define ID3D10Counter_GetPrivateData(This,guid,pDataSize,pData) \ ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) #define ID3D10Counter_SetPrivateData(This,guid,DataSize,pData) \ ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) #define ID3D10Counter_SetPrivateDataInterface(This,guid,pData) \ ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) #define ID3D10Counter_Begin(This) \ ( (This)->lpVtbl -> Begin(This) ) #define ID3D10Counter_End(This) \ ( (This)->lpVtbl -> End(This) ) #define ID3D10Counter_GetData(This,pData,DataSize,GetDataFlags) \ ( (This)->lpVtbl -> GetData(This,pData,DataSize,GetDataFlags) ) #define ID3D10Counter_GetDataSize(This) \ ( (This)->lpVtbl -> GetDataSize(This) ) #define ID3D10Counter_GetDesc(This,pDesc) \ ( (This)->lpVtbl -> GetDesc(This,pDesc) ) #endif /* COBJMACROS */ #endif /* C style interface */ #endif /* __ID3D10Counter_INTERFACE_DEFINED__ */ #ifndef __ID3D10Device_INTERFACE_DEFINED__ #define __ID3D10Device_INTERFACE_DEFINED__ /* interface ID3D10Device */ /* [unique][local][object][uuid] */ EXTERN_C const IID IID_ID3D10Device; #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("9B7E4C0F-342C-4106-A19F-4F2704F689F0") ID3D10Device : public IUnknown { public: virtual void STDMETHODCALLTYPE VSSetConstantBuffers( /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot ) UINT NumBuffers, /* [annotation] */ __in_ecount(NumBuffers) ID3D10Buffer *const *ppConstantBuffers) = 0; virtual void STDMETHODCALLTYPE PSSetShaderResources( /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot ) UINT NumViews, /* [annotation] */ __in_ecount(NumViews) ID3D10ShaderResourceView *const *ppShaderResourceViews) = 0; virtual void STDMETHODCALLTYPE PSSetShader( /* [annotation] */ __in_opt ID3D10PixelShader *pPixelShader) = 0; virtual void STDMETHODCALLTYPE PSSetSamplers( /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot ) UINT NumSamplers, /* [annotation] */ __in_ecount(NumSamplers) ID3D10SamplerState *const *ppSamplers) = 0; virtual void STDMETHODCALLTYPE VSSetShader( /* [annotation] */ __in_opt ID3D10VertexShader *pVertexShader) = 0; virtual void STDMETHODCALLTYPE DrawIndexed( /* [annotation] */ __in UINT IndexCount, /* [annotation] */ __in UINT StartIndexLocation, /* [annotation] */ __in INT BaseVertexLocation) = 0; virtual void STDMETHODCALLTYPE Draw( /* [annotation] */ __in UINT VertexCount, /* [annotation] */ __in UINT StartVertexLocation) = 0; virtual void STDMETHODCALLTYPE PSSetConstantBuffers( /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot ) UINT NumBuffers, /* [annotation] */ __in_ecount(NumBuffers) ID3D10Buffer *const *ppConstantBuffers) = 0; virtual void STDMETHODCALLTYPE IASetInputLayout( /* [annotation] */ __in_opt ID3D10InputLayout *pInputLayout) = 0; virtual void STDMETHODCALLTYPE IASetVertexBuffers( /* [annotation] */ __in_range( 0, D3D10_1_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D10_1_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT - StartSlot ) UINT NumBuffers, /* [annotation] */ __in_ecount(NumBuffers) ID3D10Buffer *const *ppVertexBuffers, /* [annotation] */ __in_ecount(NumBuffers) const UINT *pStrides, /* [annotation] */ __in_ecount(NumBuffers) const UINT *pOffsets) = 0; virtual void STDMETHODCALLTYPE IASetIndexBuffer( /* [annotation] */ __in_opt ID3D10Buffer *pIndexBuffer, /* [annotation] */ __in DXGI_FORMAT Format, /* [annotation] */ __in UINT Offset) = 0; virtual void STDMETHODCALLTYPE DrawIndexedInstanced( /* [annotation] */ __in UINT IndexCountPerInstance, /* [annotation] */ __in UINT InstanceCount, /* [annotation] */ __in UINT StartIndexLocation, /* [annotation] */ __in INT BaseVertexLocation, /* [annotation] */ __in UINT StartInstanceLocation) = 0; virtual void STDMETHODCALLTYPE DrawInstanced( /* [annotation] */ __in UINT VertexCountPerInstance, /* [annotation] */ __in UINT InstanceCount, /* [annotation] */ __in UINT StartVertexLocation, /* [annotation] */ __in UINT StartInstanceLocation) = 0; virtual void STDMETHODCALLTYPE GSSetConstantBuffers( /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot ) UINT NumBuffers, /* [annotation] */ __in_ecount(NumBuffers) ID3D10Buffer *const *ppConstantBuffers) = 0; virtual void STDMETHODCALLTYPE GSSetShader( /* [annotation] */ __in_opt ID3D10GeometryShader *pShader) = 0; virtual void STDMETHODCALLTYPE IASetPrimitiveTopology( /* [annotation] */ __in D3D10_PRIMITIVE_TOPOLOGY Topology) = 0; virtual void STDMETHODCALLTYPE VSSetShaderResources( /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot ) UINT NumViews, /* [annotation] */ __in_ecount(NumViews) ID3D10ShaderResourceView *const *ppShaderResourceViews) = 0; virtual void STDMETHODCALLTYPE VSSetSamplers( /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot ) UINT NumSamplers, /* [annotation] */ __in_ecount(NumSamplers) ID3D10SamplerState *const *ppSamplers) = 0; virtual void STDMETHODCALLTYPE SetPredication( /* [annotation] */ __in_opt ID3D10Predicate *pPredicate, /* [annotation] */ __in BOOL PredicateValue) = 0; virtual void STDMETHODCALLTYPE GSSetShaderResources( /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot ) UINT NumViews, /* [annotation] */ __in_ecount(NumViews) ID3D10ShaderResourceView *const *ppShaderResourceViews) = 0; virtual void STDMETHODCALLTYPE GSSetSamplers( /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot ) UINT NumSamplers, /* [annotation] */ __in_ecount(NumSamplers) ID3D10SamplerState *const *ppSamplers) = 0; virtual void STDMETHODCALLTYPE OMSetRenderTargets( /* [annotation] */ __in_range( 0, D3D10_SIMULTANEOUS_RENDER_TARGET_COUNT ) UINT NumViews, /* [annotation] */ __in_ecount_opt(NumViews) ID3D10RenderTargetView *const *ppRenderTargetViews, /* [annotation] */ __in_opt ID3D10DepthStencilView *pDepthStencilView) = 0; virtual void STDMETHODCALLTYPE OMSetBlendState( /* [annotation] */ __in_opt ID3D10BlendState *pBlendState, /* [annotation] */ __in const FLOAT BlendFactor[ 4 ], /* [annotation] */ __in UINT SampleMask) = 0; virtual void STDMETHODCALLTYPE OMSetDepthStencilState( /* [annotation] */ __in_opt ID3D10DepthStencilState *pDepthStencilState, /* [annotation] */ __in UINT StencilRef) = 0; virtual void STDMETHODCALLTYPE SOSetTargets( /* [annotation] */ __in_range( 0, D3D10_SO_BUFFER_SLOT_COUNT) UINT NumBuffers, /* [annotation] */ __in_ecount_opt(NumBuffers) ID3D10Buffer *const *ppSOTargets, /* [annotation] */ __in_ecount_opt(NumBuffers) const UINT *pOffsets) = 0; virtual void STDMETHODCALLTYPE DrawAuto( void) = 0; virtual void STDMETHODCALLTYPE RSSetState( /* [annotation] */ __in_opt ID3D10RasterizerState *pRasterizerState) = 0; virtual void STDMETHODCALLTYPE RSSetViewports( /* [annotation] */ __in_range(0, D3D10_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE) UINT NumViewports, /* [annotation] */ __in_ecount_opt(NumViewports) const D3D10_VIEWPORT *pViewports) = 0; virtual void STDMETHODCALLTYPE RSSetScissorRects( /* [annotation] */ __in_range(0, D3D10_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE) UINT NumRects, /* [annotation] */ __in_ecount_opt(NumRects) const D3D10_RECT *pRects) = 0; virtual void STDMETHODCALLTYPE CopySubresourceRegion( /* [annotation] */ __in ID3D10Resource *pDstResource, /* [annotation] */ __in UINT DstSubresource, /* [annotation] */ __in UINT DstX, /* [annotation] */ __in UINT DstY, /* [annotation] */ __in UINT DstZ, /* [annotation] */ __in ID3D10Resource *pSrcResource, /* [annotation] */ __in UINT SrcSubresource, /* [annotation] */ __in_opt const D3D10_BOX *pSrcBox) = 0; virtual void STDMETHODCALLTYPE CopyResource( /* [annotation] */ __in ID3D10Resource *pDstResource, /* [annotation] */ __in ID3D10Resource *pSrcResource) = 0; virtual void STDMETHODCALLTYPE UpdateSubresource( /* [annotation] */ __in ID3D10Resource *pDstResource, /* [annotation] */ __in UINT DstSubresource, /* [annotation] */ __in_opt const D3D10_BOX *pDstBox, /* [annotation] */ __in const void *pSrcData, /* [annotation] */ __in UINT SrcRowPitch, /* [annotation] */ __in UINT SrcDepthPitch) = 0; virtual void STDMETHODCALLTYPE ClearRenderTargetView( /* [annotation] */ __in ID3D10RenderTargetView *pRenderTargetView, /* [annotation] */ __in const FLOAT ColorRGBA[ 4 ]) = 0; virtual void STDMETHODCALLTYPE ClearDepthStencilView( /* [annotation] */ __in ID3D10DepthStencilView *pDepthStencilView, /* [annotation] */ __in UINT ClearFlags, /* [annotation] */ __in FLOAT Depth, /* [annotation] */ __in UINT8 Stencil) = 0; virtual void STDMETHODCALLTYPE GenerateMips( /* [annotation] */ __in ID3D10ShaderResourceView *pShaderResourceView) = 0; virtual void STDMETHODCALLTYPE ResolveSubresource( /* [annotation] */ __in ID3D10Resource *pDstResource, /* [annotation] */ __in UINT DstSubresource, /* [annotation] */ __in ID3D10Resource *pSrcResource, /* [annotation] */ __in UINT SrcSubresource, /* [annotation] */ __in DXGI_FORMAT Format) = 0; virtual void STDMETHODCALLTYPE VSGetConstantBuffers( /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot ) UINT NumBuffers, /* [annotation] */ __out_ecount(NumBuffers) ID3D10Buffer **ppConstantBuffers) = 0; virtual void STDMETHODCALLTYPE PSGetShaderResources( /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot ) UINT NumViews, /* [annotation] */ __out_ecount(NumViews) ID3D10ShaderResourceView **ppShaderResourceViews) = 0; virtual void STDMETHODCALLTYPE PSGetShader( /* [annotation] */ __out ID3D10PixelShader **ppPixelShader) = 0; virtual void STDMETHODCALLTYPE PSGetSamplers( /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot ) UINT NumSamplers, /* [annotation] */ __out_ecount(NumSamplers) ID3D10SamplerState **ppSamplers) = 0; virtual void STDMETHODCALLTYPE VSGetShader( /* [annotation] */ __out ID3D10VertexShader **ppVertexShader) = 0; virtual void STDMETHODCALLTYPE PSGetConstantBuffers( /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot ) UINT NumBuffers, /* [annotation] */ __out_ecount(NumBuffers) ID3D10Buffer **ppConstantBuffers) = 0; virtual void STDMETHODCALLTYPE IAGetInputLayout( /* [annotation] */ __out ID3D10InputLayout **ppInputLayout) = 0; virtual void STDMETHODCALLTYPE IAGetVertexBuffers( /* [annotation] */ __in_range( 0, D3D10_1_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D10_1_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT - StartSlot ) UINT NumBuffers, /* [annotation] */ __out_ecount_opt(NumBuffers) ID3D10Buffer **ppVertexBuffers, /* [annotation] */ __out_ecount_opt(NumBuffers) UINT *pStrides, /* [annotation] */ __out_ecount_opt(NumBuffers) UINT *pOffsets) = 0; virtual void STDMETHODCALLTYPE IAGetIndexBuffer( /* [annotation] */ __out_opt ID3D10Buffer **pIndexBuffer, /* [annotation] */ __out_opt DXGI_FORMAT *Format, /* [annotation] */ __out_opt UINT *Offset) = 0; virtual void STDMETHODCALLTYPE GSGetConstantBuffers( /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot ) UINT NumBuffers, /* [annotation] */ __out_ecount(NumBuffers) ID3D10Buffer **ppConstantBuffers) = 0; virtual void STDMETHODCALLTYPE GSGetShader( /* [annotation] */ __out ID3D10GeometryShader **ppGeometryShader) = 0; virtual void STDMETHODCALLTYPE IAGetPrimitiveTopology( /* [annotation] */ __out D3D10_PRIMITIVE_TOPOLOGY *pTopology) = 0; virtual void STDMETHODCALLTYPE VSGetShaderResources( /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot ) UINT NumViews, /* [annotation] */ __out_ecount(NumViews) ID3D10ShaderResourceView **ppShaderResourceViews) = 0; virtual void STDMETHODCALLTYPE VSGetSamplers( /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot ) UINT NumSamplers, /* [annotation] */ __out_ecount(NumSamplers) ID3D10SamplerState **ppSamplers) = 0; virtual void STDMETHODCALLTYPE GetPredication( /* [annotation] */ __out_opt ID3D10Predicate **ppPredicate, /* [annotation] */ __out_opt BOOL *pPredicateValue) = 0; virtual void STDMETHODCALLTYPE GSGetShaderResources( /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot ) UINT NumViews, /* [annotation] */ __out_ecount(NumViews) ID3D10ShaderResourceView **ppShaderResourceViews) = 0; virtual void STDMETHODCALLTYPE GSGetSamplers( /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot ) UINT NumSamplers, /* [annotation] */ __out_ecount(NumSamplers) ID3D10SamplerState **ppSamplers) = 0; virtual void STDMETHODCALLTYPE OMGetRenderTargets( /* [annotation] */ __in_range( 0, D3D10_SIMULTANEOUS_RENDER_TARGET_COUNT ) UINT NumViews, /* [annotation] */ __out_ecount_opt(NumViews) ID3D10RenderTargetView **ppRenderTargetViews, /* [annotation] */ __out_opt ID3D10DepthStencilView **ppDepthStencilView) = 0; virtual void STDMETHODCALLTYPE OMGetBlendState( /* [annotation] */ __out_opt ID3D10BlendState **ppBlendState, /* [annotation] */ __out_opt FLOAT BlendFactor[ 4 ], /* [annotation] */ __out_opt UINT *pSampleMask) = 0; virtual void STDMETHODCALLTYPE OMGetDepthStencilState( /* [annotation] */ __out_opt ID3D10DepthStencilState **ppDepthStencilState, /* [annotation] */ __out_opt UINT *pStencilRef) = 0; virtual void STDMETHODCALLTYPE SOGetTargets( /* [annotation] */ __in_range( 0, D3D10_SO_BUFFER_SLOT_COUNT ) UINT NumBuffers, /* [annotation] */ __out_ecount_opt(NumBuffers) ID3D10Buffer **ppSOTargets, /* [annotation] */ __out_ecount_opt(NumBuffers) UINT *pOffsets) = 0; virtual void STDMETHODCALLTYPE RSGetState( /* [annotation] */ __out ID3D10RasterizerState **ppRasterizerState) = 0; virtual void STDMETHODCALLTYPE RSGetViewports( /* [annotation] */ __inout /*_range(0, D3D10_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE )*/ UINT *NumViewports, /* [annotation] */ __out_ecount_opt(*NumViewports) D3D10_VIEWPORT *pViewports) = 0; virtual void STDMETHODCALLTYPE RSGetScissorRects( /* [annotation] */ __inout /*_range(0, D3D10_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE )*/ UINT *NumRects, /* [annotation] */ __out_ecount_opt(*NumRects) D3D10_RECT *pRects) = 0; virtual HRESULT STDMETHODCALLTYPE GetDeviceRemovedReason( void) = 0; virtual HRESULT STDMETHODCALLTYPE SetExceptionMode( UINT RaiseFlags) = 0; virtual UINT STDMETHODCALLTYPE GetExceptionMode( void) = 0; virtual HRESULT STDMETHODCALLTYPE GetPrivateData( /* [annotation] */ __in REFGUID guid, /* [annotation] */ __inout UINT *pDataSize, /* [annotation] */ __out_bcount_opt(*pDataSize) void *pData) = 0; virtual HRESULT STDMETHODCALLTYPE SetPrivateData( /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in UINT DataSize, /* [annotation] */ __in_bcount_opt(DataSize) const void *pData) = 0; virtual HRESULT STDMETHODCALLTYPE SetPrivateDataInterface( /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in_opt const IUnknown *pData) = 0; virtual void STDMETHODCALLTYPE ClearState( void) = 0; virtual void STDMETHODCALLTYPE Flush( void) = 0; virtual HRESULT STDMETHODCALLTYPE CreateBuffer( /* [annotation] */ __in const D3D10_BUFFER_DESC *pDesc, /* [annotation] */ __in_opt const D3D10_SUBRESOURCE_DATA *pInitialData, /* [annotation] */ __out_opt ID3D10Buffer **ppBuffer) = 0; virtual HRESULT STDMETHODCALLTYPE CreateTexture1D( /* [annotation] */ __in const D3D10_TEXTURE1D_DESC *pDesc, /* [annotation] */ __in_xcount_opt(pDesc->MipLevels * pDesc->ArraySize) const D3D10_SUBRESOURCE_DATA *pInitialData, /* [annotation] */ __out ID3D10Texture1D **ppTexture1D) = 0; virtual HRESULT STDMETHODCALLTYPE CreateTexture2D( /* [annotation] */ __in const D3D10_TEXTURE2D_DESC *pDesc, /* [annotation] */ __in_xcount_opt(pDesc->MipLevels * pDesc->ArraySize) const D3D10_SUBRESOURCE_DATA *pInitialData, /* [annotation] */ __out ID3D10Texture2D **ppTexture2D) = 0; virtual HRESULT STDMETHODCALLTYPE CreateTexture3D( /* [annotation] */ __in const D3D10_TEXTURE3D_DESC *pDesc, /* [annotation] */ __in_xcount_opt(pDesc->MipLevels) const D3D10_SUBRESOURCE_DATA *pInitialData, /* [annotation] */ __out ID3D10Texture3D **ppTexture3D) = 0; virtual HRESULT STDMETHODCALLTYPE CreateShaderResourceView( /* [annotation] */ __in ID3D10Resource *pResource, /* [annotation] */ __in_opt const D3D10_SHADER_RESOURCE_VIEW_DESC *pDesc, /* [annotation] */ __out_opt ID3D10ShaderResourceView **ppSRView) = 0; virtual HRESULT STDMETHODCALLTYPE CreateRenderTargetView( /* [annotation] */ __in ID3D10Resource *pResource, /* [annotation] */ __in_opt const D3D10_RENDER_TARGET_VIEW_DESC *pDesc, /* [annotation] */ __out_opt ID3D10RenderTargetView **ppRTView) = 0; virtual HRESULT STDMETHODCALLTYPE CreateDepthStencilView( /* [annotation] */ __in ID3D10Resource *pResource, /* [annotation] */ __in_opt const D3D10_DEPTH_STENCIL_VIEW_DESC *pDesc, /* [annotation] */ __out_opt ID3D10DepthStencilView **ppDepthStencilView) = 0; virtual HRESULT STDMETHODCALLTYPE CreateInputLayout( /* [annotation] */ __in_ecount(NumElements) const D3D10_INPUT_ELEMENT_DESC *pInputElementDescs, /* [annotation] */ __in_range( 0, D3D10_1_IA_VERTEX_INPUT_STRUCTURE_ELEMENT_COUNT ) UINT NumElements, /* [annotation] */ __in const void *pShaderBytecodeWithInputSignature, /* [annotation] */ __in SIZE_T BytecodeLength, /* [annotation] */ __out_opt ID3D10InputLayout **ppInputLayout) = 0; virtual HRESULT STDMETHODCALLTYPE CreateVertexShader( /* [annotation] */ __in const void *pShaderBytecode, /* [annotation] */ __in SIZE_T BytecodeLength, /* [annotation] */ __out_opt ID3D10VertexShader **ppVertexShader) = 0; virtual HRESULT STDMETHODCALLTYPE CreateGeometryShader( /* [annotation] */ __in const void *pShaderBytecode, /* [annotation] */ __in SIZE_T BytecodeLength, /* [annotation] */ __out_opt ID3D10GeometryShader **ppGeometryShader) = 0; virtual HRESULT STDMETHODCALLTYPE CreateGeometryShaderWithStreamOutput( /* [annotation] */ __in const void *pShaderBytecode, /* [annotation] */ __in SIZE_T BytecodeLength, /* [annotation] */ __in_ecount_opt(NumEntries) const D3D10_SO_DECLARATION_ENTRY *pSODeclaration, /* [annotation] */ __in_range( 0, D3D10_SO_SINGLE_BUFFER_COMPONENT_LIMIT ) UINT NumEntries, /* [annotation] */ __in UINT OutputStreamStride, /* [annotation] */ __out_opt ID3D10GeometryShader **ppGeometryShader) = 0; virtual HRESULT STDMETHODCALLTYPE CreatePixelShader( /* [annotation] */ __in const void *pShaderBytecode, /* [annotation] */ __in SIZE_T BytecodeLength, /* [annotation] */ __out_opt ID3D10PixelShader **ppPixelShader) = 0; virtual HRESULT STDMETHODCALLTYPE CreateBlendState( /* [annotation] */ __in const D3D10_BLEND_DESC *pBlendStateDesc, /* [annotation] */ __out_opt ID3D10BlendState **ppBlendState) = 0; virtual HRESULT STDMETHODCALLTYPE CreateDepthStencilState( /* [annotation] */ __in const D3D10_DEPTH_STENCIL_DESC *pDepthStencilDesc, /* [annotation] */ __out_opt ID3D10DepthStencilState **ppDepthStencilState) = 0; virtual HRESULT STDMETHODCALLTYPE CreateRasterizerState( /* [annotation] */ __in const D3D10_RASTERIZER_DESC *pRasterizerDesc, /* [annotation] */ __out_opt ID3D10RasterizerState **ppRasterizerState) = 0; virtual HRESULT STDMETHODCALLTYPE CreateSamplerState( /* [annotation] */ __in const D3D10_SAMPLER_DESC *pSamplerDesc, /* [annotation] */ __out_opt ID3D10SamplerState **ppSamplerState) = 0; virtual HRESULT STDMETHODCALLTYPE CreateQuery( /* [annotation] */ __in const D3D10_QUERY_DESC *pQueryDesc, /* [annotation] */ __out_opt ID3D10Query **ppQuery) = 0; virtual HRESULT STDMETHODCALLTYPE CreatePredicate( /* [annotation] */ __in const D3D10_QUERY_DESC *pPredicateDesc, /* [annotation] */ __out_opt ID3D10Predicate **ppPredicate) = 0; virtual HRESULT STDMETHODCALLTYPE CreateCounter( /* [annotation] */ __in const D3D10_COUNTER_DESC *pCounterDesc, /* [annotation] */ __out_opt ID3D10Counter **ppCounter) = 0; virtual HRESULT STDMETHODCALLTYPE CheckFormatSupport( /* [annotation] */ __in DXGI_FORMAT Format, /* [annotation] */ __out UINT *pFormatSupport) = 0; virtual HRESULT STDMETHODCALLTYPE CheckMultisampleQualityLevels( /* [annotation] */ __in DXGI_FORMAT Format, /* [annotation] */ __in UINT SampleCount, /* [annotation] */ __out UINT *pNumQualityLevels) = 0; virtual void STDMETHODCALLTYPE CheckCounterInfo( /* [annotation] */ __out D3D10_COUNTER_INFO *pCounterInfo) = 0; virtual HRESULT STDMETHODCALLTYPE CheckCounter( /* [annotation] */ __in const D3D10_COUNTER_DESC *pDesc, /* [annotation] */ __out D3D10_COUNTER_TYPE *pType, /* [annotation] */ __out UINT *pActiveCounters, /* [annotation] */ __out_ecount_opt(*pNameLength) LPSTR szName, /* [annotation] */ __inout_opt UINT *pNameLength, /* [annotation] */ __out_ecount_opt(*pUnitsLength) LPSTR szUnits, /* [annotation] */ __inout_opt UINT *pUnitsLength, /* [annotation] */ __out_ecount_opt(*pDescriptionLength) LPSTR szDescription, /* [annotation] */ __inout_opt UINT *pDescriptionLength) = 0; virtual UINT STDMETHODCALLTYPE GetCreationFlags( void) = 0; virtual HRESULT STDMETHODCALLTYPE OpenSharedResource( /* [annotation] */ __in HANDLE hResource, /* [annotation] */ __in REFIID ReturnedInterface, /* [annotation] */ __out_opt void **ppResource) = 0; virtual void STDMETHODCALLTYPE SetTextFilterSize( /* [annotation] */ __in UINT Width, /* [annotation] */ __in UINT Height) = 0; virtual void STDMETHODCALLTYPE GetTextFilterSize( /* [annotation] */ __out_opt UINT *pWidth, /* [annotation] */ __out_opt UINT *pHeight) = 0; }; #else /* C style interface */ typedef struct ID3D10DeviceVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ID3D10Device * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ __RPC__deref_out void **ppvObject); ULONG ( STDMETHODCALLTYPE *AddRef )( ID3D10Device * This); ULONG ( STDMETHODCALLTYPE *Release )( ID3D10Device * This); void ( STDMETHODCALLTYPE *VSSetConstantBuffers )( ID3D10Device * This, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot ) UINT NumBuffers, /* [annotation] */ __in_ecount(NumBuffers) ID3D10Buffer *const *ppConstantBuffers); void ( STDMETHODCALLTYPE *PSSetShaderResources )( ID3D10Device * This, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot ) UINT NumViews, /* [annotation] */ __in_ecount(NumViews) ID3D10ShaderResourceView *const *ppShaderResourceViews); void ( STDMETHODCALLTYPE *PSSetShader )( ID3D10Device * This, /* [annotation] */ __in_opt ID3D10PixelShader *pPixelShader); void ( STDMETHODCALLTYPE *PSSetSamplers )( ID3D10Device * This, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot ) UINT NumSamplers, /* [annotation] */ __in_ecount(NumSamplers) ID3D10SamplerState *const *ppSamplers); void ( STDMETHODCALLTYPE *VSSetShader )( ID3D10Device * This, /* [annotation] */ __in_opt ID3D10VertexShader *pVertexShader); void ( STDMETHODCALLTYPE *DrawIndexed )( ID3D10Device * This, /* [annotation] */ __in UINT IndexCount, /* [annotation] */ __in UINT StartIndexLocation, /* [annotation] */ __in INT BaseVertexLocation); void ( STDMETHODCALLTYPE *Draw )( ID3D10Device * This, /* [annotation] */ __in UINT VertexCount, /* [annotation] */ __in UINT StartVertexLocation); void ( STDMETHODCALLTYPE *PSSetConstantBuffers )( ID3D10Device * This, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot ) UINT NumBuffers, /* [annotation] */ __in_ecount(NumBuffers) ID3D10Buffer *const *ppConstantBuffers); void ( STDMETHODCALLTYPE *IASetInputLayout )( ID3D10Device * This, /* [annotation] */ __in_opt ID3D10InputLayout *pInputLayout); void ( STDMETHODCALLTYPE *IASetVertexBuffers )( ID3D10Device * This, /* [annotation] */ __in_range( 0, D3D10_1_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D10_1_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT - StartSlot ) UINT NumBuffers, /* [annotation] */ __in_ecount(NumBuffers) ID3D10Buffer *const *ppVertexBuffers, /* [annotation] */ __in_ecount(NumBuffers) const UINT *pStrides, /* [annotation] */ __in_ecount(NumBuffers) const UINT *pOffsets); void ( STDMETHODCALLTYPE *IASetIndexBuffer )( ID3D10Device * This, /* [annotation] */ __in_opt ID3D10Buffer *pIndexBuffer, /* [annotation] */ __in DXGI_FORMAT Format, /* [annotation] */ __in UINT Offset); void ( STDMETHODCALLTYPE *DrawIndexedInstanced )( ID3D10Device * This, /* [annotation] */ __in UINT IndexCountPerInstance, /* [annotation] */ __in UINT InstanceCount, /* [annotation] */ __in UINT StartIndexLocation, /* [annotation] */ __in INT BaseVertexLocation, /* [annotation] */ __in UINT StartInstanceLocation); void ( STDMETHODCALLTYPE *DrawInstanced )( ID3D10Device * This, /* [annotation] */ __in UINT VertexCountPerInstance, /* [annotation] */ __in UINT InstanceCount, /* [annotation] */ __in UINT StartVertexLocation, /* [annotation] */ __in UINT StartInstanceLocation); void ( STDMETHODCALLTYPE *GSSetConstantBuffers )( ID3D10Device * This, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot ) UINT NumBuffers, /* [annotation] */ __in_ecount(NumBuffers) ID3D10Buffer *const *ppConstantBuffers); void ( STDMETHODCALLTYPE *GSSetShader )( ID3D10Device * This, /* [annotation] */ __in_opt ID3D10GeometryShader *pShader); void ( STDMETHODCALLTYPE *IASetPrimitiveTopology )( ID3D10Device * This, /* [annotation] */ __in D3D10_PRIMITIVE_TOPOLOGY Topology); void ( STDMETHODCALLTYPE *VSSetShaderResources )( ID3D10Device * This, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot ) UINT NumViews, /* [annotation] */ __in_ecount(NumViews) ID3D10ShaderResourceView *const *ppShaderResourceViews); void ( STDMETHODCALLTYPE *VSSetSamplers )( ID3D10Device * This, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot ) UINT NumSamplers, /* [annotation] */ __in_ecount(NumSamplers) ID3D10SamplerState *const *ppSamplers); void ( STDMETHODCALLTYPE *SetPredication )( ID3D10Device * This, /* [annotation] */ __in_opt ID3D10Predicate *pPredicate, /* [annotation] */ __in BOOL PredicateValue); void ( STDMETHODCALLTYPE *GSSetShaderResources )( ID3D10Device * This, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot ) UINT NumViews, /* [annotation] */ __in_ecount(NumViews) ID3D10ShaderResourceView *const *ppShaderResourceViews); void ( STDMETHODCALLTYPE *GSSetSamplers )( ID3D10Device * This, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot ) UINT NumSamplers, /* [annotation] */ __in_ecount(NumSamplers) ID3D10SamplerState *const *ppSamplers); void ( STDMETHODCALLTYPE *OMSetRenderTargets )( ID3D10Device * This, /* [annotation] */ __in_range( 0, D3D10_SIMULTANEOUS_RENDER_TARGET_COUNT ) UINT NumViews, /* [annotation] */ __in_ecount_opt(NumViews) ID3D10RenderTargetView *const *ppRenderTargetViews, /* [annotation] */ __in_opt ID3D10DepthStencilView *pDepthStencilView); void ( STDMETHODCALLTYPE *OMSetBlendState )( ID3D10Device * This, /* [annotation] */ __in_opt ID3D10BlendState *pBlendState, /* [annotation] */ __in const FLOAT BlendFactor[ 4 ], /* [annotation] */ __in UINT SampleMask); void ( STDMETHODCALLTYPE *OMSetDepthStencilState )( ID3D10Device * This, /* [annotation] */ __in_opt ID3D10DepthStencilState *pDepthStencilState, /* [annotation] */ __in UINT StencilRef); void ( STDMETHODCALLTYPE *SOSetTargets )( ID3D10Device * This, /* [annotation] */ __in_range( 0, D3D10_SO_BUFFER_SLOT_COUNT) UINT NumBuffers, /* [annotation] */ __in_ecount_opt(NumBuffers) ID3D10Buffer *const *ppSOTargets, /* [annotation] */ __in_ecount_opt(NumBuffers) const UINT *pOffsets); void ( STDMETHODCALLTYPE *DrawAuto )( ID3D10Device * This); void ( STDMETHODCALLTYPE *RSSetState )( ID3D10Device * This, /* [annotation] */ __in_opt ID3D10RasterizerState *pRasterizerState); void ( STDMETHODCALLTYPE *RSSetViewports )( ID3D10Device * This, /* [annotation] */ __in_range(0, D3D10_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE) UINT NumViewports, /* [annotation] */ __in_ecount_opt(NumViewports) const D3D10_VIEWPORT *pViewports); void ( STDMETHODCALLTYPE *RSSetScissorRects )( ID3D10Device * This, /* [annotation] */ __in_range(0, D3D10_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE) UINT NumRects, /* [annotation] */ __in_ecount_opt(NumRects) const D3D10_RECT *pRects); void ( STDMETHODCALLTYPE *CopySubresourceRegion )( ID3D10Device * This, /* [annotation] */ __in ID3D10Resource *pDstResource, /* [annotation] */ __in UINT DstSubresource, /* [annotation] */ __in UINT DstX, /* [annotation] */ __in UINT DstY, /* [annotation] */ __in UINT DstZ, /* [annotation] */ __in ID3D10Resource *pSrcResource, /* [annotation] */ __in UINT SrcSubresource, /* [annotation] */ __in_opt const D3D10_BOX *pSrcBox); void ( STDMETHODCALLTYPE *CopyResource )( ID3D10Device * This, /* [annotation] */ __in ID3D10Resource *pDstResource, /* [annotation] */ __in ID3D10Resource *pSrcResource); void ( STDMETHODCALLTYPE *UpdateSubresource )( ID3D10Device * This, /* [annotation] */ __in ID3D10Resource *pDstResource, /* [annotation] */ __in UINT DstSubresource, /* [annotation] */ __in_opt const D3D10_BOX *pDstBox, /* [annotation] */ __in const void *pSrcData, /* [annotation] */ __in UINT SrcRowPitch, /* [annotation] */ __in UINT SrcDepthPitch); void ( STDMETHODCALLTYPE *ClearRenderTargetView )( ID3D10Device * This, /* [annotation] */ __in ID3D10RenderTargetView *pRenderTargetView, /* [annotation] */ __in const FLOAT ColorRGBA[ 4 ]); void ( STDMETHODCALLTYPE *ClearDepthStencilView )( ID3D10Device * This, /* [annotation] */ __in ID3D10DepthStencilView *pDepthStencilView, /* [annotation] */ __in UINT ClearFlags, /* [annotation] */ __in FLOAT Depth, /* [annotation] */ __in UINT8 Stencil); void ( STDMETHODCALLTYPE *GenerateMips )( ID3D10Device * This, /* [annotation] */ __in ID3D10ShaderResourceView *pShaderResourceView); void ( STDMETHODCALLTYPE *ResolveSubresource )( ID3D10Device * This, /* [annotation] */ __in ID3D10Resource *pDstResource, /* [annotation] */ __in UINT DstSubresource, /* [annotation] */ __in ID3D10Resource *pSrcResource, /* [annotation] */ __in UINT SrcSubresource, /* [annotation] */ __in DXGI_FORMAT Format); void ( STDMETHODCALLTYPE *VSGetConstantBuffers )( ID3D10Device * This, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot ) UINT NumBuffers, /* [annotation] */ __out_ecount(NumBuffers) ID3D10Buffer **ppConstantBuffers); void ( STDMETHODCALLTYPE *PSGetShaderResources )( ID3D10Device * This, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot ) UINT NumViews, /* [annotation] */ __out_ecount(NumViews) ID3D10ShaderResourceView **ppShaderResourceViews); void ( STDMETHODCALLTYPE *PSGetShader )( ID3D10Device * This, /* [annotation] */ __out ID3D10PixelShader **ppPixelShader); void ( STDMETHODCALLTYPE *PSGetSamplers )( ID3D10Device * This, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot ) UINT NumSamplers, /* [annotation] */ __out_ecount(NumSamplers) ID3D10SamplerState **ppSamplers); void ( STDMETHODCALLTYPE *VSGetShader )( ID3D10Device * This, /* [annotation] */ __out ID3D10VertexShader **ppVertexShader); void ( STDMETHODCALLTYPE *PSGetConstantBuffers )( ID3D10Device * This, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot ) UINT NumBuffers, /* [annotation] */ __out_ecount(NumBuffers) ID3D10Buffer **ppConstantBuffers); void ( STDMETHODCALLTYPE *IAGetInputLayout )( ID3D10Device * This, /* [annotation] */ __out ID3D10InputLayout **ppInputLayout); void ( STDMETHODCALLTYPE *IAGetVertexBuffers )( ID3D10Device * This, /* [annotation] */ __in_range( 0, D3D10_1_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D10_1_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT - StartSlot ) UINT NumBuffers, /* [annotation] */ __out_ecount_opt(NumBuffers) ID3D10Buffer **ppVertexBuffers, /* [annotation] */ __out_ecount_opt(NumBuffers) UINT *pStrides, /* [annotation] */ __out_ecount_opt(NumBuffers) UINT *pOffsets); void ( STDMETHODCALLTYPE *IAGetIndexBuffer )( ID3D10Device * This, /* [annotation] */ __out_opt ID3D10Buffer **pIndexBuffer, /* [annotation] */ __out_opt DXGI_FORMAT *Format, /* [annotation] */ __out_opt UINT *Offset); void ( STDMETHODCALLTYPE *GSGetConstantBuffers )( ID3D10Device * This, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot ) UINT NumBuffers, /* [annotation] */ __out_ecount(NumBuffers) ID3D10Buffer **ppConstantBuffers); void ( STDMETHODCALLTYPE *GSGetShader )( ID3D10Device * This, /* [annotation] */ __out ID3D10GeometryShader **ppGeometryShader); void ( STDMETHODCALLTYPE *IAGetPrimitiveTopology )( ID3D10Device * This, /* [annotation] */ __out D3D10_PRIMITIVE_TOPOLOGY *pTopology); void ( STDMETHODCALLTYPE *VSGetShaderResources )( ID3D10Device * This, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot ) UINT NumViews, /* [annotation] */ __out_ecount(NumViews) ID3D10ShaderResourceView **ppShaderResourceViews); void ( STDMETHODCALLTYPE *VSGetSamplers )( ID3D10Device * This, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot ) UINT NumSamplers, /* [annotation] */ __out_ecount(NumSamplers) ID3D10SamplerState **ppSamplers); void ( STDMETHODCALLTYPE *GetPredication )( ID3D10Device * This, /* [annotation] */ __out_opt ID3D10Predicate **ppPredicate, /* [annotation] */ __out_opt BOOL *pPredicateValue); void ( STDMETHODCALLTYPE *GSGetShaderResources )( ID3D10Device * This, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot ) UINT NumViews, /* [annotation] */ __out_ecount(NumViews) ID3D10ShaderResourceView **ppShaderResourceViews); void ( STDMETHODCALLTYPE *GSGetSamplers )( ID3D10Device * This, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot ) UINT NumSamplers, /* [annotation] */ __out_ecount(NumSamplers) ID3D10SamplerState **ppSamplers); void ( STDMETHODCALLTYPE *OMGetRenderTargets )( ID3D10Device * This, /* [annotation] */ __in_range( 0, D3D10_SIMULTANEOUS_RENDER_TARGET_COUNT ) UINT NumViews, /* [annotation] */ __out_ecount_opt(NumViews) ID3D10RenderTargetView **ppRenderTargetViews, /* [annotation] */ __out_opt ID3D10DepthStencilView **ppDepthStencilView); void ( STDMETHODCALLTYPE *OMGetBlendState )( ID3D10Device * This, /* [annotation] */ __out_opt ID3D10BlendState **ppBlendState, /* [annotation] */ __out_opt FLOAT BlendFactor[ 4 ], /* [annotation] */ __out_opt UINT *pSampleMask); void ( STDMETHODCALLTYPE *OMGetDepthStencilState )( ID3D10Device * This, /* [annotation] */ __out_opt ID3D10DepthStencilState **ppDepthStencilState, /* [annotation] */ __out_opt UINT *pStencilRef); void ( STDMETHODCALLTYPE *SOGetTargets )( ID3D10Device * This, /* [annotation] */ __in_range( 0, D3D10_SO_BUFFER_SLOT_COUNT ) UINT NumBuffers, /* [annotation] */ __out_ecount_opt(NumBuffers) ID3D10Buffer **ppSOTargets, /* [annotation] */ __out_ecount_opt(NumBuffers) UINT *pOffsets); void ( STDMETHODCALLTYPE *RSGetState )( ID3D10Device * This, /* [annotation] */ __out ID3D10RasterizerState **ppRasterizerState); void ( STDMETHODCALLTYPE *RSGetViewports )( ID3D10Device * This, /* [annotation] */ __inout /*_range(0, D3D10_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE )*/ UINT *NumViewports, /* [annotation] */ __out_ecount_opt(*NumViewports) D3D10_VIEWPORT *pViewports); void ( STDMETHODCALLTYPE *RSGetScissorRects )( ID3D10Device * This, /* [annotation] */ __inout /*_range(0, D3D10_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE )*/ UINT *NumRects, /* [annotation] */ __out_ecount_opt(*NumRects) D3D10_RECT *pRects); HRESULT ( STDMETHODCALLTYPE *GetDeviceRemovedReason )( ID3D10Device * This); HRESULT ( STDMETHODCALLTYPE *SetExceptionMode )( ID3D10Device * This, UINT RaiseFlags); UINT ( STDMETHODCALLTYPE *GetExceptionMode )( ID3D10Device * This); HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( ID3D10Device * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __inout UINT *pDataSize, /* [annotation] */ __out_bcount_opt(*pDataSize) void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( ID3D10Device * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in UINT DataSize, /* [annotation] */ __in_bcount_opt(DataSize) const void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( ID3D10Device * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in_opt const IUnknown *pData); void ( STDMETHODCALLTYPE *ClearState )( ID3D10Device * This); void ( STDMETHODCALLTYPE *Flush )( ID3D10Device * This); HRESULT ( STDMETHODCALLTYPE *CreateBuffer )( ID3D10Device * This, /* [annotation] */ __in const D3D10_BUFFER_DESC *pDesc, /* [annotation] */ __in_opt const D3D10_SUBRESOURCE_DATA *pInitialData, /* [annotation] */ __out_opt ID3D10Buffer **ppBuffer); HRESULT ( STDMETHODCALLTYPE *CreateTexture1D )( ID3D10Device * This, /* [annotation] */ __in const D3D10_TEXTURE1D_DESC *pDesc, /* [annotation] */ __in_xcount_opt(pDesc->MipLevels * pDesc->ArraySize) const D3D10_SUBRESOURCE_DATA *pInitialData, /* [annotation] */ __out ID3D10Texture1D **ppTexture1D); HRESULT ( STDMETHODCALLTYPE *CreateTexture2D )( ID3D10Device * This, /* [annotation] */ __in const D3D10_TEXTURE2D_DESC *pDesc, /* [annotation] */ __in_xcount_opt(pDesc->MipLevels * pDesc->ArraySize) const D3D10_SUBRESOURCE_DATA *pInitialData, /* [annotation] */ __out ID3D10Texture2D **ppTexture2D); HRESULT ( STDMETHODCALLTYPE *CreateTexture3D )( ID3D10Device * This, /* [annotation] */ __in const D3D10_TEXTURE3D_DESC *pDesc, /* [annotation] */ __in_xcount_opt(pDesc->MipLevels) const D3D10_SUBRESOURCE_DATA *pInitialData, /* [annotation] */ __out ID3D10Texture3D **ppTexture3D); HRESULT ( STDMETHODCALLTYPE *CreateShaderResourceView )( ID3D10Device * This, /* [annotation] */ __in ID3D10Resource *pResource, /* [annotation] */ __in_opt const D3D10_SHADER_RESOURCE_VIEW_DESC *pDesc, /* [annotation] */ __out_opt ID3D10ShaderResourceView **ppSRView); HRESULT ( STDMETHODCALLTYPE *CreateRenderTargetView )( ID3D10Device * This, /* [annotation] */ __in ID3D10Resource *pResource, /* [annotation] */ __in_opt const D3D10_RENDER_TARGET_VIEW_DESC *pDesc, /* [annotation] */ __out_opt ID3D10RenderTargetView **ppRTView); HRESULT ( STDMETHODCALLTYPE *CreateDepthStencilView )( ID3D10Device * This, /* [annotation] */ __in ID3D10Resource *pResource, /* [annotation] */ __in_opt const D3D10_DEPTH_STENCIL_VIEW_DESC *pDesc, /* [annotation] */ __out_opt ID3D10DepthStencilView **ppDepthStencilView); HRESULT ( STDMETHODCALLTYPE *CreateInputLayout )( ID3D10Device * This, /* [annotation] */ __in_ecount(NumElements) const D3D10_INPUT_ELEMENT_DESC *pInputElementDescs, /* [annotation] */ __in_range( 0, D3D10_1_IA_VERTEX_INPUT_STRUCTURE_ELEMENT_COUNT ) UINT NumElements, /* [annotation] */ __in const void *pShaderBytecodeWithInputSignature, /* [annotation] */ __in SIZE_T BytecodeLength, /* [annotation] */ __out_opt ID3D10InputLayout **ppInputLayout); HRESULT ( STDMETHODCALLTYPE *CreateVertexShader )( ID3D10Device * This, /* [annotation] */ __in const void *pShaderBytecode, /* [annotation] */ __in SIZE_T BytecodeLength, /* [annotation] */ __out_opt ID3D10VertexShader **ppVertexShader); HRESULT ( STDMETHODCALLTYPE *CreateGeometryShader )( ID3D10Device * This, /* [annotation] */ __in const void *pShaderBytecode, /* [annotation] */ __in SIZE_T BytecodeLength, /* [annotation] */ __out_opt ID3D10GeometryShader **ppGeometryShader); HRESULT ( STDMETHODCALLTYPE *CreateGeometryShaderWithStreamOutput )( ID3D10Device * This, /* [annotation] */ __in const void *pShaderBytecode, /* [annotation] */ __in SIZE_T BytecodeLength, /* [annotation] */ __in_ecount_opt(NumEntries) const D3D10_SO_DECLARATION_ENTRY *pSODeclaration, /* [annotation] */ __in_range( 0, D3D10_SO_SINGLE_BUFFER_COMPONENT_LIMIT ) UINT NumEntries, /* [annotation] */ __in UINT OutputStreamStride, /* [annotation] */ __out_opt ID3D10GeometryShader **ppGeometryShader); HRESULT ( STDMETHODCALLTYPE *CreatePixelShader )( ID3D10Device * This, /* [annotation] */ __in const void *pShaderBytecode, /* [annotation] */ __in SIZE_T BytecodeLength, /* [annotation] */ __out_opt ID3D10PixelShader **ppPixelShader); HRESULT ( STDMETHODCALLTYPE *CreateBlendState )( ID3D10Device * This, /* [annotation] */ __in const D3D10_BLEND_DESC *pBlendStateDesc, /* [annotation] */ __out_opt ID3D10BlendState **ppBlendState); HRESULT ( STDMETHODCALLTYPE *CreateDepthStencilState )( ID3D10Device * This, /* [annotation] */ __in const D3D10_DEPTH_STENCIL_DESC *pDepthStencilDesc, /* [annotation] */ __out_opt ID3D10DepthStencilState **ppDepthStencilState); HRESULT ( STDMETHODCALLTYPE *CreateRasterizerState )( ID3D10Device * This, /* [annotation] */ __in const D3D10_RASTERIZER_DESC *pRasterizerDesc, /* [annotation] */ __out_opt ID3D10RasterizerState **ppRasterizerState); HRESULT ( STDMETHODCALLTYPE *CreateSamplerState )( ID3D10Device * This, /* [annotation] */ __in const D3D10_SAMPLER_DESC *pSamplerDesc, /* [annotation] */ __out_opt ID3D10SamplerState **ppSamplerState); HRESULT ( STDMETHODCALLTYPE *CreateQuery )( ID3D10Device * This, /* [annotation] */ __in const D3D10_QUERY_DESC *pQueryDesc, /* [annotation] */ __out_opt ID3D10Query **ppQuery); HRESULT ( STDMETHODCALLTYPE *CreatePredicate )( ID3D10Device * This, /* [annotation] */ __in const D3D10_QUERY_DESC *pPredicateDesc, /* [annotation] */ __out_opt ID3D10Predicate **ppPredicate); HRESULT ( STDMETHODCALLTYPE *CreateCounter )( ID3D10Device * This, /* [annotation] */ __in const D3D10_COUNTER_DESC *pCounterDesc, /* [annotation] */ __out_opt ID3D10Counter **ppCounter); HRESULT ( STDMETHODCALLTYPE *CheckFormatSupport )( ID3D10Device * This, /* [annotation] */ __in DXGI_FORMAT Format, /* [annotation] */ __out UINT *pFormatSupport); HRESULT ( STDMETHODCALLTYPE *CheckMultisampleQualityLevels )( ID3D10Device * This, /* [annotation] */ __in DXGI_FORMAT Format, /* [annotation] */ __in UINT SampleCount, /* [annotation] */ __out UINT *pNumQualityLevels); void ( STDMETHODCALLTYPE *CheckCounterInfo )( ID3D10Device * This, /* [annotation] */ __out D3D10_COUNTER_INFO *pCounterInfo); HRESULT ( STDMETHODCALLTYPE *CheckCounter )( ID3D10Device * This, /* [annotation] */ __in const D3D10_COUNTER_DESC *pDesc, /* [annotation] */ __out D3D10_COUNTER_TYPE *pType, /* [annotation] */ __out UINT *pActiveCounters, /* [annotation] */ __out_ecount_opt(*pNameLength) LPSTR szName, /* [annotation] */ __inout_opt UINT *pNameLength, /* [annotation] */ __out_ecount_opt(*pUnitsLength) LPSTR szUnits, /* [annotation] */ __inout_opt UINT *pUnitsLength, /* [annotation] */ __out_ecount_opt(*pDescriptionLength) LPSTR szDescription, /* [annotation] */ __inout_opt UINT *pDescriptionLength); UINT ( STDMETHODCALLTYPE *GetCreationFlags )( ID3D10Device * This); HRESULT ( STDMETHODCALLTYPE *OpenSharedResource )( ID3D10Device * This, /* [annotation] */ __in HANDLE hResource, /* [annotation] */ __in REFIID ReturnedInterface, /* [annotation] */ __out_opt void **ppResource); void ( STDMETHODCALLTYPE *SetTextFilterSize )( ID3D10Device * This, /* [annotation] */ __in UINT Width, /* [annotation] */ __in UINT Height); void ( STDMETHODCALLTYPE *GetTextFilterSize )( ID3D10Device * This, /* [annotation] */ __out_opt UINT *pWidth, /* [annotation] */ __out_opt UINT *pHeight); END_INTERFACE } ID3D10DeviceVtbl; interface ID3D10Device { CONST_VTBL struct ID3D10DeviceVtbl *lpVtbl; }; #ifdef COBJMACROS #define ID3D10Device_QueryInterface(This,riid,ppvObject) \ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) #define ID3D10Device_AddRef(This) \ ( (This)->lpVtbl -> AddRef(This) ) #define ID3D10Device_Release(This) \ ( (This)->lpVtbl -> Release(This) ) #define ID3D10Device_VSSetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers) \ ( (This)->lpVtbl -> VSSetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers) ) #define ID3D10Device_PSSetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews) \ ( (This)->lpVtbl -> PSSetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews) ) #define ID3D10Device_PSSetShader(This,pPixelShader) \ ( (This)->lpVtbl -> PSSetShader(This,pPixelShader) ) #define ID3D10Device_PSSetSamplers(This,StartSlot,NumSamplers,ppSamplers) \ ( (This)->lpVtbl -> PSSetSamplers(This,StartSlot,NumSamplers,ppSamplers) ) #define ID3D10Device_VSSetShader(This,pVertexShader) \ ( (This)->lpVtbl -> VSSetShader(This,pVertexShader) ) #define ID3D10Device_DrawIndexed(This,IndexCount,StartIndexLocation,BaseVertexLocation) \ ( (This)->lpVtbl -> DrawIndexed(This,IndexCount,StartIndexLocation,BaseVertexLocation) ) #define ID3D10Device_Draw(This,VertexCount,StartVertexLocation) \ ( (This)->lpVtbl -> Draw(This,VertexCount,StartVertexLocation) ) #define ID3D10Device_PSSetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers) \ ( (This)->lpVtbl -> PSSetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers) ) #define ID3D10Device_IASetInputLayout(This,pInputLayout) \ ( (This)->lpVtbl -> IASetInputLayout(This,pInputLayout) ) #define ID3D10Device_IASetVertexBuffers(This,StartSlot,NumBuffers,ppVertexBuffers,pStrides,pOffsets) \ ( (This)->lpVtbl -> IASetVertexBuffers(This,StartSlot,NumBuffers,ppVertexBuffers,pStrides,pOffsets) ) #define ID3D10Device_IASetIndexBuffer(This,pIndexBuffer,Format,Offset) \ ( (This)->lpVtbl -> IASetIndexBuffer(This,pIndexBuffer,Format,Offset) ) #define ID3D10Device_DrawIndexedInstanced(This,IndexCountPerInstance,InstanceCount,StartIndexLocation,BaseVertexLocation,StartInstanceLocation) \ ( (This)->lpVtbl -> DrawIndexedInstanced(This,IndexCountPerInstance,InstanceCount,StartIndexLocation,BaseVertexLocation,StartInstanceLocation) ) #define ID3D10Device_DrawInstanced(This,VertexCountPerInstance,InstanceCount,StartVertexLocation,StartInstanceLocation) \ ( (This)->lpVtbl -> DrawInstanced(This,VertexCountPerInstance,InstanceCount,StartVertexLocation,StartInstanceLocation) ) #define ID3D10Device_GSSetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers) \ ( (This)->lpVtbl -> GSSetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers) ) #define ID3D10Device_GSSetShader(This,pShader) \ ( (This)->lpVtbl -> GSSetShader(This,pShader) ) #define ID3D10Device_IASetPrimitiveTopology(This,Topology) \ ( (This)->lpVtbl -> IASetPrimitiveTopology(This,Topology) ) #define ID3D10Device_VSSetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews) \ ( (This)->lpVtbl -> VSSetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews) ) #define ID3D10Device_VSSetSamplers(This,StartSlot,NumSamplers,ppSamplers) \ ( (This)->lpVtbl -> VSSetSamplers(This,StartSlot,NumSamplers,ppSamplers) ) #define ID3D10Device_SetPredication(This,pPredicate,PredicateValue) \ ( (This)->lpVtbl -> SetPredication(This,pPredicate,PredicateValue) ) #define ID3D10Device_GSSetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews) \ ( (This)->lpVtbl -> GSSetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews) ) #define ID3D10Device_GSSetSamplers(This,StartSlot,NumSamplers,ppSamplers) \ ( (This)->lpVtbl -> GSSetSamplers(This,StartSlot,NumSamplers,ppSamplers) ) #define ID3D10Device_OMSetRenderTargets(This,NumViews,ppRenderTargetViews,pDepthStencilView) \ ( (This)->lpVtbl -> OMSetRenderTargets(This,NumViews,ppRenderTargetViews,pDepthStencilView) ) #define ID3D10Device_OMSetBlendState(This,pBlendState,BlendFactor,SampleMask) \ ( (This)->lpVtbl -> OMSetBlendState(This,pBlendState,BlendFactor,SampleMask) ) #define ID3D10Device_OMSetDepthStencilState(This,pDepthStencilState,StencilRef) \ ( (This)->lpVtbl -> OMSetDepthStencilState(This,pDepthStencilState,StencilRef) ) #define ID3D10Device_SOSetTargets(This,NumBuffers,ppSOTargets,pOffsets) \ ( (This)->lpVtbl -> SOSetTargets(This,NumBuffers,ppSOTargets,pOffsets) ) #define ID3D10Device_DrawAuto(This) \ ( (This)->lpVtbl -> DrawAuto(This) ) #define ID3D10Device_RSSetState(This,pRasterizerState) \ ( (This)->lpVtbl -> RSSetState(This,pRasterizerState) ) #define ID3D10Device_RSSetViewports(This,NumViewports,pViewports) \ ( (This)->lpVtbl -> RSSetViewports(This,NumViewports,pViewports) ) #define ID3D10Device_RSSetScissorRects(This,NumRects,pRects) \ ( (This)->lpVtbl -> RSSetScissorRects(This,NumRects,pRects) ) #define ID3D10Device_CopySubresourceRegion(This,pDstResource,DstSubresource,DstX,DstY,DstZ,pSrcResource,SrcSubresource,pSrcBox) \ ( (This)->lpVtbl -> CopySubresourceRegion(This,pDstResource,DstSubresource,DstX,DstY,DstZ,pSrcResource,SrcSubresource,pSrcBox) ) #define ID3D10Device_CopyResource(This,pDstResource,pSrcResource) \ ( (This)->lpVtbl -> CopyResource(This,pDstResource,pSrcResource) ) #define ID3D10Device_UpdateSubresource(This,pDstResource,DstSubresource,pDstBox,pSrcData,SrcRowPitch,SrcDepthPitch) \ ( (This)->lpVtbl -> UpdateSubresource(This,pDstResource,DstSubresource,pDstBox,pSrcData,SrcRowPitch,SrcDepthPitch) ) #define ID3D10Device_ClearRenderTargetView(This,pRenderTargetView,ColorRGBA) \ ( (This)->lpVtbl -> ClearRenderTargetView(This,pRenderTargetView,ColorRGBA) ) #define ID3D10Device_ClearDepthStencilView(This,pDepthStencilView,ClearFlags,Depth,Stencil) \ ( (This)->lpVtbl -> ClearDepthStencilView(This,pDepthStencilView,ClearFlags,Depth,Stencil) ) #define ID3D10Device_GenerateMips(This,pShaderResourceView) \ ( (This)->lpVtbl -> GenerateMips(This,pShaderResourceView) ) #define ID3D10Device_ResolveSubresource(This,pDstResource,DstSubresource,pSrcResource,SrcSubresource,Format) \ ( (This)->lpVtbl -> ResolveSubresource(This,pDstResource,DstSubresource,pSrcResource,SrcSubresource,Format) ) #define ID3D10Device_VSGetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers) \ ( (This)->lpVtbl -> VSGetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers) ) #define ID3D10Device_PSGetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews) \ ( (This)->lpVtbl -> PSGetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews) ) #define ID3D10Device_PSGetShader(This,ppPixelShader) \ ( (This)->lpVtbl -> PSGetShader(This,ppPixelShader) ) #define ID3D10Device_PSGetSamplers(This,StartSlot,NumSamplers,ppSamplers) \ ( (This)->lpVtbl -> PSGetSamplers(This,StartSlot,NumSamplers,ppSamplers) ) #define ID3D10Device_VSGetShader(This,ppVertexShader) \ ( (This)->lpVtbl -> VSGetShader(This,ppVertexShader) ) #define ID3D10Device_PSGetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers) \ ( (This)->lpVtbl -> PSGetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers) ) #define ID3D10Device_IAGetInputLayout(This,ppInputLayout) \ ( (This)->lpVtbl -> IAGetInputLayout(This,ppInputLayout) ) #define ID3D10Device_IAGetVertexBuffers(This,StartSlot,NumBuffers,ppVertexBuffers,pStrides,pOffsets) \ ( (This)->lpVtbl -> IAGetVertexBuffers(This,StartSlot,NumBuffers,ppVertexBuffers,pStrides,pOffsets) ) #define ID3D10Device_IAGetIndexBuffer(This,pIndexBuffer,Format,Offset) \ ( (This)->lpVtbl -> IAGetIndexBuffer(This,pIndexBuffer,Format,Offset) ) #define ID3D10Device_GSGetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers) \ ( (This)->lpVtbl -> GSGetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers) ) #define ID3D10Device_GSGetShader(This,ppGeometryShader) \ ( (This)->lpVtbl -> GSGetShader(This,ppGeometryShader) ) #define ID3D10Device_IAGetPrimitiveTopology(This,pTopology) \ ( (This)->lpVtbl -> IAGetPrimitiveTopology(This,pTopology) ) #define ID3D10Device_VSGetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews) \ ( (This)->lpVtbl -> VSGetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews) ) #define ID3D10Device_VSGetSamplers(This,StartSlot,NumSamplers,ppSamplers) \ ( (This)->lpVtbl -> VSGetSamplers(This,StartSlot,NumSamplers,ppSamplers) ) #define ID3D10Device_GetPredication(This,ppPredicate,pPredicateValue) \ ( (This)->lpVtbl -> GetPredication(This,ppPredicate,pPredicateValue) ) #define ID3D10Device_GSGetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews) \ ( (This)->lpVtbl -> GSGetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews) ) #define ID3D10Device_GSGetSamplers(This,StartSlot,NumSamplers,ppSamplers) \ ( (This)->lpVtbl -> GSGetSamplers(This,StartSlot,NumSamplers,ppSamplers) ) #define ID3D10Device_OMGetRenderTargets(This,NumViews,ppRenderTargetViews,ppDepthStencilView) \ ( (This)->lpVtbl -> OMGetRenderTargets(This,NumViews,ppRenderTargetViews,ppDepthStencilView) ) #define ID3D10Device_OMGetBlendState(This,ppBlendState,BlendFactor,pSampleMask) \ ( (This)->lpVtbl -> OMGetBlendState(This,ppBlendState,BlendFactor,pSampleMask) ) #define ID3D10Device_OMGetDepthStencilState(This,ppDepthStencilState,pStencilRef) \ ( (This)->lpVtbl -> OMGetDepthStencilState(This,ppDepthStencilState,pStencilRef) ) #define ID3D10Device_SOGetTargets(This,NumBuffers,ppSOTargets,pOffsets) \ ( (This)->lpVtbl -> SOGetTargets(This,NumBuffers,ppSOTargets,pOffsets) ) #define ID3D10Device_RSGetState(This,ppRasterizerState) \ ( (This)->lpVtbl -> RSGetState(This,ppRasterizerState) ) #define ID3D10Device_RSGetViewports(This,NumViewports,pViewports) \ ( (This)->lpVtbl -> RSGetViewports(This,NumViewports,pViewports) ) #define ID3D10Device_RSGetScissorRects(This,NumRects,pRects) \ ( (This)->lpVtbl -> RSGetScissorRects(This,NumRects,pRects) ) #define ID3D10Device_GetDeviceRemovedReason(This) \ ( (This)->lpVtbl -> GetDeviceRemovedReason(This) ) #define ID3D10Device_SetExceptionMode(This,RaiseFlags) \ ( (This)->lpVtbl -> SetExceptionMode(This,RaiseFlags) ) #define ID3D10Device_GetExceptionMode(This) \ ( (This)->lpVtbl -> GetExceptionMode(This) ) #define ID3D10Device_GetPrivateData(This,guid,pDataSize,pData) \ ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) #define ID3D10Device_SetPrivateData(This,guid,DataSize,pData) \ ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) #define ID3D10Device_SetPrivateDataInterface(This,guid,pData) \ ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) #define ID3D10Device_ClearState(This) \ ( (This)->lpVtbl -> ClearState(This) ) #define ID3D10Device_Flush(This) \ ( (This)->lpVtbl -> Flush(This) ) #define ID3D10Device_CreateBuffer(This,pDesc,pInitialData,ppBuffer) \ ( (This)->lpVtbl -> CreateBuffer(This,pDesc,pInitialData,ppBuffer) ) #define ID3D10Device_CreateTexture1D(This,pDesc,pInitialData,ppTexture1D) \ ( (This)->lpVtbl -> CreateTexture1D(This,pDesc,pInitialData,ppTexture1D) ) #define ID3D10Device_CreateTexture2D(This,pDesc,pInitialData,ppTexture2D) \ ( (This)->lpVtbl -> CreateTexture2D(This,pDesc,pInitialData,ppTexture2D) ) #define ID3D10Device_CreateTexture3D(This,pDesc,pInitialData,ppTexture3D) \ ( (This)->lpVtbl -> CreateTexture3D(This,pDesc,pInitialData,ppTexture3D) ) #define ID3D10Device_CreateShaderResourceView(This,pResource,pDesc,ppSRView) \ ( (This)->lpVtbl -> CreateShaderResourceView(This,pResource,pDesc,ppSRView) ) #define ID3D10Device_CreateRenderTargetView(This,pResource,pDesc,ppRTView) \ ( (This)->lpVtbl -> CreateRenderTargetView(This,pResource,pDesc,ppRTView) ) #define ID3D10Device_CreateDepthStencilView(This,pResource,pDesc,ppDepthStencilView) \ ( (This)->lpVtbl -> CreateDepthStencilView(This,pResource,pDesc,ppDepthStencilView) ) #define ID3D10Device_CreateInputLayout(This,pInputElementDescs,NumElements,pShaderBytecodeWithInputSignature,BytecodeLength,ppInputLayout) \ ( (This)->lpVtbl -> CreateInputLayout(This,pInputElementDescs,NumElements,pShaderBytecodeWithInputSignature,BytecodeLength,ppInputLayout) ) #define ID3D10Device_CreateVertexShader(This,pShaderBytecode,BytecodeLength,ppVertexShader) \ ( (This)->lpVtbl -> CreateVertexShader(This,pShaderBytecode,BytecodeLength,ppVertexShader) ) #define ID3D10Device_CreateGeometryShader(This,pShaderBytecode,BytecodeLength,ppGeometryShader) \ ( (This)->lpVtbl -> CreateGeometryShader(This,pShaderBytecode,BytecodeLength,ppGeometryShader) ) #define ID3D10Device_CreateGeometryShaderWithStreamOutput(This,pShaderBytecode,BytecodeLength,pSODeclaration,NumEntries,OutputStreamStride,ppGeometryShader) \ ( (This)->lpVtbl -> CreateGeometryShaderWithStreamOutput(This,pShaderBytecode,BytecodeLength,pSODeclaration,NumEntries,OutputStreamStride,ppGeometryShader) ) #define ID3D10Device_CreatePixelShader(This,pShaderBytecode,BytecodeLength,ppPixelShader) \ ( (This)->lpVtbl -> CreatePixelShader(This,pShaderBytecode,BytecodeLength,ppPixelShader) ) #define ID3D10Device_CreateBlendState(This,pBlendStateDesc,ppBlendState) \ ( (This)->lpVtbl -> CreateBlendState(This,pBlendStateDesc,ppBlendState) ) #define ID3D10Device_CreateDepthStencilState(This,pDepthStencilDesc,ppDepthStencilState) \ ( (This)->lpVtbl -> CreateDepthStencilState(This,pDepthStencilDesc,ppDepthStencilState) ) #define ID3D10Device_CreateRasterizerState(This,pRasterizerDesc,ppRasterizerState) \ ( (This)->lpVtbl -> CreateRasterizerState(This,pRasterizerDesc,ppRasterizerState) ) #define ID3D10Device_CreateSamplerState(This,pSamplerDesc,ppSamplerState) \ ( (This)->lpVtbl -> CreateSamplerState(This,pSamplerDesc,ppSamplerState) ) #define ID3D10Device_CreateQuery(This,pQueryDesc,ppQuery) \ ( (This)->lpVtbl -> CreateQuery(This,pQueryDesc,ppQuery) ) #define ID3D10Device_CreatePredicate(This,pPredicateDesc,ppPredicate) \ ( (This)->lpVtbl -> CreatePredicate(This,pPredicateDesc,ppPredicate) ) #define ID3D10Device_CreateCounter(This,pCounterDesc,ppCounter) \ ( (This)->lpVtbl -> CreateCounter(This,pCounterDesc,ppCounter) ) #define ID3D10Device_CheckFormatSupport(This,Format,pFormatSupport) \ ( (This)->lpVtbl -> CheckFormatSupport(This,Format,pFormatSupport) ) #define ID3D10Device_CheckMultisampleQualityLevels(This,Format,SampleCount,pNumQualityLevels) \ ( (This)->lpVtbl -> CheckMultisampleQualityLevels(This,Format,SampleCount,pNumQualityLevels) ) #define ID3D10Device_CheckCounterInfo(This,pCounterInfo) \ ( (This)->lpVtbl -> CheckCounterInfo(This,pCounterInfo) ) #define ID3D10Device_CheckCounter(This,pDesc,pType,pActiveCounters,szName,pNameLength,szUnits,pUnitsLength,szDescription,pDescriptionLength) \ ( (This)->lpVtbl -> CheckCounter(This,pDesc,pType,pActiveCounters,szName,pNameLength,szUnits,pUnitsLength,szDescription,pDescriptionLength) ) #define ID3D10Device_GetCreationFlags(This) \ ( (This)->lpVtbl -> GetCreationFlags(This) ) #define ID3D10Device_OpenSharedResource(This,hResource,ReturnedInterface,ppResource) \ ( (This)->lpVtbl -> OpenSharedResource(This,hResource,ReturnedInterface,ppResource) ) #define ID3D10Device_SetTextFilterSize(This,Width,Height) \ ( (This)->lpVtbl -> SetTextFilterSize(This,Width,Height) ) #define ID3D10Device_GetTextFilterSize(This,pWidth,pHeight) \ ( (This)->lpVtbl -> GetTextFilterSize(This,pWidth,pHeight) ) #endif /* COBJMACROS */ #endif /* C style interface */ #endif /* __ID3D10Device_INTERFACE_DEFINED__ */ #ifndef __ID3D10Multithread_INTERFACE_DEFINED__ #define __ID3D10Multithread_INTERFACE_DEFINED__ /* interface ID3D10Multithread */ /* [unique][local][object][uuid] */ EXTERN_C const IID IID_ID3D10Multithread; #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("9B7E4E00-342C-4106-A19F-4F2704F689F0") ID3D10Multithread : public IUnknown { public: virtual void STDMETHODCALLTYPE Enter( void) = 0; virtual void STDMETHODCALLTYPE Leave( void) = 0; virtual BOOL STDMETHODCALLTYPE SetMultithreadProtected( /* [annotation] */ __in BOOL bMTProtect) = 0; virtual BOOL STDMETHODCALLTYPE GetMultithreadProtected( void) = 0; }; #else /* C style interface */ typedef struct ID3D10MultithreadVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ID3D10Multithread * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ __RPC__deref_out void **ppvObject); ULONG ( STDMETHODCALLTYPE *AddRef )( ID3D10Multithread * This); ULONG ( STDMETHODCALLTYPE *Release )( ID3D10Multithread * This); void ( STDMETHODCALLTYPE *Enter )( ID3D10Multithread * This); void ( STDMETHODCALLTYPE *Leave )( ID3D10Multithread * This); BOOL ( STDMETHODCALLTYPE *SetMultithreadProtected )( ID3D10Multithread * This, /* [annotation] */ __in BOOL bMTProtect); BOOL ( STDMETHODCALLTYPE *GetMultithreadProtected )( ID3D10Multithread * This); END_INTERFACE } ID3D10MultithreadVtbl; interface ID3D10Multithread { CONST_VTBL struct ID3D10MultithreadVtbl *lpVtbl; }; #ifdef COBJMACROS #define ID3D10Multithread_QueryInterface(This,riid,ppvObject) \ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) #define ID3D10Multithread_AddRef(This) \ ( (This)->lpVtbl -> AddRef(This) ) #define ID3D10Multithread_Release(This) \ ( (This)->lpVtbl -> Release(This) ) #define ID3D10Multithread_Enter(This) \ ( (This)->lpVtbl -> Enter(This) ) #define ID3D10Multithread_Leave(This) \ ( (This)->lpVtbl -> Leave(This) ) #define ID3D10Multithread_SetMultithreadProtected(This,bMTProtect) \ ( (This)->lpVtbl -> SetMultithreadProtected(This,bMTProtect) ) #define ID3D10Multithread_GetMultithreadProtected(This) \ ( (This)->lpVtbl -> GetMultithreadProtected(This) ) #endif /* COBJMACROS */ #endif /* C style interface */ #endif /* __ID3D10Multithread_INTERFACE_DEFINED__ */ /* interface __MIDL_itf_d3d10_0000_0024 */ /* [local] */ typedef enum D3D10_CREATE_DEVICE_FLAG { D3D10_CREATE_DEVICE_SINGLETHREADED = 0x1, D3D10_CREATE_DEVICE_DEBUG = 0x2, D3D10_CREATE_DEVICE_SWITCH_TO_REF = 0x4, D3D10_CREATE_DEVICE_PREVENT_INTERNAL_THREADING_OPTIMIZATIONS = 0x8, D3D10_CREATE_DEVICE_ALLOW_NULL_FROM_MAP = 0x10, D3D10_CREATE_DEVICE_BGRA_SUPPORT = 0x20, D3D10_CREATE_DEVICE_STRICT_VALIDATION = 0x200 } D3D10_CREATE_DEVICE_FLAG; #define D3D10_SDK_VERSION ( 29 ) #if !defined( D3D10_IGNORE_SDK_LAYERS ) #include "d3d10sdklayers.h" #endif #include "d3d10misc.h" #include "d3d10shader.h" #include "d3d10effect.h" DEFINE_GUID(IID_ID3D10DeviceChild,0x9B7E4C00,0x342C,0x4106,0xA1,0x9F,0x4F,0x27,0x04,0xF6,0x89,0xF0); DEFINE_GUID(IID_ID3D10DepthStencilState,0x2B4B1CC8,0xA4AD,0x41f8,0x83,0x22,0xCA,0x86,0xFC,0x3E,0xC6,0x75); DEFINE_GUID(IID_ID3D10BlendState,0xEDAD8D19,0x8A35,0x4d6d,0x85,0x66,0x2E,0xA2,0x76,0xCD,0xE1,0x61); DEFINE_GUID(IID_ID3D10RasterizerState,0xA2A07292,0x89AF,0x4345,0xBE,0x2E,0xC5,0x3D,0x9F,0xBB,0x6E,0x9F); DEFINE_GUID(IID_ID3D10Resource,0x9B7E4C01,0x342C,0x4106,0xA1,0x9F,0x4F,0x27,0x04,0xF6,0x89,0xF0); DEFINE_GUID(IID_ID3D10Buffer,0x9B7E4C02,0x342C,0x4106,0xA1,0x9F,0x4F,0x27,0x04,0xF6,0x89,0xF0); DEFINE_GUID(IID_ID3D10Texture1D,0x9B7E4C03,0x342C,0x4106,0xA1,0x9F,0x4F,0x27,0x04,0xF6,0x89,0xF0); DEFINE_GUID(IID_ID3D10Texture2D,0x9B7E4C04,0x342C,0x4106,0xA1,0x9F,0x4F,0x27,0x04,0xF6,0x89,0xF0); DEFINE_GUID(IID_ID3D10Texture3D,0x9B7E4C05,0x342C,0x4106,0xA1,0x9F,0x4F,0x27,0x04,0xF6,0x89,0xF0); DEFINE_GUID(IID_ID3D10View,0xC902B03F,0x60A7,0x49BA,0x99,0x36,0x2A,0x3A,0xB3,0x7A,0x7E,0x33); DEFINE_GUID(IID_ID3D10ShaderResourceView,0x9B7E4C07,0x342C,0x4106,0xA1,0x9F,0x4F,0x27,0x04,0xF6,0x89,0xF0); DEFINE_GUID(IID_ID3D10RenderTargetView,0x9B7E4C08,0x342C,0x4106,0xA1,0x9F,0x4F,0x27,0x04,0xF6,0x89,0xF0); DEFINE_GUID(IID_ID3D10DepthStencilView,0x9B7E4C09,0x342C,0x4106,0xA1,0x9F,0x4F,0x27,0x04,0xF6,0x89,0xF0); DEFINE_GUID(IID_ID3D10VertexShader,0x9B7E4C0A,0x342C,0x4106,0xA1,0x9F,0x4F,0x27,0x04,0xF6,0x89,0xF0); DEFINE_GUID(IID_ID3D10GeometryShader,0x6316BE88,0x54CD,0x4040,0xAB,0x44,0x20,0x46,0x1B,0xC8,0x1F,0x68); DEFINE_GUID(IID_ID3D10PixelShader,0x4968B601,0x9D00,0x4cde,0x83,0x46,0x8E,0x7F,0x67,0x58,0x19,0xB6); DEFINE_GUID(IID_ID3D10InputLayout,0x9B7E4C0B,0x342C,0x4106,0xA1,0x9F,0x4F,0x27,0x04,0xF6,0x89,0xF0); DEFINE_GUID(IID_ID3D10SamplerState,0x9B7E4C0C,0x342C,0x4106,0xA1,0x9F,0x4F,0x27,0x04,0xF6,0x89,0xF0); DEFINE_GUID(IID_ID3D10Asynchronous,0x9B7E4C0D,0x342C,0x4106,0xA1,0x9F,0x4F,0x27,0x04,0xF6,0x89,0xF0); DEFINE_GUID(IID_ID3D10Query,0x9B7E4C0E,0x342C,0x4106,0xA1,0x9F,0x4F,0x27,0x04,0xF6,0x89,0xF0); DEFINE_GUID(IID_ID3D10Predicate,0x9B7E4C10,0x342C,0x4106,0xA1,0x9F,0x4F,0x27,0x04,0xF6,0x89,0xF0); DEFINE_GUID(IID_ID3D10Counter,0x9B7E4C11,0x342C,0x4106,0xA1,0x9F,0x4F,0x27,0x04,0xF6,0x89,0xF0); DEFINE_GUID(IID_ID3D10Device,0x9B7E4C0F,0x342C,0x4106,0xA1,0x9F,0x4F,0x27,0x04,0xF6,0x89,0xF0); DEFINE_GUID(IID_ID3D10Multithread,0x9B7E4E00,0x342C,0x4106,0xA1,0x9F,0x4F,0x27,0x04,0xF6,0x89,0xF0); extern RPC_IF_HANDLE __MIDL_itf_d3d10_0000_0024_v0_0_c_ifspec; extern RPC_IF_HANDLE __MIDL_itf_d3d10_0000_0024_v0_0_s_ifspec; /* Additional Prototypes for ALL interfaces */ /* end of Additional Prototypes */ #ifdef __cplusplus } #endif #endif ================================================ FILE: Include/D3D10_1.h ================================================ /* this ALWAYS GENERATED file contains the definitions for the interfaces */ /* File created by MIDL compiler version 7.00.0555 */ /* @@MIDL_FILE_HEADING( ) */ #pragma warning( disable: 4049 ) /* more than 64k source lines */ /* verify that the version is high enough to compile this file*/ #ifndef __REQUIRED_RPCNDR_H_VERSION__ #define __REQUIRED_RPCNDR_H_VERSION__ 475 #endif /* verify that the version is high enough to compile this file*/ #ifndef __REQUIRED_RPCSAL_H_VERSION__ #define __REQUIRED_RPCSAL_H_VERSION__ 100 #endif #include "rpc.h" #include "rpcndr.h" #ifndef __RPCNDR_H_VERSION__ #error this stub requires an updated version of #endif // __RPCNDR_H_VERSION__ #ifndef COM_NO_WINDOWS_H #include "windows.h" #include "ole2.h" #endif /*COM_NO_WINDOWS_H*/ #ifndef __d3d10_1_h__ #define __d3d10_1_h__ #if defined(_MSC_VER) && (_MSC_VER >= 1020) #pragma once #endif /* Forward Declarations */ #ifndef __ID3D10BlendState1_FWD_DEFINED__ #define __ID3D10BlendState1_FWD_DEFINED__ typedef interface ID3D10BlendState1 ID3D10BlendState1; #endif /* __ID3D10BlendState1_FWD_DEFINED__ */ #ifndef __ID3D10ShaderResourceView1_FWD_DEFINED__ #define __ID3D10ShaderResourceView1_FWD_DEFINED__ typedef interface ID3D10ShaderResourceView1 ID3D10ShaderResourceView1; #endif /* __ID3D10ShaderResourceView1_FWD_DEFINED__ */ #ifndef __ID3D10Device1_FWD_DEFINED__ #define __ID3D10Device1_FWD_DEFINED__ typedef interface ID3D10Device1 ID3D10Device1; #endif /* __ID3D10Device1_FWD_DEFINED__ */ /* header files for imported files */ #include "oaidl.h" #include "ocidl.h" #ifdef __cplusplus extern "C"{ #endif /* interface __MIDL_itf_d3d10_1_0000_0000 */ /* [local] */ #if defined( __d3d10_h__ ) && !defined( D3D10_ARBITRARY_HEADER_ORDERING ) #error d3d10.h is included before d3d10_1.h, and it will confuse tools that honor SAL annotations. \ If possibly targeting d3d10.1, include d3d10_1.h instead of d3d10.h, or ensure d3d10_1.h is included before d3d10.h #endif #ifndef _D3D10_1_CONSTANTS #define _D3D10_1_CONSTANTS #define D3D10_1_DEFAULT_SAMPLE_MASK ( 0xffffffff ) #define D3D10_1_FLOAT16_FUSED_TOLERANCE_IN_ULP ( 0.6 ) #define D3D10_1_FLOAT32_TO_INTEGER_TOLERANCE_IN_ULP ( 0.6f ) #define D3D10_1_GS_INPUT_REGISTER_COUNT ( 32 ) #define D3D10_1_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT ( 32 ) #define D3D10_1_IA_VERTEX_INPUT_STRUCTURE_ELEMENTS_COMPONENTS ( 128 ) #define D3D10_1_IA_VERTEX_INPUT_STRUCTURE_ELEMENT_COUNT ( 32 ) #define D3D10_1_PS_OUTPUT_MASK_REGISTER_COMPONENTS ( 1 ) #define D3D10_1_PS_OUTPUT_MASK_REGISTER_COMPONENT_BIT_COUNT ( 32 ) #define D3D10_1_PS_OUTPUT_MASK_REGISTER_COUNT ( 1 ) #define D3D10_1_SHADER_MAJOR_VERSION ( 4 ) #define D3D10_1_SHADER_MINOR_VERSION ( 1 ) #define D3D10_1_SO_BUFFER_MAX_STRIDE_IN_BYTES ( 2048 ) #define D3D10_1_SO_BUFFER_MAX_WRITE_WINDOW_IN_BYTES ( 256 ) #define D3D10_1_SO_BUFFER_SLOT_COUNT ( 4 ) #define D3D10_1_SO_MULTIPLE_BUFFER_ELEMENTS_PER_BUFFER ( 1 ) #define D3D10_1_SO_SINGLE_BUFFER_COMPONENT_LIMIT ( 64 ) #define D3D10_1_STANDARD_VERTEX_ELEMENT_COUNT ( 32 ) #define D3D10_1_SUBPIXEL_FRACTIONAL_BIT_COUNT ( 8 ) #define D3D10_1_VS_INPUT_REGISTER_COUNT ( 32 ) #define D3D10_1_VS_OUTPUT_REGISTER_COUNT ( 32 ) #endif #include "d3d10.h" // typedef enum D3D10_FEATURE_LEVEL1 { D3D10_FEATURE_LEVEL_10_0 = 0xa000, D3D10_FEATURE_LEVEL_10_1 = 0xa100, D3D10_FEATURE_LEVEL_9_1 = 0x9100, D3D10_FEATURE_LEVEL_9_2 = 0x9200, D3D10_FEATURE_LEVEL_9_3 = 0x9300 } D3D10_FEATURE_LEVEL1; typedef struct D3D10_RENDER_TARGET_BLEND_DESC1 { BOOL BlendEnable; D3D10_BLEND SrcBlend; D3D10_BLEND DestBlend; D3D10_BLEND_OP BlendOp; D3D10_BLEND SrcBlendAlpha; D3D10_BLEND DestBlendAlpha; D3D10_BLEND_OP BlendOpAlpha; UINT8 RenderTargetWriteMask; } D3D10_RENDER_TARGET_BLEND_DESC1; typedef struct D3D10_BLEND_DESC1 { BOOL AlphaToCoverageEnable; BOOL IndependentBlendEnable; D3D10_RENDER_TARGET_BLEND_DESC1 RenderTarget[ 8 ]; } D3D10_BLEND_DESC1; extern RPC_IF_HANDLE __MIDL_itf_d3d10_1_0000_0000_v0_0_c_ifspec; extern RPC_IF_HANDLE __MIDL_itf_d3d10_1_0000_0000_v0_0_s_ifspec; #ifndef __ID3D10BlendState1_INTERFACE_DEFINED__ #define __ID3D10BlendState1_INTERFACE_DEFINED__ /* interface ID3D10BlendState1 */ /* [unique][local][object][uuid] */ EXTERN_C const IID IID_ID3D10BlendState1; #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("EDAD8D99-8A35-4d6d-8566-2EA276CDE161") ID3D10BlendState1 : public ID3D10BlendState { public: virtual void STDMETHODCALLTYPE GetDesc1( /* [annotation] */ __out D3D10_BLEND_DESC1 *pDesc) = 0; }; #else /* C style interface */ typedef struct ID3D10BlendState1Vtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ID3D10BlendState1 * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ __RPC__deref_out void **ppvObject); ULONG ( STDMETHODCALLTYPE *AddRef )( ID3D10BlendState1 * This); ULONG ( STDMETHODCALLTYPE *Release )( ID3D10BlendState1 * This); void ( STDMETHODCALLTYPE *GetDevice )( ID3D10BlendState1 * This, /* [annotation] */ __out ID3D10Device **ppDevice); HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( ID3D10BlendState1 * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __inout UINT *pDataSize, /* [annotation] */ __out_bcount_opt(*pDataSize) void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( ID3D10BlendState1 * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in UINT DataSize, /* [annotation] */ __in_bcount_opt(DataSize) const void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( ID3D10BlendState1 * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in_opt const IUnknown *pData); void ( STDMETHODCALLTYPE *GetDesc )( ID3D10BlendState1 * This, /* [annotation] */ __out D3D10_BLEND_DESC *pDesc); void ( STDMETHODCALLTYPE *GetDesc1 )( ID3D10BlendState1 * This, /* [annotation] */ __out D3D10_BLEND_DESC1 *pDesc); END_INTERFACE } ID3D10BlendState1Vtbl; interface ID3D10BlendState1 { CONST_VTBL struct ID3D10BlendState1Vtbl *lpVtbl; }; #ifdef COBJMACROS #define ID3D10BlendState1_QueryInterface(This,riid,ppvObject) \ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) #define ID3D10BlendState1_AddRef(This) \ ( (This)->lpVtbl -> AddRef(This) ) #define ID3D10BlendState1_Release(This) \ ( (This)->lpVtbl -> Release(This) ) #define ID3D10BlendState1_GetDevice(This,ppDevice) \ ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) #define ID3D10BlendState1_GetPrivateData(This,guid,pDataSize,pData) \ ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) #define ID3D10BlendState1_SetPrivateData(This,guid,DataSize,pData) \ ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) #define ID3D10BlendState1_SetPrivateDataInterface(This,guid,pData) \ ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) #define ID3D10BlendState1_GetDesc(This,pDesc) \ ( (This)->lpVtbl -> GetDesc(This,pDesc) ) #define ID3D10BlendState1_GetDesc1(This,pDesc) \ ( (This)->lpVtbl -> GetDesc1(This,pDesc) ) #endif /* COBJMACROS */ #endif /* C style interface */ #endif /* __ID3D10BlendState1_INTERFACE_DEFINED__ */ /* interface __MIDL_itf_d3d10_1_0000_0001 */ /* [local] */ typedef struct D3D10_TEXCUBE_ARRAY_SRV1 { UINT MostDetailedMip; UINT MipLevels; UINT First2DArrayFace; UINT NumCubes; } D3D10_TEXCUBE_ARRAY_SRV1; typedef D3D_SRV_DIMENSION D3D10_SRV_DIMENSION1; typedef struct D3D10_SHADER_RESOURCE_VIEW_DESC1 { DXGI_FORMAT Format; D3D10_SRV_DIMENSION1 ViewDimension; union { D3D10_BUFFER_SRV Buffer; D3D10_TEX1D_SRV Texture1D; D3D10_TEX1D_ARRAY_SRV Texture1DArray; D3D10_TEX2D_SRV Texture2D; D3D10_TEX2D_ARRAY_SRV Texture2DArray; D3D10_TEX2DMS_SRV Texture2DMS; D3D10_TEX2DMS_ARRAY_SRV Texture2DMSArray; D3D10_TEX3D_SRV Texture3D; D3D10_TEXCUBE_SRV TextureCube; D3D10_TEXCUBE_ARRAY_SRV1 TextureCubeArray; } ; } D3D10_SHADER_RESOURCE_VIEW_DESC1; extern RPC_IF_HANDLE __MIDL_itf_d3d10_1_0000_0001_v0_0_c_ifspec; extern RPC_IF_HANDLE __MIDL_itf_d3d10_1_0000_0001_v0_0_s_ifspec; #ifndef __ID3D10ShaderResourceView1_INTERFACE_DEFINED__ #define __ID3D10ShaderResourceView1_INTERFACE_DEFINED__ /* interface ID3D10ShaderResourceView1 */ /* [unique][local][object][uuid] */ EXTERN_C const IID IID_ID3D10ShaderResourceView1; #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("9B7E4C87-342C-4106-A19F-4F2704F689F0") ID3D10ShaderResourceView1 : public ID3D10ShaderResourceView { public: virtual void STDMETHODCALLTYPE GetDesc1( /* [annotation] */ __out D3D10_SHADER_RESOURCE_VIEW_DESC1 *pDesc) = 0; }; #else /* C style interface */ typedef struct ID3D10ShaderResourceView1Vtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ID3D10ShaderResourceView1 * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ __RPC__deref_out void **ppvObject); ULONG ( STDMETHODCALLTYPE *AddRef )( ID3D10ShaderResourceView1 * This); ULONG ( STDMETHODCALLTYPE *Release )( ID3D10ShaderResourceView1 * This); void ( STDMETHODCALLTYPE *GetDevice )( ID3D10ShaderResourceView1 * This, /* [annotation] */ __out ID3D10Device **ppDevice); HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( ID3D10ShaderResourceView1 * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __inout UINT *pDataSize, /* [annotation] */ __out_bcount_opt(*pDataSize) void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( ID3D10ShaderResourceView1 * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in UINT DataSize, /* [annotation] */ __in_bcount_opt(DataSize) const void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( ID3D10ShaderResourceView1 * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in_opt const IUnknown *pData); void ( STDMETHODCALLTYPE *GetResource )( ID3D10ShaderResourceView1 * This, /* [annotation] */ __out ID3D10Resource **ppResource); void ( STDMETHODCALLTYPE *GetDesc )( ID3D10ShaderResourceView1 * This, /* [annotation] */ __out D3D10_SHADER_RESOURCE_VIEW_DESC *pDesc); void ( STDMETHODCALLTYPE *GetDesc1 )( ID3D10ShaderResourceView1 * This, /* [annotation] */ __out D3D10_SHADER_RESOURCE_VIEW_DESC1 *pDesc); END_INTERFACE } ID3D10ShaderResourceView1Vtbl; interface ID3D10ShaderResourceView1 { CONST_VTBL struct ID3D10ShaderResourceView1Vtbl *lpVtbl; }; #ifdef COBJMACROS #define ID3D10ShaderResourceView1_QueryInterface(This,riid,ppvObject) \ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) #define ID3D10ShaderResourceView1_AddRef(This) \ ( (This)->lpVtbl -> AddRef(This) ) #define ID3D10ShaderResourceView1_Release(This) \ ( (This)->lpVtbl -> Release(This) ) #define ID3D10ShaderResourceView1_GetDevice(This,ppDevice) \ ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) #define ID3D10ShaderResourceView1_GetPrivateData(This,guid,pDataSize,pData) \ ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) #define ID3D10ShaderResourceView1_SetPrivateData(This,guid,DataSize,pData) \ ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) #define ID3D10ShaderResourceView1_SetPrivateDataInterface(This,guid,pData) \ ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) #define ID3D10ShaderResourceView1_GetResource(This,ppResource) \ ( (This)->lpVtbl -> GetResource(This,ppResource) ) #define ID3D10ShaderResourceView1_GetDesc(This,pDesc) \ ( (This)->lpVtbl -> GetDesc(This,pDesc) ) #define ID3D10ShaderResourceView1_GetDesc1(This,pDesc) \ ( (This)->lpVtbl -> GetDesc1(This,pDesc) ) #endif /* COBJMACROS */ #endif /* C style interface */ #endif /* __ID3D10ShaderResourceView1_INTERFACE_DEFINED__ */ /* interface __MIDL_itf_d3d10_1_0000_0002 */ /* [local] */ typedef enum D3D10_STANDARD_MULTISAMPLE_QUALITY_LEVELS { D3D10_STANDARD_MULTISAMPLE_PATTERN = 0xffffffff, D3D10_CENTER_MULTISAMPLE_PATTERN = 0xfffffffe } D3D10_STANDARD_MULTISAMPLE_QUALITY_LEVELS; extern RPC_IF_HANDLE __MIDL_itf_d3d10_1_0000_0002_v0_0_c_ifspec; extern RPC_IF_HANDLE __MIDL_itf_d3d10_1_0000_0002_v0_0_s_ifspec; #ifndef __ID3D10Device1_INTERFACE_DEFINED__ #define __ID3D10Device1_INTERFACE_DEFINED__ /* interface ID3D10Device1 */ /* [unique][local][object][uuid] */ EXTERN_C const IID IID_ID3D10Device1; #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("9B7E4C8F-342C-4106-A19F-4F2704F689F0") ID3D10Device1 : public ID3D10Device { public: virtual HRESULT STDMETHODCALLTYPE CreateShaderResourceView1( /* [annotation] */ __in ID3D10Resource *pResource, /* [annotation] */ __in_opt const D3D10_SHADER_RESOURCE_VIEW_DESC1 *pDesc, /* [annotation] */ __out_opt ID3D10ShaderResourceView1 **ppSRView) = 0; virtual HRESULT STDMETHODCALLTYPE CreateBlendState1( /* [annotation] */ __in const D3D10_BLEND_DESC1 *pBlendStateDesc, /* [annotation] */ __out_opt ID3D10BlendState1 **ppBlendState) = 0; virtual D3D10_FEATURE_LEVEL1 STDMETHODCALLTYPE GetFeatureLevel( void) = 0; }; #else /* C style interface */ typedef struct ID3D10Device1Vtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ID3D10Device1 * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ __RPC__deref_out void **ppvObject); ULONG ( STDMETHODCALLTYPE *AddRef )( ID3D10Device1 * This); ULONG ( STDMETHODCALLTYPE *Release )( ID3D10Device1 * This); void ( STDMETHODCALLTYPE *VSSetConstantBuffers )( ID3D10Device1 * This, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot ) UINT NumBuffers, /* [annotation] */ __in_ecount(NumBuffers) ID3D10Buffer *const *ppConstantBuffers); void ( STDMETHODCALLTYPE *PSSetShaderResources )( ID3D10Device1 * This, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot ) UINT NumViews, /* [annotation] */ __in_ecount(NumViews) ID3D10ShaderResourceView *const *ppShaderResourceViews); void ( STDMETHODCALLTYPE *PSSetShader )( ID3D10Device1 * This, /* [annotation] */ __in_opt ID3D10PixelShader *pPixelShader); void ( STDMETHODCALLTYPE *PSSetSamplers )( ID3D10Device1 * This, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot ) UINT NumSamplers, /* [annotation] */ __in_ecount(NumSamplers) ID3D10SamplerState *const *ppSamplers); void ( STDMETHODCALLTYPE *VSSetShader )( ID3D10Device1 * This, /* [annotation] */ __in_opt ID3D10VertexShader *pVertexShader); void ( STDMETHODCALLTYPE *DrawIndexed )( ID3D10Device1 * This, /* [annotation] */ __in UINT IndexCount, /* [annotation] */ __in UINT StartIndexLocation, /* [annotation] */ __in INT BaseVertexLocation); void ( STDMETHODCALLTYPE *Draw )( ID3D10Device1 * This, /* [annotation] */ __in UINT VertexCount, /* [annotation] */ __in UINT StartVertexLocation); void ( STDMETHODCALLTYPE *PSSetConstantBuffers )( ID3D10Device1 * This, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot ) UINT NumBuffers, /* [annotation] */ __in_ecount(NumBuffers) ID3D10Buffer *const *ppConstantBuffers); void ( STDMETHODCALLTYPE *IASetInputLayout )( ID3D10Device1 * This, /* [annotation] */ __in_opt ID3D10InputLayout *pInputLayout); void ( STDMETHODCALLTYPE *IASetVertexBuffers )( ID3D10Device1 * This, /* [annotation] */ __in_range( 0, D3D10_1_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D10_1_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT - StartSlot ) UINT NumBuffers, /* [annotation] */ __in_ecount(NumBuffers) ID3D10Buffer *const *ppVertexBuffers, /* [annotation] */ __in_ecount(NumBuffers) const UINT *pStrides, /* [annotation] */ __in_ecount(NumBuffers) const UINT *pOffsets); void ( STDMETHODCALLTYPE *IASetIndexBuffer )( ID3D10Device1 * This, /* [annotation] */ __in_opt ID3D10Buffer *pIndexBuffer, /* [annotation] */ __in DXGI_FORMAT Format, /* [annotation] */ __in UINT Offset); void ( STDMETHODCALLTYPE *DrawIndexedInstanced )( ID3D10Device1 * This, /* [annotation] */ __in UINT IndexCountPerInstance, /* [annotation] */ __in UINT InstanceCount, /* [annotation] */ __in UINT StartIndexLocation, /* [annotation] */ __in INT BaseVertexLocation, /* [annotation] */ __in UINT StartInstanceLocation); void ( STDMETHODCALLTYPE *DrawInstanced )( ID3D10Device1 * This, /* [annotation] */ __in UINT VertexCountPerInstance, /* [annotation] */ __in UINT InstanceCount, /* [annotation] */ __in UINT StartVertexLocation, /* [annotation] */ __in UINT StartInstanceLocation); void ( STDMETHODCALLTYPE *GSSetConstantBuffers )( ID3D10Device1 * This, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot ) UINT NumBuffers, /* [annotation] */ __in_ecount(NumBuffers) ID3D10Buffer *const *ppConstantBuffers); void ( STDMETHODCALLTYPE *GSSetShader )( ID3D10Device1 * This, /* [annotation] */ __in_opt ID3D10GeometryShader *pShader); void ( STDMETHODCALLTYPE *IASetPrimitiveTopology )( ID3D10Device1 * This, /* [annotation] */ __in D3D10_PRIMITIVE_TOPOLOGY Topology); void ( STDMETHODCALLTYPE *VSSetShaderResources )( ID3D10Device1 * This, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot ) UINT NumViews, /* [annotation] */ __in_ecount(NumViews) ID3D10ShaderResourceView *const *ppShaderResourceViews); void ( STDMETHODCALLTYPE *VSSetSamplers )( ID3D10Device1 * This, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot ) UINT NumSamplers, /* [annotation] */ __in_ecount(NumSamplers) ID3D10SamplerState *const *ppSamplers); void ( STDMETHODCALLTYPE *SetPredication )( ID3D10Device1 * This, /* [annotation] */ __in_opt ID3D10Predicate *pPredicate, /* [annotation] */ __in BOOL PredicateValue); void ( STDMETHODCALLTYPE *GSSetShaderResources )( ID3D10Device1 * This, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot ) UINT NumViews, /* [annotation] */ __in_ecount(NumViews) ID3D10ShaderResourceView *const *ppShaderResourceViews); void ( STDMETHODCALLTYPE *GSSetSamplers )( ID3D10Device1 * This, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot ) UINT NumSamplers, /* [annotation] */ __in_ecount(NumSamplers) ID3D10SamplerState *const *ppSamplers); void ( STDMETHODCALLTYPE *OMSetRenderTargets )( ID3D10Device1 * This, /* [annotation] */ __in_range( 0, D3D10_SIMULTANEOUS_RENDER_TARGET_COUNT ) UINT NumViews, /* [annotation] */ __in_ecount_opt(NumViews) ID3D10RenderTargetView *const *ppRenderTargetViews, /* [annotation] */ __in_opt ID3D10DepthStencilView *pDepthStencilView); void ( STDMETHODCALLTYPE *OMSetBlendState )( ID3D10Device1 * This, /* [annotation] */ __in_opt ID3D10BlendState *pBlendState, /* [annotation] */ __in const FLOAT BlendFactor[ 4 ], /* [annotation] */ __in UINT SampleMask); void ( STDMETHODCALLTYPE *OMSetDepthStencilState )( ID3D10Device1 * This, /* [annotation] */ __in_opt ID3D10DepthStencilState *pDepthStencilState, /* [annotation] */ __in UINT StencilRef); void ( STDMETHODCALLTYPE *SOSetTargets )( ID3D10Device1 * This, /* [annotation] */ __in_range( 0, D3D10_SO_BUFFER_SLOT_COUNT) UINT NumBuffers, /* [annotation] */ __in_ecount_opt(NumBuffers) ID3D10Buffer *const *ppSOTargets, /* [annotation] */ __in_ecount_opt(NumBuffers) const UINT *pOffsets); void ( STDMETHODCALLTYPE *DrawAuto )( ID3D10Device1 * This); void ( STDMETHODCALLTYPE *RSSetState )( ID3D10Device1 * This, /* [annotation] */ __in_opt ID3D10RasterizerState *pRasterizerState); void ( STDMETHODCALLTYPE *RSSetViewports )( ID3D10Device1 * This, /* [annotation] */ __in_range(0, D3D10_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE) UINT NumViewports, /* [annotation] */ __in_ecount_opt(NumViewports) const D3D10_VIEWPORT *pViewports); void ( STDMETHODCALLTYPE *RSSetScissorRects )( ID3D10Device1 * This, /* [annotation] */ __in_range(0, D3D10_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE) UINT NumRects, /* [annotation] */ __in_ecount_opt(NumRects) const D3D10_RECT *pRects); void ( STDMETHODCALLTYPE *CopySubresourceRegion )( ID3D10Device1 * This, /* [annotation] */ __in ID3D10Resource *pDstResource, /* [annotation] */ __in UINT DstSubresource, /* [annotation] */ __in UINT DstX, /* [annotation] */ __in UINT DstY, /* [annotation] */ __in UINT DstZ, /* [annotation] */ __in ID3D10Resource *pSrcResource, /* [annotation] */ __in UINT SrcSubresource, /* [annotation] */ __in_opt const D3D10_BOX *pSrcBox); void ( STDMETHODCALLTYPE *CopyResource )( ID3D10Device1 * This, /* [annotation] */ __in ID3D10Resource *pDstResource, /* [annotation] */ __in ID3D10Resource *pSrcResource); void ( STDMETHODCALLTYPE *UpdateSubresource )( ID3D10Device1 * This, /* [annotation] */ __in ID3D10Resource *pDstResource, /* [annotation] */ __in UINT DstSubresource, /* [annotation] */ __in_opt const D3D10_BOX *pDstBox, /* [annotation] */ __in const void *pSrcData, /* [annotation] */ __in UINT SrcRowPitch, /* [annotation] */ __in UINT SrcDepthPitch); void ( STDMETHODCALLTYPE *ClearRenderTargetView )( ID3D10Device1 * This, /* [annotation] */ __in ID3D10RenderTargetView *pRenderTargetView, /* [annotation] */ __in const FLOAT ColorRGBA[ 4 ]); void ( STDMETHODCALLTYPE *ClearDepthStencilView )( ID3D10Device1 * This, /* [annotation] */ __in ID3D10DepthStencilView *pDepthStencilView, /* [annotation] */ __in UINT ClearFlags, /* [annotation] */ __in FLOAT Depth, /* [annotation] */ __in UINT8 Stencil); void ( STDMETHODCALLTYPE *GenerateMips )( ID3D10Device1 * This, /* [annotation] */ __in ID3D10ShaderResourceView *pShaderResourceView); void ( STDMETHODCALLTYPE *ResolveSubresource )( ID3D10Device1 * This, /* [annotation] */ __in ID3D10Resource *pDstResource, /* [annotation] */ __in UINT DstSubresource, /* [annotation] */ __in ID3D10Resource *pSrcResource, /* [annotation] */ __in UINT SrcSubresource, /* [annotation] */ __in DXGI_FORMAT Format); void ( STDMETHODCALLTYPE *VSGetConstantBuffers )( ID3D10Device1 * This, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot ) UINT NumBuffers, /* [annotation] */ __out_ecount(NumBuffers) ID3D10Buffer **ppConstantBuffers); void ( STDMETHODCALLTYPE *PSGetShaderResources )( ID3D10Device1 * This, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot ) UINT NumViews, /* [annotation] */ __out_ecount(NumViews) ID3D10ShaderResourceView **ppShaderResourceViews); void ( STDMETHODCALLTYPE *PSGetShader )( ID3D10Device1 * This, /* [annotation] */ __out ID3D10PixelShader **ppPixelShader); void ( STDMETHODCALLTYPE *PSGetSamplers )( ID3D10Device1 * This, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot ) UINT NumSamplers, /* [annotation] */ __out_ecount(NumSamplers) ID3D10SamplerState **ppSamplers); void ( STDMETHODCALLTYPE *VSGetShader )( ID3D10Device1 * This, /* [annotation] */ __out ID3D10VertexShader **ppVertexShader); void ( STDMETHODCALLTYPE *PSGetConstantBuffers )( ID3D10Device1 * This, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot ) UINT NumBuffers, /* [annotation] */ __out_ecount(NumBuffers) ID3D10Buffer **ppConstantBuffers); void ( STDMETHODCALLTYPE *IAGetInputLayout )( ID3D10Device1 * This, /* [annotation] */ __out ID3D10InputLayout **ppInputLayout); void ( STDMETHODCALLTYPE *IAGetVertexBuffers )( ID3D10Device1 * This, /* [annotation] */ __in_range( 0, D3D10_1_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D10_1_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT - StartSlot ) UINT NumBuffers, /* [annotation] */ __out_ecount_opt(NumBuffers) ID3D10Buffer **ppVertexBuffers, /* [annotation] */ __out_ecount_opt(NumBuffers) UINT *pStrides, /* [annotation] */ __out_ecount_opt(NumBuffers) UINT *pOffsets); void ( STDMETHODCALLTYPE *IAGetIndexBuffer )( ID3D10Device1 * This, /* [annotation] */ __out_opt ID3D10Buffer **pIndexBuffer, /* [annotation] */ __out_opt DXGI_FORMAT *Format, /* [annotation] */ __out_opt UINT *Offset); void ( STDMETHODCALLTYPE *GSGetConstantBuffers )( ID3D10Device1 * This, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot ) UINT NumBuffers, /* [annotation] */ __out_ecount(NumBuffers) ID3D10Buffer **ppConstantBuffers); void ( STDMETHODCALLTYPE *GSGetShader )( ID3D10Device1 * This, /* [annotation] */ __out ID3D10GeometryShader **ppGeometryShader); void ( STDMETHODCALLTYPE *IAGetPrimitiveTopology )( ID3D10Device1 * This, /* [annotation] */ __out D3D10_PRIMITIVE_TOPOLOGY *pTopology); void ( STDMETHODCALLTYPE *VSGetShaderResources )( ID3D10Device1 * This, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot ) UINT NumViews, /* [annotation] */ __out_ecount(NumViews) ID3D10ShaderResourceView **ppShaderResourceViews); void ( STDMETHODCALLTYPE *VSGetSamplers )( ID3D10Device1 * This, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot ) UINT NumSamplers, /* [annotation] */ __out_ecount(NumSamplers) ID3D10SamplerState **ppSamplers); void ( STDMETHODCALLTYPE *GetPredication )( ID3D10Device1 * This, /* [annotation] */ __out_opt ID3D10Predicate **ppPredicate, /* [annotation] */ __out_opt BOOL *pPredicateValue); void ( STDMETHODCALLTYPE *GSGetShaderResources )( ID3D10Device1 * This, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot ) UINT NumViews, /* [annotation] */ __out_ecount(NumViews) ID3D10ShaderResourceView **ppShaderResourceViews); void ( STDMETHODCALLTYPE *GSGetSamplers )( ID3D10Device1 * This, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot ) UINT NumSamplers, /* [annotation] */ __out_ecount(NumSamplers) ID3D10SamplerState **ppSamplers); void ( STDMETHODCALLTYPE *OMGetRenderTargets )( ID3D10Device1 * This, /* [annotation] */ __in_range( 0, D3D10_SIMULTANEOUS_RENDER_TARGET_COUNT ) UINT NumViews, /* [annotation] */ __out_ecount_opt(NumViews) ID3D10RenderTargetView **ppRenderTargetViews, /* [annotation] */ __out_opt ID3D10DepthStencilView **ppDepthStencilView); void ( STDMETHODCALLTYPE *OMGetBlendState )( ID3D10Device1 * This, /* [annotation] */ __out_opt ID3D10BlendState **ppBlendState, /* [annotation] */ __out_opt FLOAT BlendFactor[ 4 ], /* [annotation] */ __out_opt UINT *pSampleMask); void ( STDMETHODCALLTYPE *OMGetDepthStencilState )( ID3D10Device1 * This, /* [annotation] */ __out_opt ID3D10DepthStencilState **ppDepthStencilState, /* [annotation] */ __out_opt UINT *pStencilRef); void ( STDMETHODCALLTYPE *SOGetTargets )( ID3D10Device1 * This, /* [annotation] */ __in_range( 0, D3D10_SO_BUFFER_SLOT_COUNT ) UINT NumBuffers, /* [annotation] */ __out_ecount_opt(NumBuffers) ID3D10Buffer **ppSOTargets, /* [annotation] */ __out_ecount_opt(NumBuffers) UINT *pOffsets); void ( STDMETHODCALLTYPE *RSGetState )( ID3D10Device1 * This, /* [annotation] */ __out ID3D10RasterizerState **ppRasterizerState); void ( STDMETHODCALLTYPE *RSGetViewports )( ID3D10Device1 * This, /* [annotation] */ __inout /*_range(0, D3D10_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE )*/ UINT *NumViewports, /* [annotation] */ __out_ecount_opt(*NumViewports) D3D10_VIEWPORT *pViewports); void ( STDMETHODCALLTYPE *RSGetScissorRects )( ID3D10Device1 * This, /* [annotation] */ __inout /*_range(0, D3D10_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE )*/ UINT *NumRects, /* [annotation] */ __out_ecount_opt(*NumRects) D3D10_RECT *pRects); HRESULT ( STDMETHODCALLTYPE *GetDeviceRemovedReason )( ID3D10Device1 * This); HRESULT ( STDMETHODCALLTYPE *SetExceptionMode )( ID3D10Device1 * This, UINT RaiseFlags); UINT ( STDMETHODCALLTYPE *GetExceptionMode )( ID3D10Device1 * This); HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( ID3D10Device1 * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __inout UINT *pDataSize, /* [annotation] */ __out_bcount_opt(*pDataSize) void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( ID3D10Device1 * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in UINT DataSize, /* [annotation] */ __in_bcount_opt(DataSize) const void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( ID3D10Device1 * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in_opt const IUnknown *pData); void ( STDMETHODCALLTYPE *ClearState )( ID3D10Device1 * This); void ( STDMETHODCALLTYPE *Flush )( ID3D10Device1 * This); HRESULT ( STDMETHODCALLTYPE *CreateBuffer )( ID3D10Device1 * This, /* [annotation] */ __in const D3D10_BUFFER_DESC *pDesc, /* [annotation] */ __in_opt const D3D10_SUBRESOURCE_DATA *pInitialData, /* [annotation] */ __out_opt ID3D10Buffer **ppBuffer); HRESULT ( STDMETHODCALLTYPE *CreateTexture1D )( ID3D10Device1 * This, /* [annotation] */ __in const D3D10_TEXTURE1D_DESC *pDesc, /* [annotation] */ __in_xcount_opt(pDesc->MipLevels * pDesc->ArraySize) const D3D10_SUBRESOURCE_DATA *pInitialData, /* [annotation] */ __out ID3D10Texture1D **ppTexture1D); HRESULT ( STDMETHODCALLTYPE *CreateTexture2D )( ID3D10Device1 * This, /* [annotation] */ __in const D3D10_TEXTURE2D_DESC *pDesc, /* [annotation] */ __in_xcount_opt(pDesc->MipLevels * pDesc->ArraySize) const D3D10_SUBRESOURCE_DATA *pInitialData, /* [annotation] */ __out ID3D10Texture2D **ppTexture2D); HRESULT ( STDMETHODCALLTYPE *CreateTexture3D )( ID3D10Device1 * This, /* [annotation] */ __in const D3D10_TEXTURE3D_DESC *pDesc, /* [annotation] */ __in_xcount_opt(pDesc->MipLevels) const D3D10_SUBRESOURCE_DATA *pInitialData, /* [annotation] */ __out ID3D10Texture3D **ppTexture3D); HRESULT ( STDMETHODCALLTYPE *CreateShaderResourceView )( ID3D10Device1 * This, /* [annotation] */ __in ID3D10Resource *pResource, /* [annotation] */ __in_opt const D3D10_SHADER_RESOURCE_VIEW_DESC *pDesc, /* [annotation] */ __out_opt ID3D10ShaderResourceView **ppSRView); HRESULT ( STDMETHODCALLTYPE *CreateRenderTargetView )( ID3D10Device1 * This, /* [annotation] */ __in ID3D10Resource *pResource, /* [annotation] */ __in_opt const D3D10_RENDER_TARGET_VIEW_DESC *pDesc, /* [annotation] */ __out_opt ID3D10RenderTargetView **ppRTView); HRESULT ( STDMETHODCALLTYPE *CreateDepthStencilView )( ID3D10Device1 * This, /* [annotation] */ __in ID3D10Resource *pResource, /* [annotation] */ __in_opt const D3D10_DEPTH_STENCIL_VIEW_DESC *pDesc, /* [annotation] */ __out_opt ID3D10DepthStencilView **ppDepthStencilView); HRESULT ( STDMETHODCALLTYPE *CreateInputLayout )( ID3D10Device1 * This, /* [annotation] */ __in_ecount(NumElements) const D3D10_INPUT_ELEMENT_DESC *pInputElementDescs, /* [annotation] */ __in_range( 0, D3D10_1_IA_VERTEX_INPUT_STRUCTURE_ELEMENT_COUNT ) UINT NumElements, /* [annotation] */ __in const void *pShaderBytecodeWithInputSignature, /* [annotation] */ __in SIZE_T BytecodeLength, /* [annotation] */ __out_opt ID3D10InputLayout **ppInputLayout); HRESULT ( STDMETHODCALLTYPE *CreateVertexShader )( ID3D10Device1 * This, /* [annotation] */ __in const void *pShaderBytecode, /* [annotation] */ __in SIZE_T BytecodeLength, /* [annotation] */ __out_opt ID3D10VertexShader **ppVertexShader); HRESULT ( STDMETHODCALLTYPE *CreateGeometryShader )( ID3D10Device1 * This, /* [annotation] */ __in const void *pShaderBytecode, /* [annotation] */ __in SIZE_T BytecodeLength, /* [annotation] */ __out_opt ID3D10GeometryShader **ppGeometryShader); HRESULT ( STDMETHODCALLTYPE *CreateGeometryShaderWithStreamOutput )( ID3D10Device1 * This, /* [annotation] */ __in const void *pShaderBytecode, /* [annotation] */ __in SIZE_T BytecodeLength, /* [annotation] */ __in_ecount_opt(NumEntries) const D3D10_SO_DECLARATION_ENTRY *pSODeclaration, /* [annotation] */ __in_range( 0, D3D10_SO_SINGLE_BUFFER_COMPONENT_LIMIT ) UINT NumEntries, /* [annotation] */ __in UINT OutputStreamStride, /* [annotation] */ __out_opt ID3D10GeometryShader **ppGeometryShader); HRESULT ( STDMETHODCALLTYPE *CreatePixelShader )( ID3D10Device1 * This, /* [annotation] */ __in const void *pShaderBytecode, /* [annotation] */ __in SIZE_T BytecodeLength, /* [annotation] */ __out_opt ID3D10PixelShader **ppPixelShader); HRESULT ( STDMETHODCALLTYPE *CreateBlendState )( ID3D10Device1 * This, /* [annotation] */ __in const D3D10_BLEND_DESC *pBlendStateDesc, /* [annotation] */ __out_opt ID3D10BlendState **ppBlendState); HRESULT ( STDMETHODCALLTYPE *CreateDepthStencilState )( ID3D10Device1 * This, /* [annotation] */ __in const D3D10_DEPTH_STENCIL_DESC *pDepthStencilDesc, /* [annotation] */ __out_opt ID3D10DepthStencilState **ppDepthStencilState); HRESULT ( STDMETHODCALLTYPE *CreateRasterizerState )( ID3D10Device1 * This, /* [annotation] */ __in const D3D10_RASTERIZER_DESC *pRasterizerDesc, /* [annotation] */ __out_opt ID3D10RasterizerState **ppRasterizerState); HRESULT ( STDMETHODCALLTYPE *CreateSamplerState )( ID3D10Device1 * This, /* [annotation] */ __in const D3D10_SAMPLER_DESC *pSamplerDesc, /* [annotation] */ __out_opt ID3D10SamplerState **ppSamplerState); HRESULT ( STDMETHODCALLTYPE *CreateQuery )( ID3D10Device1 * This, /* [annotation] */ __in const D3D10_QUERY_DESC *pQueryDesc, /* [annotation] */ __out_opt ID3D10Query **ppQuery); HRESULT ( STDMETHODCALLTYPE *CreatePredicate )( ID3D10Device1 * This, /* [annotation] */ __in const D3D10_QUERY_DESC *pPredicateDesc, /* [annotation] */ __out_opt ID3D10Predicate **ppPredicate); HRESULT ( STDMETHODCALLTYPE *CreateCounter )( ID3D10Device1 * This, /* [annotation] */ __in const D3D10_COUNTER_DESC *pCounterDesc, /* [annotation] */ __out_opt ID3D10Counter **ppCounter); HRESULT ( STDMETHODCALLTYPE *CheckFormatSupport )( ID3D10Device1 * This, /* [annotation] */ __in DXGI_FORMAT Format, /* [annotation] */ __out UINT *pFormatSupport); HRESULT ( STDMETHODCALLTYPE *CheckMultisampleQualityLevels )( ID3D10Device1 * This, /* [annotation] */ __in DXGI_FORMAT Format, /* [annotation] */ __in UINT SampleCount, /* [annotation] */ __out UINT *pNumQualityLevels); void ( STDMETHODCALLTYPE *CheckCounterInfo )( ID3D10Device1 * This, /* [annotation] */ __out D3D10_COUNTER_INFO *pCounterInfo); HRESULT ( STDMETHODCALLTYPE *CheckCounter )( ID3D10Device1 * This, /* [annotation] */ __in const D3D10_COUNTER_DESC *pDesc, /* [annotation] */ __out D3D10_COUNTER_TYPE *pType, /* [annotation] */ __out UINT *pActiveCounters, /* [annotation] */ __out_ecount_opt(*pNameLength) LPSTR szName, /* [annotation] */ __inout_opt UINT *pNameLength, /* [annotation] */ __out_ecount_opt(*pUnitsLength) LPSTR szUnits, /* [annotation] */ __inout_opt UINT *pUnitsLength, /* [annotation] */ __out_ecount_opt(*pDescriptionLength) LPSTR szDescription, /* [annotation] */ __inout_opt UINT *pDescriptionLength); UINT ( STDMETHODCALLTYPE *GetCreationFlags )( ID3D10Device1 * This); HRESULT ( STDMETHODCALLTYPE *OpenSharedResource )( ID3D10Device1 * This, /* [annotation] */ __in HANDLE hResource, /* [annotation] */ __in REFIID ReturnedInterface, /* [annotation] */ __out_opt void **ppResource); void ( STDMETHODCALLTYPE *SetTextFilterSize )( ID3D10Device1 * This, /* [annotation] */ __in UINT Width, /* [annotation] */ __in UINT Height); void ( STDMETHODCALLTYPE *GetTextFilterSize )( ID3D10Device1 * This, /* [annotation] */ __out_opt UINT *pWidth, /* [annotation] */ __out_opt UINT *pHeight); HRESULT ( STDMETHODCALLTYPE *CreateShaderResourceView1 )( ID3D10Device1 * This, /* [annotation] */ __in ID3D10Resource *pResource, /* [annotation] */ __in_opt const D3D10_SHADER_RESOURCE_VIEW_DESC1 *pDesc, /* [annotation] */ __out_opt ID3D10ShaderResourceView1 **ppSRView); HRESULT ( STDMETHODCALLTYPE *CreateBlendState1 )( ID3D10Device1 * This, /* [annotation] */ __in const D3D10_BLEND_DESC1 *pBlendStateDesc, /* [annotation] */ __out_opt ID3D10BlendState1 **ppBlendState); D3D10_FEATURE_LEVEL1 ( STDMETHODCALLTYPE *GetFeatureLevel )( ID3D10Device1 * This); END_INTERFACE } ID3D10Device1Vtbl; interface ID3D10Device1 { CONST_VTBL struct ID3D10Device1Vtbl *lpVtbl; }; #ifdef COBJMACROS #define ID3D10Device1_QueryInterface(This,riid,ppvObject) \ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) #define ID3D10Device1_AddRef(This) \ ( (This)->lpVtbl -> AddRef(This) ) #define ID3D10Device1_Release(This) \ ( (This)->lpVtbl -> Release(This) ) #define ID3D10Device1_VSSetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers) \ ( (This)->lpVtbl -> VSSetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers) ) #define ID3D10Device1_PSSetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews) \ ( (This)->lpVtbl -> PSSetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews) ) #define ID3D10Device1_PSSetShader(This,pPixelShader) \ ( (This)->lpVtbl -> PSSetShader(This,pPixelShader) ) #define ID3D10Device1_PSSetSamplers(This,StartSlot,NumSamplers,ppSamplers) \ ( (This)->lpVtbl -> PSSetSamplers(This,StartSlot,NumSamplers,ppSamplers) ) #define ID3D10Device1_VSSetShader(This,pVertexShader) \ ( (This)->lpVtbl -> VSSetShader(This,pVertexShader) ) #define ID3D10Device1_DrawIndexed(This,IndexCount,StartIndexLocation,BaseVertexLocation) \ ( (This)->lpVtbl -> DrawIndexed(This,IndexCount,StartIndexLocation,BaseVertexLocation) ) #define ID3D10Device1_Draw(This,VertexCount,StartVertexLocation) \ ( (This)->lpVtbl -> Draw(This,VertexCount,StartVertexLocation) ) #define ID3D10Device1_PSSetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers) \ ( (This)->lpVtbl -> PSSetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers) ) #define ID3D10Device1_IASetInputLayout(This,pInputLayout) \ ( (This)->lpVtbl -> IASetInputLayout(This,pInputLayout) ) #define ID3D10Device1_IASetVertexBuffers(This,StartSlot,NumBuffers,ppVertexBuffers,pStrides,pOffsets) \ ( (This)->lpVtbl -> IASetVertexBuffers(This,StartSlot,NumBuffers,ppVertexBuffers,pStrides,pOffsets) ) #define ID3D10Device1_IASetIndexBuffer(This,pIndexBuffer,Format,Offset) \ ( (This)->lpVtbl -> IASetIndexBuffer(This,pIndexBuffer,Format,Offset) ) #define ID3D10Device1_DrawIndexedInstanced(This,IndexCountPerInstance,InstanceCount,StartIndexLocation,BaseVertexLocation,StartInstanceLocation) \ ( (This)->lpVtbl -> DrawIndexedInstanced(This,IndexCountPerInstance,InstanceCount,StartIndexLocation,BaseVertexLocation,StartInstanceLocation) ) #define ID3D10Device1_DrawInstanced(This,VertexCountPerInstance,InstanceCount,StartVertexLocation,StartInstanceLocation) \ ( (This)->lpVtbl -> DrawInstanced(This,VertexCountPerInstance,InstanceCount,StartVertexLocation,StartInstanceLocation) ) #define ID3D10Device1_GSSetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers) \ ( (This)->lpVtbl -> GSSetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers) ) #define ID3D10Device1_GSSetShader(This,pShader) \ ( (This)->lpVtbl -> GSSetShader(This,pShader) ) #define ID3D10Device1_IASetPrimitiveTopology(This,Topology) \ ( (This)->lpVtbl -> IASetPrimitiveTopology(This,Topology) ) #define ID3D10Device1_VSSetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews) \ ( (This)->lpVtbl -> VSSetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews) ) #define ID3D10Device1_VSSetSamplers(This,StartSlot,NumSamplers,ppSamplers) \ ( (This)->lpVtbl -> VSSetSamplers(This,StartSlot,NumSamplers,ppSamplers) ) #define ID3D10Device1_SetPredication(This,pPredicate,PredicateValue) \ ( (This)->lpVtbl -> SetPredication(This,pPredicate,PredicateValue) ) #define ID3D10Device1_GSSetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews) \ ( (This)->lpVtbl -> GSSetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews) ) #define ID3D10Device1_GSSetSamplers(This,StartSlot,NumSamplers,ppSamplers) \ ( (This)->lpVtbl -> GSSetSamplers(This,StartSlot,NumSamplers,ppSamplers) ) #define ID3D10Device1_OMSetRenderTargets(This,NumViews,ppRenderTargetViews,pDepthStencilView) \ ( (This)->lpVtbl -> OMSetRenderTargets(This,NumViews,ppRenderTargetViews,pDepthStencilView) ) #define ID3D10Device1_OMSetBlendState(This,pBlendState,BlendFactor,SampleMask) \ ( (This)->lpVtbl -> OMSetBlendState(This,pBlendState,BlendFactor,SampleMask) ) #define ID3D10Device1_OMSetDepthStencilState(This,pDepthStencilState,StencilRef) \ ( (This)->lpVtbl -> OMSetDepthStencilState(This,pDepthStencilState,StencilRef) ) #define ID3D10Device1_SOSetTargets(This,NumBuffers,ppSOTargets,pOffsets) \ ( (This)->lpVtbl -> SOSetTargets(This,NumBuffers,ppSOTargets,pOffsets) ) #define ID3D10Device1_DrawAuto(This) \ ( (This)->lpVtbl -> DrawAuto(This) ) #define ID3D10Device1_RSSetState(This,pRasterizerState) \ ( (This)->lpVtbl -> RSSetState(This,pRasterizerState) ) #define ID3D10Device1_RSSetViewports(This,NumViewports,pViewports) \ ( (This)->lpVtbl -> RSSetViewports(This,NumViewports,pViewports) ) #define ID3D10Device1_RSSetScissorRects(This,NumRects,pRects) \ ( (This)->lpVtbl -> RSSetScissorRects(This,NumRects,pRects) ) #define ID3D10Device1_CopySubresourceRegion(This,pDstResource,DstSubresource,DstX,DstY,DstZ,pSrcResource,SrcSubresource,pSrcBox) \ ( (This)->lpVtbl -> CopySubresourceRegion(This,pDstResource,DstSubresource,DstX,DstY,DstZ,pSrcResource,SrcSubresource,pSrcBox) ) #define ID3D10Device1_CopyResource(This,pDstResource,pSrcResource) \ ( (This)->lpVtbl -> CopyResource(This,pDstResource,pSrcResource) ) #define ID3D10Device1_UpdateSubresource(This,pDstResource,DstSubresource,pDstBox,pSrcData,SrcRowPitch,SrcDepthPitch) \ ( (This)->lpVtbl -> UpdateSubresource(This,pDstResource,DstSubresource,pDstBox,pSrcData,SrcRowPitch,SrcDepthPitch) ) #define ID3D10Device1_ClearRenderTargetView(This,pRenderTargetView,ColorRGBA) \ ( (This)->lpVtbl -> ClearRenderTargetView(This,pRenderTargetView,ColorRGBA) ) #define ID3D10Device1_ClearDepthStencilView(This,pDepthStencilView,ClearFlags,Depth,Stencil) \ ( (This)->lpVtbl -> ClearDepthStencilView(This,pDepthStencilView,ClearFlags,Depth,Stencil) ) #define ID3D10Device1_GenerateMips(This,pShaderResourceView) \ ( (This)->lpVtbl -> GenerateMips(This,pShaderResourceView) ) #define ID3D10Device1_ResolveSubresource(This,pDstResource,DstSubresource,pSrcResource,SrcSubresource,Format) \ ( (This)->lpVtbl -> ResolveSubresource(This,pDstResource,DstSubresource,pSrcResource,SrcSubresource,Format) ) #define ID3D10Device1_VSGetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers) \ ( (This)->lpVtbl -> VSGetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers) ) #define ID3D10Device1_PSGetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews) \ ( (This)->lpVtbl -> PSGetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews) ) #define ID3D10Device1_PSGetShader(This,ppPixelShader) \ ( (This)->lpVtbl -> PSGetShader(This,ppPixelShader) ) #define ID3D10Device1_PSGetSamplers(This,StartSlot,NumSamplers,ppSamplers) \ ( (This)->lpVtbl -> PSGetSamplers(This,StartSlot,NumSamplers,ppSamplers) ) #define ID3D10Device1_VSGetShader(This,ppVertexShader) \ ( (This)->lpVtbl -> VSGetShader(This,ppVertexShader) ) #define ID3D10Device1_PSGetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers) \ ( (This)->lpVtbl -> PSGetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers) ) #define ID3D10Device1_IAGetInputLayout(This,ppInputLayout) \ ( (This)->lpVtbl -> IAGetInputLayout(This,ppInputLayout) ) #define ID3D10Device1_IAGetVertexBuffers(This,StartSlot,NumBuffers,ppVertexBuffers,pStrides,pOffsets) \ ( (This)->lpVtbl -> IAGetVertexBuffers(This,StartSlot,NumBuffers,ppVertexBuffers,pStrides,pOffsets) ) #define ID3D10Device1_IAGetIndexBuffer(This,pIndexBuffer,Format,Offset) \ ( (This)->lpVtbl -> IAGetIndexBuffer(This,pIndexBuffer,Format,Offset) ) #define ID3D10Device1_GSGetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers) \ ( (This)->lpVtbl -> GSGetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers) ) #define ID3D10Device1_GSGetShader(This,ppGeometryShader) \ ( (This)->lpVtbl -> GSGetShader(This,ppGeometryShader) ) #define ID3D10Device1_IAGetPrimitiveTopology(This,pTopology) \ ( (This)->lpVtbl -> IAGetPrimitiveTopology(This,pTopology) ) #define ID3D10Device1_VSGetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews) \ ( (This)->lpVtbl -> VSGetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews) ) #define ID3D10Device1_VSGetSamplers(This,StartSlot,NumSamplers,ppSamplers) \ ( (This)->lpVtbl -> VSGetSamplers(This,StartSlot,NumSamplers,ppSamplers) ) #define ID3D10Device1_GetPredication(This,ppPredicate,pPredicateValue) \ ( (This)->lpVtbl -> GetPredication(This,ppPredicate,pPredicateValue) ) #define ID3D10Device1_GSGetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews) \ ( (This)->lpVtbl -> GSGetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews) ) #define ID3D10Device1_GSGetSamplers(This,StartSlot,NumSamplers,ppSamplers) \ ( (This)->lpVtbl -> GSGetSamplers(This,StartSlot,NumSamplers,ppSamplers) ) #define ID3D10Device1_OMGetRenderTargets(This,NumViews,ppRenderTargetViews,ppDepthStencilView) \ ( (This)->lpVtbl -> OMGetRenderTargets(This,NumViews,ppRenderTargetViews,ppDepthStencilView) ) #define ID3D10Device1_OMGetBlendState(This,ppBlendState,BlendFactor,pSampleMask) \ ( (This)->lpVtbl -> OMGetBlendState(This,ppBlendState,BlendFactor,pSampleMask) ) #define ID3D10Device1_OMGetDepthStencilState(This,ppDepthStencilState,pStencilRef) \ ( (This)->lpVtbl -> OMGetDepthStencilState(This,ppDepthStencilState,pStencilRef) ) #define ID3D10Device1_SOGetTargets(This,NumBuffers,ppSOTargets,pOffsets) \ ( (This)->lpVtbl -> SOGetTargets(This,NumBuffers,ppSOTargets,pOffsets) ) #define ID3D10Device1_RSGetState(This,ppRasterizerState) \ ( (This)->lpVtbl -> RSGetState(This,ppRasterizerState) ) #define ID3D10Device1_RSGetViewports(This,NumViewports,pViewports) \ ( (This)->lpVtbl -> RSGetViewports(This,NumViewports,pViewports) ) #define ID3D10Device1_RSGetScissorRects(This,NumRects,pRects) \ ( (This)->lpVtbl -> RSGetScissorRects(This,NumRects,pRects) ) #define ID3D10Device1_GetDeviceRemovedReason(This) \ ( (This)->lpVtbl -> GetDeviceRemovedReason(This) ) #define ID3D10Device1_SetExceptionMode(This,RaiseFlags) \ ( (This)->lpVtbl -> SetExceptionMode(This,RaiseFlags) ) #define ID3D10Device1_GetExceptionMode(This) \ ( (This)->lpVtbl -> GetExceptionMode(This) ) #define ID3D10Device1_GetPrivateData(This,guid,pDataSize,pData) \ ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) #define ID3D10Device1_SetPrivateData(This,guid,DataSize,pData) \ ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) #define ID3D10Device1_SetPrivateDataInterface(This,guid,pData) \ ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) #define ID3D10Device1_ClearState(This) \ ( (This)->lpVtbl -> ClearState(This) ) #define ID3D10Device1_Flush(This) \ ( (This)->lpVtbl -> Flush(This) ) #define ID3D10Device1_CreateBuffer(This,pDesc,pInitialData,ppBuffer) \ ( (This)->lpVtbl -> CreateBuffer(This,pDesc,pInitialData,ppBuffer) ) #define ID3D10Device1_CreateTexture1D(This,pDesc,pInitialData,ppTexture1D) \ ( (This)->lpVtbl -> CreateTexture1D(This,pDesc,pInitialData,ppTexture1D) ) #define ID3D10Device1_CreateTexture2D(This,pDesc,pInitialData,ppTexture2D) \ ( (This)->lpVtbl -> CreateTexture2D(This,pDesc,pInitialData,ppTexture2D) ) #define ID3D10Device1_CreateTexture3D(This,pDesc,pInitialData,ppTexture3D) \ ( (This)->lpVtbl -> CreateTexture3D(This,pDesc,pInitialData,ppTexture3D) ) #define ID3D10Device1_CreateShaderResourceView(This,pResource,pDesc,ppSRView) \ ( (This)->lpVtbl -> CreateShaderResourceView(This,pResource,pDesc,ppSRView) ) #define ID3D10Device1_CreateRenderTargetView(This,pResource,pDesc,ppRTView) \ ( (This)->lpVtbl -> CreateRenderTargetView(This,pResource,pDesc,ppRTView) ) #define ID3D10Device1_CreateDepthStencilView(This,pResource,pDesc,ppDepthStencilView) \ ( (This)->lpVtbl -> CreateDepthStencilView(This,pResource,pDesc,ppDepthStencilView) ) #define ID3D10Device1_CreateInputLayout(This,pInputElementDescs,NumElements,pShaderBytecodeWithInputSignature,BytecodeLength,ppInputLayout) \ ( (This)->lpVtbl -> CreateInputLayout(This,pInputElementDescs,NumElements,pShaderBytecodeWithInputSignature,BytecodeLength,ppInputLayout) ) #define ID3D10Device1_CreateVertexShader(This,pShaderBytecode,BytecodeLength,ppVertexShader) \ ( (This)->lpVtbl -> CreateVertexShader(This,pShaderBytecode,BytecodeLength,ppVertexShader) ) #define ID3D10Device1_CreateGeometryShader(This,pShaderBytecode,BytecodeLength,ppGeometryShader) \ ( (This)->lpVtbl -> CreateGeometryShader(This,pShaderBytecode,BytecodeLength,ppGeometryShader) ) #define ID3D10Device1_CreateGeometryShaderWithStreamOutput(This,pShaderBytecode,BytecodeLength,pSODeclaration,NumEntries,OutputStreamStride,ppGeometryShader) \ ( (This)->lpVtbl -> CreateGeometryShaderWithStreamOutput(This,pShaderBytecode,BytecodeLength,pSODeclaration,NumEntries,OutputStreamStride,ppGeometryShader) ) #define ID3D10Device1_CreatePixelShader(This,pShaderBytecode,BytecodeLength,ppPixelShader) \ ( (This)->lpVtbl -> CreatePixelShader(This,pShaderBytecode,BytecodeLength,ppPixelShader) ) #define ID3D10Device1_CreateBlendState(This,pBlendStateDesc,ppBlendState) \ ( (This)->lpVtbl -> CreateBlendState(This,pBlendStateDesc,ppBlendState) ) #define ID3D10Device1_CreateDepthStencilState(This,pDepthStencilDesc,ppDepthStencilState) \ ( (This)->lpVtbl -> CreateDepthStencilState(This,pDepthStencilDesc,ppDepthStencilState) ) #define ID3D10Device1_CreateRasterizerState(This,pRasterizerDesc,ppRasterizerState) \ ( (This)->lpVtbl -> CreateRasterizerState(This,pRasterizerDesc,ppRasterizerState) ) #define ID3D10Device1_CreateSamplerState(This,pSamplerDesc,ppSamplerState) \ ( (This)->lpVtbl -> CreateSamplerState(This,pSamplerDesc,ppSamplerState) ) #define ID3D10Device1_CreateQuery(This,pQueryDesc,ppQuery) \ ( (This)->lpVtbl -> CreateQuery(This,pQueryDesc,ppQuery) ) #define ID3D10Device1_CreatePredicate(This,pPredicateDesc,ppPredicate) \ ( (This)->lpVtbl -> CreatePredicate(This,pPredicateDesc,ppPredicate) ) #define ID3D10Device1_CreateCounter(This,pCounterDesc,ppCounter) \ ( (This)->lpVtbl -> CreateCounter(This,pCounterDesc,ppCounter) ) #define ID3D10Device1_CheckFormatSupport(This,Format,pFormatSupport) \ ( (This)->lpVtbl -> CheckFormatSupport(This,Format,pFormatSupport) ) #define ID3D10Device1_CheckMultisampleQualityLevels(This,Format,SampleCount,pNumQualityLevels) \ ( (This)->lpVtbl -> CheckMultisampleQualityLevels(This,Format,SampleCount,pNumQualityLevels) ) #define ID3D10Device1_CheckCounterInfo(This,pCounterInfo) \ ( (This)->lpVtbl -> CheckCounterInfo(This,pCounterInfo) ) #define ID3D10Device1_CheckCounter(This,pDesc,pType,pActiveCounters,szName,pNameLength,szUnits,pUnitsLength,szDescription,pDescriptionLength) \ ( (This)->lpVtbl -> CheckCounter(This,pDesc,pType,pActiveCounters,szName,pNameLength,szUnits,pUnitsLength,szDescription,pDescriptionLength) ) #define ID3D10Device1_GetCreationFlags(This) \ ( (This)->lpVtbl -> GetCreationFlags(This) ) #define ID3D10Device1_OpenSharedResource(This,hResource,ReturnedInterface,ppResource) \ ( (This)->lpVtbl -> OpenSharedResource(This,hResource,ReturnedInterface,ppResource) ) #define ID3D10Device1_SetTextFilterSize(This,Width,Height) \ ( (This)->lpVtbl -> SetTextFilterSize(This,Width,Height) ) #define ID3D10Device1_GetTextFilterSize(This,pWidth,pHeight) \ ( (This)->lpVtbl -> GetTextFilterSize(This,pWidth,pHeight) ) #define ID3D10Device1_CreateShaderResourceView1(This,pResource,pDesc,ppSRView) \ ( (This)->lpVtbl -> CreateShaderResourceView1(This,pResource,pDesc,ppSRView) ) #define ID3D10Device1_CreateBlendState1(This,pBlendStateDesc,ppBlendState) \ ( (This)->lpVtbl -> CreateBlendState1(This,pBlendStateDesc,ppBlendState) ) #define ID3D10Device1_GetFeatureLevel(This) \ ( (This)->lpVtbl -> GetFeatureLevel(This) ) #endif /* COBJMACROS */ #endif /* C style interface */ #endif /* __ID3D10Device1_INTERFACE_DEFINED__ */ /* interface __MIDL_itf_d3d10_1_0000_0003 */ /* [local] */ #define D3D10_1_SDK_VERSION ( ( 0 + 0x20 ) ) #include "d3d10_1shader.h" /////////////////////////////////////////////////////////////////////////// // D3D10CreateDevice1 // ------------------ // // pAdapter // If NULL, D3D10CreateDevice1 will choose the primary adapter and // create a new instance from a temporarily created IDXGIFactory. // If non-NULL, D3D10CreateDevice1 will register the appropriate // device, if necessary (via IDXGIAdapter::RegisterDrver), before // creating the device. // DriverType // Specifies the driver type to be created: hardware, reference or // null. // Software // HMODULE of a DLL implementing a software rasterizer. Must be NULL for // non-Software driver types. // Flags // Any of those documented for D3D10CreateDeviceAndSwapChain1. // HardwareLevel // Any of those documented for D3D10CreateDeviceAndSwapChain1. // SDKVersion // SDK version. Use the D3D10_1_SDK_VERSION macro. // ppDevice // Pointer to returned interface. // // Return Values // Any of those documented for // CreateDXGIFactory // IDXGIFactory::EnumAdapters // IDXGIAdapter::RegisterDriver // D3D10CreateDevice1 // /////////////////////////////////////////////////////////////////////////// typedef HRESULT (WINAPI* PFN_D3D10_CREATE_DEVICE1)(IDXGIAdapter *, D3D10_DRIVER_TYPE, HMODULE, UINT, D3D10_FEATURE_LEVEL1, UINT, ID3D10Device1**); HRESULT WINAPI D3D10CreateDevice1( IDXGIAdapter *pAdapter, D3D10_DRIVER_TYPE DriverType, HMODULE Software, UINT Flags, D3D10_FEATURE_LEVEL1 HardwareLevel, UINT SDKVersion, ID3D10Device1 **ppDevice); /////////////////////////////////////////////////////////////////////////// // D3D10CreateDeviceAndSwapChain1 // ------------------------------ // // ppAdapter // If NULL, D3D10CreateDevice1 will choose the primary adapter and // create a new instance from a temporarily created IDXGIFactory. // If non-NULL, D3D10CreateDevice1 will register the appropriate // device, if necessary (via IDXGIAdapter::RegisterDrver), before // creating the device. // DriverType // Specifies the driver type to be created: hardware, reference or // null. // Software // HMODULE of a DLL implementing a software rasterizer. Must be NULL for // non-Software driver types. // Flags // Any of those documented for D3D10CreateDevice1. // HardwareLevel // Any of: // D3D10_CREATE_LEVEL_10_0 // D3D10_CREATE_LEVEL_10_1 // SDKVersion // SDK version. Use the D3D10_1_SDK_VERSION macro. // pSwapChainDesc // Swap chain description, may be NULL. // ppSwapChain // Pointer to returned interface. May be NULL. // ppDevice // Pointer to returned interface. // // Return Values // Any of those documented for // CreateDXGIFactory // IDXGIFactory::EnumAdapters // IDXGIAdapter::RegisterDriver // D3D10CreateDevice1 // IDXGIFactory::CreateSwapChain // /////////////////////////////////////////////////////////////////////////// typedef HRESULT (WINAPI* PFN_D3D10_CREATE_DEVICE_AND_SWAP_CHAIN1)(IDXGIAdapter *, D3D10_DRIVER_TYPE, HMODULE, UINT, D3D10_FEATURE_LEVEL1, UINT, DXGI_SWAP_CHAIN_DESC *, IDXGISwapChain **, ID3D10Device1 **); HRESULT WINAPI D3D10CreateDeviceAndSwapChain1( IDXGIAdapter *pAdapter, D3D10_DRIVER_TYPE DriverType, HMODULE Software, UINT Flags, D3D10_FEATURE_LEVEL1 HardwareLevel, UINT SDKVersion, DXGI_SWAP_CHAIN_DESC *pSwapChainDesc, IDXGISwapChain **ppSwapChain, ID3D10Device1 **ppDevice); DEFINE_GUID(IID_ID3D10BlendState1,0xEDAD8D99,0x8A35,0x4d6d,0x85,0x66,0x2E,0xA2,0x76,0xCD,0xE1,0x61); DEFINE_GUID(IID_ID3D10ShaderResourceView1,0x9B7E4C87,0x342C,0x4106,0xA1,0x9F,0x4F,0x27,0x04,0xF6,0x89,0xF0); DEFINE_GUID(IID_ID3D10Device1,0x9B7E4C8F,0x342C,0x4106,0xA1,0x9F,0x4F,0x27,0x04,0xF6,0x89,0xF0); extern RPC_IF_HANDLE __MIDL_itf_d3d10_1_0000_0003_v0_0_c_ifspec; extern RPC_IF_HANDLE __MIDL_itf_d3d10_1_0000_0003_v0_0_s_ifspec; /* Additional Prototypes for ALL interfaces */ /* end of Additional Prototypes */ #ifdef __cplusplus } #endif #endif ================================================ FILE: Include/D3D10_1shader.h ================================================ ////////////////////////////////////////////////////////////////////////////// // // Copyright (c) Microsoft Corporation. All rights reserved. // // File: D3D10_1Shader.h // Content: D3D10.1 Shader Types and APIs // ////////////////////////////////////////////////////////////////////////////// #ifndef __D3D10_1SHADER_H__ #define __D3D10_1SHADER_H__ #include "d3d10shader.h" //---------------------------------------------------------------------------- // Shader debugging structures //---------------------------------------------------------------------------- typedef enum _D3D10_SHADER_DEBUG_REGTYPE { D3D10_SHADER_DEBUG_REG_INPUT, D3D10_SHADER_DEBUG_REG_OUTPUT, D3D10_SHADER_DEBUG_REG_CBUFFER, D3D10_SHADER_DEBUG_REG_TBUFFER, D3D10_SHADER_DEBUG_REG_TEMP, D3D10_SHADER_DEBUG_REG_TEMPARRAY, D3D10_SHADER_DEBUG_REG_TEXTURE, D3D10_SHADER_DEBUG_REG_SAMPLER, D3D10_SHADER_DEBUG_REG_IMMEDIATECBUFFER, D3D10_SHADER_DEBUG_REG_LITERAL, D3D10_SHADER_DEBUG_REG_UNUSED, D3D11_SHADER_DEBUG_REG_INTERFACE_POINTERS, D3D11_SHADER_DEBUG_REG_UAV, D3D10_SHADER_DEBUG_REG_FORCE_DWORD = 0x7fffffff, } D3D10_SHADER_DEBUG_REGTYPE; typedef enum _D3D10_SHADER_DEBUG_SCOPETYPE { D3D10_SHADER_DEBUG_SCOPE_GLOBAL, D3D10_SHADER_DEBUG_SCOPE_BLOCK, D3D10_SHADER_DEBUG_SCOPE_FORLOOP, D3D10_SHADER_DEBUG_SCOPE_STRUCT, D3D10_SHADER_DEBUG_SCOPE_FUNC_PARAMS, D3D10_SHADER_DEBUG_SCOPE_STATEBLOCK, D3D10_SHADER_DEBUG_SCOPE_NAMESPACE, D3D10_SHADER_DEBUG_SCOPE_ANNOTATION, D3D10_SHADER_DEBUG_SCOPE_FORCE_DWORD = 0x7fffffff, } D3D10_SHADER_DEBUG_SCOPETYPE; typedef enum _D3D10_SHADER_DEBUG_VARTYPE { D3D10_SHADER_DEBUG_VAR_VARIABLE, D3D10_SHADER_DEBUG_VAR_FUNCTION, D3D10_SHADER_DEBUG_VAR_FORCE_DWORD = 0x7fffffff, } D3D10_SHADER_DEBUG_VARTYPE; ///////////////////////////////////////////////////////////////////// // These are the serialized structures that get written to the file ///////////////////////////////////////////////////////////////////// typedef struct _D3D10_SHADER_DEBUG_TOKEN_INFO { UINT File; // offset into file list UINT Line; // line # UINT Column; // column # UINT TokenLength; UINT TokenId; // offset to LPCSTR of length TokenLength in string datastore } D3D10_SHADER_DEBUG_TOKEN_INFO; // Variable list typedef struct _D3D10_SHADER_DEBUG_VAR_INFO { // Index into token list for declaring identifier UINT TokenId; D3D10_SHADER_VARIABLE_TYPE Type; // register and component for this variable, only valid/necessary for arrays UINT Register; UINT Component; // gives the original variable that declared this variable UINT ScopeVar; // this variable's offset in its ScopeVar UINT ScopeVarOffset; } D3D10_SHADER_DEBUG_VAR_INFO; typedef struct _D3D10_SHADER_DEBUG_INPUT_INFO { // index into array of variables of variable to initialize UINT Var; // input, cbuffer, tbuffer D3D10_SHADER_DEBUG_REGTYPE InitialRegisterSet; // set to cbuffer or tbuffer slot, geometry shader input primitive #, // identifying register for indexable temp, or -1 UINT InitialBank; // -1 if temp, otherwise gives register in register set UINT InitialRegister; // -1 if temp, otherwise gives component UINT InitialComponent; // initial value if literal UINT InitialValue; } D3D10_SHADER_DEBUG_INPUT_INFO; typedef struct _D3D10_SHADER_DEBUG_SCOPEVAR_INFO { // Index into variable token UINT TokenId; D3D10_SHADER_DEBUG_VARTYPE VarType; // variable or function (different namespaces) D3D10_SHADER_VARIABLE_CLASS Class; UINT Rows; // number of rows (matrices) UINT Columns; // number of columns (vectors and matrices) // In an array of structures, one struct member scope is provided, and // you'll have to add the array stride times the index to the variable // index you find, then find that variable in this structure's list of // variables. // gives a scope to look up struct members. -1 if not a struct UINT StructMemberScope; // number of array indices UINT uArrayIndices; // a[3][2][1] has 3 indices // maximum array index for each index // offset to UINT[uArrayIndices] in UINT datastore UINT ArrayElements; // a[3][2][1] has {3, 2, 1} // how many variables each array index moves // offset to UINT[uArrayIndices] in UINT datastore UINT ArrayStrides; // a[3][2][1] has {2, 1, 1} UINT uVariables; // index of the first variable, later variables are offsets from this one UINT uFirstVariable; } D3D10_SHADER_DEBUG_SCOPEVAR_INFO; // scope data, this maps variable names to debug variables (useful for the watch window) typedef struct _D3D10_SHADER_DEBUG_SCOPE_INFO { D3D10_SHADER_DEBUG_SCOPETYPE ScopeType; UINT Name; // offset to name of scope in strings list UINT uNameLen; // length of name string UINT uVariables; UINT VariableData; // Offset to UINT[uVariables] indexing the Scope Variable list } D3D10_SHADER_DEBUG_SCOPE_INFO; // instruction outputs typedef struct _D3D10_SHADER_DEBUG_OUTPUTVAR { // index variable being written to, if -1 it's not going to a variable UINT Var; // range data that the compiler expects to be true UINT uValueMin, uValueMax; INT iValueMin, iValueMax; FLOAT fValueMin, fValueMax; BOOL bNaNPossible, bInfPossible; } D3D10_SHADER_DEBUG_OUTPUTVAR; typedef struct _D3D10_SHADER_DEBUG_OUTPUTREG_INFO { // Only temp, indexable temp, and output are valid here D3D10_SHADER_DEBUG_REGTYPE OutputRegisterSet; // -1 means no output UINT OutputReg; // if a temp array, identifier for which one UINT TempArrayReg; // -1 means masked out UINT OutputComponents[4]; D3D10_SHADER_DEBUG_OUTPUTVAR OutputVars[4]; // when indexing the output, get the value of this register, then add // that to uOutputReg. If uIndexReg is -1, then there is no index. // find the variable whose register is the sum (by looking in the ScopeVar) // and component matches, then set it. This should only happen for indexable // temps and outputs. UINT IndexReg; UINT IndexComp; } D3D10_SHADER_DEBUG_OUTPUTREG_INFO; // per instruction data typedef struct _D3D10_SHADER_DEBUG_INST_INFO { UINT Id; // Which instruction this is in the bytecode UINT Opcode; // instruction type // 0, 1, or 2 UINT uOutputs; // up to two outputs per instruction D3D10_SHADER_DEBUG_OUTPUTREG_INFO pOutputs[2]; // index into the list of tokens for this instruction's token UINT TokenId; // how many function calls deep this instruction is UINT NestingLevel; // list of scopes from outer-most to inner-most // Number of scopes UINT Scopes; UINT ScopeInfo; // Offset to UINT[uScopes] specifying indices of the ScopeInfo Array // list of variables accessed by this instruction // Number of variables UINT AccessedVars; UINT AccessedVarsInfo; // Offset to UINT[AccessedVars] specifying indices of the ScopeVariableInfo Array } D3D10_SHADER_DEBUG_INST_INFO; typedef struct _D3D10_SHADER_DEBUG_FILE_INFO { UINT FileName; // Offset to LPCSTR for file name UINT FileNameLen; // Length of file name UINT FileData; // Offset to LPCSTR of length FileLen UINT FileLen; // Length of file } D3D10_SHADER_DEBUG_FILE_INFO; typedef struct _D3D10_SHADER_DEBUG_INFO { UINT Size; // sizeof(D3D10_SHADER_DEBUG_INFO) UINT Creator; // Offset to LPCSTR for compiler version UINT EntrypointName; // Offset to LPCSTR for Entry point name UINT ShaderTarget; // Offset to LPCSTR for shader target UINT CompileFlags; // flags used to compile UINT Files; // number of included files UINT FileInfo; // Offset to D3D10_SHADER_DEBUG_FILE_INFO[Files] UINT Instructions; // number of instructions UINT InstructionInfo; // Offset to D3D10_SHADER_DEBUG_INST_INFO[Instructions] UINT Variables; // number of variables UINT VariableInfo; // Offset to D3D10_SHADER_DEBUG_VAR_INFO[Variables] UINT InputVariables; // number of variables to initialize before running UINT InputVariableInfo; // Offset to D3D10_SHADER_DEBUG_INPUT_INFO[InputVariables] UINT Tokens; // number of tokens to initialize UINT TokenInfo; // Offset to D3D10_SHADER_DEBUG_TOKEN_INFO[Tokens] UINT Scopes; // number of scopes UINT ScopeInfo; // Offset to D3D10_SHADER_DEBUG_SCOPE_INFO[Scopes] UINT ScopeVariables; // number of variables declared UINT ScopeVariableInfo; // Offset to D3D10_SHADER_DEBUG_SCOPEVAR_INFO[Scopes] UINT UintOffset; // Offset to the UINT datastore, all UINT offsets are from this offset UINT StringOffset; // Offset to the string datastore, all string offsets are from this offset } D3D10_SHADER_DEBUG_INFO; //---------------------------------------------------------------------------- // ID3D10ShaderReflection1: //---------------------------------------------------------------------------- // // Interface definitions // typedef interface ID3D10ShaderReflection1 ID3D10ShaderReflection1; typedef interface ID3D10ShaderReflection1 *LPD3D10SHADERREFLECTION1; // {C3457783-A846-47CE-9520-CEA6F66E7447} DEFINE_GUID(IID_ID3D10ShaderReflection1, 0xc3457783, 0xa846, 0x47ce, 0x95, 0x20, 0xce, 0xa6, 0xf6, 0x6e, 0x74, 0x47); #undef INTERFACE #define INTERFACE ID3D10ShaderReflection1 DECLARE_INTERFACE_(ID3D10ShaderReflection1, IUnknown) { STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE; STDMETHOD_(ULONG, AddRef)(THIS) PURE; STDMETHOD_(ULONG, Release)(THIS) PURE; STDMETHOD(GetDesc)(THIS_ D3D10_SHADER_DESC *pDesc) PURE; STDMETHOD_(ID3D10ShaderReflectionConstantBuffer*, GetConstantBufferByIndex)(THIS_ UINT Index) PURE; STDMETHOD_(ID3D10ShaderReflectionConstantBuffer*, GetConstantBufferByName)(THIS_ LPCSTR Name) PURE; STDMETHOD(GetResourceBindingDesc)(THIS_ UINT ResourceIndex, D3D10_SHADER_INPUT_BIND_DESC *pDesc) PURE; STDMETHOD(GetInputParameterDesc)(THIS_ UINT ParameterIndex, D3D10_SIGNATURE_PARAMETER_DESC *pDesc) PURE; STDMETHOD(GetOutputParameterDesc)(THIS_ UINT ParameterIndex, D3D10_SIGNATURE_PARAMETER_DESC *pDesc) PURE; STDMETHOD_(ID3D10ShaderReflectionVariable*, GetVariableByName)(THIS_ LPCSTR Name) PURE; STDMETHOD(GetResourceBindingDescByName)(THIS_ LPCSTR Name, D3D10_SHADER_INPUT_BIND_DESC *pDesc) PURE; STDMETHOD(GetMovInstructionCount)(THIS_ UINT* pCount) PURE; STDMETHOD(GetMovcInstructionCount)(THIS_ UINT* pCount) PURE; STDMETHOD(GetConversionInstructionCount)(THIS_ UINT* pCount) PURE; STDMETHOD(GetBitwiseInstructionCount)(THIS_ UINT* pCount) PURE; STDMETHOD(GetGSInputPrimitive)(THIS_ D3D10_PRIMITIVE* pPrim) PURE; STDMETHOD(IsLevel9Shader)(THIS_ BOOL* pbLevel9Shader) PURE; STDMETHOD(IsSampleFrequencyShader)(THIS_ BOOL* pbSampleFrequency) PURE; }; ////////////////////////////////////////////////////////////////////////////// // APIs ////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// #ifdef __cplusplus extern "C" { #endif //__cplusplus #ifdef __cplusplus } #endif //__cplusplus #endif //__D3D10_1SHADER_H__ ================================================ FILE: Include/D3D10effect.h ================================================ ////////////////////////////////////////////////////////////////////////////// // // Copyright (c) Microsoft Corporation. All rights reserved. // // File: D3D10Effect.h // Content: D3D10 Stateblock/Effect Types & APIs // ////////////////////////////////////////////////////////////////////////////// #ifndef __D3D10EFFECT_H__ #define __D3D10EFFECT_H__ #include "d3d10.h" ////////////////////////////////////////////////////////////////////////////// // File contents: // // 1) Stateblock enums, structs, interfaces, flat APIs // 2) Effect enums, structs, interfaces, flat APIs ////////////////////////////////////////////////////////////////////////////// //---------------------------------------------------------------------------- // D3D10_DEVICE_STATE_TYPES: // // Used in ID3D10StateBlockMask function calls // //---------------------------------------------------------------------------- typedef enum _D3D10_DEVICE_STATE_TYPES { D3D10_DST_SO_BUFFERS=1, // Single-value state (atomical gets/sets) D3D10_DST_OM_RENDER_TARGETS, // Single-value state (atomical gets/sets) D3D10_DST_OM_DEPTH_STENCIL_STATE, // Single-value state D3D10_DST_OM_BLEND_STATE, // Single-value state D3D10_DST_VS, // Single-value state D3D10_DST_VS_SAMPLERS, // Count: D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT D3D10_DST_VS_SHADER_RESOURCES, // Count: D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT D3D10_DST_VS_CONSTANT_BUFFERS, // Count: D3D10_DST_GS, // Single-value state D3D10_DST_GS_SAMPLERS, // Count: D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT D3D10_DST_GS_SHADER_RESOURCES, // Count: D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT D3D10_DST_GS_CONSTANT_BUFFERS, // Count: D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT D3D10_DST_PS, // Single-value state D3D10_DST_PS_SAMPLERS, // Count: D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT D3D10_DST_PS_SHADER_RESOURCES, // Count: D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT D3D10_DST_PS_CONSTANT_BUFFERS, // Count: D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT D3D10_DST_IA_VERTEX_BUFFERS, // Count: D3D10_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT D3D10_DST_IA_INDEX_BUFFER, // Single-value state D3D10_DST_IA_INPUT_LAYOUT, // Single-value state D3D10_DST_IA_PRIMITIVE_TOPOLOGY, // Single-value state D3D10_DST_RS_VIEWPORTS, // Single-value state (atomical gets/sets) D3D10_DST_RS_SCISSOR_RECTS, // Single-value state (atomical gets/sets) D3D10_DST_RS_RASTERIZER_STATE, // Single-value state D3D10_DST_PREDICATION, // Single-value state } D3D10_DEVICE_STATE_TYPES; //---------------------------------------------------------------------------- // D3D10_DEVICE_STATE_TYPES: // // Used in ID3D10StateBlockMask function calls // //---------------------------------------------------------------------------- #ifndef D3D10_BYTES_FROM_BITS #define D3D10_BYTES_FROM_BITS(x) (((x) + 7) / 8) #endif // D3D10_BYTES_FROM_BITS typedef struct _D3D10_STATE_BLOCK_MASK { BYTE VS; BYTE VSSamplers[D3D10_BYTES_FROM_BITS(D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT)]; BYTE VSShaderResources[D3D10_BYTES_FROM_BITS(D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT)]; BYTE VSConstantBuffers[D3D10_BYTES_FROM_BITS(D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT)]; BYTE GS; BYTE GSSamplers[D3D10_BYTES_FROM_BITS(D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT)]; BYTE GSShaderResources[D3D10_BYTES_FROM_BITS(D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT)]; BYTE GSConstantBuffers[D3D10_BYTES_FROM_BITS(D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT)]; BYTE PS; BYTE PSSamplers[D3D10_BYTES_FROM_BITS(D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT)]; BYTE PSShaderResources[D3D10_BYTES_FROM_BITS(D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT)]; BYTE PSConstantBuffers[D3D10_BYTES_FROM_BITS(D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT)]; BYTE IAVertexBuffers[D3D10_BYTES_FROM_BITS(D3D10_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT)]; BYTE IAIndexBuffer; BYTE IAInputLayout; BYTE IAPrimitiveTopology; BYTE OMRenderTargets; BYTE OMDepthStencilState; BYTE OMBlendState; BYTE RSViewports; BYTE RSScissorRects; BYTE RSRasterizerState; BYTE SOBuffers; BYTE Predication; } D3D10_STATE_BLOCK_MASK; ////////////////////////////////////////////////////////////////////////////// // ID3D10StateBlock ////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// typedef interface ID3D10StateBlock ID3D10StateBlock; typedef interface ID3D10StateBlock *LPD3D10STATEBLOCK; // {0803425A-57F5-4dd6-9465-A87570834A08} DEFINE_GUID(IID_ID3D10StateBlock, 0x803425a, 0x57f5, 0x4dd6, 0x94, 0x65, 0xa8, 0x75, 0x70, 0x83, 0x4a, 0x8); #undef INTERFACE #define INTERFACE ID3D10StateBlock DECLARE_INTERFACE_(ID3D10StateBlock, IUnknown) { STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE; STDMETHOD_(ULONG, AddRef)(THIS) PURE; STDMETHOD_(ULONG, Release)(THIS) PURE; STDMETHOD(Capture)(THIS) PURE; STDMETHOD(Apply)(THIS) PURE; STDMETHOD(ReleaseAllDeviceObjects)(THIS) PURE; STDMETHOD(GetDevice)(THIS_ ID3D10Device **ppDevice) PURE; }; #ifdef __cplusplus extern "C" { #endif //__cplusplus //---------------------------------------------------------------------------- // D3D10_STATE_BLOCK_MASK and manipulation functions // ------------------------------------------------- // // These functions exist to facilitate working with the D3D10_STATE_BLOCK_MASK // structure. // // D3D10_STATE_BLOCK_MASK *pResult or *pMask // The state block mask to operate on // // D3D10_STATE_BLOCK_MASK *pA, *pB // The source state block masks for the binary union/intersect/difference // operations. // // D3D10_DEVICE_STATE_TYPES StateType // The specific state type to enable/disable/query // // UINT RangeStart, RangeLength, Entry // The specific bit or range of bits for a given state type to operate on. // Consult the comments for D3D10_DEVICE_STATE_TYPES and // D3D10_STATE_BLOCK_MASK for information on the valid bit ranges for // each state. // //---------------------------------------------------------------------------- HRESULT WINAPI D3D10StateBlockMaskUnion(D3D10_STATE_BLOCK_MASK *pA, D3D10_STATE_BLOCK_MASK *pB, D3D10_STATE_BLOCK_MASK *pResult); HRESULT WINAPI D3D10StateBlockMaskIntersect(D3D10_STATE_BLOCK_MASK *pA, D3D10_STATE_BLOCK_MASK *pB, D3D10_STATE_BLOCK_MASK *pResult); HRESULT WINAPI D3D10StateBlockMaskDifference(D3D10_STATE_BLOCK_MASK *pA, D3D10_STATE_BLOCK_MASK *pB, D3D10_STATE_BLOCK_MASK *pResult); HRESULT WINAPI D3D10StateBlockMaskEnableCapture(D3D10_STATE_BLOCK_MASK *pMask, D3D10_DEVICE_STATE_TYPES StateType, UINT RangeStart, UINT RangeLength); HRESULT WINAPI D3D10StateBlockMaskDisableCapture(D3D10_STATE_BLOCK_MASK *pMask, D3D10_DEVICE_STATE_TYPES StateType, UINT RangeStart, UINT RangeLength); HRESULT WINAPI D3D10StateBlockMaskEnableAll(D3D10_STATE_BLOCK_MASK *pMask); HRESULT WINAPI D3D10StateBlockMaskDisableAll(D3D10_STATE_BLOCK_MASK *pMask); BOOL WINAPI D3D10StateBlockMaskGetSetting(D3D10_STATE_BLOCK_MASK *pMask, D3D10_DEVICE_STATE_TYPES StateType, UINT Entry); //---------------------------------------------------------------------------- // D3D10CreateStateBlock // --------------------- // // Creates a state block object based on the mask settings specified // in a D3D10_STATE_BLOCK_MASK structure. // // ID3D10Device *pDevice // The device interface to associate with this state block // // D3D10_STATE_BLOCK_MASK *pStateBlockMask // A bit mask whose settings are used to generate a state block // object. // // ID3D10StateBlock **ppStateBlock // The resulting state block object. This object will save/restore // only those pieces of state that were set in the state block // bit mask //---------------------------------------------------------------------------- HRESULT WINAPI D3D10CreateStateBlock(ID3D10Device *pDevice, D3D10_STATE_BLOCK_MASK *pStateBlockMask, ID3D10StateBlock **ppStateBlock); #ifdef __cplusplus } #endif //__cplusplus //---------------------------------------------------------------------------- // D3D10_COMPILE & D3D10_EFFECT flags: // ------------------------------------- // // These flags are passed in when creating an effect, and affect // either compilation behavior or runtime effect behavior // // D3D10_EFFECT_COMPILE_CHILD_EFFECT // Compile this .fx file to a child effect. Child effects have no initializers // for any shared values as these are initialied in the master effect (pool). // // D3D10_EFFECT_COMPILE_ALLOW_SLOW_OPS // By default, performance mode is enabled. Performance mode disallows // mutable state objects by preventing non-literal expressions from appearing in // state object definitions. Specifying this flag will disable the mode and allow // for mutable state objects. // // D3D10_EFFECT_SINGLE_THREADED // Do not attempt to synchronize with other threads loading effects into the // same pool. // //---------------------------------------------------------------------------- #define D3D10_EFFECT_COMPILE_CHILD_EFFECT (1 << 0) #define D3D10_EFFECT_COMPILE_ALLOW_SLOW_OPS (1 << 1) #define D3D10_EFFECT_SINGLE_THREADED (1 << 3) //---------------------------------------------------------------------------- // D3D10_EFFECT_VARIABLE flags: // ---------------------------- // // These flags describe an effect variable (global or annotation), // and are returned in D3D10_EFFECT_VARIABLE_DESC::Flags. // // D3D10_EFFECT_VARIABLE_POOLED // Indicates that the this variable or constant buffer resides // in an effect pool. If this flag is not set, then the variable resides // in a standalone effect (if ID3D10Effect::GetPool returns NULL) // or a child effect (if ID3D10Effect::GetPool returns non-NULL) // // D3D10_EFFECT_VARIABLE_ANNOTATION // Indicates that this is an annotation on a technique, pass, or global // variable. Otherwise, this is a global variable. Annotations cannot // be shared. // // D3D10_EFFECT_VARIABLE_EXPLICIT_BIND_POINT // Indicates that the variable has been explicitly bound using the // register keyword. //---------------------------------------------------------------------------- #define D3D10_EFFECT_VARIABLE_POOLED (1 << 0) #define D3D10_EFFECT_VARIABLE_ANNOTATION (1 << 1) #define D3D10_EFFECT_VARIABLE_EXPLICIT_BIND_POINT (1 << 2) ////////////////////////////////////////////////////////////////////////////// // ID3D10EffectType ////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// //---------------------------------------------------------------------------- // D3D10_EFFECT_TYPE_DESC: // // Retrieved by ID3D10EffectType::GetDesc() //---------------------------------------------------------------------------- typedef struct _D3D10_EFFECT_TYPE_DESC { LPCSTR TypeName; // Name of the type // (e.g. "float4" or "MyStruct") D3D10_SHADER_VARIABLE_CLASS Class; // (e.g. scalar, vector, object, etc.) D3D10_SHADER_VARIABLE_TYPE Type; // (e.g. float, texture, vertexshader, etc.) UINT Elements; // Number of elements in this type // (0 if not an array) UINT Members; // Number of members // (0 if not a structure) UINT Rows; // Number of rows in this type // (0 if not a numeric primitive) UINT Columns; // Number of columns in this type // (0 if not a numeric primitive) UINT PackedSize; // Number of bytes required to represent // this data type, when tightly packed UINT UnpackedSize; // Number of bytes occupied by this data // type, when laid out in a constant buffer UINT Stride; // Number of bytes to seek between elements, // when laid out in a constant buffer } D3D10_EFFECT_TYPE_DESC; typedef interface ID3D10EffectType ID3D10EffectType; typedef interface ID3D10EffectType *LPD3D10EFFECTTYPE; // {4E9E1DDC-CD9D-4772-A837-00180B9B88FD} DEFINE_GUID(IID_ID3D10EffectType, 0x4e9e1ddc, 0xcd9d, 0x4772, 0xa8, 0x37, 0x0, 0x18, 0xb, 0x9b, 0x88, 0xfd); #undef INTERFACE #define INTERFACE ID3D10EffectType DECLARE_INTERFACE(ID3D10EffectType) { STDMETHOD_(BOOL, IsValid)(THIS) PURE; STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_TYPE_DESC *pDesc) PURE; STDMETHOD_(ID3D10EffectType*, GetMemberTypeByIndex)(THIS_ UINT Index) PURE; STDMETHOD_(ID3D10EffectType*, GetMemberTypeByName)(THIS_ LPCSTR Name) PURE; STDMETHOD_(ID3D10EffectType*, GetMemberTypeBySemantic)(THIS_ LPCSTR Semantic) PURE; STDMETHOD_(LPCSTR, GetMemberName)(THIS_ UINT Index) PURE; STDMETHOD_(LPCSTR, GetMemberSemantic)(THIS_ UINT Index) PURE; }; ////////////////////////////////////////////////////////////////////////////// // ID3D10EffectVariable ////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// //---------------------------------------------------------------------------- // D3D10_EFFECT_VARIABLE_DESC: // // Retrieved by ID3D10EffectVariable::GetDesc() //---------------------------------------------------------------------------- typedef struct _D3D10_EFFECT_VARIABLE_DESC { LPCSTR Name; // Name of this variable, annotation, // or structure member LPCSTR Semantic; // Semantic string of this variable // or structure member (NULL for // annotations or if not present) UINT Flags; // D3D10_EFFECT_VARIABLE_* flags UINT Annotations; // Number of annotations on this variable // (always 0 for annotations) UINT BufferOffset; // Offset into containing cbuffer or tbuffer // (always 0 for annotations or variables // not in constant buffers) UINT ExplicitBindPoint; // Used if the variable has been explicitly bound // using the register keyword. Check Flags for // D3D10_EFFECT_VARIABLE_EXPLICIT_BIND_POINT; } D3D10_EFFECT_VARIABLE_DESC; typedef interface ID3D10EffectVariable ID3D10EffectVariable; typedef interface ID3D10EffectVariable *LPD3D10EFFECTVARIABLE; // {AE897105-00E6-45bf-BB8E-281DD6DB8E1B} DEFINE_GUID(IID_ID3D10EffectVariable, 0xae897105, 0xe6, 0x45bf, 0xbb, 0x8e, 0x28, 0x1d, 0xd6, 0xdb, 0x8e, 0x1b); #undef INTERFACE #define INTERFACE ID3D10EffectVariable // Forward defines typedef interface ID3D10EffectScalarVariable ID3D10EffectScalarVariable; typedef interface ID3D10EffectVectorVariable ID3D10EffectVectorVariable; typedef interface ID3D10EffectMatrixVariable ID3D10EffectMatrixVariable; typedef interface ID3D10EffectStringVariable ID3D10EffectStringVariable; typedef interface ID3D10EffectShaderResourceVariable ID3D10EffectShaderResourceVariable; typedef interface ID3D10EffectRenderTargetViewVariable ID3D10EffectRenderTargetViewVariable; typedef interface ID3D10EffectDepthStencilViewVariable ID3D10EffectDepthStencilViewVariable; typedef interface ID3D10EffectConstantBuffer ID3D10EffectConstantBuffer; typedef interface ID3D10EffectShaderVariable ID3D10EffectShaderVariable; typedef interface ID3D10EffectBlendVariable ID3D10EffectBlendVariable; typedef interface ID3D10EffectDepthStencilVariable ID3D10EffectDepthStencilVariable; typedef interface ID3D10EffectRasterizerVariable ID3D10EffectRasterizerVariable; typedef interface ID3D10EffectSamplerVariable ID3D10EffectSamplerVariable; DECLARE_INTERFACE(ID3D10EffectVariable) { STDMETHOD_(BOOL, IsValid)(THIS) PURE; STDMETHOD_(ID3D10EffectType*, GetType)(THIS) PURE; STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *pDesc) PURE; STDMETHOD_(ID3D10EffectVariable*, GetAnnotationByIndex)(THIS_ UINT Index) PURE; STDMETHOD_(ID3D10EffectVariable*, GetAnnotationByName)(THIS_ LPCSTR Name) PURE; STDMETHOD_(ID3D10EffectVariable*, GetMemberByIndex)(THIS_ UINT Index) PURE; STDMETHOD_(ID3D10EffectVariable*, GetMemberByName)(THIS_ LPCSTR Name) PURE; STDMETHOD_(ID3D10EffectVariable*, GetMemberBySemantic)(THIS_ LPCSTR Semantic) PURE; STDMETHOD_(ID3D10EffectVariable*, GetElement)(THIS_ UINT Index) PURE; STDMETHOD_(ID3D10EffectConstantBuffer*, GetParentConstantBuffer)(THIS) PURE; STDMETHOD_(ID3D10EffectScalarVariable*, AsScalar)(THIS) PURE; STDMETHOD_(ID3D10EffectVectorVariable*, AsVector)(THIS) PURE; STDMETHOD_(ID3D10EffectMatrixVariable*, AsMatrix)(THIS) PURE; STDMETHOD_(ID3D10EffectStringVariable*, AsString)(THIS) PURE; STDMETHOD_(ID3D10EffectShaderResourceVariable*, AsShaderResource)(THIS) PURE; STDMETHOD_(ID3D10EffectRenderTargetViewVariable*, AsRenderTargetView)(THIS) PURE; STDMETHOD_(ID3D10EffectDepthStencilViewVariable*, AsDepthStencilView)(THIS) PURE; STDMETHOD_(ID3D10EffectConstantBuffer*, AsConstantBuffer)(THIS) PURE; STDMETHOD_(ID3D10EffectShaderVariable*, AsShader)(THIS) PURE; STDMETHOD_(ID3D10EffectBlendVariable*, AsBlend)(THIS) PURE; STDMETHOD_(ID3D10EffectDepthStencilVariable*, AsDepthStencil)(THIS) PURE; STDMETHOD_(ID3D10EffectRasterizerVariable*, AsRasterizer)(THIS) PURE; STDMETHOD_(ID3D10EffectSamplerVariable*, AsSampler)(THIS) PURE; STDMETHOD(SetRawValue)(THIS_ void *pData, UINT Offset, UINT Count) PURE; STDMETHOD(GetRawValue)(THIS_ void *pData, UINT Offset, UINT Count) PURE; }; ////////////////////////////////////////////////////////////////////////////// // ID3D10EffectScalarVariable //////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// typedef interface ID3D10EffectScalarVariable ID3D10EffectScalarVariable; typedef interface ID3D10EffectScalarVariable *LPD3D10EFFECTSCALARVARIABLE; // {00E48F7B-D2C8-49e8-A86C-022DEE53431F} DEFINE_GUID(IID_ID3D10EffectScalarVariable, 0xe48f7b, 0xd2c8, 0x49e8, 0xa8, 0x6c, 0x2, 0x2d, 0xee, 0x53, 0x43, 0x1f); #undef INTERFACE #define INTERFACE ID3D10EffectScalarVariable DECLARE_INTERFACE_(ID3D10EffectScalarVariable, ID3D10EffectVariable) { STDMETHOD_(BOOL, IsValid)(THIS) PURE; STDMETHOD_(ID3D10EffectType*, GetType)(THIS) PURE; STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *pDesc) PURE; STDMETHOD_(ID3D10EffectVariable*, GetAnnotationByIndex)(THIS_ UINT Index) PURE; STDMETHOD_(ID3D10EffectVariable*, GetAnnotationByName)(THIS_ LPCSTR Name) PURE; STDMETHOD_(ID3D10EffectVariable*, GetMemberByIndex)(THIS_ UINT Index) PURE; STDMETHOD_(ID3D10EffectVariable*, GetMemberByName)(THIS_ LPCSTR Name) PURE; STDMETHOD_(ID3D10EffectVariable*, GetMemberBySemantic)(THIS_ LPCSTR Semantic) PURE; STDMETHOD_(ID3D10EffectVariable*, GetElement)(THIS_ UINT Index) PURE; STDMETHOD_(ID3D10EffectConstantBuffer*, GetParentConstantBuffer)(THIS) PURE; STDMETHOD_(ID3D10EffectScalarVariable*, AsScalar)(THIS) PURE; STDMETHOD_(ID3D10EffectVectorVariable*, AsVector)(THIS) PURE; STDMETHOD_(ID3D10EffectMatrixVariable*, AsMatrix)(THIS) PURE; STDMETHOD_(ID3D10EffectStringVariable*, AsString)(THIS) PURE; STDMETHOD_(ID3D10EffectShaderResourceVariable*, AsShaderResource)(THIS) PURE; STDMETHOD_(ID3D10EffectRenderTargetViewVariable*, AsRenderTargetView)(THIS) PURE; STDMETHOD_(ID3D10EffectDepthStencilViewVariable*, AsDepthStencilView)(THIS) PURE; STDMETHOD_(ID3D10EffectConstantBuffer*, AsConstantBuffer)(THIS) PURE; STDMETHOD_(ID3D10EffectShaderVariable*, AsShader)(THIS) PURE; STDMETHOD_(ID3D10EffectBlendVariable*, AsBlend)(THIS) PURE; STDMETHOD_(ID3D10EffectDepthStencilVariable*, AsDepthStencil)(THIS) PURE; STDMETHOD_(ID3D10EffectRasterizerVariable*, AsRasterizer)(THIS) PURE; STDMETHOD_(ID3D10EffectSamplerVariable*, AsSampler)(THIS) PURE; STDMETHOD(SetRawValue)(THIS_ void *pData, UINT ByteOffset, UINT ByteCount) PURE; STDMETHOD(GetRawValue)(THIS_ void *pData, UINT ByteOffset, UINT ByteCount) PURE; STDMETHOD(SetFloat)(THIS_ float Value) PURE; STDMETHOD(GetFloat)(THIS_ float *pValue) PURE; STDMETHOD(SetFloatArray)(THIS_ float *pData, UINT Offset, UINT Count) PURE; STDMETHOD(GetFloatArray)(THIS_ float *pData, UINT Offset, UINT Count) PURE; STDMETHOD(SetInt)(THIS_ int Value) PURE; STDMETHOD(GetInt)(THIS_ int *pValue) PURE; STDMETHOD(SetIntArray)(THIS_ int *pData, UINT Offset, UINT Count) PURE; STDMETHOD(GetIntArray)(THIS_ int *pData, UINT Offset, UINT Count) PURE; STDMETHOD(SetBool)(THIS_ BOOL Value) PURE; STDMETHOD(GetBool)(THIS_ BOOL *pValue) PURE; STDMETHOD(SetBoolArray)(THIS_ BOOL *pData, UINT Offset, UINT Count) PURE; STDMETHOD(GetBoolArray)(THIS_ BOOL *pData, UINT Offset, UINT Count) PURE; }; ////////////////////////////////////////////////////////////////////////////// // ID3D10EffectVectorVariable //////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// typedef interface ID3D10EffectVectorVariable ID3D10EffectVectorVariable; typedef interface ID3D10EffectVectorVariable *LPD3D10EFFECTVECTORVARIABLE; // {62B98C44-1F82-4c67-BCD0-72CF8F217E81} DEFINE_GUID(IID_ID3D10EffectVectorVariable, 0x62b98c44, 0x1f82, 0x4c67, 0xbc, 0xd0, 0x72, 0xcf, 0x8f, 0x21, 0x7e, 0x81); #undef INTERFACE #define INTERFACE ID3D10EffectVectorVariable DECLARE_INTERFACE_(ID3D10EffectVectorVariable, ID3D10EffectVariable) { STDMETHOD_(BOOL, IsValid)(THIS) PURE; STDMETHOD_(ID3D10EffectType*, GetType)(THIS) PURE; STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *pDesc) PURE; STDMETHOD_(ID3D10EffectVariable*, GetAnnotationByIndex)(THIS_ UINT Index) PURE; STDMETHOD_(ID3D10EffectVariable*, GetAnnotationByName)(THIS_ LPCSTR Name) PURE; STDMETHOD_(ID3D10EffectVariable*, GetMemberByIndex)(THIS_ UINT Index) PURE; STDMETHOD_(ID3D10EffectVariable*, GetMemberByName)(THIS_ LPCSTR Name) PURE; STDMETHOD_(ID3D10EffectVariable*, GetMemberBySemantic)(THIS_ LPCSTR Semantic) PURE; STDMETHOD_(ID3D10EffectVariable*, GetElement)(THIS_ UINT Index) PURE; STDMETHOD_(ID3D10EffectConstantBuffer*, GetParentConstantBuffer)(THIS) PURE; STDMETHOD_(ID3D10EffectScalarVariable*, AsScalar)(THIS) PURE; STDMETHOD_(ID3D10EffectVectorVariable*, AsVector)(THIS) PURE; STDMETHOD_(ID3D10EffectMatrixVariable*, AsMatrix)(THIS) PURE; STDMETHOD_(ID3D10EffectStringVariable*, AsString)(THIS) PURE; STDMETHOD_(ID3D10EffectShaderResourceVariable*, AsShaderResource)(THIS) PURE; STDMETHOD_(ID3D10EffectRenderTargetViewVariable*, AsRenderTargetView)(THIS) PURE; STDMETHOD_(ID3D10EffectDepthStencilViewVariable*, AsDepthStencilView)(THIS) PURE; STDMETHOD_(ID3D10EffectConstantBuffer*, AsConstantBuffer)(THIS) PURE; STDMETHOD_(ID3D10EffectShaderVariable*, AsShader)(THIS) PURE; STDMETHOD_(ID3D10EffectBlendVariable*, AsBlend)(THIS) PURE; STDMETHOD_(ID3D10EffectDepthStencilVariable*, AsDepthStencil)(THIS) PURE; STDMETHOD_(ID3D10EffectRasterizerVariable*, AsRasterizer)(THIS) PURE; STDMETHOD_(ID3D10EffectSamplerVariable*, AsSampler)(THIS) PURE; STDMETHOD(SetRawValue)(THIS_ void *pData, UINT ByteOffset, UINT ByteCount) PURE; STDMETHOD(GetRawValue)(THIS_ void *pData, UINT ByteOffset, UINT ByteCount) PURE; STDMETHOD(SetBoolVector) (THIS_ BOOL *pData) PURE; STDMETHOD(SetIntVector) (THIS_ int *pData) PURE; STDMETHOD(SetFloatVector)(THIS_ float *pData) PURE; STDMETHOD(GetBoolVector) (THIS_ BOOL *pData) PURE; STDMETHOD(GetIntVector) (THIS_ int *pData) PURE; STDMETHOD(GetFloatVector)(THIS_ float *pData) PURE; STDMETHOD(SetBoolVectorArray) (THIS_ BOOL *pData, UINT Offset, UINT Count) PURE; STDMETHOD(SetIntVectorArray) (THIS_ int *pData, UINT Offset, UINT Count) PURE; STDMETHOD(SetFloatVectorArray)(THIS_ float *pData, UINT Offset, UINT Count) PURE; STDMETHOD(GetBoolVectorArray) (THIS_ BOOL *pData, UINT Offset, UINT Count) PURE; STDMETHOD(GetIntVectorArray) (THIS_ int *pData, UINT Offset, UINT Count) PURE; STDMETHOD(GetFloatVectorArray)(THIS_ float *pData, UINT Offset, UINT Count) PURE; }; ////////////////////////////////////////////////////////////////////////////// // ID3D10EffectMatrixVariable //////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// typedef interface ID3D10EffectMatrixVariable ID3D10EffectMatrixVariable; typedef interface ID3D10EffectMatrixVariable *LPD3D10EFFECTMATRIXVARIABLE; // {50666C24-B82F-4eed-A172-5B6E7E8522E0} DEFINE_GUID(IID_ID3D10EffectMatrixVariable, 0x50666c24, 0xb82f, 0x4eed, 0xa1, 0x72, 0x5b, 0x6e, 0x7e, 0x85, 0x22, 0xe0); #undef INTERFACE #define INTERFACE ID3D10EffectMatrixVariable DECLARE_INTERFACE_(ID3D10EffectMatrixVariable, ID3D10EffectVariable) { STDMETHOD_(BOOL, IsValid)(THIS) PURE; STDMETHOD_(ID3D10EffectType*, GetType)(THIS) PURE; STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *pDesc) PURE; STDMETHOD_(ID3D10EffectVariable*, GetAnnotationByIndex)(THIS_ UINT Index) PURE; STDMETHOD_(ID3D10EffectVariable*, GetAnnotationByName)(THIS_ LPCSTR Name) PURE; STDMETHOD_(ID3D10EffectVariable*, GetMemberByIndex)(THIS_ UINT Index) PURE; STDMETHOD_(ID3D10EffectVariable*, GetMemberByName)(THIS_ LPCSTR Name) PURE; STDMETHOD_(ID3D10EffectVariable*, GetMemberBySemantic)(THIS_ LPCSTR Semantic) PURE; STDMETHOD_(ID3D10EffectVariable*, GetElement)(THIS_ UINT Index) PURE; STDMETHOD_(ID3D10EffectConstantBuffer*, GetParentConstantBuffer)(THIS) PURE; STDMETHOD_(ID3D10EffectScalarVariable*, AsScalar)(THIS) PURE; STDMETHOD_(ID3D10EffectVectorVariable*, AsVector)(THIS) PURE; STDMETHOD_(ID3D10EffectMatrixVariable*, AsMatrix)(THIS) PURE; STDMETHOD_(ID3D10EffectStringVariable*, AsString)(THIS) PURE; STDMETHOD_(ID3D10EffectShaderResourceVariable*, AsShaderResource)(THIS) PURE; STDMETHOD_(ID3D10EffectRenderTargetViewVariable*, AsRenderTargetView)(THIS) PURE; STDMETHOD_(ID3D10EffectDepthStencilViewVariable*, AsDepthStencilView)(THIS) PURE; STDMETHOD_(ID3D10EffectConstantBuffer*, AsConstantBuffer)(THIS) PURE; STDMETHOD_(ID3D10EffectShaderVariable*, AsShader)(THIS) PURE; STDMETHOD_(ID3D10EffectBlendVariable*, AsBlend)(THIS) PURE; STDMETHOD_(ID3D10EffectDepthStencilVariable*, AsDepthStencil)(THIS) PURE; STDMETHOD_(ID3D10EffectRasterizerVariable*, AsRasterizer)(THIS) PURE; STDMETHOD_(ID3D10EffectSamplerVariable*, AsSampler)(THIS) PURE; STDMETHOD(SetRawValue)(THIS_ void *pData, UINT ByteOffset, UINT ByteCount) PURE; STDMETHOD(GetRawValue)(THIS_ void *pData, UINT ByteOffset, UINT ByteCount) PURE; STDMETHOD(SetMatrix)(THIS_ float *pData) PURE; STDMETHOD(GetMatrix)(THIS_ float *pData) PURE; STDMETHOD(SetMatrixArray)(THIS_ float *pData, UINT Offset, UINT Count) PURE; STDMETHOD(GetMatrixArray)(THIS_ float *pData, UINT Offset, UINT Count) PURE; STDMETHOD(SetMatrixTranspose)(THIS_ float *pData) PURE; STDMETHOD(GetMatrixTranspose)(THIS_ float *pData) PURE; STDMETHOD(SetMatrixTransposeArray)(THIS_ float *pData, UINT Offset, UINT Count) PURE; STDMETHOD(GetMatrixTransposeArray)(THIS_ float *pData, UINT Offset, UINT Count) PURE; }; ////////////////////////////////////////////////////////////////////////////// // ID3D10EffectStringVariable //////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// typedef interface ID3D10EffectStringVariable ID3D10EffectStringVariable; typedef interface ID3D10EffectStringVariable *LPD3D10EFFECTSTRINGVARIABLE; // {71417501-8DF9-4e0a-A78A-255F9756BAFF} DEFINE_GUID(IID_ID3D10EffectStringVariable, 0x71417501, 0x8df9, 0x4e0a, 0xa7, 0x8a, 0x25, 0x5f, 0x97, 0x56, 0xba, 0xff); #undef INTERFACE #define INTERFACE ID3D10EffectStringVariable DECLARE_INTERFACE_(ID3D10EffectStringVariable, ID3D10EffectVariable) { STDMETHOD_(BOOL, IsValid)(THIS) PURE; STDMETHOD_(ID3D10EffectType*, GetType)(THIS) PURE; STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *pDesc) PURE; STDMETHOD_(ID3D10EffectVariable*, GetAnnotationByIndex)(THIS_ UINT Index) PURE; STDMETHOD_(ID3D10EffectVariable*, GetAnnotationByName)(THIS_ LPCSTR Name) PURE; STDMETHOD_(ID3D10EffectVariable*, GetMemberByIndex)(THIS_ UINT Index) PURE; STDMETHOD_(ID3D10EffectVariable*, GetMemberByName)(THIS_ LPCSTR Name) PURE; STDMETHOD_(ID3D10EffectVariable*, GetMemberBySemantic)(THIS_ LPCSTR Semantic) PURE; STDMETHOD_(ID3D10EffectVariable*, GetElement)(THIS_ UINT Index) PURE; STDMETHOD_(ID3D10EffectConstantBuffer*, GetParentConstantBuffer)(THIS) PURE; STDMETHOD_(ID3D10EffectScalarVariable*, AsScalar)(THIS) PURE; STDMETHOD_(ID3D10EffectVectorVariable*, AsVector)(THIS) PURE; STDMETHOD_(ID3D10EffectMatrixVariable*, AsMatrix)(THIS) PURE; STDMETHOD_(ID3D10EffectStringVariable*, AsString)(THIS) PURE; STDMETHOD_(ID3D10EffectShaderResourceVariable*, AsShaderResource)(THIS) PURE; STDMETHOD_(ID3D10EffectRenderTargetViewVariable*, AsRenderTargetView)(THIS) PURE; STDMETHOD_(ID3D10EffectDepthStencilViewVariable*, AsDepthStencilView)(THIS) PURE; STDMETHOD_(ID3D10EffectConstantBuffer*, AsConstantBuffer)(THIS) PURE; STDMETHOD_(ID3D10EffectShaderVariable*, AsShader)(THIS) PURE; STDMETHOD_(ID3D10EffectBlendVariable*, AsBlend)(THIS) PURE; STDMETHOD_(ID3D10EffectDepthStencilVariable*, AsDepthStencil)(THIS) PURE; STDMETHOD_(ID3D10EffectRasterizerVariable*, AsRasterizer)(THIS) PURE; STDMETHOD_(ID3D10EffectSamplerVariable*, AsSampler)(THIS) PURE; STDMETHOD(SetRawValue)(THIS_ void *pData, UINT Offset, UINT Count) PURE; STDMETHOD(GetRawValue)(THIS_ void *pData, UINT Offset, UINT Count) PURE; STDMETHOD(GetString)(THIS_ LPCSTR *ppString) PURE; STDMETHOD(GetStringArray)(THIS_ LPCSTR *ppStrings, UINT Offset, UINT Count) PURE; }; ////////////////////////////////////////////////////////////////////////////// // ID3D10EffectShaderResourceVariable //////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// typedef interface ID3D10EffectShaderResourceVariable ID3D10EffectShaderResourceVariable; typedef interface ID3D10EffectShaderResourceVariable *LPD3D10EFFECTSHADERRESOURCEVARIABLE; // {C0A7157B-D872-4b1d-8073-EFC2ACD4B1FC} DEFINE_GUID(IID_ID3D10EffectShaderResourceVariable, 0xc0a7157b, 0xd872, 0x4b1d, 0x80, 0x73, 0xef, 0xc2, 0xac, 0xd4, 0xb1, 0xfc); #undef INTERFACE #define INTERFACE ID3D10EffectShaderResourceVariable DECLARE_INTERFACE_(ID3D10EffectShaderResourceVariable, ID3D10EffectVariable) { STDMETHOD_(BOOL, IsValid)(THIS) PURE; STDMETHOD_(ID3D10EffectType*, GetType)(THIS) PURE; STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *pDesc) PURE; STDMETHOD_(ID3D10EffectVariable*, GetAnnotationByIndex)(THIS_ UINT Index) PURE; STDMETHOD_(ID3D10EffectVariable*, GetAnnotationByName)(THIS_ LPCSTR Name) PURE; STDMETHOD_(ID3D10EffectVariable*, GetMemberByIndex)(THIS_ UINT Index) PURE; STDMETHOD_(ID3D10EffectVariable*, GetMemberByName)(THIS_ LPCSTR Name) PURE; STDMETHOD_(ID3D10EffectVariable*, GetMemberBySemantic)(THIS_ LPCSTR Semantic) PURE; STDMETHOD_(ID3D10EffectVariable*, GetElement)(THIS_ UINT Index) PURE; STDMETHOD_(ID3D10EffectConstantBuffer*, GetParentConstantBuffer)(THIS) PURE; STDMETHOD_(ID3D10EffectScalarVariable*, AsScalar)(THIS) PURE; STDMETHOD_(ID3D10EffectVectorVariable*, AsVector)(THIS) PURE; STDMETHOD_(ID3D10EffectMatrixVariable*, AsMatrix)(THIS) PURE; STDMETHOD_(ID3D10EffectStringVariable*, AsString)(THIS) PURE; STDMETHOD_(ID3D10EffectShaderResourceVariable*, AsShaderResource)(THIS) PURE; STDMETHOD_(ID3D10EffectRenderTargetViewVariable*, AsRenderTargetView)(THIS) PURE; STDMETHOD_(ID3D10EffectDepthStencilViewVariable*, AsDepthStencilView)(THIS) PURE; STDMETHOD_(ID3D10EffectConstantBuffer*, AsConstantBuffer)(THIS) PURE; STDMETHOD_(ID3D10EffectShaderVariable*, AsShader)(THIS) PURE; STDMETHOD_(ID3D10EffectBlendVariable*, AsBlend)(THIS) PURE; STDMETHOD_(ID3D10EffectDepthStencilVariable*, AsDepthStencil)(THIS) PURE; STDMETHOD_(ID3D10EffectRasterizerVariable*, AsRasterizer)(THIS) PURE; STDMETHOD_(ID3D10EffectSamplerVariable*, AsSampler)(THIS) PURE; STDMETHOD(SetRawValue)(THIS_ void *pData, UINT Offset, UINT Count) PURE; STDMETHOD(GetRawValue)(THIS_ void *pData, UINT Offset, UINT Count) PURE; STDMETHOD(SetResource)(THIS_ ID3D10ShaderResourceView *pResource) PURE; STDMETHOD(GetResource)(THIS_ ID3D10ShaderResourceView **ppResource) PURE; STDMETHOD(SetResourceArray)(THIS_ ID3D10ShaderResourceView **ppResources, UINT Offset, UINT Count) PURE; STDMETHOD(GetResourceArray)(THIS_ ID3D10ShaderResourceView **ppResources, UINT Offset, UINT Count) PURE; }; ////////////////////////////////////////////////////////////////////////////// // ID3D10EffectRenderTargetViewVariable ////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// typedef interface ID3D10EffectRenderTargetViewVariable ID3D10EffectRenderTargetViewVariable; typedef interface ID3D10EffectRenderTargetViewVariable *LPD3D10EFFECTRENDERTARGETVIEWVARIABLE; // {28CA0CC3-C2C9-40bb-B57F-67B737122B17} DEFINE_GUID(IID_ID3D10EffectRenderTargetViewVariable, 0x28ca0cc3, 0xc2c9, 0x40bb, 0xb5, 0x7f, 0x67, 0xb7, 0x37, 0x12, 0x2b, 0x17); #undef INTERFACE #define INTERFACE ID3D10EffectRenderTargetViewVariable DECLARE_INTERFACE_(ID3D10EffectRenderTargetViewVariable, ID3D10EffectVariable) { STDMETHOD_(BOOL, IsValid)(THIS) PURE; STDMETHOD_(ID3D10EffectType*, GetType)(THIS) PURE; STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *pDesc) PURE; STDMETHOD_(ID3D10EffectVariable*, GetAnnotationByIndex)(THIS_ UINT Index) PURE; STDMETHOD_(ID3D10EffectVariable*, GetAnnotationByName)(THIS_ LPCSTR Name) PURE; STDMETHOD_(ID3D10EffectVariable*, GetMemberByIndex)(THIS_ UINT Index) PURE; STDMETHOD_(ID3D10EffectVariable*, GetMemberByName)(THIS_ LPCSTR Name) PURE; STDMETHOD_(ID3D10EffectVariable*, GetMemberBySemantic)(THIS_ LPCSTR Semantic) PURE; STDMETHOD_(ID3D10EffectVariable*, GetElement)(THIS_ UINT Index) PURE; STDMETHOD_(ID3D10EffectConstantBuffer*, GetParentConstantBuffer)(THIS) PURE; STDMETHOD_(ID3D10EffectScalarVariable*, AsScalar)(THIS) PURE; STDMETHOD_(ID3D10EffectVectorVariable*, AsVector)(THIS) PURE; STDMETHOD_(ID3D10EffectMatrixVariable*, AsMatrix)(THIS) PURE; STDMETHOD_(ID3D10EffectStringVariable*, AsString)(THIS) PURE; STDMETHOD_(ID3D10EffectShaderResourceVariable*, AsShaderResource)(THIS) PURE; STDMETHOD_(ID3D10EffectRenderTargetViewVariable*, AsRenderTargetView)(THIS) PURE; STDMETHOD_(ID3D10EffectDepthStencilViewVariable*, AsDepthStencilView)(THIS) PURE; STDMETHOD_(ID3D10EffectConstantBuffer*, AsConstantBuffer)(THIS) PURE; STDMETHOD_(ID3D10EffectShaderVariable*, AsShader)(THIS) PURE; STDMETHOD_(ID3D10EffectBlendVariable*, AsBlend)(THIS) PURE; STDMETHOD_(ID3D10EffectDepthStencilVariable*, AsDepthStencil)(THIS) PURE; STDMETHOD_(ID3D10EffectRasterizerVariable*, AsRasterizer)(THIS) PURE; STDMETHOD_(ID3D10EffectSamplerVariable*, AsSampler)(THIS) PURE; STDMETHOD(SetRawValue)(THIS_ void *pData, UINT Offset, UINT Count) PURE; STDMETHOD(GetRawValue)(THIS_ void *pData, UINT Offset, UINT Count) PURE; STDMETHOD(SetRenderTarget)(THIS_ ID3D10RenderTargetView *pResource) PURE; STDMETHOD(GetRenderTarget)(THIS_ ID3D10RenderTargetView **ppResource) PURE; STDMETHOD(SetRenderTargetArray)(THIS_ ID3D10RenderTargetView **ppResources, UINT Offset, UINT Count) PURE; STDMETHOD(GetRenderTargetArray)(THIS_ ID3D10RenderTargetView **ppResources, UINT Offset, UINT Count) PURE; }; ////////////////////////////////////////////////////////////////////////////// // ID3D10EffectDepthStencilViewVariable ////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// typedef interface ID3D10EffectDepthStencilViewVariable ID3D10EffectDepthStencilViewVariable; typedef interface ID3D10EffectDepthStencilViewVariable *LPD3D10EFFECTDEPTHSTENCILVIEWVARIABLE; // {3E02C918-CC79-4985-B622-2D92AD701623} DEFINE_GUID(IID_ID3D10EffectDepthStencilViewVariable, 0x3e02c918, 0xcc79, 0x4985, 0xb6, 0x22, 0x2d, 0x92, 0xad, 0x70, 0x16, 0x23); #undef INTERFACE #define INTERFACE ID3D10EffectDepthStencilViewVariable DECLARE_INTERFACE_(ID3D10EffectDepthStencilViewVariable, ID3D10EffectVariable) { STDMETHOD_(BOOL, IsValid)(THIS) PURE; STDMETHOD_(ID3D10EffectType*, GetType)(THIS) PURE; STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *pDesc) PURE; STDMETHOD_(ID3D10EffectVariable*, GetAnnotationByIndex)(THIS_ UINT Index) PURE; STDMETHOD_(ID3D10EffectVariable*, GetAnnotationByName)(THIS_ LPCSTR Name) PURE; STDMETHOD_(ID3D10EffectVariable*, GetMemberByIndex)(THIS_ UINT Index) PURE; STDMETHOD_(ID3D10EffectVariable*, GetMemberByName)(THIS_ LPCSTR Name) PURE; STDMETHOD_(ID3D10EffectVariable*, GetMemberBySemantic)(THIS_ LPCSTR Semantic) PURE; STDMETHOD_(ID3D10EffectVariable*, GetElement)(THIS_ UINT Index) PURE; STDMETHOD_(ID3D10EffectConstantBuffer*, GetParentConstantBuffer)(THIS) PURE; STDMETHOD_(ID3D10EffectScalarVariable*, AsScalar)(THIS) PURE; STDMETHOD_(ID3D10EffectVectorVariable*, AsVector)(THIS) PURE; STDMETHOD_(ID3D10EffectMatrixVariable*, AsMatrix)(THIS) PURE; STDMETHOD_(ID3D10EffectStringVariable*, AsString)(THIS) PURE; STDMETHOD_(ID3D10EffectShaderResourceVariable*, AsShaderResource)(THIS) PURE; STDMETHOD_(ID3D10EffectRenderTargetViewVariable*, AsRenderTargetView)(THIS) PURE; STDMETHOD_(ID3D10EffectDepthStencilViewVariable*, AsDepthStencilView)(THIS) PURE; STDMETHOD_(ID3D10EffectConstantBuffer*, AsConstantBuffer)(THIS) PURE; STDMETHOD_(ID3D10EffectShaderVariable*, AsShader)(THIS) PURE; STDMETHOD_(ID3D10EffectBlendVariable*, AsBlend)(THIS) PURE; STDMETHOD_(ID3D10EffectDepthStencilVariable*, AsDepthStencil)(THIS) PURE; STDMETHOD_(ID3D10EffectRasterizerVariable*, AsRasterizer)(THIS) PURE; STDMETHOD_(ID3D10EffectSamplerVariable*, AsSampler)(THIS) PURE; STDMETHOD(SetRawValue)(THIS_ void *pData, UINT Offset, UINT Count) PURE; STDMETHOD(GetRawValue)(THIS_ void *pData, UINT Offset, UINT Count) PURE; STDMETHOD(SetDepthStencil)(THIS_ ID3D10DepthStencilView *pResource) PURE; STDMETHOD(GetDepthStencil)(THIS_ ID3D10DepthStencilView **ppResource) PURE; STDMETHOD(SetDepthStencilArray)(THIS_ ID3D10DepthStencilView **ppResources, UINT Offset, UINT Count) PURE; STDMETHOD(GetDepthStencilArray)(THIS_ ID3D10DepthStencilView **ppResources, UINT Offset, UINT Count) PURE; }; ////////////////////////////////////////////////////////////////////////////// // ID3D10EffectConstantBuffer //////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// typedef interface ID3D10EffectConstantBuffer ID3D10EffectConstantBuffer; typedef interface ID3D10EffectConstantBuffer *LPD3D10EFFECTCONSTANTBUFFER; // {56648F4D-CC8B-4444-A5AD-B5A3D76E91B3} DEFINE_GUID(IID_ID3D10EffectConstantBuffer, 0x56648f4d, 0xcc8b, 0x4444, 0xa5, 0xad, 0xb5, 0xa3, 0xd7, 0x6e, 0x91, 0xb3); #undef INTERFACE #define INTERFACE ID3D10EffectConstantBuffer DECLARE_INTERFACE_(ID3D10EffectConstantBuffer, ID3D10EffectVariable) { STDMETHOD_(ID3D10EffectType*, GetType)(THIS) PURE; STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *pDesc) PURE; STDMETHOD_(ID3D10EffectVariable*, GetAnnotationByIndex)(THIS_ UINT Index) PURE; STDMETHOD_(ID3D10EffectVariable*, GetAnnotationByName)(THIS_ LPCSTR Name) PURE; STDMETHOD_(ID3D10EffectVariable*, GetMemberByIndex)(THIS_ UINT Index) PURE; STDMETHOD_(ID3D10EffectVariable*, GetMemberByName)(THIS_ LPCSTR Name) PURE; STDMETHOD_(ID3D10EffectVariable*, GetMemberBySemantic)(THIS_ LPCSTR Semantic) PURE; STDMETHOD_(ID3D10EffectVariable*, GetElement)(THIS_ UINT Index) PURE; STDMETHOD_(ID3D10EffectConstantBuffer*, GetParentConstantBuffer)(THIS) PURE; STDMETHOD_(ID3D10EffectScalarVariable*, AsScalar)(THIS) PURE; STDMETHOD_(ID3D10EffectVectorVariable*, AsVector)(THIS) PURE; STDMETHOD_(ID3D10EffectMatrixVariable*, AsMatrix)(THIS) PURE; STDMETHOD_(ID3D10EffectStringVariable*, AsString)(THIS) PURE; STDMETHOD_(ID3D10EffectShaderResourceVariable*, AsShaderResource)(THIS) PURE; STDMETHOD_(ID3D10EffectRenderTargetViewVariable*, AsRenderTargetView)(THIS) PURE; STDMETHOD_(ID3D10EffectDepthStencilViewVariable*, AsDepthStencilView)(THIS) PURE; STDMETHOD_(ID3D10EffectConstantBuffer*, AsConstantBuffer)(THIS) PURE; STDMETHOD_(ID3D10EffectShaderVariable*, AsShader)(THIS) PURE; STDMETHOD_(ID3D10EffectBlendVariable*, AsBlend)(THIS) PURE; STDMETHOD_(ID3D10EffectDepthStencilVariable*, AsDepthStencil)(THIS) PURE; STDMETHOD_(ID3D10EffectRasterizerVariable*, AsRasterizer)(THIS) PURE; STDMETHOD_(ID3D10EffectSamplerVariable*, AsSampler)(THIS) PURE; STDMETHOD(SetRawValue)(THIS_ void *pData, UINT Offset, UINT Count) PURE; STDMETHOD(GetRawValue)(THIS_ void *pData, UINT Offset, UINT Count) PURE; STDMETHOD(SetConstantBuffer)(THIS_ ID3D10Buffer *pConstantBuffer) PURE; STDMETHOD(GetConstantBuffer)(THIS_ ID3D10Buffer **ppConstantBuffer) PURE; STDMETHOD(SetTextureBuffer)(THIS_ ID3D10ShaderResourceView *pTextureBuffer) PURE; STDMETHOD(GetTextureBuffer)(THIS_ ID3D10ShaderResourceView **ppTextureBuffer) PURE; }; ////////////////////////////////////////////////////////////////////////////// // ID3D10EffectShaderVariable //////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// //---------------------------------------------------------------------------- // D3D10_EFFECT_SHADER_DESC: // // Retrieved by ID3D10EffectShaderVariable::GetShaderDesc() //---------------------------------------------------------------------------- typedef struct _D3D10_EFFECT_SHADER_DESC { CONST BYTE *pInputSignature; // Passed into CreateInputLayout, // valid on VS and GS only BOOL IsInline; // Is this an anonymous shader variable // resulting from an inline shader assignment? // -- The following fields are not valid after Optimize() -- CONST BYTE *pBytecode; // Shader bytecode UINT BytecodeLength; LPCSTR SODecl; // Stream out declaration string (for GS with SO) UINT NumInputSignatureEntries; // Number of entries in the input signature UINT NumOutputSignatureEntries; // Number of entries in the output signature } D3D10_EFFECT_SHADER_DESC; typedef interface ID3D10EffectShaderVariable ID3D10EffectShaderVariable; typedef interface ID3D10EffectShaderVariable *LPD3D10EFFECTSHADERVARIABLE; // {80849279-C799-4797-8C33-0407A07D9E06} DEFINE_GUID(IID_ID3D10EffectShaderVariable, 0x80849279, 0xc799, 0x4797, 0x8c, 0x33, 0x4, 0x7, 0xa0, 0x7d, 0x9e, 0x6); #undef INTERFACE #define INTERFACE ID3D10EffectShaderVariable DECLARE_INTERFACE_(ID3D10EffectShaderVariable, ID3D10EffectVariable) { STDMETHOD_(ID3D10EffectType*, GetType)(THIS) PURE; STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *pDesc) PURE; STDMETHOD_(ID3D10EffectVariable*, GetAnnotationByIndex)(THIS_ UINT Index) PURE; STDMETHOD_(ID3D10EffectVariable*, GetAnnotationByName)(THIS_ LPCSTR Name) PURE; STDMETHOD_(ID3D10EffectVariable*, GetMemberByIndex)(THIS_ UINT Index) PURE; STDMETHOD_(ID3D10EffectVariable*, GetMemberByName)(THIS_ LPCSTR Name) PURE; STDMETHOD_(ID3D10EffectVariable*, GetMemberBySemantic)(THIS_ LPCSTR Semantic) PURE; STDMETHOD_(ID3D10EffectVariable*, GetElement)(THIS_ UINT Index) PURE; STDMETHOD_(ID3D10EffectConstantBuffer*, GetParentConstantBuffer)(THIS) PURE; STDMETHOD_(ID3D10EffectScalarVariable*, AsScalar)(THIS) PURE; STDMETHOD_(ID3D10EffectVectorVariable*, AsVector)(THIS) PURE; STDMETHOD_(ID3D10EffectMatrixVariable*, AsMatrix)(THIS) PURE; STDMETHOD_(ID3D10EffectStringVariable*, AsString)(THIS) PURE; STDMETHOD_(ID3D10EffectShaderResourceVariable*, AsShaderResource)(THIS) PURE; STDMETHOD_(ID3D10EffectRenderTargetViewVariable*, AsRenderTargetView)(THIS) PURE; STDMETHOD_(ID3D10EffectDepthStencilViewVariable*, AsDepthStencilView)(THIS) PURE; STDMETHOD_(ID3D10EffectConstantBuffer*, AsConstantBuffer)(THIS) PURE; STDMETHOD_(ID3D10EffectShaderVariable*, AsShader)(THIS) PURE; STDMETHOD_(ID3D10EffectBlendVariable*, AsBlend)(THIS) PURE; STDMETHOD_(ID3D10EffectDepthStencilVariable*, AsDepthStencil)(THIS) PURE; STDMETHOD_(ID3D10EffectRasterizerVariable*, AsRasterizer)(THIS) PURE; STDMETHOD_(ID3D10EffectSamplerVariable*, AsSampler)(THIS) PURE; STDMETHOD(SetRawValue)(THIS_ void *pData, UINT Offset, UINT Count) PURE; STDMETHOD(GetRawValue)(THIS_ void *pData, UINT Offset, UINT Count) PURE; STDMETHOD(GetShaderDesc)(THIS_ UINT ShaderIndex, D3D10_EFFECT_SHADER_DESC *pDesc) PURE; STDMETHOD(GetVertexShader)(THIS_ UINT ShaderIndex, ID3D10VertexShader **ppVS) PURE; STDMETHOD(GetGeometryShader)(THIS_ UINT ShaderIndex, ID3D10GeometryShader **ppGS) PURE; STDMETHOD(GetPixelShader)(THIS_ UINT ShaderIndex, ID3D10PixelShader **ppPS) PURE; STDMETHOD(GetInputSignatureElementDesc)(THIS_ UINT ShaderIndex, UINT Element, D3D10_SIGNATURE_PARAMETER_DESC *pDesc) PURE; STDMETHOD(GetOutputSignatureElementDesc)(THIS_ UINT ShaderIndex, UINT Element, D3D10_SIGNATURE_PARAMETER_DESC *pDesc) PURE; }; ////////////////////////////////////////////////////////////////////////////// // ID3D10EffectBlendVariable ///////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// typedef interface ID3D10EffectBlendVariable ID3D10EffectBlendVariable; typedef interface ID3D10EffectBlendVariable *LPD3D10EFFECTBLENDVARIABLE; // {1FCD2294-DF6D-4eae-86B3-0E9160CFB07B} DEFINE_GUID(IID_ID3D10EffectBlendVariable, 0x1fcd2294, 0xdf6d, 0x4eae, 0x86, 0xb3, 0xe, 0x91, 0x60, 0xcf, 0xb0, 0x7b); #undef INTERFACE #define INTERFACE ID3D10EffectBlendVariable DECLARE_INTERFACE_(ID3D10EffectBlendVariable, ID3D10EffectVariable) { STDMETHOD_(ID3D10EffectType*, GetType)(THIS) PURE; STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *pDesc) PURE; STDMETHOD_(ID3D10EffectVariable*, GetAnnotationByIndex)(THIS_ UINT Index) PURE; STDMETHOD_(ID3D10EffectVariable*, GetAnnotationByName)(THIS_ LPCSTR Name) PURE; STDMETHOD_(ID3D10EffectVariable*, GetMemberByIndex)(THIS_ UINT Index) PURE; STDMETHOD_(ID3D10EffectVariable*, GetMemberByName)(THIS_ LPCSTR Name) PURE; STDMETHOD_(ID3D10EffectVariable*, GetMemberBySemantic)(THIS_ LPCSTR Semantic) PURE; STDMETHOD_(ID3D10EffectVariable*, GetElement)(THIS_ UINT Index) PURE; STDMETHOD_(ID3D10EffectConstantBuffer*, GetParentConstantBuffer)(THIS) PURE; STDMETHOD_(ID3D10EffectScalarVariable*, AsScalar)(THIS) PURE; STDMETHOD_(ID3D10EffectVectorVariable*, AsVector)(THIS) PURE; STDMETHOD_(ID3D10EffectMatrixVariable*, AsMatrix)(THIS) PURE; STDMETHOD_(ID3D10EffectStringVariable*, AsString)(THIS) PURE; STDMETHOD_(ID3D10EffectShaderResourceVariable*, AsShaderResource)(THIS) PURE; STDMETHOD_(ID3D10EffectRenderTargetViewVariable*, AsRenderTargetView)(THIS) PURE; STDMETHOD_(ID3D10EffectDepthStencilViewVariable*, AsDepthStencilView)(THIS) PURE; STDMETHOD_(ID3D10EffectConstantBuffer*, AsConstantBuffer)(THIS) PURE; STDMETHOD_(ID3D10EffectShaderVariable*, AsShader)(THIS) PURE; STDMETHOD_(ID3D10EffectBlendVariable*, AsBlend)(THIS) PURE; STDMETHOD_(ID3D10EffectDepthStencilVariable*, AsDepthStencil)(THIS) PURE; STDMETHOD_(ID3D10EffectRasterizerVariable*, AsRasterizer)(THIS) PURE; STDMETHOD_(ID3D10EffectSamplerVariable*, AsSampler)(THIS) PURE; STDMETHOD(SetRawValue)(THIS_ void *pData, UINT Offset, UINT Count) PURE; STDMETHOD(GetRawValue)(THIS_ void *pData, UINT Offset, UINT Count) PURE; STDMETHOD(GetBlendState)(THIS_ UINT Index, ID3D10BlendState **ppBlendState) PURE; STDMETHOD(GetBackingStore)(THIS_ UINT Index, D3D10_BLEND_DESC *pBlendDesc) PURE; }; ////////////////////////////////////////////////////////////////////////////// // ID3D10EffectDepthStencilVariable ////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// typedef interface ID3D10EffectDepthStencilVariable ID3D10EffectDepthStencilVariable; typedef interface ID3D10EffectDepthStencilVariable *LPD3D10EFFECTDEPTHSTENCILVARIABLE; // {AF482368-330A-46a5-9A5C-01C71AF24C8D} DEFINE_GUID(IID_ID3D10EffectDepthStencilVariable, 0xaf482368, 0x330a, 0x46a5, 0x9a, 0x5c, 0x1, 0xc7, 0x1a, 0xf2, 0x4c, 0x8d); #undef INTERFACE #define INTERFACE ID3D10EffectDepthStencilVariable DECLARE_INTERFACE_(ID3D10EffectDepthStencilVariable, ID3D10EffectVariable) { STDMETHOD_(ID3D10EffectType*, GetType)(THIS) PURE; STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *pDesc) PURE; STDMETHOD_(ID3D10EffectVariable*, GetAnnotationByIndex)(THIS_ UINT Index) PURE; STDMETHOD_(ID3D10EffectVariable*, GetAnnotationByName)(THIS_ LPCSTR Name) PURE; STDMETHOD_(ID3D10EffectVariable*, GetMemberByIndex)(THIS_ UINT Index) PURE; STDMETHOD_(ID3D10EffectVariable*, GetMemberByName)(THIS_ LPCSTR Name) PURE; STDMETHOD_(ID3D10EffectVariable*, GetMemberBySemantic)(THIS_ LPCSTR Semantic) PURE; STDMETHOD_(ID3D10EffectVariable*, GetElement)(THIS_ UINT Index) PURE; STDMETHOD_(ID3D10EffectConstantBuffer*, GetParentConstantBuffer)(THIS) PURE; STDMETHOD_(ID3D10EffectScalarVariable*, AsScalar)(THIS) PURE; STDMETHOD_(ID3D10EffectVectorVariable*, AsVector)(THIS) PURE; STDMETHOD_(ID3D10EffectMatrixVariable*, AsMatrix)(THIS) PURE; STDMETHOD_(ID3D10EffectStringVariable*, AsString)(THIS) PURE; STDMETHOD_(ID3D10EffectShaderResourceVariable*, AsShaderResource)(THIS) PURE; STDMETHOD_(ID3D10EffectRenderTargetViewVariable*, AsRenderTargetView)(THIS) PURE; STDMETHOD_(ID3D10EffectDepthStencilViewVariable*, AsDepthStencilView)(THIS) PURE; STDMETHOD_(ID3D10EffectConstantBuffer*, AsConstantBuffer)(THIS) PURE; STDMETHOD_(ID3D10EffectShaderVariable*, AsShader)(THIS) PURE; STDMETHOD_(ID3D10EffectBlendVariable*, AsBlend)(THIS) PURE; STDMETHOD_(ID3D10EffectDepthStencilVariable*, AsDepthStencil)(THIS) PURE; STDMETHOD_(ID3D10EffectRasterizerVariable*, AsRasterizer)(THIS) PURE; STDMETHOD_(ID3D10EffectSamplerVariable*, AsSampler)(THIS) PURE; STDMETHOD(SetRawValue)(THIS_ void *pData, UINT Offset, UINT Count) PURE; STDMETHOD(GetRawValue)(THIS_ void *pData, UINT Offset, UINT Count) PURE; STDMETHOD(GetDepthStencilState)(THIS_ UINT Index, ID3D10DepthStencilState **ppDepthStencilState) PURE; STDMETHOD(GetBackingStore)(THIS_ UINT Index, D3D10_DEPTH_STENCIL_DESC *pDepthStencilDesc) PURE; }; ////////////////////////////////////////////////////////////////////////////// // ID3D10EffectRasterizerVariable //////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// typedef interface ID3D10EffectRasterizerVariable ID3D10EffectRasterizerVariable; typedef interface ID3D10EffectRasterizerVariable *LPD3D10EFFECTRASTERIZERVARIABLE; // {21AF9F0E-4D94-4ea9-9785-2CB76B8C0B34} DEFINE_GUID(IID_ID3D10EffectRasterizerVariable, 0x21af9f0e, 0x4d94, 0x4ea9, 0x97, 0x85, 0x2c, 0xb7, 0x6b, 0x8c, 0xb, 0x34); #undef INTERFACE #define INTERFACE ID3D10EffectRasterizerVariable DECLARE_INTERFACE_(ID3D10EffectRasterizerVariable, ID3D10EffectVariable) { STDMETHOD_(ID3D10EffectType*, GetType)(THIS) PURE; STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *pDesc) PURE; STDMETHOD_(ID3D10EffectVariable*, GetAnnotationByIndex)(THIS_ UINT Index) PURE; STDMETHOD_(ID3D10EffectVariable*, GetAnnotationByName)(THIS_ LPCSTR Name) PURE; STDMETHOD_(ID3D10EffectVariable*, GetMemberByIndex)(THIS_ UINT Index) PURE; STDMETHOD_(ID3D10EffectVariable*, GetMemberByName)(THIS_ LPCSTR Name) PURE; STDMETHOD_(ID3D10EffectVariable*, GetMemberBySemantic)(THIS_ LPCSTR Semantic) PURE; STDMETHOD_(ID3D10EffectVariable*, GetElement)(THIS_ UINT Index) PURE; STDMETHOD_(ID3D10EffectConstantBuffer*, GetParentConstantBuffer)(THIS) PURE; STDMETHOD_(ID3D10EffectScalarVariable*, AsScalar)(THIS) PURE; STDMETHOD_(ID3D10EffectVectorVariable*, AsVector)(THIS) PURE; STDMETHOD_(ID3D10EffectMatrixVariable*, AsMatrix)(THIS) PURE; STDMETHOD_(ID3D10EffectStringVariable*, AsString)(THIS) PURE; STDMETHOD_(ID3D10EffectShaderResourceVariable*, AsShaderResource)(THIS) PURE; STDMETHOD_(ID3D10EffectRenderTargetViewVariable*, AsRenderTargetView)(THIS) PURE; STDMETHOD_(ID3D10EffectDepthStencilViewVariable*, AsDepthStencilView)(THIS) PURE; STDMETHOD_(ID3D10EffectConstantBuffer*, AsConstantBuffer)(THIS) PURE; STDMETHOD_(ID3D10EffectShaderVariable*, AsShader)(THIS) PURE; STDMETHOD_(ID3D10EffectBlendVariable*, AsBlend)(THIS) PURE; STDMETHOD_(ID3D10EffectDepthStencilVariable*, AsDepthStencil)(THIS) PURE; STDMETHOD_(ID3D10EffectRasterizerVariable*, AsRasterizer)(THIS) PURE; STDMETHOD_(ID3D10EffectSamplerVariable*, AsSampler)(THIS) PURE; STDMETHOD(SetRawValue)(THIS_ void *pData, UINT Offset, UINT Count) PURE; STDMETHOD(GetRawValue)(THIS_ void *pData, UINT Offset, UINT Count) PURE; STDMETHOD(GetRasterizerState)(THIS_ UINT Index, ID3D10RasterizerState **ppRasterizerState) PURE; STDMETHOD(GetBackingStore)(THIS_ UINT Index, D3D10_RASTERIZER_DESC *pRasterizerDesc) PURE; }; ////////////////////////////////////////////////////////////////////////////// // ID3D10EffectSamplerVariable /////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// typedef interface ID3D10EffectSamplerVariable ID3D10EffectSamplerVariable; typedef interface ID3D10EffectSamplerVariable *LPD3D10EFFECTSAMPLERVARIABLE; // {6530D5C7-07E9-4271-A418-E7CE4BD1E480} DEFINE_GUID(IID_ID3D10EffectSamplerVariable, 0x6530d5c7, 0x7e9, 0x4271, 0xa4, 0x18, 0xe7, 0xce, 0x4b, 0xd1, 0xe4, 0x80); #undef INTERFACE #define INTERFACE ID3D10EffectSamplerVariable DECLARE_INTERFACE_(ID3D10EffectSamplerVariable, ID3D10EffectVariable) { STDMETHOD_(ID3D10EffectType*, GetType)(THIS) PURE; STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *pDesc) PURE; STDMETHOD_(ID3D10EffectVariable*, GetAnnotationByIndex)(THIS_ UINT Index) PURE; STDMETHOD_(ID3D10EffectVariable*, GetAnnotationByName)(THIS_ LPCSTR Name) PURE; STDMETHOD_(ID3D10EffectVariable*, GetMemberByIndex)(THIS_ UINT Index) PURE; STDMETHOD_(ID3D10EffectVariable*, GetMemberByName)(THIS_ LPCSTR Name) PURE; STDMETHOD_(ID3D10EffectVariable*, GetMemberBySemantic)(THIS_ LPCSTR Semantic) PURE; STDMETHOD_(ID3D10EffectVariable*, GetElement)(THIS_ UINT Index) PURE; STDMETHOD_(ID3D10EffectConstantBuffer*, GetParentConstantBuffer)(THIS) PURE; STDMETHOD_(ID3D10EffectScalarVariable*, AsScalar)(THIS) PURE; STDMETHOD_(ID3D10EffectVectorVariable*, AsVector)(THIS) PURE; STDMETHOD_(ID3D10EffectMatrixVariable*, AsMatrix)(THIS) PURE; STDMETHOD_(ID3D10EffectStringVariable*, AsString)(THIS) PURE; STDMETHOD_(ID3D10EffectShaderResourceVariable*, AsShaderResource)(THIS) PURE; STDMETHOD_(ID3D10EffectRenderTargetViewVariable*, AsRenderTargetView)(THIS) PURE; STDMETHOD_(ID3D10EffectDepthStencilViewVariable*, AsDepthStencilView)(THIS) PURE; STDMETHOD_(ID3D10EffectConstantBuffer*, AsConstantBuffer)(THIS) PURE; STDMETHOD_(ID3D10EffectShaderVariable*, AsShader)(THIS) PURE; STDMETHOD_(ID3D10EffectBlendVariable*, AsBlend)(THIS) PURE; STDMETHOD_(ID3D10EffectDepthStencilVariable*, AsDepthStencil)(THIS) PURE; STDMETHOD_(ID3D10EffectRasterizerVariable*, AsRasterizer)(THIS) PURE; STDMETHOD_(ID3D10EffectSamplerVariable*, AsSampler)(THIS) PURE; STDMETHOD(SetRawValue)(THIS_ void *pData, UINT Offset, UINT Count) PURE; STDMETHOD(GetRawValue)(THIS_ void *pData, UINT Offset, UINT Count) PURE; STDMETHOD(GetSampler)(THIS_ UINT Index, ID3D10SamplerState **ppSampler) PURE; STDMETHOD(GetBackingStore)(THIS_ UINT Index, D3D10_SAMPLER_DESC *pSamplerDesc) PURE; }; ////////////////////////////////////////////////////////////////////////////// // ID3D10EffectPass ////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// //---------------------------------------------------------------------------- // D3D10_PASS_DESC: // // Retrieved by ID3D10EffectPass::GetDesc() //---------------------------------------------------------------------------- typedef struct _D3D10_PASS_DESC { LPCSTR Name; // Name of this pass (NULL if not anonymous) UINT Annotations; // Number of annotations on this pass BYTE *pIAInputSignature; // Signature from VS or GS (if there is no VS) // or NULL if neither exists SIZE_T IAInputSignatureSize; // Singature size in bytes UINT StencilRef; // Specified in SetDepthStencilState() UINT SampleMask; // Specified in SetBlendState() FLOAT BlendFactor[4]; // Specified in SetBlendState() } D3D10_PASS_DESC; //---------------------------------------------------------------------------- // D3D10_PASS_SHADER_DESC: // // Retrieved by ID3D10EffectPass::Get**ShaderDesc() //---------------------------------------------------------------------------- typedef struct _D3D10_PASS_SHADER_DESC { ID3D10EffectShaderVariable *pShaderVariable; // The variable that this shader came from. // If this is an inline shader assignment, // the returned interface will be an // anonymous shader variable, which is // not retrievable any other way. It's // name in the variable description will // be "$Anonymous". // If there is no assignment of this type in // the pass block, pShaderVariable != NULL, // but pShaderVariable->IsValid() == FALSE. UINT ShaderIndex; // The element of pShaderVariable (if an array) // or 0 if not applicable } D3D10_PASS_SHADER_DESC; typedef interface ID3D10EffectPass ID3D10EffectPass; typedef interface ID3D10EffectPass *LPD3D10EFFECTPASS; // {5CFBEB89-1A06-46e0-B282-E3F9BFA36A54} DEFINE_GUID(IID_ID3D10EffectPass, 0x5cfbeb89, 0x1a06, 0x46e0, 0xb2, 0x82, 0xe3, 0xf9, 0xbf, 0xa3, 0x6a, 0x54); #undef INTERFACE #define INTERFACE ID3D10EffectPass DECLARE_INTERFACE(ID3D10EffectPass) { STDMETHOD_(BOOL, IsValid)(THIS) PURE; STDMETHOD(GetDesc)(THIS_ D3D10_PASS_DESC *pDesc) PURE; STDMETHOD(GetVertexShaderDesc)(THIS_ D3D10_PASS_SHADER_DESC *pDesc) PURE; STDMETHOD(GetGeometryShaderDesc)(THIS_ D3D10_PASS_SHADER_DESC *pDesc) PURE; STDMETHOD(GetPixelShaderDesc)(THIS_ D3D10_PASS_SHADER_DESC *pDesc) PURE; STDMETHOD_(ID3D10EffectVariable*, GetAnnotationByIndex)(THIS_ UINT Index) PURE; STDMETHOD_(ID3D10EffectVariable*, GetAnnotationByName)(THIS_ LPCSTR Name) PURE; STDMETHOD(Apply)(THIS_ UINT Flags) PURE; STDMETHOD(ComputeStateBlockMask)(THIS_ D3D10_STATE_BLOCK_MASK *pStateBlockMask) PURE; }; ////////////////////////////////////////////////////////////////////////////// // ID3D10EffectTechnique ///////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// //---------------------------------------------------------------------------- // D3D10_TECHNIQUE_DESC: // // Retrieved by ID3D10EffectTechnique::GetDesc() //---------------------------------------------------------------------------- typedef struct _D3D10_TECHNIQUE_DESC { LPCSTR Name; // Name of this technique (NULL if not anonymous) UINT Passes; // Number of passes contained within UINT Annotations; // Number of annotations on this technique } D3D10_TECHNIQUE_DESC; typedef interface ID3D10EffectTechnique ID3D10EffectTechnique; typedef interface ID3D10EffectTechnique *LPD3D10EFFECTTECHNIQUE; // {DB122CE8-D1C9-4292-B237-24ED3DE8B175} DEFINE_GUID(IID_ID3D10EffectTechnique, 0xdb122ce8, 0xd1c9, 0x4292, 0xb2, 0x37, 0x24, 0xed, 0x3d, 0xe8, 0xb1, 0x75); #undef INTERFACE #define INTERFACE ID3D10EffectTechnique DECLARE_INTERFACE(ID3D10EffectTechnique) { STDMETHOD_(BOOL, IsValid)(THIS) PURE; STDMETHOD(GetDesc)(THIS_ D3D10_TECHNIQUE_DESC *pDesc) PURE; STDMETHOD_(ID3D10EffectVariable*, GetAnnotationByIndex)(THIS_ UINT Index) PURE; STDMETHOD_(ID3D10EffectVariable*, GetAnnotationByName)(THIS_ LPCSTR Name) PURE; STDMETHOD_(ID3D10EffectPass*, GetPassByIndex)(THIS_ UINT Index) PURE; STDMETHOD_(ID3D10EffectPass*, GetPassByName)(THIS_ LPCSTR Name) PURE; STDMETHOD(ComputeStateBlockMask)(THIS_ D3D10_STATE_BLOCK_MASK *pStateBlockMask) PURE; }; ////////////////////////////////////////////////////////////////////////////// // ID3D10Effect ////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// //---------------------------------------------------------------------------- // D3D10_EFFECT_DESC: // // Retrieved by ID3D10Effect::GetDesc() //---------------------------------------------------------------------------- typedef struct _D3D10_EFFECT_DESC { BOOL IsChildEffect; // TRUE if this is a child effect, // FALSE if this is standalone or an effect pool. UINT ConstantBuffers; // Number of constant buffers in this effect, // excluding the effect pool. UINT SharedConstantBuffers; // Number of constant buffers shared in this // effect's pool. UINT GlobalVariables; // Number of global variables in this effect, // excluding the effect pool. UINT SharedGlobalVariables; // Number of global variables shared in this // effect's pool. UINT Techniques; // Number of techniques in this effect, // excluding the effect pool. } D3D10_EFFECT_DESC; typedef interface ID3D10Effect ID3D10Effect; typedef interface ID3D10Effect *LPD3D10EFFECT; // {51B0CA8B-EC0B-4519-870D-8EE1CB5017C7} DEFINE_GUID(IID_ID3D10Effect, 0x51b0ca8b, 0xec0b, 0x4519, 0x87, 0xd, 0x8e, 0xe1, 0xcb, 0x50, 0x17, 0xc7); #undef INTERFACE #define INTERFACE ID3D10Effect DECLARE_INTERFACE_(ID3D10Effect, IUnknown) { // IUnknown STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE; STDMETHOD_(ULONG, AddRef)(THIS) PURE; STDMETHOD_(ULONG, Release)(THIS) PURE; STDMETHOD_(BOOL, IsValid)(THIS) PURE; STDMETHOD_(BOOL, IsPool)(THIS) PURE; // Managing D3D Device STDMETHOD(GetDevice)(THIS_ ID3D10Device** ppDevice) PURE; // New Reflection APIs STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_DESC *pDesc) PURE; STDMETHOD_(ID3D10EffectConstantBuffer*, GetConstantBufferByIndex)(THIS_ UINT Index) PURE; STDMETHOD_(ID3D10EffectConstantBuffer*, GetConstantBufferByName)(THIS_ LPCSTR Name) PURE; STDMETHOD_(ID3D10EffectVariable*, GetVariableByIndex)(THIS_ UINT Index) PURE; STDMETHOD_(ID3D10EffectVariable*, GetVariableByName)(THIS_ LPCSTR Name) PURE; STDMETHOD_(ID3D10EffectVariable*, GetVariableBySemantic)(THIS_ LPCSTR Semantic) PURE; STDMETHOD_(ID3D10EffectTechnique*, GetTechniqueByIndex)(THIS_ UINT Index) PURE; STDMETHOD_(ID3D10EffectTechnique*, GetTechniqueByName)(THIS_ LPCSTR Name) PURE; STDMETHOD(Optimize)(THIS) PURE; STDMETHOD_(BOOL, IsOptimized)(THIS) PURE; }; ////////////////////////////////////////////////////////////////////////////// // ID3D10EffectPool ////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// typedef interface ID3D10EffectPool ID3D10EffectPool; typedef interface ID3D10EffectPool *LPD3D10EFFECTPOOL; // {9537AB04-3250-412e-8213-FCD2F8677933} DEFINE_GUID(IID_ID3D10EffectPool, 0x9537ab04, 0x3250, 0x412e, 0x82, 0x13, 0xfc, 0xd2, 0xf8, 0x67, 0x79, 0x33); #undef INTERFACE #define INTERFACE ID3D10EffectPool DECLARE_INTERFACE_(ID3D10EffectPool, IUnknown) { // IUnknown STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE; STDMETHOD_(ULONG, AddRef)(THIS) PURE; STDMETHOD_(ULONG, Release)(THIS) PURE; STDMETHOD_(ID3D10Effect*, AsEffect)(THIS) PURE; // No public methods }; ////////////////////////////////////////////////////////////////////////////// // APIs ////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// #ifdef __cplusplus extern "C" { #endif //__cplusplus //---------------------------------------------------------------------------- // D3D10CreateEffectFromXXXX: // -------------------------- // Creates an effect from a binary effect or file // // Parameters: // // [in] // // // pData // Blob of effect data, either ASCII (uncompiled, for D3D10CompileEffectFromMemory) or binary (compiled, for D3D10CreateEffect*) // DataLength // Length of the data blob // // pSrcFileName // Name of the ASCII Effect file pData was obtained from // // pDefines // Optional NULL-terminated array of preprocessor macro definitions. // pInclude // Optional interface pointer to use for handling #include directives. // If this parameter is NULL, #includes will be honored when compiling // from file, and will error when compiling from resource or memory. // HLSLFlags // Compilation flags pertaining to shaders and data types, honored by // the HLSL compiler // FXFlags // Compilation flags pertaining to Effect compilation, honored // by the Effect compiler // pDevice // Pointer to the D3D10 device on which to create Effect resources // pEffectPool // Pointer to an Effect pool to share variables with or NULL // // [out] // // ppEffect // Address of the newly created Effect interface // ppEffectPool // Address of the newly created Effect pool interface // ppErrors // If non-NULL, address of a buffer with error messages that occurred // during parsing or compilation // //---------------------------------------------------------------------------- HRESULT WINAPI D3D10CompileEffectFromMemory(void *pData, SIZE_T DataLength, LPCSTR pSrcFileName, CONST D3D10_SHADER_MACRO *pDefines, ID3D10Include *pInclude, UINT HLSLFlags, UINT FXFlags, ID3D10Blob **ppCompiledEffect, ID3D10Blob **ppErrors); HRESULT WINAPI D3D10CreateEffectFromMemory(void *pData, SIZE_T DataLength, UINT FXFlags, ID3D10Device *pDevice, ID3D10EffectPool *pEffectPool, ID3D10Effect **ppEffect); HRESULT WINAPI D3D10CreateEffectPoolFromMemory(void *pData, SIZE_T DataLength, UINT FXFlags, ID3D10Device *pDevice, ID3D10EffectPool **ppEffectPool); //---------------------------------------------------------------------------- // D3D10DisassembleEffect: // ----------------------- // Takes an effect interface, and returns a buffer containing text assembly. // // Parameters: // pEffect // Pointer to the runtime effect interface. // EnableColorCode // Emit HTML tags for color coding the output? // ppDisassembly // Returns a buffer containing the disassembled effect. //---------------------------------------------------------------------------- HRESULT WINAPI D3D10DisassembleEffect(ID3D10Effect *pEffect, BOOL EnableColorCode, ID3D10Blob **ppDisassembly); #ifdef __cplusplus } #endif //__cplusplus #endif //__D3D10EFFECT_H__ ================================================ FILE: Include/D3D10shader.h ================================================ ////////////////////////////////////////////////////////////////////////////// // // Copyright (c) Microsoft Corporation. All rights reserved. // // File: D3D10Shader.h // Content: D3D10 Shader Types and APIs // ////////////////////////////////////////////////////////////////////////////// #ifndef __D3D10SHADER_H__ #define __D3D10SHADER_H__ #include "d3d10.h" //--------------------------------------------------------------------------- // D3D10_TX_VERSION: // -------------- // Version token used to create a procedural texture filler in effects // Used by D3D10Fill[]TX functions //--------------------------------------------------------------------------- #define D3D10_TX_VERSION(_Major,_Minor) (('T' << 24) | ('X' << 16) | ((_Major) << 8) | (_Minor)) //---------------------------------------------------------------------------- // D3D10SHADER flags: // ----------------- // D3D10_SHADER_DEBUG // Insert debug file/line/type/symbol information. // // D3D10_SHADER_SKIP_VALIDATION // Do not validate the generated code against known capabilities and // constraints. This option is only recommended when compiling shaders // you KNOW will work. (ie. have compiled before without this option.) // Shaders are always validated by D3D before they are set to the device. // // D3D10_SHADER_SKIP_OPTIMIZATION // Instructs the compiler to skip optimization steps during code generation. // Unless you are trying to isolate a problem in your code using this option // is not recommended. // // D3D10_SHADER_PACK_MATRIX_ROW_MAJOR // Unless explicitly specified, matrices will be packed in row-major order // on input and output from the shader. // // D3D10_SHADER_PACK_MATRIX_COLUMN_MAJOR // Unless explicitly specified, matrices will be packed in column-major // order on input and output from the shader. This is generally more // efficient, since it allows vector-matrix multiplication to be performed // using a series of dot-products. // // D3D10_SHADER_PARTIAL_PRECISION // Force all computations in resulting shader to occur at partial precision. // This may result in faster evaluation of shaders on some hardware. // // D3D10_SHADER_FORCE_VS_SOFTWARE_NO_OPT // Force compiler to compile against the next highest available software // target for vertex shaders. This flag also turns optimizations off, // and debugging on. // // D3D10_SHADER_FORCE_PS_SOFTWARE_NO_OPT // Force compiler to compile against the next highest available software // target for pixel shaders. This flag also turns optimizations off, // and debugging on. // // D3D10_SHADER_NO_PRESHADER // Disables Preshaders. Using this flag will cause the compiler to not // pull out static expression for evaluation on the host cpu // // D3D10_SHADER_AVOID_FLOW_CONTROL // Hint compiler to avoid flow-control constructs where possible. // // D3D10_SHADER_PREFER_FLOW_CONTROL // Hint compiler to prefer flow-control constructs where possible. // // D3D10_SHADER_ENABLE_STRICTNESS // By default, the HLSL/Effect compilers are not strict on deprecated syntax. // Specifying this flag enables the strict mode. Deprecated syntax may be // removed in a future release, and enabling syntax is a good way to make sure // your shaders comply to the latest spec. // // D3D10_SHADER_ENABLE_BACKWARDS_COMPATIBILITY // This enables older shaders to compile to 4_0 targets. // //---------------------------------------------------------------------------- #define D3D10_SHADER_DEBUG (1 << 0) #define D3D10_SHADER_SKIP_VALIDATION (1 << 1) #define D3D10_SHADER_SKIP_OPTIMIZATION (1 << 2) #define D3D10_SHADER_PACK_MATRIX_ROW_MAJOR (1 << 3) #define D3D10_SHADER_PACK_MATRIX_COLUMN_MAJOR (1 << 4) #define D3D10_SHADER_PARTIAL_PRECISION (1 << 5) #define D3D10_SHADER_FORCE_VS_SOFTWARE_NO_OPT (1 << 6) #define D3D10_SHADER_FORCE_PS_SOFTWARE_NO_OPT (1 << 7) #define D3D10_SHADER_NO_PRESHADER (1 << 8) #define D3D10_SHADER_AVOID_FLOW_CONTROL (1 << 9) #define D3D10_SHADER_PREFER_FLOW_CONTROL (1 << 10) #define D3D10_SHADER_ENABLE_STRICTNESS (1 << 11) #define D3D10_SHADER_ENABLE_BACKWARDS_COMPATIBILITY (1 << 12) #define D3D10_SHADER_IEEE_STRICTNESS (1 << 13) #define D3D10_SHADER_WARNINGS_ARE_ERRORS (1 << 18) // optimization level flags #define D3D10_SHADER_OPTIMIZATION_LEVEL0 (1 << 14) #define D3D10_SHADER_OPTIMIZATION_LEVEL1 0 #define D3D10_SHADER_OPTIMIZATION_LEVEL2 ((1 << 14) | (1 << 15)) #define D3D10_SHADER_OPTIMIZATION_LEVEL3 (1 << 15) typedef D3D_SHADER_MACRO D3D10_SHADER_MACRO; typedef D3D10_SHADER_MACRO* LPD3D10_SHADER_MACRO; typedef D3D_SHADER_VARIABLE_CLASS D3D10_SHADER_VARIABLE_CLASS; typedef D3D10_SHADER_VARIABLE_CLASS* LPD3D10_SHADER_VARIABLE_CLASS; typedef D3D_SHADER_VARIABLE_FLAGS D3D10_SHADER_VARIABLE_FLAGS; typedef D3D10_SHADER_VARIABLE_FLAGS* LPD3D10_SHADER_VARIABLE_FLAGS; typedef D3D_SHADER_VARIABLE_TYPE D3D10_SHADER_VARIABLE_TYPE; typedef D3D10_SHADER_VARIABLE_TYPE* LPD3D10_SHADER_VARIABLE_TYPE; typedef D3D_SHADER_INPUT_FLAGS D3D10_SHADER_INPUT_FLAGS; typedef D3D10_SHADER_INPUT_FLAGS* LPD3D10_SHADER_INPUT_FLAGS; typedef D3D_SHADER_INPUT_TYPE D3D10_SHADER_INPUT_TYPE; typedef D3D10_SHADER_INPUT_TYPE* LPD3D10_SHADER_INPUT_TYPE; typedef D3D_SHADER_CBUFFER_FLAGS D3D10_SHADER_CBUFFER_FLAGS; typedef D3D10_SHADER_CBUFFER_FLAGS* LPD3D10_SHADER_CBUFFER_FLAGS; typedef D3D_CBUFFER_TYPE D3D10_CBUFFER_TYPE; typedef D3D10_CBUFFER_TYPE* LPD3D10_CBUFFER_TYPE; typedef D3D_NAME D3D10_NAME; typedef D3D_RESOURCE_RETURN_TYPE D3D10_RESOURCE_RETURN_TYPE; typedef D3D_REGISTER_COMPONENT_TYPE D3D10_REGISTER_COMPONENT_TYPE; typedef D3D_INCLUDE_TYPE D3D10_INCLUDE_TYPE; // ID3D10Include has been made version-neutral and moved to d3dcommon.h. typedef interface ID3DInclude ID3D10Include; typedef interface ID3DInclude* LPD3D10INCLUDE; #define IID_ID3D10Include IID_ID3DInclude //---------------------------------------------------------------------------- // ID3D10ShaderReflection: //---------------------------------------------------------------------------- // // Structure definitions // typedef struct _D3D10_SHADER_DESC { UINT Version; // Shader version LPCSTR Creator; // Creator string UINT Flags; // Shader compilation/parse flags UINT ConstantBuffers; // Number of constant buffers UINT BoundResources; // Number of bound resources UINT InputParameters; // Number of parameters in the input signature UINT OutputParameters; // Number of parameters in the output signature UINT InstructionCount; // Number of emitted instructions UINT TempRegisterCount; // Number of temporary registers used UINT TempArrayCount; // Number of temporary arrays used UINT DefCount; // Number of constant defines UINT DclCount; // Number of declarations (input + output) UINT TextureNormalInstructions; // Number of non-categorized texture instructions UINT TextureLoadInstructions; // Number of texture load instructions UINT TextureCompInstructions; // Number of texture comparison instructions UINT TextureBiasInstructions; // Number of texture bias instructions UINT TextureGradientInstructions; // Number of texture gradient instructions UINT FloatInstructionCount; // Number of floating point arithmetic instructions used UINT IntInstructionCount; // Number of signed integer arithmetic instructions used UINT UintInstructionCount; // Number of unsigned integer arithmetic instructions used UINT StaticFlowControlCount; // Number of static flow control instructions used UINT DynamicFlowControlCount; // Number of dynamic flow control instructions used UINT MacroInstructionCount; // Number of macro instructions used UINT ArrayInstructionCount; // Number of array instructions used UINT CutInstructionCount; // Number of cut instructions used UINT EmitInstructionCount; // Number of emit instructions used D3D10_PRIMITIVE_TOPOLOGY GSOutputTopology; // Geometry shader output topology UINT GSMaxOutputVertexCount; // Geometry shader maximum output vertex count } D3D10_SHADER_DESC; typedef struct _D3D10_SHADER_BUFFER_DESC { LPCSTR Name; // Name of the constant buffer D3D10_CBUFFER_TYPE Type; // Indicates that this is a CBuffer or TBuffer UINT Variables; // Number of member variables UINT Size; // Size of CB (in bytes) UINT uFlags; // Buffer description flags } D3D10_SHADER_BUFFER_DESC; typedef struct _D3D10_SHADER_VARIABLE_DESC { LPCSTR Name; // Name of the variable UINT StartOffset; // Offset in constant buffer's backing store UINT Size; // Size of variable (in bytes) UINT uFlags; // Variable flags LPVOID DefaultValue; // Raw pointer to default value } D3D10_SHADER_VARIABLE_DESC; typedef struct _D3D10_SHADER_TYPE_DESC { D3D10_SHADER_VARIABLE_CLASS Class; // Variable class (e.g. object, matrix, etc.) D3D10_SHADER_VARIABLE_TYPE Type; // Variable type (e.g. float, sampler, etc.) UINT Rows; // Number of rows (for matrices, 1 for other numeric, 0 if not applicable) UINT Columns; // Number of columns (for vectors & matrices, 1 for other numeric, 0 if not applicable) UINT Elements; // Number of elements (0 if not an array) UINT Members; // Number of members (0 if not a structure) UINT Offset; // Offset from the start of structure (0 if not a structure member) } D3D10_SHADER_TYPE_DESC; typedef struct _D3D10_SHADER_INPUT_BIND_DESC { LPCSTR Name; // Name of the resource D3D10_SHADER_INPUT_TYPE Type; // Type of resource (e.g. texture, cbuffer, etc.) UINT BindPoint; // Starting bind point UINT BindCount; // Number of contiguous bind points (for arrays) UINT uFlags; // Input binding flags D3D10_RESOURCE_RETURN_TYPE ReturnType; // Return type (if texture) D3D10_SRV_DIMENSION Dimension; // Dimension (if texture) UINT NumSamples; // Number of samples (0 if not MS texture) } D3D10_SHADER_INPUT_BIND_DESC; typedef struct _D3D10_SIGNATURE_PARAMETER_DESC { LPCSTR SemanticName; // Name of the semantic UINT SemanticIndex; // Index of the semantic UINT Register; // Number of member variables D3D10_NAME SystemValueType;// A predefined system value, or D3D10_NAME_UNDEFINED if not applicable D3D10_REGISTER_COMPONENT_TYPE ComponentType;// Scalar type (e.g. uint, float, etc.) BYTE Mask; // Mask to indicate which components of the register // are used (combination of D3D10_COMPONENT_MASK values) BYTE ReadWriteMask; // Mask to indicate whether a given component is // never written (if this is an output signature) or // always read (if this is an input signature). // (combination of D3D10_COMPONENT_MASK values) } D3D10_SIGNATURE_PARAMETER_DESC; // // Interface definitions // typedef interface ID3D10ShaderReflectionType ID3D10ShaderReflectionType; typedef interface ID3D10ShaderReflectionType *LPD3D10SHADERREFLECTIONTYPE; // {C530AD7D-9B16-4395-A979-BA2ECFF83ADD} DEFINE_GUID(IID_ID3D10ShaderReflectionType, 0xc530ad7d, 0x9b16, 0x4395, 0xa9, 0x79, 0xba, 0x2e, 0xcf, 0xf8, 0x3a, 0xdd); #undef INTERFACE #define INTERFACE ID3D10ShaderReflectionType DECLARE_INTERFACE(ID3D10ShaderReflectionType) { STDMETHOD(GetDesc)(THIS_ D3D10_SHADER_TYPE_DESC *pDesc) PURE; STDMETHOD_(ID3D10ShaderReflectionType*, GetMemberTypeByIndex)(THIS_ UINT Index) PURE; STDMETHOD_(ID3D10ShaderReflectionType*, GetMemberTypeByName)(THIS_ LPCSTR Name) PURE; STDMETHOD_(LPCSTR, GetMemberTypeName)(THIS_ UINT Index) PURE; }; typedef interface ID3D10ShaderReflectionVariable ID3D10ShaderReflectionVariable; typedef interface ID3D10ShaderReflectionVariable *LPD3D10SHADERREFLECTIONVARIABLE; // {1BF63C95-2650-405d-99C1-3636BD1DA0A1} DEFINE_GUID(IID_ID3D10ShaderReflectionVariable, 0x1bf63c95, 0x2650, 0x405d, 0x99, 0xc1, 0x36, 0x36, 0xbd, 0x1d, 0xa0, 0xa1); #undef INTERFACE #define INTERFACE ID3D10ShaderReflectionVariable DECLARE_INTERFACE(ID3D10ShaderReflectionVariable) { STDMETHOD(GetDesc)(THIS_ D3D10_SHADER_VARIABLE_DESC *pDesc) PURE; STDMETHOD_(ID3D10ShaderReflectionType*, GetType)(THIS) PURE; }; typedef interface ID3D10ShaderReflectionConstantBuffer ID3D10ShaderReflectionConstantBuffer; typedef interface ID3D10ShaderReflectionConstantBuffer *LPD3D10SHADERREFLECTIONCONSTANTBUFFER; // {66C66A94-DDDD-4b62-A66A-F0DA33C2B4D0} DEFINE_GUID(IID_ID3D10ShaderReflectionConstantBuffer, 0x66c66a94, 0xdddd, 0x4b62, 0xa6, 0x6a, 0xf0, 0xda, 0x33, 0xc2, 0xb4, 0xd0); #undef INTERFACE #define INTERFACE ID3D10ShaderReflectionConstantBuffer DECLARE_INTERFACE(ID3D10ShaderReflectionConstantBuffer) { STDMETHOD(GetDesc)(THIS_ D3D10_SHADER_BUFFER_DESC *pDesc) PURE; STDMETHOD_(ID3D10ShaderReflectionVariable*, GetVariableByIndex)(THIS_ UINT Index) PURE; STDMETHOD_(ID3D10ShaderReflectionVariable*, GetVariableByName)(THIS_ LPCSTR Name) PURE; }; typedef interface ID3D10ShaderReflection ID3D10ShaderReflection; typedef interface ID3D10ShaderReflection *LPD3D10SHADERREFLECTION; // {D40E20B6-F8F7-42ad-AB20-4BAF8F15DFAA} DEFINE_GUID(IID_ID3D10ShaderReflection, 0xd40e20b6, 0xf8f7, 0x42ad, 0xab, 0x20, 0x4b, 0xaf, 0x8f, 0x15, 0xdf, 0xaa); #undef INTERFACE #define INTERFACE ID3D10ShaderReflection DECLARE_INTERFACE_(ID3D10ShaderReflection, IUnknown) { STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE; STDMETHOD_(ULONG, AddRef)(THIS) PURE; STDMETHOD_(ULONG, Release)(THIS) PURE; STDMETHOD(GetDesc)(THIS_ D3D10_SHADER_DESC *pDesc) PURE; STDMETHOD_(ID3D10ShaderReflectionConstantBuffer*, GetConstantBufferByIndex)(THIS_ UINT Index) PURE; STDMETHOD_(ID3D10ShaderReflectionConstantBuffer*, GetConstantBufferByName)(THIS_ LPCSTR Name) PURE; STDMETHOD(GetResourceBindingDesc)(THIS_ UINT ResourceIndex, D3D10_SHADER_INPUT_BIND_DESC *pDesc) PURE; STDMETHOD(GetInputParameterDesc)(THIS_ UINT ParameterIndex, D3D10_SIGNATURE_PARAMETER_DESC *pDesc) PURE; STDMETHOD(GetOutputParameterDesc)(THIS_ UINT ParameterIndex, D3D10_SIGNATURE_PARAMETER_DESC *pDesc) PURE; }; ////////////////////////////////////////////////////////////////////////////// // APIs ////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// #ifdef __cplusplus extern "C" { #endif //__cplusplus //---------------------------------------------------------------------------- // D3D10CompileShader: // ------------------ // Compiles a shader. // // Parameters: // pSrcFile // Source file name. // hSrcModule // Module handle. if NULL, current module will be used. // pSrcResource // Resource name in module. // pSrcData // Pointer to source code. // SrcDataLen // Size of source code, in bytes. // pDefines // Optional NULL-terminated array of preprocessor macro definitions. // pInclude // Optional interface pointer to use for handling #include directives. // If this parameter is NULL, #includes will be honored when compiling // from file, and will error when compiling from resource or memory. // pFunctionName // Name of the entrypoint function where execution should begin. // pProfile // Instruction set to be used when generating code. The D3D10 entry // point currently supports only "vs_4_0", "ps_4_0", and "gs_4_0". // Flags // See D3D10_SHADER_xxx flags. // ppShader // Returns a buffer containing the created shader. This buffer contains // the compiled shader code, as well as any embedded debug and symbol // table info. (See D3D10GetShaderConstantTable) // ppErrorMsgs // Returns a buffer containing a listing of errors and warnings that were // encountered during the compile. If you are running in a debugger, // these are the same messages you will see in your debug output. //---------------------------------------------------------------------------- HRESULT WINAPI D3D10CompileShader(LPCSTR pSrcData, SIZE_T SrcDataLen, LPCSTR pFileName, CONST D3D10_SHADER_MACRO* pDefines, LPD3D10INCLUDE pInclude, LPCSTR pFunctionName, LPCSTR pProfile, UINT Flags, ID3D10Blob** ppShader, ID3D10Blob** ppErrorMsgs); //---------------------------------------------------------------------------- // D3D10DisassembleShader: // ---------------------- // Takes a binary shader, and returns a buffer containing text assembly. // // Parameters: // pShader // Pointer to the shader byte code. // BytecodeLength // Size of the shader byte code in bytes. // EnableColorCode // Emit HTML tags for color coding the output? // pComments // Pointer to a comment string to include at the top of the shader. // ppDisassembly // Returns a buffer containing the disassembled shader. //---------------------------------------------------------------------------- HRESULT WINAPI D3D10DisassembleShader(CONST void *pShader, SIZE_T BytecodeLength, BOOL EnableColorCode, LPCSTR pComments, ID3D10Blob** ppDisassembly); //---------------------------------------------------------------------------- // D3D10GetPixelShaderProfile/D3D10GetVertexShaderProfile/D3D10GetGeometryShaderProfile: // ----------------------------------------------------- // Returns the name of the HLSL profile best suited to a given device. // // Parameters: // pDevice // Pointer to the device in question //---------------------------------------------------------------------------- LPCSTR WINAPI D3D10GetPixelShaderProfile(ID3D10Device *pDevice); LPCSTR WINAPI D3D10GetVertexShaderProfile(ID3D10Device *pDevice); LPCSTR WINAPI D3D10GetGeometryShaderProfile(ID3D10Device *pDevice); //---------------------------------------------------------------------------- // D3D10ReflectShader: // ------------------ // Creates a shader reflection object that can be used to retrieve information // about a compiled shader // // Parameters: // pShaderBytecode // Pointer to a compiled shader (same pointer that is passed into // ID3D10Device::CreateShader) // BytecodeLength // Length of the shader bytecode buffer // ppReflector // [out] Returns a ID3D10ShaderReflection object that can be used to // retrieve shader resource and constant buffer information // //---------------------------------------------------------------------------- HRESULT WINAPI D3D10ReflectShader(CONST void *pShaderBytecode, SIZE_T BytecodeLength, ID3D10ShaderReflection **ppReflector); //---------------------------------------------------------------------------- // D3D10PreprocessShader // --------------------- // Creates a shader reflection object that can be used to retrieve information // about a compiled shader // // Parameters: // pSrcData // Pointer to source code // SrcDataLen // Size of source code, in bytes // pFileName // Source file name (used for error output) // pDefines // Optional NULL-terminated array of preprocessor macro definitions. // pInclude // Optional interface pointer to use for handling #include directives. // If this parameter is NULL, #includes will be honored when assembling // from file, and will error when assembling from resource or memory. // ppShaderText // Returns a buffer containing a single large string that represents // the resulting formatted token stream // ppErrorMsgs // Returns a buffer containing a listing of errors and warnings that were // encountered during assembly. If you are running in a debugger, // these are the same messages you will see in your debug output. //---------------------------------------------------------------------------- HRESULT WINAPI D3D10PreprocessShader(LPCSTR pSrcData, SIZE_T SrcDataSize, LPCSTR pFileName, CONST D3D10_SHADER_MACRO* pDefines, LPD3D10INCLUDE pInclude, ID3D10Blob** ppShaderText, ID3D10Blob** ppErrorMsgs); ////////////////////////////////////////////////////////////////////////// // // Shader blob manipulation routines // --------------------------------- // // void *pShaderBytecode - a buffer containing the result of an HLSL // compilation. Typically this opaque buffer contains several // discrete sections including the shader executable code, the input // signature, and the output signature. This can typically be retrieved // by calling ID3D10Blob::GetBufferPointer() on the returned blob // from HLSL's compile APIs. // // UINT BytecodeLength - the length of pShaderBytecode. This can // typically be retrieved by calling ID3D10Blob::GetBufferSize() // on the returned blob from HLSL's compile APIs. // // ID3D10Blob **ppSignatureBlob(s) - a newly created buffer that // contains only the signature portions of the original bytecode. // This is a copy; the original bytecode is not modified. You may // specify NULL for this parameter to have the bytecode validated // for the presence of the corresponding signatures without actually // copying them and creating a new blob. // // Returns E_INVALIDARG if any required parameters are NULL // Returns E_FAIL is the bytecode is corrupt or missing signatures // Returns S_OK on success // ////////////////////////////////////////////////////////////////////////// HRESULT WINAPI D3D10GetInputSignatureBlob(CONST void *pShaderBytecode, SIZE_T BytecodeLength, ID3D10Blob **ppSignatureBlob); HRESULT WINAPI D3D10GetOutputSignatureBlob(CONST void *pShaderBytecode, SIZE_T BytecodeLength, ID3D10Blob **ppSignatureBlob); HRESULT WINAPI D3D10GetInputAndOutputSignatureBlob(CONST void *pShaderBytecode, SIZE_T BytecodeLength, ID3D10Blob **ppSignatureBlob); //---------------------------------------------------------------------------- // D3D10GetShaderDebugInfo: // ----------------------- // Gets shader debug info. Debug info is generated by D3D10CompileShader and is // embedded in the body of the shader. // // Parameters: // pShaderBytecode // Pointer to the function bytecode // BytecodeLength // Length of the shader bytecode buffer // ppDebugInfo // Buffer used to return debug info. For information about the layout // of this buffer, see definition of D3D10_SHADER_DEBUG_INFO above. //---------------------------------------------------------------------------- HRESULT WINAPI D3D10GetShaderDebugInfo(CONST void *pShaderBytecode, SIZE_T BytecodeLength, ID3D10Blob** ppDebugInfo); #ifdef __cplusplus } #endif //__cplusplus #endif //__D3D10SHADER_H__ ================================================ FILE: Include/D3D11.h ================================================ /*------------------------------------------------------------------------------------- * * Copyright (c) Microsoft Corporation * *-------------------------------------------------------------------------------------*/ /* this ALWAYS GENERATED file contains the definitions for the interfaces */ /* File created by MIDL compiler version 7.00.0555 */ /* @@MIDL_FILE_HEADING( ) */ #pragma warning( disable: 4049 ) /* more than 64k source lines */ /* verify that the version is high enough to compile this file*/ #ifndef __REQUIRED_RPCNDR_H_VERSION__ #define __REQUIRED_RPCNDR_H_VERSION__ 475 #endif /* verify that the version is high enough to compile this file*/ #ifndef __REQUIRED_RPCSAL_H_VERSION__ #define __REQUIRED_RPCSAL_H_VERSION__ 100 #endif #include "rpc.h" #include "rpcndr.h" #ifndef __RPCNDR_H_VERSION__ #error this stub requires an updated version of #endif // __RPCNDR_H_VERSION__ #ifndef COM_NO_WINDOWS_H #include "windows.h" #include "ole2.h" #endif /*COM_NO_WINDOWS_H*/ #ifndef __d3d11_h__ #define __d3d11_h__ #if defined(_MSC_VER) && (_MSC_VER >= 1020) #pragma once #endif /* Forward Declarations */ #ifndef __ID3D11DeviceChild_FWD_DEFINED__ #define __ID3D11DeviceChild_FWD_DEFINED__ typedef interface ID3D11DeviceChild ID3D11DeviceChild; #endif /* __ID3D11DeviceChild_FWD_DEFINED__ */ #ifndef __ID3D11DepthStencilState_FWD_DEFINED__ #define __ID3D11DepthStencilState_FWD_DEFINED__ typedef interface ID3D11DepthStencilState ID3D11DepthStencilState; #endif /* __ID3D11DepthStencilState_FWD_DEFINED__ */ #ifndef __ID3D11BlendState_FWD_DEFINED__ #define __ID3D11BlendState_FWD_DEFINED__ typedef interface ID3D11BlendState ID3D11BlendState; #endif /* __ID3D11BlendState_FWD_DEFINED__ */ #ifndef __ID3D11RasterizerState_FWD_DEFINED__ #define __ID3D11RasterizerState_FWD_DEFINED__ typedef interface ID3D11RasterizerState ID3D11RasterizerState; #endif /* __ID3D11RasterizerState_FWD_DEFINED__ */ #ifndef __ID3D11Resource_FWD_DEFINED__ #define __ID3D11Resource_FWD_DEFINED__ typedef interface ID3D11Resource ID3D11Resource; #endif /* __ID3D11Resource_FWD_DEFINED__ */ #ifndef __ID3D11Buffer_FWD_DEFINED__ #define __ID3D11Buffer_FWD_DEFINED__ typedef interface ID3D11Buffer ID3D11Buffer; #endif /* __ID3D11Buffer_FWD_DEFINED__ */ #ifndef __ID3D11Texture1D_FWD_DEFINED__ #define __ID3D11Texture1D_FWD_DEFINED__ typedef interface ID3D11Texture1D ID3D11Texture1D; #endif /* __ID3D11Texture1D_FWD_DEFINED__ */ #ifndef __ID3D11Texture2D_FWD_DEFINED__ #define __ID3D11Texture2D_FWD_DEFINED__ typedef interface ID3D11Texture2D ID3D11Texture2D; #endif /* __ID3D11Texture2D_FWD_DEFINED__ */ #ifndef __ID3D11Texture3D_FWD_DEFINED__ #define __ID3D11Texture3D_FWD_DEFINED__ typedef interface ID3D11Texture3D ID3D11Texture3D; #endif /* __ID3D11Texture3D_FWD_DEFINED__ */ #ifndef __ID3D11View_FWD_DEFINED__ #define __ID3D11View_FWD_DEFINED__ typedef interface ID3D11View ID3D11View; #endif /* __ID3D11View_FWD_DEFINED__ */ #ifndef __ID3D11ShaderResourceView_FWD_DEFINED__ #define __ID3D11ShaderResourceView_FWD_DEFINED__ typedef interface ID3D11ShaderResourceView ID3D11ShaderResourceView; #endif /* __ID3D11ShaderResourceView_FWD_DEFINED__ */ #ifndef __ID3D11RenderTargetView_FWD_DEFINED__ #define __ID3D11RenderTargetView_FWD_DEFINED__ typedef interface ID3D11RenderTargetView ID3D11RenderTargetView; #endif /* __ID3D11RenderTargetView_FWD_DEFINED__ */ #ifndef __ID3D11DepthStencilView_FWD_DEFINED__ #define __ID3D11DepthStencilView_FWD_DEFINED__ typedef interface ID3D11DepthStencilView ID3D11DepthStencilView; #endif /* __ID3D11DepthStencilView_FWD_DEFINED__ */ #ifndef __ID3D11UnorderedAccessView_FWD_DEFINED__ #define __ID3D11UnorderedAccessView_FWD_DEFINED__ typedef interface ID3D11UnorderedAccessView ID3D11UnorderedAccessView; #endif /* __ID3D11UnorderedAccessView_FWD_DEFINED__ */ #ifndef __ID3D11VertexShader_FWD_DEFINED__ #define __ID3D11VertexShader_FWD_DEFINED__ typedef interface ID3D11VertexShader ID3D11VertexShader; #endif /* __ID3D11VertexShader_FWD_DEFINED__ */ #ifndef __ID3D11HullShader_FWD_DEFINED__ #define __ID3D11HullShader_FWD_DEFINED__ typedef interface ID3D11HullShader ID3D11HullShader; #endif /* __ID3D11HullShader_FWD_DEFINED__ */ #ifndef __ID3D11DomainShader_FWD_DEFINED__ #define __ID3D11DomainShader_FWD_DEFINED__ typedef interface ID3D11DomainShader ID3D11DomainShader; #endif /* __ID3D11DomainShader_FWD_DEFINED__ */ #ifndef __ID3D11GeometryShader_FWD_DEFINED__ #define __ID3D11GeometryShader_FWD_DEFINED__ typedef interface ID3D11GeometryShader ID3D11GeometryShader; #endif /* __ID3D11GeometryShader_FWD_DEFINED__ */ #ifndef __ID3D11PixelShader_FWD_DEFINED__ #define __ID3D11PixelShader_FWD_DEFINED__ typedef interface ID3D11PixelShader ID3D11PixelShader; #endif /* __ID3D11PixelShader_FWD_DEFINED__ */ #ifndef __ID3D11ComputeShader_FWD_DEFINED__ #define __ID3D11ComputeShader_FWD_DEFINED__ typedef interface ID3D11ComputeShader ID3D11ComputeShader; #endif /* __ID3D11ComputeShader_FWD_DEFINED__ */ #ifndef __ID3D11InputLayout_FWD_DEFINED__ #define __ID3D11InputLayout_FWD_DEFINED__ typedef interface ID3D11InputLayout ID3D11InputLayout; #endif /* __ID3D11InputLayout_FWD_DEFINED__ */ #ifndef __ID3D11SamplerState_FWD_DEFINED__ #define __ID3D11SamplerState_FWD_DEFINED__ typedef interface ID3D11SamplerState ID3D11SamplerState; #endif /* __ID3D11SamplerState_FWD_DEFINED__ */ #ifndef __ID3D11Asynchronous_FWD_DEFINED__ #define __ID3D11Asynchronous_FWD_DEFINED__ typedef interface ID3D11Asynchronous ID3D11Asynchronous; #endif /* __ID3D11Asynchronous_FWD_DEFINED__ */ #ifndef __ID3D11Query_FWD_DEFINED__ #define __ID3D11Query_FWD_DEFINED__ typedef interface ID3D11Query ID3D11Query; #endif /* __ID3D11Query_FWD_DEFINED__ */ #ifndef __ID3D11Predicate_FWD_DEFINED__ #define __ID3D11Predicate_FWD_DEFINED__ typedef interface ID3D11Predicate ID3D11Predicate; #endif /* __ID3D11Predicate_FWD_DEFINED__ */ #ifndef __ID3D11Counter_FWD_DEFINED__ #define __ID3D11Counter_FWD_DEFINED__ typedef interface ID3D11Counter ID3D11Counter; #endif /* __ID3D11Counter_FWD_DEFINED__ */ #ifndef __ID3D11ClassInstance_FWD_DEFINED__ #define __ID3D11ClassInstance_FWD_DEFINED__ typedef interface ID3D11ClassInstance ID3D11ClassInstance; #endif /* __ID3D11ClassInstance_FWD_DEFINED__ */ #ifndef __ID3D11ClassLinkage_FWD_DEFINED__ #define __ID3D11ClassLinkage_FWD_DEFINED__ typedef interface ID3D11ClassLinkage ID3D11ClassLinkage; #endif /* __ID3D11ClassLinkage_FWD_DEFINED__ */ #ifndef __ID3D11CommandList_FWD_DEFINED__ #define __ID3D11CommandList_FWD_DEFINED__ typedef interface ID3D11CommandList ID3D11CommandList; #endif /* __ID3D11CommandList_FWD_DEFINED__ */ #ifndef __ID3D11DeviceContext_FWD_DEFINED__ #define __ID3D11DeviceContext_FWD_DEFINED__ typedef interface ID3D11DeviceContext ID3D11DeviceContext; #endif /* __ID3D11DeviceContext_FWD_DEFINED__ */ #ifndef __ID3D11Device_FWD_DEFINED__ #define __ID3D11Device_FWD_DEFINED__ typedef interface ID3D11Device ID3D11Device; #endif /* __ID3D11Device_FWD_DEFINED__ */ /* header files for imported files */ #include "oaidl.h" #include "ocidl.h" #include "dxgi.h" #include "d3dcommon.h" #ifdef __cplusplus extern "C"{ #endif /* interface __MIDL_itf_d3d11_0000_0000 */ /* [local] */ #ifndef _D3D11_CONSTANTS #define _D3D11_CONSTANTS #define D3D11_16BIT_INDEX_STRIP_CUT_VALUE ( 0xffff ) #define D3D11_32BIT_INDEX_STRIP_CUT_VALUE ( 0xffffffff ) #define D3D11_8BIT_INDEX_STRIP_CUT_VALUE ( 0xff ) #define D3D11_ARRAY_AXIS_ADDRESS_RANGE_BIT_COUNT ( 9 ) #define D3D11_CLIP_OR_CULL_DISTANCE_COUNT ( 8 ) #define D3D11_CLIP_OR_CULL_DISTANCE_ELEMENT_COUNT ( 2 ) #define D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT ( 14 ) #define D3D11_COMMONSHADER_CONSTANT_BUFFER_COMPONENTS ( 4 ) #define D3D11_COMMONSHADER_CONSTANT_BUFFER_COMPONENT_BIT_COUNT ( 32 ) #define D3D11_COMMONSHADER_CONSTANT_BUFFER_HW_SLOT_COUNT ( 15 ) #define D3D11_COMMONSHADER_CONSTANT_BUFFER_REGISTER_COMPONENTS ( 4 ) #define D3D11_COMMONSHADER_CONSTANT_BUFFER_REGISTER_COUNT ( 15 ) #define D3D11_COMMONSHADER_CONSTANT_BUFFER_REGISTER_READS_PER_INST ( 1 ) #define D3D11_COMMONSHADER_CONSTANT_BUFFER_REGISTER_READ_PORTS ( 1 ) #define D3D11_COMMONSHADER_FLOWCONTROL_NESTING_LIMIT ( 64 ) #define D3D11_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_COMPONENTS ( 4 ) #define D3D11_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_COUNT ( 1 ) #define D3D11_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_READS_PER_INST ( 1 ) #define D3D11_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_READ_PORTS ( 1 ) #define D3D11_COMMONSHADER_IMMEDIATE_VALUE_COMPONENT_BIT_COUNT ( 32 ) #define D3D11_COMMONSHADER_INPUT_RESOURCE_REGISTER_COMPONENTS ( 1 ) #define D3D11_COMMONSHADER_INPUT_RESOURCE_REGISTER_COUNT ( 128 ) #define D3D11_COMMONSHADER_INPUT_RESOURCE_REGISTER_READS_PER_INST ( 1 ) #define D3D11_COMMONSHADER_INPUT_RESOURCE_REGISTER_READ_PORTS ( 1 ) #define D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT ( 128 ) #define D3D11_COMMONSHADER_SAMPLER_REGISTER_COMPONENTS ( 1 ) #define D3D11_COMMONSHADER_SAMPLER_REGISTER_COUNT ( 16 ) #define D3D11_COMMONSHADER_SAMPLER_REGISTER_READS_PER_INST ( 1 ) #define D3D11_COMMONSHADER_SAMPLER_REGISTER_READ_PORTS ( 1 ) #define D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT ( 16 ) #define D3D11_COMMONSHADER_SUBROUTINE_NESTING_LIMIT ( 32 ) #define D3D11_COMMONSHADER_TEMP_REGISTER_COMPONENTS ( 4 ) #define D3D11_COMMONSHADER_TEMP_REGISTER_COMPONENT_BIT_COUNT ( 32 ) #define D3D11_COMMONSHADER_TEMP_REGISTER_COUNT ( 4096 ) #define D3D11_COMMONSHADER_TEMP_REGISTER_READS_PER_INST ( 3 ) #define D3D11_COMMONSHADER_TEMP_REGISTER_READ_PORTS ( 3 ) #define D3D11_COMMONSHADER_TEXCOORD_RANGE_REDUCTION_MAX ( 10 ) #define D3D11_COMMONSHADER_TEXCOORD_RANGE_REDUCTION_MIN ( -10 ) #define D3D11_COMMONSHADER_TEXEL_OFFSET_MAX_NEGATIVE ( -8 ) #define D3D11_COMMONSHADER_TEXEL_OFFSET_MAX_POSITIVE ( 7 ) #define D3D11_CS_4_X_BUCKET00_MAX_BYTES_TGSM_WRITABLE_PER_THREAD ( 256 ) #define D3D11_CS_4_X_BUCKET00_MAX_NUM_THREADS_PER_GROUP ( 64 ) #define D3D11_CS_4_X_BUCKET01_MAX_BYTES_TGSM_WRITABLE_PER_THREAD ( 240 ) #define D3D11_CS_4_X_BUCKET01_MAX_NUM_THREADS_PER_GROUP ( 68 ) #define D3D11_CS_4_X_BUCKET02_MAX_BYTES_TGSM_WRITABLE_PER_THREAD ( 224 ) #define D3D11_CS_4_X_BUCKET02_MAX_NUM_THREADS_PER_GROUP ( 72 ) #define D3D11_CS_4_X_BUCKET03_MAX_BYTES_TGSM_WRITABLE_PER_THREAD ( 208 ) #define D3D11_CS_4_X_BUCKET03_MAX_NUM_THREADS_PER_GROUP ( 76 ) #define D3D11_CS_4_X_BUCKET04_MAX_BYTES_TGSM_WRITABLE_PER_THREAD ( 192 ) #define D3D11_CS_4_X_BUCKET04_MAX_NUM_THREADS_PER_GROUP ( 84 ) #define D3D11_CS_4_X_BUCKET05_MAX_BYTES_TGSM_WRITABLE_PER_THREAD ( 176 ) #define D3D11_CS_4_X_BUCKET05_MAX_NUM_THREADS_PER_GROUP ( 92 ) #define D3D11_CS_4_X_BUCKET06_MAX_BYTES_TGSM_WRITABLE_PER_THREAD ( 160 ) #define D3D11_CS_4_X_BUCKET06_MAX_NUM_THREADS_PER_GROUP ( 100 ) #define D3D11_CS_4_X_BUCKET07_MAX_BYTES_TGSM_WRITABLE_PER_THREAD ( 144 ) #define D3D11_CS_4_X_BUCKET07_MAX_NUM_THREADS_PER_GROUP ( 112 ) #define D3D11_CS_4_X_BUCKET08_MAX_BYTES_TGSM_WRITABLE_PER_THREAD ( 128 ) #define D3D11_CS_4_X_BUCKET08_MAX_NUM_THREADS_PER_GROUP ( 128 ) #define D3D11_CS_4_X_BUCKET09_MAX_BYTES_TGSM_WRITABLE_PER_THREAD ( 112 ) #define D3D11_CS_4_X_BUCKET09_MAX_NUM_THREADS_PER_GROUP ( 144 ) #define D3D11_CS_4_X_BUCKET10_MAX_BYTES_TGSM_WRITABLE_PER_THREAD ( 96 ) #define D3D11_CS_4_X_BUCKET10_MAX_NUM_THREADS_PER_GROUP ( 168 ) #define D3D11_CS_4_X_BUCKET11_MAX_BYTES_TGSM_WRITABLE_PER_THREAD ( 80 ) #define D3D11_CS_4_X_BUCKET11_MAX_NUM_THREADS_PER_GROUP ( 204 ) #define D3D11_CS_4_X_BUCKET12_MAX_BYTES_TGSM_WRITABLE_PER_THREAD ( 64 ) #define D3D11_CS_4_X_BUCKET12_MAX_NUM_THREADS_PER_GROUP ( 256 ) #define D3D11_CS_4_X_BUCKET13_MAX_BYTES_TGSM_WRITABLE_PER_THREAD ( 48 ) #define D3D11_CS_4_X_BUCKET13_MAX_NUM_THREADS_PER_GROUP ( 340 ) #define D3D11_CS_4_X_BUCKET14_MAX_BYTES_TGSM_WRITABLE_PER_THREAD ( 32 ) #define D3D11_CS_4_X_BUCKET14_MAX_NUM_THREADS_PER_GROUP ( 512 ) #define D3D11_CS_4_X_BUCKET15_MAX_BYTES_TGSM_WRITABLE_PER_THREAD ( 16 ) #define D3D11_CS_4_X_BUCKET15_MAX_NUM_THREADS_PER_GROUP ( 768 ) #define D3D11_CS_4_X_DISPATCH_MAX_THREAD_GROUPS_IN_Z_DIMENSION ( 1 ) #define D3D11_CS_4_X_RAW_UAV_BYTE_ALIGNMENT ( 256 ) #define D3D11_CS_4_X_THREAD_GROUP_MAX_THREADS_PER_GROUP ( 768 ) #define D3D11_CS_4_X_THREAD_GROUP_MAX_X ( 768 ) #define D3D11_CS_4_X_THREAD_GROUP_MAX_Y ( 768 ) #define D3D11_CS_4_X_UAV_REGISTER_COUNT ( 1 ) #define D3D11_CS_DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION ( 65535 ) #define D3D11_CS_TGSM_REGISTER_COUNT ( 8192 ) #define D3D11_CS_TGSM_REGISTER_READS_PER_INST ( 1 ) #define D3D11_CS_TGSM_RESOURCE_REGISTER_COMPONENTS ( 1 ) #define D3D11_CS_TGSM_RESOURCE_REGISTER_READ_PORTS ( 1 ) #define D3D11_CS_THREAD_GROUP_MAX_THREADS_PER_GROUP ( 1024 ) #define D3D11_CS_THREAD_GROUP_MAX_X ( 1024 ) #define D3D11_CS_THREAD_GROUP_MAX_Y ( 1024 ) #define D3D11_CS_THREAD_GROUP_MAX_Z ( 64 ) #define D3D11_CS_THREAD_GROUP_MIN_X ( 1 ) #define D3D11_CS_THREAD_GROUP_MIN_Y ( 1 ) #define D3D11_CS_THREAD_GROUP_MIN_Z ( 1 ) #define D3D11_CS_THREAD_LOCAL_TEMP_REGISTER_POOL ( 16384 ) #define D3D11_DEFAULT_BLEND_FACTOR_ALPHA ( 1.0f ) #define D3D11_DEFAULT_BLEND_FACTOR_BLUE ( 1.0f ) #define D3D11_DEFAULT_BLEND_FACTOR_GREEN ( 1.0f ) #define D3D11_DEFAULT_BLEND_FACTOR_RED ( 1.0f ) #define D3D11_DEFAULT_BORDER_COLOR_COMPONENT ( 0.0f ) #define D3D11_DEFAULT_DEPTH_BIAS ( 0 ) #define D3D11_DEFAULT_DEPTH_BIAS_CLAMP ( 0.0f ) #define D3D11_DEFAULT_MAX_ANISOTROPY ( 16 ) #define D3D11_DEFAULT_MIP_LOD_BIAS ( 0.0f ) #define D3D11_DEFAULT_RENDER_TARGET_ARRAY_INDEX ( 0 ) #define D3D11_DEFAULT_SAMPLE_MASK ( 0xffffffff ) #define D3D11_DEFAULT_SCISSOR_ENDX ( 0 ) #define D3D11_DEFAULT_SCISSOR_ENDY ( 0 ) #define D3D11_DEFAULT_SCISSOR_STARTX ( 0 ) #define D3D11_DEFAULT_SCISSOR_STARTY ( 0 ) #define D3D11_DEFAULT_SLOPE_SCALED_DEPTH_BIAS ( 0.0f ) #define D3D11_DEFAULT_STENCIL_READ_MASK ( 0xff ) #define D3D11_DEFAULT_STENCIL_REFERENCE ( 0 ) #define D3D11_DEFAULT_STENCIL_WRITE_MASK ( 0xff ) #define D3D11_DEFAULT_VIEWPORT_AND_SCISSORRECT_INDEX ( 0 ) #define D3D11_DEFAULT_VIEWPORT_HEIGHT ( 0 ) #define D3D11_DEFAULT_VIEWPORT_MAX_DEPTH ( 0.0f ) #define D3D11_DEFAULT_VIEWPORT_MIN_DEPTH ( 0.0f ) #define D3D11_DEFAULT_VIEWPORT_TOPLEFTX ( 0 ) #define D3D11_DEFAULT_VIEWPORT_TOPLEFTY ( 0 ) #define D3D11_DEFAULT_VIEWPORT_WIDTH ( 0 ) #define D3D11_DS_INPUT_CONTROL_POINTS_MAX_TOTAL_SCALARS ( 3968 ) #define D3D11_DS_INPUT_CONTROL_POINT_REGISTER_COMPONENTS ( 4 ) #define D3D11_DS_INPUT_CONTROL_POINT_REGISTER_COMPONENT_BIT_COUNT ( 32 ) #define D3D11_DS_INPUT_CONTROL_POINT_REGISTER_COUNT ( 32 ) #define D3D11_DS_INPUT_CONTROL_POINT_REGISTER_READS_PER_INST ( 2 ) #define D3D11_DS_INPUT_CONTROL_POINT_REGISTER_READ_PORTS ( 1 ) #define D3D11_DS_INPUT_DOMAIN_POINT_REGISTER_COMPONENTS ( 3 ) #define D3D11_DS_INPUT_DOMAIN_POINT_REGISTER_COMPONENT_BIT_COUNT ( 32 ) #define D3D11_DS_INPUT_DOMAIN_POINT_REGISTER_COUNT ( 1 ) #define D3D11_DS_INPUT_DOMAIN_POINT_REGISTER_READS_PER_INST ( 2 ) #define D3D11_DS_INPUT_DOMAIN_POINT_REGISTER_READ_PORTS ( 1 ) #define D3D11_DS_INPUT_PATCH_CONSTANT_REGISTER_COMPONENTS ( 4 ) #define D3D11_DS_INPUT_PATCH_CONSTANT_REGISTER_COMPONENT_BIT_COUNT ( 32 ) #define D3D11_DS_INPUT_PATCH_CONSTANT_REGISTER_COUNT ( 32 ) #define D3D11_DS_INPUT_PATCH_CONSTANT_REGISTER_READS_PER_INST ( 2 ) #define D3D11_DS_INPUT_PATCH_CONSTANT_REGISTER_READ_PORTS ( 1 ) #define D3D11_DS_OUTPUT_REGISTER_COMPONENTS ( 4 ) #define D3D11_DS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT ( 32 ) #define D3D11_DS_OUTPUT_REGISTER_COUNT ( 32 ) #define D3D11_FLOAT16_FUSED_TOLERANCE_IN_ULP ( 0.6 ) #define D3D11_FLOAT32_MAX ( 3.402823466e+38f ) #define D3D11_FLOAT32_TO_INTEGER_TOLERANCE_IN_ULP ( 0.6f ) #define D3D11_FLOAT_TO_SRGB_EXPONENT_DENOMINATOR ( 2.4f ) #define D3D11_FLOAT_TO_SRGB_EXPONENT_NUMERATOR ( 1.0f ) #define D3D11_FLOAT_TO_SRGB_OFFSET ( 0.055f ) #define D3D11_FLOAT_TO_SRGB_SCALE_1 ( 12.92f ) #define D3D11_FLOAT_TO_SRGB_SCALE_2 ( 1.055f ) #define D3D11_FLOAT_TO_SRGB_THRESHOLD ( 0.0031308f ) #define D3D11_FTOI_INSTRUCTION_MAX_INPUT ( 2147483647.999f ) #define D3D11_FTOI_INSTRUCTION_MIN_INPUT ( -2147483648.999f ) #define D3D11_FTOU_INSTRUCTION_MAX_INPUT ( 4294967295.999f ) #define D3D11_FTOU_INSTRUCTION_MIN_INPUT ( 0.0f ) #define D3D11_GS_INPUT_INSTANCE_ID_READS_PER_INST ( 2 ) #define D3D11_GS_INPUT_INSTANCE_ID_READ_PORTS ( 1 ) #define D3D11_GS_INPUT_INSTANCE_ID_REGISTER_COMPONENTS ( 1 ) #define D3D11_GS_INPUT_INSTANCE_ID_REGISTER_COMPONENT_BIT_COUNT ( 32 ) #define D3D11_GS_INPUT_INSTANCE_ID_REGISTER_COUNT ( 1 ) #define D3D11_GS_INPUT_PRIM_CONST_REGISTER_COMPONENTS ( 1 ) #define D3D11_GS_INPUT_PRIM_CONST_REGISTER_COMPONENT_BIT_COUNT ( 32 ) #define D3D11_GS_INPUT_PRIM_CONST_REGISTER_COUNT ( 1 ) #define D3D11_GS_INPUT_PRIM_CONST_REGISTER_READS_PER_INST ( 2 ) #define D3D11_GS_INPUT_PRIM_CONST_REGISTER_READ_PORTS ( 1 ) #define D3D11_GS_INPUT_REGISTER_COMPONENTS ( 4 ) #define D3D11_GS_INPUT_REGISTER_COMPONENT_BIT_COUNT ( 32 ) #define D3D11_GS_INPUT_REGISTER_COUNT ( 32 ) #define D3D11_GS_INPUT_REGISTER_READS_PER_INST ( 2 ) #define D3D11_GS_INPUT_REGISTER_READ_PORTS ( 1 ) #define D3D11_GS_INPUT_REGISTER_VERTICES ( 32 ) #define D3D11_GS_MAX_INSTANCE_COUNT ( 32 ) #define D3D11_GS_MAX_OUTPUT_VERTEX_COUNT_ACROSS_INSTANCES ( 1024 ) #define D3D11_GS_OUTPUT_ELEMENTS ( 32 ) #define D3D11_GS_OUTPUT_REGISTER_COMPONENTS ( 4 ) #define D3D11_GS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT ( 32 ) #define D3D11_GS_OUTPUT_REGISTER_COUNT ( 32 ) #define D3D11_HS_CONTROL_POINT_PHASE_INPUT_REGISTER_COUNT ( 32 ) #define D3D11_HS_CONTROL_POINT_PHASE_OUTPUT_REGISTER_COUNT ( 32 ) #define D3D11_HS_CONTROL_POINT_REGISTER_COMPONENTS ( 4 ) #define D3D11_HS_CONTROL_POINT_REGISTER_COMPONENT_BIT_COUNT ( 32 ) #define D3D11_HS_CONTROL_POINT_REGISTER_READS_PER_INST ( 2 ) #define D3D11_HS_CONTROL_POINT_REGISTER_READ_PORTS ( 1 ) #define D3D11_HS_FORK_PHASE_INSTANCE_COUNT_UPPER_BOUND ( 0xffffffff ) #define D3D11_HS_INPUT_FORK_INSTANCE_ID_REGISTER_COMPONENTS ( 1 ) #define D3D11_HS_INPUT_FORK_INSTANCE_ID_REGISTER_COMPONENT_BIT_COUNT ( 32 ) #define D3D11_HS_INPUT_FORK_INSTANCE_ID_REGISTER_COUNT ( 1 ) #define D3D11_HS_INPUT_FORK_INSTANCE_ID_REGISTER_READS_PER_INST ( 2 ) #define D3D11_HS_INPUT_FORK_INSTANCE_ID_REGISTER_READ_PORTS ( 1 ) #define D3D11_HS_INPUT_JOIN_INSTANCE_ID_REGISTER_COMPONENTS ( 1 ) #define D3D11_HS_INPUT_JOIN_INSTANCE_ID_REGISTER_COMPONENT_BIT_COUNT ( 32 ) #define D3D11_HS_INPUT_JOIN_INSTANCE_ID_REGISTER_COUNT ( 1 ) #define D3D11_HS_INPUT_JOIN_INSTANCE_ID_REGISTER_READS_PER_INST ( 2 ) #define D3D11_HS_INPUT_JOIN_INSTANCE_ID_REGISTER_READ_PORTS ( 1 ) #define D3D11_HS_INPUT_PRIMITIVE_ID_REGISTER_COMPONENTS ( 1 ) #define D3D11_HS_INPUT_PRIMITIVE_ID_REGISTER_COMPONENT_BIT_COUNT ( 32 ) #define D3D11_HS_INPUT_PRIMITIVE_ID_REGISTER_COUNT ( 1 ) #define D3D11_HS_INPUT_PRIMITIVE_ID_REGISTER_READS_PER_INST ( 2 ) #define D3D11_HS_INPUT_PRIMITIVE_ID_REGISTER_READ_PORTS ( 1 ) #define D3D11_HS_JOIN_PHASE_INSTANCE_COUNT_UPPER_BOUND ( 0xffffffff ) #define D3D11_HS_MAXTESSFACTOR_LOWER_BOUND ( 1.0f ) #define D3D11_HS_MAXTESSFACTOR_UPPER_BOUND ( 64.0f ) #define D3D11_HS_OUTPUT_CONTROL_POINTS_MAX_TOTAL_SCALARS ( 3968 ) #define D3D11_HS_OUTPUT_CONTROL_POINT_ID_REGISTER_COMPONENTS ( 1 ) #define D3D11_HS_OUTPUT_CONTROL_POINT_ID_REGISTER_COMPONENT_BIT_COUNT ( 32 ) #define D3D11_HS_OUTPUT_CONTROL_POINT_ID_REGISTER_COUNT ( 1 ) #define D3D11_HS_OUTPUT_CONTROL_POINT_ID_REGISTER_READS_PER_INST ( 2 ) #define D3D11_HS_OUTPUT_CONTROL_POINT_ID_REGISTER_READ_PORTS ( 1 ) #define D3D11_HS_OUTPUT_PATCH_CONSTANT_REGISTER_COMPONENTS ( 4 ) #define D3D11_HS_OUTPUT_PATCH_CONSTANT_REGISTER_COMPONENT_BIT_COUNT ( 32 ) #define D3D11_HS_OUTPUT_PATCH_CONSTANT_REGISTER_COUNT ( 32 ) #define D3D11_HS_OUTPUT_PATCH_CONSTANT_REGISTER_READS_PER_INST ( 2 ) #define D3D11_HS_OUTPUT_PATCH_CONSTANT_REGISTER_READ_PORTS ( 1 ) #define D3D11_IA_DEFAULT_INDEX_BUFFER_OFFSET_IN_BYTES ( 0 ) #define D3D11_IA_DEFAULT_PRIMITIVE_TOPOLOGY ( 0 ) #define D3D11_IA_DEFAULT_VERTEX_BUFFER_OFFSET_IN_BYTES ( 0 ) #define D3D11_IA_INDEX_INPUT_RESOURCE_SLOT_COUNT ( 1 ) #define D3D11_IA_INSTANCE_ID_BIT_COUNT ( 32 ) #define D3D11_IA_INTEGER_ARITHMETIC_BIT_COUNT ( 32 ) #define D3D11_IA_PATCH_MAX_CONTROL_POINT_COUNT ( 32 ) #define D3D11_IA_PRIMITIVE_ID_BIT_COUNT ( 32 ) #define D3D11_IA_VERTEX_ID_BIT_COUNT ( 32 ) #define D3D11_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT ( 32 ) #define D3D11_IA_VERTEX_INPUT_STRUCTURE_ELEMENTS_COMPONENTS ( 128 ) #define D3D11_IA_VERTEX_INPUT_STRUCTURE_ELEMENT_COUNT ( 32 ) #define D3D11_INTEGER_DIVIDE_BY_ZERO_QUOTIENT ( 0xffffffff ) #define D3D11_INTEGER_DIVIDE_BY_ZERO_REMAINDER ( 0xffffffff ) #define D3D11_KEEP_RENDER_TARGETS_AND_DEPTH_STENCIL ( 0xffffffff ) #define D3D11_KEEP_UNORDERED_ACCESS_VIEWS ( 0xffffffff ) #define D3D11_LINEAR_GAMMA ( 1.0f ) #define D3D11_MAJOR_VERSION ( 11 ) #define D3D11_MAX_BORDER_COLOR_COMPONENT ( 1.0f ) #define D3D11_MAX_DEPTH ( 1.0f ) #define D3D11_MAX_MAXANISOTROPY ( 16 ) #define D3D11_MAX_MULTISAMPLE_SAMPLE_COUNT ( 32 ) #define D3D11_MAX_POSITION_VALUE ( 3.402823466e+34f ) #define D3D11_MAX_TEXTURE_DIMENSION_2_TO_EXP ( 17 ) #define D3D11_MINOR_VERSION ( 0 ) #define D3D11_MIN_BORDER_COLOR_COMPONENT ( 0.0f ) #define D3D11_MIN_DEPTH ( 0.0f ) #define D3D11_MIN_MAXANISOTROPY ( 0 ) #define D3D11_MIP_LOD_BIAS_MAX ( 15.99f ) #define D3D11_MIP_LOD_BIAS_MIN ( -16.0f ) #define D3D11_MIP_LOD_FRACTIONAL_BIT_COUNT ( 8 ) #define D3D11_MIP_LOD_RANGE_BIT_COUNT ( 8 ) #define D3D11_MULTISAMPLE_ANTIALIAS_LINE_WIDTH ( 1.4f ) #define D3D11_NONSAMPLE_FETCH_OUT_OF_RANGE_ACCESS_RESULT ( 0 ) #define D3D11_PIXEL_ADDRESS_RANGE_BIT_COUNT ( 15 ) #define D3D11_PRE_SCISSOR_PIXEL_ADDRESS_RANGE_BIT_COUNT ( 16 ) #define D3D11_PS_CS_UAV_REGISTER_COMPONENTS ( 1 ) #define D3D11_PS_CS_UAV_REGISTER_COUNT ( 8 ) #define D3D11_PS_CS_UAV_REGISTER_READS_PER_INST ( 1 ) #define D3D11_PS_CS_UAV_REGISTER_READ_PORTS ( 1 ) #define D3D11_PS_FRONTFACING_DEFAULT_VALUE ( 0xffffffff ) #define D3D11_PS_FRONTFACING_FALSE_VALUE ( 0 ) #define D3D11_PS_FRONTFACING_TRUE_VALUE ( 0xffffffff ) #define D3D11_PS_INPUT_REGISTER_COMPONENTS ( 4 ) #define D3D11_PS_INPUT_REGISTER_COMPONENT_BIT_COUNT ( 32 ) #define D3D11_PS_INPUT_REGISTER_COUNT ( 32 ) #define D3D11_PS_INPUT_REGISTER_READS_PER_INST ( 2 ) #define D3D11_PS_INPUT_REGISTER_READ_PORTS ( 1 ) #define D3D11_PS_LEGACY_PIXEL_CENTER_FRACTIONAL_COMPONENT ( 0.0f ) #define D3D11_PS_OUTPUT_DEPTH_REGISTER_COMPONENTS ( 1 ) #define D3D11_PS_OUTPUT_DEPTH_REGISTER_COMPONENT_BIT_COUNT ( 32 ) #define D3D11_PS_OUTPUT_DEPTH_REGISTER_COUNT ( 1 ) #define D3D11_PS_OUTPUT_MASK_REGISTER_COMPONENTS ( 1 ) #define D3D11_PS_OUTPUT_MASK_REGISTER_COMPONENT_BIT_COUNT ( 32 ) #define D3D11_PS_OUTPUT_MASK_REGISTER_COUNT ( 1 ) #define D3D11_PS_OUTPUT_REGISTER_COMPONENTS ( 4 ) #define D3D11_PS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT ( 32 ) #define D3D11_PS_OUTPUT_REGISTER_COUNT ( 8 ) #define D3D11_PS_PIXEL_CENTER_FRACTIONAL_COMPONENT ( 0.5f ) #define D3D11_RAW_UAV_SRV_BYTE_ALIGNMENT ( 16 ) #define D3D11_REQ_BLEND_OBJECT_COUNT_PER_DEVICE ( 4096 ) #define D3D11_REQ_BUFFER_RESOURCE_TEXEL_COUNT_2_TO_EXP ( 27 ) #define D3D11_REQ_CONSTANT_BUFFER_ELEMENT_COUNT ( 4096 ) #define D3D11_REQ_DEPTH_STENCIL_OBJECT_COUNT_PER_DEVICE ( 4096 ) #define D3D11_REQ_DRAWINDEXED_INDEX_COUNT_2_TO_EXP ( 32 ) #define D3D11_REQ_DRAW_VERTEX_COUNT_2_TO_EXP ( 32 ) #define D3D11_REQ_FILTERING_HW_ADDRESSABLE_RESOURCE_DIMENSION ( 16384 ) #define D3D11_REQ_GS_INVOCATION_32BIT_OUTPUT_COMPONENT_LIMIT ( 1024 ) #define D3D11_REQ_IMMEDIATE_CONSTANT_BUFFER_ELEMENT_COUNT ( 4096 ) #define D3D11_REQ_MAXANISOTROPY ( 16 ) #define D3D11_REQ_MIP_LEVELS ( 15 ) #define D3D11_REQ_MULTI_ELEMENT_STRUCTURE_SIZE_IN_BYTES ( 2048 ) #define D3D11_REQ_RASTERIZER_OBJECT_COUNT_PER_DEVICE ( 4096 ) #define D3D11_REQ_RENDER_TO_BUFFER_WINDOW_WIDTH ( 16384 ) #define D3D11_REQ_RESOURCE_SIZE_IN_MEGABYTES_EXPRESSION_A_TERM ( 128 ) #define D3D11_REQ_RESOURCE_SIZE_IN_MEGABYTES_EXPRESSION_B_TERM ( 0.25f ) #define D3D11_REQ_RESOURCE_VIEW_COUNT_PER_DEVICE_2_TO_EXP ( 20 ) #define D3D11_REQ_SAMPLER_OBJECT_COUNT_PER_DEVICE ( 4096 ) #define D3D11_REQ_TEXTURE1D_ARRAY_AXIS_DIMENSION ( 2048 ) #define D3D11_REQ_TEXTURE1D_U_DIMENSION ( 16384 ) #define D3D11_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION ( 2048 ) #define D3D11_REQ_TEXTURE2D_U_OR_V_DIMENSION ( 16384 ) #define D3D11_REQ_TEXTURE3D_U_V_OR_W_DIMENSION ( 2048 ) #define D3D11_REQ_TEXTURECUBE_DIMENSION ( 16384 ) #define D3D11_RESINFO_INSTRUCTION_MISSING_COMPONENT_RETVAL ( 0 ) #define D3D11_SHADER_MAJOR_VERSION ( 5 ) #define D3D11_SHADER_MAX_INSTANCES ( 65535 ) #define D3D11_SHADER_MAX_INTERFACES ( 253 ) #define D3D11_SHADER_MAX_INTERFACE_CALL_SITES ( 4096 ) #define D3D11_SHADER_MAX_TYPES ( 65535 ) #define D3D11_SHADER_MINOR_VERSION ( 0 ) #define D3D11_SHIFT_INSTRUCTION_PAD_VALUE ( 0 ) #define D3D11_SHIFT_INSTRUCTION_SHIFT_VALUE_BIT_COUNT ( 5 ) #define D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT ( 8 ) #define D3D11_SO_BUFFER_MAX_STRIDE_IN_BYTES ( 2048 ) #define D3D11_SO_BUFFER_MAX_WRITE_WINDOW_IN_BYTES ( 512 ) #define D3D11_SO_BUFFER_SLOT_COUNT ( 4 ) #define D3D11_SO_DDI_REGISTER_INDEX_DENOTING_GAP ( 0xffffffff ) #define D3D11_SO_NO_RASTERIZED_STREAM ( 0xffffffff ) #define D3D11_SO_OUTPUT_COMPONENT_COUNT ( 128 ) #define D3D11_SO_STREAM_COUNT ( 4 ) #define D3D11_SPEC_DATE_DAY ( 04 ) #define D3D11_SPEC_DATE_MONTH ( 06 ) #define D3D11_SPEC_DATE_YEAR ( 2009 ) #define D3D11_SPEC_VERSION ( 1.0 ) #define D3D11_SRGB_GAMMA ( 2.2f ) #define D3D11_SRGB_TO_FLOAT_DENOMINATOR_1 ( 12.92f ) #define D3D11_SRGB_TO_FLOAT_DENOMINATOR_2 ( 1.055f ) #define D3D11_SRGB_TO_FLOAT_EXPONENT ( 2.4f ) #define D3D11_SRGB_TO_FLOAT_OFFSET ( 0.055f ) #define D3D11_SRGB_TO_FLOAT_THRESHOLD ( 0.04045f ) #define D3D11_SRGB_TO_FLOAT_TOLERANCE_IN_ULP ( 0.5f ) #define D3D11_STANDARD_COMPONENT_BIT_COUNT ( 32 ) #define D3D11_STANDARD_COMPONENT_BIT_COUNT_DOUBLED ( 64 ) #define D3D11_STANDARD_MAXIMUM_ELEMENT_ALIGNMENT_BYTE_MULTIPLE ( 4 ) #define D3D11_STANDARD_PIXEL_COMPONENT_COUNT ( 128 ) #define D3D11_STANDARD_PIXEL_ELEMENT_COUNT ( 32 ) #define D3D11_STANDARD_VECTOR_SIZE ( 4 ) #define D3D11_STANDARD_VERTEX_ELEMENT_COUNT ( 32 ) #define D3D11_STANDARD_VERTEX_TOTAL_COMPONENT_COUNT ( 64 ) #define D3D11_SUBPIXEL_FRACTIONAL_BIT_COUNT ( 8 ) #define D3D11_SUBTEXEL_FRACTIONAL_BIT_COUNT ( 8 ) #define D3D11_TESSELLATOR_MAX_EVEN_TESSELLATION_FACTOR ( 64 ) #define D3D11_TESSELLATOR_MAX_ISOLINE_DENSITY_TESSELLATION_FACTOR ( 64 ) #define D3D11_TESSELLATOR_MAX_ODD_TESSELLATION_FACTOR ( 63 ) #define D3D11_TESSELLATOR_MAX_TESSELLATION_FACTOR ( 64 ) #define D3D11_TESSELLATOR_MIN_EVEN_TESSELLATION_FACTOR ( 2 ) #define D3D11_TESSELLATOR_MIN_ISOLINE_DENSITY_TESSELLATION_FACTOR ( 1 ) #define D3D11_TESSELLATOR_MIN_ODD_TESSELLATION_FACTOR ( 1 ) #define D3D11_TEXEL_ADDRESS_RANGE_BIT_COUNT ( 16 ) #define D3D11_UNBOUND_MEMORY_ACCESS_RESULT ( 0 ) #define D3D11_VIEWPORT_AND_SCISSORRECT_MAX_INDEX ( 15 ) #define D3D11_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE ( 16 ) #define D3D11_VIEWPORT_BOUNDS_MAX ( 32767 ) #define D3D11_VIEWPORT_BOUNDS_MIN ( -32768 ) #define D3D11_VS_INPUT_REGISTER_COMPONENTS ( 4 ) #define D3D11_VS_INPUT_REGISTER_COMPONENT_BIT_COUNT ( 32 ) #define D3D11_VS_INPUT_REGISTER_COUNT ( 32 ) #define D3D11_VS_INPUT_REGISTER_READS_PER_INST ( 2 ) #define D3D11_VS_INPUT_REGISTER_READ_PORTS ( 1 ) #define D3D11_VS_OUTPUT_REGISTER_COMPONENTS ( 4 ) #define D3D11_VS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT ( 32 ) #define D3D11_VS_OUTPUT_REGISTER_COUNT ( 32 ) #define D3D11_WHQL_CONTEXT_COUNT_FOR_RESOURCE_LIMIT ( 10 ) #define D3D11_WHQL_DRAWINDEXED_INDEX_COUNT_2_TO_EXP ( 25 ) #define D3D11_WHQL_DRAW_VERTEX_COUNT_2_TO_EXP ( 25 ) #endif #define _FACD3D11 ( 0x87c ) #define _FACD3D11DEBUG ( ( _FACD3D11 + 1 ) ) #define MAKE_D3D11_HRESULT( code ) MAKE_HRESULT( 1, _FACD3D11, code ) #define MAKE_D3D11_STATUS( code ) MAKE_HRESULT( 0, _FACD3D11, code ) #define D3D11_ERROR_TOO_MANY_UNIQUE_STATE_OBJECTS MAKE_D3D11_HRESULT(1) #define D3D11_ERROR_FILE_NOT_FOUND MAKE_D3D11_HRESULT(2) #define D3D11_ERROR_TOO_MANY_UNIQUE_VIEW_OBJECTS MAKE_D3D11_HRESULT(3) #define D3D11_ERROR_DEFERRED_CONTEXT_MAP_WITHOUT_INITIAL_DISCARD MAKE_D3D11_HRESULT(4) #if __SAL_H_FULL_VER < 140050727 #undef __in_range #undef __in_xcount_opt #define __in_range(x, y) #define __in_xcount_opt(x) #endif #if !defined( D3D11_NO_HELPERS ) && defined( __cplusplus ) } struct CD3D11_DEFAULT {}; extern const DECLSPEC_SELECTANY CD3D11_DEFAULT D3D11_DEFAULT; extern "C"{ #endif typedef enum D3D11_INPUT_CLASSIFICATION { D3D11_INPUT_PER_VERTEX_DATA = 0, D3D11_INPUT_PER_INSTANCE_DATA = 1 } D3D11_INPUT_CLASSIFICATION; #define D3D11_APPEND_ALIGNED_ELEMENT ( 0xffffffff ) typedef struct D3D11_INPUT_ELEMENT_DESC { LPCSTR SemanticName; UINT SemanticIndex; DXGI_FORMAT Format; UINT InputSlot; UINT AlignedByteOffset; D3D11_INPUT_CLASSIFICATION InputSlotClass; UINT InstanceDataStepRate; } D3D11_INPUT_ELEMENT_DESC; typedef enum D3D11_FILL_MODE { D3D11_FILL_WIREFRAME = 2, D3D11_FILL_SOLID = 3 } D3D11_FILL_MODE; typedef D3D_PRIMITIVE_TOPOLOGY D3D11_PRIMITIVE_TOPOLOGY; typedef D3D_PRIMITIVE D3D11_PRIMITIVE; typedef enum D3D11_CULL_MODE { D3D11_CULL_NONE = 1, D3D11_CULL_FRONT = 2, D3D11_CULL_BACK = 3 } D3D11_CULL_MODE; typedef struct D3D11_SO_DECLARATION_ENTRY { UINT Stream; LPCSTR SemanticName; UINT SemanticIndex; BYTE StartComponent; BYTE ComponentCount; BYTE OutputSlot; } D3D11_SO_DECLARATION_ENTRY; typedef struct D3D11_VIEWPORT { FLOAT TopLeftX; FLOAT TopLeftY; FLOAT Width; FLOAT Height; FLOAT MinDepth; FLOAT MaxDepth; } D3D11_VIEWPORT; #if !defined( D3D11_NO_HELPERS ) && defined( __cplusplus ) } inline bool operator==( const D3D11_VIEWPORT& l, const D3D11_VIEWPORT& r ) { return l.TopLeftX == r.TopLeftX && l.TopLeftY == r.TopLeftY && l.Width == r.Width && l.Height == r.Height && l.MinDepth == r.MinDepth && l.MaxDepth == r.MaxDepth; } inline bool operator!=( const D3D11_VIEWPORT& l, const D3D11_VIEWPORT& r ) { return !( l == r ); } extern "C"{ #endif typedef enum D3D11_RESOURCE_DIMENSION { D3D11_RESOURCE_DIMENSION_UNKNOWN = 0, D3D11_RESOURCE_DIMENSION_BUFFER = 1, D3D11_RESOURCE_DIMENSION_TEXTURE1D = 2, D3D11_RESOURCE_DIMENSION_TEXTURE2D = 3, D3D11_RESOURCE_DIMENSION_TEXTURE3D = 4 } D3D11_RESOURCE_DIMENSION; typedef D3D_SRV_DIMENSION D3D11_SRV_DIMENSION; typedef enum D3D11_DSV_DIMENSION { D3D11_DSV_DIMENSION_UNKNOWN = 0, D3D11_DSV_DIMENSION_TEXTURE1D = 1, D3D11_DSV_DIMENSION_TEXTURE1DARRAY = 2, D3D11_DSV_DIMENSION_TEXTURE2D = 3, D3D11_DSV_DIMENSION_TEXTURE2DARRAY = 4, D3D11_DSV_DIMENSION_TEXTURE2DMS = 5, D3D11_DSV_DIMENSION_TEXTURE2DMSARRAY = 6 } D3D11_DSV_DIMENSION; typedef enum D3D11_RTV_DIMENSION { D3D11_RTV_DIMENSION_UNKNOWN = 0, D3D11_RTV_DIMENSION_BUFFER = 1, D3D11_RTV_DIMENSION_TEXTURE1D = 2, D3D11_RTV_DIMENSION_TEXTURE1DARRAY = 3, D3D11_RTV_DIMENSION_TEXTURE2D = 4, D3D11_RTV_DIMENSION_TEXTURE2DARRAY = 5, D3D11_RTV_DIMENSION_TEXTURE2DMS = 6, D3D11_RTV_DIMENSION_TEXTURE2DMSARRAY = 7, D3D11_RTV_DIMENSION_TEXTURE3D = 8 } D3D11_RTV_DIMENSION; typedef enum D3D11_UAV_DIMENSION { D3D11_UAV_DIMENSION_UNKNOWN = 0, D3D11_UAV_DIMENSION_BUFFER = 1, D3D11_UAV_DIMENSION_TEXTURE1D = 2, D3D11_UAV_DIMENSION_TEXTURE1DARRAY = 3, D3D11_UAV_DIMENSION_TEXTURE2D = 4, D3D11_UAV_DIMENSION_TEXTURE2DARRAY = 5, D3D11_UAV_DIMENSION_TEXTURE3D = 8 } D3D11_UAV_DIMENSION; typedef enum D3D11_USAGE { D3D11_USAGE_DEFAULT = 0, D3D11_USAGE_IMMUTABLE = 1, D3D11_USAGE_DYNAMIC = 2, D3D11_USAGE_STAGING = 3 } D3D11_USAGE; typedef enum D3D11_BIND_FLAG { D3D11_BIND_VERTEX_BUFFER = 0x1L, D3D11_BIND_INDEX_BUFFER = 0x2L, D3D11_BIND_CONSTANT_BUFFER = 0x4L, D3D11_BIND_SHADER_RESOURCE = 0x8L, D3D11_BIND_STREAM_OUTPUT = 0x10L, D3D11_BIND_RENDER_TARGET = 0x20L, D3D11_BIND_DEPTH_STENCIL = 0x40L, D3D11_BIND_UNORDERED_ACCESS = 0x80L } D3D11_BIND_FLAG; typedef enum D3D11_CPU_ACCESS_FLAG { D3D11_CPU_ACCESS_WRITE = 0x10000L, D3D11_CPU_ACCESS_READ = 0x20000L } D3D11_CPU_ACCESS_FLAG; typedef enum D3D11_RESOURCE_MISC_FLAG { D3D11_RESOURCE_MISC_GENERATE_MIPS = 0x1L, D3D11_RESOURCE_MISC_SHARED = 0x2L, D3D11_RESOURCE_MISC_TEXTURECUBE = 0x4L, D3D11_RESOURCE_MISC_DRAWINDIRECT_ARGS = 0x10L, D3D11_RESOURCE_MISC_BUFFER_ALLOW_RAW_VIEWS = 0x20L, D3D11_RESOURCE_MISC_BUFFER_STRUCTURED = 0x40L, D3D11_RESOURCE_MISC_RESOURCE_CLAMP = 0x80L, D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX = 0x100L, D3D11_RESOURCE_MISC_GDI_COMPATIBLE = 0x200L } D3D11_RESOURCE_MISC_FLAG; typedef enum D3D11_MAP { D3D11_MAP_READ = 1, D3D11_MAP_WRITE = 2, D3D11_MAP_READ_WRITE = 3, D3D11_MAP_WRITE_DISCARD = 4, D3D11_MAP_WRITE_NO_OVERWRITE = 5 } D3D11_MAP; typedef enum D3D11_MAP_FLAG { D3D11_MAP_FLAG_DO_NOT_WAIT = 0x100000L } D3D11_MAP_FLAG; typedef enum D3D11_RAISE_FLAG { D3D11_RAISE_FLAG_DRIVER_INTERNAL_ERROR = 0x1L } D3D11_RAISE_FLAG; typedef enum D3D11_CLEAR_FLAG { D3D11_CLEAR_DEPTH = 0x1L, D3D11_CLEAR_STENCIL = 0x2L } D3D11_CLEAR_FLAG; typedef RECT D3D11_RECT; #if !defined( D3D11_NO_HELPERS ) && defined( __cplusplus ) } struct CD3D11_RECT : public D3D11_RECT { CD3D11_RECT() {} explicit CD3D11_RECT( const D3D11_RECT& o ) : D3D11_RECT( o ) {} explicit CD3D11_RECT( LONG Left, LONG Top, LONG Right, LONG Bottom ) { left = Left; top = Top; right = Right; bottom = Bottom; } ~CD3D11_RECT() {} operator const D3D11_RECT&() const { return *this; } }; inline bool operator==( const D3D11_RECT& l, const D3D11_RECT& r ) { return l.left == r.left && l.top == r.top && l.right == r.right && l.bottom == r.bottom; } inline bool operator!=( const D3D11_RECT& l, const D3D11_RECT& r ) { return !( l == r ); } extern "C"{ #endif typedef struct D3D11_BOX { UINT left; UINT top; UINT front; UINT right; UINT bottom; UINT back; } D3D11_BOX; #if !defined( D3D11_NO_HELPERS ) && defined( __cplusplus ) } struct CD3D11_BOX : public D3D11_BOX { CD3D11_BOX() {} explicit CD3D11_BOX( const D3D11_BOX& o ) : D3D11_BOX( o ) {} explicit CD3D11_BOX( LONG Left, LONG Top, LONG Front, LONG Right, LONG Bottom, LONG Back ) { left = Left; top = Top; front = Front; right = Right; bottom = Bottom; back = Back; } ~CD3D11_BOX() {} operator const D3D11_BOX&() const { return *this; } }; inline bool operator==( const D3D11_BOX& l, const D3D11_BOX& r ) { return l.left == r.left && l.top == r.top && l.front == r.front && l.right == r.right && l.bottom == r.bottom && l.back == r.back; } inline bool operator!=( const D3D11_BOX& l, const D3D11_BOX& r ) { return !( l == r ); } extern "C"{ #endif extern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0000_v0_0_c_ifspec; extern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0000_v0_0_s_ifspec; #ifndef __ID3D11DeviceChild_INTERFACE_DEFINED__ #define __ID3D11DeviceChild_INTERFACE_DEFINED__ /* interface ID3D11DeviceChild */ /* [unique][local][object][uuid] */ EXTERN_C const IID IID_ID3D11DeviceChild; #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("1841e5c8-16b0-489b-bcc8-44cfb0d5deae") ID3D11DeviceChild : public IUnknown { public: virtual void STDMETHODCALLTYPE GetDevice( /* [annotation] */ __out ID3D11Device **ppDevice) = 0; virtual HRESULT STDMETHODCALLTYPE GetPrivateData( /* [annotation] */ __in REFGUID guid, /* [annotation] */ __inout UINT *pDataSize, /* [annotation] */ __out_bcount_opt( *pDataSize ) void *pData) = 0; virtual HRESULT STDMETHODCALLTYPE SetPrivateData( /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in UINT DataSize, /* [annotation] */ __in_bcount_opt( DataSize ) const void *pData) = 0; virtual HRESULT STDMETHODCALLTYPE SetPrivateDataInterface( /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in_opt const IUnknown *pData) = 0; }; #else /* C style interface */ typedef struct ID3D11DeviceChildVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ID3D11DeviceChild * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ __RPC__deref_out void **ppvObject); ULONG ( STDMETHODCALLTYPE *AddRef )( ID3D11DeviceChild * This); ULONG ( STDMETHODCALLTYPE *Release )( ID3D11DeviceChild * This); void ( STDMETHODCALLTYPE *GetDevice )( ID3D11DeviceChild * This, /* [annotation] */ __out ID3D11Device **ppDevice); HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( ID3D11DeviceChild * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __inout UINT *pDataSize, /* [annotation] */ __out_bcount_opt( *pDataSize ) void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( ID3D11DeviceChild * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in UINT DataSize, /* [annotation] */ __in_bcount_opt( DataSize ) const void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( ID3D11DeviceChild * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in_opt const IUnknown *pData); END_INTERFACE } ID3D11DeviceChildVtbl; interface ID3D11DeviceChild { CONST_VTBL struct ID3D11DeviceChildVtbl *lpVtbl; }; #ifdef COBJMACROS #define ID3D11DeviceChild_QueryInterface(This,riid,ppvObject) \ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) #define ID3D11DeviceChild_AddRef(This) \ ( (This)->lpVtbl -> AddRef(This) ) #define ID3D11DeviceChild_Release(This) \ ( (This)->lpVtbl -> Release(This) ) #define ID3D11DeviceChild_GetDevice(This,ppDevice) \ ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) #define ID3D11DeviceChild_GetPrivateData(This,guid,pDataSize,pData) \ ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) #define ID3D11DeviceChild_SetPrivateData(This,guid,DataSize,pData) \ ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) #define ID3D11DeviceChild_SetPrivateDataInterface(This,guid,pData) \ ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) #endif /* COBJMACROS */ #endif /* C style interface */ #endif /* __ID3D11DeviceChild_INTERFACE_DEFINED__ */ /* interface __MIDL_itf_d3d11_0000_0001 */ /* [local] */ typedef enum D3D11_COMPARISON_FUNC { D3D11_COMPARISON_NEVER = 1, D3D11_COMPARISON_LESS = 2, D3D11_COMPARISON_EQUAL = 3, D3D11_COMPARISON_LESS_EQUAL = 4, D3D11_COMPARISON_GREATER = 5, D3D11_COMPARISON_NOT_EQUAL = 6, D3D11_COMPARISON_GREATER_EQUAL = 7, D3D11_COMPARISON_ALWAYS = 8 } D3D11_COMPARISON_FUNC; typedef enum D3D11_DEPTH_WRITE_MASK { D3D11_DEPTH_WRITE_MASK_ZERO = 0, D3D11_DEPTH_WRITE_MASK_ALL = 1 } D3D11_DEPTH_WRITE_MASK; typedef enum D3D11_STENCIL_OP { D3D11_STENCIL_OP_KEEP = 1, D3D11_STENCIL_OP_ZERO = 2, D3D11_STENCIL_OP_REPLACE = 3, D3D11_STENCIL_OP_INCR_SAT = 4, D3D11_STENCIL_OP_DECR_SAT = 5, D3D11_STENCIL_OP_INVERT = 6, D3D11_STENCIL_OP_INCR = 7, D3D11_STENCIL_OP_DECR = 8 } D3D11_STENCIL_OP; typedef struct D3D11_DEPTH_STENCILOP_DESC { D3D11_STENCIL_OP StencilFailOp; D3D11_STENCIL_OP StencilDepthFailOp; D3D11_STENCIL_OP StencilPassOp; D3D11_COMPARISON_FUNC StencilFunc; } D3D11_DEPTH_STENCILOP_DESC; typedef struct D3D11_DEPTH_STENCIL_DESC { BOOL DepthEnable; D3D11_DEPTH_WRITE_MASK DepthWriteMask; D3D11_COMPARISON_FUNC DepthFunc; BOOL StencilEnable; UINT8 StencilReadMask; UINT8 StencilWriteMask; D3D11_DEPTH_STENCILOP_DESC FrontFace; D3D11_DEPTH_STENCILOP_DESC BackFace; } D3D11_DEPTH_STENCIL_DESC; #if !defined( D3D11_NO_HELPERS ) && defined( __cplusplus ) } struct CD3D11_DEPTH_STENCIL_DESC : public D3D11_DEPTH_STENCIL_DESC { CD3D11_DEPTH_STENCIL_DESC() {} explicit CD3D11_DEPTH_STENCIL_DESC( const D3D11_DEPTH_STENCIL_DESC& o ) : D3D11_DEPTH_STENCIL_DESC( o ) {} explicit CD3D11_DEPTH_STENCIL_DESC( CD3D11_DEFAULT ) { DepthEnable = TRUE; DepthWriteMask = D3D11_DEPTH_WRITE_MASK_ALL; DepthFunc = D3D11_COMPARISON_LESS; StencilEnable = FALSE; StencilReadMask = D3D11_DEFAULT_STENCIL_READ_MASK; StencilWriteMask = D3D11_DEFAULT_STENCIL_WRITE_MASK; const D3D11_DEPTH_STENCILOP_DESC defaultStencilOp = { D3D11_STENCIL_OP_KEEP, D3D11_STENCIL_OP_KEEP, D3D11_STENCIL_OP_KEEP, D3D11_COMPARISON_ALWAYS }; FrontFace = defaultStencilOp; BackFace = defaultStencilOp; } explicit CD3D11_DEPTH_STENCIL_DESC( BOOL depthEnable, D3D11_DEPTH_WRITE_MASK depthWriteMask, D3D11_COMPARISON_FUNC depthFunc, BOOL stencilEnable, UINT8 stencilReadMask, UINT8 stencilWriteMask, D3D11_STENCIL_OP frontStencilFailOp, D3D11_STENCIL_OP frontStencilDepthFailOp, D3D11_STENCIL_OP frontStencilPassOp, D3D11_COMPARISON_FUNC frontStencilFunc, D3D11_STENCIL_OP backStencilFailOp, D3D11_STENCIL_OP backStencilDepthFailOp, D3D11_STENCIL_OP backStencilPassOp, D3D11_COMPARISON_FUNC backStencilFunc ) { DepthEnable = depthEnable; DepthWriteMask = depthWriteMask; DepthFunc = depthFunc; StencilEnable = stencilEnable; StencilReadMask = stencilReadMask; StencilWriteMask = stencilWriteMask; FrontFace.StencilFailOp = frontStencilFailOp; FrontFace.StencilDepthFailOp = frontStencilDepthFailOp; FrontFace.StencilPassOp = frontStencilPassOp; FrontFace.StencilFunc = frontStencilFunc; BackFace.StencilFailOp = backStencilFailOp; BackFace.StencilDepthFailOp = backStencilDepthFailOp; BackFace.StencilPassOp = backStencilPassOp; BackFace.StencilFunc = backStencilFunc; } ~CD3D11_DEPTH_STENCIL_DESC() {} operator const D3D11_DEPTH_STENCIL_DESC&() const { return *this; } }; extern "C"{ #endif extern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0001_v0_0_c_ifspec; extern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0001_v0_0_s_ifspec; #ifndef __ID3D11DepthStencilState_INTERFACE_DEFINED__ #define __ID3D11DepthStencilState_INTERFACE_DEFINED__ /* interface ID3D11DepthStencilState */ /* [unique][local][object][uuid] */ EXTERN_C const IID IID_ID3D11DepthStencilState; #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("03823efb-8d8f-4e1c-9aa2-f64bb2cbfdf1") ID3D11DepthStencilState : public ID3D11DeviceChild { public: virtual void STDMETHODCALLTYPE GetDesc( /* [annotation] */ __out D3D11_DEPTH_STENCIL_DESC *pDesc) = 0; }; #else /* C style interface */ typedef struct ID3D11DepthStencilStateVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ID3D11DepthStencilState * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ __RPC__deref_out void **ppvObject); ULONG ( STDMETHODCALLTYPE *AddRef )( ID3D11DepthStencilState * This); ULONG ( STDMETHODCALLTYPE *Release )( ID3D11DepthStencilState * This); void ( STDMETHODCALLTYPE *GetDevice )( ID3D11DepthStencilState * This, /* [annotation] */ __out ID3D11Device **ppDevice); HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( ID3D11DepthStencilState * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __inout UINT *pDataSize, /* [annotation] */ __out_bcount_opt( *pDataSize ) void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( ID3D11DepthStencilState * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in UINT DataSize, /* [annotation] */ __in_bcount_opt( DataSize ) const void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( ID3D11DepthStencilState * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in_opt const IUnknown *pData); void ( STDMETHODCALLTYPE *GetDesc )( ID3D11DepthStencilState * This, /* [annotation] */ __out D3D11_DEPTH_STENCIL_DESC *pDesc); END_INTERFACE } ID3D11DepthStencilStateVtbl; interface ID3D11DepthStencilState { CONST_VTBL struct ID3D11DepthStencilStateVtbl *lpVtbl; }; #ifdef COBJMACROS #define ID3D11DepthStencilState_QueryInterface(This,riid,ppvObject) \ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) #define ID3D11DepthStencilState_AddRef(This) \ ( (This)->lpVtbl -> AddRef(This) ) #define ID3D11DepthStencilState_Release(This) \ ( (This)->lpVtbl -> Release(This) ) #define ID3D11DepthStencilState_GetDevice(This,ppDevice) \ ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) #define ID3D11DepthStencilState_GetPrivateData(This,guid,pDataSize,pData) \ ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) #define ID3D11DepthStencilState_SetPrivateData(This,guid,DataSize,pData) \ ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) #define ID3D11DepthStencilState_SetPrivateDataInterface(This,guid,pData) \ ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) #define ID3D11DepthStencilState_GetDesc(This,pDesc) \ ( (This)->lpVtbl -> GetDesc(This,pDesc) ) #endif /* COBJMACROS */ #endif /* C style interface */ #endif /* __ID3D11DepthStencilState_INTERFACE_DEFINED__ */ /* interface __MIDL_itf_d3d11_0000_0002 */ /* [local] */ typedef enum D3D11_BLEND { D3D11_BLEND_ZERO = 1, D3D11_BLEND_ONE = 2, D3D11_BLEND_SRC_COLOR = 3, D3D11_BLEND_INV_SRC_COLOR = 4, D3D11_BLEND_SRC_ALPHA = 5, D3D11_BLEND_INV_SRC_ALPHA = 6, D3D11_BLEND_DEST_ALPHA = 7, D3D11_BLEND_INV_DEST_ALPHA = 8, D3D11_BLEND_DEST_COLOR = 9, D3D11_BLEND_INV_DEST_COLOR = 10, D3D11_BLEND_SRC_ALPHA_SAT = 11, D3D11_BLEND_BLEND_FACTOR = 14, D3D11_BLEND_INV_BLEND_FACTOR = 15, D3D11_BLEND_SRC1_COLOR = 16, D3D11_BLEND_INV_SRC1_COLOR = 17, D3D11_BLEND_SRC1_ALPHA = 18, D3D11_BLEND_INV_SRC1_ALPHA = 19 } D3D11_BLEND; typedef enum D3D11_BLEND_OP { D3D11_BLEND_OP_ADD = 1, D3D11_BLEND_OP_SUBTRACT = 2, D3D11_BLEND_OP_REV_SUBTRACT = 3, D3D11_BLEND_OP_MIN = 4, D3D11_BLEND_OP_MAX = 5 } D3D11_BLEND_OP; typedef enum D3D11_COLOR_WRITE_ENABLE { D3D11_COLOR_WRITE_ENABLE_RED = 1, D3D11_COLOR_WRITE_ENABLE_GREEN = 2, D3D11_COLOR_WRITE_ENABLE_BLUE = 4, D3D11_COLOR_WRITE_ENABLE_ALPHA = 8, D3D11_COLOR_WRITE_ENABLE_ALL = ( ( ( D3D11_COLOR_WRITE_ENABLE_RED | D3D11_COLOR_WRITE_ENABLE_GREEN ) | D3D11_COLOR_WRITE_ENABLE_BLUE ) | D3D11_COLOR_WRITE_ENABLE_ALPHA ) } D3D11_COLOR_WRITE_ENABLE; typedef struct D3D11_RENDER_TARGET_BLEND_DESC { BOOL BlendEnable; D3D11_BLEND SrcBlend; D3D11_BLEND DestBlend; D3D11_BLEND_OP BlendOp; D3D11_BLEND SrcBlendAlpha; D3D11_BLEND DestBlendAlpha; D3D11_BLEND_OP BlendOpAlpha; UINT8 RenderTargetWriteMask; } D3D11_RENDER_TARGET_BLEND_DESC; typedef struct D3D11_BLEND_DESC { BOOL AlphaToCoverageEnable; BOOL IndependentBlendEnable; D3D11_RENDER_TARGET_BLEND_DESC RenderTarget[ 8 ]; } D3D11_BLEND_DESC; /* Note, the array size for RenderTarget[] above is D3D11_SIMULTANEOUS_RENDERTARGET_COUNT. IDL processing/generation of this header replaces the define; this comment is merely explaining what happened. */ #if !defined( D3D11_NO_HELPERS ) && defined( __cplusplus ) } struct CD3D11_BLEND_DESC : public D3D11_BLEND_DESC { CD3D11_BLEND_DESC() {} explicit CD3D11_BLEND_DESC( const D3D11_BLEND_DESC& o ) : D3D11_BLEND_DESC( o ) {} explicit CD3D11_BLEND_DESC( CD3D11_DEFAULT ) { AlphaToCoverageEnable = FALSE; IndependentBlendEnable = FALSE; const D3D11_RENDER_TARGET_BLEND_DESC defaultRenderTargetBlendDesc = { FALSE, D3D11_BLEND_ONE, D3D11_BLEND_ZERO, D3D11_BLEND_OP_ADD, D3D11_BLEND_ONE, D3D11_BLEND_ZERO, D3D11_BLEND_OP_ADD, D3D11_COLOR_WRITE_ENABLE_ALL, }; for (UINT i = 0; i < D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT; ++i) RenderTarget[ i ] = defaultRenderTargetBlendDesc; } ~CD3D11_BLEND_DESC() {} operator const D3D11_BLEND_DESC&() const { return *this; } }; extern "C"{ #endif extern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0002_v0_0_c_ifspec; extern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0002_v0_0_s_ifspec; #ifndef __ID3D11BlendState_INTERFACE_DEFINED__ #define __ID3D11BlendState_INTERFACE_DEFINED__ /* interface ID3D11BlendState */ /* [unique][local][object][uuid] */ EXTERN_C const IID IID_ID3D11BlendState; #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("75b68faa-347d-4159-8f45-a0640f01cd9a") ID3D11BlendState : public ID3D11DeviceChild { public: virtual void STDMETHODCALLTYPE GetDesc( /* [annotation] */ __out D3D11_BLEND_DESC *pDesc) = 0; }; #else /* C style interface */ typedef struct ID3D11BlendStateVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ID3D11BlendState * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ __RPC__deref_out void **ppvObject); ULONG ( STDMETHODCALLTYPE *AddRef )( ID3D11BlendState * This); ULONG ( STDMETHODCALLTYPE *Release )( ID3D11BlendState * This); void ( STDMETHODCALLTYPE *GetDevice )( ID3D11BlendState * This, /* [annotation] */ __out ID3D11Device **ppDevice); HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( ID3D11BlendState * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __inout UINT *pDataSize, /* [annotation] */ __out_bcount_opt( *pDataSize ) void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( ID3D11BlendState * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in UINT DataSize, /* [annotation] */ __in_bcount_opt( DataSize ) const void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( ID3D11BlendState * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in_opt const IUnknown *pData); void ( STDMETHODCALLTYPE *GetDesc )( ID3D11BlendState * This, /* [annotation] */ __out D3D11_BLEND_DESC *pDesc); END_INTERFACE } ID3D11BlendStateVtbl; interface ID3D11BlendState { CONST_VTBL struct ID3D11BlendStateVtbl *lpVtbl; }; #ifdef COBJMACROS #define ID3D11BlendState_QueryInterface(This,riid,ppvObject) \ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) #define ID3D11BlendState_AddRef(This) \ ( (This)->lpVtbl -> AddRef(This) ) #define ID3D11BlendState_Release(This) \ ( (This)->lpVtbl -> Release(This) ) #define ID3D11BlendState_GetDevice(This,ppDevice) \ ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) #define ID3D11BlendState_GetPrivateData(This,guid,pDataSize,pData) \ ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) #define ID3D11BlendState_SetPrivateData(This,guid,DataSize,pData) \ ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) #define ID3D11BlendState_SetPrivateDataInterface(This,guid,pData) \ ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) #define ID3D11BlendState_GetDesc(This,pDesc) \ ( (This)->lpVtbl -> GetDesc(This,pDesc) ) #endif /* COBJMACROS */ #endif /* C style interface */ #endif /* __ID3D11BlendState_INTERFACE_DEFINED__ */ /* interface __MIDL_itf_d3d11_0000_0003 */ /* [local] */ typedef struct D3D11_RASTERIZER_DESC { D3D11_FILL_MODE FillMode; D3D11_CULL_MODE CullMode; BOOL FrontCounterClockwise; INT DepthBias; FLOAT DepthBiasClamp; FLOAT SlopeScaledDepthBias; BOOL DepthClipEnable; BOOL ScissorEnable; BOOL MultisampleEnable; BOOL AntialiasedLineEnable; } D3D11_RASTERIZER_DESC; #if !defined( D3D11_NO_HELPERS ) && defined( __cplusplus ) } struct CD3D11_RASTERIZER_DESC : public D3D11_RASTERIZER_DESC { CD3D11_RASTERIZER_DESC() {} explicit CD3D11_RASTERIZER_DESC( const D3D11_RASTERIZER_DESC& o ) : D3D11_RASTERIZER_DESC( o ) {} explicit CD3D11_RASTERIZER_DESC( CD3D11_DEFAULT ) { FillMode = D3D11_FILL_SOLID; CullMode = D3D11_CULL_BACK; FrontCounterClockwise = FALSE; DepthBias = D3D11_DEFAULT_DEPTH_BIAS; DepthBiasClamp = D3D11_DEFAULT_DEPTH_BIAS_CLAMP; SlopeScaledDepthBias = D3D11_DEFAULT_SLOPE_SCALED_DEPTH_BIAS; DepthClipEnable = TRUE; ScissorEnable = FALSE; MultisampleEnable = FALSE; AntialiasedLineEnable = FALSE; } explicit CD3D11_RASTERIZER_DESC( D3D11_FILL_MODE fillMode, D3D11_CULL_MODE cullMode, BOOL frontCounterClockwise, INT depthBias, FLOAT depthBiasClamp, FLOAT slopeScaledDepthBias, BOOL depthClipEnable, BOOL scissorEnable, BOOL multisampleEnable, BOOL antialiasedLineEnable ) { FillMode = fillMode; CullMode = cullMode; FrontCounterClockwise = frontCounterClockwise; DepthBias = depthBias; DepthBiasClamp = depthBiasClamp; SlopeScaledDepthBias = slopeScaledDepthBias; DepthClipEnable = depthClipEnable; ScissorEnable = scissorEnable; MultisampleEnable = multisampleEnable; AntialiasedLineEnable = antialiasedLineEnable; } ~CD3D11_RASTERIZER_DESC() {} operator const D3D11_RASTERIZER_DESC&() const { return *this; } }; extern "C"{ #endif extern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0003_v0_0_c_ifspec; extern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0003_v0_0_s_ifspec; #ifndef __ID3D11RasterizerState_INTERFACE_DEFINED__ #define __ID3D11RasterizerState_INTERFACE_DEFINED__ /* interface ID3D11RasterizerState */ /* [unique][local][object][uuid] */ EXTERN_C const IID IID_ID3D11RasterizerState; #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("9bb4ab81-ab1a-4d8f-b506-fc04200b6ee7") ID3D11RasterizerState : public ID3D11DeviceChild { public: virtual void STDMETHODCALLTYPE GetDesc( /* [annotation] */ __out D3D11_RASTERIZER_DESC *pDesc) = 0; }; #else /* C style interface */ typedef struct ID3D11RasterizerStateVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ID3D11RasterizerState * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ __RPC__deref_out void **ppvObject); ULONG ( STDMETHODCALLTYPE *AddRef )( ID3D11RasterizerState * This); ULONG ( STDMETHODCALLTYPE *Release )( ID3D11RasterizerState * This); void ( STDMETHODCALLTYPE *GetDevice )( ID3D11RasterizerState * This, /* [annotation] */ __out ID3D11Device **ppDevice); HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( ID3D11RasterizerState * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __inout UINT *pDataSize, /* [annotation] */ __out_bcount_opt( *pDataSize ) void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( ID3D11RasterizerState * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in UINT DataSize, /* [annotation] */ __in_bcount_opt( DataSize ) const void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( ID3D11RasterizerState * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in_opt const IUnknown *pData); void ( STDMETHODCALLTYPE *GetDesc )( ID3D11RasterizerState * This, /* [annotation] */ __out D3D11_RASTERIZER_DESC *pDesc); END_INTERFACE } ID3D11RasterizerStateVtbl; interface ID3D11RasterizerState { CONST_VTBL struct ID3D11RasterizerStateVtbl *lpVtbl; }; #ifdef COBJMACROS #define ID3D11RasterizerState_QueryInterface(This,riid,ppvObject) \ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) #define ID3D11RasterizerState_AddRef(This) \ ( (This)->lpVtbl -> AddRef(This) ) #define ID3D11RasterizerState_Release(This) \ ( (This)->lpVtbl -> Release(This) ) #define ID3D11RasterizerState_GetDevice(This,ppDevice) \ ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) #define ID3D11RasterizerState_GetPrivateData(This,guid,pDataSize,pData) \ ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) #define ID3D11RasterizerState_SetPrivateData(This,guid,DataSize,pData) \ ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) #define ID3D11RasterizerState_SetPrivateDataInterface(This,guid,pData) \ ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) #define ID3D11RasterizerState_GetDesc(This,pDesc) \ ( (This)->lpVtbl -> GetDesc(This,pDesc) ) #endif /* COBJMACROS */ #endif /* C style interface */ #endif /* __ID3D11RasterizerState_INTERFACE_DEFINED__ */ /* interface __MIDL_itf_d3d11_0000_0004 */ /* [local] */ #if !defined( D3D11_NO_HELPERS ) && defined( __cplusplus ) } inline UINT D3D11CalcSubresource( UINT MipSlice, UINT ArraySlice, UINT MipLevels ) { return MipSlice + ArraySlice * MipLevels; } extern "C"{ #endif typedef struct D3D11_SUBRESOURCE_DATA { const void *pSysMem; UINT SysMemPitch; UINT SysMemSlicePitch; } D3D11_SUBRESOURCE_DATA; typedef struct D3D11_MAPPED_SUBRESOURCE { void *pData; UINT RowPitch; UINT DepthPitch; } D3D11_MAPPED_SUBRESOURCE; extern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0004_v0_0_c_ifspec; extern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0004_v0_0_s_ifspec; #ifndef __ID3D11Resource_INTERFACE_DEFINED__ #define __ID3D11Resource_INTERFACE_DEFINED__ /* interface ID3D11Resource */ /* [unique][local][object][uuid] */ EXTERN_C const IID IID_ID3D11Resource; #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("dc8e63f3-d12b-4952-b47b-5e45026a862d") ID3D11Resource : public ID3D11DeviceChild { public: virtual void STDMETHODCALLTYPE GetType( /* [annotation] */ __out D3D11_RESOURCE_DIMENSION *pResourceDimension) = 0; virtual void STDMETHODCALLTYPE SetEvictionPriority( /* [annotation] */ __in UINT EvictionPriority) = 0; virtual UINT STDMETHODCALLTYPE GetEvictionPriority( void) = 0; }; #else /* C style interface */ typedef struct ID3D11ResourceVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ID3D11Resource * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ __RPC__deref_out void **ppvObject); ULONG ( STDMETHODCALLTYPE *AddRef )( ID3D11Resource * This); ULONG ( STDMETHODCALLTYPE *Release )( ID3D11Resource * This); void ( STDMETHODCALLTYPE *GetDevice )( ID3D11Resource * This, /* [annotation] */ __out ID3D11Device **ppDevice); HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( ID3D11Resource * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __inout UINT *pDataSize, /* [annotation] */ __out_bcount_opt( *pDataSize ) void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( ID3D11Resource * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in UINT DataSize, /* [annotation] */ __in_bcount_opt( DataSize ) const void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( ID3D11Resource * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in_opt const IUnknown *pData); void ( STDMETHODCALLTYPE *GetType )( ID3D11Resource * This, /* [annotation] */ __out D3D11_RESOURCE_DIMENSION *pResourceDimension); void ( STDMETHODCALLTYPE *SetEvictionPriority )( ID3D11Resource * This, /* [annotation] */ __in UINT EvictionPriority); UINT ( STDMETHODCALLTYPE *GetEvictionPriority )( ID3D11Resource * This); END_INTERFACE } ID3D11ResourceVtbl; interface ID3D11Resource { CONST_VTBL struct ID3D11ResourceVtbl *lpVtbl; }; #ifdef COBJMACROS #define ID3D11Resource_QueryInterface(This,riid,ppvObject) \ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) #define ID3D11Resource_AddRef(This) \ ( (This)->lpVtbl -> AddRef(This) ) #define ID3D11Resource_Release(This) \ ( (This)->lpVtbl -> Release(This) ) #define ID3D11Resource_GetDevice(This,ppDevice) \ ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) #define ID3D11Resource_GetPrivateData(This,guid,pDataSize,pData) \ ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) #define ID3D11Resource_SetPrivateData(This,guid,DataSize,pData) \ ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) #define ID3D11Resource_SetPrivateDataInterface(This,guid,pData) \ ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) #define ID3D11Resource_GetType(This,pResourceDimension) \ ( (This)->lpVtbl -> GetType(This,pResourceDimension) ) #define ID3D11Resource_SetEvictionPriority(This,EvictionPriority) \ ( (This)->lpVtbl -> SetEvictionPriority(This,EvictionPriority) ) #define ID3D11Resource_GetEvictionPriority(This) \ ( (This)->lpVtbl -> GetEvictionPriority(This) ) #endif /* COBJMACROS */ #endif /* C style interface */ #endif /* __ID3D11Resource_INTERFACE_DEFINED__ */ /* interface __MIDL_itf_d3d11_0000_0005 */ /* [local] */ typedef struct D3D11_BUFFER_DESC { UINT ByteWidth; D3D11_USAGE Usage; UINT BindFlags; UINT CPUAccessFlags; UINT MiscFlags; UINT StructureByteStride; } D3D11_BUFFER_DESC; #if !defined( D3D11_NO_HELPERS ) && defined( __cplusplus ) } struct CD3D11_BUFFER_DESC : public D3D11_BUFFER_DESC { CD3D11_BUFFER_DESC() {} explicit CD3D11_BUFFER_DESC( const D3D11_BUFFER_DESC& o ) : D3D11_BUFFER_DESC( o ) {} explicit CD3D11_BUFFER_DESC( UINT byteWidth, UINT bindFlags, D3D11_USAGE usage = D3D11_USAGE_DEFAULT, UINT cpuaccessFlags = 0, UINT miscFlags = 0, UINT structureByteStride = 0 ) { ByteWidth = byteWidth; Usage = usage; BindFlags = bindFlags; CPUAccessFlags = cpuaccessFlags ; MiscFlags = miscFlags; StructureByteStride = structureByteStride; } ~CD3D11_BUFFER_DESC() {} operator const D3D11_BUFFER_DESC&() const { return *this; } }; extern "C"{ #endif extern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0005_v0_0_c_ifspec; extern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0005_v0_0_s_ifspec; #ifndef __ID3D11Buffer_INTERFACE_DEFINED__ #define __ID3D11Buffer_INTERFACE_DEFINED__ /* interface ID3D11Buffer */ /* [unique][local][object][uuid] */ EXTERN_C const IID IID_ID3D11Buffer; #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("48570b85-d1ee-4fcd-a250-eb350722b037") ID3D11Buffer : public ID3D11Resource { public: virtual void STDMETHODCALLTYPE GetDesc( /* [annotation] */ __out D3D11_BUFFER_DESC *pDesc) = 0; }; #else /* C style interface */ typedef struct ID3D11BufferVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ID3D11Buffer * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ __RPC__deref_out void **ppvObject); ULONG ( STDMETHODCALLTYPE *AddRef )( ID3D11Buffer * This); ULONG ( STDMETHODCALLTYPE *Release )( ID3D11Buffer * This); void ( STDMETHODCALLTYPE *GetDevice )( ID3D11Buffer * This, /* [annotation] */ __out ID3D11Device **ppDevice); HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( ID3D11Buffer * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __inout UINT *pDataSize, /* [annotation] */ __out_bcount_opt( *pDataSize ) void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( ID3D11Buffer * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in UINT DataSize, /* [annotation] */ __in_bcount_opt( DataSize ) const void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( ID3D11Buffer * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in_opt const IUnknown *pData); void ( STDMETHODCALLTYPE *GetType )( ID3D11Buffer * This, /* [annotation] */ __out D3D11_RESOURCE_DIMENSION *pResourceDimension); void ( STDMETHODCALLTYPE *SetEvictionPriority )( ID3D11Buffer * This, /* [annotation] */ __in UINT EvictionPriority); UINT ( STDMETHODCALLTYPE *GetEvictionPriority )( ID3D11Buffer * This); void ( STDMETHODCALLTYPE *GetDesc )( ID3D11Buffer * This, /* [annotation] */ __out D3D11_BUFFER_DESC *pDesc); END_INTERFACE } ID3D11BufferVtbl; interface ID3D11Buffer { CONST_VTBL struct ID3D11BufferVtbl *lpVtbl; }; #ifdef COBJMACROS #define ID3D11Buffer_QueryInterface(This,riid,ppvObject) \ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) #define ID3D11Buffer_AddRef(This) \ ( (This)->lpVtbl -> AddRef(This) ) #define ID3D11Buffer_Release(This) \ ( (This)->lpVtbl -> Release(This) ) #define ID3D11Buffer_GetDevice(This,ppDevice) \ ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) #define ID3D11Buffer_GetPrivateData(This,guid,pDataSize,pData) \ ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) #define ID3D11Buffer_SetPrivateData(This,guid,DataSize,pData) \ ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) #define ID3D11Buffer_SetPrivateDataInterface(This,guid,pData) \ ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) #define ID3D11Buffer_GetType(This,pResourceDimension) \ ( (This)->lpVtbl -> GetType(This,pResourceDimension) ) #define ID3D11Buffer_SetEvictionPriority(This,EvictionPriority) \ ( (This)->lpVtbl -> SetEvictionPriority(This,EvictionPriority) ) #define ID3D11Buffer_GetEvictionPriority(This) \ ( (This)->lpVtbl -> GetEvictionPriority(This) ) #define ID3D11Buffer_GetDesc(This,pDesc) \ ( (This)->lpVtbl -> GetDesc(This,pDesc) ) #endif /* COBJMACROS */ #endif /* C style interface */ #endif /* __ID3D11Buffer_INTERFACE_DEFINED__ */ /* interface __MIDL_itf_d3d11_0000_0006 */ /* [local] */ typedef struct D3D11_TEXTURE1D_DESC { UINT Width; UINT MipLevels; UINT ArraySize; DXGI_FORMAT Format; D3D11_USAGE Usage; UINT BindFlags; UINT CPUAccessFlags; UINT MiscFlags; } D3D11_TEXTURE1D_DESC; #if !defined( D3D11_NO_HELPERS ) && defined( __cplusplus ) } struct CD3D11_TEXTURE1D_DESC : public D3D11_TEXTURE1D_DESC { CD3D11_TEXTURE1D_DESC() {} explicit CD3D11_TEXTURE1D_DESC( const D3D11_TEXTURE1D_DESC& o ) : D3D11_TEXTURE1D_DESC( o ) {} explicit CD3D11_TEXTURE1D_DESC( DXGI_FORMAT format, UINT width, UINT arraySize = 1, UINT mipLevels = 0, UINT bindFlags = D3D11_BIND_SHADER_RESOURCE, D3D11_USAGE usage = D3D11_USAGE_DEFAULT, UINT cpuaccessFlags= 0, UINT miscFlags = 0 ) { Width = width; MipLevels = mipLevels; ArraySize = arraySize; Format = format; Usage = usage; BindFlags = bindFlags; CPUAccessFlags = cpuaccessFlags; MiscFlags = miscFlags; } ~CD3D11_TEXTURE1D_DESC() {} operator const D3D11_TEXTURE1D_DESC&() const { return *this; } }; extern "C"{ #endif extern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0006_v0_0_c_ifspec; extern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0006_v0_0_s_ifspec; #ifndef __ID3D11Texture1D_INTERFACE_DEFINED__ #define __ID3D11Texture1D_INTERFACE_DEFINED__ /* interface ID3D11Texture1D */ /* [unique][local][object][uuid] */ EXTERN_C const IID IID_ID3D11Texture1D; #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("f8fb5c27-c6b3-4f75-a4c8-439af2ef564c") ID3D11Texture1D : public ID3D11Resource { public: virtual void STDMETHODCALLTYPE GetDesc( /* [annotation] */ __out D3D11_TEXTURE1D_DESC *pDesc) = 0; }; #else /* C style interface */ typedef struct ID3D11Texture1DVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ID3D11Texture1D * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ __RPC__deref_out void **ppvObject); ULONG ( STDMETHODCALLTYPE *AddRef )( ID3D11Texture1D * This); ULONG ( STDMETHODCALLTYPE *Release )( ID3D11Texture1D * This); void ( STDMETHODCALLTYPE *GetDevice )( ID3D11Texture1D * This, /* [annotation] */ __out ID3D11Device **ppDevice); HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( ID3D11Texture1D * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __inout UINT *pDataSize, /* [annotation] */ __out_bcount_opt( *pDataSize ) void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( ID3D11Texture1D * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in UINT DataSize, /* [annotation] */ __in_bcount_opt( DataSize ) const void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( ID3D11Texture1D * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in_opt const IUnknown *pData); void ( STDMETHODCALLTYPE *GetType )( ID3D11Texture1D * This, /* [annotation] */ __out D3D11_RESOURCE_DIMENSION *pResourceDimension); void ( STDMETHODCALLTYPE *SetEvictionPriority )( ID3D11Texture1D * This, /* [annotation] */ __in UINT EvictionPriority); UINT ( STDMETHODCALLTYPE *GetEvictionPriority )( ID3D11Texture1D * This); void ( STDMETHODCALLTYPE *GetDesc )( ID3D11Texture1D * This, /* [annotation] */ __out D3D11_TEXTURE1D_DESC *pDesc); END_INTERFACE } ID3D11Texture1DVtbl; interface ID3D11Texture1D { CONST_VTBL struct ID3D11Texture1DVtbl *lpVtbl; }; #ifdef COBJMACROS #define ID3D11Texture1D_QueryInterface(This,riid,ppvObject) \ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) #define ID3D11Texture1D_AddRef(This) \ ( (This)->lpVtbl -> AddRef(This) ) #define ID3D11Texture1D_Release(This) \ ( (This)->lpVtbl -> Release(This) ) #define ID3D11Texture1D_GetDevice(This,ppDevice) \ ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) #define ID3D11Texture1D_GetPrivateData(This,guid,pDataSize,pData) \ ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) #define ID3D11Texture1D_SetPrivateData(This,guid,DataSize,pData) \ ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) #define ID3D11Texture1D_SetPrivateDataInterface(This,guid,pData) \ ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) #define ID3D11Texture1D_GetType(This,pResourceDimension) \ ( (This)->lpVtbl -> GetType(This,pResourceDimension) ) #define ID3D11Texture1D_SetEvictionPriority(This,EvictionPriority) \ ( (This)->lpVtbl -> SetEvictionPriority(This,EvictionPriority) ) #define ID3D11Texture1D_GetEvictionPriority(This) \ ( (This)->lpVtbl -> GetEvictionPriority(This) ) #define ID3D11Texture1D_GetDesc(This,pDesc) \ ( (This)->lpVtbl -> GetDesc(This,pDesc) ) #endif /* COBJMACROS */ #endif /* C style interface */ #endif /* __ID3D11Texture1D_INTERFACE_DEFINED__ */ /* interface __MIDL_itf_d3d11_0000_0007 */ /* [local] */ typedef struct D3D11_TEXTURE2D_DESC { UINT Width; UINT Height; UINT MipLevels; UINT ArraySize; DXGI_FORMAT Format; DXGI_SAMPLE_DESC SampleDesc; D3D11_USAGE Usage; UINT BindFlags; UINT CPUAccessFlags; UINT MiscFlags; } D3D11_TEXTURE2D_DESC; #if !defined( D3D11_NO_HELPERS ) && defined( __cplusplus ) } struct CD3D11_TEXTURE2D_DESC : public D3D11_TEXTURE2D_DESC { CD3D11_TEXTURE2D_DESC() {} explicit CD3D11_TEXTURE2D_DESC( const D3D11_TEXTURE2D_DESC& o ) : D3D11_TEXTURE2D_DESC( o ) {} explicit CD3D11_TEXTURE2D_DESC( DXGI_FORMAT format, UINT width, UINT height, UINT arraySize = 1, UINT mipLevels = 0, UINT bindFlags = D3D11_BIND_SHADER_RESOURCE, D3D11_USAGE usage = D3D11_USAGE_DEFAULT, UINT cpuaccessFlags = 0, UINT sampleCount = 1, UINT sampleQuality = 0, UINT miscFlags = 0 ) { Width = width; Height = height; MipLevels = mipLevels; ArraySize = arraySize; Format = format; SampleDesc.Count = sampleCount; SampleDesc.Quality = sampleQuality; Usage = usage; BindFlags = bindFlags; CPUAccessFlags = cpuaccessFlags; MiscFlags = miscFlags; } ~CD3D11_TEXTURE2D_DESC() {} operator const D3D11_TEXTURE2D_DESC&() const { return *this; } }; extern "C"{ #endif extern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0007_v0_0_c_ifspec; extern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0007_v0_0_s_ifspec; #ifndef __ID3D11Texture2D_INTERFACE_DEFINED__ #define __ID3D11Texture2D_INTERFACE_DEFINED__ /* interface ID3D11Texture2D */ /* [unique][local][object][uuid] */ EXTERN_C const IID IID_ID3D11Texture2D; #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("6f15aaf2-d208-4e89-9ab4-489535d34f9c") ID3D11Texture2D : public ID3D11Resource { public: virtual void STDMETHODCALLTYPE GetDesc( /* [annotation] */ __out D3D11_TEXTURE2D_DESC *pDesc) = 0; }; #else /* C style interface */ typedef struct ID3D11Texture2DVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ID3D11Texture2D * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ __RPC__deref_out void **ppvObject); ULONG ( STDMETHODCALLTYPE *AddRef )( ID3D11Texture2D * This); ULONG ( STDMETHODCALLTYPE *Release )( ID3D11Texture2D * This); void ( STDMETHODCALLTYPE *GetDevice )( ID3D11Texture2D * This, /* [annotation] */ __out ID3D11Device **ppDevice); HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( ID3D11Texture2D * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __inout UINT *pDataSize, /* [annotation] */ __out_bcount_opt( *pDataSize ) void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( ID3D11Texture2D * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in UINT DataSize, /* [annotation] */ __in_bcount_opt( DataSize ) const void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( ID3D11Texture2D * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in_opt const IUnknown *pData); void ( STDMETHODCALLTYPE *GetType )( ID3D11Texture2D * This, /* [annotation] */ __out D3D11_RESOURCE_DIMENSION *pResourceDimension); void ( STDMETHODCALLTYPE *SetEvictionPriority )( ID3D11Texture2D * This, /* [annotation] */ __in UINT EvictionPriority); UINT ( STDMETHODCALLTYPE *GetEvictionPriority )( ID3D11Texture2D * This); void ( STDMETHODCALLTYPE *GetDesc )( ID3D11Texture2D * This, /* [annotation] */ __out D3D11_TEXTURE2D_DESC *pDesc); END_INTERFACE } ID3D11Texture2DVtbl; interface ID3D11Texture2D { CONST_VTBL struct ID3D11Texture2DVtbl *lpVtbl; }; #ifdef COBJMACROS #define ID3D11Texture2D_QueryInterface(This,riid,ppvObject) \ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) #define ID3D11Texture2D_AddRef(This) \ ( (This)->lpVtbl -> AddRef(This) ) #define ID3D11Texture2D_Release(This) \ ( (This)->lpVtbl -> Release(This) ) #define ID3D11Texture2D_GetDevice(This,ppDevice) \ ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) #define ID3D11Texture2D_GetPrivateData(This,guid,pDataSize,pData) \ ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) #define ID3D11Texture2D_SetPrivateData(This,guid,DataSize,pData) \ ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) #define ID3D11Texture2D_SetPrivateDataInterface(This,guid,pData) \ ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) #define ID3D11Texture2D_GetType(This,pResourceDimension) \ ( (This)->lpVtbl -> GetType(This,pResourceDimension) ) #define ID3D11Texture2D_SetEvictionPriority(This,EvictionPriority) \ ( (This)->lpVtbl -> SetEvictionPriority(This,EvictionPriority) ) #define ID3D11Texture2D_GetEvictionPriority(This) \ ( (This)->lpVtbl -> GetEvictionPriority(This) ) #define ID3D11Texture2D_GetDesc(This,pDesc) \ ( (This)->lpVtbl -> GetDesc(This,pDesc) ) #endif /* COBJMACROS */ #endif /* C style interface */ #endif /* __ID3D11Texture2D_INTERFACE_DEFINED__ */ /* interface __MIDL_itf_d3d11_0000_0008 */ /* [local] */ typedef struct D3D11_TEXTURE3D_DESC { UINT Width; UINT Height; UINT Depth; UINT MipLevels; DXGI_FORMAT Format; D3D11_USAGE Usage; UINT BindFlags; UINT CPUAccessFlags; UINT MiscFlags; } D3D11_TEXTURE3D_DESC; #if !defined( D3D11_NO_HELPERS ) && defined( __cplusplus ) } struct CD3D11_TEXTURE3D_DESC : public D3D11_TEXTURE3D_DESC { CD3D11_TEXTURE3D_DESC() {} explicit CD3D11_TEXTURE3D_DESC( const D3D11_TEXTURE3D_DESC& o ) : D3D11_TEXTURE3D_DESC( o ) {} explicit CD3D11_TEXTURE3D_DESC( DXGI_FORMAT format, UINT width, UINT height, UINT depth, UINT mipLevels = 0, UINT bindFlags = D3D11_BIND_SHADER_RESOURCE, D3D11_USAGE usage = D3D11_USAGE_DEFAULT, UINT cpuaccessFlags = 0, UINT miscFlags = 0 ) { Width = width; Height = height; Depth = depth; MipLevels = mipLevels; Format = format; Usage = usage; BindFlags = bindFlags; CPUAccessFlags = cpuaccessFlags; MiscFlags = miscFlags; } ~CD3D11_TEXTURE3D_DESC() {} operator const D3D11_TEXTURE3D_DESC&() const { return *this; } }; extern "C"{ #endif extern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0008_v0_0_c_ifspec; extern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0008_v0_0_s_ifspec; #ifndef __ID3D11Texture3D_INTERFACE_DEFINED__ #define __ID3D11Texture3D_INTERFACE_DEFINED__ /* interface ID3D11Texture3D */ /* [unique][local][object][uuid] */ EXTERN_C const IID IID_ID3D11Texture3D; #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("037e866e-f56d-4357-a8af-9dabbe6e250e") ID3D11Texture3D : public ID3D11Resource { public: virtual void STDMETHODCALLTYPE GetDesc( /* [annotation] */ __out D3D11_TEXTURE3D_DESC *pDesc) = 0; }; #else /* C style interface */ typedef struct ID3D11Texture3DVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ID3D11Texture3D * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ __RPC__deref_out void **ppvObject); ULONG ( STDMETHODCALLTYPE *AddRef )( ID3D11Texture3D * This); ULONG ( STDMETHODCALLTYPE *Release )( ID3D11Texture3D * This); void ( STDMETHODCALLTYPE *GetDevice )( ID3D11Texture3D * This, /* [annotation] */ __out ID3D11Device **ppDevice); HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( ID3D11Texture3D * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __inout UINT *pDataSize, /* [annotation] */ __out_bcount_opt( *pDataSize ) void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( ID3D11Texture3D * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in UINT DataSize, /* [annotation] */ __in_bcount_opt( DataSize ) const void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( ID3D11Texture3D * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in_opt const IUnknown *pData); void ( STDMETHODCALLTYPE *GetType )( ID3D11Texture3D * This, /* [annotation] */ __out D3D11_RESOURCE_DIMENSION *pResourceDimension); void ( STDMETHODCALLTYPE *SetEvictionPriority )( ID3D11Texture3D * This, /* [annotation] */ __in UINT EvictionPriority); UINT ( STDMETHODCALLTYPE *GetEvictionPriority )( ID3D11Texture3D * This); void ( STDMETHODCALLTYPE *GetDesc )( ID3D11Texture3D * This, /* [annotation] */ __out D3D11_TEXTURE3D_DESC *pDesc); END_INTERFACE } ID3D11Texture3DVtbl; interface ID3D11Texture3D { CONST_VTBL struct ID3D11Texture3DVtbl *lpVtbl; }; #ifdef COBJMACROS #define ID3D11Texture3D_QueryInterface(This,riid,ppvObject) \ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) #define ID3D11Texture3D_AddRef(This) \ ( (This)->lpVtbl -> AddRef(This) ) #define ID3D11Texture3D_Release(This) \ ( (This)->lpVtbl -> Release(This) ) #define ID3D11Texture3D_GetDevice(This,ppDevice) \ ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) #define ID3D11Texture3D_GetPrivateData(This,guid,pDataSize,pData) \ ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) #define ID3D11Texture3D_SetPrivateData(This,guid,DataSize,pData) \ ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) #define ID3D11Texture3D_SetPrivateDataInterface(This,guid,pData) \ ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) #define ID3D11Texture3D_GetType(This,pResourceDimension) \ ( (This)->lpVtbl -> GetType(This,pResourceDimension) ) #define ID3D11Texture3D_SetEvictionPriority(This,EvictionPriority) \ ( (This)->lpVtbl -> SetEvictionPriority(This,EvictionPriority) ) #define ID3D11Texture3D_GetEvictionPriority(This) \ ( (This)->lpVtbl -> GetEvictionPriority(This) ) #define ID3D11Texture3D_GetDesc(This,pDesc) \ ( (This)->lpVtbl -> GetDesc(This,pDesc) ) #endif /* COBJMACROS */ #endif /* C style interface */ #endif /* __ID3D11Texture3D_INTERFACE_DEFINED__ */ /* interface __MIDL_itf_d3d11_0000_0009 */ /* [local] */ typedef enum D3D11_TEXTURECUBE_FACE { D3D11_TEXTURECUBE_FACE_POSITIVE_X = 0, D3D11_TEXTURECUBE_FACE_NEGATIVE_X = 1, D3D11_TEXTURECUBE_FACE_POSITIVE_Y = 2, D3D11_TEXTURECUBE_FACE_NEGATIVE_Y = 3, D3D11_TEXTURECUBE_FACE_POSITIVE_Z = 4, D3D11_TEXTURECUBE_FACE_NEGATIVE_Z = 5 } D3D11_TEXTURECUBE_FACE; extern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0009_v0_0_c_ifspec; extern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0009_v0_0_s_ifspec; #ifndef __ID3D11View_INTERFACE_DEFINED__ #define __ID3D11View_INTERFACE_DEFINED__ /* interface ID3D11View */ /* [unique][local][object][uuid] */ EXTERN_C const IID IID_ID3D11View; #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("839d1216-bb2e-412b-b7f4-a9dbebe08ed1") ID3D11View : public ID3D11DeviceChild { public: virtual void STDMETHODCALLTYPE GetResource( /* [annotation] */ __out ID3D11Resource **ppResource) = 0; }; #else /* C style interface */ typedef struct ID3D11ViewVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ID3D11View * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ __RPC__deref_out void **ppvObject); ULONG ( STDMETHODCALLTYPE *AddRef )( ID3D11View * This); ULONG ( STDMETHODCALLTYPE *Release )( ID3D11View * This); void ( STDMETHODCALLTYPE *GetDevice )( ID3D11View * This, /* [annotation] */ __out ID3D11Device **ppDevice); HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( ID3D11View * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __inout UINT *pDataSize, /* [annotation] */ __out_bcount_opt( *pDataSize ) void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( ID3D11View * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in UINT DataSize, /* [annotation] */ __in_bcount_opt( DataSize ) const void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( ID3D11View * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in_opt const IUnknown *pData); void ( STDMETHODCALLTYPE *GetResource )( ID3D11View * This, /* [annotation] */ __out ID3D11Resource **ppResource); END_INTERFACE } ID3D11ViewVtbl; interface ID3D11View { CONST_VTBL struct ID3D11ViewVtbl *lpVtbl; }; #ifdef COBJMACROS #define ID3D11View_QueryInterface(This,riid,ppvObject) \ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) #define ID3D11View_AddRef(This) \ ( (This)->lpVtbl -> AddRef(This) ) #define ID3D11View_Release(This) \ ( (This)->lpVtbl -> Release(This) ) #define ID3D11View_GetDevice(This,ppDevice) \ ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) #define ID3D11View_GetPrivateData(This,guid,pDataSize,pData) \ ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) #define ID3D11View_SetPrivateData(This,guid,DataSize,pData) \ ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) #define ID3D11View_SetPrivateDataInterface(This,guid,pData) \ ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) #define ID3D11View_GetResource(This,ppResource) \ ( (This)->lpVtbl -> GetResource(This,ppResource) ) #endif /* COBJMACROS */ #endif /* C style interface */ #endif /* __ID3D11View_INTERFACE_DEFINED__ */ /* interface __MIDL_itf_d3d11_0000_0010 */ /* [local] */ typedef struct D3D11_BUFFER_SRV { union { UINT FirstElement; UINT ElementOffset; } ; union { UINT NumElements; UINT ElementWidth; } ; } D3D11_BUFFER_SRV; typedef enum D3D11_BUFFEREX_SRV_FLAG { D3D11_BUFFEREX_SRV_FLAG_RAW = 0x1 } D3D11_BUFFEREX_SRV_FLAG; typedef struct D3D11_BUFFEREX_SRV { UINT FirstElement; UINT NumElements; UINT Flags; } D3D11_BUFFEREX_SRV; typedef struct D3D11_TEX1D_SRV { UINT MostDetailedMip; UINT MipLevels; } D3D11_TEX1D_SRV; typedef struct D3D11_TEX1D_ARRAY_SRV { UINT MostDetailedMip; UINT MipLevels; UINT FirstArraySlice; UINT ArraySize; } D3D11_TEX1D_ARRAY_SRV; typedef struct D3D11_TEX2D_SRV { UINT MostDetailedMip; UINT MipLevels; } D3D11_TEX2D_SRV; typedef struct D3D11_TEX2D_ARRAY_SRV { UINT MostDetailedMip; UINT MipLevels; UINT FirstArraySlice; UINT ArraySize; } D3D11_TEX2D_ARRAY_SRV; typedef struct D3D11_TEX3D_SRV { UINT MostDetailedMip; UINT MipLevels; } D3D11_TEX3D_SRV; typedef struct D3D11_TEXCUBE_SRV { UINT MostDetailedMip; UINT MipLevels; } D3D11_TEXCUBE_SRV; typedef struct D3D11_TEXCUBE_ARRAY_SRV { UINT MostDetailedMip; UINT MipLevels; UINT First2DArrayFace; UINT NumCubes; } D3D11_TEXCUBE_ARRAY_SRV; typedef struct D3D11_TEX2DMS_SRV { UINT UnusedField_NothingToDefine; } D3D11_TEX2DMS_SRV; typedef struct D3D11_TEX2DMS_ARRAY_SRV { UINT FirstArraySlice; UINT ArraySize; } D3D11_TEX2DMS_ARRAY_SRV; typedef struct D3D11_SHADER_RESOURCE_VIEW_DESC { DXGI_FORMAT Format; D3D11_SRV_DIMENSION ViewDimension; union { D3D11_BUFFER_SRV Buffer; D3D11_TEX1D_SRV Texture1D; D3D11_TEX1D_ARRAY_SRV Texture1DArray; D3D11_TEX2D_SRV Texture2D; D3D11_TEX2D_ARRAY_SRV Texture2DArray; D3D11_TEX2DMS_SRV Texture2DMS; D3D11_TEX2DMS_ARRAY_SRV Texture2DMSArray; D3D11_TEX3D_SRV Texture3D; D3D11_TEXCUBE_SRV TextureCube; D3D11_TEXCUBE_ARRAY_SRV TextureCubeArray; D3D11_BUFFEREX_SRV BufferEx; } ; } D3D11_SHADER_RESOURCE_VIEW_DESC; #if !defined( D3D11_NO_HELPERS ) && defined( __cplusplus ) } struct CD3D11_SHADER_RESOURCE_VIEW_DESC : public D3D11_SHADER_RESOURCE_VIEW_DESC { CD3D11_SHADER_RESOURCE_VIEW_DESC() {} explicit CD3D11_SHADER_RESOURCE_VIEW_DESC( const D3D11_SHADER_RESOURCE_VIEW_DESC& o ) : D3D11_SHADER_RESOURCE_VIEW_DESC( o ) {} explicit CD3D11_SHADER_RESOURCE_VIEW_DESC( D3D11_SRV_DIMENSION viewDimension, DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN, UINT mostDetailedMip = 0, // FirstElement for BUFFER UINT mipLevels = -1, // NumElements for BUFFER UINT firstArraySlice = 0, // First2DArrayFace for TEXTURECUBEARRAY UINT arraySize = -1, // NumCubes for TEXTURECUBEARRAY UINT flags = 0 ) // BUFFEREX only { Format = format; ViewDimension = viewDimension; switch (viewDimension) { case D3D11_SRV_DIMENSION_BUFFER: Buffer.FirstElement = mostDetailedMip; Buffer.NumElements = mipLevels; break; case D3D11_SRV_DIMENSION_TEXTURE1D: Texture1D.MostDetailedMip = mostDetailedMip; Texture1D.MipLevels = mipLevels; break; case D3D11_SRV_DIMENSION_TEXTURE1DARRAY: Texture1DArray.MostDetailedMip = mostDetailedMip; Texture1DArray.MipLevels = mipLevels; Texture1DArray.FirstArraySlice = firstArraySlice; Texture1DArray.ArraySize = arraySize; break; case D3D11_SRV_DIMENSION_TEXTURE2D: Texture2D.MostDetailedMip = mostDetailedMip; Texture2D.MipLevels = mipLevels; break; case D3D11_SRV_DIMENSION_TEXTURE2DARRAY: Texture2DArray.MostDetailedMip = mostDetailedMip; Texture2DArray.MipLevels = mipLevels; Texture2DArray.FirstArraySlice = firstArraySlice; Texture2DArray.ArraySize = arraySize; break; case D3D11_SRV_DIMENSION_TEXTURE2DMS: break; case D3D11_SRV_DIMENSION_TEXTURE2DMSARRAY: Texture2DMSArray.FirstArraySlice = firstArraySlice; Texture2DMSArray.ArraySize = arraySize; break; case D3D11_SRV_DIMENSION_TEXTURE3D: Texture3D.MostDetailedMip = mostDetailedMip; Texture3D.MipLevels = mipLevels; break; case D3D11_SRV_DIMENSION_TEXTURECUBE: TextureCube.MostDetailedMip = mostDetailedMip; TextureCube.MipLevels = mipLevels; break; case D3D11_SRV_DIMENSION_TEXTURECUBEARRAY: TextureCubeArray.MostDetailedMip = mostDetailedMip; TextureCubeArray.MipLevels = mipLevels; TextureCubeArray.First2DArrayFace = firstArraySlice; TextureCubeArray.NumCubes = arraySize; break; case D3D11_SRV_DIMENSION_BUFFEREX: BufferEx.FirstElement = mostDetailedMip; BufferEx.NumElements = mipLevels; BufferEx.Flags = flags; break; default: break; } } explicit CD3D11_SHADER_RESOURCE_VIEW_DESC( __in ID3D11Buffer*, DXGI_FORMAT format, UINT firstElement, UINT numElements, UINT flags = 0 ) { Format = format; ViewDimension = D3D11_SRV_DIMENSION_BUFFEREX; BufferEx.FirstElement = firstElement; BufferEx.NumElements = numElements; BufferEx.Flags = flags; } explicit CD3D11_SHADER_RESOURCE_VIEW_DESC( __in ID3D11Texture1D* pTex1D, D3D11_SRV_DIMENSION viewDimension, DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN, UINT mostDetailedMip = 0, UINT mipLevels = -1, UINT firstArraySlice = 0, UINT arraySize = -1 ) { ViewDimension = viewDimension; if (DXGI_FORMAT_UNKNOWN == format || -1 == mipLevels || (-1 == arraySize && D3D11_SRV_DIMENSION_TEXTURE1DARRAY == viewDimension)) { D3D11_TEXTURE1D_DESC TexDesc; pTex1D->GetDesc( &TexDesc ); if (DXGI_FORMAT_UNKNOWN == format) format = TexDesc.Format; if (-1 == mipLevels) mipLevels = TexDesc.MipLevels - mostDetailedMip; if (-1 == arraySize) arraySize = TexDesc.ArraySize - firstArraySlice; } Format = format; switch (viewDimension) { case D3D11_SRV_DIMENSION_TEXTURE1D: Texture1D.MostDetailedMip = mostDetailedMip; Texture1D.MipLevels = mipLevels; break; case D3D11_SRV_DIMENSION_TEXTURE1DARRAY: Texture1DArray.MostDetailedMip = mostDetailedMip; Texture1DArray.MipLevels = mipLevels; Texture1DArray.FirstArraySlice = firstArraySlice; Texture1DArray.ArraySize = arraySize; break; default: break; } } explicit CD3D11_SHADER_RESOURCE_VIEW_DESC( __in ID3D11Texture2D* pTex2D, D3D11_SRV_DIMENSION viewDimension, DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN, UINT mostDetailedMip = 0, UINT mipLevels = -1, UINT firstArraySlice = 0, // First2DArrayFace for TEXTURECUBEARRAY UINT arraySize = -1 ) // NumCubes for TEXTURECUBEARRAY { ViewDimension = viewDimension; if (DXGI_FORMAT_UNKNOWN == format || (-1 == mipLevels && D3D11_SRV_DIMENSION_TEXTURE2DMS != viewDimension && D3D11_SRV_DIMENSION_TEXTURE2DMSARRAY != viewDimension) || (-1 == arraySize && (D3D11_SRV_DIMENSION_TEXTURE2DARRAY == viewDimension || D3D11_SRV_DIMENSION_TEXTURE2DMSARRAY == viewDimension || D3D11_SRV_DIMENSION_TEXTURECUBEARRAY == viewDimension))) { D3D11_TEXTURE2D_DESC TexDesc; pTex2D->GetDesc( &TexDesc ); if (DXGI_FORMAT_UNKNOWN == format) format = TexDesc.Format; if (-1 == mipLevels) mipLevels = TexDesc.MipLevels - mostDetailedMip; if (-1 == arraySize) { arraySize = TexDesc.ArraySize - firstArraySlice; if (D3D11_SRV_DIMENSION_TEXTURECUBEARRAY == viewDimension) arraySize /= 6; } } Format = format; switch (viewDimension) { case D3D11_SRV_DIMENSION_TEXTURE2D: Texture2D.MostDetailedMip = mostDetailedMip; Texture2D.MipLevels = mipLevels; break; case D3D11_SRV_DIMENSION_TEXTURE2DARRAY: Texture2DArray.MostDetailedMip = mostDetailedMip; Texture2DArray.MipLevels = mipLevels; Texture2DArray.FirstArraySlice = firstArraySlice; Texture2DArray.ArraySize = arraySize; break; case D3D11_SRV_DIMENSION_TEXTURE2DMS: break; case D3D11_SRV_DIMENSION_TEXTURE2DMSARRAY: Texture2DMSArray.FirstArraySlice = firstArraySlice; Texture2DMSArray.ArraySize = arraySize; break; case D3D11_SRV_DIMENSION_TEXTURECUBE: TextureCube.MostDetailedMip = mostDetailedMip; TextureCube.MipLevels = mipLevels; break; case D3D11_SRV_DIMENSION_TEXTURECUBEARRAY: TextureCubeArray.MostDetailedMip = mostDetailedMip; TextureCubeArray.MipLevels = mipLevels; TextureCubeArray.First2DArrayFace = firstArraySlice; TextureCubeArray.NumCubes = arraySize; break; default: break; } } explicit CD3D11_SHADER_RESOURCE_VIEW_DESC( __in ID3D11Texture3D* pTex3D, DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN, UINT mostDetailedMip = 0, UINT mipLevels = -1 ) { ViewDimension = D3D11_SRV_DIMENSION_TEXTURE3D; if (DXGI_FORMAT_UNKNOWN == format || -1 == mipLevels) { D3D11_TEXTURE3D_DESC TexDesc; pTex3D->GetDesc( &TexDesc ); if (DXGI_FORMAT_UNKNOWN == format) format = TexDesc.Format; if (-1 == mipLevels) mipLevels = TexDesc.MipLevels - mostDetailedMip; } Format = format; Texture3D.MostDetailedMip = mostDetailedMip; Texture3D.MipLevels = mipLevels; } ~CD3D11_SHADER_RESOURCE_VIEW_DESC() {} operator const D3D11_SHADER_RESOURCE_VIEW_DESC&() const { return *this; } }; extern "C"{ #endif extern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0010_v0_0_c_ifspec; extern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0010_v0_0_s_ifspec; #ifndef __ID3D11ShaderResourceView_INTERFACE_DEFINED__ #define __ID3D11ShaderResourceView_INTERFACE_DEFINED__ /* interface ID3D11ShaderResourceView */ /* [unique][local][object][uuid] */ EXTERN_C const IID IID_ID3D11ShaderResourceView; #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("b0e06fe0-8192-4e1a-b1ca-36d7414710b2") ID3D11ShaderResourceView : public ID3D11View { public: virtual void STDMETHODCALLTYPE GetDesc( /* [annotation] */ __out D3D11_SHADER_RESOURCE_VIEW_DESC *pDesc) = 0; }; #else /* C style interface */ typedef struct ID3D11ShaderResourceViewVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ID3D11ShaderResourceView * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ __RPC__deref_out void **ppvObject); ULONG ( STDMETHODCALLTYPE *AddRef )( ID3D11ShaderResourceView * This); ULONG ( STDMETHODCALLTYPE *Release )( ID3D11ShaderResourceView * This); void ( STDMETHODCALLTYPE *GetDevice )( ID3D11ShaderResourceView * This, /* [annotation] */ __out ID3D11Device **ppDevice); HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( ID3D11ShaderResourceView * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __inout UINT *pDataSize, /* [annotation] */ __out_bcount_opt( *pDataSize ) void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( ID3D11ShaderResourceView * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in UINT DataSize, /* [annotation] */ __in_bcount_opt( DataSize ) const void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( ID3D11ShaderResourceView * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in_opt const IUnknown *pData); void ( STDMETHODCALLTYPE *GetResource )( ID3D11ShaderResourceView * This, /* [annotation] */ __out ID3D11Resource **ppResource); void ( STDMETHODCALLTYPE *GetDesc )( ID3D11ShaderResourceView * This, /* [annotation] */ __out D3D11_SHADER_RESOURCE_VIEW_DESC *pDesc); END_INTERFACE } ID3D11ShaderResourceViewVtbl; interface ID3D11ShaderResourceView { CONST_VTBL struct ID3D11ShaderResourceViewVtbl *lpVtbl; }; #ifdef COBJMACROS #define ID3D11ShaderResourceView_QueryInterface(This,riid,ppvObject) \ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) #define ID3D11ShaderResourceView_AddRef(This) \ ( (This)->lpVtbl -> AddRef(This) ) #define ID3D11ShaderResourceView_Release(This) \ ( (This)->lpVtbl -> Release(This) ) #define ID3D11ShaderResourceView_GetDevice(This,ppDevice) \ ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) #define ID3D11ShaderResourceView_GetPrivateData(This,guid,pDataSize,pData) \ ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) #define ID3D11ShaderResourceView_SetPrivateData(This,guid,DataSize,pData) \ ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) #define ID3D11ShaderResourceView_SetPrivateDataInterface(This,guid,pData) \ ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) #define ID3D11ShaderResourceView_GetResource(This,ppResource) \ ( (This)->lpVtbl -> GetResource(This,ppResource) ) #define ID3D11ShaderResourceView_GetDesc(This,pDesc) \ ( (This)->lpVtbl -> GetDesc(This,pDesc) ) #endif /* COBJMACROS */ #endif /* C style interface */ #endif /* __ID3D11ShaderResourceView_INTERFACE_DEFINED__ */ /* interface __MIDL_itf_d3d11_0000_0011 */ /* [local] */ typedef struct D3D11_BUFFER_RTV { union { UINT FirstElement; UINT ElementOffset; } ; union { UINT NumElements; UINT ElementWidth; } ; } D3D11_BUFFER_RTV; typedef struct D3D11_TEX1D_RTV { UINT MipSlice; } D3D11_TEX1D_RTV; typedef struct D3D11_TEX1D_ARRAY_RTV { UINT MipSlice; UINT FirstArraySlice; UINT ArraySize; } D3D11_TEX1D_ARRAY_RTV; typedef struct D3D11_TEX2D_RTV { UINT MipSlice; } D3D11_TEX2D_RTV; typedef struct D3D11_TEX2DMS_RTV { UINT UnusedField_NothingToDefine; } D3D11_TEX2DMS_RTV; typedef struct D3D11_TEX2D_ARRAY_RTV { UINT MipSlice; UINT FirstArraySlice; UINT ArraySize; } D3D11_TEX2D_ARRAY_RTV; typedef struct D3D11_TEX2DMS_ARRAY_RTV { UINT FirstArraySlice; UINT ArraySize; } D3D11_TEX2DMS_ARRAY_RTV; typedef struct D3D11_TEX3D_RTV { UINT MipSlice; UINT FirstWSlice; UINT WSize; } D3D11_TEX3D_RTV; typedef struct D3D11_RENDER_TARGET_VIEW_DESC { DXGI_FORMAT Format; D3D11_RTV_DIMENSION ViewDimension; union { D3D11_BUFFER_RTV Buffer; D3D11_TEX1D_RTV Texture1D; D3D11_TEX1D_ARRAY_RTV Texture1DArray; D3D11_TEX2D_RTV Texture2D; D3D11_TEX2D_ARRAY_RTV Texture2DArray; D3D11_TEX2DMS_RTV Texture2DMS; D3D11_TEX2DMS_ARRAY_RTV Texture2DMSArray; D3D11_TEX3D_RTV Texture3D; } ; } D3D11_RENDER_TARGET_VIEW_DESC; #if !defined( D3D11_NO_HELPERS ) && defined( __cplusplus ) } struct CD3D11_RENDER_TARGET_VIEW_DESC : public D3D11_RENDER_TARGET_VIEW_DESC { CD3D11_RENDER_TARGET_VIEW_DESC() {} explicit CD3D11_RENDER_TARGET_VIEW_DESC( const D3D11_RENDER_TARGET_VIEW_DESC& o ) : D3D11_RENDER_TARGET_VIEW_DESC( o ) {} explicit CD3D11_RENDER_TARGET_VIEW_DESC( D3D11_RTV_DIMENSION viewDimension, DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN, UINT mipSlice = 0, // FirstElement for BUFFER UINT firstArraySlice = 0, // NumElements for BUFFER, FirstWSlice for TEXTURE3D UINT arraySize = -1 ) // WSize for TEXTURE3D { Format = format; ViewDimension = viewDimension; switch (viewDimension) { case D3D11_RTV_DIMENSION_BUFFER: Buffer.FirstElement = mipSlice; Buffer.NumElements = firstArraySlice; break; case D3D11_RTV_DIMENSION_TEXTURE1D: Texture1D.MipSlice = mipSlice; break; case D3D11_RTV_DIMENSION_TEXTURE1DARRAY: Texture1DArray.MipSlice = mipSlice; Texture1DArray.FirstArraySlice = firstArraySlice; Texture1DArray.ArraySize = arraySize; break; case D3D11_RTV_DIMENSION_TEXTURE2D: Texture2D.MipSlice = mipSlice; break; case D3D11_RTV_DIMENSION_TEXTURE2DARRAY: Texture2DArray.MipSlice = mipSlice; Texture2DArray.FirstArraySlice = firstArraySlice; Texture2DArray.ArraySize = arraySize; break; case D3D11_RTV_DIMENSION_TEXTURE2DMS: break; case D3D11_RTV_DIMENSION_TEXTURE2DMSARRAY: Texture2DMSArray.FirstArraySlice = firstArraySlice; Texture2DMSArray.ArraySize = arraySize; break; case D3D11_RTV_DIMENSION_TEXTURE3D: Texture3D.MipSlice = mipSlice; Texture3D.FirstWSlice = firstArraySlice; Texture3D.WSize = arraySize; break; default: break; } } explicit CD3D11_RENDER_TARGET_VIEW_DESC( __in ID3D11Buffer*, DXGI_FORMAT format, UINT firstElement, UINT numElements ) { Format = format; ViewDimension = D3D11_RTV_DIMENSION_BUFFER; Buffer.FirstElement = firstElement; Buffer.NumElements = numElements; } explicit CD3D11_RENDER_TARGET_VIEW_DESC( __in ID3D11Texture1D* pTex1D, D3D11_RTV_DIMENSION viewDimension, DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN, UINT mipSlice = 0, UINT firstArraySlice = 0, UINT arraySize = -1 ) { ViewDimension = viewDimension; if (DXGI_FORMAT_UNKNOWN == format || (-1 == arraySize && D3D11_RTV_DIMENSION_TEXTURE1DARRAY == viewDimension)) { D3D11_TEXTURE1D_DESC TexDesc; pTex1D->GetDesc( &TexDesc ); if (DXGI_FORMAT_UNKNOWN == format) format = TexDesc.Format; if (-1 == arraySize) arraySize = TexDesc.ArraySize - firstArraySlice; } Format = format; switch (viewDimension) { case D3D11_RTV_DIMENSION_TEXTURE1D: Texture1D.MipSlice = mipSlice; break; case D3D11_RTV_DIMENSION_TEXTURE1DARRAY: Texture1DArray.MipSlice = mipSlice; Texture1DArray.FirstArraySlice = firstArraySlice; Texture1DArray.ArraySize = arraySize; break; default: break; } } explicit CD3D11_RENDER_TARGET_VIEW_DESC( __in ID3D11Texture2D* pTex2D, D3D11_RTV_DIMENSION viewDimension, DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN, UINT mipSlice = 0, UINT firstArraySlice = 0, UINT arraySize = -1 ) { ViewDimension = viewDimension; if (DXGI_FORMAT_UNKNOWN == format || (-1 == arraySize && (D3D11_RTV_DIMENSION_TEXTURE2DARRAY == viewDimension || D3D11_RTV_DIMENSION_TEXTURE2DMSARRAY == viewDimension))) { D3D11_TEXTURE2D_DESC TexDesc; pTex2D->GetDesc( &TexDesc ); if (DXGI_FORMAT_UNKNOWN == format) format = TexDesc.Format; if (-1 == arraySize) arraySize = TexDesc.ArraySize - firstArraySlice; } Format = format; switch (viewDimension) { case D3D11_RTV_DIMENSION_TEXTURE2D: Texture2D.MipSlice = mipSlice; break; case D3D11_RTV_DIMENSION_TEXTURE2DARRAY: Texture2DArray.MipSlice = mipSlice; Texture2DArray.FirstArraySlice = firstArraySlice; Texture2DArray.ArraySize = arraySize; break; case D3D11_RTV_DIMENSION_TEXTURE2DMS: break; case D3D11_RTV_DIMENSION_TEXTURE2DMSARRAY: Texture2DMSArray.FirstArraySlice = firstArraySlice; Texture2DMSArray.ArraySize = arraySize; break; default: break; } } explicit CD3D11_RENDER_TARGET_VIEW_DESC( __in ID3D11Texture3D* pTex3D, DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN, UINT mipSlice = 0, UINT firstWSlice = 0, UINT wSize = -1 ) { ViewDimension = D3D11_RTV_DIMENSION_TEXTURE3D; if (DXGI_FORMAT_UNKNOWN == format || -1 == wSize) { D3D11_TEXTURE3D_DESC TexDesc; pTex3D->GetDesc( &TexDesc ); if (DXGI_FORMAT_UNKNOWN == format) format = TexDesc.Format; if (-1 == wSize) wSize = TexDesc.Depth - firstWSlice; } Format = format; Texture3D.MipSlice = mipSlice; Texture3D.FirstWSlice = firstWSlice; Texture3D.WSize = wSize; } ~CD3D11_RENDER_TARGET_VIEW_DESC() {} operator const D3D11_RENDER_TARGET_VIEW_DESC&() const { return *this; } }; extern "C"{ #endif extern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0011_v0_0_c_ifspec; extern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0011_v0_0_s_ifspec; #ifndef __ID3D11RenderTargetView_INTERFACE_DEFINED__ #define __ID3D11RenderTargetView_INTERFACE_DEFINED__ /* interface ID3D11RenderTargetView */ /* [unique][local][object][uuid] */ EXTERN_C const IID IID_ID3D11RenderTargetView; #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("dfdba067-0b8d-4865-875b-d7b4516cc164") ID3D11RenderTargetView : public ID3D11View { public: virtual void STDMETHODCALLTYPE GetDesc( /* [annotation] */ __out D3D11_RENDER_TARGET_VIEW_DESC *pDesc) = 0; }; #else /* C style interface */ typedef struct ID3D11RenderTargetViewVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ID3D11RenderTargetView * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ __RPC__deref_out void **ppvObject); ULONG ( STDMETHODCALLTYPE *AddRef )( ID3D11RenderTargetView * This); ULONG ( STDMETHODCALLTYPE *Release )( ID3D11RenderTargetView * This); void ( STDMETHODCALLTYPE *GetDevice )( ID3D11RenderTargetView * This, /* [annotation] */ __out ID3D11Device **ppDevice); HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( ID3D11RenderTargetView * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __inout UINT *pDataSize, /* [annotation] */ __out_bcount_opt( *pDataSize ) void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( ID3D11RenderTargetView * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in UINT DataSize, /* [annotation] */ __in_bcount_opt( DataSize ) const void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( ID3D11RenderTargetView * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in_opt const IUnknown *pData); void ( STDMETHODCALLTYPE *GetResource )( ID3D11RenderTargetView * This, /* [annotation] */ __out ID3D11Resource **ppResource); void ( STDMETHODCALLTYPE *GetDesc )( ID3D11RenderTargetView * This, /* [annotation] */ __out D3D11_RENDER_TARGET_VIEW_DESC *pDesc); END_INTERFACE } ID3D11RenderTargetViewVtbl; interface ID3D11RenderTargetView { CONST_VTBL struct ID3D11RenderTargetViewVtbl *lpVtbl; }; #ifdef COBJMACROS #define ID3D11RenderTargetView_QueryInterface(This,riid,ppvObject) \ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) #define ID3D11RenderTargetView_AddRef(This) \ ( (This)->lpVtbl -> AddRef(This) ) #define ID3D11RenderTargetView_Release(This) \ ( (This)->lpVtbl -> Release(This) ) #define ID3D11RenderTargetView_GetDevice(This,ppDevice) \ ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) #define ID3D11RenderTargetView_GetPrivateData(This,guid,pDataSize,pData) \ ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) #define ID3D11RenderTargetView_SetPrivateData(This,guid,DataSize,pData) \ ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) #define ID3D11RenderTargetView_SetPrivateDataInterface(This,guid,pData) \ ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) #define ID3D11RenderTargetView_GetResource(This,ppResource) \ ( (This)->lpVtbl -> GetResource(This,ppResource) ) #define ID3D11RenderTargetView_GetDesc(This,pDesc) \ ( (This)->lpVtbl -> GetDesc(This,pDesc) ) #endif /* COBJMACROS */ #endif /* C style interface */ #endif /* __ID3D11RenderTargetView_INTERFACE_DEFINED__ */ /* interface __MIDL_itf_d3d11_0000_0012 */ /* [local] */ #if !defined( D3D11_NO_HELPERS ) && defined( __cplusplus ) } struct CD3D11_VIEWPORT : public D3D11_VIEWPORT { CD3D11_VIEWPORT() {} explicit CD3D11_VIEWPORT( const D3D11_VIEWPORT& o ) : D3D11_VIEWPORT( o ) {} explicit CD3D11_VIEWPORT( FLOAT topLeftX, FLOAT topLeftY, FLOAT width, FLOAT height, FLOAT minDepth = D3D11_MIN_DEPTH, FLOAT maxDepth = D3D11_MAX_DEPTH ) { TopLeftX = topLeftX; TopLeftY = topLeftY; Width = width; Height = height; MinDepth = minDepth; MaxDepth = maxDepth; } explicit CD3D11_VIEWPORT( __in ID3D11Buffer*, __in ID3D11RenderTargetView* pRTView, FLOAT topLeftX = 0.0f, FLOAT minDepth = D3D11_MIN_DEPTH, FLOAT maxDepth = D3D11_MAX_DEPTH ) { D3D11_RENDER_TARGET_VIEW_DESC RTVDesc; pRTView->GetDesc( &RTVDesc ); UINT NumElements = 0; switch (RTVDesc.ViewDimension) { case D3D11_RTV_DIMENSION_BUFFER: NumElements = RTVDesc.Buffer.NumElements; break; default: break; } TopLeftX = topLeftX; TopLeftY = 0.0f; Width = NumElements - topLeftX; Height = 1.0f; MinDepth = minDepth; MaxDepth = maxDepth; } explicit CD3D11_VIEWPORT( __in ID3D11Texture1D* pTex1D, __in ID3D11RenderTargetView* pRTView, FLOAT topLeftX = 0.0f, FLOAT minDepth = D3D11_MIN_DEPTH, FLOAT maxDepth = D3D11_MAX_DEPTH ) { D3D11_TEXTURE1D_DESC TexDesc; pTex1D->GetDesc( &TexDesc ); D3D11_RENDER_TARGET_VIEW_DESC RTVDesc; pRTView->GetDesc( &RTVDesc ); UINT MipSlice = 0; switch (RTVDesc.ViewDimension) { case D3D11_RTV_DIMENSION_TEXTURE1D: MipSlice = RTVDesc.Texture1D.MipSlice; break; case D3D11_RTV_DIMENSION_TEXTURE1DARRAY: MipSlice = RTVDesc.Texture1DArray.MipSlice; break; default: break; } const UINT SubResourceWidth = TexDesc.Width / (UINT( 1 ) << MipSlice); TopLeftX = topLeftX; TopLeftY = 0.0f; Width = (SubResourceWidth ? SubResourceWidth : 1) - topLeftX; Height = 1.0f; MinDepth = minDepth; MaxDepth = maxDepth; } explicit CD3D11_VIEWPORT( __in ID3D11Texture2D* pTex2D, __in ID3D11RenderTargetView* pRTView, FLOAT topLeftX = 0.0f, FLOAT topLeftY = 0.0f, FLOAT minDepth = D3D11_MIN_DEPTH, FLOAT maxDepth = D3D11_MAX_DEPTH ) { D3D11_TEXTURE2D_DESC TexDesc; pTex2D->GetDesc( &TexDesc ); D3D11_RENDER_TARGET_VIEW_DESC RTVDesc; pRTView->GetDesc( &RTVDesc ); UINT MipSlice = 0; switch (RTVDesc.ViewDimension) { case D3D11_RTV_DIMENSION_TEXTURE2D: MipSlice = RTVDesc.Texture2D.MipSlice; break; case D3D11_RTV_DIMENSION_TEXTURE2DARRAY: MipSlice = RTVDesc.Texture2DArray.MipSlice; break; case D3D11_RTV_DIMENSION_TEXTURE2DMS: case D3D11_RTV_DIMENSION_TEXTURE2DMSARRAY: break; default: break; } const UINT SubResourceWidth = TexDesc.Width / (UINT( 1 ) << MipSlice); const UINT SubResourceHeight = TexDesc.Height / (UINT( 1 ) << MipSlice); TopLeftX = topLeftX; TopLeftY = topLeftY; Width = (SubResourceWidth ? SubResourceWidth : 1) - topLeftX; Height = (SubResourceHeight ? SubResourceHeight : 1) - topLeftY; MinDepth = minDepth; MaxDepth = maxDepth; } explicit CD3D11_VIEWPORT( __in ID3D11Texture3D* pTex3D, __in ID3D11RenderTargetView* pRTView, FLOAT topLeftX = 0.0f, FLOAT topLeftY = 0.0f, FLOAT minDepth = D3D11_MIN_DEPTH, FLOAT maxDepth = D3D11_MAX_DEPTH ) { D3D11_TEXTURE3D_DESC TexDesc; pTex3D->GetDesc( &TexDesc ); D3D11_RENDER_TARGET_VIEW_DESC RTVDesc; pRTView->GetDesc( &RTVDesc ); UINT MipSlice = 0; switch (RTVDesc.ViewDimension) { case D3D11_RTV_DIMENSION_TEXTURE3D: MipSlice = RTVDesc.Texture3D.MipSlice; break; default: break; } const UINT SubResourceWidth = TexDesc.Width / (UINT( 1 ) << MipSlice); const UINT SubResourceHeight = TexDesc.Height / (UINT( 1 ) << MipSlice); TopLeftX = topLeftX; TopLeftY = topLeftY; Width = (SubResourceWidth ? SubResourceWidth : 1) - topLeftX; Height = (SubResourceHeight ? SubResourceHeight : 1) - topLeftY; MinDepth = minDepth; MaxDepth = maxDepth; } ~CD3D11_VIEWPORT() {} operator const D3D11_VIEWPORT&() const { return *this; } }; extern "C"{ #endif typedef struct D3D11_TEX1D_DSV { UINT MipSlice; } D3D11_TEX1D_DSV; typedef struct D3D11_TEX1D_ARRAY_DSV { UINT MipSlice; UINT FirstArraySlice; UINT ArraySize; } D3D11_TEX1D_ARRAY_DSV; typedef struct D3D11_TEX2D_DSV { UINT MipSlice; } D3D11_TEX2D_DSV; typedef struct D3D11_TEX2D_ARRAY_DSV { UINT MipSlice; UINT FirstArraySlice; UINT ArraySize; } D3D11_TEX2D_ARRAY_DSV; typedef struct D3D11_TEX2DMS_DSV { UINT UnusedField_NothingToDefine; } D3D11_TEX2DMS_DSV; typedef struct D3D11_TEX2DMS_ARRAY_DSV { UINT FirstArraySlice; UINT ArraySize; } D3D11_TEX2DMS_ARRAY_DSV; typedef enum D3D11_DSV_FLAG { D3D11_DSV_READ_ONLY_DEPTH = 0x1L, D3D11_DSV_READ_ONLY_STENCIL = 0x2L } D3D11_DSV_FLAG; typedef struct D3D11_DEPTH_STENCIL_VIEW_DESC { DXGI_FORMAT Format; D3D11_DSV_DIMENSION ViewDimension; UINT Flags; union { D3D11_TEX1D_DSV Texture1D; D3D11_TEX1D_ARRAY_DSV Texture1DArray; D3D11_TEX2D_DSV Texture2D; D3D11_TEX2D_ARRAY_DSV Texture2DArray; D3D11_TEX2DMS_DSV Texture2DMS; D3D11_TEX2DMS_ARRAY_DSV Texture2DMSArray; } ; } D3D11_DEPTH_STENCIL_VIEW_DESC; #if !defined( D3D11_NO_HELPERS ) && defined( __cplusplus ) } struct CD3D11_DEPTH_STENCIL_VIEW_DESC : public D3D11_DEPTH_STENCIL_VIEW_DESC { CD3D11_DEPTH_STENCIL_VIEW_DESC() {} explicit CD3D11_DEPTH_STENCIL_VIEW_DESC( const D3D11_DEPTH_STENCIL_VIEW_DESC& o ) : D3D11_DEPTH_STENCIL_VIEW_DESC( o ) {} explicit CD3D11_DEPTH_STENCIL_VIEW_DESC( D3D11_DSV_DIMENSION viewDimension, DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN, UINT mipSlice = 0, UINT firstArraySlice = 0, UINT arraySize = -1, UINT flags = 0 ) { Format = format; ViewDimension = viewDimension; Flags = flags; switch (viewDimension) { case D3D11_DSV_DIMENSION_TEXTURE1D: Texture1D.MipSlice = mipSlice; break; case D3D11_DSV_DIMENSION_TEXTURE1DARRAY: Texture1DArray.MipSlice = mipSlice; Texture1DArray.FirstArraySlice = firstArraySlice; Texture1DArray.ArraySize = arraySize; break; case D3D11_DSV_DIMENSION_TEXTURE2D: Texture2D.MipSlice = mipSlice; break; case D3D11_DSV_DIMENSION_TEXTURE2DARRAY: Texture2DArray.MipSlice = mipSlice; Texture2DArray.FirstArraySlice = firstArraySlice; Texture2DArray.ArraySize = arraySize; break; case D3D11_DSV_DIMENSION_TEXTURE2DMS: break; case D3D11_DSV_DIMENSION_TEXTURE2DMSARRAY: Texture2DMSArray.FirstArraySlice = firstArraySlice; Texture2DMSArray.ArraySize = arraySize; break; default: break; } } explicit CD3D11_DEPTH_STENCIL_VIEW_DESC( __in ID3D11Texture1D* pTex1D, D3D11_DSV_DIMENSION viewDimension, DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN, UINT mipSlice = 0, UINT firstArraySlice = 0, UINT arraySize = -1, UINT flags = 0 ) { ViewDimension = viewDimension; Flags = flags; if (DXGI_FORMAT_UNKNOWN == format || (-1 == arraySize && D3D11_DSV_DIMENSION_TEXTURE1DARRAY == viewDimension)) { D3D11_TEXTURE1D_DESC TexDesc; pTex1D->GetDesc( &TexDesc ); if (DXGI_FORMAT_UNKNOWN == format) format = TexDesc.Format; if (-1 == arraySize) arraySize = TexDesc.ArraySize - firstArraySlice; } Format = format; switch (viewDimension) { case D3D11_DSV_DIMENSION_TEXTURE1D: Texture1D.MipSlice = mipSlice; break; case D3D11_DSV_DIMENSION_TEXTURE1DARRAY: Texture1DArray.MipSlice = mipSlice; Texture1DArray.FirstArraySlice = firstArraySlice; Texture1DArray.ArraySize = arraySize; break; default: break; } } explicit CD3D11_DEPTH_STENCIL_VIEW_DESC( __in ID3D11Texture2D* pTex2D, D3D11_DSV_DIMENSION viewDimension, DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN, UINT mipSlice = 0, UINT firstArraySlice = 0, UINT arraySize = -1, UINT flags = 0 ) { ViewDimension = viewDimension; Flags = flags; if (DXGI_FORMAT_UNKNOWN == format || (-1 == arraySize && (D3D11_DSV_DIMENSION_TEXTURE2DARRAY == viewDimension || D3D11_DSV_DIMENSION_TEXTURE2DMSARRAY == viewDimension))) { D3D11_TEXTURE2D_DESC TexDesc; pTex2D->GetDesc( &TexDesc ); if (DXGI_FORMAT_UNKNOWN == format) format = TexDesc.Format; if (-1 == arraySize) arraySize = TexDesc.ArraySize - firstArraySlice; } Format = format; switch (viewDimension) { case D3D11_DSV_DIMENSION_TEXTURE2D: Texture2D.MipSlice = mipSlice; break; case D3D11_DSV_DIMENSION_TEXTURE2DARRAY: Texture2DArray.MipSlice = mipSlice; Texture2DArray.FirstArraySlice = firstArraySlice; Texture2DArray.ArraySize = arraySize; break; case D3D11_DSV_DIMENSION_TEXTURE2DMS: break; case D3D11_DSV_DIMENSION_TEXTURE2DMSARRAY: Texture2DMSArray.FirstArraySlice = firstArraySlice; Texture2DMSArray.ArraySize = arraySize; break; default: break; } } ~CD3D11_DEPTH_STENCIL_VIEW_DESC() {} operator const D3D11_DEPTH_STENCIL_VIEW_DESC&() const { return *this; } }; extern "C"{ #endif extern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0012_v0_0_c_ifspec; extern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0012_v0_0_s_ifspec; #ifndef __ID3D11DepthStencilView_INTERFACE_DEFINED__ #define __ID3D11DepthStencilView_INTERFACE_DEFINED__ /* interface ID3D11DepthStencilView */ /* [unique][local][object][uuid] */ EXTERN_C const IID IID_ID3D11DepthStencilView; #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("9fdac92a-1876-48c3-afad-25b94f84a9b6") ID3D11DepthStencilView : public ID3D11View { public: virtual void STDMETHODCALLTYPE GetDesc( /* [annotation] */ __out D3D11_DEPTH_STENCIL_VIEW_DESC *pDesc) = 0; }; #else /* C style interface */ typedef struct ID3D11DepthStencilViewVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ID3D11DepthStencilView * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ __RPC__deref_out void **ppvObject); ULONG ( STDMETHODCALLTYPE *AddRef )( ID3D11DepthStencilView * This); ULONG ( STDMETHODCALLTYPE *Release )( ID3D11DepthStencilView * This); void ( STDMETHODCALLTYPE *GetDevice )( ID3D11DepthStencilView * This, /* [annotation] */ __out ID3D11Device **ppDevice); HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( ID3D11DepthStencilView * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __inout UINT *pDataSize, /* [annotation] */ __out_bcount_opt( *pDataSize ) void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( ID3D11DepthStencilView * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in UINT DataSize, /* [annotation] */ __in_bcount_opt( DataSize ) const void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( ID3D11DepthStencilView * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in_opt const IUnknown *pData); void ( STDMETHODCALLTYPE *GetResource )( ID3D11DepthStencilView * This, /* [annotation] */ __out ID3D11Resource **ppResource); void ( STDMETHODCALLTYPE *GetDesc )( ID3D11DepthStencilView * This, /* [annotation] */ __out D3D11_DEPTH_STENCIL_VIEW_DESC *pDesc); END_INTERFACE } ID3D11DepthStencilViewVtbl; interface ID3D11DepthStencilView { CONST_VTBL struct ID3D11DepthStencilViewVtbl *lpVtbl; }; #ifdef COBJMACROS #define ID3D11DepthStencilView_QueryInterface(This,riid,ppvObject) \ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) #define ID3D11DepthStencilView_AddRef(This) \ ( (This)->lpVtbl -> AddRef(This) ) #define ID3D11DepthStencilView_Release(This) \ ( (This)->lpVtbl -> Release(This) ) #define ID3D11DepthStencilView_GetDevice(This,ppDevice) \ ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) #define ID3D11DepthStencilView_GetPrivateData(This,guid,pDataSize,pData) \ ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) #define ID3D11DepthStencilView_SetPrivateData(This,guid,DataSize,pData) \ ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) #define ID3D11DepthStencilView_SetPrivateDataInterface(This,guid,pData) \ ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) #define ID3D11DepthStencilView_GetResource(This,ppResource) \ ( (This)->lpVtbl -> GetResource(This,ppResource) ) #define ID3D11DepthStencilView_GetDesc(This,pDesc) \ ( (This)->lpVtbl -> GetDesc(This,pDesc) ) #endif /* COBJMACROS */ #endif /* C style interface */ #endif /* __ID3D11DepthStencilView_INTERFACE_DEFINED__ */ /* interface __MIDL_itf_d3d11_0000_0013 */ /* [local] */ typedef enum D3D11_BUFFER_UAV_FLAG { D3D11_BUFFER_UAV_FLAG_RAW = 0x1, D3D11_BUFFER_UAV_FLAG_APPEND = 0x2, D3D11_BUFFER_UAV_FLAG_COUNTER = 0x4 } D3D11_BUFFER_UAV_FLAG; typedef struct D3D11_BUFFER_UAV { UINT FirstElement; UINT NumElements; UINT Flags; } D3D11_BUFFER_UAV; typedef struct D3D11_TEX1D_UAV { UINT MipSlice; } D3D11_TEX1D_UAV; typedef struct D3D11_TEX1D_ARRAY_UAV { UINT MipSlice; UINT FirstArraySlice; UINT ArraySize; } D3D11_TEX1D_ARRAY_UAV; typedef struct D3D11_TEX2D_UAV { UINT MipSlice; } D3D11_TEX2D_UAV; typedef struct D3D11_TEX2D_ARRAY_UAV { UINT MipSlice; UINT FirstArraySlice; UINT ArraySize; } D3D11_TEX2D_ARRAY_UAV; typedef struct D3D11_TEX3D_UAV { UINT MipSlice; UINT FirstWSlice; UINT WSize; } D3D11_TEX3D_UAV; typedef struct D3D11_UNORDERED_ACCESS_VIEW_DESC { DXGI_FORMAT Format; D3D11_UAV_DIMENSION ViewDimension; union { D3D11_BUFFER_UAV Buffer; D3D11_TEX1D_UAV Texture1D; D3D11_TEX1D_ARRAY_UAV Texture1DArray; D3D11_TEX2D_UAV Texture2D; D3D11_TEX2D_ARRAY_UAV Texture2DArray; D3D11_TEX3D_UAV Texture3D; } ; } D3D11_UNORDERED_ACCESS_VIEW_DESC; #if !defined( D3D11_NO_HELPERS ) && defined( __cplusplus ) } struct CD3D11_UNORDERED_ACCESS_VIEW_DESC : public D3D11_UNORDERED_ACCESS_VIEW_DESC { CD3D11_UNORDERED_ACCESS_VIEW_DESC() {} explicit CD3D11_UNORDERED_ACCESS_VIEW_DESC( const D3D11_UNORDERED_ACCESS_VIEW_DESC& o ) : D3D11_UNORDERED_ACCESS_VIEW_DESC( o ) {} explicit CD3D11_UNORDERED_ACCESS_VIEW_DESC( D3D11_UAV_DIMENSION viewDimension, DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN, UINT mipSlice = 0, // FirstElement for BUFFER UINT firstArraySlice = 0, // NumElements for BUFFER, FirstWSlice for TEXTURE3D UINT arraySize = -1, // WSize for TEXTURE3D UINT flags = 0 ) // BUFFER only { Format = format; ViewDimension = viewDimension; switch (viewDimension) { case D3D11_UAV_DIMENSION_BUFFER: Buffer.FirstElement = mipSlice; Buffer.NumElements = firstArraySlice; Buffer.Flags = flags; break; case D3D11_UAV_DIMENSION_TEXTURE1D: Texture1D.MipSlice = mipSlice; break; case D3D11_UAV_DIMENSION_TEXTURE1DARRAY: Texture1DArray.MipSlice = mipSlice; Texture1DArray.FirstArraySlice = firstArraySlice; Texture1DArray.ArraySize = arraySize; break; case D3D11_UAV_DIMENSION_TEXTURE2D: Texture2D.MipSlice = mipSlice; break; case D3D11_UAV_DIMENSION_TEXTURE2DARRAY: Texture2DArray.MipSlice = mipSlice; Texture2DArray.FirstArraySlice = firstArraySlice; Texture2DArray.ArraySize = arraySize; break; case D3D11_UAV_DIMENSION_TEXTURE3D: Texture3D.MipSlice = mipSlice; Texture3D.FirstWSlice = firstArraySlice; Texture3D.WSize = arraySize; break; default: break; } } explicit CD3D11_UNORDERED_ACCESS_VIEW_DESC( __in ID3D11Buffer*, DXGI_FORMAT format, UINT firstElement, UINT numElements, UINT flags = 0 ) { Format = format; ViewDimension = D3D11_UAV_DIMENSION_BUFFER; Buffer.FirstElement = firstElement; Buffer.NumElements = numElements; Buffer.Flags = flags; } explicit CD3D11_UNORDERED_ACCESS_VIEW_DESC( __in ID3D11Texture1D* pTex1D, D3D11_UAV_DIMENSION viewDimension, DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN, UINT mipSlice = 0, UINT firstArraySlice = 0, UINT arraySize = -1 ) { ViewDimension = viewDimension; if (DXGI_FORMAT_UNKNOWN == format || (-1 == arraySize && D3D11_UAV_DIMENSION_TEXTURE1DARRAY == viewDimension)) { D3D11_TEXTURE1D_DESC TexDesc; pTex1D->GetDesc( &TexDesc ); if (DXGI_FORMAT_UNKNOWN == format) format = TexDesc.Format; if (-1 == arraySize) arraySize = TexDesc.ArraySize - firstArraySlice; } Format = format; switch (viewDimension) { case D3D11_UAV_DIMENSION_TEXTURE1D: Texture1D.MipSlice = mipSlice; break; case D3D11_UAV_DIMENSION_TEXTURE1DARRAY: Texture1DArray.MipSlice = mipSlice; Texture1DArray.FirstArraySlice = firstArraySlice; Texture1DArray.ArraySize = arraySize; break; default: break; } } explicit CD3D11_UNORDERED_ACCESS_VIEW_DESC( __in ID3D11Texture2D* pTex2D, D3D11_UAV_DIMENSION viewDimension, DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN, UINT mipSlice = 0, UINT firstArraySlice = 0, UINT arraySize = -1 ) { ViewDimension = viewDimension; if (DXGI_FORMAT_UNKNOWN == format || (-1 == arraySize && D3D11_UAV_DIMENSION_TEXTURE2DARRAY == viewDimension)) { D3D11_TEXTURE2D_DESC TexDesc; pTex2D->GetDesc( &TexDesc ); if (DXGI_FORMAT_UNKNOWN == format) format = TexDesc.Format; if (-1 == arraySize) arraySize = TexDesc.ArraySize - firstArraySlice; } Format = format; switch (viewDimension) { case D3D11_UAV_DIMENSION_TEXTURE2D: Texture2D.MipSlice = mipSlice; break; case D3D11_UAV_DIMENSION_TEXTURE2DARRAY: Texture2DArray.MipSlice = mipSlice; Texture2DArray.FirstArraySlice = firstArraySlice; Texture2DArray.ArraySize = arraySize; break; default: break; } } explicit CD3D11_UNORDERED_ACCESS_VIEW_DESC( __in ID3D11Texture3D* pTex3D, DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN, UINT mipSlice = 0, UINT firstWSlice = 0, UINT wSize = -1 ) { ViewDimension = D3D11_UAV_DIMENSION_TEXTURE3D; if (DXGI_FORMAT_UNKNOWN == format || -1 == wSize) { D3D11_TEXTURE3D_DESC TexDesc; pTex3D->GetDesc( &TexDesc ); if (DXGI_FORMAT_UNKNOWN == format) format = TexDesc.Format; if (-1 == wSize) wSize = TexDesc.Depth - firstWSlice; } Format = format; Texture3D.MipSlice = mipSlice; Texture3D.FirstWSlice = firstWSlice; Texture3D.WSize = wSize; } ~CD3D11_UNORDERED_ACCESS_VIEW_DESC() {} operator const D3D11_UNORDERED_ACCESS_VIEW_DESC&() const { return *this; } }; extern "C"{ #endif extern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0013_v0_0_c_ifspec; extern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0013_v0_0_s_ifspec; #ifndef __ID3D11UnorderedAccessView_INTERFACE_DEFINED__ #define __ID3D11UnorderedAccessView_INTERFACE_DEFINED__ /* interface ID3D11UnorderedAccessView */ /* [unique][local][object][uuid] */ EXTERN_C const IID IID_ID3D11UnorderedAccessView; #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("28acf509-7f5c-48f6-8611-f316010a6380") ID3D11UnorderedAccessView : public ID3D11View { public: virtual void STDMETHODCALLTYPE GetDesc( /* [annotation] */ __out D3D11_UNORDERED_ACCESS_VIEW_DESC *pDesc) = 0; }; #else /* C style interface */ typedef struct ID3D11UnorderedAccessViewVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ID3D11UnorderedAccessView * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ __RPC__deref_out void **ppvObject); ULONG ( STDMETHODCALLTYPE *AddRef )( ID3D11UnorderedAccessView * This); ULONG ( STDMETHODCALLTYPE *Release )( ID3D11UnorderedAccessView * This); void ( STDMETHODCALLTYPE *GetDevice )( ID3D11UnorderedAccessView * This, /* [annotation] */ __out ID3D11Device **ppDevice); HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( ID3D11UnorderedAccessView * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __inout UINT *pDataSize, /* [annotation] */ __out_bcount_opt( *pDataSize ) void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( ID3D11UnorderedAccessView * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in UINT DataSize, /* [annotation] */ __in_bcount_opt( DataSize ) const void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( ID3D11UnorderedAccessView * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in_opt const IUnknown *pData); void ( STDMETHODCALLTYPE *GetResource )( ID3D11UnorderedAccessView * This, /* [annotation] */ __out ID3D11Resource **ppResource); void ( STDMETHODCALLTYPE *GetDesc )( ID3D11UnorderedAccessView * This, /* [annotation] */ __out D3D11_UNORDERED_ACCESS_VIEW_DESC *pDesc); END_INTERFACE } ID3D11UnorderedAccessViewVtbl; interface ID3D11UnorderedAccessView { CONST_VTBL struct ID3D11UnorderedAccessViewVtbl *lpVtbl; }; #ifdef COBJMACROS #define ID3D11UnorderedAccessView_QueryInterface(This,riid,ppvObject) \ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) #define ID3D11UnorderedAccessView_AddRef(This) \ ( (This)->lpVtbl -> AddRef(This) ) #define ID3D11UnorderedAccessView_Release(This) \ ( (This)->lpVtbl -> Release(This) ) #define ID3D11UnorderedAccessView_GetDevice(This,ppDevice) \ ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) #define ID3D11UnorderedAccessView_GetPrivateData(This,guid,pDataSize,pData) \ ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) #define ID3D11UnorderedAccessView_SetPrivateData(This,guid,DataSize,pData) \ ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) #define ID3D11UnorderedAccessView_SetPrivateDataInterface(This,guid,pData) \ ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) #define ID3D11UnorderedAccessView_GetResource(This,ppResource) \ ( (This)->lpVtbl -> GetResource(This,ppResource) ) #define ID3D11UnorderedAccessView_GetDesc(This,pDesc) \ ( (This)->lpVtbl -> GetDesc(This,pDesc) ) #endif /* COBJMACROS */ #endif /* C style interface */ #endif /* __ID3D11UnorderedAccessView_INTERFACE_DEFINED__ */ #ifndef __ID3D11VertexShader_INTERFACE_DEFINED__ #define __ID3D11VertexShader_INTERFACE_DEFINED__ /* interface ID3D11VertexShader */ /* [unique][local][object][uuid] */ EXTERN_C const IID IID_ID3D11VertexShader; #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("3b301d64-d678-4289-8897-22f8928b72f3") ID3D11VertexShader : public ID3D11DeviceChild { public: }; #else /* C style interface */ typedef struct ID3D11VertexShaderVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ID3D11VertexShader * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ __RPC__deref_out void **ppvObject); ULONG ( STDMETHODCALLTYPE *AddRef )( ID3D11VertexShader * This); ULONG ( STDMETHODCALLTYPE *Release )( ID3D11VertexShader * This); void ( STDMETHODCALLTYPE *GetDevice )( ID3D11VertexShader * This, /* [annotation] */ __out ID3D11Device **ppDevice); HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( ID3D11VertexShader * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __inout UINT *pDataSize, /* [annotation] */ __out_bcount_opt( *pDataSize ) void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( ID3D11VertexShader * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in UINT DataSize, /* [annotation] */ __in_bcount_opt( DataSize ) const void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( ID3D11VertexShader * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in_opt const IUnknown *pData); END_INTERFACE } ID3D11VertexShaderVtbl; interface ID3D11VertexShader { CONST_VTBL struct ID3D11VertexShaderVtbl *lpVtbl; }; #ifdef COBJMACROS #define ID3D11VertexShader_QueryInterface(This,riid,ppvObject) \ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) #define ID3D11VertexShader_AddRef(This) \ ( (This)->lpVtbl -> AddRef(This) ) #define ID3D11VertexShader_Release(This) \ ( (This)->lpVtbl -> Release(This) ) #define ID3D11VertexShader_GetDevice(This,ppDevice) \ ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) #define ID3D11VertexShader_GetPrivateData(This,guid,pDataSize,pData) \ ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) #define ID3D11VertexShader_SetPrivateData(This,guid,DataSize,pData) \ ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) #define ID3D11VertexShader_SetPrivateDataInterface(This,guid,pData) \ ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) #endif /* COBJMACROS */ #endif /* C style interface */ #endif /* __ID3D11VertexShader_INTERFACE_DEFINED__ */ #ifndef __ID3D11HullShader_INTERFACE_DEFINED__ #define __ID3D11HullShader_INTERFACE_DEFINED__ /* interface ID3D11HullShader */ /* [unique][local][object][uuid] */ EXTERN_C const IID IID_ID3D11HullShader; #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("8e5c6061-628a-4c8e-8264-bbe45cb3d5dd") ID3D11HullShader : public ID3D11DeviceChild { public: }; #else /* C style interface */ typedef struct ID3D11HullShaderVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ID3D11HullShader * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ __RPC__deref_out void **ppvObject); ULONG ( STDMETHODCALLTYPE *AddRef )( ID3D11HullShader * This); ULONG ( STDMETHODCALLTYPE *Release )( ID3D11HullShader * This); void ( STDMETHODCALLTYPE *GetDevice )( ID3D11HullShader * This, /* [annotation] */ __out ID3D11Device **ppDevice); HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( ID3D11HullShader * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __inout UINT *pDataSize, /* [annotation] */ __out_bcount_opt( *pDataSize ) void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( ID3D11HullShader * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in UINT DataSize, /* [annotation] */ __in_bcount_opt( DataSize ) const void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( ID3D11HullShader * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in_opt const IUnknown *pData); END_INTERFACE } ID3D11HullShaderVtbl; interface ID3D11HullShader { CONST_VTBL struct ID3D11HullShaderVtbl *lpVtbl; }; #ifdef COBJMACROS #define ID3D11HullShader_QueryInterface(This,riid,ppvObject) \ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) #define ID3D11HullShader_AddRef(This) \ ( (This)->lpVtbl -> AddRef(This) ) #define ID3D11HullShader_Release(This) \ ( (This)->lpVtbl -> Release(This) ) #define ID3D11HullShader_GetDevice(This,ppDevice) \ ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) #define ID3D11HullShader_GetPrivateData(This,guid,pDataSize,pData) \ ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) #define ID3D11HullShader_SetPrivateData(This,guid,DataSize,pData) \ ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) #define ID3D11HullShader_SetPrivateDataInterface(This,guid,pData) \ ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) #endif /* COBJMACROS */ #endif /* C style interface */ #endif /* __ID3D11HullShader_INTERFACE_DEFINED__ */ #ifndef __ID3D11DomainShader_INTERFACE_DEFINED__ #define __ID3D11DomainShader_INTERFACE_DEFINED__ /* interface ID3D11DomainShader */ /* [unique][local][object][uuid] */ EXTERN_C const IID IID_ID3D11DomainShader; #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("f582c508-0f36-490c-9977-31eece268cfa") ID3D11DomainShader : public ID3D11DeviceChild { public: }; #else /* C style interface */ typedef struct ID3D11DomainShaderVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ID3D11DomainShader * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ __RPC__deref_out void **ppvObject); ULONG ( STDMETHODCALLTYPE *AddRef )( ID3D11DomainShader * This); ULONG ( STDMETHODCALLTYPE *Release )( ID3D11DomainShader * This); void ( STDMETHODCALLTYPE *GetDevice )( ID3D11DomainShader * This, /* [annotation] */ __out ID3D11Device **ppDevice); HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( ID3D11DomainShader * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __inout UINT *pDataSize, /* [annotation] */ __out_bcount_opt( *pDataSize ) void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( ID3D11DomainShader * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in UINT DataSize, /* [annotation] */ __in_bcount_opt( DataSize ) const void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( ID3D11DomainShader * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in_opt const IUnknown *pData); END_INTERFACE } ID3D11DomainShaderVtbl; interface ID3D11DomainShader { CONST_VTBL struct ID3D11DomainShaderVtbl *lpVtbl; }; #ifdef COBJMACROS #define ID3D11DomainShader_QueryInterface(This,riid,ppvObject) \ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) #define ID3D11DomainShader_AddRef(This) \ ( (This)->lpVtbl -> AddRef(This) ) #define ID3D11DomainShader_Release(This) \ ( (This)->lpVtbl -> Release(This) ) #define ID3D11DomainShader_GetDevice(This,ppDevice) \ ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) #define ID3D11DomainShader_GetPrivateData(This,guid,pDataSize,pData) \ ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) #define ID3D11DomainShader_SetPrivateData(This,guid,DataSize,pData) \ ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) #define ID3D11DomainShader_SetPrivateDataInterface(This,guid,pData) \ ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) #endif /* COBJMACROS */ #endif /* C style interface */ #endif /* __ID3D11DomainShader_INTERFACE_DEFINED__ */ #ifndef __ID3D11GeometryShader_INTERFACE_DEFINED__ #define __ID3D11GeometryShader_INTERFACE_DEFINED__ /* interface ID3D11GeometryShader */ /* [unique][local][object][uuid] */ EXTERN_C const IID IID_ID3D11GeometryShader; #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("38325b96-effb-4022-ba02-2e795b70275c") ID3D11GeometryShader : public ID3D11DeviceChild { public: }; #else /* C style interface */ typedef struct ID3D11GeometryShaderVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ID3D11GeometryShader * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ __RPC__deref_out void **ppvObject); ULONG ( STDMETHODCALLTYPE *AddRef )( ID3D11GeometryShader * This); ULONG ( STDMETHODCALLTYPE *Release )( ID3D11GeometryShader * This); void ( STDMETHODCALLTYPE *GetDevice )( ID3D11GeometryShader * This, /* [annotation] */ __out ID3D11Device **ppDevice); HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( ID3D11GeometryShader * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __inout UINT *pDataSize, /* [annotation] */ __out_bcount_opt( *pDataSize ) void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( ID3D11GeometryShader * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in UINT DataSize, /* [annotation] */ __in_bcount_opt( DataSize ) const void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( ID3D11GeometryShader * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in_opt const IUnknown *pData); END_INTERFACE } ID3D11GeometryShaderVtbl; interface ID3D11GeometryShader { CONST_VTBL struct ID3D11GeometryShaderVtbl *lpVtbl; }; #ifdef COBJMACROS #define ID3D11GeometryShader_QueryInterface(This,riid,ppvObject) \ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) #define ID3D11GeometryShader_AddRef(This) \ ( (This)->lpVtbl -> AddRef(This) ) #define ID3D11GeometryShader_Release(This) \ ( (This)->lpVtbl -> Release(This) ) #define ID3D11GeometryShader_GetDevice(This,ppDevice) \ ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) #define ID3D11GeometryShader_GetPrivateData(This,guid,pDataSize,pData) \ ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) #define ID3D11GeometryShader_SetPrivateData(This,guid,DataSize,pData) \ ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) #define ID3D11GeometryShader_SetPrivateDataInterface(This,guid,pData) \ ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) #endif /* COBJMACROS */ #endif /* C style interface */ #endif /* __ID3D11GeometryShader_INTERFACE_DEFINED__ */ #ifndef __ID3D11PixelShader_INTERFACE_DEFINED__ #define __ID3D11PixelShader_INTERFACE_DEFINED__ /* interface ID3D11PixelShader */ /* [unique][local][object][uuid] */ EXTERN_C const IID IID_ID3D11PixelShader; #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("ea82e40d-51dc-4f33-93d4-db7c9125ae8c") ID3D11PixelShader : public ID3D11DeviceChild { public: }; #else /* C style interface */ typedef struct ID3D11PixelShaderVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ID3D11PixelShader * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ __RPC__deref_out void **ppvObject); ULONG ( STDMETHODCALLTYPE *AddRef )( ID3D11PixelShader * This); ULONG ( STDMETHODCALLTYPE *Release )( ID3D11PixelShader * This); void ( STDMETHODCALLTYPE *GetDevice )( ID3D11PixelShader * This, /* [annotation] */ __out ID3D11Device **ppDevice); HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( ID3D11PixelShader * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __inout UINT *pDataSize, /* [annotation] */ __out_bcount_opt( *pDataSize ) void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( ID3D11PixelShader * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in UINT DataSize, /* [annotation] */ __in_bcount_opt( DataSize ) const void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( ID3D11PixelShader * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in_opt const IUnknown *pData); END_INTERFACE } ID3D11PixelShaderVtbl; interface ID3D11PixelShader { CONST_VTBL struct ID3D11PixelShaderVtbl *lpVtbl; }; #ifdef COBJMACROS #define ID3D11PixelShader_QueryInterface(This,riid,ppvObject) \ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) #define ID3D11PixelShader_AddRef(This) \ ( (This)->lpVtbl -> AddRef(This) ) #define ID3D11PixelShader_Release(This) \ ( (This)->lpVtbl -> Release(This) ) #define ID3D11PixelShader_GetDevice(This,ppDevice) \ ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) #define ID3D11PixelShader_GetPrivateData(This,guid,pDataSize,pData) \ ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) #define ID3D11PixelShader_SetPrivateData(This,guid,DataSize,pData) \ ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) #define ID3D11PixelShader_SetPrivateDataInterface(This,guid,pData) \ ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) #endif /* COBJMACROS */ #endif /* C style interface */ #endif /* __ID3D11PixelShader_INTERFACE_DEFINED__ */ #ifndef __ID3D11ComputeShader_INTERFACE_DEFINED__ #define __ID3D11ComputeShader_INTERFACE_DEFINED__ /* interface ID3D11ComputeShader */ /* [unique][local][object][uuid] */ EXTERN_C const IID IID_ID3D11ComputeShader; #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("4f5b196e-c2bd-495e-bd01-1fded38e4969") ID3D11ComputeShader : public ID3D11DeviceChild { public: }; #else /* C style interface */ typedef struct ID3D11ComputeShaderVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ID3D11ComputeShader * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ __RPC__deref_out void **ppvObject); ULONG ( STDMETHODCALLTYPE *AddRef )( ID3D11ComputeShader * This); ULONG ( STDMETHODCALLTYPE *Release )( ID3D11ComputeShader * This); void ( STDMETHODCALLTYPE *GetDevice )( ID3D11ComputeShader * This, /* [annotation] */ __out ID3D11Device **ppDevice); HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( ID3D11ComputeShader * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __inout UINT *pDataSize, /* [annotation] */ __out_bcount_opt( *pDataSize ) void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( ID3D11ComputeShader * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in UINT DataSize, /* [annotation] */ __in_bcount_opt( DataSize ) const void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( ID3D11ComputeShader * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in_opt const IUnknown *pData); END_INTERFACE } ID3D11ComputeShaderVtbl; interface ID3D11ComputeShader { CONST_VTBL struct ID3D11ComputeShaderVtbl *lpVtbl; }; #ifdef COBJMACROS #define ID3D11ComputeShader_QueryInterface(This,riid,ppvObject) \ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) #define ID3D11ComputeShader_AddRef(This) \ ( (This)->lpVtbl -> AddRef(This) ) #define ID3D11ComputeShader_Release(This) \ ( (This)->lpVtbl -> Release(This) ) #define ID3D11ComputeShader_GetDevice(This,ppDevice) \ ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) #define ID3D11ComputeShader_GetPrivateData(This,guid,pDataSize,pData) \ ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) #define ID3D11ComputeShader_SetPrivateData(This,guid,DataSize,pData) \ ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) #define ID3D11ComputeShader_SetPrivateDataInterface(This,guid,pData) \ ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) #endif /* COBJMACROS */ #endif /* C style interface */ #endif /* __ID3D11ComputeShader_INTERFACE_DEFINED__ */ #ifndef __ID3D11InputLayout_INTERFACE_DEFINED__ #define __ID3D11InputLayout_INTERFACE_DEFINED__ /* interface ID3D11InputLayout */ /* [unique][local][object][uuid] */ EXTERN_C const IID IID_ID3D11InputLayout; #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("e4819ddc-4cf0-4025-bd26-5de82a3e07b7") ID3D11InputLayout : public ID3D11DeviceChild { public: }; #else /* C style interface */ typedef struct ID3D11InputLayoutVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ID3D11InputLayout * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ __RPC__deref_out void **ppvObject); ULONG ( STDMETHODCALLTYPE *AddRef )( ID3D11InputLayout * This); ULONG ( STDMETHODCALLTYPE *Release )( ID3D11InputLayout * This); void ( STDMETHODCALLTYPE *GetDevice )( ID3D11InputLayout * This, /* [annotation] */ __out ID3D11Device **ppDevice); HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( ID3D11InputLayout * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __inout UINT *pDataSize, /* [annotation] */ __out_bcount_opt( *pDataSize ) void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( ID3D11InputLayout * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in UINT DataSize, /* [annotation] */ __in_bcount_opt( DataSize ) const void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( ID3D11InputLayout * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in_opt const IUnknown *pData); END_INTERFACE } ID3D11InputLayoutVtbl; interface ID3D11InputLayout { CONST_VTBL struct ID3D11InputLayoutVtbl *lpVtbl; }; #ifdef COBJMACROS #define ID3D11InputLayout_QueryInterface(This,riid,ppvObject) \ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) #define ID3D11InputLayout_AddRef(This) \ ( (This)->lpVtbl -> AddRef(This) ) #define ID3D11InputLayout_Release(This) \ ( (This)->lpVtbl -> Release(This) ) #define ID3D11InputLayout_GetDevice(This,ppDevice) \ ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) #define ID3D11InputLayout_GetPrivateData(This,guid,pDataSize,pData) \ ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) #define ID3D11InputLayout_SetPrivateData(This,guid,DataSize,pData) \ ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) #define ID3D11InputLayout_SetPrivateDataInterface(This,guid,pData) \ ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) #endif /* COBJMACROS */ #endif /* C style interface */ #endif /* __ID3D11InputLayout_INTERFACE_DEFINED__ */ /* interface __MIDL_itf_d3d11_0000_0021 */ /* [local] */ typedef enum D3D11_FILTER { D3D11_FILTER_MIN_MAG_MIP_POINT = 0, D3D11_FILTER_MIN_MAG_POINT_MIP_LINEAR = 0x1, D3D11_FILTER_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x4, D3D11_FILTER_MIN_POINT_MAG_MIP_LINEAR = 0x5, D3D11_FILTER_MIN_LINEAR_MAG_MIP_POINT = 0x10, D3D11_FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x11, D3D11_FILTER_MIN_MAG_LINEAR_MIP_POINT = 0x14, D3D11_FILTER_MIN_MAG_MIP_LINEAR = 0x15, D3D11_FILTER_ANISOTROPIC = 0x55, D3D11_FILTER_COMPARISON_MIN_MAG_MIP_POINT = 0x80, D3D11_FILTER_COMPARISON_MIN_MAG_POINT_MIP_LINEAR = 0x81, D3D11_FILTER_COMPARISON_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x84, D3D11_FILTER_COMPARISON_MIN_POINT_MAG_MIP_LINEAR = 0x85, D3D11_FILTER_COMPARISON_MIN_LINEAR_MAG_MIP_POINT = 0x90, D3D11_FILTER_COMPARISON_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x91, D3D11_FILTER_COMPARISON_MIN_MAG_LINEAR_MIP_POINT = 0x94, D3D11_FILTER_COMPARISON_MIN_MAG_MIP_LINEAR = 0x95, D3D11_FILTER_COMPARISON_ANISOTROPIC = 0xd5 } D3D11_FILTER; typedef enum D3D11_FILTER_TYPE { D3D11_FILTER_TYPE_POINT = 0, D3D11_FILTER_TYPE_LINEAR = 1 } D3D11_FILTER_TYPE; #define D3D11_FILTER_TYPE_MASK ( 0x3 ) #define D3D11_MIN_FILTER_SHIFT ( 4 ) #define D3D11_MAG_FILTER_SHIFT ( 2 ) #define D3D11_MIP_FILTER_SHIFT ( 0 ) #define D3D11_COMPARISON_FILTERING_BIT ( 0x80 ) #define D3D11_ANISOTROPIC_FILTERING_BIT ( 0x40 ) #define D3D11_ENCODE_BASIC_FILTER( min, mag, mip, bComparison ) \ ( ( D3D11_FILTER ) ( \ ( ( bComparison ) ? D3D11_COMPARISON_FILTERING_BIT : 0 ) | \ ( ( ( min ) & D3D11_FILTER_TYPE_MASK ) << D3D11_MIN_FILTER_SHIFT ) | \ ( ( ( mag ) & D3D11_FILTER_TYPE_MASK ) << D3D11_MAG_FILTER_SHIFT ) | \ ( ( ( mip ) & D3D11_FILTER_TYPE_MASK ) << D3D11_MIP_FILTER_SHIFT ) ) ) #define D3D11_ENCODE_ANISOTROPIC_FILTER( bComparison ) \ ( ( D3D11_FILTER ) ( \ D3D11_ANISOTROPIC_FILTERING_BIT | \ D3D11_ENCODE_BASIC_FILTER( D3D11_FILTER_TYPE_LINEAR, \ D3D11_FILTER_TYPE_LINEAR, \ D3D11_FILTER_TYPE_LINEAR, \ bComparison ) ) ) #define D3D11_DECODE_MIN_FILTER( d3d11Filter ) \ ( ( D3D11_FILTER_TYPE ) \ ( ( ( d3d11Filter ) >> D3D11_MIN_FILTER_SHIFT ) & D3D11_FILTER_TYPE_MASK ) ) #define D3D11_DECODE_MAG_FILTER( d3d11Filter ) \ ( ( D3D11_FILTER_TYPE ) \ ( ( ( d3d11Filter ) >> D3D11_MAG_FILTER_SHIFT ) & D3D11_FILTER_TYPE_MASK ) ) #define D3D11_DECODE_MIP_FILTER( d3d11Filter ) \ ( ( D3D11_FILTER_TYPE ) \ ( ( ( d3d11Filter ) >> D3D11_MIP_FILTER_SHIFT ) & D3D11_FILTER_TYPE_MASK ) ) #define D3D11_DECODE_IS_COMPARISON_FILTER( d3d11Filter ) \ ( ( d3d11Filter ) & D3D11_COMPARISON_FILTERING_BIT ) #define D3D11_DECODE_IS_ANISOTROPIC_FILTER( d3d11Filter ) \ ( ( ( d3d11Filter ) & D3D11_ANISOTROPIC_FILTERING_BIT ) && \ ( D3D11_FILTER_TYPE_LINEAR == D3D11_DECODE_MIN_FILTER( d3d11Filter ) ) && \ ( D3D11_FILTER_TYPE_LINEAR == D3D11_DECODE_MAG_FILTER( d3d11Filter ) ) && \ ( D3D11_FILTER_TYPE_LINEAR == D3D11_DECODE_MIP_FILTER( d3d11Filter ) ) ) typedef enum D3D11_TEXTURE_ADDRESS_MODE { D3D11_TEXTURE_ADDRESS_WRAP = 1, D3D11_TEXTURE_ADDRESS_MIRROR = 2, D3D11_TEXTURE_ADDRESS_CLAMP = 3, D3D11_TEXTURE_ADDRESS_BORDER = 4, D3D11_TEXTURE_ADDRESS_MIRROR_ONCE = 5 } D3D11_TEXTURE_ADDRESS_MODE; typedef struct D3D11_SAMPLER_DESC { D3D11_FILTER Filter; D3D11_TEXTURE_ADDRESS_MODE AddressU; D3D11_TEXTURE_ADDRESS_MODE AddressV; D3D11_TEXTURE_ADDRESS_MODE AddressW; FLOAT MipLODBias; UINT MaxAnisotropy; D3D11_COMPARISON_FUNC ComparisonFunc; FLOAT BorderColor[ 4 ]; FLOAT MinLOD; FLOAT MaxLOD; } D3D11_SAMPLER_DESC; #if !defined( D3D11_NO_HELPERS ) && defined( __cplusplus ) } struct CD3D11_SAMPLER_DESC : public D3D11_SAMPLER_DESC { CD3D11_SAMPLER_DESC() {} explicit CD3D11_SAMPLER_DESC( const D3D11_SAMPLER_DESC& o ) : D3D11_SAMPLER_DESC( o ) {} explicit CD3D11_SAMPLER_DESC( CD3D11_DEFAULT ) { Filter = D3D11_FILTER_MIN_MAG_MIP_LINEAR; AddressU = D3D11_TEXTURE_ADDRESS_CLAMP; AddressV = D3D11_TEXTURE_ADDRESS_CLAMP; AddressW = D3D11_TEXTURE_ADDRESS_CLAMP; MipLODBias = 0; MaxAnisotropy = 1; ComparisonFunc = D3D11_COMPARISON_NEVER; BorderColor[ 0 ] = 1.0f; BorderColor[ 1 ] = 1.0f; BorderColor[ 2 ] = 1.0f; BorderColor[ 3 ] = 1.0f; MinLOD = -3.402823466e+38F; // -FLT_MAX MaxLOD = 3.402823466e+38F; // FLT_MAX } explicit CD3D11_SAMPLER_DESC( D3D11_FILTER filter, D3D11_TEXTURE_ADDRESS_MODE addressU, D3D11_TEXTURE_ADDRESS_MODE addressV, D3D11_TEXTURE_ADDRESS_MODE addressW, FLOAT mipLODBias, UINT maxAnisotropy, D3D11_COMPARISON_FUNC comparisonFunc, __in_ecount_opt( 4 ) const FLOAT* borderColor, // RGBA FLOAT minLOD, FLOAT maxLOD ) { Filter = filter; AddressU = addressU; AddressV = addressV; AddressW = addressW; MipLODBias = mipLODBias; MaxAnisotropy = maxAnisotropy; ComparisonFunc = comparisonFunc; const float defaultColor[ 4 ] = { 1.0f, 1.0f, 1.0f, 1.0f }; if (!borderColor) borderColor = defaultColor; BorderColor[ 0 ] = borderColor[ 0 ]; BorderColor[ 1 ] = borderColor[ 1 ]; BorderColor[ 2 ] = borderColor[ 2 ]; BorderColor[ 3 ] = borderColor[ 3 ]; MinLOD = minLOD; MaxLOD = maxLOD; } ~CD3D11_SAMPLER_DESC() {} operator const D3D11_SAMPLER_DESC&() const { return *this; } }; extern "C"{ #endif extern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0021_v0_0_c_ifspec; extern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0021_v0_0_s_ifspec; #ifndef __ID3D11SamplerState_INTERFACE_DEFINED__ #define __ID3D11SamplerState_INTERFACE_DEFINED__ /* interface ID3D11SamplerState */ /* [unique][local][object][uuid] */ EXTERN_C const IID IID_ID3D11SamplerState; #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("da6fea51-564c-4487-9810-f0d0f9b4e3a5") ID3D11SamplerState : public ID3D11DeviceChild { public: virtual void STDMETHODCALLTYPE GetDesc( /* [annotation] */ __out D3D11_SAMPLER_DESC *pDesc) = 0; }; #else /* C style interface */ typedef struct ID3D11SamplerStateVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ID3D11SamplerState * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ __RPC__deref_out void **ppvObject); ULONG ( STDMETHODCALLTYPE *AddRef )( ID3D11SamplerState * This); ULONG ( STDMETHODCALLTYPE *Release )( ID3D11SamplerState * This); void ( STDMETHODCALLTYPE *GetDevice )( ID3D11SamplerState * This, /* [annotation] */ __out ID3D11Device **ppDevice); HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( ID3D11SamplerState * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __inout UINT *pDataSize, /* [annotation] */ __out_bcount_opt( *pDataSize ) void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( ID3D11SamplerState * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in UINT DataSize, /* [annotation] */ __in_bcount_opt( DataSize ) const void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( ID3D11SamplerState * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in_opt const IUnknown *pData); void ( STDMETHODCALLTYPE *GetDesc )( ID3D11SamplerState * This, /* [annotation] */ __out D3D11_SAMPLER_DESC *pDesc); END_INTERFACE } ID3D11SamplerStateVtbl; interface ID3D11SamplerState { CONST_VTBL struct ID3D11SamplerStateVtbl *lpVtbl; }; #ifdef COBJMACROS #define ID3D11SamplerState_QueryInterface(This,riid,ppvObject) \ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) #define ID3D11SamplerState_AddRef(This) \ ( (This)->lpVtbl -> AddRef(This) ) #define ID3D11SamplerState_Release(This) \ ( (This)->lpVtbl -> Release(This) ) #define ID3D11SamplerState_GetDevice(This,ppDevice) \ ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) #define ID3D11SamplerState_GetPrivateData(This,guid,pDataSize,pData) \ ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) #define ID3D11SamplerState_SetPrivateData(This,guid,DataSize,pData) \ ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) #define ID3D11SamplerState_SetPrivateDataInterface(This,guid,pData) \ ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) #define ID3D11SamplerState_GetDesc(This,pDesc) \ ( (This)->lpVtbl -> GetDesc(This,pDesc) ) #endif /* COBJMACROS */ #endif /* C style interface */ #endif /* __ID3D11SamplerState_INTERFACE_DEFINED__ */ /* interface __MIDL_itf_d3d11_0000_0022 */ /* [local] */ typedef enum D3D11_FORMAT_SUPPORT { D3D11_FORMAT_SUPPORT_BUFFER = 0x1, D3D11_FORMAT_SUPPORT_IA_VERTEX_BUFFER = 0x2, D3D11_FORMAT_SUPPORT_IA_INDEX_BUFFER = 0x4, D3D11_FORMAT_SUPPORT_SO_BUFFER = 0x8, D3D11_FORMAT_SUPPORT_TEXTURE1D = 0x10, D3D11_FORMAT_SUPPORT_TEXTURE2D = 0x20, D3D11_FORMAT_SUPPORT_TEXTURE3D = 0x40, D3D11_FORMAT_SUPPORT_TEXTURECUBE = 0x80, D3D11_FORMAT_SUPPORT_SHADER_LOAD = 0x100, D3D11_FORMAT_SUPPORT_SHADER_SAMPLE = 0x200, D3D11_FORMAT_SUPPORT_SHADER_SAMPLE_COMPARISON = 0x400, D3D11_FORMAT_SUPPORT_SHADER_SAMPLE_MONO_TEXT = 0x800, D3D11_FORMAT_SUPPORT_MIP = 0x1000, D3D11_FORMAT_SUPPORT_MIP_AUTOGEN = 0x2000, D3D11_FORMAT_SUPPORT_RENDER_TARGET = 0x4000, D3D11_FORMAT_SUPPORT_BLENDABLE = 0x8000, D3D11_FORMAT_SUPPORT_DEPTH_STENCIL = 0x10000, D3D11_FORMAT_SUPPORT_CPU_LOCKABLE = 0x20000, D3D11_FORMAT_SUPPORT_MULTISAMPLE_RESOLVE = 0x40000, D3D11_FORMAT_SUPPORT_DISPLAY = 0x80000, D3D11_FORMAT_SUPPORT_CAST_WITHIN_BIT_LAYOUT = 0x100000, D3D11_FORMAT_SUPPORT_MULTISAMPLE_RENDERTARGET = 0x200000, D3D11_FORMAT_SUPPORT_MULTISAMPLE_LOAD = 0x400000, D3D11_FORMAT_SUPPORT_SHADER_GATHER = 0x800000, D3D11_FORMAT_SUPPORT_BACK_BUFFER_CAST = 0x1000000, D3D11_FORMAT_SUPPORT_TYPED_UNORDERED_ACCESS_VIEW = 0x2000000, D3D11_FORMAT_SUPPORT_SHADER_GATHER_COMPARISON = 0x4000000 } D3D11_FORMAT_SUPPORT; typedef enum D3D11_FORMAT_SUPPORT2 { D3D11_FORMAT_SUPPORT2_UAV_ATOMIC_ADD = 0x1, D3D11_FORMAT_SUPPORT2_UAV_ATOMIC_BITWISE_OPS = 0x2, D3D11_FORMAT_SUPPORT2_UAV_ATOMIC_COMPARE_STORE_OR_COMPARE_EXCHANGE = 0x4, D3D11_FORMAT_SUPPORT2_UAV_ATOMIC_EXCHANGE = 0x8, D3D11_FORMAT_SUPPORT2_UAV_ATOMIC_SIGNED_MIN_OR_MAX = 0x10, D3D11_FORMAT_SUPPORT2_UAV_ATOMIC_UNSIGNED_MIN_OR_MAX = 0x20, D3D11_FORMAT_SUPPORT2_UAV_TYPED_LOAD = 0x40, D3D11_FORMAT_SUPPORT2_UAV_TYPED_STORE = 0x80 } D3D11_FORMAT_SUPPORT2; extern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0022_v0_0_c_ifspec; extern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0022_v0_0_s_ifspec; #ifndef __ID3D11Asynchronous_INTERFACE_DEFINED__ #define __ID3D11Asynchronous_INTERFACE_DEFINED__ /* interface ID3D11Asynchronous */ /* [unique][local][object][uuid] */ EXTERN_C const IID IID_ID3D11Asynchronous; #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("4b35d0cd-1e15-4258-9c98-1b1333f6dd3b") ID3D11Asynchronous : public ID3D11DeviceChild { public: virtual UINT STDMETHODCALLTYPE GetDataSize( void) = 0; }; #else /* C style interface */ typedef struct ID3D11AsynchronousVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ID3D11Asynchronous * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ __RPC__deref_out void **ppvObject); ULONG ( STDMETHODCALLTYPE *AddRef )( ID3D11Asynchronous * This); ULONG ( STDMETHODCALLTYPE *Release )( ID3D11Asynchronous * This); void ( STDMETHODCALLTYPE *GetDevice )( ID3D11Asynchronous * This, /* [annotation] */ __out ID3D11Device **ppDevice); HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( ID3D11Asynchronous * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __inout UINT *pDataSize, /* [annotation] */ __out_bcount_opt( *pDataSize ) void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( ID3D11Asynchronous * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in UINT DataSize, /* [annotation] */ __in_bcount_opt( DataSize ) const void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( ID3D11Asynchronous * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in_opt const IUnknown *pData); UINT ( STDMETHODCALLTYPE *GetDataSize )( ID3D11Asynchronous * This); END_INTERFACE } ID3D11AsynchronousVtbl; interface ID3D11Asynchronous { CONST_VTBL struct ID3D11AsynchronousVtbl *lpVtbl; }; #ifdef COBJMACROS #define ID3D11Asynchronous_QueryInterface(This,riid,ppvObject) \ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) #define ID3D11Asynchronous_AddRef(This) \ ( (This)->lpVtbl -> AddRef(This) ) #define ID3D11Asynchronous_Release(This) \ ( (This)->lpVtbl -> Release(This) ) #define ID3D11Asynchronous_GetDevice(This,ppDevice) \ ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) #define ID3D11Asynchronous_GetPrivateData(This,guid,pDataSize,pData) \ ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) #define ID3D11Asynchronous_SetPrivateData(This,guid,DataSize,pData) \ ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) #define ID3D11Asynchronous_SetPrivateDataInterface(This,guid,pData) \ ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) #define ID3D11Asynchronous_GetDataSize(This) \ ( (This)->lpVtbl -> GetDataSize(This) ) #endif /* COBJMACROS */ #endif /* C style interface */ #endif /* __ID3D11Asynchronous_INTERFACE_DEFINED__ */ /* interface __MIDL_itf_d3d11_0000_0023 */ /* [local] */ typedef enum D3D11_ASYNC_GETDATA_FLAG { D3D11_ASYNC_GETDATA_DONOTFLUSH = 0x1 } D3D11_ASYNC_GETDATA_FLAG; typedef enum D3D11_QUERY { D3D11_QUERY_EVENT = 0, D3D11_QUERY_OCCLUSION = ( D3D11_QUERY_EVENT + 1 ) , D3D11_QUERY_TIMESTAMP = ( D3D11_QUERY_OCCLUSION + 1 ) , D3D11_QUERY_TIMESTAMP_DISJOINT = ( D3D11_QUERY_TIMESTAMP + 1 ) , D3D11_QUERY_PIPELINE_STATISTICS = ( D3D11_QUERY_TIMESTAMP_DISJOINT + 1 ) , D3D11_QUERY_OCCLUSION_PREDICATE = ( D3D11_QUERY_PIPELINE_STATISTICS + 1 ) , D3D11_QUERY_SO_STATISTICS = ( D3D11_QUERY_OCCLUSION_PREDICATE + 1 ) , D3D11_QUERY_SO_OVERFLOW_PREDICATE = ( D3D11_QUERY_SO_STATISTICS + 1 ) , D3D11_QUERY_SO_STATISTICS_STREAM0 = ( D3D11_QUERY_SO_OVERFLOW_PREDICATE + 1 ) , D3D11_QUERY_SO_OVERFLOW_PREDICATE_STREAM0 = ( D3D11_QUERY_SO_STATISTICS_STREAM0 + 1 ) , D3D11_QUERY_SO_STATISTICS_STREAM1 = ( D3D11_QUERY_SO_OVERFLOW_PREDICATE_STREAM0 + 1 ) , D3D11_QUERY_SO_OVERFLOW_PREDICATE_STREAM1 = ( D3D11_QUERY_SO_STATISTICS_STREAM1 + 1 ) , D3D11_QUERY_SO_STATISTICS_STREAM2 = ( D3D11_QUERY_SO_OVERFLOW_PREDICATE_STREAM1 + 1 ) , D3D11_QUERY_SO_OVERFLOW_PREDICATE_STREAM2 = ( D3D11_QUERY_SO_STATISTICS_STREAM2 + 1 ) , D3D11_QUERY_SO_STATISTICS_STREAM3 = ( D3D11_QUERY_SO_OVERFLOW_PREDICATE_STREAM2 + 1 ) , D3D11_QUERY_SO_OVERFLOW_PREDICATE_STREAM3 = ( D3D11_QUERY_SO_STATISTICS_STREAM3 + 1 ) } D3D11_QUERY; typedef enum D3D11_QUERY_MISC_FLAG { D3D11_QUERY_MISC_PREDICATEHINT = 0x1 } D3D11_QUERY_MISC_FLAG; typedef struct D3D11_QUERY_DESC { D3D11_QUERY Query; UINT MiscFlags; } D3D11_QUERY_DESC; #if !defined( D3D11_NO_HELPERS ) && defined( __cplusplus ) } struct CD3D11_QUERY_DESC : public D3D11_QUERY_DESC { CD3D11_QUERY_DESC() {} explicit CD3D11_QUERY_DESC( const D3D11_QUERY_DESC& o ) : D3D11_QUERY_DESC( o ) {} explicit CD3D11_QUERY_DESC( D3D11_QUERY query, UINT miscFlags = 0 ) { Query = query; MiscFlags = miscFlags; } ~CD3D11_QUERY_DESC() {} operator const D3D11_QUERY_DESC&() const { return *this; } }; extern "C"{ #endif extern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0023_v0_0_c_ifspec; extern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0023_v0_0_s_ifspec; #ifndef __ID3D11Query_INTERFACE_DEFINED__ #define __ID3D11Query_INTERFACE_DEFINED__ /* interface ID3D11Query */ /* [unique][local][object][uuid] */ EXTERN_C const IID IID_ID3D11Query; #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("d6c00747-87b7-425e-b84d-44d108560afd") ID3D11Query : public ID3D11Asynchronous { public: virtual void STDMETHODCALLTYPE GetDesc( /* [annotation] */ __out D3D11_QUERY_DESC *pDesc) = 0; }; #else /* C style interface */ typedef struct ID3D11QueryVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ID3D11Query * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ __RPC__deref_out void **ppvObject); ULONG ( STDMETHODCALLTYPE *AddRef )( ID3D11Query * This); ULONG ( STDMETHODCALLTYPE *Release )( ID3D11Query * This); void ( STDMETHODCALLTYPE *GetDevice )( ID3D11Query * This, /* [annotation] */ __out ID3D11Device **ppDevice); HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( ID3D11Query * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __inout UINT *pDataSize, /* [annotation] */ __out_bcount_opt( *pDataSize ) void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( ID3D11Query * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in UINT DataSize, /* [annotation] */ __in_bcount_opt( DataSize ) const void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( ID3D11Query * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in_opt const IUnknown *pData); UINT ( STDMETHODCALLTYPE *GetDataSize )( ID3D11Query * This); void ( STDMETHODCALLTYPE *GetDesc )( ID3D11Query * This, /* [annotation] */ __out D3D11_QUERY_DESC *pDesc); END_INTERFACE } ID3D11QueryVtbl; interface ID3D11Query { CONST_VTBL struct ID3D11QueryVtbl *lpVtbl; }; #ifdef COBJMACROS #define ID3D11Query_QueryInterface(This,riid,ppvObject) \ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) #define ID3D11Query_AddRef(This) \ ( (This)->lpVtbl -> AddRef(This) ) #define ID3D11Query_Release(This) \ ( (This)->lpVtbl -> Release(This) ) #define ID3D11Query_GetDevice(This,ppDevice) \ ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) #define ID3D11Query_GetPrivateData(This,guid,pDataSize,pData) \ ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) #define ID3D11Query_SetPrivateData(This,guid,DataSize,pData) \ ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) #define ID3D11Query_SetPrivateDataInterface(This,guid,pData) \ ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) #define ID3D11Query_GetDataSize(This) \ ( (This)->lpVtbl -> GetDataSize(This) ) #define ID3D11Query_GetDesc(This,pDesc) \ ( (This)->lpVtbl -> GetDesc(This,pDesc) ) #endif /* COBJMACROS */ #endif /* C style interface */ #endif /* __ID3D11Query_INTERFACE_DEFINED__ */ #ifndef __ID3D11Predicate_INTERFACE_DEFINED__ #define __ID3D11Predicate_INTERFACE_DEFINED__ /* interface ID3D11Predicate */ /* [unique][local][object][uuid] */ EXTERN_C const IID IID_ID3D11Predicate; #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("9eb576dd-9f77-4d86-81aa-8bab5fe490e2") ID3D11Predicate : public ID3D11Query { public: }; #else /* C style interface */ typedef struct ID3D11PredicateVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ID3D11Predicate * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ __RPC__deref_out void **ppvObject); ULONG ( STDMETHODCALLTYPE *AddRef )( ID3D11Predicate * This); ULONG ( STDMETHODCALLTYPE *Release )( ID3D11Predicate * This); void ( STDMETHODCALLTYPE *GetDevice )( ID3D11Predicate * This, /* [annotation] */ __out ID3D11Device **ppDevice); HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( ID3D11Predicate * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __inout UINT *pDataSize, /* [annotation] */ __out_bcount_opt( *pDataSize ) void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( ID3D11Predicate * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in UINT DataSize, /* [annotation] */ __in_bcount_opt( DataSize ) const void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( ID3D11Predicate * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in_opt const IUnknown *pData); UINT ( STDMETHODCALLTYPE *GetDataSize )( ID3D11Predicate * This); void ( STDMETHODCALLTYPE *GetDesc )( ID3D11Predicate * This, /* [annotation] */ __out D3D11_QUERY_DESC *pDesc); END_INTERFACE } ID3D11PredicateVtbl; interface ID3D11Predicate { CONST_VTBL struct ID3D11PredicateVtbl *lpVtbl; }; #ifdef COBJMACROS #define ID3D11Predicate_QueryInterface(This,riid,ppvObject) \ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) #define ID3D11Predicate_AddRef(This) \ ( (This)->lpVtbl -> AddRef(This) ) #define ID3D11Predicate_Release(This) \ ( (This)->lpVtbl -> Release(This) ) #define ID3D11Predicate_GetDevice(This,ppDevice) \ ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) #define ID3D11Predicate_GetPrivateData(This,guid,pDataSize,pData) \ ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) #define ID3D11Predicate_SetPrivateData(This,guid,DataSize,pData) \ ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) #define ID3D11Predicate_SetPrivateDataInterface(This,guid,pData) \ ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) #define ID3D11Predicate_GetDataSize(This) \ ( (This)->lpVtbl -> GetDataSize(This) ) #define ID3D11Predicate_GetDesc(This,pDesc) \ ( (This)->lpVtbl -> GetDesc(This,pDesc) ) #endif /* COBJMACROS */ #endif /* C style interface */ #endif /* __ID3D11Predicate_INTERFACE_DEFINED__ */ /* interface __MIDL_itf_d3d11_0000_0025 */ /* [local] */ typedef struct D3D11_QUERY_DATA_TIMESTAMP_DISJOINT { UINT64 Frequency; BOOL Disjoint; } D3D11_QUERY_DATA_TIMESTAMP_DISJOINT; typedef struct D3D11_QUERY_DATA_PIPELINE_STATISTICS { UINT64 IAVertices; UINT64 IAPrimitives; UINT64 VSInvocations; UINT64 GSInvocations; UINT64 GSPrimitives; UINT64 CInvocations; UINT64 CPrimitives; UINT64 PSInvocations; UINT64 HSInvocations; UINT64 DSInvocations; UINT64 CSInvocations; } D3D11_QUERY_DATA_PIPELINE_STATISTICS; typedef struct D3D11_QUERY_DATA_SO_STATISTICS { UINT64 NumPrimitivesWritten; UINT64 PrimitivesStorageNeeded; } D3D11_QUERY_DATA_SO_STATISTICS; typedef enum D3D11_COUNTER { D3D11_COUNTER_DEVICE_DEPENDENT_0 = 0x40000000 } D3D11_COUNTER; typedef enum D3D11_COUNTER_TYPE { D3D11_COUNTER_TYPE_FLOAT32 = 0, D3D11_COUNTER_TYPE_UINT16 = ( D3D11_COUNTER_TYPE_FLOAT32 + 1 ) , D3D11_COUNTER_TYPE_UINT32 = ( D3D11_COUNTER_TYPE_UINT16 + 1 ) , D3D11_COUNTER_TYPE_UINT64 = ( D3D11_COUNTER_TYPE_UINT32 + 1 ) } D3D11_COUNTER_TYPE; typedef struct D3D11_COUNTER_DESC { D3D11_COUNTER Counter; UINT MiscFlags; } D3D11_COUNTER_DESC; #if !defined( D3D11_NO_HELPERS ) && defined( __cplusplus ) } struct CD3D11_COUNTER_DESC : public D3D11_COUNTER_DESC { CD3D11_COUNTER_DESC() {} explicit CD3D11_COUNTER_DESC( const D3D11_COUNTER_DESC& o ) : D3D11_COUNTER_DESC( o ) {} explicit CD3D11_COUNTER_DESC( D3D11_COUNTER counter, UINT miscFlags = 0 ) { Counter = counter; MiscFlags = miscFlags; } ~CD3D11_COUNTER_DESC() {} operator const D3D11_COUNTER_DESC&() const { return *this; } }; extern "C"{ #endif typedef struct D3D11_COUNTER_INFO { D3D11_COUNTER LastDeviceDependentCounter; UINT NumSimultaneousCounters; UINT8 NumDetectableParallelUnits; } D3D11_COUNTER_INFO; extern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0025_v0_0_c_ifspec; extern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0025_v0_0_s_ifspec; #ifndef __ID3D11Counter_INTERFACE_DEFINED__ #define __ID3D11Counter_INTERFACE_DEFINED__ /* interface ID3D11Counter */ /* [unique][local][object][uuid] */ EXTERN_C const IID IID_ID3D11Counter; #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("6e8c49fb-a371-4770-b440-29086022b741") ID3D11Counter : public ID3D11Asynchronous { public: virtual void STDMETHODCALLTYPE GetDesc( /* [annotation] */ __out D3D11_COUNTER_DESC *pDesc) = 0; }; #else /* C style interface */ typedef struct ID3D11CounterVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ID3D11Counter * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ __RPC__deref_out void **ppvObject); ULONG ( STDMETHODCALLTYPE *AddRef )( ID3D11Counter * This); ULONG ( STDMETHODCALLTYPE *Release )( ID3D11Counter * This); void ( STDMETHODCALLTYPE *GetDevice )( ID3D11Counter * This, /* [annotation] */ __out ID3D11Device **ppDevice); HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( ID3D11Counter * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __inout UINT *pDataSize, /* [annotation] */ __out_bcount_opt( *pDataSize ) void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( ID3D11Counter * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in UINT DataSize, /* [annotation] */ __in_bcount_opt( DataSize ) const void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( ID3D11Counter * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in_opt const IUnknown *pData); UINT ( STDMETHODCALLTYPE *GetDataSize )( ID3D11Counter * This); void ( STDMETHODCALLTYPE *GetDesc )( ID3D11Counter * This, /* [annotation] */ __out D3D11_COUNTER_DESC *pDesc); END_INTERFACE } ID3D11CounterVtbl; interface ID3D11Counter { CONST_VTBL struct ID3D11CounterVtbl *lpVtbl; }; #ifdef COBJMACROS #define ID3D11Counter_QueryInterface(This,riid,ppvObject) \ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) #define ID3D11Counter_AddRef(This) \ ( (This)->lpVtbl -> AddRef(This) ) #define ID3D11Counter_Release(This) \ ( (This)->lpVtbl -> Release(This) ) #define ID3D11Counter_GetDevice(This,ppDevice) \ ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) #define ID3D11Counter_GetPrivateData(This,guid,pDataSize,pData) \ ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) #define ID3D11Counter_SetPrivateData(This,guid,DataSize,pData) \ ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) #define ID3D11Counter_SetPrivateDataInterface(This,guid,pData) \ ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) #define ID3D11Counter_GetDataSize(This) \ ( (This)->lpVtbl -> GetDataSize(This) ) #define ID3D11Counter_GetDesc(This,pDesc) \ ( (This)->lpVtbl -> GetDesc(This,pDesc) ) #endif /* COBJMACROS */ #endif /* C style interface */ #endif /* __ID3D11Counter_INTERFACE_DEFINED__ */ /* interface __MIDL_itf_d3d11_0000_0026 */ /* [local] */ typedef enum D3D11_STANDARD_MULTISAMPLE_QUALITY_LEVELS { D3D11_STANDARD_MULTISAMPLE_PATTERN = 0xffffffff, D3D11_CENTER_MULTISAMPLE_PATTERN = 0xfffffffe } D3D11_STANDARD_MULTISAMPLE_QUALITY_LEVELS; typedef enum D3D11_DEVICE_CONTEXT_TYPE { D3D11_DEVICE_CONTEXT_IMMEDIATE = 0, D3D11_DEVICE_CONTEXT_DEFERRED = ( D3D11_DEVICE_CONTEXT_IMMEDIATE + 1 ) } D3D11_DEVICE_CONTEXT_TYPE; typedef struct D3D11_CLASS_INSTANCE_DESC { UINT InstanceId; UINT InstanceIndex; UINT TypeId; UINT ConstantBuffer; UINT BaseConstantBufferOffset; UINT BaseTexture; UINT BaseSampler; BOOL Created; } D3D11_CLASS_INSTANCE_DESC; extern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0026_v0_0_c_ifspec; extern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0026_v0_0_s_ifspec; #ifndef __ID3D11ClassInstance_INTERFACE_DEFINED__ #define __ID3D11ClassInstance_INTERFACE_DEFINED__ /* interface ID3D11ClassInstance */ /* [unique][local][object][uuid] */ EXTERN_C const IID IID_ID3D11ClassInstance; #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("a6cd7faa-b0b7-4a2f-9436-8662a65797cb") ID3D11ClassInstance : public ID3D11DeviceChild { public: virtual void STDMETHODCALLTYPE GetClassLinkage( /* [annotation] */ __out ID3D11ClassLinkage **ppLinkage) = 0; virtual void STDMETHODCALLTYPE GetDesc( /* [annotation] */ __out D3D11_CLASS_INSTANCE_DESC *pDesc) = 0; virtual void STDMETHODCALLTYPE GetInstanceName( /* [annotation] */ __out_ecount_opt(*pBufferLength) LPSTR pInstanceName, /* [annotation] */ __inout SIZE_T *pBufferLength) = 0; virtual void STDMETHODCALLTYPE GetTypeName( /* [annotation] */ __out_ecount_opt(*pBufferLength) LPSTR pTypeName, /* [annotation] */ __inout SIZE_T *pBufferLength) = 0; }; #else /* C style interface */ typedef struct ID3D11ClassInstanceVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ID3D11ClassInstance * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ __RPC__deref_out void **ppvObject); ULONG ( STDMETHODCALLTYPE *AddRef )( ID3D11ClassInstance * This); ULONG ( STDMETHODCALLTYPE *Release )( ID3D11ClassInstance * This); void ( STDMETHODCALLTYPE *GetDevice )( ID3D11ClassInstance * This, /* [annotation] */ __out ID3D11Device **ppDevice); HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( ID3D11ClassInstance * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __inout UINT *pDataSize, /* [annotation] */ __out_bcount_opt( *pDataSize ) void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( ID3D11ClassInstance * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in UINT DataSize, /* [annotation] */ __in_bcount_opt( DataSize ) const void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( ID3D11ClassInstance * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in_opt const IUnknown *pData); void ( STDMETHODCALLTYPE *GetClassLinkage )( ID3D11ClassInstance * This, /* [annotation] */ __out ID3D11ClassLinkage **ppLinkage); void ( STDMETHODCALLTYPE *GetDesc )( ID3D11ClassInstance * This, /* [annotation] */ __out D3D11_CLASS_INSTANCE_DESC *pDesc); void ( STDMETHODCALLTYPE *GetInstanceName )( ID3D11ClassInstance * This, /* [annotation] */ __out_ecount_opt(*pBufferLength) LPSTR pInstanceName, /* [annotation] */ __inout SIZE_T *pBufferLength); void ( STDMETHODCALLTYPE *GetTypeName )( ID3D11ClassInstance * This, /* [annotation] */ __out_ecount_opt(*pBufferLength) LPSTR pTypeName, /* [annotation] */ __inout SIZE_T *pBufferLength); END_INTERFACE } ID3D11ClassInstanceVtbl; interface ID3D11ClassInstance { CONST_VTBL struct ID3D11ClassInstanceVtbl *lpVtbl; }; #ifdef COBJMACROS #define ID3D11ClassInstance_QueryInterface(This,riid,ppvObject) \ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) #define ID3D11ClassInstance_AddRef(This) \ ( (This)->lpVtbl -> AddRef(This) ) #define ID3D11ClassInstance_Release(This) \ ( (This)->lpVtbl -> Release(This) ) #define ID3D11ClassInstance_GetDevice(This,ppDevice) \ ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) #define ID3D11ClassInstance_GetPrivateData(This,guid,pDataSize,pData) \ ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) #define ID3D11ClassInstance_SetPrivateData(This,guid,DataSize,pData) \ ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) #define ID3D11ClassInstance_SetPrivateDataInterface(This,guid,pData) \ ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) #define ID3D11ClassInstance_GetClassLinkage(This,ppLinkage) \ ( (This)->lpVtbl -> GetClassLinkage(This,ppLinkage) ) #define ID3D11ClassInstance_GetDesc(This,pDesc) \ ( (This)->lpVtbl -> GetDesc(This,pDesc) ) #define ID3D11ClassInstance_GetInstanceName(This,pInstanceName,pBufferLength) \ ( (This)->lpVtbl -> GetInstanceName(This,pInstanceName,pBufferLength) ) #define ID3D11ClassInstance_GetTypeName(This,pTypeName,pBufferLength) \ ( (This)->lpVtbl -> GetTypeName(This,pTypeName,pBufferLength) ) #endif /* COBJMACROS */ #endif /* C style interface */ #endif /* __ID3D11ClassInstance_INTERFACE_DEFINED__ */ #ifndef __ID3D11ClassLinkage_INTERFACE_DEFINED__ #define __ID3D11ClassLinkage_INTERFACE_DEFINED__ /* interface ID3D11ClassLinkage */ /* [unique][local][object][uuid] */ EXTERN_C const IID IID_ID3D11ClassLinkage; #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("ddf57cba-9543-46e4-a12b-f207a0fe7fed") ID3D11ClassLinkage : public ID3D11DeviceChild { public: virtual HRESULT STDMETHODCALLTYPE GetClassInstance( /* [annotation] */ __in LPCSTR pClassInstanceName, /* [annotation] */ __in UINT InstanceIndex, /* [annotation] */ __out ID3D11ClassInstance **ppInstance) = 0; virtual HRESULT STDMETHODCALLTYPE CreateClassInstance( /* [annotation] */ __in LPCSTR pClassTypeName, /* [annotation] */ __in UINT ConstantBufferOffset, /* [annotation] */ __in UINT ConstantVectorOffset, /* [annotation] */ __in UINT TextureOffset, /* [annotation] */ __in UINT SamplerOffset, /* [annotation] */ __out ID3D11ClassInstance **ppInstance) = 0; }; #else /* C style interface */ typedef struct ID3D11ClassLinkageVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ID3D11ClassLinkage * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ __RPC__deref_out void **ppvObject); ULONG ( STDMETHODCALLTYPE *AddRef )( ID3D11ClassLinkage * This); ULONG ( STDMETHODCALLTYPE *Release )( ID3D11ClassLinkage * This); void ( STDMETHODCALLTYPE *GetDevice )( ID3D11ClassLinkage * This, /* [annotation] */ __out ID3D11Device **ppDevice); HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( ID3D11ClassLinkage * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __inout UINT *pDataSize, /* [annotation] */ __out_bcount_opt( *pDataSize ) void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( ID3D11ClassLinkage * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in UINT DataSize, /* [annotation] */ __in_bcount_opt( DataSize ) const void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( ID3D11ClassLinkage * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in_opt const IUnknown *pData); HRESULT ( STDMETHODCALLTYPE *GetClassInstance )( ID3D11ClassLinkage * This, /* [annotation] */ __in LPCSTR pClassInstanceName, /* [annotation] */ __in UINT InstanceIndex, /* [annotation] */ __out ID3D11ClassInstance **ppInstance); HRESULT ( STDMETHODCALLTYPE *CreateClassInstance )( ID3D11ClassLinkage * This, /* [annotation] */ __in LPCSTR pClassTypeName, /* [annotation] */ __in UINT ConstantBufferOffset, /* [annotation] */ __in UINT ConstantVectorOffset, /* [annotation] */ __in UINT TextureOffset, /* [annotation] */ __in UINT SamplerOffset, /* [annotation] */ __out ID3D11ClassInstance **ppInstance); END_INTERFACE } ID3D11ClassLinkageVtbl; interface ID3D11ClassLinkage { CONST_VTBL struct ID3D11ClassLinkageVtbl *lpVtbl; }; #ifdef COBJMACROS #define ID3D11ClassLinkage_QueryInterface(This,riid,ppvObject) \ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) #define ID3D11ClassLinkage_AddRef(This) \ ( (This)->lpVtbl -> AddRef(This) ) #define ID3D11ClassLinkage_Release(This) \ ( (This)->lpVtbl -> Release(This) ) #define ID3D11ClassLinkage_GetDevice(This,ppDevice) \ ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) #define ID3D11ClassLinkage_GetPrivateData(This,guid,pDataSize,pData) \ ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) #define ID3D11ClassLinkage_SetPrivateData(This,guid,DataSize,pData) \ ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) #define ID3D11ClassLinkage_SetPrivateDataInterface(This,guid,pData) \ ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) #define ID3D11ClassLinkage_GetClassInstance(This,pClassInstanceName,InstanceIndex,ppInstance) \ ( (This)->lpVtbl -> GetClassInstance(This,pClassInstanceName,InstanceIndex,ppInstance) ) #define ID3D11ClassLinkage_CreateClassInstance(This,pClassTypeName,ConstantBufferOffset,ConstantVectorOffset,TextureOffset,SamplerOffset,ppInstance) \ ( (This)->lpVtbl -> CreateClassInstance(This,pClassTypeName,ConstantBufferOffset,ConstantVectorOffset,TextureOffset,SamplerOffset,ppInstance) ) #endif /* COBJMACROS */ #endif /* C style interface */ #endif /* __ID3D11ClassLinkage_INTERFACE_DEFINED__ */ #ifndef __ID3D11CommandList_INTERFACE_DEFINED__ #define __ID3D11CommandList_INTERFACE_DEFINED__ /* interface ID3D11CommandList */ /* [unique][local][object][uuid] */ EXTERN_C const IID IID_ID3D11CommandList; #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("a24bc4d1-769e-43f7-8013-98ff566c18e2") ID3D11CommandList : public ID3D11DeviceChild { public: virtual UINT STDMETHODCALLTYPE GetContextFlags( void) = 0; }; #else /* C style interface */ typedef struct ID3D11CommandListVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ID3D11CommandList * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ __RPC__deref_out void **ppvObject); ULONG ( STDMETHODCALLTYPE *AddRef )( ID3D11CommandList * This); ULONG ( STDMETHODCALLTYPE *Release )( ID3D11CommandList * This); void ( STDMETHODCALLTYPE *GetDevice )( ID3D11CommandList * This, /* [annotation] */ __out ID3D11Device **ppDevice); HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( ID3D11CommandList * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __inout UINT *pDataSize, /* [annotation] */ __out_bcount_opt( *pDataSize ) void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( ID3D11CommandList * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in UINT DataSize, /* [annotation] */ __in_bcount_opt( DataSize ) const void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( ID3D11CommandList * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in_opt const IUnknown *pData); UINT ( STDMETHODCALLTYPE *GetContextFlags )( ID3D11CommandList * This); END_INTERFACE } ID3D11CommandListVtbl; interface ID3D11CommandList { CONST_VTBL struct ID3D11CommandListVtbl *lpVtbl; }; #ifdef COBJMACROS #define ID3D11CommandList_QueryInterface(This,riid,ppvObject) \ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) #define ID3D11CommandList_AddRef(This) \ ( (This)->lpVtbl -> AddRef(This) ) #define ID3D11CommandList_Release(This) \ ( (This)->lpVtbl -> Release(This) ) #define ID3D11CommandList_GetDevice(This,ppDevice) \ ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) #define ID3D11CommandList_GetPrivateData(This,guid,pDataSize,pData) \ ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) #define ID3D11CommandList_SetPrivateData(This,guid,DataSize,pData) \ ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) #define ID3D11CommandList_SetPrivateDataInterface(This,guid,pData) \ ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) #define ID3D11CommandList_GetContextFlags(This) \ ( (This)->lpVtbl -> GetContextFlags(This) ) #endif /* COBJMACROS */ #endif /* C style interface */ #endif /* __ID3D11CommandList_INTERFACE_DEFINED__ */ /* interface __MIDL_itf_d3d11_0000_0029 */ /* [local] */ typedef enum D3D11_FEATURE { D3D11_FEATURE_THREADING = 0, D3D11_FEATURE_DOUBLES = ( D3D11_FEATURE_THREADING + 1 ) , D3D11_FEATURE_FORMAT_SUPPORT = ( D3D11_FEATURE_DOUBLES + 1 ) , D3D11_FEATURE_FORMAT_SUPPORT2 = ( D3D11_FEATURE_FORMAT_SUPPORT + 1 ) , D3D11_FEATURE_D3D10_X_HARDWARE_OPTIONS = ( D3D11_FEATURE_FORMAT_SUPPORT2 + 1 ) } D3D11_FEATURE; typedef struct D3D11_FEATURE_DATA_THREADING { BOOL DriverConcurrentCreates; BOOL DriverCommandLists; } D3D11_FEATURE_DATA_THREADING; typedef struct D3D11_FEATURE_DATA_DOUBLES { BOOL DoublePrecisionFloatShaderOps; } D3D11_FEATURE_DATA_DOUBLES; typedef struct D3D11_FEATURE_DATA_FORMAT_SUPPORT { DXGI_FORMAT InFormat; UINT OutFormatSupport; } D3D11_FEATURE_DATA_FORMAT_SUPPORT; typedef struct D3D11_FEATURE_DATA_FORMAT_SUPPORT2 { DXGI_FORMAT InFormat; UINT OutFormatSupport2; } D3D11_FEATURE_DATA_FORMAT_SUPPORT2; typedef struct D3D11_FEATURE_DATA_D3D10_X_HARDWARE_OPTIONS { BOOL ComputeShaders_Plus_RawAndStructuredBuffers_Via_Shader_4_x; } D3D11_FEATURE_DATA_D3D10_X_HARDWARE_OPTIONS; extern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0029_v0_0_c_ifspec; extern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0029_v0_0_s_ifspec; #ifndef __ID3D11DeviceContext_INTERFACE_DEFINED__ #define __ID3D11DeviceContext_INTERFACE_DEFINED__ /* interface ID3D11DeviceContext */ /* [unique][local][object][uuid] */ EXTERN_C const IID IID_ID3D11DeviceContext; #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("c0bfa96c-e089-44fb-8eaf-26f8796190da") ID3D11DeviceContext : public ID3D11DeviceChild { public: virtual void STDMETHODCALLTYPE VSSetConstantBuffers( /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot ) UINT NumBuffers, /* [annotation] */ __in_ecount(NumBuffers) ID3D11Buffer *const *ppConstantBuffers) = 0; virtual void STDMETHODCALLTYPE PSSetShaderResources( /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot ) UINT NumViews, /* [annotation] */ __in_ecount(NumViews) ID3D11ShaderResourceView *const *ppShaderResourceViews) = 0; virtual void STDMETHODCALLTYPE PSSetShader( /* [annotation] */ __in_opt ID3D11PixelShader *pPixelShader, /* [annotation] */ __in_ecount_opt(NumClassInstances) ID3D11ClassInstance *const *ppClassInstances, UINT NumClassInstances) = 0; virtual void STDMETHODCALLTYPE PSSetSamplers( /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot ) UINT NumSamplers, /* [annotation] */ __in_ecount(NumSamplers) ID3D11SamplerState *const *ppSamplers) = 0; virtual void STDMETHODCALLTYPE VSSetShader( /* [annotation] */ __in_opt ID3D11VertexShader *pVertexShader, /* [annotation] */ __in_ecount_opt(NumClassInstances) ID3D11ClassInstance *const *ppClassInstances, UINT NumClassInstances) = 0; virtual void STDMETHODCALLTYPE DrawIndexed( /* [annotation] */ __in UINT IndexCount, /* [annotation] */ __in UINT StartIndexLocation, /* [annotation] */ __in INT BaseVertexLocation) = 0; virtual void STDMETHODCALLTYPE Draw( /* [annotation] */ __in UINT VertexCount, /* [annotation] */ __in UINT StartVertexLocation) = 0; virtual HRESULT STDMETHODCALLTYPE Map( /* [annotation] */ __in ID3D11Resource *pResource, /* [annotation] */ __in UINT Subresource, /* [annotation] */ __in D3D11_MAP MapType, /* [annotation] */ __in UINT MapFlags, /* [annotation] */ __out D3D11_MAPPED_SUBRESOURCE *pMappedResource) = 0; virtual void STDMETHODCALLTYPE Unmap( /* [annotation] */ __in ID3D11Resource *pResource, /* [annotation] */ __in UINT Subresource) = 0; virtual void STDMETHODCALLTYPE PSSetConstantBuffers( /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot ) UINT NumBuffers, /* [annotation] */ __in_ecount(NumBuffers) ID3D11Buffer *const *ppConstantBuffers) = 0; virtual void STDMETHODCALLTYPE IASetInputLayout( /* [annotation] */ __in_opt ID3D11InputLayout *pInputLayout) = 0; virtual void STDMETHODCALLTYPE IASetVertexBuffers( /* [annotation] */ __in_range( 0, D3D11_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT - StartSlot ) UINT NumBuffers, /* [annotation] */ __in_ecount(NumBuffers) ID3D11Buffer *const *ppVertexBuffers, /* [annotation] */ __in_ecount(NumBuffers) const UINT *pStrides, /* [annotation] */ __in_ecount(NumBuffers) const UINT *pOffsets) = 0; virtual void STDMETHODCALLTYPE IASetIndexBuffer( /* [annotation] */ __in_opt ID3D11Buffer *pIndexBuffer, /* [annotation] */ __in DXGI_FORMAT Format, /* [annotation] */ __in UINT Offset) = 0; virtual void STDMETHODCALLTYPE DrawIndexedInstanced( /* [annotation] */ __in UINT IndexCountPerInstance, /* [annotation] */ __in UINT InstanceCount, /* [annotation] */ __in UINT StartIndexLocation, /* [annotation] */ __in INT BaseVertexLocation, /* [annotation] */ __in UINT StartInstanceLocation) = 0; virtual void STDMETHODCALLTYPE DrawInstanced( /* [annotation] */ __in UINT VertexCountPerInstance, /* [annotation] */ __in UINT InstanceCount, /* [annotation] */ __in UINT StartVertexLocation, /* [annotation] */ __in UINT StartInstanceLocation) = 0; virtual void STDMETHODCALLTYPE GSSetConstantBuffers( /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot ) UINT NumBuffers, /* [annotation] */ __in_ecount(NumBuffers) ID3D11Buffer *const *ppConstantBuffers) = 0; virtual void STDMETHODCALLTYPE GSSetShader( /* [annotation] */ __in_opt ID3D11GeometryShader *pShader, /* [annotation] */ __in_ecount_opt(NumClassInstances) ID3D11ClassInstance *const *ppClassInstances, UINT NumClassInstances) = 0; virtual void STDMETHODCALLTYPE IASetPrimitiveTopology( /* [annotation] */ __in D3D11_PRIMITIVE_TOPOLOGY Topology) = 0; virtual void STDMETHODCALLTYPE VSSetShaderResources( /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot ) UINT NumViews, /* [annotation] */ __in_ecount(NumViews) ID3D11ShaderResourceView *const *ppShaderResourceViews) = 0; virtual void STDMETHODCALLTYPE VSSetSamplers( /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot ) UINT NumSamplers, /* [annotation] */ __in_ecount(NumSamplers) ID3D11SamplerState *const *ppSamplers) = 0; virtual void STDMETHODCALLTYPE Begin( /* [annotation] */ __in ID3D11Asynchronous *pAsync) = 0; virtual void STDMETHODCALLTYPE End( /* [annotation] */ __in ID3D11Asynchronous *pAsync) = 0; virtual HRESULT STDMETHODCALLTYPE GetData( /* [annotation] */ __in ID3D11Asynchronous *pAsync, /* [annotation] */ __out_bcount_opt( DataSize ) void *pData, /* [annotation] */ __in UINT DataSize, /* [annotation] */ __in UINT GetDataFlags) = 0; virtual void STDMETHODCALLTYPE SetPredication( /* [annotation] */ __in_opt ID3D11Predicate *pPredicate, /* [annotation] */ __in BOOL PredicateValue) = 0; virtual void STDMETHODCALLTYPE GSSetShaderResources( /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot ) UINT NumViews, /* [annotation] */ __in_ecount(NumViews) ID3D11ShaderResourceView *const *ppShaderResourceViews) = 0; virtual void STDMETHODCALLTYPE GSSetSamplers( /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot ) UINT NumSamplers, /* [annotation] */ __in_ecount(NumSamplers) ID3D11SamplerState *const *ppSamplers) = 0; virtual void STDMETHODCALLTYPE OMSetRenderTargets( /* [annotation] */ __in_range( 0, D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT ) UINT NumViews, /* [annotation] */ __in_ecount_opt(NumViews) ID3D11RenderTargetView *const *ppRenderTargetViews, /* [annotation] */ __in_opt ID3D11DepthStencilView *pDepthStencilView) = 0; virtual void STDMETHODCALLTYPE OMSetRenderTargetsAndUnorderedAccessViews( /* [annotation] */ __in UINT NumRTVs, /* [annotation] */ __in_ecount_opt(NumRTVs) ID3D11RenderTargetView *const *ppRenderTargetViews, /* [annotation] */ __in_opt ID3D11DepthStencilView *pDepthStencilView, /* [annotation] */ __in_range( 0, D3D11_PS_CS_UAV_REGISTER_COUNT - 1 ) UINT UAVStartSlot, /* [annotation] */ __in UINT NumUAVs, /* [annotation] */ __in_ecount_opt(NumUAVs) ID3D11UnorderedAccessView *const *ppUnorderedAccessViews, /* [annotation] */ __in_ecount_opt(NumUAVs) const UINT *pUAVInitialCounts) = 0; virtual void STDMETHODCALLTYPE OMSetBlendState( /* [annotation] */ __in_opt ID3D11BlendState *pBlendState, /* [annotation] */ __in_opt const FLOAT BlendFactor[ 4 ], /* [annotation] */ __in UINT SampleMask) = 0; virtual void STDMETHODCALLTYPE OMSetDepthStencilState( /* [annotation] */ __in_opt ID3D11DepthStencilState *pDepthStencilState, /* [annotation] */ __in UINT StencilRef) = 0; virtual void STDMETHODCALLTYPE SOSetTargets( /* [annotation] */ __in_range( 0, D3D11_SO_BUFFER_SLOT_COUNT) UINT NumBuffers, /* [annotation] */ __in_ecount_opt(NumBuffers) ID3D11Buffer *const *ppSOTargets, /* [annotation] */ __in_ecount_opt(NumBuffers) const UINT *pOffsets) = 0; virtual void STDMETHODCALLTYPE DrawAuto( void) = 0; virtual void STDMETHODCALLTYPE DrawIndexedInstancedIndirect( /* [annotation] */ __in ID3D11Buffer *pBufferForArgs, /* [annotation] */ __in UINT AlignedByteOffsetForArgs) = 0; virtual void STDMETHODCALLTYPE DrawInstancedIndirect( /* [annotation] */ __in ID3D11Buffer *pBufferForArgs, /* [annotation] */ __in UINT AlignedByteOffsetForArgs) = 0; virtual void STDMETHODCALLTYPE Dispatch( /* [annotation] */ __in UINT ThreadGroupCountX, /* [annotation] */ __in UINT ThreadGroupCountY, /* [annotation] */ __in UINT ThreadGroupCountZ) = 0; virtual void STDMETHODCALLTYPE DispatchIndirect( /* [annotation] */ __in ID3D11Buffer *pBufferForArgs, /* [annotation] */ __in UINT AlignedByteOffsetForArgs) = 0; virtual void STDMETHODCALLTYPE RSSetState( /* [annotation] */ __in_opt ID3D11RasterizerState *pRasterizerState) = 0; virtual void STDMETHODCALLTYPE RSSetViewports( /* [annotation] */ __in_range(0, D3D11_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE) UINT NumViewports, /* [annotation] */ __in_ecount_opt(NumViewports) const D3D11_VIEWPORT *pViewports) = 0; virtual void STDMETHODCALLTYPE RSSetScissorRects( /* [annotation] */ __in_range(0, D3D11_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE) UINT NumRects, /* [annotation] */ __in_ecount_opt(NumRects) const D3D11_RECT *pRects) = 0; virtual void STDMETHODCALLTYPE CopySubresourceRegion( /* [annotation] */ __in ID3D11Resource *pDstResource, /* [annotation] */ __in UINT DstSubresource, /* [annotation] */ __in UINT DstX, /* [annotation] */ __in UINT DstY, /* [annotation] */ __in UINT DstZ, /* [annotation] */ __in ID3D11Resource *pSrcResource, /* [annotation] */ __in UINT SrcSubresource, /* [annotation] */ __in_opt const D3D11_BOX *pSrcBox) = 0; virtual void STDMETHODCALLTYPE CopyResource( /* [annotation] */ __in ID3D11Resource *pDstResource, /* [annotation] */ __in ID3D11Resource *pSrcResource) = 0; virtual void STDMETHODCALLTYPE UpdateSubresource( /* [annotation] */ __in ID3D11Resource *pDstResource, /* [annotation] */ __in UINT DstSubresource, /* [annotation] */ __in_opt const D3D11_BOX *pDstBox, /* [annotation] */ __in const void *pSrcData, /* [annotation] */ __in UINT SrcRowPitch, /* [annotation] */ __in UINT SrcDepthPitch) = 0; virtual void STDMETHODCALLTYPE CopyStructureCount( /* [annotation] */ __in ID3D11Buffer *pDstBuffer, /* [annotation] */ __in UINT DstAlignedByteOffset, /* [annotation] */ __in ID3D11UnorderedAccessView *pSrcView) = 0; virtual void STDMETHODCALLTYPE ClearRenderTargetView( /* [annotation] */ __in ID3D11RenderTargetView *pRenderTargetView, /* [annotation] */ __in const FLOAT ColorRGBA[ 4 ]) = 0; virtual void STDMETHODCALLTYPE ClearUnorderedAccessViewUint( /* [annotation] */ __in ID3D11UnorderedAccessView *pUnorderedAccessView, /* [annotation] */ __in const UINT Values[ 4 ]) = 0; virtual void STDMETHODCALLTYPE ClearUnorderedAccessViewFloat( /* [annotation] */ __in ID3D11UnorderedAccessView *pUnorderedAccessView, /* [annotation] */ __in const FLOAT Values[ 4 ]) = 0; virtual void STDMETHODCALLTYPE ClearDepthStencilView( /* [annotation] */ __in ID3D11DepthStencilView *pDepthStencilView, /* [annotation] */ __in UINT ClearFlags, /* [annotation] */ __in FLOAT Depth, /* [annotation] */ __in UINT8 Stencil) = 0; virtual void STDMETHODCALLTYPE GenerateMips( /* [annotation] */ __in ID3D11ShaderResourceView *pShaderResourceView) = 0; virtual void STDMETHODCALLTYPE SetResourceMinLOD( /* [annotation] */ __in ID3D11Resource *pResource, FLOAT MinLOD) = 0; virtual FLOAT STDMETHODCALLTYPE GetResourceMinLOD( /* [annotation] */ __in ID3D11Resource *pResource) = 0; virtual void STDMETHODCALLTYPE ResolveSubresource( /* [annotation] */ __in ID3D11Resource *pDstResource, /* [annotation] */ __in UINT DstSubresource, /* [annotation] */ __in ID3D11Resource *pSrcResource, /* [annotation] */ __in UINT SrcSubresource, /* [annotation] */ __in DXGI_FORMAT Format) = 0; virtual void STDMETHODCALLTYPE ExecuteCommandList( /* [annotation] */ __in ID3D11CommandList *pCommandList, BOOL RestoreContextState) = 0; virtual void STDMETHODCALLTYPE HSSetShaderResources( /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot ) UINT NumViews, /* [annotation] */ __in_ecount(NumViews) ID3D11ShaderResourceView *const *ppShaderResourceViews) = 0; virtual void STDMETHODCALLTYPE HSSetShader( /* [annotation] */ __in_opt ID3D11HullShader *pHullShader, /* [annotation] */ __in_ecount_opt(NumClassInstances) ID3D11ClassInstance *const *ppClassInstances, UINT NumClassInstances) = 0; virtual void STDMETHODCALLTYPE HSSetSamplers( /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot ) UINT NumSamplers, /* [annotation] */ __in_ecount(NumSamplers) ID3D11SamplerState *const *ppSamplers) = 0; virtual void STDMETHODCALLTYPE HSSetConstantBuffers( /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot ) UINT NumBuffers, /* [annotation] */ __in_ecount(NumBuffers) ID3D11Buffer *const *ppConstantBuffers) = 0; virtual void STDMETHODCALLTYPE DSSetShaderResources( /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot ) UINT NumViews, /* [annotation] */ __in_ecount(NumViews) ID3D11ShaderResourceView *const *ppShaderResourceViews) = 0; virtual void STDMETHODCALLTYPE DSSetShader( /* [annotation] */ __in_opt ID3D11DomainShader *pDomainShader, /* [annotation] */ __in_ecount_opt(NumClassInstances) ID3D11ClassInstance *const *ppClassInstances, UINT NumClassInstances) = 0; virtual void STDMETHODCALLTYPE DSSetSamplers( /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot ) UINT NumSamplers, /* [annotation] */ __in_ecount(NumSamplers) ID3D11SamplerState *const *ppSamplers) = 0; virtual void STDMETHODCALLTYPE DSSetConstantBuffers( /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot ) UINT NumBuffers, /* [annotation] */ __in_ecount(NumBuffers) ID3D11Buffer *const *ppConstantBuffers) = 0; virtual void STDMETHODCALLTYPE CSSetShaderResources( /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot ) UINT NumViews, /* [annotation] */ __in_ecount(NumViews) ID3D11ShaderResourceView *const *ppShaderResourceViews) = 0; virtual void STDMETHODCALLTYPE CSSetUnorderedAccessViews( /* [annotation] */ __in_range( 0, D3D11_PS_CS_UAV_REGISTER_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_PS_CS_UAV_REGISTER_COUNT - StartSlot ) UINT NumUAVs, /* [annotation] */ __in_ecount(NumUAVs) ID3D11UnorderedAccessView *const *ppUnorderedAccessViews, /* [annotation] */ __in_ecount(NumUAVs) const UINT *pUAVInitialCounts) = 0; virtual void STDMETHODCALLTYPE CSSetShader( /* [annotation] */ __in_opt ID3D11ComputeShader *pComputeShader, /* [annotation] */ __in_ecount_opt(NumClassInstances) ID3D11ClassInstance *const *ppClassInstances, UINT NumClassInstances) = 0; virtual void STDMETHODCALLTYPE CSSetSamplers( /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot ) UINT NumSamplers, /* [annotation] */ __in_ecount(NumSamplers) ID3D11SamplerState *const *ppSamplers) = 0; virtual void STDMETHODCALLTYPE CSSetConstantBuffers( /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot ) UINT NumBuffers, /* [annotation] */ __in_ecount(NumBuffers) ID3D11Buffer *const *ppConstantBuffers) = 0; virtual void STDMETHODCALLTYPE VSGetConstantBuffers( /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot ) UINT NumBuffers, /* [annotation] */ __out_ecount(NumBuffers) ID3D11Buffer **ppConstantBuffers) = 0; virtual void STDMETHODCALLTYPE PSGetShaderResources( /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot ) UINT NumViews, /* [annotation] */ __out_ecount(NumViews) ID3D11ShaderResourceView **ppShaderResourceViews) = 0; virtual void STDMETHODCALLTYPE PSGetShader( /* [annotation] */ __out ID3D11PixelShader **ppPixelShader, /* [annotation] */ __out_ecount_opt(*pNumClassInstances) ID3D11ClassInstance **ppClassInstances, /* [annotation] */ __inout_opt UINT *pNumClassInstances) = 0; virtual void STDMETHODCALLTYPE PSGetSamplers( /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot ) UINT NumSamplers, /* [annotation] */ __out_ecount(NumSamplers) ID3D11SamplerState **ppSamplers) = 0; virtual void STDMETHODCALLTYPE VSGetShader( /* [annotation] */ __out ID3D11VertexShader **ppVertexShader, /* [annotation] */ __out_ecount_opt(*pNumClassInstances) ID3D11ClassInstance **ppClassInstances, /* [annotation] */ __inout_opt UINT *pNumClassInstances) = 0; virtual void STDMETHODCALLTYPE PSGetConstantBuffers( /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot ) UINT NumBuffers, /* [annotation] */ __out_ecount(NumBuffers) ID3D11Buffer **ppConstantBuffers) = 0; virtual void STDMETHODCALLTYPE IAGetInputLayout( /* [annotation] */ __out ID3D11InputLayout **ppInputLayout) = 0; virtual void STDMETHODCALLTYPE IAGetVertexBuffers( /* [annotation] */ __in_range( 0, D3D11_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT - StartSlot ) UINT NumBuffers, /* [annotation] */ __out_ecount_opt(NumBuffers) ID3D11Buffer **ppVertexBuffers, /* [annotation] */ __out_ecount_opt(NumBuffers) UINT *pStrides, /* [annotation] */ __out_ecount_opt(NumBuffers) UINT *pOffsets) = 0; virtual void STDMETHODCALLTYPE IAGetIndexBuffer( /* [annotation] */ __out_opt ID3D11Buffer **pIndexBuffer, /* [annotation] */ __out_opt DXGI_FORMAT *Format, /* [annotation] */ __out_opt UINT *Offset) = 0; virtual void STDMETHODCALLTYPE GSGetConstantBuffers( /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot ) UINT NumBuffers, /* [annotation] */ __out_ecount(NumBuffers) ID3D11Buffer **ppConstantBuffers) = 0; virtual void STDMETHODCALLTYPE GSGetShader( /* [annotation] */ __out ID3D11GeometryShader **ppGeometryShader, /* [annotation] */ __out_ecount_opt(*pNumClassInstances) ID3D11ClassInstance **ppClassInstances, /* [annotation] */ __inout_opt UINT *pNumClassInstances) = 0; virtual void STDMETHODCALLTYPE IAGetPrimitiveTopology( /* [annotation] */ __out D3D11_PRIMITIVE_TOPOLOGY *pTopology) = 0; virtual void STDMETHODCALLTYPE VSGetShaderResources( /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot ) UINT NumViews, /* [annotation] */ __out_ecount(NumViews) ID3D11ShaderResourceView **ppShaderResourceViews) = 0; virtual void STDMETHODCALLTYPE VSGetSamplers( /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot ) UINT NumSamplers, /* [annotation] */ __out_ecount(NumSamplers) ID3D11SamplerState **ppSamplers) = 0; virtual void STDMETHODCALLTYPE GetPredication( /* [annotation] */ __out_opt ID3D11Predicate **ppPredicate, /* [annotation] */ __out_opt BOOL *pPredicateValue) = 0; virtual void STDMETHODCALLTYPE GSGetShaderResources( /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot ) UINT NumViews, /* [annotation] */ __out_ecount(NumViews) ID3D11ShaderResourceView **ppShaderResourceViews) = 0; virtual void STDMETHODCALLTYPE GSGetSamplers( /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot ) UINT NumSamplers, /* [annotation] */ __out_ecount(NumSamplers) ID3D11SamplerState **ppSamplers) = 0; virtual void STDMETHODCALLTYPE OMGetRenderTargets( /* [annotation] */ __in_range( 0, D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT ) UINT NumViews, /* [annotation] */ __out_ecount_opt(NumViews) ID3D11RenderTargetView **ppRenderTargetViews, /* [annotation] */ __out_opt ID3D11DepthStencilView **ppDepthStencilView) = 0; virtual void STDMETHODCALLTYPE OMGetRenderTargetsAndUnorderedAccessViews( /* [annotation] */ __in_range( 0, D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT ) UINT NumRTVs, /* [annotation] */ __out_ecount_opt(NumRTVs) ID3D11RenderTargetView **ppRenderTargetViews, /* [annotation] */ __out_opt ID3D11DepthStencilView **ppDepthStencilView, /* [annotation] */ __in_range( 0, D3D11_PS_CS_UAV_REGISTER_COUNT - 1 ) UINT UAVStartSlot, /* [annotation] */ __in_range( 0, D3D11_PS_CS_UAV_REGISTER_COUNT - UAVStartSlot ) UINT NumUAVs, /* [annotation] */ __out_ecount_opt(NumUAVs) ID3D11UnorderedAccessView **ppUnorderedAccessViews) = 0; virtual void STDMETHODCALLTYPE OMGetBlendState( /* [annotation] */ __out_opt ID3D11BlendState **ppBlendState, /* [annotation] */ __out_opt FLOAT BlendFactor[ 4 ], /* [annotation] */ __out_opt UINT *pSampleMask) = 0; virtual void STDMETHODCALLTYPE OMGetDepthStencilState( /* [annotation] */ __out_opt ID3D11DepthStencilState **ppDepthStencilState, /* [annotation] */ __out_opt UINT *pStencilRef) = 0; virtual void STDMETHODCALLTYPE SOGetTargets( /* [annotation] */ __in_range( 0, D3D11_SO_BUFFER_SLOT_COUNT ) UINT NumBuffers, /* [annotation] */ __out_ecount(NumBuffers) ID3D11Buffer **ppSOTargets) = 0; virtual void STDMETHODCALLTYPE RSGetState( /* [annotation] */ __out ID3D11RasterizerState **ppRasterizerState) = 0; virtual void STDMETHODCALLTYPE RSGetViewports( /* [annotation] */ __inout /*_range(0, D3D11_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE )*/ UINT *pNumViewports, /* [annotation] */ __out_ecount_opt(*pNumViewports) D3D11_VIEWPORT *pViewports) = 0; virtual void STDMETHODCALLTYPE RSGetScissorRects( /* [annotation] */ __inout /*_range(0, D3D11_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE )*/ UINT *pNumRects, /* [annotation] */ __out_ecount_opt(*pNumRects) D3D11_RECT *pRects) = 0; virtual void STDMETHODCALLTYPE HSGetShaderResources( /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot ) UINT NumViews, /* [annotation] */ __out_ecount(NumViews) ID3D11ShaderResourceView **ppShaderResourceViews) = 0; virtual void STDMETHODCALLTYPE HSGetShader( /* [annotation] */ __out ID3D11HullShader **ppHullShader, /* [annotation] */ __out_ecount_opt(*pNumClassInstances) ID3D11ClassInstance **ppClassInstances, /* [annotation] */ __inout_opt UINT *pNumClassInstances) = 0; virtual void STDMETHODCALLTYPE HSGetSamplers( /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot ) UINT NumSamplers, /* [annotation] */ __out_ecount(NumSamplers) ID3D11SamplerState **ppSamplers) = 0; virtual void STDMETHODCALLTYPE HSGetConstantBuffers( /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot ) UINT NumBuffers, /* [annotation] */ __out_ecount(NumBuffers) ID3D11Buffer **ppConstantBuffers) = 0; virtual void STDMETHODCALLTYPE DSGetShaderResources( /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot ) UINT NumViews, /* [annotation] */ __out_ecount(NumViews) ID3D11ShaderResourceView **ppShaderResourceViews) = 0; virtual void STDMETHODCALLTYPE DSGetShader( /* [annotation] */ __out ID3D11DomainShader **ppDomainShader, /* [annotation] */ __out_ecount_opt(*pNumClassInstances) ID3D11ClassInstance **ppClassInstances, /* [annotation] */ __inout_opt UINT *pNumClassInstances) = 0; virtual void STDMETHODCALLTYPE DSGetSamplers( /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot ) UINT NumSamplers, /* [annotation] */ __out_ecount(NumSamplers) ID3D11SamplerState **ppSamplers) = 0; virtual void STDMETHODCALLTYPE DSGetConstantBuffers( /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot ) UINT NumBuffers, /* [annotation] */ __out_ecount(NumBuffers) ID3D11Buffer **ppConstantBuffers) = 0; virtual void STDMETHODCALLTYPE CSGetShaderResources( /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot ) UINT NumViews, /* [annotation] */ __out_ecount(NumViews) ID3D11ShaderResourceView **ppShaderResourceViews) = 0; virtual void STDMETHODCALLTYPE CSGetUnorderedAccessViews( /* [annotation] */ __in_range( 0, D3D11_PS_CS_UAV_REGISTER_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_PS_CS_UAV_REGISTER_COUNT - StartSlot ) UINT NumUAVs, /* [annotation] */ __out_ecount(NumUAVs) ID3D11UnorderedAccessView **ppUnorderedAccessViews) = 0; virtual void STDMETHODCALLTYPE CSGetShader( /* [annotation] */ __out ID3D11ComputeShader **ppComputeShader, /* [annotation] */ __out_ecount_opt(*pNumClassInstances) ID3D11ClassInstance **ppClassInstances, /* [annotation] */ __inout_opt UINT *pNumClassInstances) = 0; virtual void STDMETHODCALLTYPE CSGetSamplers( /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot ) UINT NumSamplers, /* [annotation] */ __out_ecount(NumSamplers) ID3D11SamplerState **ppSamplers) = 0; virtual void STDMETHODCALLTYPE CSGetConstantBuffers( /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot ) UINT NumBuffers, /* [annotation] */ __out_ecount(NumBuffers) ID3D11Buffer **ppConstantBuffers) = 0; virtual void STDMETHODCALLTYPE ClearState( void) = 0; virtual void STDMETHODCALLTYPE Flush( void) = 0; virtual D3D11_DEVICE_CONTEXT_TYPE STDMETHODCALLTYPE GetType( void) = 0; virtual UINT STDMETHODCALLTYPE GetContextFlags( void) = 0; virtual HRESULT STDMETHODCALLTYPE FinishCommandList( BOOL RestoreDeferredContextState, /* [annotation] */ __out_opt ID3D11CommandList **ppCommandList) = 0; }; #else /* C style interface */ typedef struct ID3D11DeviceContextVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ID3D11DeviceContext * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ __RPC__deref_out void **ppvObject); ULONG ( STDMETHODCALLTYPE *AddRef )( ID3D11DeviceContext * This); ULONG ( STDMETHODCALLTYPE *Release )( ID3D11DeviceContext * This); void ( STDMETHODCALLTYPE *GetDevice )( ID3D11DeviceContext * This, /* [annotation] */ __out ID3D11Device **ppDevice); HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( ID3D11DeviceContext * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __inout UINT *pDataSize, /* [annotation] */ __out_bcount_opt( *pDataSize ) void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( ID3D11DeviceContext * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in UINT DataSize, /* [annotation] */ __in_bcount_opt( DataSize ) const void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( ID3D11DeviceContext * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in_opt const IUnknown *pData); void ( STDMETHODCALLTYPE *VSSetConstantBuffers )( ID3D11DeviceContext * This, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot ) UINT NumBuffers, /* [annotation] */ __in_ecount(NumBuffers) ID3D11Buffer *const *ppConstantBuffers); void ( STDMETHODCALLTYPE *PSSetShaderResources )( ID3D11DeviceContext * This, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot ) UINT NumViews, /* [annotation] */ __in_ecount(NumViews) ID3D11ShaderResourceView *const *ppShaderResourceViews); void ( STDMETHODCALLTYPE *PSSetShader )( ID3D11DeviceContext * This, /* [annotation] */ __in_opt ID3D11PixelShader *pPixelShader, /* [annotation] */ __in_ecount_opt(NumClassInstances) ID3D11ClassInstance *const *ppClassInstances, UINT NumClassInstances); void ( STDMETHODCALLTYPE *PSSetSamplers )( ID3D11DeviceContext * This, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot ) UINT NumSamplers, /* [annotation] */ __in_ecount(NumSamplers) ID3D11SamplerState *const *ppSamplers); void ( STDMETHODCALLTYPE *VSSetShader )( ID3D11DeviceContext * This, /* [annotation] */ __in_opt ID3D11VertexShader *pVertexShader, /* [annotation] */ __in_ecount_opt(NumClassInstances) ID3D11ClassInstance *const *ppClassInstances, UINT NumClassInstances); void ( STDMETHODCALLTYPE *DrawIndexed )( ID3D11DeviceContext * This, /* [annotation] */ __in UINT IndexCount, /* [annotation] */ __in UINT StartIndexLocation, /* [annotation] */ __in INT BaseVertexLocation); void ( STDMETHODCALLTYPE *Draw )( ID3D11DeviceContext * This, /* [annotation] */ __in UINT VertexCount, /* [annotation] */ __in UINT StartVertexLocation); HRESULT ( STDMETHODCALLTYPE *Map )( ID3D11DeviceContext * This, /* [annotation] */ __in ID3D11Resource *pResource, /* [annotation] */ __in UINT Subresource, /* [annotation] */ __in D3D11_MAP MapType, /* [annotation] */ __in UINT MapFlags, /* [annotation] */ __out D3D11_MAPPED_SUBRESOURCE *pMappedResource); void ( STDMETHODCALLTYPE *Unmap )( ID3D11DeviceContext * This, /* [annotation] */ __in ID3D11Resource *pResource, /* [annotation] */ __in UINT Subresource); void ( STDMETHODCALLTYPE *PSSetConstantBuffers )( ID3D11DeviceContext * This, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot ) UINT NumBuffers, /* [annotation] */ __in_ecount(NumBuffers) ID3D11Buffer *const *ppConstantBuffers); void ( STDMETHODCALLTYPE *IASetInputLayout )( ID3D11DeviceContext * This, /* [annotation] */ __in_opt ID3D11InputLayout *pInputLayout); void ( STDMETHODCALLTYPE *IASetVertexBuffers )( ID3D11DeviceContext * This, /* [annotation] */ __in_range( 0, D3D11_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT - StartSlot ) UINT NumBuffers, /* [annotation] */ __in_ecount(NumBuffers) ID3D11Buffer *const *ppVertexBuffers, /* [annotation] */ __in_ecount(NumBuffers) const UINT *pStrides, /* [annotation] */ __in_ecount(NumBuffers) const UINT *pOffsets); void ( STDMETHODCALLTYPE *IASetIndexBuffer )( ID3D11DeviceContext * This, /* [annotation] */ __in_opt ID3D11Buffer *pIndexBuffer, /* [annotation] */ __in DXGI_FORMAT Format, /* [annotation] */ __in UINT Offset); void ( STDMETHODCALLTYPE *DrawIndexedInstanced )( ID3D11DeviceContext * This, /* [annotation] */ __in UINT IndexCountPerInstance, /* [annotation] */ __in UINT InstanceCount, /* [annotation] */ __in UINT StartIndexLocation, /* [annotation] */ __in INT BaseVertexLocation, /* [annotation] */ __in UINT StartInstanceLocation); void ( STDMETHODCALLTYPE *DrawInstanced )( ID3D11DeviceContext * This, /* [annotation] */ __in UINT VertexCountPerInstance, /* [annotation] */ __in UINT InstanceCount, /* [annotation] */ __in UINT StartVertexLocation, /* [annotation] */ __in UINT StartInstanceLocation); void ( STDMETHODCALLTYPE *GSSetConstantBuffers )( ID3D11DeviceContext * This, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot ) UINT NumBuffers, /* [annotation] */ __in_ecount(NumBuffers) ID3D11Buffer *const *ppConstantBuffers); void ( STDMETHODCALLTYPE *GSSetShader )( ID3D11DeviceContext * This, /* [annotation] */ __in_opt ID3D11GeometryShader *pShader, /* [annotation] */ __in_ecount_opt(NumClassInstances) ID3D11ClassInstance *const *ppClassInstances, UINT NumClassInstances); void ( STDMETHODCALLTYPE *IASetPrimitiveTopology )( ID3D11DeviceContext * This, /* [annotation] */ __in D3D11_PRIMITIVE_TOPOLOGY Topology); void ( STDMETHODCALLTYPE *VSSetShaderResources )( ID3D11DeviceContext * This, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot ) UINT NumViews, /* [annotation] */ __in_ecount(NumViews) ID3D11ShaderResourceView *const *ppShaderResourceViews); void ( STDMETHODCALLTYPE *VSSetSamplers )( ID3D11DeviceContext * This, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot ) UINT NumSamplers, /* [annotation] */ __in_ecount(NumSamplers) ID3D11SamplerState *const *ppSamplers); void ( STDMETHODCALLTYPE *Begin )( ID3D11DeviceContext * This, /* [annotation] */ __in ID3D11Asynchronous *pAsync); void ( STDMETHODCALLTYPE *End )( ID3D11DeviceContext * This, /* [annotation] */ __in ID3D11Asynchronous *pAsync); HRESULT ( STDMETHODCALLTYPE *GetData )( ID3D11DeviceContext * This, /* [annotation] */ __in ID3D11Asynchronous *pAsync, /* [annotation] */ __out_bcount_opt( DataSize ) void *pData, /* [annotation] */ __in UINT DataSize, /* [annotation] */ __in UINT GetDataFlags); void ( STDMETHODCALLTYPE *SetPredication )( ID3D11DeviceContext * This, /* [annotation] */ __in_opt ID3D11Predicate *pPredicate, /* [annotation] */ __in BOOL PredicateValue); void ( STDMETHODCALLTYPE *GSSetShaderResources )( ID3D11DeviceContext * This, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot ) UINT NumViews, /* [annotation] */ __in_ecount(NumViews) ID3D11ShaderResourceView *const *ppShaderResourceViews); void ( STDMETHODCALLTYPE *GSSetSamplers )( ID3D11DeviceContext * This, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot ) UINT NumSamplers, /* [annotation] */ __in_ecount(NumSamplers) ID3D11SamplerState *const *ppSamplers); void ( STDMETHODCALLTYPE *OMSetRenderTargets )( ID3D11DeviceContext * This, /* [annotation] */ __in_range( 0, D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT ) UINT NumViews, /* [annotation] */ __in_ecount_opt(NumViews) ID3D11RenderTargetView *const *ppRenderTargetViews, /* [annotation] */ __in_opt ID3D11DepthStencilView *pDepthStencilView); void ( STDMETHODCALLTYPE *OMSetRenderTargetsAndUnorderedAccessViews )( ID3D11DeviceContext * This, /* [annotation] */ __in UINT NumRTVs, /* [annotation] */ __in_ecount_opt(NumRTVs) ID3D11RenderTargetView *const *ppRenderTargetViews, /* [annotation] */ __in_opt ID3D11DepthStencilView *pDepthStencilView, /* [annotation] */ __in_range( 0, D3D11_PS_CS_UAV_REGISTER_COUNT - 1 ) UINT UAVStartSlot, /* [annotation] */ __in UINT NumUAVs, /* [annotation] */ __in_ecount_opt(NumUAVs) ID3D11UnorderedAccessView *const *ppUnorderedAccessViews, /* [annotation] */ __in_ecount_opt(NumUAVs) const UINT *pUAVInitialCounts); void ( STDMETHODCALLTYPE *OMSetBlendState )( ID3D11DeviceContext * This, /* [annotation] */ __in_opt ID3D11BlendState *pBlendState, /* [annotation] */ __in_opt const FLOAT BlendFactor[ 4 ], /* [annotation] */ __in UINT SampleMask); void ( STDMETHODCALLTYPE *OMSetDepthStencilState )( ID3D11DeviceContext * This, /* [annotation] */ __in_opt ID3D11DepthStencilState *pDepthStencilState, /* [annotation] */ __in UINT StencilRef); void ( STDMETHODCALLTYPE *SOSetTargets )( ID3D11DeviceContext * This, /* [annotation] */ __in_range( 0, D3D11_SO_BUFFER_SLOT_COUNT) UINT NumBuffers, /* [annotation] */ __in_ecount_opt(NumBuffers) ID3D11Buffer *const *ppSOTargets, /* [annotation] */ __in_ecount_opt(NumBuffers) const UINT *pOffsets); void ( STDMETHODCALLTYPE *DrawAuto )( ID3D11DeviceContext * This); void ( STDMETHODCALLTYPE *DrawIndexedInstancedIndirect )( ID3D11DeviceContext * This, /* [annotation] */ __in ID3D11Buffer *pBufferForArgs, /* [annotation] */ __in UINT AlignedByteOffsetForArgs); void ( STDMETHODCALLTYPE *DrawInstancedIndirect )( ID3D11DeviceContext * This, /* [annotation] */ __in ID3D11Buffer *pBufferForArgs, /* [annotation] */ __in UINT AlignedByteOffsetForArgs); void ( STDMETHODCALLTYPE *Dispatch )( ID3D11DeviceContext * This, /* [annotation] */ __in UINT ThreadGroupCountX, /* [annotation] */ __in UINT ThreadGroupCountY, /* [annotation] */ __in UINT ThreadGroupCountZ); void ( STDMETHODCALLTYPE *DispatchIndirect )( ID3D11DeviceContext * This, /* [annotation] */ __in ID3D11Buffer *pBufferForArgs, /* [annotation] */ __in UINT AlignedByteOffsetForArgs); void ( STDMETHODCALLTYPE *RSSetState )( ID3D11DeviceContext * This, /* [annotation] */ __in_opt ID3D11RasterizerState *pRasterizerState); void ( STDMETHODCALLTYPE *RSSetViewports )( ID3D11DeviceContext * This, /* [annotation] */ __in_range(0, D3D11_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE) UINT NumViewports, /* [annotation] */ __in_ecount_opt(NumViewports) const D3D11_VIEWPORT *pViewports); void ( STDMETHODCALLTYPE *RSSetScissorRects )( ID3D11DeviceContext * This, /* [annotation] */ __in_range(0, D3D11_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE) UINT NumRects, /* [annotation] */ __in_ecount_opt(NumRects) const D3D11_RECT *pRects); void ( STDMETHODCALLTYPE *CopySubresourceRegion )( ID3D11DeviceContext * This, /* [annotation] */ __in ID3D11Resource *pDstResource, /* [annotation] */ __in UINT DstSubresource, /* [annotation] */ __in UINT DstX, /* [annotation] */ __in UINT DstY, /* [annotation] */ __in UINT DstZ, /* [annotation] */ __in ID3D11Resource *pSrcResource, /* [annotation] */ __in UINT SrcSubresource, /* [annotation] */ __in_opt const D3D11_BOX *pSrcBox); void ( STDMETHODCALLTYPE *CopyResource )( ID3D11DeviceContext * This, /* [annotation] */ __in ID3D11Resource *pDstResource, /* [annotation] */ __in ID3D11Resource *pSrcResource); void ( STDMETHODCALLTYPE *UpdateSubresource )( ID3D11DeviceContext * This, /* [annotation] */ __in ID3D11Resource *pDstResource, /* [annotation] */ __in UINT DstSubresource, /* [annotation] */ __in_opt const D3D11_BOX *pDstBox, /* [annotation] */ __in const void *pSrcData, /* [annotation] */ __in UINT SrcRowPitch, /* [annotation] */ __in UINT SrcDepthPitch); void ( STDMETHODCALLTYPE *CopyStructureCount )( ID3D11DeviceContext * This, /* [annotation] */ __in ID3D11Buffer *pDstBuffer, /* [annotation] */ __in UINT DstAlignedByteOffset, /* [annotation] */ __in ID3D11UnorderedAccessView *pSrcView); void ( STDMETHODCALLTYPE *ClearRenderTargetView )( ID3D11DeviceContext * This, /* [annotation] */ __in ID3D11RenderTargetView *pRenderTargetView, /* [annotation] */ __in const FLOAT ColorRGBA[ 4 ]); void ( STDMETHODCALLTYPE *ClearUnorderedAccessViewUint )( ID3D11DeviceContext * This, /* [annotation] */ __in ID3D11UnorderedAccessView *pUnorderedAccessView, /* [annotation] */ __in const UINT Values[ 4 ]); void ( STDMETHODCALLTYPE *ClearUnorderedAccessViewFloat )( ID3D11DeviceContext * This, /* [annotation] */ __in ID3D11UnorderedAccessView *pUnorderedAccessView, /* [annotation] */ __in const FLOAT Values[ 4 ]); void ( STDMETHODCALLTYPE *ClearDepthStencilView )( ID3D11DeviceContext * This, /* [annotation] */ __in ID3D11DepthStencilView *pDepthStencilView, /* [annotation] */ __in UINT ClearFlags, /* [annotation] */ __in FLOAT Depth, /* [annotation] */ __in UINT8 Stencil); void ( STDMETHODCALLTYPE *GenerateMips )( ID3D11DeviceContext * This, /* [annotation] */ __in ID3D11ShaderResourceView *pShaderResourceView); void ( STDMETHODCALLTYPE *SetResourceMinLOD )( ID3D11DeviceContext * This, /* [annotation] */ __in ID3D11Resource *pResource, FLOAT MinLOD); FLOAT ( STDMETHODCALLTYPE *GetResourceMinLOD )( ID3D11DeviceContext * This, /* [annotation] */ __in ID3D11Resource *pResource); void ( STDMETHODCALLTYPE *ResolveSubresource )( ID3D11DeviceContext * This, /* [annotation] */ __in ID3D11Resource *pDstResource, /* [annotation] */ __in UINT DstSubresource, /* [annotation] */ __in ID3D11Resource *pSrcResource, /* [annotation] */ __in UINT SrcSubresource, /* [annotation] */ __in DXGI_FORMAT Format); void ( STDMETHODCALLTYPE *ExecuteCommandList )( ID3D11DeviceContext * This, /* [annotation] */ __in ID3D11CommandList *pCommandList, BOOL RestoreContextState); void ( STDMETHODCALLTYPE *HSSetShaderResources )( ID3D11DeviceContext * This, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot ) UINT NumViews, /* [annotation] */ __in_ecount(NumViews) ID3D11ShaderResourceView *const *ppShaderResourceViews); void ( STDMETHODCALLTYPE *HSSetShader )( ID3D11DeviceContext * This, /* [annotation] */ __in_opt ID3D11HullShader *pHullShader, /* [annotation] */ __in_ecount_opt(NumClassInstances) ID3D11ClassInstance *const *ppClassInstances, UINT NumClassInstances); void ( STDMETHODCALLTYPE *HSSetSamplers )( ID3D11DeviceContext * This, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot ) UINT NumSamplers, /* [annotation] */ __in_ecount(NumSamplers) ID3D11SamplerState *const *ppSamplers); void ( STDMETHODCALLTYPE *HSSetConstantBuffers )( ID3D11DeviceContext * This, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot ) UINT NumBuffers, /* [annotation] */ __in_ecount(NumBuffers) ID3D11Buffer *const *ppConstantBuffers); void ( STDMETHODCALLTYPE *DSSetShaderResources )( ID3D11DeviceContext * This, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot ) UINT NumViews, /* [annotation] */ __in_ecount(NumViews) ID3D11ShaderResourceView *const *ppShaderResourceViews); void ( STDMETHODCALLTYPE *DSSetShader )( ID3D11DeviceContext * This, /* [annotation] */ __in_opt ID3D11DomainShader *pDomainShader, /* [annotation] */ __in_ecount_opt(NumClassInstances) ID3D11ClassInstance *const *ppClassInstances, UINT NumClassInstances); void ( STDMETHODCALLTYPE *DSSetSamplers )( ID3D11DeviceContext * This, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot ) UINT NumSamplers, /* [annotation] */ __in_ecount(NumSamplers) ID3D11SamplerState *const *ppSamplers); void ( STDMETHODCALLTYPE *DSSetConstantBuffers )( ID3D11DeviceContext * This, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot ) UINT NumBuffers, /* [annotation] */ __in_ecount(NumBuffers) ID3D11Buffer *const *ppConstantBuffers); void ( STDMETHODCALLTYPE *CSSetShaderResources )( ID3D11DeviceContext * This, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot ) UINT NumViews, /* [annotation] */ __in_ecount(NumViews) ID3D11ShaderResourceView *const *ppShaderResourceViews); void ( STDMETHODCALLTYPE *CSSetUnorderedAccessViews )( ID3D11DeviceContext * This, /* [annotation] */ __in_range( 0, D3D11_PS_CS_UAV_REGISTER_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_PS_CS_UAV_REGISTER_COUNT - StartSlot ) UINT NumUAVs, /* [annotation] */ __in_ecount(NumUAVs) ID3D11UnorderedAccessView *const *ppUnorderedAccessViews, /* [annotation] */ __in_ecount(NumUAVs) const UINT *pUAVInitialCounts); void ( STDMETHODCALLTYPE *CSSetShader )( ID3D11DeviceContext * This, /* [annotation] */ __in_opt ID3D11ComputeShader *pComputeShader, /* [annotation] */ __in_ecount_opt(NumClassInstances) ID3D11ClassInstance *const *ppClassInstances, UINT NumClassInstances); void ( STDMETHODCALLTYPE *CSSetSamplers )( ID3D11DeviceContext * This, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot ) UINT NumSamplers, /* [annotation] */ __in_ecount(NumSamplers) ID3D11SamplerState *const *ppSamplers); void ( STDMETHODCALLTYPE *CSSetConstantBuffers )( ID3D11DeviceContext * This, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot ) UINT NumBuffers, /* [annotation] */ __in_ecount(NumBuffers) ID3D11Buffer *const *ppConstantBuffers); void ( STDMETHODCALLTYPE *VSGetConstantBuffers )( ID3D11DeviceContext * This, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot ) UINT NumBuffers, /* [annotation] */ __out_ecount(NumBuffers) ID3D11Buffer **ppConstantBuffers); void ( STDMETHODCALLTYPE *PSGetShaderResources )( ID3D11DeviceContext * This, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot ) UINT NumViews, /* [annotation] */ __out_ecount(NumViews) ID3D11ShaderResourceView **ppShaderResourceViews); void ( STDMETHODCALLTYPE *PSGetShader )( ID3D11DeviceContext * This, /* [annotation] */ __out ID3D11PixelShader **ppPixelShader, /* [annotation] */ __out_ecount_opt(*pNumClassInstances) ID3D11ClassInstance **ppClassInstances, /* [annotation] */ __inout_opt UINT *pNumClassInstances); void ( STDMETHODCALLTYPE *PSGetSamplers )( ID3D11DeviceContext * This, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot ) UINT NumSamplers, /* [annotation] */ __out_ecount(NumSamplers) ID3D11SamplerState **ppSamplers); void ( STDMETHODCALLTYPE *VSGetShader )( ID3D11DeviceContext * This, /* [annotation] */ __out ID3D11VertexShader **ppVertexShader, /* [annotation] */ __out_ecount_opt(*pNumClassInstances) ID3D11ClassInstance **ppClassInstances, /* [annotation] */ __inout_opt UINT *pNumClassInstances); void ( STDMETHODCALLTYPE *PSGetConstantBuffers )( ID3D11DeviceContext * This, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot ) UINT NumBuffers, /* [annotation] */ __out_ecount(NumBuffers) ID3D11Buffer **ppConstantBuffers); void ( STDMETHODCALLTYPE *IAGetInputLayout )( ID3D11DeviceContext * This, /* [annotation] */ __out ID3D11InputLayout **ppInputLayout); void ( STDMETHODCALLTYPE *IAGetVertexBuffers )( ID3D11DeviceContext * This, /* [annotation] */ __in_range( 0, D3D11_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT - StartSlot ) UINT NumBuffers, /* [annotation] */ __out_ecount_opt(NumBuffers) ID3D11Buffer **ppVertexBuffers, /* [annotation] */ __out_ecount_opt(NumBuffers) UINT *pStrides, /* [annotation] */ __out_ecount_opt(NumBuffers) UINT *pOffsets); void ( STDMETHODCALLTYPE *IAGetIndexBuffer )( ID3D11DeviceContext * This, /* [annotation] */ __out_opt ID3D11Buffer **pIndexBuffer, /* [annotation] */ __out_opt DXGI_FORMAT *Format, /* [annotation] */ __out_opt UINT *Offset); void ( STDMETHODCALLTYPE *GSGetConstantBuffers )( ID3D11DeviceContext * This, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot ) UINT NumBuffers, /* [annotation] */ __out_ecount(NumBuffers) ID3D11Buffer **ppConstantBuffers); void ( STDMETHODCALLTYPE *GSGetShader )( ID3D11DeviceContext * This, /* [annotation] */ __out ID3D11GeometryShader **ppGeometryShader, /* [annotation] */ __out_ecount_opt(*pNumClassInstances) ID3D11ClassInstance **ppClassInstances, /* [annotation] */ __inout_opt UINT *pNumClassInstances); void ( STDMETHODCALLTYPE *IAGetPrimitiveTopology )( ID3D11DeviceContext * This, /* [annotation] */ __out D3D11_PRIMITIVE_TOPOLOGY *pTopology); void ( STDMETHODCALLTYPE *VSGetShaderResources )( ID3D11DeviceContext * This, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot ) UINT NumViews, /* [annotation] */ __out_ecount(NumViews) ID3D11ShaderResourceView **ppShaderResourceViews); void ( STDMETHODCALLTYPE *VSGetSamplers )( ID3D11DeviceContext * This, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot ) UINT NumSamplers, /* [annotation] */ __out_ecount(NumSamplers) ID3D11SamplerState **ppSamplers); void ( STDMETHODCALLTYPE *GetPredication )( ID3D11DeviceContext * This, /* [annotation] */ __out_opt ID3D11Predicate **ppPredicate, /* [annotation] */ __out_opt BOOL *pPredicateValue); void ( STDMETHODCALLTYPE *GSGetShaderResources )( ID3D11DeviceContext * This, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot ) UINT NumViews, /* [annotation] */ __out_ecount(NumViews) ID3D11ShaderResourceView **ppShaderResourceViews); void ( STDMETHODCALLTYPE *GSGetSamplers )( ID3D11DeviceContext * This, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot ) UINT NumSamplers, /* [annotation] */ __out_ecount(NumSamplers) ID3D11SamplerState **ppSamplers); void ( STDMETHODCALLTYPE *OMGetRenderTargets )( ID3D11DeviceContext * This, /* [annotation] */ __in_range( 0, D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT ) UINT NumViews, /* [annotation] */ __out_ecount_opt(NumViews) ID3D11RenderTargetView **ppRenderTargetViews, /* [annotation] */ __out_opt ID3D11DepthStencilView **ppDepthStencilView); void ( STDMETHODCALLTYPE *OMGetRenderTargetsAndUnorderedAccessViews )( ID3D11DeviceContext * This, /* [annotation] */ __in_range( 0, D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT ) UINT NumRTVs, /* [annotation] */ __out_ecount_opt(NumRTVs) ID3D11RenderTargetView **ppRenderTargetViews, /* [annotation] */ __out_opt ID3D11DepthStencilView **ppDepthStencilView, /* [annotation] */ __in_range( 0, D3D11_PS_CS_UAV_REGISTER_COUNT - 1 ) UINT UAVStartSlot, /* [annotation] */ __in_range( 0, D3D11_PS_CS_UAV_REGISTER_COUNT - UAVStartSlot ) UINT NumUAVs, /* [annotation] */ __out_ecount_opt(NumUAVs) ID3D11UnorderedAccessView **ppUnorderedAccessViews); void ( STDMETHODCALLTYPE *OMGetBlendState )( ID3D11DeviceContext * This, /* [annotation] */ __out_opt ID3D11BlendState **ppBlendState, /* [annotation] */ __out_opt FLOAT BlendFactor[ 4 ], /* [annotation] */ __out_opt UINT *pSampleMask); void ( STDMETHODCALLTYPE *OMGetDepthStencilState )( ID3D11DeviceContext * This, /* [annotation] */ __out_opt ID3D11DepthStencilState **ppDepthStencilState, /* [annotation] */ __out_opt UINT *pStencilRef); void ( STDMETHODCALLTYPE *SOGetTargets )( ID3D11DeviceContext * This, /* [annotation] */ __in_range( 0, D3D11_SO_BUFFER_SLOT_COUNT ) UINT NumBuffers, /* [annotation] */ __out_ecount(NumBuffers) ID3D11Buffer **ppSOTargets); void ( STDMETHODCALLTYPE *RSGetState )( ID3D11DeviceContext * This, /* [annotation] */ __out ID3D11RasterizerState **ppRasterizerState); void ( STDMETHODCALLTYPE *RSGetViewports )( ID3D11DeviceContext * This, /* [annotation] */ __inout /*_range(0, D3D11_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE )*/ UINT *pNumViewports, /* [annotation] */ __out_ecount_opt(*pNumViewports) D3D11_VIEWPORT *pViewports); void ( STDMETHODCALLTYPE *RSGetScissorRects )( ID3D11DeviceContext * This, /* [annotation] */ __inout /*_range(0, D3D11_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE )*/ UINT *pNumRects, /* [annotation] */ __out_ecount_opt(*pNumRects) D3D11_RECT *pRects); void ( STDMETHODCALLTYPE *HSGetShaderResources )( ID3D11DeviceContext * This, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot ) UINT NumViews, /* [annotation] */ __out_ecount(NumViews) ID3D11ShaderResourceView **ppShaderResourceViews); void ( STDMETHODCALLTYPE *HSGetShader )( ID3D11DeviceContext * This, /* [annotation] */ __out ID3D11HullShader **ppHullShader, /* [annotation] */ __out_ecount_opt(*pNumClassInstances) ID3D11ClassInstance **ppClassInstances, /* [annotation] */ __inout_opt UINT *pNumClassInstances); void ( STDMETHODCALLTYPE *HSGetSamplers )( ID3D11DeviceContext * This, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot ) UINT NumSamplers, /* [annotation] */ __out_ecount(NumSamplers) ID3D11SamplerState **ppSamplers); void ( STDMETHODCALLTYPE *HSGetConstantBuffers )( ID3D11DeviceContext * This, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot ) UINT NumBuffers, /* [annotation] */ __out_ecount(NumBuffers) ID3D11Buffer **ppConstantBuffers); void ( STDMETHODCALLTYPE *DSGetShaderResources )( ID3D11DeviceContext * This, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot ) UINT NumViews, /* [annotation] */ __out_ecount(NumViews) ID3D11ShaderResourceView **ppShaderResourceViews); void ( STDMETHODCALLTYPE *DSGetShader )( ID3D11DeviceContext * This, /* [annotation] */ __out ID3D11DomainShader **ppDomainShader, /* [annotation] */ __out_ecount_opt(*pNumClassInstances) ID3D11ClassInstance **ppClassInstances, /* [annotation] */ __inout_opt UINT *pNumClassInstances); void ( STDMETHODCALLTYPE *DSGetSamplers )( ID3D11DeviceContext * This, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot ) UINT NumSamplers, /* [annotation] */ __out_ecount(NumSamplers) ID3D11SamplerState **ppSamplers); void ( STDMETHODCALLTYPE *DSGetConstantBuffers )( ID3D11DeviceContext * This, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot ) UINT NumBuffers, /* [annotation] */ __out_ecount(NumBuffers) ID3D11Buffer **ppConstantBuffers); void ( STDMETHODCALLTYPE *CSGetShaderResources )( ID3D11DeviceContext * This, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot ) UINT NumViews, /* [annotation] */ __out_ecount(NumViews) ID3D11ShaderResourceView **ppShaderResourceViews); void ( STDMETHODCALLTYPE *CSGetUnorderedAccessViews )( ID3D11DeviceContext * This, /* [annotation] */ __in_range( 0, D3D11_PS_CS_UAV_REGISTER_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_PS_CS_UAV_REGISTER_COUNT - StartSlot ) UINT NumUAVs, /* [annotation] */ __out_ecount(NumUAVs) ID3D11UnorderedAccessView **ppUnorderedAccessViews); void ( STDMETHODCALLTYPE *CSGetShader )( ID3D11DeviceContext * This, /* [annotation] */ __out ID3D11ComputeShader **ppComputeShader, /* [annotation] */ __out_ecount_opt(*pNumClassInstances) ID3D11ClassInstance **ppClassInstances, /* [annotation] */ __inout_opt UINT *pNumClassInstances); void ( STDMETHODCALLTYPE *CSGetSamplers )( ID3D11DeviceContext * This, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot ) UINT NumSamplers, /* [annotation] */ __out_ecount(NumSamplers) ID3D11SamplerState **ppSamplers); void ( STDMETHODCALLTYPE *CSGetConstantBuffers )( ID3D11DeviceContext * This, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 ) UINT StartSlot, /* [annotation] */ __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot ) UINT NumBuffers, /* [annotation] */ __out_ecount(NumBuffers) ID3D11Buffer **ppConstantBuffers); void ( STDMETHODCALLTYPE *ClearState )( ID3D11DeviceContext * This); void ( STDMETHODCALLTYPE *Flush )( ID3D11DeviceContext * This); D3D11_DEVICE_CONTEXT_TYPE ( STDMETHODCALLTYPE *GetType )( ID3D11DeviceContext * This); UINT ( STDMETHODCALLTYPE *GetContextFlags )( ID3D11DeviceContext * This); HRESULT ( STDMETHODCALLTYPE *FinishCommandList )( ID3D11DeviceContext * This, BOOL RestoreDeferredContextState, /* [annotation] */ __out_opt ID3D11CommandList **ppCommandList); END_INTERFACE } ID3D11DeviceContextVtbl; interface ID3D11DeviceContext { CONST_VTBL struct ID3D11DeviceContextVtbl *lpVtbl; }; #ifdef COBJMACROS #define ID3D11DeviceContext_QueryInterface(This,riid,ppvObject) \ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) #define ID3D11DeviceContext_AddRef(This) \ ( (This)->lpVtbl -> AddRef(This) ) #define ID3D11DeviceContext_Release(This) \ ( (This)->lpVtbl -> Release(This) ) #define ID3D11DeviceContext_GetDevice(This,ppDevice) \ ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) #define ID3D11DeviceContext_GetPrivateData(This,guid,pDataSize,pData) \ ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) #define ID3D11DeviceContext_SetPrivateData(This,guid,DataSize,pData) \ ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) #define ID3D11DeviceContext_SetPrivateDataInterface(This,guid,pData) \ ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) #define ID3D11DeviceContext_VSSetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers) \ ( (This)->lpVtbl -> VSSetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers) ) #define ID3D11DeviceContext_PSSetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews) \ ( (This)->lpVtbl -> PSSetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews) ) #define ID3D11DeviceContext_PSSetShader(This,pPixelShader,ppClassInstances,NumClassInstances) \ ( (This)->lpVtbl -> PSSetShader(This,pPixelShader,ppClassInstances,NumClassInstances) ) #define ID3D11DeviceContext_PSSetSamplers(This,StartSlot,NumSamplers,ppSamplers) \ ( (This)->lpVtbl -> PSSetSamplers(This,StartSlot,NumSamplers,ppSamplers) ) #define ID3D11DeviceContext_VSSetShader(This,pVertexShader,ppClassInstances,NumClassInstances) \ ( (This)->lpVtbl -> VSSetShader(This,pVertexShader,ppClassInstances,NumClassInstances) ) #define ID3D11DeviceContext_DrawIndexed(This,IndexCount,StartIndexLocation,BaseVertexLocation) \ ( (This)->lpVtbl -> DrawIndexed(This,IndexCount,StartIndexLocation,BaseVertexLocation) ) #define ID3D11DeviceContext_Draw(This,VertexCount,StartVertexLocation) \ ( (This)->lpVtbl -> Draw(This,VertexCount,StartVertexLocation) ) #define ID3D11DeviceContext_Map(This,pResource,Subresource,MapType,MapFlags,pMappedResource) \ ( (This)->lpVtbl -> Map(This,pResource,Subresource,MapType,MapFlags,pMappedResource) ) #define ID3D11DeviceContext_Unmap(This,pResource,Subresource) \ ( (This)->lpVtbl -> Unmap(This,pResource,Subresource) ) #define ID3D11DeviceContext_PSSetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers) \ ( (This)->lpVtbl -> PSSetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers) ) #define ID3D11DeviceContext_IASetInputLayout(This,pInputLayout) \ ( (This)->lpVtbl -> IASetInputLayout(This,pInputLayout) ) #define ID3D11DeviceContext_IASetVertexBuffers(This,StartSlot,NumBuffers,ppVertexBuffers,pStrides,pOffsets) \ ( (This)->lpVtbl -> IASetVertexBuffers(This,StartSlot,NumBuffers,ppVertexBuffers,pStrides,pOffsets) ) #define ID3D11DeviceContext_IASetIndexBuffer(This,pIndexBuffer,Format,Offset) \ ( (This)->lpVtbl -> IASetIndexBuffer(This,pIndexBuffer,Format,Offset) ) #define ID3D11DeviceContext_DrawIndexedInstanced(This,IndexCountPerInstance,InstanceCount,StartIndexLocation,BaseVertexLocation,StartInstanceLocation) \ ( (This)->lpVtbl -> DrawIndexedInstanced(This,IndexCountPerInstance,InstanceCount,StartIndexLocation,BaseVertexLocation,StartInstanceLocation) ) #define ID3D11DeviceContext_DrawInstanced(This,VertexCountPerInstance,InstanceCount,StartVertexLocation,StartInstanceLocation) \ ( (This)->lpVtbl -> DrawInstanced(This,VertexCountPerInstance,InstanceCount,StartVertexLocation,StartInstanceLocation) ) #define ID3D11DeviceContext_GSSetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers) \ ( (This)->lpVtbl -> GSSetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers) ) #define ID3D11DeviceContext_GSSetShader(This,pShader,ppClassInstances,NumClassInstances) \ ( (This)->lpVtbl -> GSSetShader(This,pShader,ppClassInstances,NumClassInstances) ) #define ID3D11DeviceContext_IASetPrimitiveTopology(This,Topology) \ ( (This)->lpVtbl -> IASetPrimitiveTopology(This,Topology) ) #define ID3D11DeviceContext_VSSetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews) \ ( (This)->lpVtbl -> VSSetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews) ) #define ID3D11DeviceContext_VSSetSamplers(This,StartSlot,NumSamplers,ppSamplers) \ ( (This)->lpVtbl -> VSSetSamplers(This,StartSlot,NumSamplers,ppSamplers) ) #define ID3D11DeviceContext_Begin(This,pAsync) \ ( (This)->lpVtbl -> Begin(This,pAsync) ) #define ID3D11DeviceContext_End(This,pAsync) \ ( (This)->lpVtbl -> End(This,pAsync) ) #define ID3D11DeviceContext_GetData(This,pAsync,pData,DataSize,GetDataFlags) \ ( (This)->lpVtbl -> GetData(This,pAsync,pData,DataSize,GetDataFlags) ) #define ID3D11DeviceContext_SetPredication(This,pPredicate,PredicateValue) \ ( (This)->lpVtbl -> SetPredication(This,pPredicate,PredicateValue) ) #define ID3D11DeviceContext_GSSetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews) \ ( (This)->lpVtbl -> GSSetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews) ) #define ID3D11DeviceContext_GSSetSamplers(This,StartSlot,NumSamplers,ppSamplers) \ ( (This)->lpVtbl -> GSSetSamplers(This,StartSlot,NumSamplers,ppSamplers) ) #define ID3D11DeviceContext_OMSetRenderTargets(This,NumViews,ppRenderTargetViews,pDepthStencilView) \ ( (This)->lpVtbl -> OMSetRenderTargets(This,NumViews,ppRenderTargetViews,pDepthStencilView) ) #define ID3D11DeviceContext_OMSetRenderTargetsAndUnorderedAccessViews(This,NumRTVs,ppRenderTargetViews,pDepthStencilView,UAVStartSlot,NumUAVs,ppUnorderedAccessViews,pUAVInitialCounts) \ ( (This)->lpVtbl -> OMSetRenderTargetsAndUnorderedAccessViews(This,NumRTVs,ppRenderTargetViews,pDepthStencilView,UAVStartSlot,NumUAVs,ppUnorderedAccessViews,pUAVInitialCounts) ) #define ID3D11DeviceContext_OMSetBlendState(This,pBlendState,BlendFactor,SampleMask) \ ( (This)->lpVtbl -> OMSetBlendState(This,pBlendState,BlendFactor,SampleMask) ) #define ID3D11DeviceContext_OMSetDepthStencilState(This,pDepthStencilState,StencilRef) \ ( (This)->lpVtbl -> OMSetDepthStencilState(This,pDepthStencilState,StencilRef) ) #define ID3D11DeviceContext_SOSetTargets(This,NumBuffers,ppSOTargets,pOffsets) \ ( (This)->lpVtbl -> SOSetTargets(This,NumBuffers,ppSOTargets,pOffsets) ) #define ID3D11DeviceContext_DrawAuto(This) \ ( (This)->lpVtbl -> DrawAuto(This) ) #define ID3D11DeviceContext_DrawIndexedInstancedIndirect(This,pBufferForArgs,AlignedByteOffsetForArgs) \ ( (This)->lpVtbl -> DrawIndexedInstancedIndirect(This,pBufferForArgs,AlignedByteOffsetForArgs) ) #define ID3D11DeviceContext_DrawInstancedIndirect(This,pBufferForArgs,AlignedByteOffsetForArgs) \ ( (This)->lpVtbl -> DrawInstancedIndirect(This,pBufferForArgs,AlignedByteOffsetForArgs) ) #define ID3D11DeviceContext_Dispatch(This,ThreadGroupCountX,ThreadGroupCountY,ThreadGroupCountZ) \ ( (This)->lpVtbl -> Dispatch(This,ThreadGroupCountX,ThreadGroupCountY,ThreadGroupCountZ) ) #define ID3D11DeviceContext_DispatchIndirect(This,pBufferForArgs,AlignedByteOffsetForArgs) \ ( (This)->lpVtbl -> DispatchIndirect(This,pBufferForArgs,AlignedByteOffsetForArgs) ) #define ID3D11DeviceContext_RSSetState(This,pRasterizerState) \ ( (This)->lpVtbl -> RSSetState(This,pRasterizerState) ) #define ID3D11DeviceContext_RSSetViewports(This,NumViewports,pViewports) \ ( (This)->lpVtbl -> RSSetViewports(This,NumViewports,pViewports) ) #define ID3D11DeviceContext_RSSetScissorRects(This,NumRects,pRects) \ ( (This)->lpVtbl -> RSSetScissorRects(This,NumRects,pRects) ) #define ID3D11DeviceContext_CopySubresourceRegion(This,pDstResource,DstSubresource,DstX,DstY,DstZ,pSrcResource,SrcSubresource,pSrcBox) \ ( (This)->lpVtbl -> CopySubresourceRegion(This,pDstResource,DstSubresource,DstX,DstY,DstZ,pSrcResource,SrcSubresource,pSrcBox) ) #define ID3D11DeviceContext_CopyResource(This,pDstResource,pSrcResource) \ ( (This)->lpVtbl -> CopyResource(This,pDstResource,pSrcResource) ) #define ID3D11DeviceContext_UpdateSubresource(This,pDstResource,DstSubresource,pDstBox,pSrcData,SrcRowPitch,SrcDepthPitch) \ ( (This)->lpVtbl -> UpdateSubresource(This,pDstResource,DstSubresource,pDstBox,pSrcData,SrcRowPitch,SrcDepthPitch) ) #define ID3D11DeviceContext_CopyStructureCount(This,pDstBuffer,DstAlignedByteOffset,pSrcView) \ ( (This)->lpVtbl -> CopyStructureCount(This,pDstBuffer,DstAlignedByteOffset,pSrcView) ) #define ID3D11DeviceContext_ClearRenderTargetView(This,pRenderTargetView,ColorRGBA) \ ( (This)->lpVtbl -> ClearRenderTargetView(This,pRenderTargetView,ColorRGBA) ) #define ID3D11DeviceContext_ClearUnorderedAccessViewUint(This,pUnorderedAccessView,Values) \ ( (This)->lpVtbl -> ClearUnorderedAccessViewUint(This,pUnorderedAccessView,Values) ) #define ID3D11DeviceContext_ClearUnorderedAccessViewFloat(This,pUnorderedAccessView,Values) \ ( (This)->lpVtbl -> ClearUnorderedAccessViewFloat(This,pUnorderedAccessView,Values) ) #define ID3D11DeviceContext_ClearDepthStencilView(This,pDepthStencilView,ClearFlags,Depth,Stencil) \ ( (This)->lpVtbl -> ClearDepthStencilView(This,pDepthStencilView,ClearFlags,Depth,Stencil) ) #define ID3D11DeviceContext_GenerateMips(This,pShaderResourceView) \ ( (This)->lpVtbl -> GenerateMips(This,pShaderResourceView) ) #define ID3D11DeviceContext_SetResourceMinLOD(This,pResource,MinLOD) \ ( (This)->lpVtbl -> SetResourceMinLOD(This,pResource,MinLOD) ) #define ID3D11DeviceContext_GetResourceMinLOD(This,pResource) \ ( (This)->lpVtbl -> GetResourceMinLOD(This,pResource) ) #define ID3D11DeviceContext_ResolveSubresource(This,pDstResource,DstSubresource,pSrcResource,SrcSubresource,Format) \ ( (This)->lpVtbl -> ResolveSubresource(This,pDstResource,DstSubresource,pSrcResource,SrcSubresource,Format) ) #define ID3D11DeviceContext_ExecuteCommandList(This,pCommandList,RestoreContextState) \ ( (This)->lpVtbl -> ExecuteCommandList(This,pCommandList,RestoreContextState) ) #define ID3D11DeviceContext_HSSetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews) \ ( (This)->lpVtbl -> HSSetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews) ) #define ID3D11DeviceContext_HSSetShader(This,pHullShader,ppClassInstances,NumClassInstances) \ ( (This)->lpVtbl -> HSSetShader(This,pHullShader,ppClassInstances,NumClassInstances) ) #define ID3D11DeviceContext_HSSetSamplers(This,StartSlot,NumSamplers,ppSamplers) \ ( (This)->lpVtbl -> HSSetSamplers(This,StartSlot,NumSamplers,ppSamplers) ) #define ID3D11DeviceContext_HSSetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers) \ ( (This)->lpVtbl -> HSSetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers) ) #define ID3D11DeviceContext_DSSetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews) \ ( (This)->lpVtbl -> DSSetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews) ) #define ID3D11DeviceContext_DSSetShader(This,pDomainShader,ppClassInstances,NumClassInstances) \ ( (This)->lpVtbl -> DSSetShader(This,pDomainShader,ppClassInstances,NumClassInstances) ) #define ID3D11DeviceContext_DSSetSamplers(This,StartSlot,NumSamplers,ppSamplers) \ ( (This)->lpVtbl -> DSSetSamplers(This,StartSlot,NumSamplers,ppSamplers) ) #define ID3D11DeviceContext_DSSetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers) \ ( (This)->lpVtbl -> DSSetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers) ) #define ID3D11DeviceContext_CSSetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews) \ ( (This)->lpVtbl -> CSSetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews) ) #define ID3D11DeviceContext_CSSetUnorderedAccessViews(This,StartSlot,NumUAVs,ppUnorderedAccessViews,pUAVInitialCounts) \ ( (This)->lpVtbl -> CSSetUnorderedAccessViews(This,StartSlot,NumUAVs,ppUnorderedAccessViews,pUAVInitialCounts) ) #define ID3D11DeviceContext_CSSetShader(This,pComputeShader,ppClassInstances,NumClassInstances) \ ( (This)->lpVtbl -> CSSetShader(This,pComputeShader,ppClassInstances,NumClassInstances) ) #define ID3D11DeviceContext_CSSetSamplers(This,StartSlot,NumSamplers,ppSamplers) \ ( (This)->lpVtbl -> CSSetSamplers(This,StartSlot,NumSamplers,ppSamplers) ) #define ID3D11DeviceContext_CSSetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers) \ ( (This)->lpVtbl -> CSSetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers) ) #define ID3D11DeviceContext_VSGetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers) \ ( (This)->lpVtbl -> VSGetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers) ) #define ID3D11DeviceContext_PSGetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews) \ ( (This)->lpVtbl -> PSGetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews) ) #define ID3D11DeviceContext_PSGetShader(This,ppPixelShader,ppClassInstances,pNumClassInstances) \ ( (This)->lpVtbl -> PSGetShader(This,ppPixelShader,ppClassInstances,pNumClassInstances) ) #define ID3D11DeviceContext_PSGetSamplers(This,StartSlot,NumSamplers,ppSamplers) \ ( (This)->lpVtbl -> PSGetSamplers(This,StartSlot,NumSamplers,ppSamplers) ) #define ID3D11DeviceContext_VSGetShader(This,ppVertexShader,ppClassInstances,pNumClassInstances) \ ( (This)->lpVtbl -> VSGetShader(This,ppVertexShader,ppClassInstances,pNumClassInstances) ) #define ID3D11DeviceContext_PSGetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers) \ ( (This)->lpVtbl -> PSGetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers) ) #define ID3D11DeviceContext_IAGetInputLayout(This,ppInputLayout) \ ( (This)->lpVtbl -> IAGetInputLayout(This,ppInputLayout) ) #define ID3D11DeviceContext_IAGetVertexBuffers(This,StartSlot,NumBuffers,ppVertexBuffers,pStrides,pOffsets) \ ( (This)->lpVtbl -> IAGetVertexBuffers(This,StartSlot,NumBuffers,ppVertexBuffers,pStrides,pOffsets) ) #define ID3D11DeviceContext_IAGetIndexBuffer(This,pIndexBuffer,Format,Offset) \ ( (This)->lpVtbl -> IAGetIndexBuffer(This,pIndexBuffer,Format,Offset) ) #define ID3D11DeviceContext_GSGetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers) \ ( (This)->lpVtbl -> GSGetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers) ) #define ID3D11DeviceContext_GSGetShader(This,ppGeometryShader,ppClassInstances,pNumClassInstances) \ ( (This)->lpVtbl -> GSGetShader(This,ppGeometryShader,ppClassInstances,pNumClassInstances) ) #define ID3D11DeviceContext_IAGetPrimitiveTopology(This,pTopology) \ ( (This)->lpVtbl -> IAGetPrimitiveTopology(This,pTopology) ) #define ID3D11DeviceContext_VSGetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews) \ ( (This)->lpVtbl -> VSGetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews) ) #define ID3D11DeviceContext_VSGetSamplers(This,StartSlot,NumSamplers,ppSamplers) \ ( (This)->lpVtbl -> VSGetSamplers(This,StartSlot,NumSamplers,ppSamplers) ) #define ID3D11DeviceContext_GetPredication(This,ppPredicate,pPredicateValue) \ ( (This)->lpVtbl -> GetPredication(This,ppPredicate,pPredicateValue) ) #define ID3D11DeviceContext_GSGetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews) \ ( (This)->lpVtbl -> GSGetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews) ) #define ID3D11DeviceContext_GSGetSamplers(This,StartSlot,NumSamplers,ppSamplers) \ ( (This)->lpVtbl -> GSGetSamplers(This,StartSlot,NumSamplers,ppSamplers) ) #define ID3D11DeviceContext_OMGetRenderTargets(This,NumViews,ppRenderTargetViews,ppDepthStencilView) \ ( (This)->lpVtbl -> OMGetRenderTargets(This,NumViews,ppRenderTargetViews,ppDepthStencilView) ) #define ID3D11DeviceContext_OMGetRenderTargetsAndUnorderedAccessViews(This,NumRTVs,ppRenderTargetViews,ppDepthStencilView,UAVStartSlot,NumUAVs,ppUnorderedAccessViews) \ ( (This)->lpVtbl -> OMGetRenderTargetsAndUnorderedAccessViews(This,NumRTVs,ppRenderTargetViews,ppDepthStencilView,UAVStartSlot,NumUAVs,ppUnorderedAccessViews) ) #define ID3D11DeviceContext_OMGetBlendState(This,ppBlendState,BlendFactor,pSampleMask) \ ( (This)->lpVtbl -> OMGetBlendState(This,ppBlendState,BlendFactor,pSampleMask) ) #define ID3D11DeviceContext_OMGetDepthStencilState(This,ppDepthStencilState,pStencilRef) \ ( (This)->lpVtbl -> OMGetDepthStencilState(This,ppDepthStencilState,pStencilRef) ) #define ID3D11DeviceContext_SOGetTargets(This,NumBuffers,ppSOTargets) \ ( (This)->lpVtbl -> SOGetTargets(This,NumBuffers,ppSOTargets) ) #define ID3D11DeviceContext_RSGetState(This,ppRasterizerState) \ ( (This)->lpVtbl -> RSGetState(This,ppRasterizerState) ) #define ID3D11DeviceContext_RSGetViewports(This,pNumViewports,pViewports) \ ( (This)->lpVtbl -> RSGetViewports(This,pNumViewports,pViewports) ) #define ID3D11DeviceContext_RSGetScissorRects(This,pNumRects,pRects) \ ( (This)->lpVtbl -> RSGetScissorRects(This,pNumRects,pRects) ) #define ID3D11DeviceContext_HSGetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews) \ ( (This)->lpVtbl -> HSGetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews) ) #define ID3D11DeviceContext_HSGetShader(This,ppHullShader,ppClassInstances,pNumClassInstances) \ ( (This)->lpVtbl -> HSGetShader(This,ppHullShader,ppClassInstances,pNumClassInstances) ) #define ID3D11DeviceContext_HSGetSamplers(This,StartSlot,NumSamplers,ppSamplers) \ ( (This)->lpVtbl -> HSGetSamplers(This,StartSlot,NumSamplers,ppSamplers) ) #define ID3D11DeviceContext_HSGetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers) \ ( (This)->lpVtbl -> HSGetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers) ) #define ID3D11DeviceContext_DSGetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews) \ ( (This)->lpVtbl -> DSGetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews) ) #define ID3D11DeviceContext_DSGetShader(This,ppDomainShader,ppClassInstances,pNumClassInstances) \ ( (This)->lpVtbl -> DSGetShader(This,ppDomainShader,ppClassInstances,pNumClassInstances) ) #define ID3D11DeviceContext_DSGetSamplers(This,StartSlot,NumSamplers,ppSamplers) \ ( (This)->lpVtbl -> DSGetSamplers(This,StartSlot,NumSamplers,ppSamplers) ) #define ID3D11DeviceContext_DSGetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers) \ ( (This)->lpVtbl -> DSGetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers) ) #define ID3D11DeviceContext_CSGetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews) \ ( (This)->lpVtbl -> CSGetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews) ) #define ID3D11DeviceContext_CSGetUnorderedAccessViews(This,StartSlot,NumUAVs,ppUnorderedAccessViews) \ ( (This)->lpVtbl -> CSGetUnorderedAccessViews(This,StartSlot,NumUAVs,ppUnorderedAccessViews) ) #define ID3D11DeviceContext_CSGetShader(This,ppComputeShader,ppClassInstances,pNumClassInstances) \ ( (This)->lpVtbl -> CSGetShader(This,ppComputeShader,ppClassInstances,pNumClassInstances) ) #define ID3D11DeviceContext_CSGetSamplers(This,StartSlot,NumSamplers,ppSamplers) \ ( (This)->lpVtbl -> CSGetSamplers(This,StartSlot,NumSamplers,ppSamplers) ) #define ID3D11DeviceContext_CSGetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers) \ ( (This)->lpVtbl -> CSGetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers) ) #define ID3D11DeviceContext_ClearState(This) \ ( (This)->lpVtbl -> ClearState(This) ) #define ID3D11DeviceContext_Flush(This) \ ( (This)->lpVtbl -> Flush(This) ) #define ID3D11DeviceContext_GetType(This) \ ( (This)->lpVtbl -> GetType(This) ) #define ID3D11DeviceContext_GetContextFlags(This) \ ( (This)->lpVtbl -> GetContextFlags(This) ) #define ID3D11DeviceContext_FinishCommandList(This,RestoreDeferredContextState,ppCommandList) \ ( (This)->lpVtbl -> FinishCommandList(This,RestoreDeferredContextState,ppCommandList) ) #endif /* COBJMACROS */ #endif /* C style interface */ #endif /* __ID3D11DeviceContext_INTERFACE_DEFINED__ */ #ifndef __ID3D11Device_INTERFACE_DEFINED__ #define __ID3D11Device_INTERFACE_DEFINED__ /* interface ID3D11Device */ /* [unique][local][object][uuid] */ EXTERN_C const IID IID_ID3D11Device; #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("db6f6ddb-ac77-4e88-8253-819df9bbf140") ID3D11Device : public IUnknown { public: virtual HRESULT STDMETHODCALLTYPE CreateBuffer( /* [annotation] */ __in const D3D11_BUFFER_DESC *pDesc, /* [annotation] */ __in_opt const D3D11_SUBRESOURCE_DATA *pInitialData, /* [annotation] */ __out_opt ID3D11Buffer **ppBuffer) = 0; virtual HRESULT STDMETHODCALLTYPE CreateTexture1D( /* [annotation] */ __in const D3D11_TEXTURE1D_DESC *pDesc, /* [annotation] */ __in_xcount_opt(pDesc->MipLevels * pDesc->ArraySize) const D3D11_SUBRESOURCE_DATA *pInitialData, /* [annotation] */ __out_opt ID3D11Texture1D **ppTexture1D) = 0; virtual HRESULT STDMETHODCALLTYPE CreateTexture2D( /* [annotation] */ __in const D3D11_TEXTURE2D_DESC *pDesc, /* [annotation] */ __in_xcount_opt(pDesc->MipLevels * pDesc->ArraySize) const D3D11_SUBRESOURCE_DATA *pInitialData, /* [annotation] */ __out_opt ID3D11Texture2D **ppTexture2D) = 0; virtual HRESULT STDMETHODCALLTYPE CreateTexture3D( /* [annotation] */ __in const D3D11_TEXTURE3D_DESC *pDesc, /* [annotation] */ __in_xcount_opt(pDesc->MipLevels) const D3D11_SUBRESOURCE_DATA *pInitialData, /* [annotation] */ __out_opt ID3D11Texture3D **ppTexture3D) = 0; virtual HRESULT STDMETHODCALLTYPE CreateShaderResourceView( /* [annotation] */ __in ID3D11Resource *pResource, /* [annotation] */ __in_opt const D3D11_SHADER_RESOURCE_VIEW_DESC *pDesc, /* [annotation] */ __out_opt ID3D11ShaderResourceView **ppSRView) = 0; virtual HRESULT STDMETHODCALLTYPE CreateUnorderedAccessView( /* [annotation] */ __in ID3D11Resource *pResource, /* [annotation] */ __in_opt const D3D11_UNORDERED_ACCESS_VIEW_DESC *pDesc, /* [annotation] */ __out_opt ID3D11UnorderedAccessView **ppUAView) = 0; virtual HRESULT STDMETHODCALLTYPE CreateRenderTargetView( /* [annotation] */ __in ID3D11Resource *pResource, /* [annotation] */ __in_opt const D3D11_RENDER_TARGET_VIEW_DESC *pDesc, /* [annotation] */ __out_opt ID3D11RenderTargetView **ppRTView) = 0; virtual HRESULT STDMETHODCALLTYPE CreateDepthStencilView( /* [annotation] */ __in ID3D11Resource *pResource, /* [annotation] */ __in_opt const D3D11_DEPTH_STENCIL_VIEW_DESC *pDesc, /* [annotation] */ __out_opt ID3D11DepthStencilView **ppDepthStencilView) = 0; virtual HRESULT STDMETHODCALLTYPE CreateInputLayout( /* [annotation] */ __in_ecount(NumElements) const D3D11_INPUT_ELEMENT_DESC *pInputElementDescs, /* [annotation] */ __in_range( 0, D3D11_IA_VERTEX_INPUT_STRUCTURE_ELEMENT_COUNT ) UINT NumElements, /* [annotation] */ __in const void *pShaderBytecodeWithInputSignature, /* [annotation] */ __in SIZE_T BytecodeLength, /* [annotation] */ __out_opt ID3D11InputLayout **ppInputLayout) = 0; virtual HRESULT STDMETHODCALLTYPE CreateVertexShader( /* [annotation] */ __in const void *pShaderBytecode, /* [annotation] */ __in SIZE_T BytecodeLength, /* [annotation] */ __in_opt ID3D11ClassLinkage *pClassLinkage, /* [annotation] */ __out_opt ID3D11VertexShader **ppVertexShader) = 0; virtual HRESULT STDMETHODCALLTYPE CreateGeometryShader( /* [annotation] */ __in const void *pShaderBytecode, /* [annotation] */ __in SIZE_T BytecodeLength, /* [annotation] */ __in_opt ID3D11ClassLinkage *pClassLinkage, /* [annotation] */ __out_opt ID3D11GeometryShader **ppGeometryShader) = 0; virtual HRESULT STDMETHODCALLTYPE CreateGeometryShaderWithStreamOutput( /* [annotation] */ __in const void *pShaderBytecode, /* [annotation] */ __in SIZE_T BytecodeLength, /* [annotation] */ __in_ecount_opt(NumEntries) const D3D11_SO_DECLARATION_ENTRY *pSODeclaration, /* [annotation] */ __in_range( 0, D3D11_SO_STREAM_COUNT * D3D11_SO_OUTPUT_COMPONENT_COUNT ) UINT NumEntries, /* [annotation] */ __in_ecount_opt(NumStrides) const UINT *pBufferStrides, /* [annotation] */ __in_range( 0, D3D11_SO_BUFFER_SLOT_COUNT ) UINT NumStrides, /* [annotation] */ __in UINT RasterizedStream, /* [annotation] */ __in_opt ID3D11ClassLinkage *pClassLinkage, /* [annotation] */ __out_opt ID3D11GeometryShader **ppGeometryShader) = 0; virtual HRESULT STDMETHODCALLTYPE CreatePixelShader( /* [annotation] */ __in const void *pShaderBytecode, /* [annotation] */ __in SIZE_T BytecodeLength, /* [annotation] */ __in_opt ID3D11ClassLinkage *pClassLinkage, /* [annotation] */ __out_opt ID3D11PixelShader **ppPixelShader) = 0; virtual HRESULT STDMETHODCALLTYPE CreateHullShader( /* [annotation] */ __in const void *pShaderBytecode, /* [annotation] */ __in SIZE_T BytecodeLength, /* [annotation] */ __in_opt ID3D11ClassLinkage *pClassLinkage, /* [annotation] */ __out_opt ID3D11HullShader **ppHullShader) = 0; virtual HRESULT STDMETHODCALLTYPE CreateDomainShader( /* [annotation] */ __in const void *pShaderBytecode, /* [annotation] */ __in SIZE_T BytecodeLength, /* [annotation] */ __in_opt ID3D11ClassLinkage *pClassLinkage, /* [annotation] */ __out_opt ID3D11DomainShader **ppDomainShader) = 0; virtual HRESULT STDMETHODCALLTYPE CreateComputeShader( /* [annotation] */ __in const void *pShaderBytecode, /* [annotation] */ __in SIZE_T BytecodeLength, /* [annotation] */ __in_opt ID3D11ClassLinkage *pClassLinkage, /* [annotation] */ __out_opt ID3D11ComputeShader **ppComputeShader) = 0; virtual HRESULT STDMETHODCALLTYPE CreateClassLinkage( /* [annotation] */ __out ID3D11ClassLinkage **ppLinkage) = 0; virtual HRESULT STDMETHODCALLTYPE CreateBlendState( /* [annotation] */ __in const D3D11_BLEND_DESC *pBlendStateDesc, /* [annotation] */ __out_opt ID3D11BlendState **ppBlendState) = 0; virtual HRESULT STDMETHODCALLTYPE CreateDepthStencilState( /* [annotation] */ __in const D3D11_DEPTH_STENCIL_DESC *pDepthStencilDesc, /* [annotation] */ __out_opt ID3D11DepthStencilState **ppDepthStencilState) = 0; virtual HRESULT STDMETHODCALLTYPE CreateRasterizerState( /* [annotation] */ __in const D3D11_RASTERIZER_DESC *pRasterizerDesc, /* [annotation] */ __out_opt ID3D11RasterizerState **ppRasterizerState) = 0; virtual HRESULT STDMETHODCALLTYPE CreateSamplerState( /* [annotation] */ __in const D3D11_SAMPLER_DESC *pSamplerDesc, /* [annotation] */ __out_opt ID3D11SamplerState **ppSamplerState) = 0; virtual HRESULT STDMETHODCALLTYPE CreateQuery( /* [annotation] */ __in const D3D11_QUERY_DESC *pQueryDesc, /* [annotation] */ __out_opt ID3D11Query **ppQuery) = 0; virtual HRESULT STDMETHODCALLTYPE CreatePredicate( /* [annotation] */ __in const D3D11_QUERY_DESC *pPredicateDesc, /* [annotation] */ __out_opt ID3D11Predicate **ppPredicate) = 0; virtual HRESULT STDMETHODCALLTYPE CreateCounter( /* [annotation] */ __in const D3D11_COUNTER_DESC *pCounterDesc, /* [annotation] */ __out_opt ID3D11Counter **ppCounter) = 0; virtual HRESULT STDMETHODCALLTYPE CreateDeferredContext( UINT ContextFlags, /* [annotation] */ __out_opt ID3D11DeviceContext **ppDeferredContext) = 0; virtual HRESULT STDMETHODCALLTYPE OpenSharedResource( /* [annotation] */ __in HANDLE hResource, /* [annotation] */ __in REFIID ReturnedInterface, /* [annotation] */ __out_opt void **ppResource) = 0; virtual HRESULT STDMETHODCALLTYPE CheckFormatSupport( /* [annotation] */ __in DXGI_FORMAT Format, /* [annotation] */ __out UINT *pFormatSupport) = 0; virtual HRESULT STDMETHODCALLTYPE CheckMultisampleQualityLevels( /* [annotation] */ __in DXGI_FORMAT Format, /* [annotation] */ __in UINT SampleCount, /* [annotation] */ __out UINT *pNumQualityLevels) = 0; virtual void STDMETHODCALLTYPE CheckCounterInfo( /* [annotation] */ __out D3D11_COUNTER_INFO *pCounterInfo) = 0; virtual HRESULT STDMETHODCALLTYPE CheckCounter( /* [annotation] */ __in const D3D11_COUNTER_DESC *pDesc, /* [annotation] */ __out D3D11_COUNTER_TYPE *pType, /* [annotation] */ __out UINT *pActiveCounters, /* [annotation] */ __out_ecount_opt(*pNameLength) LPSTR szName, /* [annotation] */ __inout_opt UINT *pNameLength, /* [annotation] */ __out_ecount_opt(*pUnitsLength) LPSTR szUnits, /* [annotation] */ __inout_opt UINT *pUnitsLength, /* [annotation] */ __out_ecount_opt(*pDescriptionLength) LPSTR szDescription, /* [annotation] */ __inout_opt UINT *pDescriptionLength) = 0; virtual HRESULT STDMETHODCALLTYPE CheckFeatureSupport( D3D11_FEATURE Feature, /* [annotation] */ __out_bcount(FeatureSupportDataSize) void *pFeatureSupportData, UINT FeatureSupportDataSize) = 0; virtual HRESULT STDMETHODCALLTYPE GetPrivateData( /* [annotation] */ __in REFGUID guid, /* [annotation] */ __inout UINT *pDataSize, /* [annotation] */ __out_bcount_opt(*pDataSize) void *pData) = 0; virtual HRESULT STDMETHODCALLTYPE SetPrivateData( /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in UINT DataSize, /* [annotation] */ __in_bcount_opt(DataSize) const void *pData) = 0; virtual HRESULT STDMETHODCALLTYPE SetPrivateDataInterface( /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in_opt const IUnknown *pData) = 0; virtual D3D_FEATURE_LEVEL STDMETHODCALLTYPE GetFeatureLevel( void) = 0; virtual UINT STDMETHODCALLTYPE GetCreationFlags( void) = 0; virtual HRESULT STDMETHODCALLTYPE GetDeviceRemovedReason( void) = 0; virtual void STDMETHODCALLTYPE GetImmediateContext( /* [annotation] */ __out ID3D11DeviceContext **ppImmediateContext) = 0; virtual HRESULT STDMETHODCALLTYPE SetExceptionMode( UINT RaiseFlags) = 0; virtual UINT STDMETHODCALLTYPE GetExceptionMode( void) = 0; }; #else /* C style interface */ typedef struct ID3D11DeviceVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ID3D11Device * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ __RPC__deref_out void **ppvObject); ULONG ( STDMETHODCALLTYPE *AddRef )( ID3D11Device * This); ULONG ( STDMETHODCALLTYPE *Release )( ID3D11Device * This); HRESULT ( STDMETHODCALLTYPE *CreateBuffer )( ID3D11Device * This, /* [annotation] */ __in const D3D11_BUFFER_DESC *pDesc, /* [annotation] */ __in_opt const D3D11_SUBRESOURCE_DATA *pInitialData, /* [annotation] */ __out_opt ID3D11Buffer **ppBuffer); HRESULT ( STDMETHODCALLTYPE *CreateTexture1D )( ID3D11Device * This, /* [annotation] */ __in const D3D11_TEXTURE1D_DESC *pDesc, /* [annotation] */ __in_xcount_opt(pDesc->MipLevels * pDesc->ArraySize) const D3D11_SUBRESOURCE_DATA *pInitialData, /* [annotation] */ __out_opt ID3D11Texture1D **ppTexture1D); HRESULT ( STDMETHODCALLTYPE *CreateTexture2D )( ID3D11Device * This, /* [annotation] */ __in const D3D11_TEXTURE2D_DESC *pDesc, /* [annotation] */ __in_xcount_opt(pDesc->MipLevels * pDesc->ArraySize) const D3D11_SUBRESOURCE_DATA *pInitialData, /* [annotation] */ __out_opt ID3D11Texture2D **ppTexture2D); HRESULT ( STDMETHODCALLTYPE *CreateTexture3D )( ID3D11Device * This, /* [annotation] */ __in const D3D11_TEXTURE3D_DESC *pDesc, /* [annotation] */ __in_xcount_opt(pDesc->MipLevels) const D3D11_SUBRESOURCE_DATA *pInitialData, /* [annotation] */ __out_opt ID3D11Texture3D **ppTexture3D); HRESULT ( STDMETHODCALLTYPE *CreateShaderResourceView )( ID3D11Device * This, /* [annotation] */ __in ID3D11Resource *pResource, /* [annotation] */ __in_opt const D3D11_SHADER_RESOURCE_VIEW_DESC *pDesc, /* [annotation] */ __out_opt ID3D11ShaderResourceView **ppSRView); HRESULT ( STDMETHODCALLTYPE *CreateUnorderedAccessView )( ID3D11Device * This, /* [annotation] */ __in ID3D11Resource *pResource, /* [annotation] */ __in_opt const D3D11_UNORDERED_ACCESS_VIEW_DESC *pDesc, /* [annotation] */ __out_opt ID3D11UnorderedAccessView **ppUAView); HRESULT ( STDMETHODCALLTYPE *CreateRenderTargetView )( ID3D11Device * This, /* [annotation] */ __in ID3D11Resource *pResource, /* [annotation] */ __in_opt const D3D11_RENDER_TARGET_VIEW_DESC *pDesc, /* [annotation] */ __out_opt ID3D11RenderTargetView **ppRTView); HRESULT ( STDMETHODCALLTYPE *CreateDepthStencilView )( ID3D11Device * This, /* [annotation] */ __in ID3D11Resource *pResource, /* [annotation] */ __in_opt const D3D11_DEPTH_STENCIL_VIEW_DESC *pDesc, /* [annotation] */ __out_opt ID3D11DepthStencilView **ppDepthStencilView); HRESULT ( STDMETHODCALLTYPE *CreateInputLayout )( ID3D11Device * This, /* [annotation] */ __in_ecount(NumElements) const D3D11_INPUT_ELEMENT_DESC *pInputElementDescs, /* [annotation] */ __in_range( 0, D3D11_IA_VERTEX_INPUT_STRUCTURE_ELEMENT_COUNT ) UINT NumElements, /* [annotation] */ __in const void *pShaderBytecodeWithInputSignature, /* [annotation] */ __in SIZE_T BytecodeLength, /* [annotation] */ __out_opt ID3D11InputLayout **ppInputLayout); HRESULT ( STDMETHODCALLTYPE *CreateVertexShader )( ID3D11Device * This, /* [annotation] */ __in const void *pShaderBytecode, /* [annotation] */ __in SIZE_T BytecodeLength, /* [annotation] */ __in_opt ID3D11ClassLinkage *pClassLinkage, /* [annotation] */ __out_opt ID3D11VertexShader **ppVertexShader); HRESULT ( STDMETHODCALLTYPE *CreateGeometryShader )( ID3D11Device * This, /* [annotation] */ __in const void *pShaderBytecode, /* [annotation] */ __in SIZE_T BytecodeLength, /* [annotation] */ __in_opt ID3D11ClassLinkage *pClassLinkage, /* [annotation] */ __out_opt ID3D11GeometryShader **ppGeometryShader); HRESULT ( STDMETHODCALLTYPE *CreateGeometryShaderWithStreamOutput )( ID3D11Device * This, /* [annotation] */ __in const void *pShaderBytecode, /* [annotation] */ __in SIZE_T BytecodeLength, /* [annotation] */ __in_ecount_opt(NumEntries) const D3D11_SO_DECLARATION_ENTRY *pSODeclaration, /* [annotation] */ __in_range( 0, D3D11_SO_STREAM_COUNT * D3D11_SO_OUTPUT_COMPONENT_COUNT ) UINT NumEntries, /* [annotation] */ __in_ecount_opt(NumStrides) const UINT *pBufferStrides, /* [annotation] */ __in_range( 0, D3D11_SO_BUFFER_SLOT_COUNT ) UINT NumStrides, /* [annotation] */ __in UINT RasterizedStream, /* [annotation] */ __in_opt ID3D11ClassLinkage *pClassLinkage, /* [annotation] */ __out_opt ID3D11GeometryShader **ppGeometryShader); HRESULT ( STDMETHODCALLTYPE *CreatePixelShader )( ID3D11Device * This, /* [annotation] */ __in const void *pShaderBytecode, /* [annotation] */ __in SIZE_T BytecodeLength, /* [annotation] */ __in_opt ID3D11ClassLinkage *pClassLinkage, /* [annotation] */ __out_opt ID3D11PixelShader **ppPixelShader); HRESULT ( STDMETHODCALLTYPE *CreateHullShader )( ID3D11Device * This, /* [annotation] */ __in const void *pShaderBytecode, /* [annotation] */ __in SIZE_T BytecodeLength, /* [annotation] */ __in_opt ID3D11ClassLinkage *pClassLinkage, /* [annotation] */ __out_opt ID3D11HullShader **ppHullShader); HRESULT ( STDMETHODCALLTYPE *CreateDomainShader )( ID3D11Device * This, /* [annotation] */ __in const void *pShaderBytecode, /* [annotation] */ __in SIZE_T BytecodeLength, /* [annotation] */ __in_opt ID3D11ClassLinkage *pClassLinkage, /* [annotation] */ __out_opt ID3D11DomainShader **ppDomainShader); HRESULT ( STDMETHODCALLTYPE *CreateComputeShader )( ID3D11Device * This, /* [annotation] */ __in const void *pShaderBytecode, /* [annotation] */ __in SIZE_T BytecodeLength, /* [annotation] */ __in_opt ID3D11ClassLinkage *pClassLinkage, /* [annotation] */ __out_opt ID3D11ComputeShader **ppComputeShader); HRESULT ( STDMETHODCALLTYPE *CreateClassLinkage )( ID3D11Device * This, /* [annotation] */ __out ID3D11ClassLinkage **ppLinkage); HRESULT ( STDMETHODCALLTYPE *CreateBlendState )( ID3D11Device * This, /* [annotation] */ __in const D3D11_BLEND_DESC *pBlendStateDesc, /* [annotation] */ __out_opt ID3D11BlendState **ppBlendState); HRESULT ( STDMETHODCALLTYPE *CreateDepthStencilState )( ID3D11Device * This, /* [annotation] */ __in const D3D11_DEPTH_STENCIL_DESC *pDepthStencilDesc, /* [annotation] */ __out_opt ID3D11DepthStencilState **ppDepthStencilState); HRESULT ( STDMETHODCALLTYPE *CreateRasterizerState )( ID3D11Device * This, /* [annotation] */ __in const D3D11_RASTERIZER_DESC *pRasterizerDesc, /* [annotation] */ __out_opt ID3D11RasterizerState **ppRasterizerState); HRESULT ( STDMETHODCALLTYPE *CreateSamplerState )( ID3D11Device * This, /* [annotation] */ __in const D3D11_SAMPLER_DESC *pSamplerDesc, /* [annotation] */ __out_opt ID3D11SamplerState **ppSamplerState); HRESULT ( STDMETHODCALLTYPE *CreateQuery )( ID3D11Device * This, /* [annotation] */ __in const D3D11_QUERY_DESC *pQueryDesc, /* [annotation] */ __out_opt ID3D11Query **ppQuery); HRESULT ( STDMETHODCALLTYPE *CreatePredicate )( ID3D11Device * This, /* [annotation] */ __in const D3D11_QUERY_DESC *pPredicateDesc, /* [annotation] */ __out_opt ID3D11Predicate **ppPredicate); HRESULT ( STDMETHODCALLTYPE *CreateCounter )( ID3D11Device * This, /* [annotation] */ __in const D3D11_COUNTER_DESC *pCounterDesc, /* [annotation] */ __out_opt ID3D11Counter **ppCounter); HRESULT ( STDMETHODCALLTYPE *CreateDeferredContext )( ID3D11Device * This, UINT ContextFlags, /* [annotation] */ __out_opt ID3D11DeviceContext **ppDeferredContext); HRESULT ( STDMETHODCALLTYPE *OpenSharedResource )( ID3D11Device * This, /* [annotation] */ __in HANDLE hResource, /* [annotation] */ __in REFIID ReturnedInterface, /* [annotation] */ __out_opt void **ppResource); HRESULT ( STDMETHODCALLTYPE *CheckFormatSupport )( ID3D11Device * This, /* [annotation] */ __in DXGI_FORMAT Format, /* [annotation] */ __out UINT *pFormatSupport); HRESULT ( STDMETHODCALLTYPE *CheckMultisampleQualityLevels )( ID3D11Device * This, /* [annotation] */ __in DXGI_FORMAT Format, /* [annotation] */ __in UINT SampleCount, /* [annotation] */ __out UINT *pNumQualityLevels); void ( STDMETHODCALLTYPE *CheckCounterInfo )( ID3D11Device * This, /* [annotation] */ __out D3D11_COUNTER_INFO *pCounterInfo); HRESULT ( STDMETHODCALLTYPE *CheckCounter )( ID3D11Device * This, /* [annotation] */ __in const D3D11_COUNTER_DESC *pDesc, /* [annotation] */ __out D3D11_COUNTER_TYPE *pType, /* [annotation] */ __out UINT *pActiveCounters, /* [annotation] */ __out_ecount_opt(*pNameLength) LPSTR szName, /* [annotation] */ __inout_opt UINT *pNameLength, /* [annotation] */ __out_ecount_opt(*pUnitsLength) LPSTR szUnits, /* [annotation] */ __inout_opt UINT *pUnitsLength, /* [annotation] */ __out_ecount_opt(*pDescriptionLength) LPSTR szDescription, /* [annotation] */ __inout_opt UINT *pDescriptionLength); HRESULT ( STDMETHODCALLTYPE *CheckFeatureSupport )( ID3D11Device * This, D3D11_FEATURE Feature, /* [annotation] */ __out_bcount(FeatureSupportDataSize) void *pFeatureSupportData, UINT FeatureSupportDataSize); HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( ID3D11Device * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __inout UINT *pDataSize, /* [annotation] */ __out_bcount_opt(*pDataSize) void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( ID3D11Device * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in UINT DataSize, /* [annotation] */ __in_bcount_opt(DataSize) const void *pData); HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( ID3D11Device * This, /* [annotation] */ __in REFGUID guid, /* [annotation] */ __in_opt const IUnknown *pData); D3D_FEATURE_LEVEL ( STDMETHODCALLTYPE *GetFeatureLevel )( ID3D11Device * This); UINT ( STDMETHODCALLTYPE *GetCreationFlags )( ID3D11Device * This); HRESULT ( STDMETHODCALLTYPE *GetDeviceRemovedReason )( ID3D11Device * This); void ( STDMETHODCALLTYPE *GetImmediateContext )( ID3D11Device * This, /* [annotation] */ __out ID3D11DeviceContext **ppImmediateContext); HRESULT ( STDMETHODCALLTYPE *SetExceptionMode )( ID3D11Device * This, UINT RaiseFlags); UINT ( STDMETHODCALLTYPE *GetExceptionMode )( ID3D11Device * This); END_INTERFACE } ID3D11DeviceVtbl; interface ID3D11Device { CONST_VTBL struct ID3D11DeviceVtbl *lpVtbl; }; #ifdef COBJMACROS #define ID3D11Device_QueryInterface(This,riid,ppvObject) \ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) #define ID3D11Device_AddRef(This) \ ( (This)->lpVtbl -> AddRef(This) ) #define ID3D11Device_Release(This) \ ( (This)->lpVtbl -> Release(This) ) #define ID3D11Device_CreateBuffer(This,pDesc,pInitialData,ppBuffer) \ ( (This)->lpVtbl -> CreateBuffer(This,pDesc,pInitialData,ppBuffer) ) #define ID3D11Device_CreateTexture1D(This,pDesc,pInitialData,ppTexture1D) \ ( (This)->lpVtbl -> CreateTexture1D(This,pDesc,pInitialData,ppTexture1D) ) #define ID3D11Device_CreateTexture2D(This,pDesc,pInitialData,ppTexture2D) \ ( (This)->lpVtbl -> CreateTexture2D(This,pDesc,pInitialData,ppTexture2D) ) #define ID3D11Device_CreateTexture3D(This,pDesc,pInitialData,ppTexture3D) \ ( (This)->lpVtbl -> CreateTexture3D(This,pDesc,pInitialData,ppTexture3D) ) #define ID3D11Device_CreateShaderResourceView(This,pResource,pDesc,ppSRView) \ ( (This)->lpVtbl -> CreateShaderResourceView(This,pResource,pDesc,ppSRView) ) #define ID3D11Device_CreateUnorderedAccessView(This,pResource,pDesc,ppUAView) \ ( (This)->lpVtbl -> CreateUnorderedAccessView(This,pResource,pDesc,ppUAView) ) #define ID3D11Device_CreateRenderTargetView(This,pResource,pDesc,ppRTView) \ ( (This)->lpVtbl -> CreateRenderTargetView(This,pResource,pDesc,ppRTView) ) #define ID3D11Device_CreateDepthStencilView(This,pResource,pDesc,ppDepthStencilView) \ ( (This)->lpVtbl -> CreateDepthStencilView(This,pResource,pDesc,ppDepthStencilView) ) #define ID3D11Device_CreateInputLayout(This,pInputElementDescs,NumElements,pShaderBytecodeWithInputSignature,BytecodeLength,ppInputLayout) \ ( (This)->lpVtbl -> CreateInputLayout(This,pInputElementDescs,NumElements,pShaderBytecodeWithInputSignature,BytecodeLength,ppInputLayout) ) #define ID3D11Device_CreateVertexShader(This,pShaderBytecode,BytecodeLength,pClassLinkage,ppVertexShader) \ ( (This)->lpVtbl -> CreateVertexShader(This,pShaderBytecode,BytecodeLength,pClassLinkage,ppVertexShader) ) #define ID3D11Device_CreateGeometryShader(This,pShaderBytecode,BytecodeLength,pClassLinkage,ppGeometryShader) \ ( (This)->lpVtbl -> CreateGeometryShader(This,pShaderBytecode,BytecodeLength,pClassLinkage,ppGeometryShader) ) #define ID3D11Device_CreateGeometryShaderWithStreamOutput(This,pShaderBytecode,BytecodeLength,pSODeclaration,NumEntries,pBufferStrides,NumStrides,RasterizedStream,pClassLinkage,ppGeometryShader) \ ( (This)->lpVtbl -> CreateGeometryShaderWithStreamOutput(This,pShaderBytecode,BytecodeLength,pSODeclaration,NumEntries,pBufferStrides,NumStrides,RasterizedStream,pClassLinkage,ppGeometryShader) ) #define ID3D11Device_CreatePixelShader(This,pShaderBytecode,BytecodeLength,pClassLinkage,ppPixelShader) \ ( (This)->lpVtbl -> CreatePixelShader(This,pShaderBytecode,BytecodeLength,pClassLinkage,ppPixelShader) ) #define ID3D11Device_CreateHullShader(This,pShaderBytecode,BytecodeLength,pClassLinkage,ppHullShader) \ ( (This)->lpVtbl -> CreateHullShader(This,pShaderBytecode,BytecodeLength,pClassLinkage,ppHullShader) ) #define ID3D11Device_CreateDomainShader(This,pShaderBytecode,BytecodeLength,pClassLinkage,ppDomainShader) \ ( (This)->lpVtbl -> CreateDomainShader(This,pShaderBytecode,BytecodeLength,pClassLinkage,ppDomainShader) ) #define ID3D11Device_CreateComputeShader(This,pShaderBytecode,BytecodeLength,pClassLinkage,ppComputeShader) \ ( (This)->lpVtbl -> CreateComputeShader(This,pShaderBytecode,BytecodeLength,pClassLinkage,ppComputeShader) ) #define ID3D11Device_CreateClassLinkage(This,ppLinkage) \ ( (This)->lpVtbl -> CreateClassLinkage(This,ppLinkage) ) #define ID3D11Device_CreateBlendState(This,pBlendStateDesc,ppBlendState) \ ( (This)->lpVtbl -> CreateBlendState(This,pBlendStateDesc,ppBlendState) ) #define ID3D11Device_CreateDepthStencilState(This,pDepthStencilDesc,ppDepthStencilState) \ ( (This)->lpVtbl -> CreateDepthStencilState(This,pDepthStencilDesc,ppDepthStencilState) ) #define ID3D11Device_CreateRasterizerState(This,pRasterizerDesc,ppRasterizerState) \ ( (This)->lpVtbl -> CreateRasterizerState(This,pRasterizerDesc,ppRasterizerState) ) #define ID3D11Device_CreateSamplerState(This,pSamplerDesc,ppSamplerState) \ ( (This)->lpVtbl -> CreateSamplerState(This,pSamplerDesc,ppSamplerState) ) #define ID3D11Device_CreateQuery(This,pQueryDesc,ppQuery) \ ( (This)->lpVtbl -> CreateQuery(This,pQueryDesc,ppQuery) ) #define ID3D11Device_CreatePredicate(This,pPredicateDesc,ppPredicate) \ ( (This)->lpVtbl -> CreatePredicate(This,pPredicateDesc,ppPredicate) ) #define ID3D11Device_CreateCounter(This,pCounterDesc,ppCounter) \ ( (This)->lpVtbl -> CreateCounter(This,pCounterDesc,ppCounter) ) #define ID3D11Device_CreateDeferredContext(This,ContextFlags,ppDeferredContext) \ ( (This)->lpVtbl -> CreateDeferredContext(This,ContextFlags,ppDeferredContext) ) #define ID3D11Device_OpenSharedResource(This,hResource,ReturnedInterface,ppResource) \ ( (This)->lpVtbl -> OpenSharedResource(This,hResource,ReturnedInterface,ppResource) ) #define ID3D11Device_CheckFormatSupport(This,Format,pFormatSupport) \ ( (This)->lpVtbl -> CheckFormatSupport(This,Format,pFormatSupport) ) #define ID3D11Device_CheckMultisampleQualityLevels(This,Format,SampleCount,pNumQualityLevels) \ ( (This)->lpVtbl -> CheckMultisampleQualityLevels(This,Format,SampleCount,pNumQualityLevels) ) #define ID3D11Device_CheckCounterInfo(This,pCounterInfo) \ ( (This)->lpVtbl -> CheckCounterInfo(This,pCounterInfo) ) #define ID3D11Device_CheckCounter(This,pDesc,pType,pActiveCounters,szName,pNameLength,szUnits,pUnitsLength,szDescription,pDescriptionLength) \ ( (This)->lpVtbl -> CheckCounter(This,pDesc,pType,pActiveCounters,szName,pNameLength,szUnits,pUnitsLength,szDescription,pDescriptionLength) ) #define ID3D11Device_CheckFeatureSupport(This,Feature,pFeatureSupportData,FeatureSupportDataSize) \ ( (This)->lpVtbl -> CheckFeatureSupport(This,Feature,pFeatureSupportData,FeatureSupportDataSize) ) #define ID3D11Device_GetPrivateData(This,guid,pDataSize,pData) \ ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) #define ID3D11Device_SetPrivateData(This,guid,DataSize,pData) \ ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) #define ID3D11Device_SetPrivateDataInterface(This,guid,pData) \ ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) #define ID3D11Device_GetFeatureLevel(This) \ ( (This)->lpVtbl -> GetFeatureLevel(This) ) #define ID3D11Device_GetCreationFlags(This) \ ( (This)->lpVtbl -> GetCreationFlags(This) ) #define ID3D11Device_GetDeviceRemovedReason(This) \ ( (This)->lpVtbl -> GetDeviceRemovedReason(This) ) #define ID3D11Device_GetImmediateContext(This,ppImmediateContext) \ ( (This)->lpVtbl -> GetImmediateContext(This,ppImmediateContext) ) #define ID3D11Device_SetExceptionMode(This,RaiseFlags) \ ( (This)->lpVtbl -> SetExceptionMode(This,RaiseFlags) ) #define ID3D11Device_GetExceptionMode(This) \ ( (This)->lpVtbl -> GetExceptionMode(This) ) #endif /* COBJMACROS */ #endif /* C style interface */ #endif /* __ID3D11Device_INTERFACE_DEFINED__ */ /* interface __MIDL_itf_d3d11_0000_0031 */ /* [local] */ typedef enum D3D11_CREATE_DEVICE_FLAG { D3D11_CREATE_DEVICE_SINGLETHREADED = 0x1, D3D11_CREATE_DEVICE_DEBUG = 0x2, D3D11_CREATE_DEVICE_SWITCH_TO_REF = 0x4, D3D11_CREATE_DEVICE_PREVENT_INTERNAL_THREADING_OPTIMIZATIONS = 0x8, D3D11_CREATE_DEVICE_BGRA_SUPPORT = 0x20 } D3D11_CREATE_DEVICE_FLAG; #define D3D11_SDK_VERSION ( 7 ) #include "d3d10_1.h" #if !defined( D3D11_IGNORE_SDK_LAYERS ) #include "d3d11sdklayers.h" #endif #include "d3d10misc.h" #include "d3d10shader.h" #include "d3d10effect.h" #include "d3d10_1shader.h" /////////////////////////////////////////////////////////////////////////// // D3D11CreateDevice // ------------------ // // pAdapter // If NULL, D3D11CreateDevice will choose the primary adapter and // create a new instance from a temporarily created IDXGIFactory. // If non-NULL, D3D11CreateDevice will register the appropriate // device, if necessary (via IDXGIAdapter::RegisterDrver), before // creating the device. // DriverType // Specifies the driver type to be created: hardware, reference or // null. // Software // HMODULE of a DLL implementing a software rasterizer. Must be NULL for // non-Software driver types. // Flags // Any of those documented for D3D11CreateDeviceAndSwapChain. // pFeatureLevels // Any of those documented for D3D11CreateDeviceAndSwapChain. // FeatureLevels // Size of feature levels array. // SDKVersion // SDK version. Use the D3D11_SDK_VERSION macro. // ppDevice // Pointer to returned interface. May be NULL. // pFeatureLevel // Pointer to returned feature level. May be NULL. // ppImmediateContext // Pointer to returned interface. May be NULL. // // Return Values // Any of those documented for // CreateDXGIFactory1 // IDXGIFactory::EnumAdapters // IDXGIAdapter::RegisterDriver // D3D11CreateDevice // /////////////////////////////////////////////////////////////////////////// typedef HRESULT (WINAPI* PFN_D3D11_CREATE_DEVICE)( __in_opt IDXGIAdapter*, D3D_DRIVER_TYPE, HMODULE, UINT, __in_ecount_opt( FeatureLevels ) CONST D3D_FEATURE_LEVEL*, UINT FeatureLevels, UINT, __out_opt ID3D11Device**, __out_opt D3D_FEATURE_LEVEL*, __out_opt ID3D11DeviceContext** ); HRESULT WINAPI D3D11CreateDevice( __in_opt IDXGIAdapter* pAdapter, D3D_DRIVER_TYPE DriverType, HMODULE Software, UINT Flags, __in_ecount_opt( FeatureLevels ) CONST D3D_FEATURE_LEVEL* pFeatureLevels, UINT FeatureLevels, UINT SDKVersion, __out_opt ID3D11Device** ppDevice, __out_opt D3D_FEATURE_LEVEL* pFeatureLevel, __out_opt ID3D11DeviceContext** ppImmediateContext ); /////////////////////////////////////////////////////////////////////////// // D3D11CreateDeviceAndSwapChain // ------------------------------ // // ppAdapter // If NULL, D3D11CreateDevice will choose the primary adapter and // create a new instance from a temporarily created IDXGIFactory. // If non-NULL, D3D11CreateDevice will register the appropriate // device, if necessary (via IDXGIAdapter::RegisterDrver), before // creating the device. // DriverType // Specifies the driver type to be created: hardware, reference or // null. // Software // HMODULE of a DLL implementing a software rasterizer. Must be NULL for // non-Software driver types. // Flags // Any of those documented for D3D11CreateDevice. // pFeatureLevels // Array of any of the following: // D3D_FEATURE_LEVEL_11_0 // D3D_FEATURE_LEVEL_10_1 // D3D_FEATURE_LEVEL_10_0 // D3D_FEATURE_LEVEL_9_3 // D3D_FEATURE_LEVEL_9_2 // D3D_FEATURE_LEVEL_9_1 // Order indicates sequence in which instantiation will be attempted. If // NULL, then the implied order is the same as previously listed (i.e. // prefer most features available). // FeatureLevels // Size of feature levels array. // SDKVersion // SDK version. Use the D3D11_SDK_VERSION macro. // pSwapChainDesc // Swap chain description, may be NULL. // ppSwapChain // Pointer to returned interface. May be NULL. // ppDevice // Pointer to returned interface. May be NULL. // pFeatureLevel // Pointer to returned feature level. May be NULL. // ppImmediateContext // Pointer to returned interface. May be NULL. // // Return Values // Any of those documented for // CreateDXGIFactory1 // IDXGIFactory::EnumAdapters // IDXGIAdapter::RegisterDriver // D3D11CreateDevice // IDXGIFactory::CreateSwapChain // /////////////////////////////////////////////////////////////////////////// typedef HRESULT (WINAPI* PFN_D3D11_CREATE_DEVICE_AND_SWAP_CHAIN)( __in_opt IDXGIAdapter*, D3D_DRIVER_TYPE, HMODULE, UINT, __in_ecount_opt( FeatureLevels ) CONST D3D_FEATURE_LEVEL*, UINT FeatureLevels, UINT, __in_opt CONST DXGI_SWAP_CHAIN_DESC*, __out_opt IDXGISwapChain**, __out_opt ID3D11Device**, __out_opt D3D_FEATURE_LEVEL*, __out_opt ID3D11DeviceContext** ); HRESULT WINAPI D3D11CreateDeviceAndSwapChain( __in_opt IDXGIAdapter* pAdapter, D3D_DRIVER_TYPE DriverType, HMODULE Software, UINT Flags, __in_ecount_opt( FeatureLevels ) CONST D3D_FEATURE_LEVEL* pFeatureLevels, UINT FeatureLevels, UINT SDKVersion, __in_opt CONST DXGI_SWAP_CHAIN_DESC* pSwapChainDesc, __out_opt IDXGISwapChain** ppSwapChain, __out_opt ID3D11Device** ppDevice, __out_opt D3D_FEATURE_LEVEL* pFeatureLevel, __out_opt ID3D11DeviceContext** ppImmediateContext ); DEFINE_GUID(IID_ID3D11DeviceChild,0x1841e5c8,0x16b0,0x489b,0xbc,0xc8,0x44,0xcf,0xb0,0xd5,0xde,0xae); DEFINE_GUID(IID_ID3D11DepthStencilState,0x03823efb,0x8d8f,0x4e1c,0x9a,0xa2,0xf6,0x4b,0xb2,0xcb,0xfd,0xf1); DEFINE_GUID(IID_ID3D11BlendState,0x75b68faa,0x347d,0x4159,0x8f,0x45,0xa0,0x64,0x0f,0x01,0xcd,0x9a); DEFINE_GUID(IID_ID3D11RasterizerState,0x9bb4ab81,0xab1a,0x4d8f,0xb5,0x06,0xfc,0x04,0x20,0x0b,0x6e,0xe7); DEFINE_GUID(IID_ID3D11Resource,0xdc8e63f3,0xd12b,0x4952,0xb4,0x7b,0x5e,0x45,0x02,0x6a,0x86,0x2d); DEFINE_GUID(IID_ID3D11Buffer,0x48570b85,0xd1ee,0x4fcd,0xa2,0x50,0xeb,0x35,0x07,0x22,0xb0,0x37); DEFINE_GUID(IID_ID3D11Texture1D,0xf8fb5c27,0xc6b3,0x4f75,0xa4,0xc8,0x43,0x9a,0xf2,0xef,0x56,0x4c); DEFINE_GUID(IID_ID3D11Texture2D,0x6f15aaf2,0xd208,0x4e89,0x9a,0xb4,0x48,0x95,0x35,0xd3,0x4f,0x9c); DEFINE_GUID(IID_ID3D11Texture3D,0x037e866e,0xf56d,0x4357,0xa8,0xaf,0x9d,0xab,0xbe,0x6e,0x25,0x0e); DEFINE_GUID(IID_ID3D11View,0x839d1216,0xbb2e,0x412b,0xb7,0xf4,0xa9,0xdb,0xeb,0xe0,0x8e,0xd1); DEFINE_GUID(IID_ID3D11ShaderResourceView,0xb0e06fe0,0x8192,0x4e1a,0xb1,0xca,0x36,0xd7,0x41,0x47,0x10,0xb2); DEFINE_GUID(IID_ID3D11RenderTargetView,0xdfdba067,0x0b8d,0x4865,0x87,0x5b,0xd7,0xb4,0x51,0x6c,0xc1,0x64); DEFINE_GUID(IID_ID3D11DepthStencilView,0x9fdac92a,0x1876,0x48c3,0xaf,0xad,0x25,0xb9,0x4f,0x84,0xa9,0xb6); DEFINE_GUID(IID_ID3D11UnorderedAccessView,0x28acf509,0x7f5c,0x48f6,0x86,0x11,0xf3,0x16,0x01,0x0a,0x63,0x80); DEFINE_GUID(IID_ID3D11VertexShader,0x3b301d64,0xd678,0x4289,0x88,0x97,0x22,0xf8,0x92,0x8b,0x72,0xf3); DEFINE_GUID(IID_ID3D11HullShader,0x8e5c6061,0x628a,0x4c8e,0x82,0x64,0xbb,0xe4,0x5c,0xb3,0xd5,0xdd); DEFINE_GUID(IID_ID3D11DomainShader,0xf582c508,0x0f36,0x490c,0x99,0x77,0x31,0xee,0xce,0x26,0x8c,0xfa); DEFINE_GUID(IID_ID3D11GeometryShader,0x38325b96,0xeffb,0x4022,0xba,0x02,0x2e,0x79,0x5b,0x70,0x27,0x5c); DEFINE_GUID(IID_ID3D11PixelShader,0xea82e40d,0x51dc,0x4f33,0x93,0xd4,0xdb,0x7c,0x91,0x25,0xae,0x8c); DEFINE_GUID(IID_ID3D11ComputeShader,0x4f5b196e,0xc2bd,0x495e,0xbd,0x01,0x1f,0xde,0xd3,0x8e,0x49,0x69); DEFINE_GUID(IID_ID3D11InputLayout,0xe4819ddc,0x4cf0,0x4025,0xbd,0x26,0x5d,0xe8,0x2a,0x3e,0x07,0xb7); DEFINE_GUID(IID_ID3D11SamplerState,0xda6fea51,0x564c,0x4487,0x98,0x10,0xf0,0xd0,0xf9,0xb4,0xe3,0xa5); DEFINE_GUID(IID_ID3D11Asynchronous,0x4b35d0cd,0x1e15,0x4258,0x9c,0x98,0x1b,0x13,0x33,0xf6,0xdd,0x3b); DEFINE_GUID(IID_ID3D11Query,0xd6c00747,0x87b7,0x425e,0xb8,0x4d,0x44,0xd1,0x08,0x56,0x0a,0xfd); DEFINE_GUID(IID_ID3D11Predicate,0x9eb576dd,0x9f77,0x4d86,0x81,0xaa,0x8b,0xab,0x5f,0xe4,0x90,0xe2); DEFINE_GUID(IID_ID3D11Counter,0x6e8c49fb,0xa371,0x4770,0xb4,0x40,0x29,0x08,0x60,0x22,0xb7,0x41); DEFINE_GUID(IID_ID3D11ClassInstance,0xa6cd7faa,0xb0b7,0x4a2f,0x94,0x36,0x86,0x62,0xa6,0x57,0x97,0xcb); DEFINE_GUID(IID_ID3D11ClassLinkage,0xddf57cba,0x9543,0x46e4,0xa1,0x2b,0xf2,0x07,0xa0,0xfe,0x7f,0xed); DEFINE_GUID(IID_ID3D11CommandList,0xa24bc4d1,0x769e,0x43f7,0x80,0x13,0x98,0xff,0x56,0x6c,0x18,0xe2); DEFINE_GUID(IID_ID3D11DeviceContext,0xc0bfa96c,0xe089,0x44fb,0x8e,0xaf,0x26,0xf8,0x79,0x61,0x90,0xda); DEFINE_GUID(IID_ID3D11Device,0xdb6f6ddb,0xac77,0x4e88,0x82,0x53,0x81,0x9d,0xf9,0xbb,0xf1,0x40); extern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0031_v0_0_c_ifspec; extern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0031_v0_0_s_ifspec; /* Additional Prototypes for ALL interfaces */ /* end of Additional Prototypes */ #ifdef __cplusplus } #endif #endif ================================================ FILE: Include/D3D11SDKLayers.h ================================================ /* this ALWAYS GENERATED file contains the definitions for the interfaces */ /* File created by MIDL compiler version 7.00.0555 */ /* Compiler settings for d3d11sdklayers.idl: Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 7.00.0555 protocol : all , ms_ext, c_ext, robust error checks: allocation ref bounds_check enum stub_data VC __declspec() decoration level: __declspec(uuid()), __declspec(selectany), __declspec(novtable) DECLSPEC_UUID(), MIDL_INTERFACE() */ /* @@MIDL_FILE_HEADING( ) */ #pragma warning( disable: 4049 ) /* more than 64k source lines */ /* verify that the version is high enough to compile this file*/ #ifndef __REQUIRED_RPCNDR_H_VERSION__ #define __REQUIRED_RPCNDR_H_VERSION__ 475 #endif /* verify that the version is high enough to compile this file*/ #ifndef __REQUIRED_RPCSAL_H_VERSION__ #define __REQUIRED_RPCSAL_H_VERSION__ 100 #endif #include "rpc.h" #include "rpcndr.h" #ifndef __RPCNDR_H_VERSION__ #error this stub requires an updated version of #endif // __RPCNDR_H_VERSION__ #ifndef COM_NO_WINDOWS_H #include "windows.h" #include "ole2.h" #endif /*COM_NO_WINDOWS_H*/ #ifndef __d3d11sdklayers_h__ #define __d3d11sdklayers_h__ #if defined(_MSC_VER) && (_MSC_VER >= 1020) #pragma once #endif /* Forward Declarations */ #ifndef __ID3D11Debug_FWD_DEFINED__ #define __ID3D11Debug_FWD_DEFINED__ typedef interface ID3D11Debug ID3D11Debug; #endif /* __ID3D11Debug_FWD_DEFINED__ */ #ifndef __ID3D11SwitchToRef_FWD_DEFINED__ #define __ID3D11SwitchToRef_FWD_DEFINED__ typedef interface ID3D11SwitchToRef ID3D11SwitchToRef; #endif /* __ID3D11SwitchToRef_FWD_DEFINED__ */ #ifndef __ID3D11InfoQueue_FWD_DEFINED__ #define __ID3D11InfoQueue_FWD_DEFINED__ typedef interface ID3D11InfoQueue ID3D11InfoQueue; #endif /* __ID3D11InfoQueue_FWD_DEFINED__ */ /* header files for imported files */ #include "oaidl.h" #include "ocidl.h" #include "d3d11.h" #ifdef __cplusplus extern "C"{ #endif /* interface __MIDL_itf_d3d11sdklayers_0000_0000 */ /* [local] */ #define D3D11_SDK_LAYERS_VERSION ( 1 ) #define D3D11_DEBUG_FEATURE_FLUSH_PER_RENDER_OP ( 0x1 ) #define D3D11_DEBUG_FEATURE_FINISH_PER_RENDER_OP ( 0x2 ) #define D3D11_DEBUG_FEATURE_PRESENT_PER_RENDER_OP ( 0x4 ) typedef enum D3D11_RLDO_FLAGS { D3D11_RLDO_SUMMARY = 0x1, D3D11_RLDO_DETAIL = 0x2 } D3D11_RLDO_FLAGS; #if !defined( D3D11_NO_HELPERS ) && defined( __cplusplus ) } inline D3D11_RLDO_FLAGS operator~( D3D11_RLDO_FLAGS a ) { return D3D11_RLDO_FLAGS( ~UINT( a ) ); } inline D3D11_RLDO_FLAGS operator&( D3D11_RLDO_FLAGS a, D3D11_RLDO_FLAGS b ) { return D3D11_RLDO_FLAGS( UINT( a ) & UINT( b ) ); } inline D3D11_RLDO_FLAGS operator|( D3D11_RLDO_FLAGS a, D3D11_RLDO_FLAGS b ) { return D3D11_RLDO_FLAGS( UINT( a ) | UINT( b ) ); } inline D3D11_RLDO_FLAGS operator^( D3D11_RLDO_FLAGS a, D3D11_RLDO_FLAGS b ) { return D3D11_RLDO_FLAGS( UINT( a ) ^ UINT( b ) ); } inline D3D11_RLDO_FLAGS& operator&=( D3D11_RLDO_FLAGS& a, D3D11_RLDO_FLAGS b ) { a = a & b; return a; } inline D3D11_RLDO_FLAGS& operator|=( D3D11_RLDO_FLAGS& a, D3D11_RLDO_FLAGS b ) { a = a | b; return a; } inline D3D11_RLDO_FLAGS& operator^=( D3D11_RLDO_FLAGS& a, D3D11_RLDO_FLAGS b ) { a = a ^ b; return a; } extern "C"{ #endif extern RPC_IF_HANDLE __MIDL_itf_d3d11sdklayers_0000_0000_v0_0_c_ifspec; extern RPC_IF_HANDLE __MIDL_itf_d3d11sdklayers_0000_0000_v0_0_s_ifspec; #ifndef __ID3D11Debug_INTERFACE_DEFINED__ #define __ID3D11Debug_INTERFACE_DEFINED__ /* interface ID3D11Debug */ /* [unique][local][object][uuid] */ EXTERN_C const IID IID_ID3D11Debug; #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("79cf2233-7536-4948-9d36-1e4692dc5760") ID3D11Debug : public IUnknown { public: virtual HRESULT STDMETHODCALLTYPE SetFeatureMask( UINT Mask) = 0; virtual UINT STDMETHODCALLTYPE GetFeatureMask( void) = 0; virtual HRESULT STDMETHODCALLTYPE SetPresentPerRenderOpDelay( UINT Milliseconds) = 0; virtual UINT STDMETHODCALLTYPE GetPresentPerRenderOpDelay( void) = 0; virtual HRESULT STDMETHODCALLTYPE SetSwapChain( /* [annotation] */ __in_opt IDXGISwapChain *pSwapChain) = 0; virtual HRESULT STDMETHODCALLTYPE GetSwapChain( /* [annotation] */ __out IDXGISwapChain **ppSwapChain) = 0; virtual HRESULT STDMETHODCALLTYPE ValidateContext( /* [annotation] */ __in ID3D11DeviceContext *pContext) = 0; virtual HRESULT STDMETHODCALLTYPE ReportLiveDeviceObjects( D3D11_RLDO_FLAGS Flags) = 0; virtual HRESULT STDMETHODCALLTYPE ValidateContextForDispatch( /* [annotation] */ __in ID3D11DeviceContext *pContext) = 0; }; #else /* C style interface */ typedef struct ID3D11DebugVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ID3D11Debug * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ __RPC__deref_out void **ppvObject); ULONG ( STDMETHODCALLTYPE *AddRef )( ID3D11Debug * This); ULONG ( STDMETHODCALLTYPE *Release )( ID3D11Debug * This); HRESULT ( STDMETHODCALLTYPE *SetFeatureMask )( ID3D11Debug * This, UINT Mask); UINT ( STDMETHODCALLTYPE *GetFeatureMask )( ID3D11Debug * This); HRESULT ( STDMETHODCALLTYPE *SetPresentPerRenderOpDelay )( ID3D11Debug * This, UINT Milliseconds); UINT ( STDMETHODCALLTYPE *GetPresentPerRenderOpDelay )( ID3D11Debug * This); HRESULT ( STDMETHODCALLTYPE *SetSwapChain )( ID3D11Debug * This, /* [annotation] */ __in_opt IDXGISwapChain *pSwapChain); HRESULT ( STDMETHODCALLTYPE *GetSwapChain )( ID3D11Debug * This, /* [annotation] */ __out IDXGISwapChain **ppSwapChain); HRESULT ( STDMETHODCALLTYPE *ValidateContext )( ID3D11Debug * This, /* [annotation] */ __in ID3D11DeviceContext *pContext); HRESULT ( STDMETHODCALLTYPE *ReportLiveDeviceObjects )( ID3D11Debug * This, D3D11_RLDO_FLAGS Flags); HRESULT ( STDMETHODCALLTYPE *ValidateContextForDispatch )( ID3D11Debug * This, /* [annotation] */ __in ID3D11DeviceContext *pContext); END_INTERFACE } ID3D11DebugVtbl; interface ID3D11Debug { CONST_VTBL struct ID3D11DebugVtbl *lpVtbl; }; #ifdef COBJMACROS #define ID3D11Debug_QueryInterface(This,riid,ppvObject) \ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) #define ID3D11Debug_AddRef(This) \ ( (This)->lpVtbl -> AddRef(This) ) #define ID3D11Debug_Release(This) \ ( (This)->lpVtbl -> Release(This) ) #define ID3D11Debug_SetFeatureMask(This,Mask) \ ( (This)->lpVtbl -> SetFeatureMask(This,Mask) ) #define ID3D11Debug_GetFeatureMask(This) \ ( (This)->lpVtbl -> GetFeatureMask(This) ) #define ID3D11Debug_SetPresentPerRenderOpDelay(This,Milliseconds) \ ( (This)->lpVtbl -> SetPresentPerRenderOpDelay(This,Milliseconds) ) #define ID3D11Debug_GetPresentPerRenderOpDelay(This) \ ( (This)->lpVtbl -> GetPresentPerRenderOpDelay(This) ) #define ID3D11Debug_SetSwapChain(This,pSwapChain) \ ( (This)->lpVtbl -> SetSwapChain(This,pSwapChain) ) #define ID3D11Debug_GetSwapChain(This,ppSwapChain) \ ( (This)->lpVtbl -> GetSwapChain(This,ppSwapChain) ) #define ID3D11Debug_ValidateContext(This,pContext) \ ( (This)->lpVtbl -> ValidateContext(This,pContext) ) #define ID3D11Debug_ReportLiveDeviceObjects(This,Flags) \ ( (This)->lpVtbl -> ReportLiveDeviceObjects(This,Flags) ) #define ID3D11Debug_ValidateContextForDispatch(This,pContext) \ ( (This)->lpVtbl -> ValidateContextForDispatch(This,pContext) ) #endif /* COBJMACROS */ #endif /* C style interface */ #endif /* __ID3D11Debug_INTERFACE_DEFINED__ */ #ifndef __ID3D11SwitchToRef_INTERFACE_DEFINED__ #define __ID3D11SwitchToRef_INTERFACE_DEFINED__ /* interface ID3D11SwitchToRef */ /* [unique][local][object][uuid] */ EXTERN_C const IID IID_ID3D11SwitchToRef; #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("1ef337e3-58e7-4f83-a692-db221f5ed47e") ID3D11SwitchToRef : public IUnknown { public: virtual BOOL STDMETHODCALLTYPE SetUseRef( BOOL UseRef) = 0; virtual BOOL STDMETHODCALLTYPE GetUseRef( void) = 0; }; #else /* C style interface */ typedef struct ID3D11SwitchToRefVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ID3D11SwitchToRef * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ __RPC__deref_out void **ppvObject); ULONG ( STDMETHODCALLTYPE *AddRef )( ID3D11SwitchToRef * This); ULONG ( STDMETHODCALLTYPE *Release )( ID3D11SwitchToRef * This); BOOL ( STDMETHODCALLTYPE *SetUseRef )( ID3D11SwitchToRef * This, BOOL UseRef); BOOL ( STDMETHODCALLTYPE *GetUseRef )( ID3D11SwitchToRef * This); END_INTERFACE } ID3D11SwitchToRefVtbl; interface ID3D11SwitchToRef { CONST_VTBL struct ID3D11SwitchToRefVtbl *lpVtbl; }; #ifdef COBJMACROS #define ID3D11SwitchToRef_QueryInterface(This,riid,ppvObject) \ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) #define ID3D11SwitchToRef_AddRef(This) \ ( (This)->lpVtbl -> AddRef(This) ) #define ID3D11SwitchToRef_Release(This) \ ( (This)->lpVtbl -> Release(This) ) #define ID3D11SwitchToRef_SetUseRef(This,UseRef) \ ( (This)->lpVtbl -> SetUseRef(This,UseRef) ) #define ID3D11SwitchToRef_GetUseRef(This) \ ( (This)->lpVtbl -> GetUseRef(This) ) #endif /* COBJMACROS */ #endif /* C style interface */ #endif /* __ID3D11SwitchToRef_INTERFACE_DEFINED__ */ /* interface __MIDL_itf_d3d11sdklayers_0000_0002 */ /* [local] */ typedef enum D3D11_MESSAGE_CATEGORY { D3D11_MESSAGE_CATEGORY_APPLICATION_DEFINED = 0, D3D11_MESSAGE_CATEGORY_MISCELLANEOUS = ( D3D11_MESSAGE_CATEGORY_APPLICATION_DEFINED + 1 ) , D3D11_MESSAGE_CATEGORY_INITIALIZATION = ( D3D11_MESSAGE_CATEGORY_MISCELLANEOUS + 1 ) , D3D11_MESSAGE_CATEGORY_CLEANUP = ( D3D11_MESSAGE_CATEGORY_INITIALIZATION + 1 ) , D3D11_MESSAGE_CATEGORY_COMPILATION = ( D3D11_MESSAGE_CATEGORY_CLEANUP + 1 ) , D3D11_MESSAGE_CATEGORY_STATE_CREATION = ( D3D11_MESSAGE_CATEGORY_COMPILATION + 1 ) , D3D11_MESSAGE_CATEGORY_STATE_SETTING = ( D3D11_MESSAGE_CATEGORY_STATE_CREATION + 1 ) , D3D11_MESSAGE_CATEGORY_STATE_GETTING = ( D3D11_MESSAGE_CATEGORY_STATE_SETTING + 1 ) , D3D11_MESSAGE_CATEGORY_RESOURCE_MANIPULATION = ( D3D11_MESSAGE_CATEGORY_STATE_GETTING + 1 ) , D3D11_MESSAGE_CATEGORY_EXECUTION = ( D3D11_MESSAGE_CATEGORY_RESOURCE_MANIPULATION + 1 ) } D3D11_MESSAGE_CATEGORY; typedef enum D3D11_MESSAGE_SEVERITY { D3D11_MESSAGE_SEVERITY_CORRUPTION = 0, D3D11_MESSAGE_SEVERITY_ERROR = ( D3D11_MESSAGE_SEVERITY_CORRUPTION + 1 ) , D3D11_MESSAGE_SEVERITY_WARNING = ( D3D11_MESSAGE_SEVERITY_ERROR + 1 ) , D3D11_MESSAGE_SEVERITY_INFO = ( D3D11_MESSAGE_SEVERITY_WARNING + 1 ) } D3D11_MESSAGE_SEVERITY; typedef enum D3D11_MESSAGE_ID { D3D11_MESSAGE_ID_UNKNOWN = 0, D3D11_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_HAZARD = ( D3D11_MESSAGE_ID_UNKNOWN + 1 ) , D3D11_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_HAZARD = ( D3D11_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_HAZARD + 1 ) , D3D11_MESSAGE_ID_DEVICE_VSSETSHADERRESOURCES_HAZARD = ( D3D11_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_HAZARD + 1 ) , D3D11_MESSAGE_ID_DEVICE_VSSETCONSTANTBUFFERS_HAZARD = ( D3D11_MESSAGE_ID_DEVICE_VSSETSHADERRESOURCES_HAZARD + 1 ) , D3D11_MESSAGE_ID_DEVICE_GSSETSHADERRESOURCES_HAZARD = ( D3D11_MESSAGE_ID_DEVICE_VSSETCONSTANTBUFFERS_HAZARD + 1 ) , D3D11_MESSAGE_ID_DEVICE_GSSETCONSTANTBUFFERS_HAZARD = ( D3D11_MESSAGE_ID_DEVICE_GSSETSHADERRESOURCES_HAZARD + 1 ) , D3D11_MESSAGE_ID_DEVICE_PSSETSHADERRESOURCES_HAZARD = ( D3D11_MESSAGE_ID_DEVICE_GSSETCONSTANTBUFFERS_HAZARD + 1 ) , D3D11_MESSAGE_ID_DEVICE_PSSETCONSTANTBUFFERS_HAZARD = ( D3D11_MESSAGE_ID_DEVICE_PSSETSHADERRESOURCES_HAZARD + 1 ) , D3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETS_HAZARD = ( D3D11_MESSAGE_ID_DEVICE_PSSETCONSTANTBUFFERS_HAZARD + 1 ) , D3D11_MESSAGE_ID_DEVICE_SOSETTARGETS_HAZARD = ( D3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETS_HAZARD + 1 ) , D3D11_MESSAGE_ID_STRING_FROM_APPLICATION = ( D3D11_MESSAGE_ID_DEVICE_SOSETTARGETS_HAZARD + 1 ) , D3D11_MESSAGE_ID_CORRUPTED_THIS = ( D3D11_MESSAGE_ID_STRING_FROM_APPLICATION + 1 ) , D3D11_MESSAGE_ID_CORRUPTED_PARAMETER1 = ( D3D11_MESSAGE_ID_CORRUPTED_THIS + 1 ) , D3D11_MESSAGE_ID_CORRUPTED_PARAMETER2 = ( D3D11_MESSAGE_ID_CORRUPTED_PARAMETER1 + 1 ) , D3D11_MESSAGE_ID_CORRUPTED_PARAMETER3 = ( D3D11_MESSAGE_ID_CORRUPTED_PARAMETER2 + 1 ) , D3D11_MESSAGE_ID_CORRUPTED_PARAMETER4 = ( D3D11_MESSAGE_ID_CORRUPTED_PARAMETER3 + 1 ) , D3D11_MESSAGE_ID_CORRUPTED_PARAMETER5 = ( D3D11_MESSAGE_ID_CORRUPTED_PARAMETER4 + 1 ) , D3D11_MESSAGE_ID_CORRUPTED_PARAMETER6 = ( D3D11_MESSAGE_ID_CORRUPTED_PARAMETER5 + 1 ) , D3D11_MESSAGE_ID_CORRUPTED_PARAMETER7 = ( D3D11_MESSAGE_ID_CORRUPTED_PARAMETER6 + 1 ) , D3D11_MESSAGE_ID_CORRUPTED_PARAMETER8 = ( D3D11_MESSAGE_ID_CORRUPTED_PARAMETER7 + 1 ) , D3D11_MESSAGE_ID_CORRUPTED_PARAMETER9 = ( D3D11_MESSAGE_ID_CORRUPTED_PARAMETER8 + 1 ) , D3D11_MESSAGE_ID_CORRUPTED_PARAMETER10 = ( D3D11_MESSAGE_ID_CORRUPTED_PARAMETER9 + 1 ) , D3D11_MESSAGE_ID_CORRUPTED_PARAMETER11 = ( D3D11_MESSAGE_ID_CORRUPTED_PARAMETER10 + 1 ) , D3D11_MESSAGE_ID_CORRUPTED_PARAMETER12 = ( D3D11_MESSAGE_ID_CORRUPTED_PARAMETER11 + 1 ) , D3D11_MESSAGE_ID_CORRUPTED_PARAMETER13 = ( D3D11_MESSAGE_ID_CORRUPTED_PARAMETER12 + 1 ) , D3D11_MESSAGE_ID_CORRUPTED_PARAMETER14 = ( D3D11_MESSAGE_ID_CORRUPTED_PARAMETER13 + 1 ) , D3D11_MESSAGE_ID_CORRUPTED_PARAMETER15 = ( D3D11_MESSAGE_ID_CORRUPTED_PARAMETER14 + 1 ) , D3D11_MESSAGE_ID_CORRUPTED_MULTITHREADING = ( D3D11_MESSAGE_ID_CORRUPTED_PARAMETER15 + 1 ) , D3D11_MESSAGE_ID_MESSAGE_REPORTING_OUTOFMEMORY = ( D3D11_MESSAGE_ID_CORRUPTED_MULTITHREADING + 1 ) , D3D11_MESSAGE_ID_IASETINPUTLAYOUT_UNBINDDELETINGOBJECT = ( D3D11_MESSAGE_ID_MESSAGE_REPORTING_OUTOFMEMORY + 1 ) , D3D11_MESSAGE_ID_IASETVERTEXBUFFERS_UNBINDDELETINGOBJECT = ( D3D11_MESSAGE_ID_IASETINPUTLAYOUT_UNBINDDELETINGOBJECT + 1 ) , D3D11_MESSAGE_ID_IASETINDEXBUFFER_UNBINDDELETINGOBJECT = ( D3D11_MESSAGE_ID_IASETVERTEXBUFFERS_UNBINDDELETINGOBJECT + 1 ) , D3D11_MESSAGE_ID_VSSETSHADER_UNBINDDELETINGOBJECT = ( D3D11_MESSAGE_ID_IASETINDEXBUFFER_UNBINDDELETINGOBJECT + 1 ) , D3D11_MESSAGE_ID_VSSETSHADERRESOURCES_UNBINDDELETINGOBJECT = ( D3D11_MESSAGE_ID_VSSETSHADER_UNBINDDELETINGOBJECT + 1 ) , D3D11_MESSAGE_ID_VSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT = ( D3D11_MESSAGE_ID_VSSETSHADERRESOURCES_UNBINDDELETINGOBJECT + 1 ) , D3D11_MESSAGE_ID_VSSETSAMPLERS_UNBINDDELETINGOBJECT = ( D3D11_MESSAGE_ID_VSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT + 1 ) , D3D11_MESSAGE_ID_GSSETSHADER_UNBINDDELETINGOBJECT = ( D3D11_MESSAGE_ID_VSSETSAMPLERS_UNBINDDELETINGOBJECT + 1 ) , D3D11_MESSAGE_ID_GSSETSHADERRESOURCES_UNBINDDELETINGOBJECT = ( D3D11_MESSAGE_ID_GSSETSHADER_UNBINDDELETINGOBJECT + 1 ) , D3D11_MESSAGE_ID_GSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT = ( D3D11_MESSAGE_ID_GSSETSHADERRESOURCES_UNBINDDELETINGOBJECT + 1 ) , D3D11_MESSAGE_ID_GSSETSAMPLERS_UNBINDDELETINGOBJECT = ( D3D11_MESSAGE_ID_GSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT + 1 ) , D3D11_MESSAGE_ID_SOSETTARGETS_UNBINDDELETINGOBJECT = ( D3D11_MESSAGE_ID_GSSETSAMPLERS_UNBINDDELETINGOBJECT + 1 ) , D3D11_MESSAGE_ID_PSSETSHADER_UNBINDDELETINGOBJECT = ( D3D11_MESSAGE_ID_SOSETTARGETS_UNBINDDELETINGOBJECT + 1 ) , D3D11_MESSAGE_ID_PSSETSHADERRESOURCES_UNBINDDELETINGOBJECT = ( D3D11_MESSAGE_ID_PSSETSHADER_UNBINDDELETINGOBJECT + 1 ) , D3D11_MESSAGE_ID_PSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT = ( D3D11_MESSAGE_ID_PSSETSHADERRESOURCES_UNBINDDELETINGOBJECT + 1 ) , D3D11_MESSAGE_ID_PSSETSAMPLERS_UNBINDDELETINGOBJECT = ( D3D11_MESSAGE_ID_PSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT + 1 ) , D3D11_MESSAGE_ID_RSSETSTATE_UNBINDDELETINGOBJECT = ( D3D11_MESSAGE_ID_PSSETSAMPLERS_UNBINDDELETINGOBJECT + 1 ) , D3D11_MESSAGE_ID_OMSETBLENDSTATE_UNBINDDELETINGOBJECT = ( D3D11_MESSAGE_ID_RSSETSTATE_UNBINDDELETINGOBJECT + 1 ) , D3D11_MESSAGE_ID_OMSETDEPTHSTENCILSTATE_UNBINDDELETINGOBJECT = ( D3D11_MESSAGE_ID_OMSETBLENDSTATE_UNBINDDELETINGOBJECT + 1 ) , D3D11_MESSAGE_ID_OMSETRENDERTARGETS_UNBINDDELETINGOBJECT = ( D3D11_MESSAGE_ID_OMSETDEPTHSTENCILSTATE_UNBINDDELETINGOBJECT + 1 ) , D3D11_MESSAGE_ID_SETPREDICATION_UNBINDDELETINGOBJECT = ( D3D11_MESSAGE_ID_OMSETRENDERTARGETS_UNBINDDELETINGOBJECT + 1 ) , D3D11_MESSAGE_ID_GETPRIVATEDATA_MOREDATA = ( D3D11_MESSAGE_ID_SETPREDICATION_UNBINDDELETINGOBJECT + 1 ) , D3D11_MESSAGE_ID_SETPRIVATEDATA_INVALIDFREEDATA = ( D3D11_MESSAGE_ID_GETPRIVATEDATA_MOREDATA + 1 ) , D3D11_MESSAGE_ID_SETPRIVATEDATA_INVALIDIUNKNOWN = ( D3D11_MESSAGE_ID_SETPRIVATEDATA_INVALIDFREEDATA + 1 ) , D3D11_MESSAGE_ID_SETPRIVATEDATA_INVALIDFLAGS = ( D3D11_MESSAGE_ID_SETPRIVATEDATA_INVALIDIUNKNOWN + 1 ) , D3D11_MESSAGE_ID_SETPRIVATEDATA_CHANGINGPARAMS = ( D3D11_MESSAGE_ID_SETPRIVATEDATA_INVALIDFLAGS + 1 ) , D3D11_MESSAGE_ID_SETPRIVATEDATA_OUTOFMEMORY = ( D3D11_MESSAGE_ID_SETPRIVATEDATA_CHANGINGPARAMS + 1 ) , D3D11_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDFORMAT = ( D3D11_MESSAGE_ID_SETPRIVATEDATA_OUTOFMEMORY + 1 ) , D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDSAMPLES = ( D3D11_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDFORMAT + 1 ) , D3D11_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDUSAGE = ( D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDSAMPLES + 1 ) , D3D11_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDBINDFLAGS = ( D3D11_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDUSAGE + 1 ) , D3D11_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDCPUACCESSFLAGS = ( D3D11_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDBINDFLAGS + 1 ) , D3D11_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDMISCFLAGS = ( D3D11_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDCPUACCESSFLAGS + 1 ) , D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDCPUACCESSFLAGS = ( D3D11_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDMISCFLAGS + 1 ) , D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDBINDFLAGS = ( D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDCPUACCESSFLAGS + 1 ) , D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDINITIALDATA = ( D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDBINDFLAGS + 1 ) , D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDDIMENSIONS = ( D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDINITIALDATA + 1 ) , D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDMIPLEVELS = ( D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDDIMENSIONS + 1 ) , D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDMISCFLAGS = ( D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDMIPLEVELS + 1 ) , D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDARG_RETURN = ( D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDMISCFLAGS + 1 ) , D3D11_MESSAGE_ID_CREATEBUFFER_OUTOFMEMORY_RETURN = ( D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDARG_RETURN + 1 ) , D3D11_MESSAGE_ID_CREATEBUFFER_NULLDESC = ( D3D11_MESSAGE_ID_CREATEBUFFER_OUTOFMEMORY_RETURN + 1 ) , D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDCONSTANTBUFFERBINDINGS = ( D3D11_MESSAGE_ID_CREATEBUFFER_NULLDESC + 1 ) , D3D11_MESSAGE_ID_CREATEBUFFER_LARGEALLOCATION = ( D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDCONSTANTBUFFERBINDINGS + 1 ) , D3D11_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDFORMAT = ( D3D11_MESSAGE_ID_CREATEBUFFER_LARGEALLOCATION + 1 ) , D3D11_MESSAGE_ID_CREATETEXTURE1D_UNSUPPORTEDFORMAT = ( D3D11_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDFORMAT + 1 ) , D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDSAMPLES = ( D3D11_MESSAGE_ID_CREATETEXTURE1D_UNSUPPORTEDFORMAT + 1 ) , D3D11_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDUSAGE = ( D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDSAMPLES + 1 ) , D3D11_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDBINDFLAGS = ( D3D11_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDUSAGE + 1 ) , D3D11_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDCPUACCESSFLAGS = ( D3D11_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDBINDFLAGS + 1 ) , D3D11_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDMISCFLAGS = ( D3D11_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDCPUACCESSFLAGS + 1 ) , D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDCPUACCESSFLAGS = ( D3D11_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDMISCFLAGS + 1 ) , D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDBINDFLAGS = ( D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDCPUACCESSFLAGS + 1 ) , D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDINITIALDATA = ( D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDBINDFLAGS + 1 ) , D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDDIMENSIONS = ( D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDINITIALDATA + 1 ) , D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDMIPLEVELS = ( D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDDIMENSIONS + 1 ) , D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDMISCFLAGS = ( D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDMIPLEVELS + 1 ) , D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDARG_RETURN = ( D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDMISCFLAGS + 1 ) , D3D11_MESSAGE_ID_CREATETEXTURE1D_OUTOFMEMORY_RETURN = ( D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDARG_RETURN + 1 ) , D3D11_MESSAGE_ID_CREATETEXTURE1D_NULLDESC = ( D3D11_MESSAGE_ID_CREATETEXTURE1D_OUTOFMEMORY_RETURN + 1 ) , D3D11_MESSAGE_ID_CREATETEXTURE1D_LARGEALLOCATION = ( D3D11_MESSAGE_ID_CREATETEXTURE1D_NULLDESC + 1 ) , D3D11_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDFORMAT = ( D3D11_MESSAGE_ID_CREATETEXTURE1D_LARGEALLOCATION + 1 ) , D3D11_MESSAGE_ID_CREATETEXTURE2D_UNSUPPORTEDFORMAT = ( D3D11_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDFORMAT + 1 ) , D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDSAMPLES = ( D3D11_MESSAGE_ID_CREATETEXTURE2D_UNSUPPORTEDFORMAT + 1 ) , D3D11_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDUSAGE = ( D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDSAMPLES + 1 ) , D3D11_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDBINDFLAGS = ( D3D11_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDUSAGE + 1 ) , D3D11_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDCPUACCESSFLAGS = ( D3D11_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDBINDFLAGS + 1 ) , D3D11_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDMISCFLAGS = ( D3D11_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDCPUACCESSFLAGS + 1 ) , D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDCPUACCESSFLAGS = ( D3D11_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDMISCFLAGS + 1 ) , D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDBINDFLAGS = ( D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDCPUACCESSFLAGS + 1 ) , D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDINITIALDATA = ( D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDBINDFLAGS + 1 ) , D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDDIMENSIONS = ( D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDINITIALDATA + 1 ) , D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDMIPLEVELS = ( D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDDIMENSIONS + 1 ) , D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDMISCFLAGS = ( D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDMIPLEVELS + 1 ) , D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDARG_RETURN = ( D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDMISCFLAGS + 1 ) , D3D11_MESSAGE_ID_CREATETEXTURE2D_OUTOFMEMORY_RETURN = ( D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDARG_RETURN + 1 ) , D3D11_MESSAGE_ID_CREATETEXTURE2D_NULLDESC = ( D3D11_MESSAGE_ID_CREATETEXTURE2D_OUTOFMEMORY_RETURN + 1 ) , D3D11_MESSAGE_ID_CREATETEXTURE2D_LARGEALLOCATION = ( D3D11_MESSAGE_ID_CREATETEXTURE2D_NULLDESC + 1 ) , D3D11_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDFORMAT = ( D3D11_MESSAGE_ID_CREATETEXTURE2D_LARGEALLOCATION + 1 ) , D3D11_MESSAGE_ID_CREATETEXTURE3D_UNSUPPORTEDFORMAT = ( D3D11_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDFORMAT + 1 ) , D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDSAMPLES = ( D3D11_MESSAGE_ID_CREATETEXTURE3D_UNSUPPORTEDFORMAT + 1 ) , D3D11_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDUSAGE = ( D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDSAMPLES + 1 ) , D3D11_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDBINDFLAGS = ( D3D11_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDUSAGE + 1 ) , D3D11_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDCPUACCESSFLAGS = ( D3D11_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDBINDFLAGS + 1 ) , D3D11_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDMISCFLAGS = ( D3D11_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDCPUACCESSFLAGS + 1 ) , D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDCPUACCESSFLAGS = ( D3D11_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDMISCFLAGS + 1 ) , D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDBINDFLAGS = ( D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDCPUACCESSFLAGS + 1 ) , D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDINITIALDATA = ( D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDBINDFLAGS + 1 ) , D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDDIMENSIONS = ( D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDINITIALDATA + 1 ) , D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDMIPLEVELS = ( D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDDIMENSIONS + 1 ) , D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDMISCFLAGS = ( D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDMIPLEVELS + 1 ) , D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDARG_RETURN = ( D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDMISCFLAGS + 1 ) , D3D11_MESSAGE_ID_CREATETEXTURE3D_OUTOFMEMORY_RETURN = ( D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDARG_RETURN + 1 ) , D3D11_MESSAGE_ID_CREATETEXTURE3D_NULLDESC = ( D3D11_MESSAGE_ID_CREATETEXTURE3D_OUTOFMEMORY_RETURN + 1 ) , D3D11_MESSAGE_ID_CREATETEXTURE3D_LARGEALLOCATION = ( D3D11_MESSAGE_ID_CREATETEXTURE3D_NULLDESC + 1 ) , D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_UNRECOGNIZEDFORMAT = ( D3D11_MESSAGE_ID_CREATETEXTURE3D_LARGEALLOCATION + 1 ) , D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDDESC = ( D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_UNRECOGNIZEDFORMAT + 1 ) , D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDFORMAT = ( D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDDESC + 1 ) , D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDDIMENSIONS = ( D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDFORMAT + 1 ) , D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDRESOURCE = ( D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDDIMENSIONS + 1 ) , D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_TOOMANYOBJECTS = ( D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDRESOURCE + 1 ) , D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDARG_RETURN = ( D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_TOOMANYOBJECTS + 1 ) , D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_OUTOFMEMORY_RETURN = ( D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDARG_RETURN + 1 ) , D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_UNRECOGNIZEDFORMAT = ( D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_OUTOFMEMORY_RETURN + 1 ) , D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_UNSUPPORTEDFORMAT = ( D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_UNRECOGNIZEDFORMAT + 1 ) , D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDDESC = ( D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_UNSUPPORTEDFORMAT + 1 ) , D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDFORMAT = ( D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDDESC + 1 ) , D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDDIMENSIONS = ( D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDFORMAT + 1 ) , D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDRESOURCE = ( D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDDIMENSIONS + 1 ) , D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_TOOMANYOBJECTS = ( D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDRESOURCE + 1 ) , D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDARG_RETURN = ( D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_TOOMANYOBJECTS + 1 ) , D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_OUTOFMEMORY_RETURN = ( D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDARG_RETURN + 1 ) , D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_UNRECOGNIZEDFORMAT = ( D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_OUTOFMEMORY_RETURN + 1 ) , D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDDESC = ( D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_UNRECOGNIZEDFORMAT + 1 ) , D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDFORMAT = ( D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDDESC + 1 ) , D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDDIMENSIONS = ( D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDFORMAT + 1 ) , D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDRESOURCE = ( D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDDIMENSIONS + 1 ) , D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_TOOMANYOBJECTS = ( D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDRESOURCE + 1 ) , D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDARG_RETURN = ( D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_TOOMANYOBJECTS + 1 ) , D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_OUTOFMEMORY_RETURN = ( D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDARG_RETURN + 1 ) , D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_OUTOFMEMORY = ( D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_OUTOFMEMORY_RETURN + 1 ) , D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_TOOMANYELEMENTS = ( D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_OUTOFMEMORY + 1 ) , D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDFORMAT = ( D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_TOOMANYELEMENTS + 1 ) , D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INCOMPATIBLEFORMAT = ( D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDFORMAT + 1 ) , D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDSLOT = ( D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INCOMPATIBLEFORMAT + 1 ) , D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDINPUTSLOTCLASS = ( D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDSLOT + 1 ) , D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_STEPRATESLOTCLASSMISMATCH = ( D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDINPUTSLOTCLASS + 1 ) , D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDSLOTCLASSCHANGE = ( D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_STEPRATESLOTCLASSMISMATCH + 1 ) , D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDSTEPRATECHANGE = ( D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDSLOTCLASSCHANGE + 1 ) , D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDALIGNMENT = ( D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDSTEPRATECHANGE + 1 ) , D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_DUPLICATESEMANTIC = ( D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDALIGNMENT + 1 ) , D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_UNPARSEABLEINPUTSIGNATURE = ( D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_DUPLICATESEMANTIC + 1 ) , D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_NULLSEMANTIC = ( D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_UNPARSEABLEINPUTSIGNATURE + 1 ) , D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_MISSINGELEMENT = ( D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_NULLSEMANTIC + 1 ) , D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_NULLDESC = ( D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_MISSINGELEMENT + 1 ) , D3D11_MESSAGE_ID_CREATEVERTEXSHADER_OUTOFMEMORY = ( D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_NULLDESC + 1 ) , D3D11_MESSAGE_ID_CREATEVERTEXSHADER_INVALIDSHADERBYTECODE = ( D3D11_MESSAGE_ID_CREATEVERTEXSHADER_OUTOFMEMORY + 1 ) , D3D11_MESSAGE_ID_CREATEVERTEXSHADER_INVALIDSHADERTYPE = ( D3D11_MESSAGE_ID_CREATEVERTEXSHADER_INVALIDSHADERBYTECODE + 1 ) , D3D11_MESSAGE_ID_CREATEGEOMETRYSHADER_OUTOFMEMORY = ( D3D11_MESSAGE_ID_CREATEVERTEXSHADER_INVALIDSHADERTYPE + 1 ) , D3D11_MESSAGE_ID_CREATEGEOMETRYSHADER_INVALIDSHADERBYTECODE = ( D3D11_MESSAGE_ID_CREATEGEOMETRYSHADER_OUTOFMEMORY + 1 ) , D3D11_MESSAGE_ID_CREATEGEOMETRYSHADER_INVALIDSHADERTYPE = ( D3D11_MESSAGE_ID_CREATEGEOMETRYSHADER_INVALIDSHADERBYTECODE + 1 ) , D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTOFMEMORY = ( D3D11_MESSAGE_ID_CREATEGEOMETRYSHADER_INVALIDSHADERTYPE + 1 ) , D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSHADERBYTECODE = ( D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTOFMEMORY + 1 ) , D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSHADERTYPE = ( D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSHADERBYTECODE + 1 ) , D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDNUMENTRIES = ( D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSHADERTYPE + 1 ) , D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTPUTSTREAMSTRIDEUNUSED = ( D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDNUMENTRIES + 1 ) , D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UNEXPECTEDDECL = ( D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTPUTSTREAMSTRIDEUNUSED + 1 ) , D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_EXPECTEDDECL = ( D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UNEXPECTEDDECL + 1 ) , D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTPUTSLOT0EXPECTED = ( D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_EXPECTEDDECL + 1 ) , D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDOUTPUTSLOT = ( D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTPUTSLOT0EXPECTED + 1 ) , D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_ONLYONEELEMENTPERSLOT = ( D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDOUTPUTSLOT + 1 ) , D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDCOMPONENTCOUNT = ( D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_ONLYONEELEMENTPERSLOT + 1 ) , D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSTARTCOMPONENTANDCOMPONENTCOUNT = ( D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDCOMPONENTCOUNT + 1 ) , D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDGAPDEFINITION = ( D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSTARTCOMPONENTANDCOMPONENTCOUNT + 1 ) , D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_REPEATEDOUTPUT = ( D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDGAPDEFINITION + 1 ) , D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDOUTPUTSTREAMSTRIDE = ( D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_REPEATEDOUTPUT + 1 ) , D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MISSINGSEMANTIC = ( D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDOUTPUTSTREAMSTRIDE + 1 ) , D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MASKMISMATCH = ( D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MISSINGSEMANTIC + 1 ) , D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_CANTHAVEONLYGAPS = ( D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MASKMISMATCH + 1 ) , D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_DECLTOOCOMPLEX = ( D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_CANTHAVEONLYGAPS + 1 ) , D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MISSINGOUTPUTSIGNATURE = ( D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_DECLTOOCOMPLEX + 1 ) , D3D11_MESSAGE_ID_CREATEPIXELSHADER_OUTOFMEMORY = ( D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MISSINGOUTPUTSIGNATURE + 1 ) , D3D11_MESSAGE_ID_CREATEPIXELSHADER_INVALIDSHADERBYTECODE = ( D3D11_MESSAGE_ID_CREATEPIXELSHADER_OUTOFMEMORY + 1 ) , D3D11_MESSAGE_ID_CREATEPIXELSHADER_INVALIDSHADERTYPE = ( D3D11_MESSAGE_ID_CREATEPIXELSHADER_INVALIDSHADERBYTECODE + 1 ) , D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDFILLMODE = ( D3D11_MESSAGE_ID_CREATEPIXELSHADER_INVALIDSHADERTYPE + 1 ) , D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDCULLMODE = ( D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDFILLMODE + 1 ) , D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDDEPTHBIASCLAMP = ( D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDCULLMODE + 1 ) , D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDSLOPESCALEDDEPTHBIAS = ( D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDDEPTHBIASCLAMP + 1 ) , D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_TOOMANYOBJECTS = ( D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDSLOPESCALEDDEPTHBIAS + 1 ) , D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_NULLDESC = ( D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_TOOMANYOBJECTS + 1 ) , D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDDEPTHWRITEMASK = ( D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_NULLDESC + 1 ) , D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDDEPTHFUNC = ( D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDDEPTHWRITEMASK + 1 ) , D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILFAILOP = ( D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDDEPTHFUNC + 1 ) , D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILZFAILOP = ( D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILFAILOP + 1 ) , D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILPASSOP = ( D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILZFAILOP + 1 ) , D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILFUNC = ( D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILPASSOP + 1 ) , D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILFAILOP = ( D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILFUNC + 1 ) , D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILZFAILOP = ( D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILFAILOP + 1 ) , D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILPASSOP = ( D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILZFAILOP + 1 ) , D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILFUNC = ( D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILPASSOP + 1 ) , D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_TOOMANYOBJECTS = ( D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILFUNC + 1 ) , D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_NULLDESC = ( D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_TOOMANYOBJECTS + 1 ) , D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDSRCBLEND = ( D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_NULLDESC + 1 ) , D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDDESTBLEND = ( D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDSRCBLEND + 1 ) , D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDBLENDOP = ( D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDDESTBLEND + 1 ) , D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDSRCBLENDALPHA = ( D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDBLENDOP + 1 ) , D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDDESTBLENDALPHA = ( D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDSRCBLENDALPHA + 1 ) , D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDBLENDOPALPHA = ( D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDDESTBLENDALPHA + 1 ) , D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDRENDERTARGETWRITEMASK = ( D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDBLENDOPALPHA + 1 ) , D3D11_MESSAGE_ID_CREATEBLENDSTATE_TOOMANYOBJECTS = ( D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDRENDERTARGETWRITEMASK + 1 ) , D3D11_MESSAGE_ID_CREATEBLENDSTATE_NULLDESC = ( D3D11_MESSAGE_ID_CREATEBLENDSTATE_TOOMANYOBJECTS + 1 ) , D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDFILTER = ( D3D11_MESSAGE_ID_CREATEBLENDSTATE_NULLDESC + 1 ) , D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDADDRESSU = ( D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDFILTER + 1 ) , D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDADDRESSV = ( D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDADDRESSU + 1 ) , D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDADDRESSW = ( D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDADDRESSV + 1 ) , D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMIPLODBIAS = ( D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDADDRESSW + 1 ) , D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMAXANISOTROPY = ( D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMIPLODBIAS + 1 ) , D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDCOMPARISONFUNC = ( D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMAXANISOTROPY + 1 ) , D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMINLOD = ( D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDCOMPARISONFUNC + 1 ) , D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMAXLOD = ( D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMINLOD + 1 ) , D3D11_MESSAGE_ID_CREATESAMPLERSTATE_TOOMANYOBJECTS = ( D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMAXLOD + 1 ) , D3D11_MESSAGE_ID_CREATESAMPLERSTATE_NULLDESC = ( D3D11_MESSAGE_ID_CREATESAMPLERSTATE_TOOMANYOBJECTS + 1 ) , D3D11_MESSAGE_ID_CREATEQUERYORPREDICATE_INVALIDQUERY = ( D3D11_MESSAGE_ID_CREATESAMPLERSTATE_NULLDESC + 1 ) , D3D11_MESSAGE_ID_CREATEQUERYORPREDICATE_INVALIDMISCFLAGS = ( D3D11_MESSAGE_ID_CREATEQUERYORPREDICATE_INVALIDQUERY + 1 ) , D3D11_MESSAGE_ID_CREATEQUERYORPREDICATE_UNEXPECTEDMISCFLAG = ( D3D11_MESSAGE_ID_CREATEQUERYORPREDICATE_INVALIDMISCFLAGS + 1 ) , D3D11_MESSAGE_ID_CREATEQUERYORPREDICATE_NULLDESC = ( D3D11_MESSAGE_ID_CREATEQUERYORPREDICATE_UNEXPECTEDMISCFLAG + 1 ) , D3D11_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_TOPOLOGY_UNRECOGNIZED = ( D3D11_MESSAGE_ID_CREATEQUERYORPREDICATE_NULLDESC + 1 ) , D3D11_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_TOPOLOGY_UNDEFINED = ( D3D11_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_TOPOLOGY_UNRECOGNIZED + 1 ) , D3D11_MESSAGE_ID_IASETVERTEXBUFFERS_INVALIDBUFFER = ( D3D11_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_TOPOLOGY_UNDEFINED + 1 ) , D3D11_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_OFFSET_TOO_LARGE = ( D3D11_MESSAGE_ID_IASETVERTEXBUFFERS_INVALIDBUFFER + 1 ) , D3D11_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_BUFFERS_EMPTY = ( D3D11_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_OFFSET_TOO_LARGE + 1 ) , D3D11_MESSAGE_ID_IASETINDEXBUFFER_INVALIDBUFFER = ( D3D11_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_BUFFERS_EMPTY + 1 ) , D3D11_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_FORMAT_INVALID = ( D3D11_MESSAGE_ID_IASETINDEXBUFFER_INVALIDBUFFER + 1 ) , D3D11_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_OFFSET_TOO_LARGE = ( D3D11_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_FORMAT_INVALID + 1 ) , D3D11_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_OFFSET_UNALIGNED = ( D3D11_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_OFFSET_TOO_LARGE + 1 ) , D3D11_MESSAGE_ID_DEVICE_VSSETSHADERRESOURCES_VIEWS_EMPTY = ( D3D11_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_OFFSET_UNALIGNED + 1 ) , D3D11_MESSAGE_ID_VSSETCONSTANTBUFFERS_INVALIDBUFFER = ( D3D11_MESSAGE_ID_DEVICE_VSSETSHADERRESOURCES_VIEWS_EMPTY + 1 ) , D3D11_MESSAGE_ID_DEVICE_VSSETCONSTANTBUFFERS_BUFFERS_EMPTY = ( D3D11_MESSAGE_ID_VSSETCONSTANTBUFFERS_INVALIDBUFFER + 1 ) , D3D11_MESSAGE_ID_DEVICE_VSSETSAMPLERS_SAMPLERS_EMPTY = ( D3D11_MESSAGE_ID_DEVICE_VSSETCONSTANTBUFFERS_BUFFERS_EMPTY + 1 ) , D3D11_MESSAGE_ID_DEVICE_GSSETSHADERRESOURCES_VIEWS_EMPTY = ( D3D11_MESSAGE_ID_DEVICE_VSSETSAMPLERS_SAMPLERS_EMPTY + 1 ) , D3D11_MESSAGE_ID_GSSETCONSTANTBUFFERS_INVALIDBUFFER = ( D3D11_MESSAGE_ID_DEVICE_GSSETSHADERRESOURCES_VIEWS_EMPTY + 1 ) , D3D11_MESSAGE_ID_DEVICE_GSSETCONSTANTBUFFERS_BUFFERS_EMPTY = ( D3D11_MESSAGE_ID_GSSETCONSTANTBUFFERS_INVALIDBUFFER + 1 ) , D3D11_MESSAGE_ID_DEVICE_GSSETSAMPLERS_SAMPLERS_EMPTY = ( D3D11_MESSAGE_ID_DEVICE_GSSETCONSTANTBUFFERS_BUFFERS_EMPTY + 1 ) , D3D11_MESSAGE_ID_SOSETTARGETS_INVALIDBUFFER = ( D3D11_MESSAGE_ID_DEVICE_GSSETSAMPLERS_SAMPLERS_EMPTY + 1 ) , D3D11_MESSAGE_ID_DEVICE_SOSETTARGETS_OFFSET_UNALIGNED = ( D3D11_MESSAGE_ID_SOSETTARGETS_INVALIDBUFFER + 1 ) , D3D11_MESSAGE_ID_DEVICE_PSSETSHADERRESOURCES_VIEWS_EMPTY = ( D3D11_MESSAGE_ID_DEVICE_SOSETTARGETS_OFFSET_UNALIGNED + 1 ) , D3D11_MESSAGE_ID_PSSETCONSTANTBUFFERS_INVALIDBUFFER = ( D3D11_MESSAGE_ID_DEVICE_PSSETSHADERRESOURCES_VIEWS_EMPTY + 1 ) , D3D11_MESSAGE_ID_DEVICE_PSSETCONSTANTBUFFERS_BUFFERS_EMPTY = ( D3D11_MESSAGE_ID_PSSETCONSTANTBUFFERS_INVALIDBUFFER + 1 ) , D3D11_MESSAGE_ID_DEVICE_PSSETSAMPLERS_SAMPLERS_EMPTY = ( D3D11_MESSAGE_ID_DEVICE_PSSETCONSTANTBUFFERS_BUFFERS_EMPTY + 1 ) , D3D11_MESSAGE_ID_DEVICE_RSSETVIEWPORTS_INVALIDVIEWPORT = ( D3D11_MESSAGE_ID_DEVICE_PSSETSAMPLERS_SAMPLERS_EMPTY + 1 ) , D3D11_MESSAGE_ID_DEVICE_RSSETSCISSORRECTS_INVALIDSCISSOR = ( D3D11_MESSAGE_ID_DEVICE_RSSETVIEWPORTS_INVALIDVIEWPORT + 1 ) , D3D11_MESSAGE_ID_CLEARRENDERTARGETVIEW_DENORMFLUSH = ( D3D11_MESSAGE_ID_DEVICE_RSSETSCISSORRECTS_INVALIDSCISSOR + 1 ) , D3D11_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_DENORMFLUSH = ( D3D11_MESSAGE_ID_CLEARRENDERTARGETVIEW_DENORMFLUSH + 1 ) , D3D11_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_INVALID = ( D3D11_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_DENORMFLUSH + 1 ) , D3D11_MESSAGE_ID_DEVICE_IAGETVERTEXBUFFERS_BUFFERS_EMPTY = ( D3D11_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_INVALID + 1 ) , D3D11_MESSAGE_ID_DEVICE_VSGETSHADERRESOURCES_VIEWS_EMPTY = ( D3D11_MESSAGE_ID_DEVICE_IAGETVERTEXBUFFERS_BUFFERS_EMPTY + 1 ) , D3D11_MESSAGE_ID_DEVICE_VSGETCONSTANTBUFFERS_BUFFERS_EMPTY = ( D3D11_MESSAGE_ID_DEVICE_VSGETSHADERRESOURCES_VIEWS_EMPTY + 1 ) , D3D11_MESSAGE_ID_DEVICE_VSGETSAMPLERS_SAMPLERS_EMPTY = ( D3D11_MESSAGE_ID_DEVICE_VSGETCONSTANTBUFFERS_BUFFERS_EMPTY + 1 ) , D3D11_MESSAGE_ID_DEVICE_GSGETSHADERRESOURCES_VIEWS_EMPTY = ( D3D11_MESSAGE_ID_DEVICE_VSGETSAMPLERS_SAMPLERS_EMPTY + 1 ) , D3D11_MESSAGE_ID_DEVICE_GSGETCONSTANTBUFFERS_BUFFERS_EMPTY = ( D3D11_MESSAGE_ID_DEVICE_GSGETSHADERRESOURCES_VIEWS_EMPTY + 1 ) , D3D11_MESSAGE_ID_DEVICE_GSGETSAMPLERS_SAMPLERS_EMPTY = ( D3D11_MESSAGE_ID_DEVICE_GSGETCONSTANTBUFFERS_BUFFERS_EMPTY + 1 ) , D3D11_MESSAGE_ID_DEVICE_SOGETTARGETS_BUFFERS_EMPTY = ( D3D11_MESSAGE_ID_DEVICE_GSGETSAMPLERS_SAMPLERS_EMPTY + 1 ) , D3D11_MESSAGE_ID_DEVICE_PSGETSHADERRESOURCES_VIEWS_EMPTY = ( D3D11_MESSAGE_ID_DEVICE_SOGETTARGETS_BUFFERS_EMPTY + 1 ) , D3D11_MESSAGE_ID_DEVICE_PSGETCONSTANTBUFFERS_BUFFERS_EMPTY = ( D3D11_MESSAGE_ID_DEVICE_PSGETSHADERRESOURCES_VIEWS_EMPTY + 1 ) , D3D11_MESSAGE_ID_DEVICE_PSGETSAMPLERS_SAMPLERS_EMPTY = ( D3D11_MESSAGE_ID_DEVICE_PSGETCONSTANTBUFFERS_BUFFERS_EMPTY + 1 ) , D3D11_MESSAGE_ID_DEVICE_RSGETVIEWPORTS_VIEWPORTS_EMPTY = ( D3D11_MESSAGE_ID_DEVICE_PSGETSAMPLERS_SAMPLERS_EMPTY + 1 ) , D3D11_MESSAGE_ID_DEVICE_RSGETSCISSORRECTS_RECTS_EMPTY = ( D3D11_MESSAGE_ID_DEVICE_RSGETVIEWPORTS_VIEWPORTS_EMPTY + 1 ) , D3D11_MESSAGE_ID_DEVICE_GENERATEMIPS_RESOURCE_INVALID = ( D3D11_MESSAGE_ID_DEVICE_RSGETSCISSORRECTS_RECTS_EMPTY + 1 ) , D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDDESTINATIONSUBRESOURCE = ( D3D11_MESSAGE_ID_DEVICE_GENERATEMIPS_RESOURCE_INVALID + 1 ) , D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCESUBRESOURCE = ( D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDDESTINATIONSUBRESOURCE + 1 ) , D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCEBOX = ( D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCESUBRESOURCE + 1 ) , D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCE = ( D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCEBOX + 1 ) , D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDDESTINATIONSTATE = ( D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCE + 1 ) , D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCESTATE = ( D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDDESTINATIONSTATE + 1 ) , D3D11_MESSAGE_ID_COPYRESOURCE_INVALIDSOURCE = ( D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCESTATE + 1 ) , D3D11_MESSAGE_ID_COPYRESOURCE_INVALIDDESTINATIONSTATE = ( D3D11_MESSAGE_ID_COPYRESOURCE_INVALIDSOURCE + 1 ) , D3D11_MESSAGE_ID_COPYRESOURCE_INVALIDSOURCESTATE = ( D3D11_MESSAGE_ID_COPYRESOURCE_INVALIDDESTINATIONSTATE + 1 ) , D3D11_MESSAGE_ID_UPDATESUBRESOURCE_INVALIDDESTINATIONSUBRESOURCE = ( D3D11_MESSAGE_ID_COPYRESOURCE_INVALIDSOURCESTATE + 1 ) , D3D11_MESSAGE_ID_UPDATESUBRESOURCE_INVALIDDESTINATIONBOX = ( D3D11_MESSAGE_ID_UPDATESUBRESOURCE_INVALIDDESTINATIONSUBRESOURCE + 1 ) , D3D11_MESSAGE_ID_UPDATESUBRESOURCE_INVALIDDESTINATIONSTATE = ( D3D11_MESSAGE_ID_UPDATESUBRESOURCE_INVALIDDESTINATIONBOX + 1 ) , D3D11_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_DESTINATION_INVALID = ( D3D11_MESSAGE_ID_UPDATESUBRESOURCE_INVALIDDESTINATIONSTATE + 1 ) , D3D11_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_DESTINATION_SUBRESOURCE_INVALID = ( D3D11_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_DESTINATION_INVALID + 1 ) , D3D11_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_SOURCE_INVALID = ( D3D11_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_DESTINATION_SUBRESOURCE_INVALID + 1 ) , D3D11_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_SOURCE_SUBRESOURCE_INVALID = ( D3D11_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_SOURCE_INVALID + 1 ) , D3D11_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_FORMAT_INVALID = ( D3D11_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_SOURCE_SUBRESOURCE_INVALID + 1 ) , D3D11_MESSAGE_ID_BUFFER_MAP_INVALIDMAPTYPE = ( D3D11_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_FORMAT_INVALID + 1 ) , D3D11_MESSAGE_ID_BUFFER_MAP_INVALIDFLAGS = ( D3D11_MESSAGE_ID_BUFFER_MAP_INVALIDMAPTYPE + 1 ) , D3D11_MESSAGE_ID_BUFFER_MAP_ALREADYMAPPED = ( D3D11_MESSAGE_ID_BUFFER_MAP_INVALIDFLAGS + 1 ) , D3D11_MESSAGE_ID_BUFFER_MAP_DEVICEREMOVED_RETURN = ( D3D11_MESSAGE_ID_BUFFER_MAP_ALREADYMAPPED + 1 ) , D3D11_MESSAGE_ID_BUFFER_UNMAP_NOTMAPPED = ( D3D11_MESSAGE_ID_BUFFER_MAP_DEVICEREMOVED_RETURN + 1 ) , D3D11_MESSAGE_ID_TEXTURE1D_MAP_INVALIDMAPTYPE = ( D3D11_MESSAGE_ID_BUFFER_UNMAP_NOTMAPPED + 1 ) , D3D11_MESSAGE_ID_TEXTURE1D_MAP_INVALIDSUBRESOURCE = ( D3D11_MESSAGE_ID_TEXTURE1D_MAP_INVALIDMAPTYPE + 1 ) , D3D11_MESSAGE_ID_TEXTURE1D_MAP_INVALIDFLAGS = ( D3D11_MESSAGE_ID_TEXTURE1D_MAP_INVALIDSUBRESOURCE + 1 ) , D3D11_MESSAGE_ID_TEXTURE1D_MAP_ALREADYMAPPED = ( D3D11_MESSAGE_ID_TEXTURE1D_MAP_INVALIDFLAGS + 1 ) , D3D11_MESSAGE_ID_TEXTURE1D_MAP_DEVICEREMOVED_RETURN = ( D3D11_MESSAGE_ID_TEXTURE1D_MAP_ALREADYMAPPED + 1 ) , D3D11_MESSAGE_ID_TEXTURE1D_UNMAP_INVALIDSUBRESOURCE = ( D3D11_MESSAGE_ID_TEXTURE1D_MAP_DEVICEREMOVED_RETURN + 1 ) , D3D11_MESSAGE_ID_TEXTURE1D_UNMAP_NOTMAPPED = ( D3D11_MESSAGE_ID_TEXTURE1D_UNMAP_INVALIDSUBRESOURCE + 1 ) , D3D11_MESSAGE_ID_TEXTURE2D_MAP_INVALIDMAPTYPE = ( D3D11_MESSAGE_ID_TEXTURE1D_UNMAP_NOTMAPPED + 1 ) , D3D11_MESSAGE_ID_TEXTURE2D_MAP_INVALIDSUBRESOURCE = ( D3D11_MESSAGE_ID_TEXTURE2D_MAP_INVALIDMAPTYPE + 1 ) , D3D11_MESSAGE_ID_TEXTURE2D_MAP_INVALIDFLAGS = ( D3D11_MESSAGE_ID_TEXTURE2D_MAP_INVALIDSUBRESOURCE + 1 ) , D3D11_MESSAGE_ID_TEXTURE2D_MAP_ALREADYMAPPED = ( D3D11_MESSAGE_ID_TEXTURE2D_MAP_INVALIDFLAGS + 1 ) , D3D11_MESSAGE_ID_TEXTURE2D_MAP_DEVICEREMOVED_RETURN = ( D3D11_MESSAGE_ID_TEXTURE2D_MAP_ALREADYMAPPED + 1 ) , D3D11_MESSAGE_ID_TEXTURE2D_UNMAP_INVALIDSUBRESOURCE = ( D3D11_MESSAGE_ID_TEXTURE2D_MAP_DEVICEREMOVED_RETURN + 1 ) , D3D11_MESSAGE_ID_TEXTURE2D_UNMAP_NOTMAPPED = ( D3D11_MESSAGE_ID_TEXTURE2D_UNMAP_INVALIDSUBRESOURCE + 1 ) , D3D11_MESSAGE_ID_TEXTURE3D_MAP_INVALIDMAPTYPE = ( D3D11_MESSAGE_ID_TEXTURE2D_UNMAP_NOTMAPPED + 1 ) , D3D11_MESSAGE_ID_TEXTURE3D_MAP_INVALIDSUBRESOURCE = ( D3D11_MESSAGE_ID_TEXTURE3D_MAP_INVALIDMAPTYPE + 1 ) , D3D11_MESSAGE_ID_TEXTURE3D_MAP_INVALIDFLAGS = ( D3D11_MESSAGE_ID_TEXTURE3D_MAP_INVALIDSUBRESOURCE + 1 ) , D3D11_MESSAGE_ID_TEXTURE3D_MAP_ALREADYMAPPED = ( D3D11_MESSAGE_ID_TEXTURE3D_MAP_INVALIDFLAGS + 1 ) , D3D11_MESSAGE_ID_TEXTURE3D_MAP_DEVICEREMOVED_RETURN = ( D3D11_MESSAGE_ID_TEXTURE3D_MAP_ALREADYMAPPED + 1 ) , D3D11_MESSAGE_ID_TEXTURE3D_UNMAP_INVALIDSUBRESOURCE = ( D3D11_MESSAGE_ID_TEXTURE3D_MAP_DEVICEREMOVED_RETURN + 1 ) , D3D11_MESSAGE_ID_TEXTURE3D_UNMAP_NOTMAPPED = ( D3D11_MESSAGE_ID_TEXTURE3D_UNMAP_INVALIDSUBRESOURCE + 1 ) , D3D11_MESSAGE_ID_CHECKFORMATSUPPORT_FORMAT_DEPRECATED = ( D3D11_MESSAGE_ID_TEXTURE3D_UNMAP_NOTMAPPED + 1 ) , D3D11_MESSAGE_ID_CHECKMULTISAMPLEQUALITYLEVELS_FORMAT_DEPRECATED = ( D3D11_MESSAGE_ID_CHECKFORMATSUPPORT_FORMAT_DEPRECATED + 1 ) , D3D11_MESSAGE_ID_SETEXCEPTIONMODE_UNRECOGNIZEDFLAGS = ( D3D11_MESSAGE_ID_CHECKMULTISAMPLEQUALITYLEVELS_FORMAT_DEPRECATED + 1 ) , D3D11_MESSAGE_ID_SETEXCEPTIONMODE_INVALIDARG_RETURN = ( D3D11_MESSAGE_ID_SETEXCEPTIONMODE_UNRECOGNIZEDFLAGS + 1 ) , D3D11_MESSAGE_ID_SETEXCEPTIONMODE_DEVICEREMOVED_RETURN = ( D3D11_MESSAGE_ID_SETEXCEPTIONMODE_INVALIDARG_RETURN + 1 ) , D3D11_MESSAGE_ID_REF_SIMULATING_INFINITELY_FAST_HARDWARE = ( D3D11_MESSAGE_ID_SETEXCEPTIONMODE_DEVICEREMOVED_RETURN + 1 ) , D3D11_MESSAGE_ID_REF_THREADING_MODE = ( D3D11_MESSAGE_ID_REF_SIMULATING_INFINITELY_FAST_HARDWARE + 1 ) , D3D11_MESSAGE_ID_REF_UMDRIVER_EXCEPTION = ( D3D11_MESSAGE_ID_REF_THREADING_MODE + 1 ) , D3D11_MESSAGE_ID_REF_KMDRIVER_EXCEPTION = ( D3D11_MESSAGE_ID_REF_UMDRIVER_EXCEPTION + 1 ) , D3D11_MESSAGE_ID_REF_HARDWARE_EXCEPTION = ( D3D11_MESSAGE_ID_REF_KMDRIVER_EXCEPTION + 1 ) , D3D11_MESSAGE_ID_REF_ACCESSING_INDEXABLE_TEMP_OUT_OF_RANGE = ( D3D11_MESSAGE_ID_REF_HARDWARE_EXCEPTION + 1 ) , D3D11_MESSAGE_ID_REF_PROBLEM_PARSING_SHADER = ( D3D11_MESSAGE_ID_REF_ACCESSING_INDEXABLE_TEMP_OUT_OF_RANGE + 1 ) , D3D11_MESSAGE_ID_REF_OUT_OF_MEMORY = ( D3D11_MESSAGE_ID_REF_PROBLEM_PARSING_SHADER + 1 ) , D3D11_MESSAGE_ID_REF_INFO = ( D3D11_MESSAGE_ID_REF_OUT_OF_MEMORY + 1 ) , D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEXPOS_OVERFLOW = ( D3D11_MESSAGE_ID_REF_INFO + 1 ) , D3D11_MESSAGE_ID_DEVICE_DRAWINDEXED_INDEXPOS_OVERFLOW = ( D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEXPOS_OVERFLOW + 1 ) , D3D11_MESSAGE_ID_DEVICE_DRAWINSTANCED_VERTEXPOS_OVERFLOW = ( D3D11_MESSAGE_ID_DEVICE_DRAWINDEXED_INDEXPOS_OVERFLOW + 1 ) , D3D11_MESSAGE_ID_DEVICE_DRAWINSTANCED_INSTANCEPOS_OVERFLOW = ( D3D11_MESSAGE_ID_DEVICE_DRAWINSTANCED_VERTEXPOS_OVERFLOW + 1 ) , D3D11_MESSAGE_ID_DEVICE_DRAWINDEXEDINSTANCED_INSTANCEPOS_OVERFLOW = ( D3D11_MESSAGE_ID_DEVICE_DRAWINSTANCED_INSTANCEPOS_OVERFLOW + 1 ) , D3D11_MESSAGE_ID_DEVICE_DRAWINDEXEDINSTANCED_INDEXPOS_OVERFLOW = ( D3D11_MESSAGE_ID_DEVICE_DRAWINDEXEDINSTANCED_INSTANCEPOS_OVERFLOW + 1 ) , D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_SHADER_NOT_SET = ( D3D11_MESSAGE_ID_DEVICE_DRAWINDEXEDINSTANCED_INDEXPOS_OVERFLOW + 1 ) , D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_SEMANTICNAME_NOT_FOUND = ( D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_SHADER_NOT_SET + 1 ) , D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_REGISTERINDEX = ( D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_SEMANTICNAME_NOT_FOUND + 1 ) , D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_COMPONENTTYPE = ( D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_REGISTERINDEX + 1 ) , D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_REGISTERMASK = ( D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_COMPONENTTYPE + 1 ) , D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_SYSTEMVALUE = ( D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_REGISTERMASK + 1 ) , D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_NEVERWRITTEN_ALWAYSREADS = ( D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_SYSTEMVALUE + 1 ) , D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_BUFFER_NOT_SET = ( D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_NEVERWRITTEN_ALWAYSREADS + 1 ) , D3D11_MESSAGE_ID_DEVICE_DRAW_INPUTLAYOUT_NOT_SET = ( D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_BUFFER_NOT_SET + 1 ) , D3D11_MESSAGE_ID_DEVICE_DRAW_CONSTANT_BUFFER_NOT_SET = ( D3D11_MESSAGE_ID_DEVICE_DRAW_INPUTLAYOUT_NOT_SET + 1 ) , D3D11_MESSAGE_ID_DEVICE_DRAW_CONSTANT_BUFFER_TOO_SMALL = ( D3D11_MESSAGE_ID_DEVICE_DRAW_CONSTANT_BUFFER_NOT_SET + 1 ) , D3D11_MESSAGE_ID_DEVICE_DRAW_SAMPLER_NOT_SET = ( D3D11_MESSAGE_ID_DEVICE_DRAW_CONSTANT_BUFFER_TOO_SMALL + 1 ) , D3D11_MESSAGE_ID_DEVICE_DRAW_SHADERRESOURCEVIEW_NOT_SET = ( D3D11_MESSAGE_ID_DEVICE_DRAW_SAMPLER_NOT_SET + 1 ) , D3D11_MESSAGE_ID_DEVICE_DRAW_VIEW_DIMENSION_MISMATCH = ( D3D11_MESSAGE_ID_DEVICE_DRAW_SHADERRESOURCEVIEW_NOT_SET + 1 ) , D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_BUFFER_STRIDE_TOO_SMALL = ( D3D11_MESSAGE_ID_DEVICE_DRAW_VIEW_DIMENSION_MISMATCH + 1 ) , D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_BUFFER_TOO_SMALL = ( D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_BUFFER_STRIDE_TOO_SMALL + 1 ) , D3D11_MESSAGE_ID_DEVICE_DRAW_INDEX_BUFFER_NOT_SET = ( D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_BUFFER_TOO_SMALL + 1 ) , D3D11_MESSAGE_ID_DEVICE_DRAW_INDEX_BUFFER_FORMAT_INVALID = ( D3D11_MESSAGE_ID_DEVICE_DRAW_INDEX_BUFFER_NOT_SET + 1 ) , D3D11_MESSAGE_ID_DEVICE_DRAW_INDEX_BUFFER_TOO_SMALL = ( D3D11_MESSAGE_ID_DEVICE_DRAW_INDEX_BUFFER_FORMAT_INVALID + 1 ) , D3D11_MESSAGE_ID_DEVICE_DRAW_GS_INPUT_PRIMITIVE_MISMATCH = ( D3D11_MESSAGE_ID_DEVICE_DRAW_INDEX_BUFFER_TOO_SMALL + 1 ) , D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_RETURN_TYPE_MISMATCH = ( D3D11_MESSAGE_ID_DEVICE_DRAW_GS_INPUT_PRIMITIVE_MISMATCH + 1 ) , D3D11_MESSAGE_ID_DEVICE_DRAW_POSITION_NOT_PRESENT = ( D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_RETURN_TYPE_MISMATCH + 1 ) , D3D11_MESSAGE_ID_DEVICE_DRAW_OUTPUT_STREAM_NOT_SET = ( D3D11_MESSAGE_ID_DEVICE_DRAW_POSITION_NOT_PRESENT + 1 ) , D3D11_MESSAGE_ID_DEVICE_DRAW_BOUND_RESOURCE_MAPPED = ( D3D11_MESSAGE_ID_DEVICE_DRAW_OUTPUT_STREAM_NOT_SET + 1 ) , D3D11_MESSAGE_ID_DEVICE_DRAW_INVALID_PRIMITIVETOPOLOGY = ( D3D11_MESSAGE_ID_DEVICE_DRAW_BOUND_RESOURCE_MAPPED + 1 ) , D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_OFFSET_UNALIGNED = ( D3D11_MESSAGE_ID_DEVICE_DRAW_INVALID_PRIMITIVETOPOLOGY + 1 ) , D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_STRIDE_UNALIGNED = ( D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_OFFSET_UNALIGNED + 1 ) , D3D11_MESSAGE_ID_DEVICE_DRAW_INDEX_OFFSET_UNALIGNED = ( D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_STRIDE_UNALIGNED + 1 ) , D3D11_MESSAGE_ID_DEVICE_DRAW_OUTPUT_STREAM_OFFSET_UNALIGNED = ( D3D11_MESSAGE_ID_DEVICE_DRAW_INDEX_OFFSET_UNALIGNED + 1 ) , D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_LD_UNSUPPORTED = ( D3D11_MESSAGE_ID_DEVICE_DRAW_OUTPUT_STREAM_OFFSET_UNALIGNED + 1 ) , D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_SAMPLE_UNSUPPORTED = ( D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_LD_UNSUPPORTED + 1 ) , D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_SAMPLE_C_UNSUPPORTED = ( D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_SAMPLE_UNSUPPORTED + 1 ) , D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_MULTISAMPLE_UNSUPPORTED = ( D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_SAMPLE_C_UNSUPPORTED + 1 ) , D3D11_MESSAGE_ID_DEVICE_DRAW_SO_TARGETS_BOUND_WITHOUT_SOURCE = ( D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_MULTISAMPLE_UNSUPPORTED + 1 ) , D3D11_MESSAGE_ID_DEVICE_DRAW_SO_STRIDE_LARGER_THAN_BUFFER = ( D3D11_MESSAGE_ID_DEVICE_DRAW_SO_TARGETS_BOUND_WITHOUT_SOURCE + 1 ) , D3D11_MESSAGE_ID_DEVICE_DRAW_OM_RENDER_TARGET_DOES_NOT_SUPPORT_BLENDING = ( D3D11_MESSAGE_ID_DEVICE_DRAW_SO_STRIDE_LARGER_THAN_BUFFER + 1 ) , D3D11_MESSAGE_ID_DEVICE_DRAW_OM_DUAL_SOURCE_BLENDING_CAN_ONLY_HAVE_RENDER_TARGET_0 = ( D3D11_MESSAGE_ID_DEVICE_DRAW_OM_RENDER_TARGET_DOES_NOT_SUPPORT_BLENDING + 1 ) , D3D11_MESSAGE_ID_DEVICE_REMOVAL_PROCESS_AT_FAULT = ( D3D11_MESSAGE_ID_DEVICE_DRAW_OM_DUAL_SOURCE_BLENDING_CAN_ONLY_HAVE_RENDER_TARGET_0 + 1 ) , D3D11_MESSAGE_ID_DEVICE_REMOVAL_PROCESS_POSSIBLY_AT_FAULT = ( D3D11_MESSAGE_ID_DEVICE_REMOVAL_PROCESS_AT_FAULT + 1 ) , D3D11_MESSAGE_ID_DEVICE_REMOVAL_PROCESS_NOT_AT_FAULT = ( D3D11_MESSAGE_ID_DEVICE_REMOVAL_PROCESS_POSSIBLY_AT_FAULT + 1 ) , D3D11_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_INVALIDARG_RETURN = ( D3D11_MESSAGE_ID_DEVICE_REMOVAL_PROCESS_NOT_AT_FAULT + 1 ) , D3D11_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_OUTOFMEMORY_RETURN = ( D3D11_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_INVALIDARG_RETURN + 1 ) , D3D11_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_BADINTERFACE_RETURN = ( D3D11_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_OUTOFMEMORY_RETURN + 1 ) , D3D11_MESSAGE_ID_DEVICE_DRAW_VIEWPORT_NOT_SET = ( D3D11_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_BADINTERFACE_RETURN + 1 ) , D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_TRAILING_DIGIT_IN_SEMANTIC = ( D3D11_MESSAGE_ID_DEVICE_DRAW_VIEWPORT_NOT_SET + 1 ) , D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_TRAILING_DIGIT_IN_SEMANTIC = ( D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_TRAILING_DIGIT_IN_SEMANTIC + 1 ) , D3D11_MESSAGE_ID_DEVICE_RSSETVIEWPORTS_DENORMFLUSH = ( D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_TRAILING_DIGIT_IN_SEMANTIC + 1 ) , D3D11_MESSAGE_ID_OMSETRENDERTARGETS_INVALIDVIEW = ( D3D11_MESSAGE_ID_DEVICE_RSSETVIEWPORTS_DENORMFLUSH + 1 ) , D3D11_MESSAGE_ID_DEVICE_SETTEXTFILTERSIZE_INVALIDDIMENSIONS = ( D3D11_MESSAGE_ID_OMSETRENDERTARGETS_INVALIDVIEW + 1 ) , D3D11_MESSAGE_ID_DEVICE_DRAW_SAMPLER_MISMATCH = ( D3D11_MESSAGE_ID_DEVICE_SETTEXTFILTERSIZE_INVALIDDIMENSIONS + 1 ) , D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_TYPE_MISMATCH = ( D3D11_MESSAGE_ID_DEVICE_DRAW_SAMPLER_MISMATCH + 1 ) , D3D11_MESSAGE_ID_BLENDSTATE_GETDESC_LEGACY = ( D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_TYPE_MISMATCH + 1 ) , D3D11_MESSAGE_ID_SHADERRESOURCEVIEW_GETDESC_LEGACY = ( D3D11_MESSAGE_ID_BLENDSTATE_GETDESC_LEGACY + 1 ) , D3D11_MESSAGE_ID_CREATEQUERY_OUTOFMEMORY_RETURN = ( D3D11_MESSAGE_ID_SHADERRESOURCEVIEW_GETDESC_LEGACY + 1 ) , D3D11_MESSAGE_ID_CREATEPREDICATE_OUTOFMEMORY_RETURN = ( D3D11_MESSAGE_ID_CREATEQUERY_OUTOFMEMORY_RETURN + 1 ) , D3D11_MESSAGE_ID_CREATECOUNTER_OUTOFRANGE_COUNTER = ( D3D11_MESSAGE_ID_CREATEPREDICATE_OUTOFMEMORY_RETURN + 1 ) , D3D11_MESSAGE_ID_CREATECOUNTER_SIMULTANEOUS_ACTIVE_COUNTERS_EXHAUSTED = ( D3D11_MESSAGE_ID_CREATECOUNTER_OUTOFRANGE_COUNTER + 1 ) , D3D11_MESSAGE_ID_CREATECOUNTER_UNSUPPORTED_WELLKNOWN_COUNTER = ( D3D11_MESSAGE_ID_CREATECOUNTER_SIMULTANEOUS_ACTIVE_COUNTERS_EXHAUSTED + 1 ) , D3D11_MESSAGE_ID_CREATECOUNTER_OUTOFMEMORY_RETURN = ( D3D11_MESSAGE_ID_CREATECOUNTER_UNSUPPORTED_WELLKNOWN_COUNTER + 1 ) , D3D11_MESSAGE_ID_CREATECOUNTER_NONEXCLUSIVE_RETURN = ( D3D11_MESSAGE_ID_CREATECOUNTER_OUTOFMEMORY_RETURN + 1 ) , D3D11_MESSAGE_ID_CREATECOUNTER_NULLDESC = ( D3D11_MESSAGE_ID_CREATECOUNTER_NONEXCLUSIVE_RETURN + 1 ) , D3D11_MESSAGE_ID_CHECKCOUNTER_OUTOFRANGE_COUNTER = ( D3D11_MESSAGE_ID_CREATECOUNTER_NULLDESC + 1 ) , D3D11_MESSAGE_ID_CHECKCOUNTER_UNSUPPORTED_WELLKNOWN_COUNTER = ( D3D11_MESSAGE_ID_CHECKCOUNTER_OUTOFRANGE_COUNTER + 1 ) , D3D11_MESSAGE_ID_SETPREDICATION_INVALID_PREDICATE_STATE = ( D3D11_MESSAGE_ID_CHECKCOUNTER_UNSUPPORTED_WELLKNOWN_COUNTER + 1 ) , D3D11_MESSAGE_ID_QUERY_BEGIN_UNSUPPORTED = ( D3D11_MESSAGE_ID_SETPREDICATION_INVALID_PREDICATE_STATE + 1 ) , D3D11_MESSAGE_ID_PREDICATE_BEGIN_DURING_PREDICATION = ( D3D11_MESSAGE_ID_QUERY_BEGIN_UNSUPPORTED + 1 ) , D3D11_MESSAGE_ID_QUERY_BEGIN_DUPLICATE = ( D3D11_MESSAGE_ID_PREDICATE_BEGIN_DURING_PREDICATION + 1 ) , D3D11_MESSAGE_ID_QUERY_BEGIN_ABANDONING_PREVIOUS_RESULTS = ( D3D11_MESSAGE_ID_QUERY_BEGIN_DUPLICATE + 1 ) , D3D11_MESSAGE_ID_PREDICATE_END_DURING_PREDICATION = ( D3D11_MESSAGE_ID_QUERY_BEGIN_ABANDONING_PREVIOUS_RESULTS + 1 ) , D3D11_MESSAGE_ID_QUERY_END_ABANDONING_PREVIOUS_RESULTS = ( D3D11_MESSAGE_ID_PREDICATE_END_DURING_PREDICATION + 1 ) , D3D11_MESSAGE_ID_QUERY_END_WITHOUT_BEGIN = ( D3D11_MESSAGE_ID_QUERY_END_ABANDONING_PREVIOUS_RESULTS + 1 ) , D3D11_MESSAGE_ID_QUERY_GETDATA_INVALID_DATASIZE = ( D3D11_MESSAGE_ID_QUERY_END_WITHOUT_BEGIN + 1 ) , D3D11_MESSAGE_ID_QUERY_GETDATA_INVALID_FLAGS = ( D3D11_MESSAGE_ID_QUERY_GETDATA_INVALID_DATASIZE + 1 ) , D3D11_MESSAGE_ID_QUERY_GETDATA_INVALID_CALL = ( D3D11_MESSAGE_ID_QUERY_GETDATA_INVALID_FLAGS + 1 ) , D3D11_MESSAGE_ID_DEVICE_DRAW_PS_OUTPUT_TYPE_MISMATCH = ( D3D11_MESSAGE_ID_QUERY_GETDATA_INVALID_CALL + 1 ) , D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_GATHER_UNSUPPORTED = ( D3D11_MESSAGE_ID_DEVICE_DRAW_PS_OUTPUT_TYPE_MISMATCH + 1 ) , D3D11_MESSAGE_ID_DEVICE_DRAW_INVALID_USE_OF_CENTER_MULTISAMPLE_PATTERN = ( D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_GATHER_UNSUPPORTED + 1 ) , D3D11_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_STRIDE_TOO_LARGE = ( D3D11_MESSAGE_ID_DEVICE_DRAW_INVALID_USE_OF_CENTER_MULTISAMPLE_PATTERN + 1 ) , D3D11_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_INVALIDRANGE = ( D3D11_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_STRIDE_TOO_LARGE + 1 ) , D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_EMPTY_LAYOUT = ( D3D11_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_INVALIDRANGE + 1 ) , D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_SAMPLE_COUNT_MISMATCH = ( D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_EMPTY_LAYOUT + 1 ) , D3D11_MESSAGE_ID_D3D10_MESSAGES_END = ( D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_SAMPLE_COUNT_MISMATCH + 1 ) , D3D11_MESSAGE_ID_D3D10L9_MESSAGES_START = 0x100000, D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_STENCIL_NO_TWO_SIDED = ( D3D11_MESSAGE_ID_D3D10L9_MESSAGES_START + 1 ) , D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_DepthBiasClamp_NOT_SUPPORTED = ( D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_STENCIL_NO_TWO_SIDED + 1 ) , D3D11_MESSAGE_ID_CREATESAMPLERSTATE_NO_COMPARISON_SUPPORT = ( D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_DepthBiasClamp_NOT_SUPPORTED + 1 ) , D3D11_MESSAGE_ID_CREATESAMPLERSTATE_EXCESSIVE_ANISOTROPY = ( D3D11_MESSAGE_ID_CREATESAMPLERSTATE_NO_COMPARISON_SUPPORT + 1 ) , D3D11_MESSAGE_ID_CREATESAMPLERSTATE_BORDER_OUT_OF_RANGE = ( D3D11_MESSAGE_ID_CREATESAMPLERSTATE_EXCESSIVE_ANISOTROPY + 1 ) , D3D11_MESSAGE_ID_VSSETSAMPLERS_NOT_SUPPORTED = ( D3D11_MESSAGE_ID_CREATESAMPLERSTATE_BORDER_OUT_OF_RANGE + 1 ) , D3D11_MESSAGE_ID_VSSETSAMPLERS_TOO_MANY_SAMPLERS = ( D3D11_MESSAGE_ID_VSSETSAMPLERS_NOT_SUPPORTED + 1 ) , D3D11_MESSAGE_ID_PSSETSAMPLERS_TOO_MANY_SAMPLERS = ( D3D11_MESSAGE_ID_VSSETSAMPLERS_TOO_MANY_SAMPLERS + 1 ) , D3D11_MESSAGE_ID_CREATERESOURCE_NO_ARRAYS = ( D3D11_MESSAGE_ID_PSSETSAMPLERS_TOO_MANY_SAMPLERS + 1 ) , D3D11_MESSAGE_ID_CREATERESOURCE_NO_VB_AND_IB_BIND = ( D3D11_MESSAGE_ID_CREATERESOURCE_NO_ARRAYS + 1 ) , D3D11_MESSAGE_ID_CREATERESOURCE_NO_TEXTURE_1D = ( D3D11_MESSAGE_ID_CREATERESOURCE_NO_VB_AND_IB_BIND + 1 ) , D3D11_MESSAGE_ID_CREATERESOURCE_DIMENSION_OUT_OF_RANGE = ( D3D11_MESSAGE_ID_CREATERESOURCE_NO_TEXTURE_1D + 1 ) , D3D11_MESSAGE_ID_CREATERESOURCE_NOT_BINDABLE_AS_SHADER_RESOURCE = ( D3D11_MESSAGE_ID_CREATERESOURCE_DIMENSION_OUT_OF_RANGE + 1 ) , D3D11_MESSAGE_ID_OMSETRENDERTARGETS_TOO_MANY_RENDER_TARGETS = ( D3D11_MESSAGE_ID_CREATERESOURCE_NOT_BINDABLE_AS_SHADER_RESOURCE + 1 ) , D3D11_MESSAGE_ID_OMSETRENDERTARGETS_NO_DIFFERING_BIT_DEPTHS = ( D3D11_MESSAGE_ID_OMSETRENDERTARGETS_TOO_MANY_RENDER_TARGETS + 1 ) , D3D11_MESSAGE_ID_IASETVERTEXBUFFERS_BAD_BUFFER_INDEX = ( D3D11_MESSAGE_ID_OMSETRENDERTARGETS_NO_DIFFERING_BIT_DEPTHS + 1 ) , D3D11_MESSAGE_ID_DEVICE_RSSETVIEWPORTS_TOO_MANY_VIEWPORTS = ( D3D11_MESSAGE_ID_IASETVERTEXBUFFERS_BAD_BUFFER_INDEX + 1 ) , D3D11_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_ADJACENCY_UNSUPPORTED = ( D3D11_MESSAGE_ID_DEVICE_RSSETVIEWPORTS_TOO_MANY_VIEWPORTS + 1 ) , D3D11_MESSAGE_ID_DEVICE_RSSETSCISSORRECTS_TOO_MANY_SCISSORS = ( D3D11_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_ADJACENCY_UNSUPPORTED + 1 ) , D3D11_MESSAGE_ID_COPYRESOURCE_ONLY_TEXTURE_2D_WITHIN_GPU_MEMORY = ( D3D11_MESSAGE_ID_DEVICE_RSSETSCISSORRECTS_TOO_MANY_SCISSORS + 1 ) , D3D11_MESSAGE_ID_COPYRESOURCE_NO_TEXTURE_3D_READBACK = ( D3D11_MESSAGE_ID_COPYRESOURCE_ONLY_TEXTURE_2D_WITHIN_GPU_MEMORY + 1 ) , D3D11_MESSAGE_ID_COPYRESOURCE_NO_TEXTURE_ONLY_READBACK = ( D3D11_MESSAGE_ID_COPYRESOURCE_NO_TEXTURE_3D_READBACK + 1 ) , D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_UNSUPPORTED_FORMAT = ( D3D11_MESSAGE_ID_COPYRESOURCE_NO_TEXTURE_ONLY_READBACK + 1 ) , D3D11_MESSAGE_ID_CREATEBLENDSTATE_NO_ALPHA_TO_COVERAGE = ( D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_UNSUPPORTED_FORMAT + 1 ) , D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_DepthClipEnable_MUST_BE_TRUE = ( D3D11_MESSAGE_ID_CREATEBLENDSTATE_NO_ALPHA_TO_COVERAGE + 1 ) , D3D11_MESSAGE_ID_DRAWINDEXED_STARTINDEXLOCATION_MUST_BE_POSITIVE = ( D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_DepthClipEnable_MUST_BE_TRUE + 1 ) , D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_MUST_USE_LOWEST_LOD = ( D3D11_MESSAGE_ID_DRAWINDEXED_STARTINDEXLOCATION_MUST_BE_POSITIVE + 1 ) , D3D11_MESSAGE_ID_CREATESAMPLERSTATE_MINLOD_MUST_NOT_BE_FRACTIONAL = ( D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_MUST_USE_LOWEST_LOD + 1 ) , D3D11_MESSAGE_ID_CREATESAMPLERSTATE_MAXLOD_MUST_BE_FLT_MAX = ( D3D11_MESSAGE_ID_CREATESAMPLERSTATE_MINLOD_MUST_NOT_BE_FRACTIONAL + 1 ) , D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_FIRSTARRAYSLICE_MUST_BE_ZERO = ( D3D11_MESSAGE_ID_CREATESAMPLERSTATE_MAXLOD_MUST_BE_FLT_MAX + 1 ) , D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_CUBES_MUST_HAVE_6_SIDES = ( D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_FIRSTARRAYSLICE_MUST_BE_ZERO + 1 ) , D3D11_MESSAGE_ID_CREATERESOURCE_NOT_BINDABLE_AS_RENDER_TARGET = ( D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_CUBES_MUST_HAVE_6_SIDES + 1 ) , D3D11_MESSAGE_ID_CREATERESOURCE_NO_DWORD_INDEX_BUFFER = ( D3D11_MESSAGE_ID_CREATERESOURCE_NOT_BINDABLE_AS_RENDER_TARGET + 1 ) , D3D11_MESSAGE_ID_CREATERESOURCE_MSAA_PRECLUDES_SHADER_RESOURCE = ( D3D11_MESSAGE_ID_CREATERESOURCE_NO_DWORD_INDEX_BUFFER + 1 ) , D3D11_MESSAGE_ID_CREATERESOURCE_PRESENTATION_PRECLUDES_SHADER_RESOURCE = ( D3D11_MESSAGE_ID_CREATERESOURCE_MSAA_PRECLUDES_SHADER_RESOURCE + 1 ) , D3D11_MESSAGE_ID_CREATEBLENDSTATE_NO_INDEPENDENT_BLEND_ENABLE = ( D3D11_MESSAGE_ID_CREATERESOURCE_PRESENTATION_PRECLUDES_SHADER_RESOURCE + 1 ) , D3D11_MESSAGE_ID_CREATEBLENDSTATE_NO_INDEPENDENT_WRITE_MASKS = ( D3D11_MESSAGE_ID_CREATEBLENDSTATE_NO_INDEPENDENT_BLEND_ENABLE + 1 ) , D3D11_MESSAGE_ID_CREATERESOURCE_NO_STREAM_OUT = ( D3D11_MESSAGE_ID_CREATEBLENDSTATE_NO_INDEPENDENT_WRITE_MASKS + 1 ) , D3D11_MESSAGE_ID_CREATERESOURCE_ONLY_VB_IB_FOR_BUFFERS = ( D3D11_MESSAGE_ID_CREATERESOURCE_NO_STREAM_OUT + 1 ) , D3D11_MESSAGE_ID_CREATERESOURCE_NO_AUTOGEN_FOR_VOLUMES = ( D3D11_MESSAGE_ID_CREATERESOURCE_ONLY_VB_IB_FOR_BUFFERS + 1 ) , D3D11_MESSAGE_ID_CREATERESOURCE_DXGI_FORMAT_R8G8B8A8_CANNOT_BE_SHARED = ( D3D11_MESSAGE_ID_CREATERESOURCE_NO_AUTOGEN_FOR_VOLUMES + 1 ) , D3D11_MESSAGE_ID_VSSHADERRESOURCES_NOT_SUPPORTED = ( D3D11_MESSAGE_ID_CREATERESOURCE_DXGI_FORMAT_R8G8B8A8_CANNOT_BE_SHARED + 1 ) , D3D11_MESSAGE_ID_GEOMETRY_SHADER_NOT_SUPPORTED = ( D3D11_MESSAGE_ID_VSSHADERRESOURCES_NOT_SUPPORTED + 1 ) , D3D11_MESSAGE_ID_STREAM_OUT_NOT_SUPPORTED = ( D3D11_MESSAGE_ID_GEOMETRY_SHADER_NOT_SUPPORTED + 1 ) , D3D11_MESSAGE_ID_TEXT_FILTER_NOT_SUPPORTED = ( D3D11_MESSAGE_ID_STREAM_OUT_NOT_SUPPORTED + 1 ) , D3D11_MESSAGE_ID_CREATEBLENDSTATE_NO_SEPARATE_ALPHA_BLEND = ( D3D11_MESSAGE_ID_TEXT_FILTER_NOT_SUPPORTED + 1 ) , D3D11_MESSAGE_ID_CREATEBLENDSTATE_NO_MRT_BLEND = ( D3D11_MESSAGE_ID_CREATEBLENDSTATE_NO_SEPARATE_ALPHA_BLEND + 1 ) , D3D11_MESSAGE_ID_CREATEBLENDSTATE_OPERATION_NOT_SUPPORTED = ( D3D11_MESSAGE_ID_CREATEBLENDSTATE_NO_MRT_BLEND + 1 ) , D3D11_MESSAGE_ID_CREATESAMPLERSTATE_NO_MIRRORONCE = ( D3D11_MESSAGE_ID_CREATEBLENDSTATE_OPERATION_NOT_SUPPORTED + 1 ) , D3D11_MESSAGE_ID_DRAWINSTANCED_NOT_SUPPORTED = ( D3D11_MESSAGE_ID_CREATESAMPLERSTATE_NO_MIRRORONCE + 1 ) , D3D11_MESSAGE_ID_DRAWINDEXEDINSTANCED_NOT_SUPPORTED_BELOW_9_3 = ( D3D11_MESSAGE_ID_DRAWINSTANCED_NOT_SUPPORTED + 1 ) , D3D11_MESSAGE_ID_DRAWINDEXED_POINTLIST_UNSUPPORTED = ( D3D11_MESSAGE_ID_DRAWINDEXEDINSTANCED_NOT_SUPPORTED_BELOW_9_3 + 1 ) , D3D11_MESSAGE_ID_SETBLENDSTATE_SAMPLE_MASK_CANNOT_BE_ZERO = ( D3D11_MESSAGE_ID_DRAWINDEXED_POINTLIST_UNSUPPORTED + 1 ) , D3D11_MESSAGE_ID_CREATERESOURCE_DIMENSION_EXCEEDS_FEATURE_LEVEL_DEFINITION = ( D3D11_MESSAGE_ID_SETBLENDSTATE_SAMPLE_MASK_CANNOT_BE_ZERO + 1 ) , D3D11_MESSAGE_ID_CREATERESOURCE_ONLY_SINGLE_MIP_LEVEL_DEPTH_STENCIL_SUPPORTED = ( D3D11_MESSAGE_ID_CREATERESOURCE_DIMENSION_EXCEEDS_FEATURE_LEVEL_DEFINITION + 1 ) , D3D11_MESSAGE_ID_DEVICE_RSSETSCISSORRECTS_NEGATIVESCISSOR = ( D3D11_MESSAGE_ID_CREATERESOURCE_ONLY_SINGLE_MIP_LEVEL_DEPTH_STENCIL_SUPPORTED + 1 ) , D3D11_MESSAGE_ID_SLOT_ZERO_MUST_BE_D3D10_INPUT_PER_VERTEX_DATA = ( D3D11_MESSAGE_ID_DEVICE_RSSETSCISSORRECTS_NEGATIVESCISSOR + 1 ) , D3D11_MESSAGE_ID_CREATERESOURCE_NON_POW_2_MIPMAP = ( D3D11_MESSAGE_ID_SLOT_ZERO_MUST_BE_D3D10_INPUT_PER_VERTEX_DATA + 1 ) , D3D11_MESSAGE_ID_CREATESAMPLERSTATE_BORDER_NOT_SUPPORTED = ( D3D11_MESSAGE_ID_CREATERESOURCE_NON_POW_2_MIPMAP + 1 ) , D3D11_MESSAGE_ID_OMSETRENDERTARGETS_NO_SRGB_MRT = ( D3D11_MESSAGE_ID_CREATESAMPLERSTATE_BORDER_NOT_SUPPORTED + 1 ) , D3D11_MESSAGE_ID_D3D10L9_MESSAGES_END = ( D3D11_MESSAGE_ID_OMSETRENDERTARGETS_NO_SRGB_MRT + 1 ) , D3D11_MESSAGE_ID_D3D11_MESSAGES_START = 0x200000, D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDFLAGS = ( D3D11_MESSAGE_ID_D3D11_MESSAGES_START + 1 ) , D3D11_MESSAGE_ID_CREATEVERTEXSHADER_INVALIDCLASSLINKAGE = ( D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDFLAGS + 1 ) , D3D11_MESSAGE_ID_CREATEGEOMETRYSHADER_INVALIDCLASSLINKAGE = ( D3D11_MESSAGE_ID_CREATEVERTEXSHADER_INVALIDCLASSLINKAGE + 1 ) , D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDNUMSTREAMS = ( D3D11_MESSAGE_ID_CREATEGEOMETRYSHADER_INVALIDCLASSLINKAGE + 1 ) , D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSTREAMTORASTERIZER = ( D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDNUMSTREAMS + 1 ) , D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UNEXPECTEDSTREAMS = ( D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSTREAMTORASTERIZER + 1 ) , D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDCLASSLINKAGE = ( D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UNEXPECTEDSTREAMS + 1 ) , D3D11_MESSAGE_ID_CREATEPIXELSHADER_INVALIDCLASSLINKAGE = ( D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDCLASSLINKAGE + 1 ) , D3D11_MESSAGE_ID_CREATEDEFERREDCONTEXT_INVALID_COMMANDLISTFLAGS = ( D3D11_MESSAGE_ID_CREATEPIXELSHADER_INVALIDCLASSLINKAGE + 1 ) , D3D11_MESSAGE_ID_CREATEDEFERREDCONTEXT_SINGLETHREADED = ( D3D11_MESSAGE_ID_CREATEDEFERREDCONTEXT_INVALID_COMMANDLISTFLAGS + 1 ) , D3D11_MESSAGE_ID_CREATEDEFERREDCONTEXT_INVALIDARG_RETURN = ( D3D11_MESSAGE_ID_CREATEDEFERREDCONTEXT_SINGLETHREADED + 1 ) , D3D11_MESSAGE_ID_CREATEDEFERREDCONTEXT_INVALID_CALL_RETURN = ( D3D11_MESSAGE_ID_CREATEDEFERREDCONTEXT_INVALIDARG_RETURN + 1 ) , D3D11_MESSAGE_ID_CREATEDEFERREDCONTEXT_OUTOFMEMORY_RETURN = ( D3D11_MESSAGE_ID_CREATEDEFERREDCONTEXT_INVALID_CALL_RETURN + 1 ) , D3D11_MESSAGE_ID_FINISHDISPLAYLIST_ONIMMEDIATECONTEXT = ( D3D11_MESSAGE_ID_CREATEDEFERREDCONTEXT_OUTOFMEMORY_RETURN + 1 ) , D3D11_MESSAGE_ID_FINISHDISPLAYLIST_OUTOFMEMORY_RETURN = ( D3D11_MESSAGE_ID_FINISHDISPLAYLIST_ONIMMEDIATECONTEXT + 1 ) , D3D11_MESSAGE_ID_FINISHDISPLAYLIST_INVALID_CALL_RETURN = ( D3D11_MESSAGE_ID_FINISHDISPLAYLIST_OUTOFMEMORY_RETURN + 1 ) , D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSTREAM = ( D3D11_MESSAGE_ID_FINISHDISPLAYLIST_INVALID_CALL_RETURN + 1 ) , D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UNEXPECTEDENTRIES = ( D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSTREAM + 1 ) , D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UNEXPECTEDSTRIDES = ( D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UNEXPECTEDENTRIES + 1 ) , D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDNUMSTRIDES = ( D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UNEXPECTEDSTRIDES + 1 ) , D3D11_MESSAGE_ID_DEVICE_HSSETSHADERRESOURCES_HAZARD = ( D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDNUMSTRIDES + 1 ) , D3D11_MESSAGE_ID_DEVICE_HSSETCONSTANTBUFFERS_HAZARD = ( D3D11_MESSAGE_ID_DEVICE_HSSETSHADERRESOURCES_HAZARD + 1 ) , D3D11_MESSAGE_ID_HSSETSHADERRESOURCES_UNBINDDELETINGOBJECT = ( D3D11_MESSAGE_ID_DEVICE_HSSETCONSTANTBUFFERS_HAZARD + 1 ) , D3D11_MESSAGE_ID_HSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT = ( D3D11_MESSAGE_ID_HSSETSHADERRESOURCES_UNBINDDELETINGOBJECT + 1 ) , D3D11_MESSAGE_ID_CREATEHULLSHADER_INVALIDCALL = ( D3D11_MESSAGE_ID_HSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT + 1 ) , D3D11_MESSAGE_ID_CREATEHULLSHADER_OUTOFMEMORY = ( D3D11_MESSAGE_ID_CREATEHULLSHADER_INVALIDCALL + 1 ) , D3D11_MESSAGE_ID_CREATEHULLSHADER_INVALIDSHADERBYTECODE = ( D3D11_MESSAGE_ID_CREATEHULLSHADER_OUTOFMEMORY + 1 ) , D3D11_MESSAGE_ID_CREATEHULLSHADER_INVALIDSHADERTYPE = ( D3D11_MESSAGE_ID_CREATEHULLSHADER_INVALIDSHADERBYTECODE + 1 ) , D3D11_MESSAGE_ID_CREATEHULLSHADER_INVALIDCLASSLINKAGE = ( D3D11_MESSAGE_ID_CREATEHULLSHADER_INVALIDSHADERTYPE + 1 ) , D3D11_MESSAGE_ID_DEVICE_HSSETSHADERRESOURCES_VIEWS_EMPTY = ( D3D11_MESSAGE_ID_CREATEHULLSHADER_INVALIDCLASSLINKAGE + 1 ) , D3D11_MESSAGE_ID_HSSETCONSTANTBUFFERS_INVALIDBUFFER = ( D3D11_MESSAGE_ID_DEVICE_HSSETSHADERRESOURCES_VIEWS_EMPTY + 1 ) , D3D11_MESSAGE_ID_DEVICE_HSSETCONSTANTBUFFERS_BUFFERS_EMPTY = ( D3D11_MESSAGE_ID_HSSETCONSTANTBUFFERS_INVALIDBUFFER + 1 ) , D3D11_MESSAGE_ID_DEVICE_HSSETSAMPLERS_SAMPLERS_EMPTY = ( D3D11_MESSAGE_ID_DEVICE_HSSETCONSTANTBUFFERS_BUFFERS_EMPTY + 1 ) , D3D11_MESSAGE_ID_DEVICE_HSGETSHADERRESOURCES_VIEWS_EMPTY = ( D3D11_MESSAGE_ID_DEVICE_HSSETSAMPLERS_SAMPLERS_EMPTY + 1 ) , D3D11_MESSAGE_ID_DEVICE_HSGETCONSTANTBUFFERS_BUFFERS_EMPTY = ( D3D11_MESSAGE_ID_DEVICE_HSGETSHADERRESOURCES_VIEWS_EMPTY + 1 ) , D3D11_MESSAGE_ID_DEVICE_HSGETSAMPLERS_SAMPLERS_EMPTY = ( D3D11_MESSAGE_ID_DEVICE_HSGETCONSTANTBUFFERS_BUFFERS_EMPTY + 1 ) , D3D11_MESSAGE_ID_DEVICE_DSSETSHADERRESOURCES_HAZARD = ( D3D11_MESSAGE_ID_DEVICE_HSGETSAMPLERS_SAMPLERS_EMPTY + 1 ) , D3D11_MESSAGE_ID_DEVICE_DSSETCONSTANTBUFFERS_HAZARD = ( D3D11_MESSAGE_ID_DEVICE_DSSETSHADERRESOURCES_HAZARD + 1 ) , D3D11_MESSAGE_ID_DSSETSHADERRESOURCES_UNBINDDELETINGOBJECT = ( D3D11_MESSAGE_ID_DEVICE_DSSETCONSTANTBUFFERS_HAZARD + 1 ) , D3D11_MESSAGE_ID_DSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT = ( D3D11_MESSAGE_ID_DSSETSHADERRESOURCES_UNBINDDELETINGOBJECT + 1 ) , D3D11_MESSAGE_ID_CREATEDOMAINSHADER_INVALIDCALL = ( D3D11_MESSAGE_ID_DSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT + 1 ) , D3D11_MESSAGE_ID_CREATEDOMAINSHADER_OUTOFMEMORY = ( D3D11_MESSAGE_ID_CREATEDOMAINSHADER_INVALIDCALL + 1 ) , D3D11_MESSAGE_ID_CREATEDOMAINSHADER_INVALIDSHADERBYTECODE = ( D3D11_MESSAGE_ID_CREATEDOMAINSHADER_OUTOFMEMORY + 1 ) , D3D11_MESSAGE_ID_CREATEDOMAINSHADER_INVALIDSHADERTYPE = ( D3D11_MESSAGE_ID_CREATEDOMAINSHADER_INVALIDSHADERBYTECODE + 1 ) , D3D11_MESSAGE_ID_CREATEDOMAINSHADER_INVALIDCLASSLINKAGE = ( D3D11_MESSAGE_ID_CREATEDOMAINSHADER_INVALIDSHADERTYPE + 1 ) , D3D11_MESSAGE_ID_DEVICE_DSSETSHADERRESOURCES_VIEWS_EMPTY = ( D3D11_MESSAGE_ID_CREATEDOMAINSHADER_INVALIDCLASSLINKAGE + 1 ) , D3D11_MESSAGE_ID_DSSETCONSTANTBUFFERS_INVALIDBUFFER = ( D3D11_MESSAGE_ID_DEVICE_DSSETSHADERRESOURCES_VIEWS_EMPTY + 1 ) , D3D11_MESSAGE_ID_DEVICE_DSSETCONSTANTBUFFERS_BUFFERS_EMPTY = ( D3D11_MESSAGE_ID_DSSETCONSTANTBUFFERS_INVALIDBUFFER + 1 ) , D3D11_MESSAGE_ID_DEVICE_DSSETSAMPLERS_SAMPLERS_EMPTY = ( D3D11_MESSAGE_ID_DEVICE_DSSETCONSTANTBUFFERS_BUFFERS_EMPTY + 1 ) , D3D11_MESSAGE_ID_DEVICE_DSGETSHADERRESOURCES_VIEWS_EMPTY = ( D3D11_MESSAGE_ID_DEVICE_DSSETSAMPLERS_SAMPLERS_EMPTY + 1 ) , D3D11_MESSAGE_ID_DEVICE_DSGETCONSTANTBUFFERS_BUFFERS_EMPTY = ( D3D11_MESSAGE_ID_DEVICE_DSGETSHADERRESOURCES_VIEWS_EMPTY + 1 ) , D3D11_MESSAGE_ID_DEVICE_DSGETSAMPLERS_SAMPLERS_EMPTY = ( D3D11_MESSAGE_ID_DEVICE_DSGETCONSTANTBUFFERS_BUFFERS_EMPTY + 1 ) , D3D11_MESSAGE_ID_DEVICE_DRAW_HS_XOR_DS_MISMATCH = ( D3D11_MESSAGE_ID_DEVICE_DSGETSAMPLERS_SAMPLERS_EMPTY + 1 ) , D3D11_MESSAGE_ID_DEFERRED_CONTEXT_REMOVAL_PROCESS_AT_FAULT = ( D3D11_MESSAGE_ID_DEVICE_DRAW_HS_XOR_DS_MISMATCH + 1 ) , D3D11_MESSAGE_ID_DEVICE_DRAWINDIRECT_INVALID_ARG_BUFFER = ( D3D11_MESSAGE_ID_DEFERRED_CONTEXT_REMOVAL_PROCESS_AT_FAULT + 1 ) , D3D11_MESSAGE_ID_DEVICE_DRAWINDIRECT_OFFSET_UNALIGNED = ( D3D11_MESSAGE_ID_DEVICE_DRAWINDIRECT_INVALID_ARG_BUFFER + 1 ) , D3D11_MESSAGE_ID_DEVICE_DRAWINDIRECT_OFFSET_OVERFLOW = ( D3D11_MESSAGE_ID_DEVICE_DRAWINDIRECT_OFFSET_UNALIGNED + 1 ) , D3D11_MESSAGE_ID_RESOURCE_MAP_INVALIDMAPTYPE = ( D3D11_MESSAGE_ID_DEVICE_DRAWINDIRECT_OFFSET_OVERFLOW + 1 ) , D3D11_MESSAGE_ID_RESOURCE_MAP_INVALIDSUBRESOURCE = ( D3D11_MESSAGE_ID_RESOURCE_MAP_INVALIDMAPTYPE + 1 ) , D3D11_MESSAGE_ID_RESOURCE_MAP_INVALIDFLAGS = ( D3D11_MESSAGE_ID_RESOURCE_MAP_INVALIDSUBRESOURCE + 1 ) , D3D11_MESSAGE_ID_RESOURCE_MAP_ALREADYMAPPED = ( D3D11_MESSAGE_ID_RESOURCE_MAP_INVALIDFLAGS + 1 ) , D3D11_MESSAGE_ID_RESOURCE_MAP_DEVICEREMOVED_RETURN = ( D3D11_MESSAGE_ID_RESOURCE_MAP_ALREADYMAPPED + 1 ) , D3D11_MESSAGE_ID_RESOURCE_MAP_OUTOFMEMORY_RETURN = ( D3D11_MESSAGE_ID_RESOURCE_MAP_DEVICEREMOVED_RETURN + 1 ) , D3D11_MESSAGE_ID_RESOURCE_MAP_WITHOUT_INITIAL_DISCARD = ( D3D11_MESSAGE_ID_RESOURCE_MAP_OUTOFMEMORY_RETURN + 1 ) , D3D11_MESSAGE_ID_RESOURCE_UNMAP_INVALIDSUBRESOURCE = ( D3D11_MESSAGE_ID_RESOURCE_MAP_WITHOUT_INITIAL_DISCARD + 1 ) , D3D11_MESSAGE_ID_RESOURCE_UNMAP_NOTMAPPED = ( D3D11_MESSAGE_ID_RESOURCE_UNMAP_INVALIDSUBRESOURCE + 1 ) , D3D11_MESSAGE_ID_DEVICE_DRAW_RASTERIZING_CONTROL_POINTS = ( D3D11_MESSAGE_ID_RESOURCE_UNMAP_NOTMAPPED + 1 ) , D3D11_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_TOPOLOGY_UNSUPPORTED = ( D3D11_MESSAGE_ID_DEVICE_DRAW_RASTERIZING_CONTROL_POINTS + 1 ) , D3D11_MESSAGE_ID_DEVICE_DRAW_HS_DS_SIGNATURE_MISMATCH = ( D3D11_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_TOPOLOGY_UNSUPPORTED + 1 ) , D3D11_MESSAGE_ID_DEVICE_DRAW_HULL_SHADER_INPUT_TOPOLOGY_MISMATCH = ( D3D11_MESSAGE_ID_DEVICE_DRAW_HS_DS_SIGNATURE_MISMATCH + 1 ) , D3D11_MESSAGE_ID_DEVICE_DRAW_HS_DS_CONTROL_POINT_COUNT_MISMATCH = ( D3D11_MESSAGE_ID_DEVICE_DRAW_HULL_SHADER_INPUT_TOPOLOGY_MISMATCH + 1 ) , D3D11_MESSAGE_ID_DEVICE_DRAW_HS_DS_TESSELLATOR_DOMAIN_MISMATCH = ( D3D11_MESSAGE_ID_DEVICE_DRAW_HS_DS_CONTROL_POINT_COUNT_MISMATCH + 1 ) , D3D11_MESSAGE_ID_CREATE_CONTEXT = ( D3D11_MESSAGE_ID_DEVICE_DRAW_HS_DS_TESSELLATOR_DOMAIN_MISMATCH + 1 ) , D3D11_MESSAGE_ID_LIVE_CONTEXT = ( D3D11_MESSAGE_ID_CREATE_CONTEXT + 1 ) , D3D11_MESSAGE_ID_DESTROY_CONTEXT = ( D3D11_MESSAGE_ID_LIVE_CONTEXT + 1 ) , D3D11_MESSAGE_ID_CREATE_BUFFER = ( D3D11_MESSAGE_ID_DESTROY_CONTEXT + 1 ) , D3D11_MESSAGE_ID_LIVE_BUFFER = ( D3D11_MESSAGE_ID_CREATE_BUFFER + 1 ) , D3D11_MESSAGE_ID_DESTROY_BUFFER = ( D3D11_MESSAGE_ID_LIVE_BUFFER + 1 ) , D3D11_MESSAGE_ID_CREATE_TEXTURE1D = ( D3D11_MESSAGE_ID_DESTROY_BUFFER + 1 ) , D3D11_MESSAGE_ID_LIVE_TEXTURE1D = ( D3D11_MESSAGE_ID_CREATE_TEXTURE1D + 1 ) , D3D11_MESSAGE_ID_DESTROY_TEXTURE1D = ( D3D11_MESSAGE_ID_LIVE_TEXTURE1D + 1 ) , D3D11_MESSAGE_ID_CREATE_TEXTURE2D = ( D3D11_MESSAGE_ID_DESTROY_TEXTURE1D + 1 ) , D3D11_MESSAGE_ID_LIVE_TEXTURE2D = ( D3D11_MESSAGE_ID_CREATE_TEXTURE2D + 1 ) , D3D11_MESSAGE_ID_DESTROY_TEXTURE2D = ( D3D11_MESSAGE_ID_LIVE_TEXTURE2D + 1 ) , D3D11_MESSAGE_ID_CREATE_TEXTURE3D = ( D3D11_MESSAGE_ID_DESTROY_TEXTURE2D + 1 ) , D3D11_MESSAGE_ID_LIVE_TEXTURE3D = ( D3D11_MESSAGE_ID_CREATE_TEXTURE3D + 1 ) , D3D11_MESSAGE_ID_DESTROY_TEXTURE3D = ( D3D11_MESSAGE_ID_LIVE_TEXTURE3D + 1 ) , D3D11_MESSAGE_ID_CREATE_SHADERRESOURCEVIEW = ( D3D11_MESSAGE_ID_DESTROY_TEXTURE3D + 1 ) , D3D11_MESSAGE_ID_LIVE_SHADERRESOURCEVIEW = ( D3D11_MESSAGE_ID_CREATE_SHADERRESOURCEVIEW + 1 ) , D3D11_MESSAGE_ID_DESTROY_SHADERRESOURCEVIEW = ( D3D11_MESSAGE_ID_LIVE_SHADERRESOURCEVIEW + 1 ) , D3D11_MESSAGE_ID_CREATE_RENDERTARGETVIEW = ( D3D11_MESSAGE_ID_DESTROY_SHADERRESOURCEVIEW + 1 ) , D3D11_MESSAGE_ID_LIVE_RENDERTARGETVIEW = ( D3D11_MESSAGE_ID_CREATE_RENDERTARGETVIEW + 1 ) , D3D11_MESSAGE_ID_DESTROY_RENDERTARGETVIEW = ( D3D11_MESSAGE_ID_LIVE_RENDERTARGETVIEW + 1 ) , D3D11_MESSAGE_ID_CREATE_DEPTHSTENCILVIEW = ( D3D11_MESSAGE_ID_DESTROY_RENDERTARGETVIEW + 1 ) , D3D11_MESSAGE_ID_LIVE_DEPTHSTENCILVIEW = ( D3D11_MESSAGE_ID_CREATE_DEPTHSTENCILVIEW + 1 ) , D3D11_MESSAGE_ID_DESTROY_DEPTHSTENCILVIEW = ( D3D11_MESSAGE_ID_LIVE_DEPTHSTENCILVIEW + 1 ) , D3D11_MESSAGE_ID_CREATE_VERTEXSHADER = ( D3D11_MESSAGE_ID_DESTROY_DEPTHSTENCILVIEW + 1 ) , D3D11_MESSAGE_ID_LIVE_VERTEXSHADER = ( D3D11_MESSAGE_ID_CREATE_VERTEXSHADER + 1 ) , D3D11_MESSAGE_ID_DESTROY_VERTEXSHADER = ( D3D11_MESSAGE_ID_LIVE_VERTEXSHADER + 1 ) , D3D11_MESSAGE_ID_CREATE_HULLSHADER = ( D3D11_MESSAGE_ID_DESTROY_VERTEXSHADER + 1 ) , D3D11_MESSAGE_ID_LIVE_HULLSHADER = ( D3D11_MESSAGE_ID_CREATE_HULLSHADER + 1 ) , D3D11_MESSAGE_ID_DESTROY_HULLSHADER = ( D3D11_MESSAGE_ID_LIVE_HULLSHADER + 1 ) , D3D11_MESSAGE_ID_CREATE_DOMAINSHADER = ( D3D11_MESSAGE_ID_DESTROY_HULLSHADER + 1 ) , D3D11_MESSAGE_ID_LIVE_DOMAINSHADER = ( D3D11_MESSAGE_ID_CREATE_DOMAINSHADER + 1 ) , D3D11_MESSAGE_ID_DESTROY_DOMAINSHADER = ( D3D11_MESSAGE_ID_LIVE_DOMAINSHADER + 1 ) , D3D11_MESSAGE_ID_CREATE_GEOMETRYSHADER = ( D3D11_MESSAGE_ID_DESTROY_DOMAINSHADER + 1 ) , D3D11_MESSAGE_ID_LIVE_GEOMETRYSHADER = ( D3D11_MESSAGE_ID_CREATE_GEOMETRYSHADER + 1 ) , D3D11_MESSAGE_ID_DESTROY_GEOMETRYSHADER = ( D3D11_MESSAGE_ID_LIVE_GEOMETRYSHADER + 1 ) , D3D11_MESSAGE_ID_CREATE_PIXELSHADER = ( D3D11_MESSAGE_ID_DESTROY_GEOMETRYSHADER + 1 ) , D3D11_MESSAGE_ID_LIVE_PIXELSHADER = ( D3D11_MESSAGE_ID_CREATE_PIXELSHADER + 1 ) , D3D11_MESSAGE_ID_DESTROY_PIXELSHADER = ( D3D11_MESSAGE_ID_LIVE_PIXELSHADER + 1 ) , D3D11_MESSAGE_ID_CREATE_INPUTLAYOUT = ( D3D11_MESSAGE_ID_DESTROY_PIXELSHADER + 1 ) , D3D11_MESSAGE_ID_LIVE_INPUTLAYOUT = ( D3D11_MESSAGE_ID_CREATE_INPUTLAYOUT + 1 ) , D3D11_MESSAGE_ID_DESTROY_INPUTLAYOUT = ( D3D11_MESSAGE_ID_LIVE_INPUTLAYOUT + 1 ) , D3D11_MESSAGE_ID_CREATE_SAMPLER = ( D3D11_MESSAGE_ID_DESTROY_INPUTLAYOUT + 1 ) , D3D11_MESSAGE_ID_LIVE_SAMPLER = ( D3D11_MESSAGE_ID_CREATE_SAMPLER + 1 ) , D3D11_MESSAGE_ID_DESTROY_SAMPLER = ( D3D11_MESSAGE_ID_LIVE_SAMPLER + 1 ) , D3D11_MESSAGE_ID_CREATE_BLENDSTATE = ( D3D11_MESSAGE_ID_DESTROY_SAMPLER + 1 ) , D3D11_MESSAGE_ID_LIVE_BLENDSTATE = ( D3D11_MESSAGE_ID_CREATE_BLENDSTATE + 1 ) , D3D11_MESSAGE_ID_DESTROY_BLENDSTATE = ( D3D11_MESSAGE_ID_LIVE_BLENDSTATE + 1 ) , D3D11_MESSAGE_ID_CREATE_DEPTHSTENCILSTATE = ( D3D11_MESSAGE_ID_DESTROY_BLENDSTATE + 1 ) , D3D11_MESSAGE_ID_LIVE_DEPTHSTENCILSTATE = ( D3D11_MESSAGE_ID_CREATE_DEPTHSTENCILSTATE + 1 ) , D3D11_MESSAGE_ID_DESTROY_DEPTHSTENCILSTATE = ( D3D11_MESSAGE_ID_LIVE_DEPTHSTENCILSTATE + 1 ) , D3D11_MESSAGE_ID_CREATE_RASTERIZERSTATE = ( D3D11_MESSAGE_ID_DESTROY_DEPTHSTENCILSTATE + 1 ) , D3D11_MESSAGE_ID_LIVE_RASTERIZERSTATE = ( D3D11_MESSAGE_ID_CREATE_RASTERIZERSTATE + 1 ) , D3D11_MESSAGE_ID_DESTROY_RASTERIZERSTATE = ( D3D11_MESSAGE_ID_LIVE_RASTERIZERSTATE + 1 ) , D3D11_MESSAGE_ID_CREATE_QUERY = ( D3D11_MESSAGE_ID_DESTROY_RASTERIZERSTATE + 1 ) , D3D11_MESSAGE_ID_LIVE_QUERY = ( D3D11_MESSAGE_ID_CREATE_QUERY + 1 ) , D3D11_MESSAGE_ID_DESTROY_QUERY = ( D3D11_MESSAGE_ID_LIVE_QUERY + 1 ) , D3D11_MESSAGE_ID_CREATE_PREDICATE = ( D3D11_MESSAGE_ID_DESTROY_QUERY + 1 ) , D3D11_MESSAGE_ID_LIVE_PREDICATE = ( D3D11_MESSAGE_ID_CREATE_PREDICATE + 1 ) , D3D11_MESSAGE_ID_DESTROY_PREDICATE = ( D3D11_MESSAGE_ID_LIVE_PREDICATE + 1 ) , D3D11_MESSAGE_ID_CREATE_COUNTER = ( D3D11_MESSAGE_ID_DESTROY_PREDICATE + 1 ) , D3D11_MESSAGE_ID_LIVE_COUNTER = ( D3D11_MESSAGE_ID_CREATE_COUNTER + 1 ) , D3D11_MESSAGE_ID_DESTROY_COUNTER = ( D3D11_MESSAGE_ID_LIVE_COUNTER + 1 ) , D3D11_MESSAGE_ID_CREATE_COMMANDLIST = ( D3D11_MESSAGE_ID_DESTROY_COUNTER + 1 ) , D3D11_MESSAGE_ID_LIVE_COMMANDLIST = ( D3D11_MESSAGE_ID_CREATE_COMMANDLIST + 1 ) , D3D11_MESSAGE_ID_DESTROY_COMMANDLIST = ( D3D11_MESSAGE_ID_LIVE_COMMANDLIST + 1 ) , D3D11_MESSAGE_ID_CREATE_CLASSINSTANCE = ( D3D11_MESSAGE_ID_DESTROY_COMMANDLIST + 1 ) , D3D11_MESSAGE_ID_LIVE_CLASSINSTANCE = ( D3D11_MESSAGE_ID_CREATE_CLASSINSTANCE + 1 ) , D3D11_MESSAGE_ID_DESTROY_CLASSINSTANCE = ( D3D11_MESSAGE_ID_LIVE_CLASSINSTANCE + 1 ) , D3D11_MESSAGE_ID_CREATE_CLASSLINKAGE = ( D3D11_MESSAGE_ID_DESTROY_CLASSINSTANCE + 1 ) , D3D11_MESSAGE_ID_LIVE_CLASSLINKAGE = ( D3D11_MESSAGE_ID_CREATE_CLASSLINKAGE + 1 ) , D3D11_MESSAGE_ID_DESTROY_CLASSLINKAGE = ( D3D11_MESSAGE_ID_LIVE_CLASSLINKAGE + 1 ) , D3D11_MESSAGE_ID_LIVE_DEVICE = ( D3D11_MESSAGE_ID_DESTROY_CLASSLINKAGE + 1 ) , D3D11_MESSAGE_ID_LIVE_OBJECT_SUMMARY = ( D3D11_MESSAGE_ID_LIVE_DEVICE + 1 ) , D3D11_MESSAGE_ID_CREATE_COMPUTESHADER = ( D3D11_MESSAGE_ID_LIVE_OBJECT_SUMMARY + 1 ) , D3D11_MESSAGE_ID_LIVE_COMPUTESHADER = ( D3D11_MESSAGE_ID_CREATE_COMPUTESHADER + 1 ) , D3D11_MESSAGE_ID_DESTROY_COMPUTESHADER = ( D3D11_MESSAGE_ID_LIVE_COMPUTESHADER + 1 ) , D3D11_MESSAGE_ID_CREATE_UNORDEREDACCESSVIEW = ( D3D11_MESSAGE_ID_DESTROY_COMPUTESHADER + 1 ) , D3D11_MESSAGE_ID_LIVE_UNORDEREDACCESSVIEW = ( D3D11_MESSAGE_ID_CREATE_UNORDEREDACCESSVIEW + 1 ) , D3D11_MESSAGE_ID_DESTROY_UNORDEREDACCESSVIEW = ( D3D11_MESSAGE_ID_LIVE_UNORDEREDACCESSVIEW + 1 ) , D3D11_MESSAGE_ID_DEVICE_SETSHADER_INTERFACES_FEATURELEVEL = ( D3D11_MESSAGE_ID_DESTROY_UNORDEREDACCESSVIEW + 1 ) , D3D11_MESSAGE_ID_DEVICE_SETSHADER_INTERFACE_COUNT_MISMATCH = ( D3D11_MESSAGE_ID_DEVICE_SETSHADER_INTERFACES_FEATURELEVEL + 1 ) , D3D11_MESSAGE_ID_DEVICE_SETSHADER_INVALID_INSTANCE = ( D3D11_MESSAGE_ID_DEVICE_SETSHADER_INTERFACE_COUNT_MISMATCH + 1 ) , D3D11_MESSAGE_ID_DEVICE_SETSHADER_INVALID_INSTANCE_INDEX = ( D3D11_MESSAGE_ID_DEVICE_SETSHADER_INVALID_INSTANCE + 1 ) , D3D11_MESSAGE_ID_DEVICE_SETSHADER_INVALID_INSTANCE_TYPE = ( D3D11_MESSAGE_ID_DEVICE_SETSHADER_INVALID_INSTANCE_INDEX + 1 ) , D3D11_MESSAGE_ID_DEVICE_SETSHADER_INVALID_INSTANCE_DATA = ( D3D11_MESSAGE_ID_DEVICE_SETSHADER_INVALID_INSTANCE_TYPE + 1 ) , D3D11_MESSAGE_ID_DEVICE_SETSHADER_UNBOUND_INSTANCE_DATA = ( D3D11_MESSAGE_ID_DEVICE_SETSHADER_INVALID_INSTANCE_DATA + 1 ) , D3D11_MESSAGE_ID_DEVICE_SETSHADER_INSTANCE_DATA_BINDINGS = ( D3D11_MESSAGE_ID_DEVICE_SETSHADER_UNBOUND_INSTANCE_DATA + 1 ) , D3D11_MESSAGE_ID_DEVICE_CREATESHADER_CLASSLINKAGE_FULL = ( D3D11_MESSAGE_ID_DEVICE_SETSHADER_INSTANCE_DATA_BINDINGS + 1 ) , D3D11_MESSAGE_ID_DEVICE_CHECKFEATURESUPPORT_UNRECOGNIZED_FEATURE = ( D3D11_MESSAGE_ID_DEVICE_CREATESHADER_CLASSLINKAGE_FULL + 1 ) , D3D11_MESSAGE_ID_DEVICE_CHECKFEATURESUPPORT_MISMATCHED_DATA_SIZE = ( D3D11_MESSAGE_ID_DEVICE_CHECKFEATURESUPPORT_UNRECOGNIZED_FEATURE + 1 ) , D3D11_MESSAGE_ID_DEVICE_CHECKFEATURESUPPORT_INVALIDARG_RETURN = ( D3D11_MESSAGE_ID_DEVICE_CHECKFEATURESUPPORT_MISMATCHED_DATA_SIZE + 1 ) , D3D11_MESSAGE_ID_DEVICE_CSSETSHADERRESOURCES_HAZARD = ( D3D11_MESSAGE_ID_DEVICE_CHECKFEATURESUPPORT_INVALIDARG_RETURN + 1 ) , D3D11_MESSAGE_ID_DEVICE_CSSETCONSTANTBUFFERS_HAZARD = ( D3D11_MESSAGE_ID_DEVICE_CSSETSHADERRESOURCES_HAZARD + 1 ) , D3D11_MESSAGE_ID_CSSETSHADERRESOURCES_UNBINDDELETINGOBJECT = ( D3D11_MESSAGE_ID_DEVICE_CSSETCONSTANTBUFFERS_HAZARD + 1 ) , D3D11_MESSAGE_ID_CSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT = ( D3D11_MESSAGE_ID_CSSETSHADERRESOURCES_UNBINDDELETINGOBJECT + 1 ) , D3D11_MESSAGE_ID_CREATECOMPUTESHADER_INVALIDCALL = ( D3D11_MESSAGE_ID_CSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT + 1 ) , D3D11_MESSAGE_ID_CREATECOMPUTESHADER_OUTOFMEMORY = ( D3D11_MESSAGE_ID_CREATECOMPUTESHADER_INVALIDCALL + 1 ) , D3D11_MESSAGE_ID_CREATECOMPUTESHADER_INVALIDSHADERBYTECODE = ( D3D11_MESSAGE_ID_CREATECOMPUTESHADER_OUTOFMEMORY + 1 ) , D3D11_MESSAGE_ID_CREATECOMPUTESHADER_INVALIDSHADERTYPE = ( D3D11_MESSAGE_ID_CREATECOMPUTESHADER_INVALIDSHADERBYTECODE + 1 ) , D3D11_MESSAGE_ID_CREATECOMPUTESHADER_INVALIDCLASSLINKAGE = ( D3D11_MESSAGE_ID_CREATECOMPUTESHADER_INVALIDSHADERTYPE + 1 ) , D3D11_MESSAGE_ID_DEVICE_CSSETSHADERRESOURCES_VIEWS_EMPTY = ( D3D11_MESSAGE_ID_CREATECOMPUTESHADER_INVALIDCLASSLINKAGE + 1 ) , D3D11_MESSAGE_ID_CSSETCONSTANTBUFFERS_INVALIDBUFFER = ( D3D11_MESSAGE_ID_DEVICE_CSSETSHADERRESOURCES_VIEWS_EMPTY + 1 ) , D3D11_MESSAGE_ID_DEVICE_CSSETCONSTANTBUFFERS_BUFFERS_EMPTY = ( D3D11_MESSAGE_ID_CSSETCONSTANTBUFFERS_INVALIDBUFFER + 1 ) , D3D11_MESSAGE_ID_DEVICE_CSSETSAMPLERS_SAMPLERS_EMPTY = ( D3D11_MESSAGE_ID_DEVICE_CSSETCONSTANTBUFFERS_BUFFERS_EMPTY + 1 ) , D3D11_MESSAGE_ID_DEVICE_CSGETSHADERRESOURCES_VIEWS_EMPTY = ( D3D11_MESSAGE_ID_DEVICE_CSSETSAMPLERS_SAMPLERS_EMPTY + 1 ) , D3D11_MESSAGE_ID_DEVICE_CSGETCONSTANTBUFFERS_BUFFERS_EMPTY = ( D3D11_MESSAGE_ID_DEVICE_CSGETSHADERRESOURCES_VIEWS_EMPTY + 1 ) , D3D11_MESSAGE_ID_DEVICE_CSGETSAMPLERS_SAMPLERS_EMPTY = ( D3D11_MESSAGE_ID_DEVICE_CSGETCONSTANTBUFFERS_BUFFERS_EMPTY + 1 ) , D3D11_MESSAGE_ID_DEVICE_CREATEVERTEXSHADER_DOUBLEFLOATOPSNOTSUPPORTED = ( D3D11_MESSAGE_ID_DEVICE_CSGETSAMPLERS_SAMPLERS_EMPTY + 1 ) , D3D11_MESSAGE_ID_DEVICE_CREATEHULLSHADER_DOUBLEFLOATOPSNOTSUPPORTED = ( D3D11_MESSAGE_ID_DEVICE_CREATEVERTEXSHADER_DOUBLEFLOATOPSNOTSUPPORTED + 1 ) , D3D11_MESSAGE_ID_DEVICE_CREATEDOMAINSHADER_DOUBLEFLOATOPSNOTSUPPORTED = ( D3D11_MESSAGE_ID_DEVICE_CREATEHULLSHADER_DOUBLEFLOATOPSNOTSUPPORTED + 1 ) , D3D11_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADER_DOUBLEFLOATOPSNOTSUPPORTED = ( D3D11_MESSAGE_ID_DEVICE_CREATEDOMAINSHADER_DOUBLEFLOATOPSNOTSUPPORTED + 1 ) , D3D11_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_DOUBLEFLOATOPSNOTSUPPORTED = ( D3D11_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADER_DOUBLEFLOATOPSNOTSUPPORTED + 1 ) , D3D11_MESSAGE_ID_DEVICE_CREATEPIXELSHADER_DOUBLEFLOATOPSNOTSUPPORTED = ( D3D11_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_DOUBLEFLOATOPSNOTSUPPORTED + 1 ) , D3D11_MESSAGE_ID_DEVICE_CREATECOMPUTESHADER_DOUBLEFLOATOPSNOTSUPPORTED = ( D3D11_MESSAGE_ID_DEVICE_CREATEPIXELSHADER_DOUBLEFLOATOPSNOTSUPPORTED + 1 ) , D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDSTRUCTURESTRIDE = ( D3D11_MESSAGE_ID_DEVICE_CREATECOMPUTESHADER_DOUBLEFLOATOPSNOTSUPPORTED + 1 ) , D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDFLAGS = ( D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDSTRUCTURESTRIDE + 1 ) , D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDRESOURCE = ( D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDFLAGS + 1 ) , D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDDESC = ( D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDRESOURCE + 1 ) , D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDFORMAT = ( D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDDESC + 1 ) , D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDDIMENSIONS = ( D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDFORMAT + 1 ) , D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_UNRECOGNIZEDFORMAT = ( D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDDIMENSIONS + 1 ) , D3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETSANDUNORDEREDACCESSVIEWS_HAZARD = ( D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_UNRECOGNIZEDFORMAT + 1 ) , D3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETSANDUNORDEREDACCESSVIEWS_OVERLAPPING_OLD_SLOTS = ( D3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETSANDUNORDEREDACCESSVIEWS_HAZARD + 1 ) , D3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETSANDUNORDEREDACCESSVIEWS_NO_OP = ( D3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETSANDUNORDEREDACCESSVIEWS_OVERLAPPING_OLD_SLOTS + 1 ) , D3D11_MESSAGE_ID_CSSETUNORDEREDACCESSVIEWS_UNBINDDELETINGOBJECT = ( D3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETSANDUNORDEREDACCESSVIEWS_NO_OP + 1 ) , D3D11_MESSAGE_ID_PSSETUNORDEREDACCESSVIEWS_UNBINDDELETINGOBJECT = ( D3D11_MESSAGE_ID_CSSETUNORDEREDACCESSVIEWS_UNBINDDELETINGOBJECT + 1 ) , D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDARG_RETURN = ( D3D11_MESSAGE_ID_PSSETUNORDEREDACCESSVIEWS_UNBINDDELETINGOBJECT + 1 ) , D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_OUTOFMEMORY_RETURN = ( D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDARG_RETURN + 1 ) , D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_TOOMANYOBJECTS = ( D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_OUTOFMEMORY_RETURN + 1 ) , D3D11_MESSAGE_ID_DEVICE_CSSETUNORDEREDACCESSVIEWS_HAZARD = ( D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_TOOMANYOBJECTS + 1 ) , D3D11_MESSAGE_ID_CLEARUNORDEREDACCESSVIEW_DENORMFLUSH = ( D3D11_MESSAGE_ID_DEVICE_CSSETUNORDEREDACCESSVIEWS_HAZARD + 1 ) , D3D11_MESSAGE_ID_DEVICE_CSSETUNORDEREDACCESSS_VIEWS_EMPTY = ( D3D11_MESSAGE_ID_CLEARUNORDEREDACCESSVIEW_DENORMFLUSH + 1 ) , D3D11_MESSAGE_ID_DEVICE_CSGETUNORDEREDACCESSS_VIEWS_EMPTY = ( D3D11_MESSAGE_ID_DEVICE_CSSETUNORDEREDACCESSS_VIEWS_EMPTY + 1 ) , D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDFLAGS = ( D3D11_MESSAGE_ID_DEVICE_CSGETUNORDEREDACCESSS_VIEWS_EMPTY + 1 ) , D3D11_MESSAGE_ID_CREATESHADERRESESOURCEVIEW_TOOMANYOBJECTS = ( D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDFLAGS + 1 ) , D3D11_MESSAGE_ID_DEVICE_DISPATCHINDIRECT_INVALID_ARG_BUFFER = ( D3D11_MESSAGE_ID_CREATESHADERRESESOURCEVIEW_TOOMANYOBJECTS + 1 ) , D3D11_MESSAGE_ID_DEVICE_DISPATCHINDIRECT_OFFSET_UNALIGNED = ( D3D11_MESSAGE_ID_DEVICE_DISPATCHINDIRECT_INVALID_ARG_BUFFER + 1 ) , D3D11_MESSAGE_ID_DEVICE_DISPATCHINDIRECT_OFFSET_OVERFLOW = ( D3D11_MESSAGE_ID_DEVICE_DISPATCHINDIRECT_OFFSET_UNALIGNED + 1 ) , D3D11_MESSAGE_ID_DEVICE_SETRESOURCEMINLOD_INVALIDCONTEXT = ( D3D11_MESSAGE_ID_DEVICE_DISPATCHINDIRECT_OFFSET_OVERFLOW + 1 ) , D3D11_MESSAGE_ID_DEVICE_SETRESOURCEMINLOD_INVALIDRESOURCE = ( D3D11_MESSAGE_ID_DEVICE_SETRESOURCEMINLOD_INVALIDCONTEXT + 1 ) , D3D11_MESSAGE_ID_DEVICE_SETRESOURCEMINLOD_INVALIDMINLOD = ( D3D11_MESSAGE_ID_DEVICE_SETRESOURCEMINLOD_INVALIDRESOURCE + 1 ) , D3D11_MESSAGE_ID_DEVICE_GETRESOURCEMINLOD_INVALIDCONTEXT = ( D3D11_MESSAGE_ID_DEVICE_SETRESOURCEMINLOD_INVALIDMINLOD + 1 ) , D3D11_MESSAGE_ID_DEVICE_GETRESOURCEMINLOD_INVALIDRESOURCE = ( D3D11_MESSAGE_ID_DEVICE_GETRESOURCEMINLOD_INVALIDCONTEXT + 1 ) , D3D11_MESSAGE_ID_OMSETDEPTHSTENCIL_UNBINDDELETINGOBJECT = ( D3D11_MESSAGE_ID_DEVICE_GETRESOURCEMINLOD_INVALIDRESOURCE + 1 ) , D3D11_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_DEPTH_READONLY = ( D3D11_MESSAGE_ID_OMSETDEPTHSTENCIL_UNBINDDELETINGOBJECT + 1 ) , D3D11_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_STENCIL_READONLY = ( D3D11_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_DEPTH_READONLY + 1 ) , D3D11_MESSAGE_ID_CHECKFEATURESUPPORT_FORMAT_DEPRECATED = ( D3D11_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_STENCIL_READONLY + 1 ) , D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_RETURN_TYPE_MISMATCH = ( D3D11_MESSAGE_ID_CHECKFEATURESUPPORT_FORMAT_DEPRECATED + 1 ) , D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_NOT_SET = ( D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_RETURN_TYPE_MISMATCH + 1 ) , D3D11_MESSAGE_ID_DEVICE_DRAW_UNORDEREDACCESSVIEW_RENDERTARGETVIEW_OVERLAP = ( D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_NOT_SET + 1 ) , D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_DIMENSION_MISMATCH = ( D3D11_MESSAGE_ID_DEVICE_DRAW_UNORDEREDACCESSVIEW_RENDERTARGETVIEW_OVERLAP + 1 ) , D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_APPEND_UNSUPPORTED = ( D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_DIMENSION_MISMATCH + 1 ) , D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMICS_UNSUPPORTED = ( D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_APPEND_UNSUPPORTED + 1 ) , D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_STRUCTURE_STRIDE_MISMATCH = ( D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMICS_UNSUPPORTED + 1 ) , D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_BUFFER_TYPE_MISMATCH = ( D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_STRUCTURE_STRIDE_MISMATCH + 1 ) , D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_RAW_UNSUPPORTED = ( D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_BUFFER_TYPE_MISMATCH + 1 ) , D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_FORMAT_LD_UNSUPPORTED = ( D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_RAW_UNSUPPORTED + 1 ) , D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_FORMAT_STORE_UNSUPPORTED = ( D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_FORMAT_LD_UNSUPPORTED + 1 ) , D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_ADD_UNSUPPORTED = ( D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_FORMAT_STORE_UNSUPPORTED + 1 ) , D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_BITWISE_OPS_UNSUPPORTED = ( D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_ADD_UNSUPPORTED + 1 ) , D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_CMPSTORE_CMPEXCHANGE_UNSUPPORTED = ( D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_BITWISE_OPS_UNSUPPORTED + 1 ) , D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_EXCHANGE_UNSUPPORTED = ( D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_CMPSTORE_CMPEXCHANGE_UNSUPPORTED + 1 ) , D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_SIGNED_MINMAX_UNSUPPORTED = ( D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_EXCHANGE_UNSUPPORTED + 1 ) , D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_UNSIGNED_MINMAX_UNSUPPORTED = ( D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_SIGNED_MINMAX_UNSUPPORTED + 1 ) , D3D11_MESSAGE_ID_DEVICE_DISPATCH_BOUND_RESOURCE_MAPPED = ( D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_UNSIGNED_MINMAX_UNSUPPORTED + 1 ) , D3D11_MESSAGE_ID_DEVICE_DISPATCH_THREADGROUPCOUNT_OVERFLOW = ( D3D11_MESSAGE_ID_DEVICE_DISPATCH_BOUND_RESOURCE_MAPPED + 1 ) , D3D11_MESSAGE_ID_DEVICE_DISPATCH_THREADGROUPCOUNT_ZERO = ( D3D11_MESSAGE_ID_DEVICE_DISPATCH_THREADGROUPCOUNT_OVERFLOW + 1 ) , D3D11_MESSAGE_ID_DEVICE_SHADERRESOURCEVIEW_STRUCTURE_STRIDE_MISMATCH = ( D3D11_MESSAGE_ID_DEVICE_DISPATCH_THREADGROUPCOUNT_ZERO + 1 ) , D3D11_MESSAGE_ID_DEVICE_SHADERRESOURCEVIEW_BUFFER_TYPE_MISMATCH = ( D3D11_MESSAGE_ID_DEVICE_SHADERRESOURCEVIEW_STRUCTURE_STRIDE_MISMATCH + 1 ) , D3D11_MESSAGE_ID_DEVICE_SHADERRESOURCEVIEW_RAW_UNSUPPORTED = ( D3D11_MESSAGE_ID_DEVICE_SHADERRESOURCEVIEW_BUFFER_TYPE_MISMATCH + 1 ) , D3D11_MESSAGE_ID_DEVICE_DISPATCH_UNSUPPORTED = ( D3D11_MESSAGE_ID_DEVICE_SHADERRESOURCEVIEW_RAW_UNSUPPORTED + 1 ) , D3D11_MESSAGE_ID_DEVICE_DISPATCHINDIRECT_UNSUPPORTED = ( D3D11_MESSAGE_ID_DEVICE_DISPATCH_UNSUPPORTED + 1 ) , D3D11_MESSAGE_ID_COPYSTRUCTURECOUNT_INVALIDOFFSET = ( D3D11_MESSAGE_ID_DEVICE_DISPATCHINDIRECT_UNSUPPORTED + 1 ) , D3D11_MESSAGE_ID_COPYSTRUCTURECOUNT_LARGEOFFSET = ( D3D11_MESSAGE_ID_COPYSTRUCTURECOUNT_INVALIDOFFSET + 1 ) , D3D11_MESSAGE_ID_COPYSTRUCTURECOUNT_INVALIDDESTINATIONSTATE = ( D3D11_MESSAGE_ID_COPYSTRUCTURECOUNT_LARGEOFFSET + 1 ) , D3D11_MESSAGE_ID_COPYSTRUCTURECOUNT_INVALIDSOURCESTATE = ( D3D11_MESSAGE_ID_COPYSTRUCTURECOUNT_INVALIDDESTINATIONSTATE + 1 ) , D3D11_MESSAGE_ID_CHECKFORMATSUPPORT_FORMAT_NOT_SUPPORTED = ( D3D11_MESSAGE_ID_COPYSTRUCTURECOUNT_INVALIDSOURCESTATE + 1 ) , D3D11_MESSAGE_ID_DEVICE_CSSETUNORDEREDACCESSVIEWS_INVALIDVIEW = ( D3D11_MESSAGE_ID_CHECKFORMATSUPPORT_FORMAT_NOT_SUPPORTED + 1 ) , D3D11_MESSAGE_ID_DEVICE_CSSETUNORDEREDACCESSVIEWS_INVALIDOFFSET = ( D3D11_MESSAGE_ID_DEVICE_CSSETUNORDEREDACCESSVIEWS_INVALIDVIEW + 1 ) , D3D11_MESSAGE_ID_DEVICE_CSSETUNORDEREDACCESSVIEWS_TOOMANYVIEWS = ( D3D11_MESSAGE_ID_DEVICE_CSSETUNORDEREDACCESSVIEWS_INVALIDOFFSET + 1 ) , D3D11_MESSAGE_ID_CLEARUNORDEREDACCESSVIEWFLOAT_INVALIDFORMAT = ( D3D11_MESSAGE_ID_DEVICE_CSSETUNORDEREDACCESSVIEWS_TOOMANYVIEWS + 1 ) , D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_COUNTER_UNSUPPORTED = ( D3D11_MESSAGE_ID_CLEARUNORDEREDACCESSVIEWFLOAT_INVALIDFORMAT + 1 ) , D3D11_MESSAGE_ID_REF_WARNING = ( D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_COUNTER_UNSUPPORTED + 1 ) , D3D11_MESSAGE_ID_D3D11_MESSAGES_END = ( D3D11_MESSAGE_ID_REF_WARNING + 1 ) } D3D11_MESSAGE_ID; typedef struct D3D11_MESSAGE { D3D11_MESSAGE_CATEGORY Category; D3D11_MESSAGE_SEVERITY Severity; D3D11_MESSAGE_ID ID; const char *pDescription; SIZE_T DescriptionByteLength; } D3D11_MESSAGE; typedef struct D3D11_INFO_QUEUE_FILTER_DESC { UINT NumCategories; D3D11_MESSAGE_CATEGORY *pCategoryList; UINT NumSeverities; D3D11_MESSAGE_SEVERITY *pSeverityList; UINT NumIDs; D3D11_MESSAGE_ID *pIDList; } D3D11_INFO_QUEUE_FILTER_DESC; typedef struct D3D11_INFO_QUEUE_FILTER { D3D11_INFO_QUEUE_FILTER_DESC AllowList; D3D11_INFO_QUEUE_FILTER_DESC DenyList; } D3D11_INFO_QUEUE_FILTER; #define D3D11_INFO_QUEUE_DEFAULT_MESSAGE_COUNT_LIMIT 1024 extern RPC_IF_HANDLE __MIDL_itf_d3d11sdklayers_0000_0002_v0_0_c_ifspec; extern RPC_IF_HANDLE __MIDL_itf_d3d11sdklayers_0000_0002_v0_0_s_ifspec; #ifndef __ID3D11InfoQueue_INTERFACE_DEFINED__ #define __ID3D11InfoQueue_INTERFACE_DEFINED__ /* interface ID3D11InfoQueue */ /* [unique][local][object][uuid] */ EXTERN_C const IID IID_ID3D11InfoQueue; #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("6543dbb6-1b48-42f5-ab82-e97ec74326f6") ID3D11InfoQueue : public IUnknown { public: virtual HRESULT STDMETHODCALLTYPE SetMessageCountLimit( /* [annotation] */ __in UINT64 MessageCountLimit) = 0; virtual void STDMETHODCALLTYPE ClearStoredMessages( void) = 0; virtual HRESULT STDMETHODCALLTYPE GetMessage( /* [annotation] */ __in UINT64 MessageIndex, /* [annotation] */ __out_bcount_opt(*pMessageByteLength) D3D11_MESSAGE *pMessage, /* [annotation] */ __inout SIZE_T *pMessageByteLength) = 0; virtual UINT64 STDMETHODCALLTYPE GetNumMessagesAllowedByStorageFilter( void) = 0; virtual UINT64 STDMETHODCALLTYPE GetNumMessagesDeniedByStorageFilter( void) = 0; virtual UINT64 STDMETHODCALLTYPE GetNumStoredMessages( void) = 0; virtual UINT64 STDMETHODCALLTYPE GetNumStoredMessagesAllowedByRetrievalFilter( void) = 0; virtual UINT64 STDMETHODCALLTYPE GetNumMessagesDiscardedByMessageCountLimit( void) = 0; virtual UINT64 STDMETHODCALLTYPE GetMessageCountLimit( void) = 0; virtual HRESULT STDMETHODCALLTYPE AddStorageFilterEntries( /* [annotation] */ __in D3D11_INFO_QUEUE_FILTER *pFilter) = 0; virtual HRESULT STDMETHODCALLTYPE GetStorageFilter( /* [annotation] */ __out_bcount_opt(*pFilterByteLength) D3D11_INFO_QUEUE_FILTER *pFilter, /* [annotation] */ __inout SIZE_T *pFilterByteLength) = 0; virtual void STDMETHODCALLTYPE ClearStorageFilter( void) = 0; virtual HRESULT STDMETHODCALLTYPE PushEmptyStorageFilter( void) = 0; virtual HRESULT STDMETHODCALLTYPE PushCopyOfStorageFilter( void) = 0; virtual HRESULT STDMETHODCALLTYPE PushStorageFilter( /* [annotation] */ __in D3D11_INFO_QUEUE_FILTER *pFilter) = 0; virtual void STDMETHODCALLTYPE PopStorageFilter( void) = 0; virtual UINT STDMETHODCALLTYPE GetStorageFilterStackSize( void) = 0; virtual HRESULT STDMETHODCALLTYPE AddRetrievalFilterEntries( /* [annotation] */ __in D3D11_INFO_QUEUE_FILTER *pFilter) = 0; virtual HRESULT STDMETHODCALLTYPE GetRetrievalFilter( /* [annotation] */ __out_bcount_opt(*pFilterByteLength) D3D11_INFO_QUEUE_FILTER *pFilter, /* [annotation] */ __inout SIZE_T *pFilterByteLength) = 0; virtual void STDMETHODCALLTYPE ClearRetrievalFilter( void) = 0; virtual HRESULT STDMETHODCALLTYPE PushEmptyRetrievalFilter( void) = 0; virtual HRESULT STDMETHODCALLTYPE PushCopyOfRetrievalFilter( void) = 0; virtual HRESULT STDMETHODCALLTYPE PushRetrievalFilter( /* [annotation] */ __in D3D11_INFO_QUEUE_FILTER *pFilter) = 0; virtual void STDMETHODCALLTYPE PopRetrievalFilter( void) = 0; virtual UINT STDMETHODCALLTYPE GetRetrievalFilterStackSize( void) = 0; virtual HRESULT STDMETHODCALLTYPE AddMessage( /* [annotation] */ __in D3D11_MESSAGE_CATEGORY Category, /* [annotation] */ __in D3D11_MESSAGE_SEVERITY Severity, /* [annotation] */ __in D3D11_MESSAGE_ID ID, /* [annotation] */ __in LPCSTR pDescription) = 0; virtual HRESULT STDMETHODCALLTYPE AddApplicationMessage( /* [annotation] */ __in D3D11_MESSAGE_SEVERITY Severity, /* [annotation] */ __in LPCSTR pDescription) = 0; virtual HRESULT STDMETHODCALLTYPE SetBreakOnCategory( /* [annotation] */ __in D3D11_MESSAGE_CATEGORY Category, /* [annotation] */ __in BOOL bEnable) = 0; virtual HRESULT STDMETHODCALLTYPE SetBreakOnSeverity( /* [annotation] */ __in D3D11_MESSAGE_SEVERITY Severity, /* [annotation] */ __in BOOL bEnable) = 0; virtual HRESULT STDMETHODCALLTYPE SetBreakOnID( /* [annotation] */ __in D3D11_MESSAGE_ID ID, /* [annotation] */ __in BOOL bEnable) = 0; virtual BOOL STDMETHODCALLTYPE GetBreakOnCategory( /* [annotation] */ __in D3D11_MESSAGE_CATEGORY Category) = 0; virtual BOOL STDMETHODCALLTYPE GetBreakOnSeverity( /* [annotation] */ __in D3D11_MESSAGE_SEVERITY Severity) = 0; virtual BOOL STDMETHODCALLTYPE GetBreakOnID( /* [annotation] */ __in D3D11_MESSAGE_ID ID) = 0; virtual void STDMETHODCALLTYPE SetMuteDebugOutput( /* [annotation] */ __in BOOL bMute) = 0; virtual BOOL STDMETHODCALLTYPE GetMuteDebugOutput( void) = 0; }; #else /* C style interface */ typedef struct ID3D11InfoQueueVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ID3D11InfoQueue * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ __RPC__deref_out void **ppvObject); ULONG ( STDMETHODCALLTYPE *AddRef )( ID3D11InfoQueue * This); ULONG ( STDMETHODCALLTYPE *Release )( ID3D11InfoQueue * This); HRESULT ( STDMETHODCALLTYPE *SetMessageCountLimit )( ID3D11InfoQueue * This, /* [annotation] */ __in UINT64 MessageCountLimit); void ( STDMETHODCALLTYPE *ClearStoredMessages )( ID3D11InfoQueue * This); HRESULT ( STDMETHODCALLTYPE *GetMessage )( ID3D11InfoQueue * This, /* [annotation] */ __in UINT64 MessageIndex, /* [annotation] */ __out_bcount_opt(*pMessageByteLength) D3D11_MESSAGE *pMessage, /* [annotation] */ __inout SIZE_T *pMessageByteLength); UINT64 ( STDMETHODCALLTYPE *GetNumMessagesAllowedByStorageFilter )( ID3D11InfoQueue * This); UINT64 ( STDMETHODCALLTYPE *GetNumMessagesDeniedByStorageFilter )( ID3D11InfoQueue * This); UINT64 ( STDMETHODCALLTYPE *GetNumStoredMessages )( ID3D11InfoQueue * This); UINT64 ( STDMETHODCALLTYPE *GetNumStoredMessagesAllowedByRetrievalFilter )( ID3D11InfoQueue * This); UINT64 ( STDMETHODCALLTYPE *GetNumMessagesDiscardedByMessageCountLimit )( ID3D11InfoQueue * This); UINT64 ( STDMETHODCALLTYPE *GetMessageCountLimit )( ID3D11InfoQueue * This); HRESULT ( STDMETHODCALLTYPE *AddStorageFilterEntries )( ID3D11InfoQueue * This, /* [annotation] */ __in D3D11_INFO_QUEUE_FILTER *pFilter); HRESULT ( STDMETHODCALLTYPE *GetStorageFilter )( ID3D11InfoQueue * This, /* [annotation] */ __out_bcount_opt(*pFilterByteLength) D3D11_INFO_QUEUE_FILTER *pFilter, /* [annotation] */ __inout SIZE_T *pFilterByteLength); void ( STDMETHODCALLTYPE *ClearStorageFilter )( ID3D11InfoQueue * This); HRESULT ( STDMETHODCALLTYPE *PushEmptyStorageFilter )( ID3D11InfoQueue * This); HRESULT ( STDMETHODCALLTYPE *PushCopyOfStorageFilter )( ID3D11InfoQueue * This); HRESULT ( STDMETHODCALLTYPE *PushStorageFilter )( ID3D11InfoQueue * This, /* [annotation] */ __in D3D11_INFO_QUEUE_FILTER *pFilter); void ( STDMETHODCALLTYPE *PopStorageFilter )( ID3D11InfoQueue * This); UINT ( STDMETHODCALLTYPE *GetStorageFilterStackSize )( ID3D11InfoQueue * This); HRESULT ( STDMETHODCALLTYPE *AddRetrievalFilterEntries )( ID3D11InfoQueue * This, /* [annotation] */ __in D3D11_INFO_QUEUE_FILTER *pFilter); HRESULT ( STDMETHODCALLTYPE *GetRetrievalFilter )( ID3D11InfoQueue * This, /* [annotation] */ __out_bcount_opt(*pFilterByteLength) D3D11_INFO_QUEUE_FILTER *pFilter, /* [annotation] */ __inout SIZE_T *pFilterByteLength); void ( STDMETHODCALLTYPE *ClearRetrievalFilter )( ID3D11InfoQueue * This); HRESULT ( STDMETHODCALLTYPE *PushEmptyRetrievalFilter )( ID3D11InfoQueue * This); HRESULT ( STDMETHODCALLTYPE *PushCopyOfRetrievalFilter )( ID3D11InfoQueue * This); HRESULT ( STDMETHODCALLTYPE *PushRetrievalFilter )( ID3D11InfoQueue * This, /* [annotation] */ __in D3D11_INFO_QUEUE_FILTER *pFilter); void ( STDMETHODCALLTYPE *PopRetrievalFilter )( ID3D11InfoQueue * This); UINT ( STDMETHODCALLTYPE *GetRetrievalFilterStackSize )( ID3D11InfoQueue * This); HRESULT ( STDMETHODCALLTYPE *AddMessage )( ID3D11InfoQueue * This, /* [annotation] */ __in D3D11_MESSAGE_CATEGORY Category, /* [annotation] */ __in D3D11_MESSAGE_SEVERITY Severity, /* [annotation] */ __in D3D11_MESSAGE_ID ID, /* [annotation] */ __in LPCSTR pDescription); HRESULT ( STDMETHODCALLTYPE *AddApplicationMessage )( ID3D11InfoQueue * This, /* [annotation] */ __in D3D11_MESSAGE_SEVERITY Severity, /* [annotation] */ __in LPCSTR pDescription); HRESULT ( STDMETHODCALLTYPE *SetBreakOnCategory )( ID3D11InfoQueue * This, /* [annotation] */ __in D3D11_MESSAGE_CATEGORY Category, /* [annotation] */ __in BOOL bEnable); HRESULT ( STDMETHODCALLTYPE *SetBreakOnSeverity )( ID3D11InfoQueue * This, /* [annotation] */ __in D3D11_MESSAGE_SEVERITY Severity, /* [annotation] */ __in BOOL bEnable); HRESULT ( STDMETHODCALLTYPE *SetBreakOnID )( ID3D11InfoQueue * This, /* [annotation] */ __in D3D11_MESSAGE_ID ID, /* [annotation] */ __in BOOL bEnable); BOOL ( STDMETHODCALLTYPE *GetBreakOnCategory )( ID3D11InfoQueue * This, /* [annotation] */ __in D3D11_MESSAGE_CATEGORY Category); BOOL ( STDMETHODCALLTYPE *GetBreakOnSeverity )( ID3D11InfoQueue * This, /* [annotation] */ __in D3D11_MESSAGE_SEVERITY Severity); BOOL ( STDMETHODCALLTYPE *GetBreakOnID )( ID3D11InfoQueue * This, /* [annotation] */ __in D3D11_MESSAGE_ID ID); void ( STDMETHODCALLTYPE *SetMuteDebugOutput )( ID3D11InfoQueue * This, /* [annotation] */ __in BOOL bMute); BOOL ( STDMETHODCALLTYPE *GetMuteDebugOutput )( ID3D11InfoQueue * This); END_INTERFACE } ID3D11InfoQueueVtbl; interface ID3D11InfoQueue { CONST_VTBL struct ID3D11InfoQueueVtbl *lpVtbl; }; #ifdef COBJMACROS #define ID3D11InfoQueue_QueryInterface(This,riid,ppvObject) \ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) #define ID3D11InfoQueue_AddRef(This) \ ( (This)->lpVtbl -> AddRef(This) ) #define ID3D11InfoQueue_Release(This) \ ( (This)->lpVtbl -> Release(This) ) #define ID3D11InfoQueue_SetMessageCountLimit(This,MessageCountLimit) \ ( (This)->lpVtbl -> SetMessageCountLimit(This,MessageCountLimit) ) #define ID3D11InfoQueue_ClearStoredMessages(This) \ ( (This)->lpVtbl -> ClearStoredMessages(This) ) #define ID3D11InfoQueue_GetMessage(This,MessageIndex,pMessage,pMessageByteLength) \ ( (This)->lpVtbl -> GetMessage(This,MessageIndex,pMessage,pMessageByteLength) ) #define ID3D11InfoQueue_GetNumMessagesAllowedByStorageFilter(This) \ ( (This)->lpVtbl -> GetNumMessagesAllowedByStorageFilter(This) ) #define ID3D11InfoQueue_GetNumMessagesDeniedByStorageFilter(This) \ ( (This)->lpVtbl -> GetNumMessagesDeniedByStorageFilter(This) ) #define ID3D11InfoQueue_GetNumStoredMessages(This) \ ( (This)->lpVtbl -> GetNumStoredMessages(This) ) #define ID3D11InfoQueue_GetNumStoredMessagesAllowedByRetrievalFilter(This) \ ( (This)->lpVtbl -> GetNumStoredMessagesAllowedByRetrievalFilter(This) ) #define ID3D11InfoQueue_GetNumMessagesDiscardedByMessageCountLimit(This) \ ( (This)->lpVtbl -> GetNumMessagesDiscardedByMessageCountLimit(This) ) #define ID3D11InfoQueue_GetMessageCountLimit(This) \ ( (This)->lpVtbl -> GetMessageCountLimit(This) ) #define ID3D11InfoQueue_AddStorageFilterEntries(This,pFilter) \ ( (This)->lpVtbl -> AddStorageFilterEntries(This,pFilter) ) #define ID3D11InfoQueue_GetStorageFilter(This,pFilter,pFilterByteLength) \ ( (This)->lpVtbl -> GetStorageFilter(This,pFilter,pFilterByteLength) ) #define ID3D11InfoQueue_ClearStorageFilter(This) \ ( (This)->lpVtbl -> ClearStorageFilter(This) ) #define ID3D11InfoQueue_PushEmptyStorageFilter(This) \ ( (This)->lpVtbl -> PushEmptyStorageFilter(This) ) #define ID3D11InfoQueue_PushCopyOfStorageFilter(This) \ ( (This)->lpVtbl -> PushCopyOfStorageFilter(This) ) #define ID3D11InfoQueue_PushStorageFilter(This,pFilter) \ ( (This)->lpVtbl -> PushStorageFilter(This,pFilter) ) #define ID3D11InfoQueue_PopStorageFilter(This) \ ( (This)->lpVtbl -> PopStorageFilter(This) ) #define ID3D11InfoQueue_GetStorageFilterStackSize(This) \ ( (This)->lpVtbl -> GetStorageFilterStackSize(This) ) #define ID3D11InfoQueue_AddRetrievalFilterEntries(This,pFilter) \ ( (This)->lpVtbl -> AddRetrievalFilterEntries(This,pFilter) ) #define ID3D11InfoQueue_GetRetrievalFilter(This,pFilter,pFilterByteLength) \ ( (This)->lpVtbl -> GetRetrievalFilter(This,pFilter,pFilterByteLength) ) #define ID3D11InfoQueue_ClearRetrievalFilter(This) \ ( (This)->lpVtbl -> ClearRetrievalFilter(This) ) #define ID3D11InfoQueue_PushEmptyRetrievalFilter(This) \ ( (This)->lpVtbl -> PushEmptyRetrievalFilter(This) ) #define ID3D11InfoQueue_PushCopyOfRetrievalFilter(This) \ ( (This)->lpVtbl -> PushCopyOfRetrievalFilter(This) ) #define ID3D11InfoQueue_PushRetrievalFilter(This,pFilter) \ ( (This)->lpVtbl -> PushRetrievalFilter(This,pFilter) ) #define ID3D11InfoQueue_PopRetrievalFilter(This) \ ( (This)->lpVtbl -> PopRetrievalFilter(This) ) #define ID3D11InfoQueue_GetRetrievalFilterStackSize(This) \ ( (This)->lpVtbl -> GetRetrievalFilterStackSize(This) ) #define ID3D11InfoQueue_AddMessage(This,Category,Severity,ID,pDescription) \ ( (This)->lpVtbl -> AddMessage(This,Category,Severity,ID,pDescription) ) #define ID3D11InfoQueue_AddApplicationMessage(This,Severity,pDescription) \ ( (This)->lpVtbl -> AddApplicationMessage(This,Severity,pDescription) ) #define ID3D11InfoQueue_SetBreakOnCategory(This,Category,bEnable) \ ( (This)->lpVtbl -> SetBreakOnCategory(This,Category,bEnable) ) #define ID3D11InfoQueue_SetBreakOnSeverity(This,Severity,bEnable) \ ( (This)->lpVtbl -> SetBreakOnSeverity(This,Severity,bEnable) ) #define ID3D11InfoQueue_SetBreakOnID(This,ID,bEnable) \ ( (This)->lpVtbl -> SetBreakOnID(This,ID,bEnable) ) #define ID3D11InfoQueue_GetBreakOnCategory(This,Category) \ ( (This)->lpVtbl -> GetBreakOnCategory(This,Category) ) #define ID3D11InfoQueue_GetBreakOnSeverity(This,Severity) \ ( (This)->lpVtbl -> GetBreakOnSeverity(This,Severity) ) #define ID3D11InfoQueue_GetBreakOnID(This,ID) \ ( (This)->lpVtbl -> GetBreakOnID(This,ID) ) #define ID3D11InfoQueue_SetMuteDebugOutput(This,bMute) \ ( (This)->lpVtbl -> SetMuteDebugOutput(This,bMute) ) #define ID3D11InfoQueue_GetMuteDebugOutput(This) \ ( (This)->lpVtbl -> GetMuteDebugOutput(This) ) #endif /* COBJMACROS */ #endif /* C style interface */ #endif /* __ID3D11InfoQueue_INTERFACE_DEFINED__ */ /* interface __MIDL_itf_d3d11sdklayers_0000_0003 */ /* [local] */ #define D3D11_REGKEY_PATH __TEXT("Software\\Microsoft\\Direct3D") #define D3D11_MUTE_DEBUG_OUTPUT __TEXT("MuteDebugOutput") #define D3D11_ENABLE_BREAK_ON_MESSAGE __TEXT("EnableBreakOnMessage") #define D3D11_INFOQUEUE_STORAGE_FILTER_OVERRIDE __TEXT("InfoQueueStorageFilterOverride") #define D3D11_MUTE_CATEGORY __TEXT("Mute_CATEGORY_%s") #define D3D11_MUTE_SEVERITY __TEXT("Mute_SEVERITY_%s") #define D3D11_MUTE_ID_STRING __TEXT("Mute_ID_%s") #define D3D11_MUTE_ID_DECIMAL __TEXT("Mute_ID_%d") #define D3D11_UNMUTE_SEVERITY_INFO __TEXT("Unmute_SEVERITY_INFO") #define D3D11_BREAKON_CATEGORY __TEXT("BreakOn_CATEGORY_%s") #define D3D11_BREAKON_SEVERITY __TEXT("BreakOn_SEVERITY_%s") #define D3D11_BREAKON_ID_STRING __TEXT("BreakOn_ID_%s") #define D3D11_BREAKON_ID_DECIMAL __TEXT("BreakOn_ID_%d") #define D3D11_APPSIZE_STRING __TEXT("Size") #define D3D11_APPNAME_STRING __TEXT("Name") DEFINE_GUID(IID_ID3D11Debug,0x79cf2233,0x7536,0x4948,0x9d,0x36,0x1e,0x46,0x92,0xdc,0x57,0x60); DEFINE_GUID(IID_ID3D11SwitchToRef,0x1ef337e3,0x58e7,0x4f83,0xa6,0x92,0xdb,0x22,0x1f,0x5e,0xd4,0x7e); DEFINE_GUID(IID_ID3D11InfoQueue,0x6543dbb6,0x1b48,0x42f5,0xab,0x82,0xe9,0x7e,0xc7,0x43,0x26,0xf6); extern RPC_IF_HANDLE __MIDL_itf_d3d11sdklayers_0000_0003_v0_0_c_ifspec; extern RPC_IF_HANDLE __MIDL_itf_d3d11sdklayers_0000_0003_v0_0_s_ifspec; /* Additional Prototypes for ALL interfaces */ /* end of Additional Prototypes */ #ifdef __cplusplus } #endif #endif ================================================ FILE: Include/D3D11Shader.h ================================================ ////////////////////////////////////////////////////////////////////////////// // // Copyright (c) Microsoft Corporation. All rights reserved. // // File: D3D11Shader.h // Content: D3D11 Shader Types and APIs // ////////////////////////////////////////////////////////////////////////////// #ifndef __D3D11SHADER_H__ #define __D3D11SHADER_H__ #include "d3dcommon.h" typedef enum D3D11_SHADER_VERSION_TYPE { D3D11_SHVER_PIXEL_SHADER = 0, D3D11_SHVER_VERTEX_SHADER = 1, D3D11_SHVER_GEOMETRY_SHADER = 2, // D3D11 Shaders D3D11_SHVER_HULL_SHADER = 3, D3D11_SHVER_DOMAIN_SHADER = 4, D3D11_SHVER_COMPUTE_SHADER = 5, } D3D11_SHADER_VERSION_TYPE; #define D3D11_SHVER_GET_TYPE(_Version) \ (((_Version) >> 16) & 0xffff) #define D3D11_SHVER_GET_MAJOR(_Version) \ (((_Version) >> 4) & 0xf) #define D3D11_SHVER_GET_MINOR(_Version) \ (((_Version) >> 0) & 0xf) typedef D3D_RESOURCE_RETURN_TYPE D3D11_RESOURCE_RETURN_TYPE; typedef D3D_CBUFFER_TYPE D3D11_CBUFFER_TYPE; typedef struct _D3D11_SIGNATURE_PARAMETER_DESC { LPCSTR SemanticName; // Name of the semantic UINT SemanticIndex; // Index of the semantic UINT Register; // Number of member variables D3D_NAME SystemValueType;// A predefined system value, or D3D_NAME_UNDEFINED if not applicable D3D_REGISTER_COMPONENT_TYPE ComponentType;// Scalar type (e.g. uint, float, etc.) BYTE Mask; // Mask to indicate which components of the register // are used (combination of D3D10_COMPONENT_MASK values) BYTE ReadWriteMask; // Mask to indicate whether a given component is // never written (if this is an output signature) or // always read (if this is an input signature). // (combination of D3D10_COMPONENT_MASK values) UINT Stream; // Stream index } D3D11_SIGNATURE_PARAMETER_DESC; typedef struct _D3D11_SHADER_BUFFER_DESC { LPCSTR Name; // Name of the constant buffer D3D_CBUFFER_TYPE Type; // Indicates type of buffer content UINT Variables; // Number of member variables UINT Size; // Size of CB (in bytes) UINT uFlags; // Buffer description flags } D3D11_SHADER_BUFFER_DESC; typedef struct _D3D11_SHADER_VARIABLE_DESC { LPCSTR Name; // Name of the variable UINT StartOffset; // Offset in constant buffer's backing store UINT Size; // Size of variable (in bytes) UINT uFlags; // Variable flags LPVOID DefaultValue; // Raw pointer to default value UINT StartTexture; // First texture index (or -1 if no textures used) UINT TextureSize; // Number of texture slots possibly used. UINT StartSampler; // First sampler index (or -1 if no textures used) UINT SamplerSize; // Number of sampler slots possibly used. } D3D11_SHADER_VARIABLE_DESC; typedef struct _D3D11_SHADER_TYPE_DESC { D3D_SHADER_VARIABLE_CLASS Class; // Variable class (e.g. object, matrix, etc.) D3D_SHADER_VARIABLE_TYPE Type; // Variable type (e.g. float, sampler, etc.) UINT Rows; // Number of rows (for matrices, 1 for other numeric, 0 if not applicable) UINT Columns; // Number of columns (for vectors & matrices, 1 for other numeric, 0 if not applicable) UINT Elements; // Number of elements (0 if not an array) UINT Members; // Number of members (0 if not a structure) UINT Offset; // Offset from the start of structure (0 if not a structure member) LPCSTR Name; // Name of type, can be NULL } D3D11_SHADER_TYPE_DESC; typedef D3D_TESSELLATOR_DOMAIN D3D11_TESSELLATOR_DOMAIN; typedef D3D_TESSELLATOR_PARTITIONING D3D11_TESSELLATOR_PARTITIONING; typedef D3D_TESSELLATOR_OUTPUT_PRIMITIVE D3D11_TESSELLATOR_OUTPUT_PRIMITIVE; typedef struct _D3D11_SHADER_DESC { UINT Version; // Shader version LPCSTR Creator; // Creator string UINT Flags; // Shader compilation/parse flags UINT ConstantBuffers; // Number of constant buffers UINT BoundResources; // Number of bound resources UINT InputParameters; // Number of parameters in the input signature UINT OutputParameters; // Number of parameters in the output signature UINT InstructionCount; // Number of emitted instructions UINT TempRegisterCount; // Number of temporary registers used UINT TempArrayCount; // Number of temporary arrays used UINT DefCount; // Number of constant defines UINT DclCount; // Number of declarations (input + output) UINT TextureNormalInstructions; // Number of non-categorized texture instructions UINT TextureLoadInstructions; // Number of texture load instructions UINT TextureCompInstructions; // Number of texture comparison instructions UINT TextureBiasInstructions; // Number of texture bias instructions UINT TextureGradientInstructions; // Number of texture gradient instructions UINT FloatInstructionCount; // Number of floating point arithmetic instructions used UINT IntInstructionCount; // Number of signed integer arithmetic instructions used UINT UintInstructionCount; // Number of unsigned integer arithmetic instructions used UINT StaticFlowControlCount; // Number of static flow control instructions used UINT DynamicFlowControlCount; // Number of dynamic flow control instructions used UINT MacroInstructionCount; // Number of macro instructions used UINT ArrayInstructionCount; // Number of array instructions used UINT CutInstructionCount; // Number of cut instructions used UINT EmitInstructionCount; // Number of emit instructions used D3D_PRIMITIVE_TOPOLOGY GSOutputTopology; // Geometry shader output topology UINT GSMaxOutputVertexCount; // Geometry shader maximum output vertex count D3D_PRIMITIVE InputPrimitive; // GS/HS input primitive UINT PatchConstantParameters; // Number of parameters in the patch constant signature UINT cGSInstanceCount; // Number of Geometry shader instances UINT cControlPoints; // Number of control points in the HS->DS stage D3D_TESSELLATOR_OUTPUT_PRIMITIVE HSOutputPrimitive; // Primitive output by the tessellator D3D_TESSELLATOR_PARTITIONING HSPartitioning; // Partitioning mode of the tessellator D3D_TESSELLATOR_DOMAIN TessellatorDomain; // Domain of the tessellator (quad, tri, isoline) // instruction counts UINT cBarrierInstructions; // Number of barrier instructions in a compute shader UINT cInterlockedInstructions; // Number of interlocked instructions UINT cTextureStoreInstructions; // Number of texture writes } D3D11_SHADER_DESC; typedef struct _D3D11_SHADER_INPUT_BIND_DESC { LPCSTR Name; // Name of the resource D3D_SHADER_INPUT_TYPE Type; // Type of resource (e.g. texture, cbuffer, etc.) UINT BindPoint; // Starting bind point UINT BindCount; // Number of contiguous bind points (for arrays) UINT uFlags; // Input binding flags D3D_RESOURCE_RETURN_TYPE ReturnType; // Return type (if texture) D3D_SRV_DIMENSION Dimension; // Dimension (if texture) UINT NumSamples; // Number of samples (0 if not MS texture) } D3D11_SHADER_INPUT_BIND_DESC; ////////////////////////////////////////////////////////////////////////////// // Interfaces //////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// typedef interface ID3D11ShaderReflectionType ID3D11ShaderReflectionType; typedef interface ID3D11ShaderReflectionType *LPD3D11SHADERREFLECTIONTYPE; typedef interface ID3D11ShaderReflectionVariable ID3D11ShaderReflectionVariable; typedef interface ID3D11ShaderReflectionVariable *LPD3D11SHADERREFLECTIONVARIABLE; typedef interface ID3D11ShaderReflectionConstantBuffer ID3D11ShaderReflectionConstantBuffer; typedef interface ID3D11ShaderReflectionConstantBuffer *LPD3D11SHADERREFLECTIONCONSTANTBUFFER; typedef interface ID3D11ShaderReflection ID3D11ShaderReflection; typedef interface ID3D11ShaderReflection *LPD3D11SHADERREFLECTION; // {6E6FFA6A-9BAE-4613-A51E-91652D508C21} DEFINE_GUID(IID_ID3D11ShaderReflectionType, 0x6e6ffa6a, 0x9bae, 0x4613, 0xa5, 0x1e, 0x91, 0x65, 0x2d, 0x50, 0x8c, 0x21); #undef INTERFACE #define INTERFACE ID3D11ShaderReflectionType DECLARE_INTERFACE(ID3D11ShaderReflectionType) { STDMETHOD(GetDesc)(THIS_ __out D3D11_SHADER_TYPE_DESC *pDesc) PURE; STDMETHOD_(ID3D11ShaderReflectionType*, GetMemberTypeByIndex)(THIS_ __in UINT Index) PURE; STDMETHOD_(ID3D11ShaderReflectionType*, GetMemberTypeByName)(THIS_ __in LPCSTR Name) PURE; STDMETHOD_(LPCSTR, GetMemberTypeName)(THIS_ __in UINT Index) PURE; STDMETHOD(IsEqual)(THIS_ __in ID3D11ShaderReflectionType* pType) PURE; STDMETHOD_(ID3D11ShaderReflectionType*, GetSubType)(THIS) PURE; STDMETHOD_(ID3D11ShaderReflectionType*, GetBaseClass)(THIS) PURE; STDMETHOD_(UINT, GetNumInterfaces)(THIS) PURE; STDMETHOD_(ID3D11ShaderReflectionType*, GetInterfaceByIndex)(THIS_ __in UINT uIndex) PURE; STDMETHOD(IsOfType)(THIS_ __in ID3D11ShaderReflectionType* pType) PURE; STDMETHOD(ImplementsInterface)(THIS_ __in ID3D11ShaderReflectionType* pBase) PURE; }; // {51F23923-F3E5-4BD1-91CB-606177D8DB4C} DEFINE_GUID(IID_ID3D11ShaderReflectionVariable, 0x51f23923, 0xf3e5, 0x4bd1, 0x91, 0xcb, 0x60, 0x61, 0x77, 0xd8, 0xdb, 0x4c); #undef INTERFACE #define INTERFACE ID3D11ShaderReflectionVariable DECLARE_INTERFACE(ID3D11ShaderReflectionVariable) { STDMETHOD(GetDesc)(THIS_ __out D3D11_SHADER_VARIABLE_DESC *pDesc) PURE; STDMETHOD_(ID3D11ShaderReflectionType*, GetType)(THIS) PURE; STDMETHOD_(ID3D11ShaderReflectionConstantBuffer*, GetBuffer)(THIS) PURE; STDMETHOD_(UINT, GetInterfaceSlot)(THIS_ __in UINT uArrayIndex) PURE; }; // {EB62D63D-93DD-4318-8AE8-C6F83AD371B8} DEFINE_GUID(IID_ID3D11ShaderReflectionConstantBuffer, 0xeb62d63d, 0x93dd, 0x4318, 0x8a, 0xe8, 0xc6, 0xf8, 0x3a, 0xd3, 0x71, 0xb8); #undef INTERFACE #define INTERFACE ID3D11ShaderReflectionConstantBuffer DECLARE_INTERFACE(ID3D11ShaderReflectionConstantBuffer) { STDMETHOD(GetDesc)(THIS_ D3D11_SHADER_BUFFER_DESC *pDesc) PURE; STDMETHOD_(ID3D11ShaderReflectionVariable*, GetVariableByIndex)(THIS_ __in UINT Index) PURE; STDMETHOD_(ID3D11ShaderReflectionVariable*, GetVariableByName)(THIS_ __in LPCSTR Name) PURE; }; // The ID3D11ShaderReflection IID may change from SDK version to SDK version // if the reflection API changes. This prevents new code with the new API // from working with an old binary. Recompiling with the new header // will pick up the new IID. // 0a233719-3960-4578-9d7c-203b8b1d9cc1 DEFINE_GUID(IID_ID3D11ShaderReflection, 0x0a233719, 0x3960, 0x4578, 0x9d, 0x7c, 0x20, 0x3b, 0x8b, 0x1d, 0x9c, 0xc1); #undef INTERFACE #define INTERFACE ID3D11ShaderReflection DECLARE_INTERFACE_(ID3D11ShaderReflection, IUnknown) { STDMETHOD(QueryInterface)(THIS_ __in REFIID iid, __out LPVOID *ppv) PURE; STDMETHOD_(ULONG, AddRef)(THIS) PURE; STDMETHOD_(ULONG, Release)(THIS) PURE; STDMETHOD(GetDesc)(THIS_ __out D3D11_SHADER_DESC *pDesc) PURE; STDMETHOD_(ID3D11ShaderReflectionConstantBuffer*, GetConstantBufferByIndex)(THIS_ __in UINT Index) PURE; STDMETHOD_(ID3D11ShaderReflectionConstantBuffer*, GetConstantBufferByName)(THIS_ __in LPCSTR Name) PURE; STDMETHOD(GetResourceBindingDesc)(THIS_ __in UINT ResourceIndex, __out D3D11_SHADER_INPUT_BIND_DESC *pDesc) PURE; STDMETHOD(GetInputParameterDesc)(THIS_ __in UINT ParameterIndex, __out D3D11_SIGNATURE_PARAMETER_DESC *pDesc) PURE; STDMETHOD(GetOutputParameterDesc)(THIS_ __in UINT ParameterIndex, __out D3D11_SIGNATURE_PARAMETER_DESC *pDesc) PURE; STDMETHOD(GetPatchConstantParameterDesc)(THIS_ __in UINT ParameterIndex, __out D3D11_SIGNATURE_PARAMETER_DESC *pDesc) PURE; STDMETHOD_(ID3D11ShaderReflectionVariable*, GetVariableByName)(THIS_ __in LPCSTR Name) PURE; STDMETHOD(GetResourceBindingDescByName)(THIS_ __in LPCSTR Name, __out D3D11_SHADER_INPUT_BIND_DESC *pDesc) PURE; STDMETHOD_(UINT, GetMovInstructionCount)(THIS) PURE; STDMETHOD_(UINT, GetMovcInstructionCount)(THIS) PURE; STDMETHOD_(UINT, GetConversionInstructionCount)(THIS) PURE; STDMETHOD_(UINT, GetBitwiseInstructionCount)(THIS) PURE; STDMETHOD_(D3D_PRIMITIVE, GetGSInputPrimitive)(THIS) PURE; STDMETHOD_(BOOL, IsSampleFrequencyShader)(THIS) PURE; STDMETHOD_(UINT, GetNumInterfaceSlots)(THIS) PURE; STDMETHOD(GetMinFeatureLevel)(THIS_ __out enum D3D_FEATURE_LEVEL* pLevel) PURE; STDMETHOD_(UINT, GetThreadGroupSize)(THIS_ __out_opt UINT* pSizeX, __out_opt UINT* pSizeY, __out_opt UINT* pSizeZ) PURE; }; ////////////////////////////////////////////////////////////////////////////// // APIs ////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// #ifdef __cplusplus extern "C" { #endif //__cplusplus #ifdef __cplusplus } #endif //__cplusplus #endif //__D3D11SHADER_H__ ================================================ FILE: Include/D3Dcommon.h ================================================ /* this ALWAYS GENERATED file contains the definitions for the interfaces */ /* File created by MIDL compiler version 7.00.0555 */ /* @@MIDL_FILE_HEADING( ) */ #pragma warning( disable: 4049 ) /* more than 64k source lines */ /* verify that the version is high enough to compile this file*/ #ifndef __REQUIRED_RPCNDR_H_VERSION__ #define __REQUIRED_RPCNDR_H_VERSION__ 475 #endif /* verify that the version is high enough to compile this file*/ #ifndef __REQUIRED_RPCSAL_H_VERSION__ #define __REQUIRED_RPCSAL_H_VERSION__ 100 #endif #include "rpc.h" #include "rpcndr.h" #ifndef __RPCNDR_H_VERSION__ #error this stub requires an updated version of #endif // __RPCNDR_H_VERSION__ #ifndef COM_NO_WINDOWS_H #include "windows.h" #include "ole2.h" #endif /*COM_NO_WINDOWS_H*/ #ifndef __d3dcommon_h__ #define __d3dcommon_h__ #if defined(_MSC_VER) && (_MSC_VER >= 1020) #pragma once #endif /* Forward Declarations */ #ifndef __ID3D10Blob_FWD_DEFINED__ #define __ID3D10Blob_FWD_DEFINED__ typedef interface ID3D10Blob ID3D10Blob; #endif /* __ID3D10Blob_FWD_DEFINED__ */ /* header files for imported files */ #include "oaidl.h" #include "ocidl.h" #ifdef __cplusplus extern "C"{ #endif /* interface __MIDL_itf_d3dcommon_0000_0000 */ /* [local] */ typedef enum D3D_DRIVER_TYPE { D3D_DRIVER_TYPE_UNKNOWN = 0, D3D_DRIVER_TYPE_HARDWARE = ( D3D_DRIVER_TYPE_UNKNOWN + 1 ) , D3D_DRIVER_TYPE_REFERENCE = ( D3D_DRIVER_TYPE_HARDWARE + 1 ) , D3D_DRIVER_TYPE_NULL = ( D3D_DRIVER_TYPE_REFERENCE + 1 ) , D3D_DRIVER_TYPE_SOFTWARE = ( D3D_DRIVER_TYPE_NULL + 1 ) , D3D_DRIVER_TYPE_WARP = ( D3D_DRIVER_TYPE_SOFTWARE + 1 ) } D3D_DRIVER_TYPE; typedef enum D3D_FEATURE_LEVEL { D3D_FEATURE_LEVEL_9_1 = 0x9100, D3D_FEATURE_LEVEL_9_2 = 0x9200, D3D_FEATURE_LEVEL_9_3 = 0x9300, D3D_FEATURE_LEVEL_10_0 = 0xa000, D3D_FEATURE_LEVEL_10_1 = 0xa100, D3D_FEATURE_LEVEL_11_0 = 0xb000 } D3D_FEATURE_LEVEL; typedef enum D3D_PRIMITIVE_TOPOLOGY { D3D_PRIMITIVE_TOPOLOGY_UNDEFINED = 0, D3D_PRIMITIVE_TOPOLOGY_POINTLIST = 1, D3D_PRIMITIVE_TOPOLOGY_LINELIST = 2, D3D_PRIMITIVE_TOPOLOGY_LINESTRIP = 3, D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST = 4, D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP = 5, D3D_PRIMITIVE_TOPOLOGY_LINELIST_ADJ = 10, D3D_PRIMITIVE_TOPOLOGY_LINESTRIP_ADJ = 11, D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST_ADJ = 12, D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP_ADJ = 13, D3D_PRIMITIVE_TOPOLOGY_1_CONTROL_POINT_PATCHLIST = 33, D3D_PRIMITIVE_TOPOLOGY_2_CONTROL_POINT_PATCHLIST = 34, D3D_PRIMITIVE_TOPOLOGY_3_CONTROL_POINT_PATCHLIST = 35, D3D_PRIMITIVE_TOPOLOGY_4_CONTROL_POINT_PATCHLIST = 36, D3D_PRIMITIVE_TOPOLOGY_5_CONTROL_POINT_PATCHLIST = 37, D3D_PRIMITIVE_TOPOLOGY_6_CONTROL_POINT_PATCHLIST = 38, D3D_PRIMITIVE_TOPOLOGY_7_CONTROL_POINT_PATCHLIST = 39, D3D_PRIMITIVE_TOPOLOGY_8_CONTROL_POINT_PATCHLIST = 40, D3D_PRIMITIVE_TOPOLOGY_9_CONTROL_POINT_PATCHLIST = 41, D3D_PRIMITIVE_TOPOLOGY_10_CONTROL_POINT_PATCHLIST = 42, D3D_PRIMITIVE_TOPOLOGY_11_CONTROL_POINT_PATCHLIST = 43, D3D_PRIMITIVE_TOPOLOGY_12_CONTROL_POINT_PATCHLIST = 44, D3D_PRIMITIVE_TOPOLOGY_13_CONTROL_POINT_PATCHLIST = 45, D3D_PRIMITIVE_TOPOLOGY_14_CONTROL_POINT_PATCHLIST = 46, D3D_PRIMITIVE_TOPOLOGY_15_CONTROL_POINT_PATCHLIST = 47, D3D_PRIMITIVE_TOPOLOGY_16_CONTROL_POINT_PATCHLIST = 48, D3D_PRIMITIVE_TOPOLOGY_17_CONTROL_POINT_PATCHLIST = 49, D3D_PRIMITIVE_TOPOLOGY_18_CONTROL_POINT_PATCHLIST = 50, D3D_PRIMITIVE_TOPOLOGY_19_CONTROL_POINT_PATCHLIST = 51, D3D_PRIMITIVE_TOPOLOGY_20_CONTROL_POINT_PATCHLIST = 52, D3D_PRIMITIVE_TOPOLOGY_21_CONTROL_POINT_PATCHLIST = 53, D3D_PRIMITIVE_TOPOLOGY_22_CONTROL_POINT_PATCHLIST = 54, D3D_PRIMITIVE_TOPOLOGY_23_CONTROL_POINT_PATCHLIST = 55, D3D_PRIMITIVE_TOPOLOGY_24_CONTROL_POINT_PATCHLIST = 56, D3D_PRIMITIVE_TOPOLOGY_25_CONTROL_POINT_PATCHLIST = 57, D3D_PRIMITIVE_TOPOLOGY_26_CONTROL_POINT_PATCHLIST = 58, D3D_PRIMITIVE_TOPOLOGY_27_CONTROL_POINT_PATCHLIST = 59, D3D_PRIMITIVE_TOPOLOGY_28_CONTROL_POINT_PATCHLIST = 60, D3D_PRIMITIVE_TOPOLOGY_29_CONTROL_POINT_PATCHLIST = 61, D3D_PRIMITIVE_TOPOLOGY_30_CONTROL_POINT_PATCHLIST = 62, D3D_PRIMITIVE_TOPOLOGY_31_CONTROL_POINT_PATCHLIST = 63, D3D_PRIMITIVE_TOPOLOGY_32_CONTROL_POINT_PATCHLIST = 64, D3D10_PRIMITIVE_TOPOLOGY_UNDEFINED = D3D_PRIMITIVE_TOPOLOGY_UNDEFINED, D3D10_PRIMITIVE_TOPOLOGY_POINTLIST = D3D_PRIMITIVE_TOPOLOGY_POINTLIST, D3D10_PRIMITIVE_TOPOLOGY_LINELIST = D3D_PRIMITIVE_TOPOLOGY_LINELIST, D3D10_PRIMITIVE_TOPOLOGY_LINESTRIP = D3D_PRIMITIVE_TOPOLOGY_LINESTRIP, D3D10_PRIMITIVE_TOPOLOGY_TRIANGLELIST = D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST, D3D10_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP = D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP, D3D10_PRIMITIVE_TOPOLOGY_LINELIST_ADJ = D3D_PRIMITIVE_TOPOLOGY_LINELIST_ADJ, D3D10_PRIMITIVE_TOPOLOGY_LINESTRIP_ADJ = D3D_PRIMITIVE_TOPOLOGY_LINESTRIP_ADJ, D3D10_PRIMITIVE_TOPOLOGY_TRIANGLELIST_ADJ = D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST_ADJ, D3D10_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP_ADJ = D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP_ADJ, D3D11_PRIMITIVE_TOPOLOGY_UNDEFINED = D3D_PRIMITIVE_TOPOLOGY_UNDEFINED, D3D11_PRIMITIVE_TOPOLOGY_POINTLIST = D3D_PRIMITIVE_TOPOLOGY_POINTLIST, D3D11_PRIMITIVE_TOPOLOGY_LINELIST = D3D_PRIMITIVE_TOPOLOGY_LINELIST, D3D11_PRIMITIVE_TOPOLOGY_LINESTRIP = D3D_PRIMITIVE_TOPOLOGY_LINESTRIP, D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST = D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST, D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP = D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP, D3D11_PRIMITIVE_TOPOLOGY_LINELIST_ADJ = D3D_PRIMITIVE_TOPOLOGY_LINELIST_ADJ, D3D11_PRIMITIVE_TOPOLOGY_LINESTRIP_ADJ = D3D_PRIMITIVE_TOPOLOGY_LINESTRIP_ADJ, D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST_ADJ = D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST_ADJ, D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP_ADJ = D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP_ADJ, D3D11_PRIMITIVE_TOPOLOGY_1_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_1_CONTROL_POINT_PATCHLIST, D3D11_PRIMITIVE_TOPOLOGY_2_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_2_CONTROL_POINT_PATCHLIST, D3D11_PRIMITIVE_TOPOLOGY_3_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_3_CONTROL_POINT_PATCHLIST, D3D11_PRIMITIVE_TOPOLOGY_4_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_4_CONTROL_POINT_PATCHLIST, D3D11_PRIMITIVE_TOPOLOGY_5_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_5_CONTROL_POINT_PATCHLIST, D3D11_PRIMITIVE_TOPOLOGY_6_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_6_CONTROL_POINT_PATCHLIST, D3D11_PRIMITIVE_TOPOLOGY_7_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_7_CONTROL_POINT_PATCHLIST, D3D11_PRIMITIVE_TOPOLOGY_8_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_8_CONTROL_POINT_PATCHLIST, D3D11_PRIMITIVE_TOPOLOGY_9_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_9_CONTROL_POINT_PATCHLIST, D3D11_PRIMITIVE_TOPOLOGY_10_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_10_CONTROL_POINT_PATCHLIST, D3D11_PRIMITIVE_TOPOLOGY_11_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_11_CONTROL_POINT_PATCHLIST, D3D11_PRIMITIVE_TOPOLOGY_12_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_12_CONTROL_POINT_PATCHLIST, D3D11_PRIMITIVE_TOPOLOGY_13_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_13_CONTROL_POINT_PATCHLIST, D3D11_PRIMITIVE_TOPOLOGY_14_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_14_CONTROL_POINT_PATCHLIST, D3D11_PRIMITIVE_TOPOLOGY_15_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_15_CONTROL_POINT_PATCHLIST, D3D11_PRIMITIVE_TOPOLOGY_16_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_16_CONTROL_POINT_PATCHLIST, D3D11_PRIMITIVE_TOPOLOGY_17_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_17_CONTROL_POINT_PATCHLIST, D3D11_PRIMITIVE_TOPOLOGY_18_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_18_CONTROL_POINT_PATCHLIST, D3D11_PRIMITIVE_TOPOLOGY_19_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_19_CONTROL_POINT_PATCHLIST, D3D11_PRIMITIVE_TOPOLOGY_20_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_20_CONTROL_POINT_PATCHLIST, D3D11_PRIMITIVE_TOPOLOGY_21_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_21_CONTROL_POINT_PATCHLIST, D3D11_PRIMITIVE_TOPOLOGY_22_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_22_CONTROL_POINT_PATCHLIST, D3D11_PRIMITIVE_TOPOLOGY_23_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_23_CONTROL_POINT_PATCHLIST, D3D11_PRIMITIVE_TOPOLOGY_24_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_24_CONTROL_POINT_PATCHLIST, D3D11_PRIMITIVE_TOPOLOGY_25_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_25_CONTROL_POINT_PATCHLIST, D3D11_PRIMITIVE_TOPOLOGY_26_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_26_CONTROL_POINT_PATCHLIST, D3D11_PRIMITIVE_TOPOLOGY_27_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_27_CONTROL_POINT_PATCHLIST, D3D11_PRIMITIVE_TOPOLOGY_28_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_28_CONTROL_POINT_PATCHLIST, D3D11_PRIMITIVE_TOPOLOGY_29_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_29_CONTROL_POINT_PATCHLIST, D3D11_PRIMITIVE_TOPOLOGY_30_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_30_CONTROL_POINT_PATCHLIST, D3D11_PRIMITIVE_TOPOLOGY_31_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_31_CONTROL_POINT_PATCHLIST, D3D11_PRIMITIVE_TOPOLOGY_32_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_32_CONTROL_POINT_PATCHLIST } D3D_PRIMITIVE_TOPOLOGY; typedef enum D3D_PRIMITIVE { D3D_PRIMITIVE_UNDEFINED = 0, D3D_PRIMITIVE_POINT = 1, D3D_PRIMITIVE_LINE = 2, D3D_PRIMITIVE_TRIANGLE = 3, D3D_PRIMITIVE_LINE_ADJ = 6, D3D_PRIMITIVE_TRIANGLE_ADJ = 7, D3D_PRIMITIVE_1_CONTROL_POINT_PATCH = 8, D3D_PRIMITIVE_2_CONTROL_POINT_PATCH = 9, D3D_PRIMITIVE_3_CONTROL_POINT_PATCH = 10, D3D_PRIMITIVE_4_CONTROL_POINT_PATCH = 11, D3D_PRIMITIVE_5_CONTROL_POINT_PATCH = 12, D3D_PRIMITIVE_6_CONTROL_POINT_PATCH = 13, D3D_PRIMITIVE_7_CONTROL_POINT_PATCH = 14, D3D_PRIMITIVE_8_CONTROL_POINT_PATCH = 15, D3D_PRIMITIVE_9_CONTROL_POINT_PATCH = 16, D3D_PRIMITIVE_10_CONTROL_POINT_PATCH = 17, D3D_PRIMITIVE_11_CONTROL_POINT_PATCH = 18, D3D_PRIMITIVE_12_CONTROL_POINT_PATCH = 19, D3D_PRIMITIVE_13_CONTROL_POINT_PATCH = 20, D3D_PRIMITIVE_14_CONTROL_POINT_PATCH = 21, D3D_PRIMITIVE_15_CONTROL_POINT_PATCH = 22, D3D_PRIMITIVE_16_CONTROL_POINT_PATCH = 23, D3D_PRIMITIVE_17_CONTROL_POINT_PATCH = 24, D3D_PRIMITIVE_18_CONTROL_POINT_PATCH = 25, D3D_PRIMITIVE_19_CONTROL_POINT_PATCH = 26, D3D_PRIMITIVE_20_CONTROL_POINT_PATCH = 28, D3D_PRIMITIVE_21_CONTROL_POINT_PATCH = 29, D3D_PRIMITIVE_22_CONTROL_POINT_PATCH = 30, D3D_PRIMITIVE_23_CONTROL_POINT_PATCH = 31, D3D_PRIMITIVE_24_CONTROL_POINT_PATCH = 32, D3D_PRIMITIVE_25_CONTROL_POINT_PATCH = 33, D3D_PRIMITIVE_26_CONTROL_POINT_PATCH = 34, D3D_PRIMITIVE_27_CONTROL_POINT_PATCH = 35, D3D_PRIMITIVE_28_CONTROL_POINT_PATCH = 36, D3D_PRIMITIVE_29_CONTROL_POINT_PATCH = 37, D3D_PRIMITIVE_30_CONTROL_POINT_PATCH = 38, D3D_PRIMITIVE_31_CONTROL_POINT_PATCH = 39, D3D_PRIMITIVE_32_CONTROL_POINT_PATCH = 40, D3D10_PRIMITIVE_UNDEFINED = D3D_PRIMITIVE_UNDEFINED, D3D10_PRIMITIVE_POINT = D3D_PRIMITIVE_POINT, D3D10_PRIMITIVE_LINE = D3D_PRIMITIVE_LINE, D3D10_PRIMITIVE_TRIANGLE = D3D_PRIMITIVE_TRIANGLE, D3D10_PRIMITIVE_LINE_ADJ = D3D_PRIMITIVE_LINE_ADJ, D3D10_PRIMITIVE_TRIANGLE_ADJ = D3D_PRIMITIVE_TRIANGLE_ADJ, D3D11_PRIMITIVE_UNDEFINED = D3D_PRIMITIVE_UNDEFINED, D3D11_PRIMITIVE_POINT = D3D_PRIMITIVE_POINT, D3D11_PRIMITIVE_LINE = D3D_PRIMITIVE_LINE, D3D11_PRIMITIVE_TRIANGLE = D3D_PRIMITIVE_TRIANGLE, D3D11_PRIMITIVE_LINE_ADJ = D3D_PRIMITIVE_LINE_ADJ, D3D11_PRIMITIVE_TRIANGLE_ADJ = D3D_PRIMITIVE_TRIANGLE_ADJ, D3D11_PRIMITIVE_1_CONTROL_POINT_PATCH = D3D_PRIMITIVE_1_CONTROL_POINT_PATCH, D3D11_PRIMITIVE_2_CONTROL_POINT_PATCH = D3D_PRIMITIVE_2_CONTROL_POINT_PATCH, D3D11_PRIMITIVE_3_CONTROL_POINT_PATCH = D3D_PRIMITIVE_3_CONTROL_POINT_PATCH, D3D11_PRIMITIVE_4_CONTROL_POINT_PATCH = D3D_PRIMITIVE_4_CONTROL_POINT_PATCH, D3D11_PRIMITIVE_5_CONTROL_POINT_PATCH = D3D_PRIMITIVE_5_CONTROL_POINT_PATCH, D3D11_PRIMITIVE_6_CONTROL_POINT_PATCH = D3D_PRIMITIVE_6_CONTROL_POINT_PATCH, D3D11_PRIMITIVE_7_CONTROL_POINT_PATCH = D3D_PRIMITIVE_7_CONTROL_POINT_PATCH, D3D11_PRIMITIVE_8_CONTROL_POINT_PATCH = D3D_PRIMITIVE_8_CONTROL_POINT_PATCH, D3D11_PRIMITIVE_9_CONTROL_POINT_PATCH = D3D_PRIMITIVE_9_CONTROL_POINT_PATCH, D3D11_PRIMITIVE_10_CONTROL_POINT_PATCH = D3D_PRIMITIVE_10_CONTROL_POINT_PATCH, D3D11_PRIMITIVE_11_CONTROL_POINT_PATCH = D3D_PRIMITIVE_11_CONTROL_POINT_PATCH, D3D11_PRIMITIVE_12_CONTROL_POINT_PATCH = D3D_PRIMITIVE_12_CONTROL_POINT_PATCH, D3D11_PRIMITIVE_13_CONTROL_POINT_PATCH = D3D_PRIMITIVE_13_CONTROL_POINT_PATCH, D3D11_PRIMITIVE_14_CONTROL_POINT_PATCH = D3D_PRIMITIVE_14_CONTROL_POINT_PATCH, D3D11_PRIMITIVE_15_CONTROL_POINT_PATCH = D3D_PRIMITIVE_15_CONTROL_POINT_PATCH, D3D11_PRIMITIVE_16_CONTROL_POINT_PATCH = D3D_PRIMITIVE_16_CONTROL_POINT_PATCH, D3D11_PRIMITIVE_17_CONTROL_POINT_PATCH = D3D_PRIMITIVE_17_CONTROL_POINT_PATCH, D3D11_PRIMITIVE_18_CONTROL_POINT_PATCH = D3D_PRIMITIVE_18_CONTROL_POINT_PATCH, D3D11_PRIMITIVE_19_CONTROL_POINT_PATCH = D3D_PRIMITIVE_19_CONTROL_POINT_PATCH, D3D11_PRIMITIVE_20_CONTROL_POINT_PATCH = D3D_PRIMITIVE_20_CONTROL_POINT_PATCH, D3D11_PRIMITIVE_21_CONTROL_POINT_PATCH = D3D_PRIMITIVE_21_CONTROL_POINT_PATCH, D3D11_PRIMITIVE_22_CONTROL_POINT_PATCH = D3D_PRIMITIVE_22_CONTROL_POINT_PATCH, D3D11_PRIMITIVE_23_CONTROL_POINT_PATCH = D3D_PRIMITIVE_23_CONTROL_POINT_PATCH, D3D11_PRIMITIVE_24_CONTROL_POINT_PATCH = D3D_PRIMITIVE_24_CONTROL_POINT_PATCH, D3D11_PRIMITIVE_25_CONTROL_POINT_PATCH = D3D_PRIMITIVE_25_CONTROL_POINT_PATCH, D3D11_PRIMITIVE_26_CONTROL_POINT_PATCH = D3D_PRIMITIVE_26_CONTROL_POINT_PATCH, D3D11_PRIMITIVE_27_CONTROL_POINT_PATCH = D3D_PRIMITIVE_27_CONTROL_POINT_PATCH, D3D11_PRIMITIVE_28_CONTROL_POINT_PATCH = D3D_PRIMITIVE_28_CONTROL_POINT_PATCH, D3D11_PRIMITIVE_29_CONTROL_POINT_PATCH = D3D_PRIMITIVE_29_CONTROL_POINT_PATCH, D3D11_PRIMITIVE_30_CONTROL_POINT_PATCH = D3D_PRIMITIVE_30_CONTROL_POINT_PATCH, D3D11_PRIMITIVE_31_CONTROL_POINT_PATCH = D3D_PRIMITIVE_31_CONTROL_POINT_PATCH, D3D11_PRIMITIVE_32_CONTROL_POINT_PATCH = D3D_PRIMITIVE_32_CONTROL_POINT_PATCH } D3D_PRIMITIVE; typedef enum D3D_SRV_DIMENSION { D3D_SRV_DIMENSION_UNKNOWN = 0, D3D_SRV_DIMENSION_BUFFER = 1, D3D_SRV_DIMENSION_TEXTURE1D = 2, D3D_SRV_DIMENSION_TEXTURE1DARRAY = 3, D3D_SRV_DIMENSION_TEXTURE2D = 4, D3D_SRV_DIMENSION_TEXTURE2DARRAY = 5, D3D_SRV_DIMENSION_TEXTURE2DMS = 6, D3D_SRV_DIMENSION_TEXTURE2DMSARRAY = 7, D3D_SRV_DIMENSION_TEXTURE3D = 8, D3D_SRV_DIMENSION_TEXTURECUBE = 9, D3D_SRV_DIMENSION_TEXTURECUBEARRAY = 10, D3D_SRV_DIMENSION_BUFFEREX = 11, D3D10_SRV_DIMENSION_UNKNOWN = D3D_SRV_DIMENSION_UNKNOWN, D3D10_SRV_DIMENSION_BUFFER = D3D_SRV_DIMENSION_BUFFER, D3D10_SRV_DIMENSION_TEXTURE1D = D3D_SRV_DIMENSION_TEXTURE1D, D3D10_SRV_DIMENSION_TEXTURE1DARRAY = D3D_SRV_DIMENSION_TEXTURE1DARRAY, D3D10_SRV_DIMENSION_TEXTURE2D = D3D_SRV_DIMENSION_TEXTURE2D, D3D10_SRV_DIMENSION_TEXTURE2DARRAY = D3D_SRV_DIMENSION_TEXTURE2DARRAY, D3D10_SRV_DIMENSION_TEXTURE2DMS = D3D_SRV_DIMENSION_TEXTURE2DMS, D3D10_SRV_DIMENSION_TEXTURE2DMSARRAY = D3D_SRV_DIMENSION_TEXTURE2DMSARRAY, D3D10_SRV_DIMENSION_TEXTURE3D = D3D_SRV_DIMENSION_TEXTURE3D, D3D10_SRV_DIMENSION_TEXTURECUBE = D3D_SRV_DIMENSION_TEXTURECUBE, D3D10_1_SRV_DIMENSION_UNKNOWN = D3D_SRV_DIMENSION_UNKNOWN, D3D10_1_SRV_DIMENSION_BUFFER = D3D_SRV_DIMENSION_BUFFER, D3D10_1_SRV_DIMENSION_TEXTURE1D = D3D_SRV_DIMENSION_TEXTURE1D, D3D10_1_SRV_DIMENSION_TEXTURE1DARRAY = D3D_SRV_DIMENSION_TEXTURE1DARRAY, D3D10_1_SRV_DIMENSION_TEXTURE2D = D3D_SRV_DIMENSION_TEXTURE2D, D3D10_1_SRV_DIMENSION_TEXTURE2DARRAY = D3D_SRV_DIMENSION_TEXTURE2DARRAY, D3D10_1_SRV_DIMENSION_TEXTURE2DMS = D3D_SRV_DIMENSION_TEXTURE2DMS, D3D10_1_SRV_DIMENSION_TEXTURE2DMSARRAY = D3D_SRV_DIMENSION_TEXTURE2DMSARRAY, D3D10_1_SRV_DIMENSION_TEXTURE3D = D3D_SRV_DIMENSION_TEXTURE3D, D3D10_1_SRV_DIMENSION_TEXTURECUBE = D3D_SRV_DIMENSION_TEXTURECUBE, D3D10_1_SRV_DIMENSION_TEXTURECUBEARRAY = D3D_SRV_DIMENSION_TEXTURECUBEARRAY, D3D11_SRV_DIMENSION_UNKNOWN = D3D_SRV_DIMENSION_UNKNOWN, D3D11_SRV_DIMENSION_BUFFER = D3D_SRV_DIMENSION_BUFFER, D3D11_SRV_DIMENSION_TEXTURE1D = D3D_SRV_DIMENSION_TEXTURE1D, D3D11_SRV_DIMENSION_TEXTURE1DARRAY = D3D_SRV_DIMENSION_TEXTURE1DARRAY, D3D11_SRV_DIMENSION_TEXTURE2D = D3D_SRV_DIMENSION_TEXTURE2D, D3D11_SRV_DIMENSION_TEXTURE2DARRAY = D3D_SRV_DIMENSION_TEXTURE2DARRAY, D3D11_SRV_DIMENSION_TEXTURE2DMS = D3D_SRV_DIMENSION_TEXTURE2DMS, D3D11_SRV_DIMENSION_TEXTURE2DMSARRAY = D3D_SRV_DIMENSION_TEXTURE2DMSARRAY, D3D11_SRV_DIMENSION_TEXTURE3D = D3D_SRV_DIMENSION_TEXTURE3D, D3D11_SRV_DIMENSION_TEXTURECUBE = D3D_SRV_DIMENSION_TEXTURECUBE, D3D11_SRV_DIMENSION_TEXTURECUBEARRAY = D3D_SRV_DIMENSION_TEXTURECUBEARRAY, D3D11_SRV_DIMENSION_BUFFEREX = D3D_SRV_DIMENSION_BUFFEREX } D3D_SRV_DIMENSION; typedef struct _D3D_SHADER_MACRO { LPCSTR Name; LPCSTR Definition; } D3D_SHADER_MACRO; typedef struct _D3D_SHADER_MACRO *LPD3D_SHADER_MACRO; DEFINE_GUID(IID_ID3D10Blob, 0x8ba5fb08, 0x5195, 0x40e2, 0xac, 0x58, 0xd, 0x98, 0x9c, 0x3a, 0x1, 0x2); extern RPC_IF_HANDLE __MIDL_itf_d3dcommon_0000_0000_v0_0_c_ifspec; extern RPC_IF_HANDLE __MIDL_itf_d3dcommon_0000_0000_v0_0_s_ifspec; #ifndef __ID3D10Blob_INTERFACE_DEFINED__ #define __ID3D10Blob_INTERFACE_DEFINED__ /* interface ID3D10Blob */ /* [unique][local][object][uuid] */ EXTERN_C const IID IID_ID3D10Blob; #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("8BA5FB08-5195-40e2-AC58-0D989C3A0102") ID3D10Blob : public IUnknown { public: virtual LPVOID STDMETHODCALLTYPE GetBufferPointer( void) = 0; virtual SIZE_T STDMETHODCALLTYPE GetBufferSize( void) = 0; }; #else /* C style interface */ typedef struct ID3D10BlobVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ID3D10Blob * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ __RPC__deref_out void **ppvObject); ULONG ( STDMETHODCALLTYPE *AddRef )( ID3D10Blob * This); ULONG ( STDMETHODCALLTYPE *Release )( ID3D10Blob * This); LPVOID ( STDMETHODCALLTYPE *GetBufferPointer )( ID3D10Blob * This); SIZE_T ( STDMETHODCALLTYPE *GetBufferSize )( ID3D10Blob * This); END_INTERFACE } ID3D10BlobVtbl; interface ID3D10Blob { CONST_VTBL struct ID3D10BlobVtbl *lpVtbl; }; #ifdef COBJMACROS #define ID3D10Blob_QueryInterface(This,riid,ppvObject) \ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) #define ID3D10Blob_AddRef(This) \ ( (This)->lpVtbl -> AddRef(This) ) #define ID3D10Blob_Release(This) \ ( (This)->lpVtbl -> Release(This) ) #define ID3D10Blob_GetBufferPointer(This) \ ( (This)->lpVtbl -> GetBufferPointer(This) ) #define ID3D10Blob_GetBufferSize(This) \ ( (This)->lpVtbl -> GetBufferSize(This) ) #endif /* COBJMACROS */ #endif /* C style interface */ #endif /* __ID3D10Blob_INTERFACE_DEFINED__ */ /* interface __MIDL_itf_d3dcommon_0000_0001 */ /* [local] */ typedef interface ID3D10Blob* LPD3D10BLOB; typedef ID3D10Blob ID3DBlob; typedef ID3DBlob* LPD3DBLOB; #define IID_ID3DBlob IID_ID3D10Blob typedef enum _D3D_INCLUDE_TYPE { D3D_INCLUDE_LOCAL = 0, D3D_INCLUDE_SYSTEM = ( D3D_INCLUDE_LOCAL + 1 ) , D3D10_INCLUDE_LOCAL = D3D_INCLUDE_LOCAL, D3D10_INCLUDE_SYSTEM = D3D_INCLUDE_SYSTEM, D3D_INCLUDE_FORCE_DWORD = 0x7fffffff } D3D_INCLUDE_TYPE; typedef interface ID3DInclude ID3DInclude; #undef INTERFACE #define INTERFACE ID3DInclude DECLARE_INTERFACE(ID3DInclude) { STDMETHOD(Open)(THIS_ D3D_INCLUDE_TYPE IncludeType, LPCSTR pFileName, LPCVOID pParentData, LPCVOID *ppData, UINT *pBytes) PURE; STDMETHOD(Close)(THIS_ LPCVOID pData) PURE; }; typedef ID3DInclude* LPD3DINCLUDE; typedef enum _D3D_SHADER_VARIABLE_CLASS { D3D_SVC_SCALAR = 0, D3D_SVC_VECTOR = ( D3D_SVC_SCALAR + 1 ) , D3D_SVC_MATRIX_ROWS = ( D3D_SVC_VECTOR + 1 ) , D3D_SVC_MATRIX_COLUMNS = ( D3D_SVC_MATRIX_ROWS + 1 ) , D3D_SVC_OBJECT = ( D3D_SVC_MATRIX_COLUMNS + 1 ) , D3D_SVC_STRUCT = ( D3D_SVC_OBJECT + 1 ) , D3D_SVC_INTERFACE_CLASS = ( D3D_SVC_STRUCT + 1 ) , D3D_SVC_INTERFACE_POINTER = ( D3D_SVC_INTERFACE_CLASS + 1 ) , D3D10_SVC_SCALAR = D3D_SVC_SCALAR, D3D10_SVC_VECTOR = D3D_SVC_VECTOR, D3D10_SVC_MATRIX_ROWS = D3D_SVC_MATRIX_ROWS, D3D10_SVC_MATRIX_COLUMNS = D3D_SVC_MATRIX_COLUMNS, D3D10_SVC_OBJECT = D3D_SVC_OBJECT, D3D10_SVC_STRUCT = D3D_SVC_STRUCT, D3D11_SVC_INTERFACE_CLASS = D3D_SVC_INTERFACE_CLASS, D3D11_SVC_INTERFACE_POINTER = D3D_SVC_INTERFACE_POINTER, D3D_SVC_FORCE_DWORD = 0x7fffffff } D3D_SHADER_VARIABLE_CLASS; typedef enum _D3D_SHADER_VARIABLE_FLAGS { D3D_SVF_USERPACKED = 1, D3D_SVF_USED = 2, D3D_SVF_INTERFACE_POINTER = 4, D3D_SVF_INTERFACE_PARAMETER = 8, D3D10_SVF_USERPACKED = D3D_SVF_USERPACKED, D3D10_SVF_USED = D3D_SVF_USED, D3D11_SVF_INTERFACE_POINTER = D3D_SVF_INTERFACE_POINTER, D3D11_SVF_INTERFACE_PARAMETER = D3D_SVF_INTERFACE_PARAMETER, D3D_SVF_FORCE_DWORD = 0x7fffffff } D3D_SHADER_VARIABLE_FLAGS; typedef enum _D3D_SHADER_VARIABLE_TYPE { D3D_SVT_VOID = 0, D3D_SVT_BOOL = 1, D3D_SVT_INT = 2, D3D_SVT_FLOAT = 3, D3D_SVT_STRING = 4, D3D_SVT_TEXTURE = 5, D3D_SVT_TEXTURE1D = 6, D3D_SVT_TEXTURE2D = 7, D3D_SVT_TEXTURE3D = 8, D3D_SVT_TEXTURECUBE = 9, D3D_SVT_SAMPLER = 10, D3D_SVT_SAMPLER1D = 11, D3D_SVT_SAMPLER2D = 12, D3D_SVT_SAMPLER3D = 13, D3D_SVT_SAMPLERCUBE = 14, D3D_SVT_PIXELSHADER = 15, D3D_SVT_VERTEXSHADER = 16, D3D_SVT_PIXELFRAGMENT = 17, D3D_SVT_VERTEXFRAGMENT = 18, D3D_SVT_UINT = 19, D3D_SVT_UINT8 = 20, D3D_SVT_GEOMETRYSHADER = 21, D3D_SVT_RASTERIZER = 22, D3D_SVT_DEPTHSTENCIL = 23, D3D_SVT_BLEND = 24, D3D_SVT_BUFFER = 25, D3D_SVT_CBUFFER = 26, D3D_SVT_TBUFFER = 27, D3D_SVT_TEXTURE1DARRAY = 28, D3D_SVT_TEXTURE2DARRAY = 29, D3D_SVT_RENDERTARGETVIEW = 30, D3D_SVT_DEPTHSTENCILVIEW = 31, D3D_SVT_TEXTURE2DMS = 32, D3D_SVT_TEXTURE2DMSARRAY = 33, D3D_SVT_TEXTURECUBEARRAY = 34, D3D_SVT_HULLSHADER = 35, D3D_SVT_DOMAINSHADER = 36, D3D_SVT_INTERFACE_POINTER = 37, D3D_SVT_COMPUTESHADER = 38, D3D_SVT_DOUBLE = 39, D3D_SVT_RWTEXTURE1D = 40, D3D_SVT_RWTEXTURE1DARRAY = 41, D3D_SVT_RWTEXTURE2D = 42, D3D_SVT_RWTEXTURE2DARRAY = 43, D3D_SVT_RWTEXTURE3D = 44, D3D_SVT_RWBUFFER = 45, D3D_SVT_BYTEADDRESS_BUFFER = 46, D3D_SVT_RWBYTEADDRESS_BUFFER = 47, D3D_SVT_STRUCTURED_BUFFER = 48, D3D_SVT_RWSTRUCTURED_BUFFER = 49, D3D_SVT_APPEND_STRUCTURED_BUFFER = 50, D3D_SVT_CONSUME_STRUCTURED_BUFFER = 51, D3D10_SVT_VOID = D3D_SVT_VOID, D3D10_SVT_BOOL = D3D_SVT_BOOL, D3D10_SVT_INT = D3D_SVT_INT, D3D10_SVT_FLOAT = D3D_SVT_FLOAT, D3D10_SVT_STRING = D3D_SVT_STRING, D3D10_SVT_TEXTURE = D3D_SVT_TEXTURE, D3D10_SVT_TEXTURE1D = D3D_SVT_TEXTURE1D, D3D10_SVT_TEXTURE2D = D3D_SVT_TEXTURE2D, D3D10_SVT_TEXTURE3D = D3D_SVT_TEXTURE3D, D3D10_SVT_TEXTURECUBE = D3D_SVT_TEXTURECUBE, D3D10_SVT_SAMPLER = D3D_SVT_SAMPLER, D3D10_SVT_SAMPLER1D = D3D_SVT_SAMPLER1D, D3D10_SVT_SAMPLER2D = D3D_SVT_SAMPLER2D, D3D10_SVT_SAMPLER3D = D3D_SVT_SAMPLER3D, D3D10_SVT_SAMPLERCUBE = D3D_SVT_SAMPLERCUBE, D3D10_SVT_PIXELSHADER = D3D_SVT_PIXELSHADER, D3D10_SVT_VERTEXSHADER = D3D_SVT_VERTEXSHADER, D3D10_SVT_PIXELFRAGMENT = D3D_SVT_PIXELFRAGMENT, D3D10_SVT_VERTEXFRAGMENT = D3D_SVT_VERTEXFRAGMENT, D3D10_SVT_UINT = D3D_SVT_UINT, D3D10_SVT_UINT8 = D3D_SVT_UINT8, D3D10_SVT_GEOMETRYSHADER = D3D_SVT_GEOMETRYSHADER, D3D10_SVT_RASTERIZER = D3D_SVT_RASTERIZER, D3D10_SVT_DEPTHSTENCIL = D3D_SVT_DEPTHSTENCIL, D3D10_SVT_BLEND = D3D_SVT_BLEND, D3D10_SVT_BUFFER = D3D_SVT_BUFFER, D3D10_SVT_CBUFFER = D3D_SVT_CBUFFER, D3D10_SVT_TBUFFER = D3D_SVT_TBUFFER, D3D10_SVT_TEXTURE1DARRAY = D3D_SVT_TEXTURE1DARRAY, D3D10_SVT_TEXTURE2DARRAY = D3D_SVT_TEXTURE2DARRAY, D3D10_SVT_RENDERTARGETVIEW = D3D_SVT_RENDERTARGETVIEW, D3D10_SVT_DEPTHSTENCILVIEW = D3D_SVT_DEPTHSTENCILVIEW, D3D10_SVT_TEXTURE2DMS = D3D_SVT_TEXTURE2DMS, D3D10_SVT_TEXTURE2DMSARRAY = D3D_SVT_TEXTURE2DMSARRAY, D3D10_SVT_TEXTURECUBEARRAY = D3D_SVT_TEXTURECUBEARRAY, D3D11_SVT_HULLSHADER = D3D_SVT_HULLSHADER, D3D11_SVT_DOMAINSHADER = D3D_SVT_DOMAINSHADER, D3D11_SVT_INTERFACE_POINTER = D3D_SVT_INTERFACE_POINTER, D3D11_SVT_COMPUTESHADER = D3D_SVT_COMPUTESHADER, D3D11_SVT_DOUBLE = D3D_SVT_DOUBLE, D3D11_SVT_RWTEXTURE1D = D3D_SVT_RWTEXTURE1D, D3D11_SVT_RWTEXTURE1DARRAY = D3D_SVT_RWTEXTURE1DARRAY, D3D11_SVT_RWTEXTURE2D = D3D_SVT_RWTEXTURE2D, D3D11_SVT_RWTEXTURE2DARRAY = D3D_SVT_RWTEXTURE2DARRAY, D3D11_SVT_RWTEXTURE3D = D3D_SVT_RWTEXTURE3D, D3D11_SVT_RWBUFFER = D3D_SVT_RWBUFFER, D3D11_SVT_BYTEADDRESS_BUFFER = D3D_SVT_BYTEADDRESS_BUFFER, D3D11_SVT_RWBYTEADDRESS_BUFFER = D3D_SVT_RWBYTEADDRESS_BUFFER, D3D11_SVT_STRUCTURED_BUFFER = D3D_SVT_STRUCTURED_BUFFER, D3D11_SVT_RWSTRUCTURED_BUFFER = D3D_SVT_RWSTRUCTURED_BUFFER, D3D11_SVT_APPEND_STRUCTURED_BUFFER = D3D_SVT_APPEND_STRUCTURED_BUFFER, D3D11_SVT_CONSUME_STRUCTURED_BUFFER = D3D_SVT_CONSUME_STRUCTURED_BUFFER, D3D_SVT_FORCE_DWORD = 0x7fffffff } D3D_SHADER_VARIABLE_TYPE; typedef enum _D3D_SHADER_INPUT_FLAGS { D3D_SIF_USERPACKED = 1, D3D_SIF_COMPARISON_SAMPLER = 2, D3D_SIF_TEXTURE_COMPONENT_0 = 4, D3D_SIF_TEXTURE_COMPONENT_1 = 8, D3D_SIF_TEXTURE_COMPONENTS = 12, D3D10_SIF_USERPACKED = D3D_SIF_USERPACKED, D3D10_SIF_COMPARISON_SAMPLER = D3D_SIF_COMPARISON_SAMPLER, D3D10_SIF_TEXTURE_COMPONENT_0 = D3D_SIF_TEXTURE_COMPONENT_0, D3D10_SIF_TEXTURE_COMPONENT_1 = D3D_SIF_TEXTURE_COMPONENT_1, D3D10_SIF_TEXTURE_COMPONENTS = D3D_SIF_TEXTURE_COMPONENTS, D3D_SIF_FORCE_DWORD = 0x7fffffff } D3D_SHADER_INPUT_FLAGS; typedef enum _D3D_SHADER_INPUT_TYPE { D3D_SIT_CBUFFER = 0, D3D_SIT_TBUFFER = ( D3D_SIT_CBUFFER + 1 ) , D3D_SIT_TEXTURE = ( D3D_SIT_TBUFFER + 1 ) , D3D_SIT_SAMPLER = ( D3D_SIT_TEXTURE + 1 ) , D3D_SIT_UAV_RWTYPED = ( D3D_SIT_SAMPLER + 1 ) , D3D_SIT_STRUCTURED = ( D3D_SIT_UAV_RWTYPED + 1 ) , D3D_SIT_UAV_RWSTRUCTURED = ( D3D_SIT_STRUCTURED + 1 ) , D3D_SIT_BYTEADDRESS = ( D3D_SIT_UAV_RWSTRUCTURED + 1 ) , D3D_SIT_UAV_RWBYTEADDRESS = ( D3D_SIT_BYTEADDRESS + 1 ) , D3D_SIT_UAV_APPEND_STRUCTURED = ( D3D_SIT_UAV_RWBYTEADDRESS + 1 ) , D3D_SIT_UAV_CONSUME_STRUCTURED = ( D3D_SIT_UAV_APPEND_STRUCTURED + 1 ) , D3D_SIT_UAV_RWSTRUCTURED_WITH_COUNTER = ( D3D_SIT_UAV_CONSUME_STRUCTURED + 1 ) , D3D10_SIT_CBUFFER = D3D_SIT_CBUFFER, D3D10_SIT_TBUFFER = D3D_SIT_TBUFFER, D3D10_SIT_TEXTURE = D3D_SIT_TEXTURE, D3D10_SIT_SAMPLER = D3D_SIT_SAMPLER, D3D11_SIT_UAV_RWTYPED = D3D_SIT_UAV_RWTYPED, D3D11_SIT_STRUCTURED = D3D_SIT_STRUCTURED, D3D11_SIT_UAV_RWSTRUCTURED = D3D_SIT_UAV_RWSTRUCTURED, D3D11_SIT_BYTEADDRESS = D3D_SIT_BYTEADDRESS, D3D11_SIT_UAV_RWBYTEADDRESS = D3D_SIT_UAV_RWBYTEADDRESS, D3D11_SIT_UAV_APPEND_STRUCTURED = D3D_SIT_UAV_APPEND_STRUCTURED, D3D11_SIT_UAV_CONSUME_STRUCTURED = D3D_SIT_UAV_CONSUME_STRUCTURED, D3D11_SIT_UAV_RWSTRUCTURED_WITH_COUNTER = D3D_SIT_UAV_RWSTRUCTURED_WITH_COUNTER } D3D_SHADER_INPUT_TYPE; typedef enum _D3D_SHADER_CBUFFER_FLAGS { D3D_CBF_USERPACKED = 1, D3D10_CBF_USERPACKED = D3D_CBF_USERPACKED, D3D_CBF_FORCE_DWORD = 0x7fffffff } D3D_SHADER_CBUFFER_FLAGS; typedef enum _D3D_CBUFFER_TYPE { D3D_CT_CBUFFER = 0, D3D_CT_TBUFFER = ( D3D_CT_CBUFFER + 1 ) , D3D_CT_INTERFACE_POINTERS = ( D3D_CT_TBUFFER + 1 ) , D3D_CT_RESOURCE_BIND_INFO = ( D3D_CT_INTERFACE_POINTERS + 1 ) , D3D10_CT_CBUFFER = D3D_CT_CBUFFER, D3D10_CT_TBUFFER = D3D_CT_TBUFFER, D3D11_CT_CBUFFER = D3D_CT_CBUFFER, D3D11_CT_TBUFFER = D3D_CT_TBUFFER, D3D11_CT_INTERFACE_POINTERS = D3D_CT_INTERFACE_POINTERS, D3D11_CT_RESOURCE_BIND_INFO = D3D_CT_RESOURCE_BIND_INFO } D3D_CBUFFER_TYPE; typedef enum D3D_NAME { D3D_NAME_UNDEFINED = 0, D3D_NAME_POSITION = 1, D3D_NAME_CLIP_DISTANCE = 2, D3D_NAME_CULL_DISTANCE = 3, D3D_NAME_RENDER_TARGET_ARRAY_INDEX = 4, D3D_NAME_VIEWPORT_ARRAY_INDEX = 5, D3D_NAME_VERTEX_ID = 6, D3D_NAME_PRIMITIVE_ID = 7, D3D_NAME_INSTANCE_ID = 8, D3D_NAME_IS_FRONT_FACE = 9, D3D_NAME_SAMPLE_INDEX = 10, D3D_NAME_FINAL_QUAD_EDGE_TESSFACTOR = 11, D3D_NAME_FINAL_QUAD_INSIDE_TESSFACTOR = 12, D3D_NAME_FINAL_TRI_EDGE_TESSFACTOR = 13, D3D_NAME_FINAL_TRI_INSIDE_TESSFACTOR = 14, D3D_NAME_FINAL_LINE_DETAIL_TESSFACTOR = 15, D3D_NAME_FINAL_LINE_DENSITY_TESSFACTOR = 16, D3D_NAME_TARGET = 64, D3D_NAME_DEPTH = 65, D3D_NAME_COVERAGE = 66, D3D_NAME_DEPTH_GREATER_EQUAL = 67, D3D_NAME_DEPTH_LESS_EQUAL = 68, D3D10_NAME_UNDEFINED = D3D_NAME_UNDEFINED, D3D10_NAME_POSITION = D3D_NAME_POSITION, D3D10_NAME_CLIP_DISTANCE = D3D_NAME_CLIP_DISTANCE, D3D10_NAME_CULL_DISTANCE = D3D_NAME_CULL_DISTANCE, D3D10_NAME_RENDER_TARGET_ARRAY_INDEX = D3D_NAME_RENDER_TARGET_ARRAY_INDEX, D3D10_NAME_VIEWPORT_ARRAY_INDEX = D3D_NAME_VIEWPORT_ARRAY_INDEX, D3D10_NAME_VERTEX_ID = D3D_NAME_VERTEX_ID, D3D10_NAME_PRIMITIVE_ID = D3D_NAME_PRIMITIVE_ID, D3D10_NAME_INSTANCE_ID = D3D_NAME_INSTANCE_ID, D3D10_NAME_IS_FRONT_FACE = D3D_NAME_IS_FRONT_FACE, D3D10_NAME_SAMPLE_INDEX = D3D_NAME_SAMPLE_INDEX, D3D10_NAME_TARGET = D3D_NAME_TARGET, D3D10_NAME_DEPTH = D3D_NAME_DEPTH, D3D10_NAME_COVERAGE = D3D_NAME_COVERAGE, D3D11_NAME_FINAL_QUAD_EDGE_TESSFACTOR = D3D_NAME_FINAL_QUAD_EDGE_TESSFACTOR, D3D11_NAME_FINAL_QUAD_INSIDE_TESSFACTOR = D3D_NAME_FINAL_QUAD_INSIDE_TESSFACTOR, D3D11_NAME_FINAL_TRI_EDGE_TESSFACTOR = D3D_NAME_FINAL_TRI_EDGE_TESSFACTOR, D3D11_NAME_FINAL_TRI_INSIDE_TESSFACTOR = D3D_NAME_FINAL_TRI_INSIDE_TESSFACTOR, D3D11_NAME_FINAL_LINE_DETAIL_TESSFACTOR = D3D_NAME_FINAL_LINE_DETAIL_TESSFACTOR, D3D11_NAME_FINAL_LINE_DENSITY_TESSFACTOR = D3D_NAME_FINAL_LINE_DENSITY_TESSFACTOR, D3D11_NAME_DEPTH_GREATER_EQUAL = D3D_NAME_DEPTH_GREATER_EQUAL, D3D11_NAME_DEPTH_LESS_EQUAL = D3D_NAME_DEPTH_LESS_EQUAL } D3D_NAME; typedef enum D3D_RESOURCE_RETURN_TYPE { D3D_RETURN_TYPE_UNORM = 1, D3D_RETURN_TYPE_SNORM = 2, D3D_RETURN_TYPE_SINT = 3, D3D_RETURN_TYPE_UINT = 4, D3D_RETURN_TYPE_FLOAT = 5, D3D_RETURN_TYPE_MIXED = 6, D3D_RETURN_TYPE_DOUBLE = 7, D3D_RETURN_TYPE_CONTINUED = 8, D3D10_RETURN_TYPE_UNORM = D3D_RETURN_TYPE_UNORM, D3D10_RETURN_TYPE_SNORM = D3D_RETURN_TYPE_SNORM, D3D10_RETURN_TYPE_SINT = D3D_RETURN_TYPE_SINT, D3D10_RETURN_TYPE_UINT = D3D_RETURN_TYPE_UINT, D3D10_RETURN_TYPE_FLOAT = D3D_RETURN_TYPE_FLOAT, D3D10_RETURN_TYPE_MIXED = D3D_RETURN_TYPE_MIXED, D3D11_RETURN_TYPE_UNORM = D3D_RETURN_TYPE_UNORM, D3D11_RETURN_TYPE_SNORM = D3D_RETURN_TYPE_SNORM, D3D11_RETURN_TYPE_SINT = D3D_RETURN_TYPE_SINT, D3D11_RETURN_TYPE_UINT = D3D_RETURN_TYPE_UINT, D3D11_RETURN_TYPE_FLOAT = D3D_RETURN_TYPE_FLOAT, D3D11_RETURN_TYPE_MIXED = D3D_RETURN_TYPE_MIXED, D3D11_RETURN_TYPE_DOUBLE = D3D_RETURN_TYPE_DOUBLE, D3D11_RETURN_TYPE_CONTINUED = D3D_RETURN_TYPE_CONTINUED } D3D_RESOURCE_RETURN_TYPE; typedef enum D3D_REGISTER_COMPONENT_TYPE { D3D_REGISTER_COMPONENT_UNKNOWN = 0, D3D_REGISTER_COMPONENT_UINT32 = 1, D3D_REGISTER_COMPONENT_SINT32 = 2, D3D_REGISTER_COMPONENT_FLOAT32 = 3, D3D10_REGISTER_COMPONENT_UNKNOWN = D3D_REGISTER_COMPONENT_UNKNOWN, D3D10_REGISTER_COMPONENT_UINT32 = D3D_REGISTER_COMPONENT_UINT32, D3D10_REGISTER_COMPONENT_SINT32 = D3D_REGISTER_COMPONENT_SINT32, D3D10_REGISTER_COMPONENT_FLOAT32 = D3D_REGISTER_COMPONENT_FLOAT32 } D3D_REGISTER_COMPONENT_TYPE; typedef enum D3D_TESSELLATOR_DOMAIN { D3D_TESSELLATOR_DOMAIN_UNDEFINED = 0, D3D_TESSELLATOR_DOMAIN_ISOLINE = 1, D3D_TESSELLATOR_DOMAIN_TRI = 2, D3D_TESSELLATOR_DOMAIN_QUAD = 3, D3D11_TESSELLATOR_DOMAIN_UNDEFINED = D3D_TESSELLATOR_DOMAIN_UNDEFINED, D3D11_TESSELLATOR_DOMAIN_ISOLINE = D3D_TESSELLATOR_DOMAIN_ISOLINE, D3D11_TESSELLATOR_DOMAIN_TRI = D3D_TESSELLATOR_DOMAIN_TRI, D3D11_TESSELLATOR_DOMAIN_QUAD = D3D_TESSELLATOR_DOMAIN_QUAD } D3D_TESSELLATOR_DOMAIN; typedef enum D3D_TESSELLATOR_PARTITIONING { D3D_TESSELLATOR_PARTITIONING_UNDEFINED = 0, D3D_TESSELLATOR_PARTITIONING_INTEGER = 1, D3D_TESSELLATOR_PARTITIONING_POW2 = 2, D3D_TESSELLATOR_PARTITIONING_FRACTIONAL_ODD = 3, D3D_TESSELLATOR_PARTITIONING_FRACTIONAL_EVEN = 4, D3D11_TESSELLATOR_PARTITIONING_UNDEFINED = D3D_TESSELLATOR_PARTITIONING_UNDEFINED, D3D11_TESSELLATOR_PARTITIONING_INTEGER = D3D_TESSELLATOR_PARTITIONING_INTEGER, D3D11_TESSELLATOR_PARTITIONING_POW2 = D3D_TESSELLATOR_PARTITIONING_POW2, D3D11_TESSELLATOR_PARTITIONING_FRACTIONAL_ODD = D3D_TESSELLATOR_PARTITIONING_FRACTIONAL_ODD, D3D11_TESSELLATOR_PARTITIONING_FRACTIONAL_EVEN = D3D_TESSELLATOR_PARTITIONING_FRACTIONAL_EVEN } D3D_TESSELLATOR_PARTITIONING; typedef enum D3D_TESSELLATOR_OUTPUT_PRIMITIVE { D3D_TESSELLATOR_OUTPUT_UNDEFINED = 0, D3D_TESSELLATOR_OUTPUT_POINT = 1, D3D_TESSELLATOR_OUTPUT_LINE = 2, D3D_TESSELLATOR_OUTPUT_TRIANGLE_CW = 3, D3D_TESSELLATOR_OUTPUT_TRIANGLE_CCW = 4, D3D11_TESSELLATOR_OUTPUT_UNDEFINED = D3D_TESSELLATOR_OUTPUT_UNDEFINED, D3D11_TESSELLATOR_OUTPUT_POINT = D3D_TESSELLATOR_OUTPUT_POINT, D3D11_TESSELLATOR_OUTPUT_LINE = D3D_TESSELLATOR_OUTPUT_LINE, D3D11_TESSELLATOR_OUTPUT_TRIANGLE_CW = D3D_TESSELLATOR_OUTPUT_TRIANGLE_CW, D3D11_TESSELLATOR_OUTPUT_TRIANGLE_CCW = D3D_TESSELLATOR_OUTPUT_TRIANGLE_CCW } D3D_TESSELLATOR_OUTPUT_PRIMITIVE; DEFINE_GUID(WKPDID_D3DDebugObjectName,0x429b8c22,0x9188,0x4b0c,0x87,0x42,0xac,0xb0,0xbf,0x85,0xc2,0x00); extern RPC_IF_HANDLE __MIDL_itf_d3dcommon_0000_0001_v0_0_c_ifspec; extern RPC_IF_HANDLE __MIDL_itf_d3dcommon_0000_0001_v0_0_s_ifspec; /* Additional Prototypes for ALL interfaces */ /* end of Additional Prototypes */ #ifdef __cplusplus } #endif #endif ================================================ FILE: Include/DShow.h ================================================ //------------------------------------------------------------------------------ // File: DShow.h // // Desc: DirectShow top-level include file // // Copyright (c) 2000-2001, Microsoft Corporation. All rights reserved. //------------------------------------------------------------------------------ #ifndef __DSHOW_INCLUDED__ #define __DSHOW_INCLUDED__ /////////////////////////////////////////////////////////////////////////// // Set up constants & pragmas for the compiler /////////////////////////////////////////////////////////////////////////// #ifdef _MSC_VER // disable some level-4 warnings, use #pragma warning(default:###) to re-enable #pragma warning(disable:4100) // warning C4100: unreferenced formal parameter #pragma warning(disable:4201) // warning C4201: nonstandard extension used : nameless struct/union #pragma warning(disable:4511) // warning C4511: copy constructor could not be generated #pragma warning(disable:4512) // warning C4512: assignment operator could not be generated #pragma warning(disable:4514) // warning C4514: "unreferenced inline function has been removed" #if _MSC_VER>=1100 #define AM_NOVTABLE __declspec(novtable) #else #define AM_NOVTABLE #endif #endif // MSC_VER /////////////////////////////////////////////////////////////////////////// // Include standard Windows files /////////////////////////////////////////////////////////////////////////// #include #include #include #include #include #ifndef NO_DSHOW_STRSAFE #define NO_SHLWAPI_STRFCNS #include #endif #ifndef NUMELMS #define NUMELMS(aa) (sizeof(aa)/sizeof((aa)[0])) #endif /////////////////////////////////////////////////////////////////////////// // Include DirectShow include files /////////////////////////////////////////////////////////////////////////// #include // Generated IDL header file for streams interfaces #include // ActiveMovie video interfaces and definitions #ifdef DSHOW_USE_AMAUDIO #include // ActiveMovie audio interfaces and definitions #endif #include // generated from control.odl #include // event code definitions #include // declaration of type GUIDs and well-known clsids #include // HRESULT status and error definitions #include // External device control interface defines #include // audio filter device error event codes #include // DVD error event codes /////////////////////////////////////////////////////////////////////////// // Define OLE Automation constants /////////////////////////////////////////////////////////////////////////// #ifndef OATRUE #define OATRUE (-1) #endif // OATRUE #ifndef OAFALSE #define OAFALSE (0) #endif // OAFALSE /////////////////////////////////////////////////////////////////////////// // Define Win64 interfaces if not already defined /////////////////////////////////////////////////////////////////////////// // InterlockedExchangePointer #ifndef InterlockedExchangePointer #define InterlockedExchangePointer(Target, Value) \ (PVOID)InterlockedExchange((PLONG)(Target), (LONG)(Value)) #endif #endif // __DSHOW_INCLUDED__ ================================================ FILE: Include/FXDLL.H ================================================ /* ** Copyright (c) 1995, 1996, 3Dfx Interactive, Inc. ** All Rights Reserved. ** ** This is UNPUBLISHED PROPRIETARY SOURCE CODE of 3Dfx Interactive, Inc.; ** the contents of this file may not be disclosed to third parties, copied or ** duplicated in any form, in whole or in part, without the prior written ** permission of 3Dfx Interactive, Inc. ** ** RESTRICTED RIGHTS LEGEND: ** Use, duplication or disclosure by the Government is subject to restrictions ** as set forth in subdivision (c)(1)(ii) of the Rights in Technical Data ** and Computer Software clause at DFARS 252.227-7013, and/or in similar or ** successor clauses in the FAR, DOD or NASA FAR Supplement. Unpublished - ** rights reserved under the Copyright Laws of the United States. ** ** $Revision: 9 $ ** $Date: 7/24/98 1:37p $ */ /* preprocessor defines for libraries to support DLL creation */ /* in header file, use FX_ENTRY return-type FX_CALL function-name ( ... ) */ /* in source file, use FX_EXPORT return-type FX_CSTYLE function-name (... ) */ /* in source file, set FX_DLL_DEFINITION, include this file, then include header file for library. */ /* we need to use two macros per declaration/definition because MSVC requires __stdcall and __declspec( dllexport ) be in different parts of the prototype! */ /* I use two sets in case we need to control declarations and definitions differently. If it turns out we don't, it should be easy to do a search and replace to eliminate one set */ /* NOTE: this header file may be included more than once, and FX_DLL_DEFINITION may have changed, so we do not protect this with an #fndef __FXDLL_H__ statement like we normally would. */ #ifdef FX_ENTRY #undef FX_ENTRY #endif #ifdef FX_CALL #undef FX_CALL #endif #ifdef FX_EXPORT #undef FX_EXPORT #endif #ifdef FX_CSTYLE #undef FX_CSTYLE #endif #if defined(FX_DLL_DEFINITION) #if defined(FX_DLL_ENABLE) #if defined(__MSC__) #ifndef KERNEL #define FX_ENTRY __declspec( dllexport ) #define FX_EXPORT __declspec( dllexport ) #else #define FX_ENTRY #define FX_EXPORT #endif /* #ifndef KERNEL */ #define FX_CALL __stdcall #define FX_CSTYLE __stdcall #elif defined(__WATCOMC__) #define FX_ENTRY #define FX_CALL __stdcall __export #define FX_EXPORT #define FX_CSTYLE __stdcall __export #else /* compiler */ #error define FX_ENTRY,FX_CALL & FX_EXPORT,FX_CSTYLE for your compiler #endif /* compiler */ #else /* FX_DLL_ENABLE */ #define FX_ENTRY #define FX_CALL __stdcall #define FX_EXPORT #define FX_CSTYLE __stdcall #endif /* FX_DLL_ENABLE */ #else /* FX_DLL_DEFINITION */ #define FX_ENTRY extern #define FX_CALL __stdcall #endif /* FX_DLL_DEFINITION */ /* * We don't want any of this DLL junk for DJGPP or UNIX * so undo what is done above. */ #if defined(__DJGPP__) || defined(__unix__) #ifdef FX_CALL #undef FX_CALL #endif #ifdef FX_CSTYLE #undef FX_CSTYLE #endif #ifdef FX_EXPORT #undef FX_EXPORT #endif #ifdef FX_ENTRY #undef FX_ENTRY #endif #define FX_CALL #define FX_CSTYLE #define FX_EXPORT #define FX_ENTRY #endif #if defined (MSVC16) #undef FX_CALL #define FX_CALL #endif ================================================ FILE: Include/FXGLOB.H ================================================ /* ** Copyright (c) 1995, 3Dfx Interactive, Inc. ** All Rights Reserved. ** ** This is UNPUBLISHED PROPRIETARY SOURCE CODE of 3Dfx Interactive, Inc.; ** the contents of this file may not be disclosed to third parties, copied or ** duplicated in any form, in whole or in part, without the prior written ** permission of 3Dfx Interactive, Inc. ** ** RESTRICTED RIGHTS LEGEND: ** Use, duplication or disclosure by the Government is subject to restrictions ** as set forth in subdivision (c)(1)(ii) of the Rights in Technical Data ** and Computer Software clause at DFARS 252.227-7013, and/or in similar or ** successor clauses in the FAR, DOD or NASA FAR Supplement. Unpublished - ** rights reserved under the Copyright Laws of the United States. ** ** $ Revision: $ ** $ Date: $ ** */ #ifndef _FXGLOB_H_ #define _FXGLOB_H_ void fxGlobify( int *argc, char ***argv ); #endif ================================================ FILE: Include/FXOS.H ================================================ /* ** Copyright (c) 1995, 3Dfx Interactive, Inc. ** All Rights Reserved. ** ** This is UNPUBLISHED PROPRIETARY SOURCE CODE of 3Dfx Interactive, Inc.; ** the contents of this file may not be disclosed to third parties, copied or ** duplicated in any form, in whole or in part, without the prior written ** permission of 3Dfx Interactive, Inc. ** ** RESTRICTED RIGHTS LEGEND: ** Use, duplication or disclosure by the Government is subject to restrictions ** as set forth in subdivision (c)(1)(ii) of the Rights in Technical Data ** and Computer Software clause at DFARS 252.227-7013, and/or in similar or ** successor clauses in the FAR, DOD or NASA FAR Supplement. Unpublished - ** rights reserved under the Copyright Laws of the United States. ** ** $ Revision: $ ** $ Date: $ ** */ #ifndef _FXOS_H_ #define _FXOS_H_ #include # ifdef __cplusplus extern "C" { # endif # ifdef WIN32 void sleep(int secs); #define gethostname fxGethostname int gethostname(char *name, int namelen); # endif float fxTime(void); float timer(int flag); FILE *fxFopenPath(const char *filename, const char *mode, const char *path, const char **pprefix); # ifdef __cplusplus } # endif #endif ================================================ FILE: Include/MinHook.h ================================================ /* * MinHook - The Minimalistic API Hooking Library for x64/x86 * Copyright (C) 2009-2014 Tsuda Kageyu. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #pragma once #if !(defined _M_IX86) && !(defined _M_X64) #error MinHook supports only x86 and x64 systems. #endif #include // MinHook Error Codes. typedef enum MH_STATUS { // Unknown error. Should not be returned. MH_UNKNOWN = -1, // Successful. MH_OK = 0, // MinHook is already initialized. MH_ERROR_ALREADY_INITIALIZED, // MinHook is not initialized yet, or already uninitialized. MH_ERROR_NOT_INITIALIZED, // The hook for the specified target function is already created. MH_ERROR_ALREADY_CREATED, // The hook for the specified target function is not created yet. MH_ERROR_NOT_CREATED, // The hook for the specified target function is already enabled. MH_ERROR_ENABLED, // The hook for the specified target function is not enabled yet, or already // disabled. MH_ERROR_DISABLED, // The specified pointer is invalid. It points the address of non-allocated // and/or non-executable region. MH_ERROR_NOT_EXECUTABLE, // The specified target function cannot be hooked. MH_ERROR_UNSUPPORTED_FUNCTION, // Failed to allocate memory. MH_ERROR_MEMORY_ALLOC, // Failed to change the memory protection. MH_ERROR_MEMORY_PROTECT } MH_STATUS; // Can be passed as a parameter to MH_EnableHook, MH_DisableHook, // MH_QueueEnableHook or MH_QueueDisableHook. #define MH_ALL_HOOKS NULL #ifdef __cplusplus extern "C" { #endif // Initialize the MinHook library. You must call this function EXACTLY ONCE // at the beginning of your program. MH_STATUS WINAPI MH_Initialize(VOID); // Uninitialize the MinHook library. You must call this function EXACTLY // ONCE at the end of your program. MH_STATUS WINAPI MH_Uninitialize(VOID); // Creates a Hook for the specified target function, in disabled state. // Parameters: // pTarget [in] A pointer to the target function, which will be // overridden by the detour function. // pDetour [in] A pointer to the detour function, which will override // the target function. // ppOriginal [out] A pointer to the trampoline function, which will be // used to call the original target function. // This parameter can be NULL. MH_STATUS WINAPI MH_CreateHook(LPVOID pTarget, LPVOID pDetour, LPVOID *ppOriginal); // Removes an already created hook. // Parameters: // pTarget [in] A pointer to the target function. MH_STATUS WINAPI MH_RemoveHook(LPVOID pTarget); // Enables an already created hook. // Parameters: // pTarget [in] A pointer to the target function. // If this parameter is MH_ALL_HOOKS, all created hooks are // enabled in one go. MH_STATUS WINAPI MH_EnableHook(LPVOID pTarget); // Disables an already created hook. // Parameters: // pTarget [in] A pointer to the target function. // If this parameter is MH_ALL_HOOKS, all created hooks are // disabled in one go. MH_STATUS WINAPI MH_DisableHook(LPVOID pTarget); // Queues to enable an already created hook. // Parameters: // pTarget [in] A pointer to the target function. // If this parameter is MH_ALL_HOOKS, all created hooks are // queued to be enabled. MH_STATUS WINAPI MH_QueueEnableHook(LPVOID pTarget); // Queues to disable an already created hook. // Parameters: // pTarget [in] A pointer to the target function. // If this parameter is MH_ALL_HOOKS, all created hooks are // queued to be disabled. MH_STATUS WINAPI MH_QueueDisableHook(LPVOID pTarget); // Applies all queued changes in one go. MH_STATUS WINAPI MH_ApplyQueued(VOID); #ifdef __cplusplus } #endif ================================================ FILE: Include/SST1VID.H ================================================ /* ** Copyright (c) 1995, 3Dfx Interactive, Inc. ** All Rights Reserved. ** ** This is UNPUBLISHED PROPRIETARY SOURCE CODE of 3Dfx Interactive, Inc.; ** the contents of this file may not be disclosed to third parties, copied or ** duplicated in any form, in whole or in part, without the prior written ** permission of 3Dfx Interactive, Inc. ** ** RESTRICTED RIGHTS LEGEND: ** Use, duplication or disclosure by the Government is subject to restrictions ** as set forth in subdivision (c)(1)(ii) of the Rights in Technical Data ** and Computer Software clause at DFARS 252.227-7013, and/or in similar or ** successor clauses in the FAR, DOD or NASA FAR Supplement. Unpublished - ** rights reserved under the Copyright Laws of the United States. ** ** $Header: /devel/cvg/incsrc/SST1VID.H 6 7/24/98 1:41p Hohn $ ** $Log: /devel/cvg/incsrc/SST1VID.H $ ** ** 6 7/24/98 1:41p Hohn ** ** 5 3/10/98 2:33p Psmith ** separating cvg tree from h3/h4 trees * * 4 9/09/97 7:35p Sellers * Added 400x300 resolution * * 3 8/24/97 9:31a Sellers * moved new video timing to sst1vid.h * redefined 1600x1280 to be 1600x1200 * * 2 6/05/97 11:14p Pgj * * 5 7/24/96 3:43p Sellers * added 512x384 @ 60 Hz for arcade monitors * added 512x256 @ 60 Hz for arcade monitors * * 4 7/18/96 10:58a Sellers * fixed FT and TF clock delay values for lower frequencies with * .5/.5 combos * * 3 6/18/96 6:54p Sellers * added sst1InitShutdownSli() to fix Glide Splash screen problems with * SLI * * 2 6/13/96 7:45p Sellers * added "voodoo.ini" support * added DirectX support * misc cleanup * * 2 6/11/96 1:43p Sellers * added support for 60, 75, 85, and 120 Hz refresh rates for "most" * resolutions * * 1 5/08/96 5:43p Paik * Video definitions */ #ifndef __SST1VID_H__ #define __SST1VID_H__ #ifdef __cplusplus extern "C" { #endif /* Video defines */ typedef FxI32 GrScreenRefresh_t; #define GR_REFRESH_60Hz 0x0 #define GR_REFRESH_70Hz 0x1 #define GR_REFRESH_72Hz 0x2 #define GR_REFRESH_75Hz 0x3 #define GR_REFRESH_80Hz 0x4 #define GR_REFRESH_90Hz 0x5 #define GR_REFRESH_100Hz 0x6 #define GR_REFRESH_85Hz 0x7 #define GR_REFRESH_120Hz 0x8 #define GR_REFRESH_NONE 0xff typedef FxI32 GrScreenResolution_t; #define GR_RESOLUTION_320x200 0x0 #define GR_RESOLUTION_320x240 0x1 #define GR_RESOLUTION_400x256 0x2 #define GR_RESOLUTION_512x384 0x3 #define GR_RESOLUTION_640x200 0x4 #define GR_RESOLUTION_640x350 0x5 #define GR_RESOLUTION_640x400 0x6 #define GR_RESOLUTION_640x480 0x7 #define GR_RESOLUTION_800x600 0x8 #define GR_RESOLUTION_960x720 0x9 #define GR_RESOLUTION_856x480 0xa #define GR_RESOLUTION_512x256 0xb #define GR_RESOLUTION_1024x768 0xC #define GR_RESOLUTION_1280x1024 0xD #define GR_RESOLUTION_1600x1200 0xE #define GR_RESOLUTION_400x300 0xF #define GR_RESOLUTION_NONE 0xff #ifdef GR_RESOLUTION_MAX #undef GR_RESOLUTION_MAX #endif #ifdef GR_RESOLUTION_MIN #undef GR_RESOLUTION_MIN #endif #define GR_RESOLUTION_MIN GR_RESOLUTION_320x200 #define GR_RESOLUTION_MAX GR_RESOLUTION_1600x1200 #ifdef __cplusplus } #endif #endif /* __SST1VID_H__ */ ================================================ FILE: Include/TlHelp32.h ================================================ /*****************************************************************************\ * * * tlhelp32.h - WIN32 tool help functions, types, and definitions * * * * Version 1.0 * * * * NOTE: windows.h/winbase.h must be #included first * * * * Copyright (c) Microsoft Corp. All rights reserved. * * * \*****************************************************************************/ #ifndef _INC_TOOLHELP32 #define _INC_TOOLHELP32 #if _MSC_VER > 1000 #pragma once #endif #ifdef __cplusplus extern "C" { /* Assume C declarations for C++ */ #endif /* __cplusplus */ #define MAX_MODULE_NAME32 255 /****** Shapshot function **********************************************/ HANDLE WINAPI CreateToolhelp32Snapshot( DWORD dwFlags, DWORD th32ProcessID ); // // The th32ProcessID argument is only used if TH32CS_SNAPHEAPLIST or // TH32CS_SNAPMODULE is specified. th32ProcessID == 0 means the current // process. // // NOTE that all of the snapshots are global except for the heap and module // lists which are process specific. To enumerate the heap or module // state for all WIN32 processes call with TH32CS_SNAPALL and the // current process. Then for each process in the TH32CS_SNAPPROCESS // list that isn't the current process, do a call with just // TH32CS_SNAPHEAPLIST and/or TH32CS_SNAPMODULE. // // dwFlags // #define TH32CS_SNAPHEAPLIST 0x00000001 #define TH32CS_SNAPPROCESS 0x00000002 #define TH32CS_SNAPTHREAD 0x00000004 #define TH32CS_SNAPMODULE 0x00000008 #define TH32CS_SNAPMODULE32 0x00000010 #define TH32CS_SNAPALL (TH32CS_SNAPHEAPLIST | TH32CS_SNAPPROCESS | TH32CS_SNAPTHREAD | TH32CS_SNAPMODULE) #define TH32CS_INHERIT 0x80000000 // // Use CloseHandle to destroy the snapshot // /****** heap walking ***************************************************/ typedef struct tagHEAPLIST32 { SIZE_T dwSize; DWORD th32ProcessID; // owning process ULONG_PTR th32HeapID; // heap (in owning process's context!) DWORD dwFlags; } HEAPLIST32; typedef HEAPLIST32 * PHEAPLIST32; typedef HEAPLIST32 * LPHEAPLIST32; // // dwFlags // #define HF32_DEFAULT 1 // process's default heap #define HF32_SHARED 2 // is shared heap BOOL WINAPI Heap32ListFirst( HANDLE hSnapshot, LPHEAPLIST32 lphl ); BOOL WINAPI Heap32ListNext( HANDLE hSnapshot, LPHEAPLIST32 lphl ); typedef struct tagHEAPENTRY32 { SIZE_T dwSize; HANDLE hHandle; // Handle of this heap block ULONG_PTR dwAddress; // Linear address of start of block SIZE_T dwBlockSize; // Size of block in bytes DWORD dwFlags; DWORD dwLockCount; DWORD dwResvd; DWORD th32ProcessID; // owning process ULONG_PTR th32HeapID; // heap block is in } HEAPENTRY32; typedef HEAPENTRY32 * PHEAPENTRY32; typedef HEAPENTRY32 * LPHEAPENTRY32; // // dwFlags // #define LF32_FIXED 0x00000001 #define LF32_FREE 0x00000002 #define LF32_MOVEABLE 0x00000004 BOOL WINAPI Heap32First( LPHEAPENTRY32 lphe, DWORD th32ProcessID, ULONG_PTR th32HeapID ); BOOL WINAPI Heap32Next( LPHEAPENTRY32 lphe ); BOOL WINAPI Toolhelp32ReadProcessMemory( DWORD th32ProcessID, LPCVOID lpBaseAddress, LPVOID lpBuffer, SIZE_T cbRead, SIZE_T *lpNumberOfBytesRead ); /***** Process walking *************************************************/ typedef struct tagPROCESSENTRY32W { DWORD dwSize; DWORD cntUsage; DWORD th32ProcessID; // this process ULONG_PTR th32DefaultHeapID; DWORD th32ModuleID; // associated exe DWORD cntThreads; DWORD th32ParentProcessID; // this process's parent process LONG pcPriClassBase; // Base priority of process's threads DWORD dwFlags; WCHAR szExeFile[MAX_PATH]; // Path } PROCESSENTRY32W; typedef PROCESSENTRY32W * PPROCESSENTRY32W; typedef PROCESSENTRY32W * LPPROCESSENTRY32W; BOOL WINAPI Process32FirstW( HANDLE hSnapshot, LPPROCESSENTRY32W lppe ); BOOL WINAPI Process32NextW( HANDLE hSnapshot, LPPROCESSENTRY32W lppe ); typedef struct tagPROCESSENTRY32 { DWORD dwSize; DWORD cntUsage; DWORD th32ProcessID; // this process ULONG_PTR th32DefaultHeapID; DWORD th32ModuleID; // associated exe DWORD cntThreads; DWORD th32ParentProcessID; // this process's parent process LONG pcPriClassBase; // Base priority of process's threads DWORD dwFlags; CHAR szExeFile[MAX_PATH]; // Path } PROCESSENTRY32; typedef PROCESSENTRY32 * PPROCESSENTRY32; typedef PROCESSENTRY32 * LPPROCESSENTRY32; BOOL WINAPI Process32First( HANDLE hSnapshot, LPPROCESSENTRY32 lppe ); BOOL WINAPI Process32Next( HANDLE hSnapshot, LPPROCESSENTRY32 lppe ); #ifdef UNICODE #define Process32First Process32FirstW #define Process32Next Process32NextW #define PROCESSENTRY32 PROCESSENTRY32W #define PPROCESSENTRY32 PPROCESSENTRY32W #define LPPROCESSENTRY32 LPPROCESSENTRY32W #endif // !UNICODE /***** Thread walking **************************************************/ typedef struct tagTHREADENTRY32 { DWORD dwSize; DWORD cntUsage; DWORD th32ThreadID; // this thread DWORD th32OwnerProcessID; // Process this thread is associated with LONG tpBasePri; LONG tpDeltaPri; DWORD dwFlags; } THREADENTRY32; typedef THREADENTRY32 * PTHREADENTRY32; typedef THREADENTRY32 * LPTHREADENTRY32; BOOL WINAPI Thread32First( HANDLE hSnapshot, LPTHREADENTRY32 lpte ); BOOL WINAPI Thread32Next( HANDLE hSnapshot, LPTHREADENTRY32 lpte ); /***** Module walking *************************************************/ typedef struct tagMODULEENTRY32W { DWORD dwSize; DWORD th32ModuleID; // This module DWORD th32ProcessID; // owning process DWORD GlblcntUsage; // Global usage count on the module DWORD ProccntUsage; // Module usage count in th32ProcessID's context BYTE * modBaseAddr; // Base address of module in th32ProcessID's context DWORD modBaseSize; // Size in bytes of module starting at modBaseAddr HMODULE hModule; // The hModule of this module in th32ProcessID's context WCHAR szModule[MAX_MODULE_NAME32 + 1]; WCHAR szExePath[MAX_PATH]; } MODULEENTRY32W; typedef MODULEENTRY32W * PMODULEENTRY32W; typedef MODULEENTRY32W * LPMODULEENTRY32W; BOOL WINAPI Module32FirstW( HANDLE hSnapshot, LPMODULEENTRY32W lpme ); BOOL WINAPI Module32NextW( HANDLE hSnapshot, LPMODULEENTRY32W lpme ); typedef struct tagMODULEENTRY32 { DWORD dwSize; DWORD th32ModuleID; // This module DWORD th32ProcessID; // owning process DWORD GlblcntUsage; // Global usage count on the module DWORD ProccntUsage; // Module usage count in th32ProcessID's context BYTE * modBaseAddr; // Base address of module in th32ProcessID's context DWORD modBaseSize; // Size in bytes of module starting at modBaseAddr HMODULE hModule; // The hModule of this module in th32ProcessID's context char szModule[MAX_MODULE_NAME32 + 1]; char szExePath[MAX_PATH]; } MODULEENTRY32; typedef MODULEENTRY32 * PMODULEENTRY32; typedef MODULEENTRY32 * LPMODULEENTRY32; // // NOTE CAREFULLY that the modBaseAddr and hModule fields are valid ONLY // in th32ProcessID's process context. // BOOL WINAPI Module32First( HANDLE hSnapshot, LPMODULEENTRY32 lpme ); BOOL WINAPI Module32Next( HANDLE hSnapshot, LPMODULEENTRY32 lpme ); #ifdef UNICODE #define Module32First Module32FirstW #define Module32Next Module32NextW #define MODULEENTRY32 MODULEENTRY32W #define PMODULEENTRY32 PMODULEENTRY32W #define LPMODULEENTRY32 LPMODULEENTRY32W #endif // !UNICODE #ifdef __cplusplus } #endif #endif // _INC_TOOLHELP32 ================================================ FILE: Include/Vfw.h ================================================ #ifndef _VFW_H #define _VFW_H #if __GNUC__ >= 3 #pragma GCC system_header #endif #ifndef _WINDOWS_H #include #endif #ifndef _MMSYSTEM_H #include #endif #if !defined (_OLE2_H) && !defined (__OBJC__) #include #endif #define VFWAPI WINAPI #define VFWAPIV WINAPIV #include #ifdef __cplusplus extern "C" { #endif #define ICERR_OK 0 #define ICERR_DONTDRAW 1 #define ICERR_NEWPALETTE 2 #define ICERR_GOTOKEYFRAME 3 #define ICERR_STOPDRAWING 4 #define ICERR_UNSUPPORTED -1 #define ICERR_BADFORMAT -2 #define ICERR_MEMORY -3 #define ICERR_INTERNAL -4 #define ICERR_BADFLAGS -5 #define ICERR_BADPARAM -6 #define ICERR_BADSIZE -7 #define ICERR_BADHANDLE -8 #define ICERR_CANTUPDATE -9 #define ICERR_ABORT -10 #define ICERR_ERROR -100 #define ICERR_BADBITDEPTH -200 #define ICERR_BADIMAGESIZE -201 #define ICERR_CUSTOM -400 #define ICCOMPRESSFRAMES_PADDING 0x01 #define ICM_USER (DRV_USER+0x0000) #define ICM_RESERVED_LOW (DRV_USER+0x1000) #define ICM_RESERVED_HIGH (DRV_USER+0x2000) #define ICM_RESERVED ICM_RESERVED_LOW #define ICM_GETSTATE (ICM_RESERVED+0) #define ICM_SETSTATE (ICM_RESERVED+1) #define ICM_GETINFO (ICM_RESERVED+2) #define ICM_CONFIGURE (ICM_RESERVED+10) #define ICM_ABOUT (ICM_RESERVED+11) #define ICM_GETDEFAULTQUALITY (ICM_RESERVED+30) #define ICM_GETQUALITY (ICM_RESERVED+31) #define ICM_SETQUALITY (ICM_RESERVED+32) #define ICM_SET (ICM_RESERVED+40) #define ICM_GET (ICM_RESERVED+41) #define ICM_FRAMERATE mmioFOURCC('F','r','m','R') #define ICM_KEYFRAMERATE mmioFOURCC('K','e','y','R') #define ICM_COMPRESS_GET_FORMAT (ICM_USER+4) #define ICM_COMPRESS_GET_SIZE (ICM_USER+5) #define ICM_COMPRESS_QUERY (ICM_USER+6) #define ICM_COMPRESS_BEGIN (ICM_USER+7) #define ICM_COMPRESS (ICM_USER+8) #define ICM_COMPRESS_END (ICM_USER+9) #define ICM_DECOMPRESS_GET_FORMAT (ICM_USER+10) #define ICM_DECOMPRESS_QUERY (ICM_USER+11) #define ICM_DECOMPRESS_BEGIN (ICM_USER+12) #define ICM_DECOMPRESS (ICM_USER+13) #define ICM_DECOMPRESS_END (ICM_USER+14) #define ICM_DECOMPRESS_SET_PALETTE (ICM_USER+29) #define ICM_DECOMPRESS_GET_PALETTE (ICM_USER+30) #define ICM_DRAW_QUERY (ICM_USER+31) #define ICM_DRAW_BEGIN (ICM_USER+15) #define ICM_DRAW_GET_PALETTE (ICM_USER+16) #define ICM_DRAW_START (ICM_USER+18) #define ICM_DRAW_STOP (ICM_USER+19) #define ICM_DRAW_END (ICM_USER+21) #define ICM_DRAW_GETTIME (ICM_USER+32) #define ICM_DRAW (ICM_USER+33) #define ICM_DRAW_WINDOW (ICM_USER+34) #define ICM_DRAW_SETTIME (ICM_USER+35) #define ICM_DRAW_REALIZE (ICM_USER+36) #define ICM_DRAW_FLUSH (ICM_USER+37) #define ICM_DRAW_RENDERBUFFER (ICM_USER+38) #define ICM_DRAW_START_PLAY (ICM_USER+39) #define ICM_DRAW_STOP_PLAY (ICM_USER+40) #define ICM_DRAW_SUGGESTFORMAT (ICM_USER+50) #define ICM_DRAW_CHANGEPALETTE (ICM_USER+51) #define ICM_GETBUFFERSWANTED (ICM_USER+41) #define ICM_GETDEFAULTKEYFRAMERATE (ICM_USER+42) #define ICM_DECOMPRESSEX_BEGIN (ICM_USER+60) #define ICM_DECOMPRESSEX_QUERY (ICM_USER+61) #define ICM_DECOMPRESSEX (ICM_USER+62) #define ICM_DECOMPRESSEX_END (ICM_USER+63) #define ICM_COMPRESS_FRAMES_INFO (ICM_USER+70) #define ICM_SET_STATUS_PROC (ICM_USER+72) #define ICMF_CONFIGURE_QUERY 0x01 #define ICCOMPRESS_KEYFRAME 0x01 #define ICSTATUS_START 0 #define ICSTATUS_STATUS 1 #define ICSTATUS_END 2 #define ICSTATUS_ERROR 3 #define ICSTATUS_YIELD 4 #define ICMODE_COMPRESS 1 #define ICMODE_DECOMPRESS 2 #define ICMODE_FASTDECOMPRESS 3 #define ICMODE_QUERY 4 #define ICMODE_FASTCOMPRESS 5 #define ICMODE_DRAW 8 #define ICQUALITY_LOW 0 #define ICQUALITY_HIGH 10000 #define ICQUALITY_DEFAULT -1 #define VIDCF_QUALITY 0x01 #define VIDCF_CRUNCH 0x02 #define VIDCF_TEMPORAL 0x04 #define VIDCF_COMPRESSFRAMES 0x08 #define VIDCF_DRAW 0x10 #define VIDCF_FASTTEMPORALC 0x20 #define VIDCF_FASTTEMPORALD 0x80 #define VIDCF_QUALITYTIME 0x40 #define VIDCF_FASTTEMPORAL (VIDCF_FASTTEMPORALC|VIDCF_FASTTEMPORALD) #define ICMF_ABOUT_QUERY 0x01 #define ICDECOMPRESS_HURRYUP 0x80000000 #define ICDECOMPRESS_UPDATE 0x40000000 #define ICDECOMPRESS_PREROLL 0x20000000 #define ICDECOMPRESS_NULLFRAME 0x10000000 #define ICDECOMPRESS_NOTKEYFRAME 0x8000000 #define ICDRAW_QUERY 0x01L #define ICDRAW_FULLSCREEN 0x02L #define ICDRAW_HDC 0x04L #define ICDRAW_ANIMATE 0x08L #define ICDRAW_CONTINUE 0x10L #define ICDRAW_MEMORYDC 0x20L #define ICDRAW_UPDATING 0x40L #define ICDRAW_RENDER 0x80L #define ICDRAW_BUFFER 0x100L #define ICINSTALL_UNICODE 0x8000 #define ICINSTALL_FUNCTION 0x01 #define ICINSTALL_DRIVER 0x02 #define ICINSTALL_HDRV 0x04 #define ICINSTALL_DRIVERW 0x8002 #define ICDRAW_HURRYUP 0x80000000L #define ICDRAW_UPDATE 0x40000000L #define ICDRAW_PREROLL 0x20000000L #define ICDRAW_NULLFRAME 0x10000000L #define ICDRAW_NOTKEYFRAME 0x8000000L #define ICMF_COMPVARS_VALID 0x01 #define ICMF_CHOOSE_KEYFRAME 0x01 #define ICMF_CHOOSE_DATARATE 0x02 #define ICMF_CHOOSE_PREVIEW 0x04 #define ICMF_CHOOSE_ALLCOMPRESSORS 0x08 #define ICTYPE_VIDEO mmioFOURCC('v','i','d','c') #define ICTYPE_AUDIO mmioFOURCC('a','u','d','c') #define formtypeAVI mmioFOURCC('A','V','I',' ') #define listtypeAVIHEADER mmioFOURCC('h','d','r','l') #define ckidAVIMAINHDR mmioFOURCC('a','v','i','h') #define listtypeSTREAMHEADER mmioFOURCC('s','t','r','l') #define ckidSTREAMHEADER mmioFOURCC('s','t','r','h') #define ckidSTREAMFORMAT mmioFOURCC('s','t','r','f') #define ckidSTREAMHANDLERDATA mmioFOURCC('s','t','r','d') #define ckidSTREAMNAME mmioFOURCC('s','t','r','n') #define listtypeAVIMOVIE mmioFOURCC('m','o','v','i') #define listtypeAVIRECORD mmioFOURCC('r','e','c',' ') #define ckidAVINEWINDEX mmioFOURCC('i', 'd', 'x', '1') #define streamtypeANY 0UL #define streamtypeVIDEO mmioFOURCC('v','i','d','s') #define streamtypeAUDIO mmioFOURCC('a','u','d','s') #define streamtypeMIDI mmioFOURCC('m','i','d','s') #define streamtypeTEXT mmioFOURCC('t','x','t','s') #define cktypeDIBbits aviTWOCC('d','b') #define cktypeDIBcompressed aviTWOCC('d','c') #define cktypePALchange aviTWOCC('p','c') #define cktypeWAVEbytes aviTWOCC('w','b') #define ckidAVIPADDING mmioFOURCC('J','U','N','K') #define FromHex(n) (((n)>='A')?((n)+10-'A'):((n)-'0')) #define StreamFromFOURCC(fcc) ((WORD)((FromHex(LOBYTE(LOWORD(fcc)))<<4)+(FromHex(HIBYTE(LOWORD(fcc)))))) #define TWOCCFromFOURCC(fcc) HIWORD(fcc) #define ToHex(n) ((BYTE)(((n)>9)?((n)-10+'A'):((n)+'0'))) #define MAKEAVICKID(tcc, stream) MAKELONG((ToHex((stream)&0x0f)<<8)|(ToHex(((stream)&0xf0)>>4)),tcc) #define AVIF_HASINDEX 0x10 #define AVIF_MUSTUSEINDEX 0x20 #define AVIF_ISINTERLEAVED 0x100 #define AVIF_TRUSTCKTYPE 0x800 #define AVIF_WASCAPTUREFILE 0x10000 #define AVIF_COPYRIGHTED 0x20000 #define AVI_HEADERSIZE 2048 #define AVISF_DISABLED 0x01 #define AVISF_VIDEO_PALCHANGES 0x10000 #define AVIIF_LIST 0x01 #define AVIIF_TWOCC 0x02 #define AVIIF_KEYFRAME 0x10 #define AVIIF_NOTIME 0x100 #define AVIIF_COMPUSE 0xfff0000 #define AVIIF_KEYFRAME 0x10 #define AVIGETFRAMEF_BESTDISPLAYFMT 1 #define AVISTREAMINFO_DISABLED 0x01 #define AVISTREAMINFO_FORMATCHANGES 0x10000 #define AVIFILEINFO_HASINDEX 0x10 #define AVIFILEINFO_MUSTUSEINDEX 0x20 #define AVIFILEINFO_ISINTERLEAVED 0x100 #define AVIFILEINFO_TRUSTCKTYPE 0x800 #define AVIFILEINFO_WASCAPTUREFILE 0x10000 #define AVIFILEINFO_COPYRIGHTED 0x20000 #define AVIFILECAPS_CANREAD 0x01 #define AVIFILECAPS_CANWRITE 0x02 #define AVIFILECAPS_ALLKEYFRAMES 0x10 #define AVIFILECAPS_NOCOMPRESSION 0x20 #define AVICOMPRESSF_INTERLEAVE 0x01 #define AVICOMPRESSF_DATARATE 0x02 #define AVICOMPRESSF_KEYFRAMES 0x04 #define AVICOMPRESSF_VALID 0x08 #define FIND_DIR 0x0000000fL #define FIND_NEXT 0x00000001L #define FIND_PREV 0x00000004L #define FIND_FROM_START 0x00000008L #define FIND_TYPE 0x000000f0L #define FIND_KEY 0x00000010L #define FIND_ANY 0x00000020L #define FIND_FORMAT 0x00000040L #define FIND_RET 0x0000f000L #define FIND_POS 0x00000000L #define FIND_LENGTH 0x00001000L #define FIND_OFFSET 0x00002000L #define FIND_SIZE 0x00003000L #define FIND_INDEX 0x00004000L #define AVIERR_OK 0 #define MAKE_AVIERR(e) MAKE_SCODE(SEVERITY_ERROR,FACILITY_ITF,0x4000+e) #define AVIERR_UNSUPPORTED MAKE_AVIERR(101) #define AVIERR_BADFORMAT MAKE_AVIERR(102) #define AVIERR_MEMORY MAKE_AVIERR(103) #define AVIERR_INTERNAL MAKE_AVIERR(104) #define AVIERR_BADFLAGS MAKE_AVIERR(105) #define AVIERR_BADPARAM MAKE_AVIERR(106) #define AVIERR_BADSIZE MAKE_AVIERR(107) #define AVIERR_BADHANDLE MAKE_AVIERR(108) #define AVIERR_FILEREAD MAKE_AVIERR(109) #define AVIERR_FILEWRITE MAKE_AVIERR(110) #define AVIERR_FILEOPEN MAKE_AVIERR(111) #define AVIERR_COMPRESSOR MAKE_AVIERR(112) #define AVIERR_NOCOMPRESSOR MAKE_AVIERR(113) #define AVIERR_READONLY MAKE_AVIERR(114) #define AVIERR_NODATA MAKE_AVIERR(115) #define AVIERR_BUFFERTOOSMALL MAKE_AVIERR(116) #define AVIERR_CANTCOMPRESS MAKE_AVIERR(117) #define AVIERR_USERABORT MAKE_AVIERR(198) #define AVIERR_ERROR MAKE_AVIERR(199) #define MCIWNDOPENF_NEW 0x0001 #define MCIWNDF_NOAUTOSIZEWINDOW 0x0001 #define MCIWNDF_NOPLAYBAR 0x0002 #define MCIWNDF_NOAUTOSIZEMOVIE 0x0004 #define MCIWNDF_NOMENU 0x0008 #define MCIWNDF_SHOWNAME 0x0010 #define MCIWNDF_SHOWPOS 0x0020 #define MCIWNDF_SHOWMODE 0x0040 #define MCIWNDF_SHOWALL 0x0070 #define MCIWNDF_NOTIFYMODE 0x0100 #define MCIWNDF_NOTIFYPOS 0x0200 #define MCIWNDF_NOTIFYSIZE 0x0400 #define MCIWNDF_NOTIFYERROR 0x1000 #define MCIWNDF_NOTIFYALL 0x1F00 #define MCIWNDF_NOTIFYANSI 0x0080 #define MCIWNDF_NOTIFYMEDIAA 0x0880 #define MCIWNDF_NOTIFYMEDIAW 0x0800 #define MCIWNDF_RECORD 0x2000 #define MCIWNDF_NOERRORDLG 0x4000 #define MCIWNDF_NOOPEN 0x8000 #define MCIWNDM_GETDEVICEID (WM_USER + 100) #define MCIWNDM_GETSTART (WM_USER + 103) #define MCIWNDM_GETLENGTH (WM_USER + 104) #define MCIWNDM_GETEND (WM_USER + 105) #define MCIWNDM_EJECT (WM_USER + 107) #define MCIWNDM_SETZOOM (WM_USER + 108) #define MCIWNDM_GETZOOM (WM_USER + 109) #define MCIWNDM_SETVOLUME (WM_USER + 110) #define MCIWNDM_GETVOLUME (WM_USER + 111) #define MCIWNDM_SETSPEED (WM_USER + 112) #define MCIWNDM_GETSPEED (WM_USER + 113) #define MCIWNDM_SETREPEAT (WM_USER + 114) #define MCIWNDM_GETREPEAT (WM_USER + 115) #define MCIWNDM_REALIZE (WM_USER + 118) #define MCIWNDM_VALIDATEMEDIA (WM_USER + 121) #define MCIWNDM_PLAYFROM (WM_USER + 122) #define MCIWNDM_PLAYTO (WM_USER + 123) #define MCIWNDM_GETPALETTE (WM_USER + 126) #define MCIWNDM_SETPALETTE (WM_USER + 127) #define MCIWNDM_SETTIMERS (WM_USER + 129) #define MCIWNDM_SETACTIVETIMER (WM_USER + 130) #define MCIWNDM_SETINACTIVETIMER (WM_USER + 131) #define MCIWNDM_GETACTIVETIMER (WM_USER + 132) #define MCIWNDM_GETINACTIVETIMER (WM_USER + 133) #define MCIWNDM_CHANGESTYLES (WM_USER + 135) #define MCIWNDM_GETSTYLES (WM_USER + 136) #define MCIWNDM_GETALIAS (WM_USER + 137) #define MCIWNDM_PLAYREVERSE (WM_USER + 139) #define MCIWNDM_GET_SOURCE (WM_USER + 140) #define MCIWNDM_PUT_SOURCE (WM_USER + 141) #define MCIWNDM_GET_DEST (WM_USER + 142) #define MCIWNDM_PUT_DEST (WM_USER + 143) #define MCIWNDM_CAN_PLAY (WM_USER + 144) #define MCIWNDM_CAN_WINDOW (WM_USER + 145) #define MCIWNDM_CAN_RECORD (WM_USER + 146) #define MCIWNDM_CAN_SAVE (WM_USER + 147) #define MCIWNDM_CAN_EJECT (WM_USER + 148) #define MCIWNDM_CAN_CONFIG (WM_USER + 149) #define MCIWNDM_PALETTEKICK (WM_USER + 150) #define MCIWNDM_OPENINTERFACE (WM_USER + 151) #define MCIWNDM_SETOWNER (WM_USER + 152) #define MCIWNDM_SENDSTRINGA (WM_USER + 101) #define MCIWNDM_GETPOSITIONA (WM_USER + 102) #define MCIWNDM_GETMODEA (WM_USER + 106) #define MCIWNDM_SETTIMEFORMATA (WM_USER + 119) #define MCIWNDM_GETTIMEFORMATA (WM_USER + 120) #define MCIWNDM_GETFILENAMEA (WM_USER + 124) #define MCIWNDM_GETDEVICEA (WM_USER + 125) #define MCIWNDM_GETERRORA (WM_USER + 128) #define MCIWNDM_NEWA (WM_USER + 134) #define MCIWNDM_RETURNSTRINGA (WM_USER + 138) #define MCIWNDM_OPENA (WM_USER + 153) #define MCIWNDM_SENDSTRINGW (WM_USER + 201) #define MCIWNDM_GETPOSITIONW (WM_USER + 202) #define MCIWNDM_GETMODEW (WM_USER + 206) #define MCIWNDM_SETTIMEFORMATW (WM_USER + 219) #define MCIWNDM_GETTIMEFORMATW (WM_USER + 220) #define MCIWNDM_GETFILENAMEW (WM_USER + 224) #define MCIWNDM_GETDEVICEW (WM_USER + 225) #define MCIWNDM_GETERRORW (WM_USER + 228) #define MCIWNDM_NEWW (WM_USER + 234) #define MCIWNDM_RETURNSTRINGW (WM_USER + 238) #define MCIWNDM_OPENW (WM_USER + 252) #define MCIWNDM_NOTIFYMODE (WM_USER + 200) #define MCIWNDM_NOTIFYPOS (WM_USER + 201) #define MCIWNDM_NOTIFYSIZE (WM_USER + 202) #define MCIWNDM_NOTIFYMEDIA (WM_USER + 203) #define MCIWNDM_NOTIFYERROR (WM_USER + 205) #define MCIWND_START -1 #define MCIWND_END -2 #define DDF_UPDATE 0x02 #define DDF_SAME_HDC 0x04 #define DDF_SAME_DRAW 0x08 #define DDF_DONTDRAW 0x10 #define DDF_ANIMATE 0x20 #define DDF_BUFFER 0x40 #define DDF_JUSTDRAWIT 0x80 #define DDF_FULLSCREEN 0x100 #define DDF_BACKGROUNDPAL 0x200 #define DDF_NOTKEYFRAME 0x400 #define DDF_HURRYUP 0x800 #define DDF_HALFTONE 0x1000 #define DDF_PREROLL DDF_DONTDRAW #define DDF_SAME_DIB DDF_SAME_DRAW #define DDF_SAME_SIZE DDF_SAME_DRAW #define PD_CAN_DRAW_DIB 0x01 #define PD_CAN_STRETCHDIB 0x02 #define PD_STRETCHDIB_1_1_OK 0x04 #define PD_STRETCHDIB_1_2_OK 0x08 #define PD_STRETCHDIB_1_N_OK 0x10 #ifndef mmioFOURCC #define mmioFOURCC(c0,c1,c2,c3) ((DWORD)(BYTE)(c0)|((DWORD)(BYTE)(c1)<<8)|((DWORD)(BYTE)(c2)<<16)|((DWORD)(BYTE)(c3)<<24)) #endif #ifndef aviTWOCC #define aviTWOCC(ch0,ch1) ((WORD)(BYTE)(ch0)|((WORD)(BYTE)(ch1)<<8)) #endif #ifndef RC_INVOKED DECLARE_HANDLE(HIC); DECLARE_HANDLE(HDRAWDIB); typedef WORD TWOCC; typedef BOOL (CALLBACK *AVISAVECALLBACK)(INT); typedef struct { DWORD dwSize; DWORD fccType; DWORD fccHandler; DWORD dwVersion; DWORD dwFlags; LRESULT dwError; LPVOID pV1Reserved; LPVOID pV2Reserved; DWORD dnDevNode; } ICOPEN,*LPICOPEN; typedef struct { DWORD dwFlags; LPBITMAPINFOHEADER lpbiOutput; LPVOID lpOutput; LPBITMAPINFOHEADER lpbiInput; LPVOID lpInput; LPDWORD lpckid; LPDWORD lpdwFlags; LONG lFrameNum; DWORD dwFrameSize; DWORD dwQuality; LPBITMAPINFOHEADER lpbiPrev; LPVOID lpPrev; } ICCOMPRESS; typedef struct { DWORD dwFlags; LPBITMAPINFOHEADER lpbiOutput; LPARAM lOutput; LPBITMAPINFOHEADER lpbiInput; LPARAM lInput; LONG lStartFrame; LONG lFrameCount; LONG lQuality; LONG lDataRate; LONG lKeyRate; DWORD dwRate; DWORD dwScale; DWORD dwOverheadPerFrame; DWORD dwReserved2; LONG (CALLBACK *GetData)(LPARAM,LONG,LPVOID,LONG); LONG (CALLBACK *PutData)(LPARAM,LONG,LPVOID,LONG); } ICCOMPRESSFRAMES; typedef struct { DWORD dwFlags; LPARAM lParam; LONG (CALLBACK *Status)(LPARAM,UINT,LONG); } ICSETSTATUSPROC; typedef struct { DWORD dwSize; DWORD fccType; DWORD fccHandler; DWORD dwFlags; DWORD dwVersion; DWORD dwVersionICM; WCHAR szName[16]; WCHAR szDescription[128]; WCHAR szDriver[128]; } ICINFO; typedef struct { DWORD dwFlags; LPBITMAPINFOHEADER lpbiInput; LPVOID lpInput; LPBITMAPINFOHEADER lpbiOutput; LPVOID lpOutput; DWORD ckid; } ICDECOMPRESS; typedef struct { DWORD dwFlags; LPBITMAPINFOHEADER lpbiSrc; LPVOID lpSrc; LPBITMAPINFOHEADER lpbiDst; LPVOID lpDst; INT xDst; INT yDst; INT dxDst; INT dyDst; INT xSrc; INT ySrc; INT dxSrc; INT dySrc; } ICDECOMPRESSEX; typedef struct { DWORD dwFlags; LPBITMAPINFOHEADER lpbiIn; LPBITMAPINFOHEADER lpbiSuggest; INT dxSrc; INT dySrc; INT dxDst; INT dyDst; HIC hicDecompressor; } ICDRAWSUGGEST; typedef struct { DWORD dwFlags; INT iStart; INT iLen; LPPALETTEENTRY lppe; } ICPALETTE; typedef struct { DWORD dwFlags; HPALETTE hpal; HWND hwnd; HDC hdc; INT xDst; INT yDst; INT dxDst; INT dyDst; LPBITMAPINFOHEADER lpbi; INT xSrc; INT ySrc; INT dxSrc; INT dySrc; DWORD dwRate; DWORD dwScale; } ICDRAWBEGIN; typedef struct { DWORD dwFlags; LPVOID lpFormat; LPVOID lpData; DWORD cbData; LONG lTime; } ICDRAW; typedef struct { LONG cbSize; DWORD dwFlags; HIC hic; DWORD fccType; DWORD fccHandler; LPBITMAPINFO lpbiIn; LPBITMAPINFO lpbiOut; LPVOID lpBitsOut; LPVOID lpBitsPrev; LONG lFrame; LONG lKey; LONG lDataRate; LONG lQ; LONG lKeyCount; LPVOID lpState; LONG cbState; } COMPVARS, *PCOMPVARS; typedef struct _MainAVIHeader { DWORD dwMicroSecPerFrame; DWORD dwMaxBytesPerSec; DWORD dwPaddingGranularity; DWORD dwFlags; DWORD dwTotalFrames; DWORD dwInitialFrames; DWORD dwStreams; DWORD dwSuggestedBufferSize; DWORD dwWidth; DWORD dwHeight; DWORD dwReserved[4]; } MainAVIHeader; typedef struct { FOURCC fccType; FOURCC fccHandler; DWORD dwFlags; WORD wPriority; WORD wLanguage; DWORD dwInitialFrames; DWORD dwScale; DWORD dwRate; DWORD dwStart; DWORD dwLength; DWORD dwSuggestedBufferSize; DWORD dwQuality; DWORD dwSampleSize; RECT rcFrame; } AVIStreamHeader; typedef struct _AVIINDEXENTRY { DWORD ckid; DWORD dwFlags; DWORD dwChunkOffset; DWORD dwChunkLength; } AVIINDEXENTRY; typedef struct _AVIPALCHANGE { BYTE bFirstEntry; BYTE bNumEntries; WORD wFlags; PALETTEENTRY peNew[1]; } AVIPALCHANGE; typedef struct _AVISTREAMINFOA { DWORD fccType; DWORD fccHandler; DWORD dwFlags; DWORD dwCaps; WORD wPriority; WORD wLanguage; DWORD dwScale; DWORD dwRate; DWORD dwStart; DWORD dwLength; DWORD dwInitialFrames; DWORD dwSuggestedBufferSize; DWORD dwQuality; DWORD dwSampleSize; RECT rcFrame; DWORD dwEditCount; DWORD dwFormatChangeCount; CHAR szName[64]; } AVISTREAMINFOA, * LPAVISTREAMINFOA, *PAVISTREAMINFOA; typedef struct _AVISTREAMINFOW { DWORD fccType; DWORD fccHandler; DWORD dwFlags; DWORD dwCaps; WORD wPriority; WORD wLanguage; DWORD dwScale; DWORD dwRate; DWORD dwStart; DWORD dwLength; DWORD dwInitialFrames; DWORD dwSuggestedBufferSize; DWORD dwQuality; DWORD dwSampleSize; RECT rcFrame; DWORD dwEditCount; DWORD dwFormatChangeCount; WCHAR szName[64]; } AVISTREAMINFOW, * LPAVISTREAMINFOW, *PAVISTREAMINFOW; typedef struct _AVIFILEINFOW { DWORD dwMaxBytesPerSec; DWORD dwFlags; DWORD dwCaps; DWORD dwStreams; DWORD dwSuggestedBufferSize; DWORD dwWidth; DWORD dwHeight; DWORD dwScale; DWORD dwRate; DWORD dwLength; DWORD dwEditCount; WCHAR szFileType[64]; } AVIFILEINFOW, *LPAVIFILEINFOW, *PAVIFILEINFOW; typedef struct _AVIFILEINFOA { DWORD dwMaxBytesPerSec; DWORD dwFlags; DWORD dwCaps; DWORD dwStreams; DWORD dwSuggestedBufferSize; DWORD dwWidth; DWORD dwHeight; DWORD dwScale; DWORD dwRate; DWORD dwLength; DWORD dwEditCount; CHAR szFileType[64]; } AVIFILEINFOA, *LPAVIFILEINFOA, *PAVIFILEINFOA; typedef struct _AVICOMPRESSOPTIONS { DWORD fccType; DWORD fccHandler; DWORD dwKeyFrameEvery; DWORD dwQuality; DWORD dwBytesPerSecond; DWORD dwFlags; LPVOID lpFormat; DWORD cbFormat; LPVOID lpParms; DWORD cbParms; DWORD dwInterleaveEvery; } AVICOMPRESSOPTIONS, *LPAVICOMPRESSOPTIONS,*PAVICOMPRESSOPTIONS; #if !defined (__OBJC__) #define DEFINE_AVIGUID(name,l,w1,w2) DEFINE_GUID(name,l,w1,w2,0xC0,0,0,0,0,0,0,0x46) DEFINE_AVIGUID(IID_IAVIFile,0x00020020,0,0); DEFINE_AVIGUID(IID_IAVIStream,0x00020021,0,0); DEFINE_AVIGUID(IID_IAVIStreaming,0x00020022,0,0); DEFINE_AVIGUID(IID_IGetFrame,0x00020023,0,0); DEFINE_AVIGUID(IID_IAVIEditStream,0x00020024,0,0); DEFINE_AVIGUID(CLSID_AVIFile,0x00020000,0,0); #undef INTERFACE #define INTERFACE IAVIStream DECLARE_INTERFACE_(IAVIStream, IUnknown) { STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; STDMETHOD(Create)(THIS_ LPARAM,LPARAM) PURE; STDMETHOD(Info)(THIS_ AVISTREAMINFOW*,LONG) PURE; STDMETHOD_(LONG,FindSample)(THIS_ LONG,LONG) PURE; STDMETHOD(ReadFormat)(THIS_ LONG,LPVOID,LONG*) PURE; STDMETHOD(SetFormat)(THIS_ LONG,LPVOID,LONG) PURE; STDMETHOD(Read)(THIS_ LONG,LONG,LPVOID,LONG,LONG*,LONG*) PURE; STDMETHOD(Write)(THIS_ LONG,LONG,LPVOID,LONG,DWORD,LONG*,LONG*) PURE; STDMETHOD(Delete)(THIS_ LONG,LONG) PURE; STDMETHOD(ReadData)(THIS_ DWORD,LPVOID,LONG*) PURE; STDMETHOD(WriteData)(THIS_ DWORD,LPVOID,LONG) PURE; STDMETHOD(SetInfo)(THIS_ AVISTREAMINFOW*,LONG) PURE; }; typedef IAVIStream *PAVISTREAM; #undef INTERFACE #define INTERFACE IAVIStreaming DECLARE_INTERFACE_(IAVIStreaming, IUnknown) { STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; STDMETHOD(Begin)(THIS_ LONG,LONG,LONG) PURE; STDMETHOD(End)(THIS) PURE; }; typedef IAVIStreaming *PAVISTREAMING; #undef INTERFACE #define INTERFACE IAVIEditStream DECLARE_INTERFACE_(IAVIEditStream, IUnknown) { STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; STDMETHOD(Cut)(THIS_ LONG*,LONG*,PAVISTREAM*) PURE; STDMETHOD(Copy)(THIS_ LONG*,LONG*,PAVISTREAM*) PURE; STDMETHOD(Paste)(THIS_ LONG*,LONG*,PAVISTREAM,LONG,LONG) PURE; STDMETHOD(Clone)(THIS_ PAVISTREAM*) PURE; STDMETHOD(SetInfo)(THIS_ LPAVISTREAMINFOW,LONG) PURE; }; typedef IAVIEditStream *PAVIEDITSTREAM; #undef INTERFACE #define INTERFACE IAVIFile DECLARE_INTERFACE_(IAVIFile, IUnknown) { STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; STDMETHOD(Info)(THIS_ AVIFILEINFOW*,LONG) PURE; STDMETHOD(GetStream)(THIS_ PAVISTREAM*,DWORD,LONG) PURE; STDMETHOD(CreateStream)(THIS_ PAVISTREAM*,AVISTREAMINFOW*) PURE; STDMETHOD(WriteData)(THIS_ DWORD,LPVOID,LONG) PURE; STDMETHOD(ReadData)(THIS_ DWORD,LPVOID,LONG*) PURE; STDMETHOD(EndRecord)(THIS) PURE; STDMETHOD(DeleteStream)(THIS_ DWORD,LONG) PURE; }; typedef IAVIFile *PAVIFILE; #undef INTERFACE #define INTERFACE IGetFrame DECLARE_INTERFACE_(IGetFrame, IUnknown) { STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; STDMETHOD_(LPVOID,GetFrame)(THIS_ LONG) PURE; STDMETHOD(Begin)(THIS_ LONG,LONG,LONG) PURE; STDMETHOD(End)(THIS) PURE; STDMETHOD(SetFormat)(THIS_ LPBITMAPINFOHEADER,LPVOID,INT,INT,INT,INT) PURE; }; typedef IGetFrame *PGETFRAME; #endif /* !defined (__OBJC__) */ DWORD VFWAPI VideoForWindowsVersion(VOID); LONG VFWAPI InitVFW(VOID); LONG VFWAPI TermVFW(VOID); DWORD VFWAPIV ICCompress(HIC,DWORD,LPBITMAPINFOHEADER,LPVOID,LPBITMAPINFOHEADER,LPVOID,LPDWORD,LPDWORD,LONG,DWORD,DWORD,LPBITMAPINFOHEADER,LPVOID); DWORD VFWAPIV ICDecompress(HIC,DWORD,LPBITMAPINFOHEADER,LPVOID,LPBITMAPINFOHEADER,LPVOID); LRESULT VFWAPI ICSendMessage(HIC,UINT,DWORD,DWORD); HANDLE VFWAPI ICImageCompress(HIC,UINT,LPBITMAPINFO,LPVOID,LPBITMAPINFO,LONG,LONG*); HANDLE VFWAPI ICImageDecompress(HIC,UINT,LPBITMAPINFO,LPVOID,LPBITMAPINFO); BOOL VFWAPI ICInfo(DWORD,DWORD,ICINFO*); BOOL VFWAPI ICInstall(DWORD,DWORD,LPARAM,LPSTR,UINT); BOOL VFWAPI ICRemove(DWORD,DWORD,UINT); LRESULT VFWAPI ICGetInfo(HIC,ICINFO*,DWORD); HIC VFWAPI ICOpen(DWORD,DWORD,UINT); HIC VFWAPI ICOpenFunction(DWORD,DWORD,UINT,FARPROC); LRESULT VFWAPI ICClose(HIC hic); HIC VFWAPI ICLocate(DWORD,DWORD,LPBITMAPINFOHEADER,LPBITMAPINFOHEADER,WORD); HIC VFWAPI ICGetDisplayFormat(HIC,LPBITMAPINFOHEADER,LPBITMAPINFOHEADER,INT,INT,INT); DWORD VFWAPIV ICDrawBegin(HIC,DWORD,HPALETTE,HWND,HDC,INT,INT,INT,INT,LPBITMAPINFOHEADER,INT,INT,INT,INT,DWORD,DWORD); DWORD VFWAPIV ICDraw(HIC,DWORD,LPVOID,LPVOID,DWORD,LONG); BOOL VFWAPI ICCompressorChoose(HWND,UINT,LPVOID,LPVOID,PCOMPVARS,LPSTR); BOOL VFWAPI ICSeqCompressFrameStart(PCOMPVARS,LPBITMAPINFO); void VFWAPI ICSeqCompressFrameEnd(PCOMPVARS); LPVOID VFWAPI ICSeqCompressFrame(PCOMPVARS,UINT,LPVOID,BOOL*,LONG*); void VFWAPI ICCompressorFree(PCOMPVARS); #if !defined (__OBJC__) ULONG WINAPI AVIStreamAddRef(PAVISTREAM); ULONG WINAPI AVIStreamRelease(PAVISTREAM); HRESULT WINAPI AVIStreamCreate(PAVISTREAM*,LONG,LONG,CLSID*); HRESULT WINAPI AVIStreamInfoA(PAVISTREAM,AVISTREAMINFOA*,LONG); HRESULT WINAPI AVIStreamInfoW(PAVISTREAM,AVISTREAMINFOW*,LONG); HRESULT WINAPI AVIStreamFindSample(PAVISTREAM,LONG,DWORD); HRESULT WINAPI AVIStreamReadFormat(PAVISTREAM,LONG,LPVOID,LONG*); HRESULT WINAPI AVIStreamSetFormat(PAVISTREAM,LONG,LPVOID,LONG); HRESULT WINAPI AVIStreamRead(PAVISTREAM,LONG,LONG,LPVOID,LONG,LONG*,LONG*); HRESULT WINAPI AVIStreamWrite(PAVISTREAM,LONG,LONG,LPVOID,LONG,DWORD,LONG*,LONG*); HRESULT WINAPI AVIStreamReadData(PAVISTREAM,DWORD,LPVOID,LONG*); HRESULT WINAPI AVIStreamWriteData(PAVISTREAM,DWORD,LPVOID,LONG); PGETFRAME WINAPI AVIStreamGetFrameOpen(PAVISTREAM,LPBITMAPINFOHEADER); LPVOID WINAPI AVIStreamGetFrame(PGETFRAME,LONG); HRESULT WINAPI AVIStreamGetFrameClose(PGETFRAME); HRESULT WINAPI AVIMakeCompressedStream(PAVISTREAM*,PAVISTREAM,AVICOMPRESSOPTIONS*,CLSID*); HRESULT WINAPI AVIMakeFileFromStreams(PAVIFILE*,INT,PAVISTREAM*); HRESULT WINAPI AVIStreamOpenFromFileA(PAVISTREAM*,LPCSTR,DWORD,LONG,UINT,CLSID*); HRESULT WINAPI AVIStreamOpenFromFileW(PAVISTREAM*,LPCWSTR,DWORD,LONG,UINT,CLSID*); HRESULT WINAPI AVIBuildFilterA(LPSTR,LONG,BOOL); HRESULT WINAPI AVIBuildFilterW(LPWSTR,LONG,BOOL); BOOL WINAPI AVISaveOptions(HWND,UINT,INT,PAVISTREAM*,LPAVICOMPRESSOPTIONS*); HRESULT WINAPI AVISaveOptionsFree(INT,LPAVICOMPRESSOPTIONS*); HRESULT WINAPI AVISaveVA(LPCSTR,CLSID*,AVISAVECALLBACK,INT,PAVISTREAM*,LPAVICOMPRESSOPTIONS*); HRESULT WINAPI AVISaveVW(LPCWSTR,CLSID*,AVISAVECALLBACK,INT,PAVISTREAM*,LPAVICOMPRESSOPTIONS*); LONG WINAPI AVIStreamStart(PAVISTREAM); LONG WINAPI AVIStreamLength(PAVISTREAM); LONG WINAPI AVIStreamSampleToTime(PAVISTREAM,LONG); LONG WINAPI AVIStreamTimeToSample(PAVISTREAM,LONG); HRESULT WINAPI CreateEditableStream(PAVISTREAM*,PAVISTREAM); HRESULT WINAPI EditStreamClone(PAVISTREAM,PAVISTREAM*); HRESULT WINAPI EditStreamCopy(PAVISTREAM,LONG*,LONG*,PAVISTREAM*); HRESULT WINAPI EditStreamCut(PAVISTREAM,LONG*,LONG*,PAVISTREAM*); HRESULT WINAPI EditStreamPaste(PAVISTREAM,LONG*,LONG*,PAVISTREAM,LONG,LONG); HRESULT WINAPI EditStreamSetInfoA(PAVISTREAM,LPAVISTREAMINFOA,LONG); HRESULT WINAPI EditStreamSetInfoW(PAVISTREAM,LPAVISTREAMINFOW,LONG); HRESULT WINAPI EditStreamSetNameA(PAVISTREAM,LPCSTR); HRESULT WINAPI EditStreamSetNameW(PAVISTREAM,LPCWSTR); HRESULT WINAPI CreateEditableStream(PAVISTREAM*,PAVISTREAM); HRESULT WINAPI EditStreamClone(PAVISTREAM,PAVISTREAM*); HRESULT WINAPI EditStreamCopy(PAVISTREAM,LONG*,LONG*,PAVISTREAM*); HRESULT WINAPI EditStreamCut(PAVISTREAM,LONG*,LONG*,PAVISTREAM*); HRESULT WINAPI EditStreamPaste(PAVISTREAM,LONG*,LONG*,PAVISTREAM,LONG,LONG); HRESULT WINAPI EditStreamSetInfoA(PAVISTREAM,LPAVISTREAMINFOA,LONG); HRESULT WINAPI EditStreamSetInfoW(PAVISTREAM,LPAVISTREAMINFOW,LONG); HRESULT WINAPI EditStreamSetNameA(PAVISTREAM,LPCSTR); HRESULT WINAPI EditStreamSetNameW(PAVISTREAM,LPCWSTR); VOID WINAPI AVIFileInit(void); VOID WINAPI AVIFileExit(void); HRESULT WINAPI AVIFileOpenA(PAVIFILE*,LPCSTR,UINT,LPCLSID); HRESULT WINAPI AVIFileOpenW(PAVIFILE*,LPCWSTR,UINT,LPCLSID); ULONG WINAPI AVIFileAddRef(PAVIFILE); ULONG WINAPI AVIFileRelease(PAVIFILE); HRESULT WINAPI AVIFileInfoA(PAVIFILE,PAVIFILEINFOA,LONG); HRESULT WINAPI AVIFileInfoW(PAVIFILE,PAVIFILEINFOW,LONG); HRESULT WINAPI AVIFileGetStream(PAVIFILE,PAVISTREAM*,DWORD,LONG); HRESULT WINAPI AVIFileCreateStreamA(PAVIFILE,PAVISTREAM*,AVISTREAMINFOA*); HRESULT WINAPI AVIFileCreateStreamW(PAVIFILE,PAVISTREAM*,AVISTREAMINFOW*); HRESULT WINAPI AVIFileWriteData(PAVIFILE,DWORD,LPVOID,LONG); HRESULT WINAPI AVIFileReadData(PAVIFILE,DWORD,LPVOID,LPLONG); HRESULT WINAPI AVIFileEndRecord(PAVIFILE); HRESULT WINAPI AVIClearClipboard(VOID); HRESULT WINAPI AVIGetFromClipboard(PAVIFILE*); HRESULT WINAPI AVIPutFileOnClipboard(PAVIFILE); #endif /* __OBJC__ */ #ifdef OFN_READONLY BOOL WINAPI GetOpenFileNamePreviewA(LPOPENFILENAMEA); BOOL WINAPI GetOpenFileNamePreviewW(LPOPENFILENAMEW); BOOL WINAPI GetSaveFileNamePreviewA(LPOPENFILENAMEA); BOOL WINAPI GetSaveFileNamePreviewW(LPOPENFILENAMEW); #endif HWND VFWAPIV MCIWndCreateA(HWND,HINSTANCE,DWORD,LPCSTR); HWND VFWAPIV MCIWndCreateW(HWND,HINSTANCE,DWORD,LPCWSTR); HDRAWDIB VFWAPI DrawDibOpen(VOID); UINT VFWAPI DrawDibRealize(HDRAWDIB,HDC,BOOL); BOOL VFWAPI DrawDibBegin(HDRAWDIB,HDC,INT,INT,LPBITMAPINFOHEADER,INT,INT,UINT); BOOL VFWAPI DrawDibDraw(HDRAWDIB,HDC,INT,INT,INT,INT,LPBITMAPINFOHEADER,LPVOID,INT,INT,INT,INT,UINT); BOOL VFWAPI DrawDibSetPalette(HDRAWDIB,HPALETTE); HPALETTE VFWAPI DrawDibGetPalette(HDRAWDIB); BOOL VFWAPI DrawDibChangePalette(HDRAWDIB,int,int,LPPALETTEENTRY); LPVOID VFWAPI DrawDibGetBuffer(HDRAWDIB,LPBITMAPINFOHEADER,DWORD,DWORD); BOOL VFWAPI DrawDibStart(HDRAWDIB,DWORD); BOOL VFWAPI DrawDibStop(HDRAWDIB); BOOL VFWAPI DrawDibEnd(HDRAWDIB); BOOL VFWAPI DrawDibClose(HDRAWDIB); DWORD VFWAPI DrawDibProfileDisplay(LPBITMAPINFOHEADER); #define ICCompressGetFormat(hic,lpbiInput,lpbiOutput) ICSendMessage(hic,ICM_COMPRESS_GET_FORMAT,(DWORD)(lpbiInput),(DWORD)(lpbiOutput)) #define ICCompressGetFormatSize(hic,lpbi) ICCompressGetFormat(hic,lpbi,NULL) #define ICCompressBegin(hic,lpbiInput,lpbiOutput) ICSendMessage(hic,ICM_COMPRESS_BEGIN,(DWORD)(lpbiInput),(DWORD)(lpbiOutput)) #define ICCompressGetSize(hic,lpbiInput,lpbiOutput) ICSendMessage(hic,ICM_COMPRESS_GET_SIZE,(DWORD)(lpbiInput),(DWORD)(lpbiOutput)) #define ICCompressQuery(hic,lpbiInput,lpbiOutput) ICSendMessage(hic,ICM_COMPRESS_QUERY,(DWORD)(lpbiInput),(DWORD)(lpbiOutput)) #define ICCompressEnd(hic) ICSendMessage(hic,ICM_COMPRESS_END,0,0) #define ICQueryAbout(hic) (ICSendMessage(hic,ICM_ABOUT,(DWORD)-1,ICMF_ABOUT_QUERY)==ICERR_OK) #define ICAbout(hic,hwnd) ICSendMessage(hic,ICM_ABOUT,(DWORD)(hwnd),0) #define ICQueryConfigure(hic) (ICSendMessage(hic,ICM_CONFIGURE,(DWORD)-1,ICMF_CONFIGURE_QUERY)==ICERR_OK) #define ICConfigure(hic,hwnd) ICSendMessage(hic,ICM_CONFIGURE,(DWORD)(hwnd),0) #define ICDecompressBegin(hic,lpbiInput,lpbiOutput) ICSendMessage(hic,ICM_DECOMPRESS_BEGIN,(DWORD)(lpbiInput),(DWORD)(lpbiOutput)) #define ICDecompressQuery(hic,lpbiInput,lpbiOutput) ICSendMessage(hic,ICM_DECOMPRESS_QUERY,(DWORD)(lpbiInput),(DWORD)(lpbiOutput)) #define ICDecompressGetFormat(hic,lpbiInput,lpbiOutput) (LONG)ICSendMessage(hic,ICM_DECOMPRESS_GET_FORMAT,(DWORD)(lpbiInput),(DWORD)(lpbiOutput)) #define ICDecompressGetFormatSize(hic,lpbi) ICDecompressGetFormat(hic, lpbi, NULL) #define ICDecompressGetPalette(hic,lpbiInput,lpbiOutput) ICSendMessage(hic,ICM_DECOMPRESS_GET_PALETTE,(DWORD)(lpbiInput),(DWORD)(lpbiOutput)) #define ICDecompressSetPalette(hic,lpbiPalette) ICSendMessage(hic,ICM_DECOMPRESS_SET_PALETTE,(DWORD)(lpbiPalette),0) #define ICDecompressEnd(hic) ICSendMessage(hic,ICM_DECOMPRESS_END,0,0) #define ICDecompressExEnd(hic) ICSendMessage(hic,ICM_DECOMPRESSEX_END,0,0) #define ICDecompressOpen(fccType,fccHandler,lpbiIn,lpbiOut) ICLocate(fccType,fccHandler,lpbiIn,lpbiOut,ICMODE_DECOMPRESS) #define ICDrawOpen(fccType,fccHandler,lpbiIn) ICLocate(fccType,fccHandler,lpbiIn,NULL,ICMODE_DRAW) #define ICGetState(hic,pv,cb) ICSendMessage(hic,ICM_GETSTATE,(DWORD)(pv),(DWORD)(cb)) #define ICSetState(hic,pv,cb) ICSendMessage(hic,ICM_SETSTATE,(DWORD)(pv),(DWORD)(cb)) #define ICGetStateSize(hic) ICGetState(hic,NULL,0) #define ICDrawWindow(hic,prc) ICSendMessage(hic,ICM_DRAW_WINDOW,(DWORD)(prc),sizeof(RECT)) #define ICDrawQuery(hic,lpbiInput) ICSendMessage(hic,ICM_DRAW_QUERY,(DWORD)(lpbiInput),0) #define ICDrawChangePalette(hic,lpbiInput) ICSendMessage(hic,ICM_DRAW_CHANGEPALETTE,(DWORD)(lpbiInput),0) #define ICGetBuffersWanted(hic,lpdwBuffers) ICSendMessage(hic,ICM_GETBUFFERSWANTED,(DWORD)(lpdwBuffers),0) #define ICDrawEnd(hic) ICSendMessage(hic,ICM_DRAW_END,0,0) #define ICDrawStart(hic) ICSendMessage(hic,ICM_DRAW_START,0,0) #define ICDrawStartPlay(hic,lFrom,lTo) ICSendMessage(hic,ICM_DRAW_START_PLAY,(DWORD)(lFrom),(DWORD)(lTo)) #define ICDrawStop(hic) ICSendMessage(hic,ICM_DRAW_STOP,0,0) #define ICDrawStopPlay(hic) ICSendMessage(hic,ICM_DRAW_STOP_PLAY,0,0) #define ICDrawGetTime(hic,lplTime) ICSendMessage(hic,ICM_DRAW_GETTIME,(DWORD)(lplTime),0) #define ICDrawSetTime(hic,lTime) ICSendMessage(hic,ICM_DRAW_SETTIME,(DWORD)lTime,0) #define ICDrawRealize(hic,hdc,fBackground) ICSendMessage(hic,ICM_DRAW_REALIZE,(DWORD)(hdc),(DWORD)(fBackground)) #define ICDrawFlush(hic) ICSendMessage(hic,ICM_DRAW_FLUSH,0,0) #define ICDrawRenderBuffer(hic) ICSendMessage(hic,ICM_DRAW_RENDERBUFFER,0,0) #define AVIFileClose(pavi) AVIFileRelease(pavi) #define AVIStreamClose(pavi) AVIStreamRelease(pavi); #define AVIStreamEnd(pavi) (AVIStreamStart(pavi)+AVIStreamLength(pavi)) #define AVIStreamEndTime(pavi) AVIStreamSampleToTime(pavi,AVIStreamEnd(pavi)) #define AVIStreamFormatSize(pavi,lPos,plSize) AVIStreamReadFormat(pavi,lPos,NULL,plSize) #define AVIStreamLengthTime(pavi) AVIStreamSampleToTime(pavi,AVIStreamLength(pavi)) #define AVIStreamSampleSize(pavi,pos,psize) AVIStreamRead(pavi,pos,1,NULL,0,psize,NULL) #define AVIStreamSampleToSample(pavi1,pavi2,samp2) AVIStreamTimeToSample(pavi1,AVIStreamSampleToTime(pavi2,samp2)) #define AVIStreamStartTime(pavi) AVIStreamSampleToTime(pavi,AVIStreamStart(pavi)) #define AVIStreamNextSample(pavi,pos) AVIStreamFindSample(pavi,pos+1,FIND_NEXT|FIND_ANY) #define AVIStreamPrevSample(pavi,pos) AVIStreamFindSample(pavi,pos-1,FIND_PREV|FIND_ANY) #define AVIStreamNearestSample(pavi, pos) AVIStreamFindSample(pavi,pos,FIND_PREV|FIND_ANY) #define AVStreamNextKeyFrame(pavi,pos) AVIStreamFindSample(pavi,pos+1,FIND_NEXT|FIND_KEY) #define AVStreamPrevKeyFrame(pavi,pos) AVIStreamFindSample(pavi,pos-1,FIND_NEXT|FIND_KEY) #define AVIStreamNearestKeyFrame(pavi,pos) AVIStreamFindSample(pavi,pos,FIND_PREV|FIND_KEY) #define AVIStreamIsKeyFrame(pavi, pos) (AVIStreamNearestKeyFrame(pavi,pos) == pos) #ifdef __cplusplus #define MCIWndSM ::SendMessage #else #define MCIWndSM SendMessage #endif #define MCIWndCanPlay(hWnd) (BOOL)MCIWndSM(hWnd,MCIWNDM_CAN_PLAY,0,0) #define MCIWndCanRecord(hWnd) (BOOL)MCIWndSM(hWnd,MCIWNDM_CAN_RECORD,0,0) #define MCIWndCanSave(hWnd) (BOOL)MCIWndSM(hWnd,MCIWNDM_CAN_SAVE,0,0) #define MCIWndCanWindow(hWnd) (BOOL)MCIWndSM(hWnd,MCIWNDM_CAN_WINDOW,0,0) #define MCIWndCanEject(hWnd) (BOOL)MCIWndSM(hWnd,MCIWNDM_CAN_EJECT,0,0) #define MCIWndCanConfig(hWnd) (BOOL)MCIWndSM(hWnd,MCIWNDM_CAN_CONFIG,0,0) #define MCIWndPaletteKick(hWnd) (BOOL)MCIWndSM(hWnd,MCIWNDM_PALETTEKICK,0,0) #define MCIWndSave(hWnd,szFile) (LONG)MCIWndSM(hWnd,MCI_SAVE,0,(LPARAM)(LPVOID)(szFile)) #define MCIWndSaveDialog(hWnd) MCIWndSave(hWnd,-1) #define MCIWndNew(hWnd,lp) (LONG)MCIWndSM(hWnd,MCIWNDM_NEW,0,(LPARAM)(LPVOID)(lp)) #define MCIWndRecord(hWnd) (LONG)MCIWndSM(hWnd,MCI_RECORD,0,0) #define MCIWndOpen(hWnd,sz,f) (LONG)MCIWndSM(hWnd,MCIWNDM_OPEN,(WPARAM)(UINT)(f),(LPARAM)(LPVOID)(sz)) #define MCIWndOpenDialog(hWnd) MCIWndOpen(hWnd,-1,0) #define MCIWndClose(hWnd) (LONG)MCIWndSM(hWnd,MCI_CLOSE,0,0) #define MCIWndPlay(hWnd) (LONG)MCIWndSM(hWnd,MCI_PLAY,0,0) #define MCIWndStop(hWnd) (LONG)MCIWndSM(hWnd,MCI_STOP,0,0) #define MCIWndPause(hWnd) (LONG)MCIWndSM(hWnd,MCI_PAUSE,0,0) #define MCIWndResume(hWnd) (LONG)MCIWndSM(hWnd,MCI_RESUME,0,0) #define MCIWndSeek(hWnd,lPos) (LONG)MCIWndSM(hWnd,MCI_SEEK,0,(LPARAM)(LONG)(lPos)) #define MCIWndEject(hWnd) (LONG)MCIWndSM(hWnd,MCIWNDM_EJECT,0,0) #define MCIWndHome(hWnd) MCIWndSeek(hWnd,MCIWND_START) #define MCIWndEnd(hWnd) MCIWndSeek(hWnd,MCIWND_END) #define MCIWndGetSource(hWnd,prc) (LONG)MCIWndSM(hWnd,MCIWNDM_GET_SOURCE,0,(LPARAM)(LPRECT)(prc)) #define MCIWndPutSource(hWnd,prc) (LONG)MCIWndSM(hWnd,MCIWNDM_PUT_SOURCE,0,(LPARAM)(LPRECT)(prc)) #define MCIWndGetDest(hWnd,prc) (LONG)MCIWndSM(hWnd,MCIWNDM_GET_DEST,0,(LPARAM)(LPRECT)(prc)) #define MCIWndPutDest(hWnd,prc) (LONG)MCIWndSM(hWnd,MCIWNDM_PUT_DEST,0,(LPARAM)(LPRECT)(prc)) #define MCIWndPlayReverse(hWnd) (LONG)MCIWndSM(hWnd,MCIWNDM_PLAYREVERSE,0,0) #define MCIWndPlayFrom(hWnd,lPos) (LONG)MCIWndSM(hWnd,MCIWNDM_PLAYFROM,0,(LPARAM)(LONG)(lPos)) #define MCIWndPlayTo(hWnd,lPos) (LONG)MCIWndSM(hWnd,MCIWNDM_PLAYTO, 0,(LPARAM)(LONG)(lPos)) #define MCIWndPlayFromTo(hWnd,lStart,lEnd) (MCIWndSeek(hWnd,lStart),MCIWndPlayTo(hWnd,lEnd)) #define MCIWndGetDeviceID(hWnd) (UINT)MCIWndSM(hWnd,MCIWNDM_GETDEVICEID,0,0) #define MCIWndGetAlias(hWnd) (UINT)MCIWndSM(hWnd,MCIWNDM_GETALIAS,0,0) #define MCIWndGetMode(hWnd,lp,len) (LONG)MCIWndSM(hWnd,MCIWNDM_GETMODE,(WPARAM)(UINT)(len),(LPARAM)(LPTSTR)(lp)) #define MCIWndGetPosition(hWnd) (LONG)MCIWndSM(hWnd,MCIWNDM_GETPOSITION,0,0) #define MCIWndGetPositionString(hWnd,lp,len) (LONG)MCIWndSM(hWnd,MCIWNDM_GETPOSITION,(WPARAM)(UINT)(len),(LPARAM)(LPTSTR)(lp)) #define MCIWndGetStart(hWnd) (LONG)MCIWndSM(hWnd,MCIWNDM_GETSTART,0,0) #define MCIWndGetLength(hWnd) (LONG)MCIWndSM(hWnd,MCIWNDM_GETLENGTH,0,0) #define MCIWndGetEnd(hWnd) (LONG)MCIWndSM(hWnd,MCIWNDM_GETEND,0,0) #define MCIWndStep(hWnd,n) (LONG)MCIWndSM(hWnd,MCI_STEP,0,(LPARAM)(long)(n)) #define MCIWndDestroy(hWnd) (VOID)MCIWndSM(hWnd,WM_CLOSE,0,0) #define MCIWndSetZoom(hWnd,iZoom) (VOID)MCIWndSM(hWnd,MCIWNDM_SETZOOM,0,(LPARAM)(UINT)(iZoom)) #define MCIWndGetZoom(hWnd) (UINT)MCIWndSM(hWnd,MCIWNDM_GETZOOM,0,0) #define MCIWndSetVolume(hWnd,iVol) (LONG)MCIWndSM(hWnd,MCIWNDM_SETVOLUME,0,(LPARAM)(UINT)(iVol)) #define MCIWndGetVolume(hWnd) (LONG)MCIWndSM(hWnd,MCIWNDM_GETVOLUME,0,0) #define MCIWndSetSpeed(hWnd,iSpeed) (LONG)MCIWndSM(hWnd,MCIWNDM_SETSPEED,0,(LPARAM)(UINT)(iSpeed)) #define MCIWndGetSpeed(hWnd) (LONG)MCIWndSM(hWnd,MCIWNDM_GETSPEED,0,0) #define MCIWndSetTimeFormat(hWnd,lp) (LONG)MCIWndSM(hWnd,MCIWNDM_SETTIMEFORMAT,0,(LPARAM)(LPTSTR)(lp)) #define MCIWndGetTimeFormat(hWnd,lp,len) (LONG)MCIWndSM(hWnd,MCIWNDM_GETTIMEFORMAT,(WPARAM)(UINT)(len),(LPARAM)(LPTSTR)(lp)) #define MCIWndValidateMedia(hWnd) (VOID)MCIWndSM(hWnd,MCIWNDM_VALIDATEMEDIA,0,0) #define MCIWndSetRepeat(hWnd,f) (void)MCIWndSM(hWnd,MCIWNDM_SETREPEAT,0,(LPARAM)(BOOL)(f)) #define MCIWndGetRepeat(hWnd) (BOOL)MCIWndSM(hWnd,MCIWNDM_GETREPEAT,0,0) #define MCIWndUseFrames(hWnd) MCIWndSetTimeFormat(hWnd,TEXT("frames")) #define MCIWndUseTime(hWnd) MCIWndSetTimeFormat(hWnd,TEXT("ms")) #define MCIWndSetActiveTimer(hWnd,active) (VOID)MCIWndSM(hWnd,MCIWNDM_SETACTIVETIMER,(WPARAM)(UINT)(active),0L) #define MCIWndSetInactiveTimer(hWnd,inactive) (VOID)MCIWndSM(hWnd,MCIWNDM_SETINACTIVETIMER,(WPARAM)(UINT)(inactive),0L) #define MCIWndSetTimers(hWnd,active,inactive) (VOID)MCIWndSM(hWnd,MCIWNDM_SETTIMERS,(WPARAM)(UINT)(active),(LPARAM)(UINT)(inactive)) #define MCIWndGetActiveTimer(hWnd) (UINT)MCIWndSM(hWnd,MCIWNDM_GETACTIVETIMER,0,0L); #define MCIWndGetInactiveTimer(hWnd) (UINT)MCIWndSM(hWnd,MCIWNDM_GETINACTIVETIMER,0,0L); #define MCIWndRealize(hWnd,fBkgnd) (LONG)MCIWndSM(hWnd,MCIWNDM_REALIZE,(WPARAM)(BOOL)(fBkgnd),0) #define MCIWndSendString(hWnd,sz) (LONG)MCIWndSM(hWnd,MCIWNDM_SENDSTRING,0,(LPARAM)(LPTSTR)(sz)) #define MCIWndReturnString(hWnd,lp,len) (LONG)MCIWndSM(hWnd,MCIWNDM_RETURNSTRING,(WPARAM)(UINT)(len),(LPARAM)(LPVOID)(lp)) #define MCIWndGetError(hWnd,lp,len) (LONG)MCIWndSM(hWnd,MCIWNDM_GETERROR,(WPARAM)(UINT)(len),(LPARAM)(LPVOID)(lp)) #define MCIWndGetPalette(hWnd) (HPALETTE)MCIWndSM(hWnd,MCIWNDM_GETPALETTE,0,0) #define MCIWndSetPalette(hWnd,hpal) (LONG)MCIWndSM(hWnd,MCIWNDM_SETPALETTE,(WPARAM)(HPALETTE)(hpal),0) #define MCIWndGetFileName(hWnd,lp,len) (LONG)MCIWndSM(hWnd,MCIWNDM_GETFILENAME,(WPARAM)(UINT)(len),(LPARAM)(LPVOID)(lp)) #define MCIWndGetDevice(hWnd,lp,len) (LONG)MCIWndSM(hWnd,MCIWNDM_GETDEVICE,(WPARAM)(UINT)(len),(LPARAM)(LPVOID)(lp)) #define MCIWndGetStyles(hWnd) (UINT)MCIWndSM(hWnd,MCIWNDM_GETSTYLES,0,0L) #define MCIWndChangeStyles(hWnd,mask,value) (LONG)MCIWndSM(hWnd,MCIWNDM_CHANGESTYLES,(WPARAM)(UINT)(mask),(LPARAM)(LONG)(value)) #define MCIWndOpenInterface(hWnd,pUnk) (LONG)MCIWndSM(hWnd,MCIWNDM_OPENINTERFACE,0,(LPARAM)(LPUNKNOWN)(pUnk)) #define MCIWndSetOwner(hWnd,hWndP) (LONG)MCIWndSM(hWnd,MCIWNDM_SETOWNER,(WPARAM)(hWndP),0) #define DrawDibUpdate(hdd,hdc,x,y) DrawDibDraw(hdd,hdc,x,y,0,0,NULL,NULL,0,0,0,0,DDF_UPDATE) static __inline DWORD ICGetDefaultQuality(HIC hic) { DWORD dwICValue; ICSendMessage(hic, ICM_GETDEFAULTQUALITY, (DWORD)(LPVOID)&dwICValue, sizeof(DWORD)); return dwICValue; } static __inline DWORD ICGetDefaultKeyFrameRate(HIC hic) { DWORD dwICValue; ICSendMessage(hic, ICM_GETDEFAULTKEYFRAMERATE, (DWORD)(LPVOID)&dwICValue, sizeof(DWORD)); return dwICValue; } static __inline LRESULT ICDrawSuggestFormat(HIC hic,LPBITMAPINFOHEADER lpbiIn,LPBITMAPINFOHEADER lpbiOut,INT dxSrc,INT dySrc,INT dxDst,INT dyDst,HIC hicDecomp) { ICDRAWSUGGEST ic; ic.lpbiIn = lpbiIn; ic.lpbiSuggest = lpbiOut; ic.dxSrc = dxSrc; ic.dySrc = dySrc; ic.dxDst = dxDst; ic.dyDst = dyDst; ic.hicDecompressor = hicDecomp; return ICSendMessage(hic,ICM_DRAW_SUGGESTFORMAT,(DWORD)&ic,sizeof(ic)); } static __inline LRESULT ICSetStatusProc(HIC hic,DWORD dwFlags,LRESULT lParam,LONG (CALLBACK *fpfnStatus)(LPARAM,UINT,LONG)) { ICSETSTATUSPROC ic; ic.dwFlags = dwFlags; ic.lParam = lParam; ic.Status = fpfnStatus; return ICSendMessage(hic,ICM_SET_STATUS_PROC,(DWORD)&ic,sizeof(ic)); } static __inline LRESULT ICDecompressEx(HIC hic,DWORD dwFlags,LPBITMAPINFOHEADER lpbiSrc,LPVOID lpSrc,INT xSrc,INT ySrc,INT dxSrc,INT dySrc,LPBITMAPINFOHEADER lpbiDst,LPVOID lpDst,INT xDst,INT yDst,INT dxDst,INT dyDst) { ICDECOMPRESSEX ic; ic.dwFlags = dwFlags; ic.lpbiSrc = lpbiSrc; ic.lpSrc = lpSrc; ic.xSrc = xSrc; ic.ySrc = ySrc; ic.dxSrc = dxSrc; ic.dySrc = dySrc; ic.lpbiDst = lpbiDst; ic.lpDst = lpDst; ic.xDst = xDst; ic.yDst = yDst; ic.dxDst = dxDst; ic.dyDst = dyDst; return ICSendMessage(hic,ICM_DECOMPRESSEX,(DWORD)&ic,sizeof(ic)); } static __inline LRESULT ICDecompressExBegin(HIC hic,DWORD dwFlags,LPBITMAPINFOHEADER lpbiSrc,LPVOID lpSrc,INT xSrc,INT ySrc,INT dxSrc,INT dySrc,LPBITMAPINFOHEADER lpbiDst,LPVOID lpDst,INT xDst,INT yDst,INT dxDst,INT dyDst) { ICDECOMPRESSEX ic; ic.dwFlags = dwFlags; ic.lpbiSrc = lpbiSrc; ic.lpSrc = lpSrc; ic.xSrc = xSrc; ic.ySrc = ySrc; ic.dxSrc = dxSrc; ic.dySrc = dySrc; ic.lpbiDst = lpbiDst; ic.lpDst = lpDst; ic.xDst = xDst; ic.yDst = yDst; ic.dxDst = dxDst; ic.dyDst = dyDst; return ICSendMessage(hic,ICM_DECOMPRESSEX_BEGIN,(DWORD)&ic,sizeof(ic)); } static __inline LRESULT ICDecompressExQuery(HIC hic,DWORD dwFlags,LPBITMAPINFOHEADER lpbiSrc,LPVOID lpSrc,INT xSrc,INT ySrc,INT dxSrc,INT dySrc,LPBITMAPINFOHEADER lpbiDst,LPVOID lpDst,INT xDst,INT yDst,INT dxDst,INT dyDst) { ICDECOMPRESSEX ic; ic.dwFlags = dwFlags; ic.lpbiSrc = lpbiSrc; ic.lpSrc = lpSrc; ic.xSrc = xSrc; ic.ySrc = ySrc; ic.dxSrc = dxSrc; ic.dySrc = dySrc; ic.lpbiDst = lpbiDst; ic.lpDst = lpDst; ic.xDst = xDst; ic.yDst = yDst; ic.dxDst = dxDst; ic.dyDst = dyDst; return ICSendMessage(hic,ICM_DECOMPRESSEX_QUERY,(DWORD)&ic,sizeof(ic)); } /* AVICAP32 exports */ HWND VFWAPI capCreateCaptureWindowA (LPCSTR,DWORD,int,int,int,int,HWND,int); HWND VFWAPI capCreateCaptureWindowW (LPCWSTR,DWORD,int,int,int,int,HWND,int); BOOL VFWAPI capGetDriverDescriptionA (UINT,LPSTR,int,LPSTR,int); BOOL VFWAPI capGetDriverDescriptionW (UINT,LPWSTR,int,LPWSTR,int); #ifdef UNICODE #define AVISTREAMINFO AVISTREAMINFOW #define LPAVISTREAMINFO LPAVISTREAMINFOW #define PAVISTREAMINFO PAVISTREAMINFOW #define AVIFILEINFO AVIFILEINFOW #define PAVIFILEINFO PAVIFILEINFOW #define LPAVIFILEINFO LPAVIFILEINFOW #define AVIStreamInfo AVIStreamInfoW #define AVIStreamOpenFromFile AVIStreamOpenFromFileW #define AVIBuildFilter AVIBuildFilterW #define AVISaveV AVISaveVW #define EditStreamSetInfo EditStreamSetInfoW #define EditStreamSetName EditStreamSetNameW #define AVIFileOpen AVIFileOpenW #define AVIFileInfo AVIFileInfoW #define AVIFileCreateStream AVIFileCreateStreamW #define GetOpenFileNamePreview GetOpenFileNamePreviewW #define GetSaveFileNamePreview GetSaveFileNamePreviewW #define MCIWndCreate MCIWndCreateW #define MCIWNDF_NOTIFYMEDIA MCIWNDF_NOTIFYMEDIAW #define MCIWNDM_SENDSTRING MCIWNDM_SENDSTRINGW #define MCIWNDM_GETPOSITION MCIWNDM_GETPOSITIONW #define MCIWNDM_GETMODE MCIWNDM_GETMODEW #define MCIWNDM_SETTIMEFORMAT MCIWNDM_SETTIMEFORMATW #define MCIWNDM_GETTIMEFORMAT MCIWNDM_GETTIMEFORMATW #define MCIWNDM_GETFILENAME MCIWNDM_GETFILENAMEW #define MCIWNDM_GETDEVICE MCIWNDM_GETDEVICEW #define MCIWNDM_GETERROR MCIWNDM_GETERRORW #define MCIWNDM_NEW MCIWNDM_NEWW #define MCIWNDM_RETURNSTRING MCIWNDM_RETURNSTRINGW #define MCIWNDM_OPEN MCIWNDM_OPENW #define capCreateCaptureWindow capCreateCaptureWindowW #define capGetDriverDescription capGetDriverDescriptionW #else #define AVISTREAMINFO AVISTREAMINFOA #define LPAVISTREAMINFO LPAVISTREAMINFOA #define PAVISTREAMINFO PAVISTREAMINFOA #define AVIFILEINFO AVIFILEINFOA #define PAVIFILEINFO PAVIFILEINFOA #define LPAVIFILEINFO LPAVIFILEINFOA #define AVIStreamInfo AVIStreamInfoA #define AVIStreamOpenFromFile AVIStreamOpenFromFileA #define AVIBuildFilter AVIBuildFilterA #define AVISaveV AVISaveVA #define EditStreamSetInfo EditStreamSetInfoA #define EditStreamSetName EditStreamSetNameA #define AVIFileOpen AVIFileOpenA #define AVIFileInfo AVIFileInfoA #define AVIFileCreateStream AVIFileCreateStreamA #define GetOpenFileNamePreview GetOpenFileNamePreviewA #define GetSaveFileNamePreview GetSaveFileNamePreviewA #define MCIWndCreate MCIWndCreateA #define MCIWNDF_NOTIFYMEDIA MCIWNDF_NOTIFYMEDIAA #define MCIWNDM_SENDSTRING MCIWNDM_SENDSTRINGA #define MCIWNDM_GETPOSITION MCIWNDM_GETPOSITIONA #define MCIWNDM_GETMODE MCIWNDM_GETMODEA #define MCIWNDM_SETTIMEFORMAT MCIWNDM_SETTIMEFORMATA #define MCIWNDM_GETTIMEFORMAT MCIWNDM_GETTIMEFORMATA #define MCIWNDM_GETFILENAME MCIWNDM_GETFILENAMEA #define MCIWNDM_GETDEVICE MCIWNDM_GETDEVICEA #define MCIWNDM_GETERROR MCIWNDM_GETERRORA #define MCIWNDM_NEW MCIWNDM_NEWA #define MCIWNDM_RETURNSTRING MCIWNDM_RETURNSTRINGA #define MCIWNDM_OPEN MCIWNDM_OPENA #define capCreateCaptureWindow capCreateCaptureWindowA #define capGetDriverDescription capGetDriverDescriptionA #endif #endif /* RC_INVOKED */ #ifdef __cplusplus } #endif #include #endif /* _VFW_H */ ================================================ FILE: Include/amstream.h ================================================ /* this ALWAYS GENERATED file contains the definitions for the interfaces */ /* File created by MIDL compiler version 6.00.0366 */ /* Compiler settings for amstream.idl: Oicf, W1, Zp8, env=Win32 (32b run) protocol : dce , ms_ext, c_ext, robust error checks: allocation ref bounds_check enum stub_data VC __declspec() decoration level: __declspec(uuid()), __declspec(selectany), __declspec(novtable) DECLSPEC_UUID(), MIDL_INTERFACE() */ //@@MIDL_FILE_HEADING( ) #pragma warning( disable: 4049 ) /* more than 64k source lines */ /* verify that the version is high enough to compile this file*/ #ifndef __REQUIRED_RPCNDR_H_VERSION__ #define __REQUIRED_RPCNDR_H_VERSION__ 475 #endif #include "rpc.h" #include "rpcndr.h" #ifndef __RPCNDR_H_VERSION__ #error this stub requires an updated version of #endif // __RPCNDR_H_VERSION__ #ifndef COM_NO_WINDOWS_H #include "windows.h" #include "ole2.h" #endif /*COM_NO_WINDOWS_H*/ #ifndef __amstream_h__ #define __amstream_h__ #if defined(_MSC_VER) && (_MSC_VER >= 1020) #pragma once #endif /* Forward Declarations */ #ifndef __IDirectShowStream_FWD_DEFINED__ #define __IDirectShowStream_FWD_DEFINED__ typedef interface IDirectShowStream IDirectShowStream; #endif /* __IDirectShowStream_FWD_DEFINED__ */ #ifndef __IAMMultiMediaStream_FWD_DEFINED__ #define __IAMMultiMediaStream_FWD_DEFINED__ typedef interface IAMMultiMediaStream IAMMultiMediaStream; #endif /* __IAMMultiMediaStream_FWD_DEFINED__ */ #ifndef __IAMMediaStream_FWD_DEFINED__ #define __IAMMediaStream_FWD_DEFINED__ typedef interface IAMMediaStream IAMMediaStream; #endif /* __IAMMediaStream_FWD_DEFINED__ */ #ifndef __IMediaStreamFilter_FWD_DEFINED__ #define __IMediaStreamFilter_FWD_DEFINED__ typedef interface IMediaStreamFilter IMediaStreamFilter; #endif /* __IMediaStreamFilter_FWD_DEFINED__ */ #ifndef __IDirectDrawMediaSampleAllocator_FWD_DEFINED__ #define __IDirectDrawMediaSampleAllocator_FWD_DEFINED__ typedef interface IDirectDrawMediaSampleAllocator IDirectDrawMediaSampleAllocator; #endif /* __IDirectDrawMediaSampleAllocator_FWD_DEFINED__ */ #ifndef __IDirectDrawMediaSample_FWD_DEFINED__ #define __IDirectDrawMediaSample_FWD_DEFINED__ typedef interface IDirectDrawMediaSample IDirectDrawMediaSample; #endif /* __IDirectDrawMediaSample_FWD_DEFINED__ */ #ifndef __IAMMediaTypeStream_FWD_DEFINED__ #define __IAMMediaTypeStream_FWD_DEFINED__ typedef interface IAMMediaTypeStream IAMMediaTypeStream; #endif /* __IAMMediaTypeStream_FWD_DEFINED__ */ #ifndef __IAMMediaTypeSample_FWD_DEFINED__ #define __IAMMediaTypeSample_FWD_DEFINED__ typedef interface IAMMediaTypeSample IAMMediaTypeSample; #endif /* __IAMMediaTypeSample_FWD_DEFINED__ */ #ifndef __AMMultiMediaStream_FWD_DEFINED__ #define __AMMultiMediaStream_FWD_DEFINED__ #ifdef __cplusplus typedef class AMMultiMediaStream AMMultiMediaStream; #else typedef struct AMMultiMediaStream AMMultiMediaStream; #endif /* __cplusplus */ #endif /* __AMMultiMediaStream_FWD_DEFINED__ */ /* header files for imported files */ #include "unknwn.h" #include "mmstream.h" #include "strmif.h" #ifdef __cplusplus extern "C"{ #endif void * __RPC_USER MIDL_user_allocate(size_t); void __RPC_USER MIDL_user_free( void * ); /* interface __MIDL_itf_amstream_0000 */ /* [local] */ #include #include #include #include #include enum __MIDL___MIDL_itf_amstream_0000_0001 { AMMSF_NOGRAPHTHREAD = 0x1 } ; enum __MIDL___MIDL_itf_amstream_0000_0002 { AMMSF_ADDDEFAULTRENDERER = 0x1, AMMSF_CREATEPEER = 0x2, AMMSF_STOPIFNOSAMPLES = 0x4, AMMSF_NOSTALL = 0x8 } ; enum __MIDL___MIDL_itf_amstream_0000_0003 { AMMSF_RENDERTYPEMASK = 0x3, AMMSF_RENDERTOEXISTING = 0, AMMSF_RENDERALLSTREAMS = 0x1, AMMSF_NORENDER = 0x2, AMMSF_NOCLOCK = 0x4, AMMSF_RUN = 0x8 } ; typedef /* [public][public][public][public][public][v1_enum] */ enum __MIDL___MIDL_itf_amstream_0000_0004 { Disabled = 0, ReadData = 1, RenderData = 2 } OUTPUT_STATE; extern RPC_IF_HANDLE __MIDL_itf_amstream_0000_v0_0_c_ifspec; extern RPC_IF_HANDLE __MIDL_itf_amstream_0000_v0_0_s_ifspec; #ifndef __IDirectShowStream_INTERFACE_DEFINED__ #define __IDirectShowStream_INTERFACE_DEFINED__ /* interface IDirectShowStream */ /* [unique][helpstring][dual][uuid][object] */ EXTERN_C const IID IID_IDirectShowStream; #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("7DB01C96-C0C3-11d0-8FF1-00C04FD9189D") IDirectShowStream : public IDispatch { public: virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_FileName( /* [retval][out] */ BSTR *pVal) = 0; virtual /* [helpstring][id][propput] */ HRESULT STDMETHODCALLTYPE put_FileName( /* [in] */ BSTR newVal) = 0; virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Video( /* [retval][out] */ OUTPUT_STATE *pVal) = 0; virtual /* [helpstring][id][propput] */ HRESULT STDMETHODCALLTYPE put_Video( /* [in] */ OUTPUT_STATE newVal) = 0; virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Audio( /* [retval][out] */ OUTPUT_STATE *pVal) = 0; virtual /* [helpstring][id][propput] */ HRESULT STDMETHODCALLTYPE put_Audio( /* [in] */ OUTPUT_STATE newVal) = 0; }; #else /* C style interface */ typedef struct IDirectShowStreamVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE *QueryInterface )( IDirectShowStream * This, /* [in] */ REFIID riid, /* [iid_is][out] */ void **ppvObject); ULONG ( STDMETHODCALLTYPE *AddRef )( IDirectShowStream * This); ULONG ( STDMETHODCALLTYPE *Release )( IDirectShowStream * This); HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )( IDirectShowStream * This, /* [out] */ UINT *pctinfo); HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )( IDirectShowStream * This, /* [in] */ UINT iTInfo, /* [in] */ LCID lcid, /* [out] */ ITypeInfo **ppTInfo); HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )( IDirectShowStream * This, /* [in] */ REFIID riid, /* [size_is][in] */ LPOLESTR *rgszNames, /* [in] */ UINT cNames, /* [in] */ LCID lcid, /* [size_is][out] */ DISPID *rgDispId); /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )( IDirectShowStream * This, /* [in] */ DISPID dispIdMember, /* [in] */ REFIID riid, /* [in] */ LCID lcid, /* [in] */ WORD wFlags, /* [out][in] */ DISPPARAMS *pDispParams, /* [out] */ VARIANT *pVarResult, /* [out] */ EXCEPINFO *pExcepInfo, /* [out] */ UINT *puArgErr); /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_FileName )( IDirectShowStream * This, /* [retval][out] */ BSTR *pVal); /* [helpstring][id][propput] */ HRESULT ( STDMETHODCALLTYPE *put_FileName )( IDirectShowStream * This, /* [in] */ BSTR newVal); /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_Video )( IDirectShowStream * This, /* [retval][out] */ OUTPUT_STATE *pVal); /* [helpstring][id][propput] */ HRESULT ( STDMETHODCALLTYPE *put_Video )( IDirectShowStream * This, /* [in] */ OUTPUT_STATE newVal); /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_Audio )( IDirectShowStream * This, /* [retval][out] */ OUTPUT_STATE *pVal); /* [helpstring][id][propput] */ HRESULT ( STDMETHODCALLTYPE *put_Audio )( IDirectShowStream * This, /* [in] */ OUTPUT_STATE newVal); END_INTERFACE } IDirectShowStreamVtbl; interface IDirectShowStream { CONST_VTBL struct IDirectShowStreamVtbl *lpVtbl; }; #ifdef COBJMACROS #define IDirectShowStream_QueryInterface(This,riid,ppvObject) \ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) #define IDirectShowStream_AddRef(This) \ (This)->lpVtbl -> AddRef(This) #define IDirectShowStream_Release(This) \ (This)->lpVtbl -> Release(This) #define IDirectShowStream_GetTypeInfoCount(This,pctinfo) \ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) #define IDirectShowStream_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) #define IDirectShowStream_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) #define IDirectShowStream_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) #define IDirectShowStream_get_FileName(This,pVal) \ (This)->lpVtbl -> get_FileName(This,pVal) #define IDirectShowStream_put_FileName(This,newVal) \ (This)->lpVtbl -> put_FileName(This,newVal) #define IDirectShowStream_get_Video(This,pVal) \ (This)->lpVtbl -> get_Video(This,pVal) #define IDirectShowStream_put_Video(This,newVal) \ (This)->lpVtbl -> put_Video(This,newVal) #define IDirectShowStream_get_Audio(This,pVal) \ (This)->lpVtbl -> get_Audio(This,pVal) #define IDirectShowStream_put_Audio(This,newVal) \ (This)->lpVtbl -> put_Audio(This,newVal) #endif /* COBJMACROS */ #endif /* C style interface */ /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IDirectShowStream_get_FileName_Proxy( IDirectShowStream * This, /* [retval][out] */ BSTR *pVal); void __RPC_STUB IDirectShowStream_get_FileName_Stub( IRpcStubBuffer *This, IRpcChannelBuffer *_pRpcChannelBuffer, PRPC_MESSAGE _pRpcMessage, DWORD *_pdwStubPhase); /* [helpstring][id][propput] */ HRESULT STDMETHODCALLTYPE IDirectShowStream_put_FileName_Proxy( IDirectShowStream * This, /* [in] */ BSTR newVal); void __RPC_STUB IDirectShowStream_put_FileName_Stub( IRpcStubBuffer *This, IRpcChannelBuffer *_pRpcChannelBuffer, PRPC_MESSAGE _pRpcMessage, DWORD *_pdwStubPhase); /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IDirectShowStream_get_Video_Proxy( IDirectShowStream * This, /* [retval][out] */ OUTPUT_STATE *pVal); void __RPC_STUB IDirectShowStream_get_Video_Stub( IRpcStubBuffer *This, IRpcChannelBuffer *_pRpcChannelBuffer, PRPC_MESSAGE _pRpcMessage, DWORD *_pdwStubPhase); /* [helpstring][id][propput] */ HRESULT STDMETHODCALLTYPE IDirectShowStream_put_Video_Proxy( IDirectShowStream * This, /* [in] */ OUTPUT_STATE newVal); void __RPC_STUB IDirectShowStream_put_Video_Stub( IRpcStubBuffer *This, IRpcChannelBuffer *_pRpcChannelBuffer, PRPC_MESSAGE _pRpcMessage, DWORD *_pdwStubPhase); /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IDirectShowStream_get_Audio_Proxy( IDirectShowStream * This, /* [retval][out] */ OUTPUT_STATE *pVal); void __RPC_STUB IDirectShowStream_get_Audio_Stub( IRpcStubBuffer *This, IRpcChannelBuffer *_pRpcChannelBuffer, PRPC_MESSAGE _pRpcMessage, DWORD *_pdwStubPhase); /* [helpstring][id][propput] */ HRESULT STDMETHODCALLTYPE IDirectShowStream_put_Audio_Proxy( IDirectShowStream * This, /* [in] */ OUTPUT_STATE newVal); void __RPC_STUB IDirectShowStream_put_Audio_Stub( IRpcStubBuffer *This, IRpcChannelBuffer *_pRpcChannelBuffer, PRPC_MESSAGE _pRpcMessage, DWORD *_pdwStubPhase); #endif /* __IDirectShowStream_INTERFACE_DEFINED__ */ #ifndef __IAMMultiMediaStream_INTERFACE_DEFINED__ #define __IAMMultiMediaStream_INTERFACE_DEFINED__ /* interface IAMMultiMediaStream */ /* [unique][uuid][object] */ EXTERN_C const IID IID_IAMMultiMediaStream; #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("BEBE595C-9A6F-11d0-8FDE-00C04FD9189D") IAMMultiMediaStream : public IMultiMediaStream { public: virtual HRESULT STDMETHODCALLTYPE Initialize( /* [in] */ STREAM_TYPE StreamType, /* [in] */ DWORD dwFlags, /* [in] */ IGraphBuilder *pFilterGraph) = 0; virtual HRESULT STDMETHODCALLTYPE GetFilterGraph( /* [out] */ IGraphBuilder **ppGraphBuilder) = 0; virtual HRESULT STDMETHODCALLTYPE GetFilter( /* [out] */ IMediaStreamFilter **ppFilter) = 0; virtual HRESULT STDMETHODCALLTYPE AddMediaStream( /* [in] */ IUnknown *pStreamObject, /* [in] */ const MSPID *PurposeId, /* [in] */ DWORD dwFlags, /* [out] */ IMediaStream **ppNewStream) = 0; virtual HRESULT STDMETHODCALLTYPE OpenFile( /* [in] */ LPCWSTR pszFileName, /* [in] */ DWORD dwFlags) = 0; virtual HRESULT STDMETHODCALLTYPE OpenMoniker( /* [in] */ IBindCtx *pCtx, /* [in] */ IMoniker *pMoniker, /* [in] */ DWORD dwFlags) = 0; virtual HRESULT STDMETHODCALLTYPE Render( /* [in] */ DWORD dwFlags) = 0; }; #else /* C style interface */ typedef struct IAMMultiMediaStreamVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE *QueryInterface )( IAMMultiMediaStream * This, /* [in] */ REFIID riid, /* [iid_is][out] */ void **ppvObject); ULONG ( STDMETHODCALLTYPE *AddRef )( IAMMultiMediaStream * This); ULONG ( STDMETHODCALLTYPE *Release )( IAMMultiMediaStream * This); HRESULT ( STDMETHODCALLTYPE *GetInformation )( IAMMultiMediaStream * This, /* [out] */ DWORD *pdwFlags, /* [out] */ STREAM_TYPE *pStreamType); HRESULT ( STDMETHODCALLTYPE *GetMediaStream )( IAMMultiMediaStream * This, /* [in] */ REFMSPID idPurpose, /* [out] */ IMediaStream **ppMediaStream); HRESULT ( STDMETHODCALLTYPE *EnumMediaStreams )( IAMMultiMediaStream * This, /* [in] */ long Index, /* [out] */ IMediaStream **ppMediaStream); HRESULT ( STDMETHODCALLTYPE *GetState )( IAMMultiMediaStream * This, /* [out] */ STREAM_STATE *pCurrentState); HRESULT ( STDMETHODCALLTYPE *SetState )( IAMMultiMediaStream * This, /* [in] */ STREAM_STATE NewState); HRESULT ( STDMETHODCALLTYPE *GetTime )( IAMMultiMediaStream * This, /* [out] */ STREAM_TIME *pCurrentTime); HRESULT ( STDMETHODCALLTYPE *GetDuration )( IAMMultiMediaStream * This, /* [out] */ STREAM_TIME *pDuration); HRESULT ( STDMETHODCALLTYPE *Seek )( IAMMultiMediaStream * This, /* [in] */ STREAM_TIME SeekTime); HRESULT ( STDMETHODCALLTYPE *GetEndOfStreamEventHandle )( IAMMultiMediaStream * This, /* [out] */ HANDLE *phEOS); HRESULT ( STDMETHODCALLTYPE *Initialize )( IAMMultiMediaStream * This, /* [in] */ STREAM_TYPE StreamType, /* [in] */ DWORD dwFlags, /* [in] */ IGraphBuilder *pFilterGraph); HRESULT ( STDMETHODCALLTYPE *GetFilterGraph )( IAMMultiMediaStream * This, /* [out] */ IGraphBuilder **ppGraphBuilder); HRESULT ( STDMETHODCALLTYPE *GetFilter )( IAMMultiMediaStream * This, /* [out] */ IMediaStreamFilter **ppFilter); HRESULT ( STDMETHODCALLTYPE *AddMediaStream )( IAMMultiMediaStream * This, /* [in] */ IUnknown *pStreamObject, /* [in] */ const MSPID *PurposeId, /* [in] */ DWORD dwFlags, /* [out] */ IMediaStream **ppNewStream); HRESULT ( STDMETHODCALLTYPE *OpenFile )( IAMMultiMediaStream * This, /* [in] */ LPCWSTR pszFileName, /* [in] */ DWORD dwFlags); HRESULT ( STDMETHODCALLTYPE *OpenMoniker )( IAMMultiMediaStream * This, /* [in] */ IBindCtx *pCtx, /* [in] */ IMoniker *pMoniker, /* [in] */ DWORD dwFlags); HRESULT ( STDMETHODCALLTYPE *Render )( IAMMultiMediaStream * This, /* [in] */ DWORD dwFlags); END_INTERFACE } IAMMultiMediaStreamVtbl; interface IAMMultiMediaStream { CONST_VTBL struct IAMMultiMediaStreamVtbl *lpVtbl; }; #ifdef COBJMACROS #define IAMMultiMediaStream_QueryInterface(This,riid,ppvObject) \ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) #define IAMMultiMediaStream_AddRef(This) \ (This)->lpVtbl -> AddRef(This) #define IAMMultiMediaStream_Release(This) \ (This)->lpVtbl -> Release(This) #define IAMMultiMediaStream_GetInformation(This,pdwFlags,pStreamType) \ (This)->lpVtbl -> GetInformation(This,pdwFlags,pStreamType) #define IAMMultiMediaStream_GetMediaStream(This,idPurpose,ppMediaStream) \ (This)->lpVtbl -> GetMediaStream(This,idPurpose,ppMediaStream) #define IAMMultiMediaStream_EnumMediaStreams(This,Index,ppMediaStream) \ (This)->lpVtbl -> EnumMediaStreams(This,Index,ppMediaStream) #define IAMMultiMediaStream_GetState(This,pCurrentState) \ (This)->lpVtbl -> GetState(This,pCurrentState) #define IAMMultiMediaStream_SetState(This,NewState) \ (This)->lpVtbl -> SetState(This,NewState) #define IAMMultiMediaStream_GetTime(This,pCurrentTime) \ (This)->lpVtbl -> GetTime(This,pCurrentTime) #define IAMMultiMediaStream_GetDuration(This,pDuration) \ (This)->lpVtbl -> GetDuration(This,pDuration) #define IAMMultiMediaStream_Seek(This,SeekTime) \ (This)->lpVtbl -> Seek(This,SeekTime) #define IAMMultiMediaStream_GetEndOfStreamEventHandle(This,phEOS) \ (This)->lpVtbl -> GetEndOfStreamEventHandle(This,phEOS) #define IAMMultiMediaStream_Initialize(This,StreamType,dwFlags,pFilterGraph) \ (This)->lpVtbl -> Initialize(This,StreamType,dwFlags,pFilterGraph) #define IAMMultiMediaStream_GetFilterGraph(This,ppGraphBuilder) \ (This)->lpVtbl -> GetFilterGraph(This,ppGraphBuilder) #define IAMMultiMediaStream_GetFilter(This,ppFilter) \ (This)->lpVtbl -> GetFilter(This,ppFilter) #define IAMMultiMediaStream_AddMediaStream(This,pStreamObject,PurposeId,dwFlags,ppNewStream) \ (This)->lpVtbl -> AddMediaStream(This,pStreamObject,PurposeId,dwFlags,ppNewStream) #define IAMMultiMediaStream_OpenFile(This,pszFileName,dwFlags) \ (This)->lpVtbl -> OpenFile(This,pszFileName,dwFlags) #define IAMMultiMediaStream_OpenMoniker(This,pCtx,pMoniker,dwFlags) \ (This)->lpVtbl -> OpenMoniker(This,pCtx,pMoniker,dwFlags) #define IAMMultiMediaStream_Render(This,dwFlags) \ (This)->lpVtbl -> Render(This,dwFlags) #endif /* COBJMACROS */ #endif /* C style interface */ HRESULT STDMETHODCALLTYPE IAMMultiMediaStream_Initialize_Proxy( IAMMultiMediaStream * This, /* [in] */ STREAM_TYPE StreamType, /* [in] */ DWORD dwFlags, /* [in] */ IGraphBuilder *pFilterGraph); void __RPC_STUB IAMMultiMediaStream_Initialize_Stub( IRpcStubBuffer *This, IRpcChannelBuffer *_pRpcChannelBuffer, PRPC_MESSAGE _pRpcMessage, DWORD *_pdwStubPhase); HRESULT STDMETHODCALLTYPE IAMMultiMediaStream_GetFilterGraph_Proxy( IAMMultiMediaStream * This, /* [out] */ IGraphBuilder **ppGraphBuilder); void __RPC_STUB IAMMultiMediaStream_GetFilterGraph_Stub( IRpcStubBuffer *This, IRpcChannelBuffer *_pRpcChannelBuffer, PRPC_MESSAGE _pRpcMessage, DWORD *_pdwStubPhase); HRESULT STDMETHODCALLTYPE IAMMultiMediaStream_GetFilter_Proxy( IAMMultiMediaStream * This, /* [out] */ IMediaStreamFilter **ppFilter); void __RPC_STUB IAMMultiMediaStream_GetFilter_Stub( IRpcStubBuffer *This, IRpcChannelBuffer *_pRpcChannelBuffer, PRPC_MESSAGE _pRpcMessage, DWORD *_pdwStubPhase); HRESULT STDMETHODCALLTYPE IAMMultiMediaStream_AddMediaStream_Proxy( IAMMultiMediaStream * This, /* [in] */ IUnknown *pStreamObject, /* [in] */ const MSPID *PurposeId, /* [in] */ DWORD dwFlags, /* [out] */ IMediaStream **ppNewStream); void __RPC_STUB IAMMultiMediaStream_AddMediaStream_Stub( IRpcStubBuffer *This, IRpcChannelBuffer *_pRpcChannelBuffer, PRPC_MESSAGE _pRpcMessage, DWORD *_pdwStubPhase); HRESULT STDMETHODCALLTYPE IAMMultiMediaStream_OpenFile_Proxy( IAMMultiMediaStream * This, /* [in] */ LPCWSTR pszFileName, /* [in] */ DWORD dwFlags); void __RPC_STUB IAMMultiMediaStream_OpenFile_Stub( IRpcStubBuffer *This, IRpcChannelBuffer *_pRpcChannelBuffer, PRPC_MESSAGE _pRpcMessage, DWORD *_pdwStubPhase); HRESULT STDMETHODCALLTYPE IAMMultiMediaStream_OpenMoniker_Proxy( IAMMultiMediaStream * This, /* [in] */ IBindCtx *pCtx, /* [in] */ IMoniker *pMoniker, /* [in] */ DWORD dwFlags); void __RPC_STUB IAMMultiMediaStream_OpenMoniker_Stub( IRpcStubBuffer *This, IRpcChannelBuffer *_pRpcChannelBuffer, PRPC_MESSAGE _pRpcMessage, DWORD *_pdwStubPhase); HRESULT STDMETHODCALLTYPE IAMMultiMediaStream_Render_Proxy( IAMMultiMediaStream * This, /* [in] */ DWORD dwFlags); void __RPC_STUB IAMMultiMediaStream_Render_Stub( IRpcStubBuffer *This, IRpcChannelBuffer *_pRpcChannelBuffer, PRPC_MESSAGE _pRpcMessage, DWORD *_pdwStubPhase); #endif /* __IAMMultiMediaStream_INTERFACE_DEFINED__ */ #ifndef __IAMMediaStream_INTERFACE_DEFINED__ #define __IAMMediaStream_INTERFACE_DEFINED__ /* interface IAMMediaStream */ /* [unique][uuid][object] */ EXTERN_C const IID IID_IAMMediaStream; #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("BEBE595D-9A6F-11d0-8FDE-00C04FD9189D") IAMMediaStream : public IMediaStream { public: virtual HRESULT STDMETHODCALLTYPE Initialize( /* [in] */ IUnknown *pSourceObject, /* [in] */ DWORD dwFlags, /* [in] */ REFMSPID PurposeId, /* [in] */ const STREAM_TYPE StreamType) = 0; virtual HRESULT STDMETHODCALLTYPE SetState( /* [in] */ FILTER_STATE State) = 0; virtual HRESULT STDMETHODCALLTYPE JoinAMMultiMediaStream( /* [in] */ IAMMultiMediaStream *pAMMultiMediaStream) = 0; virtual HRESULT STDMETHODCALLTYPE JoinFilter( /* [in] */ IMediaStreamFilter *pMediaStreamFilter) = 0; virtual HRESULT STDMETHODCALLTYPE JoinFilterGraph( /* [in] */ IFilterGraph *pFilterGraph) = 0; }; #else /* C style interface */ typedef struct IAMMediaStreamVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE *QueryInterface )( IAMMediaStream * This, /* [in] */ REFIID riid, /* [iid_is][out] */ void **ppvObject); ULONG ( STDMETHODCALLTYPE *AddRef )( IAMMediaStream * This); ULONG ( STDMETHODCALLTYPE *Release )( IAMMediaStream * This); HRESULT ( STDMETHODCALLTYPE *GetMultiMediaStream )( IAMMediaStream * This, /* [out] */ IMultiMediaStream **ppMultiMediaStream); HRESULT ( STDMETHODCALLTYPE *GetInformation )( IAMMediaStream * This, /* [out] */ MSPID *pPurposeId, /* [out] */ STREAM_TYPE *pType); HRESULT ( STDMETHODCALLTYPE *SetSameFormat )( IAMMediaStream * This, /* [in] */ IMediaStream *pStreamThatHasDesiredFormat, /* [in] */ DWORD dwFlags); HRESULT ( STDMETHODCALLTYPE *AllocateSample )( IAMMediaStream * This, /* [in] */ DWORD dwFlags, /* [out] */ IStreamSample **ppSample); HRESULT ( STDMETHODCALLTYPE *CreateSharedSample )( IAMMediaStream * This, /* [in] */ IStreamSample *pExistingSample, /* [in] */ DWORD dwFlags, /* [out] */ IStreamSample **ppNewSample); HRESULT ( STDMETHODCALLTYPE *SendEndOfStream )( IAMMediaStream * This, DWORD dwFlags); HRESULT ( STDMETHODCALLTYPE *Initialize )( IAMMediaStream * This, /* [in] */ IUnknown *pSourceObject, /* [in] */ DWORD dwFlags, /* [in] */ REFMSPID PurposeId, /* [in] */ const STREAM_TYPE StreamType); HRESULT ( STDMETHODCALLTYPE *SetState )( IAMMediaStream * This, /* [in] */ FILTER_STATE State); HRESULT ( STDMETHODCALLTYPE *JoinAMMultiMediaStream )( IAMMediaStream * This, /* [in] */ IAMMultiMediaStream *pAMMultiMediaStream); HRESULT ( STDMETHODCALLTYPE *JoinFilter )( IAMMediaStream * This, /* [in] */ IMediaStreamFilter *pMediaStreamFilter); HRESULT ( STDMETHODCALLTYPE *JoinFilterGraph )( IAMMediaStream * This, /* [in] */ IFilterGraph *pFilterGraph); END_INTERFACE } IAMMediaStreamVtbl; interface IAMMediaStream { CONST_VTBL struct IAMMediaStreamVtbl *lpVtbl; }; #ifdef COBJMACROS #define IAMMediaStream_QueryInterface(This,riid,ppvObject) \ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) #define IAMMediaStream_AddRef(This) \ (This)->lpVtbl -> AddRef(This) #define IAMMediaStream_Release(This) \ (This)->lpVtbl -> Release(This) #define IAMMediaStream_GetMultiMediaStream(This,ppMultiMediaStream) \ (This)->lpVtbl -> GetMultiMediaStream(This,ppMultiMediaStream) #define IAMMediaStream_GetInformation(This,pPurposeId,pType) \ (This)->lpVtbl -> GetInformation(This,pPurposeId,pType) #define IAMMediaStream_SetSameFormat(This,pStreamThatHasDesiredFormat,dwFlags) \ (This)->lpVtbl -> SetSameFormat(This,pStreamThatHasDesiredFormat,dwFlags) #define IAMMediaStream_AllocateSample(This,dwFlags,ppSample) \ (This)->lpVtbl -> AllocateSample(This,dwFlags,ppSample) #define IAMMediaStream_CreateSharedSample(This,pExistingSample,dwFlags,ppNewSample) \ (This)->lpVtbl -> CreateSharedSample(This,pExistingSample,dwFlags,ppNewSample) #define IAMMediaStream_SendEndOfStream(This,dwFlags) \ (This)->lpVtbl -> SendEndOfStream(This,dwFlags) #define IAMMediaStream_Initialize(This,pSourceObject,dwFlags,PurposeId,StreamType) \ (This)->lpVtbl -> Initialize(This,pSourceObject,dwFlags,PurposeId,StreamType) #define IAMMediaStream_SetState(This,State) \ (This)->lpVtbl -> SetState(This,State) #define IAMMediaStream_JoinAMMultiMediaStream(This,pAMMultiMediaStream) \ (This)->lpVtbl -> JoinAMMultiMediaStream(This,pAMMultiMediaStream) #define IAMMediaStream_JoinFilter(This,pMediaStreamFilter) \ (This)->lpVtbl -> JoinFilter(This,pMediaStreamFilter) #define IAMMediaStream_JoinFilterGraph(This,pFilterGraph) \ (This)->lpVtbl -> JoinFilterGraph(This,pFilterGraph) #endif /* COBJMACROS */ #endif /* C style interface */ HRESULT STDMETHODCALLTYPE IAMMediaStream_Initialize_Proxy( IAMMediaStream * This, /* [in] */ IUnknown *pSourceObject, /* [in] */ DWORD dwFlags, /* [in] */ REFMSPID PurposeId, /* [in] */ const STREAM_TYPE StreamType); void __RPC_STUB IAMMediaStream_Initialize_Stub( IRpcStubBuffer *This, IRpcChannelBuffer *_pRpcChannelBuffer, PRPC_MESSAGE _pRpcMessage, DWORD *_pdwStubPhase); HRESULT STDMETHODCALLTYPE IAMMediaStream_SetState_Proxy( IAMMediaStream * This, /* [in] */ FILTER_STATE State); void __RPC_STUB IAMMediaStream_SetState_Stub( IRpcStubBuffer *This, IRpcChannelBuffer *_pRpcChannelBuffer, PRPC_MESSAGE _pRpcMessage, DWORD *_pdwStubPhase); HRESULT STDMETHODCALLTYPE IAMMediaStream_JoinAMMultiMediaStream_Proxy( IAMMediaStream * This, /* [in] */ IAMMultiMediaStream *pAMMultiMediaStream); void __RPC_STUB IAMMediaStream_JoinAMMultiMediaStream_Stub( IRpcStubBuffer *This, IRpcChannelBuffer *_pRpcChannelBuffer, PRPC_MESSAGE _pRpcMessage, DWORD *_pdwStubPhase); HRESULT STDMETHODCALLTYPE IAMMediaStream_JoinFilter_Proxy( IAMMediaStream * This, /* [in] */ IMediaStreamFilter *pMediaStreamFilter); void __RPC_STUB IAMMediaStream_JoinFilter_Stub( IRpcStubBuffer *This, IRpcChannelBuffer *_pRpcChannelBuffer, PRPC_MESSAGE _pRpcMessage, DWORD *_pdwStubPhase); HRESULT STDMETHODCALLTYPE IAMMediaStream_JoinFilterGraph_Proxy( IAMMediaStream * This, /* [in] */ IFilterGraph *pFilterGraph); void __RPC_STUB IAMMediaStream_JoinFilterGraph_Stub( IRpcStubBuffer *This, IRpcChannelBuffer *_pRpcChannelBuffer, PRPC_MESSAGE _pRpcMessage, DWORD *_pdwStubPhase); #endif /* __IAMMediaStream_INTERFACE_DEFINED__ */ #ifndef __IMediaStreamFilter_INTERFACE_DEFINED__ #define __IMediaStreamFilter_INTERFACE_DEFINED__ /* interface IMediaStreamFilter */ /* [unique][uuid][local][object] */ EXTERN_C const IID IID_IMediaStreamFilter; #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("BEBE595E-9A6F-11d0-8FDE-00C04FD9189D") IMediaStreamFilter : public IBaseFilter { public: virtual HRESULT STDMETHODCALLTYPE AddMediaStream( /* [in] */ IAMMediaStream *pAMMediaStream) = 0; virtual HRESULT STDMETHODCALLTYPE GetMediaStream( /* [in] */ REFMSPID idPurpose, /* [out] */ IMediaStream **ppMediaStream) = 0; virtual HRESULT STDMETHODCALLTYPE EnumMediaStreams( /* [in] */ long Index, /* [out] */ IMediaStream **ppMediaStream) = 0; virtual HRESULT STDMETHODCALLTYPE SupportSeeking( /* [in] */ BOOL bRenderer) = 0; virtual HRESULT STDMETHODCALLTYPE ReferenceTimeToStreamTime( /* [out][in] */ REFERENCE_TIME *pTime) = 0; virtual HRESULT STDMETHODCALLTYPE GetCurrentStreamTime( /* [out] */ REFERENCE_TIME *pCurrentStreamTime) = 0; virtual HRESULT STDMETHODCALLTYPE WaitUntil( /* [in] */ REFERENCE_TIME WaitStreamTime) = 0; virtual HRESULT STDMETHODCALLTYPE Flush( /* [in] */ BOOL bCancelEOS) = 0; virtual HRESULT STDMETHODCALLTYPE EndOfStream( void) = 0; }; #else /* C style interface */ typedef struct IMediaStreamFilterVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE *QueryInterface )( IMediaStreamFilter * This, /* [in] */ REFIID riid, /* [iid_is][out] */ void **ppvObject); ULONG ( STDMETHODCALLTYPE *AddRef )( IMediaStreamFilter * This); ULONG ( STDMETHODCALLTYPE *Release )( IMediaStreamFilter * This); HRESULT ( STDMETHODCALLTYPE *GetClassID )( IMediaStreamFilter * This, /* [out] */ CLSID *pClassID); HRESULT ( STDMETHODCALLTYPE *Stop )( IMediaStreamFilter * This); HRESULT ( STDMETHODCALLTYPE *Pause )( IMediaStreamFilter * This); HRESULT ( STDMETHODCALLTYPE *Run )( IMediaStreamFilter * This, REFERENCE_TIME tStart); HRESULT ( STDMETHODCALLTYPE *GetState )( IMediaStreamFilter * This, /* [in] */ DWORD dwMilliSecsTimeout, /* [out] */ FILTER_STATE *State); HRESULT ( STDMETHODCALLTYPE *SetSyncSource )( IMediaStreamFilter * This, /* [in] */ IReferenceClock *pClock); HRESULT ( STDMETHODCALLTYPE *GetSyncSource )( IMediaStreamFilter * This, /* [out] */ IReferenceClock **pClock); HRESULT ( STDMETHODCALLTYPE *EnumPins )( IMediaStreamFilter * This, /* [out] */ IEnumPins **ppEnum); HRESULT ( STDMETHODCALLTYPE *FindPin )( IMediaStreamFilter * This, /* [string][in] */ LPCWSTR Id, /* [out] */ IPin **ppPin); HRESULT ( STDMETHODCALLTYPE *QueryFilterInfo )( IMediaStreamFilter * This, /* [out] */ FILTER_INFO *pInfo); HRESULT ( STDMETHODCALLTYPE *JoinFilterGraph )( IMediaStreamFilter * This, /* [in] */ IFilterGraph *pGraph, /* [string][in] */ LPCWSTR pName); HRESULT ( STDMETHODCALLTYPE *QueryVendorInfo )( IMediaStreamFilter * This, /* [string][out] */ LPWSTR *pVendorInfo); HRESULT ( STDMETHODCALLTYPE *AddMediaStream )( IMediaStreamFilter * This, /* [in] */ IAMMediaStream *pAMMediaStream); HRESULT ( STDMETHODCALLTYPE *GetMediaStream )( IMediaStreamFilter * This, /* [in] */ REFMSPID idPurpose, /* [out] */ IMediaStream **ppMediaStream); HRESULT ( STDMETHODCALLTYPE *EnumMediaStreams )( IMediaStreamFilter * This, /* [in] */ long Index, /* [out] */ IMediaStream **ppMediaStream); HRESULT ( STDMETHODCALLTYPE *SupportSeeking )( IMediaStreamFilter * This, /* [in] */ BOOL bRenderer); HRESULT ( STDMETHODCALLTYPE *ReferenceTimeToStreamTime )( IMediaStreamFilter * This, /* [out][in] */ REFERENCE_TIME *pTime); HRESULT ( STDMETHODCALLTYPE *GetCurrentStreamTime )( IMediaStreamFilter * This, /* [out] */ REFERENCE_TIME *pCurrentStreamTime); HRESULT ( STDMETHODCALLTYPE *WaitUntil )( IMediaStreamFilter * This, /* [in] */ REFERENCE_TIME WaitStreamTime); HRESULT ( STDMETHODCALLTYPE *Flush )( IMediaStreamFilter * This, /* [in] */ BOOL bCancelEOS); HRESULT ( STDMETHODCALLTYPE *EndOfStream )( IMediaStreamFilter * This); END_INTERFACE } IMediaStreamFilterVtbl; interface IMediaStreamFilter { CONST_VTBL struct IMediaStreamFilterVtbl *lpVtbl; }; #ifdef COBJMACROS #define IMediaStreamFilter_QueryInterface(This,riid,ppvObject) \ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) #define IMediaStreamFilter_AddRef(This) \ (This)->lpVtbl -> AddRef(This) #define IMediaStreamFilter_Release(This) \ (This)->lpVtbl -> Release(This) #define IMediaStreamFilter_GetClassID(This,pClassID) \ (This)->lpVtbl -> GetClassID(This,pClassID) #define IMediaStreamFilter_Stop(This) \ (This)->lpVtbl -> Stop(This) #define IMediaStreamFilter_Pause(This) \ (This)->lpVtbl -> Pause(This) #define IMediaStreamFilter_Run(This,tStart) \ (This)->lpVtbl -> Run(This,tStart) #define IMediaStreamFilter_GetState(This,dwMilliSecsTimeout,State) \ (This)->lpVtbl -> GetState(This,dwMilliSecsTimeout,State) #define IMediaStreamFilter_SetSyncSource(This,pClock) \ (This)->lpVtbl -> SetSyncSource(This,pClock) #define IMediaStreamFilter_GetSyncSource(This,pClock) \ (This)->lpVtbl -> GetSyncSource(This,pClock) #define IMediaStreamFilter_EnumPins(This,ppEnum) \ (This)->lpVtbl -> EnumPins(This,ppEnum) #define IMediaStreamFilter_FindPin(This,Id,ppPin) \ (This)->lpVtbl -> FindPin(This,Id,ppPin) #define IMediaStreamFilter_QueryFilterInfo(This,pInfo) \ (This)->lpVtbl -> QueryFilterInfo(This,pInfo) #define IMediaStreamFilter_JoinFilterGraph(This,pGraph,pName) \ (This)->lpVtbl -> JoinFilterGraph(This,pGraph,pName) #define IMediaStreamFilter_QueryVendorInfo(This,pVendorInfo) \ (This)->lpVtbl -> QueryVendorInfo(This,pVendorInfo) #define IMediaStreamFilter_AddMediaStream(This,pAMMediaStream) \ (This)->lpVtbl -> AddMediaStream(This,pAMMediaStream) #define IMediaStreamFilter_GetMediaStream(This,idPurpose,ppMediaStream) \ (This)->lpVtbl -> GetMediaStream(This,idPurpose,ppMediaStream) #define IMediaStreamFilter_EnumMediaStreams(This,Index,ppMediaStream) \ (This)->lpVtbl -> EnumMediaStreams(This,Index,ppMediaStream) #define IMediaStreamFilter_SupportSeeking(This,bRenderer) \ (This)->lpVtbl -> SupportSeeking(This,bRenderer) #define IMediaStreamFilter_ReferenceTimeToStreamTime(This,pTime) \ (This)->lpVtbl -> ReferenceTimeToStreamTime(This,pTime) #define IMediaStreamFilter_GetCurrentStreamTime(This,pCurrentStreamTime) \ (This)->lpVtbl -> GetCurrentStreamTime(This,pCurrentStreamTime) #define IMediaStreamFilter_WaitUntil(This,WaitStreamTime) \ (This)->lpVtbl -> WaitUntil(This,WaitStreamTime) #define IMediaStreamFilter_Flush(This,bCancelEOS) \ (This)->lpVtbl -> Flush(This,bCancelEOS) #define IMediaStreamFilter_EndOfStream(This) \ (This)->lpVtbl -> EndOfStream(This) #endif /* COBJMACROS */ #endif /* C style interface */ HRESULT STDMETHODCALLTYPE IMediaStreamFilter_AddMediaStream_Proxy( IMediaStreamFilter * This, /* [in] */ IAMMediaStream *pAMMediaStream); void __RPC_STUB IMediaStreamFilter_AddMediaStream_Stub( IRpcStubBuffer *This, IRpcChannelBuffer *_pRpcChannelBuffer, PRPC_MESSAGE _pRpcMessage, DWORD *_pdwStubPhase); HRESULT STDMETHODCALLTYPE IMediaStreamFilter_GetMediaStream_Proxy( IMediaStreamFilter * This, /* [in] */ REFMSPID idPurpose, /* [out] */ IMediaStream **ppMediaStream); void __RPC_STUB IMediaStreamFilter_GetMediaStream_Stub( IRpcStubBuffer *This, IRpcChannelBuffer *_pRpcChannelBuffer, PRPC_MESSAGE _pRpcMessage, DWORD *_pdwStubPhase); HRESULT STDMETHODCALLTYPE IMediaStreamFilter_EnumMediaStreams_Proxy( IMediaStreamFilter * This, /* [in] */ long Index, /* [out] */ IMediaStream **ppMediaStream); void __RPC_STUB IMediaStreamFilter_EnumMediaStreams_Stub( IRpcStubBuffer *This, IRpcChannelBuffer *_pRpcChannelBuffer, PRPC_MESSAGE _pRpcMessage, DWORD *_pdwStubPhase); HRESULT STDMETHODCALLTYPE IMediaStreamFilter_SupportSeeking_Proxy( IMediaStreamFilter * This, /* [in] */ BOOL bRenderer); void __RPC_STUB IMediaStreamFilter_SupportSeeking_Stub( IRpcStubBuffer *This, IRpcChannelBuffer *_pRpcChannelBuffer, PRPC_MESSAGE _pRpcMessage, DWORD *_pdwStubPhase); HRESULT STDMETHODCALLTYPE IMediaStreamFilter_ReferenceTimeToStreamTime_Proxy( IMediaStreamFilter * This, /* [out][in] */ REFERENCE_TIME *pTime); void __RPC_STUB IMediaStreamFilter_ReferenceTimeToStreamTime_Stub( IRpcStubBuffer *This, IRpcChannelBuffer *_pRpcChannelBuffer, PRPC_MESSAGE _pRpcMessage, DWORD *_pdwStubPhase); HRESULT STDMETHODCALLTYPE IMediaStreamFilter_GetCurrentStreamTime_Proxy( IMediaStreamFilter * This, /* [out] */ REFERENCE_TIME *pCurrentStreamTime); void __RPC_STUB IMediaStreamFilter_GetCurrentStreamTime_Stub( IRpcStubBuffer *This, IRpcChannelBuffer *_pRpcChannelBuffer, PRPC_MESSAGE _pRpcMessage, DWORD *_pdwStubPhase); HRESULT STDMETHODCALLTYPE IMediaStreamFilter_WaitUntil_Proxy( IMediaStreamFilter * This, /* [in] */ REFERENCE_TIME WaitStreamTime); void __RPC_STUB IMediaStreamFilter_WaitUntil_Stub( IRpcStubBuffer *This, IRpcChannelBuffer *_pRpcChannelBuffer, PRPC_MESSAGE _pRpcMessage, DWORD *_pdwStubPhase); HRESULT STDMETHODCALLTYPE IMediaStreamFilter_Flush_Proxy( IMediaStreamFilter * This, /* [in] */ BOOL bCancelEOS); void __RPC_STUB IMediaStreamFilter_Flush_Stub( IRpcStubBuffer *This, IRpcChannelBuffer *_pRpcChannelBuffer, PRPC_MESSAGE _pRpcMessage, DWORD *_pdwStubPhase); HRESULT STDMETHODCALLTYPE IMediaStreamFilter_EndOfStream_Proxy( IMediaStreamFilter * This); void __RPC_STUB IMediaStreamFilter_EndOfStream_Stub( IRpcStubBuffer *This, IRpcChannelBuffer *_pRpcChannelBuffer, PRPC_MESSAGE _pRpcMessage, DWORD *_pdwStubPhase); #endif /* __IMediaStreamFilter_INTERFACE_DEFINED__ */ #ifndef __IDirectDrawMediaSampleAllocator_INTERFACE_DEFINED__ #define __IDirectDrawMediaSampleAllocator_INTERFACE_DEFINED__ /* interface IDirectDrawMediaSampleAllocator */ /* [unique][uuid][local][object] */ EXTERN_C const IID IID_IDirectDrawMediaSampleAllocator; #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("AB6B4AFC-F6E4-11d0-900D-00C04FD9189D") IDirectDrawMediaSampleAllocator : public IUnknown { public: virtual HRESULT STDMETHODCALLTYPE GetDirectDraw( IDirectDraw **ppDirectDraw) = 0; }; #else /* C style interface */ typedef struct IDirectDrawMediaSampleAllocatorVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE *QueryInterface )( IDirectDrawMediaSampleAllocator * This, /* [in] */ REFIID riid, /* [iid_is][out] */ void **ppvObject); ULONG ( STDMETHODCALLTYPE *AddRef )( IDirectDrawMediaSampleAllocator * This); ULONG ( STDMETHODCALLTYPE *Release )( IDirectDrawMediaSampleAllocator * This); HRESULT ( STDMETHODCALLTYPE *GetDirectDraw )( IDirectDrawMediaSampleAllocator * This, IDirectDraw **ppDirectDraw); END_INTERFACE } IDirectDrawMediaSampleAllocatorVtbl; interface IDirectDrawMediaSampleAllocator { CONST_VTBL struct IDirectDrawMediaSampleAllocatorVtbl *lpVtbl; }; #ifdef COBJMACROS #define IDirectDrawMediaSampleAllocator_QueryInterface(This,riid,ppvObject) \ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) #define IDirectDrawMediaSampleAllocator_AddRef(This) \ (This)->lpVtbl -> AddRef(This) #define IDirectDrawMediaSampleAllocator_Release(This) \ (This)->lpVtbl -> Release(This) #define IDirectDrawMediaSampleAllocator_GetDirectDraw(This,ppDirectDraw) \ (This)->lpVtbl -> GetDirectDraw(This,ppDirectDraw) #endif /* COBJMACROS */ #endif /* C style interface */ HRESULT STDMETHODCALLTYPE IDirectDrawMediaSampleAllocator_GetDirectDraw_Proxy( IDirectDrawMediaSampleAllocator * This, IDirectDraw **ppDirectDraw); void __RPC_STUB IDirectDrawMediaSampleAllocator_GetDirectDraw_Stub( IRpcStubBuffer *This, IRpcChannelBuffer *_pRpcChannelBuffer, PRPC_MESSAGE _pRpcMessage, DWORD *_pdwStubPhase); #endif /* __IDirectDrawMediaSampleAllocator_INTERFACE_DEFINED__ */ #ifndef __IDirectDrawMediaSample_INTERFACE_DEFINED__ #define __IDirectDrawMediaSample_INTERFACE_DEFINED__ /* interface IDirectDrawMediaSample */ /* [unique][uuid][local][object] */ EXTERN_C const IID IID_IDirectDrawMediaSample; #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("AB6B4AFE-F6E4-11d0-900D-00C04FD9189D") IDirectDrawMediaSample : public IUnknown { public: virtual HRESULT STDMETHODCALLTYPE GetSurfaceAndReleaseLock( /* [out] */ IDirectDrawSurface **ppDirectDrawSurface, /* [out] */ RECT *pRect) = 0; virtual HRESULT STDMETHODCALLTYPE LockMediaSamplePointer( void) = 0; }; #else /* C style interface */ typedef struct IDirectDrawMediaSampleVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE *QueryInterface )( IDirectDrawMediaSample * This, /* [in] */ REFIID riid, /* [iid_is][out] */ void **ppvObject); ULONG ( STDMETHODCALLTYPE *AddRef )( IDirectDrawMediaSample * This); ULONG ( STDMETHODCALLTYPE *Release )( IDirectDrawMediaSample * This); HRESULT ( STDMETHODCALLTYPE *GetSurfaceAndReleaseLock )( IDirectDrawMediaSample * This, /* [out] */ IDirectDrawSurface **ppDirectDrawSurface, /* [out] */ RECT *pRect); HRESULT ( STDMETHODCALLTYPE *LockMediaSamplePointer )( IDirectDrawMediaSample * This); END_INTERFACE } IDirectDrawMediaSampleVtbl; interface IDirectDrawMediaSample { CONST_VTBL struct IDirectDrawMediaSampleVtbl *lpVtbl; }; #ifdef COBJMACROS #define IDirectDrawMediaSample_QueryInterface(This,riid,ppvObject) \ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) #define IDirectDrawMediaSample_AddRef(This) \ (This)->lpVtbl -> AddRef(This) #define IDirectDrawMediaSample_Release(This) \ (This)->lpVtbl -> Release(This) #define IDirectDrawMediaSample_GetSurfaceAndReleaseLock(This,ppDirectDrawSurface,pRect) \ (This)->lpVtbl -> GetSurfaceAndReleaseLock(This,ppDirectDrawSurface,pRect) #define IDirectDrawMediaSample_LockMediaSamplePointer(This) \ (This)->lpVtbl -> LockMediaSamplePointer(This) #endif /* COBJMACROS */ #endif /* C style interface */ HRESULT STDMETHODCALLTYPE IDirectDrawMediaSample_GetSurfaceAndReleaseLock_Proxy( IDirectDrawMediaSample * This, /* [out] */ IDirectDrawSurface **ppDirectDrawSurface, /* [out] */ RECT *pRect); void __RPC_STUB IDirectDrawMediaSample_GetSurfaceAndReleaseLock_Stub( IRpcStubBuffer *This, IRpcChannelBuffer *_pRpcChannelBuffer, PRPC_MESSAGE _pRpcMessage, DWORD *_pdwStubPhase); HRESULT STDMETHODCALLTYPE IDirectDrawMediaSample_LockMediaSamplePointer_Proxy( IDirectDrawMediaSample * This); void __RPC_STUB IDirectDrawMediaSample_LockMediaSamplePointer_Stub( IRpcStubBuffer *This, IRpcChannelBuffer *_pRpcChannelBuffer, PRPC_MESSAGE _pRpcMessage, DWORD *_pdwStubPhase); #endif /* __IDirectDrawMediaSample_INTERFACE_DEFINED__ */ #ifndef __IAMMediaTypeStream_INTERFACE_DEFINED__ #define __IAMMediaTypeStream_INTERFACE_DEFINED__ /* interface IAMMediaTypeStream */ /* [unique][uuid][local][object] */ EXTERN_C const IID IID_IAMMediaTypeStream; #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("AB6B4AFA-F6E4-11d0-900D-00C04FD9189D") IAMMediaTypeStream : public IMediaStream { public: virtual HRESULT STDMETHODCALLTYPE GetFormat( /* [out] */ AM_MEDIA_TYPE *pMediaType, /* [in] */ DWORD dwFlags) = 0; virtual HRESULT STDMETHODCALLTYPE SetFormat( /* [in] */ AM_MEDIA_TYPE *pMediaType, /* [in] */ DWORD dwFlags) = 0; virtual HRESULT STDMETHODCALLTYPE CreateSample( /* [in] */ long lSampleSize, /* [in] */ BYTE *pbBuffer, /* [in] */ DWORD dwFlags, /* [in] */ IUnknown *pUnkOuter, /* [out] */ IAMMediaTypeSample **ppAMMediaTypeSample) = 0; virtual HRESULT STDMETHODCALLTYPE GetStreamAllocatorRequirements( /* [out] */ ALLOCATOR_PROPERTIES *pProps) = 0; virtual HRESULT STDMETHODCALLTYPE SetStreamAllocatorRequirements( /* [in] */ ALLOCATOR_PROPERTIES *pProps) = 0; }; #else /* C style interface */ typedef struct IAMMediaTypeStreamVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE *QueryInterface )( IAMMediaTypeStream * This, /* [in] */ REFIID riid, /* [iid_is][out] */ void **ppvObject); ULONG ( STDMETHODCALLTYPE *AddRef )( IAMMediaTypeStream * This); ULONG ( STDMETHODCALLTYPE *Release )( IAMMediaTypeStream * This); HRESULT ( STDMETHODCALLTYPE *GetMultiMediaStream )( IAMMediaTypeStream * This, /* [out] */ IMultiMediaStream **ppMultiMediaStream); HRESULT ( STDMETHODCALLTYPE *GetInformation )( IAMMediaTypeStream * This, /* [out] */ MSPID *pPurposeId, /* [out] */ STREAM_TYPE *pType); HRESULT ( STDMETHODCALLTYPE *SetSameFormat )( IAMMediaTypeStream * This, /* [in] */ IMediaStream *pStreamThatHasDesiredFormat, /* [in] */ DWORD dwFlags); HRESULT ( STDMETHODCALLTYPE *AllocateSample )( IAMMediaTypeStream * This, /* [in] */ DWORD dwFlags, /* [out] */ IStreamSample **ppSample); HRESULT ( STDMETHODCALLTYPE *CreateSharedSample )( IAMMediaTypeStream * This, /* [in] */ IStreamSample *pExistingSample, /* [in] */ DWORD dwFlags, /* [out] */ IStreamSample **ppNewSample); HRESULT ( STDMETHODCALLTYPE *SendEndOfStream )( IAMMediaTypeStream * This, DWORD dwFlags); HRESULT ( STDMETHODCALLTYPE *GetFormat )( IAMMediaTypeStream * This, /* [out] */ AM_MEDIA_TYPE *pMediaType, /* [in] */ DWORD dwFlags); HRESULT ( STDMETHODCALLTYPE *SetFormat )( IAMMediaTypeStream * This, /* [in] */ AM_MEDIA_TYPE *pMediaType, /* [in] */ DWORD dwFlags); HRESULT ( STDMETHODCALLTYPE *CreateSample )( IAMMediaTypeStream * This, /* [in] */ long lSampleSize, /* [in] */ BYTE *pbBuffer, /* [in] */ DWORD dwFlags, /* [in] */ IUnknown *pUnkOuter, /* [out] */ IAMMediaTypeSample **ppAMMediaTypeSample); HRESULT ( STDMETHODCALLTYPE *GetStreamAllocatorRequirements )( IAMMediaTypeStream * This, /* [out] */ ALLOCATOR_PROPERTIES *pProps); HRESULT ( STDMETHODCALLTYPE *SetStreamAllocatorRequirements )( IAMMediaTypeStream * This, /* [in] */ ALLOCATOR_PROPERTIES *pProps); END_INTERFACE } IAMMediaTypeStreamVtbl; interface IAMMediaTypeStream { CONST_VTBL struct IAMMediaTypeStreamVtbl *lpVtbl; }; #ifdef COBJMACROS #define IAMMediaTypeStream_QueryInterface(This,riid,ppvObject) \ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) #define IAMMediaTypeStream_AddRef(This) \ (This)->lpVtbl -> AddRef(This) #define IAMMediaTypeStream_Release(This) \ (This)->lpVtbl -> Release(This) #define IAMMediaTypeStream_GetMultiMediaStream(This,ppMultiMediaStream) \ (This)->lpVtbl -> GetMultiMediaStream(This,ppMultiMediaStream) #define IAMMediaTypeStream_GetInformation(This,pPurposeId,pType) \ (This)->lpVtbl -> GetInformation(This,pPurposeId,pType) #define IAMMediaTypeStream_SetSameFormat(This,pStreamThatHasDesiredFormat,dwFlags) \ (This)->lpVtbl -> SetSameFormat(This,pStreamThatHasDesiredFormat,dwFlags) #define IAMMediaTypeStream_AllocateSample(This,dwFlags,ppSample) \ (This)->lpVtbl -> AllocateSample(This,dwFlags,ppSample) #define IAMMediaTypeStream_CreateSharedSample(This,pExistingSample,dwFlags,ppNewSample) \ (This)->lpVtbl -> CreateSharedSample(This,pExistingSample,dwFlags,ppNewSample) #define IAMMediaTypeStream_SendEndOfStream(This,dwFlags) \ (This)->lpVtbl -> SendEndOfStream(This,dwFlags) #define IAMMediaTypeStream_GetFormat(This,pMediaType,dwFlags) \ (This)->lpVtbl -> GetFormat(This,pMediaType,dwFlags) #define IAMMediaTypeStream_SetFormat(This,pMediaType,dwFlags) \ (This)->lpVtbl -> SetFormat(This,pMediaType,dwFlags) #define IAMMediaTypeStream_CreateSample(This,lSampleSize,pbBuffer,dwFlags,pUnkOuter,ppAMMediaTypeSample) \ (This)->lpVtbl -> CreateSample(This,lSampleSize,pbBuffer,dwFlags,pUnkOuter,ppAMMediaTypeSample) #define IAMMediaTypeStream_GetStreamAllocatorRequirements(This,pProps) \ (This)->lpVtbl -> GetStreamAllocatorRequirements(This,pProps) #define IAMMediaTypeStream_SetStreamAllocatorRequirements(This,pProps) \ (This)->lpVtbl -> SetStreamAllocatorRequirements(This,pProps) #endif /* COBJMACROS */ #endif /* C style interface */ HRESULT STDMETHODCALLTYPE IAMMediaTypeStream_GetFormat_Proxy( IAMMediaTypeStream * This, /* [out] */ AM_MEDIA_TYPE *pMediaType, /* [in] */ DWORD dwFlags); void __RPC_STUB IAMMediaTypeStream_GetFormat_Stub( IRpcStubBuffer *This, IRpcChannelBuffer *_pRpcChannelBuffer, PRPC_MESSAGE _pRpcMessage, DWORD *_pdwStubPhase); HRESULT STDMETHODCALLTYPE IAMMediaTypeStream_SetFormat_Proxy( IAMMediaTypeStream * This, /* [in] */ AM_MEDIA_TYPE *pMediaType, /* [in] */ DWORD dwFlags); void __RPC_STUB IAMMediaTypeStream_SetFormat_Stub( IRpcStubBuffer *This, IRpcChannelBuffer *_pRpcChannelBuffer, PRPC_MESSAGE _pRpcMessage, DWORD *_pdwStubPhase); HRESULT STDMETHODCALLTYPE IAMMediaTypeStream_CreateSample_Proxy( IAMMediaTypeStream * This, /* [in] */ long lSampleSize, /* [in] */ BYTE *pbBuffer, /* [in] */ DWORD dwFlags, /* [in] */ IUnknown *pUnkOuter, /* [out] */ IAMMediaTypeSample **ppAMMediaTypeSample); void __RPC_STUB IAMMediaTypeStream_CreateSample_Stub( IRpcStubBuffer *This, IRpcChannelBuffer *_pRpcChannelBuffer, PRPC_MESSAGE _pRpcMessage, DWORD *_pdwStubPhase); HRESULT STDMETHODCALLTYPE IAMMediaTypeStream_GetStreamAllocatorRequirements_Proxy( IAMMediaTypeStream * This, /* [out] */ ALLOCATOR_PROPERTIES *pProps); void __RPC_STUB IAMMediaTypeStream_GetStreamAllocatorRequirements_Stub( IRpcStubBuffer *This, IRpcChannelBuffer *_pRpcChannelBuffer, PRPC_MESSAGE _pRpcMessage, DWORD *_pdwStubPhase); HRESULT STDMETHODCALLTYPE IAMMediaTypeStream_SetStreamAllocatorRequirements_Proxy( IAMMediaTypeStream * This, /* [in] */ ALLOCATOR_PROPERTIES *pProps); void __RPC_STUB IAMMediaTypeStream_SetStreamAllocatorRequirements_Stub( IRpcStubBuffer *This, IRpcChannelBuffer *_pRpcChannelBuffer, PRPC_MESSAGE _pRpcMessage, DWORD *_pdwStubPhase); #endif /* __IAMMediaTypeStream_INTERFACE_DEFINED__ */ #ifndef __IAMMediaTypeSample_INTERFACE_DEFINED__ #define __IAMMediaTypeSample_INTERFACE_DEFINED__ /* interface IAMMediaTypeSample */ /* [unique][uuid][local][object] */ EXTERN_C const IID IID_IAMMediaTypeSample; #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("AB6B4AFB-F6E4-11d0-900D-00C04FD9189D") IAMMediaTypeSample : public IStreamSample { public: virtual HRESULT STDMETHODCALLTYPE SetPointer( /* [in] */ BYTE *pBuffer, /* [in] */ long lSize) = 0; virtual HRESULT STDMETHODCALLTYPE GetPointer( /* [out] */ BYTE **ppBuffer) = 0; virtual long STDMETHODCALLTYPE GetSize( void) = 0; virtual HRESULT STDMETHODCALLTYPE GetTime( /* [out] */ REFERENCE_TIME *pTimeStart, /* [out] */ REFERENCE_TIME *pTimeEnd) = 0; virtual HRESULT STDMETHODCALLTYPE SetTime( /* [in] */ REFERENCE_TIME *pTimeStart, /* [in] */ REFERENCE_TIME *pTimeEnd) = 0; virtual HRESULT STDMETHODCALLTYPE IsSyncPoint( void) = 0; virtual HRESULT STDMETHODCALLTYPE SetSyncPoint( BOOL bIsSyncPoint) = 0; virtual HRESULT STDMETHODCALLTYPE IsPreroll( void) = 0; virtual HRESULT STDMETHODCALLTYPE SetPreroll( BOOL bIsPreroll) = 0; virtual long STDMETHODCALLTYPE GetActualDataLength( void) = 0; virtual HRESULT STDMETHODCALLTYPE SetActualDataLength( long __MIDL_0020) = 0; virtual HRESULT STDMETHODCALLTYPE GetMediaType( AM_MEDIA_TYPE **ppMediaType) = 0; virtual HRESULT STDMETHODCALLTYPE SetMediaType( AM_MEDIA_TYPE *pMediaType) = 0; virtual HRESULT STDMETHODCALLTYPE IsDiscontinuity( void) = 0; virtual HRESULT STDMETHODCALLTYPE SetDiscontinuity( BOOL bDiscontinuity) = 0; virtual HRESULT STDMETHODCALLTYPE GetMediaTime( /* [out] */ LONGLONG *pTimeStart, /* [out] */ LONGLONG *pTimeEnd) = 0; virtual HRESULT STDMETHODCALLTYPE SetMediaTime( /* [in] */ LONGLONG *pTimeStart, /* [in] */ LONGLONG *pTimeEnd) = 0; }; #else /* C style interface */ typedef struct IAMMediaTypeSampleVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE *QueryInterface )( IAMMediaTypeSample * This, /* [in] */ REFIID riid, /* [iid_is][out] */ void **ppvObject); ULONG ( STDMETHODCALLTYPE *AddRef )( IAMMediaTypeSample * This); ULONG ( STDMETHODCALLTYPE *Release )( IAMMediaTypeSample * This); HRESULT ( STDMETHODCALLTYPE *GetMediaStream )( IAMMediaTypeSample * This, /* [in] */ IMediaStream **ppMediaStream); HRESULT ( STDMETHODCALLTYPE *GetSampleTimes )( IAMMediaTypeSample * This, /* [out] */ STREAM_TIME *pStartTime, /* [out] */ STREAM_TIME *pEndTime, /* [out] */ STREAM_TIME *pCurrentTime); HRESULT ( STDMETHODCALLTYPE *SetSampleTimes )( IAMMediaTypeSample * This, /* [in] */ const STREAM_TIME *pStartTime, /* [in] */ const STREAM_TIME *pEndTime); HRESULT ( STDMETHODCALLTYPE *Update )( IAMMediaTypeSample * This, /* [in] */ DWORD dwFlags, /* [in] */ HANDLE hEvent, /* [in] */ PAPCFUNC pfnAPC, /* [in] */ DWORD_PTR dwAPCData); HRESULT ( STDMETHODCALLTYPE *CompletionStatus )( IAMMediaTypeSample * This, /* [in] */ DWORD dwFlags, /* [in] */ DWORD dwMilliseconds); HRESULT ( STDMETHODCALLTYPE *SetPointer )( IAMMediaTypeSample * This, /* [in] */ BYTE *pBuffer, /* [in] */ long lSize); HRESULT ( STDMETHODCALLTYPE *GetPointer )( IAMMediaTypeSample * This, /* [out] */ BYTE **ppBuffer); long ( STDMETHODCALLTYPE *GetSize )( IAMMediaTypeSample * This); HRESULT ( STDMETHODCALLTYPE *GetTime )( IAMMediaTypeSample * This, /* [out] */ REFERENCE_TIME *pTimeStart, /* [out] */ REFERENCE_TIME *pTimeEnd); HRESULT ( STDMETHODCALLTYPE *SetTime )( IAMMediaTypeSample * This, /* [in] */ REFERENCE_TIME *pTimeStart, /* [in] */ REFERENCE_TIME *pTimeEnd); HRESULT ( STDMETHODCALLTYPE *IsSyncPoint )( IAMMediaTypeSample * This); HRESULT ( STDMETHODCALLTYPE *SetSyncPoint )( IAMMediaTypeSample * This, BOOL bIsSyncPoint); HRESULT ( STDMETHODCALLTYPE *IsPreroll )( IAMMediaTypeSample * This); HRESULT ( STDMETHODCALLTYPE *SetPreroll )( IAMMediaTypeSample * This, BOOL bIsPreroll); long ( STDMETHODCALLTYPE *GetActualDataLength )( IAMMediaTypeSample * This); HRESULT ( STDMETHODCALLTYPE *SetActualDataLength )( IAMMediaTypeSample * This, long __MIDL_0020); HRESULT ( STDMETHODCALLTYPE *GetMediaType )( IAMMediaTypeSample * This, AM_MEDIA_TYPE **ppMediaType); HRESULT ( STDMETHODCALLTYPE *SetMediaType )( IAMMediaTypeSample * This, AM_MEDIA_TYPE *pMediaType); HRESULT ( STDMETHODCALLTYPE *IsDiscontinuity )( IAMMediaTypeSample * This); HRESULT ( STDMETHODCALLTYPE *SetDiscontinuity )( IAMMediaTypeSample * This, BOOL bDiscontinuity); HRESULT ( STDMETHODCALLTYPE *GetMediaTime )( IAMMediaTypeSample * This, /* [out] */ LONGLONG *pTimeStart, /* [out] */ LONGLONG *pTimeEnd); HRESULT ( STDMETHODCALLTYPE *SetMediaTime )( IAMMediaTypeSample * This, /* [in] */ LONGLONG *pTimeStart, /* [in] */ LONGLONG *pTimeEnd); END_INTERFACE } IAMMediaTypeSampleVtbl; interface IAMMediaTypeSample { CONST_VTBL struct IAMMediaTypeSampleVtbl *lpVtbl; }; #ifdef COBJMACROS #define IAMMediaTypeSample_QueryInterface(This,riid,ppvObject) \ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) #define IAMMediaTypeSample_AddRef(This) \ (This)->lpVtbl -> AddRef(This) #define IAMMediaTypeSample_Release(This) \ (This)->lpVtbl -> Release(This) #define IAMMediaTypeSample_GetMediaStream(This,ppMediaStream) \ (This)->lpVtbl -> GetMediaStream(This,ppMediaStream) #define IAMMediaTypeSample_GetSampleTimes(This,pStartTime,pEndTime,pCurrentTime) \ (This)->lpVtbl -> GetSampleTimes(This,pStartTime,pEndTime,pCurrentTime) #define IAMMediaTypeSample_SetSampleTimes(This,pStartTime,pEndTime) \ (This)->lpVtbl -> SetSampleTimes(This,pStartTime,pEndTime) #define IAMMediaTypeSample_Update(This,dwFlags,hEvent,pfnAPC,dwAPCData) \ (This)->lpVtbl -> Update(This,dwFlags,hEvent,pfnAPC,dwAPCData) #define IAMMediaTypeSample_CompletionStatus(This,dwFlags,dwMilliseconds) \ (This)->lpVtbl -> CompletionStatus(This,dwFlags,dwMilliseconds) #define IAMMediaTypeSample_SetPointer(This,pBuffer,lSize) \ (This)->lpVtbl -> SetPointer(This,pBuffer,lSize) #define IAMMediaTypeSample_GetPointer(This,ppBuffer) \ (This)->lpVtbl -> GetPointer(This,ppBuffer) #define IAMMediaTypeSample_GetSize(This) \ (This)->lpVtbl -> GetSize(This) #define IAMMediaTypeSample_GetTime(This,pTimeStart,pTimeEnd) \ (This)->lpVtbl -> GetTime(This,pTimeStart,pTimeEnd) #define IAMMediaTypeSample_SetTime(This,pTimeStart,pTimeEnd) \ (This)->lpVtbl -> SetTime(This,pTimeStart,pTimeEnd) #define IAMMediaTypeSample_IsSyncPoint(This) \ (This)->lpVtbl -> IsSyncPoint(This) #define IAMMediaTypeSample_SetSyncPoint(This,bIsSyncPoint) \ (This)->lpVtbl -> SetSyncPoint(This,bIsSyncPoint) #define IAMMediaTypeSample_IsPreroll(This) \ (This)->lpVtbl -> IsPreroll(This) #define IAMMediaTypeSample_SetPreroll(This,bIsPreroll) \ (This)->lpVtbl -> SetPreroll(This,bIsPreroll) #define IAMMediaTypeSample_GetActualDataLength(This) \ (This)->lpVtbl -> GetActualDataLength(This) #define IAMMediaTypeSample_SetActualDataLength(This,__MIDL_0020) \ (This)->lpVtbl -> SetActualDataLength(This,__MIDL_0020) #define IAMMediaTypeSample_GetMediaType(This,ppMediaType) \ (This)->lpVtbl -> GetMediaType(This,ppMediaType) #define IAMMediaTypeSample_SetMediaType(This,pMediaType) \ (This)->lpVtbl -> SetMediaType(This,pMediaType) #define IAMMediaTypeSample_IsDiscontinuity(This) \ (This)->lpVtbl -> IsDiscontinuity(This) #define IAMMediaTypeSample_SetDiscontinuity(This,bDiscontinuity) \ (This)->lpVtbl -> SetDiscontinuity(This,bDiscontinuity) #define IAMMediaTypeSample_GetMediaTime(This,pTimeStart,pTimeEnd) \ (This)->lpVtbl -> GetMediaTime(This,pTimeStart,pTimeEnd) #define IAMMediaTypeSample_SetMediaTime(This,pTimeStart,pTimeEnd) \ (This)->lpVtbl -> SetMediaTime(This,pTimeStart,pTimeEnd) #endif /* COBJMACROS */ #endif /* C style interface */ HRESULT STDMETHODCALLTYPE IAMMediaTypeSample_SetPointer_Proxy( IAMMediaTypeSample * This, /* [in] */ BYTE *pBuffer, /* [in] */ long lSize); void __RPC_STUB IAMMediaTypeSample_SetPointer_Stub( IRpcStubBuffer *This, IRpcChannelBuffer *_pRpcChannelBuffer, PRPC_MESSAGE _pRpcMessage, DWORD *_pdwStubPhase); HRESULT STDMETHODCALLTYPE IAMMediaTypeSample_GetPointer_Proxy( IAMMediaTypeSample * This, /* [out] */ BYTE **ppBuffer); void __RPC_STUB IAMMediaTypeSample_GetPointer_Stub( IRpcStubBuffer *This, IRpcChannelBuffer *_pRpcChannelBuffer, PRPC_MESSAGE _pRpcMessage, DWORD *_pdwStubPhase); long STDMETHODCALLTYPE IAMMediaTypeSample_GetSize_Proxy( IAMMediaTypeSample * This); void __RPC_STUB IAMMediaTypeSample_GetSize_Stub( IRpcStubBuffer *This, IRpcChannelBuffer *_pRpcChannelBuffer, PRPC_MESSAGE _pRpcMessage, DWORD *_pdwStubPhase); HRESULT STDMETHODCALLTYPE IAMMediaTypeSample_GetTime_Proxy( IAMMediaTypeSample * This, /* [out] */ REFERENCE_TIME *pTimeStart, /* [out] */ REFERENCE_TIME *pTimeEnd); void __RPC_STUB IAMMediaTypeSample_GetTime_Stub( IRpcStubBuffer *This, IRpcChannelBuffer *_pRpcChannelBuffer, PRPC_MESSAGE _pRpcMessage, DWORD *_pdwStubPhase); HRESULT STDMETHODCALLTYPE IAMMediaTypeSample_SetTime_Proxy( IAMMediaTypeSample * This, /* [in] */ REFERENCE_TIME *pTimeStart, /* [in] */ REFERENCE_TIME *pTimeEnd); void __RPC_STUB IAMMediaTypeSample_SetTime_Stub( IRpcStubBuffer *This, IRpcChannelBuffer *_pRpcChannelBuffer, PRPC_MESSAGE _pRpcMessage, DWORD *_pdwStubPhase); HRESULT STDMETHODCALLTYPE IAMMediaTypeSample_IsSyncPoint_Proxy( IAMMediaTypeSample * This); void __RPC_STUB IAMMediaTypeSample_IsSyncPoint_Stub( IRpcStubBuffer *This, IRpcChannelBuffer *_pRpcChannelBuffer, PRPC_MESSAGE _pRpcMessage, DWORD *_pdwStubPhase); HRESULT STDMETHODCALLTYPE IAMMediaTypeSample_SetSyncPoint_Proxy( IAMMediaTypeSample * This, BOOL bIsSyncPoint); void __RPC_STUB IAMMediaTypeSample_SetSyncPoint_Stub( IRpcStubBuffer *This, IRpcChannelBuffer *_pRpcChannelBuffer, PRPC_MESSAGE _pRpcMessage, DWORD *_pdwStubPhase); HRESULT STDMETHODCALLTYPE IAMMediaTypeSample_IsPreroll_Proxy( IAMMediaTypeSample * This); void __RPC_STUB IAMMediaTypeSample_IsPreroll_Stub( IRpcStubBuffer *This, IRpcChannelBuffer *_pRpcChannelBuffer, PRPC_MESSAGE _pRpcMessage, DWORD *_pdwStubPhase); HRESULT STDMETHODCALLTYPE IAMMediaTypeSample_SetPreroll_Proxy( IAMMediaTypeSample * This, BOOL bIsPreroll); void __RPC_STUB IAMMediaTypeSample_SetPreroll_Stub( IRpcStubBuffer *This, IRpcChannelBuffer *_pRpcChannelBuffer, PRPC_MESSAGE _pRpcMessage, DWORD *_pdwStubPhase); long STDMETHODCALLTYPE IAMMediaTypeSample_GetActualDataLength_Proxy( IAMMediaTypeSample * This); void __RPC_STUB IAMMediaTypeSample_GetActualDataLength_Stub( IRpcStubBuffer *This, IRpcChannelBuffer *_pRpcChannelBuffer, PRPC_MESSAGE _pRpcMessage, DWORD *_pdwStubPhase); HRESULT STDMETHODCALLTYPE IAMMediaTypeSample_SetActualDataLength_Proxy( IAMMediaTypeSample * This, long __MIDL_0020); void __RPC_STUB IAMMediaTypeSample_SetActualDataLength_Stub( IRpcStubBuffer *This, IRpcChannelBuffer *_pRpcChannelBuffer, PRPC_MESSAGE _pRpcMessage, DWORD *_pdwStubPhase); HRESULT STDMETHODCALLTYPE IAMMediaTypeSample_GetMediaType_Proxy( IAMMediaTypeSample * This, AM_MEDIA_TYPE **ppMediaType); void __RPC_STUB IAMMediaTypeSample_GetMediaType_Stub( IRpcStubBuffer *This, IRpcChannelBuffer *_pRpcChannelBuffer, PRPC_MESSAGE _pRpcMessage, DWORD *_pdwStubPhase); HRESULT STDMETHODCALLTYPE IAMMediaTypeSample_SetMediaType_Proxy( IAMMediaTypeSample * This, AM_MEDIA_TYPE *pMediaType); void __RPC_STUB IAMMediaTypeSample_SetMediaType_Stub( IRpcStubBuffer *This, IRpcChannelBuffer *_pRpcChannelBuffer, PRPC_MESSAGE _pRpcMessage, DWORD *_pdwStubPhase); HRESULT STDMETHODCALLTYPE IAMMediaTypeSample_IsDiscontinuity_Proxy( IAMMediaTypeSample * This); void __RPC_STUB IAMMediaTypeSample_IsDiscontinuity_Stub( IRpcStubBuffer *This, IRpcChannelBuffer *_pRpcChannelBuffer, PRPC_MESSAGE _pRpcMessage, DWORD *_pdwStubPhase); HRESULT STDMETHODCALLTYPE IAMMediaTypeSample_SetDiscontinuity_Proxy( IAMMediaTypeSample * This, BOOL bDiscontinuity); void __RPC_STUB IAMMediaTypeSample_SetDiscontinuity_Stub( IRpcStubBuffer *This, IRpcChannelBuffer *_pRpcChannelBuffer, PRPC_MESSAGE _pRpcMessage, DWORD *_pdwStubPhase); HRESULT STDMETHODCALLTYPE IAMMediaTypeSample_GetMediaTime_Proxy( IAMMediaTypeSample * This, /* [out] */ LONGLONG *pTimeStart, /* [out] */ LONGLONG *pTimeEnd); void __RPC_STUB IAMMediaTypeSample_GetMediaTime_Stub( IRpcStubBuffer *This, IRpcChannelBuffer *_pRpcChannelBuffer, PRPC_MESSAGE _pRpcMessage, DWORD *_pdwStubPhase); HRESULT STDMETHODCALLTYPE IAMMediaTypeSample_SetMediaTime_Proxy( IAMMediaTypeSample * This, /* [in] */ LONGLONG *pTimeStart, /* [in] */ LONGLONG *pTimeEnd); void __RPC_STUB IAMMediaTypeSample_SetMediaTime_Stub( IRpcStubBuffer *This, IRpcChannelBuffer *_pRpcChannelBuffer, PRPC_MESSAGE _pRpcMessage, DWORD *_pdwStubPhase); #endif /* __IAMMediaTypeSample_INTERFACE_DEFINED__ */ #ifndef __DirectShowStreamLib_LIBRARY_DEFINED__ #define __DirectShowStreamLib_LIBRARY_DEFINED__ /* library DirectShowStreamLib */ /* [helpstring][version][uuid] */ EXTERN_C const IID LIBID_DirectShowStreamLib; EXTERN_C const CLSID CLSID_AMMultiMediaStream; #ifdef __cplusplus class DECLSPEC_UUID("49c47ce5-9ba4-11d0-8212-00c04fc32c45") AMMultiMediaStream; #endif #endif /* __DirectShowStreamLib_LIBRARY_DEFINED__ */ /* interface __MIDL_itf_amstream_0428 */ /* [local] */ #ifndef __cplusplus EXTERN_C const CLSID CLSID_AMMultiMediaStream; #endif DEFINE_GUID(CLSID_AMDirectDrawStream, /* 49c47ce4-9ba4-11d0-8212-00c04fc32c45 */ 0x49c47ce4, 0x9ba4, 0x11d0, 0x82, 0x12, 0x00, 0xc0, 0x4f, 0xc3, 0x2c, 0x45); DEFINE_GUID(CLSID_AMAudioStream, /* 8496e040-af4c-11d0-8212-00c04fc32c45 */ 0x8496e040, 0xaf4c, 0x11d0, 0x82, 0x12, 0x00, 0xc0, 0x4f, 0xc3, 0x2c, 0x45); DEFINE_GUID(CLSID_AMAudioData, /* f2468580-af8a-11d0-8212-00c04fc32c45 */ 0xf2468580, 0xaf8a, 0x11d0, 0x82, 0x12, 0x00, 0xc0, 0x4f, 0xc3, 0x2c, 0x45); DEFINE_GUID(CLSID_AMMediaTypeStream, /* CF0F2F7C-F7BF-11d0-900D-00C04FD9189D */ 0xcf0f2f7c, 0xf7bf, 0x11d0, 0x90, 0xd, 0x0, 0xc0, 0x4f, 0xd9, 0x18, 0x9d); extern RPC_IF_HANDLE __MIDL_itf_amstream_0428_v0_0_c_ifspec; extern RPC_IF_HANDLE __MIDL_itf_amstream_0428_v0_0_s_ifspec; /* Additional Prototypes for ALL interfaces */ unsigned long __RPC_USER BSTR_UserSize( unsigned long *, unsigned long , BSTR * ); unsigned char * __RPC_USER BSTR_UserMarshal( unsigned long *, unsigned char *, BSTR * ); unsigned char * __RPC_USER BSTR_UserUnmarshal(unsigned long *, unsigned char *, BSTR * ); void __RPC_USER BSTR_UserFree( unsigned long *, BSTR * ); /* end of Additional Prototypes */ #ifdef __cplusplus } #endif #endif ================================================ FILE: Include/d3d.h ================================================ /*==========================================================================; * * Copyright (C) Microsoft Corporation. All Rights Reserved. * * File: d3d.h * Content: Direct3D include file * ****************************************************************************/ #ifndef _D3D_H_ #define _D3D_H_ #ifndef DIRECT3D_VERSION #define DIRECT3D_VERSION 0x0700 #endif // include this file content only if compiling for <=DX7 interfaces #if(DIRECT3D_VERSION < 0x0800) #include #define COM_NO_WINDOWS_H #include #define D3DAPI WINAPI /* * Interface IID's */ #if defined( _WIN32 ) && !defined( _NO_COM) DEFINE_GUID( IID_IDirect3D, 0x3BBA0080,0x2421,0x11CF,0xA3,0x1A,0x00,0xAA,0x00,0xB9,0x33,0x56 ); #if(DIRECT3D_VERSION >= 0x0500) DEFINE_GUID( IID_IDirect3D2, 0x6aae1ec1,0x662a,0x11d0,0x88,0x9d,0x00,0xaa,0x00,0xbb,0xb7,0x6a); #endif /* DIRECT3D_VERSION >= 0x0500 */ #if(DIRECT3D_VERSION >= 0x0600) DEFINE_GUID( IID_IDirect3D3, 0xbb223240,0xe72b,0x11d0,0xa9,0xb4,0x00,0xaa,0x00,0xc0,0x99,0x3e); #endif /* DIRECT3D_VERSION >= 0x0600 */ #if(DIRECT3D_VERSION >= 0x0700) DEFINE_GUID( IID_IDirect3D7, 0xf5049e77,0x4861,0x11d2,0xa4,0x7,0x0,0xa0,0xc9,0x6,0x29,0xa8); #endif /* DIRECT3D_VERSION >= 0x0700 */ #if(DIRECT3D_VERSION >= 0x0500) DEFINE_GUID( IID_IDirect3DRampDevice, 0xF2086B20,0x259F,0x11CF,0xA3,0x1A,0x00,0xAA,0x00,0xB9,0x33,0x56 ); DEFINE_GUID( IID_IDirect3DRGBDevice, 0xA4665C60,0x2673,0x11CF,0xA3,0x1A,0x00,0xAA,0x00,0xB9,0x33,0x56 ); DEFINE_GUID( IID_IDirect3DHALDevice, 0x84E63dE0,0x46AA,0x11CF,0x81,0x6F,0x00,0x00,0xC0,0x20,0x15,0x6E ); DEFINE_GUID( IID_IDirect3DMMXDevice, 0x881949a1,0xd6f3,0x11d0,0x89,0xab,0x00,0xa0,0xc9,0x05,0x41,0x29 ); #endif /* DIRECT3D_VERSION >= 0x0500 */ #if(DIRECT3D_VERSION >= 0x0600) DEFINE_GUID( IID_IDirect3DRefDevice, 0x50936643, 0x13e9, 0x11d1, 0x89, 0xaa, 0x0, 0xa0, 0xc9, 0x5, 0x41, 0x29); DEFINE_GUID( IID_IDirect3DNullDevice, 0x8767df22, 0xbacc, 0x11d1, 0x89, 0x69, 0x0, 0xa0, 0xc9, 0x6, 0x29, 0xa8); #endif /* DIRECT3D_VERSION >= 0x0600 */ #if(DIRECT3D_VERSION >= 0x0700) DEFINE_GUID( IID_IDirect3DTnLHalDevice, 0xf5049e78, 0x4861, 0x11d2, 0xa4, 0x7, 0x0, 0xa0, 0xc9, 0x6, 0x29, 0xa8); #endif /* DIRECT3D_VERSION >= 0x0700 */ /* * Internal Guid to distinguish requested MMX from MMX being used as an RGB rasterizer */ DEFINE_GUID( IID_IDirect3DDevice, 0x64108800,0x957d,0X11d0,0x89,0xab,0x00,0xa0,0xc9,0x05,0x41,0x29 ); #if(DIRECT3D_VERSION >= 0x0500) DEFINE_GUID( IID_IDirect3DDevice2, 0x93281501, 0x8cf8, 0x11d0, 0x89, 0xab, 0x0, 0xa0, 0xc9, 0x5, 0x41, 0x29); #endif /* DIRECT3D_VERSION >= 0x0500 */ #if(DIRECT3D_VERSION >= 0x0600) DEFINE_GUID( IID_IDirect3DDevice3, 0xb0ab3b60, 0x33d7, 0x11d1, 0xa9, 0x81, 0x0, 0xc0, 0x4f, 0xd7, 0xb1, 0x74); #endif /* DIRECT3D_VERSION >= 0x0600 */ #if(DIRECT3D_VERSION >= 0x0700) DEFINE_GUID( IID_IDirect3DDevice7, 0xf5049e79, 0x4861, 0x11d2, 0xa4, 0x7, 0x0, 0xa0, 0xc9, 0x6, 0x29, 0xa8); #endif /* DIRECT3D_VERSION >= 0x0700 */ DEFINE_GUID( IID_IDirect3DTexture, 0x2CDCD9E0,0x25A0,0x11CF,0xA3,0x1A,0x00,0xAA,0x00,0xB9,0x33,0x56 ); #if(DIRECT3D_VERSION >= 0x0500) DEFINE_GUID( IID_IDirect3DTexture2, 0x93281502, 0x8cf8, 0x11d0, 0x89, 0xab, 0x0, 0xa0, 0xc9, 0x5, 0x41, 0x29); #endif /* DIRECT3D_VERSION >= 0x0500 */ DEFINE_GUID( IID_IDirect3DLight, 0x4417C142,0x33AD,0x11CF,0x81,0x6F,0x00,0x00,0xC0,0x20,0x15,0x6E ); DEFINE_GUID( IID_IDirect3DMaterial, 0x4417C144,0x33AD,0x11CF,0x81,0x6F,0x00,0x00,0xC0,0x20,0x15,0x6E ); #if(DIRECT3D_VERSION >= 0x0500) DEFINE_GUID( IID_IDirect3DMaterial2, 0x93281503, 0x8cf8, 0x11d0, 0x89, 0xab, 0x0, 0xa0, 0xc9, 0x5, 0x41, 0x29); #endif /* DIRECT3D_VERSION >= 0x0500 */ #if(DIRECT3D_VERSION >= 0x0600) DEFINE_GUID( IID_IDirect3DMaterial3, 0xca9c46f4, 0xd3c5, 0x11d1, 0xb7, 0x5a, 0x0, 0x60, 0x8, 0x52, 0xb3, 0x12); #endif /* DIRECT3D_VERSION >= 0x0600 */ DEFINE_GUID( IID_IDirect3DExecuteBuffer,0x4417C145,0x33AD,0x11CF,0x81,0x6F,0x00,0x00,0xC0,0x20,0x15,0x6E ); DEFINE_GUID( IID_IDirect3DViewport, 0x4417C146,0x33AD,0x11CF,0x81,0x6F,0x00,0x00,0xC0,0x20,0x15,0x6E ); #if(DIRECT3D_VERSION >= 0x0500) DEFINE_GUID( IID_IDirect3DViewport2, 0x93281500, 0x8cf8, 0x11d0, 0x89, 0xab, 0x0, 0xa0, 0xc9, 0x5, 0x41, 0x29); #endif /* DIRECT3D_VERSION >= 0x0500 */ #if(DIRECT3D_VERSION >= 0x0600) DEFINE_GUID( IID_IDirect3DViewport3, 0xb0ab3b61, 0x33d7, 0x11d1, 0xa9, 0x81, 0x0, 0xc0, 0x4f, 0xd7, 0xb1, 0x74); #endif /* DIRECT3D_VERSION >= 0x0600 */ #if(DIRECT3D_VERSION >= 0x0600) DEFINE_GUID( IID_IDirect3DVertexBuffer, 0x7a503555, 0x4a83, 0x11d1, 0xa5, 0xdb, 0x0, 0xa0, 0xc9, 0x3, 0x67, 0xf8); #endif /* DIRECT3D_VERSION >= 0x0600 */ #if(DIRECT3D_VERSION >= 0x0700) DEFINE_GUID( IID_IDirect3DVertexBuffer7, 0xf5049e7d, 0x4861, 0x11d2, 0xa4, 0x7, 0x0, 0xa0, 0xc9, 0x6, 0x29, 0xa8); #endif /* DIRECT3D_VERSION >= 0x0700 */ #endif #ifdef __cplusplus struct IDirect3D; struct IDirect3DDevice; struct IDirect3DLight; struct IDirect3DMaterial; struct IDirect3DExecuteBuffer; struct IDirect3DTexture; struct IDirect3DViewport; typedef struct IDirect3D *LPDIRECT3D; typedef struct IDirect3DDevice *LPDIRECT3DDEVICE; typedef struct IDirect3DExecuteBuffer *LPDIRECT3DEXECUTEBUFFER; typedef struct IDirect3DLight *LPDIRECT3DLIGHT; typedef struct IDirect3DMaterial *LPDIRECT3DMATERIAL; typedef struct IDirect3DTexture *LPDIRECT3DTEXTURE; typedef struct IDirect3DViewport *LPDIRECT3DVIEWPORT; #if(DIRECT3D_VERSION >= 0x0500) struct IDirect3D2; struct IDirect3DDevice2; struct IDirect3DMaterial2; struct IDirect3DTexture2; struct IDirect3DViewport2; typedef struct IDirect3D2 *LPDIRECT3D2; typedef struct IDirect3DDevice2 *LPDIRECT3DDEVICE2; typedef struct IDirect3DMaterial2 *LPDIRECT3DMATERIAL2; typedef struct IDirect3DTexture2 *LPDIRECT3DTEXTURE2; typedef struct IDirect3DViewport2 *LPDIRECT3DVIEWPORT2; #endif /* DIRECT3D_VERSION >= 0x0500 */ #if(DIRECT3D_VERSION >= 0x0600) struct IDirect3D3; struct IDirect3DDevice3; struct IDirect3DMaterial3; struct IDirect3DViewport3; struct IDirect3DVertexBuffer; typedef struct IDirect3D3 *LPDIRECT3D3; typedef struct IDirect3DDevice3 *LPDIRECT3DDEVICE3; typedef struct IDirect3DMaterial3 *LPDIRECT3DMATERIAL3; typedef struct IDirect3DViewport3 *LPDIRECT3DVIEWPORT3; typedef struct IDirect3DVertexBuffer *LPDIRECT3DVERTEXBUFFER; #endif /* DIRECT3D_VERSION >= 0x0600 */ #if(DIRECT3D_VERSION >= 0x0700) struct IDirect3D7; struct IDirect3DDevice7; struct IDirect3DVertexBuffer7; typedef struct IDirect3D7 *LPDIRECT3D7; typedef struct IDirect3DDevice7 *LPDIRECT3DDEVICE7; typedef struct IDirect3DVertexBuffer7 *LPDIRECT3DVERTEXBUFFER7; #endif /* DIRECT3D_VERSION >= 0x0700 */ #else typedef struct IDirect3D *LPDIRECT3D; typedef struct IDirect3DDevice *LPDIRECT3DDEVICE; typedef struct IDirect3DExecuteBuffer *LPDIRECT3DEXECUTEBUFFER; typedef struct IDirect3DLight *LPDIRECT3DLIGHT; typedef struct IDirect3DMaterial *LPDIRECT3DMATERIAL; typedef struct IDirect3DTexture *LPDIRECT3DTEXTURE; typedef struct IDirect3DViewport *LPDIRECT3DVIEWPORT; #if(DIRECT3D_VERSION >= 0x0500) typedef struct IDirect3D2 *LPDIRECT3D2; typedef struct IDirect3DDevice2 *LPDIRECT3DDEVICE2; typedef struct IDirect3DMaterial2 *LPDIRECT3DMATERIAL2; typedef struct IDirect3DTexture2 *LPDIRECT3DTEXTURE2; typedef struct IDirect3DViewport2 *LPDIRECT3DVIEWPORT2; #endif /* DIRECT3D_VERSION >= 0x0500 */ #if(DIRECT3D_VERSION >= 0x0600) typedef struct IDirect3D3 *LPDIRECT3D3; typedef struct IDirect3DDevice3 *LPDIRECT3DDEVICE3; typedef struct IDirect3DMaterial3 *LPDIRECT3DMATERIAL3; typedef struct IDirect3DViewport3 *LPDIRECT3DVIEWPORT3; typedef struct IDirect3DVertexBuffer *LPDIRECT3DVERTEXBUFFER; #endif /* DIRECT3D_VERSION >= 0x0600 */ #if(DIRECT3D_VERSION >= 0x0700) typedef struct IDirect3D7 *LPDIRECT3D7; typedef struct IDirect3DDevice7 *LPDIRECT3DDEVICE7; typedef struct IDirect3DVertexBuffer7 *LPDIRECT3DVERTEXBUFFER7; #endif /* DIRECT3D_VERSION >= 0x0700 */ #endif #include "d3dtypes.h" #include "d3dcaps.h" #ifdef __cplusplus extern "C" { #endif /* * Direct3D interfaces */ #undef INTERFACE #define INTERFACE IDirect3D DECLARE_INTERFACE_(IDirect3D, IUnknown) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3D methods ***/ STDMETHOD(Initialize)(THIS_ REFCLSID) PURE; STDMETHOD(EnumDevices)(THIS_ LPD3DENUMDEVICESCALLBACK,LPVOID) PURE; STDMETHOD(CreateLight)(THIS_ LPDIRECT3DLIGHT*,IUnknown*) PURE; STDMETHOD(CreateMaterial)(THIS_ LPDIRECT3DMATERIAL*,IUnknown*) PURE; STDMETHOD(CreateViewport)(THIS_ LPDIRECT3DVIEWPORT*,IUnknown*) PURE; STDMETHOD(FindDevice)(THIS_ LPD3DFINDDEVICESEARCH,LPD3DFINDDEVICERESULT) PURE; }; typedef struct IDirect3D *LPDIRECT3D; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirect3D_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3D_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3D_Release(p) (p)->lpVtbl->Release(p) #define IDirect3D_Initialize(p,a) (p)->lpVtbl->Initialize(p,a) #define IDirect3D_EnumDevices(p,a,b) (p)->lpVtbl->EnumDevices(p,a,b) #define IDirect3D_CreateLight(p,a,b) (p)->lpVtbl->CreateLight(p,a,b) #define IDirect3D_CreateMaterial(p,a,b) (p)->lpVtbl->CreateMaterial(p,a,b) #define IDirect3D_CreateViewport(p,a,b) (p)->lpVtbl->CreateViewport(p,a,b) #define IDirect3D_FindDevice(p,a,b) (p)->lpVtbl->FindDevice(p,a,b) #else #define IDirect3D_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3D_AddRef(p) (p)->AddRef() #define IDirect3D_Release(p) (p)->Release() #define IDirect3D_Initialize(p,a) (p)->Initialize(a) #define IDirect3D_EnumDevices(p,a,b) (p)->EnumDevices(a,b) #define IDirect3D_CreateLight(p,a,b) (p)->CreateLight(a,b) #define IDirect3D_CreateMaterial(p,a,b) (p)->CreateMaterial(a,b) #define IDirect3D_CreateViewport(p,a,b) (p)->CreateViewport(a,b) #define IDirect3D_FindDevice(p,a,b) (p)->FindDevice(a,b) #endif #if(DIRECT3D_VERSION >= 0x0500) #undef INTERFACE #define INTERFACE IDirect3D2 DECLARE_INTERFACE_(IDirect3D2, IUnknown) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3D2 methods ***/ STDMETHOD(EnumDevices)(THIS_ LPD3DENUMDEVICESCALLBACK,LPVOID) PURE; STDMETHOD(CreateLight)(THIS_ LPDIRECT3DLIGHT*,IUnknown*) PURE; STDMETHOD(CreateMaterial)(THIS_ LPDIRECT3DMATERIAL2*,IUnknown*) PURE; STDMETHOD(CreateViewport)(THIS_ LPDIRECT3DVIEWPORT2*,IUnknown*) PURE; STDMETHOD(FindDevice)(THIS_ LPD3DFINDDEVICESEARCH,LPD3DFINDDEVICERESULT) PURE; STDMETHOD(CreateDevice)(THIS_ REFCLSID,LPDIRECTDRAWSURFACE,LPDIRECT3DDEVICE2*) PURE; }; typedef struct IDirect3D2 *LPDIRECT3D2; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirect3D2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3D2_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3D2_Release(p) (p)->lpVtbl->Release(p) #define IDirect3D2_EnumDevices(p,a,b) (p)->lpVtbl->EnumDevices(p,a,b) #define IDirect3D2_CreateLight(p,a,b) (p)->lpVtbl->CreateLight(p,a,b) #define IDirect3D2_CreateMaterial(p,a,b) (p)->lpVtbl->CreateMaterial(p,a,b) #define IDirect3D2_CreateViewport(p,a,b) (p)->lpVtbl->CreateViewport(p,a,b) #define IDirect3D2_FindDevice(p,a,b) (p)->lpVtbl->FindDevice(p,a,b) #define IDirect3D2_CreateDevice(p,a,b,c) (p)->lpVtbl->CreateDevice(p,a,b,c) #else #define IDirect3D2_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3D2_AddRef(p) (p)->AddRef() #define IDirect3D2_Release(p) (p)->Release() #define IDirect3D2_EnumDevices(p,a,b) (p)->EnumDevices(a,b) #define IDirect3D2_CreateLight(p,a,b) (p)->CreateLight(a,b) #define IDirect3D2_CreateMaterial(p,a,b) (p)->CreateMaterial(a,b) #define IDirect3D2_CreateViewport(p,a,b) (p)->CreateViewport(a,b) #define IDirect3D2_FindDevice(p,a,b) (p)->FindDevice(a,b) #define IDirect3D2_CreateDevice(p,a,b,c) (p)->CreateDevice(a,b,c) #endif #endif /* DIRECT3D_VERSION >= 0x0500 */ #if(DIRECT3D_VERSION >= 0x0600) #undef INTERFACE #define INTERFACE IDirect3D3 DECLARE_INTERFACE_(IDirect3D3, IUnknown) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3D3 methods ***/ STDMETHOD(EnumDevices)(THIS_ LPD3DENUMDEVICESCALLBACK,LPVOID) PURE; STDMETHOD(CreateLight)(THIS_ LPDIRECT3DLIGHT*,LPUNKNOWN) PURE; STDMETHOD(CreateMaterial)(THIS_ LPDIRECT3DMATERIAL3*,LPUNKNOWN) PURE; STDMETHOD(CreateViewport)(THIS_ LPDIRECT3DVIEWPORT3*,LPUNKNOWN) PURE; STDMETHOD(FindDevice)(THIS_ LPD3DFINDDEVICESEARCH,LPD3DFINDDEVICERESULT) PURE; STDMETHOD(CreateDevice)(THIS_ REFCLSID,LPDIRECTDRAWSURFACE4,LPDIRECT3DDEVICE3*,LPUNKNOWN) PURE; STDMETHOD(CreateVertexBuffer)(THIS_ LPD3DVERTEXBUFFERDESC,LPDIRECT3DVERTEXBUFFER*,DWORD,LPUNKNOWN) PURE; STDMETHOD(EnumZBufferFormats)(THIS_ REFCLSID,LPD3DENUMPIXELFORMATSCALLBACK,LPVOID) PURE; STDMETHOD(EvictManagedTextures)(THIS) PURE; }; typedef struct IDirect3D3 *LPDIRECT3D3; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirect3D3_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3D3_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3D3_Release(p) (p)->lpVtbl->Release(p) #define IDirect3D3_EnumDevices(p,a,b) (p)->lpVtbl->EnumDevices(p,a,b) #define IDirect3D3_CreateLight(p,a,b) (p)->lpVtbl->CreateLight(p,a,b) #define IDirect3D3_CreateMaterial(p,a,b) (p)->lpVtbl->CreateMaterial(p,a,b) #define IDirect3D3_CreateViewport(p,a,b) (p)->lpVtbl->CreateViewport(p,a,b) #define IDirect3D3_FindDevice(p,a,b) (p)->lpVtbl->FindDevice(p,a,b) #define IDirect3D3_CreateDevice(p,a,b,c,d) (p)->lpVtbl->CreateDevice(p,a,b,c,d) #define IDirect3D3_CreateVertexBuffer(p,a,b,c,d) (p)->lpVtbl->CreateVertexBuffer(p,a,b,c,d) #define IDirect3D3_EnumZBufferFormats(p,a,b,c) (p)->lpVtbl->EnumZBufferFormats(p,a,b,c) #define IDirect3D3_EvictManagedTextures(p) (p)->lpVtbl->EvictManagedTextures(p) #else #define IDirect3D3_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3D3_AddRef(p) (p)->AddRef() #define IDirect3D3_Release(p) (p)->Release() #define IDirect3D3_EnumDevices(p,a,b) (p)->EnumDevices(a,b) #define IDirect3D3_CreateLight(p,a,b) (p)->CreateLight(a,b) #define IDirect3D3_CreateMaterial(p,a,b) (p)->CreateMaterial(a,b) #define IDirect3D3_CreateViewport(p,a,b) (p)->CreateViewport(a,b) #define IDirect3D3_FindDevice(p,a,b) (p)->FindDevice(a,b) #define IDirect3D3_CreateDevice(p,a,b,c,d) (p)->CreateDevice(a,b,c,d) #define IDirect3D3_CreateVertexBuffer(p,a,b,c,d) (p)->CreateVertexBuffer(a,b,c,d) #define IDirect3D3_EnumZBufferFormats(p,a,b,c) (p)->EnumZBufferFormats(a,b,c) #define IDirect3D3_EvictManagedTextures(p) (p)->EvictManagedTextures() #endif #endif /* DIRECT3D_VERSION >= 0x0600 */ #if(DIRECT3D_VERSION >= 0x0700) #undef INTERFACE #define INTERFACE IDirect3D7 DECLARE_INTERFACE_(IDirect3D7, IUnknown) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3D7 methods ***/ STDMETHOD(EnumDevices)(THIS_ LPD3DENUMDEVICESCALLBACK7,LPVOID) PURE; STDMETHOD(CreateDevice)(THIS_ REFCLSID,LPDIRECTDRAWSURFACE7,LPDIRECT3DDEVICE7*) PURE; STDMETHOD(CreateVertexBuffer)(THIS_ LPD3DVERTEXBUFFERDESC,LPDIRECT3DVERTEXBUFFER7*,DWORD) PURE; STDMETHOD(EnumZBufferFormats)(THIS_ REFCLSID,LPD3DENUMPIXELFORMATSCALLBACK,LPVOID) PURE; STDMETHOD(EvictManagedTextures)(THIS) PURE; }; typedef struct IDirect3D7 *LPDIRECT3D7; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirect3D7_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3D7_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3D7_Release(p) (p)->lpVtbl->Release(p) #define IDirect3D7_EnumDevices(p,a,b) (p)->lpVtbl->EnumDevices(p,a,b) #define IDirect3D7_CreateDevice(p,a,b,c) (p)->lpVtbl->CreateDevice(p,a,b,c) #define IDirect3D7_CreateVertexBuffer(p,a,b,c) (p)->lpVtbl->CreateVertexBuffer(p,a,b,c) #define IDirect3D7_EnumZBufferFormats(p,a,b,c) (p)->lpVtbl->EnumZBufferFormats(p,a,b,c) #define IDirect3D7_EvictManagedTextures(p) (p)->lpVtbl->EvictManagedTextures(p) #else #define IDirect3D7_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3D7_AddRef(p) (p)->AddRef() #define IDirect3D7_Release(p) (p)->Release() #define IDirect3D7_EnumDevices(p,a,b) (p)->EnumDevices(a,b) #define IDirect3D7_CreateDevice(p,a,b,c) (p)->CreateDevice(a,b,c) #define IDirect3D7_CreateVertexBuffer(p,a,b,c) (p)->CreateVertexBuffer(a,b,c) #define IDirect3D7_EnumZBufferFormats(p,a,b,c) (p)->EnumZBufferFormats(a,b,c) #define IDirect3D7_EvictManagedTextures(p) (p)->EvictManagedTextures() #endif #endif /* DIRECT3D_VERSION >= 0x0700 */ /* * Direct3D Device interfaces */ #undef INTERFACE #define INTERFACE IDirect3DDevice DECLARE_INTERFACE_(IDirect3DDevice, IUnknown) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DDevice methods ***/ STDMETHOD(Initialize)(THIS_ LPDIRECT3D,LPGUID,LPD3DDEVICEDESC) PURE; STDMETHOD(GetCaps)(THIS_ LPD3DDEVICEDESC,LPD3DDEVICEDESC) PURE; STDMETHOD(SwapTextureHandles)(THIS_ LPDIRECT3DTEXTURE,LPDIRECT3DTEXTURE) PURE; STDMETHOD(CreateExecuteBuffer)(THIS_ LPD3DEXECUTEBUFFERDESC,LPDIRECT3DEXECUTEBUFFER*,IUnknown*) PURE; STDMETHOD(GetStats)(THIS_ LPD3DSTATS) PURE; STDMETHOD(Execute)(THIS_ LPDIRECT3DEXECUTEBUFFER,LPDIRECT3DVIEWPORT,DWORD) PURE; STDMETHOD(AddViewport)(THIS_ LPDIRECT3DVIEWPORT) PURE; STDMETHOD(DeleteViewport)(THIS_ LPDIRECT3DVIEWPORT) PURE; STDMETHOD(NextViewport)(THIS_ LPDIRECT3DVIEWPORT,LPDIRECT3DVIEWPORT*,DWORD) PURE; STDMETHOD(Pick)(THIS_ LPDIRECT3DEXECUTEBUFFER,LPDIRECT3DVIEWPORT,DWORD,LPD3DRECT) PURE; STDMETHOD(GetPickRecords)(THIS_ LPDWORD,LPD3DPICKRECORD) PURE; STDMETHOD(EnumTextureFormats)(THIS_ LPD3DENUMTEXTUREFORMATSCALLBACK,LPVOID) PURE; STDMETHOD(CreateMatrix)(THIS_ LPD3DMATRIXHANDLE) PURE; STDMETHOD(SetMatrix)(THIS_ D3DMATRIXHANDLE,const LPD3DMATRIX) PURE; STDMETHOD(GetMatrix)(THIS_ D3DMATRIXHANDLE,LPD3DMATRIX) PURE; STDMETHOD(DeleteMatrix)(THIS_ D3DMATRIXHANDLE) PURE; STDMETHOD(BeginScene)(THIS) PURE; STDMETHOD(EndScene)(THIS) PURE; STDMETHOD(GetDirect3D)(THIS_ LPDIRECT3D*) PURE; }; typedef struct IDirect3DDevice *LPDIRECT3DDEVICE; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirect3DDevice_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DDevice_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DDevice_Release(p) (p)->lpVtbl->Release(p) #define IDirect3DDevice_Initialize(p,a,b,c) (p)->lpVtbl->Initialize(p,a,b,c) #define IDirect3DDevice_GetCaps(p,a,b) (p)->lpVtbl->GetCaps(p,a,b) #define IDirect3DDevice_SwapTextureHandles(p,a,b) (p)->lpVtbl->SwapTextureHandles(p,a,b) #define IDirect3DDevice_CreateExecuteBuffer(p,a,b,c) (p)->lpVtbl->CreateExecuteBuffer(p,a,b,c) #define IDirect3DDevice_GetStats(p,a) (p)->lpVtbl->GetStats(p,a) #define IDirect3DDevice_Execute(p,a,b,c) (p)->lpVtbl->Execute(p,a,b,c) #define IDirect3DDevice_AddViewport(p,a) (p)->lpVtbl->AddViewport(p,a) #define IDirect3DDevice_DeleteViewport(p,a) (p)->lpVtbl->DeleteViewport(p,a) #define IDirect3DDevice_NextViewport(p,a,b,c) (p)->lpVtbl->NextViewport(p,a,b,c) #define IDirect3DDevice_Pick(p,a,b,c,d) (p)->lpVtbl->Pick(p,a,b,c,d) #define IDirect3DDevice_GetPickRecords(p,a,b) (p)->lpVtbl->GetPickRecords(p,a,b) #define IDirect3DDevice_EnumTextureFormats(p,a,b) (p)->lpVtbl->EnumTextureFormats(p,a,b) #define IDirect3DDevice_CreateMatrix(p,a) (p)->lpVtbl->CreateMatrix(p,a) #define IDirect3DDevice_SetMatrix(p,a,b) (p)->lpVtbl->SetMatrix(p,a,b) #define IDirect3DDevice_GetMatrix(p,a,b) (p)->lpVtbl->GetMatrix(p,a,b) #define IDirect3DDevice_DeleteMatrix(p,a) (p)->lpVtbl->DeleteMatrix(p,a) #define IDirect3DDevice_BeginScene(p) (p)->lpVtbl->BeginScene(p) #define IDirect3DDevice_EndScene(p) (p)->lpVtbl->EndScene(p) #define IDirect3DDevice_GetDirect3D(p,a) (p)->lpVtbl->GetDirect3D(p,a) #else #define IDirect3DDevice_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DDevice_AddRef(p) (p)->AddRef() #define IDirect3DDevice_Release(p) (p)->Release() #define IDirect3DDevice_Initialize(p,a,b,c) (p)->Initialize(a,b,c) #define IDirect3DDevice_GetCaps(p,a,b) (p)->GetCaps(a,b) #define IDirect3DDevice_SwapTextureHandles(p,a,b) (p)->SwapTextureHandles(a,b) #define IDirect3DDevice_CreateExecuteBuffer(p,a,b,c) (p)->CreateExecuteBuffer(a,b,c) #define IDirect3DDevice_GetStats(p,a) (p)->GetStats(a) #define IDirect3DDevice_Execute(p,a,b,c) (p)->Execute(a,b,c) #define IDirect3DDevice_AddViewport(p,a) (p)->AddViewport(a) #define IDirect3DDevice_DeleteViewport(p,a) (p)->DeleteViewport(a) #define IDirect3DDevice_NextViewport(p,a,b,c) (p)->NextViewport(a,b,c) #define IDirect3DDevice_Pick(p,a,b,c,d) (p)->Pick(a,b,c,d) #define IDirect3DDevice_GetPickRecords(p,a,b) (p)->GetPickRecords(a,b) #define IDirect3DDevice_EnumTextureFormats(p,a,b) (p)->EnumTextureFormats(a,b) #define IDirect3DDevice_CreateMatrix(p,a) (p)->CreateMatrix(a) #define IDirect3DDevice_SetMatrix(p,a,b) (p)->SetMatrix(a,b) #define IDirect3DDevice_GetMatrix(p,a,b) (p)->GetMatrix(a,b) #define IDirect3DDevice_DeleteMatrix(p,a) (p)->DeleteMatrix(a) #define IDirect3DDevice_BeginScene(p) (p)->BeginScene() #define IDirect3DDevice_EndScene(p) (p)->EndScene() #define IDirect3DDevice_GetDirect3D(p,a) (p)->GetDirect3D(a) #endif #if(DIRECT3D_VERSION >= 0x0500) #undef INTERFACE #define INTERFACE IDirect3DDevice2 DECLARE_INTERFACE_(IDirect3DDevice2, IUnknown) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DDevice2 methods ***/ STDMETHOD(GetCaps)(THIS_ LPD3DDEVICEDESC,LPD3DDEVICEDESC) PURE; STDMETHOD(SwapTextureHandles)(THIS_ LPDIRECT3DTEXTURE2,LPDIRECT3DTEXTURE2) PURE; STDMETHOD(GetStats)(THIS_ LPD3DSTATS) PURE; STDMETHOD(AddViewport)(THIS_ LPDIRECT3DVIEWPORT2) PURE; STDMETHOD(DeleteViewport)(THIS_ LPDIRECT3DVIEWPORT2) PURE; STDMETHOD(NextViewport)(THIS_ LPDIRECT3DVIEWPORT2,LPDIRECT3DVIEWPORT2*,DWORD) PURE; STDMETHOD(EnumTextureFormats)(THIS_ LPD3DENUMTEXTUREFORMATSCALLBACK,LPVOID) PURE; STDMETHOD(BeginScene)(THIS) PURE; STDMETHOD(EndScene)(THIS) PURE; STDMETHOD(GetDirect3D)(THIS_ LPDIRECT3D2*) PURE; STDMETHOD(SetCurrentViewport)(THIS_ LPDIRECT3DVIEWPORT2) PURE; STDMETHOD(GetCurrentViewport)(THIS_ LPDIRECT3DVIEWPORT2 *) PURE; STDMETHOD(SetRenderTarget)(THIS_ LPDIRECTDRAWSURFACE,DWORD) PURE; STDMETHOD(GetRenderTarget)(THIS_ LPDIRECTDRAWSURFACE *) PURE; STDMETHOD(Begin)(THIS_ D3DPRIMITIVETYPE,D3DVERTEXTYPE,DWORD) PURE; STDMETHOD(BeginIndexed)(THIS_ D3DPRIMITIVETYPE,D3DVERTEXTYPE,LPVOID,DWORD,DWORD) PURE; STDMETHOD(Vertex)(THIS_ LPVOID) PURE; STDMETHOD(Index)(THIS_ WORD) PURE; STDMETHOD(End)(THIS_ DWORD) PURE; STDMETHOD(GetRenderState)(THIS_ D3DRENDERSTATETYPE,LPDWORD) PURE; STDMETHOD(SetRenderState)(THIS_ D3DRENDERSTATETYPE,DWORD) PURE; STDMETHOD(GetLightState)(THIS_ D3DLIGHTSTATETYPE,LPDWORD) PURE; STDMETHOD(SetLightState)(THIS_ D3DLIGHTSTATETYPE,DWORD) PURE; STDMETHOD(SetTransform)(THIS_ D3DTRANSFORMSTATETYPE,LPD3DMATRIX) PURE; STDMETHOD(GetTransform)(THIS_ D3DTRANSFORMSTATETYPE,LPD3DMATRIX) PURE; STDMETHOD(MultiplyTransform)(THIS_ D3DTRANSFORMSTATETYPE,LPD3DMATRIX) PURE; STDMETHOD(DrawPrimitive)(THIS_ D3DPRIMITIVETYPE,D3DVERTEXTYPE,LPVOID,DWORD,DWORD) PURE; STDMETHOD(DrawIndexedPrimitive)(THIS_ D3DPRIMITIVETYPE,D3DVERTEXTYPE,LPVOID,DWORD,LPWORD,DWORD,DWORD) PURE; STDMETHOD(SetClipStatus)(THIS_ LPD3DCLIPSTATUS) PURE; STDMETHOD(GetClipStatus)(THIS_ LPD3DCLIPSTATUS) PURE; }; typedef struct IDirect3DDevice2 *LPDIRECT3DDEVICE2; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirect3DDevice2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DDevice2_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DDevice2_Release(p) (p)->lpVtbl->Release(p) #define IDirect3DDevice2_GetCaps(p,a,b) (p)->lpVtbl->GetCaps(p,a,b) #define IDirect3DDevice2_SwapTextureHandles(p,a,b) (p)->lpVtbl->SwapTextureHandles(p,a,b) #define IDirect3DDevice2_GetStats(p,a) (p)->lpVtbl->GetStats(p,a) #define IDirect3DDevice2_AddViewport(p,a) (p)->lpVtbl->AddViewport(p,a) #define IDirect3DDevice2_DeleteViewport(p,a) (p)->lpVtbl->DeleteViewport(p,a) #define IDirect3DDevice2_NextViewport(p,a,b,c) (p)->lpVtbl->NextViewport(p,a,b,c) #define IDirect3DDevice2_EnumTextureFormats(p,a,b) (p)->lpVtbl->EnumTextureFormats(p,a,b) #define IDirect3DDevice2_BeginScene(p) (p)->lpVtbl->BeginScene(p) #define IDirect3DDevice2_EndScene(p) (p)->lpVtbl->EndScene(p) #define IDirect3DDevice2_GetDirect3D(p,a) (p)->lpVtbl->GetDirect3D(p,a) #define IDirect3DDevice2_SetCurrentViewport(p,a) (p)->lpVtbl->SetCurrentViewport(p,a) #define IDirect3DDevice2_GetCurrentViewport(p,a) (p)->lpVtbl->GetCurrentViewport(p,a) #define IDirect3DDevice2_SetRenderTarget(p,a,b) (p)->lpVtbl->SetRenderTarget(p,a,b) #define IDirect3DDevice2_GetRenderTarget(p,a) (p)->lpVtbl->GetRenderTarget(p,a) #define IDirect3DDevice2_Begin(p,a,b,c) (p)->lpVtbl->Begin(p,a,b,c) #define IDirect3DDevice2_BeginIndexed(p,a,b,c,d,e) (p)->lpVtbl->BeginIndexed(p,a,b,c,d,e) #define IDirect3DDevice2_Vertex(p,a) (p)->lpVtbl->Vertex(p,a) #define IDirect3DDevice2_Index(p,a) (p)->lpVtbl->Index(p,a) #define IDirect3DDevice2_End(p,a) (p)->lpVtbl->End(p,a) #define IDirect3DDevice2_GetRenderState(p,a,b) (p)->lpVtbl->GetRenderState(p,a,b) #define IDirect3DDevice2_SetRenderState(p,a,b) (p)->lpVtbl->SetRenderState(p,a,b) #define IDirect3DDevice2_GetLightState(p,a,b) (p)->lpVtbl->GetLightState(p,a,b) #define IDirect3DDevice2_SetLightState(p,a,b) (p)->lpVtbl->SetLightState(p,a,b) #define IDirect3DDevice2_SetTransform(p,a,b) (p)->lpVtbl->SetTransform(p,a,b) #define IDirect3DDevice2_GetTransform(p,a,b) (p)->lpVtbl->GetTransform(p,a,b) #define IDirect3DDevice2_MultiplyTransform(p,a,b) (p)->lpVtbl->MultiplyTransform(p,a,b) #define IDirect3DDevice2_DrawPrimitive(p,a,b,c,d,e) (p)->lpVtbl->DrawPrimitive(p,a,b,c,d,e) #define IDirect3DDevice2_DrawIndexedPrimitive(p,a,b,c,d,e,f,g) (p)->lpVtbl->DrawIndexedPrimitive(p,a,b,c,d,e,f,g) #define IDirect3DDevice2_SetClipStatus(p,a) (p)->lpVtbl->SetClipStatus(p,a) #define IDirect3DDevice2_GetClipStatus(p,a) (p)->lpVtbl->GetClipStatus(p,a) #else #define IDirect3DDevice2_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DDevice2_AddRef(p) (p)->AddRef() #define IDirect3DDevice2_Release(p) (p)->Release() #define IDirect3DDevice2_GetCaps(p,a,b) (p)->GetCaps(a,b) #define IDirect3DDevice2_SwapTextureHandles(p,a,b) (p)->SwapTextureHandles(a,b) #define IDirect3DDevice2_GetStats(p,a) (p)->GetStats(a) #define IDirect3DDevice2_AddViewport(p,a) (p)->AddViewport(a) #define IDirect3DDevice2_DeleteViewport(p,a) (p)->DeleteViewport(a) #define IDirect3DDevice2_NextViewport(p,a,b,c) (p)->NextViewport(a,b,c) #define IDirect3DDevice2_EnumTextureFormats(p,a,b) (p)->EnumTextureFormats(a,b) #define IDirect3DDevice2_BeginScene(p) (p)->BeginScene() #define IDirect3DDevice2_EndScene(p) (p)->EndScene() #define IDirect3DDevice2_GetDirect3D(p,a) (p)->GetDirect3D(a) #define IDirect3DDevice2_SetCurrentViewport(p,a) (p)->SetCurrentViewport(a) #define IDirect3DDevice2_GetCurrentViewport(p,a) (p)->GetCurrentViewport(a) #define IDirect3DDevice2_SetRenderTarget(p,a,b) (p)->SetRenderTarget(a,b) #define IDirect3DDevice2_GetRenderTarget(p,a) (p)->GetRenderTarget(a) #define IDirect3DDevice2_Begin(p,a,b,c) (p)->Begin(a,b,c) #define IDirect3DDevice2_BeginIndexed(p,a,b,c,d,e) (p)->BeginIndexed(a,b,c,d,e) #define IDirect3DDevice2_Vertex(p,a) (p)->Vertex(a) #define IDirect3DDevice2_Index(p,a) (p)->Index(a) #define IDirect3DDevice2_End(p,a) (p)->End(a) #define IDirect3DDevice2_GetRenderState(p,a,b) (p)->GetRenderState(a,b) #define IDirect3DDevice2_SetRenderState(p,a,b) (p)->SetRenderState(a,b) #define IDirect3DDevice2_GetLightState(p,a,b) (p)->GetLightState(a,b) #define IDirect3DDevice2_SetLightState(p,a,b) (p)->SetLightState(a,b) #define IDirect3DDevice2_SetTransform(p,a,b) (p)->SetTransform(a,b) #define IDirect3DDevice2_GetTransform(p,a,b) (p)->GetTransform(a,b) #define IDirect3DDevice2_MultiplyTransform(p,a,b) (p)->MultiplyTransform(a,b) #define IDirect3DDevice2_DrawPrimitive(p,a,b,c,d,e) (p)->DrawPrimitive(a,b,c,d,e) #define IDirect3DDevice2_DrawIndexedPrimitive(p,a,b,c,d,e,f,g) (p)->DrawIndexedPrimitive(a,b,c,d,e,f,g) #define IDirect3DDevice2_SetClipStatus(p,a) (p)->SetClipStatus(a) #define IDirect3DDevice2_GetClipStatus(p,a) (p)->GetClipStatus(a) #endif #endif /* DIRECT3D_VERSION >= 0x0500 */ #if(DIRECT3D_VERSION >= 0x0600) #undef INTERFACE #define INTERFACE IDirect3DDevice3 DECLARE_INTERFACE_(IDirect3DDevice3, IUnknown) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DDevice3 methods ***/ STDMETHOD(GetCaps)(THIS_ LPD3DDEVICEDESC,LPD3DDEVICEDESC) PURE; STDMETHOD(GetStats)(THIS_ LPD3DSTATS) PURE; STDMETHOD(AddViewport)(THIS_ LPDIRECT3DVIEWPORT3) PURE; STDMETHOD(DeleteViewport)(THIS_ LPDIRECT3DVIEWPORT3) PURE; STDMETHOD(NextViewport)(THIS_ LPDIRECT3DVIEWPORT3,LPDIRECT3DVIEWPORT3*,DWORD) PURE; STDMETHOD(EnumTextureFormats)(THIS_ LPD3DENUMPIXELFORMATSCALLBACK,LPVOID) PURE; STDMETHOD(BeginScene)(THIS) PURE; STDMETHOD(EndScene)(THIS) PURE; STDMETHOD(GetDirect3D)(THIS_ LPDIRECT3D3*) PURE; STDMETHOD(SetCurrentViewport)(THIS_ LPDIRECT3DVIEWPORT3) PURE; STDMETHOD(GetCurrentViewport)(THIS_ LPDIRECT3DVIEWPORT3 *) PURE; STDMETHOD(SetRenderTarget)(THIS_ LPDIRECTDRAWSURFACE4,DWORD) PURE; STDMETHOD(GetRenderTarget)(THIS_ LPDIRECTDRAWSURFACE4 *) PURE; STDMETHOD(Begin)(THIS_ D3DPRIMITIVETYPE,DWORD,DWORD) PURE; STDMETHOD(BeginIndexed)(THIS_ D3DPRIMITIVETYPE,DWORD,LPVOID,DWORD,DWORD) PURE; STDMETHOD(Vertex)(THIS_ LPVOID) PURE; STDMETHOD(Index)(THIS_ WORD) PURE; STDMETHOD(End)(THIS_ DWORD) PURE; STDMETHOD(GetRenderState)(THIS_ D3DRENDERSTATETYPE,LPDWORD) PURE; STDMETHOD(SetRenderState)(THIS_ D3DRENDERSTATETYPE,DWORD) PURE; STDMETHOD(GetLightState)(THIS_ D3DLIGHTSTATETYPE,LPDWORD) PURE; STDMETHOD(SetLightState)(THIS_ D3DLIGHTSTATETYPE,DWORD) PURE; STDMETHOD(SetTransform)(THIS_ D3DTRANSFORMSTATETYPE,LPD3DMATRIX) PURE; STDMETHOD(GetTransform)(THIS_ D3DTRANSFORMSTATETYPE,LPD3DMATRIX) PURE; STDMETHOD(MultiplyTransform)(THIS_ D3DTRANSFORMSTATETYPE,LPD3DMATRIX) PURE; STDMETHOD(DrawPrimitive)(THIS_ D3DPRIMITIVETYPE,DWORD,LPVOID,DWORD,DWORD) PURE; STDMETHOD(DrawIndexedPrimitive)(THIS_ D3DPRIMITIVETYPE,DWORD,LPVOID,DWORD,LPWORD,DWORD,DWORD) PURE; STDMETHOD(SetClipStatus)(THIS_ LPD3DCLIPSTATUS) PURE; STDMETHOD(GetClipStatus)(THIS_ LPD3DCLIPSTATUS) PURE; STDMETHOD(DrawPrimitiveStrided)(THIS_ D3DPRIMITIVETYPE,DWORD,LPD3DDRAWPRIMITIVESTRIDEDDATA,DWORD,DWORD) PURE; STDMETHOD(DrawIndexedPrimitiveStrided)(THIS_ D3DPRIMITIVETYPE,DWORD,LPD3DDRAWPRIMITIVESTRIDEDDATA,DWORD,LPWORD,DWORD,DWORD) PURE; STDMETHOD(DrawPrimitiveVB)(THIS_ D3DPRIMITIVETYPE,LPDIRECT3DVERTEXBUFFER,DWORD,DWORD,DWORD) PURE; STDMETHOD(DrawIndexedPrimitiveVB)(THIS_ D3DPRIMITIVETYPE,LPDIRECT3DVERTEXBUFFER,LPWORD,DWORD,DWORD) PURE; STDMETHOD(ComputeSphereVisibility)(THIS_ LPD3DVECTOR,LPD3DVALUE,DWORD,DWORD,LPDWORD) PURE; STDMETHOD(GetTexture)(THIS_ DWORD,LPDIRECT3DTEXTURE2 *) PURE; STDMETHOD(SetTexture)(THIS_ DWORD,LPDIRECT3DTEXTURE2) PURE; STDMETHOD(GetTextureStageState)(THIS_ DWORD,D3DTEXTURESTAGESTATETYPE,LPDWORD) PURE; STDMETHOD(SetTextureStageState)(THIS_ DWORD,D3DTEXTURESTAGESTATETYPE,DWORD) PURE; STDMETHOD(ValidateDevice)(THIS_ LPDWORD) PURE; }; typedef struct IDirect3DDevice3 *LPDIRECT3DDEVICE3; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirect3DDevice3_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DDevice3_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DDevice3_Release(p) (p)->lpVtbl->Release(p) #define IDirect3DDevice3_GetCaps(p,a,b) (p)->lpVtbl->GetCaps(p,a,b) #define IDirect3DDevice3_GetStats(p,a) (p)->lpVtbl->GetStats(p,a) #define IDirect3DDevice3_AddViewport(p,a) (p)->lpVtbl->AddViewport(p,a) #define IDirect3DDevice3_DeleteViewport(p,a) (p)->lpVtbl->DeleteViewport(p,a) #define IDirect3DDevice3_NextViewport(p,a,b,c) (p)->lpVtbl->NextViewport(p,a,b,c) #define IDirect3DDevice3_EnumTextureFormats(p,a,b) (p)->lpVtbl->EnumTextureFormats(p,a,b) #define IDirect3DDevice3_BeginScene(p) (p)->lpVtbl->BeginScene(p) #define IDirect3DDevice3_EndScene(p) (p)->lpVtbl->EndScene(p) #define IDirect3DDevice3_GetDirect3D(p,a) (p)->lpVtbl->GetDirect3D(p,a) #define IDirect3DDevice3_SetCurrentViewport(p,a) (p)->lpVtbl->SetCurrentViewport(p,a) #define IDirect3DDevice3_GetCurrentViewport(p,a) (p)->lpVtbl->GetCurrentViewport(p,a) #define IDirect3DDevice3_SetRenderTarget(p,a,b) (p)->lpVtbl->SetRenderTarget(p,a,b) #define IDirect3DDevice3_GetRenderTarget(p,a) (p)->lpVtbl->GetRenderTarget(p,a) #define IDirect3DDevice3_Begin(p,a,b,c) (p)->lpVtbl->Begin(p,a,b,c) #define IDirect3DDevice3_BeginIndexed(p,a,b,c,d,e) (p)->lpVtbl->BeginIndexed(p,a,b,c,d,e) #define IDirect3DDevice3_Vertex(p,a) (p)->lpVtbl->Vertex(p,a) #define IDirect3DDevice3_Index(p,a) (p)->lpVtbl->Index(p,a) #define IDirect3DDevice3_End(p,a) (p)->lpVtbl->End(p,a) #define IDirect3DDevice3_GetRenderState(p,a,b) (p)->lpVtbl->GetRenderState(p,a,b) #define IDirect3DDevice3_SetRenderState(p,a,b) (p)->lpVtbl->SetRenderState(p,a,b) #define IDirect3DDevice3_GetLightState(p,a,b) (p)->lpVtbl->GetLightState(p,a,b) #define IDirect3DDevice3_SetLightState(p,a,b) (p)->lpVtbl->SetLightState(p,a,b) #define IDirect3DDevice3_SetTransform(p,a,b) (p)->lpVtbl->SetTransform(p,a,b) #define IDirect3DDevice3_GetTransform(p,a,b) (p)->lpVtbl->GetTransform(p,a,b) #define IDirect3DDevice3_MultiplyTransform(p,a,b) (p)->lpVtbl->MultiplyTransform(p,a,b) #define IDirect3DDevice3_DrawPrimitive(p,a,b,c,d,e) (p)->lpVtbl->DrawPrimitive(p,a,b,c,d,e) #define IDirect3DDevice3_DrawIndexedPrimitive(p,a,b,c,d,e,f,g) (p)->lpVtbl->DrawIndexedPrimitive(p,a,b,c,d,e,f,g) #define IDirect3DDevice3_SetClipStatus(p,a) (p)->lpVtbl->SetClipStatus(p,a) #define IDirect3DDevice3_GetClipStatus(p,a) (p)->lpVtbl->GetClipStatus(p,a) #define IDirect3DDevice3_DrawPrimitiveStrided(p,a,b,c,d,e) (p)->lpVtbl->DrawPrimitiveStrided(p,a,b,c,d,e) #define IDirect3DDevice3_DrawIndexedPrimitiveStrided(p,a,b,c,d,e,f,g) (p)->lpVtbl->DrawIndexedPrimitiveStrided(p,a,b,c,d,e,f,g) #define IDirect3DDevice3_DrawPrimitiveVB(p,a,b,c,d,e) (p)->lpVtbl->DrawPrimitiveVB(p,a,b,c,d,e) #define IDirect3DDevice3_DrawIndexedPrimitiveVB(p,a,b,c,d,e) (p)->lpVtbl->DrawIndexedPrimitiveVB(p,a,b,c,d,e) #define IDirect3DDevice3_ComputeSphereVisibility(p,a,b,c,d,e) (p)->lpVtbl->ComputeSphereVisibility(p,a,b,c,d,e) #define IDirect3DDevice3_GetTexture(p,a,b) (p)->lpVtbl->GetTexture(p,a,b) #define IDirect3DDevice3_SetTexture(p,a,b) (p)->lpVtbl->SetTexture(p,a,b) #define IDirect3DDevice3_GetTextureStageState(p,a,b,c) (p)->lpVtbl->GetTextureStageState(p,a,b,c) #define IDirect3DDevice3_SetTextureStageState(p,a,b,c) (p)->lpVtbl->SetTextureStageState(p,a,b,c) #define IDirect3DDevice3_ValidateDevice(p,a) (p)->lpVtbl->ValidateDevice(p,a) #else #define IDirect3DDevice3_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DDevice3_AddRef(p) (p)->AddRef() #define IDirect3DDevice3_Release(p) (p)->Release() #define IDirect3DDevice3_GetCaps(p,a,b) (p)->GetCaps(a,b) #define IDirect3DDevice3_GetStats(p,a) (p)->GetStats(a) #define IDirect3DDevice3_AddViewport(p,a) (p)->AddViewport(a) #define IDirect3DDevice3_DeleteViewport(p,a) (p)->DeleteViewport(a) #define IDirect3DDevice3_NextViewport(p,a,b,c) (p)->NextViewport(a,b,c) #define IDirect3DDevice3_EnumTextureFormats(p,a,b) (p)->EnumTextureFormats(a,b) #define IDirect3DDevice3_BeginScene(p) (p)->BeginScene() #define IDirect3DDevice3_EndScene(p) (p)->EndScene() #define IDirect3DDevice3_GetDirect3D(p,a) (p)->GetDirect3D(a) #define IDirect3DDevice3_SetCurrentViewport(p,a) (p)->SetCurrentViewport(a) #define IDirect3DDevice3_GetCurrentViewport(p,a) (p)->GetCurrentViewport(a) #define IDirect3DDevice3_SetRenderTarget(p,a,b) (p)->SetRenderTarget(a,b) #define IDirect3DDevice3_GetRenderTarget(p,a) (p)->GetRenderTarget(a) #define IDirect3DDevice3_Begin(p,a,b,c) (p)->Begin(a,b,c) #define IDirect3DDevice3_BeginIndexed(p,a,b,c,d,e) (p)->BeginIndexed(a,b,c,d,e) #define IDirect3DDevice3_Vertex(p,a) (p)->Vertex(a) #define IDirect3DDevice3_Index(p,a) (p)->Index(a) #define IDirect3DDevice3_End(p,a) (p)->End(a) #define IDirect3DDevice3_GetRenderState(p,a,b) (p)->GetRenderState(a,b) #define IDirect3DDevice3_SetRenderState(p,a,b) (p)->SetRenderState(a,b) #define IDirect3DDevice3_GetLightState(p,a,b) (p)->GetLightState(a,b) #define IDirect3DDevice3_SetLightState(p,a,b) (p)->SetLightState(a,b) #define IDirect3DDevice3_SetTransform(p,a,b) (p)->SetTransform(a,b) #define IDirect3DDevice3_GetTransform(p,a,b) (p)->GetTransform(a,b) #define IDirect3DDevice3_MultiplyTransform(p,a,b) (p)->MultiplyTransform(a,b) #define IDirect3DDevice3_DrawPrimitive(p,a,b,c,d,e) (p)->DrawPrimitive(a,b,c,d,e) #define IDirect3DDevice3_DrawIndexedPrimitive(p,a,b,c,d,e,f,g) (p)->DrawIndexedPrimitive(a,b,c,d,e,f,g) #define IDirect3DDevice3_SetClipStatus(p,a) (p)->SetClipStatus(a) #define IDirect3DDevice3_GetClipStatus(p,a) (p)->GetClipStatus(a) #define IDirect3DDevice3_DrawPrimitiveStrided(p,a,b,c,d,e) (p)->DrawPrimitiveStrided(a,b,c,d,e) #define IDirect3DDevice3_DrawIndexedPrimitiveStrided(p,a,b,c,d,e,f,g) (p)->DrawIndexedPrimitiveStrided(a,b,c,d,e,f,g) #define IDirect3DDevice3_DrawPrimitiveVB(p,a,b,c,d,e) (p)->DrawPrimitiveVB(a,b,c,d,e) #define IDirect3DDevice3_DrawIndexedPrimitiveVB(p,a,b,c,d,e) (p)->DrawIndexedPrimitiveVB(a,b,c,d,e) #define IDirect3DDevice3_ComputeSphereVisibility(p,a,b,c,d,e) (p)->ComputeSphereVisibility(a,b,c,d,e) #define IDirect3DDevice3_GetTexture(p,a,b) (p)->GetTexture(a,b) #define IDirect3DDevice3_SetTexture(p,a,b) (p)->SetTexture(a,b) #define IDirect3DDevice3_GetTextureStageState(p,a,b,c) (p)->GetTextureStageState(a,b,c) #define IDirect3DDevice3_SetTextureStageState(p,a,b,c) (p)->SetTextureStageState(a,b,c) #define IDirect3DDevice3_ValidateDevice(p,a) (p)->ValidateDevice(a) #endif #endif /* DIRECT3D_VERSION >= 0x0600 */ #if(DIRECT3D_VERSION >= 0x0700) #undef INTERFACE #define INTERFACE IDirect3DDevice7 DECLARE_INTERFACE_(IDirect3DDevice7, IUnknown) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DDevice7 methods ***/ STDMETHOD(GetCaps)(THIS_ LPD3DDEVICEDESC7) PURE; STDMETHOD(EnumTextureFormats)(THIS_ LPD3DENUMPIXELFORMATSCALLBACK,LPVOID) PURE; STDMETHOD(BeginScene)(THIS) PURE; STDMETHOD(EndScene)(THIS) PURE; STDMETHOD(GetDirect3D)(THIS_ LPDIRECT3D7*) PURE; STDMETHOD(SetRenderTarget)(THIS_ LPDIRECTDRAWSURFACE7,DWORD) PURE; STDMETHOD(GetRenderTarget)(THIS_ LPDIRECTDRAWSURFACE7 *) PURE; STDMETHOD(Clear)(THIS_ DWORD,LPD3DRECT,DWORD,D3DCOLOR,D3DVALUE,DWORD) PURE; STDMETHOD(SetTransform)(THIS_ D3DTRANSFORMSTATETYPE,LPD3DMATRIX) PURE; STDMETHOD(GetTransform)(THIS_ D3DTRANSFORMSTATETYPE,LPD3DMATRIX) PURE; STDMETHOD(SetViewport)(THIS_ LPD3DVIEWPORT7) PURE; STDMETHOD(MultiplyTransform)(THIS_ D3DTRANSFORMSTATETYPE,LPD3DMATRIX) PURE; STDMETHOD(GetViewport)(THIS_ LPD3DVIEWPORT7) PURE; STDMETHOD(SetMaterial)(THIS_ LPD3DMATERIAL7) PURE; STDMETHOD(GetMaterial)(THIS_ LPD3DMATERIAL7) PURE; STDMETHOD(SetLight)(THIS_ DWORD,LPD3DLIGHT7) PURE; STDMETHOD(GetLight)(THIS_ DWORD,LPD3DLIGHT7) PURE; STDMETHOD(SetRenderState)(THIS_ D3DRENDERSTATETYPE,DWORD) PURE; STDMETHOD(GetRenderState)(THIS_ D3DRENDERSTATETYPE,LPDWORD) PURE; STDMETHOD(BeginStateBlock)(THIS) PURE; STDMETHOD(EndStateBlock)(THIS_ LPDWORD) PURE; STDMETHOD(PreLoad)(THIS_ LPDIRECTDRAWSURFACE7) PURE; STDMETHOD(DrawPrimitive)(THIS_ D3DPRIMITIVETYPE,DWORD,LPVOID,DWORD,DWORD) PURE; STDMETHOD(DrawIndexedPrimitive)(THIS_ D3DPRIMITIVETYPE,DWORD,LPVOID,DWORD,LPWORD,DWORD,DWORD) PURE; STDMETHOD(SetClipStatus)(THIS_ LPD3DCLIPSTATUS) PURE; STDMETHOD(GetClipStatus)(THIS_ LPD3DCLIPSTATUS) PURE; STDMETHOD(DrawPrimitiveStrided)(THIS_ D3DPRIMITIVETYPE,DWORD,LPD3DDRAWPRIMITIVESTRIDEDDATA,DWORD,DWORD) PURE; STDMETHOD(DrawIndexedPrimitiveStrided)(THIS_ D3DPRIMITIVETYPE,DWORD,LPD3DDRAWPRIMITIVESTRIDEDDATA,DWORD,LPWORD,DWORD,DWORD) PURE; STDMETHOD(DrawPrimitiveVB)(THIS_ D3DPRIMITIVETYPE,LPDIRECT3DVERTEXBUFFER7,DWORD,DWORD,DWORD) PURE; STDMETHOD(DrawIndexedPrimitiveVB)(THIS_ D3DPRIMITIVETYPE,LPDIRECT3DVERTEXBUFFER7,DWORD,DWORD,LPWORD,DWORD,DWORD) PURE; STDMETHOD(ComputeSphereVisibility)(THIS_ LPD3DVECTOR,LPD3DVALUE,DWORD,DWORD,LPDWORD) PURE; STDMETHOD(GetTexture)(THIS_ DWORD,LPDIRECTDRAWSURFACE7 *) PURE; STDMETHOD(SetTexture)(THIS_ DWORD,LPDIRECTDRAWSURFACE7) PURE; STDMETHOD(GetTextureStageState)(THIS_ DWORD,D3DTEXTURESTAGESTATETYPE,LPDWORD) PURE; STDMETHOD(SetTextureStageState)(THIS_ DWORD,D3DTEXTURESTAGESTATETYPE,DWORD) PURE; STDMETHOD(ValidateDevice)(THIS_ LPDWORD) PURE; STDMETHOD(ApplyStateBlock)(THIS_ DWORD) PURE; STDMETHOD(CaptureStateBlock)(THIS_ DWORD) PURE; STDMETHOD(DeleteStateBlock)(THIS_ DWORD) PURE; STDMETHOD(CreateStateBlock)(THIS_ D3DSTATEBLOCKTYPE,LPDWORD) PURE; STDMETHOD(Load)(THIS_ LPDIRECTDRAWSURFACE7,LPPOINT,LPDIRECTDRAWSURFACE7,LPRECT,DWORD) PURE; STDMETHOD(LightEnable)(THIS_ DWORD,BOOL) PURE; STDMETHOD(GetLightEnable)(THIS_ DWORD,BOOL*) PURE; STDMETHOD(SetClipPlane)(THIS_ DWORD,D3DVALUE*) PURE; STDMETHOD(GetClipPlane)(THIS_ DWORD,D3DVALUE*) PURE; STDMETHOD(GetInfo)(THIS_ DWORD,LPVOID,DWORD) PURE; }; typedef struct IDirect3DDevice7 *LPDIRECT3DDEVICE7; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirect3DDevice7_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DDevice7_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DDevice7_Release(p) (p)->lpVtbl->Release(p) #define IDirect3DDevice7_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a) #define IDirect3DDevice7_EnumTextureFormats(p,a,b) (p)->lpVtbl->EnumTextureFormats(p,a,b) #define IDirect3DDevice7_BeginScene(p) (p)->lpVtbl->BeginScene(p) #define IDirect3DDevice7_EndScene(p) (p)->lpVtbl->EndScene(p) #define IDirect3DDevice7_GetDirect3D(p,a) (p)->lpVtbl->GetDirect3D(p,a) #define IDirect3DDevice7_SetRenderTarget(p,a,b) (p)->lpVtbl->SetRenderTarget(p,a,b) #define IDirect3DDevice7_GetRenderTarget(p,a) (p)->lpVtbl->GetRenderTarget(p,a) #define IDirect3DDevice7_Clear(p,a,b,c,d,e,f) (p)->lpVtbl->Clear(p,a,b,c,d,e,f) #define IDirect3DDevice7_SetTransform(p,a,b) (p)->lpVtbl->SetTransform(p,a,b) #define IDirect3DDevice7_GetTransform(p,a,b) (p)->lpVtbl->GetTransform(p,a,b) #define IDirect3DDevice7_SetViewport(p,a) (p)->lpVtbl->SetViewport(p,a) #define IDirect3DDevice7_MultiplyTransform(p,a,b) (p)->lpVtbl->MultiplyTransform(p,a,b) #define IDirect3DDevice7_GetViewport(p,a) (p)->lpVtbl->GetViewport(p,a) #define IDirect3DDevice7_SetMaterial(p,a) (p)->lpVtbl->SetMaterial(p,a) #define IDirect3DDevice7_GetMaterial(p,a) (p)->lpVtbl->GetMaterial(p,a) #define IDirect3DDevice7_SetLight(p,a,b) (p)->lpVtbl->SetLight(p,a,b) #define IDirect3DDevice7_GetLight(p,a,b) (p)->lpVtbl->GetLight(p,a,b) #define IDirect3DDevice7_SetRenderState(p,a,b) (p)->lpVtbl->SetRenderState(p,a,b) #define IDirect3DDevice7_GetRenderState(p,a,b) (p)->lpVtbl->GetRenderState(p,a,b) #define IDirect3DDevice7_BeginStateBlock(p) (p)->lpVtbl->BeginStateBlock(p) #define IDirect3DDevice7_EndStateBlock(p,a) (p)->lpVtbl->EndStateBlock(p,a) #define IDirect3DDevice7_PreLoad(p,a) (p)->lpVtbl->PreLoad(p,a) #define IDirect3DDevice7_DrawPrimitive(p,a,b,c,d,e) (p)->lpVtbl->DrawPrimitive(p,a,b,c,d,e) #define IDirect3DDevice7_DrawIndexedPrimitive(p,a,b,c,d,e,f,g) (p)->lpVtbl->DrawIndexedPrimitive(p,a,b,c,d,e,f,g) #define IDirect3DDevice7_SetClipStatus(p,a) (p)->lpVtbl->SetClipStatus(p,a) #define IDirect3DDevice7_GetClipStatus(p,a) (p)->lpVtbl->GetClipStatus(p,a) #define IDirect3DDevice7_DrawPrimitiveStrided(p,a,b,c,d,e) (p)->lpVtbl->DrawPrimitiveStrided(p,a,b,c,d,e) #define IDirect3DDevice7_DrawIndexedPrimitiveStrided(p,a,b,c,d,e,f,g) (p)->lpVtbl->DrawIndexedPrimitiveStrided(p,a,b,c,d,e,f,g) #define IDirect3DDevice7_DrawPrimitiveVB(p,a,b,c,d,e) (p)->lpVtbl->DrawPrimitiveVB(p,a,b,c,d,e) #define IDirect3DDevice7_DrawIndexedPrimitiveVB(p,a,b,c,d,e,f,g) (p)->lpVtbl->DrawIndexedPrimitiveVB(p,a,b,c,d,e,f,g) #define IDirect3DDevice7_ComputeSphereVisibility(p,a,b,c,d,e) (p)->lpVtbl->ComputeSphereVisibility(p,a,b,c,d,e) #define IDirect3DDevice7_GetTexture(p,a,b) (p)->lpVtbl->GetTexture(p,a,b) #define IDirect3DDevice7_SetTexture(p,a,b) (p)->lpVtbl->SetTexture(p,a,b) #define IDirect3DDevice7_GetTextureStageState(p,a,b,c) (p)->lpVtbl->GetTextureStageState(p,a,b,c) #define IDirect3DDevice7_SetTextureStageState(p,a,b,c) (p)->lpVtbl->SetTextureStageState(p,a,b,c) #define IDirect3DDevice7_ValidateDevice(p,a) (p)->lpVtbl->ValidateDevice(p,a) #define IDirect3DDevice7_ApplyStateBlock(p,a) (p)->lpVtbl->ApplyStateBlock(p,a) #define IDirect3DDevice7_CaptureStateBlock(p,a) (p)->lpVtbl->CaptureStateBlock(p,a) #define IDirect3DDevice7_DeleteStateBlock(p,a) (p)->lpVtbl->DeleteStateBlock(p,a) #define IDirect3DDevice7_CreateStateBlock(p,a,b) (p)->lpVtbl->CreateStateBlock(p,a,b) #define IDirect3DDevice7_Load(p,a,b,c,d,e) (p)->lpVtbl->Load(p,a,b,c,d,e) #define IDirect3DDevice7_LightEnable(p,a,b) (p)->lpVtbl->LightEnable(p,a,b) #define IDirect3DDevice7_GetLightEnable(p,a,b) (p)->lpVtbl->GetLightEnable(p,a,b) #define IDirect3DDevice7_SetClipPlane(p,a,b) (p)->lpVtbl->SetClipPlane(p,a,b) #define IDirect3DDevice7_GetClipPlane(p,a,b) (p)->lpVtbl->GetClipPlane(p,a,b) #define IDirect3DDevice7_GetInfo(p,a,b,c) (p)->lpVtbl->GetInfo(p,a,b,c) #else #define IDirect3DDevice7_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DDevice7_AddRef(p) (p)->AddRef() #define IDirect3DDevice7_Release(p) (p)->Release() #define IDirect3DDevice7_GetCaps(p,a) (p)->GetCaps(a) #define IDirect3DDevice7_EnumTextureFormats(p,a,b) (p)->EnumTextureFormats(a,b) #define IDirect3DDevice7_BeginScene(p) (p)->BeginScene() #define IDirect3DDevice7_EndScene(p) (p)->EndScene() #define IDirect3DDevice7_GetDirect3D(p,a) (p)->GetDirect3D(a) #define IDirect3DDevice7_SetRenderTarget(p,a,b) (p)->SetRenderTarget(a,b) #define IDirect3DDevice7_GetRenderTarget(p,a) (p)->GetRenderTarget(a) #define IDirect3DDevice7_Clear(p,a,b,c,d,e,f) (p)->Clear(a,b,c,d,e,f) #define IDirect3DDevice7_SetTransform(p,a,b) (p)->SetTransform(a,b) #define IDirect3DDevice7_GetTransform(p,a,b) (p)->GetTransform(a,b) #define IDirect3DDevice7_SetViewport(p,a) (p)->SetViewport(a) #define IDirect3DDevice7_MultiplyTransform(p,a,b) (p)->MultiplyTransform(a,b) #define IDirect3DDevice7_GetViewport(p,a) (p)->GetViewport(a) #define IDirect3DDevice7_SetMaterial(p,a) (p)->SetMaterial(a) #define IDirect3DDevice7_GetMaterial(p,a) (p)->GetMaterial(a) #define IDirect3DDevice7_SetLight(p,a,b) (p)->SetLight(a,b) #define IDirect3DDevice7_GetLight(p,a,b) (p)->GetLight(a,b) #define IDirect3DDevice7_SetRenderState(p,a,b) (p)->SetRenderState(a,b) #define IDirect3DDevice7_GetRenderState(p,a,b) (p)->GetRenderState(a,b) #define IDirect3DDevice7_BeginStateBlock(p) (p)->BeginStateBlock() #define IDirect3DDevice7_EndStateBlock(p,a) (p)->EndStateBlock(a) #define IDirect3DDevice7_PreLoad(p,a) (p)->PreLoad(a) #define IDirect3DDevice7_DrawPrimitive(p,a,b,c,d,e) (p)->DrawPrimitive(a,b,c,d,e) #define IDirect3DDevice7_DrawIndexedPrimitive(p,a,b,c,d,e,f,g) (p)->DrawIndexedPrimitive(a,b,c,d,e,f,g) #define IDirect3DDevice7_SetClipStatus(p,a) (p)->SetClipStatus(a) #define IDirect3DDevice7_GetClipStatus(p,a) (p)->GetClipStatus(a) #define IDirect3DDevice7_DrawPrimitiveStrided(p,a,b,c,d,e) (p)->DrawPrimitiveStrided(a,b,c,d,e) #define IDirect3DDevice7_DrawIndexedPrimitiveStrided(p,a,b,c,d,e,f,g) (p)->DrawIndexedPrimitiveStrided(a,b,c,d,e,f,g) #define IDirect3DDevice7_DrawPrimitiveVB(p,a,b,c,d,e) (p)->DrawPrimitiveVB(a,b,c,d,e) #define IDirect3DDevice7_DrawIndexedPrimitiveVB(p,a,b,c,d,e,f,g) (p)->DrawIndexedPrimitiveVB(a,b,c,d,e,f,g) #define IDirect3DDevice7_ComputeSphereVisibility(p,a,b,c,d,e) (p)->ComputeSphereVisibility(a,b,c,d,e) #define IDirect3DDevice7_GetTexture(p,a,b) (p)->GetTexture(a,b) #define IDirect3DDevice7_SetTexture(p,a,b) (p)->SetTexture(a,b) #define IDirect3DDevice7_GetTextureStageState(p,a,b,c) (p)->GetTextureStageState(a,b,c) #define IDirect3DDevice7_SetTextureStageState(p,a,b,c) (p)->SetTextureStageState(a,b,c) #define IDirect3DDevice7_ValidateDevice(p,a) (p)->ValidateDevice(a) #define IDirect3DDevice7_ApplyStateBlock(p,a) (p)->ApplyStateBlock(a) #define IDirect3DDevice7_CaptureStateBlock(p,a) (p)->CaptureStateBlock(a) #define IDirect3DDevice7_DeleteStateBlock(p,a) (p)->DeleteStateBlock(a) #define IDirect3DDevice7_CreateStateBlock(p,a,b) (p)->CreateStateBlock(a,b) #define IDirect3DDevice7_Load(p,a,b,c,d,e) (p)->Load(a,b,c,d,e) #define IDirect3DDevice7_LightEnable(p,a,b) (p)->LightEnable(a,b) #define IDirect3DDevice7_GetLightEnable(p,a,b) (p)->GetLightEnable(a,b) #define IDirect3DDevice7_SetClipPlane(p,a,b) (p)->SetClipPlane(a,b) #define IDirect3DDevice7_GetClipPlane(p,a,b) (p)->GetClipPlane(a,b) #define IDirect3DDevice7_GetInfo(p,a,b,c) (p)->GetInfo(a,b,c) #endif #endif /* DIRECT3D_VERSION >= 0x0700 */ /* * Execute Buffer interface */ #undef INTERFACE #define INTERFACE IDirect3DExecuteBuffer DECLARE_INTERFACE_(IDirect3DExecuteBuffer, IUnknown) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DExecuteBuffer methods ***/ STDMETHOD(Initialize)(THIS_ LPDIRECT3DDEVICE,LPD3DEXECUTEBUFFERDESC) PURE; STDMETHOD(Lock)(THIS_ LPD3DEXECUTEBUFFERDESC) PURE; STDMETHOD(Unlock)(THIS) PURE; STDMETHOD(SetExecuteData)(THIS_ LPD3DEXECUTEDATA) PURE; STDMETHOD(GetExecuteData)(THIS_ LPD3DEXECUTEDATA) PURE; STDMETHOD(Validate)(THIS_ LPDWORD,LPD3DVALIDATECALLBACK,LPVOID,DWORD) PURE; STDMETHOD(Optimize)(THIS_ DWORD) PURE; }; typedef struct IDirect3DExecuteBuffer *LPDIRECT3DEXECUTEBUFFER; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirect3DExecuteBuffer_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DExecuteBuffer_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DExecuteBuffer_Release(p) (p)->lpVtbl->Release(p) #define IDirect3DExecuteBuffer_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b) #define IDirect3DExecuteBuffer_Lock(p,a) (p)->lpVtbl->Lock(p,a) #define IDirect3DExecuteBuffer_Unlock(p) (p)->lpVtbl->Unlock(p) #define IDirect3DExecuteBuffer_SetExecuteData(p,a) (p)->lpVtbl->SetExecuteData(p,a) #define IDirect3DExecuteBuffer_GetExecuteData(p,a) (p)->lpVtbl->GetExecuteData(p,a) #define IDirect3DExecuteBuffer_Validate(p,a,b,c,d) (p)->lpVtbl->Validate(p,a,b,c,d) #define IDirect3DExecuteBuffer_Optimize(p,a) (p)->lpVtbl->Optimize(p,a) #else #define IDirect3DExecuteBuffer_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DExecuteBuffer_AddRef(p) (p)->AddRef() #define IDirect3DExecuteBuffer_Release(p) (p)->Release() #define IDirect3DExecuteBuffer_Initialize(p,a,b) (p)->Initialize(a,b) #define IDirect3DExecuteBuffer_Lock(p,a) (p)->Lock(a) #define IDirect3DExecuteBuffer_Unlock(p) (p)->Unlock() #define IDirect3DExecuteBuffer_SetExecuteData(p,a) (p)->SetExecuteData(a) #define IDirect3DExecuteBuffer_GetExecuteData(p,a) (p)->GetExecuteData(a) #define IDirect3DExecuteBuffer_Validate(p,a,b,c,d) (p)->Validate(a,b,c,d) #define IDirect3DExecuteBuffer_Optimize(p,a) (p)->Optimize(a) #endif /* * Light interfaces */ #undef INTERFACE #define INTERFACE IDirect3DLight DECLARE_INTERFACE_(IDirect3DLight, IUnknown) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DLight methods ***/ STDMETHOD(Initialize)(THIS_ LPDIRECT3D) PURE; STDMETHOD(SetLight)(THIS_ LPD3DLIGHT) PURE; STDMETHOD(GetLight)(THIS_ LPD3DLIGHT) PURE; }; typedef struct IDirect3DLight *LPDIRECT3DLIGHT; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirect3DLight_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DLight_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DLight_Release(p) (p)->lpVtbl->Release(p) #define IDirect3DLight_Initialize(p,a) (p)->lpVtbl->Initialize(p,a) #define IDirect3DLight_SetLight(p,a) (p)->lpVtbl->SetLight(p,a) #define IDirect3DLight_GetLight(p,a) (p)->lpVtbl->GetLight(p,a) #else #define IDirect3DLight_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DLight_AddRef(p) (p)->AddRef() #define IDirect3DLight_Release(p) (p)->Release() #define IDirect3DLight_Initialize(p,a) (p)->Initialize(a) #define IDirect3DLight_SetLight(p,a) (p)->SetLight(a) #define IDirect3DLight_GetLight(p,a) (p)->GetLight(a) #endif /* * Material interfaces */ #undef INTERFACE #define INTERFACE IDirect3DMaterial DECLARE_INTERFACE_(IDirect3DMaterial, IUnknown) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DMaterial methods ***/ STDMETHOD(Initialize)(THIS_ LPDIRECT3D) PURE; STDMETHOD(SetMaterial)(THIS_ LPD3DMATERIAL) PURE; STDMETHOD(GetMaterial)(THIS_ LPD3DMATERIAL) PURE; STDMETHOD(GetHandle)(THIS_ LPDIRECT3DDEVICE,LPD3DMATERIALHANDLE) PURE; STDMETHOD(Reserve)(THIS) PURE; STDMETHOD(Unreserve)(THIS) PURE; }; typedef struct IDirect3DMaterial *LPDIRECT3DMATERIAL; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirect3DMaterial_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DMaterial_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DMaterial_Release(p) (p)->lpVtbl->Release(p) #define IDirect3DMaterial_Initialize(p,a) (p)->lpVtbl->Initialize(p,a) #define IDirect3DMaterial_SetMaterial(p,a) (p)->lpVtbl->SetMaterial(p,a) #define IDirect3DMaterial_GetMaterial(p,a) (p)->lpVtbl->GetMaterial(p,a) #define IDirect3DMaterial_GetHandle(p,a,b) (p)->lpVtbl->GetHandle(p,a,b) #define IDirect3DMaterial_Reserve(p) (p)->lpVtbl->Reserve(p) #define IDirect3DMaterial_Unreserve(p) (p)->lpVtbl->Unreserve(p) #else #define IDirect3DMaterial_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DMaterial_AddRef(p) (p)->AddRef() #define IDirect3DMaterial_Release(p) (p)->Release() #define IDirect3DMaterial_Initialize(p,a) (p)->Initialize(a) #define IDirect3DMaterial_SetMaterial(p,a) (p)->SetMaterial(a) #define IDirect3DMaterial_GetMaterial(p,a) (p)->GetMaterial(a) #define IDirect3DMaterial_GetHandle(p,a,b) (p)->GetHandle(a,b) #define IDirect3DMaterial_Reserve(p) (p)->Reserve() #define IDirect3DMaterial_Unreserve(p) (p)->Unreserve() #endif #if(DIRECT3D_VERSION >= 0x0500) #undef INTERFACE #define INTERFACE IDirect3DMaterial2 DECLARE_INTERFACE_(IDirect3DMaterial2, IUnknown) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DMaterial2 methods ***/ STDMETHOD(SetMaterial)(THIS_ LPD3DMATERIAL) PURE; STDMETHOD(GetMaterial)(THIS_ LPD3DMATERIAL) PURE; STDMETHOD(GetHandle)(THIS_ LPDIRECT3DDEVICE2,LPD3DMATERIALHANDLE) PURE; }; typedef struct IDirect3DMaterial2 *LPDIRECT3DMATERIAL2; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirect3DMaterial2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DMaterial2_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DMaterial2_Release(p) (p)->lpVtbl->Release(p) #define IDirect3DMaterial2_SetMaterial(p,a) (p)->lpVtbl->SetMaterial(p,a) #define IDirect3DMaterial2_GetMaterial(p,a) (p)->lpVtbl->GetMaterial(p,a) #define IDirect3DMaterial2_GetHandle(p,a,b) (p)->lpVtbl->GetHandle(p,a,b) #else #define IDirect3DMaterial2_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DMaterial2_AddRef(p) (p)->AddRef() #define IDirect3DMaterial2_Release(p) (p)->Release() #define IDirect3DMaterial2_SetMaterial(p,a) (p)->SetMaterial(a) #define IDirect3DMaterial2_GetMaterial(p,a) (p)->GetMaterial(a) #define IDirect3DMaterial2_GetHandle(p,a,b) (p)->GetHandle(a,b) #endif #endif /* DIRECT3D_VERSION >= 0x0500 */ #if(DIRECT3D_VERSION >= 0x0600) #undef INTERFACE #define INTERFACE IDirect3DMaterial3 DECLARE_INTERFACE_(IDirect3DMaterial3, IUnknown) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DMaterial3 methods ***/ STDMETHOD(SetMaterial)(THIS_ LPD3DMATERIAL) PURE; STDMETHOD(GetMaterial)(THIS_ LPD3DMATERIAL) PURE; STDMETHOD(GetHandle)(THIS_ LPDIRECT3DDEVICE3,LPD3DMATERIALHANDLE) PURE; }; typedef struct IDirect3DMaterial3 *LPDIRECT3DMATERIAL3; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirect3DMaterial3_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DMaterial3_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DMaterial3_Release(p) (p)->lpVtbl->Release(p) #define IDirect3DMaterial3_SetMaterial(p,a) (p)->lpVtbl->SetMaterial(p,a) #define IDirect3DMaterial3_GetMaterial(p,a) (p)->lpVtbl->GetMaterial(p,a) #define IDirect3DMaterial3_GetHandle(p,a,b) (p)->lpVtbl->GetHandle(p,a,b) #else #define IDirect3DMaterial3_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DMaterial3_AddRef(p) (p)->AddRef() #define IDirect3DMaterial3_Release(p) (p)->Release() #define IDirect3DMaterial3_SetMaterial(p,a) (p)->SetMaterial(a) #define IDirect3DMaterial3_GetMaterial(p,a) (p)->GetMaterial(a) #define IDirect3DMaterial3_GetHandle(p,a,b) (p)->GetHandle(a,b) #endif #endif /* DIRECT3D_VERSION >= 0x0600 */ /* * Texture interfaces */ #undef INTERFACE #define INTERFACE IDirect3DTexture DECLARE_INTERFACE_(IDirect3DTexture, IUnknown) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DTexture methods ***/ STDMETHOD(Initialize)(THIS_ LPDIRECT3DDEVICE,LPDIRECTDRAWSURFACE) PURE; STDMETHOD(GetHandle)(THIS_ LPDIRECT3DDEVICE,LPD3DTEXTUREHANDLE) PURE; STDMETHOD(PaletteChanged)(THIS_ DWORD,DWORD) PURE; STDMETHOD(Load)(THIS_ LPDIRECT3DTEXTURE) PURE; STDMETHOD(Unload)(THIS) PURE; }; typedef struct IDirect3DTexture *LPDIRECT3DTEXTURE; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirect3DTexture_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DTexture_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DTexture_Release(p) (p)->lpVtbl->Release(p) #define IDirect3DTexture_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b) #define IDirect3DTexture_GetHandle(p,a,b) (p)->lpVtbl->GetHandle(p,a,b) #define IDirect3DTexture_PaletteChanged(p,a,b) (p)->lpVtbl->PaletteChanged(p,a,b) #define IDirect3DTexture_Load(p,a) (p)->lpVtbl->Load(p,a) #define IDirect3DTexture_Unload(p) (p)->lpVtbl->Unload(p) #else #define IDirect3DTexture_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DTexture_AddRef(p) (p)->AddRef() #define IDirect3DTexture_Release(p) (p)->Release() #define IDirect3DTexture_Initialize(p,a,b) (p)->Initialize(a,b) #define IDirect3DTexture_GetHandle(p,a,b) (p)->GetHandle(a,b) #define IDirect3DTexture_PaletteChanged(p,a,b) (p)->PaletteChanged(a,b) #define IDirect3DTexture_Load(p,a) (p)->Load(a) #define IDirect3DTexture_Unload(p) (p)->Unload() #endif #if(DIRECT3D_VERSION >= 0x0500) #undef INTERFACE #define INTERFACE IDirect3DTexture2 DECLARE_INTERFACE_(IDirect3DTexture2, IUnknown) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DTexture2 methods ***/ STDMETHOD(GetHandle)(THIS_ LPDIRECT3DDEVICE2,LPD3DTEXTUREHANDLE) PURE; STDMETHOD(PaletteChanged)(THIS_ DWORD,DWORD) PURE; STDMETHOD(Load)(THIS_ LPDIRECT3DTEXTURE2) PURE; }; typedef struct IDirect3DTexture2 *LPDIRECT3DTEXTURE2; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirect3DTexture2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DTexture2_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DTexture2_Release(p) (p)->lpVtbl->Release(p) #define IDirect3DTexture2_GetHandle(p,a,b) (p)->lpVtbl->GetHandle(p,a,b) #define IDirect3DTexture2_PaletteChanged(p,a,b) (p)->lpVtbl->PaletteChanged(p,a,b) #define IDirect3DTexture2_Load(p,a) (p)->lpVtbl->Load(p,a) #else #define IDirect3DTexture2_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DTexture2_AddRef(p) (p)->AddRef() #define IDirect3DTexture2_Release(p) (p)->Release() #define IDirect3DTexture2_GetHandle(p,a,b) (p)->GetHandle(a,b) #define IDirect3DTexture2_PaletteChanged(p,a,b) (p)->PaletteChanged(a,b) #define IDirect3DTexture2_Load(p,a) (p)->Load(a) #endif #endif /* DIRECT3D_VERSION >= 0x0500 */ /* * Viewport interfaces */ #undef INTERFACE #define INTERFACE IDirect3DViewport DECLARE_INTERFACE_(IDirect3DViewport, IUnknown) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DViewport methods ***/ STDMETHOD(Initialize)(THIS_ LPDIRECT3D) PURE; STDMETHOD(GetViewport)(THIS_ LPD3DVIEWPORT) PURE; STDMETHOD(SetViewport)(THIS_ LPD3DVIEWPORT) PURE; STDMETHOD(TransformVertices)(THIS_ DWORD,LPD3DTRANSFORMDATA,DWORD,LPDWORD) PURE; STDMETHOD(LightElements)(THIS_ DWORD,LPD3DLIGHTDATA) PURE; STDMETHOD(SetBackground)(THIS_ D3DMATERIALHANDLE) PURE; STDMETHOD(GetBackground)(THIS_ LPD3DMATERIALHANDLE,LPBOOL) PURE; STDMETHOD(SetBackgroundDepth)(THIS_ LPDIRECTDRAWSURFACE) PURE; STDMETHOD(GetBackgroundDepth)(THIS_ LPDIRECTDRAWSURFACE*,LPBOOL) PURE; STDMETHOD(Clear)(THIS_ DWORD,LPD3DRECT,DWORD) PURE; STDMETHOD(AddLight)(THIS_ LPDIRECT3DLIGHT) PURE; STDMETHOD(DeleteLight)(THIS_ LPDIRECT3DLIGHT) PURE; STDMETHOD(NextLight)(THIS_ LPDIRECT3DLIGHT,LPDIRECT3DLIGHT*,DWORD) PURE; }; typedef struct IDirect3DViewport *LPDIRECT3DVIEWPORT; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirect3DViewport_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DViewport_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DViewport_Release(p) (p)->lpVtbl->Release(p) #define IDirect3DViewport_Initialize(p,a) (p)->lpVtbl->Initialize(p,a) #define IDirect3DViewport_GetViewport(p,a) (p)->lpVtbl->GetViewport(p,a) #define IDirect3DViewport_SetViewport(p,a) (p)->lpVtbl->SetViewport(p,a) #define IDirect3DViewport_TransformVertices(p,a,b,c,d) (p)->lpVtbl->TransformVertices(p,a,b,c,d) #define IDirect3DViewport_LightElements(p,a,b) (p)->lpVtbl->LightElements(p,a,b) #define IDirect3DViewport_SetBackground(p,a) (p)->lpVtbl->SetBackground(p,a) #define IDirect3DViewport_GetBackground(p,a,b) (p)->lpVtbl->GetBackground(p,a,b) #define IDirect3DViewport_SetBackgroundDepth(p,a) (p)->lpVtbl->SetBackgroundDepth(p,a) #define IDirect3DViewport_GetBackgroundDepth(p,a,b) (p)->lpVtbl->GetBackgroundDepth(p,a,b) #define IDirect3DViewport_Clear(p,a,b,c) (p)->lpVtbl->Clear(p,a,b,c) #define IDirect3DViewport_AddLight(p,a) (p)->lpVtbl->AddLight(p,a) #define IDirect3DViewport_DeleteLight(p,a) (p)->lpVtbl->DeleteLight(p,a) #define IDirect3DViewport_NextLight(p,a,b,c) (p)->lpVtbl->NextLight(p,a,b,c) #else #define IDirect3DViewport_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DViewport_AddRef(p) (p)->AddRef() #define IDirect3DViewport_Release(p) (p)->Release() #define IDirect3DViewport_Initialize(p,a) (p)->Initialize(a) #define IDirect3DViewport_GetViewport(p,a) (p)->GetViewport(a) #define IDirect3DViewport_SetViewport(p,a) (p)->SetViewport(a) #define IDirect3DViewport_TransformVertices(p,a,b,c,d) (p)->TransformVertices(a,b,c,d) #define IDirect3DViewport_LightElements(p,a,b) (p)->LightElements(a,b) #define IDirect3DViewport_SetBackground(p,a) (p)->SetBackground(a) #define IDirect3DViewport_GetBackground(p,a,b) (p)->GetBackground(a,b) #define IDirect3DViewport_SetBackgroundDepth(p,a) (p)->SetBackgroundDepth(a) #define IDirect3DViewport_GetBackgroundDepth(p,a,b) (p)->GetBackgroundDepth(a,b) #define IDirect3DViewport_Clear(p,a,b,c) (p)->Clear(a,b,c) #define IDirect3DViewport_AddLight(p,a) (p)->AddLight(a) #define IDirect3DViewport_DeleteLight(p,a) (p)->DeleteLight(a) #define IDirect3DViewport_NextLight(p,a,b,c) (p)->NextLight(a,b,c) #endif #if(DIRECT3D_VERSION >= 0x0500) #undef INTERFACE #define INTERFACE IDirect3DViewport2 DECLARE_INTERFACE_(IDirect3DViewport2, IDirect3DViewport) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DViewport methods ***/ STDMETHOD(Initialize)(THIS_ LPDIRECT3D) PURE; STDMETHOD(GetViewport)(THIS_ LPD3DVIEWPORT) PURE; STDMETHOD(SetViewport)(THIS_ LPD3DVIEWPORT) PURE; STDMETHOD(TransformVertices)(THIS_ DWORD,LPD3DTRANSFORMDATA,DWORD,LPDWORD) PURE; STDMETHOD(LightElements)(THIS_ DWORD,LPD3DLIGHTDATA) PURE; STDMETHOD(SetBackground)(THIS_ D3DMATERIALHANDLE) PURE; STDMETHOD(GetBackground)(THIS_ LPD3DMATERIALHANDLE,LPBOOL) PURE; STDMETHOD(SetBackgroundDepth)(THIS_ LPDIRECTDRAWSURFACE) PURE; STDMETHOD(GetBackgroundDepth)(THIS_ LPDIRECTDRAWSURFACE*,LPBOOL) PURE; STDMETHOD(Clear)(THIS_ DWORD,LPD3DRECT,DWORD) PURE; STDMETHOD(AddLight)(THIS_ LPDIRECT3DLIGHT) PURE; STDMETHOD(DeleteLight)(THIS_ LPDIRECT3DLIGHT) PURE; STDMETHOD(NextLight)(THIS_ LPDIRECT3DLIGHT,LPDIRECT3DLIGHT*,DWORD) PURE; STDMETHOD(GetViewport2)(THIS_ LPD3DVIEWPORT2) PURE; STDMETHOD(SetViewport2)(THIS_ LPD3DVIEWPORT2) PURE; }; typedef struct IDirect3DViewport2 *LPDIRECT3DVIEWPORT2; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirect3DViewport2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DViewport2_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DViewport2_Release(p) (p)->lpVtbl->Release(p) #define IDirect3DViewport2_Initialize(p,a) (p)->lpVtbl->Initialize(p,a) #define IDirect3DViewport2_GetViewport(p,a) (p)->lpVtbl->GetViewport(p,a) #define IDirect3DViewport2_SetViewport(p,a) (p)->lpVtbl->SetViewport(p,a) #define IDirect3DViewport2_TransformVertices(p,a,b,c,d) (p)->lpVtbl->TransformVertices(p,a,b,c,d) #define IDirect3DViewport2_LightElements(p,a,b) (p)->lpVtbl->LightElements(p,a,b) #define IDirect3DViewport2_SetBackground(p,a) (p)->lpVtbl->SetBackground(p,a) #define IDirect3DViewport2_GetBackground(p,a,b) (p)->lpVtbl->GetBackground(p,a,b) #define IDirect3DViewport2_SetBackgroundDepth(p,a) (p)->lpVtbl->SetBackgroundDepth(p,a) #define IDirect3DViewport2_GetBackgroundDepth(p,a,b) (p)->lpVtbl->GetBackgroundDepth(p,a,b) #define IDirect3DViewport2_Clear(p,a,b,c) (p)->lpVtbl->Clear(p,a,b,c) #define IDirect3DViewport2_AddLight(p,a) (p)->lpVtbl->AddLight(p,a) #define IDirect3DViewport2_DeleteLight(p,a) (p)->lpVtbl->DeleteLight(p,a) #define IDirect3DViewport2_NextLight(p,a,b,c) (p)->lpVtbl->NextLight(p,a,b,c) #define IDirect3DViewport2_GetViewport2(p,a) (p)->lpVtbl->GetViewport2(p,a) #define IDirect3DViewport2_SetViewport2(p,a) (p)->lpVtbl->SetViewport2(p,a) #else #define IDirect3DViewport2_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DViewport2_AddRef(p) (p)->AddRef() #define IDirect3DViewport2_Release(p) (p)->Release() #define IDirect3DViewport2_Initialize(p,a) (p)->Initialize(a) #define IDirect3DViewport2_GetViewport(p,a) (p)->GetViewport(a) #define IDirect3DViewport2_SetViewport(p,a) (p)->SetViewport(a) #define IDirect3DViewport2_TransformVertices(p,a,b,c,d) (p)->TransformVertices(a,b,c,d) #define IDirect3DViewport2_LightElements(p,a,b) (p)->LightElements(a,b) #define IDirect3DViewport2_SetBackground(p,a) (p)->SetBackground(a) #define IDirect3DViewport2_GetBackground(p,a,b) (p)->GetBackground(a,b) #define IDirect3DViewport2_SetBackgroundDepth(p,a) (p)->SetBackgroundDepth(a) #define IDirect3DViewport2_GetBackgroundDepth(p,a,b) (p)->GetBackgroundDepth(a,b) #define IDirect3DViewport2_Clear(p,a,b,c) (p)->Clear(a,b,c) #define IDirect3DViewport2_AddLight(p,a) (p)->AddLight(a) #define IDirect3DViewport2_DeleteLight(p,a) (p)->DeleteLight(a) #define IDirect3DViewport2_NextLight(p,a,b,c) (p)->NextLight(a,b,c) #define IDirect3DViewport2_GetViewport2(p,a) (p)->GetViewport2(a) #define IDirect3DViewport2_SetViewport2(p,a) (p)->SetViewport2(a) #endif #endif /* DIRECT3D_VERSION >= 0x0500 */ #if(DIRECT3D_VERSION >= 0x0600) #undef INTERFACE #define INTERFACE IDirect3DViewport3 DECLARE_INTERFACE_(IDirect3DViewport3, IDirect3DViewport2) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DViewport2 methods ***/ STDMETHOD(Initialize)(THIS_ LPDIRECT3D) PURE; STDMETHOD(GetViewport)(THIS_ LPD3DVIEWPORT) PURE; STDMETHOD(SetViewport)(THIS_ LPD3DVIEWPORT) PURE; STDMETHOD(TransformVertices)(THIS_ DWORD,LPD3DTRANSFORMDATA,DWORD,LPDWORD) PURE; STDMETHOD(LightElements)(THIS_ DWORD,LPD3DLIGHTDATA) PURE; STDMETHOD(SetBackground)(THIS_ D3DMATERIALHANDLE) PURE; STDMETHOD(GetBackground)(THIS_ LPD3DMATERIALHANDLE,LPBOOL) PURE; STDMETHOD(SetBackgroundDepth)(THIS_ LPDIRECTDRAWSURFACE) PURE; STDMETHOD(GetBackgroundDepth)(THIS_ LPDIRECTDRAWSURFACE*,LPBOOL) PURE; STDMETHOD(Clear)(THIS_ DWORD,LPD3DRECT,DWORD) PURE; STDMETHOD(AddLight)(THIS_ LPDIRECT3DLIGHT) PURE; STDMETHOD(DeleteLight)(THIS_ LPDIRECT3DLIGHT) PURE; STDMETHOD(NextLight)(THIS_ LPDIRECT3DLIGHT,LPDIRECT3DLIGHT*,DWORD) PURE; STDMETHOD(GetViewport2)(THIS_ LPD3DVIEWPORT2) PURE; STDMETHOD(SetViewport2)(THIS_ LPD3DVIEWPORT2) PURE; STDMETHOD(SetBackgroundDepth2)(THIS_ LPDIRECTDRAWSURFACE4) PURE; STDMETHOD(GetBackgroundDepth2)(THIS_ LPDIRECTDRAWSURFACE4*,LPBOOL) PURE; STDMETHOD(Clear2)(THIS_ DWORD,LPD3DRECT,DWORD,D3DCOLOR,D3DVALUE,DWORD) PURE; }; typedef struct IDirect3DViewport3 *LPDIRECT3DVIEWPORT3; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirect3DViewport3_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DViewport3_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DViewport3_Release(p) (p)->lpVtbl->Release(p) #define IDirect3DViewport3_Initialize(p,a) (p)->lpVtbl->Initialize(p,a) #define IDirect3DViewport3_GetViewport(p,a) (p)->lpVtbl->GetViewport(p,a) #define IDirect3DViewport3_SetViewport(p,a) (p)->lpVtbl->SetViewport(p,a) #define IDirect3DViewport3_TransformVertices(p,a,b,c,d) (p)->lpVtbl->TransformVertices(p,a,b,c,d) #define IDirect3DViewport3_LightElements(p,a,b) (p)->lpVtbl->LightElements(p,a,b) #define IDirect3DViewport3_SetBackground(p,a) (p)->lpVtbl->SetBackground(p,a) #define IDirect3DViewport3_GetBackground(p,a,b) (p)->lpVtbl->GetBackground(p,a,b) #define IDirect3DViewport3_SetBackgroundDepth(p,a) (p)->lpVtbl->SetBackgroundDepth(p,a) #define IDirect3DViewport3_GetBackgroundDepth(p,a,b) (p)->lpVtbl->GetBackgroundDepth(p,a,b) #define IDirect3DViewport3_Clear(p,a,b,c) (p)->lpVtbl->Clear(p,a,b,c) #define IDirect3DViewport3_AddLight(p,a) (p)->lpVtbl->AddLight(p,a) #define IDirect3DViewport3_DeleteLight(p,a) (p)->lpVtbl->DeleteLight(p,a) #define IDirect3DViewport3_NextLight(p,a,b,c) (p)->lpVtbl->NextLight(p,a,b,c) #define IDirect3DViewport3_GetViewport2(p,a) (p)->lpVtbl->GetViewport2(p,a) #define IDirect3DViewport3_SetViewport2(p,a) (p)->lpVtbl->SetViewport2(p,a) #define IDirect3DViewport3_SetBackgroundDepth2(p,a) (p)->lpVtbl->SetBackgroundDepth2(p,a) #define IDirect3DViewport3_GetBackgroundDepth2(p,a,b) (p)->lpVtbl->GetBackgroundDepth2(p,a,b) #define IDirect3DViewport3_Clear2(p,a,b,c,d,e,f) (p)->lpVtbl->Clear2(p,a,b,c,d,e,f) #else #define IDirect3DViewport3_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DViewport3_AddRef(p) (p)->AddRef() #define IDirect3DViewport3_Release(p) (p)->Release() #define IDirect3DViewport3_Initialize(p,a) (p)->Initialize(a) #define IDirect3DViewport3_GetViewport(p,a) (p)->GetViewport(a) #define IDirect3DViewport3_SetViewport(p,a) (p)->SetViewport(a) #define IDirect3DViewport3_TransformVertices(p,a,b,c,d) (p)->TransformVertices(a,b,c,d) #define IDirect3DViewport3_LightElements(p,a,b) (p)->LightElements(a,b) #define IDirect3DViewport3_SetBackground(p,a) (p)->SetBackground(a) #define IDirect3DViewport3_GetBackground(p,a,b) (p)->GetBackground(a,b) #define IDirect3DViewport3_SetBackgroundDepth(p,a) (p)->SetBackgroundDepth(a) #define IDirect3DViewport3_GetBackgroundDepth(p,a,b) (p)->GetBackgroundDepth(a,b) #define IDirect3DViewport3_Clear(p,a,b,c) (p)->Clear(a,b,c) #define IDirect3DViewport3_AddLight(p,a) (p)->AddLight(a) #define IDirect3DViewport3_DeleteLight(p,a) (p)->DeleteLight(a) #define IDirect3DViewport3_NextLight(p,a,b,c) (p)->NextLight(a,b,c) #define IDirect3DViewport3_GetViewport2(p,a) (p)->GetViewport2(a) #define IDirect3DViewport3_SetViewport2(p,a) (p)->SetViewport2(a) #define IDirect3DViewport3_SetBackgroundDepth2(p,a) (p)->SetBackgroundDepth2(a) #define IDirect3DViewport3_GetBackgroundDepth2(p,a,b) (p)->GetBackgroundDepth2(a,b) #define IDirect3DViewport3_Clear2(p,a,b,c,d,e,f) (p)->Clear2(a,b,c,d,e,f) #endif #endif /* DIRECT3D_VERSION >= 0x0600 */ #if(DIRECT3D_VERSION >= 0x0600) #undef INTERFACE #define INTERFACE IDirect3DVertexBuffer DECLARE_INTERFACE_(IDirect3DVertexBuffer, IUnknown) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DVertexBuffer methods ***/ STDMETHOD(Lock)(THIS_ DWORD,LPVOID*,LPDWORD) PURE; STDMETHOD(Unlock)(THIS) PURE; STDMETHOD(ProcessVertices)(THIS_ DWORD,DWORD,DWORD,LPDIRECT3DVERTEXBUFFER,DWORD,LPDIRECT3DDEVICE3,DWORD) PURE; STDMETHOD(GetVertexBufferDesc)(THIS_ LPD3DVERTEXBUFFERDESC) PURE; STDMETHOD(Optimize)(THIS_ LPDIRECT3DDEVICE3,DWORD) PURE; }; typedef struct IDirect3DVertexBuffer *LPDIRECT3DVERTEXBUFFER; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirect3DVertexBuffer_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DVertexBuffer_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DVertexBuffer_Release(p) (p)->lpVtbl->Release(p) #define IDirect3DVertexBuffer_Lock(p,a,b,c) (p)->lpVtbl->Lock(p,a,b,c) #define IDirect3DVertexBuffer_Unlock(p) (p)->lpVtbl->Unlock(p) #define IDirect3DVertexBuffer_ProcessVertices(p,a,b,c,d,e,f,g) (p)->lpVtbl->ProcessVertices(p,a,b,c,d,e,f,g) #define IDirect3DVertexBuffer_GetVertexBufferDesc(p,a) (p)->lpVtbl->GetVertexBufferDesc(p,a) #define IDirect3DVertexBuffer_Optimize(p,a,b) (p)->lpVtbl->Optimize(p,a,b) #else #define IDirect3DVertexBuffer_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DVertexBuffer_AddRef(p) (p)->AddRef() #define IDirect3DVertexBuffer_Release(p) (p)->Release() #define IDirect3DVertexBuffer_Lock(p,a,b,c) (p)->Lock(a,b,c) #define IDirect3DVertexBuffer_Unlock(p) (p)->Unlock() #define IDirect3DVertexBuffer_ProcessVertices(p,a,b,c,d,e,f,g) (p)->ProcessVertices(a,b,c,d,e,f,g) #define IDirect3DVertexBuffer_GetVertexBufferDesc(p,a) (p)->GetVertexBufferDesc(a) #define IDirect3DVertexBuffer_Optimize(p,a,b) (p)->Optimize(a,b) #endif #endif /* DIRECT3D_VERSION >= 0x0600 */ #if(DIRECT3D_VERSION >= 0x0700) #undef INTERFACE #define INTERFACE IDirect3DVertexBuffer7 DECLARE_INTERFACE_(IDirect3DVertexBuffer7, IUnknown) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DVertexBuffer7 methods ***/ STDMETHOD(Lock)(THIS_ DWORD,LPVOID*,LPDWORD) PURE; STDMETHOD(Unlock)(THIS) PURE; STDMETHOD(ProcessVertices)(THIS_ DWORD,DWORD,DWORD,LPDIRECT3DVERTEXBUFFER7,DWORD,LPDIRECT3DDEVICE7,DWORD) PURE; STDMETHOD(GetVertexBufferDesc)(THIS_ LPD3DVERTEXBUFFERDESC) PURE; STDMETHOD(Optimize)(THIS_ LPDIRECT3DDEVICE7,DWORD) PURE; STDMETHOD(ProcessVerticesStrided)(THIS_ DWORD,DWORD,DWORD,LPD3DDRAWPRIMITIVESTRIDEDDATA,DWORD,LPDIRECT3DDEVICE7,DWORD) PURE; }; typedef struct IDirect3DVertexBuffer7 *LPDIRECT3DVERTEXBUFFER7; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirect3DVertexBuffer7_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DVertexBuffer7_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DVertexBuffer7_Release(p) (p)->lpVtbl->Release(p) #define IDirect3DVertexBuffer7_Lock(p,a,b,c) (p)->lpVtbl->Lock(p,a,b,c) #define IDirect3DVertexBuffer7_Unlock(p) (p)->lpVtbl->Unlock(p) #define IDirect3DVertexBuffer7_ProcessVertices(p,a,b,c,d,e,f,g) (p)->lpVtbl->ProcessVertices(p,a,b,c,d,e,f,g) #define IDirect3DVertexBuffer7_GetVertexBufferDesc(p,a) (p)->lpVtbl->GetVertexBufferDesc(p,a) #define IDirect3DVertexBuffer7_Optimize(p,a,b) (p)->lpVtbl->Optimize(p,a,b) #define IDirect3DVertexBuffer7_ProcessVerticesStrided(p,a,b,c,d,e,f,g) (p)->lpVtbl->ProcessVerticesStrided(p,a,b,c,d,e,f,g) #else #define IDirect3DVertexBuffer7_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DVertexBuffer7_AddRef(p) (p)->AddRef() #define IDirect3DVertexBuffer7_Release(p) (p)->Release() #define IDirect3DVertexBuffer7_Lock(p,a,b,c) (p)->Lock(a,b,c) #define IDirect3DVertexBuffer7_Unlock(p) (p)->Unlock() #define IDirect3DVertexBuffer7_ProcessVertices(p,a,b,c,d,e,f,g) (p)->ProcessVertices(a,b,c,d,e,f,g) #define IDirect3DVertexBuffer7_GetVertexBufferDesc(p,a) (p)->GetVertexBufferDesc(a) #define IDirect3DVertexBuffer7_Optimize(p,a,b) (p)->Optimize(a,b) #define IDirect3DVertexBuffer7_ProcessVerticesStrided(p,a,b,c,d,e,f,g) (p)->ProcessVerticesStrided(a,b,c,d,e,f,g) #endif #endif /* DIRECT3D_VERSION >= 0x0700 */ #if(DIRECT3D_VERSION >= 0x0500) /**************************************************************************** * * Flags for IDirect3DDevice::NextViewport * ****************************************************************************/ /* * Return the next viewport */ #define D3DNEXT_NEXT 0x00000001l /* * Return the first viewport */ #define D3DNEXT_HEAD 0x00000002l /* * Return the last viewport */ #define D3DNEXT_TAIL 0x00000004l /**************************************************************************** * * Flags for DrawPrimitive/DrawIndexedPrimitive * Also valid for Begin/BeginIndexed * Also valid for VertexBuffer::CreateVertexBuffer ****************************************************************************/ /* * Wait until the device is ready to draw the primitive * This will cause DP to not return DDERR_WASSTILLDRAWING */ #define D3DDP_WAIT 0x00000001l #endif /* DIRECT3D_VERSION >= 0x0500 */ #if (DIRECT3D_VERSION == 0x0500) /* * Hint that it is acceptable to render the primitive out of order. */ #define D3DDP_OUTOFORDER 0x00000002l #endif #if(DIRECT3D_VERSION >= 0x0500) /* * Hint that the primitives have been clipped by the application. */ #define D3DDP_DONOTCLIP 0x00000004l /* * Hint that the extents need not be updated. */ #define D3DDP_DONOTUPDATEEXTENTS 0x00000008l #endif /* DIRECT3D_VERSION >= 0x0500 */ #if(DIRECT3D_VERSION >= 0x0600) /* * Hint that the lighting should not be applied on vertices. */ #define D3DDP_DONOTLIGHT 0x00000010l #endif /* DIRECT3D_VERSION >= 0x0600 */ /* * Direct3D Errors * DirectDraw error codes are used when errors not specified here. */ #define D3D_OK DD_OK #define D3DERR_BADMAJORVERSION MAKE_DDHRESULT(700) #define D3DERR_BADMINORVERSION MAKE_DDHRESULT(701) #if(DIRECT3D_VERSION >= 0x0500) /* * An invalid device was requested by the application. */ #define D3DERR_INVALID_DEVICE MAKE_DDHRESULT(705) #define D3DERR_INITFAILED MAKE_DDHRESULT(706) /* * SetRenderTarget attempted on a device that was * QI'd off the render target. */ #define D3DERR_DEVICEAGGREGATED MAKE_DDHRESULT(707) #endif /* DIRECT3D_VERSION >= 0x0500 */ #define D3DERR_EXECUTE_CREATE_FAILED MAKE_DDHRESULT(710) #define D3DERR_EXECUTE_DESTROY_FAILED MAKE_DDHRESULT(711) #define D3DERR_EXECUTE_LOCK_FAILED MAKE_DDHRESULT(712) #define D3DERR_EXECUTE_UNLOCK_FAILED MAKE_DDHRESULT(713) #define D3DERR_EXECUTE_LOCKED MAKE_DDHRESULT(714) #define D3DERR_EXECUTE_NOT_LOCKED MAKE_DDHRESULT(715) #define D3DERR_EXECUTE_FAILED MAKE_DDHRESULT(716) #define D3DERR_EXECUTE_CLIPPED_FAILED MAKE_DDHRESULT(717) #define D3DERR_TEXTURE_NO_SUPPORT MAKE_DDHRESULT(720) #define D3DERR_TEXTURE_CREATE_FAILED MAKE_DDHRESULT(721) #define D3DERR_TEXTURE_DESTROY_FAILED MAKE_DDHRESULT(722) #define D3DERR_TEXTURE_LOCK_FAILED MAKE_DDHRESULT(723) #define D3DERR_TEXTURE_UNLOCK_FAILED MAKE_DDHRESULT(724) #define D3DERR_TEXTURE_LOAD_FAILED MAKE_DDHRESULT(725) #define D3DERR_TEXTURE_SWAP_FAILED MAKE_DDHRESULT(726) #define D3DERR_TEXTURE_LOCKED MAKE_DDHRESULT(727) #define D3DERR_TEXTURE_NOT_LOCKED MAKE_DDHRESULT(728) #define D3DERR_TEXTURE_GETSURF_FAILED MAKE_DDHRESULT(729) #define D3DERR_MATRIX_CREATE_FAILED MAKE_DDHRESULT(730) #define D3DERR_MATRIX_DESTROY_FAILED MAKE_DDHRESULT(731) #define D3DERR_MATRIX_SETDATA_FAILED MAKE_DDHRESULT(732) #define D3DERR_MATRIX_GETDATA_FAILED MAKE_DDHRESULT(733) #define D3DERR_SETVIEWPORTDATA_FAILED MAKE_DDHRESULT(734) #if(DIRECT3D_VERSION >= 0x0500) #define D3DERR_INVALIDCURRENTVIEWPORT MAKE_DDHRESULT(735) #define D3DERR_INVALIDPRIMITIVETYPE MAKE_DDHRESULT(736) #define D3DERR_INVALIDVERTEXTYPE MAKE_DDHRESULT(737) #define D3DERR_TEXTURE_BADSIZE MAKE_DDHRESULT(738) #define D3DERR_INVALIDRAMPTEXTURE MAKE_DDHRESULT(739) #endif /* DIRECT3D_VERSION >= 0x0500 */ #define D3DERR_MATERIAL_CREATE_FAILED MAKE_DDHRESULT(740) #define D3DERR_MATERIAL_DESTROY_FAILED MAKE_DDHRESULT(741) #define D3DERR_MATERIAL_SETDATA_FAILED MAKE_DDHRESULT(742) #define D3DERR_MATERIAL_GETDATA_FAILED MAKE_DDHRESULT(743) #if(DIRECT3D_VERSION >= 0x0500) #define D3DERR_INVALIDPALETTE MAKE_DDHRESULT(744) #define D3DERR_ZBUFF_NEEDS_SYSTEMMEMORY MAKE_DDHRESULT(745) #define D3DERR_ZBUFF_NEEDS_VIDEOMEMORY MAKE_DDHRESULT(746) #define D3DERR_SURFACENOTINVIDMEM MAKE_DDHRESULT(747) #endif /* DIRECT3D_VERSION >= 0x0500 */ #define D3DERR_LIGHT_SET_FAILED MAKE_DDHRESULT(750) #if(DIRECT3D_VERSION >= 0x0500) #define D3DERR_LIGHTHASVIEWPORT MAKE_DDHRESULT(751) #define D3DERR_LIGHTNOTINTHISVIEWPORT MAKE_DDHRESULT(752) #endif /* DIRECT3D_VERSION >= 0x0500 */ #define D3DERR_SCENE_IN_SCENE MAKE_DDHRESULT(760) #define D3DERR_SCENE_NOT_IN_SCENE MAKE_DDHRESULT(761) #define D3DERR_SCENE_BEGIN_FAILED MAKE_DDHRESULT(762) #define D3DERR_SCENE_END_FAILED MAKE_DDHRESULT(763) #if(DIRECT3D_VERSION >= 0x0500) #define D3DERR_INBEGIN MAKE_DDHRESULT(770) #define D3DERR_NOTINBEGIN MAKE_DDHRESULT(771) #define D3DERR_NOVIEWPORTS MAKE_DDHRESULT(772) #define D3DERR_VIEWPORTDATANOTSET MAKE_DDHRESULT(773) #define D3DERR_VIEWPORTHASNODEVICE MAKE_DDHRESULT(774) #define D3DERR_NOCURRENTVIEWPORT MAKE_DDHRESULT(775) #endif /* DIRECT3D_VERSION >= 0x0500 */ #if(DIRECT3D_VERSION >= 0x0600) #define D3DERR_INVALIDVERTEXFORMAT MAKE_DDHRESULT(2048) /* * Attempted to CreateTexture on a surface that had a color key */ #define D3DERR_COLORKEYATTACHED MAKE_DDHRESULT(2050) #define D3DERR_VERTEXBUFFEROPTIMIZED MAKE_DDHRESULT(2060) #define D3DERR_VBUF_CREATE_FAILED MAKE_DDHRESULT(2061) #define D3DERR_VERTEXBUFFERLOCKED MAKE_DDHRESULT(2062) #define D3DERR_VERTEXBUFFERUNLOCKFAILED MAKE_DDHRESULT(2063) #define D3DERR_ZBUFFER_NOTPRESENT MAKE_DDHRESULT(2070) #define D3DERR_STENCILBUFFER_NOTPRESENT MAKE_DDHRESULT(2071) #define D3DERR_WRONGTEXTUREFORMAT MAKE_DDHRESULT(2072) #define D3DERR_UNSUPPORTEDCOLOROPERATION MAKE_DDHRESULT(2073) #define D3DERR_UNSUPPORTEDCOLORARG MAKE_DDHRESULT(2074) #define D3DERR_UNSUPPORTEDALPHAOPERATION MAKE_DDHRESULT(2075) #define D3DERR_UNSUPPORTEDALPHAARG MAKE_DDHRESULT(2076) #define D3DERR_TOOMANYOPERATIONS MAKE_DDHRESULT(2077) #define D3DERR_CONFLICTINGTEXTUREFILTER MAKE_DDHRESULT(2078) #define D3DERR_UNSUPPORTEDFACTORVALUE MAKE_DDHRESULT(2079) #define D3DERR_CONFLICTINGRENDERSTATE MAKE_DDHRESULT(2081) #define D3DERR_UNSUPPORTEDTEXTUREFILTER MAKE_DDHRESULT(2082) #define D3DERR_TOOMANYPRIMITIVES MAKE_DDHRESULT(2083) #define D3DERR_INVALIDMATRIX MAKE_DDHRESULT(2084) #define D3DERR_TOOMANYVERTICES MAKE_DDHRESULT(2085) #define D3DERR_CONFLICTINGTEXTUREPALETTE MAKE_DDHRESULT(2086) #endif /* DIRECT3D_VERSION >= 0x0600 */ #if(DIRECT3D_VERSION >= 0x0700) #define D3DERR_INVALIDSTATEBLOCK MAKE_DDHRESULT(2100) #define D3DERR_INBEGINSTATEBLOCK MAKE_DDHRESULT(2101) #define D3DERR_NOTINBEGINSTATEBLOCK MAKE_DDHRESULT(2102) #endif /* DIRECT3D_VERSION >= 0x0700 */ #ifdef __cplusplus }; #endif #endif /* (DIRECT3D_VERSION < 0x0800) */ #endif /* _D3D_H_ */ ================================================ FILE: Include/d3d10misc.h ================================================ ////////////////////////////////////////////////////////////////////////////// // // Copyright (c) Microsoft Corporation. All rights reserved. // // File: D3D10Misc.h // Content: D3D10 Device Creation APIs // ////////////////////////////////////////////////////////////////////////////// #ifndef __D3D10MISC_H__ #define __D3D10MISC_H__ #include "d3d10.h" // ID3D10Blob has been made version-neutral and moved to d3dcommon.h. #ifdef __cplusplus extern "C" { #endif //__cplusplus /////////////////////////////////////////////////////////////////////////// // D3D10_DRIVER_TYPE // ---------------- // // This identifier is used to determine the implementation of Direct3D10 // to be used. // // Pass one of these values to D3D10CreateDevice // /////////////////////////////////////////////////////////////////////////// typedef enum D3D10_DRIVER_TYPE { D3D10_DRIVER_TYPE_HARDWARE = 0, D3D10_DRIVER_TYPE_REFERENCE = 1, D3D10_DRIVER_TYPE_NULL = 2, D3D10_DRIVER_TYPE_SOFTWARE = 3, D3D10_DRIVER_TYPE_WARP = 5, } D3D10_DRIVER_TYPE; DEFINE_GUID(GUID_DeviceType, 0xd722fb4d, 0x7a68, 0x437a, 0xb2, 0x0c, 0x58, 0x04, 0xee, 0x24, 0x94, 0xa6); /////////////////////////////////////////////////////////////////////////// // D3D10CreateDevice // ------------------ // // pAdapter // If NULL, D3D10CreateDevice will choose the primary adapter and // create a new instance from a temporarily created IDXGIFactory. // If non-NULL, D3D10CreateDevice will register the appropriate // device, if necessary (via IDXGIAdapter::RegisterDrver), before // creating the device. // DriverType // Specifies the driver type to be created: hardware, reference or // null. // Software // HMODULE of a DLL implementing a software rasterizer. Must be NULL for // non-Software driver types. // Flags // Any of those documented for D3D10CreateDevice. // SDKVersion // SDK version. Use the D3D10_SDK_VERSION macro. // ppDevice // Pointer to returned interface. // // Return Values // Any of those documented for // CreateDXGIFactory // IDXGIFactory::EnumAdapters // IDXGIAdapter::RegisterDriver // D3D10CreateDevice // /////////////////////////////////////////////////////////////////////////// HRESULT WINAPI D3D10CreateDevice( IDXGIAdapter *pAdapter, D3D10_DRIVER_TYPE DriverType, HMODULE Software, UINT Flags, UINT SDKVersion, ID3D10Device **ppDevice); /////////////////////////////////////////////////////////////////////////// // D3D10CreateDeviceAndSwapChain // ------------------------------ // // ppAdapter // If NULL, D3D10CreateDevice will choose the primary adapter and // create a new instance from a temporarily created IDXGIFactory. // If non-NULL, D3D10CreateDevice will register the appropriate // device, if necessary (via IDXGIAdapter::RegisterDrver), before // creating the device. // DriverType // Specifies the driver type to be created: hardware, reference or // null. // Software // HMODULE of a DLL implementing a software rasterizer. Must be NULL for // non-Software driver types. // Flags // Any of those documented for D3D10CreateDevice. // SDKVersion // SDK version. Use the D3D10_SDK_VERSION macro. // pSwapChainDesc // Swap chain description, may be NULL. // ppSwapChain // Pointer to returned interface. May be NULL. // ppDevice // Pointer to returned interface. // // Return Values // Any of those documented for // CreateDXGIFactory // IDXGIFactory::EnumAdapters // IDXGIAdapter::RegisterDriver // D3D10CreateDevice // IDXGIFactory::CreateSwapChain // /////////////////////////////////////////////////////////////////////////// HRESULT WINAPI D3D10CreateDeviceAndSwapChain( IDXGIAdapter *pAdapter, D3D10_DRIVER_TYPE DriverType, HMODULE Software, UINT Flags, UINT SDKVersion, DXGI_SWAP_CHAIN_DESC *pSwapChainDesc, IDXGISwapChain **ppSwapChain, ID3D10Device **ppDevice); /////////////////////////////////////////////////////////////////////////// // D3D10CreateBlob: // ----------------- // Creates a Buffer of n Bytes ////////////////////////////////////////////////////////////////////////// HRESULT WINAPI D3D10CreateBlob(SIZE_T NumBytes, LPD3D10BLOB *ppBuffer); #ifdef __cplusplus } #endif //__cplusplus #endif //__D3D10EFFECT_H__ ================================================ FILE: Include/d3d10sdklayers.h ================================================ /* this ALWAYS GENERATED file contains the definitions for the interfaces */ /* File created by MIDL compiler version 7.00.0555 */ /* Compiler settings for d3d10sdklayers.idl: Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 7.00.0555 protocol : all , ms_ext, c_ext, robust error checks: allocation ref bounds_check enum stub_data VC __declspec() decoration level: __declspec(uuid()), __declspec(selectany), __declspec(novtable) DECLSPEC_UUID(), MIDL_INTERFACE() */ /* @@MIDL_FILE_HEADING( ) */ #pragma warning( disable: 4049 ) /* more than 64k source lines */ /* verify that the version is high enough to compile this file*/ #ifndef __REQUIRED_RPCNDR_H_VERSION__ #define __REQUIRED_RPCNDR_H_VERSION__ 475 #endif /* verify that the version is high enough to compile this file*/ #ifndef __REQUIRED_RPCSAL_H_VERSION__ #define __REQUIRED_RPCSAL_H_VERSION__ 100 #endif #include "rpc.h" #include "rpcndr.h" #ifndef __RPCNDR_H_VERSION__ #error this stub requires an updated version of #endif // __RPCNDR_H_VERSION__ #ifndef COM_NO_WINDOWS_H #include "windows.h" #include "ole2.h" #endif /*COM_NO_WINDOWS_H*/ #ifndef __d3d10sdklayers_h__ #define __d3d10sdklayers_h__ #if defined(_MSC_VER) && (_MSC_VER >= 1020) #pragma once #endif /* Forward Declarations */ #ifndef __ID3D10Debug_FWD_DEFINED__ #define __ID3D10Debug_FWD_DEFINED__ typedef interface ID3D10Debug ID3D10Debug; #endif /* __ID3D10Debug_FWD_DEFINED__ */ #ifndef __ID3D10SwitchToRef_FWD_DEFINED__ #define __ID3D10SwitchToRef_FWD_DEFINED__ typedef interface ID3D10SwitchToRef ID3D10SwitchToRef; #endif /* __ID3D10SwitchToRef_FWD_DEFINED__ */ #ifndef __ID3D10InfoQueue_FWD_DEFINED__ #define __ID3D10InfoQueue_FWD_DEFINED__ typedef interface ID3D10InfoQueue ID3D10InfoQueue; #endif /* __ID3D10InfoQueue_FWD_DEFINED__ */ /* header files for imported files */ #include "oaidl.h" #include "ocidl.h" #include "dxgi.h" #ifdef __cplusplus extern "C"{ #endif /* interface __MIDL_itf_d3d10sdklayers_0000_0000 */ /* [local] */ #define D3D10_SDK_LAYERS_VERSION ( 11 ) #define D3D10_DEBUG_FEATURE_FLUSH_PER_RENDER_OP ( 0x1 ) #define D3D10_DEBUG_FEATURE_FINISH_PER_RENDER_OP ( 0x2 ) #define D3D10_DEBUG_FEATURE_PRESENT_PER_RENDER_OP ( 0x4 ) extern RPC_IF_HANDLE __MIDL_itf_d3d10sdklayers_0000_0000_v0_0_c_ifspec; extern RPC_IF_HANDLE __MIDL_itf_d3d10sdklayers_0000_0000_v0_0_s_ifspec; #ifndef __ID3D10Debug_INTERFACE_DEFINED__ #define __ID3D10Debug_INTERFACE_DEFINED__ /* interface ID3D10Debug */ /* [unique][local][object][uuid] */ EXTERN_C const IID IID_ID3D10Debug; #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("9B7E4E01-342C-4106-A19F-4F2704F689F0") ID3D10Debug : public IUnknown { public: virtual HRESULT STDMETHODCALLTYPE SetFeatureMask( UINT Mask) = 0; virtual UINT STDMETHODCALLTYPE GetFeatureMask( void) = 0; virtual HRESULT STDMETHODCALLTYPE SetPresentPerRenderOpDelay( UINT Milliseconds) = 0; virtual UINT STDMETHODCALLTYPE GetPresentPerRenderOpDelay( void) = 0; virtual HRESULT STDMETHODCALLTYPE SetSwapChain( /* [annotation] */ __in_opt IDXGISwapChain *pSwapChain) = 0; virtual HRESULT STDMETHODCALLTYPE GetSwapChain( /* [annotation] */ __out IDXGISwapChain **ppSwapChain) = 0; virtual HRESULT STDMETHODCALLTYPE Validate( void) = 0; }; #else /* C style interface */ typedef struct ID3D10DebugVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ID3D10Debug * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ __RPC__deref_out void **ppvObject); ULONG ( STDMETHODCALLTYPE *AddRef )( ID3D10Debug * This); ULONG ( STDMETHODCALLTYPE *Release )( ID3D10Debug * This); HRESULT ( STDMETHODCALLTYPE *SetFeatureMask )( ID3D10Debug * This, UINT Mask); UINT ( STDMETHODCALLTYPE *GetFeatureMask )( ID3D10Debug * This); HRESULT ( STDMETHODCALLTYPE *SetPresentPerRenderOpDelay )( ID3D10Debug * This, UINT Milliseconds); UINT ( STDMETHODCALLTYPE *GetPresentPerRenderOpDelay )( ID3D10Debug * This); HRESULT ( STDMETHODCALLTYPE *SetSwapChain )( ID3D10Debug * This, /* [annotation] */ __in_opt IDXGISwapChain *pSwapChain); HRESULT ( STDMETHODCALLTYPE *GetSwapChain )( ID3D10Debug * This, /* [annotation] */ __out IDXGISwapChain **ppSwapChain); HRESULT ( STDMETHODCALLTYPE *Validate )( ID3D10Debug * This); END_INTERFACE } ID3D10DebugVtbl; interface ID3D10Debug { CONST_VTBL struct ID3D10DebugVtbl *lpVtbl; }; #ifdef COBJMACROS #define ID3D10Debug_QueryInterface(This,riid,ppvObject) \ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) #define ID3D10Debug_AddRef(This) \ ( (This)->lpVtbl -> AddRef(This) ) #define ID3D10Debug_Release(This) \ ( (This)->lpVtbl -> Release(This) ) #define ID3D10Debug_SetFeatureMask(This,Mask) \ ( (This)->lpVtbl -> SetFeatureMask(This,Mask) ) #define ID3D10Debug_GetFeatureMask(This) \ ( (This)->lpVtbl -> GetFeatureMask(This) ) #define ID3D10Debug_SetPresentPerRenderOpDelay(This,Milliseconds) \ ( (This)->lpVtbl -> SetPresentPerRenderOpDelay(This,Milliseconds) ) #define ID3D10Debug_GetPresentPerRenderOpDelay(This) \ ( (This)->lpVtbl -> GetPresentPerRenderOpDelay(This) ) #define ID3D10Debug_SetSwapChain(This,pSwapChain) \ ( (This)->lpVtbl -> SetSwapChain(This,pSwapChain) ) #define ID3D10Debug_GetSwapChain(This,ppSwapChain) \ ( (This)->lpVtbl -> GetSwapChain(This,ppSwapChain) ) #define ID3D10Debug_Validate(This) \ ( (This)->lpVtbl -> Validate(This) ) #endif /* COBJMACROS */ #endif /* C style interface */ #endif /* __ID3D10Debug_INTERFACE_DEFINED__ */ #ifndef __ID3D10SwitchToRef_INTERFACE_DEFINED__ #define __ID3D10SwitchToRef_INTERFACE_DEFINED__ /* interface ID3D10SwitchToRef */ /* [unique][local][object][uuid] */ EXTERN_C const IID IID_ID3D10SwitchToRef; #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("9B7E4E02-342C-4106-A19F-4F2704F689F0") ID3D10SwitchToRef : public IUnknown { public: virtual BOOL STDMETHODCALLTYPE SetUseRef( BOOL UseRef) = 0; virtual BOOL STDMETHODCALLTYPE GetUseRef( void) = 0; }; #else /* C style interface */ typedef struct ID3D10SwitchToRefVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ID3D10SwitchToRef * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ __RPC__deref_out void **ppvObject); ULONG ( STDMETHODCALLTYPE *AddRef )( ID3D10SwitchToRef * This); ULONG ( STDMETHODCALLTYPE *Release )( ID3D10SwitchToRef * This); BOOL ( STDMETHODCALLTYPE *SetUseRef )( ID3D10SwitchToRef * This, BOOL UseRef); BOOL ( STDMETHODCALLTYPE *GetUseRef )( ID3D10SwitchToRef * This); END_INTERFACE } ID3D10SwitchToRefVtbl; interface ID3D10SwitchToRef { CONST_VTBL struct ID3D10SwitchToRefVtbl *lpVtbl; }; #ifdef COBJMACROS #define ID3D10SwitchToRef_QueryInterface(This,riid,ppvObject) \ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) #define ID3D10SwitchToRef_AddRef(This) \ ( (This)->lpVtbl -> AddRef(This) ) #define ID3D10SwitchToRef_Release(This) \ ( (This)->lpVtbl -> Release(This) ) #define ID3D10SwitchToRef_SetUseRef(This,UseRef) \ ( (This)->lpVtbl -> SetUseRef(This,UseRef) ) #define ID3D10SwitchToRef_GetUseRef(This) \ ( (This)->lpVtbl -> GetUseRef(This) ) #endif /* COBJMACROS */ #endif /* C style interface */ #endif /* __ID3D10SwitchToRef_INTERFACE_DEFINED__ */ /* interface __MIDL_itf_d3d10sdklayers_0000_0002 */ /* [local] */ typedef enum D3D10_MESSAGE_CATEGORY { D3D10_MESSAGE_CATEGORY_APPLICATION_DEFINED = 0, D3D10_MESSAGE_CATEGORY_MISCELLANEOUS = ( D3D10_MESSAGE_CATEGORY_APPLICATION_DEFINED + 1 ) , D3D10_MESSAGE_CATEGORY_INITIALIZATION = ( D3D10_MESSAGE_CATEGORY_MISCELLANEOUS + 1 ) , D3D10_MESSAGE_CATEGORY_CLEANUP = ( D3D10_MESSAGE_CATEGORY_INITIALIZATION + 1 ) , D3D10_MESSAGE_CATEGORY_COMPILATION = ( D3D10_MESSAGE_CATEGORY_CLEANUP + 1 ) , D3D10_MESSAGE_CATEGORY_STATE_CREATION = ( D3D10_MESSAGE_CATEGORY_COMPILATION + 1 ) , D3D10_MESSAGE_CATEGORY_STATE_SETTING = ( D3D10_MESSAGE_CATEGORY_STATE_CREATION + 1 ) , D3D10_MESSAGE_CATEGORY_STATE_GETTING = ( D3D10_MESSAGE_CATEGORY_STATE_SETTING + 1 ) , D3D10_MESSAGE_CATEGORY_RESOURCE_MANIPULATION = ( D3D10_MESSAGE_CATEGORY_STATE_GETTING + 1 ) , D3D10_MESSAGE_CATEGORY_EXECUTION = ( D3D10_MESSAGE_CATEGORY_RESOURCE_MANIPULATION + 1 ) } D3D10_MESSAGE_CATEGORY; typedef enum D3D10_MESSAGE_SEVERITY { D3D10_MESSAGE_SEVERITY_CORRUPTION = 0, D3D10_MESSAGE_SEVERITY_ERROR = ( D3D10_MESSAGE_SEVERITY_CORRUPTION + 1 ) , D3D10_MESSAGE_SEVERITY_WARNING = ( D3D10_MESSAGE_SEVERITY_ERROR + 1 ) , D3D10_MESSAGE_SEVERITY_INFO = ( D3D10_MESSAGE_SEVERITY_WARNING + 1 ) } D3D10_MESSAGE_SEVERITY; typedef enum D3D10_MESSAGE_ID { D3D10_MESSAGE_ID_UNKNOWN = 0, D3D10_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_HAZARD = ( D3D10_MESSAGE_ID_UNKNOWN + 1 ) , D3D10_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_HAZARD = ( D3D10_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_HAZARD + 1 ) , D3D10_MESSAGE_ID_DEVICE_VSSETSHADERRESOURCES_HAZARD = ( D3D10_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_HAZARD + 1 ) , D3D10_MESSAGE_ID_DEVICE_VSSETCONSTANTBUFFERS_HAZARD = ( D3D10_MESSAGE_ID_DEVICE_VSSETSHADERRESOURCES_HAZARD + 1 ) , D3D10_MESSAGE_ID_DEVICE_GSSETSHADERRESOURCES_HAZARD = ( D3D10_MESSAGE_ID_DEVICE_VSSETCONSTANTBUFFERS_HAZARD + 1 ) , D3D10_MESSAGE_ID_DEVICE_GSSETCONSTANTBUFFERS_HAZARD = ( D3D10_MESSAGE_ID_DEVICE_GSSETSHADERRESOURCES_HAZARD + 1 ) , D3D10_MESSAGE_ID_DEVICE_PSSETSHADERRESOURCES_HAZARD = ( D3D10_MESSAGE_ID_DEVICE_GSSETCONSTANTBUFFERS_HAZARD + 1 ) , D3D10_MESSAGE_ID_DEVICE_PSSETCONSTANTBUFFERS_HAZARD = ( D3D10_MESSAGE_ID_DEVICE_PSSETSHADERRESOURCES_HAZARD + 1 ) , D3D10_MESSAGE_ID_DEVICE_OMSETRENDERTARGETS_HAZARD = ( D3D10_MESSAGE_ID_DEVICE_PSSETCONSTANTBUFFERS_HAZARD + 1 ) , D3D10_MESSAGE_ID_DEVICE_SOSETTARGETS_HAZARD = ( D3D10_MESSAGE_ID_DEVICE_OMSETRENDERTARGETS_HAZARD + 1 ) , D3D10_MESSAGE_ID_STRING_FROM_APPLICATION = ( D3D10_MESSAGE_ID_DEVICE_SOSETTARGETS_HAZARD + 1 ) , D3D10_MESSAGE_ID_CORRUPTED_THIS = ( D3D10_MESSAGE_ID_STRING_FROM_APPLICATION + 1 ) , D3D10_MESSAGE_ID_CORRUPTED_PARAMETER1 = ( D3D10_MESSAGE_ID_CORRUPTED_THIS + 1 ) , D3D10_MESSAGE_ID_CORRUPTED_PARAMETER2 = ( D3D10_MESSAGE_ID_CORRUPTED_PARAMETER1 + 1 ) , D3D10_MESSAGE_ID_CORRUPTED_PARAMETER3 = ( D3D10_MESSAGE_ID_CORRUPTED_PARAMETER2 + 1 ) , D3D10_MESSAGE_ID_CORRUPTED_PARAMETER4 = ( D3D10_MESSAGE_ID_CORRUPTED_PARAMETER3 + 1 ) , D3D10_MESSAGE_ID_CORRUPTED_PARAMETER5 = ( D3D10_MESSAGE_ID_CORRUPTED_PARAMETER4 + 1 ) , D3D10_MESSAGE_ID_CORRUPTED_PARAMETER6 = ( D3D10_MESSAGE_ID_CORRUPTED_PARAMETER5 + 1 ) , D3D10_MESSAGE_ID_CORRUPTED_PARAMETER7 = ( D3D10_MESSAGE_ID_CORRUPTED_PARAMETER6 + 1 ) , D3D10_MESSAGE_ID_CORRUPTED_PARAMETER8 = ( D3D10_MESSAGE_ID_CORRUPTED_PARAMETER7 + 1 ) , D3D10_MESSAGE_ID_CORRUPTED_PARAMETER9 = ( D3D10_MESSAGE_ID_CORRUPTED_PARAMETER8 + 1 ) , D3D10_MESSAGE_ID_CORRUPTED_PARAMETER10 = ( D3D10_MESSAGE_ID_CORRUPTED_PARAMETER9 + 1 ) , D3D10_MESSAGE_ID_CORRUPTED_PARAMETER11 = ( D3D10_MESSAGE_ID_CORRUPTED_PARAMETER10 + 1 ) , D3D10_MESSAGE_ID_CORRUPTED_PARAMETER12 = ( D3D10_MESSAGE_ID_CORRUPTED_PARAMETER11 + 1 ) , D3D10_MESSAGE_ID_CORRUPTED_PARAMETER13 = ( D3D10_MESSAGE_ID_CORRUPTED_PARAMETER12 + 1 ) , D3D10_MESSAGE_ID_CORRUPTED_PARAMETER14 = ( D3D10_MESSAGE_ID_CORRUPTED_PARAMETER13 + 1 ) , D3D10_MESSAGE_ID_CORRUPTED_PARAMETER15 = ( D3D10_MESSAGE_ID_CORRUPTED_PARAMETER14 + 1 ) , D3D10_MESSAGE_ID_CORRUPTED_MULTITHREADING = ( D3D10_MESSAGE_ID_CORRUPTED_PARAMETER15 + 1 ) , D3D10_MESSAGE_ID_MESSAGE_REPORTING_OUTOFMEMORY = ( D3D10_MESSAGE_ID_CORRUPTED_MULTITHREADING + 1 ) , D3D10_MESSAGE_ID_IASETINPUTLAYOUT_UNBINDDELETINGOBJECT = ( D3D10_MESSAGE_ID_MESSAGE_REPORTING_OUTOFMEMORY + 1 ) , D3D10_MESSAGE_ID_IASETVERTEXBUFFERS_UNBINDDELETINGOBJECT = ( D3D10_MESSAGE_ID_IASETINPUTLAYOUT_UNBINDDELETINGOBJECT + 1 ) , D3D10_MESSAGE_ID_IASETINDEXBUFFER_UNBINDDELETINGOBJECT = ( D3D10_MESSAGE_ID_IASETVERTEXBUFFERS_UNBINDDELETINGOBJECT + 1 ) , D3D10_MESSAGE_ID_VSSETSHADER_UNBINDDELETINGOBJECT = ( D3D10_MESSAGE_ID_IASETINDEXBUFFER_UNBINDDELETINGOBJECT + 1 ) , D3D10_MESSAGE_ID_VSSETSHADERRESOURCES_UNBINDDELETINGOBJECT = ( D3D10_MESSAGE_ID_VSSETSHADER_UNBINDDELETINGOBJECT + 1 ) , D3D10_MESSAGE_ID_VSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT = ( D3D10_MESSAGE_ID_VSSETSHADERRESOURCES_UNBINDDELETINGOBJECT + 1 ) , D3D10_MESSAGE_ID_VSSETSAMPLERS_UNBINDDELETINGOBJECT = ( D3D10_MESSAGE_ID_VSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT + 1 ) , D3D10_MESSAGE_ID_GSSETSHADER_UNBINDDELETINGOBJECT = ( D3D10_MESSAGE_ID_VSSETSAMPLERS_UNBINDDELETINGOBJECT + 1 ) , D3D10_MESSAGE_ID_GSSETSHADERRESOURCES_UNBINDDELETINGOBJECT = ( D3D10_MESSAGE_ID_GSSETSHADER_UNBINDDELETINGOBJECT + 1 ) , D3D10_MESSAGE_ID_GSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT = ( D3D10_MESSAGE_ID_GSSETSHADERRESOURCES_UNBINDDELETINGOBJECT + 1 ) , D3D10_MESSAGE_ID_GSSETSAMPLERS_UNBINDDELETINGOBJECT = ( D3D10_MESSAGE_ID_GSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT + 1 ) , D3D10_MESSAGE_ID_SOSETTARGETS_UNBINDDELETINGOBJECT = ( D3D10_MESSAGE_ID_GSSETSAMPLERS_UNBINDDELETINGOBJECT + 1 ) , D3D10_MESSAGE_ID_PSSETSHADER_UNBINDDELETINGOBJECT = ( D3D10_MESSAGE_ID_SOSETTARGETS_UNBINDDELETINGOBJECT + 1 ) , D3D10_MESSAGE_ID_PSSETSHADERRESOURCES_UNBINDDELETINGOBJECT = ( D3D10_MESSAGE_ID_PSSETSHADER_UNBINDDELETINGOBJECT + 1 ) , D3D10_MESSAGE_ID_PSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT = ( D3D10_MESSAGE_ID_PSSETSHADERRESOURCES_UNBINDDELETINGOBJECT + 1 ) , D3D10_MESSAGE_ID_PSSETSAMPLERS_UNBINDDELETINGOBJECT = ( D3D10_MESSAGE_ID_PSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT + 1 ) , D3D10_MESSAGE_ID_RSSETSTATE_UNBINDDELETINGOBJECT = ( D3D10_MESSAGE_ID_PSSETSAMPLERS_UNBINDDELETINGOBJECT + 1 ) , D3D10_MESSAGE_ID_OMSETBLENDSTATE_UNBINDDELETINGOBJECT = ( D3D10_MESSAGE_ID_RSSETSTATE_UNBINDDELETINGOBJECT + 1 ) , D3D10_MESSAGE_ID_OMSETDEPTHSTENCILSTATE_UNBINDDELETINGOBJECT = ( D3D10_MESSAGE_ID_OMSETBLENDSTATE_UNBINDDELETINGOBJECT + 1 ) , D3D10_MESSAGE_ID_OMSETRENDERTARGETS_UNBINDDELETINGOBJECT = ( D3D10_MESSAGE_ID_OMSETDEPTHSTENCILSTATE_UNBINDDELETINGOBJECT + 1 ) , D3D10_MESSAGE_ID_SETPREDICATION_UNBINDDELETINGOBJECT = ( D3D10_MESSAGE_ID_OMSETRENDERTARGETS_UNBINDDELETINGOBJECT + 1 ) , D3D10_MESSAGE_ID_GETPRIVATEDATA_MOREDATA = ( D3D10_MESSAGE_ID_SETPREDICATION_UNBINDDELETINGOBJECT + 1 ) , D3D10_MESSAGE_ID_SETPRIVATEDATA_INVALIDFREEDATA = ( D3D10_MESSAGE_ID_GETPRIVATEDATA_MOREDATA + 1 ) , D3D10_MESSAGE_ID_SETPRIVATEDATA_INVALIDIUNKNOWN = ( D3D10_MESSAGE_ID_SETPRIVATEDATA_INVALIDFREEDATA + 1 ) , D3D10_MESSAGE_ID_SETPRIVATEDATA_INVALIDFLAGS = ( D3D10_MESSAGE_ID_SETPRIVATEDATA_INVALIDIUNKNOWN + 1 ) , D3D10_MESSAGE_ID_SETPRIVATEDATA_CHANGINGPARAMS = ( D3D10_MESSAGE_ID_SETPRIVATEDATA_INVALIDFLAGS + 1 ) , D3D10_MESSAGE_ID_SETPRIVATEDATA_OUTOFMEMORY = ( D3D10_MESSAGE_ID_SETPRIVATEDATA_CHANGINGPARAMS + 1 ) , D3D10_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDFORMAT = ( D3D10_MESSAGE_ID_SETPRIVATEDATA_OUTOFMEMORY + 1 ) , D3D10_MESSAGE_ID_CREATEBUFFER_INVALIDSAMPLES = ( D3D10_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDFORMAT + 1 ) , D3D10_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDUSAGE = ( D3D10_MESSAGE_ID_CREATEBUFFER_INVALIDSAMPLES + 1 ) , D3D10_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDBINDFLAGS = ( D3D10_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDUSAGE + 1 ) , D3D10_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDCPUACCESSFLAGS = ( D3D10_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDBINDFLAGS + 1 ) , D3D10_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDMISCFLAGS = ( D3D10_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDCPUACCESSFLAGS + 1 ) , D3D10_MESSAGE_ID_CREATEBUFFER_INVALIDCPUACCESSFLAGS = ( D3D10_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDMISCFLAGS + 1 ) , D3D10_MESSAGE_ID_CREATEBUFFER_INVALIDBINDFLAGS = ( D3D10_MESSAGE_ID_CREATEBUFFER_INVALIDCPUACCESSFLAGS + 1 ) , D3D10_MESSAGE_ID_CREATEBUFFER_INVALIDINITIALDATA = ( D3D10_MESSAGE_ID_CREATEBUFFER_INVALIDBINDFLAGS + 1 ) , D3D10_MESSAGE_ID_CREATEBUFFER_INVALIDDIMENSIONS = ( D3D10_MESSAGE_ID_CREATEBUFFER_INVALIDINITIALDATA + 1 ) , D3D10_MESSAGE_ID_CREATEBUFFER_INVALIDMIPLEVELS = ( D3D10_MESSAGE_ID_CREATEBUFFER_INVALIDDIMENSIONS + 1 ) , D3D10_MESSAGE_ID_CREATEBUFFER_INVALIDMISCFLAGS = ( D3D10_MESSAGE_ID_CREATEBUFFER_INVALIDMIPLEVELS + 1 ) , D3D10_MESSAGE_ID_CREATEBUFFER_INVALIDARG_RETURN = ( D3D10_MESSAGE_ID_CREATEBUFFER_INVALIDMISCFLAGS + 1 ) , D3D10_MESSAGE_ID_CREATEBUFFER_OUTOFMEMORY_RETURN = ( D3D10_MESSAGE_ID_CREATEBUFFER_INVALIDARG_RETURN + 1 ) , D3D10_MESSAGE_ID_CREATEBUFFER_NULLDESC = ( D3D10_MESSAGE_ID_CREATEBUFFER_OUTOFMEMORY_RETURN + 1 ) , D3D10_MESSAGE_ID_CREATEBUFFER_INVALIDCONSTANTBUFFERBINDINGS = ( D3D10_MESSAGE_ID_CREATEBUFFER_NULLDESC + 1 ) , D3D10_MESSAGE_ID_CREATEBUFFER_LARGEALLOCATION = ( D3D10_MESSAGE_ID_CREATEBUFFER_INVALIDCONSTANTBUFFERBINDINGS + 1 ) , D3D10_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDFORMAT = ( D3D10_MESSAGE_ID_CREATEBUFFER_LARGEALLOCATION + 1 ) , D3D10_MESSAGE_ID_CREATETEXTURE1D_UNSUPPORTEDFORMAT = ( D3D10_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDFORMAT + 1 ) , D3D10_MESSAGE_ID_CREATETEXTURE1D_INVALIDSAMPLES = ( D3D10_MESSAGE_ID_CREATETEXTURE1D_UNSUPPORTEDFORMAT + 1 ) , D3D10_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDUSAGE = ( D3D10_MESSAGE_ID_CREATETEXTURE1D_INVALIDSAMPLES + 1 ) , D3D10_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDBINDFLAGS = ( D3D10_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDUSAGE + 1 ) , D3D10_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDCPUACCESSFLAGS = ( D3D10_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDBINDFLAGS + 1 ) , D3D10_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDMISCFLAGS = ( D3D10_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDCPUACCESSFLAGS + 1 ) , D3D10_MESSAGE_ID_CREATETEXTURE1D_INVALIDCPUACCESSFLAGS = ( D3D10_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDMISCFLAGS + 1 ) , D3D10_MESSAGE_ID_CREATETEXTURE1D_INVALIDBINDFLAGS = ( D3D10_MESSAGE_ID_CREATETEXTURE1D_INVALIDCPUACCESSFLAGS + 1 ) , D3D10_MESSAGE_ID_CREATETEXTURE1D_INVALIDINITIALDATA = ( D3D10_MESSAGE_ID_CREATETEXTURE1D_INVALIDBINDFLAGS + 1 ) , D3D10_MESSAGE_ID_CREATETEXTURE1D_INVALIDDIMENSIONS = ( D3D10_MESSAGE_ID_CREATETEXTURE1D_INVALIDINITIALDATA + 1 ) , D3D10_MESSAGE_ID_CREATETEXTURE1D_INVALIDMIPLEVELS = ( D3D10_MESSAGE_ID_CREATETEXTURE1D_INVALIDDIMENSIONS + 1 ) , D3D10_MESSAGE_ID_CREATETEXTURE1D_INVALIDMISCFLAGS = ( D3D10_MESSAGE_ID_CREATETEXTURE1D_INVALIDMIPLEVELS + 1 ) , D3D10_MESSAGE_ID_CREATETEXTURE1D_INVALIDARG_RETURN = ( D3D10_MESSAGE_ID_CREATETEXTURE1D_INVALIDMISCFLAGS + 1 ) , D3D10_MESSAGE_ID_CREATETEXTURE1D_OUTOFMEMORY_RETURN = ( D3D10_MESSAGE_ID_CREATETEXTURE1D_INVALIDARG_RETURN + 1 ) , D3D10_MESSAGE_ID_CREATETEXTURE1D_NULLDESC = ( D3D10_MESSAGE_ID_CREATETEXTURE1D_OUTOFMEMORY_RETURN + 1 ) , D3D10_MESSAGE_ID_CREATETEXTURE1D_LARGEALLOCATION = ( D3D10_MESSAGE_ID_CREATETEXTURE1D_NULLDESC + 1 ) , D3D10_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDFORMAT = ( D3D10_MESSAGE_ID_CREATETEXTURE1D_LARGEALLOCATION + 1 ) , D3D10_MESSAGE_ID_CREATETEXTURE2D_UNSUPPORTEDFORMAT = ( D3D10_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDFORMAT + 1 ) , D3D10_MESSAGE_ID_CREATETEXTURE2D_INVALIDSAMPLES = ( D3D10_MESSAGE_ID_CREATETEXTURE2D_UNSUPPORTEDFORMAT + 1 ) , D3D10_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDUSAGE = ( D3D10_MESSAGE_ID_CREATETEXTURE2D_INVALIDSAMPLES + 1 ) , D3D10_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDBINDFLAGS = ( D3D10_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDUSAGE + 1 ) , D3D10_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDCPUACCESSFLAGS = ( D3D10_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDBINDFLAGS + 1 ) , D3D10_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDMISCFLAGS = ( D3D10_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDCPUACCESSFLAGS + 1 ) , D3D10_MESSAGE_ID_CREATETEXTURE2D_INVALIDCPUACCESSFLAGS = ( D3D10_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDMISCFLAGS + 1 ) , D3D10_MESSAGE_ID_CREATETEXTURE2D_INVALIDBINDFLAGS = ( D3D10_MESSAGE_ID_CREATETEXTURE2D_INVALIDCPUACCESSFLAGS + 1 ) , D3D10_MESSAGE_ID_CREATETEXTURE2D_INVALIDINITIALDATA = ( D3D10_MESSAGE_ID_CREATETEXTURE2D_INVALIDBINDFLAGS + 1 ) , D3D10_MESSAGE_ID_CREATETEXTURE2D_INVALIDDIMENSIONS = ( D3D10_MESSAGE_ID_CREATETEXTURE2D_INVALIDINITIALDATA + 1 ) , D3D10_MESSAGE_ID_CREATETEXTURE2D_INVALIDMIPLEVELS = ( D3D10_MESSAGE_ID_CREATETEXTURE2D_INVALIDDIMENSIONS + 1 ) , D3D10_MESSAGE_ID_CREATETEXTURE2D_INVALIDMISCFLAGS = ( D3D10_MESSAGE_ID_CREATETEXTURE2D_INVALIDMIPLEVELS + 1 ) , D3D10_MESSAGE_ID_CREATETEXTURE2D_INVALIDARG_RETURN = ( D3D10_MESSAGE_ID_CREATETEXTURE2D_INVALIDMISCFLAGS + 1 ) , D3D10_MESSAGE_ID_CREATETEXTURE2D_OUTOFMEMORY_RETURN = ( D3D10_MESSAGE_ID_CREATETEXTURE2D_INVALIDARG_RETURN + 1 ) , D3D10_MESSAGE_ID_CREATETEXTURE2D_NULLDESC = ( D3D10_MESSAGE_ID_CREATETEXTURE2D_OUTOFMEMORY_RETURN + 1 ) , D3D10_MESSAGE_ID_CREATETEXTURE2D_LARGEALLOCATION = ( D3D10_MESSAGE_ID_CREATETEXTURE2D_NULLDESC + 1 ) , D3D10_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDFORMAT = ( D3D10_MESSAGE_ID_CREATETEXTURE2D_LARGEALLOCATION + 1 ) , D3D10_MESSAGE_ID_CREATETEXTURE3D_UNSUPPORTEDFORMAT = ( D3D10_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDFORMAT + 1 ) , D3D10_MESSAGE_ID_CREATETEXTURE3D_INVALIDSAMPLES = ( D3D10_MESSAGE_ID_CREATETEXTURE3D_UNSUPPORTEDFORMAT + 1 ) , D3D10_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDUSAGE = ( D3D10_MESSAGE_ID_CREATETEXTURE3D_INVALIDSAMPLES + 1 ) , D3D10_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDBINDFLAGS = ( D3D10_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDUSAGE + 1 ) , D3D10_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDCPUACCESSFLAGS = ( D3D10_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDBINDFLAGS + 1 ) , D3D10_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDMISCFLAGS = ( D3D10_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDCPUACCESSFLAGS + 1 ) , D3D10_MESSAGE_ID_CREATETEXTURE3D_INVALIDCPUACCESSFLAGS = ( D3D10_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDMISCFLAGS + 1 ) , D3D10_MESSAGE_ID_CREATETEXTURE3D_INVALIDBINDFLAGS = ( D3D10_MESSAGE_ID_CREATETEXTURE3D_INVALIDCPUACCESSFLAGS + 1 ) , D3D10_MESSAGE_ID_CREATETEXTURE3D_INVALIDINITIALDATA = ( D3D10_MESSAGE_ID_CREATETEXTURE3D_INVALIDBINDFLAGS + 1 ) , D3D10_MESSAGE_ID_CREATETEXTURE3D_INVALIDDIMENSIONS = ( D3D10_MESSAGE_ID_CREATETEXTURE3D_INVALIDINITIALDATA + 1 ) , D3D10_MESSAGE_ID_CREATETEXTURE3D_INVALIDMIPLEVELS = ( D3D10_MESSAGE_ID_CREATETEXTURE3D_INVALIDDIMENSIONS + 1 ) , D3D10_MESSAGE_ID_CREATETEXTURE3D_INVALIDMISCFLAGS = ( D3D10_MESSAGE_ID_CREATETEXTURE3D_INVALIDMIPLEVELS + 1 ) , D3D10_MESSAGE_ID_CREATETEXTURE3D_INVALIDARG_RETURN = ( D3D10_MESSAGE_ID_CREATETEXTURE3D_INVALIDMISCFLAGS + 1 ) , D3D10_MESSAGE_ID_CREATETEXTURE3D_OUTOFMEMORY_RETURN = ( D3D10_MESSAGE_ID_CREATETEXTURE3D_INVALIDARG_RETURN + 1 ) , D3D10_MESSAGE_ID_CREATETEXTURE3D_NULLDESC = ( D3D10_MESSAGE_ID_CREATETEXTURE3D_OUTOFMEMORY_RETURN + 1 ) , D3D10_MESSAGE_ID_CREATETEXTURE3D_LARGEALLOCATION = ( D3D10_MESSAGE_ID_CREATETEXTURE3D_NULLDESC + 1 ) , D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_UNRECOGNIZEDFORMAT = ( D3D10_MESSAGE_ID_CREATETEXTURE3D_LARGEALLOCATION + 1 ) , D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDDESC = ( D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_UNRECOGNIZEDFORMAT + 1 ) , D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDFORMAT = ( D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDDESC + 1 ) , D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDDIMENSIONS = ( D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDFORMAT + 1 ) , D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDRESOURCE = ( D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDDIMENSIONS + 1 ) , D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_TOOMANYOBJECTS = ( D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDRESOURCE + 1 ) , D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDARG_RETURN = ( D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_TOOMANYOBJECTS + 1 ) , D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_OUTOFMEMORY_RETURN = ( D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDARG_RETURN + 1 ) , D3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_UNRECOGNIZEDFORMAT = ( D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_OUTOFMEMORY_RETURN + 1 ) , D3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_UNSUPPORTEDFORMAT = ( D3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_UNRECOGNIZEDFORMAT + 1 ) , D3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDDESC = ( D3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_UNSUPPORTEDFORMAT + 1 ) , D3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDFORMAT = ( D3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDDESC + 1 ) , D3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDDIMENSIONS = ( D3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDFORMAT + 1 ) , D3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDRESOURCE = ( D3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDDIMENSIONS + 1 ) , D3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_TOOMANYOBJECTS = ( D3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDRESOURCE + 1 ) , D3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDARG_RETURN = ( D3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_TOOMANYOBJECTS + 1 ) , D3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_OUTOFMEMORY_RETURN = ( D3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDARG_RETURN + 1 ) , D3D10_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_UNRECOGNIZEDFORMAT = ( D3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_OUTOFMEMORY_RETURN + 1 ) , D3D10_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDDESC = ( D3D10_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_UNRECOGNIZEDFORMAT + 1 ) , D3D10_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDFORMAT = ( D3D10_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDDESC + 1 ) , D3D10_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDDIMENSIONS = ( D3D10_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDFORMAT + 1 ) , D3D10_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDRESOURCE = ( D3D10_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDDIMENSIONS + 1 ) , D3D10_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_TOOMANYOBJECTS = ( D3D10_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDRESOURCE + 1 ) , D3D10_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDARG_RETURN = ( D3D10_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_TOOMANYOBJECTS + 1 ) , D3D10_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_OUTOFMEMORY_RETURN = ( D3D10_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDARG_RETURN + 1 ) , D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_OUTOFMEMORY = ( D3D10_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_OUTOFMEMORY_RETURN + 1 ) , D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_TOOMANYELEMENTS = ( D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_OUTOFMEMORY + 1 ) , D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDFORMAT = ( D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_TOOMANYELEMENTS + 1 ) , D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_INCOMPATIBLEFORMAT = ( D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDFORMAT + 1 ) , D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDSLOT = ( D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_INCOMPATIBLEFORMAT + 1 ) , D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDINPUTSLOTCLASS = ( D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDSLOT + 1 ) , D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_STEPRATESLOTCLASSMISMATCH = ( D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDINPUTSLOTCLASS + 1 ) , D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDSLOTCLASSCHANGE = ( D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_STEPRATESLOTCLASSMISMATCH + 1 ) , D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDSTEPRATECHANGE = ( D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDSLOTCLASSCHANGE + 1 ) , D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDALIGNMENT = ( D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDSTEPRATECHANGE + 1 ) , D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_DUPLICATESEMANTIC = ( D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDALIGNMENT + 1 ) , D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_UNPARSEABLEINPUTSIGNATURE = ( D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_DUPLICATESEMANTIC + 1 ) , D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_NULLSEMANTIC = ( D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_UNPARSEABLEINPUTSIGNATURE + 1 ) , D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_MISSINGELEMENT = ( D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_NULLSEMANTIC + 1 ) , D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_NULLDESC = ( D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_MISSINGELEMENT + 1 ) , D3D10_MESSAGE_ID_CREATEVERTEXSHADER_OUTOFMEMORY = ( D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_NULLDESC + 1 ) , D3D10_MESSAGE_ID_CREATEVERTEXSHADER_INVALIDSHADERBYTECODE = ( D3D10_MESSAGE_ID_CREATEVERTEXSHADER_OUTOFMEMORY + 1 ) , D3D10_MESSAGE_ID_CREATEVERTEXSHADER_INVALIDSHADERTYPE = ( D3D10_MESSAGE_ID_CREATEVERTEXSHADER_INVALIDSHADERBYTECODE + 1 ) , D3D10_MESSAGE_ID_CREATEGEOMETRYSHADER_OUTOFMEMORY = ( D3D10_MESSAGE_ID_CREATEVERTEXSHADER_INVALIDSHADERTYPE + 1 ) , D3D10_MESSAGE_ID_CREATEGEOMETRYSHADER_INVALIDSHADERBYTECODE = ( D3D10_MESSAGE_ID_CREATEGEOMETRYSHADER_OUTOFMEMORY + 1 ) , D3D10_MESSAGE_ID_CREATEGEOMETRYSHADER_INVALIDSHADERTYPE = ( D3D10_MESSAGE_ID_CREATEGEOMETRYSHADER_INVALIDSHADERBYTECODE + 1 ) , D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTOFMEMORY = ( D3D10_MESSAGE_ID_CREATEGEOMETRYSHADER_INVALIDSHADERTYPE + 1 ) , D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSHADERBYTECODE = ( D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTOFMEMORY + 1 ) , D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSHADERTYPE = ( D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSHADERBYTECODE + 1 ) , D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDNUMENTRIES = ( D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSHADERTYPE + 1 ) , D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTPUTSTREAMSTRIDEUNUSED = ( D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDNUMENTRIES + 1 ) , D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UNEXPECTEDDECL = ( D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTPUTSTREAMSTRIDEUNUSED + 1 ) , D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_EXPECTEDDECL = ( D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UNEXPECTEDDECL + 1 ) , D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTPUTSLOT0EXPECTED = ( D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_EXPECTEDDECL + 1 ) , D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDOUTPUTSLOT = ( D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTPUTSLOT0EXPECTED + 1 ) , D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_ONLYONEELEMENTPERSLOT = ( D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDOUTPUTSLOT + 1 ) , D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDCOMPONENTCOUNT = ( D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_ONLYONEELEMENTPERSLOT + 1 ) , D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSTARTCOMPONENTANDCOMPONENTCOUNT = ( D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDCOMPONENTCOUNT + 1 ) , D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDGAPDEFINITION = ( D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSTARTCOMPONENTANDCOMPONENTCOUNT + 1 ) , D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_REPEATEDOUTPUT = ( D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDGAPDEFINITION + 1 ) , D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDOUTPUTSTREAMSTRIDE = ( D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_REPEATEDOUTPUT + 1 ) , D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MISSINGSEMANTIC = ( D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDOUTPUTSTREAMSTRIDE + 1 ) , D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MASKMISMATCH = ( D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MISSINGSEMANTIC + 1 ) , D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_CANTHAVEONLYGAPS = ( D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MASKMISMATCH + 1 ) , D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_DECLTOOCOMPLEX = ( D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_CANTHAVEONLYGAPS + 1 ) , D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MISSINGOUTPUTSIGNATURE = ( D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_DECLTOOCOMPLEX + 1 ) , D3D10_MESSAGE_ID_CREATEPIXELSHADER_OUTOFMEMORY = ( D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MISSINGOUTPUTSIGNATURE + 1 ) , D3D10_MESSAGE_ID_CREATEPIXELSHADER_INVALIDSHADERBYTECODE = ( D3D10_MESSAGE_ID_CREATEPIXELSHADER_OUTOFMEMORY + 1 ) , D3D10_MESSAGE_ID_CREATEPIXELSHADER_INVALIDSHADERTYPE = ( D3D10_MESSAGE_ID_CREATEPIXELSHADER_INVALIDSHADERBYTECODE + 1 ) , D3D10_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDFILLMODE = ( D3D10_MESSAGE_ID_CREATEPIXELSHADER_INVALIDSHADERTYPE + 1 ) , D3D10_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDCULLMODE = ( D3D10_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDFILLMODE + 1 ) , D3D10_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDDEPTHBIASCLAMP = ( D3D10_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDCULLMODE + 1 ) , D3D10_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDSLOPESCALEDDEPTHBIAS = ( D3D10_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDDEPTHBIASCLAMP + 1 ) , D3D10_MESSAGE_ID_CREATERASTERIZERSTATE_TOOMANYOBJECTS = ( D3D10_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDSLOPESCALEDDEPTHBIAS + 1 ) , D3D10_MESSAGE_ID_CREATERASTERIZERSTATE_NULLDESC = ( D3D10_MESSAGE_ID_CREATERASTERIZERSTATE_TOOMANYOBJECTS + 1 ) , D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDDEPTHWRITEMASK = ( D3D10_MESSAGE_ID_CREATERASTERIZERSTATE_NULLDESC + 1 ) , D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDDEPTHFUNC = ( D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDDEPTHWRITEMASK + 1 ) , D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILFAILOP = ( D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDDEPTHFUNC + 1 ) , D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILZFAILOP = ( D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILFAILOP + 1 ) , D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILPASSOP = ( D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILZFAILOP + 1 ) , D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILFUNC = ( D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILPASSOP + 1 ) , D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILFAILOP = ( D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILFUNC + 1 ) , D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILZFAILOP = ( D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILFAILOP + 1 ) , D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILPASSOP = ( D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILZFAILOP + 1 ) , D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILFUNC = ( D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILPASSOP + 1 ) , D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_TOOMANYOBJECTS = ( D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILFUNC + 1 ) , D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_NULLDESC = ( D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_TOOMANYOBJECTS + 1 ) , D3D10_MESSAGE_ID_CREATEBLENDSTATE_INVALIDSRCBLEND = ( D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_NULLDESC + 1 ) , D3D10_MESSAGE_ID_CREATEBLENDSTATE_INVALIDDESTBLEND = ( D3D10_MESSAGE_ID_CREATEBLENDSTATE_INVALIDSRCBLEND + 1 ) , D3D10_MESSAGE_ID_CREATEBLENDSTATE_INVALIDBLENDOP = ( D3D10_MESSAGE_ID_CREATEBLENDSTATE_INVALIDDESTBLEND + 1 ) , D3D10_MESSAGE_ID_CREATEBLENDSTATE_INVALIDSRCBLENDALPHA = ( D3D10_MESSAGE_ID_CREATEBLENDSTATE_INVALIDBLENDOP + 1 ) , D3D10_MESSAGE_ID_CREATEBLENDSTATE_INVALIDDESTBLENDALPHA = ( D3D10_MESSAGE_ID_CREATEBLENDSTATE_INVALIDSRCBLENDALPHA + 1 ) , D3D10_MESSAGE_ID_CREATEBLENDSTATE_INVALIDBLENDOPALPHA = ( D3D10_MESSAGE_ID_CREATEBLENDSTATE_INVALIDDESTBLENDALPHA + 1 ) , D3D10_MESSAGE_ID_CREATEBLENDSTATE_INVALIDRENDERTARGETWRITEMASK = ( D3D10_MESSAGE_ID_CREATEBLENDSTATE_INVALIDBLENDOPALPHA + 1 ) , D3D10_MESSAGE_ID_CREATEBLENDSTATE_TOOMANYOBJECTS = ( D3D10_MESSAGE_ID_CREATEBLENDSTATE_INVALIDRENDERTARGETWRITEMASK + 1 ) , D3D10_MESSAGE_ID_CREATEBLENDSTATE_NULLDESC = ( D3D10_MESSAGE_ID_CREATEBLENDSTATE_TOOMANYOBJECTS + 1 ) , D3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDFILTER = ( D3D10_MESSAGE_ID_CREATEBLENDSTATE_NULLDESC + 1 ) , D3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDADDRESSU = ( D3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDFILTER + 1 ) , D3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDADDRESSV = ( D3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDADDRESSU + 1 ) , D3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDADDRESSW = ( D3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDADDRESSV + 1 ) , D3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMIPLODBIAS = ( D3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDADDRESSW + 1 ) , D3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMAXANISOTROPY = ( D3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMIPLODBIAS + 1 ) , D3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDCOMPARISONFUNC = ( D3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMAXANISOTROPY + 1 ) , D3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMINLOD = ( D3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDCOMPARISONFUNC + 1 ) , D3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMAXLOD = ( D3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMINLOD + 1 ) , D3D10_MESSAGE_ID_CREATESAMPLERSTATE_TOOMANYOBJECTS = ( D3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMAXLOD + 1 ) , D3D10_MESSAGE_ID_CREATESAMPLERSTATE_NULLDESC = ( D3D10_MESSAGE_ID_CREATESAMPLERSTATE_TOOMANYOBJECTS + 1 ) , D3D10_MESSAGE_ID_CREATEQUERYORPREDICATE_INVALIDQUERY = ( D3D10_MESSAGE_ID_CREATESAMPLERSTATE_NULLDESC + 1 ) , D3D10_MESSAGE_ID_CREATEQUERYORPREDICATE_INVALIDMISCFLAGS = ( D3D10_MESSAGE_ID_CREATEQUERYORPREDICATE_INVALIDQUERY + 1 ) , D3D10_MESSAGE_ID_CREATEQUERYORPREDICATE_UNEXPECTEDMISCFLAG = ( D3D10_MESSAGE_ID_CREATEQUERYORPREDICATE_INVALIDMISCFLAGS + 1 ) , D3D10_MESSAGE_ID_CREATEQUERYORPREDICATE_NULLDESC = ( D3D10_MESSAGE_ID_CREATEQUERYORPREDICATE_UNEXPECTEDMISCFLAG + 1 ) , D3D10_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_TOPOLOGY_UNRECOGNIZED = ( D3D10_MESSAGE_ID_CREATEQUERYORPREDICATE_NULLDESC + 1 ) , D3D10_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_TOPOLOGY_UNDEFINED = ( D3D10_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_TOPOLOGY_UNRECOGNIZED + 1 ) , D3D10_MESSAGE_ID_IASETVERTEXBUFFERS_INVALIDBUFFER = ( D3D10_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_TOPOLOGY_UNDEFINED + 1 ) , D3D10_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_OFFSET_TOO_LARGE = ( D3D10_MESSAGE_ID_IASETVERTEXBUFFERS_INVALIDBUFFER + 1 ) , D3D10_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_BUFFERS_EMPTY = ( D3D10_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_OFFSET_TOO_LARGE + 1 ) , D3D10_MESSAGE_ID_IASETINDEXBUFFER_INVALIDBUFFER = ( D3D10_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_BUFFERS_EMPTY + 1 ) , D3D10_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_FORMAT_INVALID = ( D3D10_MESSAGE_ID_IASETINDEXBUFFER_INVALIDBUFFER + 1 ) , D3D10_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_OFFSET_TOO_LARGE = ( D3D10_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_FORMAT_INVALID + 1 ) , D3D10_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_OFFSET_UNALIGNED = ( D3D10_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_OFFSET_TOO_LARGE + 1 ) , D3D10_MESSAGE_ID_DEVICE_VSSETSHADERRESOURCES_VIEWS_EMPTY = ( D3D10_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_OFFSET_UNALIGNED + 1 ) , D3D10_MESSAGE_ID_VSSETCONSTANTBUFFERS_INVALIDBUFFER = ( D3D10_MESSAGE_ID_DEVICE_VSSETSHADERRESOURCES_VIEWS_EMPTY + 1 ) , D3D10_MESSAGE_ID_DEVICE_VSSETCONSTANTBUFFERS_BUFFERS_EMPTY = ( D3D10_MESSAGE_ID_VSSETCONSTANTBUFFERS_INVALIDBUFFER + 1 ) , D3D10_MESSAGE_ID_DEVICE_VSSETSAMPLERS_SAMPLERS_EMPTY = ( D3D10_MESSAGE_ID_DEVICE_VSSETCONSTANTBUFFERS_BUFFERS_EMPTY + 1 ) , D3D10_MESSAGE_ID_DEVICE_GSSETSHADERRESOURCES_VIEWS_EMPTY = ( D3D10_MESSAGE_ID_DEVICE_VSSETSAMPLERS_SAMPLERS_EMPTY + 1 ) , D3D10_MESSAGE_ID_GSSETCONSTANTBUFFERS_INVALIDBUFFER = ( D3D10_MESSAGE_ID_DEVICE_GSSETSHADERRESOURCES_VIEWS_EMPTY + 1 ) , D3D10_MESSAGE_ID_DEVICE_GSSETCONSTANTBUFFERS_BUFFERS_EMPTY = ( D3D10_MESSAGE_ID_GSSETCONSTANTBUFFERS_INVALIDBUFFER + 1 ) , D3D10_MESSAGE_ID_DEVICE_GSSETSAMPLERS_SAMPLERS_EMPTY = ( D3D10_MESSAGE_ID_DEVICE_GSSETCONSTANTBUFFERS_BUFFERS_EMPTY + 1 ) , D3D10_MESSAGE_ID_SOSETTARGETS_INVALIDBUFFER = ( D3D10_MESSAGE_ID_DEVICE_GSSETSAMPLERS_SAMPLERS_EMPTY + 1 ) , D3D10_MESSAGE_ID_DEVICE_SOSETTARGETS_OFFSET_UNALIGNED = ( D3D10_MESSAGE_ID_SOSETTARGETS_INVALIDBUFFER + 1 ) , D3D10_MESSAGE_ID_DEVICE_PSSETSHADERRESOURCES_VIEWS_EMPTY = ( D3D10_MESSAGE_ID_DEVICE_SOSETTARGETS_OFFSET_UNALIGNED + 1 ) , D3D10_MESSAGE_ID_PSSETCONSTANTBUFFERS_INVALIDBUFFER = ( D3D10_MESSAGE_ID_DEVICE_PSSETSHADERRESOURCES_VIEWS_EMPTY + 1 ) , D3D10_MESSAGE_ID_DEVICE_PSSETCONSTANTBUFFERS_BUFFERS_EMPTY = ( D3D10_MESSAGE_ID_PSSETCONSTANTBUFFERS_INVALIDBUFFER + 1 ) , D3D10_MESSAGE_ID_DEVICE_PSSETSAMPLERS_SAMPLERS_EMPTY = ( D3D10_MESSAGE_ID_DEVICE_PSSETCONSTANTBUFFERS_BUFFERS_EMPTY + 1 ) , D3D10_MESSAGE_ID_DEVICE_RSSETVIEWPORTS_INVALIDVIEWPORT = ( D3D10_MESSAGE_ID_DEVICE_PSSETSAMPLERS_SAMPLERS_EMPTY + 1 ) , D3D10_MESSAGE_ID_DEVICE_RSSETSCISSORRECTS_INVALIDSCISSOR = ( D3D10_MESSAGE_ID_DEVICE_RSSETVIEWPORTS_INVALIDVIEWPORT + 1 ) , D3D10_MESSAGE_ID_CLEARRENDERTARGETVIEW_DENORMFLUSH = ( D3D10_MESSAGE_ID_DEVICE_RSSETSCISSORRECTS_INVALIDSCISSOR + 1 ) , D3D10_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_DENORMFLUSH = ( D3D10_MESSAGE_ID_CLEARRENDERTARGETVIEW_DENORMFLUSH + 1 ) , D3D10_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_INVALID = ( D3D10_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_DENORMFLUSH + 1 ) , D3D10_MESSAGE_ID_DEVICE_IAGETVERTEXBUFFERS_BUFFERS_EMPTY = ( D3D10_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_INVALID + 1 ) , D3D10_MESSAGE_ID_DEVICE_VSGETSHADERRESOURCES_VIEWS_EMPTY = ( D3D10_MESSAGE_ID_DEVICE_IAGETVERTEXBUFFERS_BUFFERS_EMPTY + 1 ) , D3D10_MESSAGE_ID_DEVICE_VSGETCONSTANTBUFFERS_BUFFERS_EMPTY = ( D3D10_MESSAGE_ID_DEVICE_VSGETSHADERRESOURCES_VIEWS_EMPTY + 1 ) , D3D10_MESSAGE_ID_DEVICE_VSGETSAMPLERS_SAMPLERS_EMPTY = ( D3D10_MESSAGE_ID_DEVICE_VSGETCONSTANTBUFFERS_BUFFERS_EMPTY + 1 ) , D3D10_MESSAGE_ID_DEVICE_GSGETSHADERRESOURCES_VIEWS_EMPTY = ( D3D10_MESSAGE_ID_DEVICE_VSGETSAMPLERS_SAMPLERS_EMPTY + 1 ) , D3D10_MESSAGE_ID_DEVICE_GSGETCONSTANTBUFFERS_BUFFERS_EMPTY = ( D3D10_MESSAGE_ID_DEVICE_GSGETSHADERRESOURCES_VIEWS_EMPTY + 1 ) , D3D10_MESSAGE_ID_DEVICE_GSGETSAMPLERS_SAMPLERS_EMPTY = ( D3D10_MESSAGE_ID_DEVICE_GSGETCONSTANTBUFFERS_BUFFERS_EMPTY + 1 ) , D3D10_MESSAGE_ID_DEVICE_SOGETTARGETS_BUFFERS_EMPTY = ( D3D10_MESSAGE_ID_DEVICE_GSGETSAMPLERS_SAMPLERS_EMPTY + 1 ) , D3D10_MESSAGE_ID_DEVICE_PSGETSHADERRESOURCES_VIEWS_EMPTY = ( D3D10_MESSAGE_ID_DEVICE_SOGETTARGETS_BUFFERS_EMPTY + 1 ) , D3D10_MESSAGE_ID_DEVICE_PSGETCONSTANTBUFFERS_BUFFERS_EMPTY = ( D3D10_MESSAGE_ID_DEVICE_PSGETSHADERRESOURCES_VIEWS_EMPTY + 1 ) , D3D10_MESSAGE_ID_DEVICE_PSGETSAMPLERS_SAMPLERS_EMPTY = ( D3D10_MESSAGE_ID_DEVICE_PSGETCONSTANTBUFFERS_BUFFERS_EMPTY + 1 ) , D3D10_MESSAGE_ID_DEVICE_RSGETVIEWPORTS_VIEWPORTS_EMPTY = ( D3D10_MESSAGE_ID_DEVICE_PSGETSAMPLERS_SAMPLERS_EMPTY + 1 ) , D3D10_MESSAGE_ID_DEVICE_RSGETSCISSORRECTS_RECTS_EMPTY = ( D3D10_MESSAGE_ID_DEVICE_RSGETVIEWPORTS_VIEWPORTS_EMPTY + 1 ) , D3D10_MESSAGE_ID_DEVICE_GENERATEMIPS_RESOURCE_INVALID = ( D3D10_MESSAGE_ID_DEVICE_RSGETSCISSORRECTS_RECTS_EMPTY + 1 ) , D3D10_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDDESTINATIONSUBRESOURCE = ( D3D10_MESSAGE_ID_DEVICE_GENERATEMIPS_RESOURCE_INVALID + 1 ) , D3D10_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCESUBRESOURCE = ( D3D10_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDDESTINATIONSUBRESOURCE + 1 ) , D3D10_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCEBOX = ( D3D10_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCESUBRESOURCE + 1 ) , D3D10_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCE = ( D3D10_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCEBOX + 1 ) , D3D10_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDDESTINATIONSTATE = ( D3D10_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCE + 1 ) , D3D10_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCESTATE = ( D3D10_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDDESTINATIONSTATE + 1 ) , D3D10_MESSAGE_ID_COPYRESOURCE_INVALIDSOURCE = ( D3D10_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCESTATE + 1 ) , D3D10_MESSAGE_ID_COPYRESOURCE_INVALIDDESTINATIONSTATE = ( D3D10_MESSAGE_ID_COPYRESOURCE_INVALIDSOURCE + 1 ) , D3D10_MESSAGE_ID_COPYRESOURCE_INVALIDSOURCESTATE = ( D3D10_MESSAGE_ID_COPYRESOURCE_INVALIDDESTINATIONSTATE + 1 ) , D3D10_MESSAGE_ID_UPDATESUBRESOURCE_INVALIDDESTINATIONSUBRESOURCE = ( D3D10_MESSAGE_ID_COPYRESOURCE_INVALIDSOURCESTATE + 1 ) , D3D10_MESSAGE_ID_UPDATESUBRESOURCE_INVALIDDESTINATIONBOX = ( D3D10_MESSAGE_ID_UPDATESUBRESOURCE_INVALIDDESTINATIONSUBRESOURCE + 1 ) , D3D10_MESSAGE_ID_UPDATESUBRESOURCE_INVALIDDESTINATIONSTATE = ( D3D10_MESSAGE_ID_UPDATESUBRESOURCE_INVALIDDESTINATIONBOX + 1 ) , D3D10_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_DESTINATION_INVALID = ( D3D10_MESSAGE_ID_UPDATESUBRESOURCE_INVALIDDESTINATIONSTATE + 1 ) , D3D10_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_DESTINATION_SUBRESOURCE_INVALID = ( D3D10_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_DESTINATION_INVALID + 1 ) , D3D10_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_SOURCE_INVALID = ( D3D10_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_DESTINATION_SUBRESOURCE_INVALID + 1 ) , D3D10_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_SOURCE_SUBRESOURCE_INVALID = ( D3D10_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_SOURCE_INVALID + 1 ) , D3D10_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_FORMAT_INVALID = ( D3D10_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_SOURCE_SUBRESOURCE_INVALID + 1 ) , D3D10_MESSAGE_ID_BUFFER_MAP_INVALIDMAPTYPE = ( D3D10_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_FORMAT_INVALID + 1 ) , D3D10_MESSAGE_ID_BUFFER_MAP_INVALIDFLAGS = ( D3D10_MESSAGE_ID_BUFFER_MAP_INVALIDMAPTYPE + 1 ) , D3D10_MESSAGE_ID_BUFFER_MAP_ALREADYMAPPED = ( D3D10_MESSAGE_ID_BUFFER_MAP_INVALIDFLAGS + 1 ) , D3D10_MESSAGE_ID_BUFFER_MAP_DEVICEREMOVED_RETURN = ( D3D10_MESSAGE_ID_BUFFER_MAP_ALREADYMAPPED + 1 ) , D3D10_MESSAGE_ID_BUFFER_UNMAP_NOTMAPPED = ( D3D10_MESSAGE_ID_BUFFER_MAP_DEVICEREMOVED_RETURN + 1 ) , D3D10_MESSAGE_ID_TEXTURE1D_MAP_INVALIDMAPTYPE = ( D3D10_MESSAGE_ID_BUFFER_UNMAP_NOTMAPPED + 1 ) , D3D10_MESSAGE_ID_TEXTURE1D_MAP_INVALIDSUBRESOURCE = ( D3D10_MESSAGE_ID_TEXTURE1D_MAP_INVALIDMAPTYPE + 1 ) , D3D10_MESSAGE_ID_TEXTURE1D_MAP_INVALIDFLAGS = ( D3D10_MESSAGE_ID_TEXTURE1D_MAP_INVALIDSUBRESOURCE + 1 ) , D3D10_MESSAGE_ID_TEXTURE1D_MAP_ALREADYMAPPED = ( D3D10_MESSAGE_ID_TEXTURE1D_MAP_INVALIDFLAGS + 1 ) , D3D10_MESSAGE_ID_TEXTURE1D_MAP_DEVICEREMOVED_RETURN = ( D3D10_MESSAGE_ID_TEXTURE1D_MAP_ALREADYMAPPED + 1 ) , D3D10_MESSAGE_ID_TEXTURE1D_UNMAP_INVALIDSUBRESOURCE = ( D3D10_MESSAGE_ID_TEXTURE1D_MAP_DEVICEREMOVED_RETURN + 1 ) , D3D10_MESSAGE_ID_TEXTURE1D_UNMAP_NOTMAPPED = ( D3D10_MESSAGE_ID_TEXTURE1D_UNMAP_INVALIDSUBRESOURCE + 1 ) , D3D10_MESSAGE_ID_TEXTURE2D_MAP_INVALIDMAPTYPE = ( D3D10_MESSAGE_ID_TEXTURE1D_UNMAP_NOTMAPPED + 1 ) , D3D10_MESSAGE_ID_TEXTURE2D_MAP_INVALIDSUBRESOURCE = ( D3D10_MESSAGE_ID_TEXTURE2D_MAP_INVALIDMAPTYPE + 1 ) , D3D10_MESSAGE_ID_TEXTURE2D_MAP_INVALIDFLAGS = ( D3D10_MESSAGE_ID_TEXTURE2D_MAP_INVALIDSUBRESOURCE + 1 ) , D3D10_MESSAGE_ID_TEXTURE2D_MAP_ALREADYMAPPED = ( D3D10_MESSAGE_ID_TEXTURE2D_MAP_INVALIDFLAGS + 1 ) , D3D10_MESSAGE_ID_TEXTURE2D_MAP_DEVICEREMOVED_RETURN = ( D3D10_MESSAGE_ID_TEXTURE2D_MAP_ALREADYMAPPED + 1 ) , D3D10_MESSAGE_ID_TEXTURE2D_UNMAP_INVALIDSUBRESOURCE = ( D3D10_MESSAGE_ID_TEXTURE2D_MAP_DEVICEREMOVED_RETURN + 1 ) , D3D10_MESSAGE_ID_TEXTURE2D_UNMAP_NOTMAPPED = ( D3D10_MESSAGE_ID_TEXTURE2D_UNMAP_INVALIDSUBRESOURCE + 1 ) , D3D10_MESSAGE_ID_TEXTURE3D_MAP_INVALIDMAPTYPE = ( D3D10_MESSAGE_ID_TEXTURE2D_UNMAP_NOTMAPPED + 1 ) , D3D10_MESSAGE_ID_TEXTURE3D_MAP_INVALIDSUBRESOURCE = ( D3D10_MESSAGE_ID_TEXTURE3D_MAP_INVALIDMAPTYPE + 1 ) , D3D10_MESSAGE_ID_TEXTURE3D_MAP_INVALIDFLAGS = ( D3D10_MESSAGE_ID_TEXTURE3D_MAP_INVALIDSUBRESOURCE + 1 ) , D3D10_MESSAGE_ID_TEXTURE3D_MAP_ALREADYMAPPED = ( D3D10_MESSAGE_ID_TEXTURE3D_MAP_INVALIDFLAGS + 1 ) , D3D10_MESSAGE_ID_TEXTURE3D_MAP_DEVICEREMOVED_RETURN = ( D3D10_MESSAGE_ID_TEXTURE3D_MAP_ALREADYMAPPED + 1 ) , D3D10_MESSAGE_ID_TEXTURE3D_UNMAP_INVALIDSUBRESOURCE = ( D3D10_MESSAGE_ID_TEXTURE3D_MAP_DEVICEREMOVED_RETURN + 1 ) , D3D10_MESSAGE_ID_TEXTURE3D_UNMAP_NOTMAPPED = ( D3D10_MESSAGE_ID_TEXTURE3D_UNMAP_INVALIDSUBRESOURCE + 1 ) , D3D10_MESSAGE_ID_CHECKFORMATSUPPORT_FORMAT_DEPRECATED = ( D3D10_MESSAGE_ID_TEXTURE3D_UNMAP_NOTMAPPED + 1 ) , D3D10_MESSAGE_ID_CHECKMULTISAMPLEQUALITYLEVELS_FORMAT_DEPRECATED = ( D3D10_MESSAGE_ID_CHECKFORMATSUPPORT_FORMAT_DEPRECATED + 1 ) , D3D10_MESSAGE_ID_SETEXCEPTIONMODE_UNRECOGNIZEDFLAGS = ( D3D10_MESSAGE_ID_CHECKMULTISAMPLEQUALITYLEVELS_FORMAT_DEPRECATED + 1 ) , D3D10_MESSAGE_ID_SETEXCEPTIONMODE_INVALIDARG_RETURN = ( D3D10_MESSAGE_ID_SETEXCEPTIONMODE_UNRECOGNIZEDFLAGS + 1 ) , D3D10_MESSAGE_ID_SETEXCEPTIONMODE_DEVICEREMOVED_RETURN = ( D3D10_MESSAGE_ID_SETEXCEPTIONMODE_INVALIDARG_RETURN + 1 ) , D3D10_MESSAGE_ID_REF_SIMULATING_INFINITELY_FAST_HARDWARE = ( D3D10_MESSAGE_ID_SETEXCEPTIONMODE_DEVICEREMOVED_RETURN + 1 ) , D3D10_MESSAGE_ID_REF_THREADING_MODE = ( D3D10_MESSAGE_ID_REF_SIMULATING_INFINITELY_FAST_HARDWARE + 1 ) , D3D10_MESSAGE_ID_REF_UMDRIVER_EXCEPTION = ( D3D10_MESSAGE_ID_REF_THREADING_MODE + 1 ) , D3D10_MESSAGE_ID_REF_KMDRIVER_EXCEPTION = ( D3D10_MESSAGE_ID_REF_UMDRIVER_EXCEPTION + 1 ) , D3D10_MESSAGE_ID_REF_HARDWARE_EXCEPTION = ( D3D10_MESSAGE_ID_REF_KMDRIVER_EXCEPTION + 1 ) , D3D10_MESSAGE_ID_REF_ACCESSING_INDEXABLE_TEMP_OUT_OF_RANGE = ( D3D10_MESSAGE_ID_REF_HARDWARE_EXCEPTION + 1 ) , D3D10_MESSAGE_ID_REF_PROBLEM_PARSING_SHADER = ( D3D10_MESSAGE_ID_REF_ACCESSING_INDEXABLE_TEMP_OUT_OF_RANGE + 1 ) , D3D10_MESSAGE_ID_REF_OUT_OF_MEMORY = ( D3D10_MESSAGE_ID_REF_PROBLEM_PARSING_SHADER + 1 ) , D3D10_MESSAGE_ID_REF_INFO = ( D3D10_MESSAGE_ID_REF_OUT_OF_MEMORY + 1 ) , D3D10_MESSAGE_ID_DEVICE_DRAW_VERTEXPOS_OVERFLOW = ( D3D10_MESSAGE_ID_REF_INFO + 1 ) , D3D10_MESSAGE_ID_DEVICE_DRAWINDEXED_INDEXPOS_OVERFLOW = ( D3D10_MESSAGE_ID_DEVICE_DRAW_VERTEXPOS_OVERFLOW + 1 ) , D3D10_MESSAGE_ID_DEVICE_DRAWINSTANCED_VERTEXPOS_OVERFLOW = ( D3D10_MESSAGE_ID_DEVICE_DRAWINDEXED_INDEXPOS_OVERFLOW + 1 ) , D3D10_MESSAGE_ID_DEVICE_DRAWINSTANCED_INSTANCEPOS_OVERFLOW = ( D3D10_MESSAGE_ID_DEVICE_DRAWINSTANCED_VERTEXPOS_OVERFLOW + 1 ) , D3D10_MESSAGE_ID_DEVICE_DRAWINDEXEDINSTANCED_INSTANCEPOS_OVERFLOW = ( D3D10_MESSAGE_ID_DEVICE_DRAWINSTANCED_INSTANCEPOS_OVERFLOW + 1 ) , D3D10_MESSAGE_ID_DEVICE_DRAWINDEXEDINSTANCED_INDEXPOS_OVERFLOW = ( D3D10_MESSAGE_ID_DEVICE_DRAWINDEXEDINSTANCED_INSTANCEPOS_OVERFLOW + 1 ) , D3D10_MESSAGE_ID_DEVICE_DRAW_VERTEX_SHADER_NOT_SET = ( D3D10_MESSAGE_ID_DEVICE_DRAWINDEXEDINSTANCED_INDEXPOS_OVERFLOW + 1 ) , D3D10_MESSAGE_ID_DEVICE_SHADER_LINKAGE_SEMANTICNAME_NOT_FOUND = ( D3D10_MESSAGE_ID_DEVICE_DRAW_VERTEX_SHADER_NOT_SET + 1 ) , D3D10_MESSAGE_ID_DEVICE_SHADER_LINKAGE_REGISTERINDEX = ( D3D10_MESSAGE_ID_DEVICE_SHADER_LINKAGE_SEMANTICNAME_NOT_FOUND + 1 ) , D3D10_MESSAGE_ID_DEVICE_SHADER_LINKAGE_COMPONENTTYPE = ( D3D10_MESSAGE_ID_DEVICE_SHADER_LINKAGE_REGISTERINDEX + 1 ) , D3D10_MESSAGE_ID_DEVICE_SHADER_LINKAGE_REGISTERMASK = ( D3D10_MESSAGE_ID_DEVICE_SHADER_LINKAGE_COMPONENTTYPE + 1 ) , D3D10_MESSAGE_ID_DEVICE_SHADER_LINKAGE_SYSTEMVALUE = ( D3D10_MESSAGE_ID_DEVICE_SHADER_LINKAGE_REGISTERMASK + 1 ) , D3D10_MESSAGE_ID_DEVICE_SHADER_LINKAGE_NEVERWRITTEN_ALWAYSREADS = ( D3D10_MESSAGE_ID_DEVICE_SHADER_LINKAGE_SYSTEMVALUE + 1 ) , D3D10_MESSAGE_ID_DEVICE_DRAW_VERTEX_BUFFER_NOT_SET = ( D3D10_MESSAGE_ID_DEVICE_SHADER_LINKAGE_NEVERWRITTEN_ALWAYSREADS + 1 ) , D3D10_MESSAGE_ID_DEVICE_DRAW_INPUTLAYOUT_NOT_SET = ( D3D10_MESSAGE_ID_DEVICE_DRAW_VERTEX_BUFFER_NOT_SET + 1 ) , D3D10_MESSAGE_ID_DEVICE_DRAW_CONSTANT_BUFFER_NOT_SET = ( D3D10_MESSAGE_ID_DEVICE_DRAW_INPUTLAYOUT_NOT_SET + 1 ) , D3D10_MESSAGE_ID_DEVICE_DRAW_CONSTANT_BUFFER_TOO_SMALL = ( D3D10_MESSAGE_ID_DEVICE_DRAW_CONSTANT_BUFFER_NOT_SET + 1 ) , D3D10_MESSAGE_ID_DEVICE_DRAW_SAMPLER_NOT_SET = ( D3D10_MESSAGE_ID_DEVICE_DRAW_CONSTANT_BUFFER_TOO_SMALL + 1 ) , D3D10_MESSAGE_ID_DEVICE_DRAW_SHADERRESOURCEVIEW_NOT_SET = ( D3D10_MESSAGE_ID_DEVICE_DRAW_SAMPLER_NOT_SET + 1 ) , D3D10_MESSAGE_ID_DEVICE_DRAW_VIEW_DIMENSION_MISMATCH = ( D3D10_MESSAGE_ID_DEVICE_DRAW_SHADERRESOURCEVIEW_NOT_SET + 1 ) , D3D10_MESSAGE_ID_DEVICE_DRAW_VERTEX_BUFFER_STRIDE_TOO_SMALL = ( D3D10_MESSAGE_ID_DEVICE_DRAW_VIEW_DIMENSION_MISMATCH + 1 ) , D3D10_MESSAGE_ID_DEVICE_DRAW_VERTEX_BUFFER_TOO_SMALL = ( D3D10_MESSAGE_ID_DEVICE_DRAW_VERTEX_BUFFER_STRIDE_TOO_SMALL + 1 ) , D3D10_MESSAGE_ID_DEVICE_DRAW_INDEX_BUFFER_NOT_SET = ( D3D10_MESSAGE_ID_DEVICE_DRAW_VERTEX_BUFFER_TOO_SMALL + 1 ) , D3D10_MESSAGE_ID_DEVICE_DRAW_INDEX_BUFFER_FORMAT_INVALID = ( D3D10_MESSAGE_ID_DEVICE_DRAW_INDEX_BUFFER_NOT_SET + 1 ) , D3D10_MESSAGE_ID_DEVICE_DRAW_INDEX_BUFFER_TOO_SMALL = ( D3D10_MESSAGE_ID_DEVICE_DRAW_INDEX_BUFFER_FORMAT_INVALID + 1 ) , D3D10_MESSAGE_ID_DEVICE_DRAW_GS_INPUT_PRIMITIVE_MISMATCH = ( D3D10_MESSAGE_ID_DEVICE_DRAW_INDEX_BUFFER_TOO_SMALL + 1 ) , D3D10_MESSAGE_ID_DEVICE_DRAW_RESOURCE_RETURN_TYPE_MISMATCH = ( D3D10_MESSAGE_ID_DEVICE_DRAW_GS_INPUT_PRIMITIVE_MISMATCH + 1 ) , D3D10_MESSAGE_ID_DEVICE_DRAW_POSITION_NOT_PRESENT = ( D3D10_MESSAGE_ID_DEVICE_DRAW_RESOURCE_RETURN_TYPE_MISMATCH + 1 ) , D3D10_MESSAGE_ID_DEVICE_DRAW_OUTPUT_STREAM_NOT_SET = ( D3D10_MESSAGE_ID_DEVICE_DRAW_POSITION_NOT_PRESENT + 1 ) , D3D10_MESSAGE_ID_DEVICE_DRAW_BOUND_RESOURCE_MAPPED = ( D3D10_MESSAGE_ID_DEVICE_DRAW_OUTPUT_STREAM_NOT_SET + 1 ) , D3D10_MESSAGE_ID_DEVICE_DRAW_INVALID_PRIMITIVETOPOLOGY = ( D3D10_MESSAGE_ID_DEVICE_DRAW_BOUND_RESOURCE_MAPPED + 1 ) , D3D10_MESSAGE_ID_DEVICE_DRAW_VERTEX_OFFSET_UNALIGNED = ( D3D10_MESSAGE_ID_DEVICE_DRAW_INVALID_PRIMITIVETOPOLOGY + 1 ) , D3D10_MESSAGE_ID_DEVICE_DRAW_VERTEX_STRIDE_UNALIGNED = ( D3D10_MESSAGE_ID_DEVICE_DRAW_VERTEX_OFFSET_UNALIGNED + 1 ) , D3D10_MESSAGE_ID_DEVICE_DRAW_INDEX_OFFSET_UNALIGNED = ( D3D10_MESSAGE_ID_DEVICE_DRAW_VERTEX_STRIDE_UNALIGNED + 1 ) , D3D10_MESSAGE_ID_DEVICE_DRAW_OUTPUT_STREAM_OFFSET_UNALIGNED = ( D3D10_MESSAGE_ID_DEVICE_DRAW_INDEX_OFFSET_UNALIGNED + 1 ) , D3D10_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_LD_UNSUPPORTED = ( D3D10_MESSAGE_ID_DEVICE_DRAW_OUTPUT_STREAM_OFFSET_UNALIGNED + 1 ) , D3D10_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_SAMPLE_UNSUPPORTED = ( D3D10_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_LD_UNSUPPORTED + 1 ) , D3D10_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_SAMPLE_C_UNSUPPORTED = ( D3D10_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_SAMPLE_UNSUPPORTED + 1 ) , D3D10_MESSAGE_ID_DEVICE_DRAW_RESOURCE_MULTISAMPLE_UNSUPPORTED = ( D3D10_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_SAMPLE_C_UNSUPPORTED + 1 ) , D3D10_MESSAGE_ID_DEVICE_DRAW_SO_TARGETS_BOUND_WITHOUT_SOURCE = ( D3D10_MESSAGE_ID_DEVICE_DRAW_RESOURCE_MULTISAMPLE_UNSUPPORTED + 1 ) , D3D10_MESSAGE_ID_DEVICE_DRAW_SO_STRIDE_LARGER_THAN_BUFFER = ( D3D10_MESSAGE_ID_DEVICE_DRAW_SO_TARGETS_BOUND_WITHOUT_SOURCE + 1 ) , D3D10_MESSAGE_ID_DEVICE_DRAW_OM_RENDER_TARGET_DOES_NOT_SUPPORT_BLENDING = ( D3D10_MESSAGE_ID_DEVICE_DRAW_SO_STRIDE_LARGER_THAN_BUFFER + 1 ) , D3D10_MESSAGE_ID_DEVICE_DRAW_OM_DUAL_SOURCE_BLENDING_CAN_ONLY_HAVE_RENDER_TARGET_0 = ( D3D10_MESSAGE_ID_DEVICE_DRAW_OM_RENDER_TARGET_DOES_NOT_SUPPORT_BLENDING + 1 ) , D3D10_MESSAGE_ID_DEVICE_REMOVAL_PROCESS_AT_FAULT = ( D3D10_MESSAGE_ID_DEVICE_DRAW_OM_DUAL_SOURCE_BLENDING_CAN_ONLY_HAVE_RENDER_TARGET_0 + 1 ) , D3D10_MESSAGE_ID_DEVICE_REMOVAL_PROCESS_POSSIBLY_AT_FAULT = ( D3D10_MESSAGE_ID_DEVICE_REMOVAL_PROCESS_AT_FAULT + 1 ) , D3D10_MESSAGE_ID_DEVICE_REMOVAL_PROCESS_NOT_AT_FAULT = ( D3D10_MESSAGE_ID_DEVICE_REMOVAL_PROCESS_POSSIBLY_AT_FAULT + 1 ) , D3D10_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_INVALIDARG_RETURN = ( D3D10_MESSAGE_ID_DEVICE_REMOVAL_PROCESS_NOT_AT_FAULT + 1 ) , D3D10_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_OUTOFMEMORY_RETURN = ( D3D10_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_INVALIDARG_RETURN + 1 ) , D3D10_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_BADINTERFACE_RETURN = ( D3D10_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_OUTOFMEMORY_RETURN + 1 ) , D3D10_MESSAGE_ID_DEVICE_DRAW_VIEWPORT_NOT_SET = ( D3D10_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_BADINTERFACE_RETURN + 1 ) , D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_TRAILING_DIGIT_IN_SEMANTIC = ( D3D10_MESSAGE_ID_DEVICE_DRAW_VIEWPORT_NOT_SET + 1 ) , D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_TRAILING_DIGIT_IN_SEMANTIC = ( D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_TRAILING_DIGIT_IN_SEMANTIC + 1 ) , D3D10_MESSAGE_ID_DEVICE_RSSETVIEWPORTS_DENORMFLUSH = ( D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_TRAILING_DIGIT_IN_SEMANTIC + 1 ) , D3D10_MESSAGE_ID_OMSETRENDERTARGETS_INVALIDVIEW = ( D3D10_MESSAGE_ID_DEVICE_RSSETVIEWPORTS_DENORMFLUSH + 1 ) , D3D10_MESSAGE_ID_DEVICE_SETTEXTFILTERSIZE_INVALIDDIMENSIONS = ( D3D10_MESSAGE_ID_OMSETRENDERTARGETS_INVALIDVIEW + 1 ) , D3D10_MESSAGE_ID_DEVICE_DRAW_SAMPLER_MISMATCH = ( D3D10_MESSAGE_ID_DEVICE_SETTEXTFILTERSIZE_INVALIDDIMENSIONS + 1 ) , D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_TYPE_MISMATCH = ( D3D10_MESSAGE_ID_DEVICE_DRAW_SAMPLER_MISMATCH + 1 ) , D3D10_MESSAGE_ID_BLENDSTATE_GETDESC_LEGACY = ( D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_TYPE_MISMATCH + 1 ) , D3D10_MESSAGE_ID_SHADERRESOURCEVIEW_GETDESC_LEGACY = ( D3D10_MESSAGE_ID_BLENDSTATE_GETDESC_LEGACY + 1 ) , D3D10_MESSAGE_ID_CREATEQUERY_OUTOFMEMORY_RETURN = ( D3D10_MESSAGE_ID_SHADERRESOURCEVIEW_GETDESC_LEGACY + 1 ) , D3D10_MESSAGE_ID_CREATEPREDICATE_OUTOFMEMORY_RETURN = ( D3D10_MESSAGE_ID_CREATEQUERY_OUTOFMEMORY_RETURN + 1 ) , D3D10_MESSAGE_ID_CREATECOUNTER_OUTOFRANGE_COUNTER = ( D3D10_MESSAGE_ID_CREATEPREDICATE_OUTOFMEMORY_RETURN + 1 ) , D3D10_MESSAGE_ID_CREATECOUNTER_SIMULTANEOUS_ACTIVE_COUNTERS_EXHAUSTED = ( D3D10_MESSAGE_ID_CREATECOUNTER_OUTOFRANGE_COUNTER + 1 ) , D3D10_MESSAGE_ID_CREATECOUNTER_UNSUPPORTED_WELLKNOWN_COUNTER = ( D3D10_MESSAGE_ID_CREATECOUNTER_SIMULTANEOUS_ACTIVE_COUNTERS_EXHAUSTED + 1 ) , D3D10_MESSAGE_ID_CREATECOUNTER_OUTOFMEMORY_RETURN = ( D3D10_MESSAGE_ID_CREATECOUNTER_UNSUPPORTED_WELLKNOWN_COUNTER + 1 ) , D3D10_MESSAGE_ID_CREATECOUNTER_NONEXCLUSIVE_RETURN = ( D3D10_MESSAGE_ID_CREATECOUNTER_OUTOFMEMORY_RETURN + 1 ) , D3D10_MESSAGE_ID_CREATECOUNTER_NULLDESC = ( D3D10_MESSAGE_ID_CREATECOUNTER_NONEXCLUSIVE_RETURN + 1 ) , D3D10_MESSAGE_ID_CHECKCOUNTER_OUTOFRANGE_COUNTER = ( D3D10_MESSAGE_ID_CREATECOUNTER_NULLDESC + 1 ) , D3D10_MESSAGE_ID_CHECKCOUNTER_UNSUPPORTED_WELLKNOWN_COUNTER = ( D3D10_MESSAGE_ID_CHECKCOUNTER_OUTOFRANGE_COUNTER + 1 ) , D3D10_MESSAGE_ID_SETPREDICATION_INVALID_PREDICATE_STATE = ( D3D10_MESSAGE_ID_CHECKCOUNTER_UNSUPPORTED_WELLKNOWN_COUNTER + 1 ) , D3D10_MESSAGE_ID_QUERY_BEGIN_UNSUPPORTED = ( D3D10_MESSAGE_ID_SETPREDICATION_INVALID_PREDICATE_STATE + 1 ) , D3D10_MESSAGE_ID_PREDICATE_BEGIN_DURING_PREDICATION = ( D3D10_MESSAGE_ID_QUERY_BEGIN_UNSUPPORTED + 1 ) , D3D10_MESSAGE_ID_QUERY_BEGIN_DUPLICATE = ( D3D10_MESSAGE_ID_PREDICATE_BEGIN_DURING_PREDICATION + 1 ) , D3D10_MESSAGE_ID_QUERY_BEGIN_ABANDONING_PREVIOUS_RESULTS = ( D3D10_MESSAGE_ID_QUERY_BEGIN_DUPLICATE + 1 ) , D3D10_MESSAGE_ID_PREDICATE_END_DURING_PREDICATION = ( D3D10_MESSAGE_ID_QUERY_BEGIN_ABANDONING_PREVIOUS_RESULTS + 1 ) , D3D10_MESSAGE_ID_QUERY_END_ABANDONING_PREVIOUS_RESULTS = ( D3D10_MESSAGE_ID_PREDICATE_END_DURING_PREDICATION + 1 ) , D3D10_MESSAGE_ID_QUERY_END_WITHOUT_BEGIN = ( D3D10_MESSAGE_ID_QUERY_END_ABANDONING_PREVIOUS_RESULTS + 1 ) , D3D10_MESSAGE_ID_QUERY_GETDATA_INVALID_DATASIZE = ( D3D10_MESSAGE_ID_QUERY_END_WITHOUT_BEGIN + 1 ) , D3D10_MESSAGE_ID_QUERY_GETDATA_INVALID_FLAGS = ( D3D10_MESSAGE_ID_QUERY_GETDATA_INVALID_DATASIZE + 1 ) , D3D10_MESSAGE_ID_QUERY_GETDATA_INVALID_CALL = ( D3D10_MESSAGE_ID_QUERY_GETDATA_INVALID_FLAGS + 1 ) , D3D10_MESSAGE_ID_DEVICE_DRAW_PS_OUTPUT_TYPE_MISMATCH = ( D3D10_MESSAGE_ID_QUERY_GETDATA_INVALID_CALL + 1 ) , D3D10_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_GATHER_UNSUPPORTED = ( D3D10_MESSAGE_ID_DEVICE_DRAW_PS_OUTPUT_TYPE_MISMATCH + 1 ) , D3D10_MESSAGE_ID_DEVICE_DRAW_INVALID_USE_OF_CENTER_MULTISAMPLE_PATTERN = ( D3D10_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_GATHER_UNSUPPORTED + 1 ) , D3D10_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_STRIDE_TOO_LARGE = ( D3D10_MESSAGE_ID_DEVICE_DRAW_INVALID_USE_OF_CENTER_MULTISAMPLE_PATTERN + 1 ) , D3D10_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_INVALIDRANGE = ( D3D10_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_STRIDE_TOO_LARGE + 1 ) , D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_EMPTY_LAYOUT = ( D3D10_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_INVALIDRANGE + 1 ) , D3D10_MESSAGE_ID_DEVICE_DRAW_RESOURCE_SAMPLE_COUNT_MISMATCH = ( D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_EMPTY_LAYOUT + 1 ) , D3D10_MESSAGE_ID_D3D10_MESSAGES_END = ( D3D10_MESSAGE_ID_DEVICE_DRAW_RESOURCE_SAMPLE_COUNT_MISMATCH + 1 ) , D3D10_MESSAGE_ID_D3D10L9_MESSAGES_START = 0x100000, D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_STENCIL_NO_TWO_SIDED = ( D3D10_MESSAGE_ID_D3D10L9_MESSAGES_START + 1 ) , D3D10_MESSAGE_ID_CREATERASTERIZERSTATE_DepthBiasClamp_NOT_SUPPORTED = ( D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_STENCIL_NO_TWO_SIDED + 1 ) , D3D10_MESSAGE_ID_CREATESAMPLERSTATE_NO_COMPARISON_SUPPORT = ( D3D10_MESSAGE_ID_CREATERASTERIZERSTATE_DepthBiasClamp_NOT_SUPPORTED + 1 ) , D3D10_MESSAGE_ID_CREATESAMPLERSTATE_EXCESSIVE_ANISOTROPY = ( D3D10_MESSAGE_ID_CREATESAMPLERSTATE_NO_COMPARISON_SUPPORT + 1 ) , D3D10_MESSAGE_ID_CREATESAMPLERSTATE_BORDER_OUT_OF_RANGE = ( D3D10_MESSAGE_ID_CREATESAMPLERSTATE_EXCESSIVE_ANISOTROPY + 1 ) , D3D10_MESSAGE_ID_VSSETSAMPLERS_NOT_SUPPORTED = ( D3D10_MESSAGE_ID_CREATESAMPLERSTATE_BORDER_OUT_OF_RANGE + 1 ) , D3D10_MESSAGE_ID_VSSETSAMPLERS_TOO_MANY_SAMPLERS = ( D3D10_MESSAGE_ID_VSSETSAMPLERS_NOT_SUPPORTED + 1 ) , D3D10_MESSAGE_ID_PSSETSAMPLERS_TOO_MANY_SAMPLERS = ( D3D10_MESSAGE_ID_VSSETSAMPLERS_TOO_MANY_SAMPLERS + 1 ) , D3D10_MESSAGE_ID_CREATERESOURCE_NO_ARRAYS = ( D3D10_MESSAGE_ID_PSSETSAMPLERS_TOO_MANY_SAMPLERS + 1 ) , D3D10_MESSAGE_ID_CREATERESOURCE_NO_VB_AND_IB_BIND = ( D3D10_MESSAGE_ID_CREATERESOURCE_NO_ARRAYS + 1 ) , D3D10_MESSAGE_ID_CREATERESOURCE_NO_TEXTURE_1D = ( D3D10_MESSAGE_ID_CREATERESOURCE_NO_VB_AND_IB_BIND + 1 ) , D3D10_MESSAGE_ID_CREATERESOURCE_DIMENSION_OUT_OF_RANGE = ( D3D10_MESSAGE_ID_CREATERESOURCE_NO_TEXTURE_1D + 1 ) , D3D10_MESSAGE_ID_CREATERESOURCE_NOT_BINDABLE_AS_SHADER_RESOURCE = ( D3D10_MESSAGE_ID_CREATERESOURCE_DIMENSION_OUT_OF_RANGE + 1 ) , D3D10_MESSAGE_ID_OMSETRENDERTARGETS_TOO_MANY_RENDER_TARGETS = ( D3D10_MESSAGE_ID_CREATERESOURCE_NOT_BINDABLE_AS_SHADER_RESOURCE + 1 ) , D3D10_MESSAGE_ID_OMSETRENDERTARGETS_NO_DIFFERING_BIT_DEPTHS = ( D3D10_MESSAGE_ID_OMSETRENDERTARGETS_TOO_MANY_RENDER_TARGETS + 1 ) , D3D10_MESSAGE_ID_IASETVERTEXBUFFERS_BAD_BUFFER_INDEX = ( D3D10_MESSAGE_ID_OMSETRENDERTARGETS_NO_DIFFERING_BIT_DEPTHS + 1 ) , D3D10_MESSAGE_ID_DEVICE_RSSETVIEWPORTS_TOO_MANY_VIEWPORTS = ( D3D10_MESSAGE_ID_IASETVERTEXBUFFERS_BAD_BUFFER_INDEX + 1 ) , D3D10_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_ADJACENCY_UNSUPPORTED = ( D3D10_MESSAGE_ID_DEVICE_RSSETVIEWPORTS_TOO_MANY_VIEWPORTS + 1 ) , D3D10_MESSAGE_ID_DEVICE_RSSETSCISSORRECTS_TOO_MANY_SCISSORS = ( D3D10_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_ADJACENCY_UNSUPPORTED + 1 ) , D3D10_MESSAGE_ID_COPYRESOURCE_ONLY_TEXTURE_2D_WITHIN_GPU_MEMORY = ( D3D10_MESSAGE_ID_DEVICE_RSSETSCISSORRECTS_TOO_MANY_SCISSORS + 1 ) , D3D10_MESSAGE_ID_COPYRESOURCE_NO_TEXTURE_3D_READBACK = ( D3D10_MESSAGE_ID_COPYRESOURCE_ONLY_TEXTURE_2D_WITHIN_GPU_MEMORY + 1 ) , D3D10_MESSAGE_ID_COPYRESOURCE_NO_TEXTURE_ONLY_READBACK = ( D3D10_MESSAGE_ID_COPYRESOURCE_NO_TEXTURE_3D_READBACK + 1 ) , D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_UNSUPPORTED_FORMAT = ( D3D10_MESSAGE_ID_COPYRESOURCE_NO_TEXTURE_ONLY_READBACK + 1 ) , D3D10_MESSAGE_ID_CREATEBLENDSTATE_NO_ALPHA_TO_COVERAGE = ( D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_UNSUPPORTED_FORMAT + 1 ) , D3D10_MESSAGE_ID_CREATERASTERIZERSTATE_DepthClipEnable_MUST_BE_TRUE = ( D3D10_MESSAGE_ID_CREATEBLENDSTATE_NO_ALPHA_TO_COVERAGE + 1 ) , D3D10_MESSAGE_ID_DRAWINDEXED_STARTINDEXLOCATION_MUST_BE_POSITIVE = ( D3D10_MESSAGE_ID_CREATERASTERIZERSTATE_DepthClipEnable_MUST_BE_TRUE + 1 ) , D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_MUST_USE_LOWEST_LOD = ( D3D10_MESSAGE_ID_DRAWINDEXED_STARTINDEXLOCATION_MUST_BE_POSITIVE + 1 ) , D3D10_MESSAGE_ID_CREATESAMPLERSTATE_MINLOD_MUST_NOT_BE_FRACTIONAL = ( D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_MUST_USE_LOWEST_LOD + 1 ) , D3D10_MESSAGE_ID_CREATESAMPLERSTATE_MAXLOD_MUST_BE_FLT_MAX = ( D3D10_MESSAGE_ID_CREATESAMPLERSTATE_MINLOD_MUST_NOT_BE_FRACTIONAL + 1 ) , D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_FIRSTARRAYSLICE_MUST_BE_ZERO = ( D3D10_MESSAGE_ID_CREATESAMPLERSTATE_MAXLOD_MUST_BE_FLT_MAX + 1 ) , D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_CUBES_MUST_HAVE_6_SIDES = ( D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_FIRSTARRAYSLICE_MUST_BE_ZERO + 1 ) , D3D10_MESSAGE_ID_CREATERESOURCE_NOT_BINDABLE_AS_RENDER_TARGET = ( D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_CUBES_MUST_HAVE_6_SIDES + 1 ) , D3D10_MESSAGE_ID_CREATERESOURCE_NO_DWORD_INDEX_BUFFER = ( D3D10_MESSAGE_ID_CREATERESOURCE_NOT_BINDABLE_AS_RENDER_TARGET + 1 ) , D3D10_MESSAGE_ID_CREATERESOURCE_MSAA_PRECLUDES_SHADER_RESOURCE = ( D3D10_MESSAGE_ID_CREATERESOURCE_NO_DWORD_INDEX_BUFFER + 1 ) , D3D10_MESSAGE_ID_CREATERESOURCE_PRESENTATION_PRECLUDES_SHADER_RESOURCE = ( D3D10_MESSAGE_ID_CREATERESOURCE_MSAA_PRECLUDES_SHADER_RESOURCE + 1 ) , D3D10_MESSAGE_ID_CREATEBLENDSTATE_NO_INDEPENDENT_BLEND_ENABLE = ( D3D10_MESSAGE_ID_CREATERESOURCE_PRESENTATION_PRECLUDES_SHADER_RESOURCE + 1 ) , D3D10_MESSAGE_ID_CREATEBLENDSTATE_NO_INDEPENDENT_WRITE_MASKS = ( D3D10_MESSAGE_ID_CREATEBLENDSTATE_NO_INDEPENDENT_BLEND_ENABLE + 1 ) , D3D10_MESSAGE_ID_CREATERESOURCE_NO_STREAM_OUT = ( D3D10_MESSAGE_ID_CREATEBLENDSTATE_NO_INDEPENDENT_WRITE_MASKS + 1 ) , D3D10_MESSAGE_ID_CREATERESOURCE_ONLY_VB_IB_FOR_BUFFERS = ( D3D10_MESSAGE_ID_CREATERESOURCE_NO_STREAM_OUT + 1 ) , D3D10_MESSAGE_ID_CREATERESOURCE_NO_AUTOGEN_FOR_VOLUMES = ( D3D10_MESSAGE_ID_CREATERESOURCE_ONLY_VB_IB_FOR_BUFFERS + 1 ) , D3D10_MESSAGE_ID_CREATERESOURCE_DXGI_FORMAT_R8G8B8A8_CANNOT_BE_SHARED = ( D3D10_MESSAGE_ID_CREATERESOURCE_NO_AUTOGEN_FOR_VOLUMES + 1 ) , D3D10_MESSAGE_ID_VSSHADERRESOURCES_NOT_SUPPORTED = ( D3D10_MESSAGE_ID_CREATERESOURCE_DXGI_FORMAT_R8G8B8A8_CANNOT_BE_SHARED + 1 ) , D3D10_MESSAGE_ID_GEOMETRY_SHADER_NOT_SUPPORTED = ( D3D10_MESSAGE_ID_VSSHADERRESOURCES_NOT_SUPPORTED + 1 ) , D3D10_MESSAGE_ID_STREAM_OUT_NOT_SUPPORTED = ( D3D10_MESSAGE_ID_GEOMETRY_SHADER_NOT_SUPPORTED + 1 ) , D3D10_MESSAGE_ID_TEXT_FILTER_NOT_SUPPORTED = ( D3D10_MESSAGE_ID_STREAM_OUT_NOT_SUPPORTED + 1 ) , D3D10_MESSAGE_ID_CREATEBLENDSTATE_NO_SEPARATE_ALPHA_BLEND = ( D3D10_MESSAGE_ID_TEXT_FILTER_NOT_SUPPORTED + 1 ) , D3D10_MESSAGE_ID_CREATEBLENDSTATE_NO_MRT_BLEND = ( D3D10_MESSAGE_ID_CREATEBLENDSTATE_NO_SEPARATE_ALPHA_BLEND + 1 ) , D3D10_MESSAGE_ID_CREATEBLENDSTATE_OPERATION_NOT_SUPPORTED = ( D3D10_MESSAGE_ID_CREATEBLENDSTATE_NO_MRT_BLEND + 1 ) , D3D10_MESSAGE_ID_CREATESAMPLERSTATE_NO_MIRRORONCE = ( D3D10_MESSAGE_ID_CREATEBLENDSTATE_OPERATION_NOT_SUPPORTED + 1 ) , D3D10_MESSAGE_ID_DRAWINSTANCED_NOT_SUPPORTED = ( D3D10_MESSAGE_ID_CREATESAMPLERSTATE_NO_MIRRORONCE + 1 ) , D3D10_MESSAGE_ID_DRAWINDEXEDINSTANCED_NOT_SUPPORTED_BELOW_9_3 = ( D3D10_MESSAGE_ID_DRAWINSTANCED_NOT_SUPPORTED + 1 ) , D3D10_MESSAGE_ID_DRAWINDEXED_POINTLIST_UNSUPPORTED = ( D3D10_MESSAGE_ID_DRAWINDEXEDINSTANCED_NOT_SUPPORTED_BELOW_9_3 + 1 ) , D3D10_MESSAGE_ID_SETBLENDSTATE_SAMPLE_MASK_CANNOT_BE_ZERO = ( D3D10_MESSAGE_ID_DRAWINDEXED_POINTLIST_UNSUPPORTED + 1 ) , D3D10_MESSAGE_ID_CREATERESOURCE_DIMENSION_EXCEEDS_FEATURE_LEVEL_DEFINITION = ( D3D10_MESSAGE_ID_SETBLENDSTATE_SAMPLE_MASK_CANNOT_BE_ZERO + 1 ) , D3D10_MESSAGE_ID_CREATERESOURCE_ONLY_SINGLE_MIP_LEVEL_DEPTH_STENCIL_SUPPORTED = ( D3D10_MESSAGE_ID_CREATERESOURCE_DIMENSION_EXCEEDS_FEATURE_LEVEL_DEFINITION + 1 ) , D3D10_MESSAGE_ID_DEVICE_RSSETSCISSORRECTS_NEGATIVESCISSOR = ( D3D10_MESSAGE_ID_CREATERESOURCE_ONLY_SINGLE_MIP_LEVEL_DEPTH_STENCIL_SUPPORTED + 1 ) , D3D10_MESSAGE_ID_SLOT_ZERO_MUST_BE_D3D10_INPUT_PER_VERTEX_DATA = ( D3D10_MESSAGE_ID_DEVICE_RSSETSCISSORRECTS_NEGATIVESCISSOR + 1 ) , D3D10_MESSAGE_ID_CREATERESOURCE_NON_POW_2_MIPMAP = ( D3D10_MESSAGE_ID_SLOT_ZERO_MUST_BE_D3D10_INPUT_PER_VERTEX_DATA + 1 ) , D3D10_MESSAGE_ID_CREATESAMPLERSTATE_BORDER_NOT_SUPPORTED = ( D3D10_MESSAGE_ID_CREATERESOURCE_NON_POW_2_MIPMAP + 1 ) , D3D10_MESSAGE_ID_OMSETRENDERTARGETS_NO_SRGB_MRT = ( D3D10_MESSAGE_ID_CREATESAMPLERSTATE_BORDER_NOT_SUPPORTED + 1 ) , D3D10_MESSAGE_ID_D3D10L9_MESSAGES_END = ( D3D10_MESSAGE_ID_OMSETRENDERTARGETS_NO_SRGB_MRT + 1 ) } D3D10_MESSAGE_ID; typedef struct D3D10_MESSAGE { D3D10_MESSAGE_CATEGORY Category; D3D10_MESSAGE_SEVERITY Severity; D3D10_MESSAGE_ID ID; const char *pDescription; SIZE_T DescriptionByteLength; } D3D10_MESSAGE; typedef struct D3D10_INFO_QUEUE_FILTER_DESC { UINT NumCategories; D3D10_MESSAGE_CATEGORY *pCategoryList; UINT NumSeverities; D3D10_MESSAGE_SEVERITY *pSeverityList; UINT NumIDs; D3D10_MESSAGE_ID *pIDList; } D3D10_INFO_QUEUE_FILTER_DESC; typedef struct D3D10_INFO_QUEUE_FILTER { D3D10_INFO_QUEUE_FILTER_DESC AllowList; D3D10_INFO_QUEUE_FILTER_DESC DenyList; } D3D10_INFO_QUEUE_FILTER; #define D3D10_INFO_QUEUE_DEFAULT_MESSAGE_COUNT_LIMIT 1024 extern RPC_IF_HANDLE __MIDL_itf_d3d10sdklayers_0000_0002_v0_0_c_ifspec; extern RPC_IF_HANDLE __MIDL_itf_d3d10sdklayers_0000_0002_v0_0_s_ifspec; #ifndef __ID3D10InfoQueue_INTERFACE_DEFINED__ #define __ID3D10InfoQueue_INTERFACE_DEFINED__ /* interface ID3D10InfoQueue */ /* [unique][local][object][uuid] */ EXTERN_C const IID IID_ID3D10InfoQueue; #if defined(__cplusplus) && !defined(CINTERFACE) MIDL_INTERFACE("1b940b17-2642-4d1f-ab1f-b99bad0c395f") ID3D10InfoQueue : public IUnknown { public: virtual HRESULT STDMETHODCALLTYPE SetMessageCountLimit( /* [annotation] */ __in UINT64 MessageCountLimit) = 0; virtual void STDMETHODCALLTYPE ClearStoredMessages( void) = 0; virtual HRESULT STDMETHODCALLTYPE GetMessage( /* [annotation] */ __in UINT64 MessageIndex, /* [annotation] */ __out_bcount_opt(*pMessageByteLength) D3D10_MESSAGE *pMessage, /* [annotation] */ __inout SIZE_T *pMessageByteLength) = 0; virtual UINT64 STDMETHODCALLTYPE GetNumMessagesAllowedByStorageFilter( void) = 0; virtual UINT64 STDMETHODCALLTYPE GetNumMessagesDeniedByStorageFilter( void) = 0; virtual UINT64 STDMETHODCALLTYPE GetNumStoredMessages( void) = 0; virtual UINT64 STDMETHODCALLTYPE GetNumStoredMessagesAllowedByRetrievalFilter( void) = 0; virtual UINT64 STDMETHODCALLTYPE GetNumMessagesDiscardedByMessageCountLimit( void) = 0; virtual UINT64 STDMETHODCALLTYPE GetMessageCountLimit( void) = 0; virtual HRESULT STDMETHODCALLTYPE AddStorageFilterEntries( /* [annotation] */ __in D3D10_INFO_QUEUE_FILTER *pFilter) = 0; virtual HRESULT STDMETHODCALLTYPE GetStorageFilter( /* [annotation] */ __out_bcount_opt(*pFilterByteLength) D3D10_INFO_QUEUE_FILTER *pFilter, /* [annotation] */ __inout SIZE_T *pFilterByteLength) = 0; virtual void STDMETHODCALLTYPE ClearStorageFilter( void) = 0; virtual HRESULT STDMETHODCALLTYPE PushEmptyStorageFilter( void) = 0; virtual HRESULT STDMETHODCALLTYPE PushCopyOfStorageFilter( void) = 0; virtual HRESULT STDMETHODCALLTYPE PushStorageFilter( /* [annotation] */ __in D3D10_INFO_QUEUE_FILTER *pFilter) = 0; virtual void STDMETHODCALLTYPE PopStorageFilter( void) = 0; virtual UINT STDMETHODCALLTYPE GetStorageFilterStackSize( void) = 0; virtual HRESULT STDMETHODCALLTYPE AddRetrievalFilterEntries( /* [annotation] */ __in D3D10_INFO_QUEUE_FILTER *pFilter) = 0; virtual HRESULT STDMETHODCALLTYPE GetRetrievalFilter( /* [annotation] */ __out_bcount_opt(*pFilterByteLength) D3D10_INFO_QUEUE_FILTER *pFilter, /* [annotation] */ __inout SIZE_T *pFilterByteLength) = 0; virtual void STDMETHODCALLTYPE ClearRetrievalFilter( void) = 0; virtual HRESULT STDMETHODCALLTYPE PushEmptyRetrievalFilter( void) = 0; virtual HRESULT STDMETHODCALLTYPE PushCopyOfRetrievalFilter( void) = 0; virtual HRESULT STDMETHODCALLTYPE PushRetrievalFilter( /* [annotation] */ __in D3D10_INFO_QUEUE_FILTER *pFilter) = 0; virtual void STDMETHODCALLTYPE PopRetrievalFilter( void) = 0; virtual UINT STDMETHODCALLTYPE GetRetrievalFilterStackSize( void) = 0; virtual HRESULT STDMETHODCALLTYPE AddMessage( /* [annotation] */ __in D3D10_MESSAGE_CATEGORY Category, /* [annotation] */ __in D3D10_MESSAGE_SEVERITY Severity, /* [annotation] */ __in D3D10_MESSAGE_ID ID, /* [annotation] */ __in LPCSTR pDescription) = 0; virtual HRESULT STDMETHODCALLTYPE AddApplicationMessage( /* [annotation] */ __in D3D10_MESSAGE_SEVERITY Severity, /* [annotation] */ __in LPCSTR pDescription) = 0; virtual HRESULT STDMETHODCALLTYPE SetBreakOnCategory( /* [annotation] */ __in D3D10_MESSAGE_CATEGORY Category, /* [annotation] */ __in BOOL bEnable) = 0; virtual HRESULT STDMETHODCALLTYPE SetBreakOnSeverity( /* [annotation] */ __in D3D10_MESSAGE_SEVERITY Severity, /* [annotation] */ __in BOOL bEnable) = 0; virtual HRESULT STDMETHODCALLTYPE SetBreakOnID( /* [annotation] */ __in D3D10_MESSAGE_ID ID, /* [annotation] */ __in BOOL bEnable) = 0; virtual BOOL STDMETHODCALLTYPE GetBreakOnCategory( /* [annotation] */ __in D3D10_MESSAGE_CATEGORY Category) = 0; virtual BOOL STDMETHODCALLTYPE GetBreakOnSeverity( /* [annotation] */ __in D3D10_MESSAGE_SEVERITY Severity) = 0; virtual BOOL STDMETHODCALLTYPE GetBreakOnID( /* [annotation] */ __in D3D10_MESSAGE_ID ID) = 0; virtual void STDMETHODCALLTYPE SetMuteDebugOutput( /* [annotation] */ __in BOOL bMute) = 0; virtual BOOL STDMETHODCALLTYPE GetMuteDebugOutput( void) = 0; }; #else /* C style interface */ typedef struct ID3D10InfoQueueVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE *QueryInterface )( ID3D10InfoQueue * This, /* [in] */ REFIID riid, /* [annotation][iid_is][out] */ __RPC__deref_out void **ppvObject); ULONG ( STDMETHODCALLTYPE *AddRef )( ID3D10InfoQueue * This); ULONG ( STDMETHODCALLTYPE *Release )( ID3D10InfoQueue * This); HRESULT ( STDMETHODCALLTYPE *SetMessageCountLimit )( ID3D10InfoQueue * This, /* [annotation] */ __in UINT64 MessageCountLimit); void ( STDMETHODCALLTYPE *ClearStoredMessages )( ID3D10InfoQueue * This); HRESULT ( STDMETHODCALLTYPE *GetMessage )( ID3D10InfoQueue * This, /* [annotation] */ __in UINT64 MessageIndex, /* [annotation] */ __out_bcount_opt(*pMessageByteLength) D3D10_MESSAGE *pMessage, /* [annotation] */ __inout SIZE_T *pMessageByteLength); UINT64 ( STDMETHODCALLTYPE *GetNumMessagesAllowedByStorageFilter )( ID3D10InfoQueue * This); UINT64 ( STDMETHODCALLTYPE *GetNumMessagesDeniedByStorageFilter )( ID3D10InfoQueue * This); UINT64 ( STDMETHODCALLTYPE *GetNumStoredMessages )( ID3D10InfoQueue * This); UINT64 ( STDMETHODCALLTYPE *GetNumStoredMessagesAllowedByRetrievalFilter )( ID3D10InfoQueue * This); UINT64 ( STDMETHODCALLTYPE *GetNumMessagesDiscardedByMessageCountLimit )( ID3D10InfoQueue * This); UINT64 ( STDMETHODCALLTYPE *GetMessageCountLimit )( ID3D10InfoQueue * This); HRESULT ( STDMETHODCALLTYPE *AddStorageFilterEntries )( ID3D10InfoQueue * This, /* [annotation] */ __in D3D10_INFO_QUEUE_FILTER *pFilter); HRESULT ( STDMETHODCALLTYPE *GetStorageFilter )( ID3D10InfoQueue * This, /* [annotation] */ __out_bcount_opt(*pFilterByteLength) D3D10_INFO_QUEUE_FILTER *pFilter, /* [annotation] */ __inout SIZE_T *pFilterByteLength); void ( STDMETHODCALLTYPE *ClearStorageFilter )( ID3D10InfoQueue * This); HRESULT ( STDMETHODCALLTYPE *PushEmptyStorageFilter )( ID3D10InfoQueue * This); HRESULT ( STDMETHODCALLTYPE *PushCopyOfStorageFilter )( ID3D10InfoQueue * This); HRESULT ( STDMETHODCALLTYPE *PushStorageFilter )( ID3D10InfoQueue * This, /* [annotation] */ __in D3D10_INFO_QUEUE_FILTER *pFilter); void ( STDMETHODCALLTYPE *PopStorageFilter )( ID3D10InfoQueue * This); UINT ( STDMETHODCALLTYPE *GetStorageFilterStackSize )( ID3D10InfoQueue * This); HRESULT ( STDMETHODCALLTYPE *AddRetrievalFilterEntries )( ID3D10InfoQueue * This, /* [annotation] */ __in D3D10_INFO_QUEUE_FILTER *pFilter); HRESULT ( STDMETHODCALLTYPE *GetRetrievalFilter )( ID3D10InfoQueue * This, /* [annotation] */ __out_bcount_opt(*pFilterByteLength) D3D10_INFO_QUEUE_FILTER *pFilter, /* [annotation] */ __inout SIZE_T *pFilterByteLength); void ( STDMETHODCALLTYPE *ClearRetrievalFilter )( ID3D10InfoQueue * This); HRESULT ( STDMETHODCALLTYPE *PushEmptyRetrievalFilter )( ID3D10InfoQueue * This); HRESULT ( STDMETHODCALLTYPE *PushCopyOfRetrievalFilter )( ID3D10InfoQueue * This); HRESULT ( STDMETHODCALLTYPE *PushRetrievalFilter )( ID3D10InfoQueue * This, /* [annotation] */ __in D3D10_INFO_QUEUE_FILTER *pFilter); void ( STDMETHODCALLTYPE *PopRetrievalFilter )( ID3D10InfoQueue * This); UINT ( STDMETHODCALLTYPE *GetRetrievalFilterStackSize )( ID3D10InfoQueue * This); HRESULT ( STDMETHODCALLTYPE *AddMessage )( ID3D10InfoQueue * This, /* [annotation] */ __in D3D10_MESSAGE_CATEGORY Category, /* [annotation] */ __in D3D10_MESSAGE_SEVERITY Severity, /* [annotation] */ __in D3D10_MESSAGE_ID ID, /* [annotation] */ __in LPCSTR pDescription); HRESULT ( STDMETHODCALLTYPE *AddApplicationMessage )( ID3D10InfoQueue * This, /* [annotation] */ __in D3D10_MESSAGE_SEVERITY Severity, /* [annotation] */ __in LPCSTR pDescription); HRESULT ( STDMETHODCALLTYPE *SetBreakOnCategory )( ID3D10InfoQueue * This, /* [annotation] */ __in D3D10_MESSAGE_CATEGORY Category, /* [annotation] */ __in BOOL bEnable); HRESULT ( STDMETHODCALLTYPE *SetBreakOnSeverity )( ID3D10InfoQueue * This, /* [annotation] */ __in D3D10_MESSAGE_SEVERITY Severity, /* [annotation] */ __in BOOL bEnable); HRESULT ( STDMETHODCALLTYPE *SetBreakOnID )( ID3D10InfoQueue * This, /* [annotation] */ __in D3D10_MESSAGE_ID ID, /* [annotation] */ __in BOOL bEnable); BOOL ( STDMETHODCALLTYPE *GetBreakOnCategory )( ID3D10InfoQueue * This, /* [annotation] */ __in D3D10_MESSAGE_CATEGORY Category); BOOL ( STDMETHODCALLTYPE *GetBreakOnSeverity )( ID3D10InfoQueue * This, /* [annotation] */ __in D3D10_MESSAGE_SEVERITY Severity); BOOL ( STDMETHODCALLTYPE *GetBreakOnID )( ID3D10InfoQueue * This, /* [annotation] */ __in D3D10_MESSAGE_ID ID); void ( STDMETHODCALLTYPE *SetMuteDebugOutput )( ID3D10InfoQueue * This, /* [annotation] */ __in BOOL bMute); BOOL ( STDMETHODCALLTYPE *GetMuteDebugOutput )( ID3D10InfoQueue * This); END_INTERFACE } ID3D10InfoQueueVtbl; interface ID3D10InfoQueue { CONST_VTBL struct ID3D10InfoQueueVtbl *lpVtbl; }; #ifdef COBJMACROS #define ID3D10InfoQueue_QueryInterface(This,riid,ppvObject) \ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) #define ID3D10InfoQueue_AddRef(This) \ ( (This)->lpVtbl -> AddRef(This) ) #define ID3D10InfoQueue_Release(This) \ ( (This)->lpVtbl -> Release(This) ) #define ID3D10InfoQueue_SetMessageCountLimit(This,MessageCountLimit) \ ( (This)->lpVtbl -> SetMessageCountLimit(This,MessageCountLimit) ) #define ID3D10InfoQueue_ClearStoredMessages(This) \ ( (This)->lpVtbl -> ClearStoredMessages(This) ) #define ID3D10InfoQueue_GetMessage(This,MessageIndex,pMessage,pMessageByteLength) \ ( (This)->lpVtbl -> GetMessage(This,MessageIndex,pMessage,pMessageByteLength) ) #define ID3D10InfoQueue_GetNumMessagesAllowedByStorageFilter(This) \ ( (This)->lpVtbl -> GetNumMessagesAllowedByStorageFilter(This) ) #define ID3D10InfoQueue_GetNumMessagesDeniedByStorageFilter(This) \ ( (This)->lpVtbl -> GetNumMessagesDeniedByStorageFilter(This) ) #define ID3D10InfoQueue_GetNumStoredMessages(This) \ ( (This)->lpVtbl -> GetNumStoredMessages(This) ) #define ID3D10InfoQueue_GetNumStoredMessagesAllowedByRetrievalFilter(This) \ ( (This)->lpVtbl -> GetNumStoredMessagesAllowedByRetrievalFilter(This) ) #define ID3D10InfoQueue_GetNumMessagesDiscardedByMessageCountLimit(This) \ ( (This)->lpVtbl -> GetNumMessagesDiscardedByMessageCountLimit(This) ) #define ID3D10InfoQueue_GetMessageCountLimit(This) \ ( (This)->lpVtbl -> GetMessageCountLimit(This) ) #define ID3D10InfoQueue_AddStorageFilterEntries(This,pFilter) \ ( (This)->lpVtbl -> AddStorageFilterEntries(This,pFilter) ) #define ID3D10InfoQueue_GetStorageFilter(This,pFilter,pFilterByteLength) \ ( (This)->lpVtbl -> GetStorageFilter(This,pFilter,pFilterByteLength) ) #define ID3D10InfoQueue_ClearStorageFilter(This) \ ( (This)->lpVtbl -> ClearStorageFilter(This) ) #define ID3D10InfoQueue_PushEmptyStorageFilter(This) \ ( (This)->lpVtbl -> PushEmptyStorageFilter(This) ) #define ID3D10InfoQueue_PushCopyOfStorageFilter(This) \ ( (This)->lpVtbl -> PushCopyOfStorageFilter(This) ) #define ID3D10InfoQueue_PushStorageFilter(This,pFilter) \ ( (This)->lpVtbl -> PushStorageFilter(This,pFilter) ) #define ID3D10InfoQueue_PopStorageFilter(This) \ ( (This)->lpVtbl -> PopStorageFilter(This) ) #define ID3D10InfoQueue_GetStorageFilterStackSize(This) \ ( (This)->lpVtbl -> GetStorageFilterStackSize(This) ) #define ID3D10InfoQueue_AddRetrievalFilterEntries(This,pFilter) \ ( (This)->lpVtbl -> AddRetrievalFilterEntries(This,pFilter) ) #define ID3D10InfoQueue_GetRetrievalFilter(This,pFilter,pFilterByteLength) \ ( (This)->lpVtbl -> GetRetrievalFilter(This,pFilter,pFilterByteLength) ) #define ID3D10InfoQueue_ClearRetrievalFilter(This) \ ( (This)->lpVtbl -> ClearRetrievalFilter(This) ) #define ID3D10InfoQueue_PushEmptyRetrievalFilter(This) \ ( (This)->lpVtbl -> PushEmptyRetrievalFilter(This) ) #define ID3D10InfoQueue_PushCopyOfRetrievalFilter(This) \ ( (This)->lpVtbl -> PushCopyOfRetrievalFilter(This) ) #define ID3D10InfoQueue_PushRetrievalFilter(This,pFilter) \ ( (This)->lpVtbl -> PushRetrievalFilter(This,pFilter) ) #define ID3D10InfoQueue_PopRetrievalFilter(This) \ ( (This)->lpVtbl -> PopRetrievalFilter(This) ) #define ID3D10InfoQueue_GetRetrievalFilterStackSize(This) \ ( (This)->lpVtbl -> GetRetrievalFilterStackSize(This) ) #define ID3D10InfoQueue_AddMessage(This,Category,Severity,ID,pDescription) \ ( (This)->lpVtbl -> AddMessage(This,Category,Severity,ID,pDescription) ) #define ID3D10InfoQueue_AddApplicationMessage(This,Severity,pDescription) \ ( (This)->lpVtbl -> AddApplicationMessage(This,Severity,pDescription) ) #define ID3D10InfoQueue_SetBreakOnCategory(This,Category,bEnable) \ ( (This)->lpVtbl -> SetBreakOnCategory(This,Category,bEnable) ) #define ID3D10InfoQueue_SetBreakOnSeverity(This,Severity,bEnable) \ ( (This)->lpVtbl -> SetBreakOnSeverity(This,Severity,bEnable) ) #define ID3D10InfoQueue_SetBreakOnID(This,ID,bEnable) \ ( (This)->lpVtbl -> SetBreakOnID(This,ID,bEnable) ) #define ID3D10InfoQueue_GetBreakOnCategory(This,Category) \ ( (This)->lpVtbl -> GetBreakOnCategory(This,Category) ) #define ID3D10InfoQueue_GetBreakOnSeverity(This,Severity) \ ( (This)->lpVtbl -> GetBreakOnSeverity(This,Severity) ) #define ID3D10InfoQueue_GetBreakOnID(This,ID) \ ( (This)->lpVtbl -> GetBreakOnID(This,ID) ) #define ID3D10InfoQueue_SetMuteDebugOutput(This,bMute) \ ( (This)->lpVtbl -> SetMuteDebugOutput(This,bMute) ) #define ID3D10InfoQueue_GetMuteDebugOutput(This) \ ( (This)->lpVtbl -> GetMuteDebugOutput(This) ) #endif /* COBJMACROS */ #endif /* C style interface */ #endif /* __ID3D10InfoQueue_INTERFACE_DEFINED__ */ /* interface __MIDL_itf_d3d10sdklayers_0000_0003 */ /* [local] */ #define D3D10_REGKEY_PATH __TEXT("Software\\Microsoft\\Direct3D") #define D3D10_MUTE_DEBUG_OUTPUT __TEXT("MuteDebugOutput") #define D3D10_ENABLE_BREAK_ON_MESSAGE __TEXT("EnableBreakOnMessage") #define D3D10_INFOQUEUE_STORAGE_FILTER_OVERRIDE __TEXT("InfoQueueStorageFilterOverride") #define D3D10_MUTE_CATEGORY __TEXT("Mute_CATEGORY_%s") #define D3D10_MUTE_SEVERITY __TEXT("Mute_SEVERITY_%s") #define D3D10_MUTE_ID_STRING __TEXT("Mute_ID_%s") #define D3D10_MUTE_ID_DECIMAL __TEXT("Mute_ID_%d") #define D3D10_UNMUTE_SEVERITY_INFO __TEXT("Unmute_SEVERITY_INFO") #define D3D10_BREAKON_CATEGORY __TEXT("BreakOn_CATEGORY_%s") #define D3D10_BREAKON_SEVERITY __TEXT("BreakOn_SEVERITY_%s") #define D3D10_BREAKON_ID_STRING __TEXT("BreakOn_ID_%s") #define D3D10_BREAKON_ID_DECIMAL __TEXT("BreakOn_ID_%d") #define D3D10_APPSIZE_STRING __TEXT("Size") #define D3D10_APPNAME_STRING __TEXT("Name") DEFINE_GUID(IID_ID3D10Debug,0x9B7E4E01,0x342C,0x4106,0xA1,0x9F,0x4F,0x27,0x04,0xF6,0x89,0xF0); DEFINE_GUID(IID_ID3D10SwitchToRef,0x9B7E4E02,0x342C,0x4106,0xA1,0x9F,0x4F,0x27,0x04,0xF6,0x89,0xF0); DEFINE_GUID(IID_ID3D10InfoQueue,0x1b940b17,0x2642,0x4d1f,0xab,0x1f,0xb9,0x9b,0xad,0x0c,0x39,0x5f); extern RPC_IF_HANDLE __MIDL_itf_d3d10sdklayers_0000_0003_v0_0_c_ifspec; extern RPC_IF_HANDLE __MIDL_itf_d3d10sdklayers_0000_0003_v0_0_s_ifspec; /* Additional Prototypes for ALL interfaces */ /* end of Additional Prototypes */ #ifdef __cplusplus } #endif #endif ================================================ FILE: Include/d3d8.h ================================================ /*==========================================================================; * * Copyright (C) Microsoft Corporation. All Rights Reserved. * * File: d3d8.h * Content: Direct3D include file * ****************************************************************************/ #ifndef _D3D8_H_ #define _D3D8_H_ #ifndef DIRECT3D_VERSION #define DIRECT3D_VERSION 0x0800 #endif //DIRECT3D_VERSION // include this file content only if compiling for DX8 interfaces #if(DIRECT3D_VERSION >= 0x0800) /* This identifier is passed to Direct3DCreate8 in order to ensure that an * application was built against the correct header files. This number is * incremented whenever a header (or other) change would require applications * to be rebuilt. If the version doesn't match, Direct3DCreate8 will fail. * (The number itself has no meaning.)*/ #define D3D_SDK_VERSION 220 #include #define COM_NO_WINDOWS_H #include #include #if !defined(HMONITOR_DECLARED) && (WINVER < 0x0500) #define HMONITOR_DECLARED DECLARE_HANDLE(HMONITOR); #endif #define D3DAPI WINAPI /* * Interface IID's */ #if defined( _WIN32 ) && !defined( _NO_COM) /* IID_IDirect3D8 */ /* {1DD9E8DA-1C77-4d40-B0CF-98FEFDFF9512} */ DEFINE_GUID(IID_IDirect3D8, 0x1dd9e8da, 0x1c77, 0x4d40, 0xb0, 0xcf, 0x98, 0xfe, 0xfd, 0xff, 0x95, 0x12); /* IID_IDirect3DDevice8 */ /* {7385E5DF-8FE8-41D5-86B6-D7B48547B6CF} */ DEFINE_GUID(IID_IDirect3DDevice8, 0x7385e5df, 0x8fe8, 0x41d5, 0x86, 0xb6, 0xd7, 0xb4, 0x85, 0x47, 0xb6, 0xcf); /* IID_IDirect3DResource8 */ /* {1B36BB7B-09B7-410a-B445-7D1430D7B33F} */ DEFINE_GUID(IID_IDirect3DResource8, 0x1b36bb7b, 0x9b7, 0x410a, 0xb4, 0x45, 0x7d, 0x14, 0x30, 0xd7, 0xb3, 0x3f); /* IID_IDirect3DBaseTexture8 */ /* {B4211CFA-51B9-4a9f-AB78-DB99B2BB678E} */ DEFINE_GUID(IID_IDirect3DBaseTexture8, 0xb4211cfa, 0x51b9, 0x4a9f, 0xab, 0x78, 0xdb, 0x99, 0xb2, 0xbb, 0x67, 0x8e); /* IID_IDirect3DTexture8 */ /* {E4CDD575-2866-4f01-B12E-7EECE1EC9358} */ DEFINE_GUID(IID_IDirect3DTexture8, 0xe4cdd575, 0x2866, 0x4f01, 0xb1, 0x2e, 0x7e, 0xec, 0xe1, 0xec, 0x93, 0x58); /* IID_IDirect3DCubeTexture8 */ /* {3EE5B968-2ACA-4c34-8BB5-7E0C3D19B750} */ DEFINE_GUID(IID_IDirect3DCubeTexture8, 0x3ee5b968, 0x2aca, 0x4c34, 0x8b, 0xb5, 0x7e, 0x0c, 0x3d, 0x19, 0xb7, 0x50); /* IID_IDirect3DVolumeTexture8 */ /* {4B8AAAFA-140F-42ba-9131-597EAFAA2EAD} */ DEFINE_GUID(IID_IDirect3DVolumeTexture8, 0x4b8aaafa, 0x140f, 0x42ba, 0x91, 0x31, 0x59, 0x7e, 0xaf, 0xaa, 0x2e, 0xad); /* IID_IDirect3DVertexBuffer8 */ /* {8AEEEAC7-05F9-44d4-B591-000B0DF1CB95} */ DEFINE_GUID(IID_IDirect3DVertexBuffer8, 0x8aeeeac7, 0x05f9, 0x44d4, 0xb5, 0x91, 0x00, 0x0b, 0x0d, 0xf1, 0xcb, 0x95); /* IID_IDirect3DIndexBuffer8 */ /* {0E689C9A-053D-44a0-9D92-DB0E3D750F86} */ DEFINE_GUID(IID_IDirect3DIndexBuffer8, 0x0e689c9a, 0x053d, 0x44a0, 0x9d, 0x92, 0xdb, 0x0e, 0x3d, 0x75, 0x0f, 0x86); /* IID_IDirect3DSurface8 */ /* {B96EEBCA-B326-4ea5-882F-2FF5BAE021DD} */ DEFINE_GUID(IID_IDirect3DSurface8, 0xb96eebca, 0xb326, 0x4ea5, 0x88, 0x2f, 0x2f, 0xf5, 0xba, 0xe0, 0x21, 0xdd); /* IID_IDirect3DVolume8 */ /* {BD7349F5-14F1-42e4-9C79-972380DB40C0} */ DEFINE_GUID(IID_IDirect3DVolume8, 0xbd7349f5, 0x14f1, 0x42e4, 0x9c, 0x79, 0x97, 0x23, 0x80, 0xdb, 0x40, 0xc0); /* IID_IDirect3DSwapChain8 */ /* {928C088B-76B9-4C6B-A536-A590853876CD} */ DEFINE_GUID(IID_IDirect3DSwapChain8, 0x928c088b, 0x76b9, 0x4c6b, 0xa5, 0x36, 0xa5, 0x90, 0x85, 0x38, 0x76, 0xcd); #endif #ifdef __cplusplus interface IDirect3D8; interface IDirect3DDevice8; interface IDirect3DResource8; interface IDirect3DBaseTexture8; interface IDirect3DTexture8; interface IDirect3DVolumeTexture8; interface IDirect3DCubeTexture8; interface IDirect3DVertexBuffer8; interface IDirect3DIndexBuffer8; interface IDirect3DSurface8; interface IDirect3DVolume8; interface IDirect3DSwapChain8; #endif typedef interface IDirect3D8 IDirect3D8; typedef interface IDirect3DDevice8 IDirect3DDevice8; typedef interface IDirect3DResource8 IDirect3DResource8; typedef interface IDirect3DBaseTexture8 IDirect3DBaseTexture8; typedef interface IDirect3DTexture8 IDirect3DTexture8; typedef interface IDirect3DVolumeTexture8 IDirect3DVolumeTexture8; typedef interface IDirect3DCubeTexture8 IDirect3DCubeTexture8; typedef interface IDirect3DVertexBuffer8 IDirect3DVertexBuffer8; typedef interface IDirect3DIndexBuffer8 IDirect3DIndexBuffer8; typedef interface IDirect3DSurface8 IDirect3DSurface8; typedef interface IDirect3DVolume8 IDirect3DVolume8; typedef interface IDirect3DSwapChain8 IDirect3DSwapChain8; #include "d3d8types.h" #include "d3d8caps.h" #ifdef __cplusplus extern "C" { #endif /* * DLL Function for creating a Direct3D8 object. This object supports * enumeration and allows the creation of Direct3DDevice8 objects. * Pass the value of the constant D3D_SDK_VERSION to this function, so * that the run-time can validate that your application was compiled * against the right headers. */ IDirect3D8 * WINAPI Direct3DCreate8(UINT SDKVersion); /* * Direct3D interfaces */ #undef INTERFACE #define INTERFACE IDirect3D8 DECLARE_INTERFACE_(IDirect3D8, IUnknown) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3D8 methods ***/ STDMETHOD(RegisterSoftwareDevice)(THIS_ void* pInitializeFunction) PURE; STDMETHOD_(UINT, GetAdapterCount)(THIS) PURE; STDMETHOD(GetAdapterIdentifier)(THIS_ UINT Adapter,DWORD Flags,D3DADAPTER_IDENTIFIER8* pIdentifier) PURE; STDMETHOD_(UINT, GetAdapterModeCount)(THIS_ UINT Adapter) PURE; STDMETHOD(EnumAdapterModes)(THIS_ UINT Adapter,UINT Mode,D3DDISPLAYMODE* pMode) PURE; STDMETHOD(GetAdapterDisplayMode)(THIS_ UINT Adapter,D3DDISPLAYMODE* pMode) PURE; STDMETHOD(CheckDeviceType)(THIS_ UINT Adapter,D3DDEVTYPE CheckType,D3DFORMAT DisplayFormat,D3DFORMAT BackBufferFormat,BOOL Windowed) PURE; STDMETHOD(CheckDeviceFormat)(THIS_ UINT Adapter,D3DDEVTYPE DeviceType,D3DFORMAT AdapterFormat,DWORD Usage,D3DRESOURCETYPE RType,D3DFORMAT CheckFormat) PURE; STDMETHOD(CheckDeviceMultiSampleType)(THIS_ UINT Adapter,D3DDEVTYPE DeviceType,D3DFORMAT SurfaceFormat,BOOL Windowed,D3DMULTISAMPLE_TYPE MultiSampleType) PURE; STDMETHOD(CheckDepthStencilMatch)(THIS_ UINT Adapter,D3DDEVTYPE DeviceType,D3DFORMAT AdapterFormat,D3DFORMAT RenderTargetFormat,D3DFORMAT DepthStencilFormat) PURE; STDMETHOD(GetDeviceCaps)(THIS_ UINT Adapter,D3DDEVTYPE DeviceType,D3DCAPS8* pCaps) PURE; STDMETHOD_(HMONITOR, GetAdapterMonitor)(THIS_ UINT Adapter) PURE; STDMETHOD(CreateDevice)(THIS_ UINT Adapter,D3DDEVTYPE DeviceType,HWND hFocusWindow,DWORD BehaviorFlags,D3DPRESENT_PARAMETERS* pPresentationParameters,IDirect3DDevice8** ppReturnedDeviceInterface) PURE; }; typedef struct IDirect3D8 *LPDIRECT3D8, *PDIRECT3D8; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirect3D8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3D8_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3D8_Release(p) (p)->lpVtbl->Release(p) #define IDirect3D8_RegisterSoftwareDevice(p,a) (p)->lpVtbl->RegisterSoftwareDevice(p,a) #define IDirect3D8_GetAdapterCount(p) (p)->lpVtbl->GetAdapterCount(p) #define IDirect3D8_GetAdapterIdentifier(p,a,b,c) (p)->lpVtbl->GetAdapterIdentifier(p,a,b,c) #define IDirect3D8_GetAdapterModeCount(p,a) (p)->lpVtbl->GetAdapterModeCount(p,a) #define IDirect3D8_EnumAdapterModes(p,a,b,c) (p)->lpVtbl->EnumAdapterModes(p,a,b,c) #define IDirect3D8_GetAdapterDisplayMode(p,a,b) (p)->lpVtbl->GetAdapterDisplayMode(p,a,b) #define IDirect3D8_CheckDeviceType(p,a,b,c,d,e) (p)->lpVtbl->CheckDeviceType(p,a,b,c,d,e) #define IDirect3D8_CheckDeviceFormat(p,a,b,c,d,e,f) (p)->lpVtbl->CheckDeviceFormat(p,a,b,c,d,e,f) #define IDirect3D8_CheckDeviceMultiSampleType(p,a,b,c,d,e) (p)->lpVtbl->CheckDeviceMultiSampleType(p,a,b,c,d,e) #define IDirect3D8_CheckDepthStencilMatch(p,a,b,c,d,e) (p)->lpVtbl->CheckDepthStencilMatch(p,a,b,c,d,e) #define IDirect3D8_GetDeviceCaps(p,a,b,c) (p)->lpVtbl->GetDeviceCaps(p,a,b,c) #define IDirect3D8_GetAdapterMonitor(p,a) (p)->lpVtbl->GetAdapterMonitor(p,a) #define IDirect3D8_CreateDevice(p,a,b,c,d,e,f) (p)->lpVtbl->CreateDevice(p,a,b,c,d,e,f) #else #define IDirect3D8_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3D8_AddRef(p) (p)->AddRef() #define IDirect3D8_Release(p) (p)->Release() #define IDirect3D8_RegisterSoftwareDevice(p,a) (p)->RegisterSoftwareDevice(a) #define IDirect3D8_GetAdapterCount(p) (p)->GetAdapterCount() #define IDirect3D8_GetAdapterIdentifier(p,a,b,c) (p)->GetAdapterIdentifier(a,b,c) #define IDirect3D8_GetAdapterModeCount(p,a) (p)->GetAdapterModeCount(a) #define IDirect3D8_EnumAdapterModes(p,a,b,c) (p)->EnumAdapterModes(a,b,c) #define IDirect3D8_GetAdapterDisplayMode(p,a,b) (p)->GetAdapterDisplayMode(a,b) #define IDirect3D8_CheckDeviceType(p,a,b,c,d,e) (p)->CheckDeviceType(a,b,c,d,e) #define IDirect3D8_CheckDeviceFormat(p,a,b,c,d,e,f) (p)->CheckDeviceFormat(a,b,c,d,e,f) #define IDirect3D8_CheckDeviceMultiSampleType(p,a,b,c,d,e) (p)->CheckDeviceMultiSampleType(a,b,c,d,e) #define IDirect3D8_CheckDepthStencilMatch(p,a,b,c,d,e) (p)->CheckDepthStencilMatch(a,b,c,d,e) #define IDirect3D8_GetDeviceCaps(p,a,b,c) (p)->GetDeviceCaps(a,b,c) #define IDirect3D8_GetAdapterMonitor(p,a) (p)->GetAdapterMonitor(a) #define IDirect3D8_CreateDevice(p,a,b,c,d,e,f) (p)->CreateDevice(a,b,c,d,e,f) #endif #undef INTERFACE #define INTERFACE IDirect3DDevice8 DECLARE_INTERFACE_(IDirect3DDevice8, IUnknown) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DDevice8 methods ***/ STDMETHOD(TestCooperativeLevel)(THIS) PURE; STDMETHOD_(UINT, GetAvailableTextureMem)(THIS) PURE; STDMETHOD(ResourceManagerDiscardBytes)(THIS_ DWORD Bytes) PURE; STDMETHOD(GetDirect3D)(THIS_ IDirect3D8** ppD3D8) PURE; STDMETHOD(GetDeviceCaps)(THIS_ D3DCAPS8* pCaps) PURE; STDMETHOD(GetDisplayMode)(THIS_ D3DDISPLAYMODE* pMode) PURE; STDMETHOD(GetCreationParameters)(THIS_ D3DDEVICE_CREATION_PARAMETERS *pParameters) PURE; STDMETHOD(SetCursorProperties)(THIS_ UINT XHotSpot,UINT YHotSpot,IDirect3DSurface8* pCursorBitmap) PURE; STDMETHOD_(void, SetCursorPosition)(THIS_ int X,int Y,DWORD Flags) PURE; STDMETHOD_(BOOL, ShowCursor)(THIS_ BOOL bShow) PURE; STDMETHOD(CreateAdditionalSwapChain)(THIS_ D3DPRESENT_PARAMETERS* pPresentationParameters,IDirect3DSwapChain8** pSwapChain) PURE; STDMETHOD(Reset)(THIS_ D3DPRESENT_PARAMETERS* pPresentationParameters) PURE; STDMETHOD(Present)(THIS_ CONST RECT* pSourceRect,CONST RECT* pDestRect,HWND hDestWindowOverride,CONST RGNDATA* pDirtyRegion) PURE; STDMETHOD(GetBackBuffer)(THIS_ UINT BackBuffer,D3DBACKBUFFER_TYPE Type,IDirect3DSurface8** ppBackBuffer) PURE; STDMETHOD(GetRasterStatus)(THIS_ D3DRASTER_STATUS* pRasterStatus) PURE; STDMETHOD_(void, SetGammaRamp)(THIS_ DWORD Flags,CONST D3DGAMMARAMP* pRamp) PURE; STDMETHOD_(void, GetGammaRamp)(THIS_ D3DGAMMARAMP* pRamp) PURE; STDMETHOD(CreateTexture)(THIS_ UINT Width,UINT Height,UINT Levels,DWORD Usage,D3DFORMAT Format,D3DPOOL Pool,IDirect3DTexture8** ppTexture) PURE; STDMETHOD(CreateVolumeTexture)(THIS_ UINT Width,UINT Height,UINT Depth,UINT Levels,DWORD Usage,D3DFORMAT Format,D3DPOOL Pool,IDirect3DVolumeTexture8** ppVolumeTexture) PURE; STDMETHOD(CreateCubeTexture)(THIS_ UINT EdgeLength,UINT Levels,DWORD Usage,D3DFORMAT Format,D3DPOOL Pool,IDirect3DCubeTexture8** ppCubeTexture) PURE; STDMETHOD(CreateVertexBuffer)(THIS_ UINT Length,DWORD Usage,DWORD FVF,D3DPOOL Pool,IDirect3DVertexBuffer8** ppVertexBuffer) PURE; STDMETHOD(CreateIndexBuffer)(THIS_ UINT Length,DWORD Usage,D3DFORMAT Format,D3DPOOL Pool,IDirect3DIndexBuffer8** ppIndexBuffer) PURE; STDMETHOD(CreateRenderTarget)(THIS_ UINT Width,UINT Height,D3DFORMAT Format,D3DMULTISAMPLE_TYPE MultiSample,BOOL Lockable,IDirect3DSurface8** ppSurface) PURE; STDMETHOD(CreateDepthStencilSurface)(THIS_ UINT Width,UINT Height,D3DFORMAT Format,D3DMULTISAMPLE_TYPE MultiSample,IDirect3DSurface8** ppSurface) PURE; STDMETHOD(CreateImageSurface)(THIS_ UINT Width,UINT Height,D3DFORMAT Format,IDirect3DSurface8** ppSurface) PURE; STDMETHOD(CopyRects)(THIS_ IDirect3DSurface8* pSourceSurface,CONST RECT* pSourceRectsArray,UINT cRects,IDirect3DSurface8* pDestinationSurface,CONST POINT* pDestPointsArray) PURE; STDMETHOD(UpdateTexture)(THIS_ IDirect3DBaseTexture8* pSourceTexture,IDirect3DBaseTexture8* pDestinationTexture) PURE; STDMETHOD(GetFrontBuffer)(THIS_ IDirect3DSurface8* pDestSurface) PURE; STDMETHOD(SetRenderTarget)(THIS_ IDirect3DSurface8* pRenderTarget,IDirect3DSurface8* pNewZStencil) PURE; STDMETHOD(GetRenderTarget)(THIS_ IDirect3DSurface8** ppRenderTarget) PURE; STDMETHOD(GetDepthStencilSurface)(THIS_ IDirect3DSurface8** ppZStencilSurface) PURE; STDMETHOD(BeginScene)(THIS) PURE; STDMETHOD(EndScene)(THIS) PURE; STDMETHOD(Clear)(THIS_ DWORD Count,CONST D3DRECT* pRects,DWORD Flags,D3DCOLOR Color,float Z,DWORD Stencil) PURE; STDMETHOD(SetTransform)(THIS_ D3DTRANSFORMSTATETYPE State,CONST D3DMATRIX* pMatrix) PURE; STDMETHOD(GetTransform)(THIS_ D3DTRANSFORMSTATETYPE State,D3DMATRIX* pMatrix) PURE; STDMETHOD(MultiplyTransform)(THIS_ D3DTRANSFORMSTATETYPE,CONST D3DMATRIX*) PURE; STDMETHOD(SetViewport)(THIS_ CONST D3DVIEWPORT8* pViewport) PURE; STDMETHOD(GetViewport)(THIS_ D3DVIEWPORT8* pViewport) PURE; STDMETHOD(SetMaterial)(THIS_ CONST D3DMATERIAL8* pMaterial) PURE; STDMETHOD(GetMaterial)(THIS_ D3DMATERIAL8* pMaterial) PURE; STDMETHOD(SetLight)(THIS_ DWORD Index,CONST D3DLIGHT8*) PURE; STDMETHOD(GetLight)(THIS_ DWORD Index,D3DLIGHT8*) PURE; STDMETHOD(LightEnable)(THIS_ DWORD Index,BOOL Enable) PURE; STDMETHOD(GetLightEnable)(THIS_ DWORD Index,BOOL* pEnable) PURE; STDMETHOD(SetClipPlane)(THIS_ DWORD Index,CONST float* pPlane) PURE; STDMETHOD(GetClipPlane)(THIS_ DWORD Index,float* pPlane) PURE; STDMETHOD(SetRenderState)(THIS_ D3DRENDERSTATETYPE State,DWORD Value) PURE; STDMETHOD(GetRenderState)(THIS_ D3DRENDERSTATETYPE State,DWORD* pValue) PURE; STDMETHOD(BeginStateBlock)(THIS) PURE; STDMETHOD(EndStateBlock)(THIS_ DWORD* pToken) PURE; STDMETHOD(ApplyStateBlock)(THIS_ DWORD Token) PURE; STDMETHOD(CaptureStateBlock)(THIS_ DWORD Token) PURE; STDMETHOD(DeleteStateBlock)(THIS_ DWORD Token) PURE; STDMETHOD(CreateStateBlock)(THIS_ D3DSTATEBLOCKTYPE Type,DWORD* pToken) PURE; STDMETHOD(SetClipStatus)(THIS_ CONST D3DCLIPSTATUS8* pClipStatus) PURE; STDMETHOD(GetClipStatus)(THIS_ D3DCLIPSTATUS8* pClipStatus) PURE; STDMETHOD(GetTexture)(THIS_ DWORD Stage,IDirect3DBaseTexture8** ppTexture) PURE; STDMETHOD(SetTexture)(THIS_ DWORD Stage,IDirect3DBaseTexture8* pTexture) PURE; STDMETHOD(GetTextureStageState)(THIS_ DWORD Stage,D3DTEXTURESTAGESTATETYPE Type,DWORD* pValue) PURE; STDMETHOD(SetTextureStageState)(THIS_ DWORD Stage,D3DTEXTURESTAGESTATETYPE Type,DWORD Value) PURE; STDMETHOD(ValidateDevice)(THIS_ DWORD* pNumPasses) PURE; STDMETHOD(GetInfo)(THIS_ DWORD DevInfoID,void* pDevInfoStruct,DWORD DevInfoStructSize) PURE; STDMETHOD(SetPaletteEntries)(THIS_ UINT PaletteNumber,CONST PALETTEENTRY* pEntries) PURE; STDMETHOD(GetPaletteEntries)(THIS_ UINT PaletteNumber,PALETTEENTRY* pEntries) PURE; STDMETHOD(SetCurrentTexturePalette)(THIS_ UINT PaletteNumber) PURE; STDMETHOD(GetCurrentTexturePalette)(THIS_ UINT *PaletteNumber) PURE; STDMETHOD(DrawPrimitive)(THIS_ D3DPRIMITIVETYPE PrimitiveType,UINT StartVertex,UINT PrimitiveCount) PURE; STDMETHOD(DrawIndexedPrimitive)(THIS_ D3DPRIMITIVETYPE,UINT minIndex,UINT NumVertices,UINT startIndex,UINT primCount) PURE; STDMETHOD(DrawPrimitiveUP)(THIS_ D3DPRIMITIVETYPE PrimitiveType,UINT PrimitiveCount,CONST void* pVertexStreamZeroData,UINT VertexStreamZeroStride) PURE; STDMETHOD(DrawIndexedPrimitiveUP)(THIS_ D3DPRIMITIVETYPE PrimitiveType,UINT MinVertexIndex,UINT NumVertexIndices,UINT PrimitiveCount,CONST void* pIndexData,D3DFORMAT IndexDataFormat,CONST void* pVertexStreamZeroData,UINT VertexStreamZeroStride) PURE; STDMETHOD(ProcessVertices)(THIS_ UINT SrcStartIndex,UINT DestIndex,UINT VertexCount,IDirect3DVertexBuffer8* pDestBuffer,DWORD Flags) PURE; STDMETHOD(CreateVertexShader)(THIS_ CONST DWORD* pDeclaration,CONST DWORD* pFunction,DWORD* pHandle,DWORD Usage) PURE; STDMETHOD(SetVertexShader)(THIS_ DWORD Handle) PURE; STDMETHOD(GetVertexShader)(THIS_ DWORD* pHandle) PURE; STDMETHOD(DeleteVertexShader)(THIS_ DWORD Handle) PURE; STDMETHOD(SetVertexShaderConstant)(THIS_ DWORD Register,CONST void* pConstantData,DWORD ConstantCount) PURE; STDMETHOD(GetVertexShaderConstant)(THIS_ DWORD Register,void* pConstantData,DWORD ConstantCount) PURE; STDMETHOD(GetVertexShaderDeclaration)(THIS_ DWORD Handle,void* pData,DWORD* pSizeOfData) PURE; STDMETHOD(GetVertexShaderFunction)(THIS_ DWORD Handle,void* pData,DWORD* pSizeOfData) PURE; STDMETHOD(SetStreamSource)(THIS_ UINT StreamNumber,IDirect3DVertexBuffer8* pStreamData,UINT Stride) PURE; STDMETHOD(GetStreamSource)(THIS_ UINT StreamNumber,IDirect3DVertexBuffer8** ppStreamData,UINT* pStride) PURE; STDMETHOD(SetIndices)(THIS_ IDirect3DIndexBuffer8* pIndexData,UINT BaseVertexIndex) PURE; STDMETHOD(GetIndices)(THIS_ IDirect3DIndexBuffer8** ppIndexData,UINT* pBaseVertexIndex) PURE; STDMETHOD(CreatePixelShader)(THIS_ CONST DWORD* pFunction,DWORD* pHandle) PURE; STDMETHOD(SetPixelShader)(THIS_ DWORD Handle) PURE; STDMETHOD(GetPixelShader)(THIS_ DWORD* pHandle) PURE; STDMETHOD(DeletePixelShader)(THIS_ DWORD Handle) PURE; STDMETHOD(SetPixelShaderConstant)(THIS_ DWORD Register,CONST void* pConstantData,DWORD ConstantCount) PURE; STDMETHOD(GetPixelShaderConstant)(THIS_ DWORD Register,void* pConstantData,DWORD ConstantCount) PURE; STDMETHOD(GetPixelShaderFunction)(THIS_ DWORD Handle,void* pData,DWORD* pSizeOfData) PURE; STDMETHOD(DrawRectPatch)(THIS_ UINT Handle,CONST float* pNumSegs,CONST D3DRECTPATCH_INFO* pRectPatchInfo) PURE; STDMETHOD(DrawTriPatch)(THIS_ UINT Handle,CONST float* pNumSegs,CONST D3DTRIPATCH_INFO* pTriPatchInfo) PURE; STDMETHOD(DeletePatch)(THIS_ UINT Handle) PURE; }; typedef struct IDirect3DDevice8 *LPDIRECT3DDEVICE8, *PDIRECT3DDEVICE8; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirect3DDevice8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DDevice8_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DDevice8_Release(p) (p)->lpVtbl->Release(p) #define IDirect3DDevice8_TestCooperativeLevel(p) (p)->lpVtbl->TestCooperativeLevel(p) #define IDirect3DDevice8_GetAvailableTextureMem(p) (p)->lpVtbl->GetAvailableTextureMem(p) #define IDirect3DDevice8_ResourceManagerDiscardBytes(p,a) (p)->lpVtbl->ResourceManagerDiscardBytes(p,a) #define IDirect3DDevice8_GetDirect3D(p,a) (p)->lpVtbl->GetDirect3D(p,a) #define IDirect3DDevice8_GetDeviceCaps(p,a) (p)->lpVtbl->GetDeviceCaps(p,a) #define IDirect3DDevice8_GetDisplayMode(p,a) (p)->lpVtbl->GetDisplayMode(p,a) #define IDirect3DDevice8_GetCreationParameters(p,a) (p)->lpVtbl->GetCreationParameters(p,a) #define IDirect3DDevice8_SetCursorProperties(p,a,b,c) (p)->lpVtbl->SetCursorProperties(p,a,b,c) #define IDirect3DDevice8_SetCursorPosition(p,a,b,c) (p)->lpVtbl->SetCursorPosition(p,a,b,c) #define IDirect3DDevice8_ShowCursor(p,a) (p)->lpVtbl->ShowCursor(p,a) #define IDirect3DDevice8_CreateAdditionalSwapChain(p,a,b) (p)->lpVtbl->CreateAdditionalSwapChain(p,a,b) #define IDirect3DDevice8_Reset(p,a) (p)->lpVtbl->Reset(p,a) #define IDirect3DDevice8_Present(p,a,b,c,d) (p)->lpVtbl->Present(p,a,b,c,d) #define IDirect3DDevice8_GetBackBuffer(p,a,b,c) (p)->lpVtbl->GetBackBuffer(p,a,b,c) #define IDirect3DDevice8_GetRasterStatus(p,a) (p)->lpVtbl->GetRasterStatus(p,a) #define IDirect3DDevice8_SetGammaRamp(p,a,b) (p)->lpVtbl->SetGammaRamp(p,a,b) #define IDirect3DDevice8_GetGammaRamp(p,a) (p)->lpVtbl->GetGammaRamp(p,a) #define IDirect3DDevice8_CreateTexture(p,a,b,c,d,e,f,g) (p)->lpVtbl->CreateTexture(p,a,b,c,d,e,f,g) #define IDirect3DDevice8_CreateVolumeTexture(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->CreateVolumeTexture(p,a,b,c,d,e,f,g,h) #define IDirect3DDevice8_CreateCubeTexture(p,a,b,c,d,e,f) (p)->lpVtbl->CreateCubeTexture(p,a,b,c,d,e,f) #define IDirect3DDevice8_CreateVertexBuffer(p,a,b,c,d,e) (p)->lpVtbl->CreateVertexBuffer(p,a,b,c,d,e) #define IDirect3DDevice8_CreateIndexBuffer(p,a,b,c,d,e) (p)->lpVtbl->CreateIndexBuffer(p,a,b,c,d,e) #define IDirect3DDevice8_CreateRenderTarget(p,a,b,c,d,e,f) (p)->lpVtbl->CreateRenderTarget(p,a,b,c,d,e,f) #define IDirect3DDevice8_CreateDepthStencilSurface(p,a,b,c,d,e) (p)->lpVtbl->CreateDepthStencilSurface(p,a,b,c,d,e) #define IDirect3DDevice8_CreateImageSurface(p,a,b,c,d) (p)->lpVtbl->CreateImageSurface(p,a,b,c,d) #define IDirect3DDevice8_CopyRects(p,a,b,c,d,e) (p)->lpVtbl->CopyRects(p,a,b,c,d,e) #define IDirect3DDevice8_UpdateTexture(p,a,b) (p)->lpVtbl->UpdateTexture(p,a,b) #define IDirect3DDevice8_GetFrontBuffer(p,a) (p)->lpVtbl->GetFrontBuffer(p,a) #define IDirect3DDevice8_SetRenderTarget(p,a,b) (p)->lpVtbl->SetRenderTarget(p,a,b) #define IDirect3DDevice8_GetRenderTarget(p,a) (p)->lpVtbl->GetRenderTarget(p,a) #define IDirect3DDevice8_GetDepthStencilSurface(p,a) (p)->lpVtbl->GetDepthStencilSurface(p,a) #define IDirect3DDevice8_BeginScene(p) (p)->lpVtbl->BeginScene(p) #define IDirect3DDevice8_EndScene(p) (p)->lpVtbl->EndScene(p) #define IDirect3DDevice8_Clear(p,a,b,c,d,e,f) (p)->lpVtbl->Clear(p,a,b,c,d,e,f) #define IDirect3DDevice8_SetTransform(p,a,b) (p)->lpVtbl->SetTransform(p,a,b) #define IDirect3DDevice8_GetTransform(p,a,b) (p)->lpVtbl->GetTransform(p,a,b) #define IDirect3DDevice8_MultiplyTransform(p,a,b) (p)->lpVtbl->MultiplyTransform(p,a,b) #define IDirect3DDevice8_SetViewport(p,a) (p)->lpVtbl->SetViewport(p,a) #define IDirect3DDevice8_GetViewport(p,a) (p)->lpVtbl->GetViewport(p,a) #define IDirect3DDevice8_SetMaterial(p,a) (p)->lpVtbl->SetMaterial(p,a) #define IDirect3DDevice8_GetMaterial(p,a) (p)->lpVtbl->GetMaterial(p,a) #define IDirect3DDevice8_SetLight(p,a,b) (p)->lpVtbl->SetLight(p,a,b) #define IDirect3DDevice8_GetLight(p,a,b) (p)->lpVtbl->GetLight(p,a,b) #define IDirect3DDevice8_LightEnable(p,a,b) (p)->lpVtbl->LightEnable(p,a,b) #define IDirect3DDevice8_GetLightEnable(p,a,b) (p)->lpVtbl->GetLightEnable(p,a,b) #define IDirect3DDevice8_SetClipPlane(p,a,b) (p)->lpVtbl->SetClipPlane(p,a,b) #define IDirect3DDevice8_GetClipPlane(p,a,b) (p)->lpVtbl->GetClipPlane(p,a,b) #define IDirect3DDevice8_SetRenderState(p,a,b) (p)->lpVtbl->SetRenderState(p,a,b) #define IDirect3DDevice8_GetRenderState(p,a,b) (p)->lpVtbl->GetRenderState(p,a,b) #define IDirect3DDevice8_BeginStateBlock(p) (p)->lpVtbl->BeginStateBlock(p) #define IDirect3DDevice8_EndStateBlock(p,a) (p)->lpVtbl->EndStateBlock(p,a) #define IDirect3DDevice8_ApplyStateBlock(p,a) (p)->lpVtbl->ApplyStateBlock(p,a) #define IDirect3DDevice8_CaptureStateBlock(p,a) (p)->lpVtbl->CaptureStateBlock(p,a) #define IDirect3DDevice8_DeleteStateBlock(p,a) (p)->lpVtbl->DeleteStateBlock(p,a) #define IDirect3DDevice8_CreateStateBlock(p,a,b) (p)->lpVtbl->CreateStateBlock(p,a,b) #define IDirect3DDevice8_SetClipStatus(p,a) (p)->lpVtbl->SetClipStatus(p,a) #define IDirect3DDevice8_GetClipStatus(p,a) (p)->lpVtbl->GetClipStatus(p,a) #define IDirect3DDevice8_GetTexture(p,a,b) (p)->lpVtbl->GetTexture(p,a,b) #define IDirect3DDevice8_SetTexture(p,a,b) (p)->lpVtbl->SetTexture(p,a,b) #define IDirect3DDevice8_GetTextureStageState(p,a,b,c) (p)->lpVtbl->GetTextureStageState(p,a,b,c) #define IDirect3DDevice8_SetTextureStageState(p,a,b,c) (p)->lpVtbl->SetTextureStageState(p,a,b,c) #define IDirect3DDevice8_ValidateDevice(p,a) (p)->lpVtbl->ValidateDevice(p,a) #define IDirect3DDevice8_GetInfo(p,a,b,c) (p)->lpVtbl->GetInfo(p,a,b,c) #define IDirect3DDevice8_SetPaletteEntries(p,a,b) (p)->lpVtbl->SetPaletteEntries(p,a,b) #define IDirect3DDevice8_GetPaletteEntries(p,a,b) (p)->lpVtbl->GetPaletteEntries(p,a,b) #define IDirect3DDevice8_SetCurrentTexturePalette(p,a) (p)->lpVtbl->SetCurrentTexturePalette(p,a) #define IDirect3DDevice8_GetCurrentTexturePalette(p,a) (p)->lpVtbl->GetCurrentTexturePalette(p,a) #define IDirect3DDevice8_DrawPrimitive(p,a,b,c) (p)->lpVtbl->DrawPrimitive(p,a,b,c) #define IDirect3DDevice8_DrawIndexedPrimitive(p,a,b,c,d,e) (p)->lpVtbl->DrawIndexedPrimitive(p,a,b,c,d,e) #define IDirect3DDevice8_DrawPrimitiveUP(p,a,b,c,d) (p)->lpVtbl->DrawPrimitiveUP(p,a,b,c,d) #define IDirect3DDevice8_DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h) #define IDirect3DDevice8_ProcessVertices(p,a,b,c,d,e) (p)->lpVtbl->ProcessVertices(p,a,b,c,d,e) #define IDirect3DDevice8_CreateVertexShader(p,a,b,c,d) (p)->lpVtbl->CreateVertexShader(p,a,b,c,d) #define IDirect3DDevice8_SetVertexShader(p,a) (p)->lpVtbl->SetVertexShader(p,a) #define IDirect3DDevice8_GetVertexShader(p,a) (p)->lpVtbl->GetVertexShader(p,a) #define IDirect3DDevice8_DeleteVertexShader(p,a) (p)->lpVtbl->DeleteVertexShader(p,a) #define IDirect3DDevice8_SetVertexShaderConstant(p,a,b,c) (p)->lpVtbl->SetVertexShaderConstant(p,a,b,c) #define IDirect3DDevice8_GetVertexShaderConstant(p,a,b,c) (p)->lpVtbl->GetVertexShaderConstant(p,a,b,c) #define IDirect3DDevice8_GetVertexShaderDeclaration(p,a,b,c) (p)->lpVtbl->GetVertexShaderDeclaration(p,a,b,c) #define IDirect3DDevice8_GetVertexShaderFunction(p,a,b,c) (p)->lpVtbl->GetVertexShaderFunction(p,a,b,c) #define IDirect3DDevice8_SetStreamSource(p,a,b,c) (p)->lpVtbl->SetStreamSource(p,a,b,c) #define IDirect3DDevice8_GetStreamSource(p,a,b,c) (p)->lpVtbl->GetStreamSource(p,a,b,c) #define IDirect3DDevice8_SetIndices(p,a,b) (p)->lpVtbl->SetIndices(p,a,b) #define IDirect3DDevice8_GetIndices(p,a,b) (p)->lpVtbl->GetIndices(p,a,b) #define IDirect3DDevice8_CreatePixelShader(p,a,b) (p)->lpVtbl->CreatePixelShader(p,a,b) #define IDirect3DDevice8_SetPixelShader(p,a) (p)->lpVtbl->SetPixelShader(p,a) #define IDirect3DDevice8_GetPixelShader(p,a) (p)->lpVtbl->GetPixelShader(p,a) #define IDirect3DDevice8_DeletePixelShader(p,a) (p)->lpVtbl->DeletePixelShader(p,a) #define IDirect3DDevice8_SetPixelShaderConstant(p,a,b,c) (p)->lpVtbl->SetPixelShaderConstant(p,a,b,c) #define IDirect3DDevice8_GetPixelShaderConstant(p,a,b,c) (p)->lpVtbl->GetPixelShaderConstant(p,a,b,c) #define IDirect3DDevice8_GetPixelShaderFunction(p,a,b,c) (p)->lpVtbl->GetPixelShaderFunction(p,a,b,c) #define IDirect3DDevice8_DrawRectPatch(p,a,b,c) (p)->lpVtbl->DrawRectPatch(p,a,b,c) #define IDirect3DDevice8_DrawTriPatch(p,a,b,c) (p)->lpVtbl->DrawTriPatch(p,a,b,c) #define IDirect3DDevice8_DeletePatch(p,a) (p)->lpVtbl->DeletePatch(p,a) #else #define IDirect3DDevice8_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DDevice8_AddRef(p) (p)->AddRef() #define IDirect3DDevice8_Release(p) (p)->Release() #define IDirect3DDevice8_TestCooperativeLevel(p) (p)->TestCooperativeLevel() #define IDirect3DDevice8_GetAvailableTextureMem(p) (p)->GetAvailableTextureMem() #define IDirect3DDevice8_ResourceManagerDiscardBytes(p,a) (p)->ResourceManagerDiscardBytes(a) #define IDirect3DDevice8_GetDirect3D(p,a) (p)->GetDirect3D(a) #define IDirect3DDevice8_GetDeviceCaps(p,a) (p)->GetDeviceCaps(a) #define IDirect3DDevice8_GetDisplayMode(p,a) (p)->GetDisplayMode(a) #define IDirect3DDevice8_GetCreationParameters(p,a) (p)->GetCreationParameters(a) #define IDirect3DDevice8_SetCursorProperties(p,a,b,c) (p)->SetCursorProperties(a,b,c) #define IDirect3DDevice8_SetCursorPosition(p,a,b,c) (p)->SetCursorPosition(a,b,c) #define IDirect3DDevice8_ShowCursor(p,a) (p)->ShowCursor(a) #define IDirect3DDevice8_CreateAdditionalSwapChain(p,a,b) (p)->CreateAdditionalSwapChain(a,b) #define IDirect3DDevice8_Reset(p,a) (p)->Reset(a) #define IDirect3DDevice8_Present(p,a,b,c,d) (p)->Present(a,b,c,d) #define IDirect3DDevice8_GetBackBuffer(p,a,b,c) (p)->GetBackBuffer(a,b,c) #define IDirect3DDevice8_GetRasterStatus(p,a) (p)->GetRasterStatus(a) #define IDirect3DDevice8_SetGammaRamp(p,a,b) (p)->SetGammaRamp(a,b) #define IDirect3DDevice8_GetGammaRamp(p,a) (p)->GetGammaRamp(a) #define IDirect3DDevice8_CreateTexture(p,a,b,c,d,e,f,g) (p)->CreateTexture(a,b,c,d,e,f,g) #define IDirect3DDevice8_CreateVolumeTexture(p,a,b,c,d,e,f,g,h) (p)->CreateVolumeTexture(a,b,c,d,e,f,g,h) #define IDirect3DDevice8_CreateCubeTexture(p,a,b,c,d,e,f) (p)->CreateCubeTexture(a,b,c,d,e,f) #define IDirect3DDevice8_CreateVertexBuffer(p,a,b,c,d,e) (p)->CreateVertexBuffer(a,b,c,d,e) #define IDirect3DDevice8_CreateIndexBuffer(p,a,b,c,d,e) (p)->CreateIndexBuffer(a,b,c,d,e) #define IDirect3DDevice8_CreateRenderTarget(p,a,b,c,d,e,f) (p)->CreateRenderTarget(a,b,c,d,e,f) #define IDirect3DDevice8_CreateDepthStencilSurface(p,a,b,c,d,e) (p)->CreateDepthStencilSurface(a,b,c,d,e) #define IDirect3DDevice8_CreateImageSurface(p,a,b,c,d) (p)->CreateImageSurface(a,b,c,d) #define IDirect3DDevice8_CopyRects(p,a,b,c,d,e) (p)->CopyRects(a,b,c,d,e) #define IDirect3DDevice8_UpdateTexture(p,a,b) (p)->UpdateTexture(a,b) #define IDirect3DDevice8_GetFrontBuffer(p,a) (p)->GetFrontBuffer(a) #define IDirect3DDevice8_SetRenderTarget(p,a,b) (p)->SetRenderTarget(a,b) #define IDirect3DDevice8_GetRenderTarget(p,a) (p)->GetRenderTarget(a) #define IDirect3DDevice8_GetDepthStencilSurface(p,a) (p)->GetDepthStencilSurface(a) #define IDirect3DDevice8_BeginScene(p) (p)->BeginScene() #define IDirect3DDevice8_EndScene(p) (p)->EndScene() #define IDirect3DDevice8_Clear(p,a,b,c,d,e,f) (p)->Clear(a,b,c,d,e,f) #define IDirect3DDevice8_SetTransform(p,a,b) (p)->SetTransform(a,b) #define IDirect3DDevice8_GetTransform(p,a,b) (p)->GetTransform(a,b) #define IDirect3DDevice8_MultiplyTransform(p,a,b) (p)->MultiplyTransform(a,b) #define IDirect3DDevice8_SetViewport(p,a) (p)->SetViewport(a) #define IDirect3DDevice8_GetViewport(p,a) (p)->GetViewport(a) #define IDirect3DDevice8_SetMaterial(p,a) (p)->SetMaterial(a) #define IDirect3DDevice8_GetMaterial(p,a) (p)->GetMaterial(a) #define IDirect3DDevice8_SetLight(p,a,b) (p)->SetLight(a,b) #define IDirect3DDevice8_GetLight(p,a,b) (p)->GetLight(a,b) #define IDirect3DDevice8_LightEnable(p,a,b) (p)->LightEnable(a,b) #define IDirect3DDevice8_GetLightEnable(p,a,b) (p)->GetLightEnable(a,b) #define IDirect3DDevice8_SetClipPlane(p,a,b) (p)->SetClipPlane(a,b) #define IDirect3DDevice8_GetClipPlane(p,a,b) (p)->GetClipPlane(a,b) #define IDirect3DDevice8_SetRenderState(p,a,b) (p)->SetRenderState(a,b) #define IDirect3DDevice8_GetRenderState(p,a,b) (p)->GetRenderState(a,b) #define IDirect3DDevice8_BeginStateBlock(p) (p)->BeginStateBlock() #define IDirect3DDevice8_EndStateBlock(p,a) (p)->EndStateBlock(a) #define IDirect3DDevice8_ApplyStateBlock(p,a) (p)->ApplyStateBlock(a) #define IDirect3DDevice8_CaptureStateBlock(p,a) (p)->CaptureStateBlock(a) #define IDirect3DDevice8_DeleteStateBlock(p,a) (p)->DeleteStateBlock(a) #define IDirect3DDevice8_CreateStateBlock(p,a,b) (p)->CreateStateBlock(a,b) #define IDirect3DDevice8_SetClipStatus(p,a) (p)->SetClipStatus(a) #define IDirect3DDevice8_GetClipStatus(p,a) (p)->GetClipStatus(a) #define IDirect3DDevice8_GetTexture(p,a,b) (p)->GetTexture(a,b) #define IDirect3DDevice8_SetTexture(p,a,b) (p)->SetTexture(a,b) #define IDirect3DDevice8_GetTextureStageState(p,a,b,c) (p)->GetTextureStageState(a,b,c) #define IDirect3DDevice8_SetTextureStageState(p,a,b,c) (p)->SetTextureStageState(a,b,c) #define IDirect3DDevice8_ValidateDevice(p,a) (p)->ValidateDevice(a) #define IDirect3DDevice8_GetInfo(p,a,b,c) (p)->GetInfo(a,b,c) #define IDirect3DDevice8_SetPaletteEntries(p,a,b) (p)->SetPaletteEntries(a,b) #define IDirect3DDevice8_GetPaletteEntries(p,a,b) (p)->GetPaletteEntries(a,b) #define IDirect3DDevice8_SetCurrentTexturePalette(p,a) (p)->SetCurrentTexturePalette(a) #define IDirect3DDevice8_GetCurrentTexturePalette(p,a) (p)->GetCurrentTexturePalette(a) #define IDirect3DDevice8_DrawPrimitive(p,a,b,c) (p)->DrawPrimitive(a,b,c) #define IDirect3DDevice8_DrawIndexedPrimitive(p,a,b,c,d,e) (p)->DrawIndexedPrimitive(a,b,c,d,e) #define IDirect3DDevice8_DrawPrimitiveUP(p,a,b,c,d) (p)->DrawPrimitiveUP(a,b,c,d) #define IDirect3DDevice8_DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h) (p)->DrawIndexedPrimitiveUP(a,b,c,d,e,f,g,h) #define IDirect3DDevice8_ProcessVertices(p,a,b,c,d,e) (p)->ProcessVertices(a,b,c,d,e) #define IDirect3DDevice8_CreateVertexShader(p,a,b,c,d) (p)->CreateVertexShader(a,b,c,d) #define IDirect3DDevice8_SetVertexShader(p,a) (p)->SetVertexShader(a) #define IDirect3DDevice8_GetVertexShader(p,a) (p)->GetVertexShader(a) #define IDirect3DDevice8_DeleteVertexShader(p,a) (p)->DeleteVertexShader(a) #define IDirect3DDevice8_SetVertexShaderConstant(p,a,b,c) (p)->SetVertexShaderConstant(a,b,c) #define IDirect3DDevice8_GetVertexShaderConstant(p,a,b,c) (p)->GetVertexShaderConstant(a,b,c) #define IDirect3DDevice8_GetVertexShaderDeclaration(p,a,b,c) (p)->GetVertexShaderDeclaration(a,b,c) #define IDirect3DDevice8_GetVertexShaderFunction(p,a,b,c) (p)->GetVertexShaderFunction(a,b,c) #define IDirect3DDevice8_SetStreamSource(p,a,b,c) (p)->SetStreamSource(a,b,c) #define IDirect3DDevice8_GetStreamSource(p,a,b,c) (p)->GetStreamSource(a,b,c) #define IDirect3DDevice8_SetIndices(p,a,b) (p)->SetIndices(a,b) #define IDirect3DDevice8_GetIndices(p,a,b) (p)->GetIndices(a,b) #define IDirect3DDevice8_CreatePixelShader(p,a,b) (p)->CreatePixelShader(a,b) #define IDirect3DDevice8_SetPixelShader(p,a) (p)->SetPixelShader(a) #define IDirect3DDevice8_GetPixelShader(p,a) (p)->GetPixelShader(a) #define IDirect3DDevice8_DeletePixelShader(p,a) (p)->DeletePixelShader(a) #define IDirect3DDevice8_SetPixelShaderConstant(p,a,b,c) (p)->SetPixelShaderConstant(a,b,c) #define IDirect3DDevice8_GetPixelShaderConstant(p,a,b,c) (p)->GetPixelShaderConstant(a,b,c) #define IDirect3DDevice8_GetPixelShaderFunction(p,a,b,c) (p)->GetPixelShaderFunction(a,b,c) #define IDirect3DDevice8_DrawRectPatch(p,a,b,c) (p)->DrawRectPatch(a,b,c) #define IDirect3DDevice8_DrawTriPatch(p,a,b,c) (p)->DrawTriPatch(a,b,c) #define IDirect3DDevice8_DeletePatch(p,a) (p)->DeletePatch(a) #endif #undef INTERFACE #define INTERFACE IDirect3DSwapChain8 DECLARE_INTERFACE_(IDirect3DSwapChain8, IUnknown) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DSwapChain8 methods ***/ STDMETHOD(Present)(THIS_ CONST RECT* pSourceRect,CONST RECT* pDestRect,HWND hDestWindowOverride,CONST RGNDATA* pDirtyRegion) PURE; STDMETHOD(GetBackBuffer)(THIS_ UINT BackBuffer,D3DBACKBUFFER_TYPE Type,IDirect3DSurface8** ppBackBuffer) PURE; }; typedef struct IDirect3DSwapChain8 *LPDIRECT3DSWAPCHAIN8, *PDIRECT3DSWAPCHAIN8; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirect3DSwapChain8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DSwapChain8_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DSwapChain8_Release(p) (p)->lpVtbl->Release(p) #define IDirect3DSwapChain8_Present(p,a,b,c,d) (p)->lpVtbl->Present(p,a,b,c,d) #define IDirect3DSwapChain8_GetBackBuffer(p,a,b,c) (p)->lpVtbl->GetBackBuffer(p,a,b,c) #else #define IDirect3DSwapChain8_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DSwapChain8_AddRef(p) (p)->AddRef() #define IDirect3DSwapChain8_Release(p) (p)->Release() #define IDirect3DSwapChain8_Present(p,a,b,c,d) (p)->Present(a,b,c,d) #define IDirect3DSwapChain8_GetBackBuffer(p,a,b,c) (p)->GetBackBuffer(a,b,c) #endif #undef INTERFACE #define INTERFACE IDirect3DResource8 DECLARE_INTERFACE_(IDirect3DResource8, IUnknown) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DResource8 methods ***/ STDMETHOD(GetDevice)(THIS_ IDirect3DDevice8** ppDevice) PURE; STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid,CONST void* pData,DWORD SizeOfData,DWORD Flags) PURE; STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid,void* pData,DWORD* pSizeOfData) PURE; STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE; STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE; STDMETHOD_(DWORD, GetPriority)(THIS) PURE; STDMETHOD_(void, PreLoad)(THIS) PURE; STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE; }; typedef struct IDirect3DResource8 *LPDIRECT3DRESOURCE8, *PDIRECT3DRESOURCE8; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirect3DResource8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DResource8_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DResource8_Release(p) (p)->lpVtbl->Release(p) #define IDirect3DResource8_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) #define IDirect3DResource8_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d) #define IDirect3DResource8_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c) #define IDirect3DResource8_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a) #define IDirect3DResource8_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a) #define IDirect3DResource8_GetPriority(p) (p)->lpVtbl->GetPriority(p) #define IDirect3DResource8_PreLoad(p) (p)->lpVtbl->PreLoad(p) #define IDirect3DResource8_GetType(p) (p)->lpVtbl->GetType(p) #else #define IDirect3DResource8_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DResource8_AddRef(p) (p)->AddRef() #define IDirect3DResource8_Release(p) (p)->Release() #define IDirect3DResource8_GetDevice(p,a) (p)->GetDevice(a) #define IDirect3DResource8_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d) #define IDirect3DResource8_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c) #define IDirect3DResource8_FreePrivateData(p,a) (p)->FreePrivateData(a) #define IDirect3DResource8_SetPriority(p,a) (p)->SetPriority(a) #define IDirect3DResource8_GetPriority(p) (p)->GetPriority() #define IDirect3DResource8_PreLoad(p) (p)->PreLoad() #define IDirect3DResource8_GetType(p) (p)->GetType() #endif #undef INTERFACE #define INTERFACE IDirect3DBaseTexture8 DECLARE_INTERFACE_(IDirect3DBaseTexture8, IDirect3DResource8) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DResource8 methods ***/ STDMETHOD(GetDevice)(THIS_ IDirect3DDevice8** ppDevice) PURE; STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid,CONST void* pData,DWORD SizeOfData,DWORD Flags) PURE; STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid,void* pData,DWORD* pSizeOfData) PURE; STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE; STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE; STDMETHOD_(DWORD, GetPriority)(THIS) PURE; STDMETHOD_(void, PreLoad)(THIS) PURE; STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE; STDMETHOD_(DWORD, SetLOD)(THIS_ DWORD LODNew) PURE; STDMETHOD_(DWORD, GetLOD)(THIS) PURE; STDMETHOD_(DWORD, GetLevelCount)(THIS) PURE; }; typedef struct IDirect3DBaseTexture8 *LPDIRECT3DBASETEXTURE8, *PDIRECT3DBASETEXTURE8; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirect3DBaseTexture8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DBaseTexture8_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DBaseTexture8_Release(p) (p)->lpVtbl->Release(p) #define IDirect3DBaseTexture8_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) #define IDirect3DBaseTexture8_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d) #define IDirect3DBaseTexture8_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c) #define IDirect3DBaseTexture8_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a) #define IDirect3DBaseTexture8_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a) #define IDirect3DBaseTexture8_GetPriority(p) (p)->lpVtbl->GetPriority(p) #define IDirect3DBaseTexture8_PreLoad(p) (p)->lpVtbl->PreLoad(p) #define IDirect3DBaseTexture8_GetType(p) (p)->lpVtbl->GetType(p) #define IDirect3DBaseTexture8_SetLOD(p,a) (p)->lpVtbl->SetLOD(p,a) #define IDirect3DBaseTexture8_GetLOD(p) (p)->lpVtbl->GetLOD(p) #define IDirect3DBaseTexture8_GetLevelCount(p) (p)->lpVtbl->GetLevelCount(p) #else #define IDirect3DBaseTexture8_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DBaseTexture8_AddRef(p) (p)->AddRef() #define IDirect3DBaseTexture8_Release(p) (p)->Release() #define IDirect3DBaseTexture8_GetDevice(p,a) (p)->GetDevice(a) #define IDirect3DBaseTexture8_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d) #define IDirect3DBaseTexture8_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c) #define IDirect3DBaseTexture8_FreePrivateData(p,a) (p)->FreePrivateData(a) #define IDirect3DBaseTexture8_SetPriority(p,a) (p)->SetPriority(a) #define IDirect3DBaseTexture8_GetPriority(p) (p)->GetPriority() #define IDirect3DBaseTexture8_PreLoad(p) (p)->PreLoad() #define IDirect3DBaseTexture8_GetType(p) (p)->GetType() #define IDirect3DBaseTexture8_SetLOD(p,a) (p)->SetLOD(a) #define IDirect3DBaseTexture8_GetLOD(p) (p)->GetLOD() #define IDirect3DBaseTexture8_GetLevelCount(p) (p)->GetLevelCount() #endif #undef INTERFACE #define INTERFACE IDirect3DTexture8 DECLARE_INTERFACE_(IDirect3DTexture8, IDirect3DBaseTexture8) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DBaseTexture8 methods ***/ STDMETHOD(GetDevice)(THIS_ IDirect3DDevice8** ppDevice) PURE; STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid,CONST void* pData,DWORD SizeOfData,DWORD Flags) PURE; STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid,void* pData,DWORD* pSizeOfData) PURE; STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE; STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE; STDMETHOD_(DWORD, GetPriority)(THIS) PURE; STDMETHOD_(void, PreLoad)(THIS) PURE; STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE; STDMETHOD_(DWORD, SetLOD)(THIS_ DWORD LODNew) PURE; STDMETHOD_(DWORD, GetLOD)(THIS) PURE; STDMETHOD_(DWORD, GetLevelCount)(THIS) PURE; STDMETHOD(GetLevelDesc)(THIS_ UINT Level,D3DSURFACE_DESC *pDesc) PURE; STDMETHOD(GetSurfaceLevel)(THIS_ UINT Level,IDirect3DSurface8** ppSurfaceLevel) PURE; STDMETHOD(LockRect)(THIS_ UINT Level,D3DLOCKED_RECT* pLockedRect,CONST RECT* pRect,DWORD Flags) PURE; STDMETHOD(UnlockRect)(THIS_ UINT Level) PURE; STDMETHOD(AddDirtyRect)(THIS_ CONST RECT* pDirtyRect) PURE; }; typedef struct IDirect3DTexture8 *LPDIRECT3DTEXTURE8, *PDIRECT3DTEXTURE8; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirect3DTexture8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DTexture8_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DTexture8_Release(p) (p)->lpVtbl->Release(p) #define IDirect3DTexture8_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) #define IDirect3DTexture8_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d) #define IDirect3DTexture8_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c) #define IDirect3DTexture8_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a) #define IDirect3DTexture8_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a) #define IDirect3DTexture8_GetPriority(p) (p)->lpVtbl->GetPriority(p) #define IDirect3DTexture8_PreLoad(p) (p)->lpVtbl->PreLoad(p) #define IDirect3DTexture8_GetType(p) (p)->lpVtbl->GetType(p) #define IDirect3DTexture8_SetLOD(p,a) (p)->lpVtbl->SetLOD(p,a) #define IDirect3DTexture8_GetLOD(p) (p)->lpVtbl->GetLOD(p) #define IDirect3DTexture8_GetLevelCount(p) (p)->lpVtbl->GetLevelCount(p) #define IDirect3DTexture8_GetLevelDesc(p,a,b) (p)->lpVtbl->GetLevelDesc(p,a,b) #define IDirect3DTexture8_GetSurfaceLevel(p,a,b) (p)->lpVtbl->GetSurfaceLevel(p,a,b) #define IDirect3DTexture8_LockRect(p,a,b,c,d) (p)->lpVtbl->LockRect(p,a,b,c,d) #define IDirect3DTexture8_UnlockRect(p,a) (p)->lpVtbl->UnlockRect(p,a) #define IDirect3DTexture8_AddDirtyRect(p,a) (p)->lpVtbl->AddDirtyRect(p,a) #else #define IDirect3DTexture8_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DTexture8_AddRef(p) (p)->AddRef() #define IDirect3DTexture8_Release(p) (p)->Release() #define IDirect3DTexture8_GetDevice(p,a) (p)->GetDevice(a) #define IDirect3DTexture8_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d) #define IDirect3DTexture8_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c) #define IDirect3DTexture8_FreePrivateData(p,a) (p)->FreePrivateData(a) #define IDirect3DTexture8_SetPriority(p,a) (p)->SetPriority(a) #define IDirect3DTexture8_GetPriority(p) (p)->GetPriority() #define IDirect3DTexture8_PreLoad(p) (p)->PreLoad() #define IDirect3DTexture8_GetType(p) (p)->GetType() #define IDirect3DTexture8_SetLOD(p,a) (p)->SetLOD(a) #define IDirect3DTexture8_GetLOD(p) (p)->GetLOD() #define IDirect3DTexture8_GetLevelCount(p) (p)->GetLevelCount() #define IDirect3DTexture8_GetLevelDesc(p,a,b) (p)->GetLevelDesc(a,b) #define IDirect3DTexture8_GetSurfaceLevel(p,a,b) (p)->GetSurfaceLevel(a,b) #define IDirect3DTexture8_LockRect(p,a,b,c,d) (p)->LockRect(a,b,c,d) #define IDirect3DTexture8_UnlockRect(p,a) (p)->UnlockRect(a) #define IDirect3DTexture8_AddDirtyRect(p,a) (p)->AddDirtyRect(a) #endif #undef INTERFACE #define INTERFACE IDirect3DVolumeTexture8 DECLARE_INTERFACE_(IDirect3DVolumeTexture8, IDirect3DBaseTexture8) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DBaseTexture8 methods ***/ STDMETHOD(GetDevice)(THIS_ IDirect3DDevice8** ppDevice) PURE; STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid,CONST void* pData,DWORD SizeOfData,DWORD Flags) PURE; STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid,void* pData,DWORD* pSizeOfData) PURE; STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE; STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE; STDMETHOD_(DWORD, GetPriority)(THIS) PURE; STDMETHOD_(void, PreLoad)(THIS) PURE; STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE; STDMETHOD_(DWORD, SetLOD)(THIS_ DWORD LODNew) PURE; STDMETHOD_(DWORD, GetLOD)(THIS) PURE; STDMETHOD_(DWORD, GetLevelCount)(THIS) PURE; STDMETHOD(GetLevelDesc)(THIS_ UINT Level,D3DVOLUME_DESC *pDesc) PURE; STDMETHOD(GetVolumeLevel)(THIS_ UINT Level,IDirect3DVolume8** ppVolumeLevel) PURE; STDMETHOD(LockBox)(THIS_ UINT Level,D3DLOCKED_BOX* pLockedVolume,CONST D3DBOX* pBox,DWORD Flags) PURE; STDMETHOD(UnlockBox)(THIS_ UINT Level) PURE; STDMETHOD(AddDirtyBox)(THIS_ CONST D3DBOX* pDirtyBox) PURE; }; typedef struct IDirect3DVolumeTexture8 *LPDIRECT3DVOLUMETEXTURE8, *PDIRECT3DVOLUMETEXTURE8; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirect3DVolumeTexture8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DVolumeTexture8_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DVolumeTexture8_Release(p) (p)->lpVtbl->Release(p) #define IDirect3DVolumeTexture8_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) #define IDirect3DVolumeTexture8_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d) #define IDirect3DVolumeTexture8_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c) #define IDirect3DVolumeTexture8_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a) #define IDirect3DVolumeTexture8_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a) #define IDirect3DVolumeTexture8_GetPriority(p) (p)->lpVtbl->GetPriority(p) #define IDirect3DVolumeTexture8_PreLoad(p) (p)->lpVtbl->PreLoad(p) #define IDirect3DVolumeTexture8_GetType(p) (p)->lpVtbl->GetType(p) #define IDirect3DVolumeTexture8_SetLOD(p,a) (p)->lpVtbl->SetLOD(p,a) #define IDirect3DVolumeTexture8_GetLOD(p) (p)->lpVtbl->GetLOD(p) #define IDirect3DVolumeTexture8_GetLevelCount(p) (p)->lpVtbl->GetLevelCount(p) #define IDirect3DVolumeTexture8_GetLevelDesc(p,a,b) (p)->lpVtbl->GetLevelDesc(p,a,b) #define IDirect3DVolumeTexture8_GetVolumeLevel(p,a,b) (p)->lpVtbl->GetVolumeLevel(p,a,b) #define IDirect3DVolumeTexture8_LockBox(p,a,b,c,d) (p)->lpVtbl->LockBox(p,a,b,c,d) #define IDirect3DVolumeTexture8_UnlockBox(p,a) (p)->lpVtbl->UnlockBox(p,a) #define IDirect3DVolumeTexture8_AddDirtyBox(p,a) (p)->lpVtbl->AddDirtyBox(p,a) #else #define IDirect3DVolumeTexture8_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DVolumeTexture8_AddRef(p) (p)->AddRef() #define IDirect3DVolumeTexture8_Release(p) (p)->Release() #define IDirect3DVolumeTexture8_GetDevice(p,a) (p)->GetDevice(a) #define IDirect3DVolumeTexture8_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d) #define IDirect3DVolumeTexture8_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c) #define IDirect3DVolumeTexture8_FreePrivateData(p,a) (p)->FreePrivateData(a) #define IDirect3DVolumeTexture8_SetPriority(p,a) (p)->SetPriority(a) #define IDirect3DVolumeTexture8_GetPriority(p) (p)->GetPriority() #define IDirect3DVolumeTexture8_PreLoad(p) (p)->PreLoad() #define IDirect3DVolumeTexture8_GetType(p) (p)->GetType() #define IDirect3DVolumeTexture8_SetLOD(p,a) (p)->SetLOD(a) #define IDirect3DVolumeTexture8_GetLOD(p) (p)->GetLOD() #define IDirect3DVolumeTexture8_GetLevelCount(p) (p)->GetLevelCount() #define IDirect3DVolumeTexture8_GetLevelDesc(p,a,b) (p)->GetLevelDesc(a,b) #define IDirect3DVolumeTexture8_GetVolumeLevel(p,a,b) (p)->GetVolumeLevel(a,b) #define IDirect3DVolumeTexture8_LockBox(p,a,b,c,d) (p)->LockBox(a,b,c,d) #define IDirect3DVolumeTexture8_UnlockBox(p,a) (p)->UnlockBox(a) #define IDirect3DVolumeTexture8_AddDirtyBox(p,a) (p)->AddDirtyBox(a) #endif #undef INTERFACE #define INTERFACE IDirect3DCubeTexture8 DECLARE_INTERFACE_(IDirect3DCubeTexture8, IDirect3DBaseTexture8) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DBaseTexture8 methods ***/ STDMETHOD(GetDevice)(THIS_ IDirect3DDevice8** ppDevice) PURE; STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid,CONST void* pData,DWORD SizeOfData,DWORD Flags) PURE; STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid,void* pData,DWORD* pSizeOfData) PURE; STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE; STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE; STDMETHOD_(DWORD, GetPriority)(THIS) PURE; STDMETHOD_(void, PreLoad)(THIS) PURE; STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE; STDMETHOD_(DWORD, SetLOD)(THIS_ DWORD LODNew) PURE; STDMETHOD_(DWORD, GetLOD)(THIS) PURE; STDMETHOD_(DWORD, GetLevelCount)(THIS) PURE; STDMETHOD(GetLevelDesc)(THIS_ UINT Level,D3DSURFACE_DESC *pDesc) PURE; STDMETHOD(GetCubeMapSurface)(THIS_ D3DCUBEMAP_FACES FaceType,UINT Level,IDirect3DSurface8** ppCubeMapSurface) PURE; STDMETHOD(LockRect)(THIS_ D3DCUBEMAP_FACES FaceType,UINT Level,D3DLOCKED_RECT* pLockedRect,CONST RECT* pRect,DWORD Flags) PURE; STDMETHOD(UnlockRect)(THIS_ D3DCUBEMAP_FACES FaceType,UINT Level) PURE; STDMETHOD(AddDirtyRect)(THIS_ D3DCUBEMAP_FACES FaceType,CONST RECT* pDirtyRect) PURE; }; typedef struct IDirect3DCubeTexture8 *LPDIRECT3DCUBETEXTURE8, *PDIRECT3DCUBETEXTURE8; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirect3DCubeTexture8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DCubeTexture8_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DCubeTexture8_Release(p) (p)->lpVtbl->Release(p) #define IDirect3DCubeTexture8_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) #define IDirect3DCubeTexture8_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d) #define IDirect3DCubeTexture8_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c) #define IDirect3DCubeTexture8_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a) #define IDirect3DCubeTexture8_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a) #define IDirect3DCubeTexture8_GetPriority(p) (p)->lpVtbl->GetPriority(p) #define IDirect3DCubeTexture8_PreLoad(p) (p)->lpVtbl->PreLoad(p) #define IDirect3DCubeTexture8_GetType(p) (p)->lpVtbl->GetType(p) #define IDirect3DCubeTexture8_SetLOD(p,a) (p)->lpVtbl->SetLOD(p,a) #define IDirect3DCubeTexture8_GetLOD(p) (p)->lpVtbl->GetLOD(p) #define IDirect3DCubeTexture8_GetLevelCount(p) (p)->lpVtbl->GetLevelCount(p) #define IDirect3DCubeTexture8_GetLevelDesc(p,a,b) (p)->lpVtbl->GetLevelDesc(p,a,b) #define IDirect3DCubeTexture8_GetCubeMapSurface(p,a,b,c) (p)->lpVtbl->GetCubeMapSurface(p,a,b,c) #define IDirect3DCubeTexture8_LockRect(p,a,b,c,d,e) (p)->lpVtbl->LockRect(p,a,b,c,d,e) #define IDirect3DCubeTexture8_UnlockRect(p,a,b) (p)->lpVtbl->UnlockRect(p,a,b) #define IDirect3DCubeTexture8_AddDirtyRect(p,a,b) (p)->lpVtbl->AddDirtyRect(p,a,b) #else #define IDirect3DCubeTexture8_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DCubeTexture8_AddRef(p) (p)->AddRef() #define IDirect3DCubeTexture8_Release(p) (p)->Release() #define IDirect3DCubeTexture8_GetDevice(p,a) (p)->GetDevice(a) #define IDirect3DCubeTexture8_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d) #define IDirect3DCubeTexture8_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c) #define IDirect3DCubeTexture8_FreePrivateData(p,a) (p)->FreePrivateData(a) #define IDirect3DCubeTexture8_SetPriority(p,a) (p)->SetPriority(a) #define IDirect3DCubeTexture8_GetPriority(p) (p)->GetPriority() #define IDirect3DCubeTexture8_PreLoad(p) (p)->PreLoad() #define IDirect3DCubeTexture8_GetType(p) (p)->GetType() #define IDirect3DCubeTexture8_SetLOD(p,a) (p)->SetLOD(a) #define IDirect3DCubeTexture8_GetLOD(p) (p)->GetLOD() #define IDirect3DCubeTexture8_GetLevelCount(p) (p)->GetLevelCount() #define IDirect3DCubeTexture8_GetLevelDesc(p,a,b) (p)->GetLevelDesc(a,b) #define IDirect3DCubeTexture8_GetCubeMapSurface(p,a,b,c) (p)->GetCubeMapSurface(a,b,c) #define IDirect3DCubeTexture8_LockRect(p,a,b,c,d,e) (p)->LockRect(a,b,c,d,e) #define IDirect3DCubeTexture8_UnlockRect(p,a,b) (p)->UnlockRect(a,b) #define IDirect3DCubeTexture8_AddDirtyRect(p,a,b) (p)->AddDirtyRect(a,b) #endif #undef INTERFACE #define INTERFACE IDirect3DVertexBuffer8 DECLARE_INTERFACE_(IDirect3DVertexBuffer8, IDirect3DResource8) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DResource8 methods ***/ STDMETHOD(GetDevice)(THIS_ IDirect3DDevice8** ppDevice) PURE; STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid,CONST void* pData,DWORD SizeOfData,DWORD Flags) PURE; STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid,void* pData,DWORD* pSizeOfData) PURE; STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE; STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE; STDMETHOD_(DWORD, GetPriority)(THIS) PURE; STDMETHOD_(void, PreLoad)(THIS) PURE; STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE; STDMETHOD(Lock)(THIS_ UINT OffsetToLock,UINT SizeToLock,BYTE** ppbData,DWORD Flags) PURE; STDMETHOD(Unlock)(THIS) PURE; STDMETHOD(GetDesc)(THIS_ D3DVERTEXBUFFER_DESC *pDesc) PURE; }; typedef struct IDirect3DVertexBuffer8 *LPDIRECT3DVERTEXBUFFER8, *PDIRECT3DVERTEXBUFFER8; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirect3DVertexBuffer8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DVertexBuffer8_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DVertexBuffer8_Release(p) (p)->lpVtbl->Release(p) #define IDirect3DVertexBuffer8_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) #define IDirect3DVertexBuffer8_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d) #define IDirect3DVertexBuffer8_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c) #define IDirect3DVertexBuffer8_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a) #define IDirect3DVertexBuffer8_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a) #define IDirect3DVertexBuffer8_GetPriority(p) (p)->lpVtbl->GetPriority(p) #define IDirect3DVertexBuffer8_PreLoad(p) (p)->lpVtbl->PreLoad(p) #define IDirect3DVertexBuffer8_GetType(p) (p)->lpVtbl->GetType(p) #define IDirect3DVertexBuffer8_Lock(p,a,b,c,d) (p)->lpVtbl->Lock(p,a,b,c,d) #define IDirect3DVertexBuffer8_Unlock(p) (p)->lpVtbl->Unlock(p) #define IDirect3DVertexBuffer8_GetDesc(p,a) (p)->lpVtbl->GetDesc(p,a) #else #define IDirect3DVertexBuffer8_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DVertexBuffer8_AddRef(p) (p)->AddRef() #define IDirect3DVertexBuffer8_Release(p) (p)->Release() #define IDirect3DVertexBuffer8_GetDevice(p,a) (p)->GetDevice(a) #define IDirect3DVertexBuffer8_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d) #define IDirect3DVertexBuffer8_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c) #define IDirect3DVertexBuffer8_FreePrivateData(p,a) (p)->FreePrivateData(a) #define IDirect3DVertexBuffer8_SetPriority(p,a) (p)->SetPriority(a) #define IDirect3DVertexBuffer8_GetPriority(p) (p)->GetPriority() #define IDirect3DVertexBuffer8_PreLoad(p) (p)->PreLoad() #define IDirect3DVertexBuffer8_GetType(p) (p)->GetType() #define IDirect3DVertexBuffer8_Lock(p,a,b,c,d) (p)->Lock(a,b,c,d) #define IDirect3DVertexBuffer8_Unlock(p) (p)->Unlock() #define IDirect3DVertexBuffer8_GetDesc(p,a) (p)->GetDesc(a) #endif #undef INTERFACE #define INTERFACE IDirect3DIndexBuffer8 DECLARE_INTERFACE_(IDirect3DIndexBuffer8, IDirect3DResource8) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DResource8 methods ***/ STDMETHOD(GetDevice)(THIS_ IDirect3DDevice8** ppDevice) PURE; STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid,CONST void* pData,DWORD SizeOfData,DWORD Flags) PURE; STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid,void* pData,DWORD* pSizeOfData) PURE; STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE; STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE; STDMETHOD_(DWORD, GetPriority)(THIS) PURE; STDMETHOD_(void, PreLoad)(THIS) PURE; STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE; STDMETHOD(Lock)(THIS_ UINT OffsetToLock,UINT SizeToLock,BYTE** ppbData,DWORD Flags) PURE; STDMETHOD(Unlock)(THIS) PURE; STDMETHOD(GetDesc)(THIS_ D3DINDEXBUFFER_DESC *pDesc) PURE; }; typedef struct IDirect3DIndexBuffer8 *LPDIRECT3DINDEXBUFFER8, *PDIRECT3DINDEXBUFFER8; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirect3DIndexBuffer8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DIndexBuffer8_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DIndexBuffer8_Release(p) (p)->lpVtbl->Release(p) #define IDirect3DIndexBuffer8_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) #define IDirect3DIndexBuffer8_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d) #define IDirect3DIndexBuffer8_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c) #define IDirect3DIndexBuffer8_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a) #define IDirect3DIndexBuffer8_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a) #define IDirect3DIndexBuffer8_GetPriority(p) (p)->lpVtbl->GetPriority(p) #define IDirect3DIndexBuffer8_PreLoad(p) (p)->lpVtbl->PreLoad(p) #define IDirect3DIndexBuffer8_GetType(p) (p)->lpVtbl->GetType(p) #define IDirect3DIndexBuffer8_Lock(p,a,b,c,d) (p)->lpVtbl->Lock(p,a,b,c,d) #define IDirect3DIndexBuffer8_Unlock(p) (p)->lpVtbl->Unlock(p) #define IDirect3DIndexBuffer8_GetDesc(p,a) (p)->lpVtbl->GetDesc(p,a) #else #define IDirect3DIndexBuffer8_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DIndexBuffer8_AddRef(p) (p)->AddRef() #define IDirect3DIndexBuffer8_Release(p) (p)->Release() #define IDirect3DIndexBuffer8_GetDevice(p,a) (p)->GetDevice(a) #define IDirect3DIndexBuffer8_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d) #define IDirect3DIndexBuffer8_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c) #define IDirect3DIndexBuffer8_FreePrivateData(p,a) (p)->FreePrivateData(a) #define IDirect3DIndexBuffer8_SetPriority(p,a) (p)->SetPriority(a) #define IDirect3DIndexBuffer8_GetPriority(p) (p)->GetPriority() #define IDirect3DIndexBuffer8_PreLoad(p) (p)->PreLoad() #define IDirect3DIndexBuffer8_GetType(p) (p)->GetType() #define IDirect3DIndexBuffer8_Lock(p,a,b,c,d) (p)->Lock(a,b,c,d) #define IDirect3DIndexBuffer8_Unlock(p) (p)->Unlock() #define IDirect3DIndexBuffer8_GetDesc(p,a) (p)->GetDesc(a) #endif #undef INTERFACE #define INTERFACE IDirect3DSurface8 DECLARE_INTERFACE_(IDirect3DSurface8, IUnknown) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DSurface8 methods ***/ STDMETHOD(GetDevice)(THIS_ IDirect3DDevice8** ppDevice) PURE; STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid,CONST void* pData,DWORD SizeOfData,DWORD Flags) PURE; STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid,void* pData,DWORD* pSizeOfData) PURE; STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE; STDMETHOD(GetContainer)(THIS_ REFIID riid,void** ppContainer) PURE; STDMETHOD(GetDesc)(THIS_ D3DSURFACE_DESC *pDesc) PURE; STDMETHOD(LockRect)(THIS_ D3DLOCKED_RECT* pLockedRect,CONST RECT* pRect,DWORD Flags) PURE; STDMETHOD(UnlockRect)(THIS) PURE; }; typedef struct IDirect3DSurface8 *LPDIRECT3DSURFACE8, *PDIRECT3DSURFACE8; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirect3DSurface8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DSurface8_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DSurface8_Release(p) (p)->lpVtbl->Release(p) #define IDirect3DSurface8_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) #define IDirect3DSurface8_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d) #define IDirect3DSurface8_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c) #define IDirect3DSurface8_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a) #define IDirect3DSurface8_GetContainer(p,a,b) (p)->lpVtbl->GetContainer(p,a,b) #define IDirect3DSurface8_GetDesc(p,a) (p)->lpVtbl->GetDesc(p,a) #define IDirect3DSurface8_LockRect(p,a,b,c) (p)->lpVtbl->LockRect(p,a,b,c) #define IDirect3DSurface8_UnlockRect(p) (p)->lpVtbl->UnlockRect(p) #else #define IDirect3DSurface8_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DSurface8_AddRef(p) (p)->AddRef() #define IDirect3DSurface8_Release(p) (p)->Release() #define IDirect3DSurface8_GetDevice(p,a) (p)->GetDevice(a) #define IDirect3DSurface8_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d) #define IDirect3DSurface8_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c) #define IDirect3DSurface8_FreePrivateData(p,a) (p)->FreePrivateData(a) #define IDirect3DSurface8_GetContainer(p,a,b) (p)->GetContainer(a,b) #define IDirect3DSurface8_GetDesc(p,a) (p)->GetDesc(a) #define IDirect3DSurface8_LockRect(p,a,b,c) (p)->LockRect(a,b,c) #define IDirect3DSurface8_UnlockRect(p) (p)->UnlockRect() #endif #undef INTERFACE #define INTERFACE IDirect3DVolume8 DECLARE_INTERFACE_(IDirect3DVolume8, IUnknown) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DVolume8 methods ***/ STDMETHOD(GetDevice)(THIS_ IDirect3DDevice8** ppDevice) PURE; STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid,CONST void* pData,DWORD SizeOfData,DWORD Flags) PURE; STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid,void* pData,DWORD* pSizeOfData) PURE; STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE; STDMETHOD(GetContainer)(THIS_ REFIID riid,void** ppContainer) PURE; STDMETHOD(GetDesc)(THIS_ D3DVOLUME_DESC *pDesc) PURE; STDMETHOD(LockBox)(THIS_ D3DLOCKED_BOX * pLockedVolume,CONST D3DBOX* pBox,DWORD Flags) PURE; STDMETHOD(UnlockBox)(THIS) PURE; }; typedef struct IDirect3DVolume8 *LPDIRECT3DVOLUME8, *PDIRECT3DVOLUME8; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirect3DVolume8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DVolume8_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DVolume8_Release(p) (p)->lpVtbl->Release(p) #define IDirect3DVolume8_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) #define IDirect3DVolume8_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d) #define IDirect3DVolume8_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c) #define IDirect3DVolume8_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a) #define IDirect3DVolume8_GetContainer(p,a,b) (p)->lpVtbl->GetContainer(p,a,b) #define IDirect3DVolume8_GetDesc(p,a) (p)->lpVtbl->GetDesc(p,a) #define IDirect3DVolume8_LockBox(p,a,b,c) (p)->lpVtbl->LockBox(p,a,b,c) #define IDirect3DVolume8_UnlockBox(p) (p)->lpVtbl->UnlockBox(p) #else #define IDirect3DVolume8_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DVolume8_AddRef(p) (p)->AddRef() #define IDirect3DVolume8_Release(p) (p)->Release() #define IDirect3DVolume8_GetDevice(p,a) (p)->GetDevice(a) #define IDirect3DVolume8_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d) #define IDirect3DVolume8_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c) #define IDirect3DVolume8_FreePrivateData(p,a) (p)->FreePrivateData(a) #define IDirect3DVolume8_GetContainer(p,a,b) (p)->GetContainer(a,b) #define IDirect3DVolume8_GetDesc(p,a) (p)->GetDesc(a) #define IDirect3DVolume8_LockBox(p,a,b,c) (p)->LockBox(a,b,c) #define IDirect3DVolume8_UnlockBox(p) (p)->UnlockBox() #endif /**************************************************************************** * Flags for SetPrivateData method on all D3D8 interfaces * * The passed pointer is an IUnknown ptr. The SizeOfData argument to SetPrivateData * must be set to sizeof(IUnknown*). Direct3D will call AddRef through this * pointer and Release when the private data is destroyed. The data will be * destroyed when another SetPrivateData with the same GUID is set, when * FreePrivateData is called, or when the D3D8 object is freed. ****************************************************************************/ #define D3DSPD_IUNKNOWN 0x00000001L /**************************************************************************** * * Parameter for IDirect3D8 Enum and GetCaps8 functions to get the info for * the current mode only. * ****************************************************************************/ #define D3DCURRENT_DISPLAY_MODE 0x00EFFFFFL /**************************************************************************** * * Flags for IDirect3D8::CreateDevice's BehaviorFlags * ****************************************************************************/ #define D3DCREATE_FPU_PRESERVE 0x00000002L #define D3DCREATE_MULTITHREADED 0x00000004L #define D3DCREATE_PUREDEVICE 0x00000010L #define D3DCREATE_SOFTWARE_VERTEXPROCESSING 0x00000020L #define D3DCREATE_HARDWARE_VERTEXPROCESSING 0x00000040L #define D3DCREATE_MIXED_VERTEXPROCESSING 0x00000080L #define D3DCREATE_DISABLE_DRIVER_MANAGEMENT 0x00000100L /**************************************************************************** * * Parameter for IDirect3D8::CreateDevice's iAdapter * ****************************************************************************/ #define D3DADAPTER_DEFAULT 0 /**************************************************************************** * * Flags for IDirect3D8::EnumAdapters * ****************************************************************************/ #define D3DENUM_NO_WHQL_LEVEL 0x00000002L /**************************************************************************** * * Maximum number of back-buffers supported in DX8 * ****************************************************************************/ #define D3DPRESENT_BACK_BUFFERS_MAX 3L /**************************************************************************** * * Flags for IDirect3DDevice8::SetGammaRamp * ****************************************************************************/ #define D3DSGR_NO_CALIBRATION 0x00000000L #define D3DSGR_CALIBRATE 0x00000001L /**************************************************************************** * * Flags for IDirect3DDevice8::SetCursorPosition * ****************************************************************************/ #define D3DCURSOR_IMMEDIATE_UPDATE 0x00000001L /**************************************************************************** * * Flags for DrawPrimitive/DrawIndexedPrimitive * Also valid for Begin/BeginIndexed * Also valid for VertexBuffer::CreateVertexBuffer ****************************************************************************/ /* * DirectDraw error codes */ #define _FACD3D 0x876 #define MAKE_D3DHRESULT( code ) MAKE_HRESULT( 1, _FACD3D, code ) /* * Direct3D Errors */ #define D3D_OK S_OK #define D3DERR_WRONGTEXTUREFORMAT MAKE_D3DHRESULT(2072) #define D3DERR_UNSUPPORTEDCOLOROPERATION MAKE_D3DHRESULT(2073) #define D3DERR_UNSUPPORTEDCOLORARG MAKE_D3DHRESULT(2074) #define D3DERR_UNSUPPORTEDALPHAOPERATION MAKE_D3DHRESULT(2075) #define D3DERR_UNSUPPORTEDALPHAARG MAKE_D3DHRESULT(2076) #define D3DERR_TOOMANYOPERATIONS MAKE_D3DHRESULT(2077) #define D3DERR_CONFLICTINGTEXTUREFILTER MAKE_D3DHRESULT(2078) #define D3DERR_UNSUPPORTEDFACTORVALUE MAKE_D3DHRESULT(2079) #define D3DERR_CONFLICTINGRENDERSTATE MAKE_D3DHRESULT(2081) #define D3DERR_UNSUPPORTEDTEXTUREFILTER MAKE_D3DHRESULT(2082) #define D3DERR_CONFLICTINGTEXTUREPALETTE MAKE_D3DHRESULT(2086) #define D3DERR_DRIVERINTERNALERROR MAKE_D3DHRESULT(2087) #define D3DERR_NOTFOUND MAKE_D3DHRESULT(2150) #define D3DERR_MOREDATA MAKE_D3DHRESULT(2151) #define D3DERR_DEVICELOST MAKE_D3DHRESULT(2152) #define D3DERR_DEVICENOTRESET MAKE_D3DHRESULT(2153) #define D3DERR_NOTAVAILABLE MAKE_D3DHRESULT(2154) #define D3DERR_OUTOFVIDEOMEMORY MAKE_D3DHRESULT(380) #define D3DERR_INVALIDDEVICE MAKE_D3DHRESULT(2155) #define D3DERR_INVALIDCALL MAKE_D3DHRESULT(2156) #define D3DERR_DRIVERINVALIDCALL MAKE_D3DHRESULT(2157) #ifdef __cplusplus }; #endif #endif /* (DIRECT3D_VERSION >= 0x0800) */ #endif /* _D3D_H_ */ ================================================ FILE: Include/d3d8caps.h ================================================ /*==========================================================================; * * Copyright (C) Microsoft Corporation. All Rights Reserved. * * File: d3d8caps.h * Content: Direct3D capabilities include file * ***************************************************************************/ #ifndef _D3D8CAPS_H #define _D3D8CAPS_H #ifndef DIRECT3D_VERSION #define DIRECT3D_VERSION 0x0800 #endif //DIRECT3D_VERSION // include this file content only if compiling for DX8 interfaces #if(DIRECT3D_VERSION >= 0x0800) #if defined(_X86_) || defined(_IA64_) #pragma pack(4) #endif typedef struct _D3DCAPS8 { /* Device Info */ D3DDEVTYPE DeviceType; UINT AdapterOrdinal; /* Caps from DX7 Draw */ DWORD Caps; DWORD Caps2; DWORD Caps3; DWORD PresentationIntervals; /* Cursor Caps */ DWORD CursorCaps; /* 3D Device Caps */ DWORD DevCaps; DWORD PrimitiveMiscCaps; DWORD RasterCaps; DWORD ZCmpCaps; DWORD SrcBlendCaps; DWORD DestBlendCaps; DWORD AlphaCmpCaps; DWORD ShadeCaps; DWORD TextureCaps; DWORD TextureFilterCaps; // D3DPTFILTERCAPS for IDirect3DTexture8's DWORD CubeTextureFilterCaps; // D3DPTFILTERCAPS for IDirect3DCubeTexture8's DWORD VolumeTextureFilterCaps; // D3DPTFILTERCAPS for IDirect3DVolumeTexture8's DWORD TextureAddressCaps; // D3DPTADDRESSCAPS for IDirect3DTexture8's DWORD VolumeTextureAddressCaps; // D3DPTADDRESSCAPS for IDirect3DVolumeTexture8's DWORD LineCaps; // D3DLINECAPS DWORD MaxTextureWidth, MaxTextureHeight; DWORD MaxVolumeExtent; DWORD MaxTextureRepeat; DWORD MaxTextureAspectRatio; DWORD MaxAnisotropy; float MaxVertexW; float GuardBandLeft; float GuardBandTop; float GuardBandRight; float GuardBandBottom; float ExtentsAdjust; DWORD StencilCaps; DWORD FVFCaps; DWORD TextureOpCaps; DWORD MaxTextureBlendStages; DWORD MaxSimultaneousTextures; DWORD VertexProcessingCaps; DWORD MaxActiveLights; DWORD MaxUserClipPlanes; DWORD MaxVertexBlendMatrices; DWORD MaxVertexBlendMatrixIndex; float MaxPointSize; DWORD MaxPrimitiveCount; // max number of primitives per DrawPrimitive call DWORD MaxVertexIndex; DWORD MaxStreams; DWORD MaxStreamStride; // max stride for SetStreamSource DWORD VertexShaderVersion; DWORD MaxVertexShaderConst; // number of vertex shader constant registers DWORD PixelShaderVersion; float MaxPixelShaderValue; // max value of pixel shader arithmetic component } D3DCAPS8; // // BIT DEFINES FOR D3DCAPS8 DWORD MEMBERS // // // Caps // #define D3DCAPS_READ_SCANLINE 0x00020000L // // Caps2 // #define D3DCAPS2_NO2DDURING3DSCENE 0x00000002L #define D3DCAPS2_FULLSCREENGAMMA 0x00020000L #define D3DCAPS2_CANRENDERWINDOWED 0x00080000L #define D3DCAPS2_CANCALIBRATEGAMMA 0x00100000L #define D3DCAPS2_RESERVED 0x02000000L #define D3DCAPS2_CANMANAGERESOURCE 0x10000000L #define D3DCAPS2_DYNAMICTEXTURES 0x20000000L // // Caps3 // #define D3DCAPS3_RESERVED 0x8000001fL // Indicates that the device can respect the ALPHABLENDENABLE render state // when fullscreen while using the FLIP or DISCARD swap effect. // COPY and COPYVSYNC swap effects work whether or not this flag is set. #define D3DCAPS3_ALPHA_FULLSCREEN_FLIP_OR_DISCARD 0x00000020L // // PresentationIntervals // #define D3DPRESENT_INTERVAL_DEFAULT 0x00000000L #define D3DPRESENT_INTERVAL_ONE 0x00000001L #define D3DPRESENT_INTERVAL_TWO 0x00000002L #define D3DPRESENT_INTERVAL_THREE 0x00000004L #define D3DPRESENT_INTERVAL_FOUR 0x00000008L #define D3DPRESENT_INTERVAL_IMMEDIATE 0x80000000L // // CursorCaps // // Driver supports HW color cursor in at least hi-res modes(height >=400) #define D3DCURSORCAPS_COLOR 0x00000001L // Driver supports HW cursor also in low-res modes(height < 400) #define D3DCURSORCAPS_LOWRES 0x00000002L // // DevCaps // #define D3DDEVCAPS_EXECUTESYSTEMMEMORY 0x00000010L /* Device can use execute buffers from system memory */ #define D3DDEVCAPS_EXECUTEVIDEOMEMORY 0x00000020L /* Device can use execute buffers from video memory */ #define D3DDEVCAPS_TLVERTEXSYSTEMMEMORY 0x00000040L /* Device can use TL buffers from system memory */ #define D3DDEVCAPS_TLVERTEXVIDEOMEMORY 0x00000080L /* Device can use TL buffers from video memory */ #define D3DDEVCAPS_TEXTURESYSTEMMEMORY 0x00000100L /* Device can texture from system memory */ #define D3DDEVCAPS_TEXTUREVIDEOMEMORY 0x00000200L /* Device can texture from device memory */ #define D3DDEVCAPS_DRAWPRIMTLVERTEX 0x00000400L /* Device can draw TLVERTEX primitives */ #define D3DDEVCAPS_CANRENDERAFTERFLIP 0x00000800L /* Device can render without waiting for flip to complete */ #define D3DDEVCAPS_TEXTURENONLOCALVIDMEM 0x00001000L /* Device can texture from nonlocal video memory */ #define D3DDEVCAPS_DRAWPRIMITIVES2 0x00002000L /* Device can support DrawPrimitives2 */ #define D3DDEVCAPS_SEPARATETEXTUREMEMORIES 0x00004000L /* Device is texturing from separate memory pools */ #define D3DDEVCAPS_DRAWPRIMITIVES2EX 0x00008000L /* Device can support Extended DrawPrimitives2 i.e. DX7 compliant driver*/ #define D3DDEVCAPS_HWTRANSFORMANDLIGHT 0x00010000L /* Device can support transformation and lighting in hardware and DRAWPRIMITIVES2EX must be also */ #define D3DDEVCAPS_CANBLTSYSTONONLOCAL 0x00020000L /* Device supports a Tex Blt from system memory to non-local vidmem */ #define D3DDEVCAPS_HWRASTERIZATION 0x00080000L /* Device has HW acceleration for rasterization */ #define D3DDEVCAPS_PUREDEVICE 0x00100000L /* Device supports D3DCREATE_PUREDEVICE */ #define D3DDEVCAPS_QUINTICRTPATCHES 0x00200000L /* Device supports quintic Beziers and BSplines */ #define D3DDEVCAPS_RTPATCHES 0x00400000L /* Device supports Rect and Tri patches */ #define D3DDEVCAPS_RTPATCHHANDLEZERO 0x00800000L /* Indicates that RT Patches may be drawn efficiently using handle 0 */ #define D3DDEVCAPS_NPATCHES 0x01000000L /* Device supports N-Patches */ // // PrimitiveMiscCaps // #define D3DPMISCCAPS_MASKZ 0x00000002L #define D3DPMISCCAPS_LINEPATTERNREP 0x00000004L #define D3DPMISCCAPS_CULLNONE 0x00000010L #define D3DPMISCCAPS_CULLCW 0x00000020L #define D3DPMISCCAPS_CULLCCW 0x00000040L #define D3DPMISCCAPS_COLORWRITEENABLE 0x00000080L #define D3DPMISCCAPS_CLIPPLANESCALEDPOINTS 0x00000100L /* Device correctly clips scaled points to clip planes */ #define D3DPMISCCAPS_CLIPTLVERTS 0x00000200L /* device will clip post-transformed vertex primitives */ #define D3DPMISCCAPS_TSSARGTEMP 0x00000400L /* device supports D3DTA_TEMP for temporary register */ #define D3DPMISCCAPS_BLENDOP 0x00000800L /* device supports D3DRS_BLENDOP */ #define D3DPMISCCAPS_NULLREFERENCE 0x00001000L /* Reference Device that doesnt render */ // // LineCaps // #define D3DLINECAPS_TEXTURE 0x00000001L #define D3DLINECAPS_ZTEST 0x00000002L #define D3DLINECAPS_BLEND 0x00000004L #define D3DLINECAPS_ALPHACMP 0x00000008L #define D3DLINECAPS_FOG 0x00000010L // // RasterCaps // #define D3DPRASTERCAPS_DITHER 0x00000001L #define D3DPRASTERCAPS_PAT 0x00000008L #define D3DPRASTERCAPS_ZTEST 0x00000010L #define D3DPRASTERCAPS_FOGVERTEX 0x00000080L #define D3DPRASTERCAPS_FOGTABLE 0x00000100L #define D3DPRASTERCAPS_ANTIALIASEDGES 0x00001000L #define D3DPRASTERCAPS_MIPMAPLODBIAS 0x00002000L #define D3DPRASTERCAPS_ZBIAS 0x00004000L #define D3DPRASTERCAPS_ZBUFFERLESSHSR 0x00008000L #define D3DPRASTERCAPS_FOGRANGE 0x00010000L #define D3DPRASTERCAPS_ANISOTROPY 0x00020000L #define D3DPRASTERCAPS_WBUFFER 0x00040000L #define D3DPRASTERCAPS_WFOG 0x00100000L #define D3DPRASTERCAPS_ZFOG 0x00200000L #define D3DPRASTERCAPS_COLORPERSPECTIVE 0x00400000L /* Device iterates colors perspective correct */ #define D3DPRASTERCAPS_STRETCHBLTMULTISAMPLE 0x00800000L // // ZCmpCaps, AlphaCmpCaps // #define D3DPCMPCAPS_NEVER 0x00000001L #define D3DPCMPCAPS_LESS 0x00000002L #define D3DPCMPCAPS_EQUAL 0x00000004L #define D3DPCMPCAPS_LESSEQUAL 0x00000008L #define D3DPCMPCAPS_GREATER 0x00000010L #define D3DPCMPCAPS_NOTEQUAL 0x00000020L #define D3DPCMPCAPS_GREATEREQUAL 0x00000040L #define D3DPCMPCAPS_ALWAYS 0x00000080L // // SourceBlendCaps, DestBlendCaps // #define D3DPBLENDCAPS_ZERO 0x00000001L #define D3DPBLENDCAPS_ONE 0x00000002L #define D3DPBLENDCAPS_SRCCOLOR 0x00000004L #define D3DPBLENDCAPS_INVSRCCOLOR 0x00000008L #define D3DPBLENDCAPS_SRCALPHA 0x00000010L #define D3DPBLENDCAPS_INVSRCALPHA 0x00000020L #define D3DPBLENDCAPS_DESTALPHA 0x00000040L #define D3DPBLENDCAPS_INVDESTALPHA 0x00000080L #define D3DPBLENDCAPS_DESTCOLOR 0x00000100L #define D3DPBLENDCAPS_INVDESTCOLOR 0x00000200L #define D3DPBLENDCAPS_SRCALPHASAT 0x00000400L #define D3DPBLENDCAPS_BOTHSRCALPHA 0x00000800L #define D3DPBLENDCAPS_BOTHINVSRCALPHA 0x00001000L // // ShadeCaps // #define D3DPSHADECAPS_COLORGOURAUDRGB 0x00000008L #define D3DPSHADECAPS_SPECULARGOURAUDRGB 0x00000200L #define D3DPSHADECAPS_ALPHAGOURAUDBLEND 0x00004000L #define D3DPSHADECAPS_FOGGOURAUD 0x00080000L // // TextureCaps // #define D3DPTEXTURECAPS_PERSPECTIVE 0x00000001L /* Perspective-correct texturing is supported */ #define D3DPTEXTURECAPS_POW2 0x00000002L /* Power-of-2 texture dimensions are required - applies to non-Cube/Volume textures only. */ #define D3DPTEXTURECAPS_ALPHA 0x00000004L /* Alpha in texture pixels is supported */ #define D3DPTEXTURECAPS_SQUAREONLY 0x00000020L /* Only square textures are supported */ #define D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE 0x00000040L /* Texture indices are not scaled by the texture size prior to interpolation */ #define D3DPTEXTURECAPS_ALPHAPALETTE 0x00000080L /* Device can draw alpha from texture palettes */ // Device can use non-POW2 textures if: // 1) D3DTEXTURE_ADDRESS is set to CLAMP for this texture's stage // 2) D3DRS_WRAP(N) is zero for this texture's coordinates // 3) mip mapping is not enabled (use magnification filter only) #define D3DPTEXTURECAPS_NONPOW2CONDITIONAL 0x00000100L #define D3DPTEXTURECAPS_PROJECTED 0x00000400L /* Device can do D3DTTFF_PROJECTED */ #define D3DPTEXTURECAPS_CUBEMAP 0x00000800L /* Device can do cubemap textures */ #define D3DPTEXTURECAPS_VOLUMEMAP 0x00002000L /* Device can do volume textures */ #define D3DPTEXTURECAPS_MIPMAP 0x00004000L /* Device can do mipmapped textures */ #define D3DPTEXTURECAPS_MIPVOLUMEMAP 0x00008000L /* Device can do mipmapped volume textures */ #define D3DPTEXTURECAPS_MIPCUBEMAP 0x00010000L /* Device can do mipmapped cube maps */ #define D3DPTEXTURECAPS_CUBEMAP_POW2 0x00020000L /* Device requires that cubemaps be power-of-2 dimension */ #define D3DPTEXTURECAPS_VOLUMEMAP_POW2 0x00040000L /* Device requires that volume maps be power-of-2 dimension */ // // TextureFilterCaps // #define D3DPTFILTERCAPS_MINFPOINT 0x00000100L /* Min Filter */ #define D3DPTFILTERCAPS_MINFLINEAR 0x00000200L #define D3DPTFILTERCAPS_MINFANISOTROPIC 0x00000400L #define D3DPTFILTERCAPS_MIPFPOINT 0x00010000L /* Mip Filter */ #define D3DPTFILTERCAPS_MIPFLINEAR 0x00020000L #define D3DPTFILTERCAPS_MAGFPOINT 0x01000000L /* Mag Filter */ #define D3DPTFILTERCAPS_MAGFLINEAR 0x02000000L #define D3DPTFILTERCAPS_MAGFANISOTROPIC 0x04000000L #define D3DPTFILTERCAPS_MAGFAFLATCUBIC 0x08000000L #define D3DPTFILTERCAPS_MAGFGAUSSIANCUBIC 0x10000000L // // TextureAddressCaps // #define D3DPTADDRESSCAPS_WRAP 0x00000001L #define D3DPTADDRESSCAPS_MIRROR 0x00000002L #define D3DPTADDRESSCAPS_CLAMP 0x00000004L #define D3DPTADDRESSCAPS_BORDER 0x00000008L #define D3DPTADDRESSCAPS_INDEPENDENTUV 0x00000010L #define D3DPTADDRESSCAPS_MIRRORONCE 0x00000020L // // StencilCaps // #define D3DSTENCILCAPS_KEEP 0x00000001L #define D3DSTENCILCAPS_ZERO 0x00000002L #define D3DSTENCILCAPS_REPLACE 0x00000004L #define D3DSTENCILCAPS_INCRSAT 0x00000008L #define D3DSTENCILCAPS_DECRSAT 0x00000010L #define D3DSTENCILCAPS_INVERT 0x00000020L #define D3DSTENCILCAPS_INCR 0x00000040L #define D3DSTENCILCAPS_DECR 0x00000080L // // TextureOpCaps // #define D3DTEXOPCAPS_DISABLE 0x00000001L #define D3DTEXOPCAPS_SELECTARG1 0x00000002L #define D3DTEXOPCAPS_SELECTARG2 0x00000004L #define D3DTEXOPCAPS_MODULATE 0x00000008L #define D3DTEXOPCAPS_MODULATE2X 0x00000010L #define D3DTEXOPCAPS_MODULATE4X 0x00000020L #define D3DTEXOPCAPS_ADD 0x00000040L #define D3DTEXOPCAPS_ADDSIGNED 0x00000080L #define D3DTEXOPCAPS_ADDSIGNED2X 0x00000100L #define D3DTEXOPCAPS_SUBTRACT 0x00000200L #define D3DTEXOPCAPS_ADDSMOOTH 0x00000400L #define D3DTEXOPCAPS_BLENDDIFFUSEALPHA 0x00000800L #define D3DTEXOPCAPS_BLENDTEXTUREALPHA 0x00001000L #define D3DTEXOPCAPS_BLENDFACTORALPHA 0x00002000L #define D3DTEXOPCAPS_BLENDTEXTUREALPHAPM 0x00004000L #define D3DTEXOPCAPS_BLENDCURRENTALPHA 0x00008000L #define D3DTEXOPCAPS_PREMODULATE 0x00010000L #define D3DTEXOPCAPS_MODULATEALPHA_ADDCOLOR 0x00020000L #define D3DTEXOPCAPS_MODULATECOLOR_ADDALPHA 0x00040000L #define D3DTEXOPCAPS_MODULATEINVALPHA_ADDCOLOR 0x00080000L #define D3DTEXOPCAPS_MODULATEINVCOLOR_ADDALPHA 0x00100000L #define D3DTEXOPCAPS_BUMPENVMAP 0x00200000L #define D3DTEXOPCAPS_BUMPENVMAPLUMINANCE 0x00400000L #define D3DTEXOPCAPS_DOTPRODUCT3 0x00800000L #define D3DTEXOPCAPS_MULTIPLYADD 0x01000000L #define D3DTEXOPCAPS_LERP 0x02000000L // // FVFCaps // #define D3DFVFCAPS_TEXCOORDCOUNTMASK 0x0000ffffL /* mask for texture coordinate count field */ #define D3DFVFCAPS_DONOTSTRIPELEMENTS 0x00080000L /* Device prefers that vertex elements not be stripped */ #define D3DFVFCAPS_PSIZE 0x00100000L /* Device can receive point size */ // // VertexProcessingCaps // #define D3DVTXPCAPS_TEXGEN 0x00000001L /* device can do texgen */ #define D3DVTXPCAPS_MATERIALSOURCE7 0x00000002L /* device can do DX7-level colormaterialsource ops */ #define D3DVTXPCAPS_DIRECTIONALLIGHTS 0x00000008L /* device can do directional lights */ #define D3DVTXPCAPS_POSITIONALLIGHTS 0x00000010L /* device can do positional lights (includes point and spot) */ #define D3DVTXPCAPS_LOCALVIEWER 0x00000020L /* device can do local viewer */ #define D3DVTXPCAPS_TWEENING 0x00000040L /* device can do vertex tweening */ #define D3DVTXPCAPS_NO_VSDT_UBYTE4 0x00000080L /* device does not support D3DVSDT_UBYTE4 */ #pragma pack() #endif /* (DIRECT3D_VERSION >= 0x0800) */ #endif /* _D3D8CAPS_H_ */ ================================================ FILE: Include/d3d8types.h ================================================ /*==========================================================================; * * Copyright (C) Microsoft Corporation. All Rights Reserved. * * File: d3d8types.h * Content: Direct3D capabilities include file * ***************************************************************************/ #ifndef _D3D8TYPES_H_ #define _D3D8TYPES_H_ #ifndef DIRECT3D_VERSION #define DIRECT3D_VERSION 0x0800 #endif //DIRECT3D_VERSION // include this file content only if compiling for DX8 interfaces #if(DIRECT3D_VERSION >= 0x0800) #include #if _MSC_VER >= 1200 #pragma warning(push) #endif #pragma warning(disable:4201) // anonymous unions warning #if defined(_X86_) || defined(_IA64_) #pragma pack(4) #endif // D3DCOLOR is equivalent to D3DFMT_A8R8G8B8 #ifndef D3DCOLOR_DEFINED typedef DWORD D3DCOLOR; #define D3DCOLOR_DEFINED #endif // maps unsigned 8 bits/channel to D3DCOLOR #define D3DCOLOR_ARGB(a,r,g,b) \ ((D3DCOLOR)((((a)&0xff)<<24)|(((r)&0xff)<<16)|(((g)&0xff)<<8)|((b)&0xff))) #define D3DCOLOR_RGBA(r,g,b,a) D3DCOLOR_ARGB(a,r,g,b) #define D3DCOLOR_XRGB(r,g,b) D3DCOLOR_ARGB(0xff,r,g,b) // maps floating point channels (0.f to 1.f range) to D3DCOLOR #define D3DCOLOR_COLORVALUE(r,g,b,a) \ D3DCOLOR_RGBA((DWORD)((r)*255.f),(DWORD)((g)*255.f),(DWORD)((b)*255.f),(DWORD)((a)*255.f)) #ifndef D3DVECTOR_DEFINED typedef struct _D3DVECTOR { float x; float y; float z; } D3DVECTOR; #define D3DVECTOR_DEFINED #endif #ifndef D3DCOLORVALUE_DEFINED typedef struct _D3DCOLORVALUE { float r; float g; float b; float a; } D3DCOLORVALUE; #define D3DCOLORVALUE_DEFINED #endif #ifndef D3DRECT_DEFINED typedef struct _D3DRECT { LONG x1; LONG y1; LONG x2; LONG y2; } D3DRECT; #define D3DRECT_DEFINED #endif #ifndef D3DMATRIX_DEFINED typedef struct _D3DMATRIX { union { struct { float _11, _12, _13, _14; float _21, _22, _23, _24; float _31, _32, _33, _34; float _41, _42, _43, _44; }; float m[4][4]; }; } D3DMATRIX; #define D3DMATRIX_DEFINED #endif typedef struct _D3DVIEWPORT8 { DWORD X; DWORD Y; /* Viewport Top left */ DWORD Width; DWORD Height; /* Viewport Dimensions */ float MinZ; /* Min/max of clip Volume */ float MaxZ; } D3DVIEWPORT8; /* * Values for clip fields. */ // Max number of user clipping planes, supported in D3D. #define D3DMAXUSERCLIPPLANES 32 // These bits could be ORed together to use with D3DRS_CLIPPLANEENABLE // #define D3DCLIPPLANE0 (1 << 0) #define D3DCLIPPLANE1 (1 << 1) #define D3DCLIPPLANE2 (1 << 2) #define D3DCLIPPLANE3 (1 << 3) #define D3DCLIPPLANE4 (1 << 4) #define D3DCLIPPLANE5 (1 << 5) // The following bits are used in the ClipUnion and ClipIntersection // members of the D3DCLIPSTATUS8 // #define D3DCS_LEFT 0x00000001L #define D3DCS_RIGHT 0x00000002L #define D3DCS_TOP 0x00000004L #define D3DCS_BOTTOM 0x00000008L #define D3DCS_FRONT 0x00000010L #define D3DCS_BACK 0x00000020L #define D3DCS_PLANE0 0x00000040L #define D3DCS_PLANE1 0x00000080L #define D3DCS_PLANE2 0x00000100L #define D3DCS_PLANE3 0x00000200L #define D3DCS_PLANE4 0x00000400L #define D3DCS_PLANE5 0x00000800L #define D3DCS_ALL (D3DCS_LEFT | \ D3DCS_RIGHT | \ D3DCS_TOP | \ D3DCS_BOTTOM | \ D3DCS_FRONT | \ D3DCS_BACK | \ D3DCS_PLANE0 | \ D3DCS_PLANE1 | \ D3DCS_PLANE2 | \ D3DCS_PLANE3 | \ D3DCS_PLANE4 | \ D3DCS_PLANE5) typedef struct _D3DCLIPSTATUS8 { DWORD ClipUnion; DWORD ClipIntersection; } D3DCLIPSTATUS8; typedef struct _D3DMATERIAL8 { D3DCOLORVALUE Diffuse; /* Diffuse color RGBA */ D3DCOLORVALUE Ambient; /* Ambient color RGB */ D3DCOLORVALUE Specular; /* Specular 'shininess' */ D3DCOLORVALUE Emissive; /* Emissive color RGB */ float Power; /* Sharpness if specular highlight */ } D3DMATERIAL8; typedef enum _D3DLIGHTTYPE { D3DLIGHT_POINT = 1, D3DLIGHT_SPOT = 2, D3DLIGHT_DIRECTIONAL = 3, D3DLIGHT_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ } D3DLIGHTTYPE; typedef struct _D3DLIGHT8 { D3DLIGHTTYPE Type; /* Type of light source */ D3DCOLORVALUE Diffuse; /* Diffuse color of light */ D3DCOLORVALUE Specular; /* Specular color of light */ D3DCOLORVALUE Ambient; /* Ambient color of light */ D3DVECTOR Position; /* Position in world space */ D3DVECTOR Direction; /* Direction in world space */ float Range; /* Cutoff range */ float Falloff; /* Falloff */ float Attenuation0; /* Constant attenuation */ float Attenuation1; /* Linear attenuation */ float Attenuation2; /* Quadratic attenuation */ float Theta; /* Inner angle of spotlight cone */ float Phi; /* Outer angle of spotlight cone */ } D3DLIGHT8; /* * Options for clearing */ #define D3DCLEAR_TARGET 0x00000001l /* Clear target surface */ #define D3DCLEAR_ZBUFFER 0x00000002l /* Clear target z buffer */ #define D3DCLEAR_STENCIL 0x00000004l /* Clear stencil planes */ /* * The following defines the rendering states */ typedef enum _D3DSHADEMODE { D3DSHADE_FLAT = 1, D3DSHADE_GOURAUD = 2, D3DSHADE_PHONG = 3, D3DSHADE_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ } D3DSHADEMODE; typedef enum _D3DFILLMODE { D3DFILL_POINT = 1, D3DFILL_WIREFRAME = 2, D3DFILL_SOLID = 3, D3DFILL_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ } D3DFILLMODE; typedef struct _D3DLINEPATTERN { WORD wRepeatFactor; WORD wLinePattern; } D3DLINEPATTERN; typedef enum _D3DBLEND { D3DBLEND_ZERO = 1, D3DBLEND_ONE = 2, D3DBLEND_SRCCOLOR = 3, D3DBLEND_INVSRCCOLOR = 4, D3DBLEND_SRCALPHA = 5, D3DBLEND_INVSRCALPHA = 6, D3DBLEND_DESTALPHA = 7, D3DBLEND_INVDESTALPHA = 8, D3DBLEND_DESTCOLOR = 9, D3DBLEND_INVDESTCOLOR = 10, D3DBLEND_SRCALPHASAT = 11, D3DBLEND_BOTHSRCALPHA = 12, D3DBLEND_BOTHINVSRCALPHA = 13, D3DBLEND_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ } D3DBLEND; typedef enum _D3DBLENDOP { D3DBLENDOP_ADD = 1, D3DBLENDOP_SUBTRACT = 2, D3DBLENDOP_REVSUBTRACT = 3, D3DBLENDOP_MIN = 4, D3DBLENDOP_MAX = 5, D3DBLENDOP_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ } D3DBLENDOP; typedef enum _D3DTEXTUREADDRESS { D3DTADDRESS_WRAP = 1, D3DTADDRESS_MIRROR = 2, D3DTADDRESS_CLAMP = 3, D3DTADDRESS_BORDER = 4, D3DTADDRESS_MIRRORONCE = 5, D3DTADDRESS_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ } D3DTEXTUREADDRESS; typedef enum _D3DCULL { D3DCULL_NONE = 1, D3DCULL_CW = 2, D3DCULL_CCW = 3, D3DCULL_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ } D3DCULL; typedef enum _D3DCMPFUNC { D3DCMP_NEVER = 1, D3DCMP_LESS = 2, D3DCMP_EQUAL = 3, D3DCMP_LESSEQUAL = 4, D3DCMP_GREATER = 5, D3DCMP_NOTEQUAL = 6, D3DCMP_GREATEREQUAL = 7, D3DCMP_ALWAYS = 8, D3DCMP_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ } D3DCMPFUNC; typedef enum _D3DSTENCILOP { D3DSTENCILOP_KEEP = 1, D3DSTENCILOP_ZERO = 2, D3DSTENCILOP_REPLACE = 3, D3DSTENCILOP_INCRSAT = 4, D3DSTENCILOP_DECRSAT = 5, D3DSTENCILOP_INVERT = 6, D3DSTENCILOP_INCR = 7, D3DSTENCILOP_DECR = 8, D3DSTENCILOP_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ } D3DSTENCILOP; typedef enum _D3DFOGMODE { D3DFOG_NONE = 0, D3DFOG_EXP = 1, D3DFOG_EXP2 = 2, D3DFOG_LINEAR = 3, D3DFOG_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ } D3DFOGMODE; typedef enum _D3DZBUFFERTYPE { D3DZB_FALSE = 0, D3DZB_TRUE = 1, // Z buffering D3DZB_USEW = 2, // W buffering D3DZB_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ } D3DZBUFFERTYPE; // Primitives supported by draw-primitive API typedef enum _D3DPRIMITIVETYPE { D3DPT_POINTLIST = 1, D3DPT_LINELIST = 2, D3DPT_LINESTRIP = 3, D3DPT_TRIANGLELIST = 4, D3DPT_TRIANGLESTRIP = 5, D3DPT_TRIANGLEFAN = 6, D3DPT_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ } D3DPRIMITIVETYPE; typedef enum _D3DTRANSFORMSTATETYPE { D3DTS_VIEW = 2, D3DTS_PROJECTION = 3, D3DTS_TEXTURE0 = 16, D3DTS_TEXTURE1 = 17, D3DTS_TEXTURE2 = 18, D3DTS_TEXTURE3 = 19, D3DTS_TEXTURE4 = 20, D3DTS_TEXTURE5 = 21, D3DTS_TEXTURE6 = 22, D3DTS_TEXTURE7 = 23, D3DTS_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ } D3DTRANSFORMSTATETYPE; #define D3DTS_WORLDMATRIX(index) (D3DTRANSFORMSTATETYPE)(index + 256) #define D3DTS_WORLD D3DTS_WORLDMATRIX(0) #define D3DTS_WORLD1 D3DTS_WORLDMATRIX(1) #define D3DTS_WORLD2 D3DTS_WORLDMATRIX(2) #define D3DTS_WORLD3 D3DTS_WORLDMATRIX(3) typedef enum _D3DRENDERSTATETYPE { D3DRS_ZENABLE = 7, /* D3DZBUFFERTYPE (or TRUE/FALSE for legacy) */ D3DRS_FILLMODE = 8, /* D3DFILLMODE */ D3DRS_SHADEMODE = 9, /* D3DSHADEMODE */ D3DRS_LINEPATTERN = 10, /* D3DLINEPATTERN */ D3DRS_ZWRITEENABLE = 14, /* TRUE to enable z writes */ D3DRS_ALPHATESTENABLE = 15, /* TRUE to enable alpha tests */ D3DRS_LASTPIXEL = 16, /* TRUE for last-pixel on lines */ D3DRS_SRCBLEND = 19, /* D3DBLEND */ D3DRS_DESTBLEND = 20, /* D3DBLEND */ D3DRS_CULLMODE = 22, /* D3DCULL */ D3DRS_ZFUNC = 23, /* D3DCMPFUNC */ D3DRS_ALPHAREF = 24, /* D3DFIXED */ D3DRS_ALPHAFUNC = 25, /* D3DCMPFUNC */ D3DRS_DITHERENABLE = 26, /* TRUE to enable dithering */ D3DRS_ALPHABLENDENABLE = 27, /* TRUE to enable alpha blending */ D3DRS_FOGENABLE = 28, /* TRUE to enable fog blending */ D3DRS_SPECULARENABLE = 29, /* TRUE to enable specular */ D3DRS_ZVISIBLE = 30, /* TRUE to enable z checking */ D3DRS_FOGCOLOR = 34, /* D3DCOLOR */ D3DRS_FOGTABLEMODE = 35, /* D3DFOGMODE */ D3DRS_FOGSTART = 36, /* Fog start (for both vertex and pixel fog) */ D3DRS_FOGEND = 37, /* Fog end */ D3DRS_FOGDENSITY = 38, /* Fog density */ D3DRS_EDGEANTIALIAS = 40, /* TRUE to enable edge antialiasing */ D3DRS_ZBIAS = 47, /* LONG Z bias */ D3DRS_RANGEFOGENABLE = 48, /* Enables range-based fog */ D3DRS_STENCILENABLE = 52, /* BOOL enable/disable stenciling */ D3DRS_STENCILFAIL = 53, /* D3DSTENCILOP to do if stencil test fails */ D3DRS_STENCILZFAIL = 54, /* D3DSTENCILOP to do if stencil test passes and Z test fails */ D3DRS_STENCILPASS = 55, /* D3DSTENCILOP to do if both stencil and Z tests pass */ D3DRS_STENCILFUNC = 56, /* D3DCMPFUNC fn. Stencil Test passes if ((ref & mask) stencilfn (stencil & mask)) is true */ D3DRS_STENCILREF = 57, /* Reference value used in stencil test */ D3DRS_STENCILMASK = 58, /* Mask value used in stencil test */ D3DRS_STENCILWRITEMASK = 59, /* Write mask applied to values written to stencil buffer */ D3DRS_TEXTUREFACTOR = 60, /* D3DCOLOR used for multi-texture blend */ D3DRS_WRAP0 = 128, /* wrap for 1st texture coord. set */ D3DRS_WRAP1 = 129, /* wrap for 2nd texture coord. set */ D3DRS_WRAP2 = 130, /* wrap for 3rd texture coord. set */ D3DRS_WRAP3 = 131, /* wrap for 4th texture coord. set */ D3DRS_WRAP4 = 132, /* wrap for 5th texture coord. set */ D3DRS_WRAP5 = 133, /* wrap for 6th texture coord. set */ D3DRS_WRAP6 = 134, /* wrap for 7th texture coord. set */ D3DRS_WRAP7 = 135, /* wrap for 8th texture coord. set */ D3DRS_CLIPPING = 136, D3DRS_LIGHTING = 137, D3DRS_AMBIENT = 139, D3DRS_FOGVERTEXMODE = 140, D3DRS_COLORVERTEX = 141, D3DRS_LOCALVIEWER = 142, D3DRS_NORMALIZENORMALS = 143, D3DRS_DIFFUSEMATERIALSOURCE = 145, D3DRS_SPECULARMATERIALSOURCE = 146, D3DRS_AMBIENTMATERIALSOURCE = 147, D3DRS_EMISSIVEMATERIALSOURCE = 148, D3DRS_VERTEXBLEND = 151, D3DRS_CLIPPLANEENABLE = 152, D3DRS_SOFTWAREVERTEXPROCESSING = 153, D3DRS_POINTSIZE = 154, /* float point size */ D3DRS_POINTSIZE_MIN = 155, /* float point size min threshold */ D3DRS_POINTSPRITEENABLE = 156, /* BOOL point texture coord control */ D3DRS_POINTSCALEENABLE = 157, /* BOOL point size scale enable */ D3DRS_POINTSCALE_A = 158, /* float point attenuation A value */ D3DRS_POINTSCALE_B = 159, /* float point attenuation B value */ D3DRS_POINTSCALE_C = 160, /* float point attenuation C value */ D3DRS_MULTISAMPLEANTIALIAS = 161, // BOOL - set to do FSAA with multisample buffer D3DRS_MULTISAMPLEMASK = 162, // DWORD - per-sample enable/disable D3DRS_PATCHEDGESTYLE = 163, // Sets whether patch edges will use float style tessellation D3DRS_PATCHSEGMENTS = 164, // Number of segments per edge when drawing patches D3DRS_DEBUGMONITORTOKEN = 165, // DEBUG ONLY - token to debug monitor D3DRS_POINTSIZE_MAX = 166, /* float point size max threshold */ D3DRS_INDEXEDVERTEXBLENDENABLE = 167, D3DRS_COLORWRITEENABLE = 168, // per-channel write enable D3DRS_TWEENFACTOR = 170, // float tween factor D3DRS_BLENDOP = 171, // D3DBLENDOP setting D3DRS_POSITIONORDER = 172, // NPatch position interpolation order. D3DORDER_LINEAR or D3DORDER_CUBIC (default) D3DRS_NORMALORDER = 173, // NPatch normal interpolation order. D3DORDER_LINEAR (default) or D3DORDER_QUADRATIC D3DRS_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ } D3DRENDERSTATETYPE; // Values for material source typedef enum _D3DMATERIALCOLORSOURCE { D3DMCS_MATERIAL = 0, // Color from material is used D3DMCS_COLOR1 = 1, // Diffuse vertex color is used D3DMCS_COLOR2 = 2, // Specular vertex color is used D3DMCS_FORCE_DWORD = 0x7fffffff, // force 32-bit size enum } D3DMATERIALCOLORSOURCE; // Bias to apply to the texture coordinate set to apply a wrap to. #define D3DRENDERSTATE_WRAPBIAS 128UL /* Flags to construct the WRAP render states */ #define D3DWRAP_U 0x00000001L #define D3DWRAP_V 0x00000002L #define D3DWRAP_W 0x00000004L /* Flags to construct the WRAP render states for 1D thru 4D texture coordinates */ #define D3DWRAPCOORD_0 0x00000001L // same as D3DWRAP_U #define D3DWRAPCOORD_1 0x00000002L // same as D3DWRAP_V #define D3DWRAPCOORD_2 0x00000004L // same as D3DWRAP_W #define D3DWRAPCOORD_3 0x00000008L /* Flags to construct D3DRS_COLORWRITEENABLE */ #define D3DCOLORWRITEENABLE_RED (1L<<0) #define D3DCOLORWRITEENABLE_GREEN (1L<<1) #define D3DCOLORWRITEENABLE_BLUE (1L<<2) #define D3DCOLORWRITEENABLE_ALPHA (1L<<3) /* * State enumerants for per-stage texture processing. */ typedef enum _D3DTEXTURESTAGESTATETYPE { D3DTSS_COLOROP = 1, /* D3DTEXTUREOP - per-stage blending controls for color channels */ D3DTSS_COLORARG1 = 2, /* D3DTA_* (texture arg) */ D3DTSS_COLORARG2 = 3, /* D3DTA_* (texture arg) */ D3DTSS_ALPHAOP = 4, /* D3DTEXTUREOP - per-stage blending controls for alpha channel */ D3DTSS_ALPHAARG1 = 5, /* D3DTA_* (texture arg) */ D3DTSS_ALPHAARG2 = 6, /* D3DTA_* (texture arg) */ D3DTSS_BUMPENVMAT00 = 7, /* float (bump mapping matrix) */ D3DTSS_BUMPENVMAT01 = 8, /* float (bump mapping matrix) */ D3DTSS_BUMPENVMAT10 = 9, /* float (bump mapping matrix) */ D3DTSS_BUMPENVMAT11 = 10, /* float (bump mapping matrix) */ D3DTSS_TEXCOORDINDEX = 11, /* identifies which set of texture coordinates index this texture */ D3DTSS_ADDRESSU = 13, /* D3DTEXTUREADDRESS for U coordinate */ D3DTSS_ADDRESSV = 14, /* D3DTEXTUREADDRESS for V coordinate */ D3DTSS_BORDERCOLOR = 15, /* D3DCOLOR */ D3DTSS_MAGFILTER = 16, /* D3DTEXTUREFILTER filter to use for magnification */ D3DTSS_MINFILTER = 17, /* D3DTEXTUREFILTER filter to use for minification */ D3DTSS_MIPFILTER = 18, /* D3DTEXTUREFILTER filter to use between mipmaps during minification */ D3DTSS_MIPMAPLODBIAS = 19, /* float Mipmap LOD bias */ D3DTSS_MAXMIPLEVEL = 20, /* DWORD 0..(n-1) LOD index of largest map to use (0 == largest) */ D3DTSS_MAXANISOTROPY = 21, /* DWORD maximum anisotropy */ D3DTSS_BUMPENVLSCALE = 22, /* float scale for bump map luminance */ D3DTSS_BUMPENVLOFFSET = 23, /* float offset for bump map luminance */ D3DTSS_TEXTURETRANSFORMFLAGS = 24, /* D3DTEXTURETRANSFORMFLAGS controls texture transform */ D3DTSS_ADDRESSW = 25, /* D3DTEXTUREADDRESS for W coordinate */ D3DTSS_COLORARG0 = 26, /* D3DTA_* third arg for triadic ops */ D3DTSS_ALPHAARG0 = 27, /* D3DTA_* third arg for triadic ops */ D3DTSS_RESULTARG = 28, /* D3DTA_* arg for result (CURRENT or TEMP) */ D3DTSS_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ } D3DTEXTURESTAGESTATETYPE; // Values, used with D3DTSS_TEXCOORDINDEX, to specify that the vertex data(position // and normal in the camera space) should be taken as texture coordinates // Low 16 bits are used to specify texture coordinate index, to take the WRAP mode from // #define D3DTSS_TCI_PASSTHRU 0x00000000 #define D3DTSS_TCI_CAMERASPACENORMAL 0x00010000 #define D3DTSS_TCI_CAMERASPACEPOSITION 0x00020000 #define D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR 0x00030000 /* * Enumerations for COLOROP and ALPHAOP texture blending operations set in * texture processing stage controls in D3DTSS. */ typedef enum _D3DTEXTUREOP { // Control D3DTOP_DISABLE = 1, // disables stage D3DTOP_SELECTARG1 = 2, // the default D3DTOP_SELECTARG2 = 3, // Modulate D3DTOP_MODULATE = 4, // multiply args together D3DTOP_MODULATE2X = 5, // multiply and 1 bit D3DTOP_MODULATE4X = 6, // multiply and 2 bits // Add D3DTOP_ADD = 7, // add arguments together D3DTOP_ADDSIGNED = 8, // add with -0.5 bias D3DTOP_ADDSIGNED2X = 9, // as above but left 1 bit D3DTOP_SUBTRACT = 10, // Arg1 - Arg2, with no saturation D3DTOP_ADDSMOOTH = 11, // add 2 args, subtract product // Arg1 + Arg2 - Arg1*Arg2 // = Arg1 + (1-Arg1)*Arg2 // Linear alpha blend: Arg1*(Alpha) + Arg2*(1-Alpha) D3DTOP_BLENDDIFFUSEALPHA = 12, // iterated alpha D3DTOP_BLENDTEXTUREALPHA = 13, // texture alpha D3DTOP_BLENDFACTORALPHA = 14, // alpha from D3DRS_TEXTUREFACTOR // Linear alpha blend with pre-multiplied arg1 input: Arg1 + Arg2*(1-Alpha) D3DTOP_BLENDTEXTUREALPHAPM = 15, // texture alpha D3DTOP_BLENDCURRENTALPHA = 16, // by alpha of current color // Specular mapping D3DTOP_PREMODULATE = 17, // modulate with next texture before use D3DTOP_MODULATEALPHA_ADDCOLOR = 18, // Arg1.RGB + Arg1.A*Arg2.RGB // COLOROP only D3DTOP_MODULATECOLOR_ADDALPHA = 19, // Arg1.RGB*Arg2.RGB + Arg1.A // COLOROP only D3DTOP_MODULATEINVALPHA_ADDCOLOR = 20, // (1-Arg1.A)*Arg2.RGB + Arg1.RGB // COLOROP only D3DTOP_MODULATEINVCOLOR_ADDALPHA = 21, // (1-Arg1.RGB)*Arg2.RGB + Arg1.A // COLOROP only // Bump mapping D3DTOP_BUMPENVMAP = 22, // per pixel env map perturbation D3DTOP_BUMPENVMAPLUMINANCE = 23, // with luminance channel // This can do either diffuse or specular bump mapping with correct input. // Performs the function (Arg1.R*Arg2.R + Arg1.G*Arg2.G + Arg1.B*Arg2.B) // where each component has been scaled and offset to make it signed. // The result is replicated into all four (including alpha) channels. // This is a valid COLOROP only. D3DTOP_DOTPRODUCT3 = 24, // Triadic ops D3DTOP_MULTIPLYADD = 25, // Arg0 + Arg1*Arg2 D3DTOP_LERP = 26, // (Arg0)*Arg1 + (1-Arg0)*Arg2 D3DTOP_FORCE_DWORD = 0x7fffffff, } D3DTEXTUREOP; /* * Values for COLORARG0,1,2, ALPHAARG0,1,2, and RESULTARG texture blending * operations set in texture processing stage controls in D3DRENDERSTATE. */ #define D3DTA_SELECTMASK 0x0000000f // mask for arg selector #define D3DTA_DIFFUSE 0x00000000 // select diffuse color (read only) #define D3DTA_CURRENT 0x00000001 // select stage destination register (read/write) #define D3DTA_TEXTURE 0x00000002 // select texture color (read only) #define D3DTA_TFACTOR 0x00000003 // select D3DRS_TEXTUREFACTOR (read only) #define D3DTA_SPECULAR 0x00000004 // select specular color (read only) #define D3DTA_TEMP 0x00000005 // select temporary register color (read/write) #define D3DTA_COMPLEMENT 0x00000010 // take 1.0 - x (read modifier) #define D3DTA_ALPHAREPLICATE 0x00000020 // replicate alpha to color components (read modifier) // // Values for D3DTSS_***FILTER texture stage states // typedef enum _D3DTEXTUREFILTERTYPE { D3DTEXF_NONE = 0, // filtering disabled (valid for mip filter only) D3DTEXF_POINT = 1, // nearest D3DTEXF_LINEAR = 2, // linear interpolation D3DTEXF_ANISOTROPIC = 3, // anisotropic D3DTEXF_FLATCUBIC = 4, // cubic D3DTEXF_GAUSSIANCUBIC = 5, // different cubic kernel D3DTEXF_FORCE_DWORD = 0x7fffffff, // force 32-bit size enum } D3DTEXTUREFILTERTYPE; /* Bits for Flags in ProcessVertices call */ #define D3DPV_DONOTCOPYDATA (1 << 0) //------------------------------------------------------------------- // Flexible vertex format bits // #define D3DFVF_RESERVED0 0x001 #define D3DFVF_POSITION_MASK 0x00E #define D3DFVF_XYZ 0x002 #define D3DFVF_XYZRHW 0x004 #define D3DFVF_XYZB1 0x006 #define D3DFVF_XYZB2 0x008 #define D3DFVF_XYZB3 0x00a #define D3DFVF_XYZB4 0x00c #define D3DFVF_XYZB5 0x00e #define D3DFVF_NORMAL 0x010 #define D3DFVF_PSIZE 0x020 #define D3DFVF_DIFFUSE 0x040 #define D3DFVF_SPECULAR 0x080 #define D3DFVF_TEXCOUNT_MASK 0xf00 #define D3DFVF_TEXCOUNT_SHIFT 8 #define D3DFVF_TEX0 0x000 #define D3DFVF_TEX1 0x100 #define D3DFVF_TEX2 0x200 #define D3DFVF_TEX3 0x300 #define D3DFVF_TEX4 0x400 #define D3DFVF_TEX5 0x500 #define D3DFVF_TEX6 0x600 #define D3DFVF_TEX7 0x700 #define D3DFVF_TEX8 0x800 #define D3DFVF_LASTBETA_UBYTE4 0x1000 #define D3DFVF_RESERVED2 0xE000 // 4 reserved bits //--------------------------------------------------------------------- // Vertex Shaders // /* Vertex Shader Declaration The declaration portion of a vertex shader defines the static external interface of the shader. The information in the declaration includes: - Assignments of vertex shader input registers to data streams. These assignments bind a specific vertex register to a single component within a vertex stream. A vertex stream element is identified by a byte offset within the stream and a type. The type specifies the arithmetic data type plus the dimensionality (1, 2, 3, or 4 values). Stream data which is less than 4 values are always expanded out to 4 values with zero or more 0.F values and one 1.F value. - Assignment of vertex shader input registers to implicit data from the primitive tessellator. This controls the loading of vertex data which is not loaded from a stream, but rather is generated during primitive tessellation prior to the vertex shader. - Loading data into the constant memory at the time a shader is set as the current shader. Each token specifies values for one or more contiguous 4 DWORD constant registers. This allows the shader to update an arbitrary subset of the constant memory, overwriting the device state (which contains the current values of the constant memory). Note that these values can be subsequently overwritten (between DrawPrimitive calls) during the time a shader is bound to a device via the SetVertexShaderConstant method. Declaration arrays are single-dimensional arrays of DWORDs composed of multiple tokens each of which is one or more DWORDs. The single-DWORD token value 0xFFFFFFFF is a special token used to indicate the end of the declaration array. The single DWORD token value 0x00000000 is a NOP token with is ignored during the declaration parsing. Note that 0x00000000 is a valid value for DWORDs following the first DWORD for multiple word tokens. [31:29] TokenType 0x0 - NOP (requires all DWORD bits to be zero) 0x1 - stream selector 0x2 - stream data definition (map to vertex input memory) 0x3 - vertex input memory from tessellator 0x4 - constant memory from shader 0x5 - extension 0x6 - reserved 0x7 - end-of-array (requires all DWORD bits to be 1) NOP Token (single DWORD token) [31:29] 0x0 [28:00] 0x0 Stream Selector (single DWORD token) [31:29] 0x1 [28] indicates whether this is a tessellator stream [27:04] 0x0 [03:00] stream selector (0..15) Stream Data Definition (single DWORD token) Vertex Input Register Load [31:29] 0x2 [28] 0x0 [27:20] 0x0 [19:16] type (dimensionality and data type) [15:04] 0x0 [03:00] vertex register address (0..15) Data Skip (no register load) [31:29] 0x2 [28] 0x1 [27:20] 0x0 [19:16] count of DWORDS to skip over (0..15) [15:00] 0x0 Vertex Input Memory from Tessellator Data (single DWORD token) [31:29] 0x3 [28] indicates whether data is normals or u/v [27:24] 0x0 [23:20] vertex register address (0..15) [19:16] type (dimensionality) [15:04] 0x0 [03:00] vertex register address (0..15) Constant Memory from Shader (multiple DWORD token) [31:29] 0x4 [28:25] count of 4*DWORD constants to load (0..15) [24:07] 0x0 [06:00] constant memory address (0..95) Extension Token (single or multiple DWORD token) [31:29] 0x5 [28:24] count of additional DWORDs in token (0..31) [23:00] extension-specific information End-of-array token (single DWORD token) [31:29] 0x7 [28:00] 0x1fffffff The stream selector token must be immediately followed by a contiguous set of stream data definition tokens. This token sequence fully defines that stream, including the set of elements within the stream, the order in which the elements appear, the type of each element, and the vertex register into which to load an element. Streams are allowed to include data which is not loaded into a vertex register, thus allowing data which is not used for this shader to exist in the vertex stream. This skipped data is defined only by a count of DWORDs to skip over, since the type information is irrelevant. The token sequence: Stream Select: stream=0 Stream Data Definition (Load): type=FLOAT3; register=3 Stream Data Definition (Load): type=FLOAT3; register=4 Stream Data Definition (Skip): count=2 Stream Data Definition (Load): type=FLOAT2; register=7 defines stream zero to consist of 4 elements, 3 of which are loaded into registers and the fourth skipped over. Register 3 is loaded with the first three DWORDs in each vertex interpreted as FLOAT data. Register 4 is loaded with the 4th, 5th, and 6th DWORDs interpreted as FLOAT data. The next two DWORDs (7th and 8th) are skipped over and not loaded into any vertex input register. Register 7 is loaded with the 9th and 10th DWORDS interpreted as FLOAT data. Placing of tokens other than NOPs between the Stream Selector and Stream Data Definition tokens is disallowed. */ typedef enum _D3DVSD_TOKENTYPE { D3DVSD_TOKEN_NOP = 0, // NOP or extension D3DVSD_TOKEN_STREAM, // stream selector D3DVSD_TOKEN_STREAMDATA, // stream data definition (map to vertex input memory) D3DVSD_TOKEN_TESSELLATOR, // vertex input memory from tessellator D3DVSD_TOKEN_CONSTMEM, // constant memory from shader D3DVSD_TOKEN_EXT, // extension D3DVSD_TOKEN_END = 7, // end-of-array (requires all DWORD bits to be 1) D3DVSD_FORCE_DWORD = 0x7fffffff,// force 32-bit size enum } D3DVSD_TOKENTYPE; #define D3DVSD_TOKENTYPESHIFT 29 #define D3DVSD_TOKENTYPEMASK (7 << D3DVSD_TOKENTYPESHIFT) #define D3DVSD_STREAMNUMBERSHIFT 0 #define D3DVSD_STREAMNUMBERMASK (0xF << D3DVSD_STREAMNUMBERSHIFT) #define D3DVSD_DATALOADTYPESHIFT 28 #define D3DVSD_DATALOADTYPEMASK (0x1 << D3DVSD_DATALOADTYPESHIFT) #define D3DVSD_DATATYPESHIFT 16 #define D3DVSD_DATATYPEMASK (0xF << D3DVSD_DATATYPESHIFT) #define D3DVSD_SKIPCOUNTSHIFT 16 #define D3DVSD_SKIPCOUNTMASK (0xF << D3DVSD_SKIPCOUNTSHIFT) #define D3DVSD_VERTEXREGSHIFT 0 #define D3DVSD_VERTEXREGMASK (0x1F << D3DVSD_VERTEXREGSHIFT) #define D3DVSD_VERTEXREGINSHIFT 20 #define D3DVSD_VERTEXREGINMASK (0xF << D3DVSD_VERTEXREGINSHIFT) #define D3DVSD_CONSTCOUNTSHIFT 25 #define D3DVSD_CONSTCOUNTMASK (0xF << D3DVSD_CONSTCOUNTSHIFT) #define D3DVSD_CONSTADDRESSSHIFT 0 #define D3DVSD_CONSTADDRESSMASK (0x7F << D3DVSD_CONSTADDRESSSHIFT) #define D3DVSD_CONSTRSSHIFT 16 #define D3DVSD_CONSTRSMASK (0x1FFF << D3DVSD_CONSTRSSHIFT) #define D3DVSD_EXTCOUNTSHIFT 24 #define D3DVSD_EXTCOUNTMASK (0x1F << D3DVSD_EXTCOUNTSHIFT) #define D3DVSD_EXTINFOSHIFT 0 #define D3DVSD_EXTINFOMASK (0xFFFFFF << D3DVSD_EXTINFOSHIFT) #define D3DVSD_MAKETOKENTYPE(tokenType) ((tokenType << D3DVSD_TOKENTYPESHIFT) & D3DVSD_TOKENTYPEMASK) // macros for generation of CreateVertexShader Declaration token array // Set current stream // _StreamNumber [0..(MaxStreams-1)] stream to get data from // #define D3DVSD_STREAM( _StreamNumber ) \ (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_STREAM) | (_StreamNumber)) // Set tessellator stream // #define D3DVSD_STREAMTESSSHIFT 28 #define D3DVSD_STREAMTESSMASK (1 << D3DVSD_STREAMTESSSHIFT) #define D3DVSD_STREAM_TESS( ) \ (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_STREAM) | (D3DVSD_STREAMTESSMASK)) // bind single vertex register to vertex element from vertex stream // // _VertexRegister [0..15] address of the vertex register // _Type [D3DVSDT_*] dimensionality and arithmetic data type #define D3DVSD_REG( _VertexRegister, _Type ) \ (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_STREAMDATA) | \ ((_Type) << D3DVSD_DATATYPESHIFT) | (_VertexRegister)) // Skip _DWORDCount DWORDs in vertex // #define D3DVSD_SKIP( _DWORDCount ) \ (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_STREAMDATA) | 0x10000000 | \ ((_DWORDCount) << D3DVSD_SKIPCOUNTSHIFT)) // load data into vertex shader constant memory // // _ConstantAddress [0..95] - address of constant array to begin filling data // _Count [0..15] - number of constant vectors to load (4 DWORDs each) // followed by 4*_Count DWORDS of data // #define D3DVSD_CONST( _ConstantAddress, _Count ) \ (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_CONSTMEM) | \ ((_Count) << D3DVSD_CONSTCOUNTSHIFT) | (_ConstantAddress)) // enable tessellator generated normals // // _VertexRegisterIn [0..15] address of vertex register whose input stream // will be used in normal computation // _VertexRegisterOut [0..15] address of vertex register to output the normal to // #define D3DVSD_TESSNORMAL( _VertexRegisterIn, _VertexRegisterOut ) \ (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_TESSELLATOR) | \ ((_VertexRegisterIn) << D3DVSD_VERTEXREGINSHIFT) | \ ((0x02) << D3DVSD_DATATYPESHIFT) | (_VertexRegisterOut)) // enable tessellator generated surface parameters // // _VertexRegister [0..15] address of vertex register to output parameters // #define D3DVSD_TESSUV( _VertexRegister ) \ (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_TESSELLATOR) | 0x10000000 | \ ((0x01) << D3DVSD_DATATYPESHIFT) | (_VertexRegister)) // Generates END token // #define D3DVSD_END() 0xFFFFFFFF // Generates NOP token #define D3DVSD_NOP() 0x00000000 // bit declarations for _Type fields #define D3DVSDT_FLOAT1 0x00 // 1D float expanded to (value, 0., 0., 1.) #define D3DVSDT_FLOAT2 0x01 // 2D float expanded to (value, value, 0., 1.) #define D3DVSDT_FLOAT3 0x02 // 3D float expanded to (value, value, value, 1.) #define D3DVSDT_FLOAT4 0x03 // 4D float #define D3DVSDT_D3DCOLOR 0x04 // 4D packed unsigned bytes mapped to 0. to 1. range // Input is in D3DCOLOR format (ARGB) expanded to (R, G, B, A) #define D3DVSDT_UBYTE4 0x05 // 4D unsigned byte #define D3DVSDT_SHORT2 0x06 // 2D signed short expanded to (value, value, 0., 1.) #define D3DVSDT_SHORT4 0x07 // 4D signed short // assignments of vertex input registers for fixed function vertex shader // #define D3DVSDE_POSITION 0 #define D3DVSDE_BLENDWEIGHT 1 #define D3DVSDE_BLENDINDICES 2 #define D3DVSDE_NORMAL 3 #define D3DVSDE_PSIZE 4 #define D3DVSDE_DIFFUSE 5 #define D3DVSDE_SPECULAR 6 #define D3DVSDE_TEXCOORD0 7 #define D3DVSDE_TEXCOORD1 8 #define D3DVSDE_TEXCOORD2 9 #define D3DVSDE_TEXCOORD3 10 #define D3DVSDE_TEXCOORD4 11 #define D3DVSDE_TEXCOORD5 12 #define D3DVSDE_TEXCOORD6 13 #define D3DVSDE_TEXCOORD7 14 #define D3DVSDE_POSITION2 15 #define D3DVSDE_NORMAL2 16 // Maximum supported number of texture coordinate sets #define D3DDP_MAXTEXCOORD 8 // // Instruction Token Bit Definitions // #define D3DSI_OPCODE_MASK 0x0000FFFF typedef enum _D3DSHADER_INSTRUCTION_OPCODE_TYPE { D3DSIO_NOP = 0, // PS/VS D3DSIO_MOV , // PS/VS D3DSIO_ADD , // PS/VS D3DSIO_SUB , // PS D3DSIO_MAD , // PS/VS D3DSIO_MUL , // PS/VS D3DSIO_RCP , // VS D3DSIO_RSQ , // VS D3DSIO_DP3 , // PS/VS D3DSIO_DP4 , // PS/VS D3DSIO_MIN , // VS D3DSIO_MAX , // VS D3DSIO_SLT , // VS D3DSIO_SGE , // VS D3DSIO_EXP , // VS D3DSIO_LOG , // VS D3DSIO_LIT , // VS D3DSIO_DST , // VS D3DSIO_LRP , // PS D3DSIO_FRC , // VS D3DSIO_M4x4 , // VS D3DSIO_M4x3 , // VS D3DSIO_M3x4 , // VS D3DSIO_M3x3 , // VS D3DSIO_M3x2 , // VS D3DSIO_TEXCOORD = 64, // PS D3DSIO_TEXKILL , // PS D3DSIO_TEX , // PS D3DSIO_TEXBEM , // PS D3DSIO_TEXBEML , // PS D3DSIO_TEXREG2AR , // PS D3DSIO_TEXREG2GB , // PS D3DSIO_TEXM3x2PAD , // PS D3DSIO_TEXM3x2TEX , // PS D3DSIO_TEXM3x3PAD , // PS D3DSIO_TEXM3x3TEX , // PS D3DSIO_TEXM3x3DIFF , // PS D3DSIO_TEXM3x3SPEC , // PS D3DSIO_TEXM3x3VSPEC , // PS D3DSIO_EXPP , // VS D3DSIO_LOGP , // VS D3DSIO_CND , // PS D3DSIO_DEF , // PS D3DSIO_TEXREG2RGB , // PS D3DSIO_TEXDP3TEX , // PS D3DSIO_TEXM3x2DEPTH , // PS D3DSIO_TEXDP3 , // PS D3DSIO_TEXM3x3 , // PS D3DSIO_TEXDEPTH , // PS D3DSIO_CMP , // PS D3DSIO_BEM , // PS D3DSIO_PHASE = 0xFFFD, D3DSIO_COMMENT = 0xFFFE, D3DSIO_END = 0xFFFF, D3DSIO_FORCE_DWORD = 0x7fffffff, // force 32-bit size enum } D3DSHADER_INSTRUCTION_OPCODE_TYPE; // // Co-Issue Instruction Modifier - if set then this instruction is to be // issued in parallel with the previous instruction(s) for which this bit // is not set. // #define D3DSI_COISSUE 0x40000000 // // Parameter Token Bit Definitions // #define D3DSP_REGNUM_MASK 0x00001FFF // destination parameter write mask #define D3DSP_WRITEMASK_0 0x00010000 // Component 0 (X;Red) #define D3DSP_WRITEMASK_1 0x00020000 // Component 1 (Y;Green) #define D3DSP_WRITEMASK_2 0x00040000 // Component 2 (Z;Blue) #define D3DSP_WRITEMASK_3 0x00080000 // Component 3 (W;Alpha) #define D3DSP_WRITEMASK_ALL 0x000F0000 // All Components // destination parameter modifiers #define D3DSP_DSTMOD_SHIFT 20 #define D3DSP_DSTMOD_MASK 0x00F00000 typedef enum _D3DSHADER_PARAM_DSTMOD_TYPE { D3DSPDM_NONE = 0<>8)&0xFF) #define D3DSHADER_VERSION_MINOR(_Version) (((_Version)>>0)&0xFF) // destination/source parameter register type #define D3DSI_COMMENTSIZE_SHIFT 16 #define D3DSI_COMMENTSIZE_MASK 0x7FFF0000 #define D3DSHADER_COMMENT(_DWordSize) \ ((((_DWordSize)<= 1200 #pragma warning(pop) #else #pragma warning(default:4201) #endif #endif /* (DIRECT3D_VERSION >= 0x0800) */ #endif /* _D3D8TYPES(P)_H_ */ ================================================ FILE: Include/d3d9.h ================================================ /*==========================================================================; * * Copyright (C) Microsoft Corporation. All Rights Reserved. * * File: d3d9.h * Content: Direct3D include file * ****************************************************************************/ #ifndef _D3D9_H_ #define _D3D9_H_ #ifndef DIRECT3D_VERSION #define DIRECT3D_VERSION 0x0900 #endif //DIRECT3D_VERSION // include this file content only if compiling for DX9 interfaces #if(DIRECT3D_VERSION >= 0x0900) /* This identifier is passed to Direct3DCreate9 in order to ensure that an * application was built against the correct header files. This number is * incremented whenever a header (or other) change would require applications * to be rebuilt. If the version doesn't match, Direct3DCreate9 will fail. * (The number itself has no meaning.)*/ #ifdef D3D_DEBUG_INFO #define D3D_SDK_VERSION (32 | 0x80000000) #define D3D9b_SDK_VERSION (31 | 0x80000000) #else #define D3D_SDK_VERSION 32 #define D3D9b_SDK_VERSION 31 #endif #include #define COM_NO_WINDOWS_H #include #include #if !defined(HMONITOR_DECLARED) && (WINVER < 0x0500) #define HMONITOR_DECLARED DECLARE_HANDLE(HMONITOR); #endif #define D3DAPI WINAPI /* * Interface IID's */ #if defined( _WIN32 ) && !defined( _NO_COM) /* IID_IDirect3D9 */ /* {81BDCBCA-64D4-426d-AE8D-AD0147F4275C} */ DEFINE_GUID(IID_IDirect3D9, 0x81bdcbca, 0x64d4, 0x426d, 0xae, 0x8d, 0xad, 0x1, 0x47, 0xf4, 0x27, 0x5c); /* IID_IDirect3DDevice9 */ // {D0223B96-BF7A-43fd-92BD-A43B0D82B9EB} */ DEFINE_GUID(IID_IDirect3DDevice9, 0xd0223b96, 0xbf7a, 0x43fd, 0x92, 0xbd, 0xa4, 0x3b, 0xd, 0x82, 0xb9, 0xeb); /* IID_IDirect3DResource9 */ // {05EEC05D-8F7D-4362-B999-D1BAF357C704} DEFINE_GUID(IID_IDirect3DResource9, 0x5eec05d, 0x8f7d, 0x4362, 0xb9, 0x99, 0xd1, 0xba, 0xf3, 0x57, 0xc7, 0x4); /* IID_IDirect3DBaseTexture9 */ /* {580CA87E-1D3C-4d54-991D-B7D3E3C298CE} */ DEFINE_GUID(IID_IDirect3DBaseTexture9, 0x580ca87e, 0x1d3c, 0x4d54, 0x99, 0x1d, 0xb7, 0xd3, 0xe3, 0xc2, 0x98, 0xce); /* IID_IDirect3DTexture9 */ /* {85C31227-3DE5-4f00-9B3A-F11AC38C18B5} */ DEFINE_GUID(IID_IDirect3DTexture9, 0x85c31227, 0x3de5, 0x4f00, 0x9b, 0x3a, 0xf1, 0x1a, 0xc3, 0x8c, 0x18, 0xb5); /* IID_IDirect3DCubeTexture9 */ /* {FFF32F81-D953-473a-9223-93D652ABA93F} */ DEFINE_GUID(IID_IDirect3DCubeTexture9, 0xfff32f81, 0xd953, 0x473a, 0x92, 0x23, 0x93, 0xd6, 0x52, 0xab, 0xa9, 0x3f); /* IID_IDirect3DVolumeTexture9 */ /* {2518526C-E789-4111-A7B9-47EF328D13E6} */ DEFINE_GUID(IID_IDirect3DVolumeTexture9, 0x2518526c, 0xe789, 0x4111, 0xa7, 0xb9, 0x47, 0xef, 0x32, 0x8d, 0x13, 0xe6); /* IID_IDirect3DVertexBuffer9 */ /* {B64BB1B5-FD70-4df6-BF91-19D0A12455E3} */ DEFINE_GUID(IID_IDirect3DVertexBuffer9, 0xb64bb1b5, 0xfd70, 0x4df6, 0xbf, 0x91, 0x19, 0xd0, 0xa1, 0x24, 0x55, 0xe3); /* IID_IDirect3DIndexBuffer9 */ /* {7C9DD65E-D3F7-4529-ACEE-785830ACDE35} */ DEFINE_GUID(IID_IDirect3DIndexBuffer9, 0x7c9dd65e, 0xd3f7, 0x4529, 0xac, 0xee, 0x78, 0x58, 0x30, 0xac, 0xde, 0x35); /* IID_IDirect3DSurface9 */ /* {0CFBAF3A-9FF6-429a-99B3-A2796AF8B89B} */ DEFINE_GUID(IID_IDirect3DSurface9, 0xcfbaf3a, 0x9ff6, 0x429a, 0x99, 0xb3, 0xa2, 0x79, 0x6a, 0xf8, 0xb8, 0x9b); /* IID_IDirect3DVolume9 */ /* {24F416E6-1F67-4aa7-B88E-D33F6F3128A1} */ DEFINE_GUID(IID_IDirect3DVolume9, 0x24f416e6, 0x1f67, 0x4aa7, 0xb8, 0x8e, 0xd3, 0x3f, 0x6f, 0x31, 0x28, 0xa1); /* IID_IDirect3DSwapChain9 */ /* {794950F2-ADFC-458a-905E-10A10B0B503B} */ DEFINE_GUID(IID_IDirect3DSwapChain9, 0x794950f2, 0xadfc, 0x458a, 0x90, 0x5e, 0x10, 0xa1, 0xb, 0xb, 0x50, 0x3b); /* IID_IDirect3DVertexDeclaration9 */ /* {DD13C59C-36FA-4098-A8FB-C7ED39DC8546} */ DEFINE_GUID(IID_IDirect3DVertexDeclaration9, 0xdd13c59c, 0x36fa, 0x4098, 0xa8, 0xfb, 0xc7, 0xed, 0x39, 0xdc, 0x85, 0x46); /* IID_IDirect3DVertexShader9 */ /* {EFC5557E-6265-4613-8A94-43857889EB36} */ DEFINE_GUID(IID_IDirect3DVertexShader9, 0xefc5557e, 0x6265, 0x4613, 0x8a, 0x94, 0x43, 0x85, 0x78, 0x89, 0xeb, 0x36); /* IID_IDirect3DPixelShader9 */ /* {6D3BDBDC-5B02-4415-B852-CE5E8BCCB289} */ DEFINE_GUID(IID_IDirect3DPixelShader9, 0x6d3bdbdc, 0x5b02, 0x4415, 0xb8, 0x52, 0xce, 0x5e, 0x8b, 0xcc, 0xb2, 0x89); /* IID_IDirect3DStateBlock9 */ /* {B07C4FE5-310D-4ba8-A23C-4F0F206F218B} */ DEFINE_GUID(IID_IDirect3DStateBlock9, 0xb07c4fe5, 0x310d, 0x4ba8, 0xa2, 0x3c, 0x4f, 0xf, 0x20, 0x6f, 0x21, 0x8b); /* IID_IDirect3DQuery9 */ /* {d9771460-a695-4f26-bbd3-27b840b541cc} */ DEFINE_GUID(IID_IDirect3DQuery9, 0xd9771460, 0xa695, 0x4f26, 0xbb, 0xd3, 0x27, 0xb8, 0x40, 0xb5, 0x41, 0xcc); /* IID_HelperName */ /* {E4A36723-FDFE-4b22-B146-3C04C07F4CC8} */ DEFINE_GUID(IID_HelperName, 0xe4a36723, 0xfdfe, 0x4b22, 0xb1, 0x46, 0x3c, 0x4, 0xc0, 0x7f, 0x4c, 0xc8); /* D3D9Ex only -- */ #if !defined(D3D_DISABLE_9EX) /* IID_IDirect3D9Ex */ /* {02177241-69FC-400C-8FF1-93A44DF6861D} */ DEFINE_GUID(IID_IDirect3D9Ex, 0x02177241, 0x69FC, 0x400C, 0x8F, 0xF1, 0x93, 0xA4, 0x4D, 0xF6, 0x86, 0x1D); /* IID_IDirect3DDevice9Ex */ // {B18B10CE-2649-405a-870F-95F777D4313A} DEFINE_GUID(IID_IDirect3DDevice9Ex, 0xb18b10ce, 0x2649, 0x405a, 0x87, 0xf, 0x95, 0xf7, 0x77, 0xd4, 0x31, 0x3a); /* IID_IDirect3DSwapChain9Ex */ /* {91886CAF-1C3D-4d2e-A0AB-3E4C7D8D3303} */ DEFINE_GUID(IID_IDirect3DSwapChain9Ex, 0x91886caf, 0x1c3d, 0x4d2e, 0xa0, 0xab, 0x3e, 0x4c, 0x7d, 0x8d, 0x33, 0x3); /* IID_IDirect3D9ExOverlayExtension */ /* {187aeb13-aaf5-4c59-876d-e059088c0df8} */ DEFINE_GUID(IID_IDirect3D9ExOverlayExtension, 0x187aeb13, 0xaaf5, 0x4c59, 0x87, 0x6d, 0xe0, 0x59, 0x8, 0x8c, 0xd, 0xf8); /* IID_IDirect3DDevice9Video */ // {26DC4561-A1EE-4ae7-96DA-118A36C0EC95} DEFINE_GUID(IID_IDirect3DDevice9Video, 0x26dc4561, 0xa1ee, 0x4ae7, 0x96, 0xda, 0x11, 0x8a, 0x36, 0xc0, 0xec, 0x95); /* IID_IDirect3D9AuthenticatedChannel */ // {FF24BEEE-DA21-4beb-98B5-D2F899F98AF9} DEFINE_GUID(IID_IDirect3DAuthenticatedChannel9, 0xff24beee, 0xda21, 0x4beb, 0x98, 0xb5, 0xd2, 0xf8, 0x99, 0xf9, 0x8a, 0xf9); /* IID_IDirect3DCryptoSession9 */ // {FA0AB799-7A9C-48ca-8C5B-237E71A54434} DEFINE_GUID(IID_IDirect3DCryptoSession9, 0xfa0ab799, 0x7a9c, 0x48ca, 0x8c, 0x5b, 0x23, 0x7e, 0x71, 0xa5, 0x44, 0x34); #endif // !D3D_DISABLE_9EX /* -- D3D9Ex only */ #endif #ifdef __cplusplus #ifndef DECLSPEC_UUID #if _MSC_VER >= 1100 #define DECLSPEC_UUID(x) __declspec(uuid(x)) #else #define DECLSPEC_UUID(x) #endif #endif interface DECLSPEC_UUID("81BDCBCA-64D4-426d-AE8D-AD0147F4275C") IDirect3D9; interface DECLSPEC_UUID("D0223B96-BF7A-43fd-92BD-A43B0D82B9EB") IDirect3DDevice9; interface DECLSPEC_UUID("B07C4FE5-310D-4ba8-A23C-4F0F206F218B") IDirect3DStateBlock9; interface DECLSPEC_UUID("05EEC05D-8F7D-4362-B999-D1BAF357C704") IDirect3DResource9; interface DECLSPEC_UUID("DD13C59C-36FA-4098-A8FB-C7ED39DC8546") IDirect3DVertexDeclaration9; interface DECLSPEC_UUID("EFC5557E-6265-4613-8A94-43857889EB36") IDirect3DVertexShader9; interface DECLSPEC_UUID("6D3BDBDC-5B02-4415-B852-CE5E8BCCB289") IDirect3DPixelShader9; interface DECLSPEC_UUID("580CA87E-1D3C-4d54-991D-B7D3E3C298CE") IDirect3DBaseTexture9; interface DECLSPEC_UUID("85C31227-3DE5-4f00-9B3A-F11AC38C18B5") IDirect3DTexture9; interface DECLSPEC_UUID("2518526C-E789-4111-A7B9-47EF328D13E6") IDirect3DVolumeTexture9; interface DECLSPEC_UUID("FFF32F81-D953-473a-9223-93D652ABA93F") IDirect3DCubeTexture9; interface DECLSPEC_UUID("B64BB1B5-FD70-4df6-BF91-19D0A12455E3") IDirect3DVertexBuffer9; interface DECLSPEC_UUID("7C9DD65E-D3F7-4529-ACEE-785830ACDE35") IDirect3DIndexBuffer9; interface DECLSPEC_UUID("0CFBAF3A-9FF6-429a-99B3-A2796AF8B89B") IDirect3DSurface9; interface DECLSPEC_UUID("24F416E6-1F67-4aa7-B88E-D33F6F3128A1") IDirect3DVolume9; interface DECLSPEC_UUID("794950F2-ADFC-458a-905E-10A10B0B503B") IDirect3DSwapChain9; interface DECLSPEC_UUID("d9771460-a695-4f26-bbd3-27b840b541cc") IDirect3DQuery9; /* D3D9Ex only -- */ #if !defined(D3D_DISABLE_9EX) interface DECLSPEC_UUID("02177241-69FC-400C-8FF1-93A44DF6861D") IDirect3D9Ex; interface DECLSPEC_UUID("B18B10CE-2649-405a-870F-95F777D4313A") IDirect3DDevice9Ex; interface DECLSPEC_UUID("91886CAF-1C3D-4d2e-A0AB-3E4C7D8D3303") IDirect3DSwapChain9Ex; interface DECLSPEC_UUID("187AEB13-AAF5-4C59-876D-E059088C0DF8") IDirect3D9ExOverlayExtension; interface DECLSPEC_UUID("26DC4561-A1EE-4ae7-96DA-118A36C0EC95") IDirect3DDevice9Video; interface DECLSPEC_UUID("FF24BEEE-DA21-4beb-98B5-D2F899F98AF9") IDirect3DAuthenticatedChannel9; interface DECLSPEC_UUID("FA0AB799-7A9C-48CA-8C5B-237E71A54434") IDirect3DCryptoSession9; #endif // !D3D_DISABLE_9EX /* -- D3D9Ex only */ #if defined(_COM_SMARTPTR_TYPEDEF) _COM_SMARTPTR_TYPEDEF(IDirect3D9, __uuidof(IDirect3D9)); _COM_SMARTPTR_TYPEDEF(IDirect3DDevice9, __uuidof(IDirect3DDevice9)); _COM_SMARTPTR_TYPEDEF(IDirect3DStateBlock9, __uuidof(IDirect3DStateBlock9)); _COM_SMARTPTR_TYPEDEF(IDirect3DResource9, __uuidof(IDirect3DResource9)); _COM_SMARTPTR_TYPEDEF(IDirect3DVertexDeclaration9, __uuidof(IDirect3DVertexDeclaration9)); _COM_SMARTPTR_TYPEDEF(IDirect3DVertexShader9, __uuidof(IDirect3DVertexShader9)); _COM_SMARTPTR_TYPEDEF(IDirect3DPixelShader9, __uuidof(IDirect3DPixelShader9)); _COM_SMARTPTR_TYPEDEF(IDirect3DBaseTexture9, __uuidof(IDirect3DBaseTexture9)); _COM_SMARTPTR_TYPEDEF(IDirect3DTexture9, __uuidof(IDirect3DTexture9)); _COM_SMARTPTR_TYPEDEF(IDirect3DVolumeTexture9, __uuidof(IDirect3DVolumeTexture9)); _COM_SMARTPTR_TYPEDEF(IDirect3DCubeTexture9, __uuidof(IDirect3DCubeTexture9)); _COM_SMARTPTR_TYPEDEF(IDirect3DVertexBuffer9, __uuidof(IDirect3DVertexBuffer9)); _COM_SMARTPTR_TYPEDEF(IDirect3DIndexBuffer9, __uuidof(IDirect3DIndexBuffer9)); _COM_SMARTPTR_TYPEDEF(IDirect3DSurface9, __uuidof(IDirect3DSurface9)); _COM_SMARTPTR_TYPEDEF(IDirect3DVolume9, __uuidof(IDirect3DVolume9)); _COM_SMARTPTR_TYPEDEF(IDirect3DSwapChain9, __uuidof(IDirect3DSwapChain9)); _COM_SMARTPTR_TYPEDEF(IDirect3DQuery9, __uuidof(IDirect3DQuery9)); /* D3D9Ex only -- */ #if !defined(D3D_DISABLE_9EX) _COM_SMARTPTR_TYPEDEF(IDirect3D9Ex, __uuidof(IDirect3D9Ex)); _COM_SMARTPTR_TYPEDEF(IDirect3DDevice9Ex, __uuidof(IDirect3DDevice9Ex)); _COM_SMARTPTR_TYPEDEF(IDirect3DSwapChain9Ex, __uuidof(IDirect3DSwapChain9Ex)); _COM_SMARTPTR_TYPEDEF(IDirect3D9ExOverlayExtension, __uuidof(IDirect3D9ExOverlayExtension)); _COM_SMARTPTR_TYPEDEF(IDirect3DDevice9Video, __uuidof(IDirect3DDevice9Video)); _COM_SMARTPTR_TYPEDEF(IDirect3DAuthenticatedChannel9, __uuidof(IDirect3DAuthenticatedChannel9)); _COM_SMARTPTR_TYPEDEF(IDirect3DCryptoSession9, __uuidof(IDirect3DCryptoSession9)); #endif // !D3D_DISABLE_9EX /* -- D3D9Ex only */ #endif #endif typedef interface IDirect3D9 IDirect3D9; typedef interface IDirect3DDevice9 IDirect3DDevice9; typedef interface IDirect3DStateBlock9 IDirect3DStateBlock9; typedef interface IDirect3DVertexDeclaration9 IDirect3DVertexDeclaration9; typedef interface IDirect3DVertexShader9 IDirect3DVertexShader9; typedef interface IDirect3DPixelShader9 IDirect3DPixelShader9; typedef interface IDirect3DResource9 IDirect3DResource9; typedef interface IDirect3DBaseTexture9 IDirect3DBaseTexture9; typedef interface IDirect3DTexture9 IDirect3DTexture9; typedef interface IDirect3DVolumeTexture9 IDirect3DVolumeTexture9; typedef interface IDirect3DCubeTexture9 IDirect3DCubeTexture9; typedef interface IDirect3DVertexBuffer9 IDirect3DVertexBuffer9; typedef interface IDirect3DIndexBuffer9 IDirect3DIndexBuffer9; typedef interface IDirect3DSurface9 IDirect3DSurface9; typedef interface IDirect3DVolume9 IDirect3DVolume9; typedef interface IDirect3DSwapChain9 IDirect3DSwapChain9; typedef interface IDirect3DQuery9 IDirect3DQuery9; /* D3D9Ex only -- */ #if !defined(D3D_DISABLE_9EX) typedef interface IDirect3D9Ex IDirect3D9Ex; typedef interface IDirect3DDevice9Ex IDirect3DDevice9Ex; typedef interface IDirect3DSwapChain9Ex IDirect3DSwapChain9Ex; typedef interface IDirect3D9ExOverlayExtension IDirect3D9ExOverlayExtension; typedef interface IDirect3DDevice9Video IDirect3DDevice9Video; typedef interface IDirect3DAuthenticatedChannel9 IDirect3DAuthenticatedChannel9; typedef interface IDirect3DCryptoSession9 IDirect3DCryptoSession9; #endif // !D3D_DISABLE_9EX /* -- D3D9Ex only */ #include "d3d9types.h" #include "d3d9caps.h" #ifdef __cplusplus extern "C" { #endif /* * DLL Function for creating a Direct3D9 object. This object supports * enumeration and allows the creation of Direct3DDevice9 objects. * Pass the value of the constant D3D_SDK_VERSION to this function, so * that the run-time can validate that your application was compiled * against the right headers. */ IDirect3D9 * WINAPI Direct3DCreate9(UINT SDKVersion); /* * Stubs for graphics profiling. */ int WINAPI D3DPERF_BeginEvent( D3DCOLOR col, LPCWSTR wszName ); int WINAPI D3DPERF_EndEvent( void ); void WINAPI D3DPERF_SetMarker( D3DCOLOR col, LPCWSTR wszName ); void WINAPI D3DPERF_SetRegion( D3DCOLOR col, LPCWSTR wszName ); BOOL WINAPI D3DPERF_QueryRepeatFrame( void ); void WINAPI D3DPERF_SetOptions( DWORD dwOptions ); DWORD WINAPI D3DPERF_GetStatus( void ); /* * Direct3D interfaces */ #undef INTERFACE #define INTERFACE IDirect3D9 DECLARE_INTERFACE_(IDirect3D9, IUnknown) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3D9 methods ***/ STDMETHOD(RegisterSoftwareDevice)(THIS_ void* pInitializeFunction) PURE; STDMETHOD_(UINT, GetAdapterCount)(THIS) PURE; STDMETHOD(GetAdapterIdentifier)(THIS_ UINT Adapter,DWORD Flags,D3DADAPTER_IDENTIFIER9* pIdentifier) PURE; STDMETHOD_(UINT, GetAdapterModeCount)(THIS_ UINT Adapter,D3DFORMAT Format) PURE; STDMETHOD(EnumAdapterModes)(THIS_ UINT Adapter,D3DFORMAT Format,UINT Mode,D3DDISPLAYMODE* pMode) PURE; STDMETHOD(GetAdapterDisplayMode)(THIS_ UINT Adapter,D3DDISPLAYMODE* pMode) PURE; STDMETHOD(CheckDeviceType)(THIS_ UINT Adapter,D3DDEVTYPE DevType,D3DFORMAT AdapterFormat,D3DFORMAT BackBufferFormat,BOOL bWindowed) PURE; STDMETHOD(CheckDeviceFormat)(THIS_ UINT Adapter,D3DDEVTYPE DeviceType,D3DFORMAT AdapterFormat,DWORD Usage,D3DRESOURCETYPE RType,D3DFORMAT CheckFormat) PURE; STDMETHOD(CheckDeviceMultiSampleType)(THIS_ UINT Adapter,D3DDEVTYPE DeviceType,D3DFORMAT SurfaceFormat,BOOL Windowed,D3DMULTISAMPLE_TYPE MultiSampleType,DWORD* pQualityLevels) PURE; STDMETHOD(CheckDepthStencilMatch)(THIS_ UINT Adapter,D3DDEVTYPE DeviceType,D3DFORMAT AdapterFormat,D3DFORMAT RenderTargetFormat,D3DFORMAT DepthStencilFormat) PURE; STDMETHOD(CheckDeviceFormatConversion)(THIS_ UINT Adapter,D3DDEVTYPE DeviceType,D3DFORMAT SourceFormat,D3DFORMAT TargetFormat) PURE; STDMETHOD(GetDeviceCaps)(THIS_ UINT Adapter,D3DDEVTYPE DeviceType,D3DCAPS9* pCaps) PURE; STDMETHOD_(HMONITOR, GetAdapterMonitor)(THIS_ UINT Adapter) PURE; STDMETHOD(CreateDevice)(THIS_ UINT Adapter,D3DDEVTYPE DeviceType,HWND hFocusWindow,DWORD BehaviorFlags,D3DPRESENT_PARAMETERS* pPresentationParameters,IDirect3DDevice9** ppReturnedDeviceInterface) PURE; #ifdef D3D_DEBUG_INFO LPCWSTR Version; #endif }; typedef struct IDirect3D9 *LPDIRECT3D9, *PDIRECT3D9; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirect3D9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3D9_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3D9_Release(p) (p)->lpVtbl->Release(p) #define IDirect3D9_RegisterSoftwareDevice(p,a) (p)->lpVtbl->RegisterSoftwareDevice(p,a) #define IDirect3D9_GetAdapterCount(p) (p)->lpVtbl->GetAdapterCount(p) #define IDirect3D9_GetAdapterIdentifier(p,a,b,c) (p)->lpVtbl->GetAdapterIdentifier(p,a,b,c) #define IDirect3D9_GetAdapterModeCount(p,a,b) (p)->lpVtbl->GetAdapterModeCount(p,a,b) #define IDirect3D9_EnumAdapterModes(p,a,b,c,d) (p)->lpVtbl->EnumAdapterModes(p,a,b,c,d) #define IDirect3D9_GetAdapterDisplayMode(p,a,b) (p)->lpVtbl->GetAdapterDisplayMode(p,a,b) #define IDirect3D9_CheckDeviceType(p,a,b,c,d,e) (p)->lpVtbl->CheckDeviceType(p,a,b,c,d,e) #define IDirect3D9_CheckDeviceFormat(p,a,b,c,d,e,f) (p)->lpVtbl->CheckDeviceFormat(p,a,b,c,d,e,f) #define IDirect3D9_CheckDeviceMultiSampleType(p,a,b,c,d,e,f) (p)->lpVtbl->CheckDeviceMultiSampleType(p,a,b,c,d,e,f) #define IDirect3D9_CheckDepthStencilMatch(p,a,b,c,d,e) (p)->lpVtbl->CheckDepthStencilMatch(p,a,b,c,d,e) #define IDirect3D9_CheckDeviceFormatConversion(p,a,b,c,d) (p)->lpVtbl->CheckDeviceFormatConversion(p,a,b,c,d) #define IDirect3D9_GetDeviceCaps(p,a,b,c) (p)->lpVtbl->GetDeviceCaps(p,a,b,c) #define IDirect3D9_GetAdapterMonitor(p,a) (p)->lpVtbl->GetAdapterMonitor(p,a) #define IDirect3D9_CreateDevice(p,a,b,c,d,e,f) (p)->lpVtbl->CreateDevice(p,a,b,c,d,e,f) #else #define IDirect3D9_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3D9_AddRef(p) (p)->AddRef() #define IDirect3D9_Release(p) (p)->Release() #define IDirect3D9_RegisterSoftwareDevice(p,a) (p)->RegisterSoftwareDevice(a) #define IDirect3D9_GetAdapterCount(p) (p)->GetAdapterCount() #define IDirect3D9_GetAdapterIdentifier(p,a,b,c) (p)->GetAdapterIdentifier(a,b,c) #define IDirect3D9_GetAdapterModeCount(p,a,b) (p)->GetAdapterModeCount(a,b) #define IDirect3D9_EnumAdapterModes(p,a,b,c,d) (p)->EnumAdapterModes(a,b,c,d) #define IDirect3D9_GetAdapterDisplayMode(p,a,b) (p)->GetAdapterDisplayMode(a,b) #define IDirect3D9_CheckDeviceType(p,a,b,c,d,e) (p)->CheckDeviceType(a,b,c,d,e) #define IDirect3D9_CheckDeviceFormat(p,a,b,c,d,e,f) (p)->CheckDeviceFormat(a,b,c,d,e,f) #define IDirect3D9_CheckDeviceMultiSampleType(p,a,b,c,d,e,f) (p)->CheckDeviceMultiSampleType(a,b,c,d,e,f) #define IDirect3D9_CheckDepthStencilMatch(p,a,b,c,d,e) (p)->CheckDepthStencilMatch(a,b,c,d,e) #define IDirect3D9_CheckDeviceFormatConversion(p,a,b,c,d) (p)->CheckDeviceFormatConversion(a,b,c,d) #define IDirect3D9_GetDeviceCaps(p,a,b,c) (p)->GetDeviceCaps(a,b,c) #define IDirect3D9_GetAdapterMonitor(p,a) (p)->GetAdapterMonitor(a) #define IDirect3D9_CreateDevice(p,a,b,c,d,e,f) (p)->CreateDevice(a,b,c,d,e,f) #endif /* SwapChain */ #undef INTERFACE #define INTERFACE IDirect3DDevice9 DECLARE_INTERFACE_(IDirect3DDevice9, IUnknown) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DDevice9 methods ***/ STDMETHOD(TestCooperativeLevel)(THIS) PURE; STDMETHOD_(UINT, GetAvailableTextureMem)(THIS) PURE; STDMETHOD(EvictManagedResources)(THIS) PURE; STDMETHOD(GetDirect3D)(THIS_ IDirect3D9** ppD3D9) PURE; STDMETHOD(GetDeviceCaps)(THIS_ D3DCAPS9* pCaps) PURE; STDMETHOD(GetDisplayMode)(THIS_ UINT iSwapChain,D3DDISPLAYMODE* pMode) PURE; STDMETHOD(GetCreationParameters)(THIS_ D3DDEVICE_CREATION_PARAMETERS *pParameters) PURE; STDMETHOD(SetCursorProperties)(THIS_ UINT XHotSpot,UINT YHotSpot,IDirect3DSurface9* pCursorBitmap) PURE; STDMETHOD_(void, SetCursorPosition)(THIS_ int X,int Y,DWORD Flags) PURE; STDMETHOD_(BOOL, ShowCursor)(THIS_ BOOL bShow) PURE; STDMETHOD(CreateAdditionalSwapChain)(THIS_ D3DPRESENT_PARAMETERS* pPresentationParameters,IDirect3DSwapChain9** pSwapChain) PURE; STDMETHOD(GetSwapChain)(THIS_ UINT iSwapChain,IDirect3DSwapChain9** pSwapChain) PURE; STDMETHOD_(UINT, GetNumberOfSwapChains)(THIS) PURE; STDMETHOD(Reset)(THIS_ D3DPRESENT_PARAMETERS* pPresentationParameters) PURE; STDMETHOD(Present)(THIS_ CONST RECT* pSourceRect,CONST RECT* pDestRect,HWND hDestWindowOverride,CONST RGNDATA* pDirtyRegion) PURE; STDMETHOD(GetBackBuffer)(THIS_ UINT iSwapChain,UINT iBackBuffer,D3DBACKBUFFER_TYPE Type,IDirect3DSurface9** ppBackBuffer) PURE; STDMETHOD(GetRasterStatus)(THIS_ UINT iSwapChain,D3DRASTER_STATUS* pRasterStatus) PURE; STDMETHOD(SetDialogBoxMode)(THIS_ BOOL bEnableDialogs) PURE; STDMETHOD_(void, SetGammaRamp)(THIS_ UINT iSwapChain,DWORD Flags,CONST D3DGAMMARAMP* pRamp) PURE; STDMETHOD_(void, GetGammaRamp)(THIS_ UINT iSwapChain,D3DGAMMARAMP* pRamp) PURE; STDMETHOD(CreateTexture)(THIS_ UINT Width,UINT Height,UINT Levels,DWORD Usage,D3DFORMAT Format,D3DPOOL Pool,IDirect3DTexture9** ppTexture,HANDLE* pSharedHandle) PURE; STDMETHOD(CreateVolumeTexture)(THIS_ UINT Width,UINT Height,UINT Depth,UINT Levels,DWORD Usage,D3DFORMAT Format,D3DPOOL Pool,IDirect3DVolumeTexture9** ppVolumeTexture,HANDLE* pSharedHandle) PURE; STDMETHOD(CreateCubeTexture)(THIS_ UINT EdgeLength,UINT Levels,DWORD Usage,D3DFORMAT Format,D3DPOOL Pool,IDirect3DCubeTexture9** ppCubeTexture,HANDLE* pSharedHandle) PURE; STDMETHOD(CreateVertexBuffer)(THIS_ UINT Length,DWORD Usage,DWORD FVF,D3DPOOL Pool,IDirect3DVertexBuffer9** ppVertexBuffer,HANDLE* pSharedHandle) PURE; STDMETHOD(CreateIndexBuffer)(THIS_ UINT Length,DWORD Usage,D3DFORMAT Format,D3DPOOL Pool,IDirect3DIndexBuffer9** ppIndexBuffer,HANDLE* pSharedHandle) PURE; STDMETHOD(CreateRenderTarget)(THIS_ UINT Width,UINT Height,D3DFORMAT Format,D3DMULTISAMPLE_TYPE MultiSample,DWORD MultisampleQuality,BOOL Lockable,IDirect3DSurface9** ppSurface,HANDLE* pSharedHandle) PURE; STDMETHOD(CreateDepthStencilSurface)(THIS_ UINT Width,UINT Height,D3DFORMAT Format,D3DMULTISAMPLE_TYPE MultiSample,DWORD MultisampleQuality,BOOL Discard,IDirect3DSurface9** ppSurface,HANDLE* pSharedHandle) PURE; STDMETHOD(UpdateSurface)(THIS_ IDirect3DSurface9* pSourceSurface,CONST RECT* pSourceRect,IDirect3DSurface9* pDestinationSurface,CONST POINT* pDestPoint) PURE; STDMETHOD(UpdateTexture)(THIS_ IDirect3DBaseTexture9* pSourceTexture,IDirect3DBaseTexture9* pDestinationTexture) PURE; STDMETHOD(GetRenderTargetData)(THIS_ IDirect3DSurface9* pRenderTarget,IDirect3DSurface9* pDestSurface) PURE; STDMETHOD(GetFrontBufferData)(THIS_ UINT iSwapChain,IDirect3DSurface9* pDestSurface) PURE; STDMETHOD(StretchRect)(THIS_ IDirect3DSurface9* pSourceSurface,CONST RECT* pSourceRect,IDirect3DSurface9* pDestSurface,CONST RECT* pDestRect,D3DTEXTUREFILTERTYPE Filter) PURE; STDMETHOD(ColorFill)(THIS_ IDirect3DSurface9* pSurface,CONST RECT* pRect,D3DCOLOR color) PURE; STDMETHOD(CreateOffscreenPlainSurface)(THIS_ UINT Width,UINT Height,D3DFORMAT Format,D3DPOOL Pool,IDirect3DSurface9** ppSurface,HANDLE* pSharedHandle) PURE; STDMETHOD(SetRenderTarget)(THIS_ DWORD RenderTargetIndex,IDirect3DSurface9* pRenderTarget) PURE; STDMETHOD(GetRenderTarget)(THIS_ DWORD RenderTargetIndex,IDirect3DSurface9** ppRenderTarget) PURE; STDMETHOD(SetDepthStencilSurface)(THIS_ IDirect3DSurface9* pNewZStencil) PURE; STDMETHOD(GetDepthStencilSurface)(THIS_ IDirect3DSurface9** ppZStencilSurface) PURE; STDMETHOD(BeginScene)(THIS) PURE; STDMETHOD(EndScene)(THIS) PURE; STDMETHOD(Clear)(THIS_ DWORD Count,CONST D3DRECT* pRects,DWORD Flags,D3DCOLOR Color,float Z,DWORD Stencil) PURE; STDMETHOD(SetTransform)(THIS_ D3DTRANSFORMSTATETYPE State,CONST D3DMATRIX* pMatrix) PURE; STDMETHOD(GetTransform)(THIS_ D3DTRANSFORMSTATETYPE State,D3DMATRIX* pMatrix) PURE; STDMETHOD(MultiplyTransform)(THIS_ D3DTRANSFORMSTATETYPE,CONST D3DMATRIX*) PURE; STDMETHOD(SetViewport)(THIS_ CONST D3DVIEWPORT9* pViewport) PURE; STDMETHOD(GetViewport)(THIS_ D3DVIEWPORT9* pViewport) PURE; STDMETHOD(SetMaterial)(THIS_ CONST D3DMATERIAL9* pMaterial) PURE; STDMETHOD(GetMaterial)(THIS_ D3DMATERIAL9* pMaterial) PURE; STDMETHOD(SetLight)(THIS_ DWORD Index,CONST D3DLIGHT9*) PURE; STDMETHOD(GetLight)(THIS_ DWORD Index,D3DLIGHT9*) PURE; STDMETHOD(LightEnable)(THIS_ DWORD Index,BOOL Enable) PURE; STDMETHOD(GetLightEnable)(THIS_ DWORD Index,BOOL* pEnable) PURE; STDMETHOD(SetClipPlane)(THIS_ DWORD Index,CONST float* pPlane) PURE; STDMETHOD(GetClipPlane)(THIS_ DWORD Index,float* pPlane) PURE; STDMETHOD(SetRenderState)(THIS_ D3DRENDERSTATETYPE State,DWORD Value) PURE; STDMETHOD(GetRenderState)(THIS_ D3DRENDERSTATETYPE State,DWORD* pValue) PURE; STDMETHOD(CreateStateBlock)(THIS_ D3DSTATEBLOCKTYPE Type,IDirect3DStateBlock9** ppSB) PURE; STDMETHOD(BeginStateBlock)(THIS) PURE; STDMETHOD(EndStateBlock)(THIS_ IDirect3DStateBlock9** ppSB) PURE; STDMETHOD(SetClipStatus)(THIS_ CONST D3DCLIPSTATUS9* pClipStatus) PURE; STDMETHOD(GetClipStatus)(THIS_ D3DCLIPSTATUS9* pClipStatus) PURE; STDMETHOD(GetTexture)(THIS_ DWORD Stage,IDirect3DBaseTexture9** ppTexture) PURE; STDMETHOD(SetTexture)(THIS_ DWORD Stage,IDirect3DBaseTexture9* pTexture) PURE; STDMETHOD(GetTextureStageState)(THIS_ DWORD Stage,D3DTEXTURESTAGESTATETYPE Type,DWORD* pValue) PURE; STDMETHOD(SetTextureStageState)(THIS_ DWORD Stage,D3DTEXTURESTAGESTATETYPE Type,DWORD Value) PURE; STDMETHOD(GetSamplerState)(THIS_ DWORD Sampler,D3DSAMPLERSTATETYPE Type,DWORD* pValue) PURE; STDMETHOD(SetSamplerState)(THIS_ DWORD Sampler,D3DSAMPLERSTATETYPE Type,DWORD Value) PURE; STDMETHOD(ValidateDevice)(THIS_ DWORD* pNumPasses) PURE; STDMETHOD(SetPaletteEntries)(THIS_ UINT PaletteNumber,CONST PALETTEENTRY* pEntries) PURE; STDMETHOD(GetPaletteEntries)(THIS_ UINT PaletteNumber,PALETTEENTRY* pEntries) PURE; STDMETHOD(SetCurrentTexturePalette)(THIS_ UINT PaletteNumber) PURE; STDMETHOD(GetCurrentTexturePalette)(THIS_ UINT *PaletteNumber) PURE; STDMETHOD(SetScissorRect)(THIS_ CONST RECT* pRect) PURE; STDMETHOD(GetScissorRect)(THIS_ RECT* pRect) PURE; STDMETHOD(SetSoftwareVertexProcessing)(THIS_ BOOL bSoftware) PURE; STDMETHOD_(BOOL, GetSoftwareVertexProcessing)(THIS) PURE; STDMETHOD(SetNPatchMode)(THIS_ float nSegments) PURE; STDMETHOD_(float, GetNPatchMode)(THIS) PURE; STDMETHOD(DrawPrimitive)(THIS_ D3DPRIMITIVETYPE PrimitiveType,UINT StartVertex,UINT PrimitiveCount) PURE; STDMETHOD(DrawIndexedPrimitive)(THIS_ D3DPRIMITIVETYPE,INT BaseVertexIndex,UINT MinVertexIndex,UINT NumVertices,UINT startIndex,UINT primCount) PURE; STDMETHOD(DrawPrimitiveUP)(THIS_ D3DPRIMITIVETYPE PrimitiveType,UINT PrimitiveCount,CONST void* pVertexStreamZeroData,UINT VertexStreamZeroStride) PURE; STDMETHOD(DrawIndexedPrimitiveUP)(THIS_ D3DPRIMITIVETYPE PrimitiveType,UINT MinVertexIndex,UINT NumVertices,UINT PrimitiveCount,CONST void* pIndexData,D3DFORMAT IndexDataFormat,CONST void* pVertexStreamZeroData,UINT VertexStreamZeroStride) PURE; STDMETHOD(ProcessVertices)(THIS_ UINT SrcStartIndex,UINT DestIndex,UINT VertexCount,IDirect3DVertexBuffer9* pDestBuffer,IDirect3DVertexDeclaration9* pVertexDecl,DWORD Flags) PURE; STDMETHOD(CreateVertexDeclaration)(THIS_ CONST D3DVERTEXELEMENT9* pVertexElements,IDirect3DVertexDeclaration9** ppDecl) PURE; STDMETHOD(SetVertexDeclaration)(THIS_ IDirect3DVertexDeclaration9* pDecl) PURE; STDMETHOD(GetVertexDeclaration)(THIS_ IDirect3DVertexDeclaration9** ppDecl) PURE; STDMETHOD(SetFVF)(THIS_ DWORD FVF) PURE; STDMETHOD(GetFVF)(THIS_ DWORD* pFVF) PURE; STDMETHOD(CreateVertexShader)(THIS_ CONST DWORD* pFunction,IDirect3DVertexShader9** ppShader) PURE; STDMETHOD(SetVertexShader)(THIS_ IDirect3DVertexShader9* pShader) PURE; STDMETHOD(GetVertexShader)(THIS_ IDirect3DVertexShader9** ppShader) PURE; STDMETHOD(SetVertexShaderConstantF)(THIS_ UINT StartRegister,CONST float* pConstantData,UINT Vector4fCount) PURE; STDMETHOD(GetVertexShaderConstantF)(THIS_ UINT StartRegister,float* pConstantData,UINT Vector4fCount) PURE; STDMETHOD(SetVertexShaderConstantI)(THIS_ UINT StartRegister,CONST int* pConstantData,UINT Vector4iCount) PURE; STDMETHOD(GetVertexShaderConstantI)(THIS_ UINT StartRegister,int* pConstantData,UINT Vector4iCount) PURE; STDMETHOD(SetVertexShaderConstantB)(THIS_ UINT StartRegister,CONST BOOL* pConstantData,UINT BoolCount) PURE; STDMETHOD(GetVertexShaderConstantB)(THIS_ UINT StartRegister,BOOL* pConstantData,UINT BoolCount) PURE; STDMETHOD(SetStreamSource)(THIS_ UINT StreamNumber,IDirect3DVertexBuffer9* pStreamData,UINT OffsetInBytes,UINT Stride) PURE; STDMETHOD(GetStreamSource)(THIS_ UINT StreamNumber,IDirect3DVertexBuffer9** ppStreamData,UINT* pOffsetInBytes,UINT* pStride) PURE; STDMETHOD(SetStreamSourceFreq)(THIS_ UINT StreamNumber,UINT Setting) PURE; STDMETHOD(GetStreamSourceFreq)(THIS_ UINT StreamNumber,UINT* pSetting) PURE; STDMETHOD(SetIndices)(THIS_ IDirect3DIndexBuffer9* pIndexData) PURE; STDMETHOD(GetIndices)(THIS_ IDirect3DIndexBuffer9** ppIndexData) PURE; STDMETHOD(CreatePixelShader)(THIS_ CONST DWORD* pFunction,IDirect3DPixelShader9** ppShader) PURE; STDMETHOD(SetPixelShader)(THIS_ IDirect3DPixelShader9* pShader) PURE; STDMETHOD(GetPixelShader)(THIS_ IDirect3DPixelShader9** ppShader) PURE; STDMETHOD(SetPixelShaderConstantF)(THIS_ UINT StartRegister,CONST float* pConstantData,UINT Vector4fCount) PURE; STDMETHOD(GetPixelShaderConstantF)(THIS_ UINT StartRegister,float* pConstantData,UINT Vector4fCount) PURE; STDMETHOD(SetPixelShaderConstantI)(THIS_ UINT StartRegister,CONST int* pConstantData,UINT Vector4iCount) PURE; STDMETHOD(GetPixelShaderConstantI)(THIS_ UINT StartRegister,int* pConstantData,UINT Vector4iCount) PURE; STDMETHOD(SetPixelShaderConstantB)(THIS_ UINT StartRegister,CONST BOOL* pConstantData,UINT BoolCount) PURE; STDMETHOD(GetPixelShaderConstantB)(THIS_ UINT StartRegister,BOOL* pConstantData,UINT BoolCount) PURE; STDMETHOD(DrawRectPatch)(THIS_ UINT Handle,CONST float* pNumSegs,CONST D3DRECTPATCH_INFO* pRectPatchInfo) PURE; STDMETHOD(DrawTriPatch)(THIS_ UINT Handle,CONST float* pNumSegs,CONST D3DTRIPATCH_INFO* pTriPatchInfo) PURE; STDMETHOD(DeletePatch)(THIS_ UINT Handle) PURE; STDMETHOD(CreateQuery)(THIS_ D3DQUERYTYPE Type,IDirect3DQuery9** ppQuery) PURE; #ifdef D3D_DEBUG_INFO D3DDEVICE_CREATION_PARAMETERS CreationParameters; D3DPRESENT_PARAMETERS PresentParameters; D3DDISPLAYMODE DisplayMode; D3DCAPS9 Caps; UINT AvailableTextureMem; UINT SwapChains; UINT Textures; UINT VertexBuffers; UINT IndexBuffers; UINT VertexShaders; UINT PixelShaders; D3DVIEWPORT9 Viewport; D3DMATRIX ProjectionMatrix; D3DMATRIX ViewMatrix; D3DMATRIX WorldMatrix; D3DMATRIX TextureMatrices[8]; DWORD FVF; UINT VertexSize; DWORD VertexShaderVersion; DWORD PixelShaderVersion; BOOL SoftwareVertexProcessing; D3DMATERIAL9 Material; D3DLIGHT9 Lights[16]; BOOL LightsEnabled[16]; D3DGAMMARAMP GammaRamp; RECT ScissorRect; BOOL DialogBoxMode; #endif }; typedef struct IDirect3DDevice9 *LPDIRECT3DDEVICE9, *PDIRECT3DDEVICE9; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirect3DDevice9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DDevice9_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DDevice9_Release(p) (p)->lpVtbl->Release(p) #define IDirect3DDevice9_TestCooperativeLevel(p) (p)->lpVtbl->TestCooperativeLevel(p) #define IDirect3DDevice9_GetAvailableTextureMem(p) (p)->lpVtbl->GetAvailableTextureMem(p) #define IDirect3DDevice9_EvictManagedResources(p) (p)->lpVtbl->EvictManagedResources(p) #define IDirect3DDevice9_GetDirect3D(p,a) (p)->lpVtbl->GetDirect3D(p,a) #define IDirect3DDevice9_GetDeviceCaps(p,a) (p)->lpVtbl->GetDeviceCaps(p,a) #define IDirect3DDevice9_GetDisplayMode(p,a,b) (p)->lpVtbl->GetDisplayMode(p,a,b) #define IDirect3DDevice9_GetCreationParameters(p,a) (p)->lpVtbl->GetCreationParameters(p,a) #define IDirect3DDevice9_SetCursorProperties(p,a,b,c) (p)->lpVtbl->SetCursorProperties(p,a,b,c) #define IDirect3DDevice9_SetCursorPosition(p,a,b,c) (p)->lpVtbl->SetCursorPosition(p,a,b,c) #define IDirect3DDevice9_ShowCursor(p,a) (p)->lpVtbl->ShowCursor(p,a) #define IDirect3DDevice9_CreateAdditionalSwapChain(p,a,b) (p)->lpVtbl->CreateAdditionalSwapChain(p,a,b) #define IDirect3DDevice9_GetSwapChain(p,a,b) (p)->lpVtbl->GetSwapChain(p,a,b) #define IDirect3DDevice9_GetNumberOfSwapChains(p) (p)->lpVtbl->GetNumberOfSwapChains(p) #define IDirect3DDevice9_Reset(p,a) (p)->lpVtbl->Reset(p,a) #define IDirect3DDevice9_Present(p,a,b,c,d) (p)->lpVtbl->Present(p,a,b,c,d) #define IDirect3DDevice9_GetBackBuffer(p,a,b,c,d) (p)->lpVtbl->GetBackBuffer(p,a,b,c,d) #define IDirect3DDevice9_GetRasterStatus(p,a,b) (p)->lpVtbl->GetRasterStatus(p,a,b) #define IDirect3DDevice9_SetDialogBoxMode(p,a) (p)->lpVtbl->SetDialogBoxMode(p,a) #define IDirect3DDevice9_SetGammaRamp(p,a,b,c) (p)->lpVtbl->SetGammaRamp(p,a,b,c) #define IDirect3DDevice9_GetGammaRamp(p,a,b) (p)->lpVtbl->GetGammaRamp(p,a,b) #define IDirect3DDevice9_CreateTexture(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->CreateTexture(p,a,b,c,d,e,f,g,h) #define IDirect3DDevice9_CreateVolumeTexture(p,a,b,c,d,e,f,g,h,i) (p)->lpVtbl->CreateVolumeTexture(p,a,b,c,d,e,f,g,h,i) #define IDirect3DDevice9_CreateCubeTexture(p,a,b,c,d,e,f,g) (p)->lpVtbl->CreateCubeTexture(p,a,b,c,d,e,f,g) #define IDirect3DDevice9_CreateVertexBuffer(p,a,b,c,d,e,f) (p)->lpVtbl->CreateVertexBuffer(p,a,b,c,d,e,f) #define IDirect3DDevice9_CreateIndexBuffer(p,a,b,c,d,e,f) (p)->lpVtbl->CreateIndexBuffer(p,a,b,c,d,e,f) #define IDirect3DDevice9_CreateRenderTarget(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->CreateRenderTarget(p,a,b,c,d,e,f,g,h) #define IDirect3DDevice9_CreateDepthStencilSurface(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->CreateDepthStencilSurface(p,a,b,c,d,e,f,g,h) #define IDirect3DDevice9_UpdateSurface(p,a,b,c,d) (p)->lpVtbl->UpdateSurface(p,a,b,c,d) #define IDirect3DDevice9_UpdateTexture(p,a,b) (p)->lpVtbl->UpdateTexture(p,a,b) #define IDirect3DDevice9_GetRenderTargetData(p,a,b) (p)->lpVtbl->GetRenderTargetData(p,a,b) #define IDirect3DDevice9_GetFrontBufferData(p,a,b) (p)->lpVtbl->GetFrontBufferData(p,a,b) #define IDirect3DDevice9_StretchRect(p,a,b,c,d,e) (p)->lpVtbl->StretchRect(p,a,b,c,d,e) #define IDirect3DDevice9_ColorFill(p,a,b,c) (p)->lpVtbl->ColorFill(p,a,b,c) #define IDirect3DDevice9_CreateOffscreenPlainSurface(p,a,b,c,d,e,f) (p)->lpVtbl->CreateOffscreenPlainSurface(p,a,b,c,d,e,f) #define IDirect3DDevice9_SetRenderTarget(p,a,b) (p)->lpVtbl->SetRenderTarget(p,a,b) #define IDirect3DDevice9_GetRenderTarget(p,a,b) (p)->lpVtbl->GetRenderTarget(p,a,b) #define IDirect3DDevice9_SetDepthStencilSurface(p,a) (p)->lpVtbl->SetDepthStencilSurface(p,a) #define IDirect3DDevice9_GetDepthStencilSurface(p,a) (p)->lpVtbl->GetDepthStencilSurface(p,a) #define IDirect3DDevice9_BeginScene(p) (p)->lpVtbl->BeginScene(p) #define IDirect3DDevice9_EndScene(p) (p)->lpVtbl->EndScene(p) #define IDirect3DDevice9_Clear(p,a,b,c,d,e,f) (p)->lpVtbl->Clear(p,a,b,c,d,e,f) #define IDirect3DDevice9_SetTransform(p,a,b) (p)->lpVtbl->SetTransform(p,a,b) #define IDirect3DDevice9_GetTransform(p,a,b) (p)->lpVtbl->GetTransform(p,a,b) #define IDirect3DDevice9_MultiplyTransform(p,a,b) (p)->lpVtbl->MultiplyTransform(p,a,b) #define IDirect3DDevice9_SetViewport(p,a) (p)->lpVtbl->SetViewport(p,a) #define IDirect3DDevice9_GetViewport(p,a) (p)->lpVtbl->GetViewport(p,a) #define IDirect3DDevice9_SetMaterial(p,a) (p)->lpVtbl->SetMaterial(p,a) #define IDirect3DDevice9_GetMaterial(p,a) (p)->lpVtbl->GetMaterial(p,a) #define IDirect3DDevice9_SetLight(p,a,b) (p)->lpVtbl->SetLight(p,a,b) #define IDirect3DDevice9_GetLight(p,a,b) (p)->lpVtbl->GetLight(p,a,b) #define IDirect3DDevice9_LightEnable(p,a,b) (p)->lpVtbl->LightEnable(p,a,b) #define IDirect3DDevice9_GetLightEnable(p,a,b) (p)->lpVtbl->GetLightEnable(p,a,b) #define IDirect3DDevice9_SetClipPlane(p,a,b) (p)->lpVtbl->SetClipPlane(p,a,b) #define IDirect3DDevice9_GetClipPlane(p,a,b) (p)->lpVtbl->GetClipPlane(p,a,b) #define IDirect3DDevice9_SetRenderState(p,a,b) (p)->lpVtbl->SetRenderState(p,a,b) #define IDirect3DDevice9_GetRenderState(p,a,b) (p)->lpVtbl->GetRenderState(p,a,b) #define IDirect3DDevice9_CreateStateBlock(p,a,b) (p)->lpVtbl->CreateStateBlock(p,a,b) #define IDirect3DDevice9_BeginStateBlock(p) (p)->lpVtbl->BeginStateBlock(p) #define IDirect3DDevice9_EndStateBlock(p,a) (p)->lpVtbl->EndStateBlock(p,a) #define IDirect3DDevice9_SetClipStatus(p,a) (p)->lpVtbl->SetClipStatus(p,a) #define IDirect3DDevice9_GetClipStatus(p,a) (p)->lpVtbl->GetClipStatus(p,a) #define IDirect3DDevice9_GetTexture(p,a,b) (p)->lpVtbl->GetTexture(p,a,b) #define IDirect3DDevice9_SetTexture(p,a,b) (p)->lpVtbl->SetTexture(p,a,b) #define IDirect3DDevice9_GetTextureStageState(p,a,b,c) (p)->lpVtbl->GetTextureStageState(p,a,b,c) #define IDirect3DDevice9_SetTextureStageState(p,a,b,c) (p)->lpVtbl->SetTextureStageState(p,a,b,c) #define IDirect3DDevice9_GetSamplerState(p,a,b,c) (p)->lpVtbl->GetSamplerState(p,a,b,c) #define IDirect3DDevice9_SetSamplerState(p,a,b,c) (p)->lpVtbl->SetSamplerState(p,a,b,c) #define IDirect3DDevice9_ValidateDevice(p,a) (p)->lpVtbl->ValidateDevice(p,a) #define IDirect3DDevice9_SetPaletteEntries(p,a,b) (p)->lpVtbl->SetPaletteEntries(p,a,b) #define IDirect3DDevice9_GetPaletteEntries(p,a,b) (p)->lpVtbl->GetPaletteEntries(p,a,b) #define IDirect3DDevice9_SetCurrentTexturePalette(p,a) (p)->lpVtbl->SetCurrentTexturePalette(p,a) #define IDirect3DDevice9_GetCurrentTexturePalette(p,a) (p)->lpVtbl->GetCurrentTexturePalette(p,a) #define IDirect3DDevice9_SetScissorRect(p,a) (p)->lpVtbl->SetScissorRect(p,a) #define IDirect3DDevice9_GetScissorRect(p,a) (p)->lpVtbl->GetScissorRect(p,a) #define IDirect3DDevice9_SetSoftwareVertexProcessing(p,a) (p)->lpVtbl->SetSoftwareVertexProcessing(p,a) #define IDirect3DDevice9_GetSoftwareVertexProcessing(p) (p)->lpVtbl->GetSoftwareVertexProcessing(p) #define IDirect3DDevice9_SetNPatchMode(p,a) (p)->lpVtbl->SetNPatchMode(p,a) #define IDirect3DDevice9_GetNPatchMode(p) (p)->lpVtbl->GetNPatchMode(p) #define IDirect3DDevice9_DrawPrimitive(p,a,b,c) (p)->lpVtbl->DrawPrimitive(p,a,b,c) #define IDirect3DDevice9_DrawIndexedPrimitive(p,a,b,c,d,e,f) (p)->lpVtbl->DrawIndexedPrimitive(p,a,b,c,d,e,f) #define IDirect3DDevice9_DrawPrimitiveUP(p,a,b,c,d) (p)->lpVtbl->DrawPrimitiveUP(p,a,b,c,d) #define IDirect3DDevice9_DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h) #define IDirect3DDevice9_ProcessVertices(p,a,b,c,d,e,f) (p)->lpVtbl->ProcessVertices(p,a,b,c,d,e,f) #define IDirect3DDevice9_CreateVertexDeclaration(p,a,b) (p)->lpVtbl->CreateVertexDeclaration(p,a,b) #define IDirect3DDevice9_SetVertexDeclaration(p,a) (p)->lpVtbl->SetVertexDeclaration(p,a) #define IDirect3DDevice9_GetVertexDeclaration(p,a) (p)->lpVtbl->GetVertexDeclaration(p,a) #define IDirect3DDevice9_SetFVF(p,a) (p)->lpVtbl->SetFVF(p,a) #define IDirect3DDevice9_GetFVF(p,a) (p)->lpVtbl->GetFVF(p,a) #define IDirect3DDevice9_CreateVertexShader(p,a,b) (p)->lpVtbl->CreateVertexShader(p,a,b) #define IDirect3DDevice9_SetVertexShader(p,a) (p)->lpVtbl->SetVertexShader(p,a) #define IDirect3DDevice9_GetVertexShader(p,a) (p)->lpVtbl->GetVertexShader(p,a) #define IDirect3DDevice9_SetVertexShaderConstantF(p,a,b,c) (p)->lpVtbl->SetVertexShaderConstantF(p,a,b,c) #define IDirect3DDevice9_GetVertexShaderConstantF(p,a,b,c) (p)->lpVtbl->GetVertexShaderConstantF(p,a,b,c) #define IDirect3DDevice9_SetVertexShaderConstantI(p,a,b,c) (p)->lpVtbl->SetVertexShaderConstantI(p,a,b,c) #define IDirect3DDevice9_GetVertexShaderConstantI(p,a,b,c) (p)->lpVtbl->GetVertexShaderConstantI(p,a,b,c) #define IDirect3DDevice9_SetVertexShaderConstantB(p,a,b,c) (p)->lpVtbl->SetVertexShaderConstantB(p,a,b,c) #define IDirect3DDevice9_GetVertexShaderConstantB(p,a,b,c) (p)->lpVtbl->GetVertexShaderConstantB(p,a,b,c) #define IDirect3DDevice9_SetStreamSource(p,a,b,c,d) (p)->lpVtbl->SetStreamSource(p,a,b,c,d) #define IDirect3DDevice9_GetStreamSource(p,a,b,c,d) (p)->lpVtbl->GetStreamSource(p,a,b,c,d) #define IDirect3DDevice9_SetStreamSourceFreq(p,a,b) (p)->lpVtbl->SetStreamSourceFreq(p,a,b) #define IDirect3DDevice9_GetStreamSourceFreq(p,a,b) (p)->lpVtbl->GetStreamSourceFreq(p,a,b) #define IDirect3DDevice9_SetIndices(p,a) (p)->lpVtbl->SetIndices(p,a) #define IDirect3DDevice9_GetIndices(p,a) (p)->lpVtbl->GetIndices(p,a) #define IDirect3DDevice9_CreatePixelShader(p,a,b) (p)->lpVtbl->CreatePixelShader(p,a,b) #define IDirect3DDevice9_SetPixelShader(p,a) (p)->lpVtbl->SetPixelShader(p,a) #define IDirect3DDevice9_GetPixelShader(p,a) (p)->lpVtbl->GetPixelShader(p,a) #define IDirect3DDevice9_SetPixelShaderConstantF(p,a,b,c) (p)->lpVtbl->SetPixelShaderConstantF(p,a,b,c) #define IDirect3DDevice9_GetPixelShaderConstantF(p,a,b,c) (p)->lpVtbl->GetPixelShaderConstantF(p,a,b,c) #define IDirect3DDevice9_SetPixelShaderConstantI(p,a,b,c) (p)->lpVtbl->SetPixelShaderConstantI(p,a,b,c) #define IDirect3DDevice9_GetPixelShaderConstantI(p,a,b,c) (p)->lpVtbl->GetPixelShaderConstantI(p,a,b,c) #define IDirect3DDevice9_SetPixelShaderConstantB(p,a,b,c) (p)->lpVtbl->SetPixelShaderConstantB(p,a,b,c) #define IDirect3DDevice9_GetPixelShaderConstantB(p,a,b,c) (p)->lpVtbl->GetPixelShaderConstantB(p,a,b,c) #define IDirect3DDevice9_DrawRectPatch(p,a,b,c) (p)->lpVtbl->DrawRectPatch(p,a,b,c) #define IDirect3DDevice9_DrawTriPatch(p,a,b,c) (p)->lpVtbl->DrawTriPatch(p,a,b,c) #define IDirect3DDevice9_DeletePatch(p,a) (p)->lpVtbl->DeletePatch(p,a) #define IDirect3DDevice9_CreateQuery(p,a,b) (p)->lpVtbl->CreateQuery(p,a,b) #else #define IDirect3DDevice9_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DDevice9_AddRef(p) (p)->AddRef() #define IDirect3DDevice9_Release(p) (p)->Release() #define IDirect3DDevice9_TestCooperativeLevel(p) (p)->TestCooperativeLevel() #define IDirect3DDevice9_GetAvailableTextureMem(p) (p)->GetAvailableTextureMem() #define IDirect3DDevice9_EvictManagedResources(p) (p)->EvictManagedResources() #define IDirect3DDevice9_GetDirect3D(p,a) (p)->GetDirect3D(a) #define IDirect3DDevice9_GetDeviceCaps(p,a) (p)->GetDeviceCaps(a) #define IDirect3DDevice9_GetDisplayMode(p,a,b) (p)->GetDisplayMode(a,b) #define IDirect3DDevice9_GetCreationParameters(p,a) (p)->GetCreationParameters(a) #define IDirect3DDevice9_SetCursorProperties(p,a,b,c) (p)->SetCursorProperties(a,b,c) #define IDirect3DDevice9_SetCursorPosition(p,a,b,c) (p)->SetCursorPosition(a,b,c) #define IDirect3DDevice9_ShowCursor(p,a) (p)->ShowCursor(a) #define IDirect3DDevice9_CreateAdditionalSwapChain(p,a,b) (p)->CreateAdditionalSwapChain(a,b) #define IDirect3DDevice9_GetSwapChain(p,a,b) (p)->GetSwapChain(a,b) #define IDirect3DDevice9_GetNumberOfSwapChains(p) (p)->GetNumberOfSwapChains() #define IDirect3DDevice9_Reset(p,a) (p)->Reset(a) #define IDirect3DDevice9_Present(p,a,b,c,d) (p)->Present(a,b,c,d) #define IDirect3DDevice9_GetBackBuffer(p,a,b,c,d) (p)->GetBackBuffer(a,b,c,d) #define IDirect3DDevice9_GetRasterStatus(p,a,b) (p)->GetRasterStatus(a,b) #define IDirect3DDevice9_SetDialogBoxMode(p,a) (p)->SetDialogBoxMode(a) #define IDirect3DDevice9_SetGammaRamp(p,a,b,c) (p)->SetGammaRamp(a,b,c) #define IDirect3DDevice9_GetGammaRamp(p,a,b) (p)->GetGammaRamp(a,b) #define IDirect3DDevice9_CreateTexture(p,a,b,c,d,e,f,g,h) (p)->CreateTexture(a,b,c,d,e,f,g,h) #define IDirect3DDevice9_CreateVolumeTexture(p,a,b,c,d,e,f,g,h,i) (p)->CreateVolumeTexture(a,b,c,d,e,f,g,h,i) #define IDirect3DDevice9_CreateCubeTexture(p,a,b,c,d,e,f,g) (p)->CreateCubeTexture(a,b,c,d,e,f,g) #define IDirect3DDevice9_CreateVertexBuffer(p,a,b,c,d,e,f) (p)->CreateVertexBuffer(a,b,c,d,e,f) #define IDirect3DDevice9_CreateIndexBuffer(p,a,b,c,d,e,f) (p)->CreateIndexBuffer(a,b,c,d,e,f) #define IDirect3DDevice9_CreateRenderTarget(p,a,b,c,d,e,f,g,h) (p)->CreateRenderTarget(a,b,c,d,e,f,g,h) #define IDirect3DDevice9_CreateDepthStencilSurface(p,a,b,c,d,e,f,g,h) (p)->CreateDepthStencilSurface(a,b,c,d,e,f,g,h) #define IDirect3DDevice9_UpdateSurface(p,a,b,c,d) (p)->UpdateSurface(a,b,c,d) #define IDirect3DDevice9_UpdateTexture(p,a,b) (p)->UpdateTexture(a,b) #define IDirect3DDevice9_GetRenderTargetData(p,a,b) (p)->GetRenderTargetData(a,b) #define IDirect3DDevice9_GetFrontBufferData(p,a,b) (p)->GetFrontBufferData(a,b) #define IDirect3DDevice9_StretchRect(p,a,b,c,d,e) (p)->StretchRect(a,b,c,d,e) #define IDirect3DDevice9_ColorFill(p,a,b,c) (p)->ColorFill(a,b,c) #define IDirect3DDevice9_CreateOffscreenPlainSurface(p,a,b,c,d,e,f) (p)->CreateOffscreenPlainSurface(a,b,c,d,e,f) #define IDirect3DDevice9_SetRenderTarget(p,a,b) (p)->SetRenderTarget(a,b) #define IDirect3DDevice9_GetRenderTarget(p,a,b) (p)->GetRenderTarget(a,b) #define IDirect3DDevice9_SetDepthStencilSurface(p,a) (p)->SetDepthStencilSurface(a) #define IDirect3DDevice9_GetDepthStencilSurface(p,a) (p)->GetDepthStencilSurface(a) #define IDirect3DDevice9_BeginScene(p) (p)->BeginScene() #define IDirect3DDevice9_EndScene(p) (p)->EndScene() #define IDirect3DDevice9_Clear(p,a,b,c,d,e,f) (p)->Clear(a,b,c,d,e,f) #define IDirect3DDevice9_SetTransform(p,a,b) (p)->SetTransform(a,b) #define IDirect3DDevice9_GetTransform(p,a,b) (p)->GetTransform(a,b) #define IDirect3DDevice9_MultiplyTransform(p,a,b) (p)->MultiplyTransform(a,b) #define IDirect3DDevice9_SetViewport(p,a) (p)->SetViewport(a) #define IDirect3DDevice9_GetViewport(p,a) (p)->GetViewport(a) #define IDirect3DDevice9_SetMaterial(p,a) (p)->SetMaterial(a) #define IDirect3DDevice9_GetMaterial(p,a) (p)->GetMaterial(a) #define IDirect3DDevice9_SetLight(p,a,b) (p)->SetLight(a,b) #define IDirect3DDevice9_GetLight(p,a,b) (p)->GetLight(a,b) #define IDirect3DDevice9_LightEnable(p,a,b) (p)->LightEnable(a,b) #define IDirect3DDevice9_GetLightEnable(p,a,b) (p)->GetLightEnable(a,b) #define IDirect3DDevice9_SetClipPlane(p,a,b) (p)->SetClipPlane(a,b) #define IDirect3DDevice9_GetClipPlane(p,a,b) (p)->GetClipPlane(a,b) #define IDirect3DDevice9_SetRenderState(p,a,b) (p)->SetRenderState(a,b) #define IDirect3DDevice9_GetRenderState(p,a,b) (p)->GetRenderState(a,b) #define IDirect3DDevice9_CreateStateBlock(p,a,b) (p)->CreateStateBlock(a,b) #define IDirect3DDevice9_BeginStateBlock(p) (p)->BeginStateBlock() #define IDirect3DDevice9_EndStateBlock(p,a) (p)->EndStateBlock(a) #define IDirect3DDevice9_SetClipStatus(p,a) (p)->SetClipStatus(a) #define IDirect3DDevice9_GetClipStatus(p,a) (p)->GetClipStatus(a) #define IDirect3DDevice9_GetTexture(p,a,b) (p)->GetTexture(a,b) #define IDirect3DDevice9_SetTexture(p,a,b) (p)->SetTexture(a,b) #define IDirect3DDevice9_GetTextureStageState(p,a,b,c) (p)->GetTextureStageState(a,b,c) #define IDirect3DDevice9_SetTextureStageState(p,a,b,c) (p)->SetTextureStageState(a,b,c) #define IDirect3DDevice9_GetSamplerState(p,a,b,c) (p)->GetSamplerState(a,b,c) #define IDirect3DDevice9_SetSamplerState(p,a,b,c) (p)->SetSamplerState(a,b,c) #define IDirect3DDevice9_ValidateDevice(p,a) (p)->ValidateDevice(a) #define IDirect3DDevice9_SetPaletteEntries(p,a,b) (p)->SetPaletteEntries(a,b) #define IDirect3DDevice9_GetPaletteEntries(p,a,b) (p)->GetPaletteEntries(a,b) #define IDirect3DDevice9_SetCurrentTexturePalette(p,a) (p)->SetCurrentTexturePalette(a) #define IDirect3DDevice9_GetCurrentTexturePalette(p,a) (p)->GetCurrentTexturePalette(a) #define IDirect3DDevice9_SetScissorRect(p,a) (p)->SetScissorRect(a) #define IDirect3DDevice9_GetScissorRect(p,a) (p)->GetScissorRect(a) #define IDirect3DDevice9_SetSoftwareVertexProcessing(p,a) (p)->SetSoftwareVertexProcessing(a) #define IDirect3DDevice9_GetSoftwareVertexProcessing(p) (p)->GetSoftwareVertexProcessing() #define IDirect3DDevice9_SetNPatchMode(p,a) (p)->SetNPatchMode(a) #define IDirect3DDevice9_GetNPatchMode(p) (p)->GetNPatchMode() #define IDirect3DDevice9_DrawPrimitive(p,a,b,c) (p)->DrawPrimitive(a,b,c) #define IDirect3DDevice9_DrawIndexedPrimitive(p,a,b,c,d,e,f) (p)->DrawIndexedPrimitive(a,b,c,d,e,f) #define IDirect3DDevice9_DrawPrimitiveUP(p,a,b,c,d) (p)->DrawPrimitiveUP(a,b,c,d) #define IDirect3DDevice9_DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h) (p)->DrawIndexedPrimitiveUP(a,b,c,d,e,f,g,h) #define IDirect3DDevice9_ProcessVertices(p,a,b,c,d,e,f) (p)->ProcessVertices(a,b,c,d,e,f) #define IDirect3DDevice9_CreateVertexDeclaration(p,a,b) (p)->CreateVertexDeclaration(a,b) #define IDirect3DDevice9_SetVertexDeclaration(p,a) (p)->SetVertexDeclaration(a) #define IDirect3DDevice9_GetVertexDeclaration(p,a) (p)->GetVertexDeclaration(a) #define IDirect3DDevice9_SetFVF(p,a) (p)->SetFVF(a) #define IDirect3DDevice9_GetFVF(p,a) (p)->GetFVF(a) #define IDirect3DDevice9_CreateVertexShader(p,a,b) (p)->CreateVertexShader(a,b) #define IDirect3DDevice9_SetVertexShader(p,a) (p)->SetVertexShader(a) #define IDirect3DDevice9_GetVertexShader(p,a) (p)->GetVertexShader(a) #define IDirect3DDevice9_SetVertexShaderConstantF(p,a,b,c) (p)->SetVertexShaderConstantF(a,b,c) #define IDirect3DDevice9_GetVertexShaderConstantF(p,a,b,c) (p)->GetVertexShaderConstantF(a,b,c) #define IDirect3DDevice9_SetVertexShaderConstantI(p,a,b,c) (p)->SetVertexShaderConstantI(a,b,c) #define IDirect3DDevice9_GetVertexShaderConstantI(p,a,b,c) (p)->GetVertexShaderConstantI(a,b,c) #define IDirect3DDevice9_SetVertexShaderConstantB(p,a,b,c) (p)->SetVertexShaderConstantB(a,b,c) #define IDirect3DDevice9_GetVertexShaderConstantB(p,a,b,c) (p)->GetVertexShaderConstantB(a,b,c) #define IDirect3DDevice9_SetStreamSource(p,a,b,c,d) (p)->SetStreamSource(a,b,c,d) #define IDirect3DDevice9_GetStreamSource(p,a,b,c,d) (p)->GetStreamSource(a,b,c,d) #define IDirect3DDevice9_SetStreamSourceFreq(p,a,b) (p)->SetStreamSourceFreq(a,b) #define IDirect3DDevice9_GetStreamSourceFreq(p,a,b) (p)->GetStreamSourceFreq(a,b) #define IDirect3DDevice9_SetIndices(p,a) (p)->SetIndices(a) #define IDirect3DDevice9_GetIndices(p,a) (p)->GetIndices(a) #define IDirect3DDevice9_CreatePixelShader(p,a,b) (p)->CreatePixelShader(a,b) #define IDirect3DDevice9_SetPixelShader(p,a) (p)->SetPixelShader(a) #define IDirect3DDevice9_GetPixelShader(p,a) (p)->GetPixelShader(a) #define IDirect3DDevice9_SetPixelShaderConstantF(p,a,b,c) (p)->SetPixelShaderConstantF(a,b,c) #define IDirect3DDevice9_GetPixelShaderConstantF(p,a,b,c) (p)->GetPixelShaderConstantF(a,b,c) #define IDirect3DDevice9_SetPixelShaderConstantI(p,a,b,c) (p)->SetPixelShaderConstantI(a,b,c) #define IDirect3DDevice9_GetPixelShaderConstantI(p,a,b,c) (p)->GetPixelShaderConstantI(a,b,c) #define IDirect3DDevice9_SetPixelShaderConstantB(p,a,b,c) (p)->SetPixelShaderConstantB(a,b,c) #define IDirect3DDevice9_GetPixelShaderConstantB(p,a,b,c) (p)->GetPixelShaderConstantB(a,b,c) #define IDirect3DDevice9_DrawRectPatch(p,a,b,c) (p)->DrawRectPatch(a,b,c) #define IDirect3DDevice9_DrawTriPatch(p,a,b,c) (p)->DrawTriPatch(a,b,c) #define IDirect3DDevice9_DeletePatch(p,a) (p)->DeletePatch(a) #define IDirect3DDevice9_CreateQuery(p,a,b) (p)->CreateQuery(a,b) #endif #undef INTERFACE #define INTERFACE IDirect3DStateBlock9 DECLARE_INTERFACE_(IDirect3DStateBlock9, IUnknown) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DStateBlock9 methods ***/ STDMETHOD(GetDevice)(THIS_ IDirect3DDevice9** ppDevice) PURE; STDMETHOD(Capture)(THIS) PURE; STDMETHOD(Apply)(THIS) PURE; #ifdef D3D_DEBUG_INFO LPCWSTR CreationCallStack; #endif }; typedef struct IDirect3DStateBlock9 *LPDIRECT3DSTATEBLOCK9, *PDIRECT3DSTATEBLOCK9; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirect3DStateBlock9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DStateBlock9_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DStateBlock9_Release(p) (p)->lpVtbl->Release(p) #define IDirect3DStateBlock9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) #define IDirect3DStateBlock9_Capture(p) (p)->lpVtbl->Capture(p) #define IDirect3DStateBlock9_Apply(p) (p)->lpVtbl->Apply(p) #else #define IDirect3DStateBlock9_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DStateBlock9_AddRef(p) (p)->AddRef() #define IDirect3DStateBlock9_Release(p) (p)->Release() #define IDirect3DStateBlock9_GetDevice(p,a) (p)->GetDevice(a) #define IDirect3DStateBlock9_Capture(p) (p)->Capture() #define IDirect3DStateBlock9_Apply(p) (p)->Apply() #endif #undef INTERFACE #define INTERFACE IDirect3DSwapChain9 DECLARE_INTERFACE_(IDirect3DSwapChain9, IUnknown) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DSwapChain9 methods ***/ STDMETHOD(Present)(THIS_ CONST RECT* pSourceRect,CONST RECT* pDestRect,HWND hDestWindowOverride,CONST RGNDATA* pDirtyRegion,DWORD dwFlags) PURE; STDMETHOD(GetFrontBufferData)(THIS_ IDirect3DSurface9* pDestSurface) PURE; STDMETHOD(GetBackBuffer)(THIS_ UINT iBackBuffer,D3DBACKBUFFER_TYPE Type,IDirect3DSurface9** ppBackBuffer) PURE; STDMETHOD(GetRasterStatus)(THIS_ D3DRASTER_STATUS* pRasterStatus) PURE; STDMETHOD(GetDisplayMode)(THIS_ D3DDISPLAYMODE* pMode) PURE; STDMETHOD(GetDevice)(THIS_ IDirect3DDevice9** ppDevice) PURE; STDMETHOD(GetPresentParameters)(THIS_ D3DPRESENT_PARAMETERS* pPresentationParameters) PURE; #ifdef D3D_DEBUG_INFO D3DPRESENT_PARAMETERS PresentParameters; D3DDISPLAYMODE DisplayMode; LPCWSTR CreationCallStack; #endif }; typedef struct IDirect3DSwapChain9 *LPDIRECT3DSWAPCHAIN9, *PDIRECT3DSWAPCHAIN9; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirect3DSwapChain9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DSwapChain9_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DSwapChain9_Release(p) (p)->lpVtbl->Release(p) #define IDirect3DSwapChain9_Present(p,a,b,c,d,e) (p)->lpVtbl->Present(p,a,b,c,d,e) #define IDirect3DSwapChain9_GetFrontBufferData(p,a) (p)->lpVtbl->GetFrontBufferData(p,a) #define IDirect3DSwapChain9_GetBackBuffer(p,a,b,c) (p)->lpVtbl->GetBackBuffer(p,a,b,c) #define IDirect3DSwapChain9_GetRasterStatus(p,a) (p)->lpVtbl->GetRasterStatus(p,a) #define IDirect3DSwapChain9_GetDisplayMode(p,a) (p)->lpVtbl->GetDisplayMode(p,a) #define IDirect3DSwapChain9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) #define IDirect3DSwapChain9_GetPresentParameters(p,a) (p)->lpVtbl->GetPresentParameters(p,a) #else #define IDirect3DSwapChain9_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DSwapChain9_AddRef(p) (p)->AddRef() #define IDirect3DSwapChain9_Release(p) (p)->Release() #define IDirect3DSwapChain9_Present(p,a,b,c,d,e) (p)->Present(a,b,c,d,e) #define IDirect3DSwapChain9_GetFrontBufferData(p,a) (p)->GetFrontBufferData(a) #define IDirect3DSwapChain9_GetBackBuffer(p,a,b,c) (p)->GetBackBuffer(a,b,c) #define IDirect3DSwapChain9_GetRasterStatus(p,a) (p)->GetRasterStatus(a) #define IDirect3DSwapChain9_GetDisplayMode(p,a) (p)->GetDisplayMode(a) #define IDirect3DSwapChain9_GetDevice(p,a) (p)->GetDevice(a) #define IDirect3DSwapChain9_GetPresentParameters(p,a) (p)->GetPresentParameters(a) #endif #undef INTERFACE #define INTERFACE IDirect3DResource9 DECLARE_INTERFACE_(IDirect3DResource9, IUnknown) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DResource9 methods ***/ STDMETHOD(GetDevice)(THIS_ IDirect3DDevice9** ppDevice) PURE; STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid,CONST void* pData,DWORD SizeOfData,DWORD Flags) PURE; STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid,void* pData,DWORD* pSizeOfData) PURE; STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE; STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE; STDMETHOD_(DWORD, GetPriority)(THIS) PURE; STDMETHOD_(void, PreLoad)(THIS) PURE; STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE; }; typedef struct IDirect3DResource9 *LPDIRECT3DRESOURCE9, *PDIRECT3DRESOURCE9; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirect3DResource9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DResource9_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DResource9_Release(p) (p)->lpVtbl->Release(p) #define IDirect3DResource9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) #define IDirect3DResource9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d) #define IDirect3DResource9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c) #define IDirect3DResource9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a) #define IDirect3DResource9_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a) #define IDirect3DResource9_GetPriority(p) (p)->lpVtbl->GetPriority(p) #define IDirect3DResource9_PreLoad(p) (p)->lpVtbl->PreLoad(p) #define IDirect3DResource9_GetType(p) (p)->lpVtbl->GetType(p) #else #define IDirect3DResource9_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DResource9_AddRef(p) (p)->AddRef() #define IDirect3DResource9_Release(p) (p)->Release() #define IDirect3DResource9_GetDevice(p,a) (p)->GetDevice(a) #define IDirect3DResource9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d) #define IDirect3DResource9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c) #define IDirect3DResource9_FreePrivateData(p,a) (p)->FreePrivateData(a) #define IDirect3DResource9_SetPriority(p,a) (p)->SetPriority(a) #define IDirect3DResource9_GetPriority(p) (p)->GetPriority() #define IDirect3DResource9_PreLoad(p) (p)->PreLoad() #define IDirect3DResource9_GetType(p) (p)->GetType() #endif #undef INTERFACE #define INTERFACE IDirect3DVertexDeclaration9 DECLARE_INTERFACE_(IDirect3DVertexDeclaration9, IUnknown) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DVertexDeclaration9 methods ***/ STDMETHOD(GetDevice)(THIS_ IDirect3DDevice9** ppDevice) PURE; STDMETHOD(GetDeclaration)(THIS_ D3DVERTEXELEMENT9* pElement,UINT* pNumElements) PURE; #ifdef D3D_DEBUG_INFO LPCWSTR CreationCallStack; #endif }; typedef struct IDirect3DVertexDeclaration9 *LPDIRECT3DVERTEXDECLARATION9, *PDIRECT3DVERTEXDECLARATION9; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirect3DVertexDeclaration9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DVertexDeclaration9_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DVertexDeclaration9_Release(p) (p)->lpVtbl->Release(p) #define IDirect3DVertexDeclaration9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) #define IDirect3DVertexDeclaration9_GetDeclaration(p,a,b) (p)->lpVtbl->GetDeclaration(p,a,b) #else #define IDirect3DVertexDeclaration9_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DVertexDeclaration9_AddRef(p) (p)->AddRef() #define IDirect3DVertexDeclaration9_Release(p) (p)->Release() #define IDirect3DVertexDeclaration9_GetDevice(p,a) (p)->GetDevice(a) #define IDirect3DVertexDeclaration9_GetDeclaration(p,a,b) (p)->GetDeclaration(a,b) #endif #undef INTERFACE #define INTERFACE IDirect3DVertexShader9 DECLARE_INTERFACE_(IDirect3DVertexShader9, IUnknown) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DVertexShader9 methods ***/ STDMETHOD(GetDevice)(THIS_ IDirect3DDevice9** ppDevice) PURE; STDMETHOD(GetFunction)(THIS_ void*,UINT* pSizeOfData) PURE; #ifdef D3D_DEBUG_INFO DWORD Version; LPCWSTR CreationCallStack; #endif }; typedef struct IDirect3DVertexShader9 *LPDIRECT3DVERTEXSHADER9, *PDIRECT3DVERTEXSHADER9; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirect3DVertexShader9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DVertexShader9_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DVertexShader9_Release(p) (p)->lpVtbl->Release(p) #define IDirect3DVertexShader9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) #define IDirect3DVertexShader9_GetFunction(p,a,b) (p)->lpVtbl->GetFunction(p,a,b) #else #define IDirect3DVertexShader9_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DVertexShader9_AddRef(p) (p)->AddRef() #define IDirect3DVertexShader9_Release(p) (p)->Release() #define IDirect3DVertexShader9_GetDevice(p,a) (p)->GetDevice(a) #define IDirect3DVertexShader9_GetFunction(p,a,b) (p)->GetFunction(a,b) #endif #undef INTERFACE #define INTERFACE IDirect3DPixelShader9 DECLARE_INTERFACE_(IDirect3DPixelShader9, IUnknown) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DPixelShader9 methods ***/ STDMETHOD(GetDevice)(THIS_ IDirect3DDevice9** ppDevice) PURE; STDMETHOD(GetFunction)(THIS_ void*,UINT* pSizeOfData) PURE; #ifdef D3D_DEBUG_INFO DWORD Version; LPCWSTR CreationCallStack; #endif }; typedef struct IDirect3DPixelShader9 *LPDIRECT3DPIXELSHADER9, *PDIRECT3DPIXELSHADER9; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirect3DPixelShader9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DPixelShader9_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DPixelShader9_Release(p) (p)->lpVtbl->Release(p) #define IDirect3DPixelShader9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) #define IDirect3DPixelShader9_GetFunction(p,a,b) (p)->lpVtbl->GetFunction(p,a,b) #else #define IDirect3DPixelShader9_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DPixelShader9_AddRef(p) (p)->AddRef() #define IDirect3DPixelShader9_Release(p) (p)->Release() #define IDirect3DPixelShader9_GetDevice(p,a) (p)->GetDevice(a) #define IDirect3DPixelShader9_GetFunction(p,a,b) (p)->GetFunction(a,b) #endif #undef INTERFACE #define INTERFACE IDirect3DBaseTexture9 DECLARE_INTERFACE_(IDirect3DBaseTexture9, IDirect3DResource9) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DResource9 methods ***/ STDMETHOD(GetDevice)(THIS_ IDirect3DDevice9** ppDevice) PURE; STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid,CONST void* pData,DWORD SizeOfData,DWORD Flags) PURE; STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid,void* pData,DWORD* pSizeOfData) PURE; STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE; STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE; STDMETHOD_(DWORD, GetPriority)(THIS) PURE; STDMETHOD_(void, PreLoad)(THIS) PURE; STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE; STDMETHOD_(DWORD, SetLOD)(THIS_ DWORD LODNew) PURE; STDMETHOD_(DWORD, GetLOD)(THIS) PURE; STDMETHOD_(DWORD, GetLevelCount)(THIS) PURE; STDMETHOD(SetAutoGenFilterType)(THIS_ D3DTEXTUREFILTERTYPE FilterType) PURE; STDMETHOD_(D3DTEXTUREFILTERTYPE, GetAutoGenFilterType)(THIS) PURE; STDMETHOD_(void, GenerateMipSubLevels)(THIS) PURE; }; typedef struct IDirect3DBaseTexture9 *LPDIRECT3DBASETEXTURE9, *PDIRECT3DBASETEXTURE9; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirect3DBaseTexture9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DBaseTexture9_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DBaseTexture9_Release(p) (p)->lpVtbl->Release(p) #define IDirect3DBaseTexture9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) #define IDirect3DBaseTexture9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d) #define IDirect3DBaseTexture9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c) #define IDirect3DBaseTexture9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a) #define IDirect3DBaseTexture9_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a) #define IDirect3DBaseTexture9_GetPriority(p) (p)->lpVtbl->GetPriority(p) #define IDirect3DBaseTexture9_PreLoad(p) (p)->lpVtbl->PreLoad(p) #define IDirect3DBaseTexture9_GetType(p) (p)->lpVtbl->GetType(p) #define IDirect3DBaseTexture9_SetLOD(p,a) (p)->lpVtbl->SetLOD(p,a) #define IDirect3DBaseTexture9_GetLOD(p) (p)->lpVtbl->GetLOD(p) #define IDirect3DBaseTexture9_GetLevelCount(p) (p)->lpVtbl->GetLevelCount(p) #define IDirect3DBaseTexture9_SetAutoGenFilterType(p,a) (p)->lpVtbl->SetAutoGenFilterType(p,a) #define IDirect3DBaseTexture9_GetAutoGenFilterType(p) (p)->lpVtbl->GetAutoGenFilterType(p) #define IDirect3DBaseTexture9_GenerateMipSubLevels(p) (p)->lpVtbl->GenerateMipSubLevels(p) #else #define IDirect3DBaseTexture9_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DBaseTexture9_AddRef(p) (p)->AddRef() #define IDirect3DBaseTexture9_Release(p) (p)->Release() #define IDirect3DBaseTexture9_GetDevice(p,a) (p)->GetDevice(a) #define IDirect3DBaseTexture9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d) #define IDirect3DBaseTexture9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c) #define IDirect3DBaseTexture9_FreePrivateData(p,a) (p)->FreePrivateData(a) #define IDirect3DBaseTexture9_SetPriority(p,a) (p)->SetPriority(a) #define IDirect3DBaseTexture9_GetPriority(p) (p)->GetPriority() #define IDirect3DBaseTexture9_PreLoad(p) (p)->PreLoad() #define IDirect3DBaseTexture9_GetType(p) (p)->GetType() #define IDirect3DBaseTexture9_SetLOD(p,a) (p)->SetLOD(a) #define IDirect3DBaseTexture9_GetLOD(p) (p)->GetLOD() #define IDirect3DBaseTexture9_GetLevelCount(p) (p)->GetLevelCount() #define IDirect3DBaseTexture9_SetAutoGenFilterType(p,a) (p)->SetAutoGenFilterType(a) #define IDirect3DBaseTexture9_GetAutoGenFilterType(p) (p)->GetAutoGenFilterType() #define IDirect3DBaseTexture9_GenerateMipSubLevels(p) (p)->GenerateMipSubLevels() #endif #undef INTERFACE #define INTERFACE IDirect3DTexture9 DECLARE_INTERFACE_(IDirect3DTexture9, IDirect3DBaseTexture9) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DBaseTexture9 methods ***/ STDMETHOD(GetDevice)(THIS_ IDirect3DDevice9** ppDevice) PURE; STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid,CONST void* pData,DWORD SizeOfData,DWORD Flags) PURE; STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid,void* pData,DWORD* pSizeOfData) PURE; STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE; STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE; STDMETHOD_(DWORD, GetPriority)(THIS) PURE; STDMETHOD_(void, PreLoad)(THIS) PURE; STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE; STDMETHOD_(DWORD, SetLOD)(THIS_ DWORD LODNew) PURE; STDMETHOD_(DWORD, GetLOD)(THIS) PURE; STDMETHOD_(DWORD, GetLevelCount)(THIS) PURE; STDMETHOD(SetAutoGenFilterType)(THIS_ D3DTEXTUREFILTERTYPE FilterType) PURE; STDMETHOD_(D3DTEXTUREFILTERTYPE, GetAutoGenFilterType)(THIS) PURE; STDMETHOD_(void, GenerateMipSubLevels)(THIS) PURE; STDMETHOD(GetLevelDesc)(THIS_ UINT Level,D3DSURFACE_DESC *pDesc) PURE; STDMETHOD(GetSurfaceLevel)(THIS_ UINT Level,IDirect3DSurface9** ppSurfaceLevel) PURE; STDMETHOD(LockRect)(THIS_ UINT Level,D3DLOCKED_RECT* pLockedRect,CONST RECT* pRect,DWORD Flags) PURE; STDMETHOD(UnlockRect)(THIS_ UINT Level) PURE; STDMETHOD(AddDirtyRect)(THIS_ CONST RECT* pDirtyRect) PURE; #ifdef D3D_DEBUG_INFO LPCWSTR Name; UINT Width; UINT Height; UINT Levels; DWORD Usage; D3DFORMAT Format; D3DPOOL Pool; DWORD Priority; DWORD LOD; D3DTEXTUREFILTERTYPE FilterType; UINT LockCount; LPCWSTR CreationCallStack; #endif }; typedef struct IDirect3DTexture9 *LPDIRECT3DTEXTURE9, *PDIRECT3DTEXTURE9; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirect3DTexture9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DTexture9_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DTexture9_Release(p) (p)->lpVtbl->Release(p) #define IDirect3DTexture9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) #define IDirect3DTexture9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d) #define IDirect3DTexture9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c) #define IDirect3DTexture9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a) #define IDirect3DTexture9_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a) #define IDirect3DTexture9_GetPriority(p) (p)->lpVtbl->GetPriority(p) #define IDirect3DTexture9_PreLoad(p) (p)->lpVtbl->PreLoad(p) #define IDirect3DTexture9_GetType(p) (p)->lpVtbl->GetType(p) #define IDirect3DTexture9_SetLOD(p,a) (p)->lpVtbl->SetLOD(p,a) #define IDirect3DTexture9_GetLOD(p) (p)->lpVtbl->GetLOD(p) #define IDirect3DTexture9_GetLevelCount(p) (p)->lpVtbl->GetLevelCount(p) #define IDirect3DTexture9_SetAutoGenFilterType(p,a) (p)->lpVtbl->SetAutoGenFilterType(p,a) #define IDirect3DTexture9_GetAutoGenFilterType(p) (p)->lpVtbl->GetAutoGenFilterType(p) #define IDirect3DTexture9_GenerateMipSubLevels(p) (p)->lpVtbl->GenerateMipSubLevels(p) #define IDirect3DTexture9_GetLevelDesc(p,a,b) (p)->lpVtbl->GetLevelDesc(p,a,b) #define IDirect3DTexture9_GetSurfaceLevel(p,a,b) (p)->lpVtbl->GetSurfaceLevel(p,a,b) #define IDirect3DTexture9_LockRect(p,a,b,c,d) (p)->lpVtbl->LockRect(p,a,b,c,d) #define IDirect3DTexture9_UnlockRect(p,a) (p)->lpVtbl->UnlockRect(p,a) #define IDirect3DTexture9_AddDirtyRect(p,a) (p)->lpVtbl->AddDirtyRect(p,a) #else #define IDirect3DTexture9_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DTexture9_AddRef(p) (p)->AddRef() #define IDirect3DTexture9_Release(p) (p)->Release() #define IDirect3DTexture9_GetDevice(p,a) (p)->GetDevice(a) #define IDirect3DTexture9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d) #define IDirect3DTexture9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c) #define IDirect3DTexture9_FreePrivateData(p,a) (p)->FreePrivateData(a) #define IDirect3DTexture9_SetPriority(p,a) (p)->SetPriority(a) #define IDirect3DTexture9_GetPriority(p) (p)->GetPriority() #define IDirect3DTexture9_PreLoad(p) (p)->PreLoad() #define IDirect3DTexture9_GetType(p) (p)->GetType() #define IDirect3DTexture9_SetLOD(p,a) (p)->SetLOD(a) #define IDirect3DTexture9_GetLOD(p) (p)->GetLOD() #define IDirect3DTexture9_GetLevelCount(p) (p)->GetLevelCount() #define IDirect3DTexture9_SetAutoGenFilterType(p,a) (p)->SetAutoGenFilterType(a) #define IDirect3DTexture9_GetAutoGenFilterType(p) (p)->GetAutoGenFilterType() #define IDirect3DTexture9_GenerateMipSubLevels(p) (p)->GenerateMipSubLevels() #define IDirect3DTexture9_GetLevelDesc(p,a,b) (p)->GetLevelDesc(a,b) #define IDirect3DTexture9_GetSurfaceLevel(p,a,b) (p)->GetSurfaceLevel(a,b) #define IDirect3DTexture9_LockRect(p,a,b,c,d) (p)->LockRect(a,b,c,d) #define IDirect3DTexture9_UnlockRect(p,a) (p)->UnlockRect(a) #define IDirect3DTexture9_AddDirtyRect(p,a) (p)->AddDirtyRect(a) #endif #undef INTERFACE #define INTERFACE IDirect3DVolumeTexture9 DECLARE_INTERFACE_(IDirect3DVolumeTexture9, IDirect3DBaseTexture9) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DBaseTexture9 methods ***/ STDMETHOD(GetDevice)(THIS_ IDirect3DDevice9** ppDevice) PURE; STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid,CONST void* pData,DWORD SizeOfData,DWORD Flags) PURE; STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid,void* pData,DWORD* pSizeOfData) PURE; STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE; STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE; STDMETHOD_(DWORD, GetPriority)(THIS) PURE; STDMETHOD_(void, PreLoad)(THIS) PURE; STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE; STDMETHOD_(DWORD, SetLOD)(THIS_ DWORD LODNew) PURE; STDMETHOD_(DWORD, GetLOD)(THIS) PURE; STDMETHOD_(DWORD, GetLevelCount)(THIS) PURE; STDMETHOD(SetAutoGenFilterType)(THIS_ D3DTEXTUREFILTERTYPE FilterType) PURE; STDMETHOD_(D3DTEXTUREFILTERTYPE, GetAutoGenFilterType)(THIS) PURE; STDMETHOD_(void, GenerateMipSubLevels)(THIS) PURE; STDMETHOD(GetLevelDesc)(THIS_ UINT Level,D3DVOLUME_DESC *pDesc) PURE; STDMETHOD(GetVolumeLevel)(THIS_ UINT Level,IDirect3DVolume9** ppVolumeLevel) PURE; STDMETHOD(LockBox)(THIS_ UINT Level,D3DLOCKED_BOX* pLockedVolume,CONST D3DBOX* pBox,DWORD Flags) PURE; STDMETHOD(UnlockBox)(THIS_ UINT Level) PURE; STDMETHOD(AddDirtyBox)(THIS_ CONST D3DBOX* pDirtyBox) PURE; #ifdef D3D_DEBUG_INFO LPCWSTR Name; UINT Width; UINT Height; UINT Depth; UINT Levels; DWORD Usage; D3DFORMAT Format; D3DPOOL Pool; DWORD Priority; DWORD LOD; D3DTEXTUREFILTERTYPE FilterType; UINT LockCount; LPCWSTR CreationCallStack; #endif }; typedef struct IDirect3DVolumeTexture9 *LPDIRECT3DVOLUMETEXTURE9, *PDIRECT3DVOLUMETEXTURE9; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirect3DVolumeTexture9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DVolumeTexture9_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DVolumeTexture9_Release(p) (p)->lpVtbl->Release(p) #define IDirect3DVolumeTexture9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) #define IDirect3DVolumeTexture9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d) #define IDirect3DVolumeTexture9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c) #define IDirect3DVolumeTexture9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a) #define IDirect3DVolumeTexture9_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a) #define IDirect3DVolumeTexture9_GetPriority(p) (p)->lpVtbl->GetPriority(p) #define IDirect3DVolumeTexture9_PreLoad(p) (p)->lpVtbl->PreLoad(p) #define IDirect3DVolumeTexture9_GetType(p) (p)->lpVtbl->GetType(p) #define IDirect3DVolumeTexture9_SetLOD(p,a) (p)->lpVtbl->SetLOD(p,a) #define IDirect3DVolumeTexture9_GetLOD(p) (p)->lpVtbl->GetLOD(p) #define IDirect3DVolumeTexture9_GetLevelCount(p) (p)->lpVtbl->GetLevelCount(p) #define IDirect3DVolumeTexture9_SetAutoGenFilterType(p,a) (p)->lpVtbl->SetAutoGenFilterType(p,a) #define IDirect3DVolumeTexture9_GetAutoGenFilterType(p) (p)->lpVtbl->GetAutoGenFilterType(p) #define IDirect3DVolumeTexture9_GenerateMipSubLevels(p) (p)->lpVtbl->GenerateMipSubLevels(p) #define IDirect3DVolumeTexture9_GetLevelDesc(p,a,b) (p)->lpVtbl->GetLevelDesc(p,a,b) #define IDirect3DVolumeTexture9_GetVolumeLevel(p,a,b) (p)->lpVtbl->GetVolumeLevel(p,a,b) #define IDirect3DVolumeTexture9_LockBox(p,a,b,c,d) (p)->lpVtbl->LockBox(p,a,b,c,d) #define IDirect3DVolumeTexture9_UnlockBox(p,a) (p)->lpVtbl->UnlockBox(p,a) #define IDirect3DVolumeTexture9_AddDirtyBox(p,a) (p)->lpVtbl->AddDirtyBox(p,a) #else #define IDirect3DVolumeTexture9_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DVolumeTexture9_AddRef(p) (p)->AddRef() #define IDirect3DVolumeTexture9_Release(p) (p)->Release() #define IDirect3DVolumeTexture9_GetDevice(p,a) (p)->GetDevice(a) #define IDirect3DVolumeTexture9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d) #define IDirect3DVolumeTexture9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c) #define IDirect3DVolumeTexture9_FreePrivateData(p,a) (p)->FreePrivateData(a) #define IDirect3DVolumeTexture9_SetPriority(p,a) (p)->SetPriority(a) #define IDirect3DVolumeTexture9_GetPriority(p) (p)->GetPriority() #define IDirect3DVolumeTexture9_PreLoad(p) (p)->PreLoad() #define IDirect3DVolumeTexture9_GetType(p) (p)->GetType() #define IDirect3DVolumeTexture9_SetLOD(p,a) (p)->SetLOD(a) #define IDirect3DVolumeTexture9_GetLOD(p) (p)->GetLOD() #define IDirect3DVolumeTexture9_GetLevelCount(p) (p)->GetLevelCount() #define IDirect3DVolumeTexture9_SetAutoGenFilterType(p,a) (p)->SetAutoGenFilterType(a) #define IDirect3DVolumeTexture9_GetAutoGenFilterType(p) (p)->GetAutoGenFilterType() #define IDirect3DVolumeTexture9_GenerateMipSubLevels(p) (p)->GenerateMipSubLevels() #define IDirect3DVolumeTexture9_GetLevelDesc(p,a,b) (p)->GetLevelDesc(a,b) #define IDirect3DVolumeTexture9_GetVolumeLevel(p,a,b) (p)->GetVolumeLevel(a,b) #define IDirect3DVolumeTexture9_LockBox(p,a,b,c,d) (p)->LockBox(a,b,c,d) #define IDirect3DVolumeTexture9_UnlockBox(p,a) (p)->UnlockBox(a) #define IDirect3DVolumeTexture9_AddDirtyBox(p,a) (p)->AddDirtyBox(a) #endif #undef INTERFACE #define INTERFACE IDirect3DCubeTexture9 DECLARE_INTERFACE_(IDirect3DCubeTexture9, IDirect3DBaseTexture9) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DBaseTexture9 methods ***/ STDMETHOD(GetDevice)(THIS_ IDirect3DDevice9** ppDevice) PURE; STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid,CONST void* pData,DWORD SizeOfData,DWORD Flags) PURE; STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid,void* pData,DWORD* pSizeOfData) PURE; STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE; STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE; STDMETHOD_(DWORD, GetPriority)(THIS) PURE; STDMETHOD_(void, PreLoad)(THIS) PURE; STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE; STDMETHOD_(DWORD, SetLOD)(THIS_ DWORD LODNew) PURE; STDMETHOD_(DWORD, GetLOD)(THIS) PURE; STDMETHOD_(DWORD, GetLevelCount)(THIS) PURE; STDMETHOD(SetAutoGenFilterType)(THIS_ D3DTEXTUREFILTERTYPE FilterType) PURE; STDMETHOD_(D3DTEXTUREFILTERTYPE, GetAutoGenFilterType)(THIS) PURE; STDMETHOD_(void, GenerateMipSubLevels)(THIS) PURE; STDMETHOD(GetLevelDesc)(THIS_ UINT Level,D3DSURFACE_DESC *pDesc) PURE; STDMETHOD(GetCubeMapSurface)(THIS_ D3DCUBEMAP_FACES FaceType,UINT Level,IDirect3DSurface9** ppCubeMapSurface) PURE; STDMETHOD(LockRect)(THIS_ D3DCUBEMAP_FACES FaceType,UINT Level,D3DLOCKED_RECT* pLockedRect,CONST RECT* pRect,DWORD Flags) PURE; STDMETHOD(UnlockRect)(THIS_ D3DCUBEMAP_FACES FaceType,UINT Level) PURE; STDMETHOD(AddDirtyRect)(THIS_ D3DCUBEMAP_FACES FaceType,CONST RECT* pDirtyRect) PURE; #ifdef D3D_DEBUG_INFO LPCWSTR Name; UINT Width; UINT Height; UINT Levels; DWORD Usage; D3DFORMAT Format; D3DPOOL Pool; DWORD Priority; DWORD LOD; D3DTEXTUREFILTERTYPE FilterType; UINT LockCount; LPCWSTR CreationCallStack; #endif }; typedef struct IDirect3DCubeTexture9 *LPDIRECT3DCUBETEXTURE9, *PDIRECT3DCUBETEXTURE9; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirect3DCubeTexture9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DCubeTexture9_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DCubeTexture9_Release(p) (p)->lpVtbl->Release(p) #define IDirect3DCubeTexture9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) #define IDirect3DCubeTexture9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d) #define IDirect3DCubeTexture9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c) #define IDirect3DCubeTexture9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a) #define IDirect3DCubeTexture9_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a) #define IDirect3DCubeTexture9_GetPriority(p) (p)->lpVtbl->GetPriority(p) #define IDirect3DCubeTexture9_PreLoad(p) (p)->lpVtbl->PreLoad(p) #define IDirect3DCubeTexture9_GetType(p) (p)->lpVtbl->GetType(p) #define IDirect3DCubeTexture9_SetLOD(p,a) (p)->lpVtbl->SetLOD(p,a) #define IDirect3DCubeTexture9_GetLOD(p) (p)->lpVtbl->GetLOD(p) #define IDirect3DCubeTexture9_GetLevelCount(p) (p)->lpVtbl->GetLevelCount(p) #define IDirect3DCubeTexture9_SetAutoGenFilterType(p,a) (p)->lpVtbl->SetAutoGenFilterType(p,a) #define IDirect3DCubeTexture9_GetAutoGenFilterType(p) (p)->lpVtbl->GetAutoGenFilterType(p) #define IDirect3DCubeTexture9_GenerateMipSubLevels(p) (p)->lpVtbl->GenerateMipSubLevels(p) #define IDirect3DCubeTexture9_GetLevelDesc(p,a,b) (p)->lpVtbl->GetLevelDesc(p,a,b) #define IDirect3DCubeTexture9_GetCubeMapSurface(p,a,b,c) (p)->lpVtbl->GetCubeMapSurface(p,a,b,c) #define IDirect3DCubeTexture9_LockRect(p,a,b,c,d,e) (p)->lpVtbl->LockRect(p,a,b,c,d,e) #define IDirect3DCubeTexture9_UnlockRect(p,a,b) (p)->lpVtbl->UnlockRect(p,a,b) #define IDirect3DCubeTexture9_AddDirtyRect(p,a,b) (p)->lpVtbl->AddDirtyRect(p,a,b) #else #define IDirect3DCubeTexture9_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DCubeTexture9_AddRef(p) (p)->AddRef() #define IDirect3DCubeTexture9_Release(p) (p)->Release() #define IDirect3DCubeTexture9_GetDevice(p,a) (p)->GetDevice(a) #define IDirect3DCubeTexture9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d) #define IDirect3DCubeTexture9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c) #define IDirect3DCubeTexture9_FreePrivateData(p,a) (p)->FreePrivateData(a) #define IDirect3DCubeTexture9_SetPriority(p,a) (p)->SetPriority(a) #define IDirect3DCubeTexture9_GetPriority(p) (p)->GetPriority() #define IDirect3DCubeTexture9_PreLoad(p) (p)->PreLoad() #define IDirect3DCubeTexture9_GetType(p) (p)->GetType() #define IDirect3DCubeTexture9_SetLOD(p,a) (p)->SetLOD(a) #define IDirect3DCubeTexture9_GetLOD(p) (p)->GetLOD() #define IDirect3DCubeTexture9_GetLevelCount(p) (p)->GetLevelCount() #define IDirect3DCubeTexture9_SetAutoGenFilterType(p,a) (p)->SetAutoGenFilterType(a) #define IDirect3DCubeTexture9_GetAutoGenFilterType(p) (p)->GetAutoGenFilterType() #define IDirect3DCubeTexture9_GenerateMipSubLevels(p) (p)->GenerateMipSubLevels() #define IDirect3DCubeTexture9_GetLevelDesc(p,a,b) (p)->GetLevelDesc(a,b) #define IDirect3DCubeTexture9_GetCubeMapSurface(p,a,b,c) (p)->GetCubeMapSurface(a,b,c) #define IDirect3DCubeTexture9_LockRect(p,a,b,c,d,e) (p)->LockRect(a,b,c,d,e) #define IDirect3DCubeTexture9_UnlockRect(p,a,b) (p)->UnlockRect(a,b) #define IDirect3DCubeTexture9_AddDirtyRect(p,a,b) (p)->AddDirtyRect(a,b) #endif #undef INTERFACE #define INTERFACE IDirect3DVertexBuffer9 DECLARE_INTERFACE_(IDirect3DVertexBuffer9, IDirect3DResource9) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DResource9 methods ***/ STDMETHOD(GetDevice)(THIS_ IDirect3DDevice9** ppDevice) PURE; STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid,CONST void* pData,DWORD SizeOfData,DWORD Flags) PURE; STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid,void* pData,DWORD* pSizeOfData) PURE; STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE; STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE; STDMETHOD_(DWORD, GetPriority)(THIS) PURE; STDMETHOD_(void, PreLoad)(THIS) PURE; STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE; STDMETHOD(Lock)(THIS_ UINT OffsetToLock,UINT SizeToLock,void** ppbData,DWORD Flags) PURE; STDMETHOD(Unlock)(THIS) PURE; STDMETHOD(GetDesc)(THIS_ D3DVERTEXBUFFER_DESC *pDesc) PURE; #ifdef D3D_DEBUG_INFO LPCWSTR Name; UINT Length; DWORD Usage; DWORD FVF; D3DPOOL Pool; DWORD Priority; UINT LockCount; LPCWSTR CreationCallStack; #endif }; typedef struct IDirect3DVertexBuffer9 *LPDIRECT3DVERTEXBUFFER9, *PDIRECT3DVERTEXBUFFER9; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirect3DVertexBuffer9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DVertexBuffer9_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DVertexBuffer9_Release(p) (p)->lpVtbl->Release(p) #define IDirect3DVertexBuffer9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) #define IDirect3DVertexBuffer9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d) #define IDirect3DVertexBuffer9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c) #define IDirect3DVertexBuffer9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a) #define IDirect3DVertexBuffer9_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a) #define IDirect3DVertexBuffer9_GetPriority(p) (p)->lpVtbl->GetPriority(p) #define IDirect3DVertexBuffer9_PreLoad(p) (p)->lpVtbl->PreLoad(p) #define IDirect3DVertexBuffer9_GetType(p) (p)->lpVtbl->GetType(p) #define IDirect3DVertexBuffer9_Lock(p,a,b,c,d) (p)->lpVtbl->Lock(p,a,b,c,d) #define IDirect3DVertexBuffer9_Unlock(p) (p)->lpVtbl->Unlock(p) #define IDirect3DVertexBuffer9_GetDesc(p,a) (p)->lpVtbl->GetDesc(p,a) #else #define IDirect3DVertexBuffer9_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DVertexBuffer9_AddRef(p) (p)->AddRef() #define IDirect3DVertexBuffer9_Release(p) (p)->Release() #define IDirect3DVertexBuffer9_GetDevice(p,a) (p)->GetDevice(a) #define IDirect3DVertexBuffer9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d) #define IDirect3DVertexBuffer9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c) #define IDirect3DVertexBuffer9_FreePrivateData(p,a) (p)->FreePrivateData(a) #define IDirect3DVertexBuffer9_SetPriority(p,a) (p)->SetPriority(a) #define IDirect3DVertexBuffer9_GetPriority(p) (p)->GetPriority() #define IDirect3DVertexBuffer9_PreLoad(p) (p)->PreLoad() #define IDirect3DVertexBuffer9_GetType(p) (p)->GetType() #define IDirect3DVertexBuffer9_Lock(p,a,b,c,d) (p)->Lock(a,b,c,d) #define IDirect3DVertexBuffer9_Unlock(p) (p)->Unlock() #define IDirect3DVertexBuffer9_GetDesc(p,a) (p)->GetDesc(a) #endif #undef INTERFACE #define INTERFACE IDirect3DIndexBuffer9 DECLARE_INTERFACE_(IDirect3DIndexBuffer9, IDirect3DResource9) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DResource9 methods ***/ STDMETHOD(GetDevice)(THIS_ IDirect3DDevice9** ppDevice) PURE; STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid,CONST void* pData,DWORD SizeOfData,DWORD Flags) PURE; STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid,void* pData,DWORD* pSizeOfData) PURE; STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE; STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE; STDMETHOD_(DWORD, GetPriority)(THIS) PURE; STDMETHOD_(void, PreLoad)(THIS) PURE; STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE; STDMETHOD(Lock)(THIS_ UINT OffsetToLock,UINT SizeToLock,void** ppbData,DWORD Flags) PURE; STDMETHOD(Unlock)(THIS) PURE; STDMETHOD(GetDesc)(THIS_ D3DINDEXBUFFER_DESC *pDesc) PURE; #ifdef D3D_DEBUG_INFO LPCWSTR Name; UINT Length; DWORD Usage; D3DFORMAT Format; D3DPOOL Pool; DWORD Priority; UINT LockCount; LPCWSTR CreationCallStack; #endif }; typedef struct IDirect3DIndexBuffer9 *LPDIRECT3DINDEXBUFFER9, *PDIRECT3DINDEXBUFFER9; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirect3DIndexBuffer9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DIndexBuffer9_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DIndexBuffer9_Release(p) (p)->lpVtbl->Release(p) #define IDirect3DIndexBuffer9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) #define IDirect3DIndexBuffer9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d) #define IDirect3DIndexBuffer9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c) #define IDirect3DIndexBuffer9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a) #define IDirect3DIndexBuffer9_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a) #define IDirect3DIndexBuffer9_GetPriority(p) (p)->lpVtbl->GetPriority(p) #define IDirect3DIndexBuffer9_PreLoad(p) (p)->lpVtbl->PreLoad(p) #define IDirect3DIndexBuffer9_GetType(p) (p)->lpVtbl->GetType(p) #define IDirect3DIndexBuffer9_Lock(p,a,b,c,d) (p)->lpVtbl->Lock(p,a,b,c,d) #define IDirect3DIndexBuffer9_Unlock(p) (p)->lpVtbl->Unlock(p) #define IDirect3DIndexBuffer9_GetDesc(p,a) (p)->lpVtbl->GetDesc(p,a) #else #define IDirect3DIndexBuffer9_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DIndexBuffer9_AddRef(p) (p)->AddRef() #define IDirect3DIndexBuffer9_Release(p) (p)->Release() #define IDirect3DIndexBuffer9_GetDevice(p,a) (p)->GetDevice(a) #define IDirect3DIndexBuffer9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d) #define IDirect3DIndexBuffer9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c) #define IDirect3DIndexBuffer9_FreePrivateData(p,a) (p)->FreePrivateData(a) #define IDirect3DIndexBuffer9_SetPriority(p,a) (p)->SetPriority(a) #define IDirect3DIndexBuffer9_GetPriority(p) (p)->GetPriority() #define IDirect3DIndexBuffer9_PreLoad(p) (p)->PreLoad() #define IDirect3DIndexBuffer9_GetType(p) (p)->GetType() #define IDirect3DIndexBuffer9_Lock(p,a,b,c,d) (p)->Lock(a,b,c,d) #define IDirect3DIndexBuffer9_Unlock(p) (p)->Unlock() #define IDirect3DIndexBuffer9_GetDesc(p,a) (p)->GetDesc(a) #endif #undef INTERFACE #define INTERFACE IDirect3DSurface9 DECLARE_INTERFACE_(IDirect3DSurface9, IDirect3DResource9) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DResource9 methods ***/ STDMETHOD(GetDevice)(THIS_ IDirect3DDevice9** ppDevice) PURE; STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid,CONST void* pData,DWORD SizeOfData,DWORD Flags) PURE; STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid,void* pData,DWORD* pSizeOfData) PURE; STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE; STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE; STDMETHOD_(DWORD, GetPriority)(THIS) PURE; STDMETHOD_(void, PreLoad)(THIS) PURE; STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE; STDMETHOD(GetContainer)(THIS_ REFIID riid,void** ppContainer) PURE; STDMETHOD(GetDesc)(THIS_ D3DSURFACE_DESC *pDesc) PURE; STDMETHOD(LockRect)(THIS_ D3DLOCKED_RECT* pLockedRect,CONST RECT* pRect,DWORD Flags) PURE; STDMETHOD(UnlockRect)(THIS) PURE; STDMETHOD(GetDC)(THIS_ HDC *phdc) PURE; STDMETHOD(ReleaseDC)(THIS_ HDC hdc) PURE; #ifdef D3D_DEBUG_INFO LPCWSTR Name; UINT Width; UINT Height; DWORD Usage; D3DFORMAT Format; D3DPOOL Pool; D3DMULTISAMPLE_TYPE MultiSampleType; DWORD MultiSampleQuality; DWORD Priority; UINT LockCount; UINT DCCount; LPCWSTR CreationCallStack; #endif }; typedef struct IDirect3DSurface9 *LPDIRECT3DSURFACE9, *PDIRECT3DSURFACE9; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirect3DSurface9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DSurface9_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DSurface9_Release(p) (p)->lpVtbl->Release(p) #define IDirect3DSurface9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) #define IDirect3DSurface9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d) #define IDirect3DSurface9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c) #define IDirect3DSurface9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a) #define IDirect3DSurface9_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a) #define IDirect3DSurface9_GetPriority(p) (p)->lpVtbl->GetPriority(p) #define IDirect3DSurface9_PreLoad(p) (p)->lpVtbl->PreLoad(p) #define IDirect3DSurface9_GetType(p) (p)->lpVtbl->GetType(p) #define IDirect3DSurface9_GetContainer(p,a,b) (p)->lpVtbl->GetContainer(p,a,b) #define IDirect3DSurface9_GetDesc(p,a) (p)->lpVtbl->GetDesc(p,a) #define IDirect3DSurface9_LockRect(p,a,b,c) (p)->lpVtbl->LockRect(p,a,b,c) #define IDirect3DSurface9_UnlockRect(p) (p)->lpVtbl->UnlockRect(p) #define IDirect3DSurface9_GetDC(p,a) (p)->lpVtbl->GetDC(p,a) #define IDirect3DSurface9_ReleaseDC(p,a) (p)->lpVtbl->ReleaseDC(p,a) #else #define IDirect3DSurface9_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DSurface9_AddRef(p) (p)->AddRef() #define IDirect3DSurface9_Release(p) (p)->Release() #define IDirect3DSurface9_GetDevice(p,a) (p)->GetDevice(a) #define IDirect3DSurface9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d) #define IDirect3DSurface9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c) #define IDirect3DSurface9_FreePrivateData(p,a) (p)->FreePrivateData(a) #define IDirect3DSurface9_SetPriority(p,a) (p)->SetPriority(a) #define IDirect3DSurface9_GetPriority(p) (p)->GetPriority() #define IDirect3DSurface9_PreLoad(p) (p)->PreLoad() #define IDirect3DSurface9_GetType(p) (p)->GetType() #define IDirect3DSurface9_GetContainer(p,a,b) (p)->GetContainer(a,b) #define IDirect3DSurface9_GetDesc(p,a) (p)->GetDesc(a) #define IDirect3DSurface9_LockRect(p,a,b,c) (p)->LockRect(a,b,c) #define IDirect3DSurface9_UnlockRect(p) (p)->UnlockRect() #define IDirect3DSurface9_GetDC(p,a) (p)->GetDC(a) #define IDirect3DSurface9_ReleaseDC(p,a) (p)->ReleaseDC(a) #endif #undef INTERFACE #define INTERFACE IDirect3DVolume9 DECLARE_INTERFACE_(IDirect3DVolume9, IUnknown) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DVolume9 methods ***/ STDMETHOD(GetDevice)(THIS_ IDirect3DDevice9** ppDevice) PURE; STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid,CONST void* pData,DWORD SizeOfData,DWORD Flags) PURE; STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid,void* pData,DWORD* pSizeOfData) PURE; STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE; STDMETHOD(GetContainer)(THIS_ REFIID riid,void** ppContainer) PURE; STDMETHOD(GetDesc)(THIS_ D3DVOLUME_DESC *pDesc) PURE; STDMETHOD(LockBox)(THIS_ D3DLOCKED_BOX * pLockedVolume,CONST D3DBOX* pBox,DWORD Flags) PURE; STDMETHOD(UnlockBox)(THIS) PURE; #ifdef D3D_DEBUG_INFO LPCWSTR Name; UINT Width; UINT Height; UINT Depth; DWORD Usage; D3DFORMAT Format; D3DPOOL Pool; UINT LockCount; LPCWSTR CreationCallStack; #endif }; typedef struct IDirect3DVolume9 *LPDIRECT3DVOLUME9, *PDIRECT3DVOLUME9; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirect3DVolume9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DVolume9_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DVolume9_Release(p) (p)->lpVtbl->Release(p) #define IDirect3DVolume9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) #define IDirect3DVolume9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d) #define IDirect3DVolume9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c) #define IDirect3DVolume9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a) #define IDirect3DVolume9_GetContainer(p,a,b) (p)->lpVtbl->GetContainer(p,a,b) #define IDirect3DVolume9_GetDesc(p,a) (p)->lpVtbl->GetDesc(p,a) #define IDirect3DVolume9_LockBox(p,a,b,c) (p)->lpVtbl->LockBox(p,a,b,c) #define IDirect3DVolume9_UnlockBox(p) (p)->lpVtbl->UnlockBox(p) #else #define IDirect3DVolume9_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DVolume9_AddRef(p) (p)->AddRef() #define IDirect3DVolume9_Release(p) (p)->Release() #define IDirect3DVolume9_GetDevice(p,a) (p)->GetDevice(a) #define IDirect3DVolume9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d) #define IDirect3DVolume9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c) #define IDirect3DVolume9_FreePrivateData(p,a) (p)->FreePrivateData(a) #define IDirect3DVolume9_GetContainer(p,a,b) (p)->GetContainer(a,b) #define IDirect3DVolume9_GetDesc(p,a) (p)->GetDesc(a) #define IDirect3DVolume9_LockBox(p,a,b,c) (p)->LockBox(a,b,c) #define IDirect3DVolume9_UnlockBox(p) (p)->UnlockBox() #endif #undef INTERFACE #define INTERFACE IDirect3DQuery9 DECLARE_INTERFACE_(IDirect3DQuery9, IUnknown) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DQuery9 methods ***/ STDMETHOD(GetDevice)(THIS_ IDirect3DDevice9** ppDevice) PURE; STDMETHOD_(D3DQUERYTYPE, GetType)(THIS) PURE; STDMETHOD_(DWORD, GetDataSize)(THIS) PURE; STDMETHOD(Issue)(THIS_ DWORD dwIssueFlags) PURE; STDMETHOD(GetData)(THIS_ void* pData,DWORD dwSize,DWORD dwGetDataFlags) PURE; #ifdef D3D_DEBUG_INFO D3DQUERYTYPE Type; DWORD DataSize; LPCWSTR CreationCallStack; #endif }; typedef struct IDirect3DQuery9 *LPDIRECT3DQUERY9, *PDIRECT3DQUERY9; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirect3DQuery9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DQuery9_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DQuery9_Release(p) (p)->lpVtbl->Release(p) #define IDirect3DQuery9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) #define IDirect3DQuery9_GetType(p) (p)->lpVtbl->GetType(p) #define IDirect3DQuery9_GetDataSize(p) (p)->lpVtbl->GetDataSize(p) #define IDirect3DQuery9_Issue(p,a) (p)->lpVtbl->Issue(p,a) #define IDirect3DQuery9_GetData(p,a,b,c) (p)->lpVtbl->GetData(p,a,b,c) #else #define IDirect3DQuery9_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DQuery9_AddRef(p) (p)->AddRef() #define IDirect3DQuery9_Release(p) (p)->Release() #define IDirect3DQuery9_GetDevice(p,a) (p)->GetDevice(a) #define IDirect3DQuery9_GetType(p) (p)->GetType() #define IDirect3DQuery9_GetDataSize(p) (p)->GetDataSize() #define IDirect3DQuery9_Issue(p,a) (p)->Issue(a) #define IDirect3DQuery9_GetData(p,a,b,c) (p)->GetData(a,b,c) #endif /**************************************************************************** * Flags for SetPrivateData method on all D3D9 interfaces * * The passed pointer is an IUnknown ptr. The SizeOfData argument to SetPrivateData * must be set to sizeof(IUnknown*). Direct3D will call AddRef through this * pointer and Release when the private data is destroyed. The data will be * destroyed when another SetPrivateData with the same GUID is set, when * FreePrivateData is called, or when the D3D9 object is freed. ****************************************************************************/ #define D3DSPD_IUNKNOWN 0x00000001L /**************************************************************************** * * Flags for IDirect3D9::CreateDevice's BehaviorFlags * ****************************************************************************/ #define D3DCREATE_FPU_PRESERVE 0x00000002L #define D3DCREATE_MULTITHREADED 0x00000004L #define D3DCREATE_PUREDEVICE 0x00000010L #define D3DCREATE_SOFTWARE_VERTEXPROCESSING 0x00000020L #define D3DCREATE_HARDWARE_VERTEXPROCESSING 0x00000040L #define D3DCREATE_MIXED_VERTEXPROCESSING 0x00000080L #define D3DCREATE_DISABLE_DRIVER_MANAGEMENT 0x00000100L #define D3DCREATE_ADAPTERGROUP_DEVICE 0x00000200L #define D3DCREATE_DISABLE_DRIVER_MANAGEMENT_EX 0x00000400L // This flag causes the D3D runtime not to alter the focus // window in any way. Use with caution- the burden of supporting // focus management events (alt-tab, etc.) falls on the // application, and appropriate responses (switching display // mode, etc.) should be coded. #define D3DCREATE_NOWINDOWCHANGES 0x00000800L /* D3D9Ex only -- */ #if !defined(D3D_DISABLE_9EX) // Disable multithreading for software vertex processing #define D3DCREATE_DISABLE_PSGP_THREADING 0x00002000L // This flag enables present statistics on device. #define D3DCREATE_ENABLE_PRESENTSTATS 0x00004000L // This flag disables printscreen support in the runtime for this device #define D3DCREATE_DISABLE_PRINTSCREEN 0x00008000L #define D3DCREATE_SCREENSAVER 0x10000000L #endif // !D3D_DISABLE_9EX /* -- D3D9Ex only */ /**************************************************************************** * * Parameter for IDirect3D9::CreateDevice's Adapter argument * ****************************************************************************/ #define D3DADAPTER_DEFAULT 0 /**************************************************************************** * * Flags for IDirect3D9::EnumAdapters * ****************************************************************************/ /* * The D3DENUM_WHQL_LEVEL value has been retired for 9Ex and future versions, * but it needs to be defined here for compatibility with DX9 and earlier versions. * See the DirectX SDK for sample code on discovering driver signatures. */ #define D3DENUM_WHQL_LEVEL 0x00000002L /* D3D9Ex only -- */ #if !defined(D3D_DISABLE_9EX) /* NO_DRIVERVERSION will not fill out the DriverVersion field, nor will the DriverVersion be incorporated into the DeviceIdentifier GUID. WINNT only */ #define D3DENUM_NO_DRIVERVERSION 0x00000004L #endif // !D3D_DISABLE_9EX /* -- D3D9Ex only */ /**************************************************************************** * * Maximum number of back-buffers supported in DX9 * ****************************************************************************/ #define D3DPRESENT_BACK_BUFFERS_MAX 3L /* D3D9Ex only -- */ #if !defined(D3D_DISABLE_9EX) /**************************************************************************** * * Maximum number of back-buffers supported when apps use CreateDeviceEx * ****************************************************************************/ #define D3DPRESENT_BACK_BUFFERS_MAX_EX 30L #endif // !D3D_DISABLE_9EX /* -- D3D9Ex only */ /**************************************************************************** * * Flags for IDirect3DDevice9::SetGammaRamp * ****************************************************************************/ #define D3DSGR_NO_CALIBRATION 0x00000000L #define D3DSGR_CALIBRATE 0x00000001L /**************************************************************************** * * Flags for IDirect3DDevice9::SetCursorPosition * ****************************************************************************/ #define D3DCURSOR_IMMEDIATE_UPDATE 0x00000001L /**************************************************************************** * * Flags for IDirect3DSwapChain9::Present * ****************************************************************************/ #define D3DPRESENT_DONOTWAIT 0x00000001L #define D3DPRESENT_LINEAR_CONTENT 0x00000002L /* D3D9Ex only -- */ #if !defined(D3D_DISABLE_9EX) #define D3DPRESENT_DONOTFLIP 0x00000004L #define D3DPRESENT_FLIPRESTART 0x00000008L #define D3DPRESENT_VIDEO_RESTRICT_TO_MONITOR 0x00000010L #define D3DPRESENT_UPDATEOVERLAYONLY 0x00000020L #define D3DPRESENT_HIDEOVERLAY 0x00000040L #define D3DPRESENT_UPDATECOLORKEY 0x00000080L #define D3DPRESENT_FORCEIMMEDIATE 0x00000100L #endif // !D3D_DISABLE_9EX /* -- D3D9Ex only */ /**************************************************************************** * * Flags for DrawPrimitive/DrawIndexedPrimitive * Also valid for Begin/BeginIndexed * Also valid for VertexBuffer::CreateVertexBuffer ****************************************************************************/ /* * DirectDraw error codes */ #define _FACD3D 0x876 #define MAKE_D3DHRESULT( code ) MAKE_HRESULT( 1, _FACD3D, code ) #define MAKE_D3DSTATUS( code ) MAKE_HRESULT( 0, _FACD3D, code ) /* * Direct3D Errors */ #define D3D_OK S_OK #define D3DERR_WRONGTEXTUREFORMAT MAKE_D3DHRESULT(2072) #define D3DERR_UNSUPPORTEDCOLOROPERATION MAKE_D3DHRESULT(2073) #define D3DERR_UNSUPPORTEDCOLORARG MAKE_D3DHRESULT(2074) #define D3DERR_UNSUPPORTEDALPHAOPERATION MAKE_D3DHRESULT(2075) #define D3DERR_UNSUPPORTEDALPHAARG MAKE_D3DHRESULT(2076) #define D3DERR_TOOMANYOPERATIONS MAKE_D3DHRESULT(2077) #define D3DERR_CONFLICTINGTEXTUREFILTER MAKE_D3DHRESULT(2078) #define D3DERR_UNSUPPORTEDFACTORVALUE MAKE_D3DHRESULT(2079) #define D3DERR_CONFLICTINGRENDERSTATE MAKE_D3DHRESULT(2081) #define D3DERR_UNSUPPORTEDTEXTUREFILTER MAKE_D3DHRESULT(2082) #define D3DERR_CONFLICTINGTEXTUREPALETTE MAKE_D3DHRESULT(2086) #define D3DERR_DRIVERINTERNALERROR MAKE_D3DHRESULT(2087) #define D3DERR_NOTFOUND MAKE_D3DHRESULT(2150) #define D3DERR_MOREDATA MAKE_D3DHRESULT(2151) #define D3DERR_DEVICELOST MAKE_D3DHRESULT(2152) #define D3DERR_DEVICENOTRESET MAKE_D3DHRESULT(2153) #define D3DERR_NOTAVAILABLE MAKE_D3DHRESULT(2154) #define D3DERR_OUTOFVIDEOMEMORY MAKE_D3DHRESULT(380) #define D3DERR_INVALIDDEVICE MAKE_D3DHRESULT(2155) #define D3DERR_INVALIDCALL MAKE_D3DHRESULT(2156) #define D3DERR_DRIVERINVALIDCALL MAKE_D3DHRESULT(2157) #define D3DERR_WASSTILLDRAWING MAKE_D3DHRESULT(540) #define D3DOK_NOAUTOGEN MAKE_D3DSTATUS(2159) /* D3D9Ex only -- */ #if !defined(D3D_DISABLE_9EX) #define D3DERR_DEVICEREMOVED MAKE_D3DHRESULT(2160) #define S_NOT_RESIDENT MAKE_D3DSTATUS(2165) #define S_RESIDENT_IN_SHARED_MEMORY MAKE_D3DSTATUS(2166) #define S_PRESENT_MODE_CHANGED MAKE_D3DSTATUS(2167) #define S_PRESENT_OCCLUDED MAKE_D3DSTATUS(2168) #define D3DERR_DEVICEHUNG MAKE_D3DHRESULT(2164) #define D3DERR_UNSUPPORTEDOVERLAY MAKE_D3DHRESULT(2171) #define D3DERR_UNSUPPORTEDOVERLAYFORMAT MAKE_D3DHRESULT(2172) #define D3DERR_CANNOTPROTECTCONTENT MAKE_D3DHRESULT(2173) #define D3DERR_UNSUPPORTEDCRYPTO MAKE_D3DHRESULT(2174) #define D3DERR_PRESENT_STATISTICS_DISJOINT MAKE_D3DHRESULT(2180) /********************* /* D3D9Ex interfaces /*********************/ HRESULT WINAPI Direct3DCreate9Ex(UINT SDKVersion, IDirect3D9Ex**); #undef INTERFACE #define INTERFACE IDirect3D9Ex DECLARE_INTERFACE_(IDirect3D9Ex, IDirect3D9) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3D9 methods ***/ STDMETHOD_(UINT, GetAdapterCount)(THIS) PURE; STDMETHOD(GetAdapterIdentifier)(THIS_ UINT Adapter,DWORD Flags,D3DADAPTER_IDENTIFIER9* pIdentifier) PURE; STDMETHOD_(UINT, GetAdapterModeCount)(THIS_ UINT Adapter,D3DFORMAT Format) PURE; STDMETHOD(EnumAdapterModes)(THIS_ UINT Adapter,D3DFORMAT Format,UINT Mode,D3DDISPLAYMODE* pMode) PURE; STDMETHOD(GetAdapterDisplayMode)(THIS_ UINT Adapter,D3DDISPLAYMODE* pMode) PURE; STDMETHOD(CheckDeviceType)(THIS_ UINT Adapter,D3DDEVTYPE DevType,D3DFORMAT AdapterFormat,D3DFORMAT BackBufferFormat,BOOL bWindowed) PURE; STDMETHOD(CheckDeviceFormat)(THIS_ UINT Adapter,D3DDEVTYPE DeviceType,D3DFORMAT AdapterFormat,DWORD Usage,D3DRESOURCETYPE RType,D3DFORMAT CheckFormat) PURE; STDMETHOD(CheckDeviceMultiSampleType)(THIS_ UINT Adapter,D3DDEVTYPE DeviceType,D3DFORMAT SurfaceFormat,BOOL Windowed,D3DMULTISAMPLE_TYPE MultiSampleType,DWORD* pQualityLevels) PURE; STDMETHOD(CheckDepthStencilMatch)(THIS_ UINT Adapter,D3DDEVTYPE DeviceType,D3DFORMAT AdapterFormat,D3DFORMAT RenderTargetFormat,D3DFORMAT DepthStencilFormat) PURE; STDMETHOD(CheckDeviceFormatConversion)(THIS_ UINT Adapter,D3DDEVTYPE DeviceType,D3DFORMAT SourceFormat,D3DFORMAT TargetFormat) PURE; STDMETHOD(GetDeviceCaps)(THIS_ UINT Adapter,D3DDEVTYPE DeviceType,D3DCAPS9* pCaps) PURE; STDMETHOD_(HMONITOR, GetAdapterMonitor)(THIS_ UINT Adapter) PURE; STDMETHOD(CreateDevice)(THIS_ UINT Adapter,D3DDEVTYPE DeviceType,HWND hFocusWindow,DWORD BehaviorFlags,D3DPRESENT_PARAMETERS* pPresentationParameters,IDirect3DDevice9** ppReturnedDeviceInterface) PURE; STDMETHOD_(UINT, GetAdapterModeCountEx)(THIS_ UINT Adapter,CONST D3DDISPLAYMODEFILTER* pFilter ) PURE; STDMETHOD(EnumAdapterModesEx)(THIS_ UINT Adapter,CONST D3DDISPLAYMODEFILTER* pFilter,UINT Mode,D3DDISPLAYMODEEX* pMode) PURE; STDMETHOD(GetAdapterDisplayModeEx)(THIS_ UINT Adapter,D3DDISPLAYMODEEX* pMode,D3DDISPLAYROTATION* pRotation) PURE; STDMETHOD(CreateDeviceEx)(THIS_ UINT Adapter,D3DDEVTYPE DeviceType,HWND hFocusWindow,DWORD BehaviorFlags,D3DPRESENT_PARAMETERS* pPresentationParameters,D3DDISPLAYMODEEX* pFullscreenDisplayMode,IDirect3DDevice9Ex** ppReturnedDeviceInterface) PURE; STDMETHOD(GetAdapterLUID)(THIS_ UINT Adapter,LUID * pLUID) PURE; }; typedef struct IDirect3D9Ex *LPDIRECT3D9EX, *PDIRECT3D9EX; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirect3D9Ex_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3D9Ex_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3D9Ex_Release(p) (p)->lpVtbl->Release(p) #define IDirect3D9Ex_GetAdapterCount(p) (p)->lpVtbl->GetAdapterCount(p) #define IDirect3D9Ex_GetAdapterIdentifier(p,a,b,c) (p)->lpVtbl->GetAdapterIdentifier(p,a,b,c) #define IDirect3D9Ex_GetAdapterModeCount(p,a,b) (p)->lpVtbl->GetAdapterModeCount(p,a,b) #define IDirect3D9Ex_EnumAdapterModes(p,a,b,c,d) (p)->lpVtbl->EnumAdapterModes(p,a,b,c,d) #define IDirect3D9Ex_GetAdapterDisplayMode(p,a,b) (p)->lpVtbl->GetAdapterDisplayMode(p,a,b) #define IDirect3D9Ex_CheckDeviceType(p,a,b,c,d,e) (p)->lpVtbl->CheckDeviceType(p,a,b,c,d,e) #define IDirect3D9Ex_CheckDeviceFormat(p,a,b,c,d,e,f) (p)->lpVtbl->CheckDeviceFormat(p,a,b,c,d,e,f) #define IDirect3D9Ex_CheckDeviceMultiSampleType(p,a,b,c,d,e,f) (p)->lpVtbl->CheckDeviceMultiSampleType(p,a,b,c,d,e,f) #define IDirect3D9Ex_CheckDepthStencilMatch(p,a,b,c,d,e) (p)->lpVtbl->CheckDepthStencilMatch(p,a,b,c,d,e) #define IDirect3D9Ex_CheckDeviceFormatConversion(p,a,b,c,d) (p)->lpVtbl->CheckDeviceFormatConversion(p,a,b,c,d) #define IDirect3D9Ex_GetDeviceCaps(p,a,b,c) (p)->lpVtbl->GetDeviceCaps(p,a,b,c) #define IDirect3D9Ex_GetAdapterMonitor(p,a) (p)->lpVtbl->GetAdapterMonitor(p,a) #define IDirect3D9Ex_CreateDevice(p,a,b,c,d,e,f) (p)->lpVtbl->CreateDevice(p,a,b,c,d,e,f) #define IDirect3D9Ex_GetAdapterModeCountEx(p,a,b) (p)->lpVtbl->GetAdapterModeCountEx(p,a,b) #define IDirect3D9Ex_EnumAdapterModesEx(p,a,b,c,d) (p)->lpVtbl->EnumAdapterModesEx(p,a,b,c,d) #define IDirect3D9Ex_GetAdapterDisplayModeEx(p,a,b,c) (p)->lpVtbl->GetAdapterDisplayModeEx(p,a,b,c) #define IDirect3D9Ex_CreateDeviceEx(p,a,b,c,d,e,f,g) (p)->lpVtbl->CreateDeviceEx(p,a,b,c,d,e,f,g) #define IDirect3D9Ex_GetAdapterLUID(p,a,b) (p)->lpVtbl->GetAdapterLUID(p,a,b) #else #define IDirect3D9Ex_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3D9Ex_AddRef(p) (p)->AddRef() #define IDirect3D9Ex_Release(p) (p)->Release() #define IDirect3D9Ex_GetAdapterCount(p) (p)->GetAdapterCount() #define IDirect3D9Ex_GetAdapterIdentifier(p,a,b,c) (p)->GetAdapterIdentifier(a,b,c) #define IDirect3D9Ex_GetAdapterModeCount(p,a,b) (p)->GetAdapterModeCount(a,b) #define IDirect3D9Ex_EnumAdapterModes(p,a,b,c,d) (p)->EnumAdapterModes(a,b,c,d) #define IDirect3D9Ex_GetAdapterDisplayMode(p,a,b) (p)->GetAdapterDisplayMode(a,b) #define IDirect3D9Ex_CheckDeviceType(p,a,b,c,d,e) (p)->CheckDeviceType(a,b,c,d,e) #define IDirect3D9Ex_CheckDeviceFormat(p,a,b,c,d,e,f) (p)->CheckDeviceFormat(a,b,c,d,e,f) #define IDirect3D9Ex_CheckDeviceMultiSampleType(p,a,b,c,d,e,f) (p)->CheckDeviceMultiSampleType(a,b,c,d,e,f) #define IDirect3D9Ex_CheckDepthStencilMatch(p,a,b,c,d,e) (p)->CheckDepthStencilMatch(a,b,c,d,e) #define IDirect3D9Ex_CheckDeviceFormatConversion(p,a,b,c,d) (p)->CheckDeviceFormatConversion(a,b,c,d) #define IDirect3D9Ex_GetDeviceCaps(p,a,b,c) (p)->GetDeviceCaps(a,b,c) #define IDirect3D9Ex_GetAdapterMonitor(p,a) (p)->GetAdapterMonitor(a) #define IDirect3D9Ex_CreateDevice(p,a,b,c,d,e,f) (p)->CreateDevice(a,b,c,d,e,f) #define IDirect3D9Ex_GetAdapterModeCountEx(p,a,b) (p)->GetAdapterModeCountEx(a,b) #define IDirect3D9Ex_EnumAdapterModesEx(p,a,b,c,d) (p)->EnumAdapterModesEx(a,b,c,d) #define IDirect3D9Ex_GetAdapterDisplayModeEx(p,a,b,c) (p)->GetAdapterDisplayModeEx(a,b,c) #define IDirect3D9Ex_CreateDeviceEx(p,a,b,c,d,e,f,g) (p)->CreateDeviceEx(a,b,c,d,e,f,g) #define IDirect3D9Ex_GetAdapterLUID(p,a,b) (p)->GetAdapterLUID(a,b) #endif #undef INTERFACE #define INTERFACE IDirect3DDevice9Ex DECLARE_INTERFACE_(IDirect3DDevice9Ex, IDirect3DDevice9) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DDevice9 methods ***/ STDMETHOD(TestCooperativeLevel)(THIS) PURE; STDMETHOD_(UINT, GetAvailableTextureMem)(THIS) PURE; STDMETHOD(EvictManagedResources)(THIS) PURE; STDMETHOD(GetDirect3D)(THIS_ IDirect3D9** ppD3D9) PURE; STDMETHOD(GetDeviceCaps)(THIS_ D3DCAPS9* pCaps) PURE; STDMETHOD(GetDisplayMode)(THIS_ UINT iSwapChain,D3DDISPLAYMODE* pMode) PURE; STDMETHOD(GetCreationParameters)(THIS_ D3DDEVICE_CREATION_PARAMETERS *pParameters) PURE; STDMETHOD(SetCursorProperties)(THIS_ UINT XHotSpot,UINT YHotSpot,IDirect3DSurface9* pCursorBitmap) PURE; STDMETHOD_(void, SetCursorPosition)(THIS_ int X,int Y,DWORD Flags) PURE; STDMETHOD_(BOOL, ShowCursor)(THIS_ BOOL bShow) PURE; STDMETHOD(CreateAdditionalSwapChain)(THIS_ D3DPRESENT_PARAMETERS* pPresentationParameters,IDirect3DSwapChain9** pSwapChain) PURE; STDMETHOD(GetSwapChain)(THIS_ UINT iSwapChain,IDirect3DSwapChain9** pSwapChain) PURE; STDMETHOD_(UINT, GetNumberOfSwapChains)(THIS) PURE; STDMETHOD(Reset)(THIS_ D3DPRESENT_PARAMETERS* pPresentationParameters) PURE; STDMETHOD(Present)(THIS_ CONST RECT* pSourceRect,CONST RECT* pDestRect,HWND hDestWindowOverride,CONST RGNDATA* pDirtyRegion) PURE; STDMETHOD(GetBackBuffer)(THIS_ UINT iSwapChain,UINT iBackBuffer,D3DBACKBUFFER_TYPE Type,IDirect3DSurface9** ppBackBuffer) PURE; STDMETHOD(GetRasterStatus)(THIS_ UINT iSwapChain,D3DRASTER_STATUS* pRasterStatus) PURE; STDMETHOD(SetDialogBoxMode)(THIS_ BOOL bEnableDialogs) PURE; STDMETHOD_(void, SetGammaRamp)(THIS_ UINT iSwapChain,DWORD Flags,CONST D3DGAMMARAMP* pRamp) PURE; STDMETHOD_(void, GetGammaRamp)(THIS_ UINT iSwapChain,D3DGAMMARAMP* pRamp) PURE; STDMETHOD(CreateTexture)(THIS_ UINT Width,UINT Height,UINT Levels,DWORD Usage,D3DFORMAT Format,D3DPOOL Pool,IDirect3DTexture9** ppTexture,HANDLE* pSharedHandle) PURE; STDMETHOD(CreateVolumeTexture)(THIS_ UINT Width,UINT Height,UINT Depth,UINT Levels,DWORD Usage,D3DFORMAT Format,D3DPOOL Pool,IDirect3DVolumeTexture9** ppVolumeTexture,HANDLE* pSharedHandle) PURE; STDMETHOD(CreateCubeTexture)(THIS_ UINT EdgeLength,UINT Levels,DWORD Usage,D3DFORMAT Format,D3DPOOL Pool,IDirect3DCubeTexture9** ppCubeTexture,HANDLE* pSharedHandle) PURE; STDMETHOD(CreateVertexBuffer)(THIS_ UINT Length,DWORD Usage,DWORD FVF,D3DPOOL Pool,IDirect3DVertexBuffer9** ppVertexBuffer,HANDLE* pSharedHandle) PURE; STDMETHOD(CreateIndexBuffer)(THIS_ UINT Length,DWORD Usage,D3DFORMAT Format,D3DPOOL Pool,IDirect3DIndexBuffer9** ppIndexBuffer,HANDLE* pSharedHandle) PURE; STDMETHOD(CreateRenderTarget)(THIS_ UINT Width,UINT Height,D3DFORMAT Format,D3DMULTISAMPLE_TYPE MultiSample,DWORD MultisampleQuality,BOOL Lockable,IDirect3DSurface9** ppSurface,HANDLE* pSharedHandle) PURE; STDMETHOD(CreateDepthStencilSurface)(THIS_ UINT Width,UINT Height,D3DFORMAT Format,D3DMULTISAMPLE_TYPE MultiSample,DWORD MultisampleQuality,BOOL Discard,IDirect3DSurface9** ppSurface,HANDLE* pSharedHandle) PURE; STDMETHOD(UpdateSurface)(THIS_ IDirect3DSurface9* pSourceSurface,CONST RECT* pSourceRect,IDirect3DSurface9* pDestinationSurface,CONST POINT* pDestPoint) PURE; STDMETHOD(UpdateTexture)(THIS_ IDirect3DBaseTexture9* pSourceTexture,IDirect3DBaseTexture9* pDestinationTexture) PURE; STDMETHOD(GetRenderTargetData)(THIS_ IDirect3DSurface9* pRenderTarget,IDirect3DSurface9* pDestSurface) PURE; STDMETHOD(GetFrontBufferData)(THIS_ UINT iSwapChain,IDirect3DSurface9* pDestSurface) PURE; STDMETHOD(StretchRect)(THIS_ IDirect3DSurface9* pSourceSurface,CONST RECT* pSourceRect,IDirect3DSurface9* pDestSurface,CONST RECT* pDestRect,D3DTEXTUREFILTERTYPE Filter) PURE; STDMETHOD(ColorFill)(THIS_ IDirect3DSurface9* pSurface,CONST RECT* pRect,D3DCOLOR color) PURE; STDMETHOD(CreateOffscreenPlainSurface)(THIS_ UINT Width,UINT Height,D3DFORMAT Format,D3DPOOL Pool,IDirect3DSurface9** ppSurface,HANDLE* pSharedHandle) PURE; STDMETHOD(SetRenderTarget)(THIS_ DWORD RenderTargetIndex,IDirect3DSurface9* pRenderTarget) PURE; STDMETHOD(GetRenderTarget)(THIS_ DWORD RenderTargetIndex,IDirect3DSurface9** ppRenderTarget) PURE; STDMETHOD(SetDepthStencilSurface)(THIS_ IDirect3DSurface9* pNewZStencil) PURE; STDMETHOD(GetDepthStencilSurface)(THIS_ IDirect3DSurface9** ppZStencilSurface) PURE; STDMETHOD(BeginScene)(THIS) PURE; STDMETHOD(EndScene)(THIS) PURE; STDMETHOD(Clear)(THIS_ DWORD Count,CONST D3DRECT* pRects,DWORD Flags,D3DCOLOR Color,float Z,DWORD Stencil) PURE; STDMETHOD(SetTransform)(THIS_ D3DTRANSFORMSTATETYPE State,CONST D3DMATRIX* pMatrix) PURE; STDMETHOD(GetTransform)(THIS_ D3DTRANSFORMSTATETYPE State,D3DMATRIX* pMatrix) PURE; STDMETHOD(MultiplyTransform)(THIS_ D3DTRANSFORMSTATETYPE,CONST D3DMATRIX*) PURE; STDMETHOD(SetViewport)(THIS_ CONST D3DVIEWPORT9* pViewport) PURE; STDMETHOD(GetViewport)(THIS_ D3DVIEWPORT9* pViewport) PURE; STDMETHOD(SetMaterial)(THIS_ CONST D3DMATERIAL9* pMaterial) PURE; STDMETHOD(GetMaterial)(THIS_ D3DMATERIAL9* pMaterial) PURE; STDMETHOD(SetLight)(THIS_ DWORD Index,CONST D3DLIGHT9*) PURE; STDMETHOD(GetLight)(THIS_ DWORD Index,D3DLIGHT9*) PURE; STDMETHOD(LightEnable)(THIS_ DWORD Index,BOOL Enable) PURE; STDMETHOD(GetLightEnable)(THIS_ DWORD Index,BOOL* pEnable) PURE; STDMETHOD(SetClipPlane)(THIS_ DWORD Index,CONST float* pPlane) PURE; STDMETHOD(GetClipPlane)(THIS_ DWORD Index,float* pPlane) PURE; STDMETHOD(SetRenderState)(THIS_ D3DRENDERSTATETYPE State,DWORD Value) PURE; STDMETHOD(GetRenderState)(THIS_ D3DRENDERSTATETYPE State,DWORD* pValue) PURE; STDMETHOD(CreateStateBlock)(THIS_ D3DSTATEBLOCKTYPE Type,IDirect3DStateBlock9** ppSB) PURE; STDMETHOD(BeginStateBlock)(THIS) PURE; STDMETHOD(EndStateBlock)(THIS_ IDirect3DStateBlock9** ppSB) PURE; STDMETHOD(SetClipStatus)(THIS_ CONST D3DCLIPSTATUS9* pClipStatus) PURE; STDMETHOD(GetClipStatus)(THIS_ D3DCLIPSTATUS9* pClipStatus) PURE; STDMETHOD(GetTexture)(THIS_ DWORD Stage,IDirect3DBaseTexture9** ppTexture) PURE; STDMETHOD(SetTexture)(THIS_ DWORD Stage,IDirect3DBaseTexture9* pTexture) PURE; STDMETHOD(GetTextureStageState)(THIS_ DWORD Stage,D3DTEXTURESTAGESTATETYPE Type,DWORD* pValue) PURE; STDMETHOD(SetTextureStageState)(THIS_ DWORD Stage,D3DTEXTURESTAGESTATETYPE Type,DWORD Value) PURE; STDMETHOD(GetSamplerState)(THIS_ DWORD Sampler,D3DSAMPLERSTATETYPE Type,DWORD* pValue) PURE; STDMETHOD(SetSamplerState)(THIS_ DWORD Sampler,D3DSAMPLERSTATETYPE Type,DWORD Value) PURE; STDMETHOD(ValidateDevice)(THIS_ DWORD* pNumPasses) PURE; STDMETHOD(SetPaletteEntries)(THIS_ UINT PaletteNumber,CONST PALETTEENTRY* pEntries) PURE; STDMETHOD(GetPaletteEntries)(THIS_ UINT PaletteNumber,PALETTEENTRY* pEntries) PURE; STDMETHOD(SetCurrentTexturePalette)(THIS_ UINT PaletteNumber) PURE; STDMETHOD(GetCurrentTexturePalette)(THIS_ UINT *PaletteNumber) PURE; STDMETHOD(SetScissorRect)(THIS_ CONST RECT* pRect) PURE; STDMETHOD(GetScissorRect)(THIS_ RECT* pRect) PURE; STDMETHOD(SetSoftwareVertexProcessing)(THIS_ BOOL bSoftware) PURE; STDMETHOD_(BOOL, GetSoftwareVertexProcessing)(THIS) PURE; STDMETHOD(SetNPatchMode)(THIS_ float nSegments) PURE; STDMETHOD_(float, GetNPatchMode)(THIS) PURE; STDMETHOD(DrawPrimitive)(THIS_ D3DPRIMITIVETYPE PrimitiveType,UINT StartVertex,UINT PrimitiveCount) PURE; STDMETHOD(DrawIndexedPrimitive)(THIS_ D3DPRIMITIVETYPE,INT BaseVertexIndex,UINT MinVertexIndex,UINT NumVertices,UINT startIndex,UINT primCount) PURE; STDMETHOD(DrawPrimitiveUP)(THIS_ D3DPRIMITIVETYPE PrimitiveType,UINT PrimitiveCount,CONST void* pVertexStreamZeroData,UINT VertexStreamZeroStride) PURE; STDMETHOD(DrawIndexedPrimitiveUP)(THIS_ D3DPRIMITIVETYPE PrimitiveType,UINT MinVertexIndex,UINT NumVertices,UINT PrimitiveCount,CONST void* pIndexData,D3DFORMAT IndexDataFormat,CONST void* pVertexStreamZeroData,UINT VertexStreamZeroStride) PURE; STDMETHOD(ProcessVertices)(THIS_ UINT SrcStartIndex,UINT DestIndex,UINT VertexCount,IDirect3DVertexBuffer9* pDestBuffer,IDirect3DVertexDeclaration9* pVertexDecl,DWORD Flags) PURE; STDMETHOD(CreateVertexDeclaration)(THIS_ CONST D3DVERTEXELEMENT9* pVertexElements,IDirect3DVertexDeclaration9** ppDecl) PURE; STDMETHOD(SetVertexDeclaration)(THIS_ IDirect3DVertexDeclaration9* pDecl) PURE; STDMETHOD(GetVertexDeclaration)(THIS_ IDirect3DVertexDeclaration9** ppDecl) PURE; STDMETHOD(SetFVF)(THIS_ DWORD FVF) PURE; STDMETHOD(GetFVF)(THIS_ DWORD* pFVF) PURE; STDMETHOD(CreateVertexShader)(THIS_ CONST DWORD* pFunction,IDirect3DVertexShader9** ppShader) PURE; STDMETHOD(SetVertexShader)(THIS_ IDirect3DVertexShader9* pShader) PURE; STDMETHOD(GetVertexShader)(THIS_ IDirect3DVertexShader9** ppShader) PURE; STDMETHOD(SetVertexShaderConstantF)(THIS_ UINT StartRegister,CONST float* pConstantData,UINT Vector4fCount) PURE; STDMETHOD(GetVertexShaderConstantF)(THIS_ UINT StartRegister,float* pConstantData,UINT Vector4fCount) PURE; STDMETHOD(SetVertexShaderConstantI)(THIS_ UINT StartRegister,CONST int* pConstantData,UINT Vector4iCount) PURE; STDMETHOD(GetVertexShaderConstantI)(THIS_ UINT StartRegister,int* pConstantData,UINT Vector4iCount) PURE; STDMETHOD(SetVertexShaderConstantB)(THIS_ UINT StartRegister,CONST BOOL* pConstantData,UINT BoolCount) PURE; STDMETHOD(GetVertexShaderConstantB)(THIS_ UINT StartRegister,BOOL* pConstantData,UINT BoolCount) PURE; STDMETHOD(SetStreamSource)(THIS_ UINT StreamNumber,IDirect3DVertexBuffer9* pStreamData,UINT OffsetInBytes,UINT Stride) PURE; STDMETHOD(GetStreamSource)(THIS_ UINT StreamNumber,IDirect3DVertexBuffer9** ppStreamData,UINT* pOffsetInBytes,UINT* pStride) PURE; STDMETHOD(SetStreamSourceFreq)(THIS_ UINT StreamNumber,UINT Setting) PURE; STDMETHOD(GetStreamSourceFreq)(THIS_ UINT StreamNumber,UINT* pSetting) PURE; STDMETHOD(SetIndices)(THIS_ IDirect3DIndexBuffer9* pIndexData) PURE; STDMETHOD(GetIndices)(THIS_ IDirect3DIndexBuffer9** ppIndexData) PURE; STDMETHOD(CreatePixelShader)(THIS_ CONST DWORD* pFunction,IDirect3DPixelShader9** ppShader) PURE; STDMETHOD(SetPixelShader)(THIS_ IDirect3DPixelShader9* pShader) PURE; STDMETHOD(GetPixelShader)(THIS_ IDirect3DPixelShader9** ppShader) PURE; STDMETHOD(SetPixelShaderConstantF)(THIS_ UINT StartRegister,CONST float* pConstantData,UINT Vector4fCount) PURE; STDMETHOD(GetPixelShaderConstantF)(THIS_ UINT StartRegister,float* pConstantData,UINT Vector4fCount) PURE; STDMETHOD(SetPixelShaderConstantI)(THIS_ UINT StartRegister,CONST int* pConstantData,UINT Vector4iCount) PURE; STDMETHOD(GetPixelShaderConstantI)(THIS_ UINT StartRegister,int* pConstantData,UINT Vector4iCount) PURE; STDMETHOD(SetPixelShaderConstantB)(THIS_ UINT StartRegister,CONST BOOL* pConstantData,UINT BoolCount) PURE; STDMETHOD(GetPixelShaderConstantB)(THIS_ UINT StartRegister,BOOL* pConstantData,UINT BoolCount) PURE; STDMETHOD(DrawRectPatch)(THIS_ UINT Handle,CONST float* pNumSegs,CONST D3DRECTPATCH_INFO* pRectPatchInfo) PURE; STDMETHOD(DrawTriPatch)(THIS_ UINT Handle,CONST float* pNumSegs,CONST D3DTRIPATCH_INFO* pTriPatchInfo) PURE; STDMETHOD(DeletePatch)(THIS_ UINT Handle) PURE; STDMETHOD(CreateQuery)(THIS_ D3DQUERYTYPE Type,IDirect3DQuery9** ppQuery) PURE; STDMETHOD(SetConvolutionMonoKernel)(THIS_ UINT width,UINT height,float* rows,float* columns) PURE; STDMETHOD(ComposeRects)(THIS_ IDirect3DSurface9* pSrc,IDirect3DSurface9* pDst,IDirect3DVertexBuffer9* pSrcRectDescs,UINT NumRects,IDirect3DVertexBuffer9* pDstRectDescs,D3DCOMPOSERECTSOP Operation,int Xoffset,int Yoffset) PURE; STDMETHOD(PresentEx)(THIS_ CONST RECT* pSourceRect,CONST RECT* pDestRect,HWND hDestWindowOverride,CONST RGNDATA* pDirtyRegion,DWORD dwFlags) PURE; STDMETHOD(GetGPUThreadPriority)(THIS_ INT* pPriority) PURE; STDMETHOD(SetGPUThreadPriority)(THIS_ INT Priority) PURE; STDMETHOD(WaitForVBlank)(THIS_ UINT iSwapChain) PURE; STDMETHOD(CheckResourceResidency)(THIS_ IDirect3DResource9** pResourceArray,UINT32 NumResources) PURE; STDMETHOD(SetMaximumFrameLatency)(THIS_ UINT MaxLatency) PURE; STDMETHOD(GetMaximumFrameLatency)(THIS_ UINT* pMaxLatency) PURE; STDMETHOD(CheckDeviceState)(THIS_ HWND hDestinationWindow) PURE; STDMETHOD(CreateRenderTargetEx)(THIS_ UINT Width,UINT Height,D3DFORMAT Format,D3DMULTISAMPLE_TYPE MultiSample,DWORD MultisampleQuality,BOOL Lockable,IDirect3DSurface9** ppSurface,HANDLE* pSharedHandle,DWORD Usage) PURE; STDMETHOD(CreateOffscreenPlainSurfaceEx)(THIS_ UINT Width,UINT Height,D3DFORMAT Format,D3DPOOL Pool,IDirect3DSurface9** ppSurface,HANDLE* pSharedHandle,DWORD Usage) PURE; STDMETHOD(CreateDepthStencilSurfaceEx)(THIS_ UINT Width,UINT Height,D3DFORMAT Format,D3DMULTISAMPLE_TYPE MultiSample,DWORD MultisampleQuality,BOOL Discard,IDirect3DSurface9** ppSurface,HANDLE* pSharedHandle,DWORD Usage) PURE; STDMETHOD(ResetEx)(THIS_ D3DPRESENT_PARAMETERS* pPresentationParameters,D3DDISPLAYMODEEX *pFullscreenDisplayMode) PURE; STDMETHOD(GetDisplayModeEx)(THIS_ UINT iSwapChain,D3DDISPLAYMODEEX* pMode,D3DDISPLAYROTATION* pRotation) PURE; }; typedef struct IDirect3DDevice9Ex *LPDIRECT3DDEVICE9EX, *PDIRECT3DDEVICE9EX; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirect3DDevice9Ex_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DDevice9Ex_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DDevice9Ex_Release(p) (p)->lpVtbl->Release(p) #define IDirect3DDevice9Ex_TestCooperativeLevel(p) (p)->lpVtbl->TestCooperativeLevel(p) #define IDirect3DDevice9Ex_GetAvailableTextureMem(p) (p)->lpVtbl->GetAvailableTextureMem(p) #define IDirect3DDevice9Ex_EvictManagedResources(p) (p)->lpVtbl->EvictManagedResources(p) #define IDirect3DDevice9Ex_GetDirect3D(p,a) (p)->lpVtbl->GetDirect3D(p,a) #define IDirect3DDevice9Ex_GetDeviceCaps(p,a) (p)->lpVtbl->GetDeviceCaps(p,a) #define IDirect3DDevice9Ex_GetDisplayMode(p,a,b) (p)->lpVtbl->GetDisplayMode(p,a,b) #define IDirect3DDevice9Ex_GetCreationParameters(p,a) (p)->lpVtbl->GetCreationParameters(p,a) #define IDirect3DDevice9Ex_SetCursorProperties(p,a,b,c) (p)->lpVtbl->SetCursorProperties(p,a,b,c) #define IDirect3DDevice9Ex_SetCursorPosition(p,a,b,c) (p)->lpVtbl->SetCursorPosition(p,a,b,c) #define IDirect3DDevice9Ex_ShowCursor(p,a) (p)->lpVtbl->ShowCursor(p,a) #define IDirect3DDevice9Ex_CreateAdditionalSwapChain(p,a,b) (p)->lpVtbl->CreateAdditionalSwapChain(p,a,b) #define IDirect3DDevice9Ex_GetSwapChain(p,a,b) (p)->lpVtbl->GetSwapChain(p,a,b) #define IDirect3DDevice9Ex_GetNumberOfSwapChains(p) (p)->lpVtbl->GetNumberOfSwapChains(p) #define IDirect3DDevice9Ex_Reset(p,a) (p)->lpVtbl->Reset(p,a) #define IDirect3DDevice9Ex_Present(p,a,b,c,d) (p)->lpVtbl->Present(p,a,b,c,d) #define IDirect3DDevice9Ex_GetBackBuffer(p,a,b,c,d) (p)->lpVtbl->GetBackBuffer(p,a,b,c,d) #define IDirect3DDevice9Ex_GetRasterStatus(p,a,b) (p)->lpVtbl->GetRasterStatus(p,a,b) #define IDirect3DDevice9Ex_SetDialogBoxMode(p,a) (p)->lpVtbl->SetDialogBoxMode(p,a) #define IDirect3DDevice9Ex_SetGammaRamp(p,a,b,c) (p)->lpVtbl->SetGammaRamp(p,a,b,c) #define IDirect3DDevice9Ex_GetGammaRamp(p,a,b) (p)->lpVtbl->GetGammaRamp(p,a,b) #define IDirect3DDevice9Ex_CreateTexture(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->CreateTexture(p,a,b,c,d,e,f,g,h) #define IDirect3DDevice9Ex_CreateVolumeTexture(p,a,b,c,d,e,f,g,h,i) (p)->lpVtbl->CreateVolumeTexture(p,a,b,c,d,e,f,g,h,i) #define IDirect3DDevice9Ex_CreateCubeTexture(p,a,b,c,d,e,f,g) (p)->lpVtbl->CreateCubeTexture(p,a,b,c,d,e,f,g) #define IDirect3DDevice9Ex_CreateVertexBuffer(p,a,b,c,d,e,f) (p)->lpVtbl->CreateVertexBuffer(p,a,b,c,d,e,f) #define IDirect3DDevice9Ex_CreateIndexBuffer(p,a,b,c,d,e,f) (p)->lpVtbl->CreateIndexBuffer(p,a,b,c,d,e,f) #define IDirect3DDevice9Ex_CreateRenderTarget(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->CreateRenderTarget(p,a,b,c,d,e,f,g,h) #define IDirect3DDevice9Ex_CreateDepthStencilSurface(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->CreateDepthStencilSurface(p,a,b,c,d,e,f,g,h) #define IDirect3DDevice9Ex_UpdateSurface(p,a,b,c,d) (p)->lpVtbl->UpdateSurface(p,a,b,c,d) #define IDirect3DDevice9Ex_UpdateTexture(p,a,b) (p)->lpVtbl->UpdateTexture(p,a,b) #define IDirect3DDevice9Ex_GetRenderTargetData(p,a,b) (p)->lpVtbl->GetRenderTargetData(p,a,b) #define IDirect3DDevice9Ex_GetFrontBufferData(p,a,b) (p)->lpVtbl->GetFrontBufferData(p,a,b) #define IDirect3DDevice9Ex_StretchRect(p,a,b,c,d,e) (p)->lpVtbl->StretchRect(p,a,b,c,d,e) #define IDirect3DDevice9Ex_ColorFill(p,a,b,c) (p)->lpVtbl->ColorFill(p,a,b,c) #define IDirect3DDevice9Ex_CreateOffscreenPlainSurface(p,a,b,c,d,e,f) (p)->lpVtbl->CreateOffscreenPlainSurface(p,a,b,c,d,e,f) #define IDirect3DDevice9Ex_SetRenderTarget(p,a,b) (p)->lpVtbl->SetRenderTarget(p,a,b) #define IDirect3DDevice9Ex_GetRenderTarget(p,a,b) (p)->lpVtbl->GetRenderTarget(p,a,b) #define IDirect3DDevice9Ex_SetDepthStencilSurface(p,a) (p)->lpVtbl->SetDepthStencilSurface(p,a) #define IDirect3DDevice9Ex_GetDepthStencilSurface(p,a) (p)->lpVtbl->GetDepthStencilSurface(p,a) #define IDirect3DDevice9Ex_BeginScene(p) (p)->lpVtbl->BeginScene(p) #define IDirect3DDevice9Ex_EndScene(p) (p)->lpVtbl->EndScene(p) #define IDirect3DDevice9Ex_Clear(p,a,b,c,d,e,f) (p)->lpVtbl->Clear(p,a,b,c,d,e,f) #define IDirect3DDevice9Ex_SetTransform(p,a,b) (p)->lpVtbl->SetTransform(p,a,b) #define IDirect3DDevice9Ex_GetTransform(p,a,b) (p)->lpVtbl->GetTransform(p,a,b) #define IDirect3DDevice9Ex_MultiplyTransform(p,a,b) (p)->lpVtbl->MultiplyTransform(p,a,b) #define IDirect3DDevice9Ex_SetViewport(p,a) (p)->lpVtbl->SetViewport(p,a) #define IDirect3DDevice9Ex_GetViewport(p,a) (p)->lpVtbl->GetViewport(p,a) #define IDirect3DDevice9Ex_SetMaterial(p,a) (p)->lpVtbl->SetMaterial(p,a) #define IDirect3DDevice9Ex_GetMaterial(p,a) (p)->lpVtbl->GetMaterial(p,a) #define IDirect3DDevice9Ex_SetLight(p,a,b) (p)->lpVtbl->SetLight(p,a,b) #define IDirect3DDevice9Ex_GetLight(p,a,b) (p)->lpVtbl->GetLight(p,a,b) #define IDirect3DDevice9Ex_LightEnable(p,a,b) (p)->lpVtbl->LightEnable(p,a,b) #define IDirect3DDevice9Ex_GetLightEnable(p,a,b) (p)->lpVtbl->GetLightEnable(p,a,b) #define IDirect3DDevice9Ex_SetClipPlane(p,a,b) (p)->lpVtbl->SetClipPlane(p,a,b) #define IDirect3DDevice9Ex_GetClipPlane(p,a,b) (p)->lpVtbl->GetClipPlane(p,a,b) #define IDirect3DDevice9Ex_SetRenderState(p,a,b) (p)->lpVtbl->SetRenderState(p,a,b) #define IDirect3DDevice9Ex_GetRenderState(p,a,b) (p)->lpVtbl->GetRenderState(p,a,b) #define IDirect3DDevice9Ex_CreateStateBlock(p,a,b) (p)->lpVtbl->CreateStateBlock(p,a,b) #define IDirect3DDevice9Ex_BeginStateBlock(p) (p)->lpVtbl->BeginStateBlock(p) #define IDirect3DDevice9Ex_EndStateBlock(p,a) (p)->lpVtbl->EndStateBlock(p,a) #define IDirect3DDevice9Ex_SetClipStatus(p,a) (p)->lpVtbl->SetClipStatus(p,a) #define IDirect3DDevice9Ex_GetClipStatus(p,a) (p)->lpVtbl->GetClipStatus(p,a) #define IDirect3DDevice9Ex_GetTexture(p,a,b) (p)->lpVtbl->GetTexture(p,a,b) #define IDirect3DDevice9Ex_SetTexture(p,a,b) (p)->lpVtbl->SetTexture(p,a,b) #define IDirect3DDevice9Ex_GetTextureStageState(p,a,b,c) (p)->lpVtbl->GetTextureStageState(p,a,b,c) #define IDirect3DDevice9Ex_SetTextureStageState(p,a,b,c) (p)->lpVtbl->SetTextureStageState(p,a,b,c) #define IDirect3DDevice9Ex_GetSamplerState(p,a,b,c) (p)->lpVtbl->GetSamplerState(p,a,b,c) #define IDirect3DDevice9Ex_SetSamplerState(p,a,b,c) (p)->lpVtbl->SetSamplerState(p,a,b,c) #define IDirect3DDevice9Ex_ValidateDevice(p,a) (p)->lpVtbl->ValidateDevice(p,a) #define IDirect3DDevice9Ex_SetPaletteEntries(p,a,b) (p)->lpVtbl->SetPaletteEntries(p,a,b) #define IDirect3DDevice9Ex_GetPaletteEntries(p,a,b) (p)->lpVtbl->GetPaletteEntries(p,a,b) #define IDirect3DDevice9Ex_SetCurrentTexturePalette(p,a) (p)->lpVtbl->SetCurrentTexturePalette(p,a) #define IDirect3DDevice9Ex_GetCurrentTexturePalette(p,a) (p)->lpVtbl->GetCurrentTexturePalette(p,a) #define IDirect3DDevice9Ex_SetScissorRect(p,a) (p)->lpVtbl->SetScissorRect(p,a) #define IDirect3DDevice9Ex_GetScissorRect(p,a) (p)->lpVtbl->GetScissorRect(p,a) #define IDirect3DDevice9Ex_SetSoftwareVertexProcessing(p,a) (p)->lpVtbl->SetSoftwareVertexProcessing(p,a) #define IDirect3DDevice9Ex_GetSoftwareVertexProcessing(p) (p)->lpVtbl->GetSoftwareVertexProcessing(p) #define IDirect3DDevice9Ex_SetNPatchMode(p,a) (p)->lpVtbl->SetNPatchMode(p,a) #define IDirect3DDevice9Ex_GetNPatchMode(p) (p)->lpVtbl->GetNPatchMode(p) #define IDirect3DDevice9Ex_DrawPrimitive(p,a,b,c) (p)->lpVtbl->DrawPrimitive(p,a,b,c) #define IDirect3DDevice9Ex_DrawIndexedPrimitive(p,a,b,c,d,e,f) (p)->lpVtbl->DrawIndexedPrimitive(p,a,b,c,d,e,f) #define IDirect3DDevice9Ex_DrawPrimitiveUP(p,a,b,c,d) (p)->lpVtbl->DrawPrimitiveUP(p,a,b,c,d) #define IDirect3DDevice9Ex_DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h) #define IDirect3DDevice9Ex_ProcessVertices(p,a,b,c,d,e,f) (p)->lpVtbl->ProcessVertices(p,a,b,c,d,e,f) #define IDirect3DDevice9Ex_CreateVertexDeclaration(p,a,b) (p)->lpVtbl->CreateVertexDeclaration(p,a,b) #define IDirect3DDevice9Ex_SetVertexDeclaration(p,a) (p)->lpVtbl->SetVertexDeclaration(p,a) #define IDirect3DDevice9Ex_GetVertexDeclaration(p,a) (p)->lpVtbl->GetVertexDeclaration(p,a) #define IDirect3DDevice9Ex_SetFVF(p,a) (p)->lpVtbl->SetFVF(p,a) #define IDirect3DDevice9Ex_GetFVF(p,a) (p)->lpVtbl->GetFVF(p,a) #define IDirect3DDevice9Ex_CreateVertexShader(p,a,b) (p)->lpVtbl->CreateVertexShader(p,a,b) #define IDirect3DDevice9Ex_SetVertexShader(p,a) (p)->lpVtbl->SetVertexShader(p,a) #define IDirect3DDevice9Ex_GetVertexShader(p,a) (p)->lpVtbl->GetVertexShader(p,a) #define IDirect3DDevice9Ex_SetVertexShaderConstantF(p,a,b,c) (p)->lpVtbl->SetVertexShaderConstantF(p,a,b,c) #define IDirect3DDevice9Ex_GetVertexShaderConstantF(p,a,b,c) (p)->lpVtbl->GetVertexShaderConstantF(p,a,b,c) #define IDirect3DDevice9Ex_SetVertexShaderConstantI(p,a,b,c) (p)->lpVtbl->SetVertexShaderConstantI(p,a,b,c) #define IDirect3DDevice9Ex_GetVertexShaderConstantI(p,a,b,c) (p)->lpVtbl->GetVertexShaderConstantI(p,a,b,c) #define IDirect3DDevice9Ex_SetVertexShaderConstantB(p,a,b,c) (p)->lpVtbl->SetVertexShaderConstantB(p,a,b,c) #define IDirect3DDevice9Ex_GetVertexShaderConstantB(p,a,b,c) (p)->lpVtbl->GetVertexShaderConstantB(p,a,b,c) #define IDirect3DDevice9Ex_SetStreamSource(p,a,b,c,d) (p)->lpVtbl->SetStreamSource(p,a,b,c,d) #define IDirect3DDevice9Ex_GetStreamSource(p,a,b,c,d) (p)->lpVtbl->GetStreamSource(p,a,b,c,d) #define IDirect3DDevice9Ex_SetStreamSourceFreq(p,a,b) (p)->lpVtbl->SetStreamSourceFreq(p,a,b) #define IDirect3DDevice9Ex_GetStreamSourceFreq(p,a,b) (p)->lpVtbl->GetStreamSourceFreq(p,a,b) #define IDirect3DDevice9Ex_SetIndices(p,a) (p)->lpVtbl->SetIndices(p,a) #define IDirect3DDevice9Ex_GetIndices(p,a) (p)->lpVtbl->GetIndices(p,a) #define IDirect3DDevice9Ex_CreatePixelShader(p,a,b) (p)->lpVtbl->CreatePixelShader(p,a,b) #define IDirect3DDevice9Ex_SetPixelShader(p,a) (p)->lpVtbl->SetPixelShader(p,a) #define IDirect3DDevice9Ex_GetPixelShader(p,a) (p)->lpVtbl->GetPixelShader(p,a) #define IDirect3DDevice9Ex_SetPixelShaderConstantF(p,a,b,c) (p)->lpVtbl->SetPixelShaderConstantF(p,a,b,c) #define IDirect3DDevice9Ex_GetPixelShaderConstantF(p,a,b,c) (p)->lpVtbl->GetPixelShaderConstantF(p,a,b,c) #define IDirect3DDevice9Ex_SetPixelShaderConstantI(p,a,b,c) (p)->lpVtbl->SetPixelShaderConstantI(p,a,b,c) #define IDirect3DDevice9Ex_GetPixelShaderConstantI(p,a,b,c) (p)->lpVtbl->GetPixelShaderConstantI(p,a,b,c) #define IDirect3DDevice9Ex_SetPixelShaderConstantB(p,a,b,c) (p)->lpVtbl->SetPixelShaderConstantB(p,a,b,c) #define IDirect3DDevice9Ex_GetPixelShaderConstantB(p,a,b,c) (p)->lpVtbl->GetPixelShaderConstantB(p,a,b,c) #define IDirect3DDevice9Ex_DrawRectPatch(p,a,b,c) (p)->lpVtbl->DrawRectPatch(p,a,b,c) #define IDirect3DDevice9Ex_DrawTriPatch(p,a,b,c) (p)->lpVtbl->DrawTriPatch(p,a,b,c) #define IDirect3DDevice9Ex_DeletePatch(p,a) (p)->lpVtbl->DeletePatch(p,a) #define IDirect3DDevice9Ex_CreateQuery(p,a,b) (p)->lpVtbl->CreateQuery(p,a,b) #define IDirect3DDevice9Ex_SetConvolutionMonoKernel(p,a,b,c,d) (p)->lpVtbl->SetConvolutionMonoKernel(p,a,b,c,d) #define IDirect3DDevice9Ex_ComposeRects(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->ComposeRects(p,a,b,c,d,e,f,g,h) #define IDirect3DDevice9Ex_PresentEx(p,a,b,c,d,e) (p)->lpVtbl->PresentEx(p,a,b,c,d,e) #define IDirect3DDevice9Ex_GetGPUThreadPriority(p,a) (p)->lpVtbl->GetGPUThreadPriority(p,a) #define IDirect3DDevice9Ex_SetGPUThreadPriority(p,a) (p)->lpVtbl->SetGPUThreadPriority(p,a) #define IDirect3DDevice9Ex_WaitForVBlank(p,a) (p)->lpVtbl->WaitForVBlank(p,a) #define IDirect3DDevice9Ex_CheckResourceResidency(p,a,b) (p)->lpVtbl->CheckResourceResidency(p,a,b) #define IDirect3DDevice9Ex_SetMaximumFrameLatency(p,a) (p)->lpVtbl->SetMaximumFrameLatency(p,a) #define IDirect3DDevice9Ex_GetMaximumFrameLatency(p,a) (p)->lpVtbl->GetMaximumFrameLatency(p,a) #define IDirect3DDevice9Ex_CheckDeviceState(p,a) (p)->lpVtbl->CheckDeviceState(p,a) #define IDirect3DDevice9Ex_CreateRenderTargetEx(p,a,b,c,d,e,f,g,h,i) (p)->lpVtbl->CreateRenderTargetEx(p,a,b,c,d,e,f,g,h,i) #define IDirect3DDevice9Ex_CreateOffscreenPlainSurfaceEx(p,a,b,c,d,e,f,g) (p)->lpVtbl->CreateOffscreenPlainSurfaceEx(p,a,b,c,d,e,f,g) #define IDirect3DDevice9Ex_CreateDepthStencilSurfaceEx(p,a,b,c,d,e,f,g,h,i) (p)->lpVtbl->CreateDepthStencilSurfaceEx(p,a,b,c,d,e,f,g,h,i) #define IDirect3DDevice9Ex_ResetEx(p,a,b) (p)->lpVtbl->ResetEx(p,a,b) #define IDirect3DDevice9Ex_GetDisplayModeEx(p,a,b,c) (p)->lpVtbl->GetDisplayModeEx(p,a,b,c) #else #define IDirect3DDevice9Ex_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DDevice9Ex_AddRef(p) (p)->AddRef() #define IDirect3DDevice9Ex_Release(p) (p)->Release() #define IDirect3DDevice9Ex_TestCooperativeLevel(p) (p)->TestCooperativeLevel() #define IDirect3DDevice9Ex_GetAvailableTextureMem(p) (p)->GetAvailableTextureMem() #define IDirect3DDevice9Ex_EvictManagedResources(p) (p)->EvictManagedResources() #define IDirect3DDevice9Ex_GetDirect3D(p,a) (p)->GetDirect3D(a) #define IDirect3DDevice9Ex_GetDeviceCaps(p,a) (p)->GetDeviceCaps(a) #define IDirect3DDevice9Ex_GetDisplayMode(p,a,b) (p)->GetDisplayMode(a,b) #define IDirect3DDevice9Ex_GetCreationParameters(p,a) (p)->GetCreationParameters(a) #define IDirect3DDevice9Ex_SetCursorProperties(p,a,b,c) (p)->SetCursorProperties(a,b,c) #define IDirect3DDevice9Ex_SetCursorPosition(p,a,b,c) (p)->SetCursorPosition(a,b,c) #define IDirect3DDevice9Ex_ShowCursor(p,a) (p)->ShowCursor(a) #define IDirect3DDevice9Ex_CreateAdditionalSwapChain(p,a,b) (p)->CreateAdditionalSwapChain(a,b) #define IDirect3DDevice9Ex_GetSwapChain(p,a,b) (p)->GetSwapChain(a,b) #define IDirect3DDevice9Ex_GetNumberOfSwapChains(p) (p)->GetNumberOfSwapChains() #define IDirect3DDevice9Ex_Reset(p,a) (p)->Reset(a) #define IDirect3DDevice9Ex_Present(p,a,b,c,d) (p)->Present(a,b,c,d) #define IDirect3DDevice9Ex_GetBackBuffer(p,a,b,c,d) (p)->GetBackBuffer(a,b,c,d) #define IDirect3DDevice9Ex_GetRasterStatus(p,a,b) (p)->GetRasterStatus(a,b) #define IDirect3DDevice9Ex_SetDialogBoxMode(p,a) (p)->SetDialogBoxMode(a) #define IDirect3DDevice9Ex_SetGammaRamp(p,a,b,c) (p)->SetGammaRamp(a,b,c) #define IDirect3DDevice9Ex_GetGammaRamp(p,a,b) (p)->GetGammaRamp(a,b) #define IDirect3DDevice9Ex_CreateTexture(p,a,b,c,d,e,f,g,h) (p)->CreateTexture(a,b,c,d,e,f,g,h) #define IDirect3DDevice9Ex_CreateVolumeTexture(p,a,b,c,d,e,f,g,h,i) (p)->CreateVolumeTexture(a,b,c,d,e,f,g,h,i) #define IDirect3DDevice9Ex_CreateCubeTexture(p,a,b,c,d,e,f,g) (p)->CreateCubeTexture(a,b,c,d,e,f,g) #define IDirect3DDevice9Ex_CreateVertexBuffer(p,a,b,c,d,e,f) (p)->CreateVertexBuffer(a,b,c,d,e,f) #define IDirect3DDevice9Ex_CreateIndexBuffer(p,a,b,c,d,e,f) (p)->CreateIndexBuffer(a,b,c,d,e,f) #define IDirect3DDevice9Ex_CreateRenderTarget(p,a,b,c,d,e,f,g,h) (p)->CreateRenderTarget(a,b,c,d,e,f,g,h) #define IDirect3DDevice9Ex_CreateDepthStencilSurface(p,a,b,c,d,e,f,g,h) (p)->CreateDepthStencilSurface(a,b,c,d,e,f,g,h) #define IDirect3DDevice9Ex_UpdateSurface(p,a,b,c,d) (p)->UpdateSurface(a,b,c,d) #define IDirect3DDevice9Ex_UpdateTexture(p,a,b) (p)->UpdateTexture(a,b) #define IDirect3DDevice9Ex_GetRenderTargetData(p,a,b) (p)->GetRenderTargetData(a,b) #define IDirect3DDevice9Ex_GetFrontBufferData(p,a,b) (p)->GetFrontBufferData(a,b) #define IDirect3DDevice9Ex_StretchRect(p,a,b,c,d,e) (p)->StretchRect(a,b,c,d,e) #define IDirect3DDevice9Ex_ColorFill(p,a,b,c) (p)->ColorFill(a,b,c) #define IDirect3DDevice9Ex_CreateOffscreenPlainSurface(p,a,b,c,d,e,f) (p)->CreateOffscreenPlainSurface(a,b,c,d,e,f) #define IDirect3DDevice9Ex_SetRenderTarget(p,a,b) (p)->SetRenderTarget(a,b) #define IDirect3DDevice9Ex_GetRenderTarget(p,a,b) (p)->GetRenderTarget(a,b) #define IDirect3DDevice9Ex_SetDepthStencilSurface(p,a) (p)->SetDepthStencilSurface(a) #define IDirect3DDevice9Ex_GetDepthStencilSurface(p,a) (p)->GetDepthStencilSurface(a) #define IDirect3DDevice9Ex_BeginScene(p) (p)->BeginScene() #define IDirect3DDevice9Ex_EndScene(p) (p)->EndScene() #define IDirect3DDevice9Ex_Clear(p,a,b,c,d,e,f) (p)->Clear(a,b,c,d,e,f) #define IDirect3DDevice9Ex_SetTransform(p,a,b) (p)->SetTransform(a,b) #define IDirect3DDevice9Ex_GetTransform(p,a,b) (p)->GetTransform(a,b) #define IDirect3DDevice9Ex_MultiplyTransform(p,a,b) (p)->MultiplyTransform(a,b) #define IDirect3DDevice9Ex_SetViewport(p,a) (p)->SetViewport(a) #define IDirect3DDevice9Ex_GetViewport(p,a) (p)->GetViewport(a) #define IDirect3DDevice9Ex_SetMaterial(p,a) (p)->SetMaterial(a) #define IDirect3DDevice9Ex_GetMaterial(p,a) (p)->GetMaterial(a) #define IDirect3DDevice9Ex_SetLight(p,a,b) (p)->SetLight(a,b) #define IDirect3DDevice9Ex_GetLight(p,a,b) (p)->GetLight(a,b) #define IDirect3DDevice9Ex_LightEnable(p,a,b) (p)->LightEnable(a,b) #define IDirect3DDevice9Ex_GetLightEnable(p,a,b) (p)->GetLightEnable(a,b) #define IDirect3DDevice9Ex_SetClipPlane(p,a,b) (p)->SetClipPlane(a,b) #define IDirect3DDevice9Ex_GetClipPlane(p,a,b) (p)->GetClipPlane(a,b) #define IDirect3DDevice9Ex_SetRenderState(p,a,b) (p)->SetRenderState(a,b) #define IDirect3DDevice9Ex_GetRenderState(p,a,b) (p)->GetRenderState(a,b) #define IDirect3DDevice9Ex_CreateStateBlock(p,a,b) (p)->CreateStateBlock(a,b) #define IDirect3DDevice9Ex_BeginStateBlock(p) (p)->BeginStateBlock() #define IDirect3DDevice9Ex_EndStateBlock(p,a) (p)->EndStateBlock(a) #define IDirect3DDevice9Ex_SetClipStatus(p,a) (p)->SetClipStatus(a) #define IDirect3DDevice9Ex_GetClipStatus(p,a) (p)->GetClipStatus(a) #define IDirect3DDevice9Ex_GetTexture(p,a,b) (p)->GetTexture(a,b) #define IDirect3DDevice9Ex_SetTexture(p,a,b) (p)->SetTexture(a,b) #define IDirect3DDevice9Ex_GetTextureStageState(p,a,b,c) (p)->GetTextureStageState(a,b,c) #define IDirect3DDevice9Ex_SetTextureStageState(p,a,b,c) (p)->SetTextureStageState(a,b,c) #define IDirect3DDevice9Ex_GetSamplerState(p,a,b,c) (p)->GetSamplerState(a,b,c) #define IDirect3DDevice9Ex_SetSamplerState(p,a,b,c) (p)->SetSamplerState(a,b,c) #define IDirect3DDevice9Ex_ValidateDevice(p,a) (p)->ValidateDevice(a) #define IDirect3DDevice9Ex_SetPaletteEntries(p,a,b) (p)->SetPaletteEntries(a,b) #define IDirect3DDevice9Ex_GetPaletteEntries(p,a,b) (p)->GetPaletteEntries(a,b) #define IDirect3DDevice9Ex_SetCurrentTexturePalette(p,a) (p)->SetCurrentTexturePalette(a) #define IDirect3DDevice9Ex_GetCurrentTexturePalette(p,a) (p)->GetCurrentTexturePalette(a) #define IDirect3DDevice9Ex_SetScissorRect(p,a) (p)->SetScissorRect(a) #define IDirect3DDevice9Ex_GetScissorRect(p,a) (p)->GetScissorRect(a) #define IDirect3DDevice9Ex_SetSoftwareVertexProcessing(p,a) (p)->SetSoftwareVertexProcessing(a) #define IDirect3DDevice9Ex_GetSoftwareVertexProcessing(p) (p)->GetSoftwareVertexProcessing() #define IDirect3DDevice9Ex_SetNPatchMode(p,a) (p)->SetNPatchMode(a) #define IDirect3DDevice9Ex_GetNPatchMode(p) (p)->GetNPatchMode() #define IDirect3DDevice9Ex_DrawPrimitive(p,a,b,c) (p)->DrawPrimitive(a,b,c) #define IDirect3DDevice9Ex_DrawIndexedPrimitive(p,a,b,c,d,e,f) (p)->DrawIndexedPrimitive(a,b,c,d,e,f) #define IDirect3DDevice9Ex_DrawPrimitiveUP(p,a,b,c,d) (p)->DrawPrimitiveUP(a,b,c,d) #define IDirect3DDevice9Ex_DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h) (p)->DrawIndexedPrimitiveUP(a,b,c,d,e,f,g,h) #define IDirect3DDevice9Ex_ProcessVertices(p,a,b,c,d,e,f) (p)->ProcessVertices(a,b,c,d,e,f) #define IDirect3DDevice9Ex_CreateVertexDeclaration(p,a,b) (p)->CreateVertexDeclaration(a,b) #define IDirect3DDevice9Ex_SetVertexDeclaration(p,a) (p)->SetVertexDeclaration(a) #define IDirect3DDevice9Ex_GetVertexDeclaration(p,a) (p)->GetVertexDeclaration(a) #define IDirect3DDevice9Ex_SetFVF(p,a) (p)->SetFVF(a) #define IDirect3DDevice9Ex_GetFVF(p,a) (p)->GetFVF(a) #define IDirect3DDevice9Ex_CreateVertexShader(p,a,b) (p)->CreateVertexShader(a,b) #define IDirect3DDevice9Ex_SetVertexShader(p,a) (p)->SetVertexShader(a) #define IDirect3DDevice9Ex_GetVertexShader(p,a) (p)->GetVertexShader(a) #define IDirect3DDevice9Ex_SetVertexShaderConstantF(p,a,b,c) (p)->SetVertexShaderConstantF(a,b,c) #define IDirect3DDevice9Ex_GetVertexShaderConstantF(p,a,b,c) (p)->GetVertexShaderConstantF(a,b,c) #define IDirect3DDevice9Ex_SetVertexShaderConstantI(p,a,b,c) (p)->SetVertexShaderConstantI(a,b,c) #define IDirect3DDevice9Ex_GetVertexShaderConstantI(p,a,b,c) (p)->GetVertexShaderConstantI(a,b,c) #define IDirect3DDevice9Ex_SetVertexShaderConstantB(p,a,b,c) (p)->SetVertexShaderConstantB(a,b,c) #define IDirect3DDevice9Ex_GetVertexShaderConstantB(p,a,b,c) (p)->GetVertexShaderConstantB(a,b,c) #define IDirect3DDevice9Ex_SetStreamSource(p,a,b,c,d) (p)->SetStreamSource(a,b,c,d) #define IDirect3DDevice9Ex_GetStreamSource(p,a,b,c,d) (p)->GetStreamSource(a,b,c,d) #define IDirect3DDevice9Ex_SetStreamSourceFreq(p,a,b) (p)->SetStreamSourceFreq(a,b) #define IDirect3DDevice9Ex_GetStreamSourceFreq(p,a,b) (p)->GetStreamSourceFreq(a,b) #define IDirect3DDevice9Ex_SetIndices(p,a) (p)->SetIndices(a) #define IDirect3DDevice9Ex_GetIndices(p,a) (p)->GetIndices(a) #define IDirect3DDevice9Ex_CreatePixelShader(p,a,b) (p)->CreatePixelShader(a,b) #define IDirect3DDevice9Ex_SetPixelShader(p,a) (p)->SetPixelShader(a) #define IDirect3DDevice9Ex_GetPixelShader(p,a) (p)->GetPixelShader(a) #define IDirect3DDevice9Ex_SetPixelShaderConstantF(p,a,b,c) (p)->SetPixelShaderConstantF(a,b,c) #define IDirect3DDevice9Ex_GetPixelShaderConstantF(p,a,b,c) (p)->GetPixelShaderConstantF(a,b,c) #define IDirect3DDevice9Ex_SetPixelShaderConstantI(p,a,b,c) (p)->SetPixelShaderConstantI(a,b,c) #define IDirect3DDevice9Ex_GetPixelShaderConstantI(p,a,b,c) (p)->GetPixelShaderConstantI(a,b,c) #define IDirect3DDevice9Ex_SetPixelShaderConstantB(p,a,b,c) (p)->SetPixelShaderConstantB(a,b,c) #define IDirect3DDevice9Ex_GetPixelShaderConstantB(p,a,b,c) (p)->GetPixelShaderConstantB(a,b,c) #define IDirect3DDevice9Ex_DrawRectPatch(p,a,b,c) (p)->DrawRectPatch(a,b,c) #define IDirect3DDevice9Ex_DrawTriPatch(p,a,b,c) (p)->DrawTriPatch(a,b,c) #define IDirect3DDevice9Ex_DeletePatch(p,a) (p)->DeletePatch(a) #define IDirect3DDevice9Ex_CreateQuery(p,a,b) (p)->CreateQuery(a,b) #define IDirect3DDevice9Ex_SetConvolutionMonoKernel(p,a,b,c,d) (p)->SetConvolutionMonoKernel(a,b,c,d) #define IDirect3DDevice9Ex_ComposeRects(p,a,b,c,d,e,f,g,h) (p)->ComposeRects(a,b,c,d,e,f,g,h) #define IDirect3DDevice9Ex_PresentEx(p,a,b,c,d,e) (p)->PresentEx(a,b,c,d,e) #define IDirect3DDevice9Ex_GetGPUThreadPriority(p,a) (p)->GetGPUThreadPriority(a) #define IDirect3DDevice9Ex_SetGPUThreadPriority(p,a) (p)->SetGPUThreadPriority(a) #define IDirect3DDevice9Ex_WaitForVBlank(p,a) (p)->WaitForVBlank(a) #define IDirect3DDevice9Ex_CheckResourceResidency(p,a,b) (p)->CheckResourceResidency(a,b) #define IDirect3DDevice9Ex_SetMaximumFrameLatency(p,a) (p)->SetMaximumFrameLatency(a) #define IDirect3DDevice9Ex_GetMaximumFrameLatency(p,a) (p)->GetMaximumFrameLatency(a) #define IDirect3DDevice9Ex_CheckDeviceState(p,a) (p)->CheckDeviceState(a) #define IDirect3DDevice9Ex_CreateRenderTargetEx(p,a,b,c,d,e,f,g,h,i) (p)->CreateRenderTargetEx(a,b,c,d,e,f,g,h,i) #define IDirect3DDevice9Ex_CreateOffscreenPlainSurfaceEx(p,a,b,c,d,e,f,g) (p)->CreateOffscreenPlainSurfaceEx(a,b,c,d,e,f,g) #define IDirect3DDevice9Ex_CreateDepthStencilSurfaceEx(p,a,b,c,d,e,f,g,h,i) (p)->CreateDepthStencilSurfaceEx(a,b,c,d,e,f,g,h,i) #define IDirect3DDevice9Ex_ResetEx(p,a,b) (p)->ResetEx(a,b) #define IDirect3DDevice9Ex_GetDisplayModeEx(p,a,b,c) (p)->GetDisplayModeEx(a,b,c) #endif #undef INTERFACE #define INTERFACE IDirect3DSwapChain9Ex DECLARE_INTERFACE_(IDirect3DSwapChain9Ex, IDirect3DSwapChain9) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DSwapChain9 methods ***/ STDMETHOD(Present)(THIS_ CONST RECT* pSourceRect,CONST RECT* pDestRect,HWND hDestWindowOverride,CONST RGNDATA* pDirtyRegion,DWORD dwFlags) PURE; STDMETHOD(GetFrontBufferData)(THIS_ IDirect3DSurface9* pDestSurface) PURE; STDMETHOD(GetBackBuffer)(THIS_ UINT iBackBuffer,D3DBACKBUFFER_TYPE Type,IDirect3DSurface9** ppBackBuffer) PURE; STDMETHOD(GetRasterStatus)(THIS_ D3DRASTER_STATUS* pRasterStatus) PURE; STDMETHOD(GetDisplayMode)(THIS_ D3DDISPLAYMODE* pMode) PURE; STDMETHOD(GetDevice)(THIS_ IDirect3DDevice9** ppDevice) PURE; STDMETHOD(GetPresentParameters)(THIS_ D3DPRESENT_PARAMETERS* pPresentationParameters) PURE; STDMETHOD(GetLastPresentCount)(THIS_ UINT* pLastPresentCount) PURE; STDMETHOD(GetPresentStats)(THIS_ D3DPRESENTSTATS* pPresentationStatistics) PURE; STDMETHOD(GetDisplayModeEx)(THIS_ D3DDISPLAYMODEEX* pMode,D3DDISPLAYROTATION* pRotation) PURE; }; typedef struct IDirect3DSwapChain9Ex *LPDIRECT3DSWAPCHAIN9EX, *PDIRECT3DSWAPCHAIN9EX; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirect3DSwapChain9Ex_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DSwapChain9Ex_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DSwapChain9Ex_Release(p) (p)->lpVtbl->Release(p) #define IDirect3DSwapChain9Ex_Present(p,a,b,c,d,e) (p)->lpVtbl->Present(p,a,b,c,d,e) #define IDirect3DSwapChain9Ex_GetFrontBufferData(p,a) (p)->lpVtbl->GetFrontBufferData(p,a) #define IDirect3DSwapChain9Ex_GetBackBuffer(p,a,b,c) (p)->lpVtbl->GetBackBuffer(p,a,b,c) #define IDirect3DSwapChain9Ex_GetRasterStatus(p,a) (p)->lpVtbl->GetRasterStatus(p,a) #define IDirect3DSwapChain9Ex_GetDisplayMode(p,a) (p)->lpVtbl->GetDisplayMode(p,a) #define IDirect3DSwapChain9Ex_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) #define IDirect3DSwapChain9Ex_GetPresentParameters(p,a) (p)->lpVtbl->GetPresentParameters(p,a) #define IDirect3DSwapChain9Ex_GetLastPresentCount(p,a) (p)->lpVtbl->GetLastPresentCount(p,a) #define IDirect3DSwapChain9Ex_GetPresentStats(p,a) (p)->lpVtbl->GetPresentStats(p,a) #define IDirect3DSwapChain9Ex_GetDisplayModeEx(p,a,b) (p)->lpVtbl->GetDisplayModeEx(p,a,b) #else #define IDirect3DSwapChain9Ex_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DSwapChain9Ex_AddRef(p) (p)->AddRef() #define IDirect3DSwapChain9Ex_Release(p) (p)->Release() #define IDirect3DSwapChain9Ex_Present(p,a,b,c,d,e) (p)->Present(a,b,c,d,e) #define IDirect3DSwapChain9Ex_GetFrontBufferData(p,a) (p)->GetFrontBufferData(a) #define IDirect3DSwapChain9Ex_GetBackBuffer(p,a,b,c) (p)->GetBackBuffer(a,b,c) #define IDirect3DSwapChain9Ex_GetRasterStatus(p,a) (p)->GetRasterStatus(a) #define IDirect3DSwapChain9Ex_GetDisplayMode(p,a) (p)->GetDisplayMode(a) #define IDirect3DSwapChain9Ex_GetDevice(p,a) (p)->GetDevice(a) #define IDirect3DSwapChain9Ex_GetPresentParameters(p,a) (p)->GetPresentParameters(a) #define IDirect3DSwapChain9Ex_GetLastPresentCount(p,a) (p)->GetLastPresentCount(a) #define IDirect3DSwapChain9Ex_GetPresentStats(p,a) (p)->GetPresentStats(a) #define IDirect3DSwapChain9Ex_GetDisplayModeEx(p,a,b) (p)->GetDisplayModeEx(a,b) #endif #endif // !D3D_DISABLE_9EX /* -- D3D9Ex only */ /* D3D9Ex only -- */ #if !defined(D3D_DISABLE_9EX) #undef INTERFACE #define INTERFACE IDirect3D9ExOverlayExtension DECLARE_INTERFACE_(IDirect3D9ExOverlayExtension, IUnknown) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3D9ExOverlayExtension methods ***/ STDMETHOD(CheckDeviceOverlayType)(THIS_ UINT Adapter,D3DDEVTYPE DevType,UINT OverlayWidth,UINT OverlayHeight,D3DFORMAT OverlayFormat,D3DDISPLAYMODEEX* pDisplayMode,D3DDISPLAYROTATION DisplayRotation,D3DOVERLAYCAPS* pOverlayCaps) PURE; }; typedef struct IDirect3D9ExOverlayExtension *LPDIRECT3D9EXOVERLAYEXTENSION, *PDIRECT3D9EXOVERLAYEXTENSION; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirect3D9ExOverlayExtension_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3D9ExOverlayExtension_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3D9ExOverlayExtension_Release(p) (p)->lpVtbl->Release(p) #define IDirect3D9ExOverlayExtension_CheckDeviceOverlayType(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->CheckDeviceOverlayType(p,a,b,c,d,e,f,g,h) #else #define IDirect3D9ExOverlayExtension_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3D9ExOverlayExtension_AddRef(p) (p)->AddRef() #define IDirect3D9ExOverlayExtension_Release(p) (p)->Release() #define IDirect3D9ExOverlayExtension_CheckDeviceOverlayType(p,a,b,c,d,e,f,g,h) (p)->CheckDeviceOverlayType(a,b,c,d,e,f,g,h) #endif #undef INTERFACE #define INTERFACE IDirect3DDevice9Video DECLARE_INTERFACE_(IDirect3DDevice9Video, IUnknown) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DDevice9Video methods ***/ STDMETHOD(GetContentProtectionCaps)(THIS_ CONST GUID* pCryptoType,CONST GUID* pDecodeProfile,D3DCONTENTPROTECTIONCAPS* pCaps) PURE; STDMETHOD(CreateAuthenticatedChannel)(THIS_ D3DAUTHENTICATEDCHANNELTYPE ChannelType,IDirect3DAuthenticatedChannel9** ppAuthenticatedChannel,HANDLE* pChannelHandle) PURE; STDMETHOD(CreateCryptoSession)(THIS_ CONST GUID* pCryptoType,CONST GUID* pDecodeProfile,IDirect3DCryptoSession9** ppCryptoSession,HANDLE* pCryptoHandle) PURE; }; typedef struct IDirect3DDevice9Video *LPDIRECT3DDEVICE9VIDEO, *PDIRECT3DDEVICE9VIDEO; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirect3DDevice9Video_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DDevice9Video_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DDevice9Video_Release(p) (p)->lpVtbl->Release(p) #define IDirect3DDevice9Video_GetContentProtectionCaps(p,a,b,c) (p)->lpVtbl->GetContentProtectionCaps(p,a,b,c) #define IDirect3DDevice9Video_CreateAuthenticatedChannel(p,a,b,c) (p)->lpVtbl->CreateAuthenticatedChannel(p,a,b,c) #define IDirect3DDevice9Video_CreateCryptoSession(p,a,b,c,d) (p)->lpVtbl->CreateCryptoSession(p,a,b,c,d) #else #define IDirect3DDevice9Video_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DDevice9Video_AddRef(p) (p)->AddRef() #define IDirect3DDevice9Video_Release(p) (p)->Release() #define IDirect3DDevice9Video_GetContentProtectionCaps(p,a,b,c) (p)->GetContentProtectionCaps(a,b,c) #define IDirect3DDevice9Video_CreateAuthenticatedChannel(p,a,b,c) (p)->CreateAuthenticatedChannel(a,b,c) #define IDirect3DDevice9Video_CreateCryptoSession(p,a,b,c,d) (p)->CreateCryptoSession(a,b,c,d) #endif #undef INTERFACE #define INTERFACE IDirect3DAuthenticatedChannel9 DECLARE_INTERFACE_(IDirect3DAuthenticatedChannel9, IUnknown) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DAuthenticatedChannel9 methods ***/ STDMETHOD(GetCertificateSize)(THIS_ UINT* pCertificateSize) PURE; STDMETHOD(GetCertificate)(THIS_ UINT CertifacteSize,BYTE* ppCertificate) PURE; STDMETHOD(NegotiateKeyExchange)(THIS_ UINT DataSize,VOID* pData) PURE; STDMETHOD(Query)(THIS_ UINT InputSize,CONST VOID* pInput,UINT OutputSize,VOID* pOutput) PURE; STDMETHOD(Configure)(THIS_ UINT InputSize,CONST VOID* pInput,D3DAUTHENTICATEDCHANNEL_CONFIGURE_OUTPUT* pOutput) PURE; }; typedef struct IDirect3DAuthenticatedChannel9 *LPDIRECT3DAUTHENTICATEDCHANNEL9, *PDIRECT3DAUTHENTICATEDCHANNEL9; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirect3DAuthenticatedChannel9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DAuthenticatedChannel9_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DAuthenticatedChannel9_Release(p) (p)->lpVtbl->Release(p) #define IDirect3DAuthenticatedChannel9_GetCertificateSize(p,a) (p)->lpVtbl->GetCertificateSize(p,a) #define IDirect3DAuthenticatedChannel9_GetCertificate(p,a,b) (p)->lpVtbl->GetCertificate(p,a,b) #define IDirect3DAuthenticatedChannel9_NegotiateKeyExchange(p,a,b) (p)->lpVtbl->NegotiateKeyExchange(p,a,b) #define IDirect3DAuthenticatedChannel9_Query(p,a,b,c,d) (p)->lpVtbl->Query(p,a,b,c,d) #define IDirect3DAuthenticatedChannel9_Configure(p,a,b,c) (p)->lpVtbl->Configure(p,a,b,c) #else #define IDirect3DAuthenticatedChannel9_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DAuthenticatedChannel9_AddRef(p) (p)->AddRef() #define IDirect3DAuthenticatedChannel9_Release(p) (p)->Release() #define IDirect3DAuthenticatedChannel9_GetCertificateSize(p,a) (p)->GetCertificateSize(a) #define IDirect3DAuthenticatedChannel9_GetCertificate(p,a,b) (p)->GetCertificate(a,b) #define IDirect3DAuthenticatedChannel9_NegotiateKeyExchange(p,a,b) (p)->NegotiateKeyExchange(a,b) #define IDirect3DAuthenticatedChannel9_Query(p,a,b,c,d) (p)->Query(a,b,c,d) #define IDirect3DAuthenticatedChannel9_Configure(p,a,b,c) (p)->Configure(a,b,c) #endif #undef INTERFACE #define INTERFACE IDirect3DCryptoSession9 DECLARE_INTERFACE_(IDirect3DCryptoSession9, IUnknown) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DCryptoSession9 methods ***/ STDMETHOD(GetCertificateSize)(THIS_ UINT* pCertificateSize) PURE; STDMETHOD(GetCertificate)(THIS_ UINT CertifacteSize,BYTE* ppCertificate) PURE; STDMETHOD(NegotiateKeyExchange)(THIS_ UINT DataSize,VOID* pData) PURE; STDMETHOD(EncryptionBlt)(THIS_ IDirect3DSurface9* pSrcSurface,IDirect3DSurface9* pDstSurface,UINT DstSurfaceSize,VOID* pIV) PURE; STDMETHOD(DecryptionBlt)(THIS_ IDirect3DSurface9* pSrcSurface,IDirect3DSurface9* pDstSurface,UINT SrcSurfaceSize,D3DENCRYPTED_BLOCK_INFO* pEncryptedBlockInfo,VOID* pContentKey,VOID* pIV) PURE; STDMETHOD(GetSurfacePitch)(THIS_ IDirect3DSurface9* pSrcSurface,UINT* pSurfacePitch) PURE; STDMETHOD(StartSessionKeyRefresh)(THIS_ VOID* pRandomNumber,UINT RandomNumberSize) PURE; STDMETHOD(FinishSessionKeyRefresh)(THIS) PURE; STDMETHOD(GetEncryptionBltKey)(THIS_ VOID* pReadbackKey,UINT KeySize) PURE; }; typedef struct IDirect3DCryptoSession9 *LPDIRECT3DCRYPTOSESSION9, *PDIRECT3DCRYPTOSESSION9; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirect3DCryptoSession9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DCryptoSession9_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DCryptoSession9_Release(p) (p)->lpVtbl->Release(p) #define IDirect3DCryptoSession9_GetCertificateSize(p,a) (p)->lpVtbl->GetCertificateSize(p,a) #define IDirect3DCryptoSession9_GetCertificate(p,a,b) (p)->lpVtbl->GetCertificate(p,a,b) #define IDirect3DCryptoSession9_NegotiateKeyExchange(p,a,b) (p)->lpVtbl->NegotiateKeyExchange(p,a,b) #define IDirect3DCryptoSession9_EncryptionBlt(p,a,b,c,d) (p)->lpVtbl->EncryptionBlt(p,a,b,c,d) #define IDirect3DCryptoSession9_DecryptionBlt(p,a,b,c,d,e,f) (p)->lpVtbl->DecryptionBlt(p,a,b,c,d,e,f) #define IDirect3DCryptoSession9_GetSurfacePitch(p,a,b) (p)->lpVtbl->GetSurfacePitch(p,a,b) #define IDirect3DCryptoSession9_StartSessionKeyRefresh(p,a,b) (p)->lpVtbl->StartSessionKeyRefresh(p,a,b) #define IDirect3DCryptoSession9_FinishSessionKeyRefresh(p) (p)->lpVtbl->FinishSessionKeyRefresh(p) #define IDirect3DCryptoSession9_GetEncryptionBltKey(p,a,b) (p)->lpVtbl->GetEncryptionBltKey(p,a,b) #else #define IDirect3DCryptoSession9_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DCryptoSession9_AddRef(p) (p)->AddRef() #define IDirect3DCryptoSession9_Release(p) (p)->Release() #define IDirect3DCryptoSession9_GetCertificateSize(p,a) (p)->GetCertificateSize(a) #define IDirect3DCryptoSession9_GetCertificate(p,a,b) (p)->GetCertificate(a,b) #define IDirect3DCryptoSession9_NegotiateKeyExchange(p,a,b) (p)->NegotiateKeyExchange(a,b) #define IDirect3DCryptoSession9_EncryptionBlt(p,a,b,c,d) (p)->EncryptionBlt(a,b,c,d) #define IDirect3DCryptoSession9_DecryptionBlt(p,a,b,c,d,e,f) (p)->DecryptionBlt(a,b,c,d,e,f) #define IDirect3DCryptoSession9_GetSurfacePitch(p,a,b) (p)->GetSurfacePitch(a,b) #define IDirect3DCryptoSession9_StartSessionKeyRefresh(p,a,b) (p)->StartSessionKeyRefresh(a,b) #define IDirect3DCryptoSession9_FinishSessionKeyRefresh(p) (p)->FinishSessionKeyRefresh() #define IDirect3DCryptoSession9_GetEncryptionBltKey(p,a,b) (p)->GetEncryptionBltKey(a,b) #endif /* -- D3D9Ex only */ #endif // !D3D_DISABLE_9EX #ifdef __cplusplus }; #endif #endif /* (DIRECT3D_VERSION >= 0x0900) */ #endif /* _D3D_H_ */ ================================================ FILE: Include/d3d9.wine.h ================================================ /* * Copyright (C) 2002-2003 Jason Edmeades * Raphael Junqueira * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_D3D9_H #define __WINE_D3D9_H #ifndef DIRECT3D_VERSION #define DIRECT3D_VERSION 0x0900 #endif #include #define COM_NO_WINDOWS_H #include #include #include #include /***************************************************************************** * Behavior Flags for IDirect3D8::CreateDevice */ #define D3DCREATE_FPU_PRESERVE __MSABI_LONG(0x00000002) #define D3DCREATE_MULTITHREADED __MSABI_LONG(0x00000004) #define D3DCREATE_PUREDEVICE __MSABI_LONG(0x00000010) #define D3DCREATE_SOFTWARE_VERTEXPROCESSING __MSABI_LONG(0x00000020) #define D3DCREATE_HARDWARE_VERTEXPROCESSING __MSABI_LONG(0x00000040) #define D3DCREATE_MIXED_VERTEXPROCESSING __MSABI_LONG(0x00000080) #define D3DCREATE_DISABLE_DRIVER_MANAGEMENT __MSABI_LONG(0x00000100) #define D3DCREATE_ADAPTERGROUP_DEVICE __MSABI_LONG(0x00000200) #define D3DCREATE_DISABLE_DRIVER_MANAGEMENT_EX __MSABI_LONG(0x00000400) #define D3DCREATE_NOWINDOWCHANGES __MSABI_LONG(0x00000800) #define D3DCREATE_DISABLE_PSGP_THREADING __MSABI_LONG(0x00002000) #define D3DCREATE_ENABLE_PRESENTSTATS __MSABI_LONG(0x00004000) #define D3DCREATE_DISABLE_PRINTSCREEN __MSABI_LONG(0x00008000) #define D3DCREATE_SCREENSAVER __MSABI_LONG(0x10000000) /***************************************************************************** * Flags for SetPrivateData */ #define D3DSPD_IUNKNOWN __MSABI_LONG(0x00000001) /***************************************************************************** * #defines and error codes */ #define D3D_SDK_VERSION 32 #define D3DADAPTER_DEFAULT 0 #define D3DENUM_NO_WHQL_LEVEL __MSABI_LONG(0x00000002) #define D3DPRESENT_BACK_BUFFERS_MAX __MSABI_LONG(3) #define D3DSGR_NO_CALIBRATION __MSABI_LONG(0x00000000) #define D3DSGR_CALIBRATE __MSABI_LONG(0x00000001) #define _FACD3D 0x876 #define MAKE_D3DHRESULT( code ) MAKE_HRESULT( 1, _FACD3D, code ) #define MAKE_D3DSTATUS( code ) MAKE_HRESULT( 0, _FACD3D, code ) /***************************************************************************** * Direct3D Errors */ #define D3D_OK S_OK #define D3DERR_WRONGTEXTUREFORMAT MAKE_D3DHRESULT(2072) #define D3DERR_UNSUPPORTEDCOLOROPERATION MAKE_D3DHRESULT(2073) #define D3DERR_UNSUPPORTEDCOLORARG MAKE_D3DHRESULT(2074) #define D3DERR_UNSUPPORTEDALPHAOPERATION MAKE_D3DHRESULT(2075) #define D3DERR_UNSUPPORTEDALPHAARG MAKE_D3DHRESULT(2076) #define D3DERR_TOOMANYOPERATIONS MAKE_D3DHRESULT(2077) #define D3DERR_CONFLICTINGTEXTUREFILTER MAKE_D3DHRESULT(2078) #define D3DERR_UNSUPPORTEDFACTORVALUE MAKE_D3DHRESULT(2079) #define D3DERR_CONFLICTINGRENDERSTATE MAKE_D3DHRESULT(2081) #define D3DERR_UNSUPPORTEDTEXTUREFILTER MAKE_D3DHRESULT(2082) #define D3DERR_CONFLICTINGTEXTUREPALETTE MAKE_D3DHRESULT(2086) #define D3DERR_DRIVERINTERNALERROR MAKE_D3DHRESULT(2087) #define D3DERR_NOTFOUND MAKE_D3DHRESULT(2150) #define D3DERR_MOREDATA MAKE_D3DHRESULT(2151) #define D3DERR_DEVICELOST MAKE_D3DHRESULT(2152) #define D3DERR_DEVICENOTRESET MAKE_D3DHRESULT(2153) #define D3DERR_NOTAVAILABLE MAKE_D3DHRESULT(2154) #define D3DERR_OUTOFVIDEOMEMORY MAKE_D3DHRESULT(380) #define D3DERR_INVALIDDEVICE MAKE_D3DHRESULT(2155) #define D3DERR_INVALIDCALL MAKE_D3DHRESULT(2156) #define D3DERR_DRIVERINVALIDCALL MAKE_D3DHRESULT(2157) #define D3DERR_WASSTILLDRAWING MAKE_D3DHRESULT(540) #define D3DOK_NOAUTOGEN MAKE_D3DSTATUS(2159) #define D3DERR_DEVICEREMOVED MAKE_D3DHRESULT(2160) #define D3DERR_DEVICEHUNG MAKE_D3DHRESULT(2164) #define S_NOT_RESIDENT MAKE_D3DSTATUS(2165) #define S_RESIDENT_IN_SHARED_MEMORY MAKE_D3DSTATUS(2166) #define S_PRESENT_MODE_CHANGED MAKE_D3DSTATUS(2167) #define S_PRESENT_OCCLUDED MAKE_D3DSTATUS(2168) #define D3DERR_UNSUPPORTEDOVERLAY MAKE_D3DHRESULT(2171) #define D3DERR_UNSUPPORTEDOVERLAYFORMAT MAKE_D3DHRESULT(2172) #define D3DERR_CANNOTPROTECTCONTENT MAKE_D3DHRESULT(2173) #define D3DERR_UNSUPPORTEDCRYPTO MAKE_D3DHRESULT(2174) #define D3DERR_PRESENT_STATISTICS_DISJOINT MAKE_D3DHRESULT(2180) /***************************************************************************** * Predeclare the interfaces */ DEFINE_GUID(IID_IDirect3D9, 0x81BDCBCA, 0x64D4, 0x426D, 0xAE, 0x8D, 0xAD, 0x1, 0x47, 0xF4, 0x27, 0x5C); typedef struct IDirect3D9 *LPDIRECT3D9, *PDIRECT3D9; DEFINE_GUID(IID_IDirect3D9Ex, 0x02177241, 0x69FC, 0x400C, 0x8F, 0xF1, 0x93, 0xA4, 0x4D, 0xF6, 0x86, 0x1D); typedef struct IDirect3D9Ex *LPDIRECT3D9EX, *PDIRECT3D9EX; DEFINE_GUID(IID_IDirect3DDevice9, 0xd0223b96, 0xbf7a, 0x43fd, 0x92, 0xbd, 0xa4, 0x3b, 0xd, 0x82, 0xb9, 0xeb); typedef struct IDirect3DDevice9 *LPDIRECT3DDEVICE9; DEFINE_GUID(IID_IDirect3DDevice9Ex, 0xb18b10ce, 0x2649, 0x405a, 0x87, 0xf, 0x95, 0xf7, 0x77, 0xd4, 0x31, 0x3a); typedef struct IDirect3DDevice9Ex *LPDIRECT3DDEVICE9EX, *PDIRECT3DDEVICE9EX; DEFINE_GUID(IID_IDirect3DResource9, 0x5eec05d, 0x8f7d, 0x4362, 0xb9, 0x99, 0xd1, 0xba, 0xf3, 0x57, 0xc7, 0x4); typedef struct IDirect3DResource9 *LPDIRECT3DRESOURCE9, *PDIRECT3DRESOURCE9; DEFINE_GUID(IID_IDirect3DVertexBuffer9, 0xb64bb1b5, 0xfd70, 0x4df6, 0xbf, 0x91, 0x19, 0xd0, 0xa1, 0x24, 0x55, 0xe3); typedef struct IDirect3DVertexBuffer9 *LPDIRECT3DVERTEXBUFFER9, *PDIRECT3DVERTEXBUFFER9; DEFINE_GUID(IID_IDirect3DVolume9, 0x24f416e6, 0x1f67, 0x4aa7, 0xb8, 0x8e, 0xd3, 0x3f, 0x6f, 0x31, 0x28, 0xa1); typedef struct IDirect3DVolume9 *LPDIRECT3DVOLUME9, *PDIRECT3DVOLUME9; DEFINE_GUID(IID_IDirect3DSwapChain9, 0x794950f2, 0xadfc, 0x458a, 0x90, 0x5e, 0x10, 0xa1, 0xb, 0xb, 0x50, 0x3b); typedef struct IDirect3DSwapChain9 *LPDIRECT3DSWAPCHAIN9, *PDIRECT3DSWAPCHAIN9; DEFINE_GUID(IID_IDirect3DSwapChain9Ex, 0x91886caf, 0x1c3d, 0x4d2e, 0xa0, 0xab, 0x3e, 0x4c, 0x7d, 0x8d, 0x33, 0x3); typedef struct IDirect3DSwapChain9Ex *LPDIRECT3DSWAPCHAIN9EX, *PDIRECT3DSWAPCHAIN9EX; DEFINE_GUID(IID_IDirect3DSurface9, 0xcfbaf3a, 0x9ff6, 0x429a, 0x99, 0xb3, 0xa2, 0x79, 0x6a, 0xf8, 0xb8, 0x9b); typedef struct IDirect3DSurface9 *LPDIRECT3DSURFACE9, *PDIRECT3DSURFACE9; DEFINE_GUID(IID_IDirect3DIndexBuffer9, 0x7c9dd65e, 0xd3f7, 0x4529, 0xac, 0xee, 0x78, 0x58, 0x30, 0xac, 0xde, 0x35); typedef struct IDirect3DIndexBuffer9 *LPDIRECT3DINDEXBUFFER9, *PDIRECT3DINDEXBUFFER9; DEFINE_GUID(IID_IDirect3DBaseTexture9, 0x580ca87e, 0x1d3c, 0x4d54, 0x99, 0x1d, 0xb7, 0xd3, 0xe3, 0xc2, 0x98, 0xce); typedef struct IDirect3DBaseTexture9 *LPDIRECT3DBASETEXTURE9, *PDIRECT3DBASETEXTURE9; DEFINE_GUID(IID_IDirect3DTexture9, 0x85c31227, 0x3de5, 0x4f00, 0x9b, 0x3a, 0xf1, 0x1a, 0xc3, 0x8c, 0x18, 0xb5); typedef struct IDirect3DTexture9 *LPDIRECT3DTEXTURE9, *PDIRECT3DTEXTURE9; DEFINE_GUID(IID_IDirect3DCubeTexture9, 0xfff32f81, 0xd953, 0x473a, 0x92, 0x23, 0x93, 0xd6, 0x52, 0xab, 0xa9, 0x3f); typedef struct IDirect3DCubeTexture9 *LPDIRECT3DCUBETEXTURE9, *PDIRECT3DCUBETEXTURE9; DEFINE_GUID(IID_IDirect3DVolumeTexture9, 0x2518526c, 0xe789, 0x4111, 0xa7, 0xb9, 0x47, 0xef, 0x32, 0x8d, 0x13, 0xe6); typedef struct IDirect3DVolumeTexture9 *LPDIRECT3DVOLUMETEXTURE9, *PDIRECT3DVOLUMETEXTURE9; DEFINE_GUID(IID_IDirect3DVertexDeclaration9, 0xdd13c59c, 0x36fa, 0x4098, 0xa8, 0xfb, 0xc7, 0xed, 0x39, 0xdc, 0x85, 0x46); typedef struct IDirect3DVertexDeclaration9 *LPDIRECT3DVERTEXDECLARATION9; DEFINE_GUID(IID_IDirect3DVertexShader9, 0xefc5557e, 0x6265, 0x4613, 0x8a, 0x94, 0x43, 0x85, 0x78, 0x89, 0xeb, 0x36); typedef struct IDirect3DVertexShader9 *LPDIRECT3DVERTEXSHADER9; DEFINE_GUID(IID_IDirect3DPixelShader9, 0x6d3bdbdc, 0x5b02, 0x4415, 0xb8, 0x52, 0xce, 0x5e, 0x8b, 0xcc, 0xb2, 0x89); typedef struct IDirect3DPixelShader9 *LPDIRECT3DPIXELSHADER9; DEFINE_GUID(IID_IDirect3DStateBlock9, 0xb07c4fe5, 0x310d, 0x4ba8, 0xa2, 0x3c, 0x4f, 0xf, 0x20, 0x6f, 0x21, 0x8b); typedef struct IDirect3DStateBlock9 *LPDIRECT3DSTATEBLOCK9; DEFINE_GUID(IID_IDirect3DQuery9, 0xd9771460, 0xa695, 0x4f26, 0xbb, 0xd3, 0x27, 0xb8, 0x40, 0xb5, 0x41, 0xcc); typedef struct IDirect3DQuery9 *LPDIRECT3DQUERY9, *PDIRECT3DQUERY9; /***************************************************************************** * IDirect3D9 interface */ #undef INTERFACE #define INTERFACE IDirect3D9 DECLARE_INTERFACE_(IDirect3D9,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3D9 methods ***/ STDMETHOD(RegisterSoftwareDevice)(THIS_ void* pInitializeFunction) PURE; STDMETHOD_(UINT, GetAdapterCount)(THIS) PURE; STDMETHOD(GetAdapterIdentifier)(THIS_ UINT Adapter, DWORD Flags, D3DADAPTER_IDENTIFIER9* pIdentifier) PURE; STDMETHOD_(UINT, GetAdapterModeCount)(THIS_ UINT Adapter, D3DFORMAT Format) PURE; STDMETHOD(EnumAdapterModes)(THIS_ UINT Adapter, D3DFORMAT Format, UINT Mode, D3DDISPLAYMODE* pMode) PURE; STDMETHOD(GetAdapterDisplayMode)(THIS_ UINT Adapter, D3DDISPLAYMODE* pMode) PURE; STDMETHOD(CheckDeviceType)(THIS_ UINT iAdapter, D3DDEVTYPE DevType, D3DFORMAT DisplayFormat, D3DFORMAT BackBufferFormat, BOOL bWindowed) PURE; STDMETHOD(CheckDeviceFormat)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT AdapterFormat, DWORD Usage, D3DRESOURCETYPE RType, D3DFORMAT CheckFormat) PURE; STDMETHOD(CheckDeviceMultiSampleType)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT SurfaceFormat, BOOL Windowed, D3DMULTISAMPLE_TYPE MultiSampleType, DWORD* pQualityLevels) PURE; STDMETHOD(CheckDepthStencilMatch)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT AdapterFormat, D3DFORMAT RenderTargetFormat, D3DFORMAT DepthStencilFormat) PURE; STDMETHOD(CheckDeviceFormatConversion)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT SourceFormat, D3DFORMAT TargetFormat) PURE; STDMETHOD(GetDeviceCaps)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DCAPS9* pCaps) PURE; STDMETHOD_(HMONITOR, GetAdapterMonitor)(THIS_ UINT Adapter) PURE; STDMETHOD(CreateDevice)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, HWND hFocusWindow, DWORD BehaviorFlags, D3DPRESENT_PARAMETERS* pPresentationParameters, struct IDirect3DDevice9** ppReturnedDeviceInterface) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3D9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3D9_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3D9_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3D9 methods ***/ #define IDirect3D9_RegisterSoftwareDevice(p,a) (p)->lpVtbl->RegisterSoftwareDevice(p,a) #define IDirect3D9_GetAdapterCount(p) (p)->lpVtbl->GetAdapterCount(p) #define IDirect3D9_GetAdapterIdentifier(p,a,b,c) (p)->lpVtbl->GetAdapterIdentifier(p,a,b,c) #define IDirect3D9_GetAdapterModeCount(p,a,b) (p)->lpVtbl->GetAdapterModeCount(p,a,b) #define IDirect3D9_EnumAdapterModes(p,a,b,c,d) (p)->lpVtbl->EnumAdapterModes(p,a,b,c,d) #define IDirect3D9_GetAdapterDisplayMode(p,a,b) (p)->lpVtbl->GetAdapterDisplayMode(p,a,b) #define IDirect3D9_CheckDeviceType(p,a,b,c,d,e) (p)->lpVtbl->CheckDeviceType(p,a,b,c,d,e) #define IDirect3D9_CheckDeviceFormat(p,a,b,c,d,e,f) (p)->lpVtbl->CheckDeviceFormat(p,a,b,c,d,e,f) #define IDirect3D9_CheckDeviceMultiSampleType(p,a,b,c,d,e,f) (p)->lpVtbl->CheckDeviceMultiSampleType(p,a,b,c,d,e,f) #define IDirect3D9_CheckDepthStencilMatch(p,a,b,c,d,e) (p)->lpVtbl->CheckDepthStencilMatch(p,a,b,c,d,e) #define IDirect3D9_CheckDeviceFormatConversion(p,a,b,c,d) (p)->lpVtbl->CheckDeviceFormatConversion(p,a,b,c,d) #define IDirect3D9_GetDeviceCaps(p,a,b,c) (p)->lpVtbl->GetDeviceCaps(p,a,b,c) #define IDirect3D9_GetAdapterMonitor(p,a) (p)->lpVtbl->GetAdapterMonitor(p,a) #define IDirect3D9_CreateDevice(p,a,b,c,d,e,f) (p)->lpVtbl->CreateDevice(p,a,b,c,d,e,f) #else /*** IUnknown methods ***/ #define IDirect3D9_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3D9_AddRef(p) (p)->AddRef() #define IDirect3D9_Release(p) (p)->Release() /*** IDirect3D9 methods ***/ #define IDirect3D9_RegisterSoftwareDevice(p,a) (p)->RegisterSoftwareDevice(a) #define IDirect3D9_GetAdapterCount(p) (p)->GetAdapterCount() #define IDirect3D9_GetAdapterIdentifier(p,a,b,c) (p)->GetAdapterIdentifier(a,b,c) #define IDirect3D9_GetAdapterModeCount(p,a,b) (p)->GetAdapterModeCount(a,b) #define IDirect3D9_EnumAdapterModes(p,a,b,c,d) (p)->EnumAdapterModes(a,b,c,d) #define IDirect3D9_GetAdapterDisplayMode(p,a,b) (p)->GetAdapterDisplayMode(a,b) #define IDirect3D9_CheckDeviceType(p,a,b,c,d,e) (p)->CheckDeviceType(a,b,c,d,e) #define IDirect3D9_CheckDeviceFormat(p,a,b,c,d,e,f) (p)->CheckDeviceFormat(a,b,c,d,e,f) #define IDirect3D9_CheckDeviceMultiSampleType(p,a,b,c,d,e,f) (p)->CheckDeviceMultiSampleType(a,b,c,d,e,f) #define IDirect3D9_CheckDepthStencilMatch(p,a,b,c,d,e) (p)->CheckDepthStencilMatch(a,b,c,d,e) #define IDirect3D9_CheckDeviceFormatConversion(p,a,b,c,d) (p)->CheckDeviceFormatConversion(a,b,c,d) #define IDirect3D9_GetDeviceCaps(p,a,b,c) (p)->GetDeviceCaps(a,b,c) #define IDirect3D9_GetAdapterMonitor(p,a) (p)->GetAdapterMonitor(a) #define IDirect3D9_CreateDevice(p,a,b,c,d,e,f) (p)->CreateDevice(a,b,c,d,e,f) #endif /***************************************************************************** * IDirect3D9Ex interface */ #define INTERFACE IDirect3D9Ex DECLARE_INTERFACE_(IDirect3D9Ex,IDirect3D9) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3D9 methods ***/ /* Note: Microsoft's d3d9.h does not declare IDirect3D9Ex::RegisterSoftwareDevice . This would mean that * the offsets of the other methods in the Vtable change too. This is wrong. In Microsoft's * d3d9.dll, the offsets for the other functions are still compatible with IDirect3D9. * This is probably because even in MS header IDirect3D9Ex inherits from IDirect3D9, which makes the * C++ interface compatible, and nobody uses the C interface in Windows world. */ STDMETHOD(RegisterSoftwareDevice)(THIS_ void* pInitializeFunction) PURE; STDMETHOD_(UINT, GetAdapterCount)(THIS) PURE; STDMETHOD(GetAdapterIdentifier)(THIS_ UINT Adapter, DWORD Flags, D3DADAPTER_IDENTIFIER9* pIdentifier) PURE; STDMETHOD_(UINT, GetAdapterModeCount)(THIS_ UINT Adapter, D3DFORMAT Format) PURE; STDMETHOD(EnumAdapterModes)(THIS_ UINT Adapter, D3DFORMAT Format, UINT Mode, D3DDISPLAYMODE* pMode) PURE; STDMETHOD(GetAdapterDisplayMode)(THIS_ UINT Adapter, D3DDISPLAYMODE* pMode) PURE; STDMETHOD(CheckDeviceType)(THIS_ UINT iAdapter, D3DDEVTYPE DevType, D3DFORMAT DisplayFormat, D3DFORMAT BackBufferFormat, BOOL bWindowed) PURE; STDMETHOD(CheckDeviceFormat)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT AdapterFormat, DWORD Usage, D3DRESOURCETYPE RType, D3DFORMAT CheckFormat) PURE; STDMETHOD(CheckDeviceMultiSampleType)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT SurfaceFormat, BOOL Windowed, D3DMULTISAMPLE_TYPE MultiSampleType, DWORD* pQualityLevels) PURE; STDMETHOD(CheckDepthStencilMatch)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT AdapterFormat, D3DFORMAT RenderTargetFormat, D3DFORMAT DepthStencilFormat) PURE; STDMETHOD(CheckDeviceFormatConversion)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT SourceFormat, D3DFORMAT TargetFormat) PURE; STDMETHOD(GetDeviceCaps)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DCAPS9* pCaps) PURE; STDMETHOD_(HMONITOR, GetAdapterMonitor)(THIS_ UINT Adapter) PURE; STDMETHOD(CreateDevice)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, HWND hFocusWindow, DWORD BehaviorFlags, D3DPRESENT_PARAMETERS* pPresentationParameters, struct IDirect3DDevice9** ppReturnedDeviceInterface) PURE; /*** IDirect3D9Ex methods ***/ //STDMETHOD_(UINT, GetAdapterModeCountEx)(THIS_ UINT Adapter, CONST D3DDISPLAYMODEFILTER *pFilter) PURE; //STDMETHOD(EnumAdapterModesEx)(THIS_ UINT Adapter, CONST D3DDISPLAYMODEFILTER *pFilter, UINT Mode, D3DDISPLAYMODEEX* pMode) PURE; STDMETHOD(GetAdapterDisplayModeEx)(THIS_ UINT Adapter, D3DDISPLAYMODEEX *pMode, D3DDISPLAYROTATION *pRotation); STDMETHOD(CreateDeviceEx)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, HWND hFocusWindow, DWORD BehaviorFlags, D3DPRESENT_PARAMETERS* pPresentationParameters, D3DDISPLAYMODEEX* pFullscreenDisplayMode, struct IDirect3DDevice9Ex **ppReturnedDeviceInterface) PURE; STDMETHOD(GetAdapterLUID)(THIS_ UINT Adatper, LUID *pLUID) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3D9Ex_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3D9Ex_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3D9Ex_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3D9 methods ***/ #define IDirect3D9Ex_RegisterSoftwareDevice(p,a) (p)->lpVtbl->RegisterSoftwareDevice(p,a) #define IDirect3D9Ex_GetAdapterCount(p) (p)->lpVtbl->GetAdapterCount(p) #define IDirect3D9Ex_GetAdapterIdentifier(p,a,b,c) (p)->lpVtbl->GetAdapterIdentifier(p,a,b,c) #define IDirect3D9Ex_GetAdapterModeCount(p,a,b) (p)->lpVtbl->GetAdapterModeCount(p,a,b) #define IDirect3D9Ex_EnumAdapterModes(p,a,b,c,d) (p)->lpVtbl->EnumAdapterModes(p,a,b,c,d) #define IDirect3D9Ex_GetAdapterDisplayMode(p,a,b) (p)->lpVtbl->GetAdapterDisplayMode(p,a,b) #define IDirect3D9Ex_CheckDeviceType(p,a,b,c,d,e) (p)->lpVtbl->CheckDeviceType(p,a,b,c,d,e) #define IDirect3D9Ex_CheckDeviceFormat(p,a,b,c,d,e,f) (p)->lpVtbl->CheckDeviceFormat(p,a,b,c,d,e,f) #define IDirect3D9Ex_CheckDeviceMultiSampleType(p,a,b,c,d,e,f) (p)->lpVtbl->CheckDeviceMultiSampleType(p,a,b,c,d,e,f) #define IDirect3D9Ex_CheckDepthStencilMatch(p,a,b,c,d,e) (p)->lpVtbl->CheckDepthStencilMatch(p,a,b,c,d,e) #define IDirect3D9Ex_CheckDeviceFormatConversion(p,a,b,c,d) (p)->lpVtbl->CheckDeviceFormatConversion(p,a,b,c,d) #define IDirect3D9Ex_GetDeviceCaps(p,a,b,c) (p)->lpVtbl->GetDeviceCaps(p,a,b,c) #define IDirect3D9Ex_GetAdapterMonitor(p,a) (p)->lpVtbl->GetAdapterMonitor(p,a) #define IDirect3D9Ex_CreateDevice(p,a,b,c,d,e,f) (p)->lpVtbl->CreateDevice(p,a,b,c,d,e,f) /*** IDirect3D9Ex methods ***/ #define IDirect3D9Ex_GetAdapterModeCountEx(p,a,b) (p)->lpVtbl->GetAdapterModeCountEx(p,a,b) #define IDirect3D9Ex_EnumAdapterModesEx(p,a,b,c,d) (p)->lpVtbl->EnumAdapterModesEx(p,a,b,c,d) #define IDirect3D9Ex_GetAdapterDisplayModeEx(p,a,b,c) (p)->lpVtbl->GetAdapterDisplayModeEx(p,a,b,c) #define IDirect3D9Ex_CreateDeviceEx(p,a,b,c,d,e,f,g) (p)->lpVtbl->CreateDeviceEx(p,a,b,c,d,e,f,g) #define IDirect3D9Ex_GetAdapterLUID(p,a,b) (p)->lpVtbl->GetAdapterLUID(p,a,b) #else /*** IUnknown methods ***/ #define IDirect3D9Ex_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3D9Ex_AddRef(p) (p)->AddRef() #define IDirect3D9Ex_Release(p) (p)->Release() /*** IDirect3D9 methods ***/ #define IDirect3D9Ex_RegisterSoftwareDevice(p,a) (p)->RegisterSoftwareDevice(a) #define IDirect3D9Ex_GetAdapterCount(p) (p)->GetAdapterCount() #define IDirect3D9Ex_GetAdapterIdentifier(p,a,b,c) (p)->GetAdapterIdentifier(a,b,c) #define IDirect3D9Ex_GetAdapterModeCount(p,a,b) (p)->GetAdapterModeCount(a,b) #define IDirect3D9Ex_EnumAdapterModes(p,a,b,c,d) (p)->EnumAdapterModes(a,b,c,d) #define IDirect3D9Ex_GetAdapterDisplayMode(p,a,b) (p)->GetAdapterDisplayMode(a,b) #define IDirect3D9Ex_CheckDeviceType(p,a,b,c,d,e) (p)->CheckDeviceType(a,b,c,d,e) #define IDirect3D9Ex_CheckDeviceFormat(p,a,b,c,d,e,f) (p)->CheckDeviceFormat(a,b,c,d,e,f) #define IDirect3D9Ex_CheckDeviceMultiSampleType(p,a,b,c,d,e,f) (p)->CheckDeviceMultiSampleType(a,b,c,d,e,f) #define IDirect3D9Ex_CheckDepthStencilMatch(p,a,b,c,d,e) (p)->CheckDepthStencilMatch(a,b,c,d,e) #define IDirect3D9Ex_CheckDeviceFormatConversion(p,a,b,c,d) (p)->CheckDeviceFormatConversion(a,b,c,d) #define IDirect3D9Ex_GetDeviceCaps(p,a,b,c) (p)->GetDeviceCaps(a,b,c) #define IDirect3D9Ex_GetAdapterMonitor(p,a) (p)->GetAdapterMonitor(a) #define IDirect3D9Ex_CreateDevice(p,a,b,c,d,e,f) (p)->CreateDevice(a,b,c,d,e,f) #endif /***************************************************************************** * IDirect3DVolume9 interface */ #define INTERFACE IDirect3DVolume9 DECLARE_INTERFACE_(IDirect3DVolume9,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DVolume9 methods ***/ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE; STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags) PURE; STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE; STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE; STDMETHOD(GetContainer)(THIS_ REFIID riid, void** ppContainer) PURE; STDMETHOD(GetDesc)(THIS_ D3DVOLUME_DESC* pDesc) PURE; STDMETHOD(LockBox)(THIS_ D3DLOCKED_BOX* pLockedVolume, CONST D3DBOX* pBox, DWORD Flags) PURE; STDMETHOD(UnlockBox)(THIS) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DVolume9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DVolume9_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DVolume9_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DVolume9 methods ***/ #define IDirect3DVolume9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) #define IDirect3DVolume9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d) #define IDirect3DVolume9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c) #define IDirect3DVolume9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a) #define IDirect3DVolume9_GetContainer(p,a,b) (p)->lpVtbl->GetContainer(p,a,b) #define IDirect3DVolume9_GetDesc(p,a) (p)->lpVtbl->GetDesc(p,a) #define IDirect3DVolume9_LockBox(p,a,b,c) (p)->lpVtbl->LockBox(p,a,b,c) #define IDirect3DVolume9_UnlockBox(p) (p)->lpVtbl->UnlockBox(p) #else /*** IUnknown methods ***/ #define IDirect3DVolume9_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DVolume9_AddRef(p) (p)->AddRef() #define IDirect3DVolume9_Release(p) (p)->Release() /*** IDirect3DVolume9 methods ***/ #define IDirect3DVolume9_GetDevice(p,a) (p)->GetDevice(a) #define IDirect3DVolume9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d) #define IDirect3DVolume9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c) #define IDirect3DVolume9_FreePrivateData(p,a) (p)->FreePrivateData(a) #define IDirect3DVolume9_GetContainer(p,a,b) (p)->GetContainer(a,b) #define IDirect3DVolume9_GetDesc(p,a) (p)->GetDesc(a) #define IDirect3DVolume9_LockBox(p,a,b,c) (p)->LockBox(a,b,c) #define IDirect3DVolume9_UnlockBox(p) (p)->UnlockBox() #endif /***************************************************************************** * IDirect3DSwapChain9 interface */ #define INTERFACE IDirect3DSwapChain9 DECLARE_INTERFACE_(IDirect3DSwapChain9,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DSwapChain9 methods ***/ STDMETHOD(Present)(THIS_ CONST RECT* pSourceRect, CONST RECT* pDestRect, HWND hDestWindowOverride, CONST RGNDATA* pDirtyRegion, DWORD dwFlags) PURE; STDMETHOD(GetFrontBufferData)(THIS_ struct IDirect3DSurface9* pDestSurface) PURE; STDMETHOD(GetBackBuffer)(THIS_ UINT iBackBuffer, D3DBACKBUFFER_TYPE Type, struct IDirect3DSurface9** ppBackBuffer) PURE; STDMETHOD(GetRasterStatus)(THIS_ D3DRASTER_STATUS* pRasterStatus) PURE; STDMETHOD(GetDisplayMode)(THIS_ D3DDISPLAYMODE* pMode) PURE; STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE; STDMETHOD(GetPresentParameters)(THIS_ D3DPRESENT_PARAMETERS* pPresentationParameters) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DSwapChain9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DSwapChain9_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DSwapChain9_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DSwapChain9 methods ***/ #define IDirect3DSwapChain9_Present(p,a,b,c,d,e) (p)->lpVtbl->Present(p,a,b,c,d,e) #define IDirect3DSwapChain9_GetFrontBufferData(p,a) (p)->lpVtbl->GetFrontBufferData(p,a) #define IDirect3DSwapChain9_GetBackBuffer(p,a,b,c) (p)->lpVtbl->GetBackBuffer(p,a,b,c) #define IDirect3DSwapChain9_GetRasterStatus(p,a) (p)->lpVtbl->GetRasterStatus(p,a) #define IDirect3DSwapChain9_GetDisplayMode(p,a) (p)->lpVtbl->GetDisplayMode(p,a) #define IDirect3DSwapChain9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) #define IDirect3DSwapChain9_GetPresentParameters(p,a) (p)->lpVtbl->GetPresentParameters(p,a) #else /*** IUnknown methods ***/ #define IDirect3DSwapChain9_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DSwapChain9_AddRef(p) (p)->AddRef() #define IDirect3DSwapChain9_Release(p) (p)->Release() /*** IDirect3DSwapChain9 methods ***/ #define IDirect3DSwapChain9_Present(p,a,b,c,d,e) (p)->Present(a,b,c,d,e) #define IDirect3DSwapChain9_GetFrontBufferData(p,a) (p)->GetFrontBufferData(a) #define IDirect3DSwapChain9_GetBackBuffer(p,a,b,c) (p)->GetBackBuffer(a,b,c) #define IDirect3DSwapChain9_GetRasterStatus(p,a) (p)->GetRasterStatus(a) #define IDirect3DSwapChain9_GetDisplayMode(p,a) (p)->GetDisplayMode(a) #define IDirect3DSwapChain9_GetDevice(p,a) (p)->GetDevice(a) #define IDirect3DSwapChain9_GetPresentParameters(p,a) (p)->GetPresentParameters(a) #endif /***************************************************************************** * IDirect3DResource9 interface */ #define INTERFACE IDirect3DResource9 DECLARE_INTERFACE_(IDirect3DResource9,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DResource9 methods ***/ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE; STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags) PURE; STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE; STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE; STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE; STDMETHOD_(DWORD, GetPriority)(THIS) PURE; STDMETHOD_(void, PreLoad)(THIS) PURE; STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DResource9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DResource9_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DResource9_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DResource9 methods ***/ #define IDirect3DResource9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) #define IDirect3DResource9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d) #define IDirect3DResource9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c) #define IDirect3DResource9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a) #define IDirect3DResource9_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a) #define IDirect3DResource9_GetPriority(p) (p)->lpVtbl->GetPriority(p) #define IDirect3DResource9_PreLoad(p) (p)->lpVtbl->PreLoad(p) #define IDirect3DResource9_GetType(p) (p)->lpVtbl->GetType(p) #else /*** IUnknown methods ***/ #define IDirect3DResource9_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DResource9_AddRef(p) (p)->AddRef() #define IDirect3DResource9_Release(p) (p)->Release() /*** IDirect3DResource9 methods ***/ #define IDirect3DResource9_GetDevice(p,a) (p)->GetDevice(a) #define IDirect3DResource9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d) #define IDirect3DResource9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c) #define IDirect3DResource9_FreePrivateData(p,a) (p)->FreePrivateData(a) #define IDirect3DResource9_SetPriority(p,a) (p)->SetPriority(a) #define IDirect3DResource9_GetPriority(p) (p)->GetPriority() #define IDirect3DResource9_PreLoad(p) (p)->PreLoad() #define IDirect3DResource9_GetType(p) (p)->GetType() #endif /***************************************************************************** * IDirect3DSurface9 interface */ #define INTERFACE IDirect3DSurface9 DECLARE_INTERFACE_(IDirect3DSurface9,IDirect3DResource9) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DResource9 methods ***/ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE; STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags) PURE; STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE; STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE; STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE; STDMETHOD_(DWORD, GetPriority)(THIS) PURE; STDMETHOD_(void, PreLoad)(THIS) PURE; STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE; /*** IDirect3DSurface9 methods ***/ STDMETHOD(GetContainer)(THIS_ REFIID riid, void** ppContainer) PURE; STDMETHOD(GetDesc)(THIS_ D3DSURFACE_DESC* pDesc) PURE; STDMETHOD(LockRect)(THIS_ D3DLOCKED_RECT* pLockedRect, CONST RECT* pRect, DWORD Flags) PURE; STDMETHOD(UnlockRect)(THIS) PURE; STDMETHOD(GetDC)(THIS_ HDC* phdc) PURE; STDMETHOD(ReleaseDC)(THIS_ HDC hdc) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DSurface9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DSurface9_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DSurface9_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DSurface9 methods: IDirect3DResource9 ***/ #define IDirect3DSurface9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) #define IDirect3DSurface9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d) #define IDirect3DSurface9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c) #define IDirect3DSurface9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a) #define IDirect3DSurface9_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a) #define IDirect3DSurface9_GetPriority(p) (p)->lpVtbl->GetPriority(p) #define IDirect3DSurface9_PreLoad(p) (p)->lpVtbl->PreLoad(p) #define IDirect3DSurface9_GetType(p) (p)->lpVtbl->GetType(p) /*** IDirect3DSurface9 methods ***/ #define IDirect3DSurface9_GetContainer(p,a,b) (p)->lpVtbl->GetContainer(p,a,b) #define IDirect3DSurface9_GetDesc(p,a) (p)->lpVtbl->GetDesc(p,a) #define IDirect3DSurface9_LockRect(p,a,b,c) (p)->lpVtbl->LockRect(p,a,b,c) #define IDirect3DSurface9_UnlockRect(p) (p)->lpVtbl->UnlockRect(p) #define IDirect3DSurface9_GetDC(p,a) (p)->lpVtbl->GetDC(p,a) #define IDirect3DSurface9_ReleaseDC(p,a) (p)->lpVtbl->ReleaseDC(p,a) #else /*** IUnknown methods ***/ #define IDirect3DSurface9_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DSurface9_AddRef(p) (p)->AddRef() #define IDirect3DSurface9_Release(p) (p)->Release() /*** IDirect3DSurface9 methods: IDirect3DResource9 ***/ #define IDirect3DSurface9_GetDevice(p,a) (p)->GetDevice(a) #define IDirect3DSurface9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d) #define IDirect3DSurface9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c) #define IDirect3DSurface9_FreePrivateData(p,a) (p)->FreePrivateData(a) #define IDirect3DSurface9_SetPriority(p,a) (p)->SetPriority(a) #define IDirect3DSurface9_GetPriority(p) (p)->GetPriority() #define IDirect3DSurface9_PreLoad(p) (p)->PreLoad() #define IDirect3DSurface9_GetType(p) (p)->GetType() /*** IDirect3DSurface9 methods ***/ #define IDirect3DSurface9_GetContainer(p,a,b) (p)->GetContainer(a,b) #define IDirect3DSurface9_GetDesc(p,a) (p)->GetDesc(a) #define IDirect3DSurface9_LockRect(p,a,b,c) (p)->LockRect(a,b,c) #define IDirect3DSurface9_UnlockRect(p) (p)->UnlockRect() #define IDirect3DSurface9_GetDC(p,a) (p)->GetDC(a) #define IDirect3DSurface9_ReleaseDC(p,a) (p)->ReleaseDC(a) #endif /***************************************************************************** * IDirect3DVertexBuffer9 interface */ #define INTERFACE IDirect3DVertexBuffer9 DECLARE_INTERFACE_(IDirect3DVertexBuffer9,IDirect3DResource9) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DResource9 methods ***/ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE; STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags) PURE; STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE; STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE; STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE; STDMETHOD_(DWORD, GetPriority)(THIS) PURE; STDMETHOD_(void, PreLoad)(THIS) PURE; STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE; /*** IDirect3DVertexBuffer9 methods ***/ STDMETHOD(Lock)(THIS_ UINT OffsetToLock, UINT SizeToLock, void** ppbData, DWORD Flags) PURE; STDMETHOD(Unlock)(THIS) PURE; STDMETHOD(GetDesc)(THIS_ D3DVERTEXBUFFER_DESC* pDesc) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DVertexBuffer9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DVertexBuffer9_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DVertexBuffer9_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DVertexBuffer9 methods: IDirect3DResource9 ***/ #define IDirect3DVertexBuffer9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) #define IDirect3DVertexBuffer9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d) #define IDirect3DVertexBuffer9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c) #define IDirect3DVertexBuffer9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a) #define IDirect3DVertexBuffer9_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a) #define IDirect3DVertexBuffer9_GetPriority(p) (p)->lpVtbl->GetPriority(p) #define IDirect3DVertexBuffer9_PreLoad(p) (p)->lpVtbl->PreLoad(p) #define IDirect3DVertexBuffer9_GetType(p) (p)->lpVtbl->GetType(p) /*** IDirect3DVertexBuffer9 methods ***/ #define IDirect3DVertexBuffer9_Lock(p,a,b,c,d) (p)->lpVtbl->Lock(p,a,b,c,d) #define IDirect3DVertexBuffer9_Unlock(p) (p)->lpVtbl->Unlock(p) #define IDirect3DVertexBuffer9_GetDesc(p,a) (p)->lpVtbl->GetDesc(p,a) #else /*** IUnknown methods ***/ #define IDirect3DVertexBuffer9_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DVertexBuffer9_AddRef(p) (p)->AddRef() #define IDirect3DVertexBuffer9_Release(p) (p)->Release() /*** IDirect3DVertexBuffer9 methods: IDirect3DResource9 ***/ #define IDirect3DVertexBuffer9_GetDevice(p,a) (p)->GetDevice(a) #define IDirect3DVertexBuffer9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d) #define IDirect3DVertexBuffer9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c) #define IDirect3DVertexBuffer9_FreePrivateData(p,a) (p)->FreePrivateData(a) #define IDirect3DVertexBuffer9_SetPriority(p,a) (p)->SetPriority(a) #define IDirect3DVertexBuffer9_GetPriority(p) (p)->GetPriority() #define IDirect3DVertexBuffer9_PreLoad(p) (p)->PreLoad() #define IDirect3DVertexBuffer9_GetType(p) (p)->GetType() /*** IDirect3DVertexBuffer9 methods ***/ #define IDirect3DVertexBuffer9_Lock(p,a,b,c,d) (p)->Lock(a,b,c,d) #define IDirect3DVertexBuffer9_Unlock(p) (p)->Unlock() #define IDirect3DVertexBuffer9_GetDesc(p,a) (p)->GetDesc(a) #endif /***************************************************************************** * IDirect3DIndexBuffer9 interface */ #define INTERFACE IDirect3DIndexBuffer9 DECLARE_INTERFACE_(IDirect3DIndexBuffer9,IDirect3DResource9) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DResource9 methods ***/ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE; STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags) PURE; STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE; STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE; STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE; STDMETHOD_(DWORD, GetPriority)(THIS) PURE; STDMETHOD_(void, PreLoad)(THIS) PURE; STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE; /*** IDirect3DIndexBuffer9 methods ***/ STDMETHOD(Lock)(THIS_ UINT OffsetToLock, UINT SizeToLock, void** ppbData, DWORD Flags) PURE; STDMETHOD(Unlock)(THIS) PURE; STDMETHOD(GetDesc)(THIS_ D3DINDEXBUFFER_DESC* pDesc) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DIndexBuffer9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DIndexBuffer9_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DIndexBuffer9_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DIndexBuffer9 methods: IDirect3DResource9 ***/ #define IDirect3DIndexBuffer9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) #define IDirect3DIndexBuffer9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d) #define IDirect3DIndexBuffer9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c) #define IDirect3DIndexBuffer9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a) #define IDirect3DIndexBuffer9_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a) #define IDirect3DIndexBuffer9_GetPriority(p) (p)->lpVtbl->GetPriority(p) #define IDirect3DIndexBuffer9_PreLoad(p) (p)->lpVtbl->PreLoad(p) #define IDirect3DIndexBuffer9_GetType(p) (p)->lpVtbl->GetType(p) /*** IDirect3DIndexBuffer9 methods ***/ #define IDirect3DIndexBuffer9_Lock(p,a,b,c,d) (p)->lpVtbl->Lock(p,a,b,c,d) #define IDirect3DIndexBuffer9_Unlock(p) (p)->lpVtbl->Unlock(p) #define IDirect3DIndexBuffer9_GetDesc(p,a) (p)->lpVtbl->GetDesc(p,a) #else /*** IUnknown methods ***/ #define IDirect3DIndexBuffer9_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DIndexBuffer9_AddRef(p) (p)->AddRef() #define IDirect3DIndexBuffer9_Release(p) (p)->Release() /*** IDirect3DIndexBuffer9 methods: IDirect3DResource9 ***/ #define IDirect3DIndexBuffer9_GetDevice(p,a) (p)->GetDevice(a) #define IDirect3DIndexBuffer9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d) #define IDirect3DIndexBuffer9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c) #define IDirect3DIndexBuffer9_FreePrivateData(p,a) (p)->FreePrivateData(a) #define IDirect3DIndexBuffer9_SetPriority(p,a) (p)->SetPriority(a) #define IDirect3DIndexBuffer9_GetPriority(p) (p)->GetPriority() #define IDirect3DIndexBuffer9_PreLoad(p) (p)->PreLoad() #define IDirect3DIndexBuffer9_GetType(p) (p)->GetType() /*** IDirect3DIndexBuffer9 methods ***/ #define IDirect3DIndexBuffer9_Lock(p,a,b,c,d) (p)->Lock(a,b,c,d) #define IDirect3DIndexBuffer9_Unlock(p) (p)->Unlock() #define IDirect3DIndexBuffer9_GetDesc(p,a) (p)->GetDesc(a) #endif /***************************************************************************** * IDirect3DBaseTexture9 interface */ #define INTERFACE IDirect3DBaseTexture9 DECLARE_INTERFACE_(IDirect3DBaseTexture9,IDirect3DResource9) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DResource9 methods ***/ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE; STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags) PURE; STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE; STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE; STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE; STDMETHOD_(DWORD, GetPriority)(THIS) PURE; STDMETHOD_(void, PreLoad)(THIS) PURE; STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE; /*** IDirect3DBaseTexture9 methods ***/ STDMETHOD_(DWORD, SetLOD)(THIS_ DWORD LODNew) PURE; STDMETHOD_(DWORD, GetLOD)(THIS) PURE; STDMETHOD_(DWORD, GetLevelCount)(THIS) PURE; STDMETHOD(SetAutoGenFilterType)(THIS_ D3DTEXTUREFILTERTYPE FilterType) PURE; STDMETHOD_(D3DTEXTUREFILTERTYPE, GetAutoGenFilterType)(THIS) PURE; STDMETHOD_(void, GenerateMipSubLevels)(THIS) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DBaseTexture9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DBaseTexture9_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DBaseTexture9_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DBaseTexture9 methods: IDirect3DResource9 ***/ #define IDirect3DBaseTexture9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) #define IDirect3DBaseTexture9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d) #define IDirect3DBaseTexture9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c) #define IDirect3DBaseTexture9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a) #define IDirect3DBaseTexture9_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a) #define IDirect3DBaseTexture9_GetPriority(p) (p)->lpVtbl->GetPriority(p) #define IDirect3DBaseTexture9_PreLoad(p) (p)->lpVtbl->PreLoad(p) #define IDirect3DBaseTexture9_GetType(p) (p)->lpVtbl->GetType(p) /*** IDirect3DBaseTexture9 methods ***/ #define IDirect3DBaseTexture9_SetLOD(p,a) (p)->lpVtbl->SetLOD(p,a) #define IDirect3DBaseTexture9_GetLOD(p) (p)->lpVtbl->GetLOD(p) #define IDirect3DBaseTexture9_GetLevelCount(p) (p)->lpVtbl->GetLevelCount(p) #define IDirect3DBaseTexture9_SetAutoGenFilterType(p,a) (p)->lpVtbl->SetAutoGenFilterType(p,a) #define IDirect3DBaseTexture9_GetAutoGenFilterType(p) (p)->lpVtbl->GetAutoGenFilterType(p) #define IDirect3DBaseTexture9_GenerateMipSubLevels(p) (p)->lpVtbl->GenerateMipSubLevels(p) #else /*** IUnknown methods ***/ #define IDirect3DBaseTexture9_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DBaseTexture9_AddRef(p) (p)->AddRef() #define IDirect3DBaseTexture9_Release(p) (p)->Release() /*** IDirect3DBaseTexture9 methods: IDirect3DResource9 ***/ #define IDirect3DBaseTexture9_GetDevice(p,a) (p)->GetDevice(a) #define IDirect3DBaseTexture9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d) #define IDirect3DBaseTexture9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c) #define IDirect3DBaseTexture9_FreePrivateData(p,a) (p)->FreePrivateData(a) #define IDirect3DBaseTexture9_SetPriority(p,a) (p)->SetPriority(a) #define IDirect3DBaseTexture9_GetPriority(p) (p)->GetPriority() #define IDirect3DBaseTexture9_PreLoad(p) (p)->PreLoad() #define IDirect3DBaseTexture9_GetType(p) (p)->GetType() /*** IDirect3DBaseTexture9 methods ***/ #define IDirect3DBaseTexture9_SetLOD(p,a) (p)->SetLOD(a) #define IDirect3DBaseTexture9_GetLOD(p) (p)->GetLOD() #define IDirect3DBaseTexture9_GetLevelCount(p) (p)->GetLevelCount() #define IDirect3DBaseTexture9_SetAutoGenFilterType(p,a) (p)->SetAutoGenFilterType(a) #define IDirect3DBaseTexture9_GetAutoGenFilterType(p) (p)->GetAutoGenFilterType() #define IDirect3DBaseTexture9_GenerateMipSubLevels(p) (p)->GenerateMipSubLevels() #endif /***************************************************************************** * IDirect3DCubeTexture9 interface */ #define INTERFACE IDirect3DCubeTexture9 DECLARE_INTERFACE_(IDirect3DCubeTexture9,IDirect3DBaseTexture9) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DResource9 methods ***/ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE; STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags) PURE; STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE; STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE; STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE; STDMETHOD_(DWORD, GetPriority)(THIS) PURE; STDMETHOD_(void, PreLoad)(THIS) PURE; STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE; /*** IDirect3DBaseTexture9 methods ***/ STDMETHOD_(DWORD, SetLOD)(THIS_ DWORD LODNew) PURE; STDMETHOD_(DWORD, GetLOD)(THIS) PURE; STDMETHOD_(DWORD, GetLevelCount)(THIS) PURE; STDMETHOD(SetAutoGenFilterType)(THIS_ D3DTEXTUREFILTERTYPE FilterType) PURE; STDMETHOD_(D3DTEXTUREFILTERTYPE, GetAutoGenFilterType)(THIS) PURE; STDMETHOD_(void, GenerateMipSubLevels)(THIS) PURE; /*** IDirect3DCubeTexture9 methods ***/ STDMETHOD(GetLevelDesc)(THIS_ UINT Level,D3DSURFACE_DESC* pDesc) PURE; STDMETHOD(GetCubeMapSurface)(THIS_ D3DCUBEMAP_FACES FaceType, UINT Level, IDirect3DSurface9** ppCubeMapSurface) PURE; STDMETHOD(LockRect)(THIS_ D3DCUBEMAP_FACES FaceType, UINT Level, D3DLOCKED_RECT* pLockedRect, CONST RECT* pRect, DWORD Flags) PURE; STDMETHOD(UnlockRect)(THIS_ D3DCUBEMAP_FACES FaceType, UINT Level) PURE; STDMETHOD(AddDirtyRect)(THIS_ D3DCUBEMAP_FACES FaceType, CONST RECT* pDirtyRect) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DCubeTexture9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DCubeTexture9_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DCubeTexture9_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DCubeTexture9 methods: IDirect3DResource9 ***/ #define IDirect3DCubeTexture9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) #define IDirect3DCubeTexture9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d) #define IDirect3DCubeTexture9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c) #define IDirect3DCubeTexture9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a) #define IDirect3DCubeTexture9_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a) #define IDirect3DCubeTexture9_GetPriority(p) (p)->lpVtbl->GetPriority(p) #define IDirect3DCubeTexture9_PreLoad(p) (p)->lpVtbl->PreLoad(p) #define IDirect3DCubeTexture9_GetType(p) (p)->lpVtbl->GetType(p) /*** IDirect3DCubeTexture9 methods: IDirect3DBaseTexture9 ***/ #define IDirect3DCubeTexture9_SetLOD(p,a) (p)->lpVtbl->SetLOD(p,a) #define IDirect3DCubeTexture9_GetLOD(p) (p)->lpVtbl->GetLOD(p) #define IDirect3DCubeTexture9_GetLevelCount(p) (p)->lpVtbl->GetLevelCount(p) #define IDirect3DCubeTexture9_SetAutoGenFilterType(p,a) (p)->lpVtbl->SetAutoGenFilterType(p,a) #define IDirect3DCubeTexture9_GetAutoGenFilterType(p) (p)->lpVtbl->GetAutoGenFilterType(p) #define IDirect3DCubeTexture9_GenerateMipSubLevels(p) (p)->lpVtbl->GenerateMipSubLevels(p) /*** IDirect3DCubeTexture9 methods ***/ #define IDirect3DCubeTexture9_GetLevelDesc(p,a,b) (p)->lpVtbl->GetLevelDesc(p,a,b) #define IDirect3DCubeTexture9_GetCubeMapSurface(p,a,b,c) (p)->lpVtbl->GetCubeMapSurface(p,a,b,c) #define IDirect3DCubeTexture9_LockRect(p,a,b,c,d,e) (p)->lpVtbl->LockRect(p,a,b,c,d,e) #define IDirect3DCubeTexture9_UnlockRect(p,a,b) (p)->lpVtbl->UnlockRect(p,a,b) #define IDirect3DCubeTexture9_AddDirtyRect(p,a,b) (p)->lpVtbl->AddDirtyRect(p,a,b) #else /*** IUnknown methods ***/ #define IDirect3DCubeTexture9_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DCubeTexture9_AddRef(p) (p)->AddRef() #define IDirect3DCubeTexture9_Release(p) (p)->Release() /*** IDirect3DCubeTexture9 methods: IDirect3DResource9 ***/ #define IDirect3DCubeTexture9_GetDevice(p,a) (p)->GetDevice(a) #define IDirect3DCubeTexture9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d) #define IDirect3DCubeTexture9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c) #define IDirect3DCubeTexture9_FreePrivateData(p,a) (p)->FreePrivateData(a) #define IDirect3DCubeTexture9_SetPriority(p,a) (p)->SetPriority(a) #define IDirect3DCubeTexture9_GetPriority(p) (p)->GetPriority() #define IDirect3DCubeTexture9_PreLoad(p) (p)->PreLoad() #define IDirect3DCubeTexture9_GetType(p) (p)->GetType() /*** IDirect3DCubeTexture9 methods: IDirect3DBaseTexture9 ***/ #define IDirect3DCubeTexture9_SetLOD(p,a) (p)->SetLOD(a) #define IDirect3DCubeTexture9_GetLOD(p) (p)->GetLOD() #define IDirect3DCubeTexture9_GetLevelCount(p) (p)->GetLevelCount() #define IDirect3DCubeTexture9_SetAutoGenFilterType(p,a) (p)->SetAutoGenFilterType(a) #define IDirect3DCubeTexture9_GetAutoGenFilterType(p) (p)->GetAutoGenFilterType() #define IDirect3DCubeTexture9_GenerateMipSubLevels(p) (p)->GenerateMipSubLevels() /*** IDirect3DCubeTexture9 methods ***/ #define IDirect3DCubeTexture9_GetLevelDesc(p,a,b) (p)->GetLevelDesc(a,b) #define IDirect3DCubeTexture9_GetCubeMapSurface(p,a,b,c) (p)->GetCubeMapSurface(a,b,c) #define IDirect3DCubeTexture9_LockRect(p,a,b,c,d,e) (p)->LockRect(a,b,c,d,e) #define IDirect3DCubeTexture9_UnlockRect(p,a,b) (p)->UnlockRect(a,b) #define IDirect3DCubeTexture9_AddDirtyRect(p,a,b) (p)->AddDirtyRect(a,b) #endif /***************************************************************************** * IDirect3DTexture9 interface */ #define INTERFACE IDirect3DTexture9 DECLARE_INTERFACE_(IDirect3DTexture9,IDirect3DBaseTexture9) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DResource9 methods ***/ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE; STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags) PURE; STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE; STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE; STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE; STDMETHOD_(DWORD, GetPriority)(THIS) PURE; STDMETHOD_(void, PreLoad)(THIS) PURE; STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE; /*** IDirect3DBaseTexture9 methods ***/ STDMETHOD_(DWORD, SetLOD)(THIS_ DWORD LODNew) PURE; STDMETHOD_(DWORD, GetLOD)(THIS) PURE; STDMETHOD_(DWORD, GetLevelCount)(THIS) PURE; STDMETHOD(SetAutoGenFilterType)(THIS_ D3DTEXTUREFILTERTYPE FilterType) PURE; STDMETHOD_(D3DTEXTUREFILTERTYPE, GetAutoGenFilterType)(THIS) PURE; STDMETHOD_(void, GenerateMipSubLevels)(THIS) PURE; /*** IDirect3DTexture9 methods ***/ STDMETHOD(GetLevelDesc)(THIS_ UINT Level, D3DSURFACE_DESC* pDesc) PURE; STDMETHOD(GetSurfaceLevel)(THIS_ UINT Level, IDirect3DSurface9** ppSurfaceLevel) PURE; STDMETHOD(LockRect)(THIS_ UINT Level, D3DLOCKED_RECT* pLockedRect, CONST RECT* pRect, DWORD Flags) PURE; STDMETHOD(UnlockRect)(THIS_ UINT Level) PURE; STDMETHOD(AddDirtyRect)(THIS_ CONST RECT* pDirtyRect) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DTexture9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DTexture9_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DTexture9_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DTexture9 methods: IDirect3DResource9 ***/ #define IDirect3DTexture9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) #define IDirect3DTexture9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d) #define IDirect3DTexture9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c) #define IDirect3DTexture9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a) #define IDirect3DTexture9_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a) #define IDirect3DTexture9_GetPriority(p) (p)->lpVtbl->GetPriority(p) #define IDirect3DTexture9_PreLoad(p) (p)->lpVtbl->PreLoad(p) #define IDirect3DTexture9_GetType(p) (p)->lpVtbl->GetType(p) /*** IDirect3DTexture9 methods: IDirect3DBaseTexture9 ***/ #define IDirect3DTexture9_SetLOD(p,a) (p)->lpVtbl->SetLOD(p,a) #define IDirect3DTexture9_GetLOD(p) (p)->lpVtbl->GetLOD(p) #define IDirect3DTexture9_GetLevelCount(p) (p)->lpVtbl->GetLevelCount(p) #define IDirect3DTexture9_SetAutoGenFilterType(p,a) (p)->lpVtbl->SetAutoGenFilterType(p,a) #define IDirect3DTexture9_GetAutoGenFilterType(p) (p)->lpVtbl->GetAutoGenFilterType(p) #define IDirect3DTexture9_GenerateMipSubLevels(p) (p)->lpVtbl->GenerateMipSubLevels(p) /*** IDirect3DTexture9 methods ***/ #define IDirect3DTexture9_GetLevelDesc(p,a,b) (p)->lpVtbl->GetLevelDesc(p,a,b) #define IDirect3DTexture9_GetSurfaceLevel(p,a,b) (p)->lpVtbl->GetSurfaceLevel(p,a,b) #define IDirect3DTexture9_LockRect(p,a,b,c,d) (p)->lpVtbl->LockRect(p,a,b,c,d) #define IDirect3DTexture9_UnlockRect(p,a) (p)->lpVtbl->UnlockRect(p,a) #define IDirect3DTexture9_AddDirtyRect(p,a) (p)->lpVtbl->AddDirtyRect(p,a) #else /*** IUnknown methods ***/ #define IDirect3DTexture9_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DTexture9_AddRef(p) (p)->AddRef() #define IDirect3DTexture9_Release(p) (p)->Release() /*** IDirect3DTexture9 methods: IDirect3DResource9 ***/ #define IDirect3DTexture9_GetDevice(p,a) (p)->GetDevice(a) #define IDirect3DTexture9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d) #define IDirect3DTexture9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c) #define IDirect3DTexture9_FreePrivateData(p,a) (p)->FreePrivateData(a) #define IDirect3DTexture9_SetPriority(p,a) (p)->SetPriority(a) #define IDirect3DTexture9_GetPriority(p) (p)->GetPriority() #define IDirect3DTexture9_PreLoad(p) (p)->PreLoad() #define IDirect3DTexture9_GetType(p) (p)->GetType() /*** IDirect3DTexture9 methods: IDirect3DBaseTexture9 ***/ #define IDirect3DTexture9_SetLOD(p,a) (p)->SetLOD(a) #define IDirect3DTexture9_GetLOD(p) (p)->GetLOD() #define IDirect3DTexture9_GetLevelCount(p) (p)->GetLevelCount() #define IDirect3DTexture9_SetAutoGenFilterType(p,a) (p)->SetAutoGenFilterType(a) #define IDirect3DTexture9_GetAutoGenFilterType(p) (p)->GetAutoGenFilterType() #define IDirect3DTexture9_GenerateMipSubLevels(p) (p)->GenerateMipSubLevels() /*** IDirect3DTexture9 methods ***/ #define IDirect3DTexture9_GetLevelDesc(p,a,b) (p)->GetLevelDesc(a,b) #define IDirect3DTexture9_GetSurfaceLevel(p,a,b) (p)->GetSurfaceLevel(a,b) #define IDirect3DTexture9_LockRect(p,a,b,c,d) (p)->LockRect(a,b,c,d) #define IDirect3DTexture9_UnlockRect(p,a) (p)->UnlockRect(a) #define IDirect3DTexture9_AddDirtyRect(p,a) (p)->AddDirtyRect(a) #endif /***************************************************************************** * IDirect3DVolumeTexture9 interface */ #define INTERFACE IDirect3DVolumeTexture9 DECLARE_INTERFACE_(IDirect3DVolumeTexture9,IDirect3DBaseTexture9) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DResource9 methods ***/ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE; STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags) PURE; STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE; STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE; STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE; STDMETHOD_(DWORD, GetPriority)(THIS) PURE; STDMETHOD_(void, PreLoad)(THIS) PURE; STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE; /*** IDirect3DBaseTexture9 methods ***/ STDMETHOD_(DWORD, SetLOD)(THIS_ DWORD LODNew) PURE; STDMETHOD_(DWORD, GetLOD)(THIS) PURE; STDMETHOD_(DWORD, GetLevelCount)(THIS) PURE; STDMETHOD(SetAutoGenFilterType)(THIS_ D3DTEXTUREFILTERTYPE FilterType) PURE; STDMETHOD_(D3DTEXTUREFILTERTYPE, GetAutoGenFilterType)(THIS) PURE; STDMETHOD_(void, GenerateMipSubLevels)(THIS) PURE; /*** IDirect3DVolumeTexture9 methods ***/ STDMETHOD(GetLevelDesc)(THIS_ UINT Level, D3DVOLUME_DESC *pDesc) PURE; STDMETHOD(GetVolumeLevel)(THIS_ UINT Level, IDirect3DVolume9** ppVolumeLevel) PURE; STDMETHOD(LockBox)(THIS_ UINT Level, D3DLOCKED_BOX* pLockedVolume, CONST D3DBOX* pBox, DWORD Flags) PURE; STDMETHOD(UnlockBox)(THIS_ UINT Level) PURE; STDMETHOD(AddDirtyBox)(THIS_ CONST D3DBOX* pDirtyBox) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DVolumeTexture9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DVolumeTexture9_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DVolumeTexture9_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DVolumeTexture9 methods: IDirect3DResource9 ***/ #define IDirect3DVolumeTexture9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) #define IDirect3DVolumeTexture9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d) #define IDirect3DVolumeTexture9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c) #define IDirect3DVolumeTexture9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a) #define IDirect3DVolumeTexture9_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a) #define IDirect3DVolumeTexture9_GetPriority(p) (p)->lpVtbl->GetPriority(p) #define IDirect3DVolumeTexture9_PreLoad(p) (p)->lpVtbl->PreLoad(p) #define IDirect3DVolumeTexture9_GetType(p) (p)->lpVtbl->GetType(p) /*** IDirect3DVolumeTexture9 methods: IDirect3DBaseTexture9 ***/ #define IDirect3DVolumeTexture9_SetLOD(p,a) (p)->lpVtbl->SetLOD(p,a) #define IDirect3DVolumeTexture9_GetLOD(p) (p)->lpVtbl->GetLOD(p) #define IDirect3DVolumeTexture9_GetLevelCount(p) (p)->lpVtbl->GetLevelCount(p) #define IDirect3DVolumeTexture9_SetAutoGenFilterType(p,a) (p)->lpVtbl->SetAutoGenFilterType(p,a) #define IDirect3DVolumeTexture9_GetAutoGenFilterType(p) (p)->lpVtbl->GetAutoGenFilterType(p) #define IDirect3DVolumeTexture9_GenerateMipSubLevels(p) (p)->lpVtbl->GenerateMipSubLevels(p) /*** IDirect3DVolumeTexture9 methods ***/ #define IDirect3DVolumeTexture9_GetLevelDesc(p,a,b) (p)->lpVtbl->GetLevelDesc(p,a,b) #define IDirect3DVolumeTexture9_GetVolumeLevel(p,a,b) (p)->lpVtbl->GetVolumeLevel(p,a,b) #define IDirect3DVolumeTexture9_LockBox(p,a,b,c,d) (p)->lpVtbl->LockBox(p,a,b,c,d) #define IDirect3DVolumeTexture9_UnlockBox(p,a) (p)->lpVtbl->UnlockBox(p,a) #define IDirect3DVolumeTexture9_AddDirtyBox(p,a) (p)->lpVtbl->AddDirtyBox(p,a) #else /*** IUnknown methods ***/ #define IDirect3DVolumeTexture9_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DVolumeTexture9_AddRef(p) (p)->AddRef() #define IDirect3DVolumeTexture9_Release(p) (p)->Release() /*** IDirect3DVolumeTexture9 methods: IDirect3DResource9 ***/ #define IDirect3DVolumeTexture9_GetDevice(p,a) (p)->GetDevice(a) #define IDirect3DVolumeTexture9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d) #define IDirect3DVolumeTexture9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c) #define IDirect3DVolumeTexture9_FreePrivateData(p,a) (p)->FreePrivateData(a) #define IDirect3DVolumeTexture9_SetPriority(p,a) (p)->SetPriority(a) #define IDirect3DVolumeTexture9_GetPriority(p) (p)->GetPriority() #define IDirect3DVolumeTexture9_PreLoad(p) (p)->PreLoad() #define IDirect3DVolumeTexture9_GetType(p) (p)->GetType() /*** IDirect3DVolumeTexture9 methods: IDirect3DBaseTexture9 ***/ #define IDirect3DVolumeTexture9_SetLOD(p,a) (p)->SetLOD(a) #define IDirect3DVolumeTexture9_GetLOD(p) (p)->GetLOD() #define IDirect3DVolumeTexture9_GetLevelCount(p) (p)->GetLevelCount() #define IDirect3DVolumeTexture9_SetAutoGenFilterType(p,a) (p)->SetAutoGenFilterType(a) #define IDirect3DVolumeTexture9_GetAutoGenFilterType(p) (p)->GetAutoGenFilterType() #define IDirect3DVolumeTexture9_GenerateMipSubLevels(p) (p)->GenerateMipSubLevels() /*** IDirect3DVolumeTexture9 methods ***/ #define IDirect3DVolumeTexture9_GetLevelDesc(p,a,b) (p)->GetLevelDesc(a,b) #define IDirect3DVolumeTexture9_GetVolumeLevel(p,a,b) (p)->GetVolumeLevel(a,b) #define IDirect3DVolumeTexture9_LockBox(p,a,b,c,d) (p)->LockBox(a,b,c,d) #define IDirect3DVolumeTexture9_UnlockBox(p,a) (p)->UnlockBox(a) #define IDirect3DVolumeTexture9_AddDirtyBox(p,a) (p)->AddDirtyBox(a) #endif /***************************************************************************** * IDirect3DVertexDeclaration9 interface */ #define INTERFACE IDirect3DVertexDeclaration9 DECLARE_INTERFACE_(IDirect3DVertexDeclaration9,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DVertexDeclaration9 methods ***/ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE; STDMETHOD(GetDeclaration)(THIS_ D3DVERTEXELEMENT9*, UINT* pNumElements) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DVertexDeclaration9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DVertexDeclaration9_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DVertexDeclaration9_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DVertexShader9 methods ***/ #define IDirect3DVertexDeclaration9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) #define IDirect3DVertexDeclaration9_GetDeclaration(p,a,b) (p)->lpVtbl->GetDeclaration(p,a,b) #else /*** IUnknown methods ***/ #define IDirect3DVertexDeclaration9_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DVertexDeclaration9_AddRef(p) (p)->AddRef() #define IDirect3DVertexDeclaration9_Release(p) (p)->Release() /*** IDirect3DVertexShader9 methods ***/ #define IDirect3DVertexDeclaration9_GetDevice(p,a) (p)->GetDevice(a) #define IDirect3DVertexDeclaration9_GetDeclaration(p,a,b) (p)->GetDeclaration(a,b) #endif /***************************************************************************** * IDirect3DVertexShader9 interface */ #define INTERFACE IDirect3DVertexShader9 DECLARE_INTERFACE_(IDirect3DVertexShader9,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DVertexShader9 methods ***/ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE; STDMETHOD(GetFunction)(THIS_ void*, UINT* pSizeOfData) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DVertexShader9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DVertexShader9_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DVertexShader9_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DVertexShader9 methods ***/ #define IDirect3DVertexShader9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) #define IDirect3DVertexShader9_GetFunction(p,a,b) (p)->lpVtbl->GetFunction(p,a,b) #else /*** IUnknown methods ***/ #define IDirect3DVertexShader9_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DVertexShader9_AddRef(p) (p)->AddRef() #define IDirect3DVertexShader9_Release(p) (p)->Release() /*** IDirect3DVertexShader9 methods ***/ #define IDirect3DVertexShader9_GetDevice(p,a) (p)->GetDevice(a) #define IDirect3DVertexShader9_GetFunction(p,a,b) (p)->GetFunction(a,b) #endif /***************************************************************************** * IDirect3DPixelShader9 interface */ #define INTERFACE IDirect3DPixelShader9 DECLARE_INTERFACE_(IDirect3DPixelShader9,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DPixelShader9 methods ***/ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE; STDMETHOD(GetFunction)(THIS_ void*, UINT* pSizeOfData) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DPixelShader9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DPixelShader9_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DPixelShader9_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DPixelShader9 methods ***/ #define IDirect3DPixelShader9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) #define IDirect3DPixelShader9_GetFunction(p,a,b) (p)->lpVtbl->GetFunction(p,a,b) #else /*** IUnknown methods ***/ #define IDirect3DPixelShader9_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DPixelShader9_AddRef(p) (p)->AddRef() #define IDirect3DPixelShader9_Release(p) (p)->Release() /*** IDirect3DPixelShader9 methods ***/ #define IDirect3DPixelShader9_GetDevice(p,a) (p)->GetDevice(a) #define IDirect3DPixelShader9_GetFunction(p,a,b) (p)->GetFunction(a,b) #endif /***************************************************************************** * IDirect3DStateBlock9 interface */ #define INTERFACE IDirect3DStateBlock9 DECLARE_INTERFACE_(IDirect3DStateBlock9,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DStateBlock9 methods ***/ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE; STDMETHOD(Capture)(THIS) PURE; STDMETHOD(Apply)(THIS) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DStateBlock9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DStateBlock9_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DStateBlock9_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DStateBlock9 methods ***/ #define IDirect3DStateBlock9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) #define IDirect3DStateBlock9_Capture(p) (p)->lpVtbl->Capture(p) #define IDirect3DStateBlock9_Apply(p) (p)->lpVtbl->Apply(p) #else /*** IUnknown methods ***/ #define IDirect3DStateBlock9_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DStateBlock9_AddRef(p) (p)->AddRef() #define IDirect3DStateBlock9_Release(p) (p)->Release() /*** IDirect3DStateBlock9 methods ***/ #define IDirect3DStateBlock9_GetDevice(p,a) (p)->GetDevice(a) #define IDirect3DStateBlock9_Capture(p) (p)->Capture() #define IDirect3DStateBlock9_Apply(p) (p)->Apply() #endif /***************************************************************************** * IDirect3DQuery9 interface */ #define INTERFACE IDirect3DQuery9 DECLARE_INTERFACE_(IDirect3DQuery9,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DQuery9 methods ***/ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE; STDMETHOD_(D3DQUERYTYPE, GetType)(THIS) PURE; STDMETHOD_(DWORD, GetDataSize)(THIS) PURE; STDMETHOD(Issue)(THIS_ DWORD dwIssueFlags) PURE; STDMETHOD(GetData)(THIS_ void* pData, DWORD dwSize, DWORD dwGetDataFlags) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DQuery9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DQuery9_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DQuery9_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DQuery9 ***/ #define IDirect3DQuery9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) #define IDirect3DQuery9_GetType(p) (p)->lpVtbl->GetType(p) #define IDirect3DQuery9_GetDataSize(p) (p)->lpVtbl->GetDataSize(p) #define IDirect3DQuery9_Issue(p,a) (p)->lpVtbl->Issue(p,a) #define IDirect3DQuery9_GetData(p,a,b,c) (p)->lpVtbl->GetData(p,a,b,c) #else /*** IUnknown methods ***/ #define IDirect3DQuery9_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DQuery9_AddRef(p) (p)->AddRef() #define IDirect3DQuery9_Release(p) (p)->Release() /*** IDirect3DQuery9 ***/ #define IDirect3DQuery9_GetDevice(p,a) (p)->GetDevice(a) #define IDirect3DQuery9_GetType(p) (p)->GetType() #define IDirect3DQuery9_GetDataSize(p) (p)->GetDataSize() #define IDirect3DQuery9_Issue(p,a) (p)->Issue(a) #define IDirect3DQuery9_GetData(p,a,b,c) (p)->GetData(a,b,c) #endif /***************************************************************************** * IDirect3DDevice9 interface */ #define INTERFACE IDirect3DDevice9 DECLARE_INTERFACE_(IDirect3DDevice9,IUnknown) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DDevice9 methods ***/ STDMETHOD(TestCooperativeLevel)(THIS) PURE; STDMETHOD_(UINT, GetAvailableTextureMem)(THIS) PURE; STDMETHOD(EvictManagedResources)(THIS) PURE; STDMETHOD(GetDirect3D)(THIS_ IDirect3D9** ppD3D9) PURE; STDMETHOD(GetDeviceCaps)(THIS_ D3DCAPS9* pCaps) PURE; STDMETHOD(GetDisplayMode)(THIS_ UINT iSwapChain, D3DDISPLAYMODE* pMode) PURE; STDMETHOD(GetCreationParameters)(THIS_ D3DDEVICE_CREATION_PARAMETERS *pParameters) PURE; STDMETHOD(SetCursorProperties)(THIS_ UINT XHotSpot, UINT YHotSpot, IDirect3DSurface9* pCursorBitmap) PURE; STDMETHOD_(void, SetCursorPosition)(THIS_ int X,int Y, DWORD Flags) PURE; STDMETHOD_(BOOL, ShowCursor)(THIS_ BOOL bShow) PURE; STDMETHOD(CreateAdditionalSwapChain)(THIS_ D3DPRESENT_PARAMETERS* pPresentationParameters, IDirect3DSwapChain9** pSwapChain) PURE; STDMETHOD(GetSwapChain)(THIS_ UINT iSwapChain, IDirect3DSwapChain9** pSwapChain) PURE; STDMETHOD_(UINT, GetNumberOfSwapChains)(THIS) PURE; STDMETHOD(Reset)(THIS_ D3DPRESENT_PARAMETERS* pPresentationParameters) PURE; STDMETHOD(Present)(THIS_ CONST RECT* pSourceRect, CONST RECT* pDestRect, HWND hDestWindowOverride, CONST RGNDATA* pDirtyRegion) PURE; STDMETHOD(GetBackBuffer)(THIS_ UINT iSwapChain, UINT iBackBuffer, D3DBACKBUFFER_TYPE Type, IDirect3DSurface9** ppBackBuffer) PURE; STDMETHOD(GetRasterStatus)(THIS_ UINT iSwapChain, D3DRASTER_STATUS* pRasterStatus) PURE; STDMETHOD(SetDialogBoxMode)(THIS_ BOOL bEnableDialogs) PURE; STDMETHOD_(void, SetGammaRamp)(THIS_ UINT iSwapChain, DWORD Flags, CONST D3DGAMMARAMP* pRamp) PURE; STDMETHOD_(void, GetGammaRamp)(THIS_ UINT iSwapChain, D3DGAMMARAMP* pRamp) PURE; STDMETHOD(CreateTexture)(THIS_ UINT Width, UINT Height, UINT Levels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DTexture9** ppTexture, HANDLE* pSharedHandle) PURE; STDMETHOD(CreateVolumeTexture)(THIS_ UINT Width, UINT Height, UINT Depth, UINT Levels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DVolumeTexture9** ppVolumeTexture, HANDLE* pSharedHandle) PURE; STDMETHOD(CreateCubeTexture)(THIS_ UINT EdgeLength, UINT Levels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DCubeTexture9** ppCubeTexture, HANDLE* pSharedHandle) PURE; STDMETHOD(CreateVertexBuffer)(THIS_ UINT Length, DWORD Usage, DWORD FVF, D3DPOOL Pool, IDirect3DVertexBuffer9** ppVertexBuffer, HANDLE* pSharedHandle) PURE; STDMETHOD(CreateIndexBuffer)(THIS_ UINT Length, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DIndexBuffer9** ppIndexBuffer, HANDLE* pSharedHandle) PURE; STDMETHOD(CreateRenderTarget)(THIS_ UINT Width, UINT Height, D3DFORMAT Format, D3DMULTISAMPLE_TYPE MultiSample, DWORD MultisampleQuality, BOOL Lockable, IDirect3DSurface9** ppSurface, HANDLE* pSharedHandle) PURE; STDMETHOD(CreateDepthStencilSurface)(THIS_ UINT Width, UINT Height, D3DFORMAT Format, D3DMULTISAMPLE_TYPE MultiSample, DWORD MultisampleQuality, BOOL Discard, IDirect3DSurface9** ppSurface, HANDLE* pSharedHandle) PURE; STDMETHOD(UpdateSurface)(THIS_ IDirect3DSurface9* pSourceSurface, CONST RECT* pSourceRect, IDirect3DSurface9* pDestinationSurface, CONST POINT* pDestPoint) PURE; STDMETHOD(UpdateTexture)(THIS_ IDirect3DBaseTexture9* pSourceTexture, IDirect3DBaseTexture9* pDestinationTexture) PURE; STDMETHOD(GetRenderTargetData)(THIS_ IDirect3DSurface9* pRenderTarget, IDirect3DSurface9* pDestSurface) PURE; STDMETHOD(GetFrontBufferData)(THIS_ UINT iSwapChain, IDirect3DSurface9* pDestSurface) PURE; STDMETHOD(StretchRect)(THIS_ IDirect3DSurface9* pSourceSurface, CONST RECT* pSourceRect, IDirect3DSurface9* pDestSurface, CONST RECT* pDestRect, D3DTEXTUREFILTERTYPE Filter) PURE; STDMETHOD(ColorFill)(THIS_ IDirect3DSurface9* pSurface, CONST RECT* pRect, D3DCOLOR color) PURE; STDMETHOD(CreateOffscreenPlainSurface)(THIS_ UINT Width, UINT Height, D3DFORMAT Format, D3DPOOL Pool, IDirect3DSurface9** ppSurface, HANDLE* pSharedHandle) PURE; STDMETHOD(SetRenderTarget)(THIS_ DWORD RenderTargetIndex, IDirect3DSurface9* pRenderTarget) PURE; STDMETHOD(GetRenderTarget)(THIS_ DWORD RenderTargetIndex, IDirect3DSurface9** ppRenderTarget) PURE; STDMETHOD(SetDepthStencilSurface)(THIS_ IDirect3DSurface9* pNewZStencil) PURE; STDMETHOD(GetDepthStencilSurface)(THIS_ IDirect3DSurface9** ppZStencilSurface) PURE; STDMETHOD(BeginScene)(THIS) PURE; STDMETHOD(EndScene)(THIS) PURE; STDMETHOD(Clear)(THIS_ DWORD Count, CONST D3DRECT* pRects, DWORD Flags, D3DCOLOR Color, float Z, DWORD Stencil) PURE; STDMETHOD(SetTransform)(THIS_ D3DTRANSFORMSTATETYPE State, CONST D3DMATRIX* pMatrix) PURE; STDMETHOD(GetTransform)(THIS_ D3DTRANSFORMSTATETYPE State, D3DMATRIX* pMatrix) PURE; STDMETHOD(MultiplyTransform)(THIS_ D3DTRANSFORMSTATETYPE, CONST D3DMATRIX*) PURE; STDMETHOD(SetViewport)(THIS_ CONST D3DVIEWPORT9* pViewport) PURE; STDMETHOD(GetViewport)(THIS_ D3DVIEWPORT9* pViewport) PURE; STDMETHOD(SetMaterial)(THIS_ CONST D3DMATERIAL9* pMaterial) PURE; STDMETHOD(GetMaterial)(THIS_ D3DMATERIAL9* pMaterial) PURE; STDMETHOD(SetLight)(THIS_ DWORD Index, CONST D3DLIGHT9*) PURE; STDMETHOD(GetLight)(THIS_ DWORD Index, D3DLIGHT9*) PURE; STDMETHOD(LightEnable)(THIS_ DWORD Index, BOOL Enable) PURE; STDMETHOD(GetLightEnable)(THIS_ DWORD Index, BOOL* pEnable) PURE; STDMETHOD(SetClipPlane)(THIS_ DWORD Index, CONST float* pPlane) PURE; STDMETHOD(GetClipPlane)(THIS_ DWORD Index, float* pPlane) PURE; STDMETHOD(SetRenderState)(THIS_ D3DRENDERSTATETYPE State, DWORD Value) PURE; STDMETHOD(GetRenderState)(THIS_ D3DRENDERSTATETYPE State, DWORD* pValue) PURE; STDMETHOD(CreateStateBlock)(THIS_ D3DSTATEBLOCKTYPE Type, IDirect3DStateBlock9** ppSB) PURE; STDMETHOD(BeginStateBlock)(THIS) PURE; STDMETHOD(EndStateBlock)(THIS_ IDirect3DStateBlock9** ppSB) PURE; STDMETHOD(SetClipStatus)(THIS_ CONST D3DCLIPSTATUS9* pClipStatus) PURE; STDMETHOD(GetClipStatus)(THIS_ D3DCLIPSTATUS9* pClipStatus) PURE; STDMETHOD(GetTexture)(THIS_ DWORD Stage, IDirect3DBaseTexture9** ppTexture) PURE; STDMETHOD(SetTexture)(THIS_ DWORD Stage, IDirect3DBaseTexture9* pTexture) PURE; STDMETHOD(GetTextureStageState)(THIS_ DWORD Stage, D3DTEXTURESTAGESTATETYPE Type, DWORD* pValue) PURE; STDMETHOD(SetTextureStageState)(THIS_ DWORD Stage, D3DTEXTURESTAGESTATETYPE Type, DWORD Value) PURE; STDMETHOD(GetSamplerState)(THIS_ DWORD Sampler, D3DSAMPLERSTATETYPE Type, DWORD* pValue) PURE; STDMETHOD(SetSamplerState)(THIS_ DWORD Sampler, D3DSAMPLERSTATETYPE Type, DWORD Value) PURE; STDMETHOD(ValidateDevice)(THIS_ DWORD* pNumPasses) PURE; STDMETHOD(SetPaletteEntries)(THIS_ UINT PaletteNumber, CONST PALETTEENTRY* pEntries) PURE; STDMETHOD(GetPaletteEntries)(THIS_ UINT PaletteNumber,PALETTEENTRY* pEntries) PURE; STDMETHOD(SetCurrentTexturePalette)(THIS_ UINT PaletteNumber) PURE; STDMETHOD(GetCurrentTexturePalette)(THIS_ UINT *PaletteNumber) PURE; STDMETHOD(SetScissorRect)(THIS_ CONST RECT* pRect) PURE; STDMETHOD(GetScissorRect)(THIS_ RECT* pRect) PURE; STDMETHOD(SetSoftwareVertexProcessing)(THIS_ BOOL bSoftware) PURE; STDMETHOD_(BOOL, GetSoftwareVertexProcessing)(THIS) PURE; STDMETHOD(SetNPatchMode)(THIS_ float nSegments) PURE; STDMETHOD_(float, GetNPatchMode)(THIS) PURE; STDMETHOD(DrawPrimitive)(THIS_ D3DPRIMITIVETYPE PrimitiveType, UINT StartVertex, UINT PrimitiveCount) PURE; STDMETHOD(DrawIndexedPrimitive)(THIS_ D3DPRIMITIVETYPE, INT BaseVertexIndex, UINT MinVertexIndex, UINT NumVertices, UINT startIndex, UINT primCount) PURE; STDMETHOD(DrawPrimitiveUP)(THIS_ D3DPRIMITIVETYPE PrimitiveType, UINT PrimitiveCount, CONST void* pVertexStreamZeroData, UINT VertexStreamZeroStride) PURE; STDMETHOD(DrawIndexedPrimitiveUP)(THIS_ D3DPRIMITIVETYPE PrimitiveType, UINT MinVertexIndex, UINT NumVertices, UINT PrimitiveCount, CONST void* pIndexData, D3DFORMAT IndexDataFormat, CONST void* pVertexStreamZeroData, UINT VertexStreamZeroStride) PURE; STDMETHOD(ProcessVertices)(THIS_ UINT SrcStartIndex, UINT DestIndex, UINT VertexCount, IDirect3DVertexBuffer9* pDestBuffer, IDirect3DVertexDeclaration9* pVertexDecl, DWORD Flags) PURE; STDMETHOD(CreateVertexDeclaration)(THIS_ CONST D3DVERTEXELEMENT9* pVertexElements, IDirect3DVertexDeclaration9** ppDecl) PURE; STDMETHOD(SetVertexDeclaration)(THIS_ IDirect3DVertexDeclaration9* pDecl) PURE; STDMETHOD(GetVertexDeclaration)(THIS_ IDirect3DVertexDeclaration9** ppDecl) PURE; STDMETHOD(SetFVF)(THIS_ DWORD FVF) PURE; STDMETHOD(GetFVF)(THIS_ DWORD* pFVF) PURE; STDMETHOD(CreateVertexShader)(THIS_ CONST DWORD* pFunction, IDirect3DVertexShader9** ppShader) PURE; STDMETHOD(SetVertexShader)(THIS_ IDirect3DVertexShader9* pShader) PURE; STDMETHOD(GetVertexShader)(THIS_ IDirect3DVertexShader9** ppShader) PURE; STDMETHOD(SetVertexShaderConstantF)(THIS_ UINT StartRegister, CONST float* pConstantData, UINT Vector4fCount) PURE; STDMETHOD(GetVertexShaderConstantF)(THIS_ UINT StartRegister, float* pConstantData, UINT Vector4fCount) PURE; STDMETHOD(SetVertexShaderConstantI)(THIS_ UINT StartRegister, CONST int* pConstantData, UINT Vector4iCount) PURE; STDMETHOD(GetVertexShaderConstantI)(THIS_ UINT StartRegister, int* pConstantData, UINT Vector4iCount) PURE; STDMETHOD(SetVertexShaderConstantB)(THIS_ UINT StartRegister, CONST BOOL* pConstantData, UINT BoolCount) PURE; STDMETHOD(GetVertexShaderConstantB)(THIS_ UINT StartRegister, BOOL* pConstantData, UINT BoolCount) PURE; STDMETHOD(SetStreamSource)(THIS_ UINT StreamNumber, IDirect3DVertexBuffer9* pStreamData, UINT OffsetInBytes, UINT Stride) PURE; STDMETHOD(GetStreamSource)(THIS_ UINT StreamNumber, IDirect3DVertexBuffer9** ppStreamData, UINT* OffsetInBytes, UINT* pStride) PURE; STDMETHOD(SetStreamSourceFreq)(THIS_ UINT StreamNumber, UINT Divider) PURE; STDMETHOD(GetStreamSourceFreq)(THIS_ UINT StreamNumber, UINT* Divider) PURE; STDMETHOD(SetIndices)(THIS_ IDirect3DIndexBuffer9* pIndexData) PURE; STDMETHOD(GetIndices)(THIS_ IDirect3DIndexBuffer9** ppIndexData) PURE; STDMETHOD(CreatePixelShader)(THIS_ CONST DWORD* pFunction, IDirect3DPixelShader9** ppShader) PURE; STDMETHOD(SetPixelShader)(THIS_ IDirect3DPixelShader9* pShader) PURE; STDMETHOD(GetPixelShader)(THIS_ IDirect3DPixelShader9** ppShader) PURE; STDMETHOD(SetPixelShaderConstantF)(THIS_ UINT StartRegister, CONST float* pConstantData, UINT Vector4fCount) PURE; STDMETHOD(GetPixelShaderConstantF)(THIS_ UINT StartRegister, float* pConstantData, UINT Vector4fCount) PURE; STDMETHOD(SetPixelShaderConstantI)(THIS_ UINT StartRegister, CONST int* pConstantData, UINT Vector4iCount) PURE; STDMETHOD(GetPixelShaderConstantI)(THIS_ UINT StartRegister, int* pConstantData, UINT Vector4iCount) PURE; STDMETHOD(SetPixelShaderConstantB)(THIS_ UINT StartRegister, CONST BOOL* pConstantData, UINT BoolCount) PURE; STDMETHOD(GetPixelShaderConstantB)(THIS_ UINT StartRegister, BOOL* pConstantData, UINT BoolCount) PURE; STDMETHOD(DrawRectPatch)(THIS_ UINT Handle, CONST float* pNumSegs, CONST D3DRECTPATCH_INFO* pRectPatchInfo) PURE; STDMETHOD(DrawTriPatch)(THIS_ UINT Handle, CONST float* pNumSegs, CONST D3DTRIPATCH_INFO* pTriPatchInfo) PURE; STDMETHOD(DeletePatch)(THIS_ UINT Handle) PURE; STDMETHOD(CreateQuery)(THIS_ D3DQUERYTYPE Type, IDirect3DQuery9** ppQuery) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DDevice9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DDevice9_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DDevice9_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DDevice9 methods ***/ #define IDirect3DDevice9_TestCooperativeLevel(p) (p)->lpVtbl->TestCooperativeLevel(p) #define IDirect3DDevice9_GetAvailableTextureMem(p) (p)->lpVtbl->GetAvailableTextureMem(p) #define IDirect3DDevice9_EvictManagedResources(p) (p)->lpVtbl->EvictManagedResources(p) #define IDirect3DDevice9_GetDirect3D(p,a) (p)->lpVtbl->GetDirect3D(p,a) #define IDirect3DDevice9_GetDeviceCaps(p,a) (p)->lpVtbl->GetDeviceCaps(p,a) #define IDirect3DDevice9_GetDisplayMode(p,a,b) (p)->lpVtbl->GetDisplayMode(p,a,b) #define IDirect3DDevice9_GetCreationParameters(p,a) (p)->lpVtbl->GetCreationParameters(p,a) #define IDirect3DDevice9_SetCursorProperties(p,a,b,c) (p)->lpVtbl->SetCursorProperties(p,a,b,c) #define IDirect3DDevice9_SetCursorPosition(p,a,b,c) (p)->lpVtbl->SetCursorPosition(p,a,b,c) #define IDirect3DDevice9_ShowCursor(p,a) (p)->lpVtbl->ShowCursor(p,a) #define IDirect3DDevice9_CreateAdditionalSwapChain(p,a,b) (p)->lpVtbl->CreateAdditionalSwapChain(p,a,b) #define IDirect3DDevice9_GetSwapChain(p,a,b) (p)->lpVtbl->GetSwapChain(p,a,b) #define IDirect3DDevice9_GetNumberOfSwapChains(p) (p)->lpVtbl->GetNumberOfSwapChains(p) #define IDirect3DDevice9_Reset(p,a) (p)->lpVtbl->Reset(p,a) #define IDirect3DDevice9_Present(p,a,b,c,d) (p)->lpVtbl->Present(p,a,b,c,d) #define IDirect3DDevice9_GetBackBuffer(p,a,b,c,d) (p)->lpVtbl->GetBackBuffer(p,a,b,c,d) #define IDirect3DDevice9_GetRasterStatus(p,a,b) (p)->lpVtbl->GetRasterStatus(p,a,b) #define IDirect3DDevice9_SetDialogBoxMode(p,a) (p)->lpVtbl->SetDialogBoxMode(p,a) #define IDirect3DDevice9_SetGammaRamp(p,a,b,c) (p)->lpVtbl->SetGammaRamp(p,a,b,c) #define IDirect3DDevice9_GetGammaRamp(p,a,b) (p)->lpVtbl->GetGammaRamp(p,a,b) #define IDirect3DDevice9_CreateTexture(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->CreateTexture(p,a,b,c,d,e,f,g,h) #define IDirect3DDevice9_CreateVolumeTexture(p,a,b,c,d,e,f,g,h,i) (p)->lpVtbl->CreateVolumeTexture(p,a,b,c,d,e,f,g,h,i) #define IDirect3DDevice9_CreateCubeTexture(p,a,b,c,d,e,f,g) (p)->lpVtbl->CreateCubeTexture(p,a,b,c,d,e,f,g) #define IDirect3DDevice9_CreateVertexBuffer(p,a,b,c,d,e,f) (p)->lpVtbl->CreateVertexBuffer(p,a,b,c,d,e,f) #define IDirect3DDevice9_CreateIndexBuffer(p,a,b,c,d,e,f) (p)->lpVtbl->CreateIndexBuffer(p,a,b,c,d,e,f) #define IDirect3DDevice9_CreateRenderTarget(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->CreateRenderTarget(p,a,b,c,d,e,f,g,h) #define IDirect3DDevice9_CreateDepthStencilSurface(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->CreateDepthStencilSurface(p,a,b,c,d,e,f,g,h) #define IDirect3DDevice9_UpdateSurface(p,a,b,c,d) (p)->lpVtbl->UpdateSurface(p,a,b,c,d) #define IDirect3DDevice9_UpdateTexture(p,a,b) (p)->lpVtbl->UpdateTexture(p,a,b) #define IDirect3DDevice9_GetRenderTargetData(p,a,b) (p)->lpVtbl->GetRenderTargetData(p,a,b) #define IDirect3DDevice9_GetFrontBufferData(p,a,b) (p)->lpVtbl->GetFrontBufferData(p,a,b) #define IDirect3DDevice9_StretchRect(p,a,b,c,d,e) (p)->lpVtbl->StretchRect(p,a,b,c,d,e) #define IDirect3DDevice9_ColorFill(p,a,b,c) (p)->lpVtbl->ColorFill(p,a,b,c) #define IDirect3DDevice9_CreateOffscreenPlainSurface(p,a,b,c,d,e,f) (p)->lpVtbl->CreateOffscreenPlainSurface(p,a,b,c,d,e,f) #define IDirect3DDevice9_SetRenderTarget(p,a,b) (p)->lpVtbl->SetRenderTarget(p,a,b) #define IDirect3DDevice9_GetRenderTarget(p,a,b) (p)->lpVtbl->GetRenderTarget(p,a,b) #define IDirect3DDevice9_SetDepthStencilSurface(p,a) (p)->lpVtbl->SetDepthStencilSurface(p,a) #define IDirect3DDevice9_GetDepthStencilSurface(p,a) (p)->lpVtbl->GetDepthStencilSurface(p,a) #define IDirect3DDevice9_BeginScene(p) (p)->lpVtbl->BeginScene(p) #define IDirect3DDevice9_EndScene(p) (p)->lpVtbl->EndScene(p) #define IDirect3DDevice9_Clear(p,a,b,c,d,e,f) (p)->lpVtbl->Clear(p,a,b,c,d,e,f) #define IDirect3DDevice9_SetTransform(p,a,b) (p)->lpVtbl->SetTransform(p,a,b) #define IDirect3DDevice9_GetTransform(p,a,b) (p)->lpVtbl->GetTransform(p,a,b) #define IDirect3DDevice9_MultiplyTransform(p,a,b) (p)->lpVtbl->MultiplyTransform(p,a,b) #define IDirect3DDevice9_SetViewport(p,a) (p)->lpVtbl->SetViewport(p,a) #define IDirect3DDevice9_GetViewport(p,a) (p)->lpVtbl->GetViewport(p,a) #define IDirect3DDevice9_SetMaterial(p,a) (p)->lpVtbl->SetMaterial(p,a) #define IDirect3DDevice9_GetMaterial(p,a) (p)->lpVtbl->GetMaterial(p,a) #define IDirect3DDevice9_SetLight(p,a,b) (p)->lpVtbl->SetLight(p,a,b) #define IDirect3DDevice9_GetLight(p,a,b) (p)->lpVtbl->GetLight(p,a,b) #define IDirect3DDevice9_LightEnable(p,a,b) (p)->lpVtbl->LightEnable(p,a,b) #define IDirect3DDevice9_GetLightEnable(p,a,b) (p)->lpVtbl->GetLightEnable(p,a,b) #define IDirect3DDevice9_SetClipPlane(p,a,b) (p)->lpVtbl->SetClipPlane(p,a,b) #define IDirect3DDevice9_GetClipPlane(p,a,b) (p)->lpVtbl->GetClipPlane(p,a,b) #define IDirect3DDevice9_SetRenderState(p,a,b) (p)->lpVtbl->SetRenderState(p,a,b) #define IDirect3DDevice9_GetRenderState(p,a,b) (p)->lpVtbl->GetRenderState(p,a,b) #define IDirect3DDevice9_CreateStateBlock(p,a,b) (p)->lpVtbl->CreateStateBlock(p,a,b) #define IDirect3DDevice9_BeginStateBlock(p) (p)->lpVtbl->BeginStateBlock(p) #define IDirect3DDevice9_EndStateBlock(p,a) (p)->lpVtbl->EndStateBlock(p,a) #define IDirect3DDevice9_SetClipStatus(p,a) (p)->lpVtbl->SetClipStatus(p,a) #define IDirect3DDevice9_GetClipStatus(p,a) (p)->lpVtbl->GetClipStatus(p,a) #define IDirect3DDevice9_GetTexture(p,a,b) (p)->lpVtbl->GetTexture(p,a,b) #define IDirect3DDevice9_SetTexture(p,a,b) (p)->lpVtbl->SetTexture(p,a,b) #define IDirect3DDevice9_GetTextureStageState(p,a,b,c) (p)->lpVtbl->GetTextureStageState(p,a,b,c) #define IDirect3DDevice9_SetTextureStageState(p,a,b,c) (p)->lpVtbl->SetTextureStageState(p,a,b,c) #define IDirect3DDevice9_GetSamplerState(p,a,b,c) (p)->lpVtbl->GetSamplerState(p,a,b,c) #define IDirect3DDevice9_SetSamplerState(p,a,b,c) (p)->lpVtbl->SetSamplerState(p,a,b,c) #define IDirect3DDevice9_ValidateDevice(p,a) (p)->lpVtbl->ValidateDevice(p,a) #define IDirect3DDevice9_SetPaletteEntries(p,a,b) (p)->lpVtbl->SetPaletteEntries(p,a,b) #define IDirect3DDevice9_GetPaletteEntries(p,a,b) (p)->lpVtbl->GetPaletteEntries(p,a,b) #define IDirect3DDevice9_SetCurrentTexturePalette(p,a) (p)->lpVtbl->SetCurrentTexturePalette(p,a) #define IDirect3DDevice9_GetCurrentTexturePalette(p,a) (p)->lpVtbl->GetCurrentTexturePalette(p,a) #define IDirect3DDevice9_SetScissorRect(p,a) (p)->lpVtbl->SetScissorRect(p,a) #define IDirect3DDevice9_GetScissorRect(p,a) (p)->lpVtbl->GetScissorRect(p,a) #define IDirect3DDevice9_SetSoftwareVertexProcessing(p,a) (p)->lpVtbl->SetSoftwareVertexProcessing(p,a) #define IDirect3DDevice9_GetSoftwareVertexProcessing(p) (p)->lpVtbl->GetSoftwareVertexProcessing(p) #define IDirect3DDevice9_SetNPatchMode(p,a) (p)->lpVtbl->SetNPatchMode(p,a) #define IDirect3DDevice9_GetNPatchMode(p) (p)->lpVtbl->GetNPatchMode(p) #define IDirect3DDevice9_DrawPrimitive(p,a,b,c) (p)->lpVtbl->DrawPrimitive(p,a,b,c) #define IDirect3DDevice9_DrawIndexedPrimitive(p,a,b,c,d,e,f) (p)->lpVtbl->DrawIndexedPrimitive(p,a,b,c,d,e,f) #define IDirect3DDevice9_DrawPrimitiveUP(p,a,b,c,d) (p)->lpVtbl->DrawPrimitiveUP(p,a,b,c,d) #define IDirect3DDevice9_DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h) #define IDirect3DDevice9_ProcessVertices(p,a,b,c,d,e,f) (p)->lpVtbl->ProcessVertices(p,a,b,c,d,e,f) #define IDirect3DDevice9_CreateVertexDeclaration(p,a,b) (p)->lpVtbl->CreateVertexDeclaration(p,a,b) #define IDirect3DDevice9_SetVertexDeclaration(p,a) (p)->lpVtbl->SetVertexDeclaration(p,a) #define IDirect3DDevice9_GetVertexDeclaration(p,a) (p)->lpVtbl->GetVertexDeclaration(p,a) #define IDirect3DDevice9_SetFVF(p,a) (p)->lpVtbl->SetFVF(p,a) #define IDirect3DDevice9_GetFVF(p,a) (p)->lpVtbl->GetFVF(p,a) #define IDirect3DDevice9_CreateVertexShader(p,a,b) (p)->lpVtbl->CreateVertexShader(p,a,b) #define IDirect3DDevice9_SetVertexShader(p,a) (p)->lpVtbl->SetVertexShader(p,a) #define IDirect3DDevice9_GetVertexShader(p,a) (p)->lpVtbl->GetVertexShader(p,a) #define IDirect3DDevice9_SetVertexShaderConstantF(p,a,b,c) (p)->lpVtbl->SetVertexShaderConstantF(p,a,b,c) #define IDirect3DDevice9_GetVertexShaderConstantF(p,a,b,c) (p)->lpVtbl->GetVertexShaderConstantF(p,a,b,c) #define IDirect3DDevice9_SetVertexShaderConstantI(p,a,b,c) (p)->lpVtbl->SetVertexShaderConstantI(p,a,b,c) #define IDirect3DDevice9_GetVertexShaderConstantI(p,a,b,c) (p)->lpVtbl->GetVertexShaderConstantI(p,a,b,c) #define IDirect3DDevice9_SetVertexShaderConstantB(p,a,b,c) (p)->lpVtbl->SetVertexShaderConstantB(p,a,b,c) #define IDirect3DDevice9_GetVertexShaderConstantB(p,a,b,c) (p)->lpVtbl->GetVertexShaderConstantB(p,a,b,c) #define IDirect3DDevice9_SetStreamSource(p,a,b,c,d) (p)->lpVtbl->SetStreamSource(p,a,b,c,d) #define IDirect3DDevice9_GetStreamSource(p,a,b,c,d) (p)->lpVtbl->GetStreamSource(p,a,b,c,d) #define IDirect3DDevice9_SetStreamSourceFreq(p,a,b) (p)->lpVtbl->SetStreamSourceFreq(p,a,b) #define IDirect3DDevice9_GetStreamSourceFreq(p,a,b) (p)->lpVtbl->GetStreamSourceFreq(p,a,b) #define IDirect3DDevice9_SetIndices(p,a) (p)->lpVtbl->SetIndices(p,a) #define IDirect3DDevice9_GetIndices(p,a) (p)->lpVtbl->GetIndices(p,a) #define IDirect3DDevice9_CreatePixelShader(p,a,b) (p)->lpVtbl->CreatePixelShader(p,a,b) #define IDirect3DDevice9_SetPixelShader(p,a) (p)->lpVtbl->SetPixelShader(p,a) #define IDirect3DDevice9_GetPixelShader(p,a) (p)->lpVtbl->GetPixelShader(p,a) #define IDirect3DDevice9_SetPixelShaderConstantF(p,a,b,c) (p)->lpVtbl->SetPixelShaderConstantF(p,a,b,c) #define IDirect3DDevice9_GetPixelShaderConstantF(p,a,b,c) (p)->lpVtbl->GetPixelShaderConstantF(p,a,b,c) #define IDirect3DDevice9_SetPixelShaderConstantI(p,a,b,c) (p)->lpVtbl->SetPixelShaderConstantI(p,a,b,c) #define IDirect3DDevice9_GetPixelShaderConstantI(p,a,b,c) (p)->lpVtbl->GetPixelShaderConstantI(p,a,b,c) #define IDirect3DDevice9_SetPixelShaderConstantB(p,a,b,c) (p)->lpVtbl->SetPixelShaderConstantB(p,a,b,c) #define IDirect3DDevice9_GetPixelShaderConstantB(p,a,b,c) (p)->lpVtbl->GetPixelShaderConstantB(p,a,b,c) #define IDirect3DDevice9_DrawRectPatch(p,a,b,c) (p)->lpVtbl->DrawRectPatch(p,a,b,c) #define IDirect3DDevice9_DrawTriPatch(p,a,b,c) (p)->lpVtbl->DrawTriPatch(p,a,b,c) #define IDirect3DDevice9_DeletePatch(p,a) (p)->lpVtbl->DeletePatch(p,a) #define IDirect3DDevice9_CreateQuery(p,a,b) (p)->lpVtbl->CreateQuery(p,a,b) #else /*** IUnknown methods ***/ #define IDirect3DDevice9_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DDevice9_AddRef(p) (p)->AddRef() #define IDirect3DDevice9_Release(p) (p)->Release() /*** IDirect3DDevice9 methods ***/ #define IDirect3DDevice9_TestCooperativeLevel(p) (p)->TestCooperativeLevel() #define IDirect3DDevice9_GetAvailableTextureMem(p) (p)->GetAvailableTextureMem() #define IDirect3DDevice9_EvictManagedResources(p) (p)->EvictManagedResources() #define IDirect3DDevice9_GetDirect3D(p,a) (p)->GetDirect3D(a) #define IDirect3DDevice9_GetDeviceCaps(p,a) (p)->GetDeviceCaps(a) #define IDirect3DDevice9_GetDisplayMode(p,a,b) (p)->GetDisplayMode(a,b) #define IDirect3DDevice9_GetCreationParameters(p,a) (p)->GetCreationParameters(a) #define IDirect3DDevice9_SetCursorProperties(p,a,b,c) (p)->SetCursorProperties(a,b,c) #define IDirect3DDevice9_SetCursorPosition(p,a,b,c) (p)->SetCursorPosition(a,b,c) #define IDirect3DDevice9_ShowCursor(p,a) (p)->ShowCursor(a) #define IDirect3DDevice9_CreateAdditionalSwapChain(p,a,b) (p)->CreateAdditionalSwapChain(a,b) #define IDirect3DDevice9_GetSwapChain(p,a,b) (p)->GetSwapChain(a,b) #define IDirect3DDevice9_GetNumberOfSwapChains(p) (p)->GetNumberOfSwapChains() #define IDirect3DDevice9_Reset(p,a) (p)->Reset(a) #define IDirect3DDevice9_Present(p,a,b,c,d) (p)->Present(a,b,c,d) #define IDirect3DDevice9_GetBackBuffer(p,a,b,c,d) (p)->GetBackBuffer(a,b,c,d) #define IDirect3DDevice9_GetRasterStatus(p,a,b) (p)->GetRasterStatus(a,b) #define IDirect3DDevice9_SetDialogBoxMode(p,a) (p)->SetDialogBoxMode(a) #define IDirect3DDevice9_SetGammaRamp(p,a,b,c) (p)->SetGammaRamp(a,b,c) #define IDirect3DDevice9_GetGammaRamp(p,a,b) (p)->GetGammaRamp(a,b) #define IDirect3DDevice9_CreateTexture(p,a,b,c,d,e,f,g,h) (p)->CreateTexture(a,b,c,d,e,f,g,h) #define IDirect3DDevice9_CreateVolumeTexture(p,a,b,c,d,e,f,g,h,i) (p)->CreateVolumeTexture(a,b,c,d,e,f,g,h,i) #define IDirect3DDevice9_CreateCubeTexture(p,a,b,c,d,e,f,g) (p)->CreateCubeTexture(a,b,c,d,e,f,g) #define IDirect3DDevice9_CreateVertexBuffer(p,a,b,c,d,e,f) (p)->CreateVertexBuffer(a,b,c,d,e,f) #define IDirect3DDevice9_CreateIndexBuffer(p,a,b,c,d,e,f) (p)->CreateIndexBuffer(a,b,c,d,e,f) #define IDirect3DDevice9_CreateRenderTarget(p,a,b,c,d,e,f,g,h) (p)->CreateRenderTarget(a,b,c,d,e,f,g,h) #define IDirect3DDevice9_CreateDepthStencilSurface(p,a,b,c,d,e,f,g,h) (p)->CreateDepthStencilSurface(a,b,c,d,e,f,g,h) #define IDirect3DDevice9_UpdateSurface(p,a,b,c,d) (p)->UpdateSurface(a,b,c,d) #define IDirect3DDevice9_UpdateTexture(p,a,b) (p)->UpdateTexture(a,b) #define IDirect3DDevice9_GetRenderTargetData(p,a,b) (p)->GetRenderTargetData(a,b) #define IDirect3DDevice9_GetFrontBufferData(p,a,b) (p)->GetFrontBufferData(a,b) #define IDirect3DDevice9_StretchRect(p,a,b,c,d,e) (p)->StretchRect(a,b,c,d,e) #define IDirect3DDevice9_ColorFill(p,a,b,c) (p)->ColorFill(a,b,c) #define IDirect3DDevice9_CreateOffscreenPlainSurface(p,a,b,c,d,e,f) (p)->CreateOffscreenPlainSurface(a,b,c,d,e,f) #define IDirect3DDevice9_SetRenderTarget(p,a,b) (p)->SetRenderTarget(a,b) #define IDirect3DDevice9_GetRenderTarget(p,a,b) (p)->GetRenderTarget(a,b) #define IDirect3DDevice9_SetDepthStencilSurface(p,a) (p)->SetDepthStencilSurface(a) #define IDirect3DDevice9_GetDepthStencilSurface(p,a) (p)->GetDepthStencilSurface(a) #define IDirect3DDevice9_BeginScene(p) (p)->BeginScene() #define IDirect3DDevice9_EndScene(p) (p)->EndScene() #define IDirect3DDevice9_Clear(p,a,b,c,d,e,f) (p)->Clear(a,b,c,d,e,f) #define IDirect3DDevice9_SetTransform(p,a,b) (p)->SetTransform(a,b) #define IDirect3DDevice9_GetTransform(p,a,b) (p)->GetTransform(a,b) #define IDirect3DDevice9_MultiplyTransform(p,a,b) (p)->MultiplyTransform(a,b) #define IDirect3DDevice9_SetViewport(p,a) (p)->SetViewport(a) #define IDirect3DDevice9_GetViewport(p,a) (p)->GetViewport(a) #define IDirect3DDevice9_SetMaterial(p,a) (p)->SetMaterial(a) #define IDirect3DDevice9_GetMaterial(p,a) (p)->GetMaterial(a) #define IDirect3DDevice9_SetLight(p,a,b) (p)->SetLight(a,b) #define IDirect3DDevice9_GetLight(p,a,b) (p)->GetLight(a,b) #define IDirect3DDevice9_LightEnable(p,a,b) (p)->LightEnable(a,b) #define IDirect3DDevice9_GetLightEnable(p,a,b) (p)->GetLightEnable(a,b) #define IDirect3DDevice9_SetClipPlane(p,a,b) (p)->SetClipPlane(a,b) #define IDirect3DDevice9_GetClipPlane(p,a,b) (p)->GetClipPlane(a,b) #define IDirect3DDevice9_SetRenderState(p,a,b) (p)->SetRenderState(a,b) #define IDirect3DDevice9_GetRenderState(p,a,b) (p)->GetRenderState(a,b) #define IDirect3DDevice9_CreateStateBlock(p,a,b) (p)->CreateStateBlock(a,b) #define IDirect3DDevice9_BeginStateBlock(p) (p)->BeginStateBlock() #define IDirect3DDevice9_EndStateBlock(p,a) (p)->EndStateBlock(a) #define IDirect3DDevice9_SetClipStatus(p,a) (p)->SetClipStatus(a) #define IDirect3DDevice9_GetClipStatus(p,a) (p)->GetClipStatus(a) #define IDirect3DDevice9_GetTexture(p,a,b) (p)->GetTexture(a,b) #define IDirect3DDevice9_SetTexture(p,a,b) (p)->SetTexture(a,b) #define IDirect3DDevice9_GetTextureStageState(p,a,b,c) (p)->GetTextureStageState(a,b,c) #define IDirect3DDevice9_SetTextureStageState(p,a,b,c) (p)->SetTextureStageState(a,b,c) #define IDirect3DDevice9_GetSamplerState(p,a,b,c) (p)->GetSamplerState(a,b,c) #define IDirect3DDevice9_SetSamplerState(p,a,b,c) (p)->SetSamplerState(a,b,c) #define IDirect3DDevice9_ValidateDevice(p,a) (p)->ValidateDevice(a) #define IDirect3DDevice9_SetPaletteEntries(p,a,b) (p)->SetPaletteEntries(a,b) #define IDirect3DDevice9_GetPaletteEntries(p,a,b) (p)->GetPaletteEntries(a,b) #define IDirect3DDevice9_SetCurrentTexturePalette(p,a) (p)->SetCurrentTexturePalette(a) #define IDirect3DDevice9_GetCurrentTexturePalette(p,a) (p)->GetCurrentTexturePalette(a) #define IDirect3DDevice9_SetScissorRect(p,a) (p)->SetScissorRect(a) #define IDirect3DDevice9_GetScissorRect(p,a) (p)->GetScissorRect(a) #define IDirect3DDevice9_SetSoftwareVertexProcessing(p,a) (p)->SetSoftwareVertexProcessing(a) #define IDirect3DDevice9_GetSoftwareVertexProcessing(p) (p)->GetSoftwareVertexProcessing() #define IDirect3DDevice9_SetNPatchMode(p,a) (p)->SetNPatchMode(a) #define IDirect3DDevice9_GetNPatchMode(p) (p)->GetNPatchMode() #define IDirect3DDevice9_DrawPrimitive(p,a,b,c) (p)->DrawPrimitive(a,b,c) #define IDirect3DDevice9_DrawIndexedPrimitive(p,a,b,c,d,e,f) (p)->DrawIndexedPrimitive(a,b,c,d,e,f) #define IDirect3DDevice9_DrawPrimitiveUP(p,a,b,c,d) (p)->DrawPrimitiveUP(a,b,c,d) #define IDirect3DDevice9_DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h) (p)->DrawIndexedPrimitiveUP(a,b,c,d,e,f,g,h) #define IDirect3DDevice9_ProcessVertices(p,a,b,c,d,e,f) (p)->ProcessVertices(a,b,c,d,e,f) #define IDirect3DDevice9_CreateVertexDeclaration(p,a,b) (p)->CreateVertexDeclaration(a,b) #define IDirect3DDevice9_SetVertexDeclaration(p,a) (p)->SetVertexDeclaration(a) #define IDirect3DDevice9_GetVertexDeclaration(p,a) (p)->GetVertexDeclaration(a) #define IDirect3DDevice9_SetFVF(p,a) (p)->SetFVF(a) #define IDirect3DDevice9_GetFVF(p,a) (p)->GetFVF(a) #define IDirect3DDevice9_CreateVertexShader(p,a,b) (p)->CreateVertexShader(a,b) #define IDirect3DDevice9_SetVertexShader(p,a) (p)->SetVertexShader(a) #define IDirect3DDevice9_GetVertexShader(p,a) (p)->GetVertexShader(a) #define IDirect3DDevice9_SetVertexShaderConstantF(p,a,b,c) (p)->SetVertexShaderConstantF(a,b,c) #define IDirect3DDevice9_GetVertexShaderConstantF(p,a,b,c) (p)->GetVertexShaderConstantF(a,b,c) #define IDirect3DDevice9_SetVertexShaderConstantI(p,a,b,c) (p)->SetVertexShaderConstantI(a,b,c) #define IDirect3DDevice9_GetVertexShaderConstantI(p,a,b,c) (p)->GetVertexShaderConstantI(a,b,c) #define IDirect3DDevice9_SetVertexShaderConstantB(p,a,b,c) (p)->SetVertexShaderConstantB(a,b,c) #define IDirect3DDevice9_GetVertexShaderConstantB(p,a,b,c) (p)->GetVertexShaderConstantB(a,b,c) #define IDirect3DDevice9_SetStreamSource(p,a,b,c,d) (p)->SetStreamSource(a,b,c,d) #define IDirect3DDevice9_GetStreamSource(p,a,b,c,d) (p)->GetStreamSource(a,b,c,d) #define IDirect3DDevice9_SetStreamSourceFreq(p,a,b) (p)->SetStreamSourceFreq(a,b) #define IDirect3DDevice9_GetStreamSourceFreq(p,a,b) (p)->GetStreamSourceFreq(a,b) #define IDirect3DDevice9_SetIndices(p,a) (p)->SetIndices(a) #define IDirect3DDevice9_GetIndices(p,a) (p)->GetIndices(a) #define IDirect3DDevice9_CreatePixelShader(p,a,b) (p)->CreatePixelShader(a,b) #define IDirect3DDevice9_SetPixelShader(p,a) (p)->SetPixelShader(a) #define IDirect3DDevice9_GetPixelShader(p,a) (p)->GetPixelShader(a) #define IDirect3DDevice9_SetPixelShaderConstantF(p,a,b,c) (p)->SetPixelShaderConstantF(a,b,c) #define IDirect3DDevice9_GetPixelShaderConstantF(p,a,b,c) (p)->GetPixelShaderConstantF(a,b,c) #define IDirect3DDevice9_SetPixelShaderConstantI(p,a,b,c) (p)->SetPixelShaderConstantI(a,b,c) #define IDirect3DDevice9_GetPixelShaderConstantI(p,a,b,c) (p)->GetPixelShaderConstantI(a,b,c) #define IDirect3DDevice9_SetPixelShaderConstantB(p,a,b,c) (p)->SetPixelShaderConstantB(a,b,c) #define IDirect3DDevice9_GetPixelShaderConstantB(p,a,b,c) (p)->GetPixelShaderConstantB(a,b,c) #define IDirect3DDevice9_DrawRectPatch(p,a,b,c) (p)->DrawRectPatch(a,b,c) #define IDirect3DDevice9_DrawTriPatch(p,a,b,c) (p)->DrawTriPatch(a,b,c) #define IDirect3DDevice9_DeletePatch(p,a) (p)->DeletePatch(a) #define IDirect3DDevice9_CreateQuery(p,a,b) (p)->CreateQuery(a,b) #endif /***************************************************************************** * IDirect3DDevice9Ex interface */ #define INTERFACE IDirect3DDevice9Ex DECLARE_INTERFACE_(IDirect3DDevice9Ex,IDirect3DDevice9) { /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3DDevice9 methods ***/ STDMETHOD(TestCooperativeLevel)(THIS) PURE; STDMETHOD_(UINT, GetAvailableTextureMem)(THIS) PURE; STDMETHOD(EvictManagedResources)(THIS) PURE; STDMETHOD(GetDirect3D)(THIS_ IDirect3D9** ppD3D9) PURE; STDMETHOD(GetDeviceCaps)(THIS_ D3DCAPS9* pCaps) PURE; STDMETHOD(GetDisplayMode)(THIS_ UINT iSwapChain, D3DDISPLAYMODE* pMode) PURE; STDMETHOD(GetCreationParameters)(THIS_ D3DDEVICE_CREATION_PARAMETERS *pParameters) PURE; STDMETHOD(SetCursorProperties)(THIS_ UINT XHotSpot, UINT YHotSpot, IDirect3DSurface9* pCursorBitmap) PURE; STDMETHOD_(void, SetCursorPosition)(THIS_ int X,int Y, DWORD Flags) PURE; STDMETHOD_(BOOL, ShowCursor)(THIS_ BOOL bShow) PURE; STDMETHOD(CreateAdditionalSwapChain)(THIS_ D3DPRESENT_PARAMETERS* pPresentationParameters, IDirect3DSwapChain9** pSwapChain) PURE; STDMETHOD(GetSwapChain)(THIS_ UINT iSwapChain, IDirect3DSwapChain9** pSwapChain) PURE; STDMETHOD_(UINT, GetNumberOfSwapChains)(THIS) PURE; STDMETHOD(Reset)(THIS_ D3DPRESENT_PARAMETERS* pPresentationParameters) PURE; STDMETHOD(Present)(THIS_ CONST RECT* pSourceRect, CONST RECT* pDestRect, HWND hDestWindowOverride, CONST RGNDATA* pDirtyRegion) PURE; STDMETHOD(GetBackBuffer)(THIS_ UINT iSwapChain, UINT iBackBuffer, D3DBACKBUFFER_TYPE Type, IDirect3DSurface9** ppBackBuffer) PURE; STDMETHOD(GetRasterStatus)(THIS_ UINT iSwapChain, D3DRASTER_STATUS* pRasterStatus) PURE; STDMETHOD(SetDialogBoxMode)(THIS_ BOOL bEnableDialogs) PURE; STDMETHOD_(void, SetGammaRamp)(THIS_ UINT iSwapChain, DWORD Flags, CONST D3DGAMMARAMP* pRamp) PURE; STDMETHOD_(void, GetGammaRamp)(THIS_ UINT iSwapChain, D3DGAMMARAMP* pRamp) PURE; STDMETHOD(CreateTexture)(THIS_ UINT Width, UINT Height, UINT Levels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DTexture9** ppTexture, HANDLE* pSharedHandle) PURE; STDMETHOD(CreateVolumeTexture)(THIS_ UINT Width, UINT Height, UINT Depth, UINT Levels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DVolumeTexture9** ppVolumeTexture, HANDLE* pSharedHandle) PURE; STDMETHOD(CreateCubeTexture)(THIS_ UINT EdgeLength, UINT Levels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DCubeTexture9** ppCubeTexture, HANDLE* pSharedHandle) PURE; STDMETHOD(CreateVertexBuffer)(THIS_ UINT Length, DWORD Usage, DWORD FVF, D3DPOOL Pool, IDirect3DVertexBuffer9** ppVertexBuffer, HANDLE* pSharedHandle) PURE; STDMETHOD(CreateIndexBuffer)(THIS_ UINT Length, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DIndexBuffer9** ppIndexBuffer, HANDLE* pSharedHandle) PURE; STDMETHOD(CreateRenderTarget)(THIS_ UINT Width, UINT Height, D3DFORMAT Format, D3DMULTISAMPLE_TYPE MultiSample, DWORD MultisampleQuality, BOOL Lockable, IDirect3DSurface9** ppSurface, HANDLE* pSharedHandle) PURE; STDMETHOD(CreateDepthStencilSurface)(THIS_ UINT Width, UINT Height, D3DFORMAT Format, D3DMULTISAMPLE_TYPE MultiSample, DWORD MultisampleQuality, BOOL Discard, IDirect3DSurface9** ppSurface, HANDLE* pSharedHandle) PURE; STDMETHOD(UpdateSurface)(THIS_ IDirect3DSurface9* pSourceSurface, CONST RECT* pSourceRect, IDirect3DSurface9* pDestinationSurface, CONST POINT* pDestPoint) PURE; STDMETHOD(UpdateTexture)(THIS_ IDirect3DBaseTexture9* pSourceTexture, IDirect3DBaseTexture9* pDestinationTexture) PURE; STDMETHOD(GetRenderTargetData)(THIS_ IDirect3DSurface9* pRenderTarget, IDirect3DSurface9* pDestSurface) PURE; STDMETHOD(GetFrontBufferData)(THIS_ UINT iSwapChain, IDirect3DSurface9* pDestSurface) PURE; STDMETHOD(StretchRect)(THIS_ IDirect3DSurface9* pSourceSurface, CONST RECT* pSourceRect, IDirect3DSurface9* pDestSurface, CONST RECT* pDestRect, D3DTEXTUREFILTERTYPE Filter) PURE; STDMETHOD(ColorFill)(THIS_ IDirect3DSurface9* pSurface, CONST RECT* pRect, D3DCOLOR color) PURE; STDMETHOD(CreateOffscreenPlainSurface)(THIS_ UINT Width, UINT Height, D3DFORMAT Format, D3DPOOL Pool, IDirect3DSurface9** ppSurface, HANDLE* pSharedHandle) PURE; STDMETHOD(SetRenderTarget)(THIS_ DWORD RenderTargetIndex, IDirect3DSurface9* pRenderTarget) PURE; STDMETHOD(GetRenderTarget)(THIS_ DWORD RenderTargetIndex, IDirect3DSurface9** ppRenderTarget) PURE; STDMETHOD(SetDepthStencilSurface)(THIS_ IDirect3DSurface9* pNewZStencil) PURE; STDMETHOD(GetDepthStencilSurface)(THIS_ IDirect3DSurface9** ppZStencilSurface) PURE; STDMETHOD(BeginScene)(THIS) PURE; STDMETHOD(EndScene)(THIS) PURE; STDMETHOD(Clear)(THIS_ DWORD Count, CONST D3DRECT* pRects, DWORD Flags, D3DCOLOR Color, float Z, DWORD Stencil) PURE; STDMETHOD(SetTransform)(THIS_ D3DTRANSFORMSTATETYPE State, CONST D3DMATRIX* pMatrix) PURE; STDMETHOD(GetTransform)(THIS_ D3DTRANSFORMSTATETYPE State, D3DMATRIX* pMatrix) PURE; STDMETHOD(MultiplyTransform)(THIS_ D3DTRANSFORMSTATETYPE, CONST D3DMATRIX*) PURE; STDMETHOD(SetViewport)(THIS_ CONST D3DVIEWPORT9* pViewport) PURE; STDMETHOD(GetViewport)(THIS_ D3DVIEWPORT9* pViewport) PURE; STDMETHOD(SetMaterial)(THIS_ CONST D3DMATERIAL9* pMaterial) PURE; STDMETHOD(GetMaterial)(THIS_ D3DMATERIAL9* pMaterial) PURE; STDMETHOD(SetLight)(THIS_ DWORD Index, CONST D3DLIGHT9*) PURE; STDMETHOD(GetLight)(THIS_ DWORD Index, D3DLIGHT9*) PURE; STDMETHOD(LightEnable)(THIS_ DWORD Index, BOOL Enable) PURE; STDMETHOD(GetLightEnable)(THIS_ DWORD Index, BOOL* pEnable) PURE; STDMETHOD(SetClipPlane)(THIS_ DWORD Index, CONST float* pPlane) PURE; STDMETHOD(GetClipPlane)(THIS_ DWORD Index, float* pPlane) PURE; STDMETHOD(SetRenderState)(THIS_ D3DRENDERSTATETYPE State, DWORD Value) PURE; STDMETHOD(GetRenderState)(THIS_ D3DRENDERSTATETYPE State, DWORD* pValue) PURE; STDMETHOD(CreateStateBlock)(THIS_ D3DSTATEBLOCKTYPE Type, IDirect3DStateBlock9** ppSB) PURE; STDMETHOD(BeginStateBlock)(THIS) PURE; STDMETHOD(EndStateBlock)(THIS_ IDirect3DStateBlock9** ppSB) PURE; STDMETHOD(SetClipStatus)(THIS_ CONST D3DCLIPSTATUS9* pClipStatus) PURE; STDMETHOD(GetClipStatus)(THIS_ D3DCLIPSTATUS9* pClipStatus) PURE; STDMETHOD(GetTexture)(THIS_ DWORD Stage, IDirect3DBaseTexture9** ppTexture) PURE; STDMETHOD(SetTexture)(THIS_ DWORD Stage, IDirect3DBaseTexture9* pTexture) PURE; STDMETHOD(GetTextureStageState)(THIS_ DWORD Stage, D3DTEXTURESTAGESTATETYPE Type, DWORD* pValue) PURE; STDMETHOD(SetTextureStageState)(THIS_ DWORD Stage, D3DTEXTURESTAGESTATETYPE Type, DWORD Value) PURE; STDMETHOD(GetSamplerState)(THIS_ DWORD Sampler, D3DSAMPLERSTATETYPE Type, DWORD* pValue) PURE; STDMETHOD(SetSamplerState)(THIS_ DWORD Sampler, D3DSAMPLERSTATETYPE Type, DWORD Value) PURE; STDMETHOD(ValidateDevice)(THIS_ DWORD* pNumPasses) PURE; STDMETHOD(SetPaletteEntries)(THIS_ UINT PaletteNumber, CONST PALETTEENTRY* pEntries) PURE; STDMETHOD(GetPaletteEntries)(THIS_ UINT PaletteNumber,PALETTEENTRY* pEntries) PURE; STDMETHOD(SetCurrentTexturePalette)(THIS_ UINT PaletteNumber) PURE; STDMETHOD(GetCurrentTexturePalette)(THIS_ UINT *PaletteNumber) PURE; STDMETHOD(SetScissorRect)(THIS_ CONST RECT* pRect) PURE; STDMETHOD(GetScissorRect)(THIS_ RECT* pRect) PURE; STDMETHOD(SetSoftwareVertexProcessing)(THIS_ BOOL bSoftware) PURE; STDMETHOD_(BOOL, GetSoftwareVertexProcessing)(THIS) PURE; STDMETHOD(SetNPatchMode)(THIS_ float nSegments) PURE; STDMETHOD_(float, GetNPatchMode)(THIS) PURE; STDMETHOD(DrawPrimitive)(THIS_ D3DPRIMITIVETYPE PrimitiveType, UINT StartVertex, UINT PrimitiveCount) PURE; STDMETHOD(DrawIndexedPrimitive)(THIS_ D3DPRIMITIVETYPE, INT BaseVertexIndex, UINT MinVertexIndex, UINT NumVertices, UINT startIndex, UINT primCount) PURE; STDMETHOD(DrawPrimitiveUP)(THIS_ D3DPRIMITIVETYPE PrimitiveType, UINT PrimitiveCount, CONST void* pVertexStreamZeroData, UINT VertexStreamZeroStride) PURE; STDMETHOD(DrawIndexedPrimitiveUP)(THIS_ D3DPRIMITIVETYPE PrimitiveType, UINT MinVertexIndex, UINT NumVertices, UINT PrimitiveCount, CONST void* pIndexData, D3DFORMAT IndexDataFormat, CONST void* pVertexStreamZeroData, UINT VertexStreamZeroStride) PURE; STDMETHOD(ProcessVertices)(THIS_ UINT SrcStartIndex, UINT DestIndex, UINT VertexCount, IDirect3DVertexBuffer9* pDestBuffer, IDirect3DVertexDeclaration9* pVertexDecl, DWORD Flags) PURE; STDMETHOD(CreateVertexDeclaration)(THIS_ CONST D3DVERTEXELEMENT9* pVertexElements, IDirect3DVertexDeclaration9** ppDecl) PURE; STDMETHOD(SetVertexDeclaration)(THIS_ IDirect3DVertexDeclaration9* pDecl) PURE; STDMETHOD(GetVertexDeclaration)(THIS_ IDirect3DVertexDeclaration9** ppDecl) PURE; STDMETHOD(SetFVF)(THIS_ DWORD FVF) PURE; STDMETHOD(GetFVF)(THIS_ DWORD* pFVF) PURE; STDMETHOD(CreateVertexShader)(THIS_ CONST DWORD* pFunction, IDirect3DVertexShader9** ppShader) PURE; STDMETHOD(SetVertexShader)(THIS_ IDirect3DVertexShader9* pShader) PURE; STDMETHOD(GetVertexShader)(THIS_ IDirect3DVertexShader9** ppShader) PURE; STDMETHOD(SetVertexShaderConstantF)(THIS_ UINT StartRegister, CONST float* pConstantData, UINT Vector4fCount) PURE; STDMETHOD(GetVertexShaderConstantF)(THIS_ UINT StartRegister, float* pConstantData, UINT Vector4fCount) PURE; STDMETHOD(SetVertexShaderConstantI)(THIS_ UINT StartRegister, CONST int* pConstantData, UINT Vector4iCount) PURE; STDMETHOD(GetVertexShaderConstantI)(THIS_ UINT StartRegister, int* pConstantData, UINT Vector4iCount) PURE; STDMETHOD(SetVertexShaderConstantB)(THIS_ UINT StartRegister, CONST BOOL* pConstantData, UINT BoolCount) PURE; STDMETHOD(GetVertexShaderConstantB)(THIS_ UINT StartRegister, BOOL* pConstantData, UINT BoolCount) PURE; STDMETHOD(SetStreamSource)(THIS_ UINT StreamNumber, IDirect3DVertexBuffer9* pStreamData, UINT OffsetInBytes, UINT Stride) PURE; STDMETHOD(GetStreamSource)(THIS_ UINT StreamNumber, IDirect3DVertexBuffer9** ppStreamData, UINT* OffsetInBytes, UINT* pStride) PURE; STDMETHOD(SetStreamSourceFreq)(THIS_ UINT StreamNumber, UINT Divider) PURE; STDMETHOD(GetStreamSourceFreq)(THIS_ UINT StreamNumber, UINT* Divider) PURE; STDMETHOD(SetIndices)(THIS_ IDirect3DIndexBuffer9* pIndexData) PURE; STDMETHOD(GetIndices)(THIS_ IDirect3DIndexBuffer9** ppIndexData) PURE; STDMETHOD(CreatePixelShader)(THIS_ CONST DWORD* pFunction, IDirect3DPixelShader9** ppShader) PURE; STDMETHOD(SetPixelShader)(THIS_ IDirect3DPixelShader9* pShader) PURE; STDMETHOD(GetPixelShader)(THIS_ IDirect3DPixelShader9** ppShader) PURE; STDMETHOD(SetPixelShaderConstantF)(THIS_ UINT StartRegister, CONST float* pConstantData, UINT Vector4fCount) PURE; STDMETHOD(GetPixelShaderConstantF)(THIS_ UINT StartRegister, float* pConstantData, UINT Vector4fCount) PURE; STDMETHOD(SetPixelShaderConstantI)(THIS_ UINT StartRegister, CONST int* pConstantData, UINT Vector4iCount) PURE; STDMETHOD(GetPixelShaderConstantI)(THIS_ UINT StartRegister, int* pConstantData, UINT Vector4iCount) PURE; STDMETHOD(SetPixelShaderConstantB)(THIS_ UINT StartRegister, CONST BOOL* pConstantData, UINT BoolCount) PURE; STDMETHOD(GetPixelShaderConstantB)(THIS_ UINT StartRegister, BOOL* pConstantData, UINT BoolCount) PURE; STDMETHOD(DrawRectPatch)(THIS_ UINT Handle, CONST float* pNumSegs, CONST D3DRECTPATCH_INFO* pRectPatchInfo) PURE; STDMETHOD(DrawTriPatch)(THIS_ UINT Handle, CONST float* pNumSegs, CONST D3DTRIPATCH_INFO* pTriPatchInfo) PURE; STDMETHOD(DeletePatch)(THIS_ UINT Handle) PURE; STDMETHOD(CreateQuery)(THIS_ D3DQUERYTYPE Type, IDirect3DQuery9** ppQuery) PURE; /* IDirect3DDevice9Ex methods */ STDMETHOD(SetConvolutionMonoKernel)(THIS_ UINT width, UINT height, float *rows, float *columns) PURE; STDMETHOD(ComposeRects)(THIS_ IDirect3DSurface9 *src_surface, IDirect3DSurface9 *dst_surface, IDirect3DVertexBuffer9 *src_descs, UINT rect_count, IDirect3DVertexBuffer9 *dst_descs, D3DCOMPOSERECTSOP operation, INT offset_x, INT offset_y) PURE; STDMETHOD(PresentEx)(THIS_ CONST RECT *pSourceRect, CONST RECT *pDestRect, HWND hDestWindowOverride, CONST RGNDATA *pDirtyRegion, DWORD dwFlags) PURE; STDMETHOD(GetGPUThreadPriority)(THIS_ INT *pPriority) PURE; STDMETHOD(SetGPUThreadPriority)(THIS_ INT Priority) PURE; STDMETHOD(WaitForVBlank)(THIS_ UINT iSwapChain) PURE; STDMETHOD(CheckResourceResidency)(THIS_ IDirect3DResource9 **resources, UINT32 resource_count) PURE; STDMETHOD(SetMaximumFrameLatency)(THIS_ UINT MaxLatency) PURE; STDMETHOD(GetMaximumFrameLatency)(THIS_ UINT *pMaxLatenxy) PURE; STDMETHOD(CheckDeviceState)(THIS_ HWND dst_window) PURE; STDMETHOD(CreateRenderTargetEx)(THIS_ UINT Width, UINT Height, D3DFORMAT Format, D3DMULTISAMPLE_TYPE MultiSample, DWORD MultiSampleQuality, BOOL Lockable, IDirect3DSurface9 ** ppSurface, HANDLE *pSharedHandle, DWORD Usage) PURE; STDMETHOD(CreateOffscreenPlainSurfaceEx)(THIS_ UINT Width, UINT Height, D3DFORMAT Format, D3DPOOL Pool, IDirect3DSurface9 **ppSurface, HANDLE *pSharedHandle, DWORD Usage) PURE; STDMETHOD(CreateDepthStencilSurfaceEx)(THIS_ UINT width, UINT height, D3DFORMAT format, D3DMULTISAMPLE_TYPE multisample_type, DWORD multisample_quality, BOOL discard, IDirect3DSurface9 **surface, HANDLE *shared_handle, DWORD usage) PURE; STDMETHOD(ResetEx)(THIS_ D3DPRESENT_PARAMETERS *pPresentationParameters, D3DDISPLAYMODEEX *pFullscreenDisplayMode) PURE; STDMETHOD(GetDisplayModeEx)(THIS_ UINT iSwapChain, D3DDISPLAYMODEEX *pMode, D3DDISPLAYROTATION *pRotation) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDirect3DDevice9Ex_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirect3DDevice9Ex_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirect3DDevice9Ex_Release(p) (p)->lpVtbl->Release(p) /*** IDirect3DDevice9 methods ***/ #define IDirect3DDevice9Ex_TestCooperativeLevel(p) (p)->lpVtbl->TestCooperativeLevel(p) #define IDirect3DDevice9Ex_GetAvailableTextureMem(p) (p)->lpVtbl->GetAvailableTextureMem(p) #define IDirect3DDevice9Ex_EvictManagedResources(p) (p)->lpVtbl->EvictManagedResources(p) #define IDirect3DDevice9Ex_GetDirect3D(p,a) (p)->lpVtbl->GetDirect3D(p,a) #define IDirect3DDevice9Ex_GetDeviceCaps(p,a) (p)->lpVtbl->GetDeviceCaps(p,a) #define IDirect3DDevice9Ex_GetDisplayMode(p,a,b) (p)->lpVtbl->GetDisplayMode(p,a,b) #define IDirect3DDevice9Ex_GetCreationParameters(p,a) (p)->lpVtbl->GetCreationParameters(p,a) #define IDirect3DDevice9Ex_SetCursorProperties(p,a,b,c) (p)->lpVtbl->SetCursorProperties(p,a,b,c) #define IDirect3DDevice9Ex_SetCursorPosition(p,a,b,c) (p)->lpVtbl->SetCursorPosition(p,a,b,c) #define IDirect3DDevice9Ex_ShowCursor(p,a) (p)->lpVtbl->ShowCursor(p,a) #define IDirect3DDevice9Ex_CreateAdditionalSwapChain(p,a,b) (p)->lpVtbl->CreateAdditionalSwapChain(p,a,b) #define IDirect3DDevice9Ex_GetSwapChain(p,a,b) (p)->lpVtbl->GetSwapChain(p,a,b) #define IDirect3DDevice9Ex_GetNumberOfSwapChains(p) (p)->lpVtbl->GetNumberOfSwapChains(p) #define IDirect3DDevice9Ex_Reset(p,a) (p)->lpVtbl->Reset(p,a) #define IDirect3DDevice9Ex_Present(p,a,b,c,d) (p)->lpVtbl->Present(p,a,b,c,d) #define IDirect3DDevice9Ex_GetBackBuffer(p,a,b,c,d) (p)->lpVtbl->GetBackBuffer(p,a,b,c,d) #define IDirect3DDevice9Ex_GetRasterStatus(p,a,b) (p)->lpVtbl->GetRasterStatus(p,a,b) #define IDirect3DDevice9Ex_SetDialogBoxMode(p,a) (p)->lpVtbl->SetDialogBoxMode(p,a) #define IDirect3DDevice9Ex_SetGammaRamp(p,a,b,c) (p)->lpVtbl->SetGammaRamp(p,a,b,c) #define IDirect3DDevice9Ex_GetGammaRamp(p,a,b) (p)->lpVtbl->GetGammaRamp(p,a,b) #define IDirect3DDevice9Ex_CreateTexture(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->CreateTexture(p,a,b,c,d,e,f,g,h) #define IDirect3DDevice9Ex_CreateVolumeTexture(p,a,b,c,d,e,f,g,h,i) (p)->lpVtbl->CreateVolumeTexture(p,a,b,c,d,e,f,g,h,i) #define IDirect3DDevice9Ex_CreateCubeTexture(p,a,b,c,d,e,f,g) (p)->lpVtbl->CreateCubeTexture(p,a,b,c,d,e,f,g) #define IDirect3DDevice9Ex_CreateVertexBuffer(p,a,b,c,d,e,f) (p)->lpVtbl->CreateVertexBuffer(p,a,b,c,d,e,f) #define IDirect3DDevice9Ex_CreateIndexBuffer(p,a,b,c,d,e,f) (p)->lpVtbl->CreateIndexBuffer(p,a,b,c,d,e,f) #define IDirect3DDevice9Ex_CreateRenderTarget(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->CreateRenderTarget(p,a,b,c,d,e,f,g,h) #define IDirect3DDevice9Ex_CreateDepthStencilSurface(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->CreateDepthStencilSurface(p,a,b,c,d,e,f,g,h) #define IDirect3DDevice9Ex_UpdateSurface(p,a,b,c,d) (p)->lpVtbl->UpdateSurface(p,a,b,c,d) #define IDirect3DDevice9Ex_UpdateTexture(p,a,b) (p)->lpVtbl->UpdateTexture(p,a,b) #define IDirect3DDevice9Ex_GetRenderTargetData(p,a,b) (p)->lpVtbl->GetRenderTargetData(p,a,b) #define IDirect3DDevice9Ex_GetFrontBufferData(p,a,b) (p)->lpVtbl->GetFrontBufferData(p,a,b) #define IDirect3DDevice9Ex_StretchRect(p,a,b,c,d,e) (p)->lpVtbl->StretchRect(p,a,b,c,d,e) #define IDirect3DDevice9Ex_ColorFill(p,a,b,c) (p)->lpVtbl->ColorFill(p,a,b,c) #define IDirect3DDevice9Ex_CreateOffscreenPlainSurface(p,a,b,c,d,e,f) (p)->lpVtbl->CreateOffscreenPlainSurface(p,a,b,c,d,e,f) #define IDirect3DDevice9Ex_SetRenderTarget(p,a,b) (p)->lpVtbl->SetRenderTarget(p,a,b) #define IDirect3DDevice9Ex_GetRenderTarget(p,a,b) (p)->lpVtbl->GetRenderTarget(p,a,b) #define IDirect3DDevice9Ex_SetDepthStencilSurface(p,a) (p)->lpVtbl->SetDepthStencilSurface(p,a) #define IDirect3DDevice9Ex_GetDepthStencilSurface(p,a) (p)->lpVtbl->GetDepthStencilSurface(p,a) #define IDirect3DDevice9Ex_BeginScene(p) (p)->lpVtbl->BeginScene(p) #define IDirect3DDevice9Ex_EndScene(p) (p)->lpVtbl->EndScene(p) #define IDirect3DDevice9Ex_Clear(p,a,b,c,d,e,f) (p)->lpVtbl->Clear(p,a,b,c,d,e,f) #define IDirect3DDevice9Ex_SetTransform(p,a,b) (p)->lpVtbl->SetTransform(p,a,b) #define IDirect3DDevice9Ex_GetTransform(p,a,b) (p)->lpVtbl->GetTransform(p,a,b) #define IDirect3DDevice9Ex_MultiplyTransform(p,a,b) (p)->lpVtbl->MultiplyTransform(p,a,b) #define IDirect3DDevice9Ex_SetViewport(p,a) (p)->lpVtbl->SetViewport(p,a) #define IDirect3DDevice9Ex_GetViewport(p,a) (p)->lpVtbl->GetViewport(p,a) #define IDirect3DDevice9Ex_SetMaterial(p,a) (p)->lpVtbl->SetMaterial(p,a) #define IDirect3DDevice9Ex_GetMaterial(p,a) (p)->lpVtbl->GetMaterial(p,a) #define IDirect3DDevice9Ex_SetLight(p,a,b) (p)->lpVtbl->SetLight(p,a,b) #define IDirect3DDevice9Ex_GetLight(p,a,b) (p)->lpVtbl->GetLight(p,a,b) #define IDirect3DDevice9Ex_LightEnable(p,a,b) (p)->lpVtbl->LightEnable(p,a,b) #define IDirect3DDevice9Ex_GetLightEnable(p,a,b) (p)->lpVtbl->GetLightEnable(p,a,b) #define IDirect3DDevice9Ex_SetClipPlane(p,a,b) (p)->lpVtbl->SetClipPlane(p,a,b) #define IDirect3DDevice9Ex_GetClipPlane(p,a,b) (p)->lpVtbl->GetClipPlane(p,a,b) #define IDirect3DDevice9Ex_SetRenderState(p,a,b) (p)->lpVtbl->SetRenderState(p,a,b) #define IDirect3DDevice9Ex_GetRenderState(p,a,b) (p)->lpVtbl->GetRenderState(p,a,b) #define IDirect3DDevice9Ex_CreateStateBlock(p,a,b) (p)->lpVtbl->CreateStateBlock(p,a,b) #define IDirect3DDevice9Ex_BeginStateBlock(p) (p)->lpVtbl->BeginStateBlock(p) #define IDirect3DDevice9Ex_EndStateBlock(p,a) (p)->lpVtbl->EndStateBlock(p,a) #define IDirect3DDevice9Ex_SetClipStatus(p,a) (p)->lpVtbl->SetClipStatus(p,a) #define IDirect3DDevice9Ex_GetClipStatus(p,a) (p)->lpVtbl->GetClipStatus(p,a) #define IDirect3DDevice9Ex_GetTexture(p,a,b) (p)->lpVtbl->GetTexture(p,a,b) #define IDirect3DDevice9Ex_SetTexture(p,a,b) (p)->lpVtbl->SetTexture(p,a,b) #define IDirect3DDevice9Ex_GetTextureStageState(p,a,b,c) (p)->lpVtbl->GetTextureStageState(p,a,b,c) #define IDirect3DDevice9Ex_SetTextureStageState(p,a,b,c) (p)->lpVtbl->SetTextureStageState(p,a,b,c) #define IDirect3DDevice9Ex_GetSamplerState(p,a,b,c) (p)->lpVtbl->GetSamplerState(p,a,b,c) #define IDirect3DDevice9Ex_SetSamplerState(p,a,b,c) (p)->lpVtbl->SetSamplerState(p,a,b,c) #define IDirect3DDevice9Ex_ValidateDevice(p,a) (p)->lpVtbl->ValidateDevice(p,a) #define IDirect3DDevice9Ex_SetPaletteEntries(p,a,b) (p)->lpVtbl->SetPaletteEntries(p,a,b) #define IDirect3DDevice9Ex_GetPaletteEntries(p,a,b) (p)->lpVtbl->GetPaletteEntries(p,a,b) #define IDirect3DDevice9Ex_SetCurrentTexturePalette(p,a) (p)->lpVtbl->SetCurrentTexturePalette(p,a) #define IDirect3DDevice9Ex_GetCurrentTexturePalette(p,a) (p)->lpVtbl->GetCurrentTexturePalette(p,a) #define IDirect3DDevice9Ex_SetScissorRect(p,a) (p)->lpVtbl->SetScissorRect(p,a) #define IDirect3DDevice9Ex_GetScissorRect(p,a) (p)->lpVtbl->GetScissorRect(p,a) #define IDirect3DDevice9Ex_SetSoftwareVertexProcessing(p,a) (p)->lpVtbl->SetSoftwareVertexProcessing(p,a) #define IDirect3DDevice9Ex_GetSoftwareVertexProcessing(p) (p)->lpVtbl->GetSoftwareVertexProcessing(p) #define IDirect3DDevice9Ex_SetNPatchMode(p,a) (p)->lpVtbl->SetNPatchMode(p,a) #define IDirect3DDevice9Ex_GetNPatchMode(p) (p)->lpVtbl->GetNPatchMode(p) #define IDirect3DDevice9Ex_DrawPrimitive(p,a,b,c) (p)->lpVtbl->DrawPrimitive(p,a,b,c) #define IDirect3DDevice9Ex_DrawIndexedPrimitive(p,a,b,c,d,e,f) (p)->lpVtbl->DrawIndexedPrimitive(p,a,b,c,d,e,f) #define IDirect3DDevice9Ex_DrawPrimitiveUP(p,a,b,c,d) (p)->lpVtbl->DrawPrimitiveUP(p,a,b,c,d) #define IDirect3DDevice9Ex_DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h) #define IDirect3DDevice9Ex_ProcessVertices(p,a,b,c,d,e,f) (p)->lpVtbl->ProcessVertices(p,a,b,c,d,e,f) #define IDirect3DDevice9Ex_CreateVertexDeclaration(p,a,b) (p)->lpVtbl->CreateVertexDeclaration(p,a,b) #define IDirect3DDevice9Ex_SetVertexDeclaration(p,a) (p)->lpVtbl->SetVertexDeclaration(p,a) #define IDirect3DDevice9Ex_GetVertexDeclaration(p,a) (p)->lpVtbl->GetVertexDeclaration(p,a) #define IDirect3DDevice9Ex_SetFVF(p,a) (p)->lpVtbl->SetFVF(p,a) #define IDirect3DDevice9Ex_GetFVF(p,a) (p)->lpVtbl->GetFVF(p,a) #define IDirect3DDevice9Ex_CreateVertexShader(p,a,b) (p)->lpVtbl->CreateVertexShader(p,a,b) #define IDirect3DDevice9Ex_SetVertexShader(p,a) (p)->lpVtbl->SetVertexShader(p,a) #define IDirect3DDevice9Ex_GetVertexShader(p,a) (p)->lpVtbl->GetVertexShader(p,a) #define IDirect3DDevice9Ex_SetVertexShaderConstantF(p,a,b,c) (p)->lpVtbl->SetVertexShaderConstantF(p,a,b,c) #define IDirect3DDevice9Ex_GetVertexShaderConstantF(p,a,b,c) (p)->lpVtbl->GetVertexShaderConstantF(p,a,b,c) #define IDirect3DDevice9Ex_SetVertexShaderConstantI(p,a,b,c) (p)->lpVtbl->SetVertexShaderConstantI(p,a,b,c) #define IDirect3DDevice9Ex_GetVertexShaderConstantI(p,a,b,c) (p)->lpVtbl->GetVertexShaderConstantI(p,a,b,c) #define IDirect3DDevice9Ex_SetVertexShaderConstantB(p,a,b,c) (p)->lpVtbl->SetVertexShaderConstantB(p,a,b,c) #define IDirect3DDevice9Ex_GetVertexShaderConstantB(p,a,b,c) (p)->lpVtbl->GetVertexShaderConstantB(p,a,b,c) #define IDirect3DDevice9Ex_SetStreamSource(p,a,b,c,d) (p)->lpVtbl->SetStreamSource(p,a,b,c,d) #define IDirect3DDevice9Ex_GetStreamSource(p,a,b,c,d) (p)->lpVtbl->GetStreamSource(p,a,b,c,d) #define IDirect3DDevice9Ex_SetStreamSourceFreq(p,a,b) (p)->lpVtbl->SetStreamSourceFreq(p,a,b) #define IDirect3DDevice9Ex_GetStreamSourceFreq(p,a,b) (p)->lpVtbl->GetStreamSourceFreq(p,a,b) #define IDirect3DDevice9Ex_SetIndices(p,a) (p)->lpVtbl->SetIndices(p,a) #define IDirect3DDevice9Ex_GetIndices(p,a) (p)->lpVtbl->GetIndices(p,a) #define IDirect3DDevice9Ex_CreatePixelShader(p,a,b) (p)->lpVtbl->CreatePixelShader(p,a,b) #define IDirect3DDevice9Ex_SetPixelShader(p,a) (p)->lpVtbl->SetPixelShader(p,a) #define IDirect3DDevice9Ex_GetPixelShader(p,a) (p)->lpVtbl->GetPixelShader(p,a) #define IDirect3DDevice9Ex_SetPixelShaderConstantF(p,a,b,c) (p)->lpVtbl->SetPixelShaderConstantF(p,a,b,c) #define IDirect3DDevice9Ex_GetPixelShaderConstantF(p,a,b,c) (p)->lpVtbl->GetPixelShaderConstantF(p,a,b,c) #define IDirect3DDevice9Ex_SetPixelShaderConstantI(p,a,b,c) (p)->lpVtbl->SetPixelShaderConstantI(p,a,b,c) #define IDirect3DDevice9Ex_GetPixelShaderConstantI(p,a,b,c) (p)->lpVtbl->GetPixelShaderConstantI(p,a,b,c) #define IDirect3DDevice9Ex_SetPixelShaderConstantB(p,a,b,c) (p)->lpVtbl->SetPixelShaderConstantB(p,a,b,c) #define IDirect3DDevice9Ex_GetPixelShaderConstantB(p,a,b,c) (p)->lpVtbl->GetPixelShaderConstantB(p,a,b,c) #define IDirect3DDevice9Ex_DrawRectPatch(p,a,b,c) (p)->lpVtbl->DrawRectPatch(p,a,b,c) #define IDirect3DDevice9Ex_DrawTriPatch(p,a,b,c) (p)->lpVtbl->DrawTriPatch(p,a,b,c) #define IDirect3DDevice9Ex_DeletePatch(p,a) (p)->lpVtbl->DeletePatch(p,a) #define IDirect3DDevice9Ex_CreateQuery(p,a,b) (p)->lpVtbl->CreateQuery(p,a,b) /* IDirect3DDevice9Ex */ #define IDirect3DDevice9Ex_SetConvolutionMonoKernel(p,a,b,c,d) (p)->lpVtbl->SetConvolutionMonoKernel(p,a,b,c,d) #define IDirect3DDevice9Ex_ComposeRects(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->ComposeRects(p,a,b,c,d,e,f,g,h) #define IDirect3DDevice9Ex_PresentEx(p,a,b,c,d,e) (p)->lpVtbl->PresentEx(p,a,b,c,d,e) #define IDirect3DDevice9Ex_GetGPUThreadPriority(p,a) (p)->lpVtbl->GetGPUThreadPriority(p,a) #define IDirect3DDevice9Ex_SetGPUThreadPriority(p,a) (p)->lpVtbl->SetGPUThreadPriority(p,a) #define IDirect3DDevice9Ex_WaitForVBlank(p,a) (p)->lpVtbl->WaitForVBlank(p,a) #define IDirect3DDevice9Ex_CheckResourceResidency(p,a,b) (p)->lpVtbl->CheckResourceResidency(p,a,b) #define IDirect3DDevice9Ex_SetMaximumFrameLatency(p,a) (p)->lpVtbl->SetMaximumFrameLatency(p,a) #define IDirect3DDevice9Ex_GetMaximumFrameLatency(p,a) (p)->lpVtbl->GetMaximumFrameLatency(p,a) #define IDirect3DDevice9Ex_CheckDeviceState(p,a) (p)->lpVtbl->CheckDeviceState(p,a) #define IDirect3DDevice9Ex_CreateRenderTargetEx(p,a,b,c,d,e,f,g,h,i) (p)->lpVtbl->CreateRenderTargetEx(p,a,b,c,d,e,f,g,h,i) #define IDirect3DDevice9Ex_CreateOffscreenPlainSurfaceEx(p,a,b,c,d,e,f,g)(p)->lpVtbl->CreateOffscreenPlainSurfaceEx(p,a,b,c,d,e,f,g) #define IDirect3DDevice9Ex_CreateDepthStencilSurfaceEx(p,a,b,c,d,e,f,g,h,i)(p)->lpVtbl->CreateDepthStencilSurfaceEx(p,a,b,c,d,e,f,g,h,i) #define IDirect3DDevice9Ex_ResetEx(p,a,b) (p)->lpVtbl->ResetEx(p,a,b) #define IDirect3DDevice9Ex_GetDisplayModeEx(p,a,b,c) (p)->lpVtbl->GetDisplayModeEx(p,a,b,c) #else /*** IUnknown methods ***/ #define IDirect3DDevice9Ex_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirect3DDevice9Ex_AddRef(p) (p)->AddRef() #define IDirect3DDevice9Ex_Release(p) (p)->Release() /*** IDirect3DDevice9 methods ***/ #define IDirect3DDevice9Ex_TestCooperativeLevel(p) (p)->TestCooperativeLevel() #define IDirect3DDevice9Ex_GetAvailableTextureMem(p) (p)->GetAvailableTextureMem() #define IDirect3DDevice9Ex_EvictManagedResources(p) (p)->EvictManagedResources() #define IDirect3DDevice9Ex_GetDirect3D(p,a) (p)->GetDirect3D(a) #define IDirect3DDevice9Ex_GetDeviceCaps(p,a) (p)->GetDeviceCaps(a) #define IDirect3DDevice9Ex_GetDisplayMode(p,a,b) (p)->GetDisplayMode(a,b) #define IDirect3DDevice9Ex_GetCreationParameters(p,a) (p)->GetCreationParameters(a) #define IDirect3DDevice9Ex_SetCursorProperties(p,a,b,c) (p)->SetCursorProperties(a,b,c) #define IDirect3DDevice9Ex_SetCursorPosition(p,a,b,c) (p)->SetCursorPosition(a,b,c) #define IDirect3DDevice9Ex_ShowCursor(p,a) (p)->ShowCursor(a) #define IDirect3DDevice9Ex_CreateAdditionalSwapChain(p,a,b) (p)->CreateAdditionalSwapChain(a,b) #define IDirect3DDevice9Ex_GetSwapChain(p,a,b) (p)->GetSwapChain(a,b) #define IDirect3DDevice9Ex_GetNumberOfSwapChains(p) (p)->GetNumberOfSwapChains() #define IDirect3DDevice9Ex_Reset(p,a) (p)->Reset(a) #define IDirect3DDevice9Ex_Present(p,a,b,c,d) (p)->Present(a,b,c,d) #define IDirect3DDevice9Ex_GetBackBuffer(p,a,b,c,d) (p)->GetBackBuffer(a,b,c,d) #define IDirect3DDevice9Ex_GetRasterStatus(p,a,b) (p)->GetRasterStatus(a,b) #define IDirect3DDevice9Ex_SetDialogBoxMode(p,a) (p)->SetDialogBoxMode(a) #define IDirect3DDevice9Ex_SetGammaRamp(p,a,b,c) (p)->SetGammaRamp(a,b,c) #define IDirect3DDevice9Ex_GetGammaRamp(p,a,b) (p)->GetGammaRamp(a,b) #define IDirect3DDevice9Ex_CreateTexture(p,a,b,c,d,e,f,g,h) (p)->CreateTexture(a,b,c,d,e,f,g,h) #define IDirect3DDevice9Ex_CreateVolumeTexture(p,a,b,c,d,e,f,g,h,i) (p)->CreateVolumeTexture(a,b,c,d,e,f,g,h,i) #define IDirect3DDevice9Ex_CreateCubeTexture(p,a,b,c,d,e,f,g) (p)->CreateCubeTexture(a,b,c,d,e,f,g) #define IDirect3DDevice9Ex_CreateVertexBuffer(p,a,b,c,d,e,f) (p)->CreateVertexBuffer(a,b,c,d,e,f) #define IDirect3DDevice9Ex_CreateIndexBuffer(p,a,b,c,d,e,f) (p)->CreateIndexBuffer(a,b,c,d,e,f) #define IDirect3DDevice9Ex_CreateRenderTarget(p,a,b,c,d,e,f,g,h) (p)->CreateRenderTarget(a,b,c,d,e,f,g,h) #define IDirect3DDevice9Ex_CreateDepthStencilSurface(p,a,b,c,d,e,f,g,h) (p)->CreateDepthStencilSurface(a,b,c,d,e,f,g,h) #define IDirect3DDevice9Ex_UpdateSurface(p,a,b,c,d) (p)->UpdateSurface(a,b,c,d) #define IDirect3DDevice9Ex_UpdateTexture(p,a,b) (p)->UpdateTexture(a,b) #define IDirect3DDevice9Ex_GetRenderTargetData(p,a,b) (p)->GetRenderTargetData(a,b) #define IDirect3DDevice9Ex_GetFrontBufferData(p,a,b) (p)->GetFrontBufferData(a,b) #define IDirect3DDevice9Ex_StretchRect(p,a,b,c,d,e) (p)->StretchRect(a,b,c,d,e) #define IDirect3DDevice9Ex_ColorFill(p,a,b,c) (p)->ColorFill(a,b,c) #define IDirect3DDevice9Ex_CreateOffscreenPlainSurface(p,a,b,c,d,e,f) (p)->CreateOffscreenPlainSurface(a,b,c,d,e,f) #define IDirect3DDevice9Ex_SetRenderTarget(p,a,b) (p)->SetRenderTarget(a,b) #define IDirect3DDevice9Ex_GetRenderTarget(p,a,b) (p)->GetRenderTarget(a,b) #define IDirect3DDevice9Ex_SetDepthStencilSurface(p,a) (p)->SetDepthStencilSurface(a) #define IDirect3DDevice9Ex_GetDepthStencilSurface(p,a) (p)->GetDepthStencilSurface(a) #define IDirect3DDevice9Ex_BeginScene(p) (p)->BeginScene() #define IDirect3DDevice9Ex_EndScene(p) (p)->EndScene() #define IDirect3DDevice9Ex_Clear(p,a,b,c,d,e,f) (p)->Clear(a,b,c,d,e,f) #define IDirect3DDevice9Ex_SetTransform(p,a,b) (p)->SetTransform(a,b) #define IDirect3DDevice9Ex_GetTransform(p,a,b) (p)->GetTransform(a,b) #define IDirect3DDevice9Ex_MultiplyTransform(p,a,b) (p)->MultiplyTransform(a,b) #define IDirect3DDevice9Ex_SetViewport(p,a) (p)->SetViewport(a) #define IDirect3DDevice9Ex_GetViewport(p,a) (p)->GetViewport(a) #define IDirect3DDevice9Ex_SetMaterial(p,a) (p)->SetMaterial(a) #define IDirect3DDevice9Ex_GetMaterial(p,a) (p)->GetMaterial(a) #define IDirect3DDevice9Ex_SetLight(p,a,b) (p)->SetLight(a,b) #define IDirect3DDevice9Ex_GetLight(p,a,b) (p)->GetLight(a,b) #define IDirect3DDevice9Ex_LightEnable(p,a,b) (p)->LightEnable(a,b) #define IDirect3DDevice9Ex_GetLightEnable(p,a,b) (p)->GetLightEnable(a,b) #define IDirect3DDevice9Ex_SetClipPlane(p,a,b) (p)->SetClipPlane(a,b) #define IDirect3DDevice9Ex_GetClipPlane(p,a,b) (p)->GetClipPlane(a,b) #define IDirect3DDevice9Ex_SetRenderState(p,a,b) (p)->SetRenderState(a,b) #define IDirect3DDevice9Ex_GetRenderState(p,a,b) (p)->GetRenderState(a,b) #define IDirect3DDevice9Ex_CreateStateBlock(p,a,b) (p)->CreateStateBlock(a,b) #define IDirect3DDevice9Ex_BeginStateBlock(p) (p)->BeginStateBlock() #define IDirect3DDevice9Ex_EndStateBlock(p,a) (p)->EndStateBlock(a) #define IDirect3DDevice9Ex_SetClipStatus(p,a) (p)->SetClipStatus(a) #define IDirect3DDevice9Ex_GetClipStatus(p,a) (p)->GetClipStatus(a) #define IDirect3DDevice9Ex_GetTexture(p,a,b) (p)->GetTexture(a,b) #define IDirect3DDevice9Ex_SetTexture(p,a,b) (p)->SetTexture(a,b) #define IDirect3DDevice9Ex_GetTextureStageState(p,a,b,c) (p)->GetTextureStageState(a,b,c) #define IDirect3DDevice9Ex_SetTextureStageState(p,a,b,c) (p)->SetTextureStageState(a,b,c) #define IDirect3DDevice9Ex_GetSamplerState(p,a,b,c) (p)->GetSamplerState(a,b,c) #define IDirect3DDevice9Ex_SetSamplerState(p,a,b,c) (p)->SetSamplerState(a,b,c) #define IDirect3DDevice9Ex_ValidateDevice(p,a) (p)->ValidateDevice(a) #define IDirect3DDevice9Ex_SetPaletteEntries(p,a,b) (p)->SetPaletteEntries(a,b) #define IDirect3DDevice9Ex_GetPaletteEntries(p,a,b) (p)->GetPaletteEntries(a,b) #define IDirect3DDevice9Ex_SetCurrentTexturePalette(p,a) (p)->SetCurrentTexturePalette(a) #define IDirect3DDevice9Ex_GetCurrentTexturePalette(p,a) (p)->GetCurrentTexturePalette(a) #define IDirect3DDevice9Ex_SetScissorRect(p,a) (p)->SetScissorRect(a) #define IDirect3DDevice9Ex_GetScissorRect(p,a) (p)->GetScissorRect(a) #define IDirect3DDevice9Ex_SetSoftwareVertexProcessing(p,a) (p)->SetSoftwareVertexProcessing(a) #define IDirect3DDevice9Ex_GetSoftwareVertexProcessing(p) (p)->GetSoftwareVertexProcessing() #define IDirect3DDevice9Ex_SetNPatchMode(p,a) (p)->SetNPatchMode(a) #define IDirect3DDevice9Ex_GetNPatchMode(p) (p)->GetNPatchMode() #define IDirect3DDevice9Ex_DrawPrimitive(p,a,b,c) (p)->DrawPrimitive(a,b,c) #define IDirect3DDevice9Ex_DrawIndexedPrimitive(p,a,b,c,d,e,f) (p)->DrawIndexedPrimitive(a,b,c,d,e,f) #define IDirect3DDevice9Ex_DrawPrimitiveUP(p,a,b,c,d) (p)->DrawPrimitiveUP(a,b,c,d) #define IDirect3DDevice9Ex_DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h) (p)->DrawIndexedPrimitiveUP(a,b,c,d,e,f,g,h) #define IDirect3DDevice9Ex_ProcessVertices(p,a,b,c,d,e,f) (p)->ProcessVertices(a,b,c,d,e,f) #define IDirect3DDevice9Ex_CreateVertexDeclaration(p,a,b) (p)->CreateVertexDeclaration(a,b) #define IDirect3DDevice9Ex_SetVertexDeclaration(p,a) (p)->SetVertexDeclaration(a) #define IDirect3DDevice9Ex_GetVertexDeclaration(p,a) (p)->GetVertexDeclaration(a) #define IDirect3DDevice9Ex_SetFVF(p,a) (p)->SetFVF(a) #define IDirect3DDevice9Ex_GetFVF(p,a) (p)->GetFVF(a) #define IDirect3DDevice9Ex_CreateVertexShader(p,a,b) (p)->CreateVertexShader(a,b) #define IDirect3DDevice9Ex_SetVertexShader(p,a) (p)->SetVertexShader(a) #define IDirect3DDevice9Ex_GetVertexShader(p,a) (p)->GetVertexShader(a) #define IDirect3DDevice9Ex_SetVertexShaderConstantF(p,a,b,c) (p)->SetVertexShaderConstantF(a,b,c) #define IDirect3DDevice9Ex_GetVertexShaderConstantF(p,a,b,c) (p)->GetVertexShaderConstantF(a,b,c) #define IDirect3DDevice9Ex_SetVertexShaderConstantI(p,a,b,c) (p)->SetVertexShaderConstantI(a,b,c) #define IDirect3DDevice9Ex_GetVertexShaderConstantI(p,a,b,c) (p)->GetVertexShaderConstantI(a,b,c) #define IDirect3DDevice9Ex_SetVertexShaderConstantB(p,a,b,c) (p)->SetVertexShaderConstantB(a,b,c) #define IDirect3DDevice9Ex_GetVertexShaderConstantB(p,a,b,c) (p)->GetVertexShaderConstantB(a,b,c) #define IDirect3DDevice9Ex_SetStreamSource(p,a,b,c,d) (p)->SetStreamSource(a,b,c,d) #define IDirect3DDevice9Ex_GetStreamSource(p,a,b,c,d) (p)->GetStreamSource(a,b,c,d) #define IDirect3DDevice9Ex_SetStreamSourceFreq(p,a,b) (p)->SetStreamSourceFreq(a,b) #define IDirect3DDevice9Ex_GetStreamSourceFreq(p,a,b) (p)->GetStreamSourceFreq(a,b) #define IDirect3DDevice9Ex_SetIndices(p,a) (p)->SetIndices(a) #define IDirect3DDevice9Ex_GetIndices(p,a) (p)->GetIndices(a) #define IDirect3DDevice9Ex_CreatePixelShader(p,a,b) (p)->CreatePixelShader(a,b) #define IDirect3DDevice9Ex_SetPixelShader(p,a) (p)->SetPixelShader(a) #define IDirect3DDevice9Ex_GetPixelShader(p,a) (p)->GetPixelShader(a) #define IDirect3DDevice9Ex_SetPixelShaderConstantF(p,a,b,c) (p)->SetPixelShaderConstantF(a,b,c) #define IDirect3DDevice9Ex_GetPixelShaderConstantF(p,a,b,c) (p)->GetPixelShaderConstantF(a,b,c) #define IDirect3DDevice9Ex_SetPixelShaderConstantI(p,a,b,c) (p)->SetPixelShaderConstantI(a,b,c) #define IDirect3DDevice9Ex_GetPixelShaderConstantI(p,a,b,c) (p)->GetPixelShaderConstantI(a,b,c) #define IDirect3DDevice9Ex_SetPixelShaderConstantB(p,a,b,c) (p)->SetPixelShaderConstantB(a,b,c) #define IDirect3DDevice9Ex_GetPixelShaderConstantB(p,a,b,c) (p)->GetPixelShaderConstantB(a,b,c) #define IDirect3DDevice9Ex_DrawRectPatch(p,a,b,c) (p)->DrawRectPatch(a,b,c) #define IDirect3DDevice9Ex_DrawTriPatch(p,a,b,c) (p)->DrawTriPatch(a,b,c) #define IDirect3DDevice9Ex_DeletePatch(p,a) (p)->DeletePatch(a) #define IDirect3DDevice9Ex_CreateQuery(p,a,b) (p)->CreateQuery(a,b) /* IDirect3DDevice9Ex */ #define IDirect3DDevice9Ex_SetConvolutionMonoKernel(p,a,b,c,d) (p)->SetConvolutionMonoKernel(a,b,c,d) #define IDirect3DDevice9Ex_ComposeRects(p,a,b,c,d,e,f,g,h) (p)->ComposeRects(a,b,c,d,e,f,g,h) #define IDirect3DDevice9Ex_PresentEx(p,a,b,c,d,e) (p)->PresentEx(a,b,c,d,e) #define IDirect3DDevice9Ex_GetGPUThreadPriority(p,a) (p)->GetGPUThreadPriority(a) #define IDirect3DDevice9Ex_SetGPUThreadPriority(p,a) (p)->SetGPUThreadPriority(a) #define IDirect3DDevice9Ex_WaitForVBlank(p,a) (p)->WaitForVBlank(a) #define IDirect3DDevice9Ex_CheckResourceResidency(p,a,b) (p)->CheckResourceResidency(a,b) #define IDirect3DDevice9Ex_SetMaximumFrameLatency(p,a) (p)->SetMaximumFrameLatency(a) #define IDirect3DDevice9Ex_GetMaximumFrameLatency(p,a) (p)->GetMaximumFrameLatency(a) #define IDirect3DDevice9Ex_CheckDeviceState(p,a) (p)->CheckDeviceState(a) #define IDirect3DDevice9Ex_CreateRenderTargetEx(p,a,b,c,d,e,f,g,h,i) (p)->CreateRenderTargetEx(a,b,c,d,e,f,g,h,i) #define IDirect3DDevice9Ex_CreateOffscreenPlainSurfaceEx(p,a,b,c,d,e,f,g)(p)->CreateOffscreenPlainSurfaceEx(a,b,c,d,e,f,g) #define IDirect3DDevice9Ex_CreateDepthStencilSurfaceEx(p,a,b,c,d,e,f,g,h,i)(p)->CreateDepthStencilSurfaceEx(a,b,c,d,e,f,g,h,i) #define IDirect3DDevice9Ex_ResetEx(p,a,b) (p)->ResetEx(a,b) #define IDirect3DDevice9Ex_GetDisplayModeEx(p,a,b,c) (p)->GetDisplayModeEx(a,b,c) #endif #ifdef __cplusplus extern "C" { #endif /* defined(__cplusplus) */ int WINAPI D3DPERF_BeginEvent(D3DCOLOR,LPCWSTR); int WINAPI D3DPERF_EndEvent(void); DWORD WINAPI D3DPERF_GetStatus(void); BOOL WINAPI D3DPERF_QueryRepeatFrame(void); void WINAPI D3DPERF_SetMarker(D3DCOLOR,LPCWSTR); void WINAPI D3DPERF_SetOptions(DWORD); void WINAPI D3DPERF_SetRegion(D3DCOLOR,LPCWSTR); /* Define the main entrypoint as well */ IDirect3D9* WINAPI Direct3DCreate9(UINT SDKVersion); #ifdef __cplusplus } /* extern "C" */ #endif /* defined(__cplusplus) */ #endif /* __WINE_D3D9_H */ ================================================ FILE: Include/d3d9caps.h ================================================ /*==========================================================================; * * Copyright (C) Microsoft Corporation. All Rights Reserved. * * File: d3d9caps.h * Content: Direct3D capabilities include file * ***************************************************************************/ #ifndef _d3d9CAPS_H #define _d3d9CAPS_H #ifndef DIRECT3D_VERSION #define DIRECT3D_VERSION 0x0900 #endif //DIRECT3D_VERSION // include this file content only if compiling for DX9 interfaces #if(DIRECT3D_VERSION >= 0x0900) #if defined(_X86_) || defined(_IA64_) #pragma pack(4) #endif typedef struct _D3DVSHADERCAPS2_0 { DWORD Caps; INT DynamicFlowControlDepth; INT NumTemps; INT StaticFlowControlDepth; } D3DVSHADERCAPS2_0; #define D3DVS20CAPS_PREDICATION (1<<0) #define D3DVS20_MAX_DYNAMICFLOWCONTROLDEPTH 24 #define D3DVS20_MIN_DYNAMICFLOWCONTROLDEPTH 0 #define D3DVS20_MAX_NUMTEMPS 32 #define D3DVS20_MIN_NUMTEMPS 12 #define D3DVS20_MAX_STATICFLOWCONTROLDEPTH 4 #define D3DVS20_MIN_STATICFLOWCONTROLDEPTH 1 typedef struct _D3DPSHADERCAPS2_0 { DWORD Caps; INT DynamicFlowControlDepth; INT NumTemps; INT StaticFlowControlDepth; INT NumInstructionSlots; } D3DPSHADERCAPS2_0; #define D3DPS20CAPS_ARBITRARYSWIZZLE (1<<0) #define D3DPS20CAPS_GRADIENTINSTRUCTIONS (1<<1) #define D3DPS20CAPS_PREDICATION (1<<2) #define D3DPS20CAPS_NODEPENDENTREADLIMIT (1<<3) #define D3DPS20CAPS_NOTEXINSTRUCTIONLIMIT (1<<4) #define D3DPS20_MAX_DYNAMICFLOWCONTROLDEPTH 24 #define D3DPS20_MIN_DYNAMICFLOWCONTROLDEPTH 0 #define D3DPS20_MAX_NUMTEMPS 32 #define D3DPS20_MIN_NUMTEMPS 12 #define D3DPS20_MAX_STATICFLOWCONTROLDEPTH 4 #define D3DPS20_MIN_STATICFLOWCONTROLDEPTH 0 #define D3DPS20_MAX_NUMINSTRUCTIONSLOTS 512 #define D3DPS20_MIN_NUMINSTRUCTIONSLOTS 96 #define D3DMIN30SHADERINSTRUCTIONS 512 #define D3DMAX30SHADERINSTRUCTIONS 32768 /* D3D9Ex only -- */ #if !defined(D3D_DISABLE_9EX) typedef struct _D3DOVERLAYCAPS { UINT Caps; UINT MaxOverlayDisplayWidth; UINT MaxOverlayDisplayHeight; } D3DOVERLAYCAPS; #define D3DOVERLAYCAPS_FULLRANGERGB 0x00000001 #define D3DOVERLAYCAPS_LIMITEDRANGERGB 0x00000002 #define D3DOVERLAYCAPS_YCbCr_BT601 0x00000004 #define D3DOVERLAYCAPS_YCbCr_BT709 0x00000008 #define D3DOVERLAYCAPS_YCbCr_BT601_xvYCC 0x00000010 #define D3DOVERLAYCAPS_YCbCr_BT709_xvYCC 0x00000020 #define D3DOVERLAYCAPS_STRETCHX 0x00000040 #define D3DOVERLAYCAPS_STRETCHY 0x00000080 typedef struct _D3DCONTENTPROTECTIONCAPS { DWORD Caps; GUID KeyExchangeType; UINT BufferAlignmentStart; UINT BlockAlignmentSize; ULONGLONG ProtectedMemorySize; } D3DCONTENTPROTECTIONCAPS; #define D3DCPCAPS_SOFTWARE 0x00000001 #define D3DCPCAPS_HARDWARE 0x00000002 #define D3DCPCAPS_PROTECTIONALWAYSON 0x00000004 #define D3DCPCAPS_PARTIALDECRYPTION 0x00000008 #define D3DCPCAPS_CONTENTKEY 0x00000010 #define D3DCPCAPS_FRESHENSESSIONKEY 0x00000020 #define D3DCPCAPS_ENCRYPTEDREADBACK 0x00000040 #define D3DCPCAPS_ENCRYPTEDREADBACKKEY 0x00000080 #define D3DCPCAPS_SEQUENTIAL_CTR_IV 0x00000100 #define D3DCPCAPS_ENCRYPTSLICEDATAONLY 0x00000200 DEFINE_GUID(D3DCRYPTOTYPE_AES128_CTR, 0x9b6bd711, 0x4f74, 0x41c9, 0x9e, 0x7b, 0xb, 0xe2, 0xd7, 0xd9, 0x3b, 0x4f); DEFINE_GUID(D3DCRYPTOTYPE_PROPRIETARY, 0xab4e9afd, 0x1d1c, 0x46e6, 0xa7, 0x2f, 0x8, 0x69, 0x91, 0x7b, 0xd, 0xe8); DEFINE_GUID(D3DKEYEXCHANGE_RSAES_OAEP, 0xc1949895, 0xd72a, 0x4a1d, 0x8e, 0x5d, 0xed, 0x85, 0x7d, 0x17, 0x15, 0x20); DEFINE_GUID(D3DKEYEXCHANGE_DXVA, 0x43d3775c, 0x38e5, 0x4924, 0x8d, 0x86, 0xd3, 0xfc, 0xcf, 0x15, 0x3e, 0x9b); #endif // !D3D_DISABLE_9EX /* -- D3D9Ex only */ typedef struct _D3DCAPS9 { /* Device Info */ D3DDEVTYPE DeviceType; UINT AdapterOrdinal; /* Caps from DX7 Draw */ DWORD Caps; DWORD Caps2; DWORD Caps3; DWORD PresentationIntervals; /* Cursor Caps */ DWORD CursorCaps; /* 3D Device Caps */ DWORD DevCaps; DWORD PrimitiveMiscCaps; DWORD RasterCaps; DWORD ZCmpCaps; DWORD SrcBlendCaps; DWORD DestBlendCaps; DWORD AlphaCmpCaps; DWORD ShadeCaps; DWORD TextureCaps; DWORD TextureFilterCaps; // D3DPTFILTERCAPS for IDirect3DTexture9's DWORD CubeTextureFilterCaps; // D3DPTFILTERCAPS for IDirect3DCubeTexture9's DWORD VolumeTextureFilterCaps; // D3DPTFILTERCAPS for IDirect3DVolumeTexture9's DWORD TextureAddressCaps; // D3DPTADDRESSCAPS for IDirect3DTexture9's DWORD VolumeTextureAddressCaps; // D3DPTADDRESSCAPS for IDirect3DVolumeTexture9's DWORD LineCaps; // D3DLINECAPS DWORD MaxTextureWidth, MaxTextureHeight; DWORD MaxVolumeExtent; DWORD MaxTextureRepeat; DWORD MaxTextureAspectRatio; DWORD MaxAnisotropy; float MaxVertexW; float GuardBandLeft; float GuardBandTop; float GuardBandRight; float GuardBandBottom; float ExtentsAdjust; DWORD StencilCaps; DWORD FVFCaps; DWORD TextureOpCaps; DWORD MaxTextureBlendStages; DWORD MaxSimultaneousTextures; DWORD VertexProcessingCaps; DWORD MaxActiveLights; DWORD MaxUserClipPlanes; DWORD MaxVertexBlendMatrices; DWORD MaxVertexBlendMatrixIndex; float MaxPointSize; DWORD MaxPrimitiveCount; // max number of primitives per DrawPrimitive call DWORD MaxVertexIndex; DWORD MaxStreams; DWORD MaxStreamStride; // max stride for SetStreamSource DWORD VertexShaderVersion; DWORD MaxVertexShaderConst; // number of vertex shader constant registers DWORD PixelShaderVersion; float PixelShader1xMaxValue; // max value storable in registers of ps.1.x shaders // Here are the DX9 specific ones DWORD DevCaps2; float MaxNpatchTessellationLevel; DWORD Reserved5; UINT MasterAdapterOrdinal; // ordinal of master adaptor for adapter group UINT AdapterOrdinalInGroup; // ordinal inside the adapter group UINT NumberOfAdaptersInGroup; // number of adapters in this adapter group (only if master) DWORD DeclTypes; // Data types, supported in vertex declarations DWORD NumSimultaneousRTs; // Will be at least 1 DWORD StretchRectFilterCaps; // Filter caps supported by StretchRect D3DVSHADERCAPS2_0 VS20Caps; D3DPSHADERCAPS2_0 PS20Caps; DWORD VertexTextureFilterCaps; // D3DPTFILTERCAPS for IDirect3DTexture9's for texture, used in vertex shaders DWORD MaxVShaderInstructionsExecuted; // maximum number of vertex shader instructions that can be executed DWORD MaxPShaderInstructionsExecuted; // maximum number of pixel shader instructions that can be executed DWORD MaxVertexShader30InstructionSlots; DWORD MaxPixelShader30InstructionSlots; } D3DCAPS9; // // BIT DEFINES FOR D3DCAPS9 DWORD MEMBERS // // // Caps // #define D3DCAPS_OVERLAY 0x00000800L #define D3DCAPS_READ_SCANLINE 0x00020000L // // Caps2 // #define D3DCAPS2_FULLSCREENGAMMA 0x00020000L #define D3DCAPS2_CANCALIBRATEGAMMA 0x00100000L #define D3DCAPS2_RESERVED 0x02000000L #define D3DCAPS2_CANMANAGERESOURCE 0x10000000L #define D3DCAPS2_DYNAMICTEXTURES 0x20000000L #define D3DCAPS2_CANAUTOGENMIPMAP 0x40000000L /* D3D9Ex only -- */ #if !defined(D3D_DISABLE_9EX) #define D3DCAPS2_CANSHARERESOURCE 0x80000000L #endif // !D3D_DISABLE_9EX /* -- D3D9Ex only */ // // Caps3 // #define D3DCAPS3_RESERVED 0x8000001fL // Indicates that the device can respect the ALPHABLENDENABLE render state // when fullscreen while using the FLIP or DISCARD swap effect. // COPY and COPYVSYNC swap effects work whether or not this flag is set. #define D3DCAPS3_ALPHA_FULLSCREEN_FLIP_OR_DISCARD 0x00000020L // Indicates that the device can perform a gamma correction from // a windowed back buffer containing linear content to the sRGB desktop. #define D3DCAPS3_LINEAR_TO_SRGB_PRESENTATION 0x00000080L #define D3DCAPS3_COPY_TO_VIDMEM 0x00000100L /* Device can acclerate copies from sysmem to local vidmem */ #define D3DCAPS3_COPY_TO_SYSTEMMEM 0x00000200L /* Device can acclerate copies from local vidmem to sysmem */ #define D3DCAPS3_DXVAHD 0x00000400L // // PresentationIntervals // #define D3DPRESENT_INTERVAL_DEFAULT 0x00000000L #define D3DPRESENT_INTERVAL_ONE 0x00000001L #define D3DPRESENT_INTERVAL_TWO 0x00000002L #define D3DPRESENT_INTERVAL_THREE 0x00000004L #define D3DPRESENT_INTERVAL_FOUR 0x00000008L #define D3DPRESENT_INTERVAL_IMMEDIATE 0x80000000L // // CursorCaps // // Driver supports HW color cursor in at least hi-res modes(height >=400) #define D3DCURSORCAPS_COLOR 0x00000001L // Driver supports HW cursor also in low-res modes(height < 400) #define D3DCURSORCAPS_LOWRES 0x00000002L // // DevCaps // #define D3DDEVCAPS_EXECUTESYSTEMMEMORY 0x00000010L /* Device can use execute buffers from system memory */ #define D3DDEVCAPS_EXECUTEVIDEOMEMORY 0x00000020L /* Device can use execute buffers from video memory */ #define D3DDEVCAPS_TLVERTEXSYSTEMMEMORY 0x00000040L /* Device can use TL buffers from system memory */ #define D3DDEVCAPS_TLVERTEXVIDEOMEMORY 0x00000080L /* Device can use TL buffers from video memory */ #define D3DDEVCAPS_TEXTURESYSTEMMEMORY 0x00000100L /* Device can texture from system memory */ #define D3DDEVCAPS_TEXTUREVIDEOMEMORY 0x00000200L /* Device can texture from device memory */ #define D3DDEVCAPS_DRAWPRIMTLVERTEX 0x00000400L /* Device can draw TLVERTEX primitives */ #define D3DDEVCAPS_CANRENDERAFTERFLIP 0x00000800L /* Device can render without waiting for flip to complete */ #define D3DDEVCAPS_TEXTURENONLOCALVIDMEM 0x00001000L /* Device can texture from nonlocal video memory */ #define D3DDEVCAPS_DRAWPRIMITIVES2 0x00002000L /* Device can support DrawPrimitives2 */ #define D3DDEVCAPS_SEPARATETEXTUREMEMORIES 0x00004000L /* Device is texturing from separate memory pools */ #define D3DDEVCAPS_DRAWPRIMITIVES2EX 0x00008000L /* Device can support Extended DrawPrimitives2 i.e. DX7 compliant driver*/ #define D3DDEVCAPS_HWTRANSFORMANDLIGHT 0x00010000L /* Device can support transformation and lighting in hardware and DRAWPRIMITIVES2EX must be also */ #define D3DDEVCAPS_CANBLTSYSTONONLOCAL 0x00020000L /* Device supports a Tex Blt from system memory to non-local vidmem */ #define D3DDEVCAPS_HWRASTERIZATION 0x00080000L /* Device has HW acceleration for rasterization */ #define D3DDEVCAPS_PUREDEVICE 0x00100000L /* Device supports D3DCREATE_PUREDEVICE */ #define D3DDEVCAPS_QUINTICRTPATCHES 0x00200000L /* Device supports quintic Beziers and BSplines */ #define D3DDEVCAPS_RTPATCHES 0x00400000L /* Device supports Rect and Tri patches */ #define D3DDEVCAPS_RTPATCHHANDLEZERO 0x00800000L /* Indicates that RT Patches may be drawn efficiently using handle 0 */ #define D3DDEVCAPS_NPATCHES 0x01000000L /* Device supports N-Patches */ // // PrimitiveMiscCaps // #define D3DPMISCCAPS_MASKZ 0x00000002L #define D3DPMISCCAPS_CULLNONE 0x00000010L #define D3DPMISCCAPS_CULLCW 0x00000020L #define D3DPMISCCAPS_CULLCCW 0x00000040L #define D3DPMISCCAPS_COLORWRITEENABLE 0x00000080L #define D3DPMISCCAPS_CLIPPLANESCALEDPOINTS 0x00000100L /* Device correctly clips scaled points to clip planes */ #define D3DPMISCCAPS_CLIPTLVERTS 0x00000200L /* device will clip post-transformed vertex primitives */ #define D3DPMISCCAPS_TSSARGTEMP 0x00000400L /* device supports D3DTA_TEMP for temporary register */ #define D3DPMISCCAPS_BLENDOP 0x00000800L /* device supports D3DRS_BLENDOP */ #define D3DPMISCCAPS_NULLREFERENCE 0x00001000L /* Reference Device that doesnt render */ #define D3DPMISCCAPS_INDEPENDENTWRITEMASKS 0x00004000L /* Device supports independent write masks for MET or MRT */ #define D3DPMISCCAPS_PERSTAGECONSTANT 0x00008000L /* Device supports per-stage constants */ #define D3DPMISCCAPS_FOGANDSPECULARALPHA 0x00010000L /* Device supports separate fog and specular alpha (many devices use the specular alpha channel to store fog factor) */ #define D3DPMISCCAPS_SEPARATEALPHABLEND 0x00020000L /* Device supports separate blend settings for the alpha channel */ #define D3DPMISCCAPS_MRTINDEPENDENTBITDEPTHS 0x00040000L /* Device supports different bit depths for MRT */ #define D3DPMISCCAPS_MRTPOSTPIXELSHADERBLENDING 0x00080000L /* Device supports post-pixel shader operations for MRT */ #define D3DPMISCCAPS_FOGVERTEXCLAMPED 0x00100000L /* Device clamps fog blend factor per vertex */ /* D3D9Ex only -- */ #if !defined(D3D_DISABLE_9EX) #define D3DPMISCCAPS_POSTBLENDSRGBCONVERT 0x00200000L /* Indicates device can perform conversion to sRGB after blending. */ #endif // !D3D_DISABLE_9EX /* -- D3D9Ex only */ // // LineCaps // #define D3DLINECAPS_TEXTURE 0x00000001L #define D3DLINECAPS_ZTEST 0x00000002L #define D3DLINECAPS_BLEND 0x00000004L #define D3DLINECAPS_ALPHACMP 0x00000008L #define D3DLINECAPS_FOG 0x00000010L #define D3DLINECAPS_ANTIALIAS 0x00000020L // // RasterCaps // #define D3DPRASTERCAPS_DITHER 0x00000001L #define D3DPRASTERCAPS_ZTEST 0x00000010L #define D3DPRASTERCAPS_FOGVERTEX 0x00000080L #define D3DPRASTERCAPS_FOGTABLE 0x00000100L #define D3DPRASTERCAPS_MIPMAPLODBIAS 0x00002000L #define D3DPRASTERCAPS_ZBUFFERLESSHSR 0x00008000L #define D3DPRASTERCAPS_FOGRANGE 0x00010000L #define D3DPRASTERCAPS_ANISOTROPY 0x00020000L #define D3DPRASTERCAPS_WBUFFER 0x00040000L #define D3DPRASTERCAPS_WFOG 0x00100000L #define D3DPRASTERCAPS_ZFOG 0x00200000L #define D3DPRASTERCAPS_COLORPERSPECTIVE 0x00400000L /* Device iterates colors perspective correct */ #define D3DPRASTERCAPS_SCISSORTEST 0x01000000L #define D3DPRASTERCAPS_SLOPESCALEDEPTHBIAS 0x02000000L #define D3DPRASTERCAPS_DEPTHBIAS 0x04000000L #define D3DPRASTERCAPS_MULTISAMPLE_TOGGLE 0x08000000L // // ZCmpCaps, AlphaCmpCaps // #define D3DPCMPCAPS_NEVER 0x00000001L #define D3DPCMPCAPS_LESS 0x00000002L #define D3DPCMPCAPS_EQUAL 0x00000004L #define D3DPCMPCAPS_LESSEQUAL 0x00000008L #define D3DPCMPCAPS_GREATER 0x00000010L #define D3DPCMPCAPS_NOTEQUAL 0x00000020L #define D3DPCMPCAPS_GREATEREQUAL 0x00000040L #define D3DPCMPCAPS_ALWAYS 0x00000080L // // SourceBlendCaps, DestBlendCaps // #define D3DPBLENDCAPS_ZERO 0x00000001L #define D3DPBLENDCAPS_ONE 0x00000002L #define D3DPBLENDCAPS_SRCCOLOR 0x00000004L #define D3DPBLENDCAPS_INVSRCCOLOR 0x00000008L #define D3DPBLENDCAPS_SRCALPHA 0x00000010L #define D3DPBLENDCAPS_INVSRCALPHA 0x00000020L #define D3DPBLENDCAPS_DESTALPHA 0x00000040L #define D3DPBLENDCAPS_INVDESTALPHA 0x00000080L #define D3DPBLENDCAPS_DESTCOLOR 0x00000100L #define D3DPBLENDCAPS_INVDESTCOLOR 0x00000200L #define D3DPBLENDCAPS_SRCALPHASAT 0x00000400L #define D3DPBLENDCAPS_BOTHSRCALPHA 0x00000800L #define D3DPBLENDCAPS_BOTHINVSRCALPHA 0x00001000L #define D3DPBLENDCAPS_BLENDFACTOR 0x00002000L /* Supports both D3DBLEND_BLENDFACTOR and D3DBLEND_INVBLENDFACTOR */ /* D3D9Ex only -- */ #if !defined(D3D_DISABLE_9EX) #define D3DPBLENDCAPS_SRCCOLOR2 0x00004000L #define D3DPBLENDCAPS_INVSRCCOLOR2 0x00008000L #endif // !D3D_DISABLE_9EX /* -- D3D9Ex only */ // // ShadeCaps // #define D3DPSHADECAPS_COLORGOURAUDRGB 0x00000008L #define D3DPSHADECAPS_SPECULARGOURAUDRGB 0x00000200L #define D3DPSHADECAPS_ALPHAGOURAUDBLEND 0x00004000L #define D3DPSHADECAPS_FOGGOURAUD 0x00080000L // // TextureCaps // #define D3DPTEXTURECAPS_PERSPECTIVE 0x00000001L /* Perspective-correct texturing is supported */ #define D3DPTEXTURECAPS_POW2 0x00000002L /* Power-of-2 texture dimensions are required - applies to non-Cube/Volume textures only. */ #define D3DPTEXTURECAPS_ALPHA 0x00000004L /* Alpha in texture pixels is supported */ #define D3DPTEXTURECAPS_SQUAREONLY 0x00000020L /* Only square textures are supported */ #define D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE 0x00000040L /* Texture indices are not scaled by the texture size prior to interpolation */ #define D3DPTEXTURECAPS_ALPHAPALETTE 0x00000080L /* Device can draw alpha from texture palettes */ // Device can use non-POW2 textures if: // 1) D3DTEXTURE_ADDRESS is set to CLAMP for this texture's stage // 2) D3DRS_WRAP(N) is zero for this texture's coordinates // 3) mip mapping is not enabled (use magnification filter only) #define D3DPTEXTURECAPS_NONPOW2CONDITIONAL 0x00000100L #define D3DPTEXTURECAPS_PROJECTED 0x00000400L /* Device can do D3DTTFF_PROJECTED */ #define D3DPTEXTURECAPS_CUBEMAP 0x00000800L /* Device can do cubemap textures */ #define D3DPTEXTURECAPS_VOLUMEMAP 0x00002000L /* Device can do volume textures */ #define D3DPTEXTURECAPS_MIPMAP 0x00004000L /* Device can do mipmapped textures */ #define D3DPTEXTURECAPS_MIPVOLUMEMAP 0x00008000L /* Device can do mipmapped volume textures */ #define D3DPTEXTURECAPS_MIPCUBEMAP 0x00010000L /* Device can do mipmapped cube maps */ #define D3DPTEXTURECAPS_CUBEMAP_POW2 0x00020000L /* Device requires that cubemaps be power-of-2 dimension */ #define D3DPTEXTURECAPS_VOLUMEMAP_POW2 0x00040000L /* Device requires that volume maps be power-of-2 dimension */ #define D3DPTEXTURECAPS_NOPROJECTEDBUMPENV 0x00200000L /* Device does not support projected bump env lookup operation in programmable and fixed function pixel shaders */ // // TextureFilterCaps, StretchRectFilterCaps // #define D3DPTFILTERCAPS_MINFPOINT 0x00000100L /* Min Filter */ #define D3DPTFILTERCAPS_MINFLINEAR 0x00000200L #define D3DPTFILTERCAPS_MINFANISOTROPIC 0x00000400L #define D3DPTFILTERCAPS_MINFPYRAMIDALQUAD 0x00000800L #define D3DPTFILTERCAPS_MINFGAUSSIANQUAD 0x00001000L #define D3DPTFILTERCAPS_MIPFPOINT 0x00010000L /* Mip Filter */ #define D3DPTFILTERCAPS_MIPFLINEAR 0x00020000L /* D3D9Ex only -- */ #if !defined(D3D_DISABLE_9EX) #define D3DPTFILTERCAPS_CONVOLUTIONMONO 0x00040000L /* Min and Mag for the convolution mono filter */ #endif // !D3D_DISABLE_9EX /* -- D3D9Ex only */ #define D3DPTFILTERCAPS_MAGFPOINT 0x01000000L /* Mag Filter */ #define D3DPTFILTERCAPS_MAGFLINEAR 0x02000000L #define D3DPTFILTERCAPS_MAGFANISOTROPIC 0x04000000L #define D3DPTFILTERCAPS_MAGFPYRAMIDALQUAD 0x08000000L #define D3DPTFILTERCAPS_MAGFGAUSSIANQUAD 0x10000000L // // TextureAddressCaps // #define D3DPTADDRESSCAPS_WRAP 0x00000001L #define D3DPTADDRESSCAPS_MIRROR 0x00000002L #define D3DPTADDRESSCAPS_CLAMP 0x00000004L #define D3DPTADDRESSCAPS_BORDER 0x00000008L #define D3DPTADDRESSCAPS_INDEPENDENTUV 0x00000010L #define D3DPTADDRESSCAPS_MIRRORONCE 0x00000020L // // StencilCaps // #define D3DSTENCILCAPS_KEEP 0x00000001L #define D3DSTENCILCAPS_ZERO 0x00000002L #define D3DSTENCILCAPS_REPLACE 0x00000004L #define D3DSTENCILCAPS_INCRSAT 0x00000008L #define D3DSTENCILCAPS_DECRSAT 0x00000010L #define D3DSTENCILCAPS_INVERT 0x00000020L #define D3DSTENCILCAPS_INCR 0x00000040L #define D3DSTENCILCAPS_DECR 0x00000080L #define D3DSTENCILCAPS_TWOSIDED 0x00000100L // // TextureOpCaps // #define D3DTEXOPCAPS_DISABLE 0x00000001L #define D3DTEXOPCAPS_SELECTARG1 0x00000002L #define D3DTEXOPCAPS_SELECTARG2 0x00000004L #define D3DTEXOPCAPS_MODULATE 0x00000008L #define D3DTEXOPCAPS_MODULATE2X 0x00000010L #define D3DTEXOPCAPS_MODULATE4X 0x00000020L #define D3DTEXOPCAPS_ADD 0x00000040L #define D3DTEXOPCAPS_ADDSIGNED 0x00000080L #define D3DTEXOPCAPS_ADDSIGNED2X 0x00000100L #define D3DTEXOPCAPS_SUBTRACT 0x00000200L #define D3DTEXOPCAPS_ADDSMOOTH 0x00000400L #define D3DTEXOPCAPS_BLENDDIFFUSEALPHA 0x00000800L #define D3DTEXOPCAPS_BLENDTEXTUREALPHA 0x00001000L #define D3DTEXOPCAPS_BLENDFACTORALPHA 0x00002000L #define D3DTEXOPCAPS_BLENDTEXTUREALPHAPM 0x00004000L #define D3DTEXOPCAPS_BLENDCURRENTALPHA 0x00008000L #define D3DTEXOPCAPS_PREMODULATE 0x00010000L #define D3DTEXOPCAPS_MODULATEALPHA_ADDCOLOR 0x00020000L #define D3DTEXOPCAPS_MODULATECOLOR_ADDALPHA 0x00040000L #define D3DTEXOPCAPS_MODULATEINVALPHA_ADDCOLOR 0x00080000L #define D3DTEXOPCAPS_MODULATEINVCOLOR_ADDALPHA 0x00100000L #define D3DTEXOPCAPS_BUMPENVMAP 0x00200000L #define D3DTEXOPCAPS_BUMPENVMAPLUMINANCE 0x00400000L #define D3DTEXOPCAPS_DOTPRODUCT3 0x00800000L #define D3DTEXOPCAPS_MULTIPLYADD 0x01000000L #define D3DTEXOPCAPS_LERP 0x02000000L // // FVFCaps // #define D3DFVFCAPS_TEXCOORDCOUNTMASK 0x0000ffffL /* mask for texture coordinate count field */ #define D3DFVFCAPS_DONOTSTRIPELEMENTS 0x00080000L /* Device prefers that vertex elements not be stripped */ #define D3DFVFCAPS_PSIZE 0x00100000L /* Device can receive point size */ // // VertexProcessingCaps // #define D3DVTXPCAPS_TEXGEN 0x00000001L /* device can do texgen */ #define D3DVTXPCAPS_MATERIALSOURCE7 0x00000002L /* device can do DX7-level colormaterialsource ops */ #define D3DVTXPCAPS_DIRECTIONALLIGHTS 0x00000008L /* device can do directional lights */ #define D3DVTXPCAPS_POSITIONALLIGHTS 0x00000010L /* device can do positional lights (includes point and spot) */ #define D3DVTXPCAPS_LOCALVIEWER 0x00000020L /* device can do local viewer */ #define D3DVTXPCAPS_TWEENING 0x00000040L /* device can do vertex tweening */ #define D3DVTXPCAPS_TEXGEN_SPHEREMAP 0x00000100L /* device supports D3DTSS_TCI_SPHEREMAP */ #define D3DVTXPCAPS_NO_TEXGEN_NONLOCALVIEWER 0x00000200L /* device does not support TexGen in non-local viewer mode */ // // DevCaps2 // #define D3DDEVCAPS2_STREAMOFFSET 0x00000001L /* Device supports offsets in streams. Must be set by DX9 drivers */ #define D3DDEVCAPS2_DMAPNPATCH 0x00000002L /* Device supports displacement maps for N-Patches*/ #define D3DDEVCAPS2_ADAPTIVETESSRTPATCH 0x00000004L /* Device supports adaptive tesselation of RT-patches*/ #define D3DDEVCAPS2_ADAPTIVETESSNPATCH 0x00000008L /* Device supports adaptive tesselation of N-patches*/ #define D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES 0x00000010L /* Device supports StretchRect calls with a texture as the source*/ #define D3DDEVCAPS2_PRESAMPLEDDMAPNPATCH 0x00000020L /* Device supports presampled displacement maps for N-Patches */ #define D3DDEVCAPS2_VERTEXELEMENTSCANSHARESTREAMOFFSET 0x00000040L /* Vertex elements in a vertex declaration can share the same stream offset */ // // DeclTypes // #define D3DDTCAPS_UBYTE4 0x00000001L #define D3DDTCAPS_UBYTE4N 0x00000002L #define D3DDTCAPS_SHORT2N 0x00000004L #define D3DDTCAPS_SHORT4N 0x00000008L #define D3DDTCAPS_USHORT2N 0x00000010L #define D3DDTCAPS_USHORT4N 0x00000020L #define D3DDTCAPS_UDEC3 0x00000040L #define D3DDTCAPS_DEC3N 0x00000080L #define D3DDTCAPS_FLOAT16_2 0x00000100L #define D3DDTCAPS_FLOAT16_4 0x00000200L #pragma pack() #endif /* (DIRECT3D_VERSION >= 0x0900) */ #endif /* _d3d9CAPS_H_ */ ================================================ FILE: Include/d3d9types.h ================================================ /*==========================================================================; * * Copyright (C) Microsoft Corporation. All Rights Reserved. * * File: d3d9types.h * Content: Direct3D capabilities include file * ***************************************************************************/ #ifndef _d3d9TYPES_H_ #define _d3d9TYPES_H_ #ifndef DIRECT3D_VERSION #define DIRECT3D_VERSION 0x0900 #endif //DIRECT3D_VERSION // include this file content only if compiling for DX9 interfaces #if(DIRECT3D_VERSION >= 0x0900) #include #if _MSC_VER >= 1200 #pragma warning(push) #endif #pragma warning(disable:4201) // anonymous unions warning #if defined(_X86_) || defined(_IA64_) #pragma pack(4) #endif // D3DCOLOR is equivalent to D3DFMT_A8R8G8B8 #ifndef D3DCOLOR_DEFINED typedef DWORD D3DCOLOR; #define D3DCOLOR_DEFINED #endif // maps unsigned 8 bits/channel to D3DCOLOR #define D3DCOLOR_ARGB(a,r,g,b) \ ((D3DCOLOR)((((a)&0xff)<<24)|(((r)&0xff)<<16)|(((g)&0xff)<<8)|((b)&0xff))) #define D3DCOLOR_RGBA(r,g,b,a) D3DCOLOR_ARGB(a,r,g,b) #define D3DCOLOR_XRGB(r,g,b) D3DCOLOR_ARGB(0xff,r,g,b) #define D3DCOLOR_XYUV(y,u,v) D3DCOLOR_ARGB(0xff,y,u,v) #define D3DCOLOR_AYUV(a,y,u,v) D3DCOLOR_ARGB(a,y,u,v) // maps floating point channels (0.f to 1.f range) to D3DCOLOR #define D3DCOLOR_COLORVALUE(r,g,b,a) \ D3DCOLOR_RGBA((DWORD)((r)*255.f),(DWORD)((g)*255.f),(DWORD)((b)*255.f),(DWORD)((a)*255.f)) #ifndef D3DVECTOR_DEFINED typedef struct _D3DVECTOR { float x; float y; float z; } D3DVECTOR; #define D3DVECTOR_DEFINED #endif #ifndef D3DCOLORVALUE_DEFINED typedef struct _D3DCOLORVALUE { float r; float g; float b; float a; } D3DCOLORVALUE; #define D3DCOLORVALUE_DEFINED #endif #ifndef D3DRECT_DEFINED typedef struct _D3DRECT { LONG x1; LONG y1; LONG x2; LONG y2; } D3DRECT; #define D3DRECT_DEFINED #endif #ifndef D3DMATRIX_DEFINED typedef struct _D3DMATRIX { union { struct { float _11, _12, _13, _14; float _21, _22, _23, _24; float _31, _32, _33, _34; float _41, _42, _43, _44; }; float m[4][4]; }; } D3DMATRIX; #define D3DMATRIX_DEFINED #endif typedef struct _D3DVIEWPORT9 { DWORD X; DWORD Y; /* Viewport Top left */ DWORD Width; DWORD Height; /* Viewport Dimensions */ float MinZ; /* Min/max of clip Volume */ float MaxZ; } D3DVIEWPORT9; /* * Values for clip fields. */ // Max number of user clipping planes, supported in D3D. #define D3DMAXUSERCLIPPLANES 32 // These bits could be ORed together to use with D3DRS_CLIPPLANEENABLE // #define D3DCLIPPLANE0 (1 << 0) #define D3DCLIPPLANE1 (1 << 1) #define D3DCLIPPLANE2 (1 << 2) #define D3DCLIPPLANE3 (1 << 3) #define D3DCLIPPLANE4 (1 << 4) #define D3DCLIPPLANE5 (1 << 5) // The following bits are used in the ClipUnion and ClipIntersection // members of the D3DCLIPSTATUS9 // #define D3DCS_LEFT 0x00000001L #define D3DCS_RIGHT 0x00000002L #define D3DCS_TOP 0x00000004L #define D3DCS_BOTTOM 0x00000008L #define D3DCS_FRONT 0x00000010L #define D3DCS_BACK 0x00000020L #define D3DCS_PLANE0 0x00000040L #define D3DCS_PLANE1 0x00000080L #define D3DCS_PLANE2 0x00000100L #define D3DCS_PLANE3 0x00000200L #define D3DCS_PLANE4 0x00000400L #define D3DCS_PLANE5 0x00000800L #define D3DCS_ALL (D3DCS_LEFT | \ D3DCS_RIGHT | \ D3DCS_TOP | \ D3DCS_BOTTOM | \ D3DCS_FRONT | \ D3DCS_BACK | \ D3DCS_PLANE0 | \ D3DCS_PLANE1 | \ D3DCS_PLANE2 | \ D3DCS_PLANE3 | \ D3DCS_PLANE4 | \ D3DCS_PLANE5) typedef struct _D3DCLIPSTATUS9 { DWORD ClipUnion; DWORD ClipIntersection; } D3DCLIPSTATUS9; typedef struct _D3DMATERIAL9 { D3DCOLORVALUE Diffuse; /* Diffuse color RGBA */ D3DCOLORVALUE Ambient; /* Ambient color RGB */ D3DCOLORVALUE Specular; /* Specular 'shininess' */ D3DCOLORVALUE Emissive; /* Emissive color RGB */ float Power; /* Sharpness if specular highlight */ } D3DMATERIAL9; typedef enum _D3DLIGHTTYPE { D3DLIGHT_POINT = 1, D3DLIGHT_SPOT = 2, D3DLIGHT_DIRECTIONAL = 3, D3DLIGHT_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ } D3DLIGHTTYPE; typedef struct _D3DLIGHT9 { D3DLIGHTTYPE Type; /* Type of light source */ D3DCOLORVALUE Diffuse; /* Diffuse color of light */ D3DCOLORVALUE Specular; /* Specular color of light */ D3DCOLORVALUE Ambient; /* Ambient color of light */ D3DVECTOR Position; /* Position in world space */ D3DVECTOR Direction; /* Direction in world space */ float Range; /* Cutoff range */ float Falloff; /* Falloff */ float Attenuation0; /* Constant attenuation */ float Attenuation1; /* Linear attenuation */ float Attenuation2; /* Quadratic attenuation */ float Theta; /* Inner angle of spotlight cone */ float Phi; /* Outer angle of spotlight cone */ } D3DLIGHT9; /* * Options for clearing */ #define D3DCLEAR_TARGET 0x00000001l /* Clear target surface */ #define D3DCLEAR_ZBUFFER 0x00000002l /* Clear target z buffer */ #define D3DCLEAR_STENCIL 0x00000004l /* Clear stencil planes */ /* * The following defines the rendering states */ typedef enum _D3DSHADEMODE { D3DSHADE_FLAT = 1, D3DSHADE_GOURAUD = 2, D3DSHADE_PHONG = 3, D3DSHADE_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ } D3DSHADEMODE; typedef enum _D3DFILLMODE { D3DFILL_POINT = 1, D3DFILL_WIREFRAME = 2, D3DFILL_SOLID = 3, D3DFILL_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ } D3DFILLMODE; typedef enum _D3DBLEND { D3DBLEND_ZERO = 1, D3DBLEND_ONE = 2, D3DBLEND_SRCCOLOR = 3, D3DBLEND_INVSRCCOLOR = 4, D3DBLEND_SRCALPHA = 5, D3DBLEND_INVSRCALPHA = 6, D3DBLEND_DESTALPHA = 7, D3DBLEND_INVDESTALPHA = 8, D3DBLEND_DESTCOLOR = 9, D3DBLEND_INVDESTCOLOR = 10, D3DBLEND_SRCALPHASAT = 11, D3DBLEND_BOTHSRCALPHA = 12, D3DBLEND_BOTHINVSRCALPHA = 13, D3DBLEND_BLENDFACTOR = 14, /* Only supported if D3DPBLENDCAPS_BLENDFACTOR is on */ D3DBLEND_INVBLENDFACTOR = 15, /* Only supported if D3DPBLENDCAPS_BLENDFACTOR is on */ /* D3D9Ex only -- */ #if !defined(D3D_DISABLE_9EX) D3DBLEND_SRCCOLOR2 = 16, D3DBLEND_INVSRCCOLOR2 = 17, #endif // !D3D_DISABLE_9EX /* -- D3D9Ex only */ D3DBLEND_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ } D3DBLEND; typedef enum _D3DBLENDOP { D3DBLENDOP_ADD = 1, D3DBLENDOP_SUBTRACT = 2, D3DBLENDOP_REVSUBTRACT = 3, D3DBLENDOP_MIN = 4, D3DBLENDOP_MAX = 5, D3DBLENDOP_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ } D3DBLENDOP; typedef enum _D3DTEXTUREADDRESS { D3DTADDRESS_WRAP = 1, D3DTADDRESS_MIRROR = 2, D3DTADDRESS_CLAMP = 3, D3DTADDRESS_BORDER = 4, D3DTADDRESS_MIRRORONCE = 5, D3DTADDRESS_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ } D3DTEXTUREADDRESS; typedef enum _D3DCULL { D3DCULL_NONE = 1, D3DCULL_CW = 2, D3DCULL_CCW = 3, D3DCULL_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ } D3DCULL; typedef enum _D3DCMPFUNC { D3DCMP_NEVER = 1, D3DCMP_LESS = 2, D3DCMP_EQUAL = 3, D3DCMP_LESSEQUAL = 4, D3DCMP_GREATER = 5, D3DCMP_NOTEQUAL = 6, D3DCMP_GREATEREQUAL = 7, D3DCMP_ALWAYS = 8, D3DCMP_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ } D3DCMPFUNC; typedef enum _D3DSTENCILOP { D3DSTENCILOP_KEEP = 1, D3DSTENCILOP_ZERO = 2, D3DSTENCILOP_REPLACE = 3, D3DSTENCILOP_INCRSAT = 4, D3DSTENCILOP_DECRSAT = 5, D3DSTENCILOP_INVERT = 6, D3DSTENCILOP_INCR = 7, D3DSTENCILOP_DECR = 8, D3DSTENCILOP_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ } D3DSTENCILOP; typedef enum _D3DFOGMODE { D3DFOG_NONE = 0, D3DFOG_EXP = 1, D3DFOG_EXP2 = 2, D3DFOG_LINEAR = 3, D3DFOG_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ } D3DFOGMODE; typedef enum _D3DZBUFFERTYPE { D3DZB_FALSE = 0, D3DZB_TRUE = 1, // Z buffering D3DZB_USEW = 2, // W buffering D3DZB_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ } D3DZBUFFERTYPE; // Primitives supported by draw-primitive API typedef enum _D3DPRIMITIVETYPE { D3DPT_POINTLIST = 1, D3DPT_LINELIST = 2, D3DPT_LINESTRIP = 3, D3DPT_TRIANGLELIST = 4, D3DPT_TRIANGLESTRIP = 5, D3DPT_TRIANGLEFAN = 6, D3DPT_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ } D3DPRIMITIVETYPE; typedef enum _D3DTRANSFORMSTATETYPE { D3DTS_VIEW = 2, D3DTS_PROJECTION = 3, D3DTS_TEXTURE0 = 16, D3DTS_TEXTURE1 = 17, D3DTS_TEXTURE2 = 18, D3DTS_TEXTURE3 = 19, D3DTS_TEXTURE4 = 20, D3DTS_TEXTURE5 = 21, D3DTS_TEXTURE6 = 22, D3DTS_TEXTURE7 = 23, D3DTS_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ } D3DTRANSFORMSTATETYPE; #define D3DTS_WORLDMATRIX(index) (D3DTRANSFORMSTATETYPE)(index + 256) #define D3DTS_WORLD D3DTS_WORLDMATRIX(0) #define D3DTS_WORLD1 D3DTS_WORLDMATRIX(1) #define D3DTS_WORLD2 D3DTS_WORLDMATRIX(2) #define D3DTS_WORLD3 D3DTS_WORLDMATRIX(3) typedef enum _D3DRENDERSTATETYPE { D3DRS_ZENABLE = 7, /* D3DZBUFFERTYPE (or TRUE/FALSE for legacy) */ D3DRS_FILLMODE = 8, /* D3DFILLMODE */ D3DRS_SHADEMODE = 9, /* D3DSHADEMODE */ D3DRS_ZWRITEENABLE = 14, /* TRUE to enable z writes */ D3DRS_ALPHATESTENABLE = 15, /* TRUE to enable alpha tests */ D3DRS_LASTPIXEL = 16, /* TRUE for last-pixel on lines */ D3DRS_SRCBLEND = 19, /* D3DBLEND */ D3DRS_DESTBLEND = 20, /* D3DBLEND */ D3DRS_CULLMODE = 22, /* D3DCULL */ D3DRS_ZFUNC = 23, /* D3DCMPFUNC */ D3DRS_ALPHAREF = 24, /* D3DFIXED */ D3DRS_ALPHAFUNC = 25, /* D3DCMPFUNC */ D3DRS_DITHERENABLE = 26, /* TRUE to enable dithering */ D3DRS_ALPHABLENDENABLE = 27, /* TRUE to enable alpha blending */ D3DRS_FOGENABLE = 28, /* TRUE to enable fog blending */ D3DRS_SPECULARENABLE = 29, /* TRUE to enable specular */ D3DRS_FOGCOLOR = 34, /* D3DCOLOR */ D3DRS_FOGTABLEMODE = 35, /* D3DFOGMODE */ D3DRS_FOGSTART = 36, /* Fog start (for both vertex and pixel fog) */ D3DRS_FOGEND = 37, /* Fog end */ D3DRS_FOGDENSITY = 38, /* Fog density */ D3DRS_RANGEFOGENABLE = 48, /* Enables range-based fog */ D3DRS_STENCILENABLE = 52, /* BOOL enable/disable stenciling */ D3DRS_STENCILFAIL = 53, /* D3DSTENCILOP to do if stencil test fails */ D3DRS_STENCILZFAIL = 54, /* D3DSTENCILOP to do if stencil test passes and Z test fails */ D3DRS_STENCILPASS = 55, /* D3DSTENCILOP to do if both stencil and Z tests pass */ D3DRS_STENCILFUNC = 56, /* D3DCMPFUNC fn. Stencil Test passes if ((ref & mask) stencilfn (stencil & mask)) is true */ D3DRS_STENCILREF = 57, /* Reference value used in stencil test */ D3DRS_STENCILMASK = 58, /* Mask value used in stencil test */ D3DRS_STENCILWRITEMASK = 59, /* Write mask applied to values written to stencil buffer */ D3DRS_TEXTUREFACTOR = 60, /* D3DCOLOR used for multi-texture blend */ D3DRS_WRAP0 = 128, /* wrap for 1st texture coord. set */ D3DRS_WRAP1 = 129, /* wrap for 2nd texture coord. set */ D3DRS_WRAP2 = 130, /* wrap for 3rd texture coord. set */ D3DRS_WRAP3 = 131, /* wrap for 4th texture coord. set */ D3DRS_WRAP4 = 132, /* wrap for 5th texture coord. set */ D3DRS_WRAP5 = 133, /* wrap for 6th texture coord. set */ D3DRS_WRAP6 = 134, /* wrap for 7th texture coord. set */ D3DRS_WRAP7 = 135, /* wrap for 8th texture coord. set */ D3DRS_CLIPPING = 136, D3DRS_LIGHTING = 137, D3DRS_AMBIENT = 139, D3DRS_FOGVERTEXMODE = 140, D3DRS_COLORVERTEX = 141, D3DRS_LOCALVIEWER = 142, D3DRS_NORMALIZENORMALS = 143, D3DRS_DIFFUSEMATERIALSOURCE = 145, D3DRS_SPECULARMATERIALSOURCE = 146, D3DRS_AMBIENTMATERIALSOURCE = 147, D3DRS_EMISSIVEMATERIALSOURCE = 148, D3DRS_VERTEXBLEND = 151, D3DRS_CLIPPLANEENABLE = 152, D3DRS_POINTSIZE = 154, /* float point size */ D3DRS_POINTSIZE_MIN = 155, /* float point size min threshold */ D3DRS_POINTSPRITEENABLE = 156, /* BOOL point texture coord control */ D3DRS_POINTSCALEENABLE = 157, /* BOOL point size scale enable */ D3DRS_POINTSCALE_A = 158, /* float point attenuation A value */ D3DRS_POINTSCALE_B = 159, /* float point attenuation B value */ D3DRS_POINTSCALE_C = 160, /* float point attenuation C value */ D3DRS_MULTISAMPLEANTIALIAS = 161, // BOOL - set to do FSAA with multisample buffer D3DRS_MULTISAMPLEMASK = 162, // DWORD - per-sample enable/disable D3DRS_PATCHEDGESTYLE = 163, // Sets whether patch edges will use float style tessellation D3DRS_DEBUGMONITORTOKEN = 165, // DEBUG ONLY - token to debug monitor D3DRS_POINTSIZE_MAX = 166, /* float point size max threshold */ D3DRS_INDEXEDVERTEXBLENDENABLE = 167, D3DRS_COLORWRITEENABLE = 168, // per-channel write enable D3DRS_TWEENFACTOR = 170, // float tween factor D3DRS_BLENDOP = 171, // D3DBLENDOP setting D3DRS_POSITIONDEGREE = 172, // NPatch position interpolation degree. D3DDEGREE_LINEAR or D3DDEGREE_CUBIC (default) D3DRS_NORMALDEGREE = 173, // NPatch normal interpolation degree. D3DDEGREE_LINEAR (default) or D3DDEGREE_QUADRATIC D3DRS_SCISSORTESTENABLE = 174, D3DRS_SLOPESCALEDEPTHBIAS = 175, D3DRS_ANTIALIASEDLINEENABLE = 176, D3DRS_MINTESSELLATIONLEVEL = 178, D3DRS_MAXTESSELLATIONLEVEL = 179, D3DRS_ADAPTIVETESS_X = 180, D3DRS_ADAPTIVETESS_Y = 181, D3DRS_ADAPTIVETESS_Z = 182, D3DRS_ADAPTIVETESS_W = 183, D3DRS_ENABLEADAPTIVETESSELLATION = 184, D3DRS_TWOSIDEDSTENCILMODE = 185, /* BOOL enable/disable 2 sided stenciling */ D3DRS_CCW_STENCILFAIL = 186, /* D3DSTENCILOP to do if ccw stencil test fails */ D3DRS_CCW_STENCILZFAIL = 187, /* D3DSTENCILOP to do if ccw stencil test passes and Z test fails */ D3DRS_CCW_STENCILPASS = 188, /* D3DSTENCILOP to do if both ccw stencil and Z tests pass */ D3DRS_CCW_STENCILFUNC = 189, /* D3DCMPFUNC fn. ccw Stencil Test passes if ((ref & mask) stencilfn (stencil & mask)) is true */ D3DRS_COLORWRITEENABLE1 = 190, /* Additional ColorWriteEnables for the devices that support D3DPMISCCAPS_INDEPENDENTWRITEMASKS */ D3DRS_COLORWRITEENABLE2 = 191, /* Additional ColorWriteEnables for the devices that support D3DPMISCCAPS_INDEPENDENTWRITEMASKS */ D3DRS_COLORWRITEENABLE3 = 192, /* Additional ColorWriteEnables for the devices that support D3DPMISCCAPS_INDEPENDENTWRITEMASKS */ D3DRS_BLENDFACTOR = 193, /* D3DCOLOR used for a constant blend factor during alpha blending for devices that support D3DPBLENDCAPS_BLENDFACTOR */ D3DRS_SRGBWRITEENABLE = 194, /* Enable rendertarget writes to be DE-linearized to SRGB (for formats that expose D3DUSAGE_QUERY_SRGBWRITE) */ D3DRS_DEPTHBIAS = 195, D3DRS_WRAP8 = 198, /* Additional wrap states for vs_3_0+ attributes with D3DDECLUSAGE_TEXCOORD */ D3DRS_WRAP9 = 199, D3DRS_WRAP10 = 200, D3DRS_WRAP11 = 201, D3DRS_WRAP12 = 202, D3DRS_WRAP13 = 203, D3DRS_WRAP14 = 204, D3DRS_WRAP15 = 205, D3DRS_SEPARATEALPHABLENDENABLE = 206, /* TRUE to enable a separate blending function for the alpha channel */ D3DRS_SRCBLENDALPHA = 207, /* SRC blend factor for the alpha channel when D3DRS_SEPARATEDESTALPHAENABLE is TRUE */ D3DRS_DESTBLENDALPHA = 208, /* DST blend factor for the alpha channel when D3DRS_SEPARATEDESTALPHAENABLE is TRUE */ D3DRS_BLENDOPALPHA = 209, /* Blending operation for the alpha channel when D3DRS_SEPARATEDESTALPHAENABLE is TRUE */ D3DRS_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ } D3DRENDERSTATETYPE; // Maximum number of simultaneous render targets D3D supports #define D3D_MAX_SIMULTANEOUS_RENDERTARGETS 4 // Values for material source typedef enum _D3DMATERIALCOLORSOURCE { D3DMCS_MATERIAL = 0, // Color from material is used D3DMCS_COLOR1 = 1, // Diffuse vertex color is used D3DMCS_COLOR2 = 2, // Specular vertex color is used D3DMCS_FORCE_DWORD = 0x7fffffff, // force 32-bit size enum } D3DMATERIALCOLORSOURCE; // Bias to apply to the texture coordinate set to apply a wrap to. #define D3DRENDERSTATE_WRAPBIAS 128UL /* Flags to construct the WRAP render states */ #define D3DWRAP_U 0x00000001L #define D3DWRAP_V 0x00000002L #define D3DWRAP_W 0x00000004L /* Flags to construct the WRAP render states for 1D thru 4D texture coordinates */ #define D3DWRAPCOORD_0 0x00000001L // same as D3DWRAP_U #define D3DWRAPCOORD_1 0x00000002L // same as D3DWRAP_V #define D3DWRAPCOORD_2 0x00000004L // same as D3DWRAP_W #define D3DWRAPCOORD_3 0x00000008L /* Flags to construct D3DRS_COLORWRITEENABLE */ #define D3DCOLORWRITEENABLE_RED (1L<<0) #define D3DCOLORWRITEENABLE_GREEN (1L<<1) #define D3DCOLORWRITEENABLE_BLUE (1L<<2) #define D3DCOLORWRITEENABLE_ALPHA (1L<<3) /* * State enumerants for per-stage processing of fixed function pixel processing * Two of these affect fixed function vertex processing as well: TEXTURETRANSFORMFLAGS and TEXCOORDINDEX. */ typedef enum _D3DTEXTURESTAGESTATETYPE { D3DTSS_COLOROP = 1, /* D3DTEXTUREOP - per-stage blending controls for color channels */ D3DTSS_COLORARG1 = 2, /* D3DTA_* (texture arg) */ D3DTSS_COLORARG2 = 3, /* D3DTA_* (texture arg) */ D3DTSS_ALPHAOP = 4, /* D3DTEXTUREOP - per-stage blending controls for alpha channel */ D3DTSS_ALPHAARG1 = 5, /* D3DTA_* (texture arg) */ D3DTSS_ALPHAARG2 = 6, /* D3DTA_* (texture arg) */ D3DTSS_BUMPENVMAT00 = 7, /* float (bump mapping matrix) */ D3DTSS_BUMPENVMAT01 = 8, /* float (bump mapping matrix) */ D3DTSS_BUMPENVMAT10 = 9, /* float (bump mapping matrix) */ D3DTSS_BUMPENVMAT11 = 10, /* float (bump mapping matrix) */ D3DTSS_TEXCOORDINDEX = 11, /* identifies which set of texture coordinates index this texture */ D3DTSS_BUMPENVLSCALE = 22, /* float scale for bump map luminance */ D3DTSS_BUMPENVLOFFSET = 23, /* float offset for bump map luminance */ D3DTSS_TEXTURETRANSFORMFLAGS = 24, /* D3DTEXTURETRANSFORMFLAGS controls texture transform */ D3DTSS_COLORARG0 = 26, /* D3DTA_* third arg for triadic ops */ D3DTSS_ALPHAARG0 = 27, /* D3DTA_* third arg for triadic ops */ D3DTSS_RESULTARG = 28, /* D3DTA_* arg for result (CURRENT or TEMP) */ D3DTSS_CONSTANT = 32, /* Per-stage constant D3DTA_CONSTANT */ D3DTSS_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ } D3DTEXTURESTAGESTATETYPE; /* * State enumerants for per-sampler texture processing. */ typedef enum _D3DSAMPLERSTATETYPE { D3DSAMP_ADDRESSU = 1, /* D3DTEXTUREADDRESS for U coordinate */ D3DSAMP_ADDRESSV = 2, /* D3DTEXTUREADDRESS for V coordinate */ D3DSAMP_ADDRESSW = 3, /* D3DTEXTUREADDRESS for W coordinate */ D3DSAMP_BORDERCOLOR = 4, /* D3DCOLOR */ D3DSAMP_MAGFILTER = 5, /* D3DTEXTUREFILTER filter to use for magnification */ D3DSAMP_MINFILTER = 6, /* D3DTEXTUREFILTER filter to use for minification */ D3DSAMP_MIPFILTER = 7, /* D3DTEXTUREFILTER filter to use between mipmaps during minification */ D3DSAMP_MIPMAPLODBIAS = 8, /* float Mipmap LOD bias */ D3DSAMP_MAXMIPLEVEL = 9, /* DWORD 0..(n-1) LOD index of largest map to use (0 == largest) */ D3DSAMP_MAXANISOTROPY = 10, /* DWORD maximum anisotropy */ D3DSAMP_SRGBTEXTURE = 11, /* Default = 0 (which means Gamma 1.0, no correction required.) else correct for Gamma = 2.2 */ D3DSAMP_ELEMENTINDEX = 12, /* When multi-element texture is assigned to sampler, this indicates which element index to use. Default = 0. */ D3DSAMP_DMAPOFFSET = 13, /* Offset in vertices in the pre-sampled displacement map. Only valid for D3DDMAPSAMPLER sampler */ D3DSAMP_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ } D3DSAMPLERSTATETYPE; /* Special sampler which is used in the tesselator */ #define D3DDMAPSAMPLER 256 // Samplers used in vertex shaders #define D3DVERTEXTEXTURESAMPLER0 (D3DDMAPSAMPLER+1) #define D3DVERTEXTEXTURESAMPLER1 (D3DDMAPSAMPLER+2) #define D3DVERTEXTEXTURESAMPLER2 (D3DDMAPSAMPLER+3) #define D3DVERTEXTEXTURESAMPLER3 (D3DDMAPSAMPLER+4) // Values, used with D3DTSS_TEXCOORDINDEX, to specify that the vertex data(position // and normal in the camera space) should be taken as texture coordinates // Low 16 bits are used to specify texture coordinate index, to take the WRAP mode from // #define D3DTSS_TCI_PASSTHRU 0x00000000 #define D3DTSS_TCI_CAMERASPACENORMAL 0x00010000 #define D3DTSS_TCI_CAMERASPACEPOSITION 0x00020000 #define D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR 0x00030000 #define D3DTSS_TCI_SPHEREMAP 0x00040000 /* * Enumerations for COLOROP and ALPHAOP texture blending operations set in * texture processing stage controls in D3DTSS. */ typedef enum _D3DTEXTUREOP { // Control D3DTOP_DISABLE = 1, // disables stage D3DTOP_SELECTARG1 = 2, // the default D3DTOP_SELECTARG2 = 3, // Modulate D3DTOP_MODULATE = 4, // multiply args together D3DTOP_MODULATE2X = 5, // multiply and 1 bit D3DTOP_MODULATE4X = 6, // multiply and 2 bits // Add D3DTOP_ADD = 7, // add arguments together D3DTOP_ADDSIGNED = 8, // add with -0.5 bias D3DTOP_ADDSIGNED2X = 9, // as above but left 1 bit D3DTOP_SUBTRACT = 10, // Arg1 - Arg2, with no saturation D3DTOP_ADDSMOOTH = 11, // add 2 args, subtract product // Arg1 + Arg2 - Arg1*Arg2 // = Arg1 + (1-Arg1)*Arg2 // Linear alpha blend: Arg1*(Alpha) + Arg2*(1-Alpha) D3DTOP_BLENDDIFFUSEALPHA = 12, // iterated alpha D3DTOP_BLENDTEXTUREALPHA = 13, // texture alpha D3DTOP_BLENDFACTORALPHA = 14, // alpha from D3DRS_TEXTUREFACTOR // Linear alpha blend with pre-multiplied arg1 input: Arg1 + Arg2*(1-Alpha) D3DTOP_BLENDTEXTUREALPHAPM = 15, // texture alpha D3DTOP_BLENDCURRENTALPHA = 16, // by alpha of current color // Specular mapping D3DTOP_PREMODULATE = 17, // modulate with next texture before use D3DTOP_MODULATEALPHA_ADDCOLOR = 18, // Arg1.RGB + Arg1.A*Arg2.RGB // COLOROP only D3DTOP_MODULATECOLOR_ADDALPHA = 19, // Arg1.RGB*Arg2.RGB + Arg1.A // COLOROP only D3DTOP_MODULATEINVALPHA_ADDCOLOR = 20, // (1-Arg1.A)*Arg2.RGB + Arg1.RGB // COLOROP only D3DTOP_MODULATEINVCOLOR_ADDALPHA = 21, // (1-Arg1.RGB)*Arg2.RGB + Arg1.A // COLOROP only // Bump mapping D3DTOP_BUMPENVMAP = 22, // per pixel env map perturbation D3DTOP_BUMPENVMAPLUMINANCE = 23, // with luminance channel // This can do either diffuse or specular bump mapping with correct input. // Performs the function (Arg1.R*Arg2.R + Arg1.G*Arg2.G + Arg1.B*Arg2.B) // where each component has been scaled and offset to make it signed. // The result is replicated into all four (including alpha) channels. // This is a valid COLOROP only. D3DTOP_DOTPRODUCT3 = 24, // Triadic ops D3DTOP_MULTIPLYADD = 25, // Arg0 + Arg1*Arg2 D3DTOP_LERP = 26, // (Arg0)*Arg1 + (1-Arg0)*Arg2 D3DTOP_FORCE_DWORD = 0x7fffffff, } D3DTEXTUREOP; /* * Values for COLORARG0,1,2, ALPHAARG0,1,2, and RESULTARG texture blending * operations set in texture processing stage controls in D3DRENDERSTATE. */ #define D3DTA_SELECTMASK 0x0000000f // mask for arg selector #define D3DTA_DIFFUSE 0x00000000 // select diffuse color (read only) #define D3DTA_CURRENT 0x00000001 // select stage destination register (read/write) #define D3DTA_TEXTURE 0x00000002 // select texture color (read only) #define D3DTA_TFACTOR 0x00000003 // select D3DRS_TEXTUREFACTOR (read only) #define D3DTA_SPECULAR 0x00000004 // select specular color (read only) #define D3DTA_TEMP 0x00000005 // select temporary register color (read/write) #define D3DTA_CONSTANT 0x00000006 // select texture stage constant #define D3DTA_COMPLEMENT 0x00000010 // take 1.0 - x (read modifier) #define D3DTA_ALPHAREPLICATE 0x00000020 // replicate alpha to color components (read modifier) // // Values for D3DSAMP_***FILTER texture stage states // typedef enum _D3DTEXTUREFILTERTYPE { D3DTEXF_NONE = 0, // filtering disabled (valid for mip filter only) D3DTEXF_POINT = 1, // nearest D3DTEXF_LINEAR = 2, // linear interpolation D3DTEXF_ANISOTROPIC = 3, // anisotropic D3DTEXF_PYRAMIDALQUAD = 6, // 4-sample tent D3DTEXF_GAUSSIANQUAD = 7, // 4-sample gaussian /* D3D9Ex only -- */ #if !defined(D3D_DISABLE_9EX) D3DTEXF_CONVOLUTIONMONO = 8, // Convolution filter for monochrome textures #endif // !D3D_DISABLE_9EX /* -- D3D9Ex only */ D3DTEXF_FORCE_DWORD = 0x7fffffff, // force 32-bit size enum } D3DTEXTUREFILTERTYPE; /* Bits for Flags in ProcessVertices call */ #define D3DPV_DONOTCOPYDATA (1 << 0) //------------------------------------------------------------------- // Flexible vertex format bits // #define D3DFVF_RESERVED0 0x001 #define D3DFVF_POSITION_MASK 0x400E #define D3DFVF_XYZ 0x002 #define D3DFVF_XYZRHW 0x004 #define D3DFVF_XYZB1 0x006 #define D3DFVF_XYZB2 0x008 #define D3DFVF_XYZB3 0x00a #define D3DFVF_XYZB4 0x00c #define D3DFVF_XYZB5 0x00e #define D3DFVF_XYZW 0x4002 #define D3DFVF_NORMAL 0x010 #define D3DFVF_PSIZE 0x020 #define D3DFVF_DIFFUSE 0x040 #define D3DFVF_SPECULAR 0x080 #define D3DFVF_TEXCOUNT_MASK 0xf00 #define D3DFVF_TEXCOUNT_SHIFT 8 #define D3DFVF_TEX0 0x000 #define D3DFVF_TEX1 0x100 #define D3DFVF_TEX2 0x200 #define D3DFVF_TEX3 0x300 #define D3DFVF_TEX4 0x400 #define D3DFVF_TEX5 0x500 #define D3DFVF_TEX6 0x600 #define D3DFVF_TEX7 0x700 #define D3DFVF_TEX8 0x800 #define D3DFVF_LASTBETA_UBYTE4 0x1000 #define D3DFVF_LASTBETA_D3DCOLOR 0x8000 #define D3DFVF_RESERVED2 0x6000 // 2 reserved bits //--------------------------------------------------------------------- // Vertex Shaders // // Vertex shader declaration // Vertex element semantics // typedef enum _D3DDECLUSAGE { D3DDECLUSAGE_POSITION = 0, D3DDECLUSAGE_BLENDWEIGHT, // 1 D3DDECLUSAGE_BLENDINDICES, // 2 D3DDECLUSAGE_NORMAL, // 3 D3DDECLUSAGE_PSIZE, // 4 D3DDECLUSAGE_TEXCOORD, // 5 D3DDECLUSAGE_TANGENT, // 6 D3DDECLUSAGE_BINORMAL, // 7 D3DDECLUSAGE_TESSFACTOR, // 8 D3DDECLUSAGE_POSITIONT, // 9 D3DDECLUSAGE_COLOR, // 10 D3DDECLUSAGE_FOG, // 11 D3DDECLUSAGE_DEPTH, // 12 D3DDECLUSAGE_SAMPLE, // 13 } D3DDECLUSAGE; #define MAXD3DDECLUSAGE D3DDECLUSAGE_SAMPLE #define MAXD3DDECLUSAGEINDEX 15 #define MAXD3DDECLLENGTH 64 // does not include "end" marker vertex element typedef enum _D3DDECLMETHOD { D3DDECLMETHOD_DEFAULT = 0, D3DDECLMETHOD_PARTIALU, D3DDECLMETHOD_PARTIALV, D3DDECLMETHOD_CROSSUV, // Normal D3DDECLMETHOD_UV, D3DDECLMETHOD_LOOKUP, // Lookup a displacement map D3DDECLMETHOD_LOOKUPPRESAMPLED, // Lookup a pre-sampled displacement map } D3DDECLMETHOD; #define MAXD3DDECLMETHOD D3DDECLMETHOD_LOOKUPPRESAMPLED // Declarations for _Type fields // typedef enum _D3DDECLTYPE { D3DDECLTYPE_FLOAT1 = 0, // 1D float expanded to (value, 0., 0., 1.) D3DDECLTYPE_FLOAT2 = 1, // 2D float expanded to (value, value, 0., 1.) D3DDECLTYPE_FLOAT3 = 2, // 3D float expanded to (value, value, value, 1.) D3DDECLTYPE_FLOAT4 = 3, // 4D float D3DDECLTYPE_D3DCOLOR = 4, // 4D packed unsigned bytes mapped to 0. to 1. range // Input is in D3DCOLOR format (ARGB) expanded to (R, G, B, A) D3DDECLTYPE_UBYTE4 = 5, // 4D unsigned byte D3DDECLTYPE_SHORT2 = 6, // 2D signed short expanded to (value, value, 0., 1.) D3DDECLTYPE_SHORT4 = 7, // 4D signed short // The following types are valid only with vertex shaders >= 2.0 D3DDECLTYPE_UBYTE4N = 8, // Each of 4 bytes is normalized by dividing to 255.0 D3DDECLTYPE_SHORT2N = 9, // 2D signed short normalized (v[0]/32767.0,v[1]/32767.0,0,1) D3DDECLTYPE_SHORT4N = 10, // 4D signed short normalized (v[0]/32767.0,v[1]/32767.0,v[2]/32767.0,v[3]/32767.0) D3DDECLTYPE_USHORT2N = 11, // 2D unsigned short normalized (v[0]/65535.0,v[1]/65535.0,0,1) D3DDECLTYPE_USHORT4N = 12, // 4D unsigned short normalized (v[0]/65535.0,v[1]/65535.0,v[2]/65535.0,v[3]/65535.0) D3DDECLTYPE_UDEC3 = 13, // 3D unsigned 10 10 10 format expanded to (value, value, value, 1) D3DDECLTYPE_DEC3N = 14, // 3D signed 10 10 10 format normalized and expanded to (v[0]/511.0, v[1]/511.0, v[2]/511.0, 1) D3DDECLTYPE_FLOAT16_2 = 15, // Two 16-bit floating point values, expanded to (value, value, 0, 1) D3DDECLTYPE_FLOAT16_4 = 16, // Four 16-bit floating point values D3DDECLTYPE_UNUSED = 17, // When the type field in a decl is unused. } D3DDECLTYPE; #define MAXD3DDECLTYPE D3DDECLTYPE_UNUSED typedef struct _D3DVERTEXELEMENT9 { WORD Stream; // Stream index WORD Offset; // Offset in the stream in bytes BYTE Type; // Data type BYTE Method; // Processing method BYTE Usage; // Semantics BYTE UsageIndex; // Semantic index } D3DVERTEXELEMENT9, *LPD3DVERTEXELEMENT9; // This is used to initialize the last vertex element in a vertex declaration // array // #define D3DDECL_END() {0xFF,0,D3DDECLTYPE_UNUSED,0,0,0} // Maximum supported number of texture coordinate sets #define D3DDP_MAXTEXCOORD 8 //--------------------------------------------------------------------- // Values for IDirect3DDevice9::SetStreamSourceFreq's Setting parameter //--------------------------------------------------------------------- #define D3DSTREAMSOURCE_INDEXEDDATA (1<<30) #define D3DSTREAMSOURCE_INSTANCEDATA (2<<30) //--------------------------------------------------------------------- // // The internal format of Pixel Shader (PS) & Vertex Shader (VS) // Instruction Tokens is defined in the Direct3D Device Driver Kit // //--------------------------------------------------------------------- // // Instruction Token Bit Definitions // #define D3DSI_OPCODE_MASK 0x0000FFFF #define D3DSI_INSTLENGTH_MASK 0x0F000000 #define D3DSI_INSTLENGTH_SHIFT 24 typedef enum _D3DSHADER_INSTRUCTION_OPCODE_TYPE { D3DSIO_NOP = 0, D3DSIO_MOV , D3DSIO_ADD , D3DSIO_SUB , D3DSIO_MAD , D3DSIO_MUL , D3DSIO_RCP , D3DSIO_RSQ , D3DSIO_DP3 , D3DSIO_DP4 , D3DSIO_MIN , D3DSIO_MAX , D3DSIO_SLT , D3DSIO_SGE , D3DSIO_EXP , D3DSIO_LOG , D3DSIO_LIT , D3DSIO_DST , D3DSIO_LRP , D3DSIO_FRC , D3DSIO_M4x4 , D3DSIO_M4x3 , D3DSIO_M3x4 , D3DSIO_M3x3 , D3DSIO_M3x2 , D3DSIO_CALL , D3DSIO_CALLNZ , D3DSIO_LOOP , D3DSIO_RET , D3DSIO_ENDLOOP , D3DSIO_LABEL , D3DSIO_DCL , D3DSIO_POW , D3DSIO_CRS , D3DSIO_SGN , D3DSIO_ABS , D3DSIO_NRM , D3DSIO_SINCOS , D3DSIO_REP , D3DSIO_ENDREP , D3DSIO_IF , D3DSIO_IFC , D3DSIO_ELSE , D3DSIO_ENDIF , D3DSIO_BREAK , D3DSIO_BREAKC , D3DSIO_MOVA , D3DSIO_DEFB , D3DSIO_DEFI , D3DSIO_TEXCOORD = 64, D3DSIO_TEXKILL , D3DSIO_TEX , D3DSIO_TEXBEM , D3DSIO_TEXBEML , D3DSIO_TEXREG2AR , D3DSIO_TEXREG2GB , D3DSIO_TEXM3x2PAD , D3DSIO_TEXM3x2TEX , D3DSIO_TEXM3x3PAD , D3DSIO_TEXM3x3TEX , D3DSIO_RESERVED0 , D3DSIO_TEXM3x3SPEC , D3DSIO_TEXM3x3VSPEC , D3DSIO_EXPP , D3DSIO_LOGP , D3DSIO_CND , D3DSIO_DEF , D3DSIO_TEXREG2RGB , D3DSIO_TEXDP3TEX , D3DSIO_TEXM3x2DEPTH , D3DSIO_TEXDP3 , D3DSIO_TEXM3x3 , D3DSIO_TEXDEPTH , D3DSIO_CMP , D3DSIO_BEM , D3DSIO_DP2ADD , D3DSIO_DSX , D3DSIO_DSY , D3DSIO_TEXLDD , D3DSIO_SETP , D3DSIO_TEXLDL , D3DSIO_BREAKP , D3DSIO_PHASE = 0xFFFD, D3DSIO_COMMENT = 0xFFFE, D3DSIO_END = 0xFFFF, D3DSIO_FORCE_DWORD = 0x7fffffff, // force 32-bit size enum } D3DSHADER_INSTRUCTION_OPCODE_TYPE; //--------------------------------------------------------------------- // Use these constants with D3DSIO_SINCOS macro as SRC2, SRC3 // #define D3DSINCOSCONST1 -1.5500992e-006f, -2.1701389e-005f, 0.0026041667f, 0.00026041668f #define D3DSINCOSCONST2 -0.020833334f, -0.12500000f, 1.0f, 0.50000000f //--------------------------------------------------------------------- // Co-Issue Instruction Modifier - if set then this instruction is to be // issued in parallel with the previous instruction(s) for which this bit // is not set. // #define D3DSI_COISSUE 0x40000000 //--------------------------------------------------------------------- // Opcode specific controls #define D3DSP_OPCODESPECIFICCONTROL_MASK 0x00ff0000 #define D3DSP_OPCODESPECIFICCONTROL_SHIFT 16 // ps_2_0 texld controls #define D3DSI_TEXLD_PROJECT (0x01 << D3DSP_OPCODESPECIFICCONTROL_SHIFT) #define D3DSI_TEXLD_BIAS (0x02 << D3DSP_OPCODESPECIFICCONTROL_SHIFT) // Comparison for dynamic conditional instruction opcodes (i.e. if, breakc) typedef enum _D3DSHADER_COMPARISON { // < = > D3DSPC_RESERVED0= 0, // 0 0 0 D3DSPC_GT = 1, // 0 0 1 D3DSPC_EQ = 2, // 0 1 0 D3DSPC_GE = 3, // 0 1 1 D3DSPC_LT = 4, // 1 0 0 D3DSPC_NE = 5, // 1 0 1 D3DSPC_LE = 6, // 1 1 0 D3DSPC_RESERVED1= 7 // 1 1 1 } D3DSHADER_COMPARISON; // Comparison is part of instruction opcode token: #define D3DSHADER_COMPARISON_SHIFT D3DSP_OPCODESPECIFICCONTROL_SHIFT #define D3DSHADER_COMPARISON_MASK (0x7<>8)&0xFF) #define D3DSHADER_VERSION_MINOR(_Version) (((_Version)>>0)&0xFF) // destination/source parameter register type #define D3DSI_COMMENTSIZE_SHIFT 16 #define D3DSI_COMMENTSIZE_MASK 0x7FFF0000 #define D3DSHADER_COMMENT(_DWordSize) \ ((((_DWordSize)<= 1200 #pragma warning(pop) #else #pragma warning(default:4201) #endif #endif /* (DIRECT3D_VERSION >= 0x0900) */ #endif /* _d3d9TYPES(P)_H_ */ ================================================ FILE: Include/d3dcaps.h ================================================ /*==========================================================================; * * Copyright (C) Microsoft Corporation. All Rights Reserved. * * File: d3dcaps.h * Content: Direct3D capabilities include file * ***************************************************************************/ #ifndef _D3DCAPS_H #define _D3DCAPS_H /* * Pull in DirectDraw include file automatically: */ #include "ddraw.h" #ifndef DIRECT3D_VERSION #define DIRECT3D_VERSION 0x0700 #endif #if defined(_X86_) || defined(_IA64_) #pragma pack(4) #endif /* Description of capabilities of transform */ typedef struct _D3DTRANSFORMCAPS { DWORD dwSize; DWORD dwCaps; } D3DTRANSFORMCAPS, *LPD3DTRANSFORMCAPS; #define D3DTRANSFORMCAPS_CLIP 0x00000001L /* Will clip whilst transforming */ /* Description of capabilities of lighting */ typedef struct _D3DLIGHTINGCAPS { DWORD dwSize; DWORD dwCaps; /* Lighting caps */ DWORD dwLightingModel; /* Lighting model - RGB or mono */ DWORD dwNumLights; /* Number of lights that can be handled */ } D3DLIGHTINGCAPS, *LPD3DLIGHTINGCAPS; #define D3DLIGHTINGMODEL_RGB 0x00000001L #define D3DLIGHTINGMODEL_MONO 0x00000002L #define D3DLIGHTCAPS_POINT 0x00000001L /* Point lights supported */ #define D3DLIGHTCAPS_SPOT 0x00000002L /* Spot lights supported */ #define D3DLIGHTCAPS_DIRECTIONAL 0x00000004L /* Directional lights supported */ #if(DIRECT3D_VERSION < 0x700) #define D3DLIGHTCAPS_PARALLELPOINT 0x00000008L /* Parallel point lights supported */ #endif #if(DIRECT3D_VERSION < 0x500) #define D3DLIGHTCAPS_GLSPOT 0x00000010L /* GL syle spot lights supported */ #endif /* Description of capabilities for each primitive type */ typedef struct _D3DPrimCaps { DWORD dwSize; DWORD dwMiscCaps; /* Capability flags */ DWORD dwRasterCaps; DWORD dwZCmpCaps; DWORD dwSrcBlendCaps; DWORD dwDestBlendCaps; DWORD dwAlphaCmpCaps; DWORD dwShadeCaps; DWORD dwTextureCaps; DWORD dwTextureFilterCaps; DWORD dwTextureBlendCaps; DWORD dwTextureAddressCaps; DWORD dwStippleWidth; /* maximum width and height of */ DWORD dwStippleHeight; /* of supported stipple (up to 32x32) */ } D3DPRIMCAPS, *LPD3DPRIMCAPS; /* D3DPRIMCAPS dwMiscCaps */ #define D3DPMISCCAPS_MASKPLANES 0x00000001L #define D3DPMISCCAPS_MASKZ 0x00000002L #define D3DPMISCCAPS_LINEPATTERNREP 0x00000004L #define D3DPMISCCAPS_CONFORMANT 0x00000008L #define D3DPMISCCAPS_CULLNONE 0x00000010L #define D3DPMISCCAPS_CULLCW 0x00000020L #define D3DPMISCCAPS_CULLCCW 0x00000040L /* D3DPRIMCAPS dwRasterCaps */ #define D3DPRASTERCAPS_DITHER 0x00000001L #define D3DPRASTERCAPS_ROP2 0x00000002L #define D3DPRASTERCAPS_XOR 0x00000004L #define D3DPRASTERCAPS_PAT 0x00000008L #define D3DPRASTERCAPS_ZTEST 0x00000010L #define D3DPRASTERCAPS_SUBPIXEL 0x00000020L #define D3DPRASTERCAPS_SUBPIXELX 0x00000040L #define D3DPRASTERCAPS_FOGVERTEX 0x00000080L #define D3DPRASTERCAPS_FOGTABLE 0x00000100L #define D3DPRASTERCAPS_STIPPLE 0x00000200L #if(DIRECT3D_VERSION >= 0x0500) #define D3DPRASTERCAPS_ANTIALIASSORTDEPENDENT 0x00000400L #define D3DPRASTERCAPS_ANTIALIASSORTINDEPENDENT 0x00000800L #define D3DPRASTERCAPS_ANTIALIASEDGES 0x00001000L #define D3DPRASTERCAPS_MIPMAPLODBIAS 0x00002000L #define D3DPRASTERCAPS_ZBIAS 0x00004000L #define D3DPRASTERCAPS_ZBUFFERLESSHSR 0x00008000L #define D3DPRASTERCAPS_FOGRANGE 0x00010000L #define D3DPRASTERCAPS_ANISOTROPY 0x00020000L #endif /* DIRECT3D_VERSION >= 0x0500 */ #if(DIRECT3D_VERSION >= 0x0600) #define D3DPRASTERCAPS_WBUFFER 0x00040000L #define D3DPRASTERCAPS_TRANSLUCENTSORTINDEPENDENT 0x00080000L #define D3DPRASTERCAPS_WFOG 0x00100000L #define D3DPRASTERCAPS_ZFOG 0x00200000L #endif /* DIRECT3D_VERSION >= 0x0600 */ /* D3DPRIMCAPS dwZCmpCaps, dwAlphaCmpCaps */ #define D3DPCMPCAPS_NEVER 0x00000001L #define D3DPCMPCAPS_LESS 0x00000002L #define D3DPCMPCAPS_EQUAL 0x00000004L #define D3DPCMPCAPS_LESSEQUAL 0x00000008L #define D3DPCMPCAPS_GREATER 0x00000010L #define D3DPCMPCAPS_NOTEQUAL 0x00000020L #define D3DPCMPCAPS_GREATEREQUAL 0x00000040L #define D3DPCMPCAPS_ALWAYS 0x00000080L /* D3DPRIMCAPS dwSourceBlendCaps, dwDestBlendCaps */ #define D3DPBLENDCAPS_ZERO 0x00000001L #define D3DPBLENDCAPS_ONE 0x00000002L #define D3DPBLENDCAPS_SRCCOLOR 0x00000004L #define D3DPBLENDCAPS_INVSRCCOLOR 0x00000008L #define D3DPBLENDCAPS_SRCALPHA 0x00000010L #define D3DPBLENDCAPS_INVSRCALPHA 0x00000020L #define D3DPBLENDCAPS_DESTALPHA 0x00000040L #define D3DPBLENDCAPS_INVDESTALPHA 0x00000080L #define D3DPBLENDCAPS_DESTCOLOR 0x00000100L #define D3DPBLENDCAPS_INVDESTCOLOR 0x00000200L #define D3DPBLENDCAPS_SRCALPHASAT 0x00000400L #define D3DPBLENDCAPS_BOTHSRCALPHA 0x00000800L #define D3DPBLENDCAPS_BOTHINVSRCALPHA 0x00001000L /* D3DPRIMCAPS dwShadeCaps */ #define D3DPSHADECAPS_COLORFLATMONO 0x00000001L #define D3DPSHADECAPS_COLORFLATRGB 0x00000002L #define D3DPSHADECAPS_COLORGOURAUDMONO 0x00000004L #define D3DPSHADECAPS_COLORGOURAUDRGB 0x00000008L #define D3DPSHADECAPS_COLORPHONGMONO 0x00000010L #define D3DPSHADECAPS_COLORPHONGRGB 0x00000020L #define D3DPSHADECAPS_SPECULARFLATMONO 0x00000040L #define D3DPSHADECAPS_SPECULARFLATRGB 0x00000080L #define D3DPSHADECAPS_SPECULARGOURAUDMONO 0x00000100L #define D3DPSHADECAPS_SPECULARGOURAUDRGB 0x00000200L #define D3DPSHADECAPS_SPECULARPHONGMONO 0x00000400L #define D3DPSHADECAPS_SPECULARPHONGRGB 0x00000800L #define D3DPSHADECAPS_ALPHAFLATBLEND 0x00001000L #define D3DPSHADECAPS_ALPHAFLATSTIPPLED 0x00002000L #define D3DPSHADECAPS_ALPHAGOURAUDBLEND 0x00004000L #define D3DPSHADECAPS_ALPHAGOURAUDSTIPPLED 0x00008000L #define D3DPSHADECAPS_ALPHAPHONGBLEND 0x00010000L #define D3DPSHADECAPS_ALPHAPHONGSTIPPLED 0x00020000L #define D3DPSHADECAPS_FOGFLAT 0x00040000L #define D3DPSHADECAPS_FOGGOURAUD 0x00080000L #define D3DPSHADECAPS_FOGPHONG 0x00100000L /* D3DPRIMCAPS dwTextureCaps */ /* * Perspective-correct texturing is supported */ #define D3DPTEXTURECAPS_PERSPECTIVE 0x00000001L /* * Power-of-2 texture dimensions are required */ #define D3DPTEXTURECAPS_POW2 0x00000002L /* * Alpha in texture pixels is supported */ #define D3DPTEXTURECAPS_ALPHA 0x00000004L /* * Color-keyed textures are supported */ #define D3DPTEXTURECAPS_TRANSPARENCY 0x00000008L /* * obsolete, see D3DPTADDRESSCAPS_BORDER */ #define D3DPTEXTURECAPS_BORDER 0x00000010L /* * Only square textures are supported */ #define D3DPTEXTURECAPS_SQUAREONLY 0x00000020L #if(DIRECT3D_VERSION >= 0x0600) /* * Texture indices are not scaled by the texture size prior * to interpolation. */ #define D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE 0x00000040L /* * Device can draw alpha from texture palettes */ #define D3DPTEXTURECAPS_ALPHAPALETTE 0x00000080L /* * Device can use non-POW2 textures if: * 1) D3DTEXTURE_ADDRESS is set to CLAMP for this texture's stage * 2) D3DRS_WRAP(N) is zero for this texture's coordinates * 3) mip mapping is not enabled (use magnification filter only) */ #define D3DPTEXTURECAPS_NONPOW2CONDITIONAL 0x00000100L #endif /* DIRECT3D_VERSION >= 0x0600 */ #if(DIRECT3D_VERSION >= 0x0700) // 0x00000200L unused /* * Device can divide transformed texture coordinates by the * COUNTth texture coordinate (can do D3DTTFF_PROJECTED) */ #define D3DPTEXTURECAPS_PROJECTED 0x00000400L /* * Device can do cubemap textures */ #define D3DPTEXTURECAPS_CUBEMAP 0x00000800L #define D3DPTEXTURECAPS_COLORKEYBLEND 0x00001000L #endif /* DIRECT3D_VERSION >= 0x0700 */ /* D3DPRIMCAPS dwTextureFilterCaps */ #define D3DPTFILTERCAPS_NEAREST 0x00000001L #define D3DPTFILTERCAPS_LINEAR 0x00000002L #define D3DPTFILTERCAPS_MIPNEAREST 0x00000004L #define D3DPTFILTERCAPS_MIPLINEAR 0x00000008L #define D3DPTFILTERCAPS_LINEARMIPNEAREST 0x00000010L #define D3DPTFILTERCAPS_LINEARMIPLINEAR 0x00000020L #if(DIRECT3D_VERSION >= 0x0600) /* Device3 Min Filter */ #define D3DPTFILTERCAPS_MINFPOINT 0x00000100L #define D3DPTFILTERCAPS_MINFLINEAR 0x00000200L #define D3DPTFILTERCAPS_MINFANISOTROPIC 0x00000400L /* Device3 Mip Filter */ #define D3DPTFILTERCAPS_MIPFPOINT 0x00010000L #define D3DPTFILTERCAPS_MIPFLINEAR 0x00020000L /* Device3 Mag Filter */ #define D3DPTFILTERCAPS_MAGFPOINT 0x01000000L #define D3DPTFILTERCAPS_MAGFLINEAR 0x02000000L #define D3DPTFILTERCAPS_MAGFANISOTROPIC 0x04000000L #define D3DPTFILTERCAPS_MAGFAFLATCUBIC 0x08000000L #define D3DPTFILTERCAPS_MAGFGAUSSIANCUBIC 0x10000000L #endif /* DIRECT3D_VERSION >= 0x0600 */ /* D3DPRIMCAPS dwTextureBlendCaps */ #define D3DPTBLENDCAPS_DECAL 0x00000001L #define D3DPTBLENDCAPS_MODULATE 0x00000002L #define D3DPTBLENDCAPS_DECALALPHA 0x00000004L #define D3DPTBLENDCAPS_MODULATEALPHA 0x00000008L #define D3DPTBLENDCAPS_DECALMASK 0x00000010L #define D3DPTBLENDCAPS_MODULATEMASK 0x00000020L #define D3DPTBLENDCAPS_COPY 0x00000040L #if(DIRECT3D_VERSION >= 0x0500) #define D3DPTBLENDCAPS_ADD 0x00000080L #endif /* DIRECT3D_VERSION >= 0x0500 */ /* D3DPRIMCAPS dwTextureAddressCaps */ #define D3DPTADDRESSCAPS_WRAP 0x00000001L #define D3DPTADDRESSCAPS_MIRROR 0x00000002L #define D3DPTADDRESSCAPS_CLAMP 0x00000004L #if(DIRECT3D_VERSION >= 0x0500) #define D3DPTADDRESSCAPS_BORDER 0x00000008L #define D3DPTADDRESSCAPS_INDEPENDENTUV 0x00000010L #endif /* DIRECT3D_VERSION >= 0x0500 */ #if(DIRECT3D_VERSION >= 0x0600) /* D3DDEVICEDESC dwStencilCaps */ #define D3DSTENCILCAPS_KEEP 0x00000001L #define D3DSTENCILCAPS_ZERO 0x00000002L #define D3DSTENCILCAPS_REPLACE 0x00000004L #define D3DSTENCILCAPS_INCRSAT 0x00000008L #define D3DSTENCILCAPS_DECRSAT 0x00000010L #define D3DSTENCILCAPS_INVERT 0x00000020L #define D3DSTENCILCAPS_INCR 0x00000040L #define D3DSTENCILCAPS_DECR 0x00000080L /* D3DDEVICEDESC dwTextureOpCaps */ #define D3DTEXOPCAPS_DISABLE 0x00000001L #define D3DTEXOPCAPS_SELECTARG1 0x00000002L #define D3DTEXOPCAPS_SELECTARG2 0x00000004L #define D3DTEXOPCAPS_MODULATE 0x00000008L #define D3DTEXOPCAPS_MODULATE2X 0x00000010L #define D3DTEXOPCAPS_MODULATE4X 0x00000020L #define D3DTEXOPCAPS_ADD 0x00000040L #define D3DTEXOPCAPS_ADDSIGNED 0x00000080L #define D3DTEXOPCAPS_ADDSIGNED2X 0x00000100L #define D3DTEXOPCAPS_SUBTRACT 0x00000200L #define D3DTEXOPCAPS_ADDSMOOTH 0x00000400L #define D3DTEXOPCAPS_BLENDDIFFUSEALPHA 0x00000800L #define D3DTEXOPCAPS_BLENDTEXTUREALPHA 0x00001000L #define D3DTEXOPCAPS_BLENDFACTORALPHA 0x00002000L #define D3DTEXOPCAPS_BLENDTEXTUREALPHAPM 0x00004000L #define D3DTEXOPCAPS_BLENDCURRENTALPHA 0x00008000L #define D3DTEXOPCAPS_PREMODULATE 0x00010000L #define D3DTEXOPCAPS_MODULATEALPHA_ADDCOLOR 0x00020000L #define D3DTEXOPCAPS_MODULATECOLOR_ADDALPHA 0x00040000L #define D3DTEXOPCAPS_MODULATEINVALPHA_ADDCOLOR 0x00080000L #define D3DTEXOPCAPS_MODULATEINVCOLOR_ADDALPHA 0x00100000L #define D3DTEXOPCAPS_BUMPENVMAP 0x00200000L #define D3DTEXOPCAPS_BUMPENVMAPLUMINANCE 0x00400000L #define D3DTEXOPCAPS_DOTPRODUCT3 0x00800000L /* D3DDEVICEDESC dwFVFCaps flags */ #define D3DFVFCAPS_TEXCOORDCOUNTMASK 0x0000ffffL /* mask for texture coordinate count field */ #define D3DFVFCAPS_DONOTSTRIPELEMENTS 0x00080000L /* Device prefers that vertex elements not be stripped */ #endif /* DIRECT3D_VERSION >= 0x0600 */ /* * Description for a device. * This is used to describe a device that is to be created or to query * the current device. */ typedef struct _D3DDeviceDesc { DWORD dwSize; /* Size of D3DDEVICEDESC structure */ DWORD dwFlags; /* Indicates which fields have valid data */ D3DCOLORMODEL dcmColorModel; /* Color model of device */ DWORD dwDevCaps; /* Capabilities of device */ D3DTRANSFORMCAPS dtcTransformCaps; /* Capabilities of transform */ BOOL bClipping; /* Device can do 3D clipping */ D3DLIGHTINGCAPS dlcLightingCaps; /* Capabilities of lighting */ D3DPRIMCAPS dpcLineCaps; D3DPRIMCAPS dpcTriCaps; DWORD dwDeviceRenderBitDepth; /* One of DDBB_8, 16, etc.. */ DWORD dwDeviceZBufferBitDepth;/* One of DDBD_16, 32, etc.. */ DWORD dwMaxBufferSize; /* Maximum execute buffer size */ DWORD dwMaxVertexCount; /* Maximum vertex count */ #if(DIRECT3D_VERSION >= 0x0500) // *** New fields for DX5 *** // // Width and height caps are 0 for legacy HALs. DWORD dwMinTextureWidth, dwMinTextureHeight; DWORD dwMaxTextureWidth, dwMaxTextureHeight; DWORD dwMinStippleWidth, dwMaxStippleWidth; DWORD dwMinStippleHeight, dwMaxStippleHeight; #endif /* DIRECT3D_VERSION >= 0x0500 */ #if(DIRECT3D_VERSION >= 0x0600) // New fields for DX6 DWORD dwMaxTextureRepeat; DWORD dwMaxTextureAspectRatio; DWORD dwMaxAnisotropy; // Guard band that the rasterizer can accommodate // Screen-space vertices inside this space but outside the viewport // will get clipped properly. D3DVALUE dvGuardBandLeft; D3DVALUE dvGuardBandTop; D3DVALUE dvGuardBandRight; D3DVALUE dvGuardBandBottom; D3DVALUE dvExtentsAdjust; DWORD dwStencilCaps; DWORD dwFVFCaps; DWORD dwTextureOpCaps; WORD wMaxTextureBlendStages; WORD wMaxSimultaneousTextures; #endif /* DIRECT3D_VERSION >= 0x0600 */ } D3DDEVICEDESC, *LPD3DDEVICEDESC; #if(DIRECT3D_VERSION >= 0x0700) typedef struct _D3DDeviceDesc7 { DWORD dwDevCaps; /* Capabilities of device */ D3DPRIMCAPS dpcLineCaps; D3DPRIMCAPS dpcTriCaps; DWORD dwDeviceRenderBitDepth; /* One of DDBB_8, 16, etc.. */ DWORD dwDeviceZBufferBitDepth;/* One of DDBD_16, 32, etc.. */ DWORD dwMinTextureWidth, dwMinTextureHeight; DWORD dwMaxTextureWidth, dwMaxTextureHeight; DWORD dwMaxTextureRepeat; DWORD dwMaxTextureAspectRatio; DWORD dwMaxAnisotropy; D3DVALUE dvGuardBandLeft; D3DVALUE dvGuardBandTop; D3DVALUE dvGuardBandRight; D3DVALUE dvGuardBandBottom; D3DVALUE dvExtentsAdjust; DWORD dwStencilCaps; DWORD dwFVFCaps; DWORD dwTextureOpCaps; WORD wMaxTextureBlendStages; WORD wMaxSimultaneousTextures; DWORD dwMaxActiveLights; D3DVALUE dvMaxVertexW; GUID deviceGUID; WORD wMaxUserClipPlanes; WORD wMaxVertexBlendMatrices; DWORD dwVertexProcessingCaps; DWORD dwReserved1; DWORD dwReserved2; DWORD dwReserved3; DWORD dwReserved4; } D3DDEVICEDESC7, *LPD3DDEVICEDESC7; #endif /* DIRECT3D_VERSION >= 0x0700 */ #define D3DDEVICEDESCSIZE (sizeof(D3DDEVICEDESC)) #define D3DDEVICEDESC7SIZE (sizeof(D3DDEVICEDESC7)) typedef HRESULT (CALLBACK * LPD3DENUMDEVICESCALLBACK)(GUID FAR *lpGuid, LPSTR lpDeviceDescription, LPSTR lpDeviceName, LPD3DDEVICEDESC, LPD3DDEVICEDESC, LPVOID); #if(DIRECT3D_VERSION >= 0x0700) typedef HRESULT (CALLBACK * LPD3DENUMDEVICESCALLBACK7)(LPSTR lpDeviceDescription, LPSTR lpDeviceName, LPD3DDEVICEDESC7, LPVOID); #endif /* DIRECT3D_VERSION >= 0x0700 */ /* D3DDEVICEDESC dwFlags indicating valid fields */ #define D3DDD_COLORMODEL 0x00000001L /* dcmColorModel is valid */ #define D3DDD_DEVCAPS 0x00000002L /* dwDevCaps is valid */ #define D3DDD_TRANSFORMCAPS 0x00000004L /* dtcTransformCaps is valid */ #define D3DDD_LIGHTINGCAPS 0x00000008L /* dlcLightingCaps is valid */ #define D3DDD_BCLIPPING 0x00000010L /* bClipping is valid */ #define D3DDD_LINECAPS 0x00000020L /* dpcLineCaps is valid */ #define D3DDD_TRICAPS 0x00000040L /* dpcTriCaps is valid */ #define D3DDD_DEVICERENDERBITDEPTH 0x00000080L /* dwDeviceRenderBitDepth is valid */ #define D3DDD_DEVICEZBUFFERBITDEPTH 0x00000100L /* dwDeviceZBufferBitDepth is valid */ #define D3DDD_MAXBUFFERSIZE 0x00000200L /* dwMaxBufferSize is valid */ #define D3DDD_MAXVERTEXCOUNT 0x00000400L /* dwMaxVertexCount is valid */ /* D3DDEVICEDESC dwDevCaps flags */ #define D3DDEVCAPS_FLOATTLVERTEX 0x00000001L /* Device accepts floating point */ /* for post-transform vertex data */ #define D3DDEVCAPS_SORTINCREASINGZ 0x00000002L /* Device needs data sorted for increasing Z */ #define D3DDEVCAPS_SORTDECREASINGZ 0X00000004L /* Device needs data sorted for decreasing Z */ #define D3DDEVCAPS_SORTEXACT 0x00000008L /* Device needs data sorted exactly */ #define D3DDEVCAPS_EXECUTESYSTEMMEMORY 0x00000010L /* Device can use execute buffers from system memory */ #define D3DDEVCAPS_EXECUTEVIDEOMEMORY 0x00000020L /* Device can use execute buffers from video memory */ #define D3DDEVCAPS_TLVERTEXSYSTEMMEMORY 0x00000040L /* Device can use TL buffers from system memory */ #define D3DDEVCAPS_TLVERTEXVIDEOMEMORY 0x00000080L /* Device can use TL buffers from video memory */ #define D3DDEVCAPS_TEXTURESYSTEMMEMORY 0x00000100L /* Device can texture from system memory */ #define D3DDEVCAPS_TEXTUREVIDEOMEMORY 0x00000200L /* Device can texture from device memory */ #if(DIRECT3D_VERSION >= 0x0500) #define D3DDEVCAPS_DRAWPRIMTLVERTEX 0x00000400L /* Device can draw TLVERTEX primitives */ #define D3DDEVCAPS_CANRENDERAFTERFLIP 0x00000800L /* Device can render without waiting for flip to complete */ #define D3DDEVCAPS_TEXTURENONLOCALVIDMEM 0x00001000L /* Device can texture from nonlocal video memory */ #endif /* DIRECT3D_VERSION >= 0x0500 */ #if(DIRECT3D_VERSION >= 0x0600) #define D3DDEVCAPS_DRAWPRIMITIVES2 0x00002000L /* Device can support DrawPrimitives2 */ #define D3DDEVCAPS_SEPARATETEXTUREMEMORIES 0x00004000L /* Device is texturing from separate memory pools */ #define D3DDEVCAPS_DRAWPRIMITIVES2EX 0x00008000L /* Device can support Extended DrawPrimitives2 i.e. DX7 compliant driver*/ #endif /* DIRECT3D_VERSION >= 0x0600 */ #if(DIRECT3D_VERSION >= 0x0700) #define D3DDEVCAPS_HWTRANSFORMANDLIGHT 0x00010000L /* Device can support transformation and lighting in hardware and DRAWPRIMITIVES2EX must be also */ #define D3DDEVCAPS_CANBLTSYSTONONLOCAL 0x00020000L /* Device supports a Tex Blt from system memory to non-local vidmem */ #define D3DDEVCAPS_HWRASTERIZATION 0x00080000L /* Device has HW acceleration for rasterization */ /* * These are the flags in the D3DDEVICEDESC7.dwVertexProcessingCaps field */ /* device can do texgen */ #define D3DVTXPCAPS_TEXGEN 0x00000001L /* device can do IDirect3DDevice7 colormaterialsource ops */ #define D3DVTXPCAPS_MATERIALSOURCE7 0x00000002L /* device can do vertex fog */ #define D3DVTXPCAPS_VERTEXFOG 0x00000004L /* device can do directional lights */ #define D3DVTXPCAPS_DIRECTIONALLIGHTS 0x00000008L /* device can do positional lights (includes point and spot) */ #define D3DVTXPCAPS_POSITIONALLIGHTS 0x00000010L /* device can do local viewer */ #define D3DVTXPCAPS_LOCALVIEWER 0x00000020L #endif /* DIRECT3D_VERSION >= 0x0700 */ #define D3DFDS_COLORMODEL 0x00000001L /* Match color model */ #define D3DFDS_GUID 0x00000002L /* Match guid */ #define D3DFDS_HARDWARE 0x00000004L /* Match hardware/software */ #define D3DFDS_TRIANGLES 0x00000008L /* Match in triCaps */ #define D3DFDS_LINES 0x00000010L /* Match in lineCaps */ #define D3DFDS_MISCCAPS 0x00000020L /* Match primCaps.dwMiscCaps */ #define D3DFDS_RASTERCAPS 0x00000040L /* Match primCaps.dwRasterCaps */ #define D3DFDS_ZCMPCAPS 0x00000080L /* Match primCaps.dwZCmpCaps */ #define D3DFDS_ALPHACMPCAPS 0x00000100L /* Match primCaps.dwAlphaCmpCaps */ #define D3DFDS_SRCBLENDCAPS 0x00000200L /* Match primCaps.dwSourceBlendCaps */ #define D3DFDS_DSTBLENDCAPS 0x00000400L /* Match primCaps.dwDestBlendCaps */ #define D3DFDS_SHADECAPS 0x00000800L /* Match primCaps.dwShadeCaps */ #define D3DFDS_TEXTURECAPS 0x00001000L /* Match primCaps.dwTextureCaps */ #define D3DFDS_TEXTUREFILTERCAPS 0x00002000L /* Match primCaps.dwTextureFilterCaps */ #define D3DFDS_TEXTUREBLENDCAPS 0x00004000L /* Match primCaps.dwTextureBlendCaps */ #define D3DFDS_TEXTUREADDRESSCAPS 0x00008000L /* Match primCaps.dwTextureBlendCaps */ /* * FindDevice arguments */ typedef struct _D3DFINDDEVICESEARCH { DWORD dwSize; DWORD dwFlags; BOOL bHardware; D3DCOLORMODEL dcmColorModel; GUID guid; DWORD dwCaps; D3DPRIMCAPS dpcPrimCaps; } D3DFINDDEVICESEARCH, *LPD3DFINDDEVICESEARCH; typedef struct _D3DFINDDEVICERESULT { DWORD dwSize; GUID guid; /* guid which matched */ D3DDEVICEDESC ddHwDesc; /* hardware D3DDEVICEDESC */ D3DDEVICEDESC ddSwDesc; /* software D3DDEVICEDESC */ } D3DFINDDEVICERESULT, *LPD3DFINDDEVICERESULT; /* * Description of execute buffer. */ typedef struct _D3DExecuteBufferDesc { DWORD dwSize; /* size of this structure */ DWORD dwFlags; /* flags indicating which fields are valid */ DWORD dwCaps; /* capabilities of execute buffer */ DWORD dwBufferSize; /* size of execute buffer data */ LPVOID lpData; /* pointer to actual data */ } D3DEXECUTEBUFFERDESC, *LPD3DEXECUTEBUFFERDESC; /* D3DEXECUTEBUFFER dwFlags indicating valid fields */ #define D3DDEB_BUFSIZE 0x00000001l /* buffer size valid */ #define D3DDEB_CAPS 0x00000002l /* caps valid */ #define D3DDEB_LPDATA 0x00000004l /* lpData valid */ /* D3DEXECUTEBUFFER dwCaps */ #define D3DDEBCAPS_SYSTEMMEMORY 0x00000001l /* buffer in system memory */ #define D3DDEBCAPS_VIDEOMEMORY 0x00000002l /* buffer in device memory */ #define D3DDEBCAPS_MEM (D3DDEBCAPS_SYSTEMMEMORY|D3DDEBCAPS_VIDEOMEMORY) #if(DIRECT3D_VERSION < 0x0800) #if(DIRECT3D_VERSION >= 0x0700) typedef struct _D3DDEVINFO_TEXTUREMANAGER { BOOL bThrashing; /* indicates if thrashing */ DWORD dwApproxBytesDownloaded; /* Approximate number of bytes downloaded by texture manager */ DWORD dwNumEvicts; /* number of textures evicted */ DWORD dwNumVidCreates; /* number of textures created in video memory */ DWORD dwNumTexturesUsed; /* number of textures used */ DWORD dwNumUsedTexInVid; /* number of used textures present in video memory */ DWORD dwWorkingSet; /* number of textures in video memory */ DWORD dwWorkingSetBytes; /* number of bytes in video memory */ DWORD dwTotalManaged; /* total number of managed textures */ DWORD dwTotalBytes; /* total number of bytes of managed textures */ DWORD dwLastPri; /* priority of last texture evicted */ } D3DDEVINFO_TEXTUREMANAGER, *LPD3DDEVINFO_TEXTUREMANAGER; typedef struct _D3DDEVINFO_TEXTURING { DWORD dwNumLoads; /* counts Load() API calls */ DWORD dwApproxBytesLoaded; /* Approximate number bytes loaded via Load() */ DWORD dwNumPreLoads; /* counts PreLoad() API calls */ DWORD dwNumSet; /* counts SetTexture() API calls */ DWORD dwNumCreates; /* counts texture creates */ DWORD dwNumDestroys; /* counts texture destroys */ DWORD dwNumSetPriorities; /* counts SetPriority() API calls */ DWORD dwNumSetLODs; /* counts SetLOD() API calls */ DWORD dwNumLocks; /* counts number of texture locks */ DWORD dwNumGetDCs; /* counts number of GetDCs to textures */ } D3DDEVINFO_TEXTURING, *LPD3DDEVINFO_TEXTURING; #endif /* DIRECT3D_VERSION >= 0x0700 */ #endif //(DIRECT3D_VERSION < 0x0800) #pragma pack() #endif /* _D3DCAPS_H_ */ ================================================ FILE: Include/d3dtypes.h ================================================ /*==========================================================================; * * Copyright (C) Microsoft Corporation. All Rights Reserved. * * File: d3dtypes.h * Content: Direct3D types include file * ***************************************************************************/ #ifndef _D3DTYPES_H_ #define _D3DTYPES_H_ #ifndef DIRECT3D_VERSION #define DIRECT3D_VERSION 0x0700 #endif #if (DIRECT3D_VERSION >= 0x0800) #pragma message("should not include d3dtypes.h when compiling for DX8 or newer interfaces") #endif #include #include #include "ddraw.h" #pragma warning(disable:4201) // anonymous unions warning #if defined(_X86_) || defined(_IA64_) #pragma pack(4) #endif /* D3DVALUE is the fundamental Direct3D fractional data type */ #define D3DVALP(val, prec) ((float)(val)) #define D3DVAL(val) ((float)(val)) #ifndef DX_SHARED_DEFINES /* * This definition is shared with other DirectX components whose header files * might already have defined it. Therefore, we don't define this type if * someone else already has (as indicated by the definition of * DX_SHARED_DEFINES). We don't set DX_SHARED_DEFINES here as there are * other types in this header that are also shared. The last of these * shared defines in this file will set DX_SHARED_DEFINES. */ typedef float D3DVALUE, *LPD3DVALUE; #endif /* DX_SHARED_DEFINES */ #define D3DDivide(a, b) (float)((double) (a) / (double) (b)) #define D3DMultiply(a, b) ((a) * (b)) typedef LONG D3DFIXED; #ifndef RGB_MAKE /* * Format of CI colors is * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | alpha | color index | fraction | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */ #define CI_GETALPHA(ci) ((ci) >> 24) #define CI_GETINDEX(ci) (((ci) >> 8) & 0xffff) #define CI_GETFRACTION(ci) ((ci) & 0xff) #define CI_ROUNDINDEX(ci) CI_GETINDEX((ci) + 0x80) #define CI_MASKALPHA(ci) ((ci) & 0xffffff) #define CI_MAKE(a, i, f) (((a) << 24) | ((i) << 8) | (f)) /* * Format of RGBA colors is * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | alpha | red | green | blue | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */ #define RGBA_GETALPHA(rgb) ((rgb) >> 24) #define RGBA_GETRED(rgb) (((rgb) >> 16) & 0xff) #define RGBA_GETGREEN(rgb) (((rgb) >> 8) & 0xff) #define RGBA_GETBLUE(rgb) ((rgb) & 0xff) #define RGBA_MAKE(r, g, b, a) ((D3DCOLOR) (((a) << 24) | ((r) << 16) | ((g) << 8) | (b))) /* D3DRGB and D3DRGBA may be used as initialisers for D3DCOLORs * The float values must be in the range 0..1 */ #define D3DRGB(r, g, b) \ (0xff000000L | ( ((long)((r) * 255)) << 16) | (((long)((g) * 255)) << 8) | (long)((b) * 255)) #define D3DRGBA(r, g, b, a) \ ( (((long)((a) * 255)) << 24) | (((long)((r) * 255)) << 16) \ | (((long)((g) * 255)) << 8) | (long)((b) * 255) \ ) /* * Format of RGB colors is * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | ignored | red | green | blue | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */ #define RGB_GETRED(rgb) (((rgb) >> 16) & 0xff) #define RGB_GETGREEN(rgb) (((rgb) >> 8) & 0xff) #define RGB_GETBLUE(rgb) ((rgb) & 0xff) #define RGBA_SETALPHA(rgba, x) (((x) << 24) | ((rgba) & 0x00ffffff)) #define RGB_MAKE(r, g, b) ((D3DCOLOR) (((r) << 16) | ((g) << 8) | (b))) #define RGBA_TORGB(rgba) ((D3DCOLOR) ((rgba) & 0xffffff)) #define RGB_TORGBA(rgb) ((D3DCOLOR) ((rgb) | 0xff000000)) #endif /* * Flags for Enumerate functions */ /* * Stop the enumeration */ #define D3DENUMRET_CANCEL DDENUMRET_CANCEL /* * Continue the enumeration */ #define D3DENUMRET_OK DDENUMRET_OK typedef HRESULT (CALLBACK* LPD3DVALIDATECALLBACK)(LPVOID lpUserArg, DWORD dwOffset); typedef HRESULT (CALLBACK* LPD3DENUMTEXTUREFORMATSCALLBACK)(LPDDSURFACEDESC lpDdsd, LPVOID lpContext); typedef HRESULT (CALLBACK* LPD3DENUMPIXELFORMATSCALLBACK)(LPDDPIXELFORMAT lpDDPixFmt, LPVOID lpContext); #ifndef DX_SHARED_DEFINES /* * This definition is shared with other DirectX components whose header files * might already have defined it. Therefore, we don't define this type if * someone else already has (as indicated by the definition of * DX_SHARED_DEFINES). We don't set DX_SHARED_DEFINES here as there are * other types in this header that are also shared. The last of these * shared defines in this file will set DX_SHARED_DEFINES. */ #ifndef D3DCOLOR_DEFINED typedef DWORD D3DCOLOR; #define D3DCOLOR_DEFINED #endif typedef DWORD *LPD3DCOLOR; #endif /* DX_SHARED_DEFINES */ typedef DWORD D3DMATERIALHANDLE, *LPD3DMATERIALHANDLE; typedef DWORD D3DTEXTUREHANDLE, *LPD3DTEXTUREHANDLE; typedef DWORD D3DMATRIXHANDLE, *LPD3DMATRIXHANDLE; #ifndef D3DCOLORVALUE_DEFINED typedef struct _D3DCOLORVALUE { union { D3DVALUE r; D3DVALUE dvR; }; union { D3DVALUE g; D3DVALUE dvG; }; union { D3DVALUE b; D3DVALUE dvB; }; union { D3DVALUE a; D3DVALUE dvA; }; } D3DCOLORVALUE; #define D3DCOLORVALUE_DEFINED #endif typedef struct _D3DCOLORVALUE *LPD3DCOLORVALUE; #ifndef D3DRECT_DEFINED typedef struct _D3DRECT { union { LONG x1; LONG lX1; }; union { LONG y1; LONG lY1; }; union { LONG x2; LONG lX2; }; union { LONG y2; LONG lY2; }; } D3DRECT; #define D3DRECT_DEFINED #endif typedef struct _D3DRECT *LPD3DRECT; #ifndef DX_SHARED_DEFINES /* * This definition is shared with other DirectX components whose header files * might already have defined it. Therefore, we don't define this type if * someone else already has (as indicated by the definition of * DX_SHARED_DEFINES). */ #ifndef D3DVECTOR_DEFINED typedef struct _D3DVECTOR { union { D3DVALUE x; D3DVALUE dvX; }; union { D3DVALUE y; D3DVALUE dvY; }; union { D3DVALUE z; D3DVALUE dvZ; }; #if(DIRECT3D_VERSION >= 0x0500) #if (defined __cplusplus) && (defined D3D_OVERLOADS) public: // ===================================== // Constructors // ===================================== _D3DVECTOR() { } _D3DVECTOR(D3DVALUE f); _D3DVECTOR(D3DVALUE _x, D3DVALUE _y, D3DVALUE _z); _D3DVECTOR(const D3DVALUE f[3]); // ===================================== // Access grants // ===================================== const D3DVALUE&operator[](int i) const; D3DVALUE&operator[](int i); // ===================================== // Assignment operators // ===================================== _D3DVECTOR& operator += (const _D3DVECTOR& v); _D3DVECTOR& operator -= (const _D3DVECTOR& v); _D3DVECTOR& operator *= (const _D3DVECTOR& v); _D3DVECTOR& operator /= (const _D3DVECTOR& v); _D3DVECTOR& operator *= (D3DVALUE s); _D3DVECTOR& operator /= (D3DVALUE s); // ===================================== // Unary operators // ===================================== friend _D3DVECTOR operator + (const _D3DVECTOR& v); friend _D3DVECTOR operator - (const _D3DVECTOR& v); // ===================================== // Binary operators // ===================================== // Addition and subtraction friend _D3DVECTOR operator + (const _D3DVECTOR& v1, const _D3DVECTOR& v2); friend _D3DVECTOR operator - (const _D3DVECTOR& v1, const _D3DVECTOR& v2); // Scalar multiplication and division friend _D3DVECTOR operator * (const _D3DVECTOR& v, D3DVALUE s); friend _D3DVECTOR operator * (D3DVALUE s, const _D3DVECTOR& v); friend _D3DVECTOR operator / (const _D3DVECTOR& v, D3DVALUE s); // Memberwise multiplication and division friend _D3DVECTOR operator * (const _D3DVECTOR& v1, const _D3DVECTOR& v2); friend _D3DVECTOR operator / (const _D3DVECTOR& v1, const _D3DVECTOR& v2); // Vector dominance friend int operator < (const _D3DVECTOR& v1, const _D3DVECTOR& v2); friend int operator <= (const _D3DVECTOR& v1, const _D3DVECTOR& v2); // Bitwise equality friend int operator == (const _D3DVECTOR& v1, const _D3DVECTOR& v2); // Length-related functions friend D3DVALUE SquareMagnitude (const _D3DVECTOR& v); friend D3DVALUE Magnitude (const _D3DVECTOR& v); // Returns vector with same direction and unit length friend _D3DVECTOR Normalize (const _D3DVECTOR& v); // Return min/max component of the input vector friend D3DVALUE Min (const _D3DVECTOR& v); friend D3DVALUE Max (const _D3DVECTOR& v); // Return memberwise min/max of input vectors friend _D3DVECTOR Minimize (const _D3DVECTOR& v1, const _D3DVECTOR& v2); friend _D3DVECTOR Maximize (const _D3DVECTOR& v1, const _D3DVECTOR& v2); // Dot and cross product friend D3DVALUE DotProduct (const _D3DVECTOR& v1, const _D3DVECTOR& v2); friend _D3DVECTOR CrossProduct (const _D3DVECTOR& v1, const _D3DVECTOR& v2); #endif #endif /* DIRECT3D_VERSION >= 0x0500 */ } D3DVECTOR; #define D3DVECTOR_DEFINED #endif typedef struct _D3DVECTOR *LPD3DVECTOR; /* * As this is the last of the shared defines to be defined we now set * D3D_SHARED_DEFINES to flag that fact that this header has defined these * types. */ #define DX_SHARED_DEFINES #endif /* DX_SHARED_DEFINES */ /* * Vertex data types supported in an ExecuteBuffer. */ /* * Homogeneous vertices */ typedef struct _D3DHVERTEX { DWORD dwFlags; /* Homogeneous clipping flags */ union { D3DVALUE hx; D3DVALUE dvHX; }; union { D3DVALUE hy; D3DVALUE dvHY; }; union { D3DVALUE hz; D3DVALUE dvHZ; }; } D3DHVERTEX, *LPD3DHVERTEX; /* * Transformed/lit vertices */ typedef struct _D3DTLVERTEX { union { D3DVALUE sx; /* Screen coordinates */ D3DVALUE dvSX; }; union { D3DVALUE sy; D3DVALUE dvSY; }; union { D3DVALUE sz; D3DVALUE dvSZ; }; union { D3DVALUE rhw; /* Reciprocal of homogeneous w */ D3DVALUE dvRHW; }; union { D3DCOLOR color; /* Vertex color */ D3DCOLOR dcColor; }; union { D3DCOLOR specular; /* Specular component of vertex */ D3DCOLOR dcSpecular; }; union { D3DVALUE tu; /* Texture coordinates */ D3DVALUE dvTU; }; union { D3DVALUE tv; D3DVALUE dvTV; }; #if(DIRECT3D_VERSION >= 0x0500) #if (defined __cplusplus) && (defined D3D_OVERLOADS) _D3DTLVERTEX() { } _D3DTLVERTEX(const D3DVECTOR& v, float _rhw, D3DCOLOR _color, D3DCOLOR _specular, float _tu, float _tv) { sx = v.x; sy = v.y; sz = v.z; rhw = _rhw; color = _color; specular = _specular; tu = _tu; tv = _tv; } #endif #endif /* DIRECT3D_VERSION >= 0x0500 */ } D3DTLVERTEX, *LPD3DTLVERTEX; /* * Untransformed/lit vertices */ typedef struct _D3DLVERTEX { union { D3DVALUE x; /* Homogeneous coordinates */ D3DVALUE dvX; }; union { D3DVALUE y; D3DVALUE dvY; }; union { D3DVALUE z; D3DVALUE dvZ; }; DWORD dwReserved; union { D3DCOLOR color; /* Vertex color */ D3DCOLOR dcColor; }; union { D3DCOLOR specular; /* Specular component of vertex */ D3DCOLOR dcSpecular; }; union { D3DVALUE tu; /* Texture coordinates */ D3DVALUE dvTU; }; union { D3DVALUE tv; D3DVALUE dvTV; }; #if(DIRECT3D_VERSION >= 0x0500) #if (defined __cplusplus) && (defined D3D_OVERLOADS) _D3DLVERTEX() { } _D3DLVERTEX(const D3DVECTOR& v, D3DCOLOR _color, D3DCOLOR _specular, float _tu, float _tv) { x = v.x; y = v.y; z = v.z; dwReserved = 0; color = _color; specular = _specular; tu = _tu; tv = _tv; } #endif #endif /* DIRECT3D_VERSION >= 0x0500 */ } D3DLVERTEX, *LPD3DLVERTEX; /* * Untransformed/unlit vertices */ typedef struct _D3DVERTEX { union { D3DVALUE x; /* Homogeneous coordinates */ D3DVALUE dvX; }; union { D3DVALUE y; D3DVALUE dvY; }; union { D3DVALUE z; D3DVALUE dvZ; }; union { D3DVALUE nx; /* Normal */ D3DVALUE dvNX; }; union { D3DVALUE ny; D3DVALUE dvNY; }; union { D3DVALUE nz; D3DVALUE dvNZ; }; union { D3DVALUE tu; /* Texture coordinates */ D3DVALUE dvTU; }; union { D3DVALUE tv; D3DVALUE dvTV; }; #if(DIRECT3D_VERSION >= 0x0500) #if (defined __cplusplus) && (defined D3D_OVERLOADS) _D3DVERTEX() { } _D3DVERTEX(const D3DVECTOR& v, const D3DVECTOR& n, float _tu, float _tv) { x = v.x; y = v.y; z = v.z; nx = n.x; ny = n.y; nz = n.z; tu = _tu; tv = _tv; } #endif #endif /* DIRECT3D_VERSION >= 0x0500 */ } D3DVERTEX, *LPD3DVERTEX; /* * Matrix, viewport, and tranformation structures and definitions. */ #ifndef D3DMATRIX_DEFINED typedef struct _D3DMATRIX { #if(DIRECT3D_VERSION >= 0x0500) #if (defined __cplusplus) && (defined D3D_OVERLOADS) union { struct { #endif #endif /* DIRECT3D_VERSION >= 0x0500 */ D3DVALUE _11, _12, _13, _14; D3DVALUE _21, _22, _23, _24; D3DVALUE _31, _32, _33, _34; D3DVALUE _41, _42, _43, _44; #if(DIRECT3D_VERSION >= 0x0500) #if (defined __cplusplus) && (defined D3D_OVERLOADS) }; D3DVALUE m[4][4]; }; _D3DMATRIX() { } _D3DMATRIX( D3DVALUE _m00, D3DVALUE _m01, D3DVALUE _m02, D3DVALUE _m03, D3DVALUE _m10, D3DVALUE _m11, D3DVALUE _m12, D3DVALUE _m13, D3DVALUE _m20, D3DVALUE _m21, D3DVALUE _m22, D3DVALUE _m23, D3DVALUE _m30, D3DVALUE _m31, D3DVALUE _m32, D3DVALUE _m33 ) { m[0][0] = _m00; m[0][1] = _m01; m[0][2] = _m02; m[0][3] = _m03; m[1][0] = _m10; m[1][1] = _m11; m[1][2] = _m12; m[1][3] = _m13; m[2][0] = _m20; m[2][1] = _m21; m[2][2] = _m22; m[2][3] = _m23; m[3][0] = _m30; m[3][1] = _m31; m[3][2] = _m32; m[3][3] = _m33; } D3DVALUE& operator()(int iRow, int iColumn) { return m[iRow][iColumn]; } const D3DVALUE& operator()(int iRow, int iColumn) const { return m[iRow][iColumn]; } #if(DIRECT3D_VERSION >= 0x0600) friend _D3DMATRIX operator* (const _D3DMATRIX&, const _D3DMATRIX&); #endif /* DIRECT3D_VERSION >= 0x0600 */ #endif #endif /* DIRECT3D_VERSION >= 0x0500 */ } D3DMATRIX; #define D3DMATRIX_DEFINED #endif typedef struct _D3DMATRIX *LPD3DMATRIX; #if (defined __cplusplus) && (defined D3D_OVERLOADS) #include "d3dvec.inl" #endif typedef struct _D3DVIEWPORT { DWORD dwSize; DWORD dwX; DWORD dwY; /* Top left */ DWORD dwWidth; DWORD dwHeight; /* Dimensions */ D3DVALUE dvScaleX; /* Scale homogeneous to screen */ D3DVALUE dvScaleY; /* Scale homogeneous to screen */ D3DVALUE dvMaxX; /* Min/max homogeneous x coord */ D3DVALUE dvMaxY; /* Min/max homogeneous y coord */ D3DVALUE dvMinZ; D3DVALUE dvMaxZ; /* Min/max homogeneous z coord */ } D3DVIEWPORT, *LPD3DVIEWPORT; #if(DIRECT3D_VERSION >= 0x0500) typedef struct _D3DVIEWPORT2 { DWORD dwSize; DWORD dwX; DWORD dwY; /* Viewport Top left */ DWORD dwWidth; DWORD dwHeight; /* Viewport Dimensions */ D3DVALUE dvClipX; /* Top left of clip volume */ D3DVALUE dvClipY; D3DVALUE dvClipWidth; /* Clip Volume Dimensions */ D3DVALUE dvClipHeight; D3DVALUE dvMinZ; /* Min/max of clip Volume */ D3DVALUE dvMaxZ; } D3DVIEWPORT2, *LPD3DVIEWPORT2; #endif /* DIRECT3D_VERSION >= 0x0500 */ #if(DIRECT3D_VERSION >= 0x0700) typedef struct _D3DVIEWPORT7 { DWORD dwX; DWORD dwY; /* Viewport Top left */ DWORD dwWidth; DWORD dwHeight; /* Viewport Dimensions */ D3DVALUE dvMinZ; /* Min/max of clip Volume */ D3DVALUE dvMaxZ; } D3DVIEWPORT7, *LPD3DVIEWPORT7; #endif /* DIRECT3D_VERSION >= 0x0700 */ /* * Values for clip fields. */ #if(DIRECT3D_VERSION >= 0x0700) // Max number of user clipping planes, supported in D3D. #define D3DMAXUSERCLIPPLANES 32 // These bits could be ORed together to use with D3DRENDERSTATE_CLIPPLANEENABLE // #define D3DCLIPPLANE0 (1 << 0) #define D3DCLIPPLANE1 (1 << 1) #define D3DCLIPPLANE2 (1 << 2) #define D3DCLIPPLANE3 (1 << 3) #define D3DCLIPPLANE4 (1 << 4) #define D3DCLIPPLANE5 (1 << 5) #endif /* DIRECT3D_VERSION >= 0x0700 */ #define D3DCLIP_LEFT 0x00000001L #define D3DCLIP_RIGHT 0x00000002L #define D3DCLIP_TOP 0x00000004L #define D3DCLIP_BOTTOM 0x00000008L #define D3DCLIP_FRONT 0x00000010L #define D3DCLIP_BACK 0x00000020L #define D3DCLIP_GEN0 0x00000040L #define D3DCLIP_GEN1 0x00000080L #define D3DCLIP_GEN2 0x00000100L #define D3DCLIP_GEN3 0x00000200L #define D3DCLIP_GEN4 0x00000400L #define D3DCLIP_GEN5 0x00000800L /* * Values for d3d status. */ #define D3DSTATUS_CLIPUNIONLEFT D3DCLIP_LEFT #define D3DSTATUS_CLIPUNIONRIGHT D3DCLIP_RIGHT #define D3DSTATUS_CLIPUNIONTOP D3DCLIP_TOP #define D3DSTATUS_CLIPUNIONBOTTOM D3DCLIP_BOTTOM #define D3DSTATUS_CLIPUNIONFRONT D3DCLIP_FRONT #define D3DSTATUS_CLIPUNIONBACK D3DCLIP_BACK #define D3DSTATUS_CLIPUNIONGEN0 D3DCLIP_GEN0 #define D3DSTATUS_CLIPUNIONGEN1 D3DCLIP_GEN1 #define D3DSTATUS_CLIPUNIONGEN2 D3DCLIP_GEN2 #define D3DSTATUS_CLIPUNIONGEN3 D3DCLIP_GEN3 #define D3DSTATUS_CLIPUNIONGEN4 D3DCLIP_GEN4 #define D3DSTATUS_CLIPUNIONGEN5 D3DCLIP_GEN5 #define D3DSTATUS_CLIPINTERSECTIONLEFT 0x00001000L #define D3DSTATUS_CLIPINTERSECTIONRIGHT 0x00002000L #define D3DSTATUS_CLIPINTERSECTIONTOP 0x00004000L #define D3DSTATUS_CLIPINTERSECTIONBOTTOM 0x00008000L #define D3DSTATUS_CLIPINTERSECTIONFRONT 0x00010000L #define D3DSTATUS_CLIPINTERSECTIONBACK 0x00020000L #define D3DSTATUS_CLIPINTERSECTIONGEN0 0x00040000L #define D3DSTATUS_CLIPINTERSECTIONGEN1 0x00080000L #define D3DSTATUS_CLIPINTERSECTIONGEN2 0x00100000L #define D3DSTATUS_CLIPINTERSECTIONGEN3 0x00200000L #define D3DSTATUS_CLIPINTERSECTIONGEN4 0x00400000L #define D3DSTATUS_CLIPINTERSECTIONGEN5 0x00800000L #define D3DSTATUS_ZNOTVISIBLE 0x01000000L /* Do not use 0x80000000 for any status flags in future as it is reserved */ #define D3DSTATUS_CLIPUNIONALL ( \ D3DSTATUS_CLIPUNIONLEFT | \ D3DSTATUS_CLIPUNIONRIGHT | \ D3DSTATUS_CLIPUNIONTOP | \ D3DSTATUS_CLIPUNIONBOTTOM | \ D3DSTATUS_CLIPUNIONFRONT | \ D3DSTATUS_CLIPUNIONBACK | \ D3DSTATUS_CLIPUNIONGEN0 | \ D3DSTATUS_CLIPUNIONGEN1 | \ D3DSTATUS_CLIPUNIONGEN2 | \ D3DSTATUS_CLIPUNIONGEN3 | \ D3DSTATUS_CLIPUNIONGEN4 | \ D3DSTATUS_CLIPUNIONGEN5 \ ) #define D3DSTATUS_CLIPINTERSECTIONALL ( \ D3DSTATUS_CLIPINTERSECTIONLEFT | \ D3DSTATUS_CLIPINTERSECTIONRIGHT | \ D3DSTATUS_CLIPINTERSECTIONTOP | \ D3DSTATUS_CLIPINTERSECTIONBOTTOM | \ D3DSTATUS_CLIPINTERSECTIONFRONT | \ D3DSTATUS_CLIPINTERSECTIONBACK | \ D3DSTATUS_CLIPINTERSECTIONGEN0 | \ D3DSTATUS_CLIPINTERSECTIONGEN1 | \ D3DSTATUS_CLIPINTERSECTIONGEN2 | \ D3DSTATUS_CLIPINTERSECTIONGEN3 | \ D3DSTATUS_CLIPINTERSECTIONGEN4 | \ D3DSTATUS_CLIPINTERSECTIONGEN5 \ ) #define D3DSTATUS_DEFAULT ( \ D3DSTATUS_CLIPINTERSECTIONALL | \ D3DSTATUS_ZNOTVISIBLE) /* * Options for direct transform calls */ #define D3DTRANSFORM_CLIPPED 0x00000001l #define D3DTRANSFORM_UNCLIPPED 0x00000002l typedef struct _D3DTRANSFORMDATA { DWORD dwSize; LPVOID lpIn; /* Input vertices */ DWORD dwInSize; /* Stride of input vertices */ LPVOID lpOut; /* Output vertices */ DWORD dwOutSize; /* Stride of output vertices */ LPD3DHVERTEX lpHOut; /* Output homogeneous vertices */ DWORD dwClip; /* Clipping hint */ DWORD dwClipIntersection; DWORD dwClipUnion; /* Union of all clip flags */ D3DRECT drExtent; /* Extent of transformed vertices */ } D3DTRANSFORMDATA, *LPD3DTRANSFORMDATA; /* * Structure defining position and direction properties for lighting. */ typedef struct _D3DLIGHTINGELEMENT { D3DVECTOR dvPosition; /* Lightable point in model space */ D3DVECTOR dvNormal; /* Normalised unit vector */ } D3DLIGHTINGELEMENT, *LPD3DLIGHTINGELEMENT; /* * Structure defining material properties for lighting. */ typedef struct _D3DMATERIAL { DWORD dwSize; union { D3DCOLORVALUE diffuse; /* Diffuse color RGBA */ D3DCOLORVALUE dcvDiffuse; }; union { D3DCOLORVALUE ambient; /* Ambient color RGB */ D3DCOLORVALUE dcvAmbient; }; union { D3DCOLORVALUE specular; /* Specular 'shininess' */ D3DCOLORVALUE dcvSpecular; }; union { D3DCOLORVALUE emissive; /* Emissive color RGB */ D3DCOLORVALUE dcvEmissive; }; union { D3DVALUE power; /* Sharpness if specular highlight */ D3DVALUE dvPower; }; D3DTEXTUREHANDLE hTexture; /* Handle to texture map */ DWORD dwRampSize; } D3DMATERIAL, *LPD3DMATERIAL; #if(DIRECT3D_VERSION >= 0x0700) typedef struct _D3DMATERIAL7 { union { D3DCOLORVALUE diffuse; /* Diffuse color RGBA */ D3DCOLORVALUE dcvDiffuse; }; union { D3DCOLORVALUE ambient; /* Ambient color RGB */ D3DCOLORVALUE dcvAmbient; }; union { D3DCOLORVALUE specular; /* Specular 'shininess' */ D3DCOLORVALUE dcvSpecular; }; union { D3DCOLORVALUE emissive; /* Emissive color RGB */ D3DCOLORVALUE dcvEmissive; }; union { D3DVALUE power; /* Sharpness if specular highlight */ D3DVALUE dvPower; }; } D3DMATERIAL7, *LPD3DMATERIAL7; #endif /* DIRECT3D_VERSION >= 0x0700 */ #if(DIRECT3D_VERSION < 0x0800) typedef enum _D3DLIGHTTYPE { D3DLIGHT_POINT = 1, D3DLIGHT_SPOT = 2, D3DLIGHT_DIRECTIONAL = 3, // Note: The following light type (D3DLIGHT_PARALLELPOINT) // is no longer supported from D3D for DX7 onwards. D3DLIGHT_PARALLELPOINT = 4, #if(DIRECT3D_VERSION < 0x0500) // For backward compatible headers D3DLIGHT_GLSPOT = 5, #endif D3DLIGHT_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ } D3DLIGHTTYPE; #else typedef enum _D3DLIGHTTYPE D3DLIGHTTYPE; #define D3DLIGHT_PARALLELPOINT (D3DLIGHTTYPE)4 #define D3DLIGHT_GLSPOT (D3DLIGHTTYPE)5 #endif //(DIRECT3D_VERSION < 0x0800) /* * Structure defining a light source and its properties. */ typedef struct _D3DLIGHT { DWORD dwSize; D3DLIGHTTYPE dltType; /* Type of light source */ D3DCOLORVALUE dcvColor; /* Color of light */ D3DVECTOR dvPosition; /* Position in world space */ D3DVECTOR dvDirection; /* Direction in world space */ D3DVALUE dvRange; /* Cutoff range */ D3DVALUE dvFalloff; /* Falloff */ D3DVALUE dvAttenuation0; /* Constant attenuation */ D3DVALUE dvAttenuation1; /* Linear attenuation */ D3DVALUE dvAttenuation2; /* Quadratic attenuation */ D3DVALUE dvTheta; /* Inner angle of spotlight cone */ D3DVALUE dvPhi; /* Outer angle of spotlight cone */ } D3DLIGHT, *LPD3DLIGHT; #if(DIRECT3D_VERSION >= 0x0700) typedef struct _D3DLIGHT7 { D3DLIGHTTYPE dltType; /* Type of light source */ D3DCOLORVALUE dcvDiffuse; /* Diffuse color of light */ D3DCOLORVALUE dcvSpecular; /* Specular color of light */ D3DCOLORVALUE dcvAmbient; /* Ambient color of light */ D3DVECTOR dvPosition; /* Position in world space */ D3DVECTOR dvDirection; /* Direction in world space */ D3DVALUE dvRange; /* Cutoff range */ D3DVALUE dvFalloff; /* Falloff */ D3DVALUE dvAttenuation0; /* Constant attenuation */ D3DVALUE dvAttenuation1; /* Linear attenuation */ D3DVALUE dvAttenuation2; /* Quadratic attenuation */ D3DVALUE dvTheta; /* Inner angle of spotlight cone */ D3DVALUE dvPhi; /* Outer angle of spotlight cone */ } D3DLIGHT7, *LPD3DLIGHT7; #endif /* DIRECT3D_VERSION >= 0x0700 */ #if(DIRECT3D_VERSION >= 0x0500) /* * Structure defining a light source and its properties. */ /* flags bits */ #define D3DLIGHT_ACTIVE 0x00000001 #define D3DLIGHT_NO_SPECULAR 0x00000002 #define D3DLIGHT_ALL (D3DLIGHT_ACTIVE | D3DLIGHT_NO_SPECULAR) /* maximum valid light range */ #define D3DLIGHT_RANGE_MAX ((float)sqrt(FLT_MAX)) typedef struct _D3DLIGHT2 { DWORD dwSize; D3DLIGHTTYPE dltType; /* Type of light source */ D3DCOLORVALUE dcvColor; /* Color of light */ D3DVECTOR dvPosition; /* Position in world space */ D3DVECTOR dvDirection; /* Direction in world space */ D3DVALUE dvRange; /* Cutoff range */ D3DVALUE dvFalloff; /* Falloff */ D3DVALUE dvAttenuation0; /* Constant attenuation */ D3DVALUE dvAttenuation1; /* Linear attenuation */ D3DVALUE dvAttenuation2; /* Quadratic attenuation */ D3DVALUE dvTheta; /* Inner angle of spotlight cone */ D3DVALUE dvPhi; /* Outer angle of spotlight cone */ DWORD dwFlags; } D3DLIGHT2, *LPD3DLIGHT2; #endif /* DIRECT3D_VERSION >= 0x0500 */ typedef struct _D3DLIGHTDATA { DWORD dwSize; LPD3DLIGHTINGELEMENT lpIn; /* Input positions and normals */ DWORD dwInSize; /* Stride of input elements */ LPD3DTLVERTEX lpOut; /* Output colors */ DWORD dwOutSize; /* Stride of output colors */ } D3DLIGHTDATA, *LPD3DLIGHTDATA; #if(DIRECT3D_VERSION >= 0x0500) /* * Before DX5, these values were in an enum called * D3DCOLORMODEL. This was not correct, since they are * bit flags. A driver can surface either or both flags * in the dcmColorModel member of D3DDEVICEDESC. */ #define D3DCOLOR_MONO 1 #define D3DCOLOR_RGB 2 typedef DWORD D3DCOLORMODEL; #endif /* DIRECT3D_VERSION >= 0x0500 */ /* * Options for clearing */ #define D3DCLEAR_TARGET 0x00000001l /* Clear target surface */ #define D3DCLEAR_ZBUFFER 0x00000002l /* Clear target z buffer */ #if(DIRECT3D_VERSION >= 0x0600) #define D3DCLEAR_STENCIL 0x00000004l /* Clear stencil planes */ #endif /* DIRECT3D_VERSION >= 0x0600 */ /* * Execute buffers are allocated via Direct3D. These buffers may then * be filled by the application with instructions to execute along with * vertex data. */ /* * Supported op codes for execute instructions. */ typedef enum _D3DOPCODE { D3DOP_POINT = 1, D3DOP_LINE = 2, D3DOP_TRIANGLE = 3, D3DOP_MATRIXLOAD = 4, D3DOP_MATRIXMULTIPLY = 5, D3DOP_STATETRANSFORM = 6, D3DOP_STATELIGHT = 7, D3DOP_STATERENDER = 8, D3DOP_PROCESSVERTICES = 9, D3DOP_TEXTURELOAD = 10, D3DOP_EXIT = 11, D3DOP_BRANCHFORWARD = 12, D3DOP_SPAN = 13, D3DOP_SETSTATUS = 14, #if(DIRECT3D_VERSION >= 0x0500) D3DOP_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ #endif /* DIRECT3D_VERSION >= 0x0500 */ } D3DOPCODE; typedef struct _D3DINSTRUCTION { BYTE bOpcode; /* Instruction opcode */ BYTE bSize; /* Size of each instruction data unit */ WORD wCount; /* Count of instruction data units to follow */ } D3DINSTRUCTION, *LPD3DINSTRUCTION; /* * Structure for texture loads */ typedef struct _D3DTEXTURELOAD { D3DTEXTUREHANDLE hDestTexture; D3DTEXTUREHANDLE hSrcTexture; } D3DTEXTURELOAD, *LPD3DTEXTURELOAD; /* * Structure for picking */ typedef struct _D3DPICKRECORD { BYTE bOpcode; BYTE bPad; DWORD dwOffset; D3DVALUE dvZ; } D3DPICKRECORD, *LPD3DPICKRECORD; /* * The following defines the rendering states which can be set in the * execute buffer. */ #if(DIRECT3D_VERSION < 0x0800) typedef enum _D3DSHADEMODE { D3DSHADE_FLAT = 1, D3DSHADE_GOURAUD = 2, D3DSHADE_PHONG = 3, #if(DIRECT3D_VERSION >= 0x0500) D3DSHADE_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ #endif /* DIRECT3D_VERSION >= 0x0500 */ } D3DSHADEMODE; typedef enum _D3DFILLMODE { D3DFILL_POINT = 1, D3DFILL_WIREFRAME = 2, D3DFILL_SOLID = 3, #if(DIRECT3D_VERSION >= 0x0500) D3DFILL_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ #endif /* DIRECT3D_VERSION >= 0x0500 */ } D3DFILLMODE; typedef struct _D3DLINEPATTERN { WORD wRepeatFactor; WORD wLinePattern; } D3DLINEPATTERN; #endif //(DIRECT3D_VERSION < 0x0800) typedef enum _D3DTEXTUREFILTER { D3DFILTER_NEAREST = 1, D3DFILTER_LINEAR = 2, D3DFILTER_MIPNEAREST = 3, D3DFILTER_MIPLINEAR = 4, D3DFILTER_LINEARMIPNEAREST = 5, D3DFILTER_LINEARMIPLINEAR = 6, #if(DIRECT3D_VERSION >= 0x0500) D3DFILTER_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ #endif /* DIRECT3D_VERSION >= 0x0500 */ } D3DTEXTUREFILTER; #if(DIRECT3D_VERSION < 0x0800) typedef enum _D3DBLEND { D3DBLEND_ZERO = 1, D3DBLEND_ONE = 2, D3DBLEND_SRCCOLOR = 3, D3DBLEND_INVSRCCOLOR = 4, D3DBLEND_SRCALPHA = 5, D3DBLEND_INVSRCALPHA = 6, D3DBLEND_DESTALPHA = 7, D3DBLEND_INVDESTALPHA = 8, D3DBLEND_DESTCOLOR = 9, D3DBLEND_INVDESTCOLOR = 10, D3DBLEND_SRCALPHASAT = 11, D3DBLEND_BOTHSRCALPHA = 12, D3DBLEND_BOTHINVSRCALPHA = 13, #if(DIRECT3D_VERSION >= 0x0500) D3DBLEND_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ #endif /* DIRECT3D_VERSION >= 0x0500 */ } D3DBLEND; #endif //(DIRECT3D_VERSION < 0x0800) typedef enum _D3DTEXTUREBLEND { D3DTBLEND_DECAL = 1, D3DTBLEND_MODULATE = 2, D3DTBLEND_DECALALPHA = 3, D3DTBLEND_MODULATEALPHA = 4, D3DTBLEND_DECALMASK = 5, D3DTBLEND_MODULATEMASK = 6, D3DTBLEND_COPY = 7, #if(DIRECT3D_VERSION >= 0x0500) D3DTBLEND_ADD = 8, D3DTBLEND_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ #endif /* DIRECT3D_VERSION >= 0x0500 */ } D3DTEXTUREBLEND; #if(DIRECT3D_VERSION < 0x0800) typedef enum _D3DTEXTUREADDRESS { D3DTADDRESS_WRAP = 1, D3DTADDRESS_MIRROR = 2, D3DTADDRESS_CLAMP = 3, #if(DIRECT3D_VERSION >= 0x0500) D3DTADDRESS_BORDER = 4, D3DTADDRESS_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ #endif /* DIRECT3D_VERSION >= 0x0500 */ } D3DTEXTUREADDRESS; typedef enum _D3DCULL { D3DCULL_NONE = 1, D3DCULL_CW = 2, D3DCULL_CCW = 3, #if(DIRECT3D_VERSION >= 0x0500) D3DCULL_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ #endif /* DIRECT3D_VERSION >= 0x0500 */ } D3DCULL; typedef enum _D3DCMPFUNC { D3DCMP_NEVER = 1, D3DCMP_LESS = 2, D3DCMP_EQUAL = 3, D3DCMP_LESSEQUAL = 4, D3DCMP_GREATER = 5, D3DCMP_NOTEQUAL = 6, D3DCMP_GREATEREQUAL = 7, D3DCMP_ALWAYS = 8, #if(DIRECT3D_VERSION >= 0x0500) D3DCMP_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ #endif /* DIRECT3D_VERSION >= 0x0500 */ } D3DCMPFUNC; #if(DIRECT3D_VERSION >= 0x0600) typedef enum _D3DSTENCILOP { D3DSTENCILOP_KEEP = 1, D3DSTENCILOP_ZERO = 2, D3DSTENCILOP_REPLACE = 3, D3DSTENCILOP_INCRSAT = 4, D3DSTENCILOP_DECRSAT = 5, D3DSTENCILOP_INVERT = 6, D3DSTENCILOP_INCR = 7, D3DSTENCILOP_DECR = 8, D3DSTENCILOP_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ } D3DSTENCILOP; #endif /* DIRECT3D_VERSION >= 0x0600 */ typedef enum _D3DFOGMODE { D3DFOG_NONE = 0, D3DFOG_EXP = 1, D3DFOG_EXP2 = 2, #if(DIRECT3D_VERSION >= 0x0500) D3DFOG_LINEAR = 3, D3DFOG_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ #endif /* DIRECT3D_VERSION >= 0x0500 */ } D3DFOGMODE; #if(DIRECT3D_VERSION >= 0x0600) typedef enum _D3DZBUFFERTYPE { D3DZB_FALSE = 0, D3DZB_TRUE = 1, // Z buffering D3DZB_USEW = 2, // W buffering D3DZB_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ } D3DZBUFFERTYPE; #endif /* DIRECT3D_VERSION >= 0x0600 */ #endif //(DIRECT3D_VERSION < 0x0800) #if(DIRECT3D_VERSION >= 0x0500) typedef enum _D3DANTIALIASMODE { D3DANTIALIAS_NONE = 0, D3DANTIALIAS_SORTDEPENDENT = 1, D3DANTIALIAS_SORTINDEPENDENT = 2, D3DANTIALIAS_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ } D3DANTIALIASMODE; // Vertex types supported by Direct3D typedef enum _D3DVERTEXTYPE { D3DVT_VERTEX = 1, D3DVT_LVERTEX = 2, D3DVT_TLVERTEX = 3, D3DVT_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ } D3DVERTEXTYPE; #if(DIRECT3D_VERSION < 0x0800) // Primitives supported by draw-primitive API typedef enum _D3DPRIMITIVETYPE { D3DPT_POINTLIST = 1, D3DPT_LINELIST = 2, D3DPT_LINESTRIP = 3, D3DPT_TRIANGLELIST = 4, D3DPT_TRIANGLESTRIP = 5, D3DPT_TRIANGLEFAN = 6, D3DPT_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ } D3DPRIMITIVETYPE; #endif //(DIRECT3D_VERSION < 0x0800) #endif /* DIRECT3D_VERSION >= 0x0500 */ /* * Amount to add to a state to generate the override for that state. */ #define D3DSTATE_OVERRIDE_BIAS 256 /* * A state which sets the override flag for the specified state type. */ #define D3DSTATE_OVERRIDE(type) (D3DRENDERSTATETYPE)(((DWORD) (type) + D3DSTATE_OVERRIDE_BIAS)) #if(DIRECT3D_VERSION < 0x0800) typedef enum _D3DTRANSFORMSTATETYPE { D3DTRANSFORMSTATE_WORLD = 1, D3DTRANSFORMSTATE_VIEW = 2, D3DTRANSFORMSTATE_PROJECTION = 3, #if(DIRECT3D_VERSION >= 0x0700) D3DTRANSFORMSTATE_WORLD1 = 4, // 2nd matrix to blend D3DTRANSFORMSTATE_WORLD2 = 5, // 3rd matrix to blend D3DTRANSFORMSTATE_WORLD3 = 6, // 4th matrix to blend D3DTRANSFORMSTATE_TEXTURE0 = 16, D3DTRANSFORMSTATE_TEXTURE1 = 17, D3DTRANSFORMSTATE_TEXTURE2 = 18, D3DTRANSFORMSTATE_TEXTURE3 = 19, D3DTRANSFORMSTATE_TEXTURE4 = 20, D3DTRANSFORMSTATE_TEXTURE5 = 21, D3DTRANSFORMSTATE_TEXTURE6 = 22, D3DTRANSFORMSTATE_TEXTURE7 = 23, #endif /* DIRECT3D_VERSION >= 0x0700 */ #if(DIRECT3D_VERSION >= 0x0500) D3DTRANSFORMSTATE_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ #endif /* DIRECT3D_VERSION >= 0x0500 */ } D3DTRANSFORMSTATETYPE; #else // // legacy transform state names // typedef enum _D3DTRANSFORMSTATETYPE D3DTRANSFORMSTATETYPE; #define D3DTRANSFORMSTATE_WORLD (D3DTRANSFORMSTATETYPE)1 #define D3DTRANSFORMSTATE_VIEW (D3DTRANSFORMSTATETYPE)2 #define D3DTRANSFORMSTATE_PROJECTION (D3DTRANSFORMSTATETYPE)3 #define D3DTRANSFORMSTATE_WORLD1 (D3DTRANSFORMSTATETYPE)4 #define D3DTRANSFORMSTATE_WORLD2 (D3DTRANSFORMSTATETYPE)5 #define D3DTRANSFORMSTATE_WORLD3 (D3DTRANSFORMSTATETYPE)6 #define D3DTRANSFORMSTATE_TEXTURE0 (D3DTRANSFORMSTATETYPE)16 #define D3DTRANSFORMSTATE_TEXTURE1 (D3DTRANSFORMSTATETYPE)17 #define D3DTRANSFORMSTATE_TEXTURE2 (D3DTRANSFORMSTATETYPE)18 #define D3DTRANSFORMSTATE_TEXTURE3 (D3DTRANSFORMSTATETYPE)19 #define D3DTRANSFORMSTATE_TEXTURE4 (D3DTRANSFORMSTATETYPE)20 #define D3DTRANSFORMSTATE_TEXTURE5 (D3DTRANSFORMSTATETYPE)21 #define D3DTRANSFORMSTATE_TEXTURE6 (D3DTRANSFORMSTATETYPE)22 #define D3DTRANSFORMSTATE_TEXTURE7 (D3DTRANSFORMSTATETYPE)23 #endif //(DIRECT3D_VERSION < 0x0800) typedef enum _D3DLIGHTSTATETYPE { D3DLIGHTSTATE_MATERIAL = 1, D3DLIGHTSTATE_AMBIENT = 2, D3DLIGHTSTATE_COLORMODEL = 3, D3DLIGHTSTATE_FOGMODE = 4, D3DLIGHTSTATE_FOGSTART = 5, D3DLIGHTSTATE_FOGEND = 6, D3DLIGHTSTATE_FOGDENSITY = 7, #if(DIRECT3D_VERSION >= 0x0600) D3DLIGHTSTATE_COLORVERTEX = 8, #endif /* DIRECT3D_VERSION >= 0x0600 */ #if(DIRECT3D_VERSION >= 0x0500) D3DLIGHTSTATE_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ #endif /* DIRECT3D_VERSION >= 0x0500 */ } D3DLIGHTSTATETYPE; #if(DIRECT3D_VERSION < 0x0800) typedef enum _D3DRENDERSTATETYPE { D3DRENDERSTATE_ANTIALIAS = 2, /* D3DANTIALIASMODE */ D3DRENDERSTATE_TEXTUREPERSPECTIVE = 4, /* TRUE for perspective correction */ D3DRENDERSTATE_ZENABLE = 7, /* D3DZBUFFERTYPE (or TRUE/FALSE for legacy) */ D3DRENDERSTATE_FILLMODE = 8, /* D3DFILL_MODE */ D3DRENDERSTATE_SHADEMODE = 9, /* D3DSHADEMODE */ D3DRENDERSTATE_LINEPATTERN = 10, /* D3DLINEPATTERN */ D3DRENDERSTATE_ZWRITEENABLE = 14, /* TRUE to enable z writes */ D3DRENDERSTATE_ALPHATESTENABLE = 15, /* TRUE to enable alpha tests */ D3DRENDERSTATE_LASTPIXEL = 16, /* TRUE for last-pixel on lines */ D3DRENDERSTATE_SRCBLEND = 19, /* D3DBLEND */ D3DRENDERSTATE_DESTBLEND = 20, /* D3DBLEND */ D3DRENDERSTATE_CULLMODE = 22, /* D3DCULL */ D3DRENDERSTATE_ZFUNC = 23, /* D3DCMPFUNC */ D3DRENDERSTATE_ALPHAREF = 24, /* D3DFIXED */ D3DRENDERSTATE_ALPHAFUNC = 25, /* D3DCMPFUNC */ D3DRENDERSTATE_DITHERENABLE = 26, /* TRUE to enable dithering */ #if(DIRECT3D_VERSION >= 0x0500) D3DRENDERSTATE_ALPHABLENDENABLE = 27, /* TRUE to enable alpha blending */ #endif /* DIRECT3D_VERSION >= 0x0500 */ D3DRENDERSTATE_FOGENABLE = 28, /* TRUE to enable fog blending */ D3DRENDERSTATE_SPECULARENABLE = 29, /* TRUE to enable specular */ D3DRENDERSTATE_ZVISIBLE = 30, /* TRUE to enable z checking */ D3DRENDERSTATE_STIPPLEDALPHA = 33, /* TRUE to enable stippled alpha (RGB device only) */ D3DRENDERSTATE_FOGCOLOR = 34, /* D3DCOLOR */ D3DRENDERSTATE_FOGTABLEMODE = 35, /* D3DFOGMODE */ #if(DIRECT3D_VERSION >= 0x0700) D3DRENDERSTATE_FOGSTART = 36, /* Fog start (for both vertex and pixel fog) */ D3DRENDERSTATE_FOGEND = 37, /* Fog end */ D3DRENDERSTATE_FOGDENSITY = 38, /* Fog density */ #endif /* DIRECT3D_VERSION >= 0x0700 */ #if(DIRECT3D_VERSION >= 0x0500) D3DRENDERSTATE_EDGEANTIALIAS = 40, /* TRUE to enable edge antialiasing */ D3DRENDERSTATE_COLORKEYENABLE = 41, /* TRUE to enable source colorkeyed textures */ D3DRENDERSTATE_ZBIAS = 47, /* LONG Z bias */ D3DRENDERSTATE_RANGEFOGENABLE = 48, /* Enables range-based fog */ #endif /* DIRECT3D_VERSION >= 0x0500 */ #if(DIRECT3D_VERSION >= 0x0600) D3DRENDERSTATE_STENCILENABLE = 52, /* BOOL enable/disable stenciling */ D3DRENDERSTATE_STENCILFAIL = 53, /* D3DSTENCILOP to do if stencil test fails */ D3DRENDERSTATE_STENCILZFAIL = 54, /* D3DSTENCILOP to do if stencil test passes and Z test fails */ D3DRENDERSTATE_STENCILPASS = 55, /* D3DSTENCILOP to do if both stencil and Z tests pass */ D3DRENDERSTATE_STENCILFUNC = 56, /* D3DCMPFUNC fn. Stencil Test passes if ((ref & mask) stencilfn (stencil & mask)) is true */ D3DRENDERSTATE_STENCILREF = 57, /* Reference value used in stencil test */ D3DRENDERSTATE_STENCILMASK = 58, /* Mask value used in stencil test */ D3DRENDERSTATE_STENCILWRITEMASK = 59, /* Write mask applied to values written to stencil buffer */ D3DRENDERSTATE_TEXTUREFACTOR = 60, /* D3DCOLOR used for multi-texture blend */ #endif /* DIRECT3D_VERSION >= 0x0600 */ #if(DIRECT3D_VERSION >= 0x0600) /* * 128 values [128, 255] are reserved for texture coordinate wrap flags. * These are constructed with the D3DWRAP_U and D3DWRAP_V macros. Using * a flags word preserves forward compatibility with texture coordinates * that are >2D. */ D3DRENDERSTATE_WRAP0 = 128, /* wrap for 1st texture coord. set */ D3DRENDERSTATE_WRAP1 = 129, /* wrap for 2nd texture coord. set */ D3DRENDERSTATE_WRAP2 = 130, /* wrap for 3rd texture coord. set */ D3DRENDERSTATE_WRAP3 = 131, /* wrap for 4th texture coord. set */ D3DRENDERSTATE_WRAP4 = 132, /* wrap for 5th texture coord. set */ D3DRENDERSTATE_WRAP5 = 133, /* wrap for 6th texture coord. set */ D3DRENDERSTATE_WRAP6 = 134, /* wrap for 7th texture coord. set */ D3DRENDERSTATE_WRAP7 = 135, /* wrap for 8th texture coord. set */ #endif /* DIRECT3D_VERSION >= 0x0600 */ #if(DIRECT3D_VERSION >= 0x0700) D3DRENDERSTATE_CLIPPING = 136, D3DRENDERSTATE_LIGHTING = 137, D3DRENDERSTATE_EXTENTS = 138, D3DRENDERSTATE_AMBIENT = 139, D3DRENDERSTATE_FOGVERTEXMODE = 140, D3DRENDERSTATE_COLORVERTEX = 141, D3DRENDERSTATE_LOCALVIEWER = 142, D3DRENDERSTATE_NORMALIZENORMALS = 143, D3DRENDERSTATE_COLORKEYBLENDENABLE = 144, D3DRENDERSTATE_DIFFUSEMATERIALSOURCE = 145, D3DRENDERSTATE_SPECULARMATERIALSOURCE = 146, D3DRENDERSTATE_AMBIENTMATERIALSOURCE = 147, D3DRENDERSTATE_EMISSIVEMATERIALSOURCE = 148, D3DRENDERSTATE_VERTEXBLEND = 151, D3DRENDERSTATE_CLIPPLANEENABLE = 152, #endif /* DIRECT3D_VERSION >= 0x0700 */ // // retired renderstates - not supported for DX7 interfaces // D3DRENDERSTATE_TEXTUREHANDLE = 1, /* Texture handle for legacy interfaces (Texture,Texture2) */ D3DRENDERSTATE_TEXTUREADDRESS = 3, /* D3DTEXTUREADDRESS */ D3DRENDERSTATE_WRAPU = 5, /* TRUE for wrapping in u */ D3DRENDERSTATE_WRAPV = 6, /* TRUE for wrapping in v */ D3DRENDERSTATE_MONOENABLE = 11, /* TRUE to enable mono rasterization */ D3DRENDERSTATE_ROP2 = 12, /* ROP2 */ D3DRENDERSTATE_PLANEMASK = 13, /* DWORD physical plane mask */ D3DRENDERSTATE_TEXTUREMAG = 17, /* D3DTEXTUREFILTER */ D3DRENDERSTATE_TEXTUREMIN = 18, /* D3DTEXTUREFILTER */ D3DRENDERSTATE_TEXTUREMAPBLEND = 21, /* D3DTEXTUREBLEND */ D3DRENDERSTATE_SUBPIXEL = 31, /* TRUE to enable subpixel correction */ D3DRENDERSTATE_SUBPIXELX = 32, /* TRUE to enable correction in X only */ D3DRENDERSTATE_STIPPLEENABLE = 39, /* TRUE to enable stippling */ #if(DIRECT3D_VERSION >= 0x0500) D3DRENDERSTATE_BORDERCOLOR = 43, /* Border color for texturing w/border */ D3DRENDERSTATE_TEXTUREADDRESSU = 44, /* Texture addressing mode for U coordinate */ D3DRENDERSTATE_TEXTUREADDRESSV = 45, /* Texture addressing mode for V coordinate */ D3DRENDERSTATE_MIPMAPLODBIAS = 46, /* D3DVALUE Mipmap LOD bias */ D3DRENDERSTATE_ANISOTROPY = 49, /* Max. anisotropy. 1 = no anisotropy */ #endif /* DIRECT3D_VERSION >= 0x0500 */ D3DRENDERSTATE_FLUSHBATCH = 50, /* Explicit flush for DP batching (DX5 Only) */ #if(DIRECT3D_VERSION >= 0x0600) D3DRENDERSTATE_TRANSLUCENTSORTINDEPENDENT=51, /* BOOL enable sort-independent transparency */ #endif /* DIRECT3D_VERSION >= 0x0600 */ D3DRENDERSTATE_STIPPLEPATTERN00 = 64, /* Stipple pattern 01... */ D3DRENDERSTATE_STIPPLEPATTERN01 = 65, D3DRENDERSTATE_STIPPLEPATTERN02 = 66, D3DRENDERSTATE_STIPPLEPATTERN03 = 67, D3DRENDERSTATE_STIPPLEPATTERN04 = 68, D3DRENDERSTATE_STIPPLEPATTERN05 = 69, D3DRENDERSTATE_STIPPLEPATTERN06 = 70, D3DRENDERSTATE_STIPPLEPATTERN07 = 71, D3DRENDERSTATE_STIPPLEPATTERN08 = 72, D3DRENDERSTATE_STIPPLEPATTERN09 = 73, D3DRENDERSTATE_STIPPLEPATTERN10 = 74, D3DRENDERSTATE_STIPPLEPATTERN11 = 75, D3DRENDERSTATE_STIPPLEPATTERN12 = 76, D3DRENDERSTATE_STIPPLEPATTERN13 = 77, D3DRENDERSTATE_STIPPLEPATTERN14 = 78, D3DRENDERSTATE_STIPPLEPATTERN15 = 79, D3DRENDERSTATE_STIPPLEPATTERN16 = 80, D3DRENDERSTATE_STIPPLEPATTERN17 = 81, D3DRENDERSTATE_STIPPLEPATTERN18 = 82, D3DRENDERSTATE_STIPPLEPATTERN19 = 83, D3DRENDERSTATE_STIPPLEPATTERN20 = 84, D3DRENDERSTATE_STIPPLEPATTERN21 = 85, D3DRENDERSTATE_STIPPLEPATTERN22 = 86, D3DRENDERSTATE_STIPPLEPATTERN23 = 87, D3DRENDERSTATE_STIPPLEPATTERN24 = 88, D3DRENDERSTATE_STIPPLEPATTERN25 = 89, D3DRENDERSTATE_STIPPLEPATTERN26 = 90, D3DRENDERSTATE_STIPPLEPATTERN27 = 91, D3DRENDERSTATE_STIPPLEPATTERN28 = 92, D3DRENDERSTATE_STIPPLEPATTERN29 = 93, D3DRENDERSTATE_STIPPLEPATTERN30 = 94, D3DRENDERSTATE_STIPPLEPATTERN31 = 95, // // retired renderstate names - the values are still used under new naming conventions // D3DRENDERSTATE_FOGTABLESTART = 36, /* Fog table start */ D3DRENDERSTATE_FOGTABLEEND = 37, /* Fog table end */ D3DRENDERSTATE_FOGTABLEDENSITY = 38, /* Fog table density */ #if(DIRECT3D_VERSION >= 0x0500) D3DRENDERSTATE_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ #endif /* DIRECT3D_VERSION >= 0x0500 */ } D3DRENDERSTATETYPE; #else typedef enum _D3DRENDERSTATETYPE D3DRENDERSTATETYPE; // // legacy renderstate names // #define D3DRENDERSTATE_TEXTUREPERSPECTIVE (D3DRENDERSTATETYPE)4 #define D3DRENDERSTATE_ZENABLE (D3DRENDERSTATETYPE)7 #define D3DRENDERSTATE_FILLMODE (D3DRENDERSTATETYPE)8 #define D3DRENDERSTATE_SHADEMODE (D3DRENDERSTATETYPE)9 #define D3DRENDERSTATE_LINEPATTERN (D3DRENDERSTATETYPE)10 #define D3DRENDERSTATE_ZWRITEENABLE (D3DRENDERSTATETYPE)14 #define D3DRENDERSTATE_ALPHATESTENABLE (D3DRENDERSTATETYPE)15 #define D3DRENDERSTATE_LASTPIXEL (D3DRENDERSTATETYPE)16 #define D3DRENDERSTATE_SRCBLEND (D3DRENDERSTATETYPE)19 #define D3DRENDERSTATE_DESTBLEND (D3DRENDERSTATETYPE)20 #define D3DRENDERSTATE_CULLMODE (D3DRENDERSTATETYPE)22 #define D3DRENDERSTATE_ZFUNC (D3DRENDERSTATETYPE)23 #define D3DRENDERSTATE_ALPHAREF (D3DRENDERSTATETYPE)24 #define D3DRENDERSTATE_ALPHAFUNC (D3DRENDERSTATETYPE)25 #define D3DRENDERSTATE_DITHERENABLE (D3DRENDERSTATETYPE)26 #define D3DRENDERSTATE_ALPHABLENDENABLE (D3DRENDERSTATETYPE)27 #define D3DRENDERSTATE_FOGENABLE (D3DRENDERSTATETYPE)28 #define D3DRENDERSTATE_SPECULARENABLE (D3DRENDERSTATETYPE)29 #define D3DRENDERSTATE_ZVISIBLE (D3DRENDERSTATETYPE)30 #define D3DRENDERSTATE_STIPPLEDALPHA (D3DRENDERSTATETYPE)33 #define D3DRENDERSTATE_FOGCOLOR (D3DRENDERSTATETYPE)34 #define D3DRENDERSTATE_FOGTABLEMODE (D3DRENDERSTATETYPE)35 #define D3DRENDERSTATE_FOGSTART (D3DRENDERSTATETYPE)36 #define D3DRENDERSTATE_FOGEND (D3DRENDERSTATETYPE)37 #define D3DRENDERSTATE_FOGDENSITY (D3DRENDERSTATETYPE)38 #define D3DRENDERSTATE_EDGEANTIALIAS (D3DRENDERSTATETYPE)40 #define D3DRENDERSTATE_ZBIAS (D3DRENDERSTATETYPE)47 #define D3DRENDERSTATE_RANGEFOGENABLE (D3DRENDERSTATETYPE)48 #define D3DRENDERSTATE_STENCILENABLE (D3DRENDERSTATETYPE)52 #define D3DRENDERSTATE_STENCILFAIL (D3DRENDERSTATETYPE)53 #define D3DRENDERSTATE_STENCILZFAIL (D3DRENDERSTATETYPE)54 #define D3DRENDERSTATE_STENCILPASS (D3DRENDERSTATETYPE)55 #define D3DRENDERSTATE_STENCILFUNC (D3DRENDERSTATETYPE)56 #define D3DRENDERSTATE_STENCILREF (D3DRENDERSTATETYPE)57 #define D3DRENDERSTATE_STENCILMASK (D3DRENDERSTATETYPE)58 #define D3DRENDERSTATE_STENCILWRITEMASK (D3DRENDERSTATETYPE)59 #define D3DRENDERSTATE_TEXTUREFACTOR (D3DRENDERSTATETYPE)60 #define D3DRENDERSTATE_WRAP0 (D3DRENDERSTATETYPE)128 #define D3DRENDERSTATE_WRAP1 (D3DRENDERSTATETYPE)129 #define D3DRENDERSTATE_WRAP2 (D3DRENDERSTATETYPE)130 #define D3DRENDERSTATE_WRAP3 (D3DRENDERSTATETYPE)131 #define D3DRENDERSTATE_WRAP4 (D3DRENDERSTATETYPE)132 #define D3DRENDERSTATE_WRAP5 (D3DRENDERSTATETYPE)133 #define D3DRENDERSTATE_WRAP6 (D3DRENDERSTATETYPE)134 #define D3DRENDERSTATE_WRAP7 (D3DRENDERSTATETYPE)135 #define D3DRENDERSTATE_CLIPPING (D3DRENDERSTATETYPE)136 #define D3DRENDERSTATE_LIGHTING (D3DRENDERSTATETYPE)137 #define D3DRENDERSTATE_EXTENTS (D3DRENDERSTATETYPE)138 #define D3DRENDERSTATE_AMBIENT (D3DRENDERSTATETYPE)139 #define D3DRENDERSTATE_FOGVERTEXMODE (D3DRENDERSTATETYPE)140 #define D3DRENDERSTATE_COLORVERTEX (D3DRENDERSTATETYPE)141 #define D3DRENDERSTATE_LOCALVIEWER (D3DRENDERSTATETYPE)142 #define D3DRENDERSTATE_NORMALIZENORMALS (D3DRENDERSTATETYPE)143 #define D3DRENDERSTATE_COLORKEYBLENDENABLE (D3DRENDERSTATETYPE)144 #define D3DRENDERSTATE_DIFFUSEMATERIALSOURCE (D3DRENDERSTATETYPE)145 #define D3DRENDERSTATE_SPECULARMATERIALSOURCE (D3DRENDERSTATETYPE)146 #define D3DRENDERSTATE_AMBIENTMATERIALSOURCE (D3DRENDERSTATETYPE)147 #define D3DRENDERSTATE_EMISSIVEMATERIALSOURCE (D3DRENDERSTATETYPE)148 #define D3DRENDERSTATE_VERTEXBLEND (D3DRENDERSTATETYPE)151 #define D3DRENDERSTATE_CLIPPLANEENABLE (D3DRENDERSTATETYPE)152 // // retired renderstates - not supported for DX7 interfaces // #define D3DRENDERSTATE_TEXTUREHANDLE (D3DRENDERSTATETYPE)1 #define D3DRENDERSTATE_ANTIALIAS (D3DRENDERSTATETYPE)2 #define D3DRENDERSTATE_TEXTUREADDRESS (D3DRENDERSTATETYPE)3 #define D3DRENDERSTATE_WRAPU (D3DRENDERSTATETYPE)5 #define D3DRENDERSTATE_WRAPV (D3DRENDERSTATETYPE)6 #define D3DRENDERSTATE_MONOENABLE (D3DRENDERSTATETYPE)11 #define D3DRENDERSTATE_ROP2 (D3DRENDERSTATETYPE)12 #define D3DRENDERSTATE_PLANEMASK (D3DRENDERSTATETYPE)13 #define D3DRENDERSTATE_TEXTUREMAG (D3DRENDERSTATETYPE)17 #define D3DRENDERSTATE_TEXTUREMIN (D3DRENDERSTATETYPE)18 #define D3DRENDERSTATE_TEXTUREMAPBLEND (D3DRENDERSTATETYPE)21 #define D3DRENDERSTATE_SUBPIXEL (D3DRENDERSTATETYPE)31 #define D3DRENDERSTATE_SUBPIXELX (D3DRENDERSTATETYPE)32 #define D3DRENDERSTATE_STIPPLEENABLE (D3DRENDERSTATETYPE)39 #define D3DRENDERSTATE_OLDALPHABLENDENABLE (D3DRENDERSTATETYPE)42 #define D3DRENDERSTATE_BORDERCOLOR (D3DRENDERSTATETYPE)43 #define D3DRENDERSTATE_TEXTUREADDRESSU (D3DRENDERSTATETYPE)44 #define D3DRENDERSTATE_TEXTUREADDRESSV (D3DRENDERSTATETYPE)45 #define D3DRENDERSTATE_MIPMAPLODBIAS (D3DRENDERSTATETYPE)46 #define D3DRENDERSTATE_ANISOTROPY (D3DRENDERSTATETYPE)49 #define D3DRENDERSTATE_FLUSHBATCH (D3DRENDERSTATETYPE)50 #define D3DRENDERSTATE_TRANSLUCENTSORTINDEPENDENT (D3DRENDERSTATETYPE)51 #define D3DRENDERSTATE_STIPPLEPATTERN00 (D3DRENDERSTATETYPE)64 #define D3DRENDERSTATE_STIPPLEPATTERN01 (D3DRENDERSTATETYPE)65 #define D3DRENDERSTATE_STIPPLEPATTERN02 (D3DRENDERSTATETYPE)66 #define D3DRENDERSTATE_STIPPLEPATTERN03 (D3DRENDERSTATETYPE)67 #define D3DRENDERSTATE_STIPPLEPATTERN04 (D3DRENDERSTATETYPE)68 #define D3DRENDERSTATE_STIPPLEPATTERN05 (D3DRENDERSTATETYPE)69 #define D3DRENDERSTATE_STIPPLEPATTERN06 (D3DRENDERSTATETYPE)70 #define D3DRENDERSTATE_STIPPLEPATTERN07 (D3DRENDERSTATETYPE)71 #define D3DRENDERSTATE_STIPPLEPATTERN08 (D3DRENDERSTATETYPE)72 #define D3DRENDERSTATE_STIPPLEPATTERN09 (D3DRENDERSTATETYPE)73 #define D3DRENDERSTATE_STIPPLEPATTERN10 (D3DRENDERSTATETYPE)74 #define D3DRENDERSTATE_STIPPLEPATTERN11 (D3DRENDERSTATETYPE)75 #define D3DRENDERSTATE_STIPPLEPATTERN12 (D3DRENDERSTATETYPE)76 #define D3DRENDERSTATE_STIPPLEPATTERN13 (D3DRENDERSTATETYPE)77 #define D3DRENDERSTATE_STIPPLEPATTERN14 (D3DRENDERSTATETYPE)78 #define D3DRENDERSTATE_STIPPLEPATTERN15 (D3DRENDERSTATETYPE)79 #define D3DRENDERSTATE_STIPPLEPATTERN16 (D3DRENDERSTATETYPE)80 #define D3DRENDERSTATE_STIPPLEPATTERN17 (D3DRENDERSTATETYPE)81 #define D3DRENDERSTATE_STIPPLEPATTERN18 (D3DRENDERSTATETYPE)82 #define D3DRENDERSTATE_STIPPLEPATTERN19 (D3DRENDERSTATETYPE)83 #define D3DRENDERSTATE_STIPPLEPATTERN20 (D3DRENDERSTATETYPE)84 #define D3DRENDERSTATE_STIPPLEPATTERN21 (D3DRENDERSTATETYPE)85 #define D3DRENDERSTATE_STIPPLEPATTERN22 (D3DRENDERSTATETYPE)86 #define D3DRENDERSTATE_STIPPLEPATTERN23 (D3DRENDERSTATETYPE)87 #define D3DRENDERSTATE_STIPPLEPATTERN24 (D3DRENDERSTATETYPE)88 #define D3DRENDERSTATE_STIPPLEPATTERN25 (D3DRENDERSTATETYPE)89 #define D3DRENDERSTATE_STIPPLEPATTERN26 (D3DRENDERSTATETYPE)90 #define D3DRENDERSTATE_STIPPLEPATTERN27 (D3DRENDERSTATETYPE)91 #define D3DRENDERSTATE_STIPPLEPATTERN28 (D3DRENDERSTATETYPE)92 #define D3DRENDERSTATE_STIPPLEPATTERN29 (D3DRENDERSTATETYPE)93 #define D3DRENDERSTATE_STIPPLEPATTERN30 (D3DRENDERSTATETYPE)94 #define D3DRENDERSTATE_STIPPLEPATTERN31 (D3DRENDERSTATETYPE)95 // // retired renderstates - not supported for DX8 interfaces // #define D3DRENDERSTATE_COLORKEYENABLE (D3DRENDERSTATETYPE)41 #define D3DRENDERSTATE_COLORKEYBLENDENABLE (D3DRENDERSTATETYPE)144 // // retired renderstate names - the values are still used under new naming conventions // #define D3DRENDERSTATE_BLENDENABLE (D3DRENDERSTATETYPE)27 #define D3DRENDERSTATE_FOGTABLESTART (D3DRENDERSTATETYPE)36 #define D3DRENDERSTATE_FOGTABLEEND (D3DRENDERSTATETYPE)37 #define D3DRENDERSTATE_FOGTABLEDENSITY (D3DRENDERSTATETYPE)38 #endif //(DIRECT3D_VERSION < 0x0800) #if(DIRECT3D_VERSION < 0x0800) // Values for material source typedef enum _D3DMATERIALCOLORSOURCE { D3DMCS_MATERIAL = 0, // Color from material is used D3DMCS_COLOR1 = 1, // Diffuse vertex color is used D3DMCS_COLOR2 = 2, // Specular vertex color is used D3DMCS_FORCE_DWORD = 0x7fffffff, // force 32-bit size enum } D3DMATERIALCOLORSOURCE; #if(DIRECT3D_VERSION >= 0x0500) // For back-compatibility with legacy compilations #define D3DRENDERSTATE_BLENDENABLE D3DRENDERSTATE_ALPHABLENDENABLE #endif /* DIRECT3D_VERSION >= 0x0500 */ #if(DIRECT3D_VERSION >= 0x0600) // Bias to apply to the texture coordinate set to apply a wrap to. #define D3DRENDERSTATE_WRAPBIAS 128UL /* Flags to construct the WRAP render states */ #define D3DWRAP_U 0x00000001L #define D3DWRAP_V 0x00000002L #endif /* DIRECT3D_VERSION >= 0x0600 */ #if(DIRECT3D_VERSION >= 0x0700) /* Flags to construct the WRAP render states for 1D thru 4D texture coordinates */ #define D3DWRAPCOORD_0 0x00000001L // same as D3DWRAP_U #define D3DWRAPCOORD_1 0x00000002L // same as D3DWRAP_V #define D3DWRAPCOORD_2 0x00000004L #define D3DWRAPCOORD_3 0x00000008L #endif /* DIRECT3D_VERSION >= 0x0700 */ #endif //(DIRECT3D_VERSION < 0x0800) #define D3DRENDERSTATE_STIPPLEPATTERN(y) (D3DRENDERSTATE_STIPPLEPATTERN00 + (y)) typedef struct _D3DSTATE { union { #if(DIRECT3D_VERSION < 0x0800) D3DTRANSFORMSTATETYPE dtstTransformStateType; #endif //(DIRECT3D_VERSION < 0x0800) D3DLIGHTSTATETYPE dlstLightStateType; D3DRENDERSTATETYPE drstRenderStateType; }; union { DWORD dwArg[1]; D3DVALUE dvArg[1]; }; } D3DSTATE, *LPD3DSTATE; /* * Operation used to load matrices * hDstMat = hSrcMat */ typedef struct _D3DMATRIXLOAD { D3DMATRIXHANDLE hDestMatrix; /* Destination matrix */ D3DMATRIXHANDLE hSrcMatrix; /* Source matrix */ } D3DMATRIXLOAD, *LPD3DMATRIXLOAD; /* * Operation used to multiply matrices * hDstMat = hSrcMat1 * hSrcMat2 */ typedef struct _D3DMATRIXMULTIPLY { D3DMATRIXHANDLE hDestMatrix; /* Destination matrix */ D3DMATRIXHANDLE hSrcMatrix1; /* First source matrix */ D3DMATRIXHANDLE hSrcMatrix2; /* Second source matrix */ } D3DMATRIXMULTIPLY, *LPD3DMATRIXMULTIPLY; /* * Operation used to transform and light vertices. */ typedef struct _D3DPROCESSVERTICES { DWORD dwFlags; /* Do we transform or light or just copy? */ WORD wStart; /* Index to first vertex in source */ WORD wDest; /* Index to first vertex in local buffer */ DWORD dwCount; /* Number of vertices to be processed */ DWORD dwReserved; /* Must be zero */ } D3DPROCESSVERTICES, *LPD3DPROCESSVERTICES; #define D3DPROCESSVERTICES_TRANSFORMLIGHT 0x00000000L #define D3DPROCESSVERTICES_TRANSFORM 0x00000001L #define D3DPROCESSVERTICES_COPY 0x00000002L #define D3DPROCESSVERTICES_OPMASK 0x00000007L #define D3DPROCESSVERTICES_UPDATEEXTENTS 0x00000008L #define D3DPROCESSVERTICES_NOCOLOR 0x00000010L #if(DIRECT3D_VERSION >= 0x0600) #if(DIRECT3D_VERSION < 0x0800) /* * State enumerants for per-stage texture processing. */ typedef enum _D3DTEXTURESTAGESTATETYPE { D3DTSS_COLOROP = 1, /* D3DTEXTUREOP - per-stage blending controls for color channels */ D3DTSS_COLORARG1 = 2, /* D3DTA_* (texture arg) */ D3DTSS_COLORARG2 = 3, /* D3DTA_* (texture arg) */ D3DTSS_ALPHAOP = 4, /* D3DTEXTUREOP - per-stage blending controls for alpha channel */ D3DTSS_ALPHAARG1 = 5, /* D3DTA_* (texture arg) */ D3DTSS_ALPHAARG2 = 6, /* D3DTA_* (texture arg) */ D3DTSS_BUMPENVMAT00 = 7, /* D3DVALUE (bump mapping matrix) */ D3DTSS_BUMPENVMAT01 = 8, /* D3DVALUE (bump mapping matrix) */ D3DTSS_BUMPENVMAT10 = 9, /* D3DVALUE (bump mapping matrix) */ D3DTSS_BUMPENVMAT11 = 10, /* D3DVALUE (bump mapping matrix) */ D3DTSS_TEXCOORDINDEX = 11, /* identifies which set of texture coordinates index this texture */ D3DTSS_ADDRESS = 12, /* D3DTEXTUREADDRESS for both coordinates */ D3DTSS_ADDRESSU = 13, /* D3DTEXTUREADDRESS for U coordinate */ D3DTSS_ADDRESSV = 14, /* D3DTEXTUREADDRESS for V coordinate */ D3DTSS_BORDERCOLOR = 15, /* D3DCOLOR */ D3DTSS_MAGFILTER = 16, /* D3DTEXTUREMAGFILTER filter to use for magnification */ D3DTSS_MINFILTER = 17, /* D3DTEXTUREMINFILTER filter to use for minification */ D3DTSS_MIPFILTER = 18, /* D3DTEXTUREMIPFILTER filter to use between mipmaps during minification */ D3DTSS_MIPMAPLODBIAS = 19, /* D3DVALUE Mipmap LOD bias */ D3DTSS_MAXMIPLEVEL = 20, /* DWORD 0..(n-1) LOD index of largest map to use (0 == largest) */ D3DTSS_MAXANISOTROPY = 21, /* DWORD maximum anisotropy */ D3DTSS_BUMPENVLSCALE = 22, /* D3DVALUE scale for bump map luminance */ D3DTSS_BUMPENVLOFFSET = 23, /* D3DVALUE offset for bump map luminance */ #if(DIRECT3D_VERSION >= 0x0700) D3DTSS_TEXTURETRANSFORMFLAGS = 24, /* D3DTEXTURETRANSFORMFLAGS controls texture transform */ #endif /* DIRECT3D_VERSION >= 0x0700 */ D3DTSS_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ } D3DTEXTURESTAGESTATETYPE; #if(DIRECT3D_VERSION >= 0x0700) // Values, used with D3DTSS_TEXCOORDINDEX, to specify that the vertex data(position // and normal in the camera space) should be taken as texture coordinates // Low 16 bits are used to specify texture coordinate index, to take the WRAP mode from // #define D3DTSS_TCI_PASSTHRU 0x00000000 #define D3DTSS_TCI_CAMERASPACENORMAL 0x00010000 #define D3DTSS_TCI_CAMERASPACEPOSITION 0x00020000 #define D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR 0x00030000 #endif /* DIRECT3D_VERSION >= 0x0700 */ /* * Enumerations for COLOROP and ALPHAOP texture blending operations set in * texture processing stage controls in D3DRENDERSTATE. */ typedef enum _D3DTEXTUREOP { // Control D3DTOP_DISABLE = 1, // disables stage D3DTOP_SELECTARG1 = 2, // the default D3DTOP_SELECTARG2 = 3, // Modulate D3DTOP_MODULATE = 4, // multiply args together D3DTOP_MODULATE2X = 5, // multiply and 1 bit D3DTOP_MODULATE4X = 6, // multiply and 2 bits // Add D3DTOP_ADD = 7, // add arguments together D3DTOP_ADDSIGNED = 8, // add with -0.5 bias D3DTOP_ADDSIGNED2X = 9, // as above but left 1 bit D3DTOP_SUBTRACT = 10, // Arg1 - Arg2, with no saturation D3DTOP_ADDSMOOTH = 11, // add 2 args, subtract product // Arg1 + Arg2 - Arg1*Arg2 // = Arg1 + (1-Arg1)*Arg2 // Linear alpha blend: Arg1*(Alpha) + Arg2*(1-Alpha) D3DTOP_BLENDDIFFUSEALPHA = 12, // iterated alpha D3DTOP_BLENDTEXTUREALPHA = 13, // texture alpha D3DTOP_BLENDFACTORALPHA = 14, // alpha from D3DRENDERSTATE_TEXTUREFACTOR // Linear alpha blend with pre-multiplied arg1 input: Arg1 + Arg2*(1-Alpha) D3DTOP_BLENDTEXTUREALPHAPM = 15, // texture alpha D3DTOP_BLENDCURRENTALPHA = 16, // by alpha of current color // Specular mapping D3DTOP_PREMODULATE = 17, // modulate with next texture before use D3DTOP_MODULATEALPHA_ADDCOLOR = 18, // Arg1.RGB + Arg1.A*Arg2.RGB // COLOROP only D3DTOP_MODULATECOLOR_ADDALPHA = 19, // Arg1.RGB*Arg2.RGB + Arg1.A // COLOROP only D3DTOP_MODULATEINVALPHA_ADDCOLOR = 20, // (1-Arg1.A)*Arg2.RGB + Arg1.RGB // COLOROP only D3DTOP_MODULATEINVCOLOR_ADDALPHA = 21, // (1-Arg1.RGB)*Arg2.RGB + Arg1.A // COLOROP only // Bump mapping D3DTOP_BUMPENVMAP = 22, // per pixel env map perturbation D3DTOP_BUMPENVMAPLUMINANCE = 23, // with luminance channel // This can do either diffuse or specular bump mapping with correct input. // Performs the function (Arg1.R*Arg2.R + Arg1.G*Arg2.G + Arg1.B*Arg2.B) // where each component has been scaled and offset to make it signed. // The result is replicated into all four (including alpha) channels. // This is a valid COLOROP only. D3DTOP_DOTPRODUCT3 = 24, D3DTOP_FORCE_DWORD = 0x7fffffff, } D3DTEXTUREOP; /* * Values for COLORARG1,2 and ALPHAARG1,2 texture blending operations * set in texture processing stage controls in D3DRENDERSTATE. */ #define D3DTA_SELECTMASK 0x0000000f // mask for arg selector #define D3DTA_DIFFUSE 0x00000000 // select diffuse color #define D3DTA_CURRENT 0x00000001 // select result of previous stage #define D3DTA_TEXTURE 0x00000002 // select texture color #define D3DTA_TFACTOR 0x00000003 // select RENDERSTATE_TEXTUREFACTOR #if(DIRECT3D_VERSION >= 0x0700) #define D3DTA_SPECULAR 0x00000004 // select specular color #endif /* DIRECT3D_VERSION >= 0x0700 */ #define D3DTA_COMPLEMENT 0x00000010 // take 1.0 - x #define D3DTA_ALPHAREPLICATE 0x00000020 // replicate alpha to color components #endif //(DIRECT3D_VERSION < 0x0800) /* * IDirect3DTexture2 State Filter Types */ typedef enum _D3DTEXTUREMAGFILTER { D3DTFG_POINT = 1, // nearest D3DTFG_LINEAR = 2, // linear interpolation D3DTFG_FLATCUBIC = 3, // cubic D3DTFG_GAUSSIANCUBIC = 4, // different cubic kernel D3DTFG_ANISOTROPIC = 5, // #if(DIRECT3D_VERSION >= 0x0700) #endif /* DIRECT3D_VERSION >= 0x0700 */ D3DTFG_FORCE_DWORD = 0x7fffffff, // force 32-bit size enum } D3DTEXTUREMAGFILTER; typedef enum _D3DTEXTUREMINFILTER { D3DTFN_POINT = 1, // nearest D3DTFN_LINEAR = 2, // linear interpolation D3DTFN_ANISOTROPIC = 3, // D3DTFN_FORCE_DWORD = 0x7fffffff, // force 32-bit size enum } D3DTEXTUREMINFILTER; typedef enum _D3DTEXTUREMIPFILTER { D3DTFP_NONE = 1, // mipmapping disabled (use MAG filter) D3DTFP_POINT = 2, // nearest D3DTFP_LINEAR = 3, // linear interpolation D3DTFP_FORCE_DWORD = 0x7fffffff, // force 32-bit size enum } D3DTEXTUREMIPFILTER; #endif /* DIRECT3D_VERSION >= 0x0600 */ /* * Triangle flags */ /* * Tri strip and fan flags. * START loads all three vertices * EVEN and ODD load just v3 with even or odd culling * START_FLAT contains a count from 0 to 29 that allows the * whole strip or fan to be culled in one hit. * e.g. for a quad len = 1 */ #define D3DTRIFLAG_START 0x00000000L #define D3DTRIFLAG_STARTFLAT(len) (len) /* 0 < len < 30 */ #define D3DTRIFLAG_ODD 0x0000001eL #define D3DTRIFLAG_EVEN 0x0000001fL /* * Triangle edge flags * enable edges for wireframe or antialiasing */ #define D3DTRIFLAG_EDGEENABLE1 0x00000100L /* v0-v1 edge */ #define D3DTRIFLAG_EDGEENABLE2 0x00000200L /* v1-v2 edge */ #define D3DTRIFLAG_EDGEENABLE3 0x00000400L /* v2-v0 edge */ #define D3DTRIFLAG_EDGEENABLETRIANGLE \ (D3DTRIFLAG_EDGEENABLE1 | D3DTRIFLAG_EDGEENABLE2 | D3DTRIFLAG_EDGEENABLE3) /* * Primitive structures and related defines. Vertex offsets are to types * D3DVERTEX, D3DLVERTEX, or D3DTLVERTEX. */ /* * Triangle list primitive structure */ typedef struct _D3DTRIANGLE { union { WORD v1; /* Vertex indices */ WORD wV1; }; union { WORD v2; WORD wV2; }; union { WORD v3; WORD wV3; }; WORD wFlags; /* Edge (and other) flags */ } D3DTRIANGLE, *LPD3DTRIANGLE; /* * Line list structure. * The instruction count defines the number of line segments. */ typedef struct _D3DLINE { union { WORD v1; /* Vertex indices */ WORD wV1; }; union { WORD v2; WORD wV2; }; } D3DLINE, *LPD3DLINE; /* * Span structure * Spans join a list of points with the same y value. * If the y value changes, a new span is started. */ typedef struct _D3DSPAN { WORD wCount; /* Number of spans */ WORD wFirst; /* Index to first vertex */ } D3DSPAN, *LPD3DSPAN; /* * Point structure */ typedef struct _D3DPOINT { WORD wCount; /* number of points */ WORD wFirst; /* index to first vertex */ } D3DPOINT, *LPD3DPOINT; /* * Forward branch structure. * Mask is logically anded with the driver status mask * if the result equals 'value', the branch is taken. */ typedef struct _D3DBRANCH { DWORD dwMask; /* Bitmask against D3D status */ DWORD dwValue; BOOL bNegate; /* TRUE to negate comparison */ DWORD dwOffset; /* How far to branch forward (0 for exit)*/ } D3DBRANCH, *LPD3DBRANCH; /* * Status used for set status instruction. * The D3D status is initialised on device creation * and is modified by all execute calls. */ typedef struct _D3DSTATUS { DWORD dwFlags; /* Do we set extents or status */ DWORD dwStatus; /* D3D status */ D3DRECT drExtent; } D3DSTATUS, *LPD3DSTATUS; #define D3DSETSTATUS_STATUS 0x00000001L #define D3DSETSTATUS_EXTENTS 0x00000002L #define D3DSETSTATUS_ALL (D3DSETSTATUS_STATUS | D3DSETSTATUS_EXTENTS) #if(DIRECT3D_VERSION >= 0x0500) typedef struct _D3DCLIPSTATUS { DWORD dwFlags; /* Do we set 2d extents, 3D extents or status */ DWORD dwStatus; /* Clip status */ float minx, maxx; /* X extents */ float miny, maxy; /* Y extents */ float minz, maxz; /* Z extents */ } D3DCLIPSTATUS, *LPD3DCLIPSTATUS; #define D3DCLIPSTATUS_STATUS 0x00000001L #define D3DCLIPSTATUS_EXTENTS2 0x00000002L #define D3DCLIPSTATUS_EXTENTS3 0x00000004L #endif /* DIRECT3D_VERSION >= 0x0500 */ /* * Statistics structure */ typedef struct _D3DSTATS { DWORD dwSize; DWORD dwTrianglesDrawn; DWORD dwLinesDrawn; DWORD dwPointsDrawn; DWORD dwSpansDrawn; DWORD dwVerticesProcessed; } D3DSTATS, *LPD3DSTATS; /* * Execute options. * When calling using D3DEXECUTE_UNCLIPPED all the primitives * inside the buffer must be contained within the viewport. */ #define D3DEXECUTE_CLIPPED 0x00000001l #define D3DEXECUTE_UNCLIPPED 0x00000002l typedef struct _D3DEXECUTEDATA { DWORD dwSize; DWORD dwVertexOffset; DWORD dwVertexCount; DWORD dwInstructionOffset; DWORD dwInstructionLength; DWORD dwHVertexOffset; D3DSTATUS dsStatus; /* Status after execute */ } D3DEXECUTEDATA, *LPD3DEXECUTEDATA; /* * Palette flags. * This are or'ed with the peFlags in the PALETTEENTRYs passed to DirectDraw. */ #define D3DPAL_FREE 0x00 /* Renderer may use this entry freely */ #define D3DPAL_READONLY 0x40 /* Renderer may not set this entry */ #define D3DPAL_RESERVED 0x80 /* Renderer may not use this entry */ #if(DIRECT3D_VERSION >= 0x0600) typedef struct _D3DVERTEXBUFFERDESC { DWORD dwSize; DWORD dwCaps; DWORD dwFVF; DWORD dwNumVertices; } D3DVERTEXBUFFERDESC, *LPD3DVERTEXBUFFERDESC; #define D3DVBCAPS_SYSTEMMEMORY 0x00000800l #define D3DVBCAPS_WRITEONLY 0x00010000l #define D3DVBCAPS_OPTIMIZED 0x80000000l #define D3DVBCAPS_DONOTCLIP 0x00000001l /* Vertex Operations for ProcessVertices */ #define D3DVOP_LIGHT (1 << 10) #define D3DVOP_TRANSFORM (1 << 0) #define D3DVOP_CLIP (1 << 2) #define D3DVOP_EXTENTS (1 << 3) #if(DIRECT3D_VERSION < 0x0800) /* The maximum number of vertices user can pass to any d3d drawing function or to create vertex buffer with */ #define D3DMAXNUMVERTICES ((1<<16) - 1) /* The maximum number of primitives user can pass to any d3d drawing function. */ #define D3DMAXNUMPRIMITIVES ((1<<16) - 1) #if(DIRECT3D_VERSION >= 0x0700) /* Bits for dwFlags in ProcessVertices call */ #define D3DPV_DONOTCOPYDATA (1 << 0) #endif /* DIRECT3D_VERSION >= 0x0700 */ #endif //(DIRECT3D_VERSION < 0x0800) //------------------------------------------------------------------- #if(DIRECT3D_VERSION < 0x0800) // Flexible vertex format bits // #define D3DFVF_RESERVED0 0x001 #define D3DFVF_POSITION_MASK 0x00E #define D3DFVF_XYZ 0x002 #define D3DFVF_XYZRHW 0x004 #if(DIRECT3D_VERSION >= 0x0700) #define D3DFVF_XYZB1 0x006 #define D3DFVF_XYZB2 0x008 #define D3DFVF_XYZB3 0x00a #define D3DFVF_XYZB4 0x00c #define D3DFVF_XYZB5 0x00e #endif /* DIRECT3D_VERSION >= 0x0700 */ #define D3DFVF_NORMAL 0x010 #define D3DFVF_RESERVED1 0x020 #define D3DFVF_DIFFUSE 0x040 #define D3DFVF_SPECULAR 0x080 #define D3DFVF_TEXCOUNT_MASK 0xf00 #define D3DFVF_TEXCOUNT_SHIFT 8 #define D3DFVF_TEX0 0x000 #define D3DFVF_TEX1 0x100 #define D3DFVF_TEX2 0x200 #define D3DFVF_TEX3 0x300 #define D3DFVF_TEX4 0x400 #define D3DFVF_TEX5 0x500 #define D3DFVF_TEX6 0x600 #define D3DFVF_TEX7 0x700 #define D3DFVF_TEX8 0x800 #define D3DFVF_RESERVED2 0xf000 // 4 reserved bits #else #define D3DFVF_RESERVED1 0x020 #endif //(DIRECT3D_VERSION < 0x0800) #define D3DFVF_VERTEX ( D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_TEX1 ) #define D3DFVF_LVERTEX ( D3DFVF_XYZ | D3DFVF_RESERVED1 | D3DFVF_DIFFUSE | \ D3DFVF_SPECULAR | D3DFVF_TEX1 ) #define D3DFVF_TLVERTEX ( D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | \ D3DFVF_TEX1 ) typedef struct _D3DDP_PTRSTRIDE { LPVOID lpvData; DWORD dwStride; } D3DDP_PTRSTRIDE; #define D3DDP_MAXTEXCOORD 8 typedef struct _D3DDRAWPRIMITIVESTRIDEDDATA { D3DDP_PTRSTRIDE position; D3DDP_PTRSTRIDE normal; D3DDP_PTRSTRIDE diffuse; D3DDP_PTRSTRIDE specular; D3DDP_PTRSTRIDE textureCoords[D3DDP_MAXTEXCOORD]; } D3DDRAWPRIMITIVESTRIDEDDATA, *LPD3DDRAWPRIMITIVESTRIDEDDATA; //--------------------------------------------------------------------- // ComputeSphereVisibility return values // #define D3DVIS_INSIDE_FRUSTUM 0 #define D3DVIS_INTERSECT_FRUSTUM 1 #define D3DVIS_OUTSIDE_FRUSTUM 2 #define D3DVIS_INSIDE_LEFT 0 #define D3DVIS_INTERSECT_LEFT (1 << 2) #define D3DVIS_OUTSIDE_LEFT (2 << 2) #define D3DVIS_INSIDE_RIGHT 0 #define D3DVIS_INTERSECT_RIGHT (1 << 4) #define D3DVIS_OUTSIDE_RIGHT (2 << 4) #define D3DVIS_INSIDE_TOP 0 #define D3DVIS_INTERSECT_TOP (1 << 6) #define D3DVIS_OUTSIDE_TOP (2 << 6) #define D3DVIS_INSIDE_BOTTOM 0 #define D3DVIS_INTERSECT_BOTTOM (1 << 8) #define D3DVIS_OUTSIDE_BOTTOM (2 << 8) #define D3DVIS_INSIDE_NEAR 0 #define D3DVIS_INTERSECT_NEAR (1 << 10) #define D3DVIS_OUTSIDE_NEAR (2 << 10) #define D3DVIS_INSIDE_FAR 0 #define D3DVIS_INTERSECT_FAR (1 << 12) #define D3DVIS_OUTSIDE_FAR (2 << 12) #define D3DVIS_MASK_FRUSTUM (3 << 0) #define D3DVIS_MASK_LEFT (3 << 2) #define D3DVIS_MASK_RIGHT (3 << 4) #define D3DVIS_MASK_TOP (3 << 6) #define D3DVIS_MASK_BOTTOM (3 << 8) #define D3DVIS_MASK_NEAR (3 << 10) #define D3DVIS_MASK_FAR (3 << 12) #endif /* DIRECT3D_VERSION >= 0x0600 */ #if(DIRECT3D_VERSION < 0x0800) #if(DIRECT3D_VERSION >= 0x0700) // To be used with GetInfo() #define D3DDEVINFOID_TEXTUREMANAGER 1 #define D3DDEVINFOID_D3DTEXTUREMANAGER 2 #define D3DDEVINFOID_TEXTURING 3 typedef enum _D3DSTATEBLOCKTYPE { D3DSBT_ALL = 1, // capture all state D3DSBT_PIXELSTATE = 2, // capture pixel state D3DSBT_VERTEXSTATE = 3, // capture vertex state D3DSBT_FORCE_DWORD = 0xffffffff } D3DSTATEBLOCKTYPE; // The D3DVERTEXBLENDFLAGS type is used with D3DRENDERSTATE_VERTEXBLEND state. // typedef enum _D3DVERTEXBLENDFLAGS { D3DVBLEND_DISABLE = 0, // Disable vertex blending D3DVBLEND_1WEIGHT = 1, // blend between 2 matrices D3DVBLEND_2WEIGHTS = 2, // blend between 3 matrices D3DVBLEND_3WEIGHTS = 3, // blend between 4 matrices } D3DVERTEXBLENDFLAGS; typedef enum _D3DTEXTURETRANSFORMFLAGS { D3DTTFF_DISABLE = 0, // texture coordinates are passed directly D3DTTFF_COUNT1 = 1, // rasterizer should expect 1-D texture coords D3DTTFF_COUNT2 = 2, // rasterizer should expect 2-D texture coords D3DTTFF_COUNT3 = 3, // rasterizer should expect 3-D texture coords D3DTTFF_COUNT4 = 4, // rasterizer should expect 4-D texture coords D3DTTFF_PROJECTED = 256, // texcoords to be divided by COUNTth element D3DTTFF_FORCE_DWORD = 0x7fffffff, } D3DTEXTURETRANSFORMFLAGS; // Macros to set texture coordinate format bits in the FVF id #define D3DFVF_TEXTUREFORMAT2 0 // Two floating point values #define D3DFVF_TEXTUREFORMAT1 3 // One floating point value #define D3DFVF_TEXTUREFORMAT3 1 // Three floating point values #define D3DFVF_TEXTUREFORMAT4 2 // Four floating point values #define D3DFVF_TEXCOORDSIZE3(CoordIndex) (D3DFVF_TEXTUREFORMAT3 << (CoordIndex*2 + 16)) #define D3DFVF_TEXCOORDSIZE2(CoordIndex) (D3DFVF_TEXTUREFORMAT2) #define D3DFVF_TEXCOORDSIZE4(CoordIndex) (D3DFVF_TEXTUREFORMAT4 << (CoordIndex*2 + 16)) #define D3DFVF_TEXCOORDSIZE1(CoordIndex) (D3DFVF_TEXTUREFORMAT1 << (CoordIndex*2 + 16)) #endif /* DIRECT3D_VERSION >= 0x0700 */ #else // // legacy vertex blend names // typedef enum _D3DVERTEXBLENDFLAGS D3DVERTEXBLENDFLAGS; #define D3DVBLEND_DISABLE (D3DVERTEXBLENDFLAGS)0 #define D3DVBLEND_1WEIGHT (D3DVERTEXBLENDFLAGS)1 #define D3DVBLEND_2WEIGHTS (D3DVERTEXBLENDFLAGS)2 #define D3DVBLEND_3WEIGHTS (D3DVERTEXBLENDFLAGS)3 #endif //(DIRECT3D_VERSION < 0x0800) #pragma pack() #pragma warning(default:4201) #endif /* _D3DTYPES_H_ */ ================================================ FILE: Include/ddraw.h ================================================ /*==========================================================================; * * Copyright (C) Microsoft Corporation. All Rights Reserved. * * File: ddraw.h * Content: DirectDraw include file * ***************************************************************************/ #ifndef __DDRAW_INCLUDED__ #define __DDRAW_INCLUDED__ //Disable the nameless union warning when building internally #undef ENABLE_NAMELESS_UNION_PRAGMA #ifdef DIRECTX_REDIST #define ENABLE_NAMELESS_UNION_PRAGMA #endif #ifdef ENABLE_NAMELESS_UNION_PRAGMA #pragma warning(disable:4201) #endif /* * If you wish an application built against the newest version of DirectDraw * to run against an older DirectDraw run time then define DIRECTDRAW_VERSION * to be the earlies version of DirectDraw you wish to run against. For, * example if you wish an application to run against a DX 3 runtime define * DIRECTDRAW_VERSION to be 0x0300. */ #ifndef DIRECTDRAW_VERSION #define DIRECTDRAW_VERSION 0x0700 #endif /* DIRECTDRAW_VERSION */ #if defined( _WIN32 ) && !defined( _NO_COM ) #define COM_NO_WINDOWS_H #include #else #define IUnknown void #if !defined( NT_BUILD_ENVIRONMENT ) && !defined(WINNT) #define CO_E_NOTINITIALIZED 0x800401F0L #endif #endif #define _FACDD 0x876 #define MAKE_DDHRESULT( code ) MAKE_HRESULT( 1, _FACDD, code ) #ifdef __cplusplus extern "C" { #endif // // For compilers that don't support nameless unions, do a // // #define NONAMELESSUNION // // before #include // #ifndef DUMMYUNIONNAMEN #if defined(__cplusplus) || !defined(NONAMELESSUNION) #define DUMMYUNIONNAMEN(n) #else #define DUMMYUNIONNAMEN(n) u##n #endif #endif #ifndef MAKEFOURCC #define MAKEFOURCC(ch0, ch1, ch2, ch3) \ ((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8) | \ ((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24 )) #endif //defined(MAKEFOURCC) /* * FOURCC codes for DX compressed-texture pixel formats */ #define FOURCC_DXT1 (MAKEFOURCC('D','X','T','1')) #define FOURCC_DXT2 (MAKEFOURCC('D','X','T','2')) #define FOURCC_DXT3 (MAKEFOURCC('D','X','T','3')) #define FOURCC_DXT4 (MAKEFOURCC('D','X','T','4')) #define FOURCC_DXT5 (MAKEFOURCC('D','X','T','5')) /* * GUIDS used by DirectDraw objects */ #if defined( _WIN32 ) && !defined( _NO_COM ) DEFINE_GUID( CLSID_DirectDraw, 0xD7B70EE0,0x4340,0x11CF,0xB0,0x63,0x00,0x20,0xAF,0xC2,0xCD,0x35 ); DEFINE_GUID( CLSID_DirectDraw7, 0x3c305196,0x50db,0x11d3,0x9c,0xfe,0x00,0xc0,0x4f,0xd9,0x30,0xc5 ); DEFINE_GUID( CLSID_DirectDrawClipper, 0x593817A0,0x7DB3,0x11CF,0xA2,0xDE,0x00,0xAA,0x00,0xb9,0x33,0x56 ); DEFINE_GUID( IID_IDirectDraw, 0x6C14DB80,0xA733,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60 ); DEFINE_GUID( IID_IDirectDraw2, 0xB3A6F3E0,0x2B43,0x11CF,0xA2,0xDE,0x00,0xAA,0x00,0xB9,0x33,0x56 ); DEFINE_GUID( IID_IDirectDraw4, 0x9c59509a,0x39bd,0x11d1,0x8c,0x4a,0x00,0xc0,0x4f,0xd9,0x30,0xc5 ); DEFINE_GUID( IID_IDirectDraw7, 0x15e65ec0,0x3b9c,0x11d2,0xb9,0x2f,0x00,0x60,0x97,0x97,0xea,0x5b ); DEFINE_GUID( IID_IDirectDrawSurface, 0x6C14DB81,0xA733,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60 ); DEFINE_GUID( IID_IDirectDrawSurface2, 0x57805885,0x6eec,0x11cf,0x94,0x41,0xa8,0x23,0x03,0xc1,0x0e,0x27 ); DEFINE_GUID( IID_IDirectDrawSurface3, 0xDA044E00,0x69B2,0x11D0,0xA1,0xD5,0x00,0xAA,0x00,0xB8,0xDF,0xBB ); DEFINE_GUID( IID_IDirectDrawSurface4, 0x0B2B8630,0xAD35,0x11D0,0x8E,0xA6,0x00,0x60,0x97,0x97,0xEA,0x5B ); DEFINE_GUID( IID_IDirectDrawSurface7, 0x06675a80,0x3b9b,0x11d2,0xb9,0x2f,0x00,0x60,0x97,0x97,0xea,0x5b ); DEFINE_GUID( IID_IDirectDrawPalette, 0x6C14DB84,0xA733,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60 ); DEFINE_GUID( IID_IDirectDrawClipper, 0x6C14DB85,0xA733,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60 ); DEFINE_GUID( IID_IDirectDrawColorControl, 0x4B9F0EE0,0x0D7E,0x11D0,0x9B,0x06,0x00,0xA0,0xC9,0x03,0xA3,0xB8 ); DEFINE_GUID( IID_IDirectDrawGammaControl, 0x69C11C3E,0xB46B,0x11D1,0xAD,0x7A,0x00,0xC0,0x4F,0xC2,0x9B,0x4E ); #endif /*============================================================================ * * DirectDraw Structures * * Various structures used to invoke DirectDraw. * *==========================================================================*/ struct IDirectDraw; struct IDirectDrawSurface; struct IDirectDrawPalette; struct IDirectDrawClipper; typedef struct IDirectDraw FAR *LPDIRECTDRAW; typedef struct IDirectDraw2 FAR *LPDIRECTDRAW2; typedef struct IDirectDraw4 FAR *LPDIRECTDRAW4; typedef struct IDirectDraw7 FAR *LPDIRECTDRAW7; typedef struct IDirectDrawSurface FAR *LPDIRECTDRAWSURFACE; typedef struct IDirectDrawSurface2 FAR *LPDIRECTDRAWSURFACE2; typedef struct IDirectDrawSurface3 FAR *LPDIRECTDRAWSURFACE3; typedef struct IDirectDrawSurface4 FAR *LPDIRECTDRAWSURFACE4; typedef struct IDirectDrawSurface7 FAR *LPDIRECTDRAWSURFACE7; typedef struct IDirectDrawPalette FAR *LPDIRECTDRAWPALETTE; typedef struct IDirectDrawClipper FAR *LPDIRECTDRAWCLIPPER; typedef struct IDirectDrawColorControl FAR *LPDIRECTDRAWCOLORCONTROL; typedef struct IDirectDrawGammaControl FAR *LPDIRECTDRAWGAMMACONTROL; typedef struct _DDFXROP FAR *LPDDFXROP; typedef struct _DDSURFACEDESC FAR *LPDDSURFACEDESC; typedef struct _DDSURFACEDESC2 FAR *LPDDSURFACEDESC2; typedef struct _DDCOLORCONTROL FAR *LPDDCOLORCONTROL; /* * API's */ #if (defined (WIN32) || defined( _WIN32 ) ) && !defined( _NO_COM ) //#if defined( _WIN32 ) && !defined( _NO_ENUM ) typedef BOOL (FAR PASCAL * LPDDENUMCALLBACKA)(GUID FAR *, LPSTR, LPSTR, LPVOID); typedef BOOL (FAR PASCAL * LPDDENUMCALLBACKW)(GUID FAR *, LPWSTR, LPWSTR, LPVOID); extern HRESULT WINAPI DirectDrawEnumerateW( LPDDENUMCALLBACKW lpCallback, LPVOID lpContext ); extern HRESULT WINAPI DirectDrawEnumerateA( LPDDENUMCALLBACKA lpCallback, LPVOID lpContext ); /* * Protect against old SDKs */ #if !defined(HMONITOR_DECLARED) && (WINVER < 0x0500) #define HMONITOR_DECLARED DECLARE_HANDLE(HMONITOR); #endif typedef BOOL (FAR PASCAL * LPDDENUMCALLBACKEXA)(GUID FAR *, LPSTR, LPSTR, LPVOID, HMONITOR); typedef BOOL (FAR PASCAL * LPDDENUMCALLBACKEXW)(GUID FAR *, LPWSTR, LPWSTR, LPVOID, HMONITOR); extern HRESULT WINAPI DirectDrawEnumerateExW( LPDDENUMCALLBACKEXW lpCallback, LPVOID lpContext, DWORD dwFlags); extern HRESULT WINAPI DirectDrawEnumerateExA( LPDDENUMCALLBACKEXA lpCallback, LPVOID lpContext, DWORD dwFlags); typedef HRESULT (WINAPI * LPDIRECTDRAWENUMERATEEXA)( LPDDENUMCALLBACKEXA lpCallback, LPVOID lpContext, DWORD dwFlags); typedef HRESULT (WINAPI * LPDIRECTDRAWENUMERATEEXW)( LPDDENUMCALLBACKEXW lpCallback, LPVOID lpContext, DWORD dwFlags); #ifdef UNICODE typedef LPDDENUMCALLBACKW LPDDENUMCALLBACK; #define DirectDrawEnumerate DirectDrawEnumerateW typedef LPDDENUMCALLBACKEXW LPDDENUMCALLBACKEX; typedef LPDIRECTDRAWENUMERATEEXW LPDIRECTDRAWENUMERATEEX; #define DirectDrawEnumerateEx DirectDrawEnumerateExW #else typedef LPDDENUMCALLBACKA LPDDENUMCALLBACK; #define DirectDrawEnumerate DirectDrawEnumerateA typedef LPDDENUMCALLBACKEXA LPDDENUMCALLBACKEX; typedef LPDIRECTDRAWENUMERATEEXA LPDIRECTDRAWENUMERATEEX; #define DirectDrawEnumerateEx DirectDrawEnumerateExA #endif extern HRESULT WINAPI DirectDrawCreate( GUID FAR *lpGUID, LPDIRECTDRAW FAR *lplpDD, IUnknown FAR *pUnkOuter ); extern HRESULT WINAPI DirectDrawCreateEx( GUID FAR * lpGuid, LPVOID *lplpDD, REFIID iid,IUnknown FAR *pUnkOuter ); extern HRESULT WINAPI DirectDrawCreateClipper( DWORD dwFlags, LPDIRECTDRAWCLIPPER FAR *lplpDDClipper, IUnknown FAR *pUnkOuter ); #endif /* * Flags for DirectDrawEnumerateEx * DirectDrawEnumerateEx supercedes DirectDrawEnumerate. You must use GetProcAddress to * obtain a function pointer (of type LPDIRECTDRAWENUMERATEEX) to DirectDrawEnumerateEx. * By default, only the primary display device is enumerated. * DirectDrawEnumerate is equivalent to DirectDrawEnumerate(,,DDENUM_NONDISPLAYDEVICES) */ /* * This flag causes enumeration of any GDI display devices which are part of * the Windows Desktop */ #define DDENUM_ATTACHEDSECONDARYDEVICES 0x00000001L /* * This flag causes enumeration of any GDI display devices which are not * part of the Windows Desktop */ #define DDENUM_DETACHEDSECONDARYDEVICES 0x00000002L /* * This flag causes enumeration of non-display devices */ #define DDENUM_NONDISPLAYDEVICES 0x00000004L #define REGSTR_KEY_DDHW_DESCRIPTION "Description" #define REGSTR_KEY_DDHW_DRIVERNAME "DriverName" #define REGSTR_PATH_DDHW "Hardware\\DirectDrawDrivers" #define DDCREATE_HARDWAREONLY 0x00000001l #define DDCREATE_EMULATIONONLY 0x00000002l #if defined(WINNT) || !defined(WIN32) typedef long HRESULT; #endif //#ifndef WINNT typedef HRESULT (FAR PASCAL * LPDDENUMMODESCALLBACK)(LPDDSURFACEDESC, LPVOID); typedef HRESULT (FAR PASCAL * LPDDENUMMODESCALLBACK2)(LPDDSURFACEDESC2, LPVOID); typedef HRESULT (FAR PASCAL * LPDDENUMSURFACESCALLBACK)(LPDIRECTDRAWSURFACE, LPDDSURFACEDESC, LPVOID); typedef HRESULT (FAR PASCAL * LPDDENUMSURFACESCALLBACK2)(LPDIRECTDRAWSURFACE4, LPDDSURFACEDESC2, LPVOID); typedef HRESULT (FAR PASCAL * LPDDENUMSURFACESCALLBACK7)(LPDIRECTDRAWSURFACE7, LPDDSURFACEDESC2, LPVOID); //#endif /* * Generic pixel format with 8-bit RGB and alpha components */ typedef struct _DDARGB { BYTE blue; BYTE green; BYTE red; BYTE alpha; } DDARGB; typedef DDARGB FAR *LPDDARGB; /* * This version of the structure remains for backwards source compatibility. * The DDARGB structure is the one that should be used for all DirectDraw APIs. */ typedef struct _DDRGBA { BYTE red; BYTE green; BYTE blue; BYTE alpha; } DDRGBA; typedef DDRGBA FAR *LPDDRGBA; /* * DDCOLORKEY */ typedef struct _DDCOLORKEY { DWORD dwColorSpaceLowValue; // low boundary of color space that is to // be treated as Color Key, inclusive DWORD dwColorSpaceHighValue; // high boundary of color space that is // to be treated as Color Key, inclusive } DDCOLORKEY; typedef DDCOLORKEY FAR* LPDDCOLORKEY; /* * DDBLTFX * Used to pass override information to the DIRECTDRAWSURFACE callback Blt. */ typedef struct _DDBLTFX { DWORD dwSize; // size of structure DWORD dwDDFX; // FX operations DWORD dwROP; // Win32 raster operations DWORD dwDDROP; // Raster operations new for DirectDraw DWORD dwRotationAngle; // Rotation angle for blt DWORD dwZBufferOpCode; // ZBuffer compares DWORD dwZBufferLow; // Low limit of Z buffer DWORD dwZBufferHigh; // High limit of Z buffer DWORD dwZBufferBaseDest; // Destination base value DWORD dwZDestConstBitDepth; // Bit depth used to specify Z constant for destination union { DWORD dwZDestConst; // Constant to use as Z buffer for dest LPDIRECTDRAWSURFACE lpDDSZBufferDest; // Surface to use as Z buffer for dest } DUMMYUNIONNAMEN(1); DWORD dwZSrcConstBitDepth; // Bit depth used to specify Z constant for source union { DWORD dwZSrcConst; // Constant to use as Z buffer for src LPDIRECTDRAWSURFACE lpDDSZBufferSrc; // Surface to use as Z buffer for src } DUMMYUNIONNAMEN(2); DWORD dwAlphaEdgeBlendBitDepth; // Bit depth used to specify constant for alpha edge blend DWORD dwAlphaEdgeBlend; // Alpha for edge blending DWORD dwReserved; DWORD dwAlphaDestConstBitDepth; // Bit depth used to specify alpha constant for destination union { DWORD dwAlphaDestConst; // Constant to use as Alpha Channel LPDIRECTDRAWSURFACE lpDDSAlphaDest; // Surface to use as Alpha Channel } DUMMYUNIONNAMEN(3); DWORD dwAlphaSrcConstBitDepth; // Bit depth used to specify alpha constant for source union { DWORD dwAlphaSrcConst; // Constant to use as Alpha Channel LPDIRECTDRAWSURFACE lpDDSAlphaSrc; // Surface to use as Alpha Channel } DUMMYUNIONNAMEN(4); union { DWORD dwFillColor; // color in RGB or Palettized DWORD dwFillDepth; // depth value for z-buffer DWORD dwFillPixel; // pixel value for RGBA or RGBZ LPDIRECTDRAWSURFACE lpDDSPattern; // Surface to use as pattern } DUMMYUNIONNAMEN(5); DDCOLORKEY ddckDestColorkey; // DestColorkey override DDCOLORKEY ddckSrcColorkey; // SrcColorkey override } DDBLTFX; typedef DDBLTFX FAR* LPDDBLTFX; /* * DDSCAPS */ typedef struct _DDSCAPS { DWORD dwCaps; // capabilities of surface wanted } DDSCAPS; typedef DDSCAPS FAR* LPDDSCAPS; /* * DDOSCAPS */ typedef struct _DDOSCAPS { DWORD dwCaps; // capabilities of surface wanted } DDOSCAPS; typedef DDOSCAPS FAR* LPDDOSCAPS; /* * This structure is used internally by DirectDraw. */ typedef struct _DDSCAPSEX { DWORD dwCaps2; DWORD dwCaps3; union { DWORD dwCaps4; DWORD dwVolumeDepth; } DUMMYUNIONNAMEN(1); } DDSCAPSEX, FAR * LPDDSCAPSEX; /* * DDSCAPS2 */ typedef struct _DDSCAPS2 { DWORD dwCaps; // capabilities of surface wanted DWORD dwCaps2; DWORD dwCaps3; union { DWORD dwCaps4; DWORD dwVolumeDepth; } DUMMYUNIONNAMEN(1); } DDSCAPS2; typedef DDSCAPS2 FAR* LPDDSCAPS2; /* * DDCAPS */ #define DD_ROP_SPACE (256/32) // space required to store ROP array /* * NOTE: Our choosen structure number scheme is to append a single digit to * the end of the structure giving the version that structure is associated * with. */ /* * This structure represents the DDCAPS structure released in DirectDraw 1.0. It is used internally * by DirectDraw to interpret caps passed into ddraw by drivers written prior to the release of DirectDraw 2.0. * New applications should use the DDCAPS structure defined below. */ typedef struct _DDCAPS_DX1 { DWORD dwSize; // size of the DDDRIVERCAPS structure DWORD dwCaps; // driver specific capabilities DWORD dwCaps2; // more driver specific capabilites DWORD dwCKeyCaps; // color key capabilities of the surface DWORD dwFXCaps; // driver specific stretching and effects capabilites DWORD dwFXAlphaCaps; // alpha driver specific capabilities DWORD dwPalCaps; // palette capabilities DWORD dwSVCaps; // stereo vision capabilities DWORD dwAlphaBltConstBitDepths; // DDBD_2,4,8 DWORD dwAlphaBltPixelBitDepths; // DDBD_1,2,4,8 DWORD dwAlphaBltSurfaceBitDepths; // DDBD_1,2,4,8 DWORD dwAlphaOverlayConstBitDepths; // DDBD_2,4,8 DWORD dwAlphaOverlayPixelBitDepths; // DDBD_1,2,4,8 DWORD dwAlphaOverlaySurfaceBitDepths; // DDBD_1,2,4,8 DWORD dwZBufferBitDepths; // DDBD_8,16,24,32 DWORD dwVidMemTotal; // total amount of video memory DWORD dwVidMemFree; // amount of free video memory DWORD dwMaxVisibleOverlays; // maximum number of visible overlays DWORD dwCurrVisibleOverlays; // current number of visible overlays DWORD dwNumFourCCCodes; // number of four cc codes DWORD dwAlignBoundarySrc; // source rectangle alignment DWORD dwAlignSizeSrc; // source rectangle byte size DWORD dwAlignBoundaryDest; // dest rectangle alignment DWORD dwAlignSizeDest; // dest rectangle byte size DWORD dwAlignStrideAlign; // stride alignment DWORD dwRops[DD_ROP_SPACE]; // ROPS supported DDSCAPS ddsCaps; // DDSCAPS structure has all the general capabilities DWORD dwMinOverlayStretch; // minimum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 DWORD dwMaxOverlayStretch; // maximum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 DWORD dwMinLiveVideoStretch; // OBSOLETE! This field remains for compatability reasons only DWORD dwMaxLiveVideoStretch; // OBSOLETE! This field remains for compatability reasons only DWORD dwMinHwCodecStretch; // OBSOLETE! This field remains for compatability reasons only DWORD dwMaxHwCodecStretch; // OBSOLETE! This field remains for compatability reasons only DWORD dwReserved1; // reserved DWORD dwReserved2; // reserved DWORD dwReserved3; // reserved } DDCAPS_DX1; typedef DDCAPS_DX1 FAR* LPDDCAPS_DX1; /* * This structure is the DDCAPS structure as it was in version 2 and 3 of Direct X. * It is present for back compatability. */ typedef struct _DDCAPS_DX3 { DWORD dwSize; // size of the DDDRIVERCAPS structure DWORD dwCaps; // driver specific capabilities DWORD dwCaps2; // more driver specific capabilites DWORD dwCKeyCaps; // color key capabilities of the surface DWORD dwFXCaps; // driver specific stretching and effects capabilites DWORD dwFXAlphaCaps; // alpha driver specific capabilities DWORD dwPalCaps; // palette capabilities DWORD dwSVCaps; // stereo vision capabilities DWORD dwAlphaBltConstBitDepths; // DDBD_2,4,8 DWORD dwAlphaBltPixelBitDepths; // DDBD_1,2,4,8 DWORD dwAlphaBltSurfaceBitDepths; // DDBD_1,2,4,8 DWORD dwAlphaOverlayConstBitDepths; // DDBD_2,4,8 DWORD dwAlphaOverlayPixelBitDepths; // DDBD_1,2,4,8 DWORD dwAlphaOverlaySurfaceBitDepths; // DDBD_1,2,4,8 DWORD dwZBufferBitDepths; // DDBD_8,16,24,32 DWORD dwVidMemTotal; // total amount of video memory DWORD dwVidMemFree; // amount of free video memory DWORD dwMaxVisibleOverlays; // maximum number of visible overlays DWORD dwCurrVisibleOverlays; // current number of visible overlays DWORD dwNumFourCCCodes; // number of four cc codes DWORD dwAlignBoundarySrc; // source rectangle alignment DWORD dwAlignSizeSrc; // source rectangle byte size DWORD dwAlignBoundaryDest; // dest rectangle alignment DWORD dwAlignSizeDest; // dest rectangle byte size DWORD dwAlignStrideAlign; // stride alignment DWORD dwRops[DD_ROP_SPACE]; // ROPS supported DDSCAPS ddsCaps; // DDSCAPS structure has all the general capabilities DWORD dwMinOverlayStretch; // minimum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 DWORD dwMaxOverlayStretch; // maximum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 DWORD dwMinLiveVideoStretch; // minimum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 DWORD dwMaxLiveVideoStretch; // maximum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 DWORD dwMinHwCodecStretch; // minimum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 DWORD dwMaxHwCodecStretch; // maximum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 DWORD dwReserved1; // reserved DWORD dwReserved2; // reserved DWORD dwReserved3; // reserved DWORD dwSVBCaps; // driver specific capabilities for System->Vmem blts DWORD dwSVBCKeyCaps; // driver color key capabilities for System->Vmem blts DWORD dwSVBFXCaps; // driver FX capabilities for System->Vmem blts DWORD dwSVBRops[DD_ROP_SPACE];// ROPS supported for System->Vmem blts DWORD dwVSBCaps; // driver specific capabilities for Vmem->System blts DWORD dwVSBCKeyCaps; // driver color key capabilities for Vmem->System blts DWORD dwVSBFXCaps; // driver FX capabilities for Vmem->System blts DWORD dwVSBRops[DD_ROP_SPACE];// ROPS supported for Vmem->System blts DWORD dwSSBCaps; // driver specific capabilities for System->System blts DWORD dwSSBCKeyCaps; // driver color key capabilities for System->System blts DWORD dwSSBFXCaps; // driver FX capabilities for System->System blts DWORD dwSSBRops[DD_ROP_SPACE];// ROPS supported for System->System blts DWORD dwReserved4; // reserved DWORD dwReserved5; // reserved DWORD dwReserved6; // reserved } DDCAPS_DX3; typedef DDCAPS_DX3 FAR* LPDDCAPS_DX3; /* * This structure is the DDCAPS structure as it was in version 5 of Direct X. * It is present for back compatability. */ typedef struct _DDCAPS_DX5 { /* 0*/ DWORD dwSize; // size of the DDDRIVERCAPS structure /* 4*/ DWORD dwCaps; // driver specific capabilities /* 8*/ DWORD dwCaps2; // more driver specific capabilites /* c*/ DWORD dwCKeyCaps; // color key capabilities of the surface /* 10*/ DWORD dwFXCaps; // driver specific stretching and effects capabilites /* 14*/ DWORD dwFXAlphaCaps; // alpha driver specific capabilities /* 18*/ DWORD dwPalCaps; // palette capabilities /* 1c*/ DWORD dwSVCaps; // stereo vision capabilities /* 20*/ DWORD dwAlphaBltConstBitDepths; // DDBD_2,4,8 /* 24*/ DWORD dwAlphaBltPixelBitDepths; // DDBD_1,2,4,8 /* 28*/ DWORD dwAlphaBltSurfaceBitDepths; // DDBD_1,2,4,8 /* 2c*/ DWORD dwAlphaOverlayConstBitDepths; // DDBD_2,4,8 /* 30*/ DWORD dwAlphaOverlayPixelBitDepths; // DDBD_1,2,4,8 /* 34*/ DWORD dwAlphaOverlaySurfaceBitDepths; // DDBD_1,2,4,8 /* 38*/ DWORD dwZBufferBitDepths; // DDBD_8,16,24,32 /* 3c*/ DWORD dwVidMemTotal; // total amount of video memory /* 40*/ DWORD dwVidMemFree; // amount of free video memory /* 44*/ DWORD dwMaxVisibleOverlays; // maximum number of visible overlays /* 48*/ DWORD dwCurrVisibleOverlays; // current number of visible overlays /* 4c*/ DWORD dwNumFourCCCodes; // number of four cc codes /* 50*/ DWORD dwAlignBoundarySrc; // source rectangle alignment /* 54*/ DWORD dwAlignSizeSrc; // source rectangle byte size /* 58*/ DWORD dwAlignBoundaryDest; // dest rectangle alignment /* 5c*/ DWORD dwAlignSizeDest; // dest rectangle byte size /* 60*/ DWORD dwAlignStrideAlign; // stride alignment /* 64*/ DWORD dwRops[DD_ROP_SPACE]; // ROPS supported /* 84*/ DDSCAPS ddsCaps; // DDSCAPS structure has all the general capabilities /* 88*/ DWORD dwMinOverlayStretch; // minimum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 /* 8c*/ DWORD dwMaxOverlayStretch; // maximum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 /* 90*/ DWORD dwMinLiveVideoStretch; // minimum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 /* 94*/ DWORD dwMaxLiveVideoStretch; // maximum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 /* 98*/ DWORD dwMinHwCodecStretch; // minimum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 /* 9c*/ DWORD dwMaxHwCodecStretch; // maximum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 /* a0*/ DWORD dwReserved1; // reserved /* a4*/ DWORD dwReserved2; // reserved /* a8*/ DWORD dwReserved3; // reserved /* ac*/ DWORD dwSVBCaps; // driver specific capabilities for System->Vmem blts /* b0*/ DWORD dwSVBCKeyCaps; // driver color key capabilities for System->Vmem blts /* b4*/ DWORD dwSVBFXCaps; // driver FX capabilities for System->Vmem blts /* b8*/ DWORD dwSVBRops[DD_ROP_SPACE];// ROPS supported for System->Vmem blts /* d8*/ DWORD dwVSBCaps; // driver specific capabilities for Vmem->System blts /* dc*/ DWORD dwVSBCKeyCaps; // driver color key capabilities for Vmem->System blts /* e0*/ DWORD dwVSBFXCaps; // driver FX capabilities for Vmem->System blts /* e4*/ DWORD dwVSBRops[DD_ROP_SPACE];// ROPS supported for Vmem->System blts /*104*/ DWORD dwSSBCaps; // driver specific capabilities for System->System blts /*108*/ DWORD dwSSBCKeyCaps; // driver color key capabilities for System->System blts /*10c*/ DWORD dwSSBFXCaps; // driver FX capabilities for System->System blts /*110*/ DWORD dwSSBRops[DD_ROP_SPACE];// ROPS supported for System->System blts // Members added for DX5: /*130*/ DWORD dwMaxVideoPorts; // maximum number of usable video ports /*134*/ DWORD dwCurrVideoPorts; // current number of video ports used /*138*/ DWORD dwSVBCaps2; // more driver specific capabilities for System->Vmem blts /*13c*/ DWORD dwNLVBCaps; // driver specific capabilities for non-local->local vidmem blts /*140*/ DWORD dwNLVBCaps2; // more driver specific capabilities non-local->local vidmem blts /*144*/ DWORD dwNLVBCKeyCaps; // driver color key capabilities for non-local->local vidmem blts /*148*/ DWORD dwNLVBFXCaps; // driver FX capabilities for non-local->local blts /*14c*/ DWORD dwNLVBRops[DD_ROP_SPACE]; // ROPS supported for non-local->local blts } DDCAPS_DX5; typedef DDCAPS_DX5 FAR* LPDDCAPS_DX5; typedef struct _DDCAPS_DX6 { /* 0*/ DWORD dwSize; // size of the DDDRIVERCAPS structure /* 4*/ DWORD dwCaps; // driver specific capabilities /* 8*/ DWORD dwCaps2; // more driver specific capabilites /* c*/ DWORD dwCKeyCaps; // color key capabilities of the surface /* 10*/ DWORD dwFXCaps; // driver specific stretching and effects capabilites /* 14*/ DWORD dwFXAlphaCaps; // alpha caps /* 18*/ DWORD dwPalCaps; // palette capabilities /* 1c*/ DWORD dwSVCaps; // stereo vision capabilities /* 20*/ DWORD dwAlphaBltConstBitDepths; // DDBD_2,4,8 /* 24*/ DWORD dwAlphaBltPixelBitDepths; // DDBD_1,2,4,8 /* 28*/ DWORD dwAlphaBltSurfaceBitDepths; // DDBD_1,2,4,8 /* 2c*/ DWORD dwAlphaOverlayConstBitDepths; // DDBD_2,4,8 /* 30*/ DWORD dwAlphaOverlayPixelBitDepths; // DDBD_1,2,4,8 /* 34*/ DWORD dwAlphaOverlaySurfaceBitDepths; // DDBD_1,2,4,8 /* 38*/ DWORD dwZBufferBitDepths; // DDBD_8,16,24,32 /* 3c*/ DWORD dwVidMemTotal; // total amount of video memory /* 40*/ DWORD dwVidMemFree; // amount of free video memory /* 44*/ DWORD dwMaxVisibleOverlays; // maximum number of visible overlays /* 48*/ DWORD dwCurrVisibleOverlays; // current number of visible overlays /* 4c*/ DWORD dwNumFourCCCodes; // number of four cc codes /* 50*/ DWORD dwAlignBoundarySrc; // source rectangle alignment /* 54*/ DWORD dwAlignSizeSrc; // source rectangle byte size /* 58*/ DWORD dwAlignBoundaryDest; // dest rectangle alignment /* 5c*/ DWORD dwAlignSizeDest; // dest rectangle byte size /* 60*/ DWORD dwAlignStrideAlign; // stride alignment /* 64*/ DWORD dwRops[DD_ROP_SPACE]; // ROPS supported /* 84*/ DDSCAPS ddsOldCaps; // Was DDSCAPS ddsCaps. ddsCaps is of type DDSCAPS2 for DX6 /* 88*/ DWORD dwMinOverlayStretch; // minimum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 /* 8c*/ DWORD dwMaxOverlayStretch; // maximum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 /* 90*/ DWORD dwMinLiveVideoStretch; // minimum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 /* 94*/ DWORD dwMaxLiveVideoStretch; // maximum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 /* 98*/ DWORD dwMinHwCodecStretch; // minimum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 /* 9c*/ DWORD dwMaxHwCodecStretch; // maximum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 /* a0*/ DWORD dwReserved1; // reserved /* a4*/ DWORD dwReserved2; // reserved /* a8*/ DWORD dwReserved3; // reserved /* ac*/ DWORD dwSVBCaps; // driver specific capabilities for System->Vmem blts /* b0*/ DWORD dwSVBCKeyCaps; // driver color key capabilities for System->Vmem blts /* b4*/ DWORD dwSVBFXCaps; // driver FX capabilities for System->Vmem blts /* b8*/ DWORD dwSVBRops[DD_ROP_SPACE];// ROPS supported for System->Vmem blts /* d8*/ DWORD dwVSBCaps; // driver specific capabilities for Vmem->System blts /* dc*/ DWORD dwVSBCKeyCaps; // driver color key capabilities for Vmem->System blts /* e0*/ DWORD dwVSBFXCaps; // driver FX capabilities for Vmem->System blts /* e4*/ DWORD dwVSBRops[DD_ROP_SPACE];// ROPS supported for Vmem->System blts /*104*/ DWORD dwSSBCaps; // driver specific capabilities for System->System blts /*108*/ DWORD dwSSBCKeyCaps; // driver color key capabilities for System->System blts /*10c*/ DWORD dwSSBFXCaps; // driver FX capabilities for System->System blts /*110*/ DWORD dwSSBRops[DD_ROP_SPACE];// ROPS supported for System->System blts /*130*/ DWORD dwMaxVideoPorts; // maximum number of usable video ports /*134*/ DWORD dwCurrVideoPorts; // current number of video ports used /*138*/ DWORD dwSVBCaps2; // more driver specific capabilities for System->Vmem blts /*13c*/ DWORD dwNLVBCaps; // driver specific capabilities for non-local->local vidmem blts /*140*/ DWORD dwNLVBCaps2; // more driver specific capabilities non-local->local vidmem blts /*144*/ DWORD dwNLVBCKeyCaps; // driver color key capabilities for non-local->local vidmem blts /*148*/ DWORD dwNLVBFXCaps; // driver FX capabilities for non-local->local blts /*14c*/ DWORD dwNLVBRops[DD_ROP_SPACE]; // ROPS supported for non-local->local blts // Members added for DX6 release /*16c*/ DDSCAPS2 ddsCaps; // Surface Caps } DDCAPS_DX6; typedef DDCAPS_DX6 FAR* LPDDCAPS_DX6; typedef struct _DDCAPS_DX7 { /* 0*/ DWORD dwSize; // size of the DDDRIVERCAPS structure /* 4*/ DWORD dwCaps; // driver specific capabilities /* 8*/ DWORD dwCaps2; // more driver specific capabilites /* c*/ DWORD dwCKeyCaps; // color key capabilities of the surface /* 10*/ DWORD dwFXCaps; // driver specific stretching and effects capabilites /* 14*/ DWORD dwFXAlphaCaps; // alpha driver specific capabilities /* 18*/ DWORD dwPalCaps; // palette capabilities /* 1c*/ DWORD dwSVCaps; // stereo vision capabilities /* 20*/ DWORD dwAlphaBltConstBitDepths; // DDBD_2,4,8 /* 24*/ DWORD dwAlphaBltPixelBitDepths; // DDBD_1,2,4,8 /* 28*/ DWORD dwAlphaBltSurfaceBitDepths; // DDBD_1,2,4,8 /* 2c*/ DWORD dwAlphaOverlayConstBitDepths; // DDBD_2,4,8 /* 30*/ DWORD dwAlphaOverlayPixelBitDepths; // DDBD_1,2,4,8 /* 34*/ DWORD dwAlphaOverlaySurfaceBitDepths; // DDBD_1,2,4,8 /* 38*/ DWORD dwZBufferBitDepths; // DDBD_8,16,24,32 /* 3c*/ DWORD dwVidMemTotal; // total amount of video memory /* 40*/ DWORD dwVidMemFree; // amount of free video memory /* 44*/ DWORD dwMaxVisibleOverlays; // maximum number of visible overlays /* 48*/ DWORD dwCurrVisibleOverlays; // current number of visible overlays /* 4c*/ DWORD dwNumFourCCCodes; // number of four cc codes /* 50*/ DWORD dwAlignBoundarySrc; // source rectangle alignment /* 54*/ DWORD dwAlignSizeSrc; // source rectangle byte size /* 58*/ DWORD dwAlignBoundaryDest; // dest rectangle alignment /* 5c*/ DWORD dwAlignSizeDest; // dest rectangle byte size /* 60*/ DWORD dwAlignStrideAlign; // stride alignment /* 64*/ DWORD dwRops[DD_ROP_SPACE]; // ROPS supported /* 84*/ DDSCAPS ddsOldCaps; // Was DDSCAPS ddsCaps. ddsCaps is of type DDSCAPS2 for DX6 /* 88*/ DWORD dwMinOverlayStretch; // minimum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 /* 8c*/ DWORD dwMaxOverlayStretch; // maximum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 /* 90*/ DWORD dwMinLiveVideoStretch; // minimum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 /* 94*/ DWORD dwMaxLiveVideoStretch; // maximum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 /* 98*/ DWORD dwMinHwCodecStretch; // minimum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 /* 9c*/ DWORD dwMaxHwCodecStretch; // maximum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 /* a0*/ DWORD dwReserved1; // reserved /* a4*/ DWORD dwReserved2; // reserved /* a8*/ DWORD dwReserved3; // reserved /* ac*/ DWORD dwSVBCaps; // driver specific capabilities for System->Vmem blts /* b0*/ DWORD dwSVBCKeyCaps; // driver color key capabilities for System->Vmem blts /* b4*/ DWORD dwSVBFXCaps; // driver FX capabilities for System->Vmem blts /* b8*/ DWORD dwSVBRops[DD_ROP_SPACE];// ROPS supported for System->Vmem blts /* d8*/ DWORD dwVSBCaps; // driver specific capabilities for Vmem->System blts /* dc*/ DWORD dwVSBCKeyCaps; // driver color key capabilities for Vmem->System blts /* e0*/ DWORD dwVSBFXCaps; // driver FX capabilities for Vmem->System blts /* e4*/ DWORD dwVSBRops[DD_ROP_SPACE];// ROPS supported for Vmem->System blts /*104*/ DWORD dwSSBCaps; // driver specific capabilities for System->System blts /*108*/ DWORD dwSSBCKeyCaps; // driver color key capabilities for System->System blts /*10c*/ DWORD dwSSBFXCaps; // driver FX capabilities for System->System blts /*110*/ DWORD dwSSBRops[DD_ROP_SPACE];// ROPS supported for System->System blts /*130*/ DWORD dwMaxVideoPorts; // maximum number of usable video ports /*134*/ DWORD dwCurrVideoPorts; // current number of video ports used /*138*/ DWORD dwSVBCaps2; // more driver specific capabilities for System->Vmem blts /*13c*/ DWORD dwNLVBCaps; // driver specific capabilities for non-local->local vidmem blts /*140*/ DWORD dwNLVBCaps2; // more driver specific capabilities non-local->local vidmem blts /*144*/ DWORD dwNLVBCKeyCaps; // driver color key capabilities for non-local->local vidmem blts /*148*/ DWORD dwNLVBFXCaps; // driver FX capabilities for non-local->local blts /*14c*/ DWORD dwNLVBRops[DD_ROP_SPACE]; // ROPS supported for non-local->local blts // Members added for DX6 release /*16c*/ DDSCAPS2 ddsCaps; // Surface Caps } DDCAPS_DX7; typedef DDCAPS_DX7 FAR* LPDDCAPS_DX7; #if DIRECTDRAW_VERSION <= 0x300 typedef DDCAPS_DX3 DDCAPS; #elif DIRECTDRAW_VERSION <= 0x500 typedef DDCAPS_DX5 DDCAPS; #elif DIRECTDRAW_VERSION <= 0x600 typedef DDCAPS_DX6 DDCAPS; #else typedef DDCAPS_DX7 DDCAPS; #endif typedef DDCAPS FAR* LPDDCAPS; /* * DDPIXELFORMAT */ typedef struct _DDPIXELFORMAT { DWORD dwSize; // size of structure DWORD dwFlags; // pixel format flags DWORD dwFourCC; // (FOURCC code) union { DWORD dwRGBBitCount; // how many bits per pixel DWORD dwYUVBitCount; // how many bits per pixel DWORD dwZBufferBitDepth; // how many total bits/pixel in z buffer (including any stencil bits) DWORD dwAlphaBitDepth; // how many bits for alpha channels DWORD dwLuminanceBitCount; // how many bits per pixel DWORD dwBumpBitCount; // how many bits per "buxel", total DWORD dwPrivateFormatBitCount;// Bits per pixel of private driver formats. Only valid in texture // format list and if DDPF_D3DFORMAT is set } DUMMYUNIONNAMEN(1); union { DWORD dwRBitMask; // mask for red bit DWORD dwYBitMask; // mask for Y bits DWORD dwStencilBitDepth; // how many stencil bits (note: dwZBufferBitDepth-dwStencilBitDepth is total Z-only bits) DWORD dwLuminanceBitMask; // mask for luminance bits DWORD dwBumpDuBitMask; // mask for bump map U delta bits DWORD dwOperations; // DDPF_D3DFORMAT Operations } DUMMYUNIONNAMEN(2); union { DWORD dwGBitMask; // mask for green bits DWORD dwUBitMask; // mask for U bits DWORD dwZBitMask; // mask for Z bits DWORD dwBumpDvBitMask; // mask for bump map V delta bits struct { WORD wFlipMSTypes; // Multisample methods supported via flip for this D3DFORMAT WORD wBltMSTypes; // Multisample methods supported via blt for this D3DFORMAT } MultiSampleCaps; } DUMMYUNIONNAMEN(3); union { DWORD dwBBitMask; // mask for blue bits DWORD dwVBitMask; // mask for V bits DWORD dwStencilBitMask; // mask for stencil bits DWORD dwBumpLuminanceBitMask; // mask for luminance in bump map } DUMMYUNIONNAMEN(4); union { DWORD dwRGBAlphaBitMask; // mask for alpha channel DWORD dwYUVAlphaBitMask; // mask for alpha channel DWORD dwLuminanceAlphaBitMask;// mask for alpha channel DWORD dwRGBZBitMask; // mask for Z channel DWORD dwYUVZBitMask; // mask for Z channel } DUMMYUNIONNAMEN(5); } DDPIXELFORMAT; typedef DDPIXELFORMAT FAR* LPDDPIXELFORMAT; /* * DDOVERLAYFX */ typedef struct _DDOVERLAYFX { DWORD dwSize; // size of structure DWORD dwAlphaEdgeBlendBitDepth; // Bit depth used to specify constant for alpha edge blend DWORD dwAlphaEdgeBlend; // Constant to use as alpha for edge blend DWORD dwReserved; DWORD dwAlphaDestConstBitDepth; // Bit depth used to specify alpha constant for destination union { DWORD dwAlphaDestConst; // Constant to use as alpha channel for dest LPDIRECTDRAWSURFACE lpDDSAlphaDest; // Surface to use as alpha channel for dest } DUMMYUNIONNAMEN(1); DWORD dwAlphaSrcConstBitDepth; // Bit depth used to specify alpha constant for source union { DWORD dwAlphaSrcConst; // Constant to use as alpha channel for src LPDIRECTDRAWSURFACE lpDDSAlphaSrc; // Surface to use as alpha channel for src } DUMMYUNIONNAMEN(2); DDCOLORKEY dckDestColorkey; // DestColorkey override DDCOLORKEY dckSrcColorkey; // DestColorkey override DWORD dwDDFX; // Overlay FX DWORD dwFlags; // flags } DDOVERLAYFX; typedef DDOVERLAYFX FAR *LPDDOVERLAYFX; /* * DDBLTBATCH: BltBatch entry structure */ typedef struct _DDBLTBATCH { LPRECT lprDest; LPDIRECTDRAWSURFACE lpDDSSrc; LPRECT lprSrc; DWORD dwFlags; LPDDBLTFX lpDDBltFx; } DDBLTBATCH; typedef DDBLTBATCH FAR * LPDDBLTBATCH; /* * DDGAMMARAMP */ typedef struct _DDGAMMARAMP { WORD red[256]; WORD green[256]; WORD blue[256]; } DDGAMMARAMP; typedef DDGAMMARAMP FAR * LPDDGAMMARAMP; /* * This is the structure within which DirectDraw returns data about the current graphics driver and chipset */ #define MAX_DDDEVICEID_STRING 512 typedef struct tagDDDEVICEIDENTIFIER { /* * These elements are for presentation to the user only. They should not be used to identify particular * drivers, since this is unreliable and many different strings may be associated with the same * device, and the same driver from different vendors. */ char szDriver[MAX_DDDEVICEID_STRING]; char szDescription[MAX_DDDEVICEID_STRING]; /* * This element is the version of the DirectDraw/3D driver. It is legal to do <, > comparisons * on the whole 64 bits. Caution should be exercised if you use this element to identify problematic * drivers. It is recommended that guidDeviceIdentifier is used for this purpose. * * This version has the form: * wProduct = HIWORD(liDriverVersion.HighPart) * wVersion = LOWORD(liDriverVersion.HighPart) * wSubVersion = HIWORD(liDriverVersion.LowPart) * wBuild = LOWORD(liDriverVersion.LowPart) */ #ifdef _WIN32 LARGE_INTEGER liDriverVersion; /* Defined for applications and other 32 bit components */ #else DWORD dwDriverVersionLowPart; /* Defined for 16 bit driver components */ DWORD dwDriverVersionHighPart; #endif /* * These elements can be used to identify particular chipsets. Use with extreme caution. * dwVendorId Identifies the manufacturer. May be zero if unknown. * dwDeviceId Identifies the type of chipset. May be zero if unknown. * dwSubSysId Identifies the subsystem, typically this means the particular board. May be zero if unknown. * dwRevision Identifies the revision level of the chipset. May be zero if unknown. */ DWORD dwVendorId; DWORD dwDeviceId; DWORD dwSubSysId; DWORD dwRevision; /* * This element can be used to check changes in driver/chipset. This GUID is a unique identifier for the * driver/chipset pair. Use this element if you wish to track changes to the driver/chipset in order to * reprofile the graphics subsystem. * This element can also be used to identify particular problematic drivers. */ GUID guidDeviceIdentifier; } DDDEVICEIDENTIFIER, * LPDDDEVICEIDENTIFIER; typedef struct tagDDDEVICEIDENTIFIER2 { /* * These elements are for presentation to the user only. They should not be used to identify particular * drivers, since this is unreliable and many different strings may be associated with the same * device, and the same driver from different vendors. */ char szDriver[MAX_DDDEVICEID_STRING]; char szDescription[MAX_DDDEVICEID_STRING]; /* * This element is the version of the DirectDraw/3D driver. It is legal to do <, > comparisons * on the whole 64 bits. Caution should be exercised if you use this element to identify problematic * drivers. It is recommended that guidDeviceIdentifier is used for this purpose. * * This version has the form: * wProduct = HIWORD(liDriverVersion.HighPart) * wVersion = LOWORD(liDriverVersion.HighPart) * wSubVersion = HIWORD(liDriverVersion.LowPart) * wBuild = LOWORD(liDriverVersion.LowPart) */ #ifdef _WIN32 LARGE_INTEGER liDriverVersion; /* Defined for applications and other 32 bit components */ #else DWORD dwDriverVersionLowPart; /* Defined for 16 bit driver components */ DWORD dwDriverVersionHighPart; #endif /* * These elements can be used to identify particular chipsets. Use with extreme caution. * dwVendorId Identifies the manufacturer. May be zero if unknown. * dwDeviceId Identifies the type of chipset. May be zero if unknown. * dwSubSysId Identifies the subsystem, typically this means the particular board. May be zero if unknown. * dwRevision Identifies the revision level of the chipset. May be zero if unknown. */ DWORD dwVendorId; DWORD dwDeviceId; DWORD dwSubSysId; DWORD dwRevision; /* * This element can be used to check changes in driver/chipset. This GUID is a unique identifier for the * driver/chipset pair. Use this element if you wish to track changes to the driver/chipset in order to * reprofile the graphics subsystem. * This element can also be used to identify particular problematic drivers. */ GUID guidDeviceIdentifier; /* * This element is used to determine the Windows Hardware Quality Lab (WHQL) * certification level for this driver/device pair. */ DWORD dwWHQLLevel; } DDDEVICEIDENTIFIER2, * LPDDDEVICEIDENTIFIER2; /* * Flags for the IDirectDraw4::GetDeviceIdentifier method */ /* * This flag causes GetDeviceIdentifier to return information about the host (typically 2D) adapter in a system equipped * with a stacked secondary 3D adapter. Such an adapter appears to the application as if it were part of the * host adapter, but is typically physcially located on a separate card. The stacked secondary's information is * returned when GetDeviceIdentifier's dwFlags field is zero, since this most accurately reflects the qualities * of the DirectDraw object involved. */ #define DDGDI_GETHOSTIDENTIFIER 0x00000001L /* * Macros for interpretting DDEVICEIDENTIFIER2.dwWHQLLevel */ #define GET_WHQL_YEAR( dwWHQLLevel ) \ ( (dwWHQLLevel) / 0x10000 ) #define GET_WHQL_MONTH( dwWHQLLevel ) \ ( ( (dwWHQLLevel) / 0x100 ) & 0x00ff ) #define GET_WHQL_DAY( dwWHQLLevel ) \ ( (dwWHQLLevel) & 0xff ) /* * callbacks */ typedef DWORD (FAR PASCAL *LPCLIPPERCALLBACK)(LPDIRECTDRAWCLIPPER lpDDClipper, HWND hWnd, DWORD code, LPVOID lpContext ); #ifdef STREAMING typedef DWORD (FAR PASCAL *LPSURFACESTREAMINGCALLBACK)(DWORD); #endif /* * INTERACES FOLLOW: * IDirectDraw * IDirectDrawClipper * IDirectDrawPalette * IDirectDrawSurface */ /* * IDirectDraw */ #if defined( _WIN32 ) && !defined( _NO_COM ) #undef INTERFACE #define INTERFACE IDirectDraw DECLARE_INTERFACE_( IDirectDraw, IUnknown ) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; /*** IDirectDraw methods ***/ STDMETHOD(Compact)(THIS) PURE; STDMETHOD(CreateClipper)(THIS_ DWORD, LPDIRECTDRAWCLIPPER FAR*, IUnknown FAR * ) PURE; STDMETHOD(CreatePalette)(THIS_ DWORD, LPPALETTEENTRY, LPDIRECTDRAWPALETTE FAR*, IUnknown FAR * ) PURE; STDMETHOD(CreateSurface)(THIS_ LPDDSURFACEDESC, LPDIRECTDRAWSURFACE FAR *, IUnknown FAR *) PURE; STDMETHOD(DuplicateSurface)( THIS_ LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE FAR * ) PURE; STDMETHOD(EnumDisplayModes)( THIS_ DWORD, LPDDSURFACEDESC, LPVOID, LPDDENUMMODESCALLBACK ) PURE; STDMETHOD(EnumSurfaces)(THIS_ DWORD, LPDDSURFACEDESC, LPVOID,LPDDENUMSURFACESCALLBACK ) PURE; STDMETHOD(FlipToGDISurface)(THIS) PURE; STDMETHOD(GetCaps)( THIS_ LPDDCAPS, LPDDCAPS) PURE; STDMETHOD(GetDisplayMode)( THIS_ LPDDSURFACEDESC) PURE; STDMETHOD(GetFourCCCodes)(THIS_ LPDWORD, LPDWORD ) PURE; STDMETHOD(GetGDISurface)(THIS_ LPDIRECTDRAWSURFACE FAR *) PURE; STDMETHOD(GetMonitorFrequency)(THIS_ LPDWORD) PURE; STDMETHOD(GetScanLine)(THIS_ LPDWORD) PURE; STDMETHOD(GetVerticalBlankStatus)(THIS_ LPBOOL ) PURE; STDMETHOD(Initialize)(THIS_ GUID FAR *) PURE; STDMETHOD(RestoreDisplayMode)(THIS) PURE; STDMETHOD(SetCooperativeLevel)(THIS_ HWND, DWORD) PURE; STDMETHOD(SetDisplayMode)(THIS_ DWORD, DWORD,DWORD) PURE; STDMETHOD(WaitForVerticalBlank)(THIS_ DWORD, HANDLE ) PURE; }; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirectDraw_QueryInterface(p, a, b) (p)->lpVtbl->QueryInterface(p, a, b) #define IDirectDraw_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectDraw_Release(p) (p)->lpVtbl->Release(p) #define IDirectDraw_Compact(p) (p)->lpVtbl->Compact(p) #define IDirectDraw_CreateClipper(p, a, b, c) (p)->lpVtbl->CreateClipper(p, a, b, c) #define IDirectDraw_CreatePalette(p, a, b, c, d) (p)->lpVtbl->CreatePalette(p, a, b, c, d) #define IDirectDraw_CreateSurface(p, a, b, c) (p)->lpVtbl->CreateSurface(p, a, b, c) #define IDirectDraw_DuplicateSurface(p, a, b) (p)->lpVtbl->DuplicateSurface(p, a, b) #define IDirectDraw_EnumDisplayModes(p, a, b, c, d) (p)->lpVtbl->EnumDisplayModes(p, a, b, c, d) #define IDirectDraw_EnumSurfaces(p, a, b, c, d) (p)->lpVtbl->EnumSurfaces(p, a, b, c, d) #define IDirectDraw_FlipToGDISurface(p) (p)->lpVtbl->FlipToGDISurface(p) #define IDirectDraw_GetCaps(p, a, b) (p)->lpVtbl->GetCaps(p, a, b) #define IDirectDraw_GetDisplayMode(p, a) (p)->lpVtbl->GetDisplayMode(p, a) #define IDirectDraw_GetFourCCCodes(p, a, b) (p)->lpVtbl->GetFourCCCodes(p, a, b) #define IDirectDraw_GetGDISurface(p, a) (p)->lpVtbl->GetGDISurface(p, a) #define IDirectDraw_GetMonitorFrequency(p, a) (p)->lpVtbl->GetMonitorFrequency(p, a) #define IDirectDraw_GetScanLine(p, a) (p)->lpVtbl->GetScanLine(p, a) #define IDirectDraw_GetVerticalBlankStatus(p, a) (p)->lpVtbl->GetVerticalBlankStatus(p, a) #define IDirectDraw_Initialize(p, a) (p)->lpVtbl->Initialize(p, a) #define IDirectDraw_RestoreDisplayMode(p) (p)->lpVtbl->RestoreDisplayMode(p) #define IDirectDraw_SetCooperativeLevel(p, a, b) (p)->lpVtbl->SetCooperativeLevel(p, a, b) #define IDirectDraw_SetDisplayMode(p, a, b, c) (p)->lpVtbl->SetDisplayMode(p, a, b, c) #define IDirectDraw_WaitForVerticalBlank(p, a, b) (p)->lpVtbl->WaitForVerticalBlank(p, a, b) #else #define IDirectDraw_QueryInterface(p, a, b) (p)->QueryInterface(a, b) #define IDirectDraw_AddRef(p) (p)->AddRef() #define IDirectDraw_Release(p) (p)->Release() #define IDirectDraw_Compact(p) (p)->Compact() #define IDirectDraw_CreateClipper(p, a, b, c) (p)->CreateClipper(a, b, c) #define IDirectDraw_CreatePalette(p, a, b, c, d) (p)->CreatePalette(a, b, c, d) #define IDirectDraw_CreateSurface(p, a, b, c) (p)->CreateSurface(a, b, c) #define IDirectDraw_DuplicateSurface(p, a, b) (p)->DuplicateSurface(a, b) #define IDirectDraw_EnumDisplayModes(p, a, b, c, d) (p)->EnumDisplayModes(a, b, c, d) #define IDirectDraw_EnumSurfaces(p, a, b, c, d) (p)->EnumSurfaces(a, b, c, d) #define IDirectDraw_FlipToGDISurface(p) (p)->FlipToGDISurface() #define IDirectDraw_GetCaps(p, a, b) (p)->GetCaps(a, b) #define IDirectDraw_GetDisplayMode(p, a) (p)->GetDisplayMode(a) #define IDirectDraw_GetFourCCCodes(p, a, b) (p)->GetFourCCCodes(a, b) #define IDirectDraw_GetGDISurface(p, a) (p)->GetGDISurface(a) #define IDirectDraw_GetMonitorFrequency(p, a) (p)->GetMonitorFrequency(a) #define IDirectDraw_GetScanLine(p, a) (p)->GetScanLine(a) #define IDirectDraw_GetVerticalBlankStatus(p, a) (p)->GetVerticalBlankStatus(a) #define IDirectDraw_Initialize(p, a) (p)->Initialize(a) #define IDirectDraw_RestoreDisplayMode(p) (p)->RestoreDisplayMode() #define IDirectDraw_SetCooperativeLevel(p, a, b) (p)->SetCooperativeLevel(a, b) #define IDirectDraw_SetDisplayMode(p, a, b, c) (p)->SetDisplayMode(a, b, c) #define IDirectDraw_WaitForVerticalBlank(p, a, b) (p)->WaitForVerticalBlank(a, b) #endif #endif #if defined( _WIN32 ) && !defined( _NO_COM ) #undef INTERFACE #define INTERFACE IDirectDraw2 DECLARE_INTERFACE_( IDirectDraw2, IUnknown ) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; /*** IDirectDraw methods ***/ STDMETHOD(Compact)(THIS) PURE; STDMETHOD(CreateClipper)(THIS_ DWORD, LPDIRECTDRAWCLIPPER FAR*, IUnknown FAR * ) PURE; STDMETHOD(CreatePalette)(THIS_ DWORD, LPPALETTEENTRY, LPDIRECTDRAWPALETTE FAR*, IUnknown FAR * ) PURE; STDMETHOD(CreateSurface)(THIS_ LPDDSURFACEDESC, LPDIRECTDRAWSURFACE FAR *, IUnknown FAR *) PURE; STDMETHOD(DuplicateSurface)( THIS_ LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE FAR * ) PURE; STDMETHOD(EnumDisplayModes)( THIS_ DWORD, LPDDSURFACEDESC, LPVOID, LPDDENUMMODESCALLBACK ) PURE; STDMETHOD(EnumSurfaces)(THIS_ DWORD, LPDDSURFACEDESC, LPVOID,LPDDENUMSURFACESCALLBACK ) PURE; STDMETHOD(FlipToGDISurface)(THIS) PURE; STDMETHOD(GetCaps)( THIS_ LPDDCAPS, LPDDCAPS) PURE; STDMETHOD(GetDisplayMode)( THIS_ LPDDSURFACEDESC) PURE; STDMETHOD(GetFourCCCodes)(THIS_ LPDWORD, LPDWORD ) PURE; STDMETHOD(GetGDISurface)(THIS_ LPDIRECTDRAWSURFACE FAR *) PURE; STDMETHOD(GetMonitorFrequency)(THIS_ LPDWORD) PURE; STDMETHOD(GetScanLine)(THIS_ LPDWORD) PURE; STDMETHOD(GetVerticalBlankStatus)(THIS_ LPBOOL ) PURE; STDMETHOD(Initialize)(THIS_ GUID FAR *) PURE; STDMETHOD(RestoreDisplayMode)(THIS) PURE; STDMETHOD(SetCooperativeLevel)(THIS_ HWND, DWORD) PURE; STDMETHOD(SetDisplayMode)(THIS_ DWORD, DWORD,DWORD, DWORD, DWORD) PURE; STDMETHOD(WaitForVerticalBlank)(THIS_ DWORD, HANDLE ) PURE; /*** Added in the v2 interface ***/ STDMETHOD(GetAvailableVidMem)(THIS_ LPDDSCAPS, LPDWORD, LPDWORD) PURE; }; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirectDraw2_QueryInterface(p, a, b) (p)->lpVtbl->QueryInterface(p, a, b) #define IDirectDraw2_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectDraw2_Release(p) (p)->lpVtbl->Release(p) #define IDirectDraw2_Compact(p) (p)->lpVtbl->Compact(p) #define IDirectDraw2_CreateClipper(p, a, b, c) (p)->lpVtbl->CreateClipper(p, a, b, c) #define IDirectDraw2_CreatePalette(p, a, b, c, d) (p)->lpVtbl->CreatePalette(p, a, b, c, d) #define IDirectDraw2_CreateSurface(p, a, b, c) (p)->lpVtbl->CreateSurface(p, a, b, c) #define IDirectDraw2_DuplicateSurface(p, a, b) (p)->lpVtbl->DuplicateSurface(p, a, b) #define IDirectDraw2_EnumDisplayModes(p, a, b, c, d) (p)->lpVtbl->EnumDisplayModes(p, a, b, c, d) #define IDirectDraw2_EnumSurfaces(p, a, b, c, d) (p)->lpVtbl->EnumSurfaces(p, a, b, c, d) #define IDirectDraw2_FlipToGDISurface(p) (p)->lpVtbl->FlipToGDISurface(p) #define IDirectDraw2_GetCaps(p, a, b) (p)->lpVtbl->GetCaps(p, a, b) #define IDirectDraw2_GetDisplayMode(p, a) (p)->lpVtbl->GetDisplayMode(p, a) #define IDirectDraw2_GetFourCCCodes(p, a, b) (p)->lpVtbl->GetFourCCCodes(p, a, b) #define IDirectDraw2_GetGDISurface(p, a) (p)->lpVtbl->GetGDISurface(p, a) #define IDirectDraw2_GetMonitorFrequency(p, a) (p)->lpVtbl->GetMonitorFrequency(p, a) #define IDirectDraw2_GetScanLine(p, a) (p)->lpVtbl->GetScanLine(p, a) #define IDirectDraw2_GetVerticalBlankStatus(p, a) (p)->lpVtbl->GetVerticalBlankStatus(p, a) #define IDirectDraw2_Initialize(p, a) (p)->lpVtbl->Initialize(p, a) #define IDirectDraw2_RestoreDisplayMode(p) (p)->lpVtbl->RestoreDisplayMode(p) #define IDirectDraw2_SetCooperativeLevel(p, a, b) (p)->lpVtbl->SetCooperativeLevel(p, a, b) #define IDirectDraw2_SetDisplayMode(p, a, b, c, d, e) (p)->lpVtbl->SetDisplayMode(p, a, b, c, d, e) #define IDirectDraw2_WaitForVerticalBlank(p, a, b) (p)->lpVtbl->WaitForVerticalBlank(p, a, b) #define IDirectDraw2_GetAvailableVidMem(p, a, b, c) (p)->lpVtbl->GetAvailableVidMem(p, a, b, c) #else #define IDirectDraw2_QueryInterface(p, a, b) (p)->QueryInterface(a, b) #define IDirectDraw2_AddRef(p) (p)->AddRef() #define IDirectDraw2_Release(p) (p)->Release() #define IDirectDraw2_Compact(p) (p)->Compact() #define IDirectDraw2_CreateClipper(p, a, b, c) (p)->CreateClipper(a, b, c) #define IDirectDraw2_CreatePalette(p, a, b, c, d) (p)->CreatePalette(a, b, c, d) #define IDirectDraw2_CreateSurface(p, a, b, c) (p)->CreateSurface(a, b, c) #define IDirectDraw2_DuplicateSurface(p, a, b) (p)->DuplicateSurface(a, b) #define IDirectDraw2_EnumDisplayModes(p, a, b, c, d) (p)->EnumDisplayModes(a, b, c, d) #define IDirectDraw2_EnumSurfaces(p, a, b, c, d) (p)->EnumSurfaces(a, b, c, d) #define IDirectDraw2_FlipToGDISurface(p) (p)->FlipToGDISurface() #define IDirectDraw2_GetCaps(p, a, b) (p)->GetCaps(a, b) #define IDirectDraw2_GetDisplayMode(p, a) (p)->GetDisplayMode(a) #define IDirectDraw2_GetFourCCCodes(p, a, b) (p)->GetFourCCCodes(a, b) #define IDirectDraw2_GetGDISurface(p, a) (p)->GetGDISurface(a) #define IDirectDraw2_GetMonitorFrequency(p, a) (p)->GetMonitorFrequency(a) #define IDirectDraw2_GetScanLine(p, a) (p)->GetScanLine(a) #define IDirectDraw2_GetVerticalBlankStatus(p, a) (p)->GetVerticalBlankStatus(a) #define IDirectDraw2_Initialize(p, a) (p)->Initialize(a) #define IDirectDraw2_RestoreDisplayMode(p) (p)->RestoreDisplayMode() #define IDirectDraw2_SetCooperativeLevel(p, a, b) (p)->SetCooperativeLevel(a, b) #define IDirectDraw2_SetDisplayMode(p, a, b, c, d, e) (p)->SetDisplayMode(a, b, c, d, e) #define IDirectDraw2_WaitForVerticalBlank(p, a, b) (p)->WaitForVerticalBlank(a, b) #define IDirectDraw2_GetAvailableVidMem(p, a, b, c) (p)->GetAvailableVidMem(a, b, c) #endif #endif #if defined( _WIN32 ) && !defined( _NO_COM ) #undef INTERFACE #define INTERFACE IDirectDraw4 DECLARE_INTERFACE_( IDirectDraw4, IUnknown ) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; /*** IDirectDraw methods ***/ STDMETHOD(Compact)(THIS) PURE; STDMETHOD(CreateClipper)(THIS_ DWORD, LPDIRECTDRAWCLIPPER FAR*, IUnknown FAR * ) PURE; STDMETHOD(CreatePalette)(THIS_ DWORD, LPPALETTEENTRY, LPDIRECTDRAWPALETTE FAR*, IUnknown FAR * ) PURE; STDMETHOD(CreateSurface)(THIS_ LPDDSURFACEDESC2, LPDIRECTDRAWSURFACE4 FAR *, IUnknown FAR *) PURE; STDMETHOD(DuplicateSurface)( THIS_ LPDIRECTDRAWSURFACE4, LPDIRECTDRAWSURFACE4 FAR * ) PURE; STDMETHOD(EnumDisplayModes)( THIS_ DWORD, LPDDSURFACEDESC2, LPVOID, LPDDENUMMODESCALLBACK2 ) PURE; STDMETHOD(EnumSurfaces)(THIS_ DWORD, LPDDSURFACEDESC2, LPVOID,LPDDENUMSURFACESCALLBACK2 ) PURE; STDMETHOD(FlipToGDISurface)(THIS) PURE; STDMETHOD(GetCaps)( THIS_ LPDDCAPS, LPDDCAPS) PURE; STDMETHOD(GetDisplayMode)( THIS_ LPDDSURFACEDESC2) PURE; STDMETHOD(GetFourCCCodes)(THIS_ LPDWORD, LPDWORD ) PURE; STDMETHOD(GetGDISurface)(THIS_ LPDIRECTDRAWSURFACE4 FAR *) PURE; STDMETHOD(GetMonitorFrequency)(THIS_ LPDWORD) PURE; STDMETHOD(GetScanLine)(THIS_ LPDWORD) PURE; STDMETHOD(GetVerticalBlankStatus)(THIS_ LPBOOL ) PURE; STDMETHOD(Initialize)(THIS_ GUID FAR *) PURE; STDMETHOD(RestoreDisplayMode)(THIS) PURE; STDMETHOD(SetCooperativeLevel)(THIS_ HWND, DWORD) PURE; STDMETHOD(SetDisplayMode)(THIS_ DWORD, DWORD,DWORD, DWORD, DWORD) PURE; STDMETHOD(WaitForVerticalBlank)(THIS_ DWORD, HANDLE ) PURE; /*** Added in the v2 interface ***/ STDMETHOD(GetAvailableVidMem)(THIS_ LPDDSCAPS2, LPDWORD, LPDWORD) PURE; /*** Added in the V4 Interface ***/ STDMETHOD(GetSurfaceFromDC) (THIS_ HDC, LPDIRECTDRAWSURFACE4 *) PURE; STDMETHOD(RestoreAllSurfaces)(THIS) PURE; STDMETHOD(TestCooperativeLevel)(THIS) PURE; STDMETHOD(GetDeviceIdentifier)(THIS_ LPDDDEVICEIDENTIFIER, DWORD ) PURE; }; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirectDraw4_QueryInterface(p, a, b) (p)->lpVtbl->QueryInterface(p, a, b) #define IDirectDraw4_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectDraw4_Release(p) (p)->lpVtbl->Release(p) #define IDirectDraw4_Compact(p) (p)->lpVtbl->Compact(p) #define IDirectDraw4_CreateClipper(p, a, b, c) (p)->lpVtbl->CreateClipper(p, a, b, c) #define IDirectDraw4_CreatePalette(p, a, b, c, d) (p)->lpVtbl->CreatePalette(p, a, b, c, d) #define IDirectDraw4_CreateSurface(p, a, b, c) (p)->lpVtbl->CreateSurface(p, a, b, c) #define IDirectDraw4_DuplicateSurface(p, a, b) (p)->lpVtbl->DuplicateSurface(p, a, b) #define IDirectDraw4_EnumDisplayModes(p, a, b, c, d) (p)->lpVtbl->EnumDisplayModes(p, a, b, c, d) #define IDirectDraw4_EnumSurfaces(p, a, b, c, d) (p)->lpVtbl->EnumSurfaces(p, a, b, c, d) #define IDirectDraw4_FlipToGDISurface(p) (p)->lpVtbl->FlipToGDISurface(p) #define IDirectDraw4_GetCaps(p, a, b) (p)->lpVtbl->GetCaps(p, a, b) #define IDirectDraw4_GetDisplayMode(p, a) (p)->lpVtbl->GetDisplayMode(p, a) #define IDirectDraw4_GetFourCCCodes(p, a, b) (p)->lpVtbl->GetFourCCCodes(p, a, b) #define IDirectDraw4_GetGDISurface(p, a) (p)->lpVtbl->GetGDISurface(p, a) #define IDirectDraw4_GetMonitorFrequency(p, a) (p)->lpVtbl->GetMonitorFrequency(p, a) #define IDirectDraw4_GetScanLine(p, a) (p)->lpVtbl->GetScanLine(p, a) #define IDirectDraw4_GetVerticalBlankStatus(p, a) (p)->lpVtbl->GetVerticalBlankStatus(p, a) #define IDirectDraw4_Initialize(p, a) (p)->lpVtbl->Initialize(p, a) #define IDirectDraw4_RestoreDisplayMode(p) (p)->lpVtbl->RestoreDisplayMode(p) #define IDirectDraw4_SetCooperativeLevel(p, a, b) (p)->lpVtbl->SetCooperativeLevel(p, a, b) #define IDirectDraw4_SetDisplayMode(p, a, b, c, d, e) (p)->lpVtbl->SetDisplayMode(p, a, b, c, d, e) #define IDirectDraw4_WaitForVerticalBlank(p, a, b) (p)->lpVtbl->WaitForVerticalBlank(p, a, b) #define IDirectDraw4_GetAvailableVidMem(p, a, b, c) (p)->lpVtbl->GetAvailableVidMem(p, a, b, c) #define IDirectDraw4_GetSurfaceFromDC(p, a, b) (p)->lpVtbl->GetSurfaceFromDC(p, a, b) #define IDirectDraw4_RestoreAllSurfaces(p) (p)->lpVtbl->RestoreAllSurfaces(p) #define IDirectDraw4_TestCooperativeLevel(p) (p)->lpVtbl->TestCooperativeLevel(p) #define IDirectDraw4_GetDeviceIdentifier(p,a,b) (p)->lpVtbl->GetDeviceIdentifier(p,a,b) #else #define IDirectDraw4_QueryInterface(p, a, b) (p)->QueryInterface(a, b) #define IDirectDraw4_AddRef(p) (p)->AddRef() #define IDirectDraw4_Release(p) (p)->Release() #define IDirectDraw4_Compact(p) (p)->Compact() #define IDirectDraw4_CreateClipper(p, a, b, c) (p)->CreateClipper(a, b, c) #define IDirectDraw4_CreatePalette(p, a, b, c, d) (p)->CreatePalette(a, b, c, d) #define IDirectDraw4_CreateSurface(p, a, b, c) (p)->CreateSurface(a, b, c) #define IDirectDraw4_DuplicateSurface(p, a, b) (p)->DuplicateSurface(a, b) #define IDirectDraw4_EnumDisplayModes(p, a, b, c, d) (p)->EnumDisplayModes(a, b, c, d) #define IDirectDraw4_EnumSurfaces(p, a, b, c, d) (p)->EnumSurfaces(a, b, c, d) #define IDirectDraw4_FlipToGDISurface(p) (p)->FlipToGDISurface() #define IDirectDraw4_GetCaps(p, a, b) (p)->GetCaps(a, b) #define IDirectDraw4_GetDisplayMode(p, a) (p)->GetDisplayMode(a) #define IDirectDraw4_GetFourCCCodes(p, a, b) (p)->GetFourCCCodes(a, b) #define IDirectDraw4_GetGDISurface(p, a) (p)->GetGDISurface(a) #define IDirectDraw4_GetMonitorFrequency(p, a) (p)->GetMonitorFrequency(a) #define IDirectDraw4_GetScanLine(p, a) (p)->GetScanLine(a) #define IDirectDraw4_GetVerticalBlankStatus(p, a) (p)->GetVerticalBlankStatus(a) #define IDirectDraw4_Initialize(p, a) (p)->Initialize(a) #define IDirectDraw4_RestoreDisplayMode(p) (p)->RestoreDisplayMode() #define IDirectDraw4_SetCooperativeLevel(p, a, b) (p)->SetCooperativeLevel(a, b) #define IDirectDraw4_SetDisplayMode(p, a, b, c, d, e) (p)->SetDisplayMode(a, b, c, d, e) #define IDirectDraw4_WaitForVerticalBlank(p, a, b) (p)->WaitForVerticalBlank(a, b) #define IDirectDraw4_GetAvailableVidMem(p, a, b, c) (p)->GetAvailableVidMem(a, b, c) #define IDirectDraw4_GetSurfaceFromDC(p, a, b) (p)->GetSurfaceFromDC(a, b) #define IDirectDraw4_RestoreAllSurfaces(p) (p)->RestoreAllSurfaces() #define IDirectDraw4_TestCooperativeLevel(p) (p)->TestCooperativeLevel() #define IDirectDraw4_GetDeviceIdentifier(p,a,b) (p)->GetDeviceIdentifier(a,b) #endif #endif #if defined( _WIN32 ) && !defined( _NO_COM ) #undef INTERFACE #define INTERFACE IDirectDraw7 DECLARE_INTERFACE_( IDirectDraw7, IUnknown ) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; /*** IDirectDraw methods ***/ STDMETHOD(Compact)(THIS) PURE; STDMETHOD(CreateClipper)(THIS_ DWORD, LPDIRECTDRAWCLIPPER FAR*, IUnknown FAR * ) PURE; STDMETHOD(CreatePalette)(THIS_ DWORD, LPPALETTEENTRY, LPDIRECTDRAWPALETTE FAR*, IUnknown FAR * ) PURE; STDMETHOD(CreateSurface)(THIS_ LPDDSURFACEDESC2, LPDIRECTDRAWSURFACE7 FAR *, IUnknown FAR *) PURE; STDMETHOD(DuplicateSurface)( THIS_ LPDIRECTDRAWSURFACE7, LPDIRECTDRAWSURFACE7 FAR * ) PURE; STDMETHOD(EnumDisplayModes)( THIS_ DWORD, LPDDSURFACEDESC2, LPVOID, LPDDENUMMODESCALLBACK2 ) PURE; STDMETHOD(EnumSurfaces)(THIS_ DWORD, LPDDSURFACEDESC2, LPVOID,LPDDENUMSURFACESCALLBACK7 ) PURE; STDMETHOD(FlipToGDISurface)(THIS) PURE; STDMETHOD(GetCaps)( THIS_ LPDDCAPS, LPDDCAPS) PURE; STDMETHOD(GetDisplayMode)( THIS_ LPDDSURFACEDESC2) PURE; STDMETHOD(GetFourCCCodes)(THIS_ LPDWORD, LPDWORD ) PURE; STDMETHOD(GetGDISurface)(THIS_ LPDIRECTDRAWSURFACE7 FAR *) PURE; STDMETHOD(GetMonitorFrequency)(THIS_ LPDWORD) PURE; STDMETHOD(GetScanLine)(THIS_ LPDWORD) PURE; STDMETHOD(GetVerticalBlankStatus)(THIS_ LPBOOL ) PURE; STDMETHOD(Initialize)(THIS_ GUID FAR *) PURE; STDMETHOD(RestoreDisplayMode)(THIS) PURE; STDMETHOD(SetCooperativeLevel)(THIS_ HWND, DWORD) PURE; STDMETHOD(SetDisplayMode)(THIS_ DWORD, DWORD,DWORD, DWORD, DWORD) PURE; STDMETHOD(WaitForVerticalBlank)(THIS_ DWORD, HANDLE ) PURE; /*** Added in the v2 interface ***/ STDMETHOD(GetAvailableVidMem)(THIS_ LPDDSCAPS2, LPDWORD, LPDWORD) PURE; /*** Added in the V4 Interface ***/ STDMETHOD(GetSurfaceFromDC) (THIS_ HDC, LPDIRECTDRAWSURFACE7 *) PURE; STDMETHOD(RestoreAllSurfaces)(THIS) PURE; STDMETHOD(TestCooperativeLevel)(THIS) PURE; STDMETHOD(GetDeviceIdentifier)(THIS_ LPDDDEVICEIDENTIFIER2, DWORD ) PURE; STDMETHOD(StartModeTest)(THIS_ LPSIZE, DWORD, DWORD ) PURE; STDMETHOD(EvaluateMode)(THIS_ DWORD, DWORD * ) PURE; }; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirectDraw7_QueryInterface(p, a, b) (p)->lpVtbl->QueryInterface(p, a, b) #define IDirectDraw7_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectDraw7_Release(p) (p)->lpVtbl->Release(p) #define IDirectDraw7_Compact(p) (p)->lpVtbl->Compact(p) #define IDirectDraw7_CreateClipper(p, a, b, c) (p)->lpVtbl->CreateClipper(p, a, b, c) #define IDirectDraw7_CreatePalette(p, a, b, c, d) (p)->lpVtbl->CreatePalette(p, a, b, c, d) #define IDirectDraw7_CreateSurface(p, a, b, c) (p)->lpVtbl->CreateSurface(p, a, b, c) #define IDirectDraw7_DuplicateSurface(p, a, b) (p)->lpVtbl->DuplicateSurface(p, a, b) #define IDirectDraw7_EnumDisplayModes(p, a, b, c, d) (p)->lpVtbl->EnumDisplayModes(p, a, b, c, d) #define IDirectDraw7_EnumSurfaces(p, a, b, c, d) (p)->lpVtbl->EnumSurfaces(p, a, b, c, d) #define IDirectDraw7_FlipToGDISurface(p) (p)->lpVtbl->FlipToGDISurface(p) #define IDirectDraw7_GetCaps(p, a, b) (p)->lpVtbl->GetCaps(p, a, b) #define IDirectDraw7_GetDisplayMode(p, a) (p)->lpVtbl->GetDisplayMode(p, a) #define IDirectDraw7_GetFourCCCodes(p, a, b) (p)->lpVtbl->GetFourCCCodes(p, a, b) #define IDirectDraw7_GetGDISurface(p, a) (p)->lpVtbl->GetGDISurface(p, a) #define IDirectDraw7_GetMonitorFrequency(p, a) (p)->lpVtbl->GetMonitorFrequency(p, a) #define IDirectDraw7_GetScanLine(p, a) (p)->lpVtbl->GetScanLine(p, a) #define IDirectDraw7_GetVerticalBlankStatus(p, a) (p)->lpVtbl->GetVerticalBlankStatus(p, a) #define IDirectDraw7_Initialize(p, a) (p)->lpVtbl->Initialize(p, a) #define IDirectDraw7_RestoreDisplayMode(p) (p)->lpVtbl->RestoreDisplayMode(p) #define IDirectDraw7_SetCooperativeLevel(p, a, b) (p)->lpVtbl->SetCooperativeLevel(p, a, b) #define IDirectDraw7_SetDisplayMode(p, a, b, c, d, e) (p)->lpVtbl->SetDisplayMode(p, a, b, c, d, e) #define IDirectDraw7_WaitForVerticalBlank(p, a, b) (p)->lpVtbl->WaitForVerticalBlank(p, a, b) #define IDirectDraw7_GetAvailableVidMem(p, a, b, c) (p)->lpVtbl->GetAvailableVidMem(p, a, b, c) #define IDirectDraw7_GetSurfaceFromDC(p, a, b) (p)->lpVtbl->GetSurfaceFromDC(p, a, b) #define IDirectDraw7_RestoreAllSurfaces(p) (p)->lpVtbl->RestoreAllSurfaces(p) #define IDirectDraw7_TestCooperativeLevel(p) (p)->lpVtbl->TestCooperativeLevel(p) #define IDirectDraw7_GetDeviceIdentifier(p,a,b) (p)->lpVtbl->GetDeviceIdentifier(p,a,b) #define IDirectDraw7_StartModeTest(p,a,b,c) (p)->lpVtbl->StartModeTest(p,a,b,c) #define IDirectDraw7_EvaluateMode(p,a,b) (p)->lpVtbl->EvaluateMode(p,a,b) #else #define IDirectDraw7_QueryInterface(p, a, b) (p)->QueryInterface(a, b) #define IDirectDraw7_AddRef(p) (p)->AddRef() #define IDirectDraw7_Release(p) (p)->Release() #define IDirectDraw7_Compact(p) (p)->Compact() #define IDirectDraw7_CreateClipper(p, a, b, c) (p)->CreateClipper(a, b, c) #define IDirectDraw7_CreatePalette(p, a, b, c, d) (p)->CreatePalette(a, b, c, d) #define IDirectDraw7_CreateSurface(p, a, b, c) (p)->CreateSurface(a, b, c) #define IDirectDraw7_DuplicateSurface(p, a, b) (p)->DuplicateSurface(a, b) #define IDirectDraw7_EnumDisplayModes(p, a, b, c, d) (p)->EnumDisplayModes(a, b, c, d) #define IDirectDraw7_EnumSurfaces(p, a, b, c, d) (p)->EnumSurfaces(a, b, c, d) #define IDirectDraw7_FlipToGDISurface(p) (p)->FlipToGDISurface() #define IDirectDraw7_GetCaps(p, a, b) (p)->GetCaps(a, b) #define IDirectDraw7_GetDisplayMode(p, a) (p)->GetDisplayMode(a) #define IDirectDraw7_GetFourCCCodes(p, a, b) (p)->GetFourCCCodes(a, b) #define IDirectDraw7_GetGDISurface(p, a) (p)->GetGDISurface(a) #define IDirectDraw7_GetMonitorFrequency(p, a) (p)->GetMonitorFrequency(a) #define IDirectDraw7_GetScanLine(p, a) (p)->GetScanLine(a) #define IDirectDraw7_GetVerticalBlankStatus(p, a) (p)->GetVerticalBlankStatus(a) #define IDirectDraw7_Initialize(p, a) (p)->Initialize(a) #define IDirectDraw7_RestoreDisplayMode(p) (p)->RestoreDisplayMode() #define IDirectDraw7_SetCooperativeLevel(p, a, b) (p)->SetCooperativeLevel(a, b) #define IDirectDraw7_SetDisplayMode(p, a, b, c, d, e) (p)->SetDisplayMode(a, b, c, d, e) #define IDirectDraw7_WaitForVerticalBlank(p, a, b) (p)->WaitForVerticalBlank(a, b) #define IDirectDraw7_GetAvailableVidMem(p, a, b, c) (p)->GetAvailableVidMem(a, b, c) #define IDirectDraw7_GetSurfaceFromDC(p, a, b) (p)->GetSurfaceFromDC(a, b) #define IDirectDraw7_RestoreAllSurfaces(p) (p)->RestoreAllSurfaces() #define IDirectDraw7_TestCooperativeLevel(p) (p)->TestCooperativeLevel() #define IDirectDraw7_GetDeviceIdentifier(p,a,b) (p)->GetDeviceIdentifier(a,b) #define IDirectDraw7_StartModeTest(p,a,b,c) (p)->lpVtbl->StartModeTest(a,b,c) #define IDirectDraw7_EvaluateMode(p,a,b) (p)->lpVtbl->EvaluateMode(a,b) #endif #endif /* * IDirectDrawPalette */ #if defined( _WIN32 ) && !defined( _NO_COM ) #undef INTERFACE #define INTERFACE IDirectDrawPalette DECLARE_INTERFACE_( IDirectDrawPalette, IUnknown ) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; /*** IDirectDrawPalette methods ***/ STDMETHOD(GetCaps)(THIS_ LPDWORD) PURE; STDMETHOD(GetEntries)(THIS_ DWORD,DWORD,DWORD,LPPALETTEENTRY) PURE; STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW, DWORD, LPPALETTEENTRY) PURE; STDMETHOD(SetEntries)(THIS_ DWORD,DWORD,DWORD,LPPALETTEENTRY) PURE; }; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirectDrawPalette_QueryInterface(p, a, b) (p)->lpVtbl->QueryInterface(p, a, b) #define IDirectDrawPalette_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectDrawPalette_Release(p) (p)->lpVtbl->Release(p) #define IDirectDrawPalette_GetCaps(p, a) (p)->lpVtbl->GetCaps(p, a) #define IDirectDrawPalette_GetEntries(p, a, b, c, d) (p)->lpVtbl->GetEntries(p, a, b, c, d) #define IDirectDrawPalette_Initialize(p, a, b, c) (p)->lpVtbl->Initialize(p, a, b, c) #define IDirectDrawPalette_SetEntries(p, a, b, c, d) (p)->lpVtbl->SetEntries(p, a, b, c, d) #else #define IDirectDrawPalette_QueryInterface(p, a, b) (p)->QueryInterface(a, b) #define IDirectDrawPalette_AddRef(p) (p)->AddRef() #define IDirectDrawPalette_Release(p) (p)->Release() #define IDirectDrawPalette_GetCaps(p, a) (p)->GetCaps(a) #define IDirectDrawPalette_GetEntries(p, a, b, c, d) (p)->GetEntries(a, b, c, d) #define IDirectDrawPalette_Initialize(p, a, b, c) (p)->Initialize(a, b, c) #define IDirectDrawPalette_SetEntries(p, a, b, c, d) (p)->SetEntries(a, b, c, d) #endif #endif /* * IDirectDrawClipper */ #if defined( _WIN32 ) && !defined( _NO_COM ) #undef INTERFACE #define INTERFACE IDirectDrawClipper DECLARE_INTERFACE_( IDirectDrawClipper, IUnknown ) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; /*** IDirectDrawClipper methods ***/ STDMETHOD(GetClipList)(THIS_ LPRECT, LPRGNDATA, LPDWORD) PURE; STDMETHOD(GetHWnd)(THIS_ HWND FAR *) PURE; STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW, DWORD) PURE; STDMETHOD(IsClipListChanged)(THIS_ BOOL FAR *) PURE; STDMETHOD(SetClipList)(THIS_ LPRGNDATA,DWORD) PURE; STDMETHOD(SetHWnd)(THIS_ DWORD, HWND ) PURE; }; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirectDrawClipper_QueryInterface(p, a, b) (p)->lpVtbl->QueryInterface(p, a, b) #define IDirectDrawClipper_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectDrawClipper_Release(p) (p)->lpVtbl->Release(p) #define IDirectDrawClipper_GetClipList(p, a, b, c) (p)->lpVtbl->GetClipList(p, a, b, c) #define IDirectDrawClipper_GetHWnd(p, a) (p)->lpVtbl->GetHWnd(p, a) #define IDirectDrawClipper_Initialize(p, a, b) (p)->lpVtbl->Initialize(p, a, b) #define IDirectDrawClipper_IsClipListChanged(p, a) (p)->lpVtbl->IsClipListChanged(p, a) #define IDirectDrawClipper_SetClipList(p, a, b) (p)->lpVtbl->SetClipList(p, a, b) #define IDirectDrawClipper_SetHWnd(p, a, b) (p)->lpVtbl->SetHWnd(p, a, b) #else #define IDirectDrawClipper_QueryInterface(p, a, b) (p)->QueryInterface(a, b) #define IDirectDrawClipper_AddRef(p) (p)->AddRef() #define IDirectDrawClipper_Release(p) (p)->Release() #define IDirectDrawClipper_GetClipList(p, a, b, c) (p)->GetClipList(a, b, c) #define IDirectDrawClipper_GetHWnd(p, a) (p)->GetHWnd(a) #define IDirectDrawClipper_Initialize(p, a, b) (p)->Initialize(a, b) #define IDirectDrawClipper_IsClipListChanged(p, a) (p)->IsClipListChanged(a) #define IDirectDrawClipper_SetClipList(p, a, b) (p)->SetClipList(a, b) #define IDirectDrawClipper_SetHWnd(p, a, b) (p)->SetHWnd(a, b) #endif #endif /* * IDirectDrawSurface and related interfaces */ #if defined( _WIN32 ) && !defined( _NO_COM ) #undef INTERFACE #define INTERFACE IDirectDrawSurface DECLARE_INTERFACE_( IDirectDrawSurface, IUnknown ) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; /*** IDirectDrawSurface methods ***/ STDMETHOD(AddAttachedSurface)(THIS_ LPDIRECTDRAWSURFACE) PURE; STDMETHOD(AddOverlayDirtyRect)(THIS_ LPRECT) PURE; STDMETHOD(Blt)(THIS_ LPRECT,LPDIRECTDRAWSURFACE, LPRECT,DWORD, LPDDBLTFX) PURE; STDMETHOD(BltBatch)(THIS_ LPDDBLTBATCH, DWORD, DWORD ) PURE; STDMETHOD(BltFast)(THIS_ DWORD,DWORD,LPDIRECTDRAWSURFACE, LPRECT,DWORD) PURE; STDMETHOD(DeleteAttachedSurface)(THIS_ DWORD,LPDIRECTDRAWSURFACE) PURE; STDMETHOD(EnumAttachedSurfaces)(THIS_ LPVOID,LPDDENUMSURFACESCALLBACK) PURE; STDMETHOD(EnumOverlayZOrders)(THIS_ DWORD,LPVOID,LPDDENUMSURFACESCALLBACK) PURE; STDMETHOD(Flip)(THIS_ LPDIRECTDRAWSURFACE, DWORD) PURE; STDMETHOD(GetAttachedSurface)(THIS_ LPDDSCAPS, LPDIRECTDRAWSURFACE FAR *) PURE; STDMETHOD(GetBltStatus)(THIS_ DWORD) PURE; STDMETHOD(GetCaps)(THIS_ LPDDSCAPS) PURE; STDMETHOD(GetClipper)(THIS_ LPDIRECTDRAWCLIPPER FAR*) PURE; STDMETHOD(GetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE; STDMETHOD(GetDC)(THIS_ HDC FAR *) PURE; STDMETHOD(GetFlipStatus)(THIS_ DWORD) PURE; STDMETHOD(GetOverlayPosition)(THIS_ LPLONG, LPLONG ) PURE; STDMETHOD(GetPalette)(THIS_ LPDIRECTDRAWPALETTE FAR*) PURE; STDMETHOD(GetPixelFormat)(THIS_ LPDDPIXELFORMAT) PURE; STDMETHOD(GetSurfaceDesc)(THIS_ LPDDSURFACEDESC) PURE; STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW, LPDDSURFACEDESC) PURE; STDMETHOD(IsLost)(THIS) PURE; STDMETHOD(Lock)(THIS_ LPRECT,LPDDSURFACEDESC,DWORD,HANDLE) PURE; STDMETHOD(ReleaseDC)(THIS_ HDC) PURE; STDMETHOD(Restore)(THIS) PURE; STDMETHOD(SetClipper)(THIS_ LPDIRECTDRAWCLIPPER) PURE; STDMETHOD(SetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE; STDMETHOD(SetOverlayPosition)(THIS_ LONG, LONG ) PURE; STDMETHOD(SetPalette)(THIS_ LPDIRECTDRAWPALETTE) PURE; STDMETHOD(Unlock)(THIS_ LPVOID) PURE; STDMETHOD(UpdateOverlay)(THIS_ LPRECT, LPDIRECTDRAWSURFACE,LPRECT,DWORD, LPDDOVERLAYFX) PURE; STDMETHOD(UpdateOverlayDisplay)(THIS_ DWORD) PURE; STDMETHOD(UpdateOverlayZOrder)(THIS_ DWORD, LPDIRECTDRAWSURFACE) PURE; }; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirectDrawSurface_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectDrawSurface_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectDrawSurface_Release(p) (p)->lpVtbl->Release(p) #define IDirectDrawSurface_AddAttachedSurface(p,a) (p)->lpVtbl->AddAttachedSurface(p,a) #define IDirectDrawSurface_AddOverlayDirtyRect(p,a) (p)->lpVtbl->AddOverlayDirtyRect(p,a) #define IDirectDrawSurface_Blt(p,a,b,c,d,e) (p)->lpVtbl->Blt(p,a,b,c,d,e) #define IDirectDrawSurface_BltBatch(p,a,b,c) (p)->lpVtbl->BltBatch(p,a,b,c) #define IDirectDrawSurface_BltFast(p,a,b,c,d,e) (p)->lpVtbl->BltFast(p,a,b,c,d,e) #define IDirectDrawSurface_DeleteAttachedSurface(p,a,b) (p)->lpVtbl->DeleteAttachedSurface(p,a,b) #define IDirectDrawSurface_EnumAttachedSurfaces(p,a,b) (p)->lpVtbl->EnumAttachedSurfaces(p,a,b) #define IDirectDrawSurface_EnumOverlayZOrders(p,a,b,c) (p)->lpVtbl->EnumOverlayZOrders(p,a,b,c) #define IDirectDrawSurface_Flip(p,a,b) (p)->lpVtbl->Flip(p,a,b) #define IDirectDrawSurface_GetAttachedSurface(p,a,b) (p)->lpVtbl->GetAttachedSurface(p,a,b) #define IDirectDrawSurface_GetBltStatus(p,a) (p)->lpVtbl->GetBltStatus(p,a) #define IDirectDrawSurface_GetCaps(p,b) (p)->lpVtbl->GetCaps(p,b) #define IDirectDrawSurface_GetClipper(p,a) (p)->lpVtbl->GetClipper(p,a) #define IDirectDrawSurface_GetColorKey(p,a,b) (p)->lpVtbl->GetColorKey(p,a,b) #define IDirectDrawSurface_GetDC(p,a) (p)->lpVtbl->GetDC(p,a) #define IDirectDrawSurface_GetFlipStatus(p,a) (p)->lpVtbl->GetFlipStatus(p,a) #define IDirectDrawSurface_GetOverlayPosition(p,a,b) (p)->lpVtbl->GetOverlayPosition(p,a,b) #define IDirectDrawSurface_GetPalette(p,a) (p)->lpVtbl->GetPalette(p,a) #define IDirectDrawSurface_GetPixelFormat(p,a) (p)->lpVtbl->GetPixelFormat(p,a) #define IDirectDrawSurface_GetSurfaceDesc(p,a) (p)->lpVtbl->GetSurfaceDesc(p,a) #define IDirectDrawSurface_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b) #define IDirectDrawSurface_IsLost(p) (p)->lpVtbl->IsLost(p) #define IDirectDrawSurface_Lock(p,a,b,c,d) (p)->lpVtbl->Lock(p,a,b,c,d) #define IDirectDrawSurface_ReleaseDC(p,a) (p)->lpVtbl->ReleaseDC(p,a) #define IDirectDrawSurface_Restore(p) (p)->lpVtbl->Restore(p) #define IDirectDrawSurface_SetClipper(p,a) (p)->lpVtbl->SetClipper(p,a) #define IDirectDrawSurface_SetColorKey(p,a,b) (p)->lpVtbl->SetColorKey(p,a,b) #define IDirectDrawSurface_SetOverlayPosition(p,a,b) (p)->lpVtbl->SetOverlayPosition(p,a,b) #define IDirectDrawSurface_SetPalette(p,a) (p)->lpVtbl->SetPalette(p,a) #define IDirectDrawSurface_Unlock(p,b) (p)->lpVtbl->Unlock(p,b) #define IDirectDrawSurface_UpdateOverlay(p,a,b,c,d,e) (p)->lpVtbl->UpdateOverlay(p,a,b,c,d,e) #define IDirectDrawSurface_UpdateOverlayDisplay(p,a) (p)->lpVtbl->UpdateOverlayDisplay(p,a) #define IDirectDrawSurface_UpdateOverlayZOrder(p,a,b) (p)->lpVtbl->UpdateOverlayZOrder(p,a,b) #else #define IDirectDrawSurface_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirectDrawSurface_AddRef(p) (p)->AddRef() #define IDirectDrawSurface_Release(p) (p)->Release() #define IDirectDrawSurface_AddAttachedSurface(p,a) (p)->AddAttachedSurface(a) #define IDirectDrawSurface_AddOverlayDirtyRect(p,a) (p)->AddOverlayDirtyRect(a) #define IDirectDrawSurface_Blt(p,a,b,c,d,e) (p)->Blt(a,b,c,d,e) #define IDirectDrawSurface_BltBatch(p,a,b,c) (p)->BltBatch(a,b,c) #define IDirectDrawSurface_BltFast(p,a,b,c,d,e) (p)->BltFast(a,b,c,d,e) #define IDirectDrawSurface_DeleteAttachedSurface(p,a,b) (p)->DeleteAttachedSurface(a,b) #define IDirectDrawSurface_EnumAttachedSurfaces(p,a,b) (p)->EnumAttachedSurfaces(a,b) #define IDirectDrawSurface_EnumOverlayZOrders(p,a,b,c) (p)->EnumOverlayZOrders(a,b,c) #define IDirectDrawSurface_Flip(p,a,b) (p)->Flip(a,b) #define IDirectDrawSurface_GetAttachedSurface(p,a,b) (p)->GetAttachedSurface(a,b) #define IDirectDrawSurface_GetBltStatus(p,a) (p)->GetBltStatus(a) #define IDirectDrawSurface_GetCaps(p,b) (p)->GetCaps(b) #define IDirectDrawSurface_GetClipper(p,a) (p)->GetClipper(a) #define IDirectDrawSurface_GetColorKey(p,a,b) (p)->GetColorKey(a,b) #define IDirectDrawSurface_GetDC(p,a) (p)->GetDC(a) #define IDirectDrawSurface_GetFlipStatus(p,a) (p)->GetFlipStatus(a) #define IDirectDrawSurface_GetOverlayPosition(p,a,b) (p)->GetOverlayPosition(a,b) #define IDirectDrawSurface_GetPalette(p,a) (p)->GetPalette(a) #define IDirectDrawSurface_GetPixelFormat(p,a) (p)->GetPixelFormat(a) #define IDirectDrawSurface_GetSurfaceDesc(p,a) (p)->GetSurfaceDesc(a) #define IDirectDrawSurface_Initialize(p,a,b) (p)->Initialize(a,b) #define IDirectDrawSurface_IsLost(p) (p)->IsLost() #define IDirectDrawSurface_Lock(p,a,b,c,d) (p)->Lock(a,b,c,d) #define IDirectDrawSurface_ReleaseDC(p,a) (p)->ReleaseDC(a) #define IDirectDrawSurface_Restore(p) (p)->Restore() #define IDirectDrawSurface_SetClipper(p,a) (p)->SetClipper(a) #define IDirectDrawSurface_SetColorKey(p,a,b) (p)->SetColorKey(a,b) #define IDirectDrawSurface_SetOverlayPosition(p,a,b) (p)->SetOverlayPosition(a,b) #define IDirectDrawSurface_SetPalette(p,a) (p)->SetPalette(a) #define IDirectDrawSurface_Unlock(p,b) (p)->Unlock(b) #define IDirectDrawSurface_UpdateOverlay(p,a,b,c,d,e) (p)->UpdateOverlay(a,b,c,d,e) #define IDirectDrawSurface_UpdateOverlayDisplay(p,a) (p)->UpdateOverlayDisplay(a) #define IDirectDrawSurface_UpdateOverlayZOrder(p,a,b) (p)->UpdateOverlayZOrder(a,b) #endif /* * IDirectDrawSurface2 and related interfaces */ #undef INTERFACE #define INTERFACE IDirectDrawSurface2 DECLARE_INTERFACE_( IDirectDrawSurface2, IUnknown ) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; /*** IDirectDrawSurface methods ***/ STDMETHOD(AddAttachedSurface)(THIS_ LPDIRECTDRAWSURFACE2) PURE; STDMETHOD(AddOverlayDirtyRect)(THIS_ LPRECT) PURE; STDMETHOD(Blt)(THIS_ LPRECT,LPDIRECTDRAWSURFACE2, LPRECT,DWORD, LPDDBLTFX) PURE; STDMETHOD(BltBatch)(THIS_ LPDDBLTBATCH, DWORD, DWORD ) PURE; STDMETHOD(BltFast)(THIS_ DWORD,DWORD,LPDIRECTDRAWSURFACE2, LPRECT,DWORD) PURE; STDMETHOD(DeleteAttachedSurface)(THIS_ DWORD,LPDIRECTDRAWSURFACE2) PURE; STDMETHOD(EnumAttachedSurfaces)(THIS_ LPVOID,LPDDENUMSURFACESCALLBACK) PURE; STDMETHOD(EnumOverlayZOrders)(THIS_ DWORD,LPVOID,LPDDENUMSURFACESCALLBACK) PURE; STDMETHOD(Flip)(THIS_ LPDIRECTDRAWSURFACE2, DWORD) PURE; STDMETHOD(GetAttachedSurface)(THIS_ LPDDSCAPS, LPDIRECTDRAWSURFACE2 FAR *) PURE; STDMETHOD(GetBltStatus)(THIS_ DWORD) PURE; STDMETHOD(GetCaps)(THIS_ LPDDSCAPS) PURE; STDMETHOD(GetClipper)(THIS_ LPDIRECTDRAWCLIPPER FAR*) PURE; STDMETHOD(GetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE; STDMETHOD(GetDC)(THIS_ HDC FAR *) PURE; STDMETHOD(GetFlipStatus)(THIS_ DWORD) PURE; STDMETHOD(GetOverlayPosition)(THIS_ LPLONG, LPLONG ) PURE; STDMETHOD(GetPalette)(THIS_ LPDIRECTDRAWPALETTE FAR*) PURE; STDMETHOD(GetPixelFormat)(THIS_ LPDDPIXELFORMAT) PURE; STDMETHOD(GetSurfaceDesc)(THIS_ LPDDSURFACEDESC) PURE; STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW, LPDDSURFACEDESC) PURE; STDMETHOD(IsLost)(THIS) PURE; STDMETHOD(Lock)(THIS_ LPRECT,LPDDSURFACEDESC,DWORD,HANDLE) PURE; STDMETHOD(ReleaseDC)(THIS_ HDC) PURE; STDMETHOD(Restore)(THIS) PURE; STDMETHOD(SetClipper)(THIS_ LPDIRECTDRAWCLIPPER) PURE; STDMETHOD(SetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE; STDMETHOD(SetOverlayPosition)(THIS_ LONG, LONG ) PURE; STDMETHOD(SetPalette)(THIS_ LPDIRECTDRAWPALETTE) PURE; STDMETHOD(Unlock)(THIS_ LPVOID) PURE; STDMETHOD(UpdateOverlay)(THIS_ LPRECT, LPDIRECTDRAWSURFACE2,LPRECT,DWORD, LPDDOVERLAYFX) PURE; STDMETHOD(UpdateOverlayDisplay)(THIS_ DWORD) PURE; STDMETHOD(UpdateOverlayZOrder)(THIS_ DWORD, LPDIRECTDRAWSURFACE2) PURE; /*** Added in the v2 interface ***/ STDMETHOD(GetDDInterface)(THIS_ LPVOID FAR *) PURE; STDMETHOD(PageLock)(THIS_ DWORD) PURE; STDMETHOD(PageUnlock)(THIS_ DWORD) PURE; }; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirectDrawSurface2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectDrawSurface2_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectDrawSurface2_Release(p) (p)->lpVtbl->Release(p) #define IDirectDrawSurface2_AddAttachedSurface(p,a) (p)->lpVtbl->AddAttachedSurface(p,a) #define IDirectDrawSurface2_AddOverlayDirtyRect(p,a) (p)->lpVtbl->AddOverlayDirtyRect(p,a) #define IDirectDrawSurface2_Blt(p,a,b,c,d,e) (p)->lpVtbl->Blt(p,a,b,c,d,e) #define IDirectDrawSurface2_BltBatch(p,a,b,c) (p)->lpVtbl->BltBatch(p,a,b,c) #define IDirectDrawSurface2_BltFast(p,a,b,c,d,e) (p)->lpVtbl->BltFast(p,a,b,c,d,e) #define IDirectDrawSurface2_DeleteAttachedSurface(p,a,b) (p)->lpVtbl->DeleteAttachedSurface(p,a,b) #define IDirectDrawSurface2_EnumAttachedSurfaces(p,a,b) (p)->lpVtbl->EnumAttachedSurfaces(p,a,b) #define IDirectDrawSurface2_EnumOverlayZOrders(p,a,b,c) (p)->lpVtbl->EnumOverlayZOrders(p,a,b,c) #define IDirectDrawSurface2_Flip(p,a,b) (p)->lpVtbl->Flip(p,a,b) #define IDirectDrawSurface2_GetAttachedSurface(p,a,b) (p)->lpVtbl->GetAttachedSurface(p,a,b) #define IDirectDrawSurface2_GetBltStatus(p,a) (p)->lpVtbl->GetBltStatus(p,a) #define IDirectDrawSurface2_GetCaps(p,b) (p)->lpVtbl->GetCaps(p,b) #define IDirectDrawSurface2_GetClipper(p,a) (p)->lpVtbl->GetClipper(p,a) #define IDirectDrawSurface2_GetColorKey(p,a,b) (p)->lpVtbl->GetColorKey(p,a,b) #define IDirectDrawSurface2_GetDC(p,a) (p)->lpVtbl->GetDC(p,a) #define IDirectDrawSurface2_GetFlipStatus(p,a) (p)->lpVtbl->GetFlipStatus(p,a) #define IDirectDrawSurface2_GetOverlayPosition(p,a,b) (p)->lpVtbl->GetOverlayPosition(p,a,b) #define IDirectDrawSurface2_GetPalette(p,a) (p)->lpVtbl->GetPalette(p,a) #define IDirectDrawSurface2_GetPixelFormat(p,a) (p)->lpVtbl->GetPixelFormat(p,a) #define IDirectDrawSurface2_GetSurfaceDesc(p,a) (p)->lpVtbl->GetSurfaceDesc(p,a) #define IDirectDrawSurface2_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b) #define IDirectDrawSurface2_IsLost(p) (p)->lpVtbl->IsLost(p) #define IDirectDrawSurface2_Lock(p,a,b,c,d) (p)->lpVtbl->Lock(p,a,b,c,d) #define IDirectDrawSurface2_ReleaseDC(p,a) (p)->lpVtbl->ReleaseDC(p,a) #define IDirectDrawSurface2_Restore(p) (p)->lpVtbl->Restore(p) #define IDirectDrawSurface2_SetClipper(p,a) (p)->lpVtbl->SetClipper(p,a) #define IDirectDrawSurface2_SetColorKey(p,a,b) (p)->lpVtbl->SetColorKey(p,a,b) #define IDirectDrawSurface2_SetOverlayPosition(p,a,b) (p)->lpVtbl->SetOverlayPosition(p,a,b) #define IDirectDrawSurface2_SetPalette(p,a) (p)->lpVtbl->SetPalette(p,a) #define IDirectDrawSurface2_Unlock(p,b) (p)->lpVtbl->Unlock(p,b) #define IDirectDrawSurface2_UpdateOverlay(p,a,b,c,d,e) (p)->lpVtbl->UpdateOverlay(p,a,b,c,d,e) #define IDirectDrawSurface2_UpdateOverlayDisplay(p,a) (p)->lpVtbl->UpdateOverlayDisplay(p,a) #define IDirectDrawSurface2_UpdateOverlayZOrder(p,a,b) (p)->lpVtbl->UpdateOverlayZOrder(p,a,b) #define IDirectDrawSurface2_GetDDInterface(p,a) (p)->lpVtbl->GetDDInterface(p,a) #define IDirectDrawSurface2_PageLock(p,a) (p)->lpVtbl->PageLock(p,a) #define IDirectDrawSurface2_PageUnlock(p,a) (p)->lpVtbl->PageUnlock(p,a) #else #define IDirectDrawSurface2_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirectDrawSurface2_AddRef(p) (p)->AddRef() #define IDirectDrawSurface2_Release(p) (p)->Release() #define IDirectDrawSurface2_AddAttachedSurface(p,a) (p)->AddAttachedSurface(a) #define IDirectDrawSurface2_AddOverlayDirtyRect(p,a) (p)->AddOverlayDirtyRect(a) #define IDirectDrawSurface2_Blt(p,a,b,c,d,e) (p)->Blt(a,b,c,d,e) #define IDirectDrawSurface2_BltBatch(p,a,b,c) (p)->BltBatch(a,b,c) #define IDirectDrawSurface2_BltFast(p,a,b,c,d,e) (p)->BltFast(a,b,c,d,e) #define IDirectDrawSurface2_DeleteAttachedSurface(p,a,b) (p)->DeleteAttachedSurface(a,b) #define IDirectDrawSurface2_EnumAttachedSurfaces(p,a,b) (p)->EnumAttachedSurfaces(a,b) #define IDirectDrawSurface2_EnumOverlayZOrders(p,a,b,c) (p)->EnumOverlayZOrders(a,b,c) #define IDirectDrawSurface2_Flip(p,a,b) (p)->Flip(a,b) #define IDirectDrawSurface2_GetAttachedSurface(p,a,b) (p)->GetAttachedSurface(a,b) #define IDirectDrawSurface2_GetBltStatus(p,a) (p)->GetBltStatus(a) #define IDirectDrawSurface2_GetCaps(p,b) (p)->GetCaps(b) #define IDirectDrawSurface2_GetClipper(p,a) (p)->GetClipper(a) #define IDirectDrawSurface2_GetColorKey(p,a,b) (p)->GetColorKey(a,b) #define IDirectDrawSurface2_GetDC(p,a) (p)->GetDC(a) #define IDirectDrawSurface2_GetFlipStatus(p,a) (p)->GetFlipStatus(a) #define IDirectDrawSurface2_GetOverlayPosition(p,a,b) (p)->GetOverlayPosition(a,b) #define IDirectDrawSurface2_GetPalette(p,a) (p)->GetPalette(a) #define IDirectDrawSurface2_GetPixelFormat(p,a) (p)->GetPixelFormat(a) #define IDirectDrawSurface2_GetSurfaceDesc(p,a) (p)->GetSurfaceDesc(a) #define IDirectDrawSurface2_Initialize(p,a,b) (p)->Initialize(a,b) #define IDirectDrawSurface2_IsLost(p) (p)->IsLost() #define IDirectDrawSurface2_Lock(p,a,b,c,d) (p)->Lock(a,b,c,d) #define IDirectDrawSurface2_ReleaseDC(p,a) (p)->ReleaseDC(a) #define IDirectDrawSurface2_Restore(p) (p)->Restore() #define IDirectDrawSurface2_SetClipper(p,a) (p)->SetClipper(a) #define IDirectDrawSurface2_SetColorKey(p,a,b) (p)->SetColorKey(a,b) #define IDirectDrawSurface2_SetOverlayPosition(p,a,b) (p)->SetOverlayPosition(a,b) #define IDirectDrawSurface2_SetPalette(p,a) (p)->SetPalette(a) #define IDirectDrawSurface2_Unlock(p,b) (p)->Unlock(b) #define IDirectDrawSurface2_UpdateOverlay(p,a,b,c,d,e) (p)->UpdateOverlay(a,b,c,d,e) #define IDirectDrawSurface2_UpdateOverlayDisplay(p,a) (p)->UpdateOverlayDisplay(a) #define IDirectDrawSurface2_UpdateOverlayZOrder(p,a,b) (p)->UpdateOverlayZOrder(a,b) #define IDirectDrawSurface2_GetDDInterface(p,a) (p)->GetDDInterface(a) #define IDirectDrawSurface2_PageLock(p,a) (p)->PageLock(a) #define IDirectDrawSurface2_PageUnlock(p,a) (p)->PageUnlock(a) #endif /* * IDirectDrawSurface3 and related interfaces */ #undef INTERFACE #define INTERFACE IDirectDrawSurface3 DECLARE_INTERFACE_( IDirectDrawSurface3, IUnknown ) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; /*** IDirectDrawSurface methods ***/ STDMETHOD(AddAttachedSurface)(THIS_ LPDIRECTDRAWSURFACE3) PURE; STDMETHOD(AddOverlayDirtyRect)(THIS_ LPRECT) PURE; STDMETHOD(Blt)(THIS_ LPRECT,LPDIRECTDRAWSURFACE3, LPRECT,DWORD, LPDDBLTFX) PURE; STDMETHOD(BltBatch)(THIS_ LPDDBLTBATCH, DWORD, DWORD ) PURE; STDMETHOD(BltFast)(THIS_ DWORD,DWORD,LPDIRECTDRAWSURFACE3, LPRECT,DWORD) PURE; STDMETHOD(DeleteAttachedSurface)(THIS_ DWORD,LPDIRECTDRAWSURFACE3) PURE; STDMETHOD(EnumAttachedSurfaces)(THIS_ LPVOID,LPDDENUMSURFACESCALLBACK) PURE; STDMETHOD(EnumOverlayZOrders)(THIS_ DWORD,LPVOID,LPDDENUMSURFACESCALLBACK) PURE; STDMETHOD(Flip)(THIS_ LPDIRECTDRAWSURFACE3, DWORD) PURE; STDMETHOD(GetAttachedSurface)(THIS_ LPDDSCAPS, LPDIRECTDRAWSURFACE3 FAR *) PURE; STDMETHOD(GetBltStatus)(THIS_ DWORD) PURE; STDMETHOD(GetCaps)(THIS_ LPDDSCAPS) PURE; STDMETHOD(GetClipper)(THIS_ LPDIRECTDRAWCLIPPER FAR*) PURE; STDMETHOD(GetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE; STDMETHOD(GetDC)(THIS_ HDC FAR *) PURE; STDMETHOD(GetFlipStatus)(THIS_ DWORD) PURE; STDMETHOD(GetOverlayPosition)(THIS_ LPLONG, LPLONG ) PURE; STDMETHOD(GetPalette)(THIS_ LPDIRECTDRAWPALETTE FAR*) PURE; STDMETHOD(GetPixelFormat)(THIS_ LPDDPIXELFORMAT) PURE; STDMETHOD(GetSurfaceDesc)(THIS_ LPDDSURFACEDESC) PURE; STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW, LPDDSURFACEDESC) PURE; STDMETHOD(IsLost)(THIS) PURE; STDMETHOD(Lock)(THIS_ LPRECT,LPDDSURFACEDESC,DWORD,HANDLE) PURE; STDMETHOD(ReleaseDC)(THIS_ HDC) PURE; STDMETHOD(Restore)(THIS) PURE; STDMETHOD(SetClipper)(THIS_ LPDIRECTDRAWCLIPPER) PURE; STDMETHOD(SetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE; STDMETHOD(SetOverlayPosition)(THIS_ LONG, LONG ) PURE; STDMETHOD(SetPalette)(THIS_ LPDIRECTDRAWPALETTE) PURE; STDMETHOD(Unlock)(THIS_ LPVOID) PURE; STDMETHOD(UpdateOverlay)(THIS_ LPRECT, LPDIRECTDRAWSURFACE3,LPRECT,DWORD, LPDDOVERLAYFX) PURE; STDMETHOD(UpdateOverlayDisplay)(THIS_ DWORD) PURE; STDMETHOD(UpdateOverlayZOrder)(THIS_ DWORD, LPDIRECTDRAWSURFACE3) PURE; /*** Added in the v2 interface ***/ STDMETHOD(GetDDInterface)(THIS_ LPVOID FAR *) PURE; STDMETHOD(PageLock)(THIS_ DWORD) PURE; STDMETHOD(PageUnlock)(THIS_ DWORD) PURE; /*** Added in the V3 interface ***/ STDMETHOD(SetSurfaceDesc)(THIS_ LPDDSURFACEDESC, DWORD) PURE; }; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirectDrawSurface3_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectDrawSurface3_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectDrawSurface3_Release(p) (p)->lpVtbl->Release(p) #define IDirectDrawSurface3_AddAttachedSurface(p,a) (p)->lpVtbl->AddAttachedSurface(p,a) #define IDirectDrawSurface3_AddOverlayDirtyRect(p,a) (p)->lpVtbl->AddOverlayDirtyRect(p,a) #define IDirectDrawSurface3_Blt(p,a,b,c,d,e) (p)->lpVtbl->Blt(p,a,b,c,d,e) #define IDirectDrawSurface3_BltBatch(p,a,b,c) (p)->lpVtbl->BltBatch(p,a,b,c) #define IDirectDrawSurface3_BltFast(p,a,b,c,d,e) (p)->lpVtbl->BltFast(p,a,b,c,d,e) #define IDirectDrawSurface3_DeleteAttachedSurface(p,a,b) (p)->lpVtbl->DeleteAttachedSurface(p,a,b) #define IDirectDrawSurface3_EnumAttachedSurfaces(p,a,b) (p)->lpVtbl->EnumAttachedSurfaces(p,a,b) #define IDirectDrawSurface3_EnumOverlayZOrders(p,a,b,c) (p)->lpVtbl->EnumOverlayZOrders(p,a,b,c) #define IDirectDrawSurface3_Flip(p,a,b) (p)->lpVtbl->Flip(p,a,b) #define IDirectDrawSurface3_GetAttachedSurface(p,a,b) (p)->lpVtbl->GetAttachedSurface(p,a,b) #define IDirectDrawSurface3_GetBltStatus(p,a) (p)->lpVtbl->GetBltStatus(p,a) #define IDirectDrawSurface3_GetCaps(p,b) (p)->lpVtbl->GetCaps(p,b) #define IDirectDrawSurface3_GetClipper(p,a) (p)->lpVtbl->GetClipper(p,a) #define IDirectDrawSurface3_GetColorKey(p,a,b) (p)->lpVtbl->GetColorKey(p,a,b) #define IDirectDrawSurface3_GetDC(p,a) (p)->lpVtbl->GetDC(p,a) #define IDirectDrawSurface3_GetFlipStatus(p,a) (p)->lpVtbl->GetFlipStatus(p,a) #define IDirectDrawSurface3_GetOverlayPosition(p,a,b) (p)->lpVtbl->GetOverlayPosition(p,a,b) #define IDirectDrawSurface3_GetPalette(p,a) (p)->lpVtbl->GetPalette(p,a) #define IDirectDrawSurface3_GetPixelFormat(p,a) (p)->lpVtbl->GetPixelFormat(p,a) #define IDirectDrawSurface3_GetSurfaceDesc(p,a) (p)->lpVtbl->GetSurfaceDesc(p,a) #define IDirectDrawSurface3_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b) #define IDirectDrawSurface3_IsLost(p) (p)->lpVtbl->IsLost(p) #define IDirectDrawSurface3_Lock(p,a,b,c,d) (p)->lpVtbl->Lock(p,a,b,c,d) #define IDirectDrawSurface3_ReleaseDC(p,a) (p)->lpVtbl->ReleaseDC(p,a) #define IDirectDrawSurface3_Restore(p) (p)->lpVtbl->Restore(p) #define IDirectDrawSurface3_SetClipper(p,a) (p)->lpVtbl->SetClipper(p,a) #define IDirectDrawSurface3_SetColorKey(p,a,b) (p)->lpVtbl->SetColorKey(p,a,b) #define IDirectDrawSurface3_SetOverlayPosition(p,a,b) (p)->lpVtbl->SetOverlayPosition(p,a,b) #define IDirectDrawSurface3_SetPalette(p,a) (p)->lpVtbl->SetPalette(p,a) #define IDirectDrawSurface3_Unlock(p,b) (p)->lpVtbl->Unlock(p,b) #define IDirectDrawSurface3_UpdateOverlay(p,a,b,c,d,e) (p)->lpVtbl->UpdateOverlay(p,a,b,c,d,e) #define IDirectDrawSurface3_UpdateOverlayDisplay(p,a) (p)->lpVtbl->UpdateOverlayDisplay(p,a) #define IDirectDrawSurface3_UpdateOverlayZOrder(p,a,b) (p)->lpVtbl->UpdateOverlayZOrder(p,a,b) #define IDirectDrawSurface3_GetDDInterface(p,a) (p)->lpVtbl->GetDDInterface(p,a) #define IDirectDrawSurface3_PageLock(p,a) (p)->lpVtbl->PageLock(p,a) #define IDirectDrawSurface3_PageUnlock(p,a) (p)->lpVtbl->PageUnlock(p,a) #define IDirectDrawSurface3_SetSurfaceDesc(p,a,b) (p)->lpVtbl->SetSurfaceDesc(p,a,b) #else #define IDirectDrawSurface3_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirectDrawSurface3_AddRef(p) (p)->AddRef() #define IDirectDrawSurface3_Release(p) (p)->Release() #define IDirectDrawSurface3_AddAttachedSurface(p,a) (p)->AddAttachedSurface(a) #define IDirectDrawSurface3_AddOverlayDirtyRect(p,a) (p)->AddOverlayDirtyRect(a) #define IDirectDrawSurface3_Blt(p,a,b,c,d,e) (p)->Blt(a,b,c,d,e) #define IDirectDrawSurface3_BltBatch(p,a,b,c) (p)->BltBatch(a,b,c) #define IDirectDrawSurface3_BltFast(p,a,b,c,d,e) (p)->BltFast(a,b,c,d,e) #define IDirectDrawSurface3_DeleteAttachedSurface(p,a,b) (p)->DeleteAttachedSurface(a,b) #define IDirectDrawSurface3_EnumAttachedSurfaces(p,a,b) (p)->EnumAttachedSurfaces(a,b) #define IDirectDrawSurface3_EnumOverlayZOrders(p,a,b,c) (p)->EnumOverlayZOrders(a,b,c) #define IDirectDrawSurface3_Flip(p,a,b) (p)->Flip(a,b) #define IDirectDrawSurface3_GetAttachedSurface(p,a,b) (p)->GetAttachedSurface(a,b) #define IDirectDrawSurface3_GetBltStatus(p,a) (p)->GetBltStatus(a) #define IDirectDrawSurface3_GetCaps(p,b) (p)->GetCaps(b) #define IDirectDrawSurface3_GetClipper(p,a) (p)->GetClipper(a) #define IDirectDrawSurface3_GetColorKey(p,a,b) (p)->GetColorKey(a,b) #define IDirectDrawSurface3_GetDC(p,a) (p)->GetDC(a) #define IDirectDrawSurface3_GetFlipStatus(p,a) (p)->GetFlipStatus(a) #define IDirectDrawSurface3_GetOverlayPosition(p,a,b) (p)->GetOverlayPosition(a,b) #define IDirectDrawSurface3_GetPalette(p,a) (p)->GetPalette(a) #define IDirectDrawSurface3_GetPixelFormat(p,a) (p)->GetPixelFormat(a) #define IDirectDrawSurface3_GetSurfaceDesc(p,a) (p)->GetSurfaceDesc(a) #define IDirectDrawSurface3_Initialize(p,a,b) (p)->Initialize(a,b) #define IDirectDrawSurface3_IsLost(p) (p)->IsLost() #define IDirectDrawSurface3_Lock(p,a,b,c,d) (p)->Lock(a,b,c,d) #define IDirectDrawSurface3_ReleaseDC(p,a) (p)->ReleaseDC(a) #define IDirectDrawSurface3_Restore(p) (p)->Restore() #define IDirectDrawSurface3_SetClipper(p,a) (p)->SetClipper(a) #define IDirectDrawSurface3_SetColorKey(p,a,b) (p)->SetColorKey(a,b) #define IDirectDrawSurface3_SetOverlayPosition(p,a,b) (p)->SetOverlayPosition(a,b) #define IDirectDrawSurface3_SetPalette(p,a) (p)->SetPalette(a) #define IDirectDrawSurface3_Unlock(p,b) (p)->Unlock(b) #define IDirectDrawSurface3_UpdateOverlay(p,a,b,c,d,e) (p)->UpdateOverlay(a,b,c,d,e) #define IDirectDrawSurface3_UpdateOverlayDisplay(p,a) (p)->UpdateOverlayDisplay(a) #define IDirectDrawSurface3_UpdateOverlayZOrder(p,a,b) (p)->UpdateOverlayZOrder(a,b) #define IDirectDrawSurface3_GetDDInterface(p,a) (p)->GetDDInterface(a) #define IDirectDrawSurface3_PageLock(p,a) (p)->PageLock(a) #define IDirectDrawSurface3_PageUnlock(p,a) (p)->PageUnlock(a) #define IDirectDrawSurface3_SetSurfaceDesc(p,a,b) (p)->SetSurfaceDesc(a,b) #endif /* * IDirectDrawSurface4 and related interfaces */ #undef INTERFACE #define INTERFACE IDirectDrawSurface4 DECLARE_INTERFACE_( IDirectDrawSurface4, IUnknown ) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; /*** IDirectDrawSurface methods ***/ STDMETHOD(AddAttachedSurface)(THIS_ LPDIRECTDRAWSURFACE4) PURE; STDMETHOD(AddOverlayDirtyRect)(THIS_ LPRECT) PURE; STDMETHOD(Blt)(THIS_ LPRECT,LPDIRECTDRAWSURFACE4, LPRECT,DWORD, LPDDBLTFX) PURE; STDMETHOD(BltBatch)(THIS_ LPDDBLTBATCH, DWORD, DWORD ) PURE; STDMETHOD(BltFast)(THIS_ DWORD,DWORD,LPDIRECTDRAWSURFACE4, LPRECT,DWORD) PURE; STDMETHOD(DeleteAttachedSurface)(THIS_ DWORD,LPDIRECTDRAWSURFACE4) PURE; STDMETHOD(EnumAttachedSurfaces)(THIS_ LPVOID,LPDDENUMSURFACESCALLBACK2) PURE; STDMETHOD(EnumOverlayZOrders)(THIS_ DWORD,LPVOID,LPDDENUMSURFACESCALLBACK2) PURE; STDMETHOD(Flip)(THIS_ LPDIRECTDRAWSURFACE4, DWORD) PURE; STDMETHOD(GetAttachedSurface)(THIS_ LPDDSCAPS2, LPDIRECTDRAWSURFACE4 FAR *) PURE; STDMETHOD(GetBltStatus)(THIS_ DWORD) PURE; STDMETHOD(GetCaps)(THIS_ LPDDSCAPS2) PURE; STDMETHOD(GetClipper)(THIS_ LPDIRECTDRAWCLIPPER FAR*) PURE; STDMETHOD(GetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE; STDMETHOD(GetDC)(THIS_ HDC FAR *) PURE; STDMETHOD(GetFlipStatus)(THIS_ DWORD) PURE; STDMETHOD(GetOverlayPosition)(THIS_ LPLONG, LPLONG ) PURE; STDMETHOD(GetPalette)(THIS_ LPDIRECTDRAWPALETTE FAR*) PURE; STDMETHOD(GetPixelFormat)(THIS_ LPDDPIXELFORMAT) PURE; STDMETHOD(GetSurfaceDesc)(THIS_ LPDDSURFACEDESC2) PURE; STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW, LPDDSURFACEDESC2) PURE; STDMETHOD(IsLost)(THIS) PURE; STDMETHOD(Lock)(THIS_ LPRECT,LPDDSURFACEDESC2,DWORD,HANDLE) PURE; STDMETHOD(ReleaseDC)(THIS_ HDC) PURE; STDMETHOD(Restore)(THIS) PURE; STDMETHOD(SetClipper)(THIS_ LPDIRECTDRAWCLIPPER) PURE; STDMETHOD(SetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE; STDMETHOD(SetOverlayPosition)(THIS_ LONG, LONG ) PURE; STDMETHOD(SetPalette)(THIS_ LPDIRECTDRAWPALETTE) PURE; STDMETHOD(Unlock)(THIS_ LPRECT) PURE; STDMETHOD(UpdateOverlay)(THIS_ LPRECT, LPDIRECTDRAWSURFACE4,LPRECT,DWORD, LPDDOVERLAYFX) PURE; STDMETHOD(UpdateOverlayDisplay)(THIS_ DWORD) PURE; STDMETHOD(UpdateOverlayZOrder)(THIS_ DWORD, LPDIRECTDRAWSURFACE4) PURE; /*** Added in the v2 interface ***/ STDMETHOD(GetDDInterface)(THIS_ LPVOID FAR *) PURE; STDMETHOD(PageLock)(THIS_ DWORD) PURE; STDMETHOD(PageUnlock)(THIS_ DWORD) PURE; /*** Added in the v3 interface ***/ STDMETHOD(SetSurfaceDesc)(THIS_ LPDDSURFACEDESC2, DWORD) PURE; /*** Added in the v4 interface ***/ STDMETHOD(SetPrivateData)(THIS_ REFGUID, LPVOID, DWORD, DWORD) PURE; STDMETHOD(GetPrivateData)(THIS_ REFGUID, LPVOID, LPDWORD) PURE; STDMETHOD(FreePrivateData)(THIS_ REFGUID) PURE; STDMETHOD(GetUniquenessValue)(THIS_ LPDWORD) PURE; STDMETHOD(ChangeUniquenessValue)(THIS) PURE; }; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirectDrawSurface4_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectDrawSurface4_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectDrawSurface4_Release(p) (p)->lpVtbl->Release(p) #define IDirectDrawSurface4_AddAttachedSurface(p,a) (p)->lpVtbl->AddAttachedSurface(p,a) #define IDirectDrawSurface4_AddOverlayDirtyRect(p,a) (p)->lpVtbl->AddOverlayDirtyRect(p,a) #define IDirectDrawSurface4_Blt(p,a,b,c,d,e) (p)->lpVtbl->Blt(p,a,b,c,d,e) #define IDirectDrawSurface4_BltBatch(p,a,b,c) (p)->lpVtbl->BltBatch(p,a,b,c) #define IDirectDrawSurface4_BltFast(p,a,b,c,d,e) (p)->lpVtbl->BltFast(p,a,b,c,d,e) #define IDirectDrawSurface4_DeleteAttachedSurface(p,a,b) (p)->lpVtbl->DeleteAttachedSurface(p,a,b) #define IDirectDrawSurface4_EnumAttachedSurfaces(p,a,b) (p)->lpVtbl->EnumAttachedSurfaces(p,a,b) #define IDirectDrawSurface4_EnumOverlayZOrders(p,a,b,c) (p)->lpVtbl->EnumOverlayZOrders(p,a,b,c) #define IDirectDrawSurface4_Flip(p,a,b) (p)->lpVtbl->Flip(p,a,b) #define IDirectDrawSurface4_GetAttachedSurface(p,a,b) (p)->lpVtbl->GetAttachedSurface(p,a,b) #define IDirectDrawSurface4_GetBltStatus(p,a) (p)->lpVtbl->GetBltStatus(p,a) #define IDirectDrawSurface4_GetCaps(p,b) (p)->lpVtbl->GetCaps(p,b) #define IDirectDrawSurface4_GetClipper(p,a) (p)->lpVtbl->GetClipper(p,a) #define IDirectDrawSurface4_GetColorKey(p,a,b) (p)->lpVtbl->GetColorKey(p,a,b) #define IDirectDrawSurface4_GetDC(p,a) (p)->lpVtbl->GetDC(p,a) #define IDirectDrawSurface4_GetFlipStatus(p,a) (p)->lpVtbl->GetFlipStatus(p,a) #define IDirectDrawSurface4_GetOverlayPosition(p,a,b) (p)->lpVtbl->GetOverlayPosition(p,a,b) #define IDirectDrawSurface4_GetPalette(p,a) (p)->lpVtbl->GetPalette(p,a) #define IDirectDrawSurface4_GetPixelFormat(p,a) (p)->lpVtbl->GetPixelFormat(p,a) #define IDirectDrawSurface4_GetSurfaceDesc(p,a) (p)->lpVtbl->GetSurfaceDesc(p,a) #define IDirectDrawSurface4_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b) #define IDirectDrawSurface4_IsLost(p) (p)->lpVtbl->IsLost(p) #define IDirectDrawSurface4_Lock(p,a,b,c,d) (p)->lpVtbl->Lock(p,a,b,c,d) #define IDirectDrawSurface4_ReleaseDC(p,a) (p)->lpVtbl->ReleaseDC(p,a) #define IDirectDrawSurface4_Restore(p) (p)->lpVtbl->Restore(p) #define IDirectDrawSurface4_SetClipper(p,a) (p)->lpVtbl->SetClipper(p,a) #define IDirectDrawSurface4_SetColorKey(p,a,b) (p)->lpVtbl->SetColorKey(p,a,b) #define IDirectDrawSurface4_SetOverlayPosition(p,a,b) (p)->lpVtbl->SetOverlayPosition(p,a,b) #define IDirectDrawSurface4_SetPalette(p,a) (p)->lpVtbl->SetPalette(p,a) #define IDirectDrawSurface4_Unlock(p,b) (p)->lpVtbl->Unlock(p,b) #define IDirectDrawSurface4_UpdateOverlay(p,a,b,c,d,e) (p)->lpVtbl->UpdateOverlay(p,a,b,c,d,e) #define IDirectDrawSurface4_UpdateOverlayDisplay(p,a) (p)->lpVtbl->UpdateOverlayDisplay(p,a) #define IDirectDrawSurface4_UpdateOverlayZOrder(p,a,b) (p)->lpVtbl->UpdateOverlayZOrder(p,a,b) #define IDirectDrawSurface4_GetDDInterface(p,a) (p)->lpVtbl->GetDDInterface(p,a) #define IDirectDrawSurface4_PageLock(p,a) (p)->lpVtbl->PageLock(p,a) #define IDirectDrawSurface4_PageUnlock(p,a) (p)->lpVtbl->PageUnlock(p,a) #define IDirectDrawSurface4_SetSurfaceDesc(p,a,b) (p)->lpVtbl->SetSurfaceDesc(p,a,b) #define IDirectDrawSurface4_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d) #define IDirectDrawSurface4_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c) #define IDirectDrawSurface4_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a) #define IDirectDrawSurface4_GetUniquenessValue(p, a) (p)->lpVtbl->GetUniquenessValue(p, a) #define IDirectDrawSurface4_ChangeUniquenessValue(p) (p)->lpVtbl->ChangeUniquenessValue(p) #else #define IDirectDrawSurface4_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirectDrawSurface4_AddRef(p) (p)->AddRef() #define IDirectDrawSurface4_Release(p) (p)->Release() #define IDirectDrawSurface4_AddAttachedSurface(p,a) (p)->AddAttachedSurface(a) #define IDirectDrawSurface4_AddOverlayDirtyRect(p,a) (p)->AddOverlayDirtyRect(a) #define IDirectDrawSurface4_Blt(p,a,b,c,d,e) (p)->Blt(a,b,c,d,e) #define IDirectDrawSurface4_BltBatch(p,a,b,c) (p)->BltBatch(a,b,c) #define IDirectDrawSurface4_BltFast(p,a,b,c,d,e) (p)->BltFast(a,b,c,d,e) #define IDirectDrawSurface4_DeleteAttachedSurface(p,a,b) (p)->DeleteAttachedSurface(a,b) #define IDirectDrawSurface4_EnumAttachedSurfaces(p,a,b) (p)->EnumAttachedSurfaces(a,b) #define IDirectDrawSurface4_EnumOverlayZOrders(p,a,b,c) (p)->EnumOverlayZOrders(a,b,c) #define IDirectDrawSurface4_Flip(p,a,b) (p)->Flip(a,b) #define IDirectDrawSurface4_GetAttachedSurface(p,a,b) (p)->GetAttachedSurface(a,b) #define IDirectDrawSurface4_GetBltStatus(p,a) (p)->GetBltStatus(a) #define IDirectDrawSurface4_GetCaps(p,b) (p)->GetCaps(b) #define IDirectDrawSurface4_GetClipper(p,a) (p)->GetClipper(a) #define IDirectDrawSurface4_GetColorKey(p,a,b) (p)->GetColorKey(a,b) #define IDirectDrawSurface4_GetDC(p,a) (p)->GetDC(a) #define IDirectDrawSurface4_GetFlipStatus(p,a) (p)->GetFlipStatus(a) #define IDirectDrawSurface4_GetOverlayPosition(p,a,b) (p)->GetOverlayPosition(a,b) #define IDirectDrawSurface4_GetPalette(p,a) (p)->GetPalette(a) #define IDirectDrawSurface4_GetPixelFormat(p,a) (p)->GetPixelFormat(a) #define IDirectDrawSurface4_GetSurfaceDesc(p,a) (p)->GetSurfaceDesc(a) #define IDirectDrawSurface4_Initialize(p,a,b) (p)->Initialize(a,b) #define IDirectDrawSurface4_IsLost(p) (p)->IsLost() #define IDirectDrawSurface4_Lock(p,a,b,c,d) (p)->Lock(a,b,c,d) #define IDirectDrawSurface4_ReleaseDC(p,a) (p)->ReleaseDC(a) #define IDirectDrawSurface4_Restore(p) (p)->Restore() #define IDirectDrawSurface4_SetClipper(p,a) (p)->SetClipper(a) #define IDirectDrawSurface4_SetColorKey(p,a,b) (p)->SetColorKey(a,b) #define IDirectDrawSurface4_SetOverlayPosition(p,a,b) (p)->SetOverlayPosition(a,b) #define IDirectDrawSurface4_SetPalette(p,a) (p)->SetPalette(a) #define IDirectDrawSurface4_Unlock(p,b) (p)->Unlock(b) #define IDirectDrawSurface4_UpdateOverlay(p,a,b,c,d,e) (p)->UpdateOverlay(a,b,c,d,e) #define IDirectDrawSurface4_UpdateOverlayDisplay(p,a) (p)->UpdateOverlayDisplay(a) #define IDirectDrawSurface4_UpdateOverlayZOrder(p,a,b) (p)->UpdateOverlayZOrder(a,b) #define IDirectDrawSurface4_GetDDInterface(p,a) (p)->GetDDInterface(a) #define IDirectDrawSurface4_PageLock(p,a) (p)->PageLock(a) #define IDirectDrawSurface4_PageUnlock(p,a) (p)->PageUnlock(a) #define IDirectDrawSurface4_SetSurfaceDesc(p,a,b) (p)->SetSurfaceDesc(a,b) #define IDirectDrawSurface4_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d) #define IDirectDrawSurface4_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c) #define IDirectDrawSurface4_FreePrivateData(p,a) (p)->FreePrivateData(a) #define IDirectDrawSurface4_GetUniquenessValue(p, a) (p)->GetUniquenessValue(a) #define IDirectDrawSurface4_ChangeUniquenessValue(p) (p)->ChangeUniquenessValue() #endif /* * IDirectDrawSurface7 and related interfaces */ #undef INTERFACE #define INTERFACE IDirectDrawSurface7 DECLARE_INTERFACE_( IDirectDrawSurface7, IUnknown ) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; /*** IDirectDrawSurface methods ***/ STDMETHOD(AddAttachedSurface)(THIS_ LPDIRECTDRAWSURFACE7) PURE; STDMETHOD(AddOverlayDirtyRect)(THIS_ LPRECT) PURE; STDMETHOD(Blt)(THIS_ LPRECT,LPDIRECTDRAWSURFACE7, LPRECT,DWORD, LPDDBLTFX) PURE; STDMETHOD(BltBatch)(THIS_ LPDDBLTBATCH, DWORD, DWORD ) PURE; STDMETHOD(BltFast)(THIS_ DWORD,DWORD,LPDIRECTDRAWSURFACE7, LPRECT,DWORD) PURE; STDMETHOD(DeleteAttachedSurface)(THIS_ DWORD,LPDIRECTDRAWSURFACE7) PURE; STDMETHOD(EnumAttachedSurfaces)(THIS_ LPVOID,LPDDENUMSURFACESCALLBACK7) PURE; STDMETHOD(EnumOverlayZOrders)(THIS_ DWORD,LPVOID,LPDDENUMSURFACESCALLBACK7) PURE; STDMETHOD(Flip)(THIS_ LPDIRECTDRAWSURFACE7, DWORD) PURE; STDMETHOD(GetAttachedSurface)(THIS_ LPDDSCAPS2, LPDIRECTDRAWSURFACE7 FAR *) PURE; STDMETHOD(GetBltStatus)(THIS_ DWORD) PURE; STDMETHOD(GetCaps)(THIS_ LPDDSCAPS2) PURE; STDMETHOD(GetClipper)(THIS_ LPDIRECTDRAWCLIPPER FAR*) PURE; STDMETHOD(GetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE; STDMETHOD(GetDC)(THIS_ HDC FAR *) PURE; STDMETHOD(GetFlipStatus)(THIS_ DWORD) PURE; STDMETHOD(GetOverlayPosition)(THIS_ LPLONG, LPLONG ) PURE; STDMETHOD(GetPalette)(THIS_ LPDIRECTDRAWPALETTE FAR*) PURE; STDMETHOD(GetPixelFormat)(THIS_ LPDDPIXELFORMAT) PURE; STDMETHOD(GetSurfaceDesc)(THIS_ LPDDSURFACEDESC2) PURE; STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW, LPDDSURFACEDESC2) PURE; STDMETHOD(IsLost)(THIS) PURE; STDMETHOD(Lock)(THIS_ LPRECT,LPDDSURFACEDESC2,DWORD,HANDLE) PURE; STDMETHOD(ReleaseDC)(THIS_ HDC) PURE; STDMETHOD(Restore)(THIS) PURE; STDMETHOD(SetClipper)(THIS_ LPDIRECTDRAWCLIPPER) PURE; STDMETHOD(SetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE; STDMETHOD(SetOverlayPosition)(THIS_ LONG, LONG ) PURE; STDMETHOD(SetPalette)(THIS_ LPDIRECTDRAWPALETTE) PURE; STDMETHOD(Unlock)(THIS_ LPRECT) PURE; STDMETHOD(UpdateOverlay)(THIS_ LPRECT, LPDIRECTDRAWSURFACE7,LPRECT,DWORD, LPDDOVERLAYFX) PURE; STDMETHOD(UpdateOverlayDisplay)(THIS_ DWORD) PURE; STDMETHOD(UpdateOverlayZOrder)(THIS_ DWORD, LPDIRECTDRAWSURFACE7) PURE; /*** Added in the v2 interface ***/ STDMETHOD(GetDDInterface)(THIS_ LPVOID FAR *) PURE; STDMETHOD(PageLock)(THIS_ DWORD) PURE; STDMETHOD(PageUnlock)(THIS_ DWORD) PURE; /*** Added in the v3 interface ***/ STDMETHOD(SetSurfaceDesc)(THIS_ LPDDSURFACEDESC2, DWORD) PURE; /*** Added in the v4 interface ***/ STDMETHOD(SetPrivateData)(THIS_ REFGUID, LPVOID, DWORD, DWORD) PURE; STDMETHOD(GetPrivateData)(THIS_ REFGUID, LPVOID, LPDWORD) PURE; STDMETHOD(FreePrivateData)(THIS_ REFGUID) PURE; STDMETHOD(GetUniquenessValue)(THIS_ LPDWORD) PURE; STDMETHOD(ChangeUniquenessValue)(THIS) PURE; /*** Moved Texture7 methods here ***/ STDMETHOD(SetPriority)(THIS_ DWORD) PURE; STDMETHOD(GetPriority)(THIS_ LPDWORD) PURE; STDMETHOD(SetLOD)(THIS_ DWORD) PURE; STDMETHOD(GetLOD)(THIS_ LPDWORD) PURE; }; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirectDrawSurface7_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectDrawSurface7_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectDrawSurface7_Release(p) (p)->lpVtbl->Release(p) #define IDirectDrawSurface7_AddAttachedSurface(p,a) (p)->lpVtbl->AddAttachedSurface(p,a) #define IDirectDrawSurface7_AddOverlayDirtyRect(p,a) (p)->lpVtbl->AddOverlayDirtyRect(p,a) #define IDirectDrawSurface7_Blt(p,a,b,c,d,e) (p)->lpVtbl->Blt(p,a,b,c,d,e) #define IDirectDrawSurface7_BltBatch(p,a,b,c) (p)->lpVtbl->BltBatch(p,a,b,c) #define IDirectDrawSurface7_BltFast(p,a,b,c,d,e) (p)->lpVtbl->BltFast(p,a,b,c,d,e) #define IDirectDrawSurface7_DeleteAttachedSurface(p,a,b) (p)->lpVtbl->DeleteAttachedSurface(p,a,b) #define IDirectDrawSurface7_EnumAttachedSurfaces(p,a,b) (p)->lpVtbl->EnumAttachedSurfaces(p,a,b) #define IDirectDrawSurface7_EnumOverlayZOrders(p,a,b,c) (p)->lpVtbl->EnumOverlayZOrders(p,a,b,c) #define IDirectDrawSurface7_Flip(p,a,b) (p)->lpVtbl->Flip(p,a,b) #define IDirectDrawSurface7_GetAttachedSurface(p,a,b) (p)->lpVtbl->GetAttachedSurface(p,a,b) #define IDirectDrawSurface7_GetBltStatus(p,a) (p)->lpVtbl->GetBltStatus(p,a) #define IDirectDrawSurface7_GetCaps(p,b) (p)->lpVtbl->GetCaps(p,b) #define IDirectDrawSurface7_GetClipper(p,a) (p)->lpVtbl->GetClipper(p,a) #define IDirectDrawSurface7_GetColorKey(p,a,b) (p)->lpVtbl->GetColorKey(p,a,b) #define IDirectDrawSurface7_GetDC(p,a) (p)->lpVtbl->GetDC(p,a) #define IDirectDrawSurface7_GetFlipStatus(p,a) (p)->lpVtbl->GetFlipStatus(p,a) #define IDirectDrawSurface7_GetOverlayPosition(p,a,b) (p)->lpVtbl->GetOverlayPosition(p,a,b) #define IDirectDrawSurface7_GetPalette(p,a) (p)->lpVtbl->GetPalette(p,a) #define IDirectDrawSurface7_GetPixelFormat(p,a) (p)->lpVtbl->GetPixelFormat(p,a) #define IDirectDrawSurface7_GetSurfaceDesc(p,a) (p)->lpVtbl->GetSurfaceDesc(p,a) #define IDirectDrawSurface7_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b) #define IDirectDrawSurface7_IsLost(p) (p)->lpVtbl->IsLost(p) #define IDirectDrawSurface7_Lock(p,a,b,c,d) (p)->lpVtbl->Lock(p,a,b,c,d) #define IDirectDrawSurface7_ReleaseDC(p,a) (p)->lpVtbl->ReleaseDC(p,a) #define IDirectDrawSurface7_Restore(p) (p)->lpVtbl->Restore(p) #define IDirectDrawSurface7_SetClipper(p,a) (p)->lpVtbl->SetClipper(p,a) #define IDirectDrawSurface7_SetColorKey(p,a,b) (p)->lpVtbl->SetColorKey(p,a,b) #define IDirectDrawSurface7_SetOverlayPosition(p,a,b) (p)->lpVtbl->SetOverlayPosition(p,a,b) #define IDirectDrawSurface7_SetPalette(p,a) (p)->lpVtbl->SetPalette(p,a) #define IDirectDrawSurface7_Unlock(p,b) (p)->lpVtbl->Unlock(p,b) #define IDirectDrawSurface7_UpdateOverlay(p,a,b,c,d,e) (p)->lpVtbl->UpdateOverlay(p,a,b,c,d,e) #define IDirectDrawSurface7_UpdateOverlayDisplay(p,a) (p)->lpVtbl->UpdateOverlayDisplay(p,a) #define IDirectDrawSurface7_UpdateOverlayZOrder(p,a,b) (p)->lpVtbl->UpdateOverlayZOrder(p,a,b) #define IDirectDrawSurface7_GetDDInterface(p,a) (p)->lpVtbl->GetDDInterface(p,a) #define IDirectDrawSurface7_PageLock(p,a) (p)->lpVtbl->PageLock(p,a) #define IDirectDrawSurface7_PageUnlock(p,a) (p)->lpVtbl->PageUnlock(p,a) #define IDirectDrawSurface7_SetSurfaceDesc(p,a,b) (p)->lpVtbl->SetSurfaceDesc(p,a,b) #define IDirectDrawSurface7_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d) #define IDirectDrawSurface7_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c) #define IDirectDrawSurface7_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a) #define IDirectDrawSurface7_GetUniquenessValue(p, a) (p)->lpVtbl->GetUniquenessValue(p, a) #define IDirectDrawSurface7_ChangeUniquenessValue(p) (p)->lpVtbl->ChangeUniquenessValue(p) #define IDirectDrawSurface7_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a) #define IDirectDrawSurface7_GetPriority(p,a) (p)->lpVtbl->GetPriority(p,a) #define IDirectDrawSurface7_SetLOD(p,a) (p)->lpVtbl->SetLOD(p,a) #define IDirectDrawSurface7_GetLOD(p,a) (p)->lpVtbl->GetLOD(p,a) #else #define IDirectDrawSurface7_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirectDrawSurface7_AddRef(p) (p)->AddRef() #define IDirectDrawSurface7_Release(p) (p)->Release() #define IDirectDrawSurface7_AddAttachedSurface(p,a) (p)->AddAttachedSurface(a) #define IDirectDrawSurface7_AddOverlayDirtyRect(p,a) (p)->AddOverlayDirtyRect(a) #define IDirectDrawSurface7_Blt(p,a,b,c,d,e) (p)->Blt(a,b,c,d,e) #define IDirectDrawSurface7_BltBatch(p,a,b,c) (p)->BltBatch(a,b,c) #define IDirectDrawSurface7_BltFast(p,a,b,c,d,e) (p)->BltFast(a,b,c,d,e) #define IDirectDrawSurface7_DeleteAttachedSurface(p,a,b) (p)->DeleteAttachedSurface(a,b) #define IDirectDrawSurface7_EnumAttachedSurfaces(p,a,b) (p)->EnumAttachedSurfaces(a,b) #define IDirectDrawSurface7_EnumOverlayZOrders(p,a,b,c) (p)->EnumOverlayZOrders(a,b,c) #define IDirectDrawSurface7_Flip(p,a,b) (p)->Flip(a,b) #define IDirectDrawSurface7_GetAttachedSurface(p,a,b) (p)->GetAttachedSurface(a,b) #define IDirectDrawSurface7_GetBltStatus(p,a) (p)->GetBltStatus(a) #define IDirectDrawSurface7_GetCaps(p,b) (p)->GetCaps(b) #define IDirectDrawSurface7_GetClipper(p,a) (p)->GetClipper(a) #define IDirectDrawSurface7_GetColorKey(p,a,b) (p)->GetColorKey(a,b) #define IDirectDrawSurface7_GetDC(p,a) (p)->GetDC(a) #define IDirectDrawSurface7_GetFlipStatus(p,a) (p)->GetFlipStatus(a) #define IDirectDrawSurface7_GetOverlayPosition(p,a,b) (p)->GetOverlayPosition(a,b) #define IDirectDrawSurface7_GetPalette(p,a) (p)->GetPalette(a) #define IDirectDrawSurface7_GetPixelFormat(p,a) (p)->GetPixelFormat(a) #define IDirectDrawSurface7_GetSurfaceDesc(p,a) (p)->GetSurfaceDesc(a) #define IDirectDrawSurface7_Initialize(p,a,b) (p)->Initialize(a,b) #define IDirectDrawSurface7_IsLost(p) (p)->IsLost() #define IDirectDrawSurface7_Lock(p,a,b,c,d) (p)->Lock(a,b,c,d) #define IDirectDrawSurface7_ReleaseDC(p,a) (p)->ReleaseDC(a) #define IDirectDrawSurface7_Restore(p) (p)->Restore() #define IDirectDrawSurface7_SetClipper(p,a) (p)->SetClipper(a) #define IDirectDrawSurface7_SetColorKey(p,a,b) (p)->SetColorKey(a,b) #define IDirectDrawSurface7_SetOverlayPosition(p,a,b) (p)->SetOverlayPosition(a,b) #define IDirectDrawSurface7_SetPalette(p,a) (p)->SetPalette(a) #define IDirectDrawSurface7_Unlock(p,b) (p)->Unlock(b) #define IDirectDrawSurface7_UpdateOverlay(p,a,b,c,d,e) (p)->UpdateOverlay(a,b,c,d,e) #define IDirectDrawSurface7_UpdateOverlayDisplay(p,a) (p)->UpdateOverlayDisplay(a) #define IDirectDrawSurface7_UpdateOverlayZOrder(p,a,b) (p)->UpdateOverlayZOrder(a,b) #define IDirectDrawSurface7_GetDDInterface(p,a) (p)->GetDDInterface(a) #define IDirectDrawSurface7_PageLock(p,a) (p)->PageLock(a) #define IDirectDrawSurface7_PageUnlock(p,a) (p)->PageUnlock(a) #define IDirectDrawSurface7_SetSurfaceDesc(p,a,b) (p)->SetSurfaceDesc(a,b) #define IDirectDrawSurface7_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d) #define IDirectDrawSurface7_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c) #define IDirectDrawSurface7_FreePrivateData(p,a) (p)->FreePrivateData(a) #define IDirectDrawSurface7_GetUniquenessValue(p, a) (p)->GetUniquenessValue(a) #define IDirectDrawSurface7_ChangeUniquenessValue(p) (p)->ChangeUniquenessValue() #define IDirectDrawSurface7_SetPriority(p,a) (p)->SetPriority(a) #define IDirectDrawSurface7_GetPriority(p,a) (p)->GetPriority(a) #define IDirectDrawSurface7_SetLOD(p,a) (p)->SetLOD(a) #define IDirectDrawSurface7_GetLOD(p,a) (p)->GetLOD(a) #endif /* * IDirectDrawColorControl */ #if defined( _WIN32 ) && !defined( _NO_COM ) #undef INTERFACE #define INTERFACE IDirectDrawColorControl DECLARE_INTERFACE_( IDirectDrawColorControl, IUnknown ) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; /*** IDirectDrawColorControl methods ***/ STDMETHOD(GetColorControls)(THIS_ LPDDCOLORCONTROL) PURE; STDMETHOD(SetColorControls)(THIS_ LPDDCOLORCONTROL) PURE; }; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirectDrawColorControl_QueryInterface(p, a, b) (p)->lpVtbl->QueryInterface(p, a, b) #define IDirectDrawColorControl_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectDrawColorControl_Release(p) (p)->lpVtbl->Release(p) #define IDirectDrawColorControl_GetColorControls(p, a) (p)->lpVtbl->GetColorControls(p, a) #define IDirectDrawColorControl_SetColorControls(p, a) (p)->lpVtbl->SetColorControls(p, a) #else #define IDirectDrawColorControl_QueryInterface(p, a, b) (p)->QueryInterface(a, b) #define IDirectDrawColorControl_AddRef(p) (p)->AddRef() #define IDirectDrawColorControl_Release(p) (p)->Release() #define IDirectDrawColorControl_GetColorControls(p, a) (p)->GetColorControls(a) #define IDirectDrawColorControl_SetColorControls(p, a) (p)->SetColorControls(a) #endif #endif /* * IDirectDrawGammaControl */ #if defined( _WIN32 ) && !defined( _NO_COM ) #undef INTERFACE #define INTERFACE IDirectDrawGammaControl DECLARE_INTERFACE_( IDirectDrawGammaControl, IUnknown ) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; /*** IDirectDrawGammaControl methods ***/ STDMETHOD(GetGammaRamp)(THIS_ DWORD, LPDDGAMMARAMP) PURE; STDMETHOD(SetGammaRamp)(THIS_ DWORD, LPDDGAMMARAMP) PURE; }; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirectDrawGammaControl_QueryInterface(p, a, b) (p)->lpVtbl->QueryInterface(p, a, b) #define IDirectDrawGammaControl_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectDrawGammaControl_Release(p) (p)->lpVtbl->Release(p) #define IDirectDrawGammaControl_GetGammaRamp(p, a, b) (p)->lpVtbl->GetGammaRamp(p, a, b) #define IDirectDrawGammaControl_SetGammaRamp(p, a, b) (p)->lpVtbl->SetGammaRamp(p, a, b) #else #define IDirectDrawGammaControl_QueryInterface(p, a, b) (p)->QueryInterface(a, b) #define IDirectDrawGammaControl_AddRef(p) (p)->AddRef() #define IDirectDrawGammaControl_Release(p) (p)->Release() #define IDirectDrawGammaControl_GetGammaRamp(p, a, b) (p)->GetGammaRamp(a, b) #define IDirectDrawGammaControl_SetGammaRamp(p, a, b) (p)->SetGammaRamp(a, b) #endif #endif #endif /* * DDSURFACEDESC */ typedef struct _DDSURFACEDESC { DWORD dwSize; // size of the DDSURFACEDESC structure DWORD dwFlags; // determines what fields are valid DWORD dwHeight; // height of surface to be created DWORD dwWidth; // width of input surface union { LONG lPitch; // distance to start of next line (return value only) DWORD dwLinearSize; // Formless late-allocated optimized surface size } DUMMYUNIONNAMEN(1); DWORD dwBackBufferCount; // number of back buffers requested union { DWORD dwMipMapCount; // number of mip-map levels requested DWORD dwZBufferBitDepth; // depth of Z buffer requested DWORD dwRefreshRate; // refresh rate (used when display mode is described) } DUMMYUNIONNAMEN(2); DWORD dwAlphaBitDepth; // depth of alpha buffer requested DWORD dwReserved; // reserved LPVOID lpSurface; // pointer to the associated surface memory DDCOLORKEY ddckCKDestOverlay; // color key for destination overlay use DDCOLORKEY ddckCKDestBlt; // color key for destination blt use DDCOLORKEY ddckCKSrcOverlay; // color key for source overlay use DDCOLORKEY ddckCKSrcBlt; // color key for source blt use DDPIXELFORMAT ddpfPixelFormat; // pixel format description of the surface DDSCAPS ddsCaps; // direct draw surface capabilities } DDSURFACEDESC; /* * DDSURFACEDESC2 */ typedef struct _DDSURFACEDESC2 { DWORD dwSize; // size of the DDSURFACEDESC structure DWORD dwFlags; // determines what fields are valid DWORD dwHeight; // height of surface to be created DWORD dwWidth; // width of input surface union { LONG lPitch; // distance to start of next line (return value only) DWORD dwLinearSize; // Formless late-allocated optimized surface size } DUMMYUNIONNAMEN(1); union { DWORD dwBackBufferCount; // number of back buffers requested DWORD dwDepth; // the depth if this is a volume texture } DUMMYUNIONNAMEN(5); union { DWORD dwMipMapCount; // number of mip-map levels requestde // dwZBufferBitDepth removed, use ddpfPixelFormat one instead DWORD dwRefreshRate; // refresh rate (used when display mode is described) DWORD dwSrcVBHandle; // The source used in VB::Optimize } DUMMYUNIONNAMEN(2); DWORD dwAlphaBitDepth; // depth of alpha buffer requested DWORD dwReserved; // reserved LPVOID lpSurface; // pointer to the associated surface memory union { DDCOLORKEY ddckCKDestOverlay; // color key for destination overlay use DWORD dwEmptyFaceColor; // Physical color for empty cubemap faces } DUMMYUNIONNAMEN(3); DDCOLORKEY ddckCKDestBlt; // color key for destination blt use DDCOLORKEY ddckCKSrcOverlay; // color key for source overlay use DDCOLORKEY ddckCKSrcBlt; // color key for source blt use union { DDPIXELFORMAT ddpfPixelFormat; // pixel format description of the surface DWORD dwFVF; // vertex format description of vertex buffers } DUMMYUNIONNAMEN(4); DDSCAPS2 ddsCaps; // direct draw surface capabilities DWORD dwTextureStage; // stage in multitexture cascade } DDSURFACEDESC2; /* * ddsCaps field is valid. */ #define DDSD_CAPS 0x00000001l // default /* * dwHeight field is valid. */ #define DDSD_HEIGHT 0x00000002l /* * dwWidth field is valid. */ #define DDSD_WIDTH 0x00000004l /* * lPitch is valid. */ #define DDSD_PITCH 0x00000008l /* * dwBackBufferCount is valid. */ #define DDSD_BACKBUFFERCOUNT 0x00000020l /* * dwZBufferBitDepth is valid. (shouldnt be used in DDSURFACEDESC2) */ #define DDSD_ZBUFFERBITDEPTH 0x00000040l /* * dwAlphaBitDepth is valid. */ #define DDSD_ALPHABITDEPTH 0x00000080l /* * lpSurface is valid. */ #define DDSD_LPSURFACE 0x00000800l /* * ddpfPixelFormat is valid. */ #define DDSD_PIXELFORMAT 0x00001000l /* * ddckCKDestOverlay is valid. */ #define DDSD_CKDESTOVERLAY 0x00002000l /* * ddckCKDestBlt is valid. */ #define DDSD_CKDESTBLT 0x00004000l /* * ddckCKSrcOverlay is valid. */ #define DDSD_CKSRCOVERLAY 0x00008000l /* * ddckCKSrcBlt is valid. */ #define DDSD_CKSRCBLT 0x00010000l /* * dwMipMapCount is valid. */ #define DDSD_MIPMAPCOUNT 0x00020000l /* * dwRefreshRate is valid */ #define DDSD_REFRESHRATE 0x00040000l /* * dwLinearSize is valid */ #define DDSD_LINEARSIZE 0x00080000l /* * dwTextureStage is valid */ #define DDSD_TEXTURESTAGE 0x00100000l /* * dwFVF is valid */ #define DDSD_FVF 0x00200000l /* * dwSrcVBHandle is valid */ #define DDSD_SRCVBHANDLE 0x00400000l /* * dwDepth is valid */ #define DDSD_DEPTH 0x00800000l /* * All input fields are valid. */ #define DDSD_ALL 0x00fff9eel /* * DDOPTSURFACEDESC */ typedef struct _DDOPTSURFACEDESC { DWORD dwSize; // size of the DDOPTSURFACEDESC structure DWORD dwFlags; // determines what fields are valid DDSCAPS2 ddSCaps; // Common caps like: Memory type DDOSCAPS ddOSCaps; // Common caps like: Memory type GUID guid; // Compression technique GUID DWORD dwCompressionRatio; // Compression ratio } DDOPTSURFACEDESC; /* * guid field is valid. */ #define DDOSD_GUID 0x00000001l /* * dwCompressionRatio field is valid. */ #define DDOSD_COMPRESSION_RATIO 0x00000002l /* * ddSCaps field is valid. */ #define DDOSD_SCAPS 0x00000004l /* * ddOSCaps field is valid. */ #define DDOSD_OSCAPS 0x00000008l /* * All input fields are valid. */ #define DDOSD_ALL 0x0000000fl /* * The surface's optimized pixelformat is compressed */ #define DDSDCAPS_PRIMARYSURFACE 0x00000001l /* * The surface's optimized pixelformat is reordered */ #define DDOSDCAPS_OPTREORDERED 0x00000002l /* * The opt surface is a monolithic mipmap */ #define DDOSDCAPS_MONOLITHICMIPMAP 0x00000004l /* * The valid Surf caps: * #define DDSCAPS_SYSTEMMEMORY 0x00000800l * #define DDSCAPS_VIDEOMEMORY 0x00004000l * #define DDSCAPS_LOCALVIDMEM 0x10000000l * #define DDSCAPS_NONLOCALVIDMEM 0x20000000l */ #define DDOSDCAPS_VALIDSCAPS 0x30004800l /* * The valid OptSurf caps */ #define DDOSDCAPS_VALIDOSCAPS 0x00000007l /* * DDCOLORCONTROL */ typedef struct _DDCOLORCONTROL { DWORD dwSize; DWORD dwFlags; LONG lBrightness; LONG lContrast; LONG lHue; LONG lSaturation; LONG lSharpness; LONG lGamma; LONG lColorEnable; DWORD dwReserved1; } DDCOLORCONTROL; /* * lBrightness field is valid. */ #define DDCOLOR_BRIGHTNESS 0x00000001l /* * lContrast field is valid. */ #define DDCOLOR_CONTRAST 0x00000002l /* * lHue field is valid. */ #define DDCOLOR_HUE 0x00000004l /* * lSaturation field is valid. */ #define DDCOLOR_SATURATION 0x00000008l /* * lSharpness field is valid. */ #define DDCOLOR_SHARPNESS 0x00000010l /* * lGamma field is valid. */ #define DDCOLOR_GAMMA 0x00000020l /* * lColorEnable field is valid. */ #define DDCOLOR_COLORENABLE 0x00000040l /*============================================================================ * * Direct Draw Capability Flags * * These flags are used to describe the capabilities of a given Surface. * All flags are bit flags. * *==========================================================================*/ /**************************************************************************** * * DIRECTDRAWSURFACE CAPABILITY FLAGS * ****************************************************************************/ /* * This bit is reserved. It should not be specified. */ #define DDSCAPS_RESERVED1 0x00000001l /* * Indicates that this surface contains alpha-only information. * (To determine if a surface is RGBA/YUVA, the pixel format must be * interrogated.) */ #define DDSCAPS_ALPHA 0x00000002l /* * Indicates that this surface is a backbuffer. It is generally * set by CreateSurface when the DDSCAPS_FLIP capability bit is set. * It indicates that this surface is THE back buffer of a surface * flipping structure. DirectDraw supports N surfaces in a * surface flipping structure. Only the surface that immediately * precedeces the DDSCAPS_FRONTBUFFER has this capability bit set. * The other surfaces are identified as back buffers by the presence * of the DDSCAPS_FLIP capability, their attachment order, and the * absence of the DDSCAPS_FRONTBUFFER and DDSCAPS_BACKBUFFER * capabilities. The bit is sent to CreateSurface when a standalone * back buffer is being created. This surface could be attached to * a front buffer and/or back buffers to form a flipping surface * structure after the CreateSurface call. See AddAttachments for * a detailed description of the behaviors in this case. */ #define DDSCAPS_BACKBUFFER 0x00000004l /* * Indicates a complex surface structure is being described. A * complex surface structure results in the creation of more than * one surface. The additional surfaces are attached to the root * surface. The complex structure can only be destroyed by * destroying the root. */ #define DDSCAPS_COMPLEX 0x00000008l /* * Indicates that this surface is a part of a surface flipping structure. * When it is passed to CreateSurface the DDSCAPS_FRONTBUFFER and * DDSCAP_BACKBUFFER bits are not set. They are set by CreateSurface * on the resulting creations. The dwBackBufferCount field in the * DDSURFACEDESC structure must be set to at least 1 in order for * the CreateSurface call to succeed. The DDSCAPS_COMPLEX capability * must always be set with creating multiple surfaces through CreateSurface. */ #define DDSCAPS_FLIP 0x00000010l /* * Indicates that this surface is THE front buffer of a surface flipping * structure. It is generally set by CreateSurface when the DDSCAPS_FLIP * capability bit is set. * If this capability is sent to CreateSurface then a standalonw front buffer * is created. This surface will not have the DDSCAPS_FLIP capability. * It can be attached to other back buffers to form a flipping structure. * See AddAttachments for a detailed description of the behaviors in this * case. */ #define DDSCAPS_FRONTBUFFER 0x00000020l /* * Indicates that this surface is any offscreen surface that is not an overlay, * texture, zbuffer, front buffer, back buffer, or alpha surface. It is used * to identify plain vanilla surfaces. */ #define DDSCAPS_OFFSCREENPLAIN 0x00000040l /* * Indicates that this surface is an overlay. It may or may not be directly visible * depending on whether or not it is currently being overlayed onto the primary * surface. DDSCAPS_VISIBLE can be used to determine whether or not it is being * overlayed at the moment. */ #define DDSCAPS_OVERLAY 0x00000080l /* * Indicates that unique DirectDrawPalette objects can be created and * attached to this surface. */ #define DDSCAPS_PALETTE 0x00000100l /* * Indicates that this surface is the primary surface. The primary * surface represents what the user is seeing at the moment. */ #define DDSCAPS_PRIMARYSURFACE 0x00000200l /* * This flag used to be DDSCAPS_PRIMARYSURFACELEFT, which is now * obsolete. */ #define DDSCAPS_RESERVED3 0x00000400l #define DDSCAPS_PRIMARYSURFACELEFT 0x00000000l /* * Indicates that this surface memory was allocated in system memory */ #define DDSCAPS_SYSTEMMEMORY 0x00000800l /* * Indicates that this surface can be used as a 3D texture. It does not * indicate whether or not the surface is being used for that purpose. */ #define DDSCAPS_TEXTURE 0x00001000l /* * Indicates that a surface may be a destination for 3D rendering. This * bit must be set in order to query for a Direct3D Device Interface * from this surface. */ #define DDSCAPS_3DDEVICE 0x00002000l /* * Indicates that this surface exists in video memory. */ #define DDSCAPS_VIDEOMEMORY 0x00004000l /* * Indicates that changes made to this surface are immediately visible. * It is always set for the primary surface and is set for overlays while * they are being overlayed and texture maps while they are being textured. */ #define DDSCAPS_VISIBLE 0x00008000l /* * Indicates that only writes are permitted to the surface. Read accesses * from the surface may or may not generate a protection fault, but the * results of a read from this surface will not be meaningful. READ ONLY. */ #define DDSCAPS_WRITEONLY 0x00010000l /* * Indicates that this surface is a z buffer. A z buffer does not contain * displayable information. Instead it contains bit depth information that is * used to determine which pixels are visible and which are obscured. */ #define DDSCAPS_ZBUFFER 0x00020000l /* * Indicates surface will have a DC associated long term */ #define DDSCAPS_OWNDC 0x00040000l /* * Indicates surface should be able to receive live video */ #define DDSCAPS_LIVEVIDEO 0x00080000l /* * Indicates surface should be able to have a stream decompressed * to it by the hardware. */ #define DDSCAPS_HWCODEC 0x00100000l /* * Surface is a ModeX surface. * */ #define DDSCAPS_MODEX 0x00200000l /* * Indicates surface is one level of a mip-map. This surface will * be attached to other DDSCAPS_MIPMAP surfaces to form the mip-map. * This can be done explicitly, by creating a number of surfaces and * attaching them with AddAttachedSurface or by implicitly by CreateSurface. * If this bit is set then DDSCAPS_TEXTURE must also be set. */ #define DDSCAPS_MIPMAP 0x00400000l /* * This bit is reserved. It should not be specified. */ #define DDSCAPS_RESERVED2 0x00800000l /* * Indicates that memory for the surface is not allocated until the surface * is loaded (via the Direct3D texture Load() function). */ #define DDSCAPS_ALLOCONLOAD 0x04000000l /* * Indicates that the surface will recieve data from a video port. */ #define DDSCAPS_VIDEOPORT 0x08000000l /* * Indicates that a video memory surface is resident in true, local video * memory rather than non-local video memory. If this flag is specified then * so must DDSCAPS_VIDEOMEMORY. This flag is mutually exclusive with * DDSCAPS_NONLOCALVIDMEM. */ #define DDSCAPS_LOCALVIDMEM 0x10000000l /* * Indicates that a video memory surface is resident in non-local video * memory rather than true, local video memory. If this flag is specified * then so must DDSCAPS_VIDEOMEMORY. This flag is mutually exclusive with * DDSCAPS_LOCALVIDMEM. */ #define DDSCAPS_NONLOCALVIDMEM 0x20000000l /* * Indicates that this surface is a standard VGA mode surface, and not a * ModeX surface. (This flag will never be set in combination with the * DDSCAPS_MODEX flag). */ #define DDSCAPS_STANDARDVGAMODE 0x40000000l /* * Indicates that this surface will be an optimized surface. This flag is * currently only valid in conjunction with the DDSCAPS_TEXTURE flag. The surface * will be created without any underlying video memory until loaded. */ #define DDSCAPS_OPTIMIZED 0x80000000l /* * This bit is reserved */ #define DDSCAPS2_RESERVED4 0x00000002L #define DDSCAPS2_HARDWAREDEINTERLACE 0x00000000L /* * Indicates to the driver that this surface will be locked very frequently * (for procedural textures, dynamic lightmaps, etc). Surfaces with this cap * set must also have DDSCAPS_TEXTURE. This cap cannot be used with * DDSCAPS2_HINTSTATIC and DDSCAPS2_OPAQUE. */ #define DDSCAPS2_HINTDYNAMIC 0x00000004L /* * Indicates to the driver that this surface can be re-ordered/retiled on * load. This operation will not change the size of the texture. It is * relatively fast and symmetrical, since the application may lock these * bits (although it will take a performance hit when doing so). Surfaces * with this cap set must also have DDSCAPS_TEXTURE. This cap cannot be * used with DDSCAPS2_HINTDYNAMIC and DDSCAPS2_OPAQUE. */ #define DDSCAPS2_HINTSTATIC 0x00000008L /* * Indicates that the client would like this texture surface to be managed by the * DirectDraw/Direct3D runtime. Surfaces with this cap set must also have * DDSCAPS_TEXTURE set. */ #define DDSCAPS2_TEXTUREMANAGE 0x00000010L /* * These bits are reserved for internal use */ #define DDSCAPS2_RESERVED1 0x00000020L #define DDSCAPS2_RESERVED2 0x00000040L /* * Indicates to the driver that this surface will never be locked again. * The driver is free to optimize this surface via retiling and actual compression. * All calls to Lock() or Blts from this surface will fail. Surfaces with this * cap set must also have DDSCAPS_TEXTURE. This cap cannot be used with * DDSCAPS2_HINTDYNAMIC and DDSCAPS2_HINTSTATIC. */ #define DDSCAPS2_OPAQUE 0x00000080L /* * Applications should set this bit at CreateSurface time to indicate that they * intend to use antialiasing. Only valid if DDSCAPS_3DDEVICE is also set. */ #define DDSCAPS2_HINTANTIALIASING 0x00000100L /* * This flag is used at CreateSurface time to indicate that this set of * surfaces is a cubic environment map */ #define DDSCAPS2_CUBEMAP 0x00000200L /* * These flags preform two functions: * - At CreateSurface time, they define which of the six cube faces are * required by the application. * - After creation, each face in the cubemap will have exactly one of these * bits set. */ #define DDSCAPS2_CUBEMAP_POSITIVEX 0x00000400L #define DDSCAPS2_CUBEMAP_NEGATIVEX 0x00000800L #define DDSCAPS2_CUBEMAP_POSITIVEY 0x00001000L #define DDSCAPS2_CUBEMAP_NEGATIVEY 0x00002000L #define DDSCAPS2_CUBEMAP_POSITIVEZ 0x00004000L #define DDSCAPS2_CUBEMAP_NEGATIVEZ 0x00008000L /* * This macro may be used to specify all faces of a cube map at CreateSurface time */ #define DDSCAPS2_CUBEMAP_ALLFACES ( DDSCAPS2_CUBEMAP_POSITIVEX |\ DDSCAPS2_CUBEMAP_NEGATIVEX |\ DDSCAPS2_CUBEMAP_POSITIVEY |\ DDSCAPS2_CUBEMAP_NEGATIVEY |\ DDSCAPS2_CUBEMAP_POSITIVEZ |\ DDSCAPS2_CUBEMAP_NEGATIVEZ ) /* * This flag is an additional flag which is present on mipmap sublevels from DX7 onwards * It enables easier use of GetAttachedSurface rather than EnumAttachedSurfaces for surface * constructs such as Cube Maps, wherein there are more than one mipmap surface attached * to the root surface. * This caps bit is ignored by CreateSurface */ #define DDSCAPS2_MIPMAPSUBLEVEL 0x00010000L /* This flag indicates that the texture should be managed by D3D only */ #define DDSCAPS2_D3DTEXTUREMANAGE 0x00020000L /* This flag indicates that the managed surface can be safely lost */ #define DDSCAPS2_DONOTPERSIST 0x00040000L /* indicates that this surface is part of a stereo flipping chain */ #define DDSCAPS2_STEREOSURFACELEFT 0x00080000L /* * Indicates that the surface is a volume. * Can be combined with DDSCAPS_MIPMAP to indicate a multi-level volume */ #define DDSCAPS2_VOLUME 0x00200000L /* * Indicates that the surface may be locked multiple times by the application. * This cap cannot be used with DDSCAPS2_OPAQUE. */ #define DDSCAPS2_NOTUSERLOCKABLE 0x00400000L /* * Indicates that the vertex buffer data can be used to render points and * point sprites. */ #define DDSCAPS2_POINTS 0x00800000L /* * Indicates that the vertex buffer data can be used to render rt pactches. */ #define DDSCAPS2_RTPATCHES 0x01000000L /* * Indicates that the vertex buffer data can be used to render n patches. */ #define DDSCAPS2_NPATCHES 0x02000000L /* * This bit is reserved for internal use */ #define DDSCAPS2_RESERVED3 0x04000000L /* * Indicates that the contents of the backbuffer do not have to be preserved * the contents of the backbuffer after they are presented. */ #define DDSCAPS2_DISCARDBACKBUFFER 0x10000000L /* * Indicates that all surfaces in this creation chain should be given an alpha channel. * This flag will be set on primary surface chains that may have no explicit pixel format * (and thus take on the format of the current display mode). * The driver should infer that all these surfaces have a format having an alpha channel. * (e.g. assume D3DFMT_A8R8G8B8 if the display mode is x888.) */ #define DDSCAPS2_ENABLEALPHACHANNEL 0x20000000L /* * Indicates that all surfaces in this creation chain is extended primary surface format. * This flag will be set on extended primary surface chains that always have explicit pixel * format and the pixel format is typically GDI (Graphics Device Interface) couldn't handle, * thus only used with fullscreen application. (e.g. D3DFMT_A2R10G10B10 format) */ #define DDSCAPS2_EXTENDEDFORMATPRIMARY 0x40000000L /* * Indicates that all surfaces in this creation chain is additional primary surface. * This flag will be set on primary surface chains which must present on the adapter * id provided on dwCaps4. Typically this will be used to create secondary primary surface * on DualView display adapter. */ #define DDSCAPS2_ADDITIONALPRIMARY 0x80000000L /* * This is a mask that indicates the set of bits that may be set * at createsurface time to indicate number of samples per pixel * when multisampling */ #define DDSCAPS3_MULTISAMPLE_MASK 0x0000001FL /* * This is a mask that indicates the set of bits that may be set * at createsurface time to indicate the quality level of rendering * for the current number of samples per pixel */ #define DDSCAPS3_MULTISAMPLE_QUALITY_MASK 0x000000E0L #define DDSCAPS3_MULTISAMPLE_QUALITY_SHIFT 5 /* * This bit is reserved for internal use */ #define DDSCAPS3_RESERVED1 0x00000100L /* * This bit is reserved for internal use */ #define DDSCAPS3_RESERVED2 0x00000200L /* * This indicates whether this surface has light-weight miplevels */ #define DDSCAPS3_LIGHTWEIGHTMIPMAP 0x00000400L /* * This indicates that the mipsublevels for this surface are auto-generated */ #define DDSCAPS3_AUTOGENMIPMAP 0x00000800L /* * This indicates that the mipsublevels for this surface are auto-generated */ #define DDSCAPS3_DMAP 0x00001000L /**************************************************************************** * * DIRECTDRAW DRIVER CAPABILITY FLAGS * ****************************************************************************/ /* * Display hardware has 3D acceleration. */ #define DDCAPS_3D 0x00000001l /* * Indicates that DirectDraw will support only dest rectangles that are aligned * on DIRECTDRAWCAPS.dwAlignBoundaryDest boundaries of the surface, respectively. * READ ONLY. */ #define DDCAPS_ALIGNBOUNDARYDEST 0x00000002l /* * Indicates that DirectDraw will support only source rectangles whose sizes in * BYTEs are DIRECTDRAWCAPS.dwAlignSizeDest multiples, respectively. READ ONLY. */ #define DDCAPS_ALIGNSIZEDEST 0x00000004l /* * Indicates that DirectDraw will support only source rectangles that are aligned * on DIRECTDRAWCAPS.dwAlignBoundarySrc boundaries of the surface, respectively. * READ ONLY. */ #define DDCAPS_ALIGNBOUNDARYSRC 0x00000008l /* * Indicates that DirectDraw will support only source rectangles whose sizes in * BYTEs are DIRECTDRAWCAPS.dwAlignSizeSrc multiples, respectively. READ ONLY. */ #define DDCAPS_ALIGNSIZESRC 0x00000010l /* * Indicates that DirectDraw will create video memory surfaces that have a stride * alignment equal to DIRECTDRAWCAPS.dwAlignStride. READ ONLY. */ #define DDCAPS_ALIGNSTRIDE 0x00000020l /* * Display hardware is capable of blt operations. */ #define DDCAPS_BLT 0x00000040l /* * Display hardware is capable of asynchronous blt operations. */ #define DDCAPS_BLTQUEUE 0x00000080l /* * Display hardware is capable of color space conversions during the blt operation. */ #define DDCAPS_BLTFOURCC 0x00000100l /* * Display hardware is capable of stretching during blt operations. */ #define DDCAPS_BLTSTRETCH 0x00000200l /* * Display hardware is shared with GDI. */ #define DDCAPS_GDI 0x00000400l /* * Display hardware can overlay. */ #define DDCAPS_OVERLAY 0x00000800l /* * Set if display hardware supports overlays but can not clip them. */ #define DDCAPS_OVERLAYCANTCLIP 0x00001000l /* * Indicates that overlay hardware is capable of color space conversions during * the overlay operation. */ #define DDCAPS_OVERLAYFOURCC 0x00002000l /* * Indicates that stretching can be done by the overlay hardware. */ #define DDCAPS_OVERLAYSTRETCH 0x00004000l /* * Indicates that unique DirectDrawPalettes can be created for DirectDrawSurfaces * other than the primary surface. */ #define DDCAPS_PALETTE 0x00008000l /* * Indicates that palette changes can be syncd with the veritcal refresh. */ #define DDCAPS_PALETTEVSYNC 0x00010000l /* * Display hardware can return the current scan line. */ #define DDCAPS_READSCANLINE 0x00020000l /* * This flag used to bo DDCAPS_STEREOVIEW, which is now obsolete */ #define DDCAPS_RESERVED1 0x00040000l /* * Display hardware is capable of generating a vertical blank interrupt. */ #define DDCAPS_VBI 0x00080000l /* * Supports the use of z buffers with blt operations. */ #define DDCAPS_ZBLTS 0x00100000l /* * Supports Z Ordering of overlays. */ #define DDCAPS_ZOVERLAYS 0x00200000l /* * Supports color key */ #define DDCAPS_COLORKEY 0x00400000l /* * Supports alpha surfaces */ #define DDCAPS_ALPHA 0x00800000l /* * colorkey is hardware assisted(DDCAPS_COLORKEY will also be set) */ #define DDCAPS_COLORKEYHWASSIST 0x01000000l /* * no hardware support at all */ #define DDCAPS_NOHARDWARE 0x02000000l /* * Display hardware is capable of color fill with bltter */ #define DDCAPS_BLTCOLORFILL 0x04000000l /* * Display hardware is bank switched, and potentially very slow at * random access to VRAM. */ #define DDCAPS_BANKSWITCHED 0x08000000l /* * Display hardware is capable of depth filling Z-buffers with bltter */ #define DDCAPS_BLTDEPTHFILL 0x10000000l /* * Display hardware is capable of clipping while bltting. */ #define DDCAPS_CANCLIP 0x20000000l /* * Display hardware is capable of clipping while stretch bltting. */ #define DDCAPS_CANCLIPSTRETCHED 0x40000000l /* * Display hardware is capable of bltting to or from system memory */ #define DDCAPS_CANBLTSYSMEM 0x80000000l /**************************************************************************** * * MORE DIRECTDRAW DRIVER CAPABILITY FLAGS (dwCaps2) * ****************************************************************************/ /* * Display hardware is certified */ #define DDCAPS2_CERTIFIED 0x00000001l /* * Driver cannot interleave 2D operations (lock and blt) to surfaces with * Direct3D rendering operations between calls to BeginScene() and EndScene() */ #define DDCAPS2_NO2DDURING3DSCENE 0x00000002l /* * Display hardware contains a video port */ #define DDCAPS2_VIDEOPORT 0x00000004l /* * The overlay can be automatically flipped according to the video port * VSYNCs, providing automatic doubled buffered display of video port * data using an overlay */ #define DDCAPS2_AUTOFLIPOVERLAY 0x00000008l /* * Overlay can display each field of interlaced data individually while * it is interleaved in memory without causing jittery artifacts. */ #define DDCAPS2_CANBOBINTERLEAVED 0x00000010l /* * Overlay can display each field of interlaced data individually while * it is not interleaved in memory without causing jittery artifacts. */ #define DDCAPS2_CANBOBNONINTERLEAVED 0x00000020l /* * The overlay surface contains color controls (brightness, sharpness, etc.) */ #define DDCAPS2_COLORCONTROLOVERLAY 0x00000040l /* * The primary surface contains color controls (gamma, etc.) */ #define DDCAPS2_COLORCONTROLPRIMARY 0x00000080l /* * RGBZ -> RGB supported for 16:16 RGB:Z */ #define DDCAPS2_CANDROPZ16BIT 0x00000100l /* * Driver supports non-local video memory. */ #define DDCAPS2_NONLOCALVIDMEM 0x00000200l /* * Dirver supports non-local video memory but has different capabilities for * non-local video memory surfaces. If this bit is set then so must * DDCAPS2_NONLOCALVIDMEM. */ #define DDCAPS2_NONLOCALVIDMEMCAPS 0x00000400l /* * Driver neither requires nor prefers surfaces to be pagelocked when performing * blts involving system memory surfaces */ #define DDCAPS2_NOPAGELOCKREQUIRED 0x00000800l /* * Driver can create surfaces which are wider than the primary surface */ #define DDCAPS2_WIDESURFACES 0x00001000l /* * Driver supports bob without using a video port by handling the * DDFLIP_ODD and DDFLIP_EVEN flags specified in Flip. */ #define DDCAPS2_CANFLIPODDEVEN 0x00002000l /* * Driver supports bob using hardware */ #define DDCAPS2_CANBOBHARDWARE 0x00004000l /* * Driver supports bltting any FOURCC surface to another surface of the same FOURCC */ #define DDCAPS2_COPYFOURCC 0x00008000l /* * Driver supports loadable gamma ramps for the primary surface */ #define DDCAPS2_PRIMARYGAMMA 0x00020000l /* * Driver can render in windowed mode. */ #define DDCAPS2_CANRENDERWINDOWED 0x00080000l /* * A calibrator is available to adjust the gamma ramp according to the * physical display properties so that the result will be identical on * all calibrated systems. */ #define DDCAPS2_CANCALIBRATEGAMMA 0x00100000l /* * Indicates that the driver will respond to DDFLIP_INTERVALn flags */ #define DDCAPS2_FLIPINTERVAL 0x00200000l /* * Indicates that the driver will respond to DDFLIP_NOVSYNC */ #define DDCAPS2_FLIPNOVSYNC 0x00400000l /* * Driver supports management of video memory, if this flag is ON, * driver manages the texture if requested with DDSCAPS2_TEXTUREMANAGE on * DirectX manages the texture if this flag is OFF and surface has DDSCAPS2_TEXTUREMANAGE on */ #define DDCAPS2_CANMANAGETEXTURE 0x00800000l /* * The Direct3D texture manager uses this cap to decide whether to put managed * surfaces in non-local video memory. If the cap is set, the texture manager will * put managed surfaces in non-local vidmem. Drivers that cannot texture from * local vidmem SHOULD NOT set this cap. */ #define DDCAPS2_TEXMANINNONLOCALVIDMEM 0x01000000l /* * Indicates that the driver supports DX7 type of stereo in at least one mode (which may * not necessarily be the current mode). Applications should use IDirectDraw7 (or higher) * ::EnumDisplayModes and check the DDSURFACEDESC.ddsCaps.dwCaps2 field for the presence of * DDSCAPS2_STEREOSURFACELEFT to check if a particular mode supports stereo. The application * can also use IDirectDraw7(or higher)::GetDisplayMode to check the current mode. */ #define DDCAPS2_STEREO 0x02000000L /* * This caps bit is intended for internal DirectDraw use. * -It is only valid if DDCAPS2_NONLOCALVIDMEMCAPS is set. * -If this bit is set, then DDCAPS_CANBLTSYSMEM MUST be set by the driver (and * all the assoicated system memory blt caps must be correct). * -It implies that the system->video blt caps in DDCAPS also apply to system to * nonlocal blts. I.e. the dwSVBCaps, dwSVBCKeyCaps, dwSVBFXCaps and dwSVBRops * members of DDCAPS (DDCORECAPS) are filled in correctly. * -Any blt from system to nonlocal memory that matches these caps bits will * be passed to the driver. * * NOTE: This is intended to enable the driver itself to do efficient reordering * of textures. This is NOT meant to imply that hardware can write into AGP memory. * This operation is not currently supported. */ #define DDCAPS2_SYSTONONLOCAL_AS_SYSTOLOCAL 0x04000000L /* * was DDCAPS2_PUREHAL */ #define DDCAPS2_RESERVED1 0x08000000L /* * Driver supports management of video memory, if this flag is ON, * driver manages the resource if requested with DDSCAPS2_TEXTUREMANAGE on * DirectX manages the resource if this flag is OFF and surface has DDSCAPS2_TEXTUREMANAGE on */ #define DDCAPS2_CANMANAGERESOURCE 0x10000000L /* * Driver supports dynamic textures. This will allow the application to set * D3DUSAGE_DYNAMIC (DDSCAPS2_HINTDYNAMIC for drivers) at texture create time. * Video memory dynamic textures WILL be lockable by applications. It is * expected that these locks will be very efficient (which implies that the * driver should always maintain a linear copy, a pointer to which can be * quickly handed out to the application). */ #define DDCAPS2_DYNAMICTEXTURES 0x20000000L /* * Driver supports auto-generation of mipmaps. */ #define DDCAPS2_CANAUTOGENMIPMAP 0x40000000L /**************************************************************************** * * DIRECTDRAW FX ALPHA CAPABILITY FLAGS * ****************************************************************************/ /* * Supports alpha blending around the edge of a source color keyed surface. * For Blt. */ #define DDFXALPHACAPS_BLTALPHAEDGEBLEND 0x00000001l /* * Supports alpha information in the pixel format. The bit depth of alpha * information in the pixel format can be 1,2,4, or 8. The alpha value becomes * more opaque as the alpha value increases. (0 is transparent.) * For Blt. */ #define DDFXALPHACAPS_BLTALPHAPIXELS 0x00000002l /* * Supports alpha information in the pixel format. The bit depth of alpha * information in the pixel format can be 1,2,4, or 8. The alpha value * becomes more transparent as the alpha value increases. (0 is opaque.) * This flag can only be set if DDCAPS_ALPHA is set. * For Blt. */ #define DDFXALPHACAPS_BLTALPHAPIXELSNEG 0x00000004l /* * Supports alpha only surfaces. The bit depth of an alpha only surface can be * 1,2,4, or 8. The alpha value becomes more opaque as the alpha value increases. * (0 is transparent.) * For Blt. */ #define DDFXALPHACAPS_BLTALPHASURFACES 0x00000008l /* * The depth of the alpha channel data can range can be 1,2,4, or 8. * The NEG suffix indicates that this alpha channel becomes more transparent * as the alpha value increases. (0 is opaque.) This flag can only be set if * DDCAPS_ALPHA is set. * For Blt. */ #define DDFXALPHACAPS_BLTALPHASURFACESNEG 0x00000010l /* * Supports alpha blending around the edge of a source color keyed surface. * For Overlays. */ #define DDFXALPHACAPS_OVERLAYALPHAEDGEBLEND 0x00000020l /* * Supports alpha information in the pixel format. The bit depth of alpha * information in the pixel format can be 1,2,4, or 8. The alpha value becomes * more opaque as the alpha value increases. (0 is transparent.) * For Overlays. */ #define DDFXALPHACAPS_OVERLAYALPHAPIXELS 0x00000040l /* * Supports alpha information in the pixel format. The bit depth of alpha * information in the pixel format can be 1,2,4, or 8. The alpha value * becomes more transparent as the alpha value increases. (0 is opaque.) * This flag can only be set if DDCAPS_ALPHA is set. * For Overlays. */ #define DDFXALPHACAPS_OVERLAYALPHAPIXELSNEG 0x00000080l /* * Supports alpha only surfaces. The bit depth of an alpha only surface can be * 1,2,4, or 8. The alpha value becomes more opaque as the alpha value increases. * (0 is transparent.) * For Overlays. */ #define DDFXALPHACAPS_OVERLAYALPHASURFACES 0x00000100l /* * The depth of the alpha channel data can range can be 1,2,4, or 8. * The NEG suffix indicates that this alpha channel becomes more transparent * as the alpha value increases. (0 is opaque.) This flag can only be set if * DDCAPS_ALPHA is set. * For Overlays. */ #define DDFXALPHACAPS_OVERLAYALPHASURFACESNEG 0x00000200l #if DIRECTDRAW_VERSION < 0x0600 #endif //DIRECTDRAW_VERSION /**************************************************************************** * * DIRECTDRAW FX CAPABILITY FLAGS * ****************************************************************************/ /* * Uses arithmetic operations to stretch and shrink surfaces during blt * rather than pixel doubling techniques. Along the Y axis. */ #define DDFXCAPS_BLTARITHSTRETCHY 0x00000020l /* * Uses arithmetic operations to stretch during blt * rather than pixel doubling techniques. Along the Y axis. Only * works for x1, x2, etc. */ #define DDFXCAPS_BLTARITHSTRETCHYN 0x00000010l /* * Supports mirroring left to right in blt. */ #define DDFXCAPS_BLTMIRRORLEFTRIGHT 0x00000040l /* * Supports mirroring top to bottom in blt. */ #define DDFXCAPS_BLTMIRRORUPDOWN 0x00000080l /* * Supports arbitrary rotation for blts. */ #define DDFXCAPS_BLTROTATION 0x00000100l /* * Supports 90 degree rotations for blts. */ #define DDFXCAPS_BLTROTATION90 0x00000200l /* * DirectDraw supports arbitrary shrinking of a surface along the * x axis (horizontal direction) for blts. */ #define DDFXCAPS_BLTSHRINKX 0x00000400l /* * DirectDraw supports integer shrinking (1x,2x,) of a surface * along the x axis (horizontal direction) for blts. */ #define DDFXCAPS_BLTSHRINKXN 0x00000800l /* * DirectDraw supports arbitrary shrinking of a surface along the * y axis (horizontal direction) for blts. */ #define DDFXCAPS_BLTSHRINKY 0x00001000l /* * DirectDraw supports integer shrinking (1x,2x,) of a surface * along the y axis (vertical direction) for blts. */ #define DDFXCAPS_BLTSHRINKYN 0x00002000l /* * DirectDraw supports arbitrary stretching of a surface along the * x axis (horizontal direction) for blts. */ #define DDFXCAPS_BLTSTRETCHX 0x00004000l /* * DirectDraw supports integer stretching (1x,2x,) of a surface * along the x axis (horizontal direction) for blts. */ #define DDFXCAPS_BLTSTRETCHXN 0x00008000l /* * DirectDraw supports arbitrary stretching of a surface along the * y axis (horizontal direction) for blts. */ #define DDFXCAPS_BLTSTRETCHY 0x00010000l /* * DirectDraw supports integer stretching (1x,2x,) of a surface * along the y axis (vertical direction) for blts. */ #define DDFXCAPS_BLTSTRETCHYN 0x00020000l /* * Uses arithmetic operations to stretch and shrink surfaces during * overlay rather than pixel doubling techniques. Along the Y axis * for overlays. */ #define DDFXCAPS_OVERLAYARITHSTRETCHY 0x00040000l /* * Uses arithmetic operations to stretch surfaces during * overlay rather than pixel doubling techniques. Along the Y axis * for overlays. Only works for x1, x2, etc. */ #define DDFXCAPS_OVERLAYARITHSTRETCHYN 0x00000008l /* * DirectDraw supports arbitrary shrinking of a surface along the * x axis (horizontal direction) for overlays. */ #define DDFXCAPS_OVERLAYSHRINKX 0x00080000l /* * DirectDraw supports integer shrinking (1x,2x,) of a surface * along the x axis (horizontal direction) for overlays. */ #define DDFXCAPS_OVERLAYSHRINKXN 0x00100000l /* * DirectDraw supports arbitrary shrinking of a surface along the * y axis (horizontal direction) for overlays. */ #define DDFXCAPS_OVERLAYSHRINKY 0x00200000l /* * DirectDraw supports integer shrinking (1x,2x,) of a surface * along the y axis (vertical direction) for overlays. */ #define DDFXCAPS_OVERLAYSHRINKYN 0x00400000l /* * DirectDraw supports arbitrary stretching of a surface along the * x axis (horizontal direction) for overlays. */ #define DDFXCAPS_OVERLAYSTRETCHX 0x00800000l /* * DirectDraw supports integer stretching (1x,2x,) of a surface * along the x axis (horizontal direction) for overlays. */ #define DDFXCAPS_OVERLAYSTRETCHXN 0x01000000l /* * DirectDraw supports arbitrary stretching of a surface along the * y axis (horizontal direction) for overlays. */ #define DDFXCAPS_OVERLAYSTRETCHY 0x02000000l /* * DirectDraw supports integer stretching (1x,2x,) of a surface * along the y axis (vertical direction) for overlays. */ #define DDFXCAPS_OVERLAYSTRETCHYN 0x04000000l /* * DirectDraw supports mirroring of overlays across the vertical axis */ #define DDFXCAPS_OVERLAYMIRRORLEFTRIGHT 0x08000000l /* * DirectDraw supports mirroring of overlays across the horizontal axis */ #define DDFXCAPS_OVERLAYMIRRORUPDOWN 0x10000000l /* * DirectDraw supports deinterlacing of overlay surfaces */ #define DDFXCAPS_OVERLAYDEINTERLACE 0x20000000l /* * Driver can do alpha blending for blits. */ #define DDFXCAPS_BLTALPHA 0x00000001l /* * Driver can do surface-reconstruction filtering for warped blits. */ #define DDFXCAPS_BLTFILTER DDFXCAPS_BLTARITHSTRETCHY /* * Driver can do alpha blending for overlays. */ #define DDFXCAPS_OVERLAYALPHA 0x00000004l /* * Driver can do surface-reconstruction filtering for warped overlays. */ #define DDFXCAPS_OVERLAYFILTER DDFXCAPS_OVERLAYARITHSTRETCHY /**************************************************************************** * * DIRECTDRAW STEREO VIEW CAPABILITIES * ****************************************************************************/ /* * This flag used to be DDSVCAPS_ENIGMA, which is now obsolete */ #define DDSVCAPS_RESERVED1 0x00000001l /* * This flag used to be DDSVCAPS_FLICKER, which is now obsolete */ #define DDSVCAPS_RESERVED2 0x00000002l /* * This flag used to be DDSVCAPS_REDBLUE, which is now obsolete */ #define DDSVCAPS_RESERVED3 0x00000004l /* * This flag used to be DDSVCAPS_SPLIT, which is now obsolete */ #define DDSVCAPS_RESERVED4 0x00000008l /* * The stereo view is accomplished with switching technology */ #define DDSVCAPS_STEREOSEQUENTIAL 0x00000010L /**************************************************************************** * * DIRECTDRAWPALETTE CAPABILITIES * ****************************************************************************/ /* * Index is 4 bits. There are sixteen color entries in the palette table. */ #define DDPCAPS_4BIT 0x00000001l /* * Index is onto a 8 bit color index. This field is only valid with the * DDPCAPS_1BIT, DDPCAPS_2BIT or DDPCAPS_4BIT capability and the target * surface is in 8bpp. Each color entry is one byte long and is an index * into destination surface's 8bpp palette. */ #define DDPCAPS_8BITENTRIES 0x00000002l /* * Index is 8 bits. There are 256 color entries in the palette table. */ #define DDPCAPS_8BIT 0x00000004l /* * Indicates that this DIRECTDRAWPALETTE should use the palette color array * passed into the lpDDColorArray parameter to initialize the DIRECTDRAWPALETTE * object. * This flag is obsolete. DirectDraw always initializes the color array from * the lpDDColorArray parameter. The definition remains for source-level * compatibility. */ #define DDPCAPS_INITIALIZE 0x00000000l /* * This palette is the one attached to the primary surface. Changing this * table has immediate effect on the display unless DDPSETPAL_VSYNC is specified * and supported. */ #define DDPCAPS_PRIMARYSURFACE 0x00000010l /* * This palette is the one attached to the primary surface left. Changing * this table has immediate effect on the display for the left eye unless * DDPSETPAL_VSYNC is specified and supported. */ #define DDPCAPS_PRIMARYSURFACELEFT 0x00000020l /* * This palette can have all 256 entries defined */ #define DDPCAPS_ALLOW256 0x00000040l /* * This palette can have modifications to it synced with the monitors * refresh rate. */ #define DDPCAPS_VSYNC 0x00000080l /* * Index is 1 bit. There are two color entries in the palette table. */ #define DDPCAPS_1BIT 0x00000100l /* * Index is 2 bit. There are four color entries in the palette table. */ #define DDPCAPS_2BIT 0x00000200l /* * The peFlags member of PALETTEENTRY denotes an 8 bit alpha value */ #define DDPCAPS_ALPHA 0x00000400l /**************************************************************************** * * DIRECTDRAWPALETTE SETENTRY CONSTANTS * ****************************************************************************/ /**************************************************************************** * * DIRECTDRAWPALETTE GETENTRY CONSTANTS * ****************************************************************************/ /* 0 is the only legal value */ /**************************************************************************** * * DIRECTDRAWSURFACE SETPRIVATEDATA CONSTANTS * ****************************************************************************/ /* * The passed pointer is an IUnknown ptr. The cbData argument to SetPrivateData * must be set to sizeof(IUnknown*). DirectDraw will call AddRef through this * pointer and Release when the private data is destroyed. This includes when * the surface or palette is destroyed before such priovate data is destroyed. */ #define DDSPD_IUNKNOWNPOINTER 0x00000001L /* * Private data is only valid for the current state of the object, * as determined by the uniqueness value. */ #define DDSPD_VOLATILE 0x00000002L /**************************************************************************** * * DIRECTDRAWSURFACE SETPALETTE CONSTANTS * ****************************************************************************/ /**************************************************************************** * * DIRECTDRAW BITDEPTH CONSTANTS * * NOTE: These are only used to indicate supported bit depths. These * are flags only, they are not to be used as an actual bit depth. The * absolute numbers 1, 2, 4, 8, 16, 24 and 32 are used to indicate actual * bit depths in a surface or for changing the display mode. * ****************************************************************************/ /* * 1 bit per pixel. */ #define DDBD_1 0x00004000l /* * 2 bits per pixel. */ #define DDBD_2 0x00002000l /* * 4 bits per pixel. */ #define DDBD_4 0x00001000l /* * 8 bits per pixel. */ #define DDBD_8 0x00000800l /* * 16 bits per pixel. */ #define DDBD_16 0x00000400l /* * 24 bits per pixel. */ #define DDBD_24 0X00000200l /* * 32 bits per pixel. */ #define DDBD_32 0x00000100l /**************************************************************************** * * DIRECTDRAWSURFACE SET/GET COLOR KEY FLAGS * ****************************************************************************/ /* * Set if the structure contains a color space. Not set if the structure * contains a single color key. */ #define DDCKEY_COLORSPACE 0x00000001l /* * Set if the structure specifies a color key or color space which is to be * used as a destination color key for blt operations. */ #define DDCKEY_DESTBLT 0x00000002l /* * Set if the structure specifies a color key or color space which is to be * used as a destination color key for overlay operations. */ #define DDCKEY_DESTOVERLAY 0x00000004l /* * Set if the structure specifies a color key or color space which is to be * used as a source color key for blt operations. */ #define DDCKEY_SRCBLT 0x00000008l /* * Set if the structure specifies a color key or color space which is to be * used as a source color key for overlay operations. */ #define DDCKEY_SRCOVERLAY 0x00000010l /**************************************************************************** * * DIRECTDRAW COLOR KEY CAPABILITY FLAGS * ****************************************************************************/ /* * Supports transparent blting using a color key to identify the replaceable * bits of the destination surface for RGB colors. */ #define DDCKEYCAPS_DESTBLT 0x00000001l /* * Supports transparent blting using a color space to identify the replaceable * bits of the destination surface for RGB colors. */ #define DDCKEYCAPS_DESTBLTCLRSPACE 0x00000002l /* * Supports transparent blting using a color space to identify the replaceable * bits of the destination surface for YUV colors. */ #define DDCKEYCAPS_DESTBLTCLRSPACEYUV 0x00000004l /* * Supports transparent blting using a color key to identify the replaceable * bits of the destination surface for YUV colors. */ #define DDCKEYCAPS_DESTBLTYUV 0x00000008l /* * Supports overlaying using colorkeying of the replaceable bits of the surface * being overlayed for RGB colors. */ #define DDCKEYCAPS_DESTOVERLAY 0x00000010l /* * Supports a color space as the color key for the destination for RGB colors. */ #define DDCKEYCAPS_DESTOVERLAYCLRSPACE 0x00000020l /* * Supports a color space as the color key for the destination for YUV colors. */ #define DDCKEYCAPS_DESTOVERLAYCLRSPACEYUV 0x00000040l /* * Supports only one active destination color key value for visible overlay * surfaces. */ #define DDCKEYCAPS_DESTOVERLAYONEACTIVE 0x00000080l /* * Supports overlaying using colorkeying of the replaceable bits of the * surface being overlayed for YUV colors. */ #define DDCKEYCAPS_DESTOVERLAYYUV 0x00000100l /* * Supports transparent blting using the color key for the source with * this surface for RGB colors. */ #define DDCKEYCAPS_SRCBLT 0x00000200l /* * Supports transparent blting using a color space for the source with * this surface for RGB colors. */ #define DDCKEYCAPS_SRCBLTCLRSPACE 0x00000400l /* * Supports transparent blting using a color space for the source with * this surface for YUV colors. */ #define DDCKEYCAPS_SRCBLTCLRSPACEYUV 0x00000800l /* * Supports transparent blting using the color key for the source with * this surface for YUV colors. */ #define DDCKEYCAPS_SRCBLTYUV 0x00001000l /* * Supports overlays using the color key for the source with this * overlay surface for RGB colors. */ #define DDCKEYCAPS_SRCOVERLAY 0x00002000l /* * Supports overlays using a color space as the source color key for * the overlay surface for RGB colors. */ #define DDCKEYCAPS_SRCOVERLAYCLRSPACE 0x00004000l /* * Supports overlays using a color space as the source color key for * the overlay surface for YUV colors. */ #define DDCKEYCAPS_SRCOVERLAYCLRSPACEYUV 0x00008000l /* * Supports only one active source color key value for visible * overlay surfaces. */ #define DDCKEYCAPS_SRCOVERLAYONEACTIVE 0x00010000l /* * Supports overlays using the color key for the source with this * overlay surface for YUV colors. */ #define DDCKEYCAPS_SRCOVERLAYYUV 0x00020000l /* * there are no bandwidth trade-offs for using colorkey with an overlay */ #define DDCKEYCAPS_NOCOSTOVERLAY 0x00040000l /**************************************************************************** * * DIRECTDRAW PIXELFORMAT FLAGS * ****************************************************************************/ /* * The surface has alpha channel information in the pixel format. */ #define DDPF_ALPHAPIXELS 0x00000001l /* * The pixel format contains alpha only information */ #define DDPF_ALPHA 0x00000002l /* * The FourCC code is valid. */ #define DDPF_FOURCC 0x00000004l /* * The surface is 4-bit color indexed. */ #define DDPF_PALETTEINDEXED4 0x00000008l /* * The surface is indexed into a palette which stores indices * into the destination surface's 8-bit palette. */ #define DDPF_PALETTEINDEXEDTO8 0x00000010l /* * The surface is 8-bit color indexed. */ #define DDPF_PALETTEINDEXED8 0x00000020l /* * The RGB data in the pixel format structure is valid. */ #define DDPF_RGB 0x00000040l /* * The surface will accept pixel data in the format specified * and compress it during the write. */ #define DDPF_COMPRESSED 0x00000080l /* * The surface will accept RGB data and translate it during * the write to YUV data. The format of the data to be written * will be contained in the pixel format structure. The DDPF_RGB * flag will be set. */ #define DDPF_RGBTOYUV 0x00000100l /* * pixel format is YUV - YUV data in pixel format struct is valid */ #define DDPF_YUV 0x00000200l /* * pixel format is a z buffer only surface */ #define DDPF_ZBUFFER 0x00000400l /* * The surface is 1-bit color indexed. */ #define DDPF_PALETTEINDEXED1 0x00000800l /* * The surface is 2-bit color indexed. */ #define DDPF_PALETTEINDEXED2 0x00001000l /* * The surface contains Z information in the pixels */ #define DDPF_ZPIXELS 0x00002000l /* * The surface contains stencil information along with Z */ #define DDPF_STENCILBUFFER 0x00004000l /* * Premultiplied alpha format -- the color components have been * premultiplied by the alpha component. */ #define DDPF_ALPHAPREMULT 0x00008000l /* * Luminance data in the pixel format is valid. * Use this flag for luminance-only or luminance+alpha surfaces, * the bit depth is then ddpf.dwLuminanceBitCount. */ #define DDPF_LUMINANCE 0x00020000l /* * Luminance data in the pixel format is valid. * Use this flag when hanging luminance off bumpmap surfaces, * the bit mask for the luminance portion of the pixel is then * ddpf.dwBumpLuminanceBitMask */ #define DDPF_BUMPLUMINANCE 0x00040000l /* * Bump map dUdV data in the pixel format is valid. */ #define DDPF_BUMPDUDV 0x00080000l /*=========================================================================== * * * DIRECTDRAW CALLBACK FLAGS * * *==========================================================================*/ /**************************************************************************** * * DIRECTDRAW ENUMSURFACES FLAGS * ****************************************************************************/ /* * Enumerate all of the surfaces that meet the search criterion. */ #define DDENUMSURFACES_ALL 0x00000001l /* * A search hit is a surface that matches the surface description. */ #define DDENUMSURFACES_MATCH 0x00000002l /* * A search hit is a surface that does not match the surface description. */ #define DDENUMSURFACES_NOMATCH 0x00000004l /* * Enumerate the first surface that can be created which meets the search criterion. */ #define DDENUMSURFACES_CANBECREATED 0x00000008l /* * Enumerate the surfaces that already exist that meet the search criterion. */ #define DDENUMSURFACES_DOESEXIST 0x00000010l /**************************************************************************** * * DIRECTDRAW SETDISPLAYMODE FLAGS * ****************************************************************************/ /* * The desired mode is a standard VGA mode */ #define DDSDM_STANDARDVGAMODE 0x00000001l /**************************************************************************** * * DIRECTDRAW ENUMDISPLAYMODES FLAGS * ****************************************************************************/ /* * Enumerate Modes with different refresh rates. EnumDisplayModes guarantees * that a particular mode will be enumerated only once. This flag specifies whether * the refresh rate is taken into account when determining if a mode is unique. */ #define DDEDM_REFRESHRATES 0x00000001l /* * Enumerate VGA modes. Specify this flag if you wish to enumerate supported VGA * modes such as mode 0x13 in addition to the usual ModeX modes (which are always * enumerated if the application has previously called SetCooperativeLevel with the * DDSCL_ALLOWMODEX flag set). */ #define DDEDM_STANDARDVGAMODES 0x00000002L /**************************************************************************** * * DIRECTDRAW SETCOOPERATIVELEVEL FLAGS * ****************************************************************************/ /* * Exclusive mode owner will be responsible for the entire primary surface. * GDI can be ignored. used with DD */ #define DDSCL_FULLSCREEN 0x00000001l /* * allow CTRL_ALT_DEL to work while in fullscreen exclusive mode */ #define DDSCL_ALLOWREBOOT 0x00000002l /* * prevents DDRAW from modifying the application window. * prevents DDRAW from minimize/restore the application window on activation. */ #define DDSCL_NOWINDOWCHANGES 0x00000004l /* * app wants to work as a regular Windows application */ #define DDSCL_NORMAL 0x00000008l /* * app wants exclusive access */ #define DDSCL_EXCLUSIVE 0x00000010l /* * app can deal with non-windows display modes */ #define DDSCL_ALLOWMODEX 0x00000040l /* * this window will receive the focus messages */ #define DDSCL_SETFOCUSWINDOW 0x00000080l /* * this window is associated with the DDRAW object and will * cover the screen in fullscreen mode */ #define DDSCL_SETDEVICEWINDOW 0x00000100l /* * app wants DDRAW to create a window to be associated with the * DDRAW object */ #define DDSCL_CREATEDEVICEWINDOW 0x00000200l /* * App explicitly asks DDRAW/D3D to be multithread safe. This makes D3D * take the global crtisec more frequently. */ #define DDSCL_MULTITHREADED 0x00000400l /* * App specifies that it would like to keep the FPU set up for optimal Direct3D * performance (single precision and exceptions disabled) so Direct3D * does not need to explicitly set the FPU each time. This is assumed by * default in DirectX 7. See also DDSCL_FPUPRESERVE */ #define DDSCL_FPUSETUP 0x00000800l /* * App specifies that it needs either double precision FPU or FPU exceptions * enabled. This makes Direct3D explicitly set the FPU state eah time it is * called. Setting the flag will reduce Direct3D performance. The flag is * assumed by default in DirectX 6 and earlier. See also DDSCL_FPUSETUP */ #define DDSCL_FPUPRESERVE 0x00001000l /**************************************************************************** * * DIRECTDRAW BLT FLAGS * ****************************************************************************/ /* * Use the alpha information in the pixel format or the alpha channel surface * attached to the destination surface as the alpha channel for this blt. */ #define DDBLT_ALPHADEST 0x00000001l /* * Use the dwConstAlphaDest field in the DDBLTFX structure as the alpha channel * for the destination surface for this blt. */ #define DDBLT_ALPHADESTCONSTOVERRIDE 0x00000002l /* * The NEG suffix indicates that the destination surface becomes more * transparent as the alpha value increases. (0 is opaque) */ #define DDBLT_ALPHADESTNEG 0x00000004l /* * Use the lpDDSAlphaDest field in the DDBLTFX structure as the alpha * channel for the destination for this blt. */ #define DDBLT_ALPHADESTSURFACEOVERRIDE 0x00000008l /* * Use the dwAlphaEdgeBlend field in the DDBLTFX structure as the alpha channel * for the edges of the image that border the color key colors. */ #define DDBLT_ALPHAEDGEBLEND 0x00000010l /* * Use the alpha information in the pixel format or the alpha channel surface * attached to the source surface as the alpha channel for this blt. */ #define DDBLT_ALPHASRC 0x00000020l /* * Use the dwConstAlphaSrc field in the DDBLTFX structure as the alpha channel * for the source for this blt. */ #define DDBLT_ALPHASRCCONSTOVERRIDE 0x00000040l /* * The NEG suffix indicates that the source surface becomes more transparent * as the alpha value increases. (0 is opaque) */ #define DDBLT_ALPHASRCNEG 0x00000080l /* * Use the lpDDSAlphaSrc field in the DDBLTFX structure as the alpha channel * for the source for this blt. */ #define DDBLT_ALPHASRCSURFACEOVERRIDE 0x00000100l /* * Do this blt asynchronously through the FIFO in the order received. If * there is no room in the hardware FIFO fail the call. */ #define DDBLT_ASYNC 0x00000200l /* * Uses the dwFillColor field in the DDBLTFX structure as the RGB color * to fill the destination rectangle on the destination surface with. */ #define DDBLT_COLORFILL 0x00000400l /* * Uses the dwDDFX field in the DDBLTFX structure to specify the effects * to use for the blt. */ #define DDBLT_DDFX 0x00000800l /* * Uses the dwDDROPS field in the DDBLTFX structure to specify the ROPS * that are not part of the Win32 API. */ #define DDBLT_DDROPS 0x00001000l /* * Use the color key associated with the destination surface. */ #define DDBLT_KEYDEST 0x00002000l /* * Use the dckDestColorkey field in the DDBLTFX structure as the color key * for the destination surface. */ #define DDBLT_KEYDESTOVERRIDE 0x00004000l /* * Use the color key associated with the source surface. */ #define DDBLT_KEYSRC 0x00008000l /* * Use the dckSrcColorkey field in the DDBLTFX structure as the color key * for the source surface. */ #define DDBLT_KEYSRCOVERRIDE 0x00010000l /* * Use the dwROP field in the DDBLTFX structure for the raster operation * for this blt. These ROPs are the same as the ones defined in the Win32 API. */ #define DDBLT_ROP 0x00020000l /* * Use the dwRotationAngle field in the DDBLTFX structure as the angle * (specified in 1/100th of a degree) to rotate the surface. */ #define DDBLT_ROTATIONANGLE 0x00040000l /* * Z-buffered blt using the z-buffers attached to the source and destination * surfaces and the dwZBufferOpCode field in the DDBLTFX structure as the * z-buffer opcode. */ #define DDBLT_ZBUFFER 0x00080000l /* * Z-buffered blt using the dwConstDest Zfield and the dwZBufferOpCode field * in the DDBLTFX structure as the z-buffer and z-buffer opcode respectively * for the destination. */ #define DDBLT_ZBUFFERDESTCONSTOVERRIDE 0x00100000l /* * Z-buffered blt using the lpDDSDestZBuffer field and the dwZBufferOpCode * field in the DDBLTFX structure as the z-buffer and z-buffer opcode * respectively for the destination. */ #define DDBLT_ZBUFFERDESTOVERRIDE 0x00200000l /* * Z-buffered blt using the dwConstSrcZ field and the dwZBufferOpCode field * in the DDBLTFX structure as the z-buffer and z-buffer opcode respectively * for the source. */ #define DDBLT_ZBUFFERSRCCONSTOVERRIDE 0x00400000l /* * Z-buffered blt using the lpDDSSrcZBuffer field and the dwZBufferOpCode * field in the DDBLTFX structure as the z-buffer and z-buffer opcode * respectively for the source. */ #define DDBLT_ZBUFFERSRCOVERRIDE 0x00800000l /* * wait until the device is ready to handle the blt * this will cause blt to not return DDERR_WASSTILLDRAWING */ #define DDBLT_WAIT 0x01000000l /* * Uses the dwFillDepth field in the DDBLTFX structure as the depth value * to fill the destination rectangle on the destination Z-buffer surface * with. */ #define DDBLT_DEPTHFILL 0x02000000l /* * Return immediately (with DDERR_WASSTILLDRAWING) if the device is not * ready to schedule the blt at the time Blt() is called. */ #define DDBLT_DONOTWAIT 0x08000000l /* * These flags indicate a presentation blt (i.e. a blt * that moves surface contents from an offscreen back buffer to the primary * surface). The driver is not allowed to "queue" more than three such blts. * The "end" of the presentation blt is indicated, since the * blt may be clipped, in which case the runtime will call the driver with * several blts. All blts (even if not clipped) are tagged with DDBLT_PRESENTATION * and the last (even if not clipped) additionally with DDBLT_LAST_PRESENTATION. * Thus the true rule is that the driver must not schedule a DDBLT_PRESENTATION * blt if there are 3 or more DDBLT_PRESENTLAST blts in the hardware pipe. * If there are such blts in the pipe, the driver should return DDERR_WASSTILLDRAWING * until the oldest queued DDBLT_LAST_PRESENTATION blts has been retired (i.e. the * pixels have been actually written to the primary surface). Once the oldest blt * has been retired, the driver is free to schedule the current blt. * The goal is to provide a mechanism whereby the device's hardware queue never * gets more than 3 frames ahead of the frames being generated by the application. * When excessive queueing occurs, applications become unusable because the application * visibly lags user input, and such problems make windowed interactive applications impossible. * Some drivers may not have sufficient knowledge of their hardware's FIFO to know * when a certain blt has been retired. Such drivers should code cautiously, and * simply not allow any frames to be queued at all. DDBLT_LAST_PRESENTATION should cause * such drivers to return DDERR_WASSTILLDRAWING until the accelerator is completely * finished- exactly as if the application had called Lock on the source surface * before calling Blt. * In other words, the driver is allowed and encouraged to * generate as much latency as it can, but never more than 3 frames worth. * Implementation detail: Drivers should count blts against the SOURCE surface, not * against the primary surface. This enables multiple parallel windowed application * to function more optimally. * This flag is passed only to DX8 or higher drivers. * * APPLICATIONS DO NOT SET THESE FLAGS. THEY ARE SET BY THE DIRECTDRAW RUNTIME. * */ #define DDBLT_PRESENTATION 0x10000000l #define DDBLT_LAST_PRESENTATION 0x20000000l /* * If DDBLT_EXTENDED_FLAGS is set, then the driver should re-interpret * other flags according to the definitions that follow. * For example, bit 0 (0x00000001L) means DDBLT_ALPHADEST, unless * DDBLT_EXTENDED_FLAGS is also set, in which case bit 0 means * DDBLT_EXTENDED_LINEAR_CONTENT. * Only DirectX9 and higher drivers will be given extended blt flags. * Only flags explicitly mentioned here should be re-interpreted. * All other flags retain their original meanings. * * List of re-interpreted flags: * * Bit Hex value New meaning old meaning * --------------------------------------------------------------- * 2 0x00000004 DDBLT_EXTENDED_LINEAR_CONTENT DDBLT_ALPHADESTNEG * 4 0x00000010 DDBLT_EXTENDED_PRESENTATION_STRETCHFACTOR DDBLT_ALPHAEDGEBLEND * * * NOTE: APPLICATIONS SHOULD NOT SET THIS FLAG. THIS FLAG IS INTENDED * FOR USE BY THE DIRECT3D RUNTIME. */ #define DDBLT_EXTENDED_FLAGS 0x40000000l /* * EXTENDED FLAG. SEE DEFINITION OF DDBLT_EXTENDED_FLAGS. * This flag indidcates that the source surface contains content in a * linear color space. The driver may perform gamma correction to the * desktop color space (i.e. sRGB, gamma 2.2) as part of this blt. * If the device can perform such a conversion as part of the copy, * the driver should also set D3DCAPS3_LINEAR_TO_SRGB_PRESENTATION * * NOTE: APPLICATIONS SHOULD NOT SET THIS FLAG. THIS FLAG IS INTENDED * FOR USE BY THE DIRECT3D RUNTIME. Use IDirect3DSwapChain9::Present * and specify D3DPRESENT_LINEAR_CONTENT in order to use this functionality. */ #define DDBLT_EXTENDED_LINEAR_CONTENT 0x00000004l /**************************************************************************** * * BLTFAST FLAGS * ****************************************************************************/ #define DDBLTFAST_NOCOLORKEY 0x00000000 #define DDBLTFAST_SRCCOLORKEY 0x00000001 #define DDBLTFAST_DESTCOLORKEY 0x00000002 #define DDBLTFAST_WAIT 0x00000010 #define DDBLTFAST_DONOTWAIT 0x00000020 /**************************************************************************** * * FLIP FLAGS * ****************************************************************************/ #define DDFLIP_WAIT 0x00000001L /* * Indicates that the target surface contains the even field of video data. * This flag is only valid with an overlay surface. */ #define DDFLIP_EVEN 0x00000002L /* * Indicates that the target surface contains the odd field of video data. * This flag is only valid with an overlay surface. */ #define DDFLIP_ODD 0x00000004L /* * Causes DirectDraw to perform the physical flip immediately and return * to the application. Typically, what was the front buffer but is now the back * buffer will still be visible (depending on timing) until the next vertical * retrace. Subsequent operations involving the two flipped surfaces will * not check to see if the physical flip has finished (i.e. will not return * DDERR_WASSTILLDRAWING for that reason (but may for other reasons)). * This allows an application to perform Flips at a higher frequency than the * monitor refresh rate, but may introduce visible artifacts. * Only effective if DDCAPS2_FLIPNOVSYNC is set. If that bit is not set, * DDFLIP_NOVSYNC has no effect. */ #define DDFLIP_NOVSYNC 0x00000008L /* * Flip Interval Flags. These flags indicate how many vertical retraces to wait between * each flip. The default is one. DirectDraw will return DDERR_WASSTILLDRAWING for each * surface involved in the flip until the specified number of vertical retraces has * ocurred. Only effective if DDCAPS2_FLIPINTERVAL is set. If that bit is not set, * DDFLIP_INTERVALn has no effect. */ /* * DirectDraw will flip on every other vertical sync */ #define DDFLIP_INTERVAL2 0x02000000L /* * DirectDraw will flip on every third vertical sync */ #define DDFLIP_INTERVAL3 0x03000000L /* * DirectDraw will flip on every fourth vertical sync */ #define DDFLIP_INTERVAL4 0x04000000L /* * DirectDraw will flip and display a main stereo surface */ #define DDFLIP_STEREO 0x00000010L /* * On IDirectDrawSurface7 and higher interfaces, the default is DDFLIP_WAIT. If you wish * to override the default and use time when the accelerator is busy (as denoted by * the DDERR_WASSTILLDRAWING return code) then use DDFLIP_DONOTWAIT. */ #define DDFLIP_DONOTWAIT 0x00000020L /**************************************************************************** * * DIRECTDRAW SURFACE OVERLAY FLAGS * ****************************************************************************/ /* * Use the alpha information in the pixel format or the alpha channel surface * attached to the destination surface as the alpha channel for the * destination overlay. */ #define DDOVER_ALPHADEST 0x00000001l /* * Use the dwConstAlphaDest field in the DDOVERLAYFX structure as the * destination alpha channel for this overlay. */ #define DDOVER_ALPHADESTCONSTOVERRIDE 0x00000002l /* * The NEG suffix indicates that the destination surface becomes more * transparent as the alpha value increases. */ #define DDOVER_ALPHADESTNEG 0x00000004l /* * Use the lpDDSAlphaDest field in the DDOVERLAYFX structure as the alpha * channel destination for this overlay. */ #define DDOVER_ALPHADESTSURFACEOVERRIDE 0x00000008l /* * Use the dwAlphaEdgeBlend field in the DDOVERLAYFX structure as the alpha * channel for the edges of the image that border the color key colors. */ #define DDOVER_ALPHAEDGEBLEND 0x00000010l /* * Use the alpha information in the pixel format or the alpha channel surface * attached to the source surface as the source alpha channel for this overlay. */ #define DDOVER_ALPHASRC 0x00000020l /* * Use the dwConstAlphaSrc field in the DDOVERLAYFX structure as the source * alpha channel for this overlay. */ #define DDOVER_ALPHASRCCONSTOVERRIDE 0x00000040l /* * The NEG suffix indicates that the source surface becomes more transparent * as the alpha value increases. */ #define DDOVER_ALPHASRCNEG 0x00000080l /* * Use the lpDDSAlphaSrc field in the DDOVERLAYFX structure as the alpha channel * source for this overlay. */ #define DDOVER_ALPHASRCSURFACEOVERRIDE 0x00000100l /* * Turn this overlay off. */ #define DDOVER_HIDE 0x00000200l /* * Use the color key associated with the destination surface. */ #define DDOVER_KEYDEST 0x00000400l /* * Use the dckDestColorkey field in the DDOVERLAYFX structure as the color key * for the destination surface */ #define DDOVER_KEYDESTOVERRIDE 0x00000800l /* * Use the color key associated with the source surface. */ #define DDOVER_KEYSRC 0x00001000l /* * Use the dckSrcColorkey field in the DDOVERLAYFX structure as the color key * for the source surface. */ #define DDOVER_KEYSRCOVERRIDE 0x00002000l /* * Turn this overlay on. */ #define DDOVER_SHOW 0x00004000l /* * Add a dirty rect to an emulated overlayed surface. */ #define DDOVER_ADDDIRTYRECT 0x00008000l /* * Redraw all dirty rects on an emulated overlayed surface. */ #define DDOVER_REFRESHDIRTYRECTS 0x00010000l /* * Redraw the entire surface on an emulated overlayed surface. */ #define DDOVER_REFRESHALL 0x00020000l /* * Use the overlay FX flags to define special overlay FX */ #define DDOVER_DDFX 0x00080000l /* * Autoflip the overlay when ever the video port autoflips */ #define DDOVER_AUTOFLIP 0x00100000l /* * Display each field of video port data individually without * causing any jittery artifacts */ #define DDOVER_BOB 0x00200000l /* * Indicates that bob/weave decisions should not be overridden by other * interfaces. */ #define DDOVER_OVERRIDEBOBWEAVE 0x00400000l /* * Indicates that the surface memory is composed of interleaved fields. */ #define DDOVER_INTERLEAVED 0x00800000l /* * Indicates that bob will be performed using hardware rather than * software or emulated. */ #define DDOVER_BOBHARDWARE 0x01000000l /* * Indicates that overlay FX structure contains valid ARGB scaling factors. */ #define DDOVER_ARGBSCALEFACTORS 0x02000000l /* * Indicates that ARGB scaling factors can be degraded to fit driver capabilities. */ #define DDOVER_DEGRADEARGBSCALING 0x04000000l /**************************************************************************** * * DIRECTDRAWSURFACE LOCK FLAGS * ****************************************************************************/ /* * The default. Set to indicate that Lock should return a valid memory pointer * to the top of the specified rectangle. If no rectangle is specified then a * pointer to the top of the surface is returned. */ #define DDLOCK_SURFACEMEMORYPTR 0x00000000L // default /* * Set to indicate that Lock should wait until it can obtain a valid memory * pointer before returning. If this bit is set, Lock will never return * DDERR_WASSTILLDRAWING. */ #define DDLOCK_WAIT 0x00000001L /* * Set if an event handle is being passed to Lock. Lock will trigger the event * when it can return the surface memory pointer requested. */ #define DDLOCK_EVENT 0x00000002L /* * Indicates that the surface being locked will only be read from. */ #define DDLOCK_READONLY 0x00000010L /* * Indicates that the surface being locked will only be written to */ #define DDLOCK_WRITEONLY 0x00000020L /* * Indicates that a system wide lock should not be taken when this surface * is locked. This has several advantages (cursor responsiveness, ability * to call more Windows functions, easier debugging) when locking video * memory surfaces. However, an application specifying this flag must * comply with a number of conditions documented in the help file. * Furthermore, this flag cannot be specified when locking the primary. */ #define DDLOCK_NOSYSLOCK 0x00000800L /* * Used only with Direct3D Vertex Buffer Locks. Indicates that no vertices * that were referred to in Draw*PrimtiveVB calls since the start of the * frame (or the last lock without this flag) will be modified during the * lock. This can be useful when one is only appending data to the vertex * buffer */ #define DDLOCK_NOOVERWRITE 0x00001000L /* * Indicates that no assumptions will be made about the contents of the * surface or vertex buffer during this lock. * This enables two things: * - Direct3D or the driver may provide an alternative memory * area as the vertex buffer. This is useful when one plans to clear the * contents of the vertex buffer and fill in new data. * - Drivers sometimes store surface data in a re-ordered format. * When the application locks the surface, the driver is forced to un-re-order * the surface data before allowing the application to see the surface contents. * This flag is a hint to the driver that it can skip the un-re-ordering process * since the application plans to overwrite every single pixel in the surface * or locked rectangle (and so erase any un-re-ordered pixels anyway). * Applications should always set this flag when they intend to overwrite the entire * surface or locked rectangle. */ #define DDLOCK_DISCARDCONTENTS 0x00002000L /* * DDLOCK_OKTOSWAP is an older, less informative name for DDLOCK_DISCARDCONTENTS */ #define DDLOCK_OKTOSWAP 0x00002000L /* * On IDirectDrawSurface7 and higher interfaces, the default is DDLOCK_WAIT. If you wish * to override the default and use time when the accelerator is busy (as denoted by * the DDERR_WASSTILLDRAWING return code) then use DDLOCK_DONOTWAIT. */ #define DDLOCK_DONOTWAIT 0x00004000L /* * This indicates volume texture lock with front and back specified. */ #define DDLOCK_HASVOLUMETEXTUREBOXRECT 0x00008000L /* * This indicates that the driver should not update dirty rect information for this lock. */ #define DDLOCK_NODIRTYUPDATE 0x00010000L /**************************************************************************** * * DIRECTDRAWSURFACE PAGELOCK FLAGS * ****************************************************************************/ /* * No flags defined at present */ /**************************************************************************** * * DIRECTDRAWSURFACE PAGEUNLOCK FLAGS * ****************************************************************************/ /* * No flags defined at present */ /**************************************************************************** * * DIRECTDRAWSURFACE BLT FX FLAGS * ****************************************************************************/ /* * If stretching, use arithmetic stretching along the Y axis for this blt. */ #define DDBLTFX_ARITHSTRETCHY 0x00000001l /* * Do this blt mirroring the surface left to right. Spin the * surface around its y-axis. */ #define DDBLTFX_MIRRORLEFTRIGHT 0x00000002l /* * Do this blt mirroring the surface up and down. Spin the surface * around its x-axis. */ #define DDBLTFX_MIRRORUPDOWN 0x00000004l /* * Schedule this blt to avoid tearing. */ #define DDBLTFX_NOTEARING 0x00000008l /* * Do this blt rotating the surface one hundred and eighty degrees. */ #define DDBLTFX_ROTATE180 0x00000010l /* * Do this blt rotating the surface two hundred and seventy degrees. */ #define DDBLTFX_ROTATE270 0x00000020l /* * Do this blt rotating the surface ninety degrees. */ #define DDBLTFX_ROTATE90 0x00000040l /* * Do this z blt using dwZBufferLow and dwZBufferHigh as range values * specified to limit the bits copied from the source surface. */ #define DDBLTFX_ZBUFFERRANGE 0x00000080l /* * Do this z blt adding the dwZBufferBaseDest to each of the sources z values * before comparing it with the desting z values. */ #define DDBLTFX_ZBUFFERBASEDEST 0x00000100l /**************************************************************************** * * DIRECTDRAWSURFACE OVERLAY FX FLAGS * ****************************************************************************/ /* * If stretching, use arithmetic stretching along the Y axis for this overlay. */ #define DDOVERFX_ARITHSTRETCHY 0x00000001l /* * Mirror the overlay across the vertical axis */ #define DDOVERFX_MIRRORLEFTRIGHT 0x00000002l /* * Mirror the overlay across the horizontal axis */ #define DDOVERFX_MIRRORUPDOWN 0x00000004l /* * Deinterlace the overlay, if possible */ #define DDOVERFX_DEINTERLACE 0x00000008l /**************************************************************************** * * DIRECTDRAW WAITFORVERTICALBLANK FLAGS * ****************************************************************************/ /* * return when the vertical blank interval begins */ #define DDWAITVB_BLOCKBEGIN 0x00000001l /* * set up an event to trigger when the vertical blank begins */ #define DDWAITVB_BLOCKBEGINEVENT 0x00000002l /* * return when the vertical blank interval ends and display begins */ #define DDWAITVB_BLOCKEND 0x00000004l /**************************************************************************** * * DIRECTDRAW GETFLIPSTATUS FLAGS * ****************************************************************************/ /* * is it OK to flip now? */ #define DDGFS_CANFLIP 0x00000001l /* * is the last flip finished? */ #define DDGFS_ISFLIPDONE 0x00000002l /**************************************************************************** * * DIRECTDRAW GETBLTSTATUS FLAGS * ****************************************************************************/ /* * is it OK to blt now? */ #define DDGBS_CANBLT 0x00000001l /* * is the blt to the surface finished? */ #define DDGBS_ISBLTDONE 0x00000002l /**************************************************************************** * * DIRECTDRAW ENUMOVERLAYZORDER FLAGS * ****************************************************************************/ /* * Enumerate overlays back to front. */ #define DDENUMOVERLAYZ_BACKTOFRONT 0x00000000l /* * Enumerate overlays front to back */ #define DDENUMOVERLAYZ_FRONTTOBACK 0x00000001l /**************************************************************************** * * DIRECTDRAW UPDATEOVERLAYZORDER FLAGS * ****************************************************************************/ /* * Send overlay to front */ #define DDOVERZ_SENDTOFRONT 0x00000000l /* * Send overlay to back */ #define DDOVERZ_SENDTOBACK 0x00000001l /* * Move Overlay forward */ #define DDOVERZ_MOVEFORWARD 0x00000002l /* * Move Overlay backward */ #define DDOVERZ_MOVEBACKWARD 0x00000003l /* * Move Overlay in front of relative surface */ #define DDOVERZ_INSERTINFRONTOF 0x00000004l /* * Move Overlay in back of relative surface */ #define DDOVERZ_INSERTINBACKOF 0x00000005l /**************************************************************************** * * DIRECTDRAW SETGAMMARAMP FLAGS * ****************************************************************************/ /* * Request calibrator to adjust the gamma ramp according to the physical * properties of the display so that the result should appear identical * on all systems. */ #define DDSGR_CALIBRATE 0x00000001L /**************************************************************************** * * DIRECTDRAW STARTMODETEST FLAGS * ****************************************************************************/ /* * Indicates that the mode being tested has passed */ #define DDSMT_ISTESTREQUIRED 0x00000001L /**************************************************************************** * * DIRECTDRAW EVALUATEMODE FLAGS * ****************************************************************************/ /* * Indicates that the mode being tested has passed */ #define DDEM_MODEPASSED 0x00000001L /* * Indicates that the mode being tested has failed */ #define DDEM_MODEFAILED 0x00000002L /*=========================================================================== * * * DIRECTDRAW RETURN CODES * * The return values from DirectDraw Commands and Surface that return an HRESULT * are codes from DirectDraw concerning the results of the action * requested by DirectDraw. * *==========================================================================*/ /* * Status is OK * * Issued by: DirectDraw Commands and all callbacks */ #define DD_OK S_OK #define DD_FALSE S_FALSE /**************************************************************************** * * DIRECTDRAW ENUMCALLBACK RETURN VALUES * * EnumCallback returns are used to control the flow of the DIRECTDRAW and * DIRECTDRAWSURFACE object enumerations. They can only be returned by * enumeration callback routines. * ****************************************************************************/ /* * stop the enumeration */ #define DDENUMRET_CANCEL 0 /* * continue the enumeration */ #define DDENUMRET_OK 1 /**************************************************************************** * * DIRECTDRAW ERRORS * * Errors are represented by negative values and cannot be combined. * ****************************************************************************/ /* * This object is already initialized */ #define DDERR_ALREADYINITIALIZED MAKE_DDHRESULT( 5 ) /* * This surface can not be attached to the requested surface. */ #define DDERR_CANNOTATTACHSURFACE MAKE_DDHRESULT( 10 ) /* * This surface can not be detached from the requested surface. */ #define DDERR_CANNOTDETACHSURFACE MAKE_DDHRESULT( 20 ) /* * Support is currently not available. */ #define DDERR_CURRENTLYNOTAVAIL MAKE_DDHRESULT( 40 ) /* * An exception was encountered while performing the requested operation */ #define DDERR_EXCEPTION MAKE_DDHRESULT( 55 ) /* * Generic failure. */ #define DDERR_GENERIC E_FAIL /* * Height of rectangle provided is not a multiple of reqd alignment */ #define DDERR_HEIGHTALIGN MAKE_DDHRESULT( 90 ) /* * Unable to match primary surface creation request with existing * primary surface. */ #define DDERR_INCOMPATIBLEPRIMARY MAKE_DDHRESULT( 95 ) /* * One or more of the caps bits passed to the callback are incorrect. */ #define DDERR_INVALIDCAPS MAKE_DDHRESULT( 100 ) /* * DirectDraw does not support provided Cliplist. */ #define DDERR_INVALIDCLIPLIST MAKE_DDHRESULT( 110 ) /* * DirectDraw does not support the requested mode */ #define DDERR_INVALIDMODE MAKE_DDHRESULT( 120 ) /* * DirectDraw received a pointer that was an invalid DIRECTDRAW object. */ #define DDERR_INVALIDOBJECT MAKE_DDHRESULT( 130 ) /* * One or more of the parameters passed to the callback function are * incorrect. */ #define DDERR_INVALIDPARAMS E_INVALIDARG /* * pixel format was invalid as specified */ #define DDERR_INVALIDPIXELFORMAT MAKE_DDHRESULT( 145 ) /* * Rectangle provided was invalid. */ #define DDERR_INVALIDRECT MAKE_DDHRESULT( 150 ) /* * Operation could not be carried out because one or more surfaces are locked */ #define DDERR_LOCKEDSURFACES MAKE_DDHRESULT( 160 ) /* * There is no 3D present. */ #define DDERR_NO3D MAKE_DDHRESULT( 170 ) /* * Operation could not be carried out because there is no alpha accleration * hardware present or available. */ #define DDERR_NOALPHAHW MAKE_DDHRESULT( 180 ) /* * Operation could not be carried out because there is no stereo * hardware present or available. */ #define DDERR_NOSTEREOHARDWARE MAKE_DDHRESULT( 181 ) /* * Operation could not be carried out because there is no hardware * present which supports stereo surfaces */ #define DDERR_NOSURFACELEFT MAKE_DDHRESULT( 182 ) /* * no clip list available */ #define DDERR_NOCLIPLIST MAKE_DDHRESULT( 205 ) /* * Operation could not be carried out because there is no color conversion * hardware present or available. */ #define DDERR_NOCOLORCONVHW MAKE_DDHRESULT( 210 ) /* * Create function called without DirectDraw object method SetCooperativeLevel * being called. */ #define DDERR_NOCOOPERATIVELEVELSET MAKE_DDHRESULT( 212 ) /* * Surface doesn't currently have a color key */ #define DDERR_NOCOLORKEY MAKE_DDHRESULT( 215 ) /* * Operation could not be carried out because there is no hardware support * of the dest color key. */ #define DDERR_NOCOLORKEYHW MAKE_DDHRESULT( 220 ) /* * No DirectDraw support possible with current display driver */ #define DDERR_NODIRECTDRAWSUPPORT MAKE_DDHRESULT( 222 ) /* * Operation requires the application to have exclusive mode but the * application does not have exclusive mode. */ #define DDERR_NOEXCLUSIVEMODE MAKE_DDHRESULT( 225 ) /* * Flipping visible surfaces is not supported. */ #define DDERR_NOFLIPHW MAKE_DDHRESULT( 230 ) /* * There is no GDI present. */ #define DDERR_NOGDI MAKE_DDHRESULT( 240 ) /* * Operation could not be carried out because there is no hardware present * or available. */ #define DDERR_NOMIRRORHW MAKE_DDHRESULT( 250 ) /* * Requested item was not found */ #define DDERR_NOTFOUND MAKE_DDHRESULT( 255 ) /* * Operation could not be carried out because there is no overlay hardware * present or available. */ #define DDERR_NOOVERLAYHW MAKE_DDHRESULT( 260 ) /* * Operation could not be carried out because the source and destination * rectangles are on the same surface and overlap each other. */ #define DDERR_OVERLAPPINGRECTS MAKE_DDHRESULT( 270 ) /* * Operation could not be carried out because there is no appropriate raster * op hardware present or available. */ #define DDERR_NORASTEROPHW MAKE_DDHRESULT( 280 ) /* * Operation could not be carried out because there is no rotation hardware * present or available. */ #define DDERR_NOROTATIONHW MAKE_DDHRESULT( 290 ) /* * Operation could not be carried out because there is no hardware support * for stretching */ #define DDERR_NOSTRETCHHW MAKE_DDHRESULT( 310 ) /* * DirectDrawSurface is not in 4 bit color palette and the requested operation * requires 4 bit color palette. */ #define DDERR_NOT4BITCOLOR MAKE_DDHRESULT( 316 ) /* * DirectDrawSurface is not in 4 bit color index palette and the requested * operation requires 4 bit color index palette. */ #define DDERR_NOT4BITCOLORINDEX MAKE_DDHRESULT( 317 ) /* * DirectDraw Surface is not in 8 bit color mode and the requested operation * requires 8 bit color. */ #define DDERR_NOT8BITCOLOR MAKE_DDHRESULT( 320 ) /* * Operation could not be carried out because there is no texture mapping * hardware present or available. */ #define DDERR_NOTEXTUREHW MAKE_DDHRESULT( 330 ) /* * Operation could not be carried out because there is no hardware support * for vertical blank synchronized operations. */ #define DDERR_NOVSYNCHW MAKE_DDHRESULT( 335 ) /* * Operation could not be carried out because there is no hardware support * for zbuffer blting. */ #define DDERR_NOZBUFFERHW MAKE_DDHRESULT( 340 ) /* * Overlay surfaces could not be z layered based on their BltOrder because * the hardware does not support z layering of overlays. */ #define DDERR_NOZOVERLAYHW MAKE_DDHRESULT( 350 ) /* * The hardware needed for the requested operation has already been * allocated. */ #define DDERR_OUTOFCAPS MAKE_DDHRESULT( 360 ) /* * DirectDraw does not have enough memory to perform the operation. */ #define DDERR_OUTOFMEMORY E_OUTOFMEMORY /* * DirectDraw does not have enough memory to perform the operation. */ #define DDERR_OUTOFVIDEOMEMORY MAKE_DDHRESULT( 380 ) /* * hardware does not support clipped overlays */ #define DDERR_OVERLAYCANTCLIP MAKE_DDHRESULT( 382 ) /* * Can only have ony color key active at one time for overlays */ #define DDERR_OVERLAYCOLORKEYONLYONEACTIVE MAKE_DDHRESULT( 384 ) /* * Access to this palette is being refused because the palette is already * locked by another thread. */ #define DDERR_PALETTEBUSY MAKE_DDHRESULT( 387 ) /* * No src color key specified for this operation. */ #define DDERR_COLORKEYNOTSET MAKE_DDHRESULT( 400 ) /* * This surface is already attached to the surface it is being attached to. */ #define DDERR_SURFACEALREADYATTACHED MAKE_DDHRESULT( 410 ) /* * This surface is already a dependency of the surface it is being made a * dependency of. */ #define DDERR_SURFACEALREADYDEPENDENT MAKE_DDHRESULT( 420 ) /* * Access to this surface is being refused because the surface is already * locked by another thread. */ #define DDERR_SURFACEBUSY MAKE_DDHRESULT( 430 ) /* * Access to this surface is being refused because no driver exists * which can supply a pointer to the surface. * This is most likely to happen when attempting to lock the primary * surface when no DCI provider is present. * Will also happen on attempts to lock an optimized surface. */ #define DDERR_CANTLOCKSURFACE MAKE_DDHRESULT( 435 ) /* * Access to Surface refused because Surface is obscured. */ #define DDERR_SURFACEISOBSCURED MAKE_DDHRESULT( 440 ) /* * Access to this surface is being refused because the surface is gone. * The DIRECTDRAWSURFACE object representing this surface should * have Restore called on it. */ #define DDERR_SURFACELOST MAKE_DDHRESULT( 450 ) /* * The requested surface is not attached. */ #define DDERR_SURFACENOTATTACHED MAKE_DDHRESULT( 460 ) /* * Height requested by DirectDraw is too large. */ #define DDERR_TOOBIGHEIGHT MAKE_DDHRESULT( 470 ) /* * Size requested by DirectDraw is too large -- The individual height and * width are OK. */ #define DDERR_TOOBIGSIZE MAKE_DDHRESULT( 480 ) /* * Width requested by DirectDraw is too large. */ #define DDERR_TOOBIGWIDTH MAKE_DDHRESULT( 490 ) /* * Action not supported. */ #define DDERR_UNSUPPORTED E_NOTIMPL /* * Pixel format requested is unsupported by DirectDraw */ #define DDERR_UNSUPPORTEDFORMAT MAKE_DDHRESULT( 510 ) /* * Bitmask in the pixel format requested is unsupported by DirectDraw */ #define DDERR_UNSUPPORTEDMASK MAKE_DDHRESULT( 520 ) /* * The specified stream contains invalid data */ #define DDERR_INVALIDSTREAM MAKE_DDHRESULT( 521 ) /* * vertical blank is in progress */ #define DDERR_VERTICALBLANKINPROGRESS MAKE_DDHRESULT( 537 ) /* * Informs DirectDraw that the previous Blt which is transfering information * to or from this Surface is incomplete. */ #define DDERR_WASSTILLDRAWING MAKE_DDHRESULT( 540 ) /* * The specified surface type requires specification of the COMPLEX flag */ #define DDERR_DDSCAPSCOMPLEXREQUIRED MAKE_DDHRESULT( 542 ) /* * Rectangle provided was not horizontally aligned on reqd. boundary */ #define DDERR_XALIGN MAKE_DDHRESULT( 560 ) /* * The GUID passed to DirectDrawCreate is not a valid DirectDraw driver * identifier. */ #define DDERR_INVALIDDIRECTDRAWGUID MAKE_DDHRESULT( 561 ) /* * A DirectDraw object representing this driver has already been created * for this process. */ #define DDERR_DIRECTDRAWALREADYCREATED MAKE_DDHRESULT( 562 ) /* * A hardware only DirectDraw object creation was attempted but the driver * did not support any hardware. */ #define DDERR_NODIRECTDRAWHW MAKE_DDHRESULT( 563 ) /* * this process already has created a primary surface */ #define DDERR_PRIMARYSURFACEALREADYEXISTS MAKE_DDHRESULT( 564 ) /* * software emulation not available. */ #define DDERR_NOEMULATION MAKE_DDHRESULT( 565 ) /* * region passed to Clipper::GetClipList is too small. */ #define DDERR_REGIONTOOSMALL MAKE_DDHRESULT( 566 ) /* * an attempt was made to set a clip list for a clipper objec that * is already monitoring an hwnd. */ #define DDERR_CLIPPERISUSINGHWND MAKE_DDHRESULT( 567 ) /* * No clipper object attached to surface object */ #define DDERR_NOCLIPPERATTACHED MAKE_DDHRESULT( 568 ) /* * Clipper notification requires an HWND or * no HWND has previously been set as the CooperativeLevel HWND. */ #define DDERR_NOHWND MAKE_DDHRESULT( 569 ) /* * HWND used by DirectDraw CooperativeLevel has been subclassed, * this prevents DirectDraw from restoring state. */ #define DDERR_HWNDSUBCLASSED MAKE_DDHRESULT( 570 ) /* * The CooperativeLevel HWND has already been set. * It can not be reset while the process has surfaces or palettes created. */ #define DDERR_HWNDALREADYSET MAKE_DDHRESULT( 571 ) /* * No palette object attached to this surface. */ #define DDERR_NOPALETTEATTACHED MAKE_DDHRESULT( 572 ) /* * No hardware support for 16 or 256 color palettes. */ #define DDERR_NOPALETTEHW MAKE_DDHRESULT( 573 ) /* * If a clipper object is attached to the source surface passed into a * BltFast call. */ #define DDERR_BLTFASTCANTCLIP MAKE_DDHRESULT( 574 ) /* * No blter. */ #define DDERR_NOBLTHW MAKE_DDHRESULT( 575 ) /* * No DirectDraw ROP hardware. */ #define DDERR_NODDROPSHW MAKE_DDHRESULT( 576 ) /* * returned when GetOverlayPosition is called on a hidden overlay */ #define DDERR_OVERLAYNOTVISIBLE MAKE_DDHRESULT( 577 ) /* * returned when GetOverlayPosition is called on a overlay that UpdateOverlay * has never been called on to establish a destionation. */ #define DDERR_NOOVERLAYDEST MAKE_DDHRESULT( 578 ) /* * returned when the position of the overlay on the destionation is no longer * legal for that destionation. */ #define DDERR_INVALIDPOSITION MAKE_DDHRESULT( 579 ) /* * returned when an overlay member is called for a non-overlay surface */ #define DDERR_NOTAOVERLAYSURFACE MAKE_DDHRESULT( 580 ) /* * An attempt was made to set the cooperative level when it was already * set to exclusive. */ #define DDERR_EXCLUSIVEMODEALREADYSET MAKE_DDHRESULT( 581 ) /* * An attempt has been made to flip a surface that is not flippable. */ #define DDERR_NOTFLIPPABLE MAKE_DDHRESULT( 582 ) /* * Can't duplicate primary & 3D surfaces, or surfaces that are implicitly * created. */ #define DDERR_CANTDUPLICATE MAKE_DDHRESULT( 583 ) /* * Surface was not locked. An attempt to unlock a surface that was not * locked at all, or by this process, has been attempted. */ #define DDERR_NOTLOCKED MAKE_DDHRESULT( 584 ) /* * Windows can not create any more DCs, or a DC was requested for a paltte-indexed * surface when the surface had no palette AND the display mode was not palette-indexed * (in this case DirectDraw cannot select a proper palette into the DC) */ #define DDERR_CANTCREATEDC MAKE_DDHRESULT( 585 ) /* * No DC was ever created for this surface. */ #define DDERR_NODC MAKE_DDHRESULT( 586 ) /* * This surface can not be restored because it was created in a different * mode. */ #define DDERR_WRONGMODE MAKE_DDHRESULT( 587 ) /* * This surface can not be restored because it is an implicitly created * surface. */ #define DDERR_IMPLICITLYCREATED MAKE_DDHRESULT( 588 ) /* * The surface being used is not a palette-based surface */ #define DDERR_NOTPALETTIZED MAKE_DDHRESULT( 589 ) /* * The display is currently in an unsupported mode */ #define DDERR_UNSUPPORTEDMODE MAKE_DDHRESULT( 590 ) /* * Operation could not be carried out because there is no mip-map * texture mapping hardware present or available. */ #define DDERR_NOMIPMAPHW MAKE_DDHRESULT( 591 ) /* * The requested action could not be performed because the surface was of * the wrong type. */ #define DDERR_INVALIDSURFACETYPE MAKE_DDHRESULT( 592 ) /* * Device does not support optimized surfaces, therefore no video memory optimized surfaces */ #define DDERR_NOOPTIMIZEHW MAKE_DDHRESULT( 600 ) /* * Surface is an optimized surface, but has not yet been allocated any memory */ #define DDERR_NOTLOADED MAKE_DDHRESULT( 601 ) /* * Attempt was made to create or set a device window without first setting * the focus window */ #define DDERR_NOFOCUSWINDOW MAKE_DDHRESULT( 602 ) /* * Attempt was made to set a palette on a mipmap sublevel */ #define DDERR_NOTONMIPMAPSUBLEVEL MAKE_DDHRESULT( 603 ) /* * A DC has already been returned for this surface. Only one DC can be * retrieved per surface. */ #define DDERR_DCALREADYCREATED MAKE_DDHRESULT( 620 ) /* * An attempt was made to allocate non-local video memory from a device * that does not support non-local video memory. */ #define DDERR_NONONLOCALVIDMEM MAKE_DDHRESULT( 630 ) /* * The attempt to page lock a surface failed. */ #define DDERR_CANTPAGELOCK MAKE_DDHRESULT( 640 ) /* * The attempt to page unlock a surface failed. */ #define DDERR_CANTPAGEUNLOCK MAKE_DDHRESULT( 660 ) /* * An attempt was made to page unlock a surface with no outstanding page locks. */ #define DDERR_NOTPAGELOCKED MAKE_DDHRESULT( 680 ) /* * There is more data available than the specified buffer size could hold */ #define DDERR_MOREDATA MAKE_DDHRESULT( 690 ) /* * The data has expired and is therefore no longer valid. */ #define DDERR_EXPIRED MAKE_DDHRESULT( 691 ) /* * The mode test has finished executing. */ #define DDERR_TESTFINISHED MAKE_DDHRESULT( 692 ) /* * The mode test has switched to a new mode. */ #define DDERR_NEWMODE MAKE_DDHRESULT( 693 ) /* * D3D has not yet been initialized. */ #define DDERR_D3DNOTINITIALIZED MAKE_DDHRESULT( 694 ) /* * The video port is not active */ #define DDERR_VIDEONOTACTIVE MAKE_DDHRESULT( 695 ) /* * The monitor does not have EDID data. */ #define DDERR_NOMONITORINFORMATION MAKE_DDHRESULT( 696 ) /* * The driver does not enumerate display mode refresh rates. */ #define DDERR_NODRIVERSUPPORT MAKE_DDHRESULT( 697 ) /* * Surfaces created by one direct draw device cannot be used directly by * another direct draw device. */ #define DDERR_DEVICEDOESNTOWNSURFACE MAKE_DDHRESULT( 699 ) /* * An attempt was made to invoke an interface member of a DirectDraw object * created by CoCreateInstance() before it was initialized. */ #define DDERR_NOTINITIALIZED CO_E_NOTINITIALIZED /* Alpha bit depth constants */ #ifdef __cplusplus }; #endif #ifdef ENABLE_NAMELESS_UNION_PRAGMA #pragma warning(default:4201) #endif #endif //__DDRAW_INCLUDED__ ================================================ FILE: Include/ddrawex.h ================================================ //********************************************************************* //* Microsoft Windows ** //* Copyright(c) Microsoft Corp., 1995-1997 ** //********************************************************************* // // DDRAWEX.H // // Header file for DirectDrawEx functionality #ifndef __DDRAWEXH__ #define __DDRAWEXH__ #ifdef __cplusplus extern "C" { #endif #include // {4FD2A832-86C8-11d0-8FCA-00C04FD9189D} DEFINE_GUID(CLSID_DirectDrawFactory, 0x4fd2a832, 0x86c8, 0x11d0, 0x8f, 0xca, 0x0, 0xc0, 0x4f, 0xd9, 0x18, 0x9d); DEFINE_GUID(IID_IDirectDrawFactory, 0x4fd2a833, 0x86c8, 0x11d0, 0x8f, 0xca, 0x0, 0xc0, 0x4f, 0xd9, 0x18, 0x9d); #ifndef DIRECTDRAW_VERSION //Functionality supported by DDrawex but not DX3 #define DDSD_LPSURFACE 0x00000800l DEFINE_GUID( IID_IDirectDrawSurface3, 0xDA044E00,0x69B2,0x11D0,0xA1,0xD5,0x00,0xAA,0x00,0xB8,0xDF,0xBB ); typedef struct IDirectDrawSurface3 FAR *LPDIRECTDRAWSURFACE3; #undef INTERFACE #define INTERFACE IDirectDrawSurface3 DECLARE_INTERFACE_( IDirectDrawSurface3, IUnknown ) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; /*** IDirectDrawSurface methods ***/ STDMETHOD(AddAttachedSurface)(THIS_ LPDIRECTDRAWSURFACE3) PURE; STDMETHOD(AddOverlayDirtyRect)(THIS_ LPRECT) PURE; STDMETHOD(Blt)(THIS_ LPRECT,LPDIRECTDRAWSURFACE3, LPRECT,DWORD, LPDDBLTFX) PURE; STDMETHOD(BltBatch)(THIS_ LPDDBLTBATCH, DWORD, DWORD ) PURE; STDMETHOD(BltFast)(THIS_ DWORD,DWORD,LPDIRECTDRAWSURFACE3, LPRECT,DWORD) PURE; STDMETHOD(DeleteAttachedSurface)(THIS_ DWORD,LPDIRECTDRAWSURFACE3) PURE; STDMETHOD(EnumAttachedSurfaces)(THIS_ LPVOID,LPDDENUMSURFACESCALLBACK) PURE; STDMETHOD(EnumOverlayZOrders)(THIS_ DWORD,LPVOID,LPDDENUMSURFACESCALLBACK) PURE; STDMETHOD(Flip)(THIS_ LPDIRECTDRAWSURFACE3, DWORD) PURE; STDMETHOD(GetAttachedSurface)(THIS_ LPDDSCAPS, LPDIRECTDRAWSURFACE3 FAR *) PURE; STDMETHOD(GetBltStatus)(THIS_ DWORD) PURE; STDMETHOD(GetCaps)(THIS_ LPDDSCAPS) PURE; STDMETHOD(GetClipper)(THIS_ LPDIRECTDRAWCLIPPER FAR*) PURE; STDMETHOD(GetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE; STDMETHOD(GetDC)(THIS_ HDC FAR *) PURE; STDMETHOD(GetFlipStatus)(THIS_ DWORD) PURE; STDMETHOD(GetOverlayPosition)(THIS_ LPLONG, LPLONG ) PURE; STDMETHOD(GetPalette)(THIS_ LPDIRECTDRAWPALETTE FAR*) PURE; STDMETHOD(GetPixelFormat)(THIS_ LPDDPIXELFORMAT) PURE; STDMETHOD(GetSurfaceDesc)(THIS_ LPDDSURFACEDESC) PURE; STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW, LPDDSURFACEDESC) PURE; STDMETHOD(IsLost)(THIS) PURE; STDMETHOD(Lock)(THIS_ LPRECT,LPDDSURFACEDESC,DWORD,HANDLE) PURE; STDMETHOD(ReleaseDC)(THIS_ HDC) PURE; STDMETHOD(Restore)(THIS) PURE; STDMETHOD(SetClipper)(THIS_ LPDIRECTDRAWCLIPPER) PURE; STDMETHOD(SetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE; STDMETHOD(SetOverlayPosition)(THIS_ LONG, LONG ) PURE; STDMETHOD(SetPalette)(THIS_ LPDIRECTDRAWPALETTE) PURE; STDMETHOD(Unlock)(THIS_ LPVOID) PURE; STDMETHOD(UpdateOverlay)(THIS_ LPRECT, LPDIRECTDRAWSURFACE3,LPRECT,DWORD, LPDDOVERLAYFX) PURE; STDMETHOD(UpdateOverlayDisplay)(THIS_ DWORD) PURE; STDMETHOD(UpdateOverlayZOrder)(THIS_ DWORD, LPDIRECTDRAWSURFACE3) PURE; /*** Added in the v2 interface ***/ STDMETHOD(GetDDInterface)(THIS_ LPVOID FAR *) PURE; STDMETHOD(PageLock)(THIS_ DWORD) PURE; STDMETHOD(PageUnlock)(THIS_ DWORD) PURE; /*** Added in the v3 interface ***/ STDMETHOD(SetSurfaceDesc)(THIS_ LPDDSURFACEDESC, DWORD ) PURE; }; #endif #define DDSCAPS_DATAEXCHANGE (DDSCAPS_SYSTEMMEMORY|DDSCAPS_VIDEOMEMORY) #undef INTERFACE #define INTERFACE IDirectDrawFactory DECLARE_INTERFACE_(IDirectDrawFactory, IUnknown) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; /*** IDirectDrawFactory methods ***/ STDMETHOD(CreateDirectDraw) (THIS_ GUID * pGUID, HWND hWnd, DWORD dwCoopLevelFlags, DWORD dwReserved, IUnknown *pUnkOuter, IDirectDraw **ppDirectDraw) PURE; STDMETHOD(DirectDrawEnumerate) (THIS_ LPDDENUMCALLBACK lpCallback, LPVOID lpContext) PURE; }; // {618F8AD4-8B7A-11d0-8FCC-00C04FD9189D} DEFINE_GUID(IID_IDirectDraw3, 0x618f8ad4, 0x8b7a, 0x11d0, 0x8f, 0xcc, 0x0, 0xc0, 0x4f, 0xd9, 0x18, 0x9d); typedef struct IDirectDraw3 FAR *LPDIRECTDRAW3; #undef INTERFACE #define INTERFACE IDirectDraw3 DECLARE_INTERFACE_(IDirectDraw3, IUnknown) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; /*** IDirectDraw methods ***/ STDMETHOD(Compact)(THIS) PURE; STDMETHOD(CreateClipper)(THIS_ DWORD, LPDIRECTDRAWCLIPPER FAR*, IUnknown FAR * ) PURE; STDMETHOD(CreatePalette)(THIS_ DWORD, LPPALETTEENTRY, LPDIRECTDRAWPALETTE FAR*, IUnknown FAR * ) PURE; STDMETHOD(CreateSurface)(THIS_ LPDDSURFACEDESC, LPDIRECTDRAWSURFACE FAR *, IUnknown FAR *) PURE; STDMETHOD(DuplicateSurface)( THIS_ LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE FAR * ) PURE; STDMETHOD(EnumDisplayModes)( THIS_ DWORD, LPDDSURFACEDESC, LPVOID, LPDDENUMMODESCALLBACK ) PURE; STDMETHOD(EnumSurfaces)(THIS_ DWORD, LPDDSURFACEDESC, LPVOID,LPDDENUMSURFACESCALLBACK ) PURE; STDMETHOD(FlipToGDISurface)(THIS) PURE; STDMETHOD(GetCaps)( THIS_ LPDDCAPS, LPDDCAPS) PURE; STDMETHOD(GetDisplayMode)( THIS_ LPDDSURFACEDESC) PURE; STDMETHOD(GetFourCCCodes)(THIS_ LPDWORD, LPDWORD ) PURE; STDMETHOD(GetGDISurface)(THIS_ LPDIRECTDRAWSURFACE FAR *) PURE; STDMETHOD(GetMonitorFrequency)(THIS_ LPDWORD) PURE; STDMETHOD(GetScanLine)(THIS_ LPDWORD) PURE; STDMETHOD(GetVerticalBlankStatus)(THIS_ LPBOOL ) PURE; STDMETHOD(Initialize)(THIS_ GUID FAR *) PURE; STDMETHOD(RestoreDisplayMode)(THIS) PURE; STDMETHOD(SetCooperativeLevel)(THIS_ HWND, DWORD) PURE; STDMETHOD(SetDisplayMode)(THIS_ DWORD, DWORD,DWORD, DWORD, DWORD) PURE; STDMETHOD(WaitForVerticalBlank)(THIS_ DWORD, HANDLE ) PURE; /*** Added in the v2 interface ***/ STDMETHOD(GetAvailableVidMem)(THIS_ LPDDSCAPS, LPDWORD, LPDWORD) PURE; /*** IDirectDraw3 methods ***/ STDMETHOD(GetSurfaceFromDC) (THIS_ HDC, IDirectDrawSurface **) PURE; }; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirectDraw3_QueryInterface(p, a, b) (p)->lpVtbl->QueryInterface(p, a, b) #define IDirectDraw3_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectDraw3_Release(p) (p)->lpVtbl->Release(p) #define IDirectDraw3_Compact(p) (p)->lpVtbl->Compact(p) #define IDirectDraw3_CreateClipper(p, a, b, c) (p)->lpVtbl->CreateClipper(p, a, b, c) #define IDirectDraw3_CreatePalette(p, a, b, c, d) (p)->lpVtbl->CreatePalette(p, a, b, c, d) #define IDirectDraw3_CreateSurface(p, a, b, c) (p)->lpVtbl->CreateSurface(p, a, b, c) #define IDirectDraw3_DuplicateSurface(p, a, b) (p)->lpVtbl->DuplicateSurface(p, a, b) #define IDirectDraw3_EnumDisplayModes(p, a, b, c, d) (p)->lpVtbl->EnumDisplayModes(p, a, b, c, d) #define IDirectDraw3_EnumSurfaces(p, a, b, c, d) (p)->lpVtbl->EnumSurfaces(p, a, b, c, d) #define IDirectDraw3_FlipToGDISurface(p) (p)->lpVtbl->FlipToGDISurface(p) #define IDirectDraw3_GetCaps(p, a, b) (p)->lpVtbl->GetCaps(p, a, b) #define IDirectDraw3_GetDisplayMode(p, a) (p)->lpVtbl->GetDisplayMode(p, a) #define IDirectDraw3_GetFourCCCodes(p, a, b) (p)->lpVtbl->GetFourCCCodes(p, a, b) #define IDirectDraw3_GetGDISurface(p, a) (p)->lpVtbl->GetGDISurface(p, a) #define IDirectDraw3_GetMonitorFrequency(p, a) (p)->lpVtbl->GetMonitorFrequency(p, a) #define IDirectDraw3_GetScanLine(p, a) (p)->lpVtbl->GetScanLine(p, a) #define IDirectDraw3_GetVerticalBlankStatus(p, a) (p)->lpVtbl->GetVerticalBlankStatus(p, a) #define IDirectDraw3_Initialize(p, a) (p)->lpVtbl->Initialize(p, a) #define IDirectDraw3_RestoreDisplayMode(p) (p)->lpVtbl->RestoreDisplayMode(p) #define IDirectDraw3_SetCooperativeLevel(p, a, b) (p)->lpVtbl->SetCooperativeLevel(p, a, b) #define IDirectDraw3_SetDisplayMode(p, a, b, c, d, e) (p)->lpVtbl->SetDisplayMode(p, a, b, c, d, e) #define IDirectDraw3_WaitForVerticalBlank(p, a, b) (p)->lpVtbl->WaitForVerticalBlank(p, a, b) #define IDirectDraw3_GetAvailableVidMem(p, a, b, c) (p)->lpVtbl->GetAvailableVidMem(p, a, b, c) #define IDirectDraw3_GetSurfaceFromDC(p, a, b) (p)->lpVtbl->GetSurfaceFromDC(p, a, b) #endif /*=========================================================================== * * * DIRECTDRAWEX RETURN CODES * * The return values from DirectDrawEx Commands and Surface that return an * HRESULT are codes from DirectDrawEx concerning the results of the action * requested by DirectDrawEx. * *==========================================================================*/ /* * An attempt was made to load ddraw.dll */ #define DDERR_LOADFAILED MAKE_DDHRESULT( 901 ) /* * Unable to determine module/os version number */ #define DDERR_BADVERSIONINFO MAKE_DDHRESULT( 902 ) /* * Unable to determine address of ddraw.dll exported symbol (DirectDrawCreate or * DirectDrawEnumerate). */ #define DDERR_BADPROCADDRESS MAKE_DDHRESULT( 903 ) /* * Legacy usage: do not use QI() to create D3D device objects from surface objects. * Use IDirect3D2::CreateDevice() */ #define DDERR_LEGACYUSAGE MAKE_DDHRESULT( 904 ) #ifdef __cplusplus } #endif #endif // __DDRAWEXH__ ================================================ FILE: Include/ddrawi.h ================================================ /* * DirectDraw driver interface * (DirectX 7 version) * * Copyright (C) 2001 Ove Kaaven * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_DDRAWI_H #define __WINE_DDRAWI_H #include #include /* the DD HAL is layered onto DCI escapes */ #ifdef __cplusplus extern "C" { #endif typedef struct _DDVIDEOPORTCAPS *LPDDVIDEOPORTCAPS; /* should be in dvp.h */ typedef struct _DDKERNELCAPS *LPDDKERNELCAPS; /* should be in ddkernel.h */ typedef struct _VMEMHEAP *LPVMEMHEAP; /* should be in dmemmgr.h */ #define DDAPI WINAPI /* the DirectDraw versions */ #define DD_VERSION 0x0200 /* compatibility version */ #define DD_RUNTIME_VERSION 0x0700 /* actual version */ /* the HAL version returned from QUERYESCSUPPORT - DCICOMMAND */ #define DD_HAL_VERSION 0x0100 /* more DCICOMMAND escapes */ #define DDCREATEDRIVEROBJECT 10 #define DDGET32BITDRIVERNAME 11 #define DDNEWCALLBACKFNS 12 #define DDVERSIONINFO 13 #define MAX_DRIVER_NAME CCHDEVICENAME /***************************************************************************** * Initialization stuff */ typedef struct { char szName[260]; char szEntryPoint[64]; DWORD dwContext; } DD32BITDRIVERDATA,*LPDD32BITDRIVERDATA; typedef struct { DWORD dwHALVersion; ULONG_PTR dwReserved1; ULONG_PTR dwReserved2; } DDVERSIONDATA,*LPDDVERSIONDATA; typedef DWORD (PASCAL *LPDD32BITDRIVERINIT)(DWORD dwContext); /* pointer to video memory */ typedef ULONG_PTR FLATPTR; /* predeclare some structures */ typedef struct _DDHALINFO *LPDDHALINFO; typedef struct _DDRAWI_DIRECTDRAW_INT *LPDDRAWI_DIRECTDRAW_INT; typedef struct _DDRAWI_DIRECTDRAW_LCL *LPDDRAWI_DIRECTDRAW_LCL; typedef struct _DDRAWI_DIRECTDRAW_GBL *LPDDRAWI_DIRECTDRAW_GBL; typedef struct _DDRAWI_DDRAWSURFACE_INT *LPDDRAWI_DDRAWSURFACE_INT; typedef struct _DDRAWI_DDRAWSURFACE_LCL *LPDDRAWI_DDRAWSURFACE_LCL; typedef struct _DDRAWI_DDRAWSURFACE_GBL *LPDDRAWI_DDRAWSURFACE_GBL; typedef struct _DDRAWI_DDRAWSURFACE_MORE *LPDDRAWI_DDRAWSURFACE_MORE; typedef struct _DDRAWI_DDRAWSURFACE_GBL_MORE *LPDDRAWI_DDRAWSURFACE_GBL_MORE; typedef struct _DDRAWI_DDRAWPALETTE_INT *LPDDRAWI_DDRAWPALETTE_INT; typedef struct _DDRAWI_DDRAWPALETTE_LCL *LPDDRAWI_DDRAWPALETTE_LCL; typedef struct _DDRAWI_DDRAWPALETTE_GBL *LPDDRAWI_DDRAWPALETTE_GBL; typedef struct _DDRAWI_DDRAWCLIPPER_INT *LPDDRAWI_DDRAWCLIPPER_INT; typedef struct _DDRAWI_DDRAWCLIPPER_LCL *LPDDRAWI_DDRAWCLIPPER_LCL; typedef struct _DDRAWI_DDRAWCLIPPER_GBL *LPDDRAWI_DDRAWCLIPPER_GBL; typedef struct _DDRAWI_DDVIDEOPORT_INT *LPDDRAWI_DDVIDEOPORT_INT; typedef struct _DDRAWI_DDVIDEOPORT_LCL *LPDDRAWI_DDVIDEOPORT_LCL; typedef struct _DDRAWI_DDMOTIONCOMP_INT *LPDDRAWI_DDMOTIONCOMP_INT; typedef struct _DDRAWI_DDMOTIONCOMP_LCL *LPDDRAWI_DDMOTIONCOMP_LCL; /* structure GUIDs for GetDriverInfo */ DEFINE_GUID( GUID_MiscellaneousCallbacks, 0xEFD60CC0,0x49E7,0x11D0,0x88,0x9D,0x00,0xAA,0x00,0xBB,0xB7,0x6A ); /* ...videport stuff here... */ DEFINE_GUID( GUID_D3DCallbacks2, 0x0BA584E1,0x70B6,0x11D0,0x88,0x9D,0x00,0xAA,0x00,0xBB,0xB7,0x6A ); DEFINE_GUID( GUID_D3DCallbacks3, 0xDDF41230,0xEC0A,0x11D0,0xA9,0xB6,0x00,0xAA,0x00,0xC0,0x99,0x3E ); DEFINE_GUID( GUID_NonLocalVidMemCaps, 0x86C4FA80,0x8D84,0x11D0,0x94,0xE8,0x00,0xC0,0x4F,0xC3,0x41,0x37 ); /* ...kernel stuff here... */ DEFINE_GUID( GUID_D3DExtendedCaps, 0x7DE41F80,0x9D93,0x11D0,0x89,0xAB,0x00,0xA0,0xC9,0x05,0x41,0x29 ); DEFINE_GUID( GUID_ZPixelFormats, 0x93869880,0x36CF,0x11D1,0x9B,0x1B,0x00,0xAA,0x00,0xBB,0xB8,0xAE ); DEFINE_GUID( GUID_DDMoreSurfaceCaps, 0x3B8A0466,0xF269,0x11D1,0x88,0x0B,0x00,0xC0,0x4F,0xD9,0x30,0xC5 ); DEFINE_GUID( GUID_DDStereoMode, 0xF828169C,0xA8E8,0x11D2,0xA1,0xF2,0x00,0xA0,0xC9,0x83,0xEA,0xF6 ); /* ...more stuff here... */ DEFINE_GUID(GUID_D3DParseUnknownCommandCallback,0x2E04FFA0,0x98E4,0x11D1,0x8C,0xE1,0x00,0xA0,0xC9,0x06,0x29,0xA8 ); /* ...motioncomp stuff here... */ DEFINE_GUID( GUID_Miscellaneous2Callbacks, 0x406B2F00,0x3E5A,0x11D1,0xB6,0x40,0x00,0xAA,0x00,0xA1,0xF9,0x6A ); /***************************************************************************** * driver->ddraw callbacks */ typedef BOOL (DDAPI *LPDDHAL_SETINFO)(LPDDHALINFO lpDDHalInfo, BOOL reset); typedef FLATPTR (DDAPI *LPDDHAL_VIDMEMALLOC)(LPDDRAWI_DIRECTDRAW_GBL lpDD, int heap, DWORD dwWidth, DWORD dwHeight); typedef void (DDAPI *LPDDHAL_VIDMEMFREE)(LPDDRAWI_DIRECTDRAW_GBL lpDD, int heap, FLATPTR fpMem); typedef struct { DWORD dwSize; LPDDHAL_SETINFO lpSetInfo; LPDDHAL_VIDMEMALLOC lpVidMemAlloc; LPDDHAL_VIDMEMFREE lpVidMemFree; } DDHALDDRAWFNS,*LPDDHALDDRAWFNS; /***************************************************************************** * mode info structure */ typedef struct _DDHALMODEINFO { DWORD dwWidth; DWORD dwHeight; LONG lPitch; DWORD dwBPP; WORD wFlags; WORD wRefreshRate; DWORD dwRBitMask; DWORD dwGBitMask; DWORD dwBBitMask; DWORD dwAlphaBitMask; } DDHALMODEINFO,*LPDDHALMODEINFO; #define DDMODEINFO_PALETTIZED 0x0001 #define DDMODEINFO_MODEX 0x0002 #define DDMODEINFO_UNSUPPORTED 0x0004 #define DDMODEINFO_STANDARDVGA 0x0008 #define DDMODEINFO_MAXREFRESH 0x0010 #define DDMODEINFO_STEREO 0x0020 /***************************************************************************** * video memory info structure */ typedef struct _VIDMEM { DWORD dwFlags; FLATPTR fpStart; union { FLATPTR fpEnd; DWORD dwWidth; } DUMMYUNIONNAME1; DDSCAPS ddsCaps; DDSCAPS ddsCapsAlt; union { LPVMEMHEAP lpHeap; DWORD dwHeight; } DUMMYUNIONNAME2; } VIDMEM,*LPVIDMEM; #define VIDMEM_ISLINEAR 0x00000001 #define VIDMEM_ISRECTANGULAR 0x00000002 #define VIDMEM_ISHEAP 0x00000004 #define VIDMEM_ISNONLOCAL 0x00000008 #define VIDMEM_ISWC 0x00000010 #define VIDMEM_ISDISABLED 0x00000020 typedef struct _VIDMEMINFO { FLATPTR fpPrimary; DWORD dwFlags; DWORD dwDisplayWidth; DWORD dwDisplayHeight; LONG lDisplayPitch; DDPIXELFORMAT ddpfDisplay; DWORD dwOffscreenAlign; DWORD dwOverlayAlign; DWORD dwTextureAlign; DWORD dwZBufferAlign; DWORD dwAlphaAlign; DWORD dwNumHeaps; LPVIDMEM pvmList; } VIDMEMINFO,*LPVIDMEMINFO; typedef struct _HEAPALIAS { FLATPTR fpVidMem; LPVOID lpAlias; DWORD dwAliasSize; } HEAPALIAS,*LPHEAPALIAS; typedef struct _HEAPALIASINFO { DWORD dwRefCnt; DWORD dwFlags; DWORD dwNumHeaps; LPHEAPALIAS lpAliases; } HEAPALIASINFO,*LPHEAPALIASINFO; #define HEAPALIASINFO_MAPPEDREAL 0x00000001 #define HEAPALIASINFO_MAPPEDDUMMY 0x00000002 /***************************************************************************** * capabilities structures */ typedef struct _DDCORECAPS { DWORD dwSize; DWORD dwCaps; DWORD dwCaps2; DWORD dwCKeyCaps; DWORD dwFXCaps; DWORD dwFXAlphaCaps; DWORD dwPalCaps; DWORD dwSVCaps; DWORD dwAlphaBltConstBitDepths; DWORD dwAlphaBltPixelBitDepths; DWORD dwAlphaBltSurfaceBitDepths; DWORD dwAlphaOverlayConstBitDepths; DWORD dwAlphaOverlayPixelBitDepths; DWORD dwAlphaOverlaySurfaceBitDepths; DWORD dwZBufferBitDepths; DWORD dwVidMemTotal; DWORD dwVidMemFree; DWORD dwMaxVisibleOverlays; DWORD dwCurrVisibleOverlays; DWORD dwNumFourCCCodes; DWORD dwAlignBoundarySrc; DWORD dwAlignSizeSrc; DWORD dwAlignBoundaryDest; DWORD dwAlignSizeDest; DWORD dwAlignStrideAlign; DWORD dwRops[DD_ROP_SPACE]; DDSCAPS ddsCaps; DWORD dwMinOverlayStretch; DWORD dwMaxOverlayStretch; DWORD dwMinLiveVideoStretch; DWORD dwMaxLiveVideoStretch; DWORD dwMinHwCodecStretch; DWORD dwMaxHwCodecStretch; DWORD dwReserved1; DWORD dwReserved2; DWORD dwReserved3; DWORD dwSVBCaps; DWORD dwSVBCKeyCaps; DWORD dwSVBFXCaps; DWORD dwSVBRops[DD_ROP_SPACE]; DWORD dwVSBCaps; DWORD dwVSBCKeyCaps; DWORD dwVSBFXCaps; DWORD dwVSBRops[DD_ROP_SPACE]; DWORD dwSSBCaps; DWORD dwSSBCKeyCaps; DWORD dwSSBFXCaps; DWORD dwSSBRops[DD_ROP_SPACE]; DWORD dwMaxVideoPorts; DWORD dwCurrVideoPorts; DWORD dwSVBCaps2; } DDCORECAPS,*LPDDCORECAPS; typedef struct _DDNONLOCALVIDMEMCAPS { DWORD dwSize; DWORD dwNLVBCaps; DWORD dwNLVBCaps2; DWORD dwNLVBCKeyCaps; DWORD dwNLVBFXCaps; DWORD dwNLVBRops[DD_ROP_SPACE]; } DDNONLOCALVIDMEMCAPS,*LPDDNONLOCALVIDMEMCAPS; /* typedef struct _DDSCAPSEX { DWORD dwCaps2; DWORD dwCaps3; DWORD dwCaps4; } DDSCAPSEX,*LPDDSCAPSEX; */ #define DDSCAPS_EXECUTEBUFFER DDSCAPS_RESERVED2 #define DDSCAPS2_VERTEXBUFFER DDSCAPS2_RESERVED1 #define DDSCAPS2_COMMANDBUFFER DDSCAPS2_RESERVED2 /***************************************************************************** * ddraw->driver callbacks */ #define DDHAL_DRIVER_NOTHANDLED 0 #define DDHAL_DRIVER_HANDLED 1 #define DDHAL_DRIVER_NOCKEYHW 2 typedef struct _DDHAL_DESTROYDRIVERDATA *LPDDHAL_DESTROYDRIVERDATA; typedef struct _DDHAL_CREATESURFACEDATA *LPDDHAL_CREATESURFACEDATA; typedef struct _DDHAL_DRVSETCOLORKEYDATA *LPDDHAL_DRVSETCOLORKEYDATA; typedef struct _DDHAL_SETMODEDATA *LPDDHAL_SETMODEDATA; typedef struct _DDHAL_WAITFORVERTICALBLANKDATA *LPDDHAL_WAITFORVERTICALBLANKDATA; typedef struct _DDHAL_CANCREATESURFACEDATA *LPDDHAL_CANCREATESURFACEDATA; typedef struct _DDHAL_CREATEPALETTEDATA *LPDDHAL_CREATEPALETTEDATA; typedef struct _DDHAL_GETSCANLINEDATA *LPDDHAL_GETSCANLINEDATA; typedef struct _DDHAL_SETEXCLUSIVEMODEDATA *LPDDHAL_SETEXCLUSIVEMODEDATA; typedef struct _DDHAL_FLIPTOGDISURFACEDATA *LPDDHAL_FLIPTOGDISURFACEDATA; typedef DWORD (PASCAL *LPDDHAL_DESTROYDRIVER) (LPDDHAL_DESTROYDRIVERDATA); typedef DWORD (PASCAL *LPDDHAL_CREATESURFACE) (LPDDHAL_CREATESURFACEDATA); typedef DWORD (PASCAL *LPDDHAL_SETCOLORKEY) (LPDDHAL_DRVSETCOLORKEYDATA); typedef DWORD (PASCAL *LPDDHAL_SETMODE) (LPDDHAL_SETMODEDATA); typedef DWORD (PASCAL *LPDDHAL_WAITFORVERTICALBLANK)(LPDDHAL_WAITFORVERTICALBLANKDATA); typedef DWORD (PASCAL *LPDDHAL_CANCREATESURFACE) (LPDDHAL_CANCREATESURFACEDATA ); typedef DWORD (PASCAL *LPDDHAL_CREATEPALETTE) (LPDDHAL_CREATEPALETTEDATA); typedef DWORD (PASCAL *LPDDHAL_GETSCANLINE) (LPDDHAL_GETSCANLINEDATA); typedef DWORD (PASCAL *LPDDHAL_SETEXCLUSIVEMODE) (LPDDHAL_SETEXCLUSIVEMODEDATA); typedef DWORD (PASCAL *LPDDHAL_FLIPTOGDISURFACE) (LPDDHAL_FLIPTOGDISURFACEDATA); typedef struct _DDHAL_DDCALLBACKS { DWORD dwSize; DWORD dwFlags; LPDDHAL_DESTROYDRIVER DestroyDriver; LPDDHAL_CREATESURFACE CreateSurface; LPDDHAL_SETCOLORKEY SetColorKey; LPDDHAL_SETMODE SetMode; LPDDHAL_WAITFORVERTICALBLANK WaitForVerticalBlank; LPDDHAL_CANCREATESURFACE CanCreateSurface; LPDDHAL_CREATEPALETTE CreatePalette; LPDDHAL_GETSCANLINE GetScanLine; /* DirectX 2 */ LPDDHAL_SETEXCLUSIVEMODE SetExclusiveMode; LPDDHAL_FLIPTOGDISURFACE FlipToGDISurface; } DDHAL_DDCALLBACKS,*LPDDHAL_DDCALLBACKS; typedef struct _DDHAL_DESTROYSURFACEDATA *LPDDHAL_DESTROYSURFACEDATA; typedef struct _DDHAL_FLIPDATA *LPDDHAL_FLIPDATA; typedef struct _DDHAL_SETCLIPLISTDATA *LPDDHAL_SETCLIPLISTDATA; typedef struct _DDHAL_LOCKDATA *LPDDHAL_LOCKDATA; typedef struct _DDHAL_UNLOCKDATA *LPDDHAL_UNLOCKDATA; typedef struct _DDHAL_BLTDATA *LPDDHAL_BLTDATA; typedef struct _DDHAL_SETCOLORKEYDATA *LPDDHAL_SETCOLORKEYDATA; typedef struct _DDHAL_ADDATTACHEDSURFACEDATA *LPDDHAL_ADDATTACHEDSURFACEDATA; typedef struct _DDHAL_GETBLTSTATUSDATA *LPDDHAL_GETBLTSTATUSDATA; typedef struct _DDHAL_GETFLIPSTATUSDATA *LPDDHAL_GETFLIPSTATUSDATA; typedef struct _DDHAL_UPDATEOVERLAYDATA *LPDDHAL_UPDATEOVERLAYDATA; typedef struct _DDHAL_SETOVERLAYPOSITIONDATA *LPDDHAL_SETOVERLAYPOSITIONDATA; typedef struct _DDHAL_SETPALETTEDATA *LPDDHAL_SETPALETTEDATA; typedef DWORD (PASCAL *LPDDHALSURFCB_DESTROYSURFACE) (LPDDHAL_DESTROYSURFACEDATA); typedef DWORD (PASCAL *LPDDHALSURFCB_FLIP) (LPDDHAL_FLIPDATA); typedef DWORD (PASCAL *LPDDHALSURFCB_SETCLIPLIST) (LPDDHAL_SETCLIPLISTDATA); typedef DWORD (PASCAL *LPDDHALSURFCB_LOCK) (LPDDHAL_LOCKDATA); typedef DWORD (PASCAL *LPDDHALSURFCB_UNLOCK) (LPDDHAL_UNLOCKDATA); typedef DWORD (PASCAL *LPDDHALSURFCB_BLT) (LPDDHAL_BLTDATA); typedef DWORD (PASCAL *LPDDHALSURFCB_SETCOLORKEY) (LPDDHAL_SETCOLORKEYDATA); typedef DWORD (PASCAL *LPDDHALSURFCB_ADDATTACHEDSURFACE)(LPDDHAL_ADDATTACHEDSURFACEDATA); typedef DWORD (PASCAL *LPDDHALSURFCB_GETBLTSTATUS) (LPDDHAL_GETBLTSTATUSDATA); typedef DWORD (PASCAL *LPDDHALSURFCB_GETFLIPSTATUS) (LPDDHAL_GETFLIPSTATUSDATA); typedef DWORD (PASCAL *LPDDHALSURFCB_UPDATEOVERLAY) (LPDDHAL_UPDATEOVERLAYDATA); typedef DWORD (PASCAL *LPDDHALSURFCB_SETOVERLAYPOSITION)(LPDDHAL_SETOVERLAYPOSITIONDATA); typedef DWORD (PASCAL *LPDDHALSURFCB_SETPALETTE) (LPDDHAL_SETPALETTEDATA); typedef struct _DDHAL_DDSURFACECALLBACKS { DWORD dwSize; DWORD dwFlags; LPDDHALSURFCB_DESTROYSURFACE DestroySurface; LPDDHALSURFCB_FLIP Flip; LPDDHALSURFCB_SETCLIPLIST SetClipList; LPDDHALSURFCB_LOCK Lock; LPDDHALSURFCB_UNLOCK Unlock; LPDDHALSURFCB_BLT Blt; LPDDHALSURFCB_SETCOLORKEY SetColorKey; LPDDHALSURFCB_ADDATTACHEDSURFACE AddAttachedSurface; LPDDHALSURFCB_GETBLTSTATUS GetBltStatus; LPDDHALSURFCB_GETFLIPSTATUS GetFlipStatus; LPDDHALSURFCB_UPDATEOVERLAY UpdateOverlay; LPDDHALSURFCB_SETOVERLAYPOSITION SetOverlayPosition; LPVOID reserved4; LPDDHALSURFCB_SETPALETTE SetPalette; } DDHAL_DDSURFACECALLBACKS,*LPDDHAL_DDSURFACECALLBACKS; typedef struct _DDHAL_DESTROYPALETTEDATA *LPDDHAL_DESTROYPALETTEDATA; typedef struct _DDHAL_SETENTRIESDATA *LPDDHAL_SETENTRIESDATA; typedef DWORD (PASCAL *LPDDHALPALCB_DESTROYPALETTE)(LPDDHAL_DESTROYPALETTEDATA); typedef DWORD (PASCAL *LPDDHALPALCB_SETENTRIES) (LPDDHAL_SETENTRIESDATA); typedef struct _DDHAL_DDPALETTECALLBACKS { DWORD dwSize; DWORD dwFlags; LPDDHALPALCB_DESTROYPALETTE DestroyPalette; LPDDHALPALCB_SETENTRIES SetEntries; } DDHAL_DDPALETTECALLBACKS,*LPDDHAL_DDPALETTECALLBACKS; typedef DWORD (PASCAL *LPDDHALEXEBUFCB_CANCREATEEXEBUF)(LPDDHAL_CANCREATESURFACEDATA); typedef DWORD (PASCAL *LPDDHALEXEBUFCB_CREATEEXEBUF) (LPDDHAL_CREATESURFACEDATA); typedef DWORD (PASCAL *LPDDHALEXEBUFCB_DESTROYEXEBUF) (LPDDHAL_DESTROYSURFACEDATA); typedef DWORD (PASCAL *LPDDHALEXEBUFCB_LOCKEXEBUF) (LPDDHAL_LOCKDATA); typedef DWORD (PASCAL *LPDDHALEXEBUFCB_UNLOCKEXEBUF) (LPDDHAL_UNLOCKDATA); typedef struct _DDHAL_DDEXEBUFCALLBACKS { DWORD dwSize; DWORD dwFlags; LPDDHALEXEBUFCB_CANCREATEEXEBUF CanCreateExecuteBuffer; LPDDHALEXEBUFCB_CREATEEXEBUF CreateExecuteBuffer; LPDDHALEXEBUFCB_DESTROYEXEBUF DestroyExecuteBuffer; LPDDHALEXEBUFCB_LOCKEXEBUF LockExecuteBuffer; LPDDHALEXEBUFCB_UNLOCKEXEBUF UnlockExecuteBuffer; } DDHAL_DDEXEBUFCALLBACKS,*LPDDHAL_DDEXEBUFCALLBACKS; typedef struct _DDHAL_GETAVAILDRIVERMEMORYDATA *LPDDHAL_GETAVAILDRIVERMEMORYDATA; typedef struct _DDHAL_UPDATENONLOCALHEAPDATA *LPDDHAL_UPDATENONLOCALHEAPDATA; typedef struct _DDHAL_GETHEAPALIGNMENTDATA *LPDDHAL_GETHEAPALIGNMENTDATA; typedef DWORD (PASCAL *LPDDHAL_GETAVAILDRIVERMEMORY)(LPDDHAL_GETAVAILDRIVERMEMORYDATA); typedef DWORD (PASCAL *LPDDHAL_UPDATENONLOCALHEAP) (LPDDHAL_UPDATENONLOCALHEAPDATA); typedef DWORD (PASCAL *LPDDHAL_GETHEAPALIGNMENT) (LPDDHAL_GETHEAPALIGNMENTDATA); typedef struct _DDHAL_DDMISCELLANEOUSCALLBACKS { DWORD dwSize; DWORD dwFlags; LPDDHAL_GETAVAILDRIVERMEMORY GetAvailDriverMemory; LPDDHAL_UPDATENONLOCALHEAP UpdateNonLocalHeap; LPDDHAL_GETHEAPALIGNMENT GetHeapAlignment; LPDDHALSURFCB_GETBLTSTATUS GetSysmemBltStatus; } DDHAL_DDMISCELLANEOUSCALLBACKS,*LPDDHAL_DDMISCELLANEOUSCALLBACKS; typedef struct _DDHAL_CREATESURFACEEXDATA *LPDDHAL_CREATESURFACEEXDATA; typedef struct _DDHAL_GETDRIVERSTATEDATA *LPDDHAL_GETDRIVERSTATEDATA; typedef struct _DDHAL_DESTROYDDLOCALDATA *LPDDHAL_DESTROYDDLOCALDATA; typedef DWORD (PASCAL *LPDDHAL_CREATESURFACEEX)(LPDDHAL_CREATESURFACEEXDATA); typedef DWORD (PASCAL *LPDDHAL_GETDRIVERSTATE) (LPDDHAL_GETDRIVERSTATEDATA); typedef DWORD (PASCAL *LPDDHAL_DESTROYDDLOCAL) (LPDDHAL_DESTROYDDLOCALDATA); typedef struct _DDHAL_DDMISCELLANEOUS2CALLBACKS { DWORD dwSize; DWORD dwFlags; LPVOID Reserved; LPDDHAL_CREATESURFACEEX CreateSurfaceEx; LPDDHAL_GETDRIVERSTATE GetDriverState; LPDDHAL_DESTROYDDLOCAL DestroyDDLocal; } DDHAL_DDMISCELLANEOUS2CALLBACKS,*LPDDHAL_DDMISCELLANEOUS2CALLBACKS; typedef HRESULT (WINAPI *LPDDGAMMACALIBRATORPROC)(LPDDGAMMARAMP, LPBYTE); /***************************************************************************** * driver info structure * * The HAL is queried for additional callbacks via the GetDriverInfo callback. */ typedef struct _DDHAL_GETDRIVERINFODATA *LPDDHAL_GETDRIVERINFODATA; typedef DWORD (PASCAL *LPDDHAL_GETDRIVERINFO)(LPDDHAL_GETDRIVERINFODATA); typedef struct _DDHALINFO { DWORD dwSize; LPDDHAL_DDCALLBACKS lpDDCallbacks; LPDDHAL_DDSURFACECALLBACKS lpDDSurfaceCallbacks; LPDDHAL_DDPALETTECALLBACKS lpDDPaletteCallbacks; VIDMEMINFO vmiData; DDCORECAPS ddCaps; DWORD dwMonitorFrequency; LPDDHAL_GETDRIVERINFO GetDriverInfo; DWORD dwModeIndex; LPDWORD lpdwFourCC; DWORD dwNumModes; LPDDHALMODEINFO lpModeInfo; DWORD dwFlags; LPVOID lpPDevice; DWORD hInstance; /* DirectX 2 */ ULONG_PTR lpD3DGlobalDriverData; ULONG_PTR lpD3DHALCallbacks; LPDDHAL_DDEXEBUFCALLBACKS lpDDExeBufCallbacks; } DDHALINFO; #define DDHALINFO_ISPRIMARYDISPLAY 0x00000001 #define DDHALINFO_MODEXILLEGAL 0x00000002 #define DDHALINFO_GETDRIVERINFOSET 0x00000004 /* where the high-level ddraw implementation stores the callbacks */ typedef struct _DDHAL_CALLBACKS { DDHAL_DDCALLBACKS cbDDCallbacks; DDHAL_DDSURFACECALLBACKS cbDDSurfaceCallbacks; DDHAL_DDPALETTECALLBACKS cbDDPaletteCallbacks; DDHAL_DDCALLBACKS HALDD; DDHAL_DDSURFACECALLBACKS HALDDSurface; DDHAL_DDPALETTECALLBACKS HALDDPalette; DDHAL_DDCALLBACKS HELDD; DDHAL_DDSURFACECALLBACKS HELDDSurface; DDHAL_DDPALETTECALLBACKS HELDDPalette; DDHAL_DDEXEBUFCALLBACKS cbDDExeBufCallbacks; DDHAL_DDEXEBUFCALLBACKS HALDDExeBuf; DDHAL_DDEXEBUFCALLBACKS HELDDExeBuf; /* there's more... videoport, colorcontrol, misc, and motion compensation callbacks... */ } DDHAL_CALLBACKS,*LPDDHAL_CALLBACKS; /***************************************************************************** * parameter structures */ typedef struct _DDHAL_DESTROYDRIVERDATA { LPDDRAWI_DIRECTDRAW_GBL lpDD; HRESULT ddRVal; LPDDHAL_DESTROYDRIVER DestroyDriver; } DDHAL_DESTROYDRIVERDATA; typedef struct _DDHAL_SETMODEDATA { LPDDRAWI_DIRECTDRAW_GBL lpDD; DWORD dwModeIndex; HRESULT ddRVal; LPDDHAL_SETMODE SetMode; BOOL inexcl; BOOL useRefreshRate; } DDHAL_SETMODEDATA; typedef struct _DDHAL_CREATESURFACEDATA { LPDDRAWI_DIRECTDRAW_GBL lpDD; LPDDSURFACEDESC lpDDSurfaceDesc; LPDDRAWI_DDRAWSURFACE_LCL * lplpSList; DWORD dwSCnt; HRESULT ddRVal; LPDDHAL_CREATESURFACE CreateSurface; } DDHAL_CREATESURFACEDATA; typedef struct _DDHAL_CANCREATESURFACEDATA { LPDDRAWI_DIRECTDRAW_GBL lpDD; LPDDSURFACEDESC lpDDSurfaceDesc; DWORD bIsDifferentPixelFormat; HRESULT ddRVal; LPDDHAL_CANCREATESURFACE CanCreateSurface; } DDHAL_CANCREATESURFACEDATA; typedef struct _DDHAL_CREATEPALETTEDATA { LPDDRAWI_DIRECTDRAW_GBL lpDD; LPDDRAWI_DDRAWPALETTE_GBL lpDDPalette; LPPALETTEENTRY lpColorTable; HRESULT ddRVal; LPDDHAL_CREATEPALETTE CreatePalette; BOOL is_excl; } DDHAL_CREATEPALETTEDATA; typedef struct _DDHAL_SETEXCLUSIVEMODEDATA { LPDDRAWI_DIRECTDRAW_GBL lpDD; DWORD dwEnterExcl; DWORD dwReserved; HRESULT ddRVal; LPDDHAL_SETEXCLUSIVEMODE SetExclusiveMode; } DDHAL_SETEXCLUSIVEMODEDATA; /* surfaces */ typedef struct _DDHAL_DESTROYSURFACEDATA { LPDDRAWI_DIRECTDRAW_GBL lpDD; LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface; HRESULT ddRVal; LPDDHALSURFCB_DESTROYSURFACE DestroySurface; } DDHAL_DESTROYSURFACEDATA; typedef struct _DDHAL_FLIPDATA { LPDDRAWI_DIRECTDRAW_GBL lpDD; LPDDRAWI_DDRAWSURFACE_LCL lpSurfCurr; LPDDRAWI_DDRAWSURFACE_LCL lpSurfTarg; DWORD dwFlags; HRESULT ddRVal; LPDDHALSURFCB_FLIP Flip; LPDDRAWI_DDRAWSURFACE_LCL lpSurfCurrLeft; LPDDRAWI_DDRAWSURFACE_LCL lpSurfTargLeft; } DDHAL_FLIPDATA; typedef struct _DDHAL_LOCKDATA { LPDDRAWI_DIRECTDRAW_GBL lpDD; LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface; DWORD bHasRect; RECTL rArea; LPVOID lpSurfData; HRESULT ddRVal; LPDDHALSURFCB_LOCK Lock; DWORD dwFlags; } DDHAL_LOCKDATA; typedef struct _DDHAL_UNLOCKDATA { LPDDRAWI_DIRECTDRAW_GBL lpDD; LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface; HRESULT ddRVal; LPDDHALSURFCB_UNLOCK Unlock; } DDHAL_UNLOCKDATA; typedef struct _DDHAL_BLTDATA { LPDDRAWI_DIRECTDRAW_GBL lpDD; LPDDRAWI_DDRAWSURFACE_LCL lpDDDestSurface; RECTL rDest; LPDDRAWI_DDRAWSURFACE_LCL lpDDSrcSurface; RECTL rSrc; DWORD dwFlags; DWORD dwROPFlags; DDBLTFX bltFX; HRESULT ddRVal; LPDDHALSURFCB_BLT Blt; BOOL IsClipped; RECTL rOrigDest; RECTL rOrigSrc; DWORD dwRectCnt; LPRECT prDestRects; } DDHAL_BLTDATA; typedef struct _DDHAL_UPDATEOVERLAYDATA { LPDDRAWI_DIRECTDRAW_GBL lpDD; LPDDRAWI_DDRAWSURFACE_LCL lpDDDestSurface; RECTL rDest; LPDDRAWI_DDRAWSURFACE_LCL lpDDSrcSurface; RECTL rSrc; DWORD dwFlags; DDOVERLAYFX overlayFX; HRESULT ddRVal; LPDDHALSURFCB_UPDATEOVERLAY UpdateOverlay; } DDHAL_UPDATEOVERLAYDATA; typedef struct _DDHAL_SETPALETTEDATA { LPDDRAWI_DIRECTDRAW_GBL lpDD; LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface; LPDDRAWI_DDRAWPALETTE_GBL lpDDPalette; HRESULT ddRVal; LPDDHALSURFCB_SETPALETTE SetPalette; BOOL Attach; } DDHAL_SETPALETTEDATA; /* palettes */ typedef struct _DDHAL_DESTROYPALETTEDATA { LPDDRAWI_DIRECTDRAW_GBL lpDD; LPDDRAWI_DDRAWPALETTE_GBL lpDDPalette; HRESULT ddRVal; LPDDHALPALCB_DESTROYPALETTE DestroyPalette; } DDHAL_DESTROYPALETTEDATA; typedef struct _DDHAL_SETENTRIESDATA { LPDDRAWI_DIRECTDRAW_GBL lpDD; LPDDRAWI_DDRAWPALETTE_GBL lpDDPalette; DWORD dwBase; DWORD dwNumEntries; LPPALETTEENTRY lpEntries; HRESULT ddRVal; LPDDHALPALCB_SETENTRIES SetEntries; } DDHAL_SETENTRIESDATA; typedef struct _DDHAL_GETDRIVERINFODATA { DWORD dwSize; DWORD dwFlags; GUID guidInfo; DWORD dwExpectedSize; LPVOID lpvData; DWORD dwActualSize; HRESULT ddRVal; ULONG_PTR dwContext; } DDHAL_GETDRIVERINFODATA; /***************************************************************************** * high-level ddraw implementation structures */ typedef struct _IUNKNOWN_LIST { struct _IUNKNOWN_LIST * lpLink; LPGUID lpGuid; IUnknown * lpIUnknown; } IUNKNOWN_LIST,*LPIUNKNOWN_LIST; typedef struct _PROCESS_LIST { struct _PROCESS_LIST * lpLink; DWORD dwProcessId; DWORD dwRefCnt; DWORD dwAlphaDepth; DWORD dwZDepth; } PROCESS_LIST,*LPPROCESS_LIST; typedef struct _ATTACHLIST { DWORD dwFlags; struct _ATTACHLIST * lpLink; LPDDRAWI_DDRAWSURFACE_LCL lpAttached; LPDDRAWI_DDRAWSURFACE_INT lpIAttached; } ATTACHLIST,*LPATTACHLIST; #define DDAL_IMPLICIT 0x00000001 typedef struct _ACCESSRECTLIST { struct _ACCESSRECTLIST * lpLink; RECT rDest; LPDDRAWI_DIRECTDRAW_LCL lpOwner; LPVOID lpSurfaceData; DWORD dwFlags; LPHEAPALIASINFO lpHeapAliasInfo; } ACCESSRECTLIST,*LPACCESSRECTLIST; #define ACCESSRECT_VRAMSTYLE 0x00000001 #define ACCESSRECT_NOTHOLDINGWIN16LOCK 0x00000002 #define ACCESSRECT_BROKEN 0x00000004 typedef struct _DBLNODE { struct _DBLNODE * next; struct _DBLNODE * prev; LPDDRAWI_DDRAWSURFACE_LCL object; LPDDRAWI_DDRAWSURFACE_INT object_int; } DBLNODE,*LPDBLNODE; typedef struct _DDRAWI_DIRECTDRAW_INT { LPVOID lpVtbl; LPDDRAWI_DIRECTDRAW_LCL lpLcl; LPDDRAWI_DIRECTDRAW_INT lpLink; DWORD dwIntRefCnt; } DDRAWI_DIRECTDRAW_INT; typedef struct _DDRAWI_DIRECTDRAW_LCL { DWORD lpDDMore; LPDDRAWI_DIRECTDRAW_GBL lpGbl; DWORD dwUnused0; DWORD dwLocalFlags; DWORD dwLocalRefCnt; DWORD dwProcessId; IUnknown * pUnkOuter; DWORD dwObsolete1; ULONG_PTR hWnd; ULONG_PTR hDC; DWORD dwErrorMode; LPDDRAWI_DDRAWSURFACE_INT lpPrimary; LPDDRAWI_DDRAWSURFACE_INT lpCB; DWORD dwPreferredMode; /* DirectX 2 */ HINSTANCE hD3DInstance; IUnknown * pD3DIUnknown; LPDDHAL_CALLBACKS lpDDCB; ULONG_PTR hDDVxd; /* DirectX 5.0 */ DWORD dwAppHackFlags; /* DirectX 5.0A */ ULONG_PTR hFocusWnd; DWORD dwHotTracking; DWORD dwIMEState; /* DirectX 6.0 */ ULONG_PTR hWndPopup; ULONG_PTR hDD; ULONG_PTR hGammaCalibrator; LPDDGAMMACALIBRATORPROC lpGammaCalibrator; } DDRAWI_DIRECTDRAW_LCL; #define DDRAWILCL_HASEXCLUSIVEMODE 0x00000001 #define DDRAWILCL_ISFULLSCREEN 0x00000002 #define DDRAWILCL_SETCOOPCALLED 0x00000004 #define DDRAWILCL_ACTIVEYES 0x00000008 #define DDRAWILCL_ACTIVENO 0x00000010 #define DDRAWILCL_HOOKEDHWND 0x00000020 #define DDRAWILCL_ALLOWMODEX 0x00000040 #define DDRAWILCL_V1SCLBEHAVIOUR 0x00000080 #define DDRAWILCL_MODEHASBEENCHANGED 0x00000100 #define DDRAWILCL_CREATEDWINDOW 0x00000200 #define DDRAWILCL_DIRTYDC 0x00000400 #define DDRAWILCL_DISABLEINACTIVATE 0x00000800 #define DDRAWILCL_CURSORCLIPPED 0x00001000 #define DDRAWILCL_EXPLICITMONITOR 0x00002000 #define DDRAWILCL_MULTITHREADED 0x00004000 #define DDRAWILCL_FPUSETUP 0x00008000 #define DDRAWILCL_POWEREDDOWN 0x00010000 #define DDRAWILCL_DIRECTDRAW7 0x00020000 #define DDRAWILCL_ATTEMPTEDD3DCONTEXT 0x00040000 #define DDRAWILCL_FPUPRESERVE 0x00080000 typedef struct _DDRAWI_DIRECTDRAW_GBL { DWORD dwRefCnt; DWORD dwFlags; FLATPTR fpPrimaryOrig; DDCORECAPS ddCaps; DWORD dwInternal1; DWORD dwUnused1[9]; LPDDHAL_CALLBACKS lpDDCBtmp; LPDDRAWI_DDRAWSURFACE_INT dsList; LPDDRAWI_DDRAWPALETTE_INT palList; LPDDRAWI_DDRAWCLIPPER_INT clipperList; LPDDRAWI_DIRECTDRAW_GBL lp16DD; DWORD dwMaxOverlays; DWORD dwCurrOverlays; DWORD dwMonitorFrequency; DDCORECAPS ddHELCaps; DWORD dwUnused2[50]; DDCOLORKEY ddckCKDestOverlay; DDCOLORKEY ddckCKSrcOverlay; VIDMEMINFO vmiData; LPVOID lpDriverHandle; LPDDRAWI_DIRECTDRAW_LCL lpExclusiveOwner; DWORD dwModeIndex; DWORD dwModeIndexOrig; DWORD dwNumFourCC; LPDWORD lpdwFourCC; DWORD dwNumModes; LPDDHALMODEINFO lpModeInfo; PROCESS_LIST plProcessList; DWORD dwSurfaceLockCount; DWORD dwAliasedLockCnt; ULONG_PTR dwReserved3; ULONG_PTR hDD; char cObsolete[12]; DWORD dwReserved1; DWORD dwReserved2; DBLNODE dbnOverlayRoot; volatile LPWORD lpwPDeviceFlags; DWORD dwPDevice; DWORD dwWin16LockCnt; DWORD dwUnused3; DWORD hInstance; DWORD dwEvent16; DWORD dwSaveNumModes; /* DirectX 2 */ ULONG_PTR lpD3DGlobalDriverData; ULONG_PTR lpD3DHALCallbacks; DDCORECAPS ddBothCaps; /* DirectX 5.0 */ LPDDVIDEOPORTCAPS lpDDVideoPortCaps; LPDDRAWI_DDVIDEOPORT_INT dvpList; ULONG_PTR lpD3DHALCallbacks2; RECT rectDevice; DWORD cMonitors; LPVOID gpbmiSrc; LPVOID gpbmiDest; LPHEAPALIASINFO phaiHeapAliases; ULONG_PTR hKernelHandle; ULONG_PTR pfnNotifyProc; LPDDKERNELCAPS lpDDKernelCaps; LPDDNONLOCALVIDMEMCAPS lpddNLVCaps; LPDDNONLOCALVIDMEMCAPS lpddNLVHELCaps; LPDDNONLOCALVIDMEMCAPS lpddNLVBothCaps; ULONG_PTR lpD3DExtendedCaps; /* DirectX 5.0A */ DWORD dwDOSBoxEvent; RECT rectDesktop; char cDriverName[MAX_DRIVER_NAME]; /* DirectX 6.0 */ ULONG_PTR lpD3DHALCallbacks3; DWORD dwNumZPixelFormats; LPDDPIXELFORMAT lpZPixelFormats; LPDDRAWI_DDMOTIONCOMP_INT mcList; DWORD hDDVxd; DDSCAPSEX ddsCapsMore; } DDRAWI_DIRECTDRAW_GBL; #define DDRAWI_VIRTUALDESKTOP 0x00000008 #define DDRAWI_MODEX 0x00000010 #define DDRAWI_DISPLAYDRV 0x00000020 #define DDRAWI_FULLSCREEN 0x00000040 #define DDRAWI_MODECHANGED 0x00000080 #define DDRAWI_NOHARDWARE 0x00000100 #define DDRAWI_PALETTEINIT 0x00000200 #define DDRAWI_NOEMULATION 0x00000400 /* more... */ /* surfaces */ typedef struct _DDRAWI_DDRAWSURFACE_INT { LPVOID lpVtbl; LPDDRAWI_DDRAWSURFACE_LCL lpLcl; LPDDRAWI_DDRAWSURFACE_INT lpLink; DWORD dwIntRefCnt; } DDRAWI_DDRAWSURFACE_INT; typedef struct _DDRAWI_DDRAWSURFACE_GBL { DWORD dwRefCnt; DWORD dwGlobalFlags; union { LPACCESSRECTLIST lpRectList; DWORD dwBlockSizeY; } DUMMYUNIONNAME1; union { LPVMEMHEAP lpVidMemHeap; DWORD dwBlockSizeX; } DUMMYUNIONNAME2; union { LPDDRAWI_DIRECTDRAW_GBL lpDD; LPVOID lpDDHandle; } DUMMYUNIONNAME3; FLATPTR fpVidMem; union { LONG lPitch; DWORD dwLinearSize; } DUMMYUNIONNAME4; WORD wHeight; WORD wWidth; DWORD dwUsageCount; ULONG_PTR dwReserved1; /* for display driver use */ /* optional (defaults to primary surface pixelformat) */ DDPIXELFORMAT ddpfSurface; } DDRAWI_DDRAWSURFACE_GBL; #define DDRAWISURFGBL_MEMFREE 0x00000001 #define DDRAWISURFGBL_SYSMEMREQUESTED 0x00000002 #define DDRAWISURFGBL_ISGDISURFACE 0x00000004 #define DDRAWISURFGBL_SOFTWAREAUTOFLIP 0x00000008 #define DDRAWISURFGBL_LOCKNOTHOLDINGWIN16LOCK 0x00000010 #define DDRAWISURFGBL_LOCKVRAMSTYLE 0x00000020 #define DDRAWISURFGBL_LOCKBROKEN 0x00000040 #define DDRAWISURFGBL_IMPLICITHANDLE 0x00000080 #define DDRAWISURFGBL_ISCLIENTMEM 0x00000100 #define DDRAWISURFGBL_HARDWAREOPSOURCE 0x00000200 #define DDRAWISURFGBL_HARDWAREOPDEST 0x00000400 #define DDRAWISURFGBL_HARDWAREOPSTARTED 0x00000600 #define DDRAWISURFGBL_VPORTINTERLEAVED 0x00000800 #define DDRAWISURFGBL_VPORTDATA 0x00001000 #define DDRAWISURFGBL_LATEALLOCATELINEAR 0x00002000 #define DDRAWISURFGBL_SYSMEMEXECUTEBUFFER 0x00004000 #define DDRAWISURFGBL_FASTLOCKHELD 0x00008000 #define DDRAWISURFGBL_READONLYLOCKHELD 0x00010000 typedef struct _DDRAWI_DDRAWSURFACE_GBL_MORE { DWORD dwSize; union { DWORD dwPhysicalPageTable; FLATPTR fpPhysicalVidMem; } DUMMYUNIONNAME1; LPDWORD pPageTable; DWORD cPages; ULONG_PTR dwSavedDCContext; FLATPTR fpAliasedVidMem; ULONG_PTR dwDriverReserved; ULONG_PTR dwHELReserved; DWORD cPageUnlocks; ULONG_PTR hKernelSurface; DWORD dwKernelRefCnt; LPDDCOLORCONTROL lpColorInfo; FLATPTR fpNTAlias; DWORD dwContentsStamp; LPVOID lpvUnswappedDriverReserved; LPVOID lpDDRAWReserved2; DWORD dwDDRAWReserved1; DWORD dwDDRAWReserved2; FLATPTR fpAliasOfVidMem; } DDRAWI_DDRAWSURFACE_GBL_MORE; /* the MS version of this macro was somewhat obfuscated and unreadable * (possibly because of mediocre MS coders)... so I simplified it... * (and so I commit no copyright violations either, hah) */ #define GET_LPDDRAWSURFACE_GBL_MORE(psurf_gbl) \ (*(((LPDDRAWI_DDRAWSURFACE_GBL_MORE *)(psurf_gbl)) - 1)) typedef struct _DDRAWI_DDRAWSURFACE_MORE { DWORD dwSize; IUNKNOWN_LIST * lpIUnknowns; LPDDRAWI_DIRECTDRAW_LCL lpDD_lcl; DWORD dwPageLockCount; DWORD dwBytesAllocated; LPDDRAWI_DIRECTDRAW_INT lpDD_int; DWORD dwMipMapCount; LPDDRAWI_DDRAWCLIPPER_INT lpDDIClipper; /* DirectX 5.0 */ LPHEAPALIASINFO lpHeapAliasInfo; DWORD dwOverlayFlags; VOID *rgjunc; LPDDRAWI_DDVIDEOPORT_LCL lpVideoPort; LPDDOVERLAYFX lpddOverlayFX; DDSCAPSEX ddsCapsEx; DWORD dwTextureStage; LPVOID lpDDRAWReserved; LPVOID lpDDRAWReserved2; LPVOID lpDDrawReserved3; DWORD dwDDrawReserved4; LPVOID lpDDrawReserved5; LPDWORD lpGammaRamp; LPDWORD lpOriginalGammaRamp; LPVOID lpDDrawReserved6; DWORD dwSurfaceHandle; DWORD qwDDrawReserved8[2]; LPVOID lpDDrawReserved9; DWORD cSurfaces; LPDDSURFACEDESC2 pCreatedDDSurfaceDesc2; LPDDRAWI_DDRAWSURFACE_LCL *slist; DWORD dwFVF; LPVOID lpVB; } DDRAWI_DDRAWSURFACE_MORE; typedef struct _DDRAWI_DDRAWSURFACE_LCL { LPDDRAWI_DDRAWSURFACE_MORE lpSurfMore; LPDDRAWI_DDRAWSURFACE_GBL lpGbl; ULONG_PTR hDDSurface; LPATTACHLIST lpAttachList; LPATTACHLIST lpAttachListFrom; DWORD dwLocalRefCnt; DWORD dwProcessId; DWORD dwFlags; DDSCAPS ddsCaps; LPDDRAWI_DDRAWPALETTE_INT lpDDPalette; LPDDRAWI_DDRAWCLIPPER_LCL lpDDClipper; DWORD dwModeCreatedIn; DWORD dwBackBufferCount; DDCOLORKEY ddckCKDestBlt; DDCOLORKEY ddckCKSrcBlt; ULONG_PTR hDC; ULONG_PTR dwReserved1; /* for display driver use */ /* overlays only */ DDCOLORKEY ddckCKSrcOverlay; DDCOLORKEY ddckCKDestOverlay; LPDDRAWI_DDRAWSURFACE_INT lpSurfaceOverlaying; DBLNODE dbnOverlayNode; RECT rcOverlaySrc; RECT rcOverlayDest; DWORD dwClrXparent; DWORD dwAlpha; LONG lOverlayX; LONG lOverlayY; } DDRAWI_DDRAWSURFACE_LCL; #define DDRAWISURF_ATTACHED 0x00000001 #define DDRAWISURF_IMPLICITCREATE 0x00000002 #define DDRAWISURF_ISFREE 0x00000004 #define DDRAWISURF_ATTACHED_FROM 0x00000008 #define DDRAWISURF_IMPLICITROOT 0x00000010 #define DDRAWISURF_PARTOFPRIMARYCHAIN 0x00000020 #define DDRAWISURF_DATAISALIASED 0x00000040 #define DDRAWISURF_HASDC 0x00000080 #define DDRAWISURF_HASCKEYDESTOVERLAY 0x00000100 #define DDRAWISURF_HASCKEYDESTBLT 0x00000200 #define DDRAWISURF_HASCKEYSRCOVERLAY 0x00000400 #define DDRAWISURF_HASCKEYSRCBLT 0x00000800 #define DDRAWISURF_LOCKEXCLUDEDCURSOR 0x00001000 #define DDRAWISURF_HASPIXELFORMAT 0x00002000 #define DDRAWISURF_HASOVERLAYDATA 0x00004000 #define DDRAWISURF_SETGAMMA 0x00008000 /* more... */ #define DDRAWISURF_INVALID 0x10000000 /* palettes */ typedef struct _DDRAWI_DDRAWPALETTE_INT { LPVOID lpVtbl; LPDDRAWI_DDRAWPALETTE_LCL lpLcl; LPDDRAWI_DDRAWPALETTE_INT lpLink; DWORD dwIntRefCnt; } DDRAWI_DDRAWPALETTE_INT; typedef struct _DDRAWI_DDRAWPALETTE_GBL { DWORD dwRefCnt; DWORD dwFlags; LPDDRAWI_DIRECTDRAW_LCL lpDD_lcl; DWORD dwProcessId; LPPALETTEENTRY lpColorTable; union { ULONG_PTR dwReserved1; /* for display driver use */ HPALETTE hHELGDIPalette; } DUMMYUNIONNAME1; /* DirectX 5.0 */ DWORD dwDriverReserved; DWORD dwContentsStamp; /* DirectX 6.0 */ DWORD dwSaveStamp; /* DirectX 7.0 */ DWORD dwHandle; } DDRAWI_DDRAWPALETTE_GBL; #define DDRAWIPAL_256 0x00000001 #define DDRAWIPAL_16 0x00000002 #define DDRAWIPAL_GDI 0x00000004 #define DDRAWIPAL_STORED_8 0x00000008 #define DDRAWIPAL_STORED_16 0x00000010 #define DDRAWIPAL_STORED_24 0x00000020 #define DDRAWIPAL_EXCLUSIVE 0x00000040 #define DDRAWIPAL_INHEL 0x00000080 #define DDRAWIPAL_DIRTY 0x00000100 #define DDRAWIPAL_ALLOW256 0x00000200 #define DDRAWIPAL_4 0x00000400 #define DDRAWIPAL_2 0x00000800 #define DDRAWIPAL_STORED_8INDEX 0x00001000 #define DDRAWIPAL_ALPHA 0x00002000 typedef struct _DDRAWI_DDRAWPALETTE_LCL { DWORD lpPalMore; LPDDRAWI_DDRAWPALETTE_GBL lpGbl; ULONG_PTR dwUnused0; DWORD dwLocalRefCnt; IUnknown * pUnkOuter; LPDDRAWI_DIRECTDRAW_LCL lpDD_lcl; ULONG_PTR dwReserved1; /* DirectX 6.0 */ ULONG_PTR dwDDRAWReserved1; ULONG_PTR dwDDRAWReserved2; ULONG_PTR dwDDRAWReserved3; } DDRAWI_DDRAWPALETTE_LCL; #ifdef __cplusplus } /* extern "C" */ #endif #endif /* __WINE_DDRAWI_H */ ================================================ FILE: Include/dds.h ================================================ //-------------------------------------------------------------------------------------- // dds.h // // This header defines constants and structures that are useful when parsing // DDS files. DDS files were originally designed to use several structures // and constants that are native to DirectDraw and are defined in ddraw.h, // such as DDSURFACEDESC2 and DDSCAPS2. This file defines similar // (compatible) constants and structures so that one can use DDS files // without needing to include ddraw.h. // // THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF // ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO // THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A // PARTICULAR PURPOSE. // // Copyright (c) Microsoft Corporation. All rights reserved. // // http://go.microsoft.com/fwlink/?LinkId=248926 //-------------------------------------------------------------------------------------- #pragma once #if defined(_XBOX_ONE) && defined(_TITLE) #include #else #include #endif // VS 2010's stdint.h conflicts with intsafe.h #pragma warning(push) #pragma warning(disable : 4005) #include #pragma warning(pop) namespace DirectX { #pragma pack(push,1) const uint32_t DDS_MAGIC = 0x20534444; // "DDS " struct DDS_PIXELFORMAT { uint32_t dwSize; uint32_t dwFlags; uint32_t dwFourCC; uint32_t dwRGBBitCount; uint32_t dwRBitMask; uint32_t dwGBitMask; uint32_t dwBBitMask; uint32_t dwABitMask; }; #define DDS_FOURCC 0x00000004 // DDPF_FOURCC #define DDS_RGB 0x00000040 // DDPF_RGB #define DDS_RGBA 0x00000041 // DDPF_RGB | DDPF_ALPHAPIXELS #define DDS_LUMINANCE 0x00020000 // DDPF_LUMINANCE #define DDS_LUMINANCEA 0x00020001 // DDPF_LUMINANCE | DDPF_ALPHAPIXELS #define DDS_ALPHA 0x00000002 // DDPF_ALPHA #define DDS_PAL8 0x00000020 // DDPF_PALETTEINDEXED8 #ifndef MAKEFOURCC #define MAKEFOURCC(ch0, ch1, ch2, ch3) \ ((uint32_t)(uint8_t)(ch0) | ((uint32_t)(uint8_t)(ch1) << 8) | \ ((uint32_t)(uint8_t)(ch2) << 16) | ((uint32_t)(uint8_t)(ch3) << 24 )) #endif /* defined(MAKEFOURCC) */ extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_DXT1 = { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D','X','T','1'), 0, 0, 0, 0, 0 }; extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_DXT2 = { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D','X','T','2'), 0, 0, 0, 0, 0 }; extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_DXT3 = { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D','X','T','3'), 0, 0, 0, 0, 0 }; extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_DXT4 = { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D','X','T','4'), 0, 0, 0, 0, 0 }; extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_DXT5 = { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D','X','T','5'), 0, 0, 0, 0, 0 }; extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_BC4_UNORM = { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('B','C','4','U'), 0, 0, 0, 0, 0 }; extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_BC4_SNORM = { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('B','C','4','S'), 0, 0, 0, 0, 0 }; extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_BC5_UNORM = { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('B','C','5','U'), 0, 0, 0, 0, 0 }; extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_BC5_SNORM = { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('B','C','5','S'), 0, 0, 0, 0, 0 }; extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_R8G8_B8G8 = { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('R','G','B','G'), 0, 0, 0, 0, 0 }; extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_G8R8_G8B8 = { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('G','R','G','B'), 0, 0, 0, 0, 0 }; extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_YUY2 = { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('Y','U','Y','2'), 0, 0, 0, 0, 0 }; extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_A8R8G8B8 = { sizeof(DDS_PIXELFORMAT), DDS_RGBA, 0, 32, 0x00ff0000, 0x0000ff00, 0x000000ff, 0xff000000 }; extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_X8R8G8B8 = { sizeof(DDS_PIXELFORMAT), DDS_RGB, 0, 32, 0x00ff0000, 0x0000ff00, 0x000000ff, 0x00000000 }; extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_A8B8G8R8 = { sizeof(DDS_PIXELFORMAT), DDS_RGBA, 0, 32, 0x000000ff, 0x0000ff00, 0x00ff0000, 0xff000000 }; extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_X8B8G8R8 = { sizeof(DDS_PIXELFORMAT), DDS_RGB, 0, 32, 0x000000ff, 0x0000ff00, 0x00ff0000, 0x00000000 }; extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_G16R16 = { sizeof(DDS_PIXELFORMAT), DDS_RGB, 0, 32, 0x0000ffff, 0xffff0000, 0x00000000, 0x00000000 }; extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_R5G6B5 = { sizeof(DDS_PIXELFORMAT), DDS_RGB, 0, 16, 0x0000f800, 0x000007e0, 0x0000001f, 0x00000000 }; extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_A1R5G5B5 = { sizeof(DDS_PIXELFORMAT), DDS_RGBA, 0, 16, 0x00007c00, 0x000003e0, 0x0000001f, 0x00008000 }; extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_A4R4G4B4 = { sizeof(DDS_PIXELFORMAT), DDS_RGBA, 0, 16, 0x00000f00, 0x000000f0, 0x0000000f, 0x0000f000 }; extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_R8G8B8 = { sizeof(DDS_PIXELFORMAT), DDS_RGB, 0, 24, 0x00ff0000, 0x0000ff00, 0x000000ff, 0x00000000 }; extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_L8 = { sizeof(DDS_PIXELFORMAT), DDS_LUMINANCE, 0, 8, 0xff, 0x00, 0x00, 0x00 }; extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_L16 = { sizeof(DDS_PIXELFORMAT), DDS_LUMINANCE, 0, 16, 0xffff, 0x0000, 0x0000, 0x0000 }; extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_A8L8 = { sizeof(DDS_PIXELFORMAT), DDS_LUMINANCEA, 0, 16, 0x00ff, 0x0000, 0x0000, 0xff00 }; extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_A8 = { sizeof(DDS_PIXELFORMAT), DDS_ALPHA, 0, 8, 0x00, 0x00, 0x00, 0xff }; // D3DFMT_A2R10G10B10/D3DFMT_A2B10G10R10 should be written using DX10 extension to avoid D3DX 10:10:10:2 reversal issue // This indicates the DDS_HEADER_DXT10 extension is present (the format is in dxgiFormat) extern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_DX10 = { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D','X','1','0'), 0, 0, 0, 0, 0 }; #define DDS_HEADER_FLAGS_TEXTURE 0x00001007 // DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH | DDSD_PIXELFORMAT #define DDS_HEADER_FLAGS_MIPMAP 0x00020000 // DDSD_MIPMAPCOUNT #define DDS_HEADER_FLAGS_VOLUME 0x00800000 // DDSD_DEPTH #define DDS_HEADER_FLAGS_PITCH 0x00000008 // DDSD_PITCH #define DDS_HEADER_FLAGS_LINEARSIZE 0x00080000 // DDSD_LINEARSIZE #define DDS_HEIGHT 0x00000002 // DDSD_HEIGHT #define DDS_WIDTH 0x00000004 // DDSD_WIDTH #define DDS_SURFACE_FLAGS_TEXTURE 0x00001000 // DDSCAPS_TEXTURE #define DDS_SURFACE_FLAGS_MIPMAP 0x00400008 // DDSCAPS_COMPLEX | DDSCAPS_MIPMAP #define DDS_SURFACE_FLAGS_CUBEMAP 0x00000008 // DDSCAPS_COMPLEX #define DDS_CUBEMAP_POSITIVEX 0x00000600 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_POSITIVEX #define DDS_CUBEMAP_NEGATIVEX 0x00000a00 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_NEGATIVEX #define DDS_CUBEMAP_POSITIVEY 0x00001200 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_POSITIVEY #define DDS_CUBEMAP_NEGATIVEY 0x00002200 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_NEGATIVEY #define DDS_CUBEMAP_POSITIVEZ 0x00004200 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_POSITIVEZ #define DDS_CUBEMAP_NEGATIVEZ 0x00008200 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_NEGATIVEZ #define DDS_CUBEMAP_ALLFACES ( DDS_CUBEMAP_POSITIVEX | DDS_CUBEMAP_NEGATIVEX |\ DDS_CUBEMAP_POSITIVEY | DDS_CUBEMAP_NEGATIVEY |\ DDS_CUBEMAP_POSITIVEZ | DDS_CUBEMAP_NEGATIVEZ ) #define DDS_CUBEMAP 0x00000200 // DDSCAPS2_CUBEMAP #define DDS_FLAGS_VOLUME 0x00200000 // DDSCAPS2_VOLUME // Subset here matches D3D10_RESOURCE_DIMENSION and D3D11_RESOURCE_DIMENSION enum DDS_RESOURCE_DIMENSION { DDS_DIMENSION_TEXTURE1D = 2, DDS_DIMENSION_TEXTURE2D = 3, DDS_DIMENSION_TEXTURE3D = 4, }; // Subset here matches D3D10_RESOURCE_MISC_FLAG and D3D11_RESOURCE_MISC_FLAG enum DDS_RESOURCE_MISC_FLAG { DDS_RESOURCE_MISC_TEXTURECUBE = 0x4L, }; enum DDS_MISC_FLAGS2 { DDS_MISC_FLAGS2_ALPHA_MODE_MASK = 0x7L, }; enum DDS_ALPHA_MODE { DDS_ALPHA_MODE_UNKNOWN = 0, DDS_ALPHA_MODE_STRAIGHT = 1, DDS_ALPHA_MODE_PREMULTIPLIED = 2, DDS_ALPHA_MODE_OPAQUE = 3, DDS_ALPHA_MODE_CUSTOM = 4, }; struct DDS_HEADER { uint32_t dwSize; uint32_t dwFlags; uint32_t dwHeight; uint32_t dwWidth; uint32_t dwPitchOrLinearSize; uint32_t dwDepth; // only if DDS_HEADER_FLAGS_VOLUME is set in dwFlags uint32_t dwMipMapCount; uint32_t dwReserved1[11]; DDS_PIXELFORMAT ddspf; uint32_t dwCaps; uint32_t dwCaps2; uint32_t dwCaps3; uint32_t dwCaps4; uint32_t dwReserved2; }; struct DDS_HEADER_DXT10 { DXGI_FORMAT dxgiFormat; uint32_t resourceDimension; uint32_t miscFlag; // see DDS_RESOURCE_MISC_FLAG uint32_t arraySize; uint32_t miscFlags2; // see DDS_MISC_FLAGS2 }; #pragma pack(pop) static_assert( sizeof(DDS_HEADER) == 124, "DDS Header size mismatch" ); static_assert( sizeof(DDS_HEADER_DXT10) == 20, "DDS DX10 Extended Header size mismatch"); }; // namespace ================================================ FILE: Include/dinput.h ================================================ /**************************************************************************** * * Copyright (C) 1996-2000 Microsoft Corporation. All Rights Reserved. * * File: dinput.h * Content: DirectInput include file * ****************************************************************************/ #ifndef __DINPUT_INCLUDED__ #define __DINPUT_INCLUDED__ #ifndef DIJ_RINGZERO #ifdef _WIN32 #define COM_NO_WINDOWS_H #include #endif #endif /* DIJ_RINGZERO */ #ifdef __cplusplus extern "C" { #endif /* * To build applications for older versions of DirectInput * * #define DIRECTINPUT_VERSION [ 0x0300 | 0x0500 | 0x0700 ] * * before #include . By default, #include * will produce a DirectX 8-compatible header file. * */ #define DIRECTINPUT_HEADER_VERSION 0x0800 #ifndef DIRECTINPUT_VERSION #define DIRECTINPUT_VERSION DIRECTINPUT_HEADER_VERSION #pragma message(__FILE__ ": DIRECTINPUT_VERSION undefined. Defaulting to version 0x0800") #endif #ifndef DIJ_RINGZERO /**************************************************************************** * * Class IDs * ****************************************************************************/ DEFINE_GUID(CLSID_DirectInput, 0x25E609E0,0xB259,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(CLSID_DirectInputDevice, 0x25E609E1,0xB259,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(CLSID_DirectInput8, 0x25E609E4,0xB259,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(CLSID_DirectInputDevice8,0x25E609E5,0xB259,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); /**************************************************************************** * * Interfaces * ****************************************************************************/ DEFINE_GUID(IID_IDirectInputA, 0x89521360,0xAA8A,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(IID_IDirectInputW, 0x89521361,0xAA8A,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(IID_IDirectInput2A, 0x5944E662,0xAA8A,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(IID_IDirectInput2W, 0x5944E663,0xAA8A,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(IID_IDirectInput7A, 0x9A4CB684,0x236D,0x11D3,0x8E,0x9D,0x00,0xC0,0x4F,0x68,0x44,0xAE); DEFINE_GUID(IID_IDirectInput7W, 0x9A4CB685,0x236D,0x11D3,0x8E,0x9D,0x00,0xC0,0x4F,0x68,0x44,0xAE); DEFINE_GUID(IID_IDirectInput8A, 0xBF798030,0x483A,0x4DA2,0xAA,0x99,0x5D,0x64,0xED,0x36,0x97,0x00); DEFINE_GUID(IID_IDirectInput8W, 0xBF798031,0x483A,0x4DA2,0xAA,0x99,0x5D,0x64,0xED,0x36,0x97,0x00); DEFINE_GUID(IID_IDirectInputDeviceA, 0x5944E680,0xC92E,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(IID_IDirectInputDeviceW, 0x5944E681,0xC92E,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(IID_IDirectInputDevice2A,0x5944E682,0xC92E,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(IID_IDirectInputDevice2W,0x5944E683,0xC92E,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(IID_IDirectInputDevice7A,0x57D7C6BC,0x2356,0x11D3,0x8E,0x9D,0x00,0xC0,0x4F,0x68,0x44,0xAE); DEFINE_GUID(IID_IDirectInputDevice7W,0x57D7C6BD,0x2356,0x11D3,0x8E,0x9D,0x00,0xC0,0x4F,0x68,0x44,0xAE); DEFINE_GUID(IID_IDirectInputDevice8A,0x54D41080,0xDC15,0x4833,0xA4,0x1B,0x74,0x8F,0x73,0xA3,0x81,0x79); DEFINE_GUID(IID_IDirectInputDevice8W,0x54D41081,0xDC15,0x4833,0xA4,0x1B,0x74,0x8F,0x73,0xA3,0x81,0x79); DEFINE_GUID(IID_IDirectInputEffect, 0xE7E1F7C0,0x88D2,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35); /**************************************************************************** * * Predefined object types * ****************************************************************************/ DEFINE_GUID(GUID_XAxis, 0xA36D02E0,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(GUID_YAxis, 0xA36D02E1,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(GUID_ZAxis, 0xA36D02E2,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(GUID_RxAxis, 0xA36D02F4,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(GUID_RyAxis, 0xA36D02F5,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(GUID_RzAxis, 0xA36D02E3,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(GUID_Slider, 0xA36D02E4,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(GUID_Button, 0xA36D02F0,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(GUID_Key, 0x55728220,0xD33C,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(GUID_POV, 0xA36D02F2,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(GUID_Unknown, 0xA36D02F3,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); /**************************************************************************** * * Predefined product GUIDs * ****************************************************************************/ DEFINE_GUID(GUID_SysMouse, 0x6F1D2B60,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(GUID_SysKeyboard,0x6F1D2B61,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(GUID_Joystick ,0x6F1D2B70,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(GUID_SysMouseEm, 0x6F1D2B80,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(GUID_SysMouseEm2,0x6F1D2B81,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(GUID_SysKeyboardEm, 0x6F1D2B82,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(GUID_SysKeyboardEm2,0x6F1D2B83,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); /**************************************************************************** * * Predefined force feedback effects * ****************************************************************************/ DEFINE_GUID(GUID_ConstantForce, 0x13541C20,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35); DEFINE_GUID(GUID_RampForce, 0x13541C21,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35); DEFINE_GUID(GUID_Square, 0x13541C22,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35); DEFINE_GUID(GUID_Sine, 0x13541C23,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35); DEFINE_GUID(GUID_Triangle, 0x13541C24,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35); DEFINE_GUID(GUID_SawtoothUp, 0x13541C25,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35); DEFINE_GUID(GUID_SawtoothDown, 0x13541C26,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35); DEFINE_GUID(GUID_Spring, 0x13541C27,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35); DEFINE_GUID(GUID_Damper, 0x13541C28,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35); DEFINE_GUID(GUID_Inertia, 0x13541C29,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35); DEFINE_GUID(GUID_Friction, 0x13541C2A,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35); DEFINE_GUID(GUID_CustomForce, 0x13541C2B,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35); #endif /* DIJ_RINGZERO */ /**************************************************************************** * * Interfaces and Structures... * ****************************************************************************/ #if(DIRECTINPUT_VERSION >= 0x0500) /**************************************************************************** * * IDirectInputEffect * ****************************************************************************/ #define DIEFT_ALL 0x00000000 #define DIEFT_CONSTANTFORCE 0x00000001 #define DIEFT_RAMPFORCE 0x00000002 #define DIEFT_PERIODIC 0x00000003 #define DIEFT_CONDITION 0x00000004 #define DIEFT_CUSTOMFORCE 0x00000005 #define DIEFT_HARDWARE 0x000000FF #define DIEFT_FFATTACK 0x00000200 #define DIEFT_FFFADE 0x00000400 #define DIEFT_SATURATION 0x00000800 #define DIEFT_POSNEGCOEFFICIENTS 0x00001000 #define DIEFT_POSNEGSATURATION 0x00002000 #define DIEFT_DEADBAND 0x00004000 #define DIEFT_STARTDELAY 0x00008000 #define DIEFT_GETTYPE(n) LOBYTE(n) #define DI_DEGREES 100 #define DI_FFNOMINALMAX 10000 #define DI_SECONDS 1000000 typedef struct DICONSTANTFORCE { LONG lMagnitude; } DICONSTANTFORCE, *LPDICONSTANTFORCE; typedef const DICONSTANTFORCE *LPCDICONSTANTFORCE; typedef struct DIRAMPFORCE { LONG lStart; LONG lEnd; } DIRAMPFORCE, *LPDIRAMPFORCE; typedef const DIRAMPFORCE *LPCDIRAMPFORCE; typedef struct DIPERIODIC { DWORD dwMagnitude; LONG lOffset; DWORD dwPhase; DWORD dwPeriod; } DIPERIODIC, *LPDIPERIODIC; typedef const DIPERIODIC *LPCDIPERIODIC; typedef struct DICONDITION { LONG lOffset; LONG lPositiveCoefficient; LONG lNegativeCoefficient; DWORD dwPositiveSaturation; DWORD dwNegativeSaturation; LONG lDeadBand; } DICONDITION, *LPDICONDITION; typedef const DICONDITION *LPCDICONDITION; typedef struct DICUSTOMFORCE { DWORD cChannels; DWORD dwSamplePeriod; DWORD cSamples; LPLONG rglForceData; } DICUSTOMFORCE, *LPDICUSTOMFORCE; typedef const DICUSTOMFORCE *LPCDICUSTOMFORCE; typedef struct DIENVELOPE { DWORD dwSize; /* sizeof(DIENVELOPE) */ DWORD dwAttackLevel; DWORD dwAttackTime; /* Microseconds */ DWORD dwFadeLevel; DWORD dwFadeTime; /* Microseconds */ } DIENVELOPE, *LPDIENVELOPE; typedef const DIENVELOPE *LPCDIENVELOPE; /* This structure is defined for DirectX 5.0 compatibility */ typedef struct DIEFFECT_DX5 { DWORD dwSize; /* sizeof(DIEFFECT_DX5) */ DWORD dwFlags; /* DIEFF_* */ DWORD dwDuration; /* Microseconds */ DWORD dwSamplePeriod; /* Microseconds */ DWORD dwGain; DWORD dwTriggerButton; /* or DIEB_NOTRIGGER */ DWORD dwTriggerRepeatInterval; /* Microseconds */ DWORD cAxes; /* Number of axes */ LPDWORD rgdwAxes; /* Array of axes */ LPLONG rglDirection; /* Array of directions */ LPDIENVELOPE lpEnvelope; /* Optional */ DWORD cbTypeSpecificParams; /* Size of params */ LPVOID lpvTypeSpecificParams; /* Pointer to params */ } DIEFFECT_DX5, *LPDIEFFECT_DX5; typedef const DIEFFECT_DX5 *LPCDIEFFECT_DX5; typedef struct DIEFFECT { DWORD dwSize; /* sizeof(DIEFFECT) */ DWORD dwFlags; /* DIEFF_* */ DWORD dwDuration; /* Microseconds */ DWORD dwSamplePeriod; /* Microseconds */ DWORD dwGain; DWORD dwTriggerButton; /* or DIEB_NOTRIGGER */ DWORD dwTriggerRepeatInterval; /* Microseconds */ DWORD cAxes; /* Number of axes */ LPDWORD rgdwAxes; /* Array of axes */ LPLONG rglDirection; /* Array of directions */ LPDIENVELOPE lpEnvelope; /* Optional */ DWORD cbTypeSpecificParams; /* Size of params */ LPVOID lpvTypeSpecificParams; /* Pointer to params */ #if(DIRECTINPUT_VERSION >= 0x0600) DWORD dwStartDelay; /* Microseconds */ #endif /* DIRECTINPUT_VERSION >= 0x0600 */ } DIEFFECT, *LPDIEFFECT; typedef DIEFFECT DIEFFECT_DX6; typedef LPDIEFFECT LPDIEFFECT_DX6; typedef const DIEFFECT *LPCDIEFFECT; #if(DIRECTINPUT_VERSION >= 0x0700) #ifndef DIJ_RINGZERO typedef struct DIFILEEFFECT{ DWORD dwSize; GUID GuidEffect; LPCDIEFFECT lpDiEffect; CHAR szFriendlyName[MAX_PATH]; }DIFILEEFFECT, *LPDIFILEEFFECT; typedef const DIFILEEFFECT *LPCDIFILEEFFECT; typedef BOOL (FAR PASCAL * LPDIENUMEFFECTSINFILECALLBACK)(LPCDIFILEEFFECT , LPVOID); #endif /* DIJ_RINGZERO */ #endif /* DIRECTINPUT_VERSION >= 0x0700 */ #define DIEFF_OBJECTIDS 0x00000001 #define DIEFF_OBJECTOFFSETS 0x00000002 #define DIEFF_CARTESIAN 0x00000010 #define DIEFF_POLAR 0x00000020 #define DIEFF_SPHERICAL 0x00000040 #define DIEP_DURATION 0x00000001 #define DIEP_SAMPLEPERIOD 0x00000002 #define DIEP_GAIN 0x00000004 #define DIEP_TRIGGERBUTTON 0x00000008 #define DIEP_TRIGGERREPEATINTERVAL 0x00000010 #define DIEP_AXES 0x00000020 #define DIEP_DIRECTION 0x00000040 #define DIEP_ENVELOPE 0x00000080 #define DIEP_TYPESPECIFICPARAMS 0x00000100 #if(DIRECTINPUT_VERSION >= 0x0600) #define DIEP_STARTDELAY 0x00000200 #define DIEP_ALLPARAMS_DX5 0x000001FF #define DIEP_ALLPARAMS 0x000003FF #else /* DIRECTINPUT_VERSION < 0x0600 */ #define DIEP_ALLPARAMS 0x000001FF #endif /* DIRECTINPUT_VERSION < 0x0600 */ #define DIEP_START 0x20000000 #define DIEP_NORESTART 0x40000000 #define DIEP_NODOWNLOAD 0x80000000 #define DIEB_NOTRIGGER 0xFFFFFFFF #define DIES_SOLO 0x00000001 #define DIES_NODOWNLOAD 0x80000000 #define DIEGES_PLAYING 0x00000001 #define DIEGES_EMULATED 0x00000002 typedef struct DIEFFESCAPE { DWORD dwSize; DWORD dwCommand; LPVOID lpvInBuffer; DWORD cbInBuffer; LPVOID lpvOutBuffer; DWORD cbOutBuffer; } DIEFFESCAPE, *LPDIEFFESCAPE; #ifndef DIJ_RINGZERO #undef INTERFACE #define INTERFACE IDirectInputEffect DECLARE_INTERFACE_(IDirectInputEffect, IUnknown) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectInputEffect methods ***/ STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD,REFGUID) PURE; STDMETHOD(GetEffectGuid)(THIS_ LPGUID) PURE; STDMETHOD(GetParameters)(THIS_ LPDIEFFECT,DWORD) PURE; STDMETHOD(SetParameters)(THIS_ LPCDIEFFECT,DWORD) PURE; STDMETHOD(Start)(THIS_ DWORD,DWORD) PURE; STDMETHOD(Stop)(THIS) PURE; STDMETHOD(GetEffectStatus)(THIS_ LPDWORD) PURE; STDMETHOD(Download)(THIS) PURE; STDMETHOD(Unload)(THIS) PURE; STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE) PURE; }; typedef struct IDirectInputEffect *LPDIRECTINPUTEFFECT; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirectInputEffect_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectInputEffect_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectInputEffect_Release(p) (p)->lpVtbl->Release(p) #define IDirectInputEffect_Initialize(p,a,b,c) (p)->lpVtbl->Initialize(p,a,b,c) #define IDirectInputEffect_GetEffectGuid(p,a) (p)->lpVtbl->GetEffectGuid(p,a) #define IDirectInputEffect_GetParameters(p,a,b) (p)->lpVtbl->GetParameters(p,a,b) #define IDirectInputEffect_SetParameters(p,a,b) (p)->lpVtbl->SetParameters(p,a,b) #define IDirectInputEffect_Start(p,a,b) (p)->lpVtbl->Start(p,a,b) #define IDirectInputEffect_Stop(p) (p)->lpVtbl->Stop(p) #define IDirectInputEffect_GetEffectStatus(p,a) (p)->lpVtbl->GetEffectStatus(p,a) #define IDirectInputEffect_Download(p) (p)->lpVtbl->Download(p) #define IDirectInputEffect_Unload(p) (p)->lpVtbl->Unload(p) #define IDirectInputEffect_Escape(p,a) (p)->lpVtbl->Escape(p,a) #else #define IDirectInputEffect_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirectInputEffect_AddRef(p) (p)->AddRef() #define IDirectInputEffect_Release(p) (p)->Release() #define IDirectInputEffect_Initialize(p,a,b,c) (p)->Initialize(a,b,c) #define IDirectInputEffect_GetEffectGuid(p,a) (p)->GetEffectGuid(a) #define IDirectInputEffect_GetParameters(p,a,b) (p)->GetParameters(a,b) #define IDirectInputEffect_SetParameters(p,a,b) (p)->SetParameters(a,b) #define IDirectInputEffect_Start(p,a,b) (p)->Start(a,b) #define IDirectInputEffect_Stop(p) (p)->Stop() #define IDirectInputEffect_GetEffectStatus(p,a) (p)->GetEffectStatus(a) #define IDirectInputEffect_Download(p) (p)->Download() #define IDirectInputEffect_Unload(p) (p)->Unload() #define IDirectInputEffect_Escape(p,a) (p)->Escape(a) #endif #endif /* DIJ_RINGZERO */ #endif /* DIRECTINPUT_VERSION >= 0x0500 */ /**************************************************************************** * * IDirectInputDevice * ****************************************************************************/ #if DIRECTINPUT_VERSION <= 0x700 #define DIDEVTYPE_DEVICE 1 #define DIDEVTYPE_MOUSE 2 #define DIDEVTYPE_KEYBOARD 3 #define DIDEVTYPE_JOYSTICK 4 #else #define DI8DEVCLASS_ALL 0 #define DI8DEVCLASS_DEVICE 1 #define DI8DEVCLASS_POINTER 2 #define DI8DEVCLASS_KEYBOARD 3 #define DI8DEVCLASS_GAMECTRL 4 #define DI8DEVTYPE_DEVICE 0x11 #define DI8DEVTYPE_MOUSE 0x12 #define DI8DEVTYPE_KEYBOARD 0x13 #define DI8DEVTYPE_JOYSTICK 0x14 #define DI8DEVTYPE_GAMEPAD 0x15 #define DI8DEVTYPE_DRIVING 0x16 #define DI8DEVTYPE_FLIGHT 0x17 #define DI8DEVTYPE_1STPERSON 0x18 #define DI8DEVTYPE_DEVICECTRL 0x19 #define DI8DEVTYPE_SCREENPOINTER 0x1A #define DI8DEVTYPE_REMOTE 0x1B #define DI8DEVTYPE_SUPPLEMENTAL 0x1C #endif /* DIRECTINPUT_VERSION <= 0x700 */ #define DIDEVTYPE_HID 0x00010000 #if DIRECTINPUT_VERSION <= 0x700 #define DIDEVTYPEMOUSE_UNKNOWN 1 #define DIDEVTYPEMOUSE_TRADITIONAL 2 #define DIDEVTYPEMOUSE_FINGERSTICK 3 #define DIDEVTYPEMOUSE_TOUCHPAD 4 #define DIDEVTYPEMOUSE_TRACKBALL 5 #define DIDEVTYPEKEYBOARD_UNKNOWN 0 #define DIDEVTYPEKEYBOARD_PCXT 1 #define DIDEVTYPEKEYBOARD_OLIVETTI 2 #define DIDEVTYPEKEYBOARD_PCAT 3 #define DIDEVTYPEKEYBOARD_PCENH 4 #define DIDEVTYPEKEYBOARD_NOKIA1050 5 #define DIDEVTYPEKEYBOARD_NOKIA9140 6 #define DIDEVTYPEKEYBOARD_NEC98 7 #define DIDEVTYPEKEYBOARD_NEC98LAPTOP 8 #define DIDEVTYPEKEYBOARD_NEC98106 9 #define DIDEVTYPEKEYBOARD_JAPAN106 10 #define DIDEVTYPEKEYBOARD_JAPANAX 11 #define DIDEVTYPEKEYBOARD_J3100 12 #define DIDEVTYPEJOYSTICK_UNKNOWN 1 #define DIDEVTYPEJOYSTICK_TRADITIONAL 2 #define DIDEVTYPEJOYSTICK_FLIGHTSTICK 3 #define DIDEVTYPEJOYSTICK_GAMEPAD 4 #define DIDEVTYPEJOYSTICK_RUDDER 5 #define DIDEVTYPEJOYSTICK_WHEEL 6 #define DIDEVTYPEJOYSTICK_HEADTRACKER 7 #else #define DI8DEVTYPEMOUSE_UNKNOWN 1 #define DI8DEVTYPEMOUSE_TRADITIONAL 2 #define DI8DEVTYPEMOUSE_FINGERSTICK 3 #define DI8DEVTYPEMOUSE_TOUCHPAD 4 #define DI8DEVTYPEMOUSE_TRACKBALL 5 #define DI8DEVTYPEMOUSE_ABSOLUTE 6 #define DI8DEVTYPEKEYBOARD_UNKNOWN 0 #define DI8DEVTYPEKEYBOARD_PCXT 1 #define DI8DEVTYPEKEYBOARD_OLIVETTI 2 #define DI8DEVTYPEKEYBOARD_PCAT 3 #define DI8DEVTYPEKEYBOARD_PCENH 4 #define DI8DEVTYPEKEYBOARD_NOKIA1050 5 #define DI8DEVTYPEKEYBOARD_NOKIA9140 6 #define DI8DEVTYPEKEYBOARD_NEC98 7 #define DI8DEVTYPEKEYBOARD_NEC98LAPTOP 8 #define DI8DEVTYPEKEYBOARD_NEC98106 9 #define DI8DEVTYPEKEYBOARD_JAPAN106 10 #define DI8DEVTYPEKEYBOARD_JAPANAX 11 #define DI8DEVTYPEKEYBOARD_J3100 12 #define DI8DEVTYPE_LIMITEDGAMESUBTYPE 1 #define DI8DEVTYPEJOYSTICK_LIMITED DI8DEVTYPE_LIMITEDGAMESUBTYPE #define DI8DEVTYPEJOYSTICK_STANDARD 2 #define DI8DEVTYPEGAMEPAD_LIMITED DI8DEVTYPE_LIMITEDGAMESUBTYPE #define DI8DEVTYPEGAMEPAD_STANDARD 2 #define DI8DEVTYPEGAMEPAD_TILT 3 #define DI8DEVTYPEDRIVING_LIMITED DI8DEVTYPE_LIMITEDGAMESUBTYPE #define DI8DEVTYPEDRIVING_COMBINEDPEDALS 2 #define DI8DEVTYPEDRIVING_DUALPEDALS 3 #define DI8DEVTYPEDRIVING_THREEPEDALS 4 #define DI8DEVTYPEDRIVING_HANDHELD 5 #define DI8DEVTYPEFLIGHT_LIMITED DI8DEVTYPE_LIMITEDGAMESUBTYPE #define DI8DEVTYPEFLIGHT_STICK 2 #define DI8DEVTYPEFLIGHT_YOKE 3 #define DI8DEVTYPEFLIGHT_RC 4 #define DI8DEVTYPE1STPERSON_LIMITED DI8DEVTYPE_LIMITEDGAMESUBTYPE #define DI8DEVTYPE1STPERSON_UNKNOWN 2 #define DI8DEVTYPE1STPERSON_SIXDOF 3 #define DI8DEVTYPE1STPERSON_SHOOTER 4 #define DI8DEVTYPESCREENPTR_UNKNOWN 2 #define DI8DEVTYPESCREENPTR_LIGHTGUN 3 #define DI8DEVTYPESCREENPTR_LIGHTPEN 4 #define DI8DEVTYPESCREENPTR_TOUCH 5 #define DI8DEVTYPEREMOTE_UNKNOWN 2 #define DI8DEVTYPEDEVICECTRL_UNKNOWN 2 #define DI8DEVTYPEDEVICECTRL_COMMSSELECTION 3 #define DI8DEVTYPEDEVICECTRL_COMMSSELECTION_HARDWIRED 4 #define DI8DEVTYPESUPPLEMENTAL_UNKNOWN 2 #define DI8DEVTYPESUPPLEMENTAL_2NDHANDCONTROLLER 3 #define DI8DEVTYPESUPPLEMENTAL_HEADTRACKER 4 #define DI8DEVTYPESUPPLEMENTAL_HANDTRACKER 5 #define DI8DEVTYPESUPPLEMENTAL_SHIFTSTICKGATE 6 #define DI8DEVTYPESUPPLEMENTAL_SHIFTER 7 #define DI8DEVTYPESUPPLEMENTAL_THROTTLE 8 #define DI8DEVTYPESUPPLEMENTAL_SPLITTHROTTLE 9 #define DI8DEVTYPESUPPLEMENTAL_COMBINEDPEDALS 10 #define DI8DEVTYPESUPPLEMENTAL_DUALPEDALS 11 #define DI8DEVTYPESUPPLEMENTAL_THREEPEDALS 12 #define DI8DEVTYPESUPPLEMENTAL_RUDDERPEDALS 13 #endif /* DIRECTINPUT_VERSION <= 0x700 */ #define GET_DIDEVICE_TYPE(dwDevType) LOBYTE(dwDevType) #define GET_DIDEVICE_SUBTYPE(dwDevType) HIBYTE(dwDevType) #if(DIRECTINPUT_VERSION >= 0x0500) /* This structure is defined for DirectX 3.0 compatibility */ typedef struct DIDEVCAPS_DX3 { DWORD dwSize; DWORD dwFlags; DWORD dwDevType; DWORD dwAxes; DWORD dwButtons; DWORD dwPOVs; } DIDEVCAPS_DX3, *LPDIDEVCAPS_DX3; #endif /* DIRECTINPUT_VERSION >= 0x0500 */ typedef struct DIDEVCAPS { DWORD dwSize; DWORD dwFlags; DWORD dwDevType; DWORD dwAxes; DWORD dwButtons; DWORD dwPOVs; #if(DIRECTINPUT_VERSION >= 0x0500) DWORD dwFFSamplePeriod; DWORD dwFFMinTimeResolution; DWORD dwFirmwareRevision; DWORD dwHardwareRevision; DWORD dwFFDriverVersion; #endif /* DIRECTINPUT_VERSION >= 0x0500 */ } DIDEVCAPS, *LPDIDEVCAPS; #define DIDC_ATTACHED 0x00000001 #define DIDC_POLLEDDEVICE 0x00000002 #define DIDC_EMULATED 0x00000004 #define DIDC_POLLEDDATAFORMAT 0x00000008 #if(DIRECTINPUT_VERSION >= 0x0500) #define DIDC_FORCEFEEDBACK 0x00000100 #define DIDC_FFATTACK 0x00000200 #define DIDC_FFFADE 0x00000400 #define DIDC_SATURATION 0x00000800 #define DIDC_POSNEGCOEFFICIENTS 0x00001000 #define DIDC_POSNEGSATURATION 0x00002000 #define DIDC_DEADBAND 0x00004000 #endif /* DIRECTINPUT_VERSION >= 0x0500 */ #define DIDC_STARTDELAY 0x00008000 #if(DIRECTINPUT_VERSION >= 0x050a) #define DIDC_ALIAS 0x00010000 #define DIDC_PHANTOM 0x00020000 #endif /* DIRECTINPUT_VERSION >= 0x050a */ #if(DIRECTINPUT_VERSION >= 0x0800) #define DIDC_HIDDEN 0x00040000 #endif /* DIRECTINPUT_VERSION >= 0x0800 */ #define DIDFT_ALL 0x00000000 #define DIDFT_RELAXIS 0x00000001 #define DIDFT_ABSAXIS 0x00000002 #define DIDFT_AXIS 0x00000003 #define DIDFT_PSHBUTTON 0x00000004 #define DIDFT_TGLBUTTON 0x00000008 #define DIDFT_BUTTON 0x0000000C #define DIDFT_POV 0x00000010 #define DIDFT_COLLECTION 0x00000040 #define DIDFT_NODATA 0x00000080 #define DIDFT_ANYINSTANCE 0x00FFFF00 #define DIDFT_INSTANCEMASK DIDFT_ANYINSTANCE #define DIDFT_MAKEINSTANCE(n) ((WORD)(n) << 8) #define DIDFT_GETTYPE(n) LOBYTE(n) #define DIDFT_GETINSTANCE(n) LOWORD((n) >> 8) #define DIDFT_FFACTUATOR 0x01000000 #define DIDFT_FFEFFECTTRIGGER 0x02000000 #if(DIRECTINPUT_VERSION >= 0x050a) #define DIDFT_OUTPUT 0x10000000 #define DIDFT_VENDORDEFINED 0x04000000 #define DIDFT_ALIAS 0x08000000 #endif /* DIRECTINPUT_VERSION >= 0x050a */ #ifndef DIDFT_OPTIONAL #define DIDFT_OPTIONAL 0x80000000 #endif #define DIDFT_ENUMCOLLECTION(n) ((WORD)(n) << 8) #define DIDFT_NOCOLLECTION 0x00FFFF00 #ifndef DIJ_RINGZERO typedef struct _DIOBJECTDATAFORMAT { const GUID *pguid; DWORD dwOfs; DWORD dwType; DWORD dwFlags; } DIOBJECTDATAFORMAT, *LPDIOBJECTDATAFORMAT; typedef const DIOBJECTDATAFORMAT *LPCDIOBJECTDATAFORMAT; typedef struct _DIDATAFORMAT { DWORD dwSize; DWORD dwObjSize; DWORD dwFlags; DWORD dwDataSize; DWORD dwNumObjs; LPDIOBJECTDATAFORMAT rgodf; } DIDATAFORMAT, *LPDIDATAFORMAT; typedef const DIDATAFORMAT *LPCDIDATAFORMAT; #define DIDF_ABSAXIS 0x00000001 #define DIDF_RELAXIS 0x00000002 #ifdef __cplusplus extern "C" { #endif extern const DIDATAFORMAT c_dfDIMouse; #if(DIRECTINPUT_VERSION >= 0x0700) extern const DIDATAFORMAT c_dfDIMouse2; #endif /* DIRECTINPUT_VERSION >= 0x0700 */ extern const DIDATAFORMAT c_dfDIKeyboard; #if(DIRECTINPUT_VERSION >= 0x0500) extern const DIDATAFORMAT c_dfDIJoystick; extern const DIDATAFORMAT c_dfDIJoystick2; #endif /* DIRECTINPUT_VERSION >= 0x0500 */ #ifdef __cplusplus }; #endif #if DIRECTINPUT_VERSION > 0x0700 typedef struct _DIACTIONA { UINT_PTR uAppData; DWORD dwSemantic; OPTIONAL DWORD dwFlags; OPTIONAL union { LPCSTR lptszActionName; UINT uResIdString; }; OPTIONAL GUID guidInstance; OPTIONAL DWORD dwObjID; OPTIONAL DWORD dwHow; } DIACTIONA, *LPDIACTIONA ; typedef struct _DIACTIONW { UINT_PTR uAppData; DWORD dwSemantic; OPTIONAL DWORD dwFlags; OPTIONAL union { LPCWSTR lptszActionName; UINT uResIdString; }; OPTIONAL GUID guidInstance; OPTIONAL DWORD dwObjID; OPTIONAL DWORD dwHow; } DIACTIONW, *LPDIACTIONW ; #ifdef UNICODE typedef DIACTIONW DIACTION; typedef LPDIACTIONW LPDIACTION; #else typedef DIACTIONA DIACTION; typedef LPDIACTIONA LPDIACTION; #endif // UNICODE typedef const DIACTIONA *LPCDIACTIONA; typedef const DIACTIONW *LPCDIACTIONW; #ifdef UNICODE typedef DIACTIONW DIACTION; typedef LPCDIACTIONW LPCDIACTION; #else typedef DIACTIONA DIACTION; typedef LPCDIACTIONA LPCDIACTION; #endif // UNICODE typedef const DIACTION *LPCDIACTION; #define DIA_FORCEFEEDBACK 0x00000001 #define DIA_APPMAPPED 0x00000002 #define DIA_APPNOMAP 0x00000004 #define DIA_NORANGE 0x00000008 #define DIA_APPFIXED 0x00000010 #define DIAH_UNMAPPED 0x00000000 #define DIAH_USERCONFIG 0x00000001 #define DIAH_APPREQUESTED 0x00000002 #define DIAH_HWAPP 0x00000004 #define DIAH_HWDEFAULT 0x00000008 #define DIAH_DEFAULT 0x00000020 #define DIAH_ERROR 0x80000000 typedef struct _DIACTIONFORMATA { DWORD dwSize; DWORD dwActionSize; DWORD dwDataSize; DWORD dwNumActions; LPDIACTIONA rgoAction; GUID guidActionMap; DWORD dwGenre; DWORD dwBufferSize; OPTIONAL LONG lAxisMin; OPTIONAL LONG lAxisMax; OPTIONAL HINSTANCE hInstString; FILETIME ftTimeStamp; DWORD dwCRC; CHAR tszActionMap[MAX_PATH]; } DIACTIONFORMATA, *LPDIACTIONFORMATA; typedef struct _DIACTIONFORMATW { DWORD dwSize; DWORD dwActionSize; DWORD dwDataSize; DWORD dwNumActions; LPDIACTIONW rgoAction; GUID guidActionMap; DWORD dwGenre; DWORD dwBufferSize; OPTIONAL LONG lAxisMin; OPTIONAL LONG lAxisMax; OPTIONAL HINSTANCE hInstString; FILETIME ftTimeStamp; DWORD dwCRC; WCHAR tszActionMap[MAX_PATH]; } DIACTIONFORMATW, *LPDIACTIONFORMATW; #ifdef UNICODE typedef DIACTIONFORMATW DIACTIONFORMAT; typedef LPDIACTIONFORMATW LPDIACTIONFORMAT; #else typedef DIACTIONFORMATA DIACTIONFORMAT; typedef LPDIACTIONFORMATA LPDIACTIONFORMAT; #endif // UNICODE typedef const DIACTIONFORMATA *LPCDIACTIONFORMATA; typedef const DIACTIONFORMATW *LPCDIACTIONFORMATW; #ifdef UNICODE typedef DIACTIONFORMATW DIACTIONFORMAT; typedef LPCDIACTIONFORMATW LPCDIACTIONFORMAT; #else typedef DIACTIONFORMATA DIACTIONFORMAT; typedef LPCDIACTIONFORMATA LPCDIACTIONFORMAT; #endif // UNICODE typedef const DIACTIONFORMAT *LPCDIACTIONFORMAT; #define DIAFTS_NEWDEVICELOW 0xFFFFFFFF #define DIAFTS_NEWDEVICEHIGH 0xFFFFFFFF #define DIAFTS_UNUSEDDEVICELOW 0x00000000 #define DIAFTS_UNUSEDDEVICEHIGH 0x00000000 #define DIDBAM_DEFAULT 0x00000000 #define DIDBAM_PRESERVE 0x00000001 #define DIDBAM_INITIALIZE 0x00000002 #define DIDBAM_HWDEFAULTS 0x00000004 #define DIDSAM_DEFAULT 0x00000000 #define DIDSAM_NOUSER 0x00000001 #define DIDSAM_FORCESAVE 0x00000002 #define DICD_DEFAULT 0x00000000 #define DICD_EDIT 0x00000001 /* * The following definition is normally defined in d3dtypes.h */ #ifndef D3DCOLOR_DEFINED typedef DWORD D3DCOLOR; #define D3DCOLOR_DEFINED #endif typedef struct _DICOLORSET{ DWORD dwSize; D3DCOLOR cTextFore; D3DCOLOR cTextHighlight; D3DCOLOR cCalloutLine; D3DCOLOR cCalloutHighlight; D3DCOLOR cBorder; D3DCOLOR cControlFill; D3DCOLOR cHighlightFill; D3DCOLOR cAreaFill; } DICOLORSET, *LPDICOLORSET; typedef const DICOLORSET *LPCDICOLORSET; typedef struct _DICONFIGUREDEVICESPARAMSA{ DWORD dwSize; DWORD dwcUsers; LPSTR lptszUserNames; DWORD dwcFormats; LPDIACTIONFORMATA lprgFormats; HWND hwnd; DICOLORSET dics; IUnknown FAR * lpUnkDDSTarget; } DICONFIGUREDEVICESPARAMSA, *LPDICONFIGUREDEVICESPARAMSA; typedef struct _DICONFIGUREDEVICESPARAMSW{ DWORD dwSize; DWORD dwcUsers; LPWSTR lptszUserNames; DWORD dwcFormats; LPDIACTIONFORMATW lprgFormats; HWND hwnd; DICOLORSET dics; IUnknown FAR * lpUnkDDSTarget; } DICONFIGUREDEVICESPARAMSW, *LPDICONFIGUREDEVICESPARAMSW; #ifdef UNICODE typedef DICONFIGUREDEVICESPARAMSW DICONFIGUREDEVICESPARAMS; typedef LPDICONFIGUREDEVICESPARAMSW LPDICONFIGUREDEVICESPARAMS; #else typedef DICONFIGUREDEVICESPARAMSA DICONFIGUREDEVICESPARAMS; typedef LPDICONFIGUREDEVICESPARAMSA LPDICONFIGUREDEVICESPARAMS; #endif // UNICODE typedef const DICONFIGUREDEVICESPARAMSA *LPCDICONFIGUREDEVICESPARAMSA; typedef const DICONFIGUREDEVICESPARAMSW *LPCDICONFIGUREDEVICESPARAMSW; #ifdef UNICODE typedef DCIONFIGUREDEVICESPARAMSW DICONFIGUREDEVICESPARAMS; typedef LPCDICONFIGUREDEVICESPARAMSW LPCDICONFIGUREDEVICESPARAMS; #else typedef DICONFIGUREDEVICESPARAMSA DICONFIGUREDEVICESPARAMS; typedef LPCDICONFIGUREDEVICESPARAMSA LPCDICONFIGUREDEVICESPARAMS; #endif // UNICODE typedef const DICONFIGUREDEVICESPARAMS *LPCDICONFIGUREDEVICESPARAMS; #define DIDIFT_CONFIGURATION 0x00000001 #define DIDIFT_OVERLAY 0x00000002 #define DIDAL_CENTERED 0x00000000 #define DIDAL_LEFTALIGNED 0x00000001 #define DIDAL_RIGHTALIGNED 0x00000002 #define DIDAL_MIDDLE 0x00000000 #define DIDAL_TOPALIGNED 0x00000004 #define DIDAL_BOTTOMALIGNED 0x00000008 typedef struct _DIDEVICEIMAGEINFOA { CHAR tszImagePath[MAX_PATH]; DWORD dwFlags; // These are valid if DIDIFT_OVERLAY is present in dwFlags. DWORD dwViewID; RECT rcOverlay; DWORD dwObjID; DWORD dwcValidPts; POINT rgptCalloutLine[5]; RECT rcCalloutRect; DWORD dwTextAlign; } DIDEVICEIMAGEINFOA, *LPDIDEVICEIMAGEINFOA; typedef struct _DIDEVICEIMAGEINFOW { WCHAR tszImagePath[MAX_PATH]; DWORD dwFlags; // These are valid if DIDIFT_OVERLAY is present in dwFlags. DWORD dwViewID; RECT rcOverlay; DWORD dwObjID; DWORD dwcValidPts; POINT rgptCalloutLine[5]; RECT rcCalloutRect; DWORD dwTextAlign; } DIDEVICEIMAGEINFOW, *LPDIDEVICEIMAGEINFOW; #ifdef UNICODE typedef DIDEVICEIMAGEINFOW DIDEVICEIMAGEINFO; typedef LPDIDEVICEIMAGEINFOW LPDIDEVICEIMAGEINFO; #else typedef DIDEVICEIMAGEINFOA DIDEVICEIMAGEINFO; typedef LPDIDEVICEIMAGEINFOA LPDIDEVICEIMAGEINFO; #endif // UNICODE typedef const DIDEVICEIMAGEINFOA *LPCDIDEVICEIMAGEINFOA; typedef const DIDEVICEIMAGEINFOW *LPCDIDEVICEIMAGEINFOW; #ifdef UNICODE typedef DIDEVICEIMAGEINFOW DIDEVICEIMAGEINFO; typedef LPCDIDEVICEIMAGEINFOW LPCDIDEVICEIMAGEINFO; #else typedef DIDEVICEIMAGEINFOA DIDEVICEIMAGEINFO; typedef LPCDIDEVICEIMAGEINFOA LPCDIDEVICEIMAGEINFO; #endif // UNICODE typedef const DIDEVICEIMAGEINFO *LPCDIDEVICEIMAGEINFO; typedef struct _DIDEVICEIMAGEINFOHEADERA { DWORD dwSize; DWORD dwSizeImageInfo; DWORD dwcViews; DWORD dwcButtons; DWORD dwcAxes; DWORD dwcPOVs; DWORD dwBufferSize; DWORD dwBufferUsed; LPDIDEVICEIMAGEINFOA lprgImageInfoArray; } DIDEVICEIMAGEINFOHEADERA, *LPDIDEVICEIMAGEINFOHEADERA; typedef struct _DIDEVICEIMAGEINFOHEADERW { DWORD dwSize; DWORD dwSizeImageInfo; DWORD dwcViews; DWORD dwcButtons; DWORD dwcAxes; DWORD dwcPOVs; DWORD dwBufferSize; DWORD dwBufferUsed; LPDIDEVICEIMAGEINFOW lprgImageInfoArray; } DIDEVICEIMAGEINFOHEADERW, *LPDIDEVICEIMAGEINFOHEADERW; #ifdef UNICODE typedef DIDEVICEIMAGEINFOHEADERW DIDEVICEIMAGEINFOHEADER; typedef LPDIDEVICEIMAGEINFOHEADERW LPDIDEVICEIMAGEINFOHEADER; #else typedef DIDEVICEIMAGEINFOHEADERA DIDEVICEIMAGEINFOHEADER; typedef LPDIDEVICEIMAGEINFOHEADERA LPDIDEVICEIMAGEINFOHEADER; #endif // UNICODE typedef const DIDEVICEIMAGEINFOHEADERA *LPCDIDEVICEIMAGEINFOHEADERA; typedef const DIDEVICEIMAGEINFOHEADERW *LPCDIDEVICEIMAGEINFOHEADERW; #ifdef UNICODE typedef DIDEVICEIMAGEINFOHEADERW DIDEVICEIMAGEINFOHEADER; typedef LPCDIDEVICEIMAGEINFOHEADERW LPCDIDEVICEIMAGEINFOHEADER; #else typedef DIDEVICEIMAGEINFOHEADERA DIDEVICEIMAGEINFOHEADER; typedef LPCDIDEVICEIMAGEINFOHEADERA LPCDIDEVICEIMAGEINFOHEADER; #endif // UNICODE typedef const DIDEVICEIMAGEINFOHEADER *LPCDIDEVICEIMAGEINFOHEADER; #endif /* DIRECTINPUT_VERSION > 0x0700 */ #if(DIRECTINPUT_VERSION >= 0x0500) /* These structures are defined for DirectX 3.0 compatibility */ typedef struct DIDEVICEOBJECTINSTANCE_DX3A { DWORD dwSize; GUID guidType; DWORD dwOfs; DWORD dwType; DWORD dwFlags; CHAR tszName[MAX_PATH]; } DIDEVICEOBJECTINSTANCE_DX3A, *LPDIDEVICEOBJECTINSTANCE_DX3A; typedef struct DIDEVICEOBJECTINSTANCE_DX3W { DWORD dwSize; GUID guidType; DWORD dwOfs; DWORD dwType; DWORD dwFlags; WCHAR tszName[MAX_PATH]; } DIDEVICEOBJECTINSTANCE_DX3W, *LPDIDEVICEOBJECTINSTANCE_DX3W; #ifdef UNICODE typedef DIDEVICEOBJECTINSTANCE_DX3W DIDEVICEOBJECTINSTANCE_DX3; typedef LPDIDEVICEOBJECTINSTANCE_DX3W LPDIDEVICEOBJECTINSTANCE_DX3; #else typedef DIDEVICEOBJECTINSTANCE_DX3A DIDEVICEOBJECTINSTANCE_DX3; typedef LPDIDEVICEOBJECTINSTANCE_DX3A LPDIDEVICEOBJECTINSTANCE_DX3; #endif // UNICODE typedef const DIDEVICEOBJECTINSTANCE_DX3A *LPCDIDEVICEOBJECTINSTANCE_DX3A; typedef const DIDEVICEOBJECTINSTANCE_DX3W *LPCDIDEVICEOBJECTINSTANCE_DX3W; typedef const DIDEVICEOBJECTINSTANCE_DX3 *LPCDIDEVICEOBJECTINSTANCE_DX3; #endif /* DIRECTINPUT_VERSION >= 0x0500 */ typedef struct DIDEVICEOBJECTINSTANCEA { DWORD dwSize; GUID guidType; DWORD dwOfs; DWORD dwType; DWORD dwFlags; CHAR tszName[MAX_PATH]; #if(DIRECTINPUT_VERSION >= 0x0500) DWORD dwFFMaxForce; DWORD dwFFForceResolution; WORD wCollectionNumber; WORD wDesignatorIndex; WORD wUsagePage; WORD wUsage; DWORD dwDimension; WORD wExponent; WORD wReportId; #endif /* DIRECTINPUT_VERSION >= 0x0500 */ } DIDEVICEOBJECTINSTANCEA, *LPDIDEVICEOBJECTINSTANCEA; typedef struct DIDEVICEOBJECTINSTANCEW { DWORD dwSize; GUID guidType; DWORD dwOfs; DWORD dwType; DWORD dwFlags; WCHAR tszName[MAX_PATH]; #if(DIRECTINPUT_VERSION >= 0x0500) DWORD dwFFMaxForce; DWORD dwFFForceResolution; WORD wCollectionNumber; WORD wDesignatorIndex; WORD wUsagePage; WORD wUsage; DWORD dwDimension; WORD wExponent; WORD wReportId; #endif /* DIRECTINPUT_VERSION >= 0x0500 */ } DIDEVICEOBJECTINSTANCEW, *LPDIDEVICEOBJECTINSTANCEW; #ifdef UNICODE typedef DIDEVICEOBJECTINSTANCEW DIDEVICEOBJECTINSTANCE; typedef LPDIDEVICEOBJECTINSTANCEW LPDIDEVICEOBJECTINSTANCE; #else typedef DIDEVICEOBJECTINSTANCEA DIDEVICEOBJECTINSTANCE; typedef LPDIDEVICEOBJECTINSTANCEA LPDIDEVICEOBJECTINSTANCE; #endif // UNICODE typedef const DIDEVICEOBJECTINSTANCEA *LPCDIDEVICEOBJECTINSTANCEA; typedef const DIDEVICEOBJECTINSTANCEW *LPCDIDEVICEOBJECTINSTANCEW; typedef const DIDEVICEOBJECTINSTANCE *LPCDIDEVICEOBJECTINSTANCE; typedef BOOL (FAR PASCAL * LPDIENUMDEVICEOBJECTSCALLBACKA)(LPCDIDEVICEOBJECTINSTANCEA, LPVOID); typedef BOOL (FAR PASCAL * LPDIENUMDEVICEOBJECTSCALLBACKW)(LPCDIDEVICEOBJECTINSTANCEW, LPVOID); #ifdef UNICODE #define LPDIENUMDEVICEOBJECTSCALLBACK LPDIENUMDEVICEOBJECTSCALLBACKW #else #define LPDIENUMDEVICEOBJECTSCALLBACK LPDIENUMDEVICEOBJECTSCALLBACKA #endif // !UNICODE #if(DIRECTINPUT_VERSION >= 0x0500) #define DIDOI_FFACTUATOR 0x00000001 #define DIDOI_FFEFFECTTRIGGER 0x00000002 #define DIDOI_POLLED 0x00008000 #define DIDOI_ASPECTPOSITION 0x00000100 #define DIDOI_ASPECTVELOCITY 0x00000200 #define DIDOI_ASPECTACCEL 0x00000300 #define DIDOI_ASPECTFORCE 0x00000400 #define DIDOI_ASPECTMASK 0x00000F00 #endif /* DIRECTINPUT_VERSION >= 0x0500 */ #if(DIRECTINPUT_VERSION >= 0x050a) #define DIDOI_GUIDISUSAGE 0x00010000 #endif /* DIRECTINPUT_VERSION >= 0x050a */ typedef struct DIPROPHEADER { DWORD dwSize; DWORD dwHeaderSize; DWORD dwObj; DWORD dwHow; } DIPROPHEADER, *LPDIPROPHEADER; typedef const DIPROPHEADER *LPCDIPROPHEADER; #define DIPH_DEVICE 0 #define DIPH_BYOFFSET 1 #define DIPH_BYID 2 #if(DIRECTINPUT_VERSION >= 0x050a) #define DIPH_BYUSAGE 3 #endif /* DIRECTINPUT_VERSION >= 0x050a */ #if(DIRECTINPUT_VERSION >= 0x050a) #define DIMAKEUSAGEDWORD(UsagePage, Usage) \ (DWORD)MAKELONG(Usage, UsagePage) #endif /* DIRECTINPUT_VERSION >= 0x050a */ typedef struct DIPROPDWORD { DIPROPHEADER diph; DWORD dwData; } DIPROPDWORD, *LPDIPROPDWORD; typedef const DIPROPDWORD *LPCDIPROPDWORD; #if(DIRECTINPUT_VERSION >= 0x0800) typedef struct DIPROPPOINTER { DIPROPHEADER diph; UINT_PTR uData; } DIPROPPOINTER, *LPDIPROPPOINTER; typedef const DIPROPPOINTER *LPCDIPROPPOINTER; #endif /* DIRECTINPUT_VERSION >= 0x0800 */ typedef struct DIPROPRANGE { DIPROPHEADER diph; LONG lMin; LONG lMax; } DIPROPRANGE, *LPDIPROPRANGE; typedef const DIPROPRANGE *LPCDIPROPRANGE; #define DIPROPRANGE_NOMIN ((LONG)0x80000000) #define DIPROPRANGE_NOMAX ((LONG)0x7FFFFFFF) #if(DIRECTINPUT_VERSION >= 0x050a) typedef struct DIPROPCAL { DIPROPHEADER diph; LONG lMin; LONG lCenter; LONG lMax; } DIPROPCAL, *LPDIPROPCAL; typedef const DIPROPCAL *LPCDIPROPCAL; typedef struct DIPROPCALPOV { DIPROPHEADER diph; LONG lMin[5]; LONG lMax[5]; } DIPROPCALPOV, *LPDIPROPCALPOV; typedef const DIPROPCALPOV *LPCDIPROPCALPOV; typedef struct DIPROPGUIDANDPATH { DIPROPHEADER diph; GUID guidClass; WCHAR wszPath[MAX_PATH]; } DIPROPGUIDANDPATH, *LPDIPROPGUIDANDPATH; typedef const DIPROPGUIDANDPATH *LPCDIPROPGUIDANDPATH; typedef struct DIPROPSTRING { DIPROPHEADER diph; WCHAR wsz[MAX_PATH]; } DIPROPSTRING, *LPDIPROPSTRING; typedef const DIPROPSTRING *LPCDIPROPSTRING; #endif /* DIRECTINPUT_VERSION >= 0x050a */ #if(DIRECTINPUT_VERSION >= 0x0800) #define MAXCPOINTSNUM 8 typedef struct _CPOINT { LONG lP; // raw value DWORD dwLog; // logical_value / max_logical_value * 10000 } CPOINT, *PCPOINT; typedef struct DIPROPCPOINTS { DIPROPHEADER diph; DWORD dwCPointsNum; CPOINT cp[MAXCPOINTSNUM]; } DIPROPCPOINTS, *LPDIPROPCPOINTS; typedef const DIPROPCPOINTS *LPCDIPROPCPOINTS; #endif /* DIRECTINPUT_VERSION >= 0x0800 */ #ifdef __cplusplus #define MAKEDIPROP(prop) (*(const GUID *)(prop)) #else #define MAKEDIPROP(prop) ((REFGUID)(prop)) #endif #define DIPROP_BUFFERSIZE MAKEDIPROP(1) #define DIPROP_AXISMODE MAKEDIPROP(2) #define DIPROPAXISMODE_ABS 0 #define DIPROPAXISMODE_REL 1 #define DIPROP_GRANULARITY MAKEDIPROP(3) #define DIPROP_RANGE MAKEDIPROP(4) #define DIPROP_DEADZONE MAKEDIPROP(5) #define DIPROP_SATURATION MAKEDIPROP(6) #define DIPROP_FFGAIN MAKEDIPROP(7) #define DIPROP_FFLOAD MAKEDIPROP(8) #define DIPROP_AUTOCENTER MAKEDIPROP(9) #define DIPROPAUTOCENTER_OFF 0 #define DIPROPAUTOCENTER_ON 1 #define DIPROP_CALIBRATIONMODE MAKEDIPROP(10) #define DIPROPCALIBRATIONMODE_COOKED 0 #define DIPROPCALIBRATIONMODE_RAW 1 #if(DIRECTINPUT_VERSION >= 0x050a) #define DIPROP_CALIBRATION MAKEDIPROP(11) #define DIPROP_GUIDANDPATH MAKEDIPROP(12) #define DIPROP_INSTANCENAME MAKEDIPROP(13) #define DIPROP_PRODUCTNAME MAKEDIPROP(14) #endif /* DIRECTINPUT_VERSION >= 0x050a */ #if(DIRECTINPUT_VERSION >= 0x05b2) #define DIPROP_JOYSTICKID MAKEDIPROP(15) #define DIPROP_GETPORTDISPLAYNAME MAKEDIPROP(16) #endif /* DIRECTINPUT_VERSION >= 0x05b2 */ #if(DIRECTINPUT_VERSION >= 0x0700) #define DIPROP_PHYSICALRANGE MAKEDIPROP(18) #define DIPROP_LOGICALRANGE MAKEDIPROP(19) #endif /* DIRECTINPUT_VERSION >= 0x0700 */ #if(DIRECTINPUT_VERSION >= 0x0800) #define DIPROP_KEYNAME MAKEDIPROP(20) #define DIPROP_CPOINTS MAKEDIPROP(21) #define DIPROP_APPDATA MAKEDIPROP(22) #define DIPROP_SCANCODE MAKEDIPROP(23) #define DIPROP_VIDPID MAKEDIPROP(24) #define DIPROP_USERNAME MAKEDIPROP(25) #define DIPROP_TYPENAME MAKEDIPROP(26) #endif /* DIRECTINPUT_VERSION >= 0x0800 */ typedef struct DIDEVICEOBJECTDATA_DX3 { DWORD dwOfs; DWORD dwData; DWORD dwTimeStamp; DWORD dwSequence; } DIDEVICEOBJECTDATA_DX3, *LPDIDEVICEOBJECTDATA_DX3; typedef const DIDEVICEOBJECTDATA_DX3 *LPCDIDEVICEOBJECTDATA_DX; typedef struct DIDEVICEOBJECTDATA { DWORD dwOfs; DWORD dwData; DWORD dwTimeStamp; DWORD dwSequence; #if(DIRECTINPUT_VERSION >= 0x0800) UINT_PTR uAppData; #endif /* DIRECTINPUT_VERSION >= 0x0800 */ } DIDEVICEOBJECTDATA, *LPDIDEVICEOBJECTDATA; typedef const DIDEVICEOBJECTDATA *LPCDIDEVICEOBJECTDATA; #define DIGDD_PEEK 0x00000001 #define DISEQUENCE_COMPARE(dwSequence1, cmp, dwSequence2) \ ((int)((dwSequence1) - (dwSequence2)) cmp 0) #define DISCL_EXCLUSIVE 0x00000001 #define DISCL_NONEXCLUSIVE 0x00000002 #define DISCL_FOREGROUND 0x00000004 #define DISCL_BACKGROUND 0x00000008 #define DISCL_NOWINKEY 0x00000010 #if(DIRECTINPUT_VERSION >= 0x0500) /* These structures are defined for DirectX 3.0 compatibility */ typedef struct DIDEVICEINSTANCE_DX3A { DWORD dwSize; GUID guidInstance; GUID guidProduct; DWORD dwDevType; CHAR tszInstanceName[MAX_PATH]; CHAR tszProductName[MAX_PATH]; } DIDEVICEINSTANCE_DX3A, *LPDIDEVICEINSTANCE_DX3A; typedef struct DIDEVICEINSTANCE_DX3W { DWORD dwSize; GUID guidInstance; GUID guidProduct; DWORD dwDevType; WCHAR tszInstanceName[MAX_PATH]; WCHAR tszProductName[MAX_PATH]; } DIDEVICEINSTANCE_DX3W, *LPDIDEVICEINSTANCE_DX3W; #ifdef UNICODE typedef DIDEVICEINSTANCE_DX3W DIDEVICEINSTANCE_DX3; typedef LPDIDEVICEINSTANCE_DX3W LPDIDEVICEINSTANCE_DX3; #else typedef DIDEVICEINSTANCE_DX3A DIDEVICEINSTANCE_DX3; typedef LPDIDEVICEINSTANCE_DX3A LPDIDEVICEINSTANCE_DX3; #endif // UNICODE typedef const DIDEVICEINSTANCE_DX3A *LPCDIDEVICEINSTANCE_DX3A; typedef const DIDEVICEINSTANCE_DX3W *LPCDIDEVICEINSTANCE_DX3W; typedef const DIDEVICEINSTANCE_DX3 *LPCDIDEVICEINSTANCE_DX3; #endif /* DIRECTINPUT_VERSION >= 0x0500 */ typedef struct DIDEVICEINSTANCEA { DWORD dwSize; GUID guidInstance; GUID guidProduct; DWORD dwDevType; CHAR tszInstanceName[MAX_PATH]; CHAR tszProductName[MAX_PATH]; #if(DIRECTINPUT_VERSION >= 0x0500) GUID guidFFDriver; WORD wUsagePage; WORD wUsage; #endif /* DIRECTINPUT_VERSION >= 0x0500 */ } DIDEVICEINSTANCEA, *LPDIDEVICEINSTANCEA; typedef struct DIDEVICEINSTANCEW { DWORD dwSize; GUID guidInstance; GUID guidProduct; DWORD dwDevType; WCHAR tszInstanceName[MAX_PATH]; WCHAR tszProductName[MAX_PATH]; #if(DIRECTINPUT_VERSION >= 0x0500) GUID guidFFDriver; WORD wUsagePage; WORD wUsage; #endif /* DIRECTINPUT_VERSION >= 0x0500 */ } DIDEVICEINSTANCEW, *LPDIDEVICEINSTANCEW; #ifdef UNICODE typedef DIDEVICEINSTANCEW DIDEVICEINSTANCE; typedef LPDIDEVICEINSTANCEW LPDIDEVICEINSTANCE; #else typedef DIDEVICEINSTANCEA DIDEVICEINSTANCE; typedef LPDIDEVICEINSTANCEA LPDIDEVICEINSTANCE; #endif // UNICODE typedef const DIDEVICEINSTANCEA *LPCDIDEVICEINSTANCEA; typedef const DIDEVICEINSTANCEW *LPCDIDEVICEINSTANCEW; #ifdef UNICODE typedef DIDEVICEINSTANCEW DIDEVICEINSTANCE; typedef LPCDIDEVICEINSTANCEW LPCDIDEVICEINSTANCE; #else typedef DIDEVICEINSTANCEA DIDEVICEINSTANCE; typedef LPCDIDEVICEINSTANCEA LPCDIDEVICEINSTANCE; #endif // UNICODE typedef const DIDEVICEINSTANCE *LPCDIDEVICEINSTANCE; #undef INTERFACE #define INTERFACE IDirectInputDeviceW DECLARE_INTERFACE_(IDirectInputDeviceW, IUnknown) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectInputDeviceW methods ***/ STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS) PURE; STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKW,LPVOID,DWORD) PURE; STDMETHOD(GetProperty)(THIS_ REFGUID,LPDIPROPHEADER) PURE; STDMETHOD(SetProperty)(THIS_ REFGUID,LPCDIPROPHEADER) PURE; STDMETHOD(Acquire)(THIS) PURE; STDMETHOD(Unacquire)(THIS) PURE; STDMETHOD(GetDeviceState)(THIS_ DWORD,LPVOID) PURE; STDMETHOD(GetDeviceData)(THIS_ DWORD,LPDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE; STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT) PURE; STDMETHOD(SetEventNotification)(THIS_ HANDLE) PURE; STDMETHOD(SetCooperativeLevel)(THIS_ HWND,DWORD) PURE; STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEW,DWORD,DWORD) PURE; STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEW) PURE; STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE; STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD,REFGUID) PURE; }; typedef struct IDirectInputDeviceW *LPDIRECTINPUTDEVICEW; #undef INTERFACE #define INTERFACE IDirectInputDeviceA DECLARE_INTERFACE_(IDirectInputDeviceA, IUnknown) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectInputDeviceA methods ***/ STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS) PURE; STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKA,LPVOID,DWORD) PURE; STDMETHOD(GetProperty)(THIS_ REFGUID,LPDIPROPHEADER) PURE; STDMETHOD(SetProperty)(THIS_ REFGUID,LPCDIPROPHEADER) PURE; STDMETHOD(Acquire)(THIS) PURE; STDMETHOD(Unacquire)(THIS) PURE; STDMETHOD(GetDeviceState)(THIS_ DWORD,LPVOID) PURE; STDMETHOD(GetDeviceData)(THIS_ DWORD,LPDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE; STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT) PURE; STDMETHOD(SetEventNotification)(THIS_ HANDLE) PURE; STDMETHOD(SetCooperativeLevel)(THIS_ HWND,DWORD) PURE; STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEA,DWORD,DWORD) PURE; STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEA) PURE; STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE; STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD,REFGUID) PURE; }; typedef struct IDirectInputDeviceA *LPDIRECTINPUTDEVICEA; #ifdef UNICODE #define IID_IDirectInputDevice IID_IDirectInputDeviceW #define IDirectInputDevice IDirectInputDeviceW #define IDirectInputDeviceVtbl IDirectInputDeviceWVtbl #else #define IID_IDirectInputDevice IID_IDirectInputDeviceA #define IDirectInputDevice IDirectInputDeviceA #define IDirectInputDeviceVtbl IDirectInputDeviceAVtbl #endif typedef struct IDirectInputDevice *LPDIRECTINPUTDEVICE; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirectInputDevice_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectInputDevice_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectInputDevice_Release(p) (p)->lpVtbl->Release(p) #define IDirectInputDevice_GetCapabilities(p,a) (p)->lpVtbl->GetCapabilities(p,a) #define IDirectInputDevice_EnumObjects(p,a,b,c) (p)->lpVtbl->EnumObjects(p,a,b,c) #define IDirectInputDevice_GetProperty(p,a,b) (p)->lpVtbl->GetProperty(p,a,b) #define IDirectInputDevice_SetProperty(p,a,b) (p)->lpVtbl->SetProperty(p,a,b) #define IDirectInputDevice_Acquire(p) (p)->lpVtbl->Acquire(p) #define IDirectInputDevice_Unacquire(p) (p)->lpVtbl->Unacquire(p) #define IDirectInputDevice_GetDeviceState(p,a,b) (p)->lpVtbl->GetDeviceState(p,a,b) #define IDirectInputDevice_GetDeviceData(p,a,b,c,d) (p)->lpVtbl->GetDeviceData(p,a,b,c,d) #define IDirectInputDevice_SetDataFormat(p,a) (p)->lpVtbl->SetDataFormat(p,a) #define IDirectInputDevice_SetEventNotification(p,a) (p)->lpVtbl->SetEventNotification(p,a) #define IDirectInputDevice_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b) #define IDirectInputDevice_GetObjectInfo(p,a,b,c) (p)->lpVtbl->GetObjectInfo(p,a,b,c) #define IDirectInputDevice_GetDeviceInfo(p,a) (p)->lpVtbl->GetDeviceInfo(p,a) #define IDirectInputDevice_RunControlPanel(p,a,b) (p)->lpVtbl->RunControlPanel(p,a,b) #define IDirectInputDevice_Initialize(p,a,b,c) (p)->lpVtbl->Initialize(p,a,b,c) #else #define IDirectInputDevice_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirectInputDevice_AddRef(p) (p)->AddRef() #define IDirectInputDevice_Release(p) (p)->Release() #define IDirectInputDevice_GetCapabilities(p,a) (p)->GetCapabilities(a) #define IDirectInputDevice_EnumObjects(p,a,b,c) (p)->EnumObjects(a,b,c) #define IDirectInputDevice_GetProperty(p,a,b) (p)->GetProperty(a,b) #define IDirectInputDevice_SetProperty(p,a,b) (p)->SetProperty(a,b) #define IDirectInputDevice_Acquire(p) (p)->Acquire() #define IDirectInputDevice_Unacquire(p) (p)->Unacquire() #define IDirectInputDevice_GetDeviceState(p,a,b) (p)->GetDeviceState(a,b) #define IDirectInputDevice_GetDeviceData(p,a,b,c,d) (p)->GetDeviceData(a,b,c,d) #define IDirectInputDevice_SetDataFormat(p,a) (p)->SetDataFormat(a) #define IDirectInputDevice_SetEventNotification(p,a) (p)->SetEventNotification(a) #define IDirectInputDevice_SetCooperativeLevel(p,a,b) (p)->SetCooperativeLevel(a,b) #define IDirectInputDevice_GetObjectInfo(p,a,b,c) (p)->GetObjectInfo(a,b,c) #define IDirectInputDevice_GetDeviceInfo(p,a) (p)->GetDeviceInfo(a) #define IDirectInputDevice_RunControlPanel(p,a,b) (p)->RunControlPanel(a,b) #define IDirectInputDevice_Initialize(p,a,b,c) (p)->Initialize(a,b,c) #endif #endif /* DIJ_RINGZERO */ #if(DIRECTINPUT_VERSION >= 0x0500) #define DISFFC_RESET 0x00000001 #define DISFFC_STOPALL 0x00000002 #define DISFFC_PAUSE 0x00000004 #define DISFFC_CONTINUE 0x00000008 #define DISFFC_SETACTUATORSON 0x00000010 #define DISFFC_SETACTUATORSOFF 0x00000020 #define DIGFFS_EMPTY 0x00000001 #define DIGFFS_STOPPED 0x00000002 #define DIGFFS_PAUSED 0x00000004 #define DIGFFS_ACTUATORSON 0x00000010 #define DIGFFS_ACTUATORSOFF 0x00000020 #define DIGFFS_POWERON 0x00000040 #define DIGFFS_POWEROFF 0x00000080 #define DIGFFS_SAFETYSWITCHON 0x00000100 #define DIGFFS_SAFETYSWITCHOFF 0x00000200 #define DIGFFS_USERFFSWITCHON 0x00000400 #define DIGFFS_USERFFSWITCHOFF 0x00000800 #define DIGFFS_DEVICELOST 0x80000000 #ifndef DIJ_RINGZERO typedef struct DIEFFECTINFOA { DWORD dwSize; GUID guid; DWORD dwEffType; DWORD dwStaticParams; DWORD dwDynamicParams; CHAR tszName[MAX_PATH]; } DIEFFECTINFOA, *LPDIEFFECTINFOA; typedef struct DIEFFECTINFOW { DWORD dwSize; GUID guid; DWORD dwEffType; DWORD dwStaticParams; DWORD dwDynamicParams; WCHAR tszName[MAX_PATH]; } DIEFFECTINFOW, *LPDIEFFECTINFOW; #ifdef UNICODE typedef DIEFFECTINFOW DIEFFECTINFO; typedef LPDIEFFECTINFOW LPDIEFFECTINFO; #else typedef DIEFFECTINFOA DIEFFECTINFO; typedef LPDIEFFECTINFOA LPDIEFFECTINFO; #endif // UNICODE typedef const DIEFFECTINFOA *LPCDIEFFECTINFOA; typedef const DIEFFECTINFOW *LPCDIEFFECTINFOW; typedef const DIEFFECTINFO *LPCDIEFFECTINFO; #define DISDD_CONTINUE 0x00000001 typedef BOOL (FAR PASCAL * LPDIENUMEFFECTSCALLBACKA)(LPCDIEFFECTINFOA, LPVOID); typedef BOOL (FAR PASCAL * LPDIENUMEFFECTSCALLBACKW)(LPCDIEFFECTINFOW, LPVOID); #ifdef UNICODE #define LPDIENUMEFFECTSCALLBACK LPDIENUMEFFECTSCALLBACKW #else #define LPDIENUMEFFECTSCALLBACK LPDIENUMEFFECTSCALLBACKA #endif // !UNICODE typedef BOOL (FAR PASCAL * LPDIENUMCREATEDEFFECTOBJECTSCALLBACK)(LPDIRECTINPUTEFFECT, LPVOID); #undef INTERFACE #define INTERFACE IDirectInputDevice2W DECLARE_INTERFACE_(IDirectInputDevice2W, IDirectInputDeviceW) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectInputDeviceW methods ***/ STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS) PURE; STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKW,LPVOID,DWORD) PURE; STDMETHOD(GetProperty)(THIS_ REFGUID,LPDIPROPHEADER) PURE; STDMETHOD(SetProperty)(THIS_ REFGUID,LPCDIPROPHEADER) PURE; STDMETHOD(Acquire)(THIS) PURE; STDMETHOD(Unacquire)(THIS) PURE; STDMETHOD(GetDeviceState)(THIS_ DWORD,LPVOID) PURE; STDMETHOD(GetDeviceData)(THIS_ DWORD,LPDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE; STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT) PURE; STDMETHOD(SetEventNotification)(THIS_ HANDLE) PURE; STDMETHOD(SetCooperativeLevel)(THIS_ HWND,DWORD) PURE; STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEW,DWORD,DWORD) PURE; STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEW) PURE; STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE; STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD,REFGUID) PURE; /*** IDirectInputDevice2W methods ***/ STDMETHOD(CreateEffect)(THIS_ REFGUID,LPCDIEFFECT,LPDIRECTINPUTEFFECT *,LPUNKNOWN) PURE; STDMETHOD(EnumEffects)(THIS_ LPDIENUMEFFECTSCALLBACKW,LPVOID,DWORD) PURE; STDMETHOD(GetEffectInfo)(THIS_ LPDIEFFECTINFOW,REFGUID) PURE; STDMETHOD(GetForceFeedbackState)(THIS_ LPDWORD) PURE; STDMETHOD(SendForceFeedbackCommand)(THIS_ DWORD) PURE; STDMETHOD(EnumCreatedEffectObjects)(THIS_ LPDIENUMCREATEDEFFECTOBJECTSCALLBACK,LPVOID,DWORD) PURE; STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE) PURE; STDMETHOD(Poll)(THIS) PURE; STDMETHOD(SendDeviceData)(THIS_ DWORD,LPCDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE; }; typedef struct IDirectInputDevice2W *LPDIRECTINPUTDEVICE2W; #undef INTERFACE #define INTERFACE IDirectInputDevice2A DECLARE_INTERFACE_(IDirectInputDevice2A, IDirectInputDeviceA) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectInputDeviceA methods ***/ STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS) PURE; STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKA,LPVOID,DWORD) PURE; STDMETHOD(GetProperty)(THIS_ REFGUID,LPDIPROPHEADER) PURE; STDMETHOD(SetProperty)(THIS_ REFGUID,LPCDIPROPHEADER) PURE; STDMETHOD(Acquire)(THIS) PURE; STDMETHOD(Unacquire)(THIS) PURE; STDMETHOD(GetDeviceState)(THIS_ DWORD,LPVOID) PURE; STDMETHOD(GetDeviceData)(THIS_ DWORD,LPDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE; STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT) PURE; STDMETHOD(SetEventNotification)(THIS_ HANDLE) PURE; STDMETHOD(SetCooperativeLevel)(THIS_ HWND,DWORD) PURE; STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEA,DWORD,DWORD) PURE; STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEA) PURE; STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE; STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD,REFGUID) PURE; /*** IDirectInputDevice2A methods ***/ STDMETHOD(CreateEffect)(THIS_ REFGUID,LPCDIEFFECT,LPDIRECTINPUTEFFECT *,LPUNKNOWN) PURE; STDMETHOD(EnumEffects)(THIS_ LPDIENUMEFFECTSCALLBACKA,LPVOID,DWORD) PURE; STDMETHOD(GetEffectInfo)(THIS_ LPDIEFFECTINFOA,REFGUID) PURE; STDMETHOD(GetForceFeedbackState)(THIS_ LPDWORD) PURE; STDMETHOD(SendForceFeedbackCommand)(THIS_ DWORD) PURE; STDMETHOD(EnumCreatedEffectObjects)(THIS_ LPDIENUMCREATEDEFFECTOBJECTSCALLBACK,LPVOID,DWORD) PURE; STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE) PURE; STDMETHOD(Poll)(THIS) PURE; STDMETHOD(SendDeviceData)(THIS_ DWORD,LPCDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE; }; typedef struct IDirectInputDevice2A *LPDIRECTINPUTDEVICE2A; #ifdef UNICODE #define IID_IDirectInputDevice2 IID_IDirectInputDevice2W #define IDirectInputDevice2 IDirectInputDevice2W #define IDirectInputDevice2Vtbl IDirectInputDevice2WVtbl #else #define IID_IDirectInputDevice2 IID_IDirectInputDevice2A #define IDirectInputDevice2 IDirectInputDevice2A #define IDirectInputDevice2Vtbl IDirectInputDevice2AVtbl #endif typedef struct IDirectInputDevice2 *LPDIRECTINPUTDEVICE2; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirectInputDevice2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectInputDevice2_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectInputDevice2_Release(p) (p)->lpVtbl->Release(p) #define IDirectInputDevice2_GetCapabilities(p,a) (p)->lpVtbl->GetCapabilities(p,a) #define IDirectInputDevice2_EnumObjects(p,a,b,c) (p)->lpVtbl->EnumObjects(p,a,b,c) #define IDirectInputDevice2_GetProperty(p,a,b) (p)->lpVtbl->GetProperty(p,a,b) #define IDirectInputDevice2_SetProperty(p,a,b) (p)->lpVtbl->SetProperty(p,a,b) #define IDirectInputDevice2_Acquire(p) (p)->lpVtbl->Acquire(p) #define IDirectInputDevice2_Unacquire(p) (p)->lpVtbl->Unacquire(p) #define IDirectInputDevice2_GetDeviceState(p,a,b) (p)->lpVtbl->GetDeviceState(p,a,b) #define IDirectInputDevice2_GetDeviceData(p,a,b,c,d) (p)->lpVtbl->GetDeviceData(p,a,b,c,d) #define IDirectInputDevice2_SetDataFormat(p,a) (p)->lpVtbl->SetDataFormat(p,a) #define IDirectInputDevice2_SetEventNotification(p,a) (p)->lpVtbl->SetEventNotification(p,a) #define IDirectInputDevice2_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b) #define IDirectInputDevice2_GetObjectInfo(p,a,b,c) (p)->lpVtbl->GetObjectInfo(p,a,b,c) #define IDirectInputDevice2_GetDeviceInfo(p,a) (p)->lpVtbl->GetDeviceInfo(p,a) #define IDirectInputDevice2_RunControlPanel(p,a,b) (p)->lpVtbl->RunControlPanel(p,a,b) #define IDirectInputDevice2_Initialize(p,a,b,c) (p)->lpVtbl->Initialize(p,a,b,c) #define IDirectInputDevice2_CreateEffect(p,a,b,c,d) (p)->lpVtbl->CreateEffect(p,a,b,c,d) #define IDirectInputDevice2_EnumEffects(p,a,b,c) (p)->lpVtbl->EnumEffects(p,a,b,c) #define IDirectInputDevice2_GetEffectInfo(p,a,b) (p)->lpVtbl->GetEffectInfo(p,a,b) #define IDirectInputDevice2_GetForceFeedbackState(p,a) (p)->lpVtbl->GetForceFeedbackState(p,a) #define IDirectInputDevice2_SendForceFeedbackCommand(p,a) (p)->lpVtbl->SendForceFeedbackCommand(p,a) #define IDirectInputDevice2_EnumCreatedEffectObjects(p,a,b,c) (p)->lpVtbl->EnumCreatedEffectObjects(p,a,b,c) #define IDirectInputDevice2_Escape(p,a) (p)->lpVtbl->Escape(p,a) #define IDirectInputDevice2_Poll(p) (p)->lpVtbl->Poll(p) #define IDirectInputDevice2_SendDeviceData(p,a,b,c,d) (p)->lpVtbl->SendDeviceData(p,a,b,c,d) #else #define IDirectInputDevice2_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirectInputDevice2_AddRef(p) (p)->AddRef() #define IDirectInputDevice2_Release(p) (p)->Release() #define IDirectInputDevice2_GetCapabilities(p,a) (p)->GetCapabilities(a) #define IDirectInputDevice2_EnumObjects(p,a,b,c) (p)->EnumObjects(a,b,c) #define IDirectInputDevice2_GetProperty(p,a,b) (p)->GetProperty(a,b) #define IDirectInputDevice2_SetProperty(p,a,b) (p)->SetProperty(a,b) #define IDirectInputDevice2_Acquire(p) (p)->Acquire() #define IDirectInputDevice2_Unacquire(p) (p)->Unacquire() #define IDirectInputDevice2_GetDeviceState(p,a,b) (p)->GetDeviceState(a,b) #define IDirectInputDevice2_GetDeviceData(p,a,b,c,d) (p)->GetDeviceData(a,b,c,d) #define IDirectInputDevice2_SetDataFormat(p,a) (p)->SetDataFormat(a) #define IDirectInputDevice2_SetEventNotification(p,a) (p)->SetEventNotification(a) #define IDirectInputDevice2_SetCooperativeLevel(p,a,b) (p)->SetCooperativeLevel(a,b) #define IDirectInputDevice2_GetObjectInfo(p,a,b,c) (p)->GetObjectInfo(a,b,c) #define IDirectInputDevice2_GetDeviceInfo(p,a) (p)->GetDeviceInfo(a) #define IDirectInputDevice2_RunControlPanel(p,a,b) (p)->RunControlPanel(a,b) #define IDirectInputDevice2_Initialize(p,a,b,c) (p)->Initialize(a,b,c) #define IDirectInputDevice2_CreateEffect(p,a,b,c,d) (p)->CreateEffect(a,b,c,d) #define IDirectInputDevice2_EnumEffects(p,a,b,c) (p)->EnumEffects(a,b,c) #define IDirectInputDevice2_GetEffectInfo(p,a,b) (p)->GetEffectInfo(a,b) #define IDirectInputDevice2_GetForceFeedbackState(p,a) (p)->GetForceFeedbackState(a) #define IDirectInputDevice2_SendForceFeedbackCommand(p,a) (p)->SendForceFeedbackCommand(a) #define IDirectInputDevice2_EnumCreatedEffectObjects(p,a,b,c) (p)->EnumCreatedEffectObjects(a,b,c) #define IDirectInputDevice2_Escape(p,a) (p)->Escape(a) #define IDirectInputDevice2_Poll(p) (p)->Poll() #define IDirectInputDevice2_SendDeviceData(p,a,b,c,d) (p)->SendDeviceData(a,b,c,d) #endif #endif /* DIJ_RINGZERO */ #endif /* DIRECTINPUT_VERSION >= 0x0500 */ #if(DIRECTINPUT_VERSION >= 0x0700) #define DIFEF_DEFAULT 0x00000000 #define DIFEF_INCLUDENONSTANDARD 0x00000001 #define DIFEF_MODIFYIFNEEDED 0x00000010 #ifndef DIJ_RINGZERO #undef INTERFACE #define INTERFACE IDirectInputDevice7W DECLARE_INTERFACE_(IDirectInputDevice7W, IDirectInputDevice2W) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectInputDevice2W methods ***/ STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS) PURE; STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKW,LPVOID,DWORD) PURE; STDMETHOD(GetProperty)(THIS_ REFGUID,LPDIPROPHEADER) PURE; STDMETHOD(SetProperty)(THIS_ REFGUID,LPCDIPROPHEADER) PURE; STDMETHOD(Acquire)(THIS) PURE; STDMETHOD(Unacquire)(THIS) PURE; STDMETHOD(GetDeviceState)(THIS_ DWORD,LPVOID) PURE; STDMETHOD(GetDeviceData)(THIS_ DWORD,LPDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE; STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT) PURE; STDMETHOD(SetEventNotification)(THIS_ HANDLE) PURE; STDMETHOD(SetCooperativeLevel)(THIS_ HWND,DWORD) PURE; STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEW,DWORD,DWORD) PURE; STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEW) PURE; STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE; STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD,REFGUID) PURE; STDMETHOD(CreateEffect)(THIS_ REFGUID,LPCDIEFFECT,LPDIRECTINPUTEFFECT *,LPUNKNOWN) PURE; STDMETHOD(EnumEffects)(THIS_ LPDIENUMEFFECTSCALLBACKW,LPVOID,DWORD) PURE; STDMETHOD(GetEffectInfo)(THIS_ LPDIEFFECTINFOW,REFGUID) PURE; STDMETHOD(GetForceFeedbackState)(THIS_ LPDWORD) PURE; STDMETHOD(SendForceFeedbackCommand)(THIS_ DWORD) PURE; STDMETHOD(EnumCreatedEffectObjects)(THIS_ LPDIENUMCREATEDEFFECTOBJECTSCALLBACK,LPVOID,DWORD) PURE; STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE) PURE; STDMETHOD(Poll)(THIS) PURE; STDMETHOD(SendDeviceData)(THIS_ DWORD,LPCDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE; /*** IDirectInputDevice7W methods ***/ STDMETHOD(EnumEffectsInFile)(THIS_ LPCWSTR,LPDIENUMEFFECTSINFILECALLBACK,LPVOID,DWORD) PURE; STDMETHOD(WriteEffectToFile)(THIS_ LPCWSTR,DWORD,LPDIFILEEFFECT,DWORD) PURE; }; typedef struct IDirectInputDevice7W *LPDIRECTINPUTDEVICE7W; #undef INTERFACE #define INTERFACE IDirectInputDevice7A DECLARE_INTERFACE_(IDirectInputDevice7A, IDirectInputDevice2A) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectInputDevice2A methods ***/ STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS) PURE; STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKA,LPVOID,DWORD) PURE; STDMETHOD(GetProperty)(THIS_ REFGUID,LPDIPROPHEADER) PURE; STDMETHOD(SetProperty)(THIS_ REFGUID,LPCDIPROPHEADER) PURE; STDMETHOD(Acquire)(THIS) PURE; STDMETHOD(Unacquire)(THIS) PURE; STDMETHOD(GetDeviceState)(THIS_ DWORD,LPVOID) PURE; STDMETHOD(GetDeviceData)(THIS_ DWORD,LPDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE; STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT) PURE; STDMETHOD(SetEventNotification)(THIS_ HANDLE) PURE; STDMETHOD(SetCooperativeLevel)(THIS_ HWND,DWORD) PURE; STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEA,DWORD,DWORD) PURE; STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEA) PURE; STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE; STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD,REFGUID) PURE; STDMETHOD(CreateEffect)(THIS_ REFGUID,LPCDIEFFECT,LPDIRECTINPUTEFFECT *,LPUNKNOWN) PURE; STDMETHOD(EnumEffects)(THIS_ LPDIENUMEFFECTSCALLBACKA,LPVOID,DWORD) PURE; STDMETHOD(GetEffectInfo)(THIS_ LPDIEFFECTINFOA,REFGUID) PURE; STDMETHOD(GetForceFeedbackState)(THIS_ LPDWORD) PURE; STDMETHOD(SendForceFeedbackCommand)(THIS_ DWORD) PURE; STDMETHOD(EnumCreatedEffectObjects)(THIS_ LPDIENUMCREATEDEFFECTOBJECTSCALLBACK,LPVOID,DWORD) PURE; STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE) PURE; STDMETHOD(Poll)(THIS) PURE; STDMETHOD(SendDeviceData)(THIS_ DWORD,LPCDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE; /*** IDirectInputDevice7A methods ***/ STDMETHOD(EnumEffectsInFile)(THIS_ LPCSTR,LPDIENUMEFFECTSINFILECALLBACK,LPVOID,DWORD) PURE; STDMETHOD(WriteEffectToFile)(THIS_ LPCSTR,DWORD,LPDIFILEEFFECT,DWORD) PURE; }; typedef struct IDirectInputDevice7A *LPDIRECTINPUTDEVICE7A; #ifdef UNICODE #define IID_IDirectInputDevice7 IID_IDirectInputDevice7W #define IDirectInputDevice7 IDirectInputDevice7W #define IDirectInputDevice7Vtbl IDirectInputDevice7WVtbl #else #define IID_IDirectInputDevice7 IID_IDirectInputDevice7A #define IDirectInputDevice7 IDirectInputDevice7A #define IDirectInputDevice7Vtbl IDirectInputDevice7AVtbl #endif typedef struct IDirectInputDevice7 *LPDIRECTINPUTDEVICE7; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirectInputDevice7_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectInputDevice7_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectInputDevice7_Release(p) (p)->lpVtbl->Release(p) #define IDirectInputDevice7_GetCapabilities(p,a) (p)->lpVtbl->GetCapabilities(p,a) #define IDirectInputDevice7_EnumObjects(p,a,b,c) (p)->lpVtbl->EnumObjects(p,a,b,c) #define IDirectInputDevice7_GetProperty(p,a,b) (p)->lpVtbl->GetProperty(p,a,b) #define IDirectInputDevice7_SetProperty(p,a,b) (p)->lpVtbl->SetProperty(p,a,b) #define IDirectInputDevice7_Acquire(p) (p)->lpVtbl->Acquire(p) #define IDirectInputDevice7_Unacquire(p) (p)->lpVtbl->Unacquire(p) #define IDirectInputDevice7_GetDeviceState(p,a,b) (p)->lpVtbl->GetDeviceState(p,a,b) #define IDirectInputDevice7_GetDeviceData(p,a,b,c,d) (p)->lpVtbl->GetDeviceData(p,a,b,c,d) #define IDirectInputDevice7_SetDataFormat(p,a) (p)->lpVtbl->SetDataFormat(p,a) #define IDirectInputDevice7_SetEventNotification(p,a) (p)->lpVtbl->SetEventNotification(p,a) #define IDirectInputDevice7_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b) #define IDirectInputDevice7_GetObjectInfo(p,a,b,c) (p)->lpVtbl->GetObjectInfo(p,a,b,c) #define IDirectInputDevice7_GetDeviceInfo(p,a) (p)->lpVtbl->GetDeviceInfo(p,a) #define IDirectInputDevice7_RunControlPanel(p,a,b) (p)->lpVtbl->RunControlPanel(p,a,b) #define IDirectInputDevice7_Initialize(p,a,b,c) (p)->lpVtbl->Initialize(p,a,b,c) #define IDirectInputDevice7_CreateEffect(p,a,b,c,d) (p)->lpVtbl->CreateEffect(p,a,b,c,d) #define IDirectInputDevice7_EnumEffects(p,a,b,c) (p)->lpVtbl->EnumEffects(p,a,b,c) #define IDirectInputDevice7_GetEffectInfo(p,a,b) (p)->lpVtbl->GetEffectInfo(p,a,b) #define IDirectInputDevice7_GetForceFeedbackState(p,a) (p)->lpVtbl->GetForceFeedbackState(p,a) #define IDirectInputDevice7_SendForceFeedbackCommand(p,a) (p)->lpVtbl->SendForceFeedbackCommand(p,a) #define IDirectInputDevice7_EnumCreatedEffectObjects(p,a,b,c) (p)->lpVtbl->EnumCreatedEffectObjects(p,a,b,c) #define IDirectInputDevice7_Escape(p,a) (p)->lpVtbl->Escape(p,a) #define IDirectInputDevice7_Poll(p) (p)->lpVtbl->Poll(p) #define IDirectInputDevice7_SendDeviceData(p,a,b,c,d) (p)->lpVtbl->SendDeviceData(p,a,b,c,d) #define IDirectInputDevice7_EnumEffectsInFile(p,a,b,c,d) (p)->lpVtbl->EnumEffectsInFile(p,a,b,c,d) #define IDirectInputDevice7_WriteEffectToFile(p,a,b,c,d) (p)->lpVtbl->WriteEffectToFile(p,a,b,c,d) #else #define IDirectInputDevice7_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirectInputDevice7_AddRef(p) (p)->AddRef() #define IDirectInputDevice7_Release(p) (p)->Release() #define IDirectInputDevice7_GetCapabilities(p,a) (p)->GetCapabilities(a) #define IDirectInputDevice7_EnumObjects(p,a,b,c) (p)->EnumObjects(a,b,c) #define IDirectInputDevice7_GetProperty(p,a,b) (p)->GetProperty(a,b) #define IDirectInputDevice7_SetProperty(p,a,b) (p)->SetProperty(a,b) #define IDirectInputDevice7_Acquire(p) (p)->Acquire() #define IDirectInputDevice7_Unacquire(p) (p)->Unacquire() #define IDirectInputDevice7_GetDeviceState(p,a,b) (p)->GetDeviceState(a,b) #define IDirectInputDevice7_GetDeviceData(p,a,b,c,d) (p)->GetDeviceData(a,b,c,d) #define IDirectInputDevice7_SetDataFormat(p,a) (p)->SetDataFormat(a) #define IDirectInputDevice7_SetEventNotification(p,a) (p)->SetEventNotification(a) #define IDirectInputDevice7_SetCooperativeLevel(p,a,b) (p)->SetCooperativeLevel(a,b) #define IDirectInputDevice7_GetObjectInfo(p,a,b,c) (p)->GetObjectInfo(a,b,c) #define IDirectInputDevice7_GetDeviceInfo(p,a) (p)->GetDeviceInfo(a) #define IDirectInputDevice7_RunControlPanel(p,a,b) (p)->RunControlPanel(a,b) #define IDirectInputDevice7_Initialize(p,a,b,c) (p)->Initialize(a,b,c) #define IDirectInputDevice7_CreateEffect(p,a,b,c,d) (p)->CreateEffect(a,b,c,d) #define IDirectInputDevice7_EnumEffects(p,a,b,c) (p)->EnumEffects(a,b,c) #define IDirectInputDevice7_GetEffectInfo(p,a,b) (p)->GetEffectInfo(a,b) #define IDirectInputDevice7_GetForceFeedbackState(p,a) (p)->GetForceFeedbackState(a) #define IDirectInputDevice7_SendForceFeedbackCommand(p,a) (p)->SendForceFeedbackCommand(a) #define IDirectInputDevice7_EnumCreatedEffectObjects(p,a,b,c) (p)->EnumCreatedEffectObjects(a,b,c) #define IDirectInputDevice7_Escape(p,a) (p)->Escape(a) #define IDirectInputDevice7_Poll(p) (p)->Poll() #define IDirectInputDevice7_SendDeviceData(p,a,b,c,d) (p)->SendDeviceData(a,b,c,d) #define IDirectInputDevice7_EnumEffectsInFile(p,a,b,c,d) (p)->EnumEffectsInFile(a,b,c,d) #define IDirectInputDevice7_WriteEffectToFile(p,a,b,c,d) (p)->WriteEffectToFile(a,b,c,d) #endif #endif /* DIJ_RINGZERO */ #endif /* DIRECTINPUT_VERSION >= 0x0700 */ #if(DIRECTINPUT_VERSION >= 0x0800) #ifndef DIJ_RINGZERO #undef INTERFACE #define INTERFACE IDirectInputDevice8W DECLARE_INTERFACE_(IDirectInputDevice8W, IUnknown) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectInputDevice8W methods ***/ STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS) PURE; STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKW,LPVOID,DWORD) PURE; STDMETHOD(GetProperty)(THIS_ REFGUID,LPDIPROPHEADER) PURE; STDMETHOD(SetProperty)(THIS_ REFGUID,LPCDIPROPHEADER) PURE; STDMETHOD(Acquire)(THIS) PURE; STDMETHOD(Unacquire)(THIS) PURE; STDMETHOD(GetDeviceState)(THIS_ DWORD,LPVOID) PURE; STDMETHOD(GetDeviceData)(THIS_ DWORD,LPDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE; STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT) PURE; STDMETHOD(SetEventNotification)(THIS_ HANDLE) PURE; STDMETHOD(SetCooperativeLevel)(THIS_ HWND,DWORD) PURE; STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEW,DWORD,DWORD) PURE; STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEW) PURE; STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE; STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD,REFGUID) PURE; STDMETHOD(CreateEffect)(THIS_ REFGUID,LPCDIEFFECT,LPDIRECTINPUTEFFECT *,LPUNKNOWN) PURE; STDMETHOD(EnumEffects)(THIS_ LPDIENUMEFFECTSCALLBACKW,LPVOID,DWORD) PURE; STDMETHOD(GetEffectInfo)(THIS_ LPDIEFFECTINFOW,REFGUID) PURE; STDMETHOD(GetForceFeedbackState)(THIS_ LPDWORD) PURE; STDMETHOD(SendForceFeedbackCommand)(THIS_ DWORD) PURE; STDMETHOD(EnumCreatedEffectObjects)(THIS_ LPDIENUMCREATEDEFFECTOBJECTSCALLBACK,LPVOID,DWORD) PURE; STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE) PURE; STDMETHOD(Poll)(THIS) PURE; STDMETHOD(SendDeviceData)(THIS_ DWORD,LPCDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE; STDMETHOD(EnumEffectsInFile)(THIS_ LPCWSTR,LPDIENUMEFFECTSINFILECALLBACK,LPVOID,DWORD) PURE; STDMETHOD(WriteEffectToFile)(THIS_ LPCWSTR,DWORD,LPDIFILEEFFECT,DWORD) PURE; STDMETHOD(BuildActionMap)(THIS_ LPDIACTIONFORMATW,LPCWSTR,DWORD) PURE; STDMETHOD(SetActionMap)(THIS_ LPDIACTIONFORMATW,LPCWSTR,DWORD) PURE; STDMETHOD(GetImageInfo)(THIS_ LPDIDEVICEIMAGEINFOHEADERW) PURE; }; typedef struct IDirectInputDevice8W *LPDIRECTINPUTDEVICE8W; #undef INTERFACE #define INTERFACE IDirectInputDevice8A DECLARE_INTERFACE_(IDirectInputDevice8A, IUnknown) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectInputDevice8A methods ***/ STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS) PURE; STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKA,LPVOID,DWORD) PURE; STDMETHOD(GetProperty)(THIS_ REFGUID,LPDIPROPHEADER) PURE; STDMETHOD(SetProperty)(THIS_ REFGUID,LPCDIPROPHEADER) PURE; STDMETHOD(Acquire)(THIS) PURE; STDMETHOD(Unacquire)(THIS) PURE; STDMETHOD(GetDeviceState)(THIS_ DWORD,LPVOID) PURE; STDMETHOD(GetDeviceData)(THIS_ DWORD,LPDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE; STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT) PURE; STDMETHOD(SetEventNotification)(THIS_ HANDLE) PURE; STDMETHOD(SetCooperativeLevel)(THIS_ HWND,DWORD) PURE; STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEA,DWORD,DWORD) PURE; STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEA) PURE; STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE; STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD,REFGUID) PURE; STDMETHOD(CreateEffect)(THIS_ REFGUID,LPCDIEFFECT,LPDIRECTINPUTEFFECT *,LPUNKNOWN) PURE; STDMETHOD(EnumEffects)(THIS_ LPDIENUMEFFECTSCALLBACKA,LPVOID,DWORD) PURE; STDMETHOD(GetEffectInfo)(THIS_ LPDIEFFECTINFOA,REFGUID) PURE; STDMETHOD(GetForceFeedbackState)(THIS_ LPDWORD) PURE; STDMETHOD(SendForceFeedbackCommand)(THIS_ DWORD) PURE; STDMETHOD(EnumCreatedEffectObjects)(THIS_ LPDIENUMCREATEDEFFECTOBJECTSCALLBACK,LPVOID,DWORD) PURE; STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE) PURE; STDMETHOD(Poll)(THIS) PURE; STDMETHOD(SendDeviceData)(THIS_ DWORD,LPCDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE; STDMETHOD(EnumEffectsInFile)(THIS_ LPCSTR,LPDIENUMEFFECTSINFILECALLBACK,LPVOID,DWORD) PURE; STDMETHOD(WriteEffectToFile)(THIS_ LPCSTR,DWORD,LPDIFILEEFFECT,DWORD) PURE; STDMETHOD(BuildActionMap)(THIS_ LPDIACTIONFORMATA,LPCSTR,DWORD) PURE; STDMETHOD(SetActionMap)(THIS_ LPDIACTIONFORMATA,LPCSTR,DWORD) PURE; STDMETHOD(GetImageInfo)(THIS_ LPDIDEVICEIMAGEINFOHEADERA) PURE; }; typedef struct IDirectInputDevice8A *LPDIRECTINPUTDEVICE8A; #ifdef UNICODE #define IID_IDirectInputDevice8 IID_IDirectInputDevice8W #define IDirectInputDevice8 IDirectInputDevice8W #define IDirectInputDevice8Vtbl IDirectInputDevice8WVtbl #else #define IID_IDirectInputDevice8 IID_IDirectInputDevice8A #define IDirectInputDevice8 IDirectInputDevice8A #define IDirectInputDevice8Vtbl IDirectInputDevice8AVtbl #endif typedef struct IDirectInputDevice8 *LPDIRECTINPUTDEVICE8; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirectInputDevice8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectInputDevice8_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectInputDevice8_Release(p) (p)->lpVtbl->Release(p) #define IDirectInputDevice8_GetCapabilities(p,a) (p)->lpVtbl->GetCapabilities(p,a) #define IDirectInputDevice8_EnumObjects(p,a,b,c) (p)->lpVtbl->EnumObjects(p,a,b,c) #define IDirectInputDevice8_GetProperty(p,a,b) (p)->lpVtbl->GetProperty(p,a,b) #define IDirectInputDevice8_SetProperty(p,a,b) (p)->lpVtbl->SetProperty(p,a,b) #define IDirectInputDevice8_Acquire(p) (p)->lpVtbl->Acquire(p) #define IDirectInputDevice8_Unacquire(p) (p)->lpVtbl->Unacquire(p) #define IDirectInputDevice8_GetDeviceState(p,a,b) (p)->lpVtbl->GetDeviceState(p,a,b) #define IDirectInputDevice8_GetDeviceData(p,a,b,c,d) (p)->lpVtbl->GetDeviceData(p,a,b,c,d) #define IDirectInputDevice8_SetDataFormat(p,a) (p)->lpVtbl->SetDataFormat(p,a) #define IDirectInputDevice8_SetEventNotification(p,a) (p)->lpVtbl->SetEventNotification(p,a) #define IDirectInputDevice8_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b) #define IDirectInputDevice8_GetObjectInfo(p,a,b,c) (p)->lpVtbl->GetObjectInfo(p,a,b,c) #define IDirectInputDevice8_GetDeviceInfo(p,a) (p)->lpVtbl->GetDeviceInfo(p,a) #define IDirectInputDevice8_RunControlPanel(p,a,b) (p)->lpVtbl->RunControlPanel(p,a,b) #define IDirectInputDevice8_Initialize(p,a,b,c) (p)->lpVtbl->Initialize(p,a,b,c) #define IDirectInputDevice8_CreateEffect(p,a,b,c,d) (p)->lpVtbl->CreateEffect(p,a,b,c,d) #define IDirectInputDevice8_EnumEffects(p,a,b,c) (p)->lpVtbl->EnumEffects(p,a,b,c) #define IDirectInputDevice8_GetEffectInfo(p,a,b) (p)->lpVtbl->GetEffectInfo(p,a,b) #define IDirectInputDevice8_GetForceFeedbackState(p,a) (p)->lpVtbl->GetForceFeedbackState(p,a) #define IDirectInputDevice8_SendForceFeedbackCommand(p,a) (p)->lpVtbl->SendForceFeedbackCommand(p,a) #define IDirectInputDevice8_EnumCreatedEffectObjects(p,a,b,c) (p)->lpVtbl->EnumCreatedEffectObjects(p,a,b,c) #define IDirectInputDevice8_Escape(p,a) (p)->lpVtbl->Escape(p,a) #define IDirectInputDevice8_Poll(p) (p)->lpVtbl->Poll(p) #define IDirectInputDevice8_SendDeviceData(p,a,b,c,d) (p)->lpVtbl->SendDeviceData(p,a,b,c,d) #define IDirectInputDevice8_EnumEffectsInFile(p,a,b,c,d) (p)->lpVtbl->EnumEffectsInFile(p,a,b,c,d) #define IDirectInputDevice8_WriteEffectToFile(p,a,b,c,d) (p)->lpVtbl->WriteEffectToFile(p,a,b,c,d) #define IDirectInputDevice8_BuildActionMap(p,a,b,c) (p)->lpVtbl->BuildActionMap(p,a,b,c) #define IDirectInputDevice8_SetActionMap(p,a,b,c) (p)->lpVtbl->SetActionMap(p,a,b,c) #define IDirectInputDevice8_GetImageInfo(p,a) (p)->lpVtbl->GetImageInfo(p,a) #else #define IDirectInputDevice8_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirectInputDevice8_AddRef(p) (p)->AddRef() #define IDirectInputDevice8_Release(p) (p)->Release() #define IDirectInputDevice8_GetCapabilities(p,a) (p)->GetCapabilities(a) #define IDirectInputDevice8_EnumObjects(p,a,b,c) (p)->EnumObjects(a,b,c) #define IDirectInputDevice8_GetProperty(p,a,b) (p)->GetProperty(a,b) #define IDirectInputDevice8_SetProperty(p,a,b) (p)->SetProperty(a,b) #define IDirectInputDevice8_Acquire(p) (p)->Acquire() #define IDirectInputDevice8_Unacquire(p) (p)->Unacquire() #define IDirectInputDevice8_GetDeviceState(p,a,b) (p)->GetDeviceState(a,b) #define IDirectInputDevice8_GetDeviceData(p,a,b,c,d) (p)->GetDeviceData(a,b,c,d) #define IDirectInputDevice8_SetDataFormat(p,a) (p)->SetDataFormat(a) #define IDirectInputDevice8_SetEventNotification(p,a) (p)->SetEventNotification(a) #define IDirectInputDevice8_SetCooperativeLevel(p,a,b) (p)->SetCooperativeLevel(a,b) #define IDirectInputDevice8_GetObjectInfo(p,a,b,c) (p)->GetObjectInfo(a,b,c) #define IDirectInputDevice8_GetDeviceInfo(p,a) (p)->GetDeviceInfo(a) #define IDirectInputDevice8_RunControlPanel(p,a,b) (p)->RunControlPanel(a,b) #define IDirectInputDevice8_Initialize(p,a,b,c) (p)->Initialize(a,b,c) #define IDirectInputDevice8_CreateEffect(p,a,b,c,d) (p)->CreateEffect(a,b,c,d) #define IDirectInputDevice8_EnumEffects(p,a,b,c) (p)->EnumEffects(a,b,c) #define IDirectInputDevice8_GetEffectInfo(p,a,b) (p)->GetEffectInfo(a,b) #define IDirectInputDevice8_GetForceFeedbackState(p,a) (p)->GetForceFeedbackState(a) #define IDirectInputDevice8_SendForceFeedbackCommand(p,a) (p)->SendForceFeedbackCommand(a) #define IDirectInputDevice8_EnumCreatedEffectObjects(p,a,b,c) (p)->EnumCreatedEffectObjects(a,b,c) #define IDirectInputDevice8_Escape(p,a) (p)->Escape(a) #define IDirectInputDevice8_Poll(p) (p)->Poll() #define IDirectInputDevice8_SendDeviceData(p,a,b,c,d) (p)->SendDeviceData(a,b,c,d) #define IDirectInputDevice8_EnumEffectsInFile(p,a,b,c,d) (p)->EnumEffectsInFile(a,b,c,d) #define IDirectInputDevice8_WriteEffectToFile(p,a,b,c,d) (p)->WriteEffectToFile(a,b,c,d) #define IDirectInputDevice8_BuildActionMap(p,a,b,c) (p)->BuildActionMap(a,b,c) #define IDirectInputDevice8_SetActionMap(p,a,b,c) (p)->SetActionMap(a,b,c) #define IDirectInputDevice8_GetImageInfo(p,a) (p)->GetImageInfo(a) #endif #endif /* DIJ_RINGZERO */ #endif /* DIRECTINPUT_VERSION >= 0x0800 */ /**************************************************************************** * * Mouse * ****************************************************************************/ #ifndef DIJ_RINGZERO typedef struct _DIMOUSESTATE { LONG lX; LONG lY; LONG lZ; BYTE rgbButtons[4]; } DIMOUSESTATE, *LPDIMOUSESTATE; #if DIRECTINPUT_VERSION >= 0x0700 typedef struct _DIMOUSESTATE2 { LONG lX; LONG lY; LONG lZ; BYTE rgbButtons[8]; } DIMOUSESTATE2, *LPDIMOUSESTATE2; #endif #define DIMOFS_X FIELD_OFFSET(DIMOUSESTATE, lX) #define DIMOFS_Y FIELD_OFFSET(DIMOUSESTATE, lY) #define DIMOFS_Z FIELD_OFFSET(DIMOUSESTATE, lZ) #define DIMOFS_BUTTON0 (FIELD_OFFSET(DIMOUSESTATE, rgbButtons) + 0) #define DIMOFS_BUTTON1 (FIELD_OFFSET(DIMOUSESTATE, rgbButtons) + 1) #define DIMOFS_BUTTON2 (FIELD_OFFSET(DIMOUSESTATE, rgbButtons) + 2) #define DIMOFS_BUTTON3 (FIELD_OFFSET(DIMOUSESTATE, rgbButtons) + 3) #if (DIRECTINPUT_VERSION >= 0x0700) #define DIMOFS_BUTTON4 (FIELD_OFFSET(DIMOUSESTATE2, rgbButtons) + 4) #define DIMOFS_BUTTON5 (FIELD_OFFSET(DIMOUSESTATE2, rgbButtons) + 5) #define DIMOFS_BUTTON6 (FIELD_OFFSET(DIMOUSESTATE2, rgbButtons) + 6) #define DIMOFS_BUTTON7 (FIELD_OFFSET(DIMOUSESTATE2, rgbButtons) + 7) #endif #endif /* DIJ_RINGZERO */ /**************************************************************************** * * Keyboard * ****************************************************************************/ #ifndef DIJ_RINGZERO /**************************************************************************** * * DirectInput keyboard scan codes * ****************************************************************************/ #define DIK_ESCAPE 0x01 #define DIK_1 0x02 #define DIK_2 0x03 #define DIK_3 0x04 #define DIK_4 0x05 #define DIK_5 0x06 #define DIK_6 0x07 #define DIK_7 0x08 #define DIK_8 0x09 #define DIK_9 0x0A #define DIK_0 0x0B #define DIK_MINUS 0x0C /* - on main keyboard */ #define DIK_EQUALS 0x0D #define DIK_BACK 0x0E /* backspace */ #define DIK_TAB 0x0F #define DIK_Q 0x10 #define DIK_W 0x11 #define DIK_E 0x12 #define DIK_R 0x13 #define DIK_T 0x14 #define DIK_Y 0x15 #define DIK_U 0x16 #define DIK_I 0x17 #define DIK_O 0x18 #define DIK_P 0x19 #define DIK_LBRACKET 0x1A #define DIK_RBRACKET 0x1B #define DIK_RETURN 0x1C /* Enter on main keyboard */ #define DIK_LCONTROL 0x1D #define DIK_A 0x1E #define DIK_S 0x1F #define DIK_D 0x20 #define DIK_F 0x21 #define DIK_G 0x22 #define DIK_H 0x23 #define DIK_J 0x24 #define DIK_K 0x25 #define DIK_L 0x26 #define DIK_SEMICOLON 0x27 #define DIK_APOSTROPHE 0x28 #define DIK_GRAVE 0x29 /* accent grave */ #define DIK_LSHIFT 0x2A #define DIK_BACKSLASH 0x2B #define DIK_Z 0x2C #define DIK_X 0x2D #define DIK_C 0x2E #define DIK_V 0x2F #define DIK_B 0x30 #define DIK_N 0x31 #define DIK_M 0x32 #define DIK_COMMA 0x33 #define DIK_PERIOD 0x34 /* . on main keyboard */ #define DIK_SLASH 0x35 /* / on main keyboard */ #define DIK_RSHIFT 0x36 #define DIK_MULTIPLY 0x37 /* * on numeric keypad */ #define DIK_LMENU 0x38 /* left Alt */ #define DIK_SPACE 0x39 #define DIK_CAPITAL 0x3A #define DIK_F1 0x3B #define DIK_F2 0x3C #define DIK_F3 0x3D #define DIK_F4 0x3E #define DIK_F5 0x3F #define DIK_F6 0x40 #define DIK_F7 0x41 #define DIK_F8 0x42 #define DIK_F9 0x43 #define DIK_F10 0x44 #define DIK_NUMLOCK 0x45 #define DIK_SCROLL 0x46 /* Scroll Lock */ #define DIK_NUMPAD7 0x47 #define DIK_NUMPAD8 0x48 #define DIK_NUMPAD9 0x49 #define DIK_SUBTRACT 0x4A /* - on numeric keypad */ #define DIK_NUMPAD4 0x4B #define DIK_NUMPAD5 0x4C #define DIK_NUMPAD6 0x4D #define DIK_ADD 0x4E /* + on numeric keypad */ #define DIK_NUMPAD1 0x4F #define DIK_NUMPAD2 0x50 #define DIK_NUMPAD3 0x51 #define DIK_NUMPAD0 0x52 #define DIK_DECIMAL 0x53 /* . on numeric keypad */ #define DIK_OEM_102 0x56 /* <> or \| on RT 102-key keyboard (Non-U.S.) */ #define DIK_F11 0x57 #define DIK_F12 0x58 #define DIK_F13 0x64 /* (NEC PC98) */ #define DIK_F14 0x65 /* (NEC PC98) */ #define DIK_F15 0x66 /* (NEC PC98) */ #define DIK_KANA 0x70 /* (Japanese keyboard) */ #define DIK_ABNT_C1 0x73 /* /? on Brazilian keyboard */ #define DIK_CONVERT 0x79 /* (Japanese keyboard) */ #define DIK_NOCONVERT 0x7B /* (Japanese keyboard) */ #define DIK_YEN 0x7D /* (Japanese keyboard) */ #define DIK_ABNT_C2 0x7E /* Numpad . on Brazilian keyboard */ #define DIK_NUMPADEQUALS 0x8D /* = on numeric keypad (NEC PC98) */ #define DIK_PREVTRACK 0x90 /* Previous Track (DIK_CIRCUMFLEX on Japanese keyboard) */ #define DIK_AT 0x91 /* (NEC PC98) */ #define DIK_COLON 0x92 /* (NEC PC98) */ #define DIK_UNDERLINE 0x93 /* (NEC PC98) */ #define DIK_KANJI 0x94 /* (Japanese keyboard) */ #define DIK_STOP 0x95 /* (NEC PC98) */ #define DIK_AX 0x96 /* (Japan AX) */ #define DIK_UNLABELED 0x97 /* (J3100) */ #define DIK_NEXTTRACK 0x99 /* Next Track */ #define DIK_NUMPADENTER 0x9C /* Enter on numeric keypad */ #define DIK_RCONTROL 0x9D #define DIK_MUTE 0xA0 /* Mute */ #define DIK_CALCULATOR 0xA1 /* Calculator */ #define DIK_PLAYPAUSE 0xA2 /* Play / Pause */ #define DIK_MEDIASTOP 0xA4 /* Media Stop */ #define DIK_VOLUMEDOWN 0xAE /* Volume - */ #define DIK_VOLUMEUP 0xB0 /* Volume + */ #define DIK_WEBHOME 0xB2 /* Web home */ #define DIK_NUMPADCOMMA 0xB3 /* , on numeric keypad (NEC PC98) */ #define DIK_DIVIDE 0xB5 /* / on numeric keypad */ #define DIK_SYSRQ 0xB7 #define DIK_RMENU 0xB8 /* right Alt */ #define DIK_PAUSE 0xC5 /* Pause */ #define DIK_HOME 0xC7 /* Home on arrow keypad */ #define DIK_UP 0xC8 /* UpArrow on arrow keypad */ #define DIK_PRIOR 0xC9 /* PgUp on arrow keypad */ #define DIK_LEFT 0xCB /* LeftArrow on arrow keypad */ #define DIK_RIGHT 0xCD /* RightArrow on arrow keypad */ #define DIK_END 0xCF /* End on arrow keypad */ #define DIK_DOWN 0xD0 /* DownArrow on arrow keypad */ #define DIK_NEXT 0xD1 /* PgDn on arrow keypad */ #define DIK_INSERT 0xD2 /* Insert on arrow keypad */ #define DIK_DELETE 0xD3 /* Delete on arrow keypad */ #define DIK_LWIN 0xDB /* Left Windows key */ #define DIK_RWIN 0xDC /* Right Windows key */ #define DIK_APPS 0xDD /* AppMenu key */ #define DIK_POWER 0xDE /* System Power */ #define DIK_SLEEP 0xDF /* System Sleep */ #define DIK_WAKE 0xE3 /* System Wake */ #define DIK_WEBSEARCH 0xE5 /* Web Search */ #define DIK_WEBFAVORITES 0xE6 /* Web Favorites */ #define DIK_WEBREFRESH 0xE7 /* Web Refresh */ #define DIK_WEBSTOP 0xE8 /* Web Stop */ #define DIK_WEBFORWARD 0xE9 /* Web Forward */ #define DIK_WEBBACK 0xEA /* Web Back */ #define DIK_MYCOMPUTER 0xEB /* My Computer */ #define DIK_MAIL 0xEC /* Mail */ #define DIK_MEDIASELECT 0xED /* Media Select */ /* * Alternate names for keys, to facilitate transition from DOS. */ #define DIK_BACKSPACE DIK_BACK /* backspace */ #define DIK_NUMPADSTAR DIK_MULTIPLY /* * on numeric keypad */ #define DIK_LALT DIK_LMENU /* left Alt */ #define DIK_CAPSLOCK DIK_CAPITAL /* CapsLock */ #define DIK_NUMPADMINUS DIK_SUBTRACT /* - on numeric keypad */ #define DIK_NUMPADPLUS DIK_ADD /* + on numeric keypad */ #define DIK_NUMPADPERIOD DIK_DECIMAL /* . on numeric keypad */ #define DIK_NUMPADSLASH DIK_DIVIDE /* / on numeric keypad */ #define DIK_RALT DIK_RMENU /* right Alt */ #define DIK_UPARROW DIK_UP /* UpArrow on arrow keypad */ #define DIK_PGUP DIK_PRIOR /* PgUp on arrow keypad */ #define DIK_LEFTARROW DIK_LEFT /* LeftArrow on arrow keypad */ #define DIK_RIGHTARROW DIK_RIGHT /* RightArrow on arrow keypad */ #define DIK_DOWNARROW DIK_DOWN /* DownArrow on arrow keypad */ #define DIK_PGDN DIK_NEXT /* PgDn on arrow keypad */ /* * Alternate names for keys originally not used on US keyboards. */ #define DIK_CIRCUMFLEX DIK_PREVTRACK /* Japanese keyboard */ #endif /* DIJ_RINGZERO */ /**************************************************************************** * * Joystick * ****************************************************************************/ #ifndef DIJ_RINGZERO typedef struct DIJOYSTATE { LONG lX; /* x-axis position */ LONG lY; /* y-axis position */ LONG lZ; /* z-axis position */ LONG lRx; /* x-axis rotation */ LONG lRy; /* y-axis rotation */ LONG lRz; /* z-axis rotation */ LONG rglSlider[2]; /* extra axes positions */ DWORD rgdwPOV[4]; /* POV directions */ BYTE rgbButtons[32]; /* 32 buttons */ } DIJOYSTATE, *LPDIJOYSTATE; typedef struct DIJOYSTATE2 { LONG lX; /* x-axis position */ LONG lY; /* y-axis position */ LONG lZ; /* z-axis position */ LONG lRx; /* x-axis rotation */ LONG lRy; /* y-axis rotation */ LONG lRz; /* z-axis rotation */ LONG rglSlider[2]; /* extra axes positions */ DWORD rgdwPOV[4]; /* POV directions */ BYTE rgbButtons[128]; /* 128 buttons */ LONG lVX; /* x-axis velocity */ LONG lVY; /* y-axis velocity */ LONG lVZ; /* z-axis velocity */ LONG lVRx; /* x-axis angular velocity */ LONG lVRy; /* y-axis angular velocity */ LONG lVRz; /* z-axis angular velocity */ LONG rglVSlider[2]; /* extra axes velocities */ LONG lAX; /* x-axis acceleration */ LONG lAY; /* y-axis acceleration */ LONG lAZ; /* z-axis acceleration */ LONG lARx; /* x-axis angular acceleration */ LONG lARy; /* y-axis angular acceleration */ LONG lARz; /* z-axis angular acceleration */ LONG rglASlider[2]; /* extra axes accelerations */ LONG lFX; /* x-axis force */ LONG lFY; /* y-axis force */ LONG lFZ; /* z-axis force */ LONG lFRx; /* x-axis torque */ LONG lFRy; /* y-axis torque */ LONG lFRz; /* z-axis torque */ LONG rglFSlider[2]; /* extra axes forces */ } DIJOYSTATE2, *LPDIJOYSTATE2; #define DIJOFS_X FIELD_OFFSET(DIJOYSTATE, lX) #define DIJOFS_Y FIELD_OFFSET(DIJOYSTATE, lY) #define DIJOFS_Z FIELD_OFFSET(DIJOYSTATE, lZ) #define DIJOFS_RX FIELD_OFFSET(DIJOYSTATE, lRx) #define DIJOFS_RY FIELD_OFFSET(DIJOYSTATE, lRy) #define DIJOFS_RZ FIELD_OFFSET(DIJOYSTATE, lRz) #define DIJOFS_SLIDER(n) (FIELD_OFFSET(DIJOYSTATE, rglSlider) + \ (n) * sizeof(LONG)) #define DIJOFS_POV(n) (FIELD_OFFSET(DIJOYSTATE, rgdwPOV) + \ (n) * sizeof(DWORD)) #define DIJOFS_BUTTON(n) (FIELD_OFFSET(DIJOYSTATE, rgbButtons) + (n)) #define DIJOFS_BUTTON0 DIJOFS_BUTTON(0) #define DIJOFS_BUTTON1 DIJOFS_BUTTON(1) #define DIJOFS_BUTTON2 DIJOFS_BUTTON(2) #define DIJOFS_BUTTON3 DIJOFS_BUTTON(3) #define DIJOFS_BUTTON4 DIJOFS_BUTTON(4) #define DIJOFS_BUTTON5 DIJOFS_BUTTON(5) #define DIJOFS_BUTTON6 DIJOFS_BUTTON(6) #define DIJOFS_BUTTON7 DIJOFS_BUTTON(7) #define DIJOFS_BUTTON8 DIJOFS_BUTTON(8) #define DIJOFS_BUTTON9 DIJOFS_BUTTON(9) #define DIJOFS_BUTTON10 DIJOFS_BUTTON(10) #define DIJOFS_BUTTON11 DIJOFS_BUTTON(11) #define DIJOFS_BUTTON12 DIJOFS_BUTTON(12) #define DIJOFS_BUTTON13 DIJOFS_BUTTON(13) #define DIJOFS_BUTTON14 DIJOFS_BUTTON(14) #define DIJOFS_BUTTON15 DIJOFS_BUTTON(15) #define DIJOFS_BUTTON16 DIJOFS_BUTTON(16) #define DIJOFS_BUTTON17 DIJOFS_BUTTON(17) #define DIJOFS_BUTTON18 DIJOFS_BUTTON(18) #define DIJOFS_BUTTON19 DIJOFS_BUTTON(19) #define DIJOFS_BUTTON20 DIJOFS_BUTTON(20) #define DIJOFS_BUTTON21 DIJOFS_BUTTON(21) #define DIJOFS_BUTTON22 DIJOFS_BUTTON(22) #define DIJOFS_BUTTON23 DIJOFS_BUTTON(23) #define DIJOFS_BUTTON24 DIJOFS_BUTTON(24) #define DIJOFS_BUTTON25 DIJOFS_BUTTON(25) #define DIJOFS_BUTTON26 DIJOFS_BUTTON(26) #define DIJOFS_BUTTON27 DIJOFS_BUTTON(27) #define DIJOFS_BUTTON28 DIJOFS_BUTTON(28) #define DIJOFS_BUTTON29 DIJOFS_BUTTON(29) #define DIJOFS_BUTTON30 DIJOFS_BUTTON(30) #define DIJOFS_BUTTON31 DIJOFS_BUTTON(31) #endif /* DIJ_RINGZERO */ /**************************************************************************** * * IDirectInput * ****************************************************************************/ #ifndef DIJ_RINGZERO #define DIENUM_STOP 0 #define DIENUM_CONTINUE 1 typedef BOOL (FAR PASCAL * LPDIENUMDEVICESCALLBACKA)(LPCDIDEVICEINSTANCEA, LPVOID); typedef BOOL (FAR PASCAL * LPDIENUMDEVICESCALLBACKW)(LPCDIDEVICEINSTANCEW, LPVOID); #ifdef UNICODE #define LPDIENUMDEVICESCALLBACK LPDIENUMDEVICESCALLBACKW #else #define LPDIENUMDEVICESCALLBACK LPDIENUMDEVICESCALLBACKA #endif // !UNICODE typedef BOOL (FAR PASCAL * LPDICONFIGUREDEVICESCALLBACK)(IUnknown FAR *, LPVOID); #define DIEDFL_ALLDEVICES 0x00000000 #define DIEDFL_ATTACHEDONLY 0x00000001 #if(DIRECTINPUT_VERSION >= 0x0500) #define DIEDFL_FORCEFEEDBACK 0x00000100 #endif /* DIRECTINPUT_VERSION >= 0x0500 */ #if(DIRECTINPUT_VERSION >= 0x050a) #define DIEDFL_INCLUDEALIASES 0x00010000 #define DIEDFL_INCLUDEPHANTOMS 0x00020000 #endif /* DIRECTINPUT_VERSION >= 0x050a */ #if(DIRECTINPUT_VERSION >= 0x0800) #define DIEDFL_INCLUDEHIDDEN 0x00040000 #endif /* DIRECTINPUT_VERSION >= 0x0800 */ #if(DIRECTINPUT_VERSION >= 0x0800) typedef BOOL (FAR PASCAL * LPDIENUMDEVICESBYSEMANTICSCBA)(LPCDIDEVICEINSTANCEA, LPDIRECTINPUTDEVICE8A, DWORD, DWORD, LPVOID); typedef BOOL (FAR PASCAL * LPDIENUMDEVICESBYSEMANTICSCBW)(LPCDIDEVICEINSTANCEW, LPDIRECTINPUTDEVICE8W, DWORD, DWORD, LPVOID); #ifdef UNICODE #define LPDIENUMDEVICESBYSEMANTICSCB LPDIENUMDEVICESBYSEMANTICSCBW #else #define LPDIENUMDEVICESBYSEMANTICSCB LPDIENUMDEVICESBYSEMANTICSCBA #endif // !UNICODE #endif /* DIRECTINPUT_VERSION >= 0x0800 */ #if(DIRECTINPUT_VERSION >= 0x0800) #define DIEDBS_MAPPEDPRI1 0x00000001 #define DIEDBS_MAPPEDPRI2 0x00000002 #define DIEDBS_RECENTDEVICE 0x00000010 #define DIEDBS_NEWDEVICE 0x00000020 #endif /* DIRECTINPUT_VERSION >= 0x0800 */ #if(DIRECTINPUT_VERSION >= 0x0800) #define DIEDBSFL_ATTACHEDONLY 0x00000000 #define DIEDBSFL_THISUSER 0x00000010 #define DIEDBSFL_FORCEFEEDBACK DIEDFL_FORCEFEEDBACK #define DIEDBSFL_AVAILABLEDEVICES 0x00001000 #define DIEDBSFL_MULTIMICEKEYBOARDS 0x00002000 #define DIEDBSFL_NONGAMINGDEVICES 0x00004000 #define DIEDBSFL_VALID 0x00007110 #endif /* DIRECTINPUT_VERSION >= 0x0800 */ #undef INTERFACE #define INTERFACE IDirectInputW DECLARE_INTERFACE_(IDirectInputW, IUnknown) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectInputW methods ***/ STDMETHOD(CreateDevice)(THIS_ REFGUID,LPDIRECTINPUTDEVICEW *,LPUNKNOWN) PURE; STDMETHOD(EnumDevices)(THIS_ DWORD,LPDIENUMDEVICESCALLBACKW,LPVOID,DWORD) PURE; STDMETHOD(GetDeviceStatus)(THIS_ REFGUID) PURE; STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE; STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD) PURE; }; typedef struct IDirectInputW *LPDIRECTINPUTW; #undef INTERFACE #define INTERFACE IDirectInputA DECLARE_INTERFACE_(IDirectInputA, IUnknown) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectInputA methods ***/ STDMETHOD(CreateDevice)(THIS_ REFGUID,LPDIRECTINPUTDEVICEA *,LPUNKNOWN) PURE; STDMETHOD(EnumDevices)(THIS_ DWORD,LPDIENUMDEVICESCALLBACKA,LPVOID,DWORD) PURE; STDMETHOD(GetDeviceStatus)(THIS_ REFGUID) PURE; STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE; STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD) PURE; }; typedef struct IDirectInputA *LPDIRECTINPUTA; #ifdef UNICODE #define IID_IDirectInput IID_IDirectInputW #define IDirectInput IDirectInputW #define IDirectInputVtbl IDirectInputWVtbl #else #define IID_IDirectInput IID_IDirectInputA #define IDirectInput IDirectInputA #define IDirectInputVtbl IDirectInputAVtbl #endif typedef struct IDirectInput *LPDIRECTINPUT; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirectInput_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectInput_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectInput_Release(p) (p)->lpVtbl->Release(p) #define IDirectInput_CreateDevice(p,a,b,c) (p)->lpVtbl->CreateDevice(p,a,b,c) #define IDirectInput_EnumDevices(p,a,b,c,d) (p)->lpVtbl->EnumDevices(p,a,b,c,d) #define IDirectInput_GetDeviceStatus(p,a) (p)->lpVtbl->GetDeviceStatus(p,a) #define IDirectInput_RunControlPanel(p,a,b) (p)->lpVtbl->RunControlPanel(p,a,b) #define IDirectInput_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b) #else #define IDirectInput_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirectInput_AddRef(p) (p)->AddRef() #define IDirectInput_Release(p) (p)->Release() #define IDirectInput_CreateDevice(p,a,b,c) (p)->CreateDevice(a,b,c) #define IDirectInput_EnumDevices(p,a,b,c,d) (p)->EnumDevices(a,b,c,d) #define IDirectInput_GetDeviceStatus(p,a) (p)->GetDeviceStatus(a) #define IDirectInput_RunControlPanel(p,a,b) (p)->RunControlPanel(a,b) #define IDirectInput_Initialize(p,a,b) (p)->Initialize(a,b) #endif #undef INTERFACE #define INTERFACE IDirectInput2W DECLARE_INTERFACE_(IDirectInput2W, IDirectInputW) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectInputW methods ***/ STDMETHOD(CreateDevice)(THIS_ REFGUID,LPDIRECTINPUTDEVICEW *,LPUNKNOWN) PURE; STDMETHOD(EnumDevices)(THIS_ DWORD,LPDIENUMDEVICESCALLBACKW,LPVOID,DWORD) PURE; STDMETHOD(GetDeviceStatus)(THIS_ REFGUID) PURE; STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE; STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD) PURE; /*** IDirectInput2W methods ***/ STDMETHOD(FindDevice)(THIS_ REFGUID,LPCWSTR,LPGUID) PURE; }; typedef struct IDirectInput2W *LPDIRECTINPUT2W; #undef INTERFACE #define INTERFACE IDirectInput2A DECLARE_INTERFACE_(IDirectInput2A, IDirectInputA) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectInputA methods ***/ STDMETHOD(CreateDevice)(THIS_ REFGUID,LPDIRECTINPUTDEVICEA *,LPUNKNOWN) PURE; STDMETHOD(EnumDevices)(THIS_ DWORD,LPDIENUMDEVICESCALLBACKA,LPVOID,DWORD) PURE; STDMETHOD(GetDeviceStatus)(THIS_ REFGUID) PURE; STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE; STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD) PURE; /*** IDirectInput2A methods ***/ STDMETHOD(FindDevice)(THIS_ REFGUID,LPCSTR,LPGUID) PURE; }; typedef struct IDirectInput2A *LPDIRECTINPUT2A; #ifdef UNICODE #define IID_IDirectInput2 IID_IDirectInput2W #define IDirectInput2 IDirectInput2W #define IDirectInput2Vtbl IDirectInput2WVtbl #else #define IID_IDirectInput2 IID_IDirectInput2A #define IDirectInput2 IDirectInput2A #define IDirectInput2Vtbl IDirectInput2AVtbl #endif typedef struct IDirectInput2 *LPDIRECTINPUT2; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirectInput2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectInput2_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectInput2_Release(p) (p)->lpVtbl->Release(p) #define IDirectInput2_CreateDevice(p,a,b,c) (p)->lpVtbl->CreateDevice(p,a,b,c) #define IDirectInput2_EnumDevices(p,a,b,c,d) (p)->lpVtbl->EnumDevices(p,a,b,c,d) #define IDirectInput2_GetDeviceStatus(p,a) (p)->lpVtbl->GetDeviceStatus(p,a) #define IDirectInput2_RunControlPanel(p,a,b) (p)->lpVtbl->RunControlPanel(p,a,b) #define IDirectInput2_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b) #define IDirectInput2_FindDevice(p,a,b,c) (p)->lpVtbl->FindDevice(p,a,b,c) #else #define IDirectInput2_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirectInput2_AddRef(p) (p)->AddRef() #define IDirectInput2_Release(p) (p)->Release() #define IDirectInput2_CreateDevice(p,a,b,c) (p)->CreateDevice(a,b,c) #define IDirectInput2_EnumDevices(p,a,b,c,d) (p)->EnumDevices(a,b,c,d) #define IDirectInput2_GetDeviceStatus(p,a) (p)->GetDeviceStatus(a) #define IDirectInput2_RunControlPanel(p,a,b) (p)->RunControlPanel(a,b) #define IDirectInput2_Initialize(p,a,b) (p)->Initialize(a,b) #define IDirectInput2_FindDevice(p,a,b,c) (p)->FindDevice(a,b,c) #endif #undef INTERFACE #define INTERFACE IDirectInput7W DECLARE_INTERFACE_(IDirectInput7W, IDirectInput2W) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectInput2W methods ***/ STDMETHOD(CreateDevice)(THIS_ REFGUID,LPDIRECTINPUTDEVICEW *,LPUNKNOWN) PURE; STDMETHOD(EnumDevices)(THIS_ DWORD,LPDIENUMDEVICESCALLBACKW,LPVOID,DWORD) PURE; STDMETHOD(GetDeviceStatus)(THIS_ REFGUID) PURE; STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE; STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD) PURE; STDMETHOD(FindDevice)(THIS_ REFGUID,LPCWSTR,LPGUID) PURE; /*** IDirectInput7W methods ***/ STDMETHOD(CreateDeviceEx)(THIS_ REFGUID,REFIID,LPVOID *,LPUNKNOWN) PURE; }; typedef struct IDirectInput7W *LPDIRECTINPUT7W; #undef INTERFACE #define INTERFACE IDirectInput7A DECLARE_INTERFACE_(IDirectInput7A, IDirectInput2A) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectInput2A methods ***/ STDMETHOD(CreateDevice)(THIS_ REFGUID,LPDIRECTINPUTDEVICEA *,LPUNKNOWN) PURE; STDMETHOD(EnumDevices)(THIS_ DWORD,LPDIENUMDEVICESCALLBACKA,LPVOID,DWORD) PURE; STDMETHOD(GetDeviceStatus)(THIS_ REFGUID) PURE; STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE; STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD) PURE; STDMETHOD(FindDevice)(THIS_ REFGUID,LPCSTR,LPGUID) PURE; /*** IDirectInput7A methods ***/ STDMETHOD(CreateDeviceEx)(THIS_ REFGUID,REFIID,LPVOID *,LPUNKNOWN) PURE; }; typedef struct IDirectInput7A *LPDIRECTINPUT7A; #ifdef UNICODE #define IID_IDirectInput7 IID_IDirectInput7W #define IDirectInput7 IDirectInput7W #define IDirectInput7Vtbl IDirectInput7WVtbl #else #define IID_IDirectInput7 IID_IDirectInput7A #define IDirectInput7 IDirectInput7A #define IDirectInput7Vtbl IDirectInput7AVtbl #endif typedef struct IDirectInput7 *LPDIRECTINPUT7; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirectInput7_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectInput7_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectInput7_Release(p) (p)->lpVtbl->Release(p) #define IDirectInput7_CreateDevice(p,a,b,c) (p)->lpVtbl->CreateDevice(p,a,b,c) #define IDirectInput7_EnumDevices(p,a,b,c,d) (p)->lpVtbl->EnumDevices(p,a,b,c,d) #define IDirectInput7_GetDeviceStatus(p,a) (p)->lpVtbl->GetDeviceStatus(p,a) #define IDirectInput7_RunControlPanel(p,a,b) (p)->lpVtbl->RunControlPanel(p,a,b) #define IDirectInput7_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b) #define IDirectInput7_FindDevice(p,a,b,c) (p)->lpVtbl->FindDevice(p,a,b,c) #define IDirectInput7_CreateDeviceEx(p,a,b,c,d) (p)->lpVtbl->CreateDeviceEx(p,a,b,c,d) #else #define IDirectInput7_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirectInput7_AddRef(p) (p)->AddRef() #define IDirectInput7_Release(p) (p)->Release() #define IDirectInput7_CreateDevice(p,a,b,c) (p)->CreateDevice(a,b,c) #define IDirectInput7_EnumDevices(p,a,b,c,d) (p)->EnumDevices(a,b,c,d) #define IDirectInput7_GetDeviceStatus(p,a) (p)->GetDeviceStatus(a) #define IDirectInput7_RunControlPanel(p,a,b) (p)->RunControlPanel(a,b) #define IDirectInput7_Initialize(p,a,b) (p)->Initialize(a,b) #define IDirectInput7_FindDevice(p,a,b,c) (p)->FindDevice(a,b,c) #define IDirectInput7_CreateDeviceEx(p,a,b,c,d) (p)->CreateDeviceEx(a,b,c,d) #endif #if(DIRECTINPUT_VERSION >= 0x0800) #undef INTERFACE #define INTERFACE IDirectInput8W DECLARE_INTERFACE_(IDirectInput8W, IUnknown) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectInput8W methods ***/ STDMETHOD(CreateDevice)(THIS_ REFGUID,LPDIRECTINPUTDEVICE8W *,LPUNKNOWN) PURE; STDMETHOD(EnumDevices)(THIS_ DWORD,LPDIENUMDEVICESCALLBACKW,LPVOID,DWORD) PURE; STDMETHOD(GetDeviceStatus)(THIS_ REFGUID) PURE; STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE; STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD) PURE; STDMETHOD(FindDevice)(THIS_ REFGUID,LPCWSTR,LPGUID) PURE; STDMETHOD(EnumDevicesBySemantics)(THIS_ LPCWSTR,LPDIACTIONFORMATW,LPDIENUMDEVICESBYSEMANTICSCBW,LPVOID,DWORD) PURE; STDMETHOD(ConfigureDevices)(THIS_ LPDICONFIGUREDEVICESCALLBACK,LPDICONFIGUREDEVICESPARAMSW,DWORD,LPVOID) PURE; }; typedef struct IDirectInput8W *LPDIRECTINPUT8W; #undef INTERFACE #define INTERFACE IDirectInput8A DECLARE_INTERFACE_(IDirectInput8A, IUnknown) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirectInput8A methods ***/ STDMETHOD(CreateDevice)(THIS_ REFGUID,LPDIRECTINPUTDEVICE8A *,LPUNKNOWN) PURE; STDMETHOD(EnumDevices)(THIS_ DWORD,LPDIENUMDEVICESCALLBACKA,LPVOID,DWORD) PURE; STDMETHOD(GetDeviceStatus)(THIS_ REFGUID) PURE; STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE; STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD) PURE; STDMETHOD(FindDevice)(THIS_ REFGUID,LPCSTR,LPGUID) PURE; STDMETHOD(EnumDevicesBySemantics)(THIS_ LPCSTR,LPDIACTIONFORMATA,LPDIENUMDEVICESBYSEMANTICSCBA,LPVOID,DWORD) PURE; STDMETHOD(ConfigureDevices)(THIS_ LPDICONFIGUREDEVICESCALLBACK,LPDICONFIGUREDEVICESPARAMSA,DWORD,LPVOID) PURE; }; typedef struct IDirectInput8A *LPDIRECTINPUT8A; #ifdef UNICODE #define IID_IDirectInput8 IID_IDirectInput8W #define IDirectInput8 IDirectInput8W #define IDirectInput8Vtbl IDirectInput8WVtbl #else #define IID_IDirectInput8 IID_IDirectInput8A #define IDirectInput8 IDirectInput8A #define IDirectInput8Vtbl IDirectInput8AVtbl #endif typedef struct IDirectInput8 *LPDIRECTINPUT8; #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirectInput8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDirectInput8_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDirectInput8_Release(p) (p)->lpVtbl->Release(p) #define IDirectInput8_CreateDevice(p,a,b,c) (p)->lpVtbl->CreateDevice(p,a,b,c) #define IDirectInput8_EnumDevices(p,a,b,c,d) (p)->lpVtbl->EnumDevices(p,a,b,c,d) #define IDirectInput8_GetDeviceStatus(p,a) (p)->lpVtbl->GetDeviceStatus(p,a) #define IDirectInput8_RunControlPanel(p,a,b) (p)->lpVtbl->RunControlPanel(p,a,b) #define IDirectInput8_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b) #define IDirectInput8_FindDevice(p,a,b,c) (p)->lpVtbl->FindDevice(p,a,b,c) #define IDirectInput8_EnumDevicesBySemantics(p,a,b,c,d,e) (p)->lpVtbl->EnumDevicesBySemantics(p,a,b,c,d,e) #define IDirectInput8_ConfigureDevices(p,a,b,c,d) (p)->lpVtbl->ConfigureDevices(p,a,b,c,d) #else #define IDirectInput8_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IDirectInput8_AddRef(p) (p)->AddRef() #define IDirectInput8_Release(p) (p)->Release() #define IDirectInput8_CreateDevice(p,a,b,c) (p)->CreateDevice(a,b,c) #define IDirectInput8_EnumDevices(p,a,b,c,d) (p)->EnumDevices(a,b,c,d) #define IDirectInput8_GetDeviceStatus(p,a) (p)->GetDeviceStatus(a) #define IDirectInput8_RunControlPanel(p,a,b) (p)->RunControlPanel(a,b) #define IDirectInput8_Initialize(p,a,b) (p)->Initialize(a,b) #define IDirectInput8_FindDevice(p,a,b,c) (p)->FindDevice(a,b,c) #define IDirectInput8_EnumDevicesBySemantics(p,a,b,c,d,e) (p)->EnumDevicesBySemantics(a,b,c,d,e) #define IDirectInput8_ConfigureDevices(p,a,b,c,d) (p)->ConfigureDevices(a,b,c,d) #endif #endif /* DIRECTINPUT_VERSION >= 0x0800 */ #if DIRECTINPUT_VERSION > 0x0700 extern HRESULT WINAPI DirectInput8Create(HINSTANCE hinst, DWORD dwVersion, REFIID riidltf, LPVOID *ppvOut, LPUNKNOWN punkOuter); #else extern HRESULT WINAPI DirectInputCreateA(HINSTANCE hinst, DWORD dwVersion, LPDIRECTINPUTA *ppDI, LPUNKNOWN punkOuter); extern HRESULT WINAPI DirectInputCreateW(HINSTANCE hinst, DWORD dwVersion, LPDIRECTINPUTW *ppDI, LPUNKNOWN punkOuter); #ifdef UNICODE #define DirectInputCreate DirectInputCreateW #else #define DirectInputCreate DirectInputCreateA #endif // !UNICODE extern HRESULT WINAPI DirectInputCreateEx(HINSTANCE hinst, DWORD dwVersion, REFIID riidltf, LPVOID *ppvOut, LPUNKNOWN punkOuter); #endif /* DIRECTINPUT_VERSION > 0x700 */ #endif /* DIJ_RINGZERO */ /**************************************************************************** * * Return Codes * ****************************************************************************/ /* * The operation completed successfully. */ #define DI_OK S_OK /* * The device exists but is not currently attached. */ #define DI_NOTATTACHED S_FALSE /* * The device buffer overflowed. Some input was lost. */ #define DI_BUFFEROVERFLOW S_FALSE /* * The change in device properties had no effect. */ #define DI_PROPNOEFFECT S_FALSE /* * The operation had no effect. */ #define DI_NOEFFECT S_FALSE /* * The device is a polled device. As a result, device buffering * will not collect any data and event notifications will not be * signalled until GetDeviceState is called. */ #define DI_POLLEDDEVICE ((HRESULT)0x00000002L) /* * The parameters of the effect were successfully updated by * IDirectInputEffect::SetParameters, but the effect was not * downloaded because the device is not exclusively acquired * or because the DIEP_NODOWNLOAD flag was passed. */ #define DI_DOWNLOADSKIPPED ((HRESULT)0x00000003L) /* * The parameters of the effect were successfully updated by * IDirectInputEffect::SetParameters, but in order to change * the parameters, the effect needed to be restarted. */ #define DI_EFFECTRESTARTED ((HRESULT)0x00000004L) /* * The parameters of the effect were successfully updated by * IDirectInputEffect::SetParameters, but some of them were * beyond the capabilities of the device and were truncated. */ #define DI_TRUNCATED ((HRESULT)0x00000008L) /* * The settings have been successfully applied but could not be * persisted. */ #define DI_SETTINGSNOTSAVED ((HRESULT)0x0000000BL) /* * Equal to DI_EFFECTRESTARTED | DI_TRUNCATED. */ #define DI_TRUNCATEDANDRESTARTED ((HRESULT)0x0000000CL) /* * A SUCCESS code indicating that settings cannot be modified. */ #define DI_WRITEPROTECT ((HRESULT)0x00000013L) /* * The application requires a newer version of DirectInput. */ #define DIERR_OLDDIRECTINPUTVERSION \ MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_OLD_WIN_VERSION) /* * The application was written for an unsupported prerelease version * of DirectInput. */ #define DIERR_BETADIRECTINPUTVERSION \ MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_RMODE_APP) /* * The object could not be created due to an incompatible driver version * or mismatched or incomplete driver components. */ #define DIERR_BADDRIVERVER \ MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_BAD_DRIVER_LEVEL) /* * The device or device instance or effect is not registered with DirectInput. */ #define DIERR_DEVICENOTREG REGDB_E_CLASSNOTREG /* * The requested object does not exist. */ #define DIERR_NOTFOUND \ MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_FILE_NOT_FOUND) /* * The requested object does not exist. */ #define DIERR_OBJECTNOTFOUND \ MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_FILE_NOT_FOUND) /* * An invalid parameter was passed to the returning function, * or the object was not in a state that admitted the function * to be called. */ #define DIERR_INVALIDPARAM E_INVALIDARG /* * The specified interface is not supported by the object */ #define DIERR_NOINTERFACE E_NOINTERFACE /* * An undetermined error occured inside the DInput subsystem */ #define DIERR_GENERIC E_FAIL /* * The DInput subsystem couldn't allocate sufficient memory to complete the * caller's request. */ #define DIERR_OUTOFMEMORY E_OUTOFMEMORY /* * The function called is not supported at this time */ #define DIERR_UNSUPPORTED E_NOTIMPL /* * This object has not been initialized */ #define DIERR_NOTINITIALIZED \ MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_NOT_READY) /* * This object is already initialized */ #define DIERR_ALREADYINITIALIZED \ MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_ALREADY_INITIALIZED) /* * This object does not support aggregation */ #define DIERR_NOAGGREGATION CLASS_E_NOAGGREGATION /* * Another app has a higher priority level, preventing this call from * succeeding. */ #define DIERR_OTHERAPPHASPRIO E_ACCESSDENIED /* * Access to the device has been lost. It must be re-acquired. */ #define DIERR_INPUTLOST \ MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_READ_FAULT) /* * The operation cannot be performed while the device is acquired. */ #define DIERR_ACQUIRED \ MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_BUSY) /* * The operation cannot be performed unless the device is acquired. */ #define DIERR_NOTACQUIRED \ MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_INVALID_ACCESS) /* * The specified property cannot be changed. */ #define DIERR_READONLY E_ACCESSDENIED /* * The device already has an event notification associated with it. */ #define DIERR_HANDLEEXISTS E_ACCESSDENIED /* * Data is not yet available. */ #ifndef E_PENDING #define E_PENDING 0x8000000AL #endif /* * Unable to IDirectInputJoyConfig_Acquire because the user * does not have sufficient privileges to change the joystick * configuration. */ #define DIERR_INSUFFICIENTPRIVS 0x80040200L /* * The device is full. */ #define DIERR_DEVICEFULL 0x80040201L /* * Not all the requested information fit into the buffer. */ #define DIERR_MOREDATA 0x80040202L /* * The effect is not downloaded. */ #define DIERR_NOTDOWNLOADED 0x80040203L /* * The device cannot be reinitialized because there are still effects * attached to it. */ #define DIERR_HASEFFECTS 0x80040204L /* * The operation cannot be performed unless the device is acquired * in DISCL_EXCLUSIVE mode. */ #define DIERR_NOTEXCLUSIVEACQUIRED 0x80040205L /* * The effect could not be downloaded because essential information * is missing. For example, no axes have been associated with the * effect, or no type-specific information has been created. */ #define DIERR_INCOMPLETEEFFECT 0x80040206L /* * Attempted to read buffered device data from a device that is * not buffered. */ #define DIERR_NOTBUFFERED 0x80040207L /* * An attempt was made to modify parameters of an effect while it is * playing. Not all hardware devices support altering the parameters * of an effect while it is playing. */ #define DIERR_EFFECTPLAYING 0x80040208L /* * The operation could not be completed because the device is not * plugged in. */ #define DIERR_UNPLUGGED 0x80040209L /* * SendDeviceData failed because more information was requested * to be sent than can be sent to the device. Some devices have * restrictions on how much data can be sent to them. (For example, * there might be a limit on the number of buttons that can be * pressed at once.) */ #define DIERR_REPORTFULL 0x8004020AL /* * A mapper file function failed because reading or writing the user or IHV * settings file failed. */ #define DIERR_MAPFILEFAIL 0x8004020BL /*--- DINPUT Mapper Definitions: New for Dx8 ---*/ /*--- Keyboard Physical Keyboard Device ---*/ #define DIKEYBOARD_ESCAPE 0x81000401 #define DIKEYBOARD_1 0x81000402 #define DIKEYBOARD_2 0x81000403 #define DIKEYBOARD_3 0x81000404 #define DIKEYBOARD_4 0x81000405 #define DIKEYBOARD_5 0x81000406 #define DIKEYBOARD_6 0x81000407 #define DIKEYBOARD_7 0x81000408 #define DIKEYBOARD_8 0x81000409 #define DIKEYBOARD_9 0x8100040A #define DIKEYBOARD_0 0x8100040B #define DIKEYBOARD_MINUS 0x8100040C /* - on main keyboard */ #define DIKEYBOARD_EQUALS 0x8100040D #define DIKEYBOARD_BACK 0x8100040E /* backspace */ #define DIKEYBOARD_TAB 0x8100040F #define DIKEYBOARD_Q 0x81000410 #define DIKEYBOARD_W 0x81000411 #define DIKEYBOARD_E 0x81000412 #define DIKEYBOARD_R 0x81000413 #define DIKEYBOARD_T 0x81000414 #define DIKEYBOARD_Y 0x81000415 #define DIKEYBOARD_U 0x81000416 #define DIKEYBOARD_I 0x81000417 #define DIKEYBOARD_O 0x81000418 #define DIKEYBOARD_P 0x81000419 #define DIKEYBOARD_LBRACKET 0x8100041A #define DIKEYBOARD_RBRACKET 0x8100041B #define DIKEYBOARD_RETURN 0x8100041C /* Enter on main keyboard */ #define DIKEYBOARD_LCONTROL 0x8100041D #define DIKEYBOARD_A 0x8100041E #define DIKEYBOARD_S 0x8100041F #define DIKEYBOARD_D 0x81000420 #define DIKEYBOARD_F 0x81000421 #define DIKEYBOARD_G 0x81000422 #define DIKEYBOARD_H 0x81000423 #define DIKEYBOARD_J 0x81000424 #define DIKEYBOARD_K 0x81000425 #define DIKEYBOARD_L 0x81000426 #define DIKEYBOARD_SEMICOLON 0x81000427 #define DIKEYBOARD_APOSTROPHE 0x81000428 #define DIKEYBOARD_GRAVE 0x81000429 /* accent grave */ #define DIKEYBOARD_LSHIFT 0x8100042A #define DIKEYBOARD_BACKSLASH 0x8100042B #define DIKEYBOARD_Z 0x8100042C #define DIKEYBOARD_X 0x8100042D #define DIKEYBOARD_C 0x8100042E #define DIKEYBOARD_V 0x8100042F #define DIKEYBOARD_B 0x81000430 #define DIKEYBOARD_N 0x81000431 #define DIKEYBOARD_M 0x81000432 #define DIKEYBOARD_COMMA 0x81000433 #define DIKEYBOARD_PERIOD 0x81000434 /* . on main keyboard */ #define DIKEYBOARD_SLASH 0x81000435 /* / on main keyboard */ #define DIKEYBOARD_RSHIFT 0x81000436 #define DIKEYBOARD_MULTIPLY 0x81000437 /* * on numeric keypad */ #define DIKEYBOARD_LMENU 0x81000438 /* left Alt */ #define DIKEYBOARD_SPACE 0x81000439 #define DIKEYBOARD_CAPITAL 0x8100043A #define DIKEYBOARD_F1 0x8100043B #define DIKEYBOARD_F2 0x8100043C #define DIKEYBOARD_F3 0x8100043D #define DIKEYBOARD_F4 0x8100043E #define DIKEYBOARD_F5 0x8100043F #define DIKEYBOARD_F6 0x81000440 #define DIKEYBOARD_F7 0x81000441 #define DIKEYBOARD_F8 0x81000442 #define DIKEYBOARD_F9 0x81000443 #define DIKEYBOARD_F10 0x81000444 #define DIKEYBOARD_NUMLOCK 0x81000445 #define DIKEYBOARD_SCROLL 0x81000446 /* Scroll Lock */ #define DIKEYBOARD_NUMPAD7 0x81000447 #define DIKEYBOARD_NUMPAD8 0x81000448 #define DIKEYBOARD_NUMPAD9 0x81000449 #define DIKEYBOARD_SUBTRACT 0x8100044A /* - on numeric keypad */ #define DIKEYBOARD_NUMPAD4 0x8100044B #define DIKEYBOARD_NUMPAD5 0x8100044C #define DIKEYBOARD_NUMPAD6 0x8100044D #define DIKEYBOARD_ADD 0x8100044E /* + on numeric keypad */ #define DIKEYBOARD_NUMPAD1 0x8100044F #define DIKEYBOARD_NUMPAD2 0x81000450 #define DIKEYBOARD_NUMPAD3 0x81000451 #define DIKEYBOARD_NUMPAD0 0x81000452 #define DIKEYBOARD_DECIMAL 0x81000453 /* . on numeric keypad */ #define DIKEYBOARD_OEM_102 0x81000456 /* <> or \| on RT 102-key keyboard (Non-U.S.) */ #define DIKEYBOARD_F11 0x81000457 #define DIKEYBOARD_F12 0x81000458 #define DIKEYBOARD_F13 0x81000464 /* (NEC PC98) */ #define DIKEYBOARD_F14 0x81000465 /* (NEC PC98) */ #define DIKEYBOARD_F15 0x81000466 /* (NEC PC98) */ #define DIKEYBOARD_KANA 0x81000470 /* (Japanese keyboard) */ #define DIKEYBOARD_ABNT_C1 0x81000473 /* /? on Brazilian keyboard */ #define DIKEYBOARD_CONVERT 0x81000479 /* (Japanese keyboard) */ #define DIKEYBOARD_NOCONVERT 0x8100047B /* (Japanese keyboard) */ #define DIKEYBOARD_YEN 0x8100047D /* (Japanese keyboard) */ #define DIKEYBOARD_ABNT_C2 0x8100047E /* Numpad . on Brazilian keyboard */ #define DIKEYBOARD_NUMPADEQUALS 0x8100048D /* = on numeric keypad (NEC PC98) */ #define DIKEYBOARD_PREVTRACK 0x81000490 /* Previous Track (DIK_CIRCUMFLEX on Japanese keyboard) */ #define DIKEYBOARD_AT 0x81000491 /* (NEC PC98) */ #define DIKEYBOARD_COLON 0x81000492 /* (NEC PC98) */ #define DIKEYBOARD_UNDERLINE 0x81000493 /* (NEC PC98) */ #define DIKEYBOARD_KANJI 0x81000494 /* (Japanese keyboard) */ #define DIKEYBOARD_STOP 0x81000495 /* (NEC PC98) */ #define DIKEYBOARD_AX 0x81000496 /* (Japan AX) */ #define DIKEYBOARD_UNLABELED 0x81000497 /* (J3100) */ #define DIKEYBOARD_NEXTTRACK 0x81000499 /* Next Track */ #define DIKEYBOARD_NUMPADENTER 0x8100049C /* Enter on numeric keypad */ #define DIKEYBOARD_RCONTROL 0x8100049D #define DIKEYBOARD_MUTE 0x810004A0 /* Mute */ #define DIKEYBOARD_CALCULATOR 0x810004A1 /* Calculator */ #define DIKEYBOARD_PLAYPAUSE 0x810004A2 /* Play / Pause */ #define DIKEYBOARD_MEDIASTOP 0x810004A4 /* Media Stop */ #define DIKEYBOARD_VOLUMEDOWN 0x810004AE /* Volume - */ #define DIKEYBOARD_VOLUMEUP 0x810004B0 /* Volume + */ #define DIKEYBOARD_WEBHOME 0x810004B2 /* Web home */ #define DIKEYBOARD_NUMPADCOMMA 0x810004B3 /* , on numeric keypad (NEC PC98) */ #define DIKEYBOARD_DIVIDE 0x810004B5 /* / on numeric keypad */ #define DIKEYBOARD_SYSRQ 0x810004B7 #define DIKEYBOARD_RMENU 0x810004B8 /* right Alt */ #define DIKEYBOARD_PAUSE 0x810004C5 /* Pause */ #define DIKEYBOARD_HOME 0x810004C7 /* Home on arrow keypad */ #define DIKEYBOARD_UP 0x810004C8 /* UpArrow on arrow keypad */ #define DIKEYBOARD_PRIOR 0x810004C9 /* PgUp on arrow keypad */ #define DIKEYBOARD_LEFT 0x810004CB /* LeftArrow on arrow keypad */ #define DIKEYBOARD_RIGHT 0x810004CD /* RightArrow on arrow keypad */ #define DIKEYBOARD_END 0x810004CF /* End on arrow keypad */ #define DIKEYBOARD_DOWN 0x810004D0 /* DownArrow on arrow keypad */ #define DIKEYBOARD_NEXT 0x810004D1 /* PgDn on arrow keypad */ #define DIKEYBOARD_INSERT 0x810004D2 /* Insert on arrow keypad */ #define DIKEYBOARD_DELETE 0x810004D3 /* Delete on arrow keypad */ #define DIKEYBOARD_LWIN 0x810004DB /* Left Windows key */ #define DIKEYBOARD_RWIN 0x810004DC /* Right Windows key */ #define DIKEYBOARD_APPS 0x810004DD /* AppMenu key */ #define DIKEYBOARD_POWER 0x810004DE /* System Power */ #define DIKEYBOARD_SLEEP 0x810004DF /* System Sleep */ #define DIKEYBOARD_WAKE 0x810004E3 /* System Wake */ #define DIKEYBOARD_WEBSEARCH 0x810004E5 /* Web Search */ #define DIKEYBOARD_WEBFAVORITES 0x810004E6 /* Web Favorites */ #define DIKEYBOARD_WEBREFRESH 0x810004E7 /* Web Refresh */ #define DIKEYBOARD_WEBSTOP 0x810004E8 /* Web Stop */ #define DIKEYBOARD_WEBFORWARD 0x810004E9 /* Web Forward */ #define DIKEYBOARD_WEBBACK 0x810004EA /* Web Back */ #define DIKEYBOARD_MYCOMPUTER 0x810004EB /* My Computer */ #define DIKEYBOARD_MAIL 0x810004EC /* Mail */ #define DIKEYBOARD_MEDIASELECT 0x810004ED /* Media Select */ /*--- MOUSE Physical Mouse Device ---*/ #define DIMOUSE_XAXISAB (0x82000200 |DIMOFS_X ) /* X Axis-absolute: Some mice natively report absolute coordinates */ #define DIMOUSE_YAXISAB (0x82000200 |DIMOFS_Y ) /* Y Axis-absolute: Some mice natively report absolute coordinates */ #define DIMOUSE_XAXIS (0x82000300 |DIMOFS_X ) /* X Axis */ #define DIMOUSE_YAXIS (0x82000300 |DIMOFS_Y ) /* Y Axis */ #define DIMOUSE_WHEEL (0x82000300 |DIMOFS_Z ) /* Z Axis */ #define DIMOUSE_BUTTON0 (0x82000400 |DIMOFS_BUTTON0) /* Button 0 */ #define DIMOUSE_BUTTON1 (0x82000400 |DIMOFS_BUTTON1) /* Button 1 */ #define DIMOUSE_BUTTON2 (0x82000400 |DIMOFS_BUTTON2) /* Button 2 */ #define DIMOUSE_BUTTON3 (0x82000400 |DIMOFS_BUTTON3) /* Button 3 */ #define DIMOUSE_BUTTON4 (0x82000400 |DIMOFS_BUTTON4) /* Button 4 */ #define DIMOUSE_BUTTON5 (0x82000400 |DIMOFS_BUTTON5) /* Button 5 */ #define DIMOUSE_BUTTON6 (0x82000400 |DIMOFS_BUTTON6) /* Button 6 */ #define DIMOUSE_BUTTON7 (0x82000400 |DIMOFS_BUTTON7) /* Button 7 */ /*--- VOICE Physical Dplay Voice Device ---*/ #define DIVOICE_CHANNEL1 0x83000401 #define DIVOICE_CHANNEL2 0x83000402 #define DIVOICE_CHANNEL3 0x83000403 #define DIVOICE_CHANNEL4 0x83000404 #define DIVOICE_CHANNEL5 0x83000405 #define DIVOICE_CHANNEL6 0x83000406 #define DIVOICE_CHANNEL7 0x83000407 #define DIVOICE_CHANNEL8 0x83000408 #define DIVOICE_TEAM 0x83000409 #define DIVOICE_ALL 0x8300040A #define DIVOICE_RECORDMUTE 0x8300040B #define DIVOICE_PLAYBACKMUTE 0x8300040C #define DIVOICE_TRANSMIT 0x8300040D #define DIVOICE_VOICECOMMAND 0x83000410 /*--- Driving Simulator - Racing Vehicle control is primary objective ---*/ #define DIVIRTUAL_DRIVING_RACE 0x01000000 #define DIAXIS_DRIVINGR_STEER 0x01008A01 /* Steering */ #define DIAXIS_DRIVINGR_ACCELERATE 0x01039202 /* Accelerate */ #define DIAXIS_DRIVINGR_BRAKE 0x01041203 /* Brake-Axis */ #define DIBUTTON_DRIVINGR_SHIFTUP 0x01000C01 /* Shift to next higher gear */ #define DIBUTTON_DRIVINGR_SHIFTDOWN 0x01000C02 /* Shift to next lower gear */ #define DIBUTTON_DRIVINGR_VIEW 0x01001C03 /* Cycle through view options */ #define DIBUTTON_DRIVINGR_MENU 0x010004FD /* Show menu options */ /*--- Priority 2 controls ---*/ #define DIAXIS_DRIVINGR_ACCEL_AND_BRAKE 0x01014A04 /* Some devices combine accelerate and brake in a single axis */ #define DIHATSWITCH_DRIVINGR_GLANCE 0x01004601 /* Look around */ #define DIBUTTON_DRIVINGR_BRAKE 0x01004C04 /* Brake-button */ #define DIBUTTON_DRIVINGR_DASHBOARD 0x01004405 /* Select next dashboard option */ #define DIBUTTON_DRIVINGR_AIDS 0x01004406 /* Driver correction aids */ #define DIBUTTON_DRIVINGR_MAP 0x01004407 /* Display Driving Map */ #define DIBUTTON_DRIVINGR_BOOST 0x01004408 /* Turbo Boost */ #define DIBUTTON_DRIVINGR_PIT 0x01004409 /* Pit stop notification */ #define DIBUTTON_DRIVINGR_ACCELERATE_LINK 0x0103D4E0 /* Fallback Accelerate button */ #define DIBUTTON_DRIVINGR_STEER_LEFT_LINK 0x0100CCE4 /* Fallback Steer Left button */ #define DIBUTTON_DRIVINGR_STEER_RIGHT_LINK 0x0100CCEC /* Fallback Steer Right button */ #define DIBUTTON_DRIVINGR_GLANCE_LEFT_LINK 0x0107C4E4 /* Fallback Glance Left button */ #define DIBUTTON_DRIVINGR_GLANCE_RIGHT_LINK 0x0107C4EC /* Fallback Glance Right button */ #define DIBUTTON_DRIVINGR_DEVICE 0x010044FE /* Show input device and controls */ #define DIBUTTON_DRIVINGR_PAUSE 0x010044FC /* Start / Pause / Restart game */ /*--- Driving Simulator - Combat Combat from within a vehicle is primary objective ---*/ #define DIVIRTUAL_DRIVING_COMBAT 0x02000000 #define DIAXIS_DRIVINGC_STEER 0x02008A01 /* Steering */ #define DIAXIS_DRIVINGC_ACCELERATE 0x02039202 /* Accelerate */ #define DIAXIS_DRIVINGC_BRAKE 0x02041203 /* Brake-axis */ #define DIBUTTON_DRIVINGC_FIRE 0x02000C01 /* Fire */ #define DIBUTTON_DRIVINGC_WEAPONS 0x02000C02 /* Select next weapon */ #define DIBUTTON_DRIVINGC_TARGET 0x02000C03 /* Select next available target */ #define DIBUTTON_DRIVINGC_MENU 0x020004FD /* Show menu options */ /*--- Priority 2 controls ---*/ #define DIAXIS_DRIVINGC_ACCEL_AND_BRAKE 0x02014A04 /* Some devices combine accelerate and brake in a single axis */ #define DIHATSWITCH_DRIVINGC_GLANCE 0x02004601 /* Look around */ #define DIBUTTON_DRIVINGC_SHIFTUP 0x02004C04 /* Shift to next higher gear */ #define DIBUTTON_DRIVINGC_SHIFTDOWN 0x02004C05 /* Shift to next lower gear */ #define DIBUTTON_DRIVINGC_DASHBOARD 0x02004406 /* Select next dashboard option */ #define DIBUTTON_DRIVINGC_AIDS 0x02004407 /* Driver correction aids */ #define DIBUTTON_DRIVINGC_BRAKE 0x02004C08 /* Brake-button */ #define DIBUTTON_DRIVINGC_FIRESECONDARY 0x02004C09 /* Alternative fire button */ #define DIBUTTON_DRIVINGC_ACCELERATE_LINK 0x0203D4E0 /* Fallback Accelerate button */ #define DIBUTTON_DRIVINGC_STEER_LEFT_LINK 0x0200CCE4 /* Fallback Steer Left button */ #define DIBUTTON_DRIVINGC_STEER_RIGHT_LINK 0x0200CCEC /* Fallback Steer Right button */ #define DIBUTTON_DRIVINGC_GLANCE_LEFT_LINK 0x0207C4E4 /* Fallback Glance Left button */ #define DIBUTTON_DRIVINGC_GLANCE_RIGHT_LINK 0x0207C4EC /* Fallback Glance Right button */ #define DIBUTTON_DRIVINGC_DEVICE 0x020044FE /* Show input device and controls */ #define DIBUTTON_DRIVINGC_PAUSE 0x020044FC /* Start / Pause / Restart game */ /*--- Driving Simulator - Tank Combat from withing a tank is primary objective ---*/ #define DIVIRTUAL_DRIVING_TANK 0x03000000 #define DIAXIS_DRIVINGT_STEER 0x03008A01 /* Turn tank left / right */ #define DIAXIS_DRIVINGT_BARREL 0x03010202 /* Raise / lower barrel */ #define DIAXIS_DRIVINGT_ACCELERATE 0x03039203 /* Accelerate */ #define DIAXIS_DRIVINGT_ROTATE 0x03020204 /* Turn barrel left / right */ #define DIBUTTON_DRIVINGT_FIRE 0x03000C01 /* Fire */ #define DIBUTTON_DRIVINGT_WEAPONS 0x03000C02 /* Select next weapon */ #define DIBUTTON_DRIVINGT_TARGET 0x03000C03 /* Selects next available target */ #define DIBUTTON_DRIVINGT_MENU 0x030004FD /* Show menu options */ /*--- Priority 2 controls ---*/ #define DIHATSWITCH_DRIVINGT_GLANCE 0x03004601 /* Look around */ #define DIAXIS_DRIVINGT_BRAKE 0x03045205 /* Brake-axis */ #define DIAXIS_DRIVINGT_ACCEL_AND_BRAKE 0x03014A06 /* Some devices combine accelerate and brake in a single axis */ #define DIBUTTON_DRIVINGT_VIEW 0x03005C04 /* Cycle through view options */ #define DIBUTTON_DRIVINGT_DASHBOARD 0x03005C05 /* Select next dashboard option */ #define DIBUTTON_DRIVINGT_BRAKE 0x03004C06 /* Brake-button */ #define DIBUTTON_DRIVINGT_FIRESECONDARY 0x03004C07 /* Alternative fire button */ #define DIBUTTON_DRIVINGT_ACCELERATE_LINK 0x0303D4E0 /* Fallback Accelerate button */ #define DIBUTTON_DRIVINGT_STEER_LEFT_LINK 0x0300CCE4 /* Fallback Steer Left button */ #define DIBUTTON_DRIVINGT_STEER_RIGHT_LINK 0x0300CCEC /* Fallback Steer Right button */ #define DIBUTTON_DRIVINGT_BARREL_UP_LINK 0x030144E0 /* Fallback Barrel up button */ #define DIBUTTON_DRIVINGT_BARREL_DOWN_LINK 0x030144E8 /* Fallback Barrel down button */ #define DIBUTTON_DRIVINGT_ROTATE_LEFT_LINK 0x030244E4 /* Fallback Rotate left button */ #define DIBUTTON_DRIVINGT_ROTATE_RIGHT_LINK 0x030244EC /* Fallback Rotate right button */ #define DIBUTTON_DRIVINGT_GLANCE_LEFT_LINK 0x0307C4E4 /* Fallback Glance Left button */ #define DIBUTTON_DRIVINGT_GLANCE_RIGHT_LINK 0x0307C4EC /* Fallback Glance Right button */ #define DIBUTTON_DRIVINGT_DEVICE 0x030044FE /* Show input device and controls */ #define DIBUTTON_DRIVINGT_PAUSE 0x030044FC /* Start / Pause / Restart game */ /*--- Flight Simulator - Civilian Plane control is the primary objective ---*/ #define DIVIRTUAL_FLYING_CIVILIAN 0x04000000 #define DIAXIS_FLYINGC_BANK 0x04008A01 /* Roll ship left / right */ #define DIAXIS_FLYINGC_PITCH 0x04010A02 /* Nose up / down */ #define DIAXIS_FLYINGC_THROTTLE 0x04039203 /* Throttle */ #define DIBUTTON_FLYINGC_VIEW 0x04002401 /* Cycle through view options */ #define DIBUTTON_FLYINGC_DISPLAY 0x04002402 /* Select next dashboard / heads up display option */ #define DIBUTTON_FLYINGC_GEAR 0x04002C03 /* Gear up / down */ #define DIBUTTON_FLYINGC_MENU 0x040004FD /* Show menu options */ /*--- Priority 2 controls ---*/ #define DIHATSWITCH_FLYINGC_GLANCE 0x04004601 /* Look around */ #define DIAXIS_FLYINGC_BRAKE 0x04046A04 /* Apply Brake */ #define DIAXIS_FLYINGC_RUDDER 0x04025205 /* Yaw ship left/right */ #define DIAXIS_FLYINGC_FLAPS 0x04055A06 /* Flaps */ #define DIBUTTON_FLYINGC_FLAPSUP 0x04006404 /* Increment stepping up until fully retracted */ #define DIBUTTON_FLYINGC_FLAPSDOWN 0x04006405 /* Decrement stepping down until fully extended */ #define DIBUTTON_FLYINGC_BRAKE_LINK 0x04046CE0 /* Fallback brake button */ #define DIBUTTON_FLYINGC_FASTER_LINK 0x0403D4E0 /* Fallback throttle up button */ #define DIBUTTON_FLYINGC_SLOWER_LINK 0x0403D4E8 /* Fallback throttle down button */ #define DIBUTTON_FLYINGC_GLANCE_LEFT_LINK 0x0407C4E4 /* Fallback Glance Left button */ #define DIBUTTON_FLYINGC_GLANCE_RIGHT_LINK 0x0407C4EC /* Fallback Glance Right button */ #define DIBUTTON_FLYINGC_GLANCE_UP_LINK 0x0407C4E0 /* Fallback Glance Up button */ #define DIBUTTON_FLYINGC_GLANCE_DOWN_LINK 0x0407C4E8 /* Fallback Glance Down button */ #define DIBUTTON_FLYINGC_DEVICE 0x040044FE /* Show input device and controls */ #define DIBUTTON_FLYINGC_PAUSE 0x040044FC /* Start / Pause / Restart game */ /*--- Flight Simulator - Military Aerial combat is the primary objective ---*/ #define DIVIRTUAL_FLYING_MILITARY 0x05000000 #define DIAXIS_FLYINGM_BANK 0x05008A01 /* Bank - Roll ship left / right */ #define DIAXIS_FLYINGM_PITCH 0x05010A02 /* Pitch - Nose up / down */ #define DIAXIS_FLYINGM_THROTTLE 0x05039203 /* Throttle - faster / slower */ #define DIBUTTON_FLYINGM_FIRE 0x05000C01 /* Fire */ #define DIBUTTON_FLYINGM_WEAPONS 0x05000C02 /* Select next weapon */ #define DIBUTTON_FLYINGM_TARGET 0x05000C03 /* Selects next available target */ #define DIBUTTON_FLYINGM_MENU 0x050004FD /* Show menu options */ /*--- Priority 2 controls ---*/ #define DIHATSWITCH_FLYINGM_GLANCE 0x05004601 /* Look around */ #define DIBUTTON_FLYINGM_COUNTER 0x05005C04 /* Activate counter measures */ #define DIAXIS_FLYINGM_RUDDER 0x05024A04 /* Rudder - Yaw ship left/right */ #define DIAXIS_FLYINGM_BRAKE 0x05046205 /* Brake-axis */ #define DIBUTTON_FLYINGM_VIEW 0x05006405 /* Cycle through view options */ #define DIBUTTON_FLYINGM_DISPLAY 0x05006406 /* Select next dashboard option */ #define DIAXIS_FLYINGM_FLAPS 0x05055206 /* Flaps */ #define DIBUTTON_FLYINGM_FLAPSUP 0x05005407 /* Increment stepping up until fully retracted */ #define DIBUTTON_FLYINGM_FLAPSDOWN 0x05005408 /* Decrement stepping down until fully extended */ #define DIBUTTON_FLYINGM_FIRESECONDARY 0x05004C09 /* Alternative fire button */ #define DIBUTTON_FLYINGM_GEAR 0x0500640A /* Gear up / down */ #define DIBUTTON_FLYINGM_BRAKE_LINK 0x050464E0 /* Fallback brake button */ #define DIBUTTON_FLYINGM_FASTER_LINK 0x0503D4E0 /* Fallback throttle up button */ #define DIBUTTON_FLYINGM_SLOWER_LINK 0x0503D4E8 /* Fallback throttle down button */ #define DIBUTTON_FLYINGM_GLANCE_LEFT_LINK 0x0507C4E4 /* Fallback Glance Left button */ #define DIBUTTON_FLYINGM_GLANCE_RIGHT_LINK 0x0507C4EC /* Fallback Glance Right button */ #define DIBUTTON_FLYINGM_GLANCE_UP_LINK 0x0507C4E0 /* Fallback Glance Up button */ #define DIBUTTON_FLYINGM_GLANCE_DOWN_LINK 0x0507C4E8 /* Fallback Glance Down button */ #define DIBUTTON_FLYINGM_DEVICE 0x050044FE /* Show input device and controls */ #define DIBUTTON_FLYINGM_PAUSE 0x050044FC /* Start / Pause / Restart game */ /*--- Flight Simulator - Combat Helicopter Combat from helicopter is primary objective ---*/ #define DIVIRTUAL_FLYING_HELICOPTER 0x06000000 #define DIAXIS_FLYINGH_BANK 0x06008A01 /* Bank - Roll ship left / right */ #define DIAXIS_FLYINGH_PITCH 0x06010A02 /* Pitch - Nose up / down */ #define DIAXIS_FLYINGH_COLLECTIVE 0x06018A03 /* Collective - Blade pitch/power */ #define DIBUTTON_FLYINGH_FIRE 0x06001401 /* Fire */ #define DIBUTTON_FLYINGH_WEAPONS 0x06001402 /* Select next weapon */ #define DIBUTTON_FLYINGH_TARGET 0x06001403 /* Selects next available target */ #define DIBUTTON_FLYINGH_MENU 0x060004FD /* Show menu options */ /*--- Priority 2 controls ---*/ #define DIHATSWITCH_FLYINGH_GLANCE 0x06004601 /* Look around */ #define DIAXIS_FLYINGH_TORQUE 0x06025A04 /* Torque - Rotate ship around left / right axis */ #define DIAXIS_FLYINGH_THROTTLE 0x0603DA05 /* Throttle */ #define DIBUTTON_FLYINGH_COUNTER 0x06005404 /* Activate counter measures */ #define DIBUTTON_FLYINGH_VIEW 0x06006405 /* Cycle through view options */ #define DIBUTTON_FLYINGH_GEAR 0x06006406 /* Gear up / down */ #define DIBUTTON_FLYINGH_FIRESECONDARY 0x06004C07 /* Alternative fire button */ #define DIBUTTON_FLYINGH_FASTER_LINK 0x0603DCE0 /* Fallback throttle up button */ #define DIBUTTON_FLYINGH_SLOWER_LINK 0x0603DCE8 /* Fallback throttle down button */ #define DIBUTTON_FLYINGH_GLANCE_LEFT_LINK 0x0607C4E4 /* Fallback Glance Left button */ #define DIBUTTON_FLYINGH_GLANCE_RIGHT_LINK 0x0607C4EC /* Fallback Glance Right button */ #define DIBUTTON_FLYINGH_GLANCE_UP_LINK 0x0607C4E0 /* Fallback Glance Up button */ #define DIBUTTON_FLYINGH_GLANCE_DOWN_LINK 0x0607C4E8 /* Fallback Glance Down button */ #define DIBUTTON_FLYINGH_DEVICE 0x060044FE /* Show input device and controls */ #define DIBUTTON_FLYINGH_PAUSE 0x060044FC /* Start / Pause / Restart game */ /*--- Space Simulator - Combat Space Simulator with weapons ---*/ #define DIVIRTUAL_SPACESIM 0x07000000 #define DIAXIS_SPACESIM_LATERAL 0x07008201 /* Move ship left / right */ #define DIAXIS_SPACESIM_MOVE 0x07010202 /* Move ship forward/backward */ #define DIAXIS_SPACESIM_THROTTLE 0x07038203 /* Throttle - Engine speed */ #define DIBUTTON_SPACESIM_FIRE 0x07000401 /* Fire */ #define DIBUTTON_SPACESIM_WEAPONS 0x07000402 /* Select next weapon */ #define DIBUTTON_SPACESIM_TARGET 0x07000403 /* Selects next available target */ #define DIBUTTON_SPACESIM_MENU 0x070004FD /* Show menu options */ /*--- Priority 2 controls ---*/ #define DIHATSWITCH_SPACESIM_GLANCE 0x07004601 /* Look around */ #define DIAXIS_SPACESIM_CLIMB 0x0701C204 /* Climb - Pitch ship up/down */ #define DIAXIS_SPACESIM_ROTATE 0x07024205 /* Rotate - Turn ship left/right */ #define DIBUTTON_SPACESIM_VIEW 0x07004404 /* Cycle through view options */ #define DIBUTTON_SPACESIM_DISPLAY 0x07004405 /* Select next dashboard / heads up display option */ #define DIBUTTON_SPACESIM_RAISE 0x07004406 /* Raise ship while maintaining current pitch */ #define DIBUTTON_SPACESIM_LOWER 0x07004407 /* Lower ship while maintaining current pitch */ #define DIBUTTON_SPACESIM_GEAR 0x07004408 /* Gear up / down */ #define DIBUTTON_SPACESIM_FIRESECONDARY 0x07004409 /* Alternative fire button */ #define DIBUTTON_SPACESIM_LEFT_LINK 0x0700C4E4 /* Fallback move left button */ #define DIBUTTON_SPACESIM_RIGHT_LINK 0x0700C4EC /* Fallback move right button */ #define DIBUTTON_SPACESIM_FORWARD_LINK 0x070144E0 /* Fallback move forward button */ #define DIBUTTON_SPACESIM_BACKWARD_LINK 0x070144E8 /* Fallback move backwards button */ #define DIBUTTON_SPACESIM_FASTER_LINK 0x0703C4E0 /* Fallback throttle up button */ #define DIBUTTON_SPACESIM_SLOWER_LINK 0x0703C4E8 /* Fallback throttle down button */ #define DIBUTTON_SPACESIM_TURN_LEFT_LINK 0x070244E4 /* Fallback turn left button */ #define DIBUTTON_SPACESIM_TURN_RIGHT_LINK 0x070244EC /* Fallback turn right button */ #define DIBUTTON_SPACESIM_GLANCE_LEFT_LINK 0x0707C4E4 /* Fallback Glance Left button */ #define DIBUTTON_SPACESIM_GLANCE_RIGHT_LINK 0x0707C4EC /* Fallback Glance Right button */ #define DIBUTTON_SPACESIM_GLANCE_UP_LINK 0x0707C4E0 /* Fallback Glance Up button */ #define DIBUTTON_SPACESIM_GLANCE_DOWN_LINK 0x0707C4E8 /* Fallback Glance Down button */ #define DIBUTTON_SPACESIM_DEVICE 0x070044FE /* Show input device and controls */ #define DIBUTTON_SPACESIM_PAUSE 0x070044FC /* Start / Pause / Restart game */ /*--- Fighting - First Person Hand to Hand combat is primary objective ---*/ #define DIVIRTUAL_FIGHTING_HAND2HAND 0x08000000 #define DIAXIS_FIGHTINGH_LATERAL 0x08008201 /* Sidestep left/right */ #define DIAXIS_FIGHTINGH_MOVE 0x08010202 /* Move forward/backward */ #define DIBUTTON_FIGHTINGH_PUNCH 0x08000401 /* Punch */ #define DIBUTTON_FIGHTINGH_KICK 0x08000402 /* Kick */ #define DIBUTTON_FIGHTINGH_BLOCK 0x08000403 /* Block */ #define DIBUTTON_FIGHTINGH_CROUCH 0x08000404 /* Crouch */ #define DIBUTTON_FIGHTINGH_JUMP 0x08000405 /* Jump */ #define DIBUTTON_FIGHTINGH_SPECIAL1 0x08000406 /* Apply first special move */ #define DIBUTTON_FIGHTINGH_SPECIAL2 0x08000407 /* Apply second special move */ #define DIBUTTON_FIGHTINGH_MENU 0x080004FD /* Show menu options */ /*--- Priority 2 controls ---*/ #define DIBUTTON_FIGHTINGH_SELECT 0x08004408 /* Select special move */ #define DIHATSWITCH_FIGHTINGH_SLIDE 0x08004601 /* Look around */ #define DIBUTTON_FIGHTINGH_DISPLAY 0x08004409 /* Shows next on-screen display option */ #define DIAXIS_FIGHTINGH_ROTATE 0x08024203 /* Rotate - Turn body left/right */ #define DIBUTTON_FIGHTINGH_DODGE 0x0800440A /* Dodge */ #define DIBUTTON_FIGHTINGH_LEFT_LINK 0x0800C4E4 /* Fallback left sidestep button */ #define DIBUTTON_FIGHTINGH_RIGHT_LINK 0x0800C4EC /* Fallback right sidestep button */ #define DIBUTTON_FIGHTINGH_FORWARD_LINK 0x080144E0 /* Fallback forward button */ #define DIBUTTON_FIGHTINGH_BACKWARD_LINK 0x080144E8 /* Fallback backward button */ #define DIBUTTON_FIGHTINGH_DEVICE 0x080044FE /* Show input device and controls */ #define DIBUTTON_FIGHTINGH_PAUSE 0x080044FC /* Start / Pause / Restart game */ /*--- Fighting - First Person Shooting Navigation and combat are primary objectives ---*/ #define DIVIRTUAL_FIGHTING_FPS 0x09000000 #define DIAXIS_FPS_ROTATE 0x09008201 /* Rotate character left/right */ #define DIAXIS_FPS_MOVE 0x09010202 /* Move forward/backward */ #define DIBUTTON_FPS_FIRE 0x09000401 /* Fire */ #define DIBUTTON_FPS_WEAPONS 0x09000402 /* Select next weapon */ #define DIBUTTON_FPS_APPLY 0x09000403 /* Use item */ #define DIBUTTON_FPS_SELECT 0x09000404 /* Select next inventory item */ #define DIBUTTON_FPS_CROUCH 0x09000405 /* Crouch/ climb down/ swim down */ #define DIBUTTON_FPS_JUMP 0x09000406 /* Jump/ climb up/ swim up */ #define DIAXIS_FPS_LOOKUPDOWN 0x09018203 /* Look up / down */ #define DIBUTTON_FPS_STRAFE 0x09000407 /* Enable strafing while active */ #define DIBUTTON_FPS_MENU 0x090004FD /* Show menu options */ /*--- Priority 2 controls ---*/ #define DIHATSWITCH_FPS_GLANCE 0x09004601 /* Look around */ #define DIBUTTON_FPS_DISPLAY 0x09004408 /* Shows next on-screen display option/ map */ #define DIAXIS_FPS_SIDESTEP 0x09024204 /* Sidestep */ #define DIBUTTON_FPS_DODGE 0x09004409 /* Dodge */ #define DIBUTTON_FPS_GLANCEL 0x0900440A /* Glance Left */ #define DIBUTTON_FPS_GLANCER 0x0900440B /* Glance Right */ #define DIBUTTON_FPS_FIRESECONDARY 0x0900440C /* Alternative fire button */ #define DIBUTTON_FPS_ROTATE_LEFT_LINK 0x0900C4E4 /* Fallback rotate left button */ #define DIBUTTON_FPS_ROTATE_RIGHT_LINK 0x0900C4EC /* Fallback rotate right button */ #define DIBUTTON_FPS_FORWARD_LINK 0x090144E0 /* Fallback forward button */ #define DIBUTTON_FPS_BACKWARD_LINK 0x090144E8 /* Fallback backward button */ #define DIBUTTON_FPS_GLANCE_UP_LINK 0x0901C4E0 /* Fallback look up button */ #define DIBUTTON_FPS_GLANCE_DOWN_LINK 0x0901C4E8 /* Fallback look down button */ #define DIBUTTON_FPS_STEP_LEFT_LINK 0x090244E4 /* Fallback step left button */ #define DIBUTTON_FPS_STEP_RIGHT_LINK 0x090244EC /* Fallback step right button */ #define DIBUTTON_FPS_DEVICE 0x090044FE /* Show input device and controls */ #define DIBUTTON_FPS_PAUSE 0x090044FC /* Start / Pause / Restart game */ /*--- Fighting - Third Person action Perspective of camera is behind the main character ---*/ #define DIVIRTUAL_FIGHTING_THIRDPERSON 0x0A000000 #define DIAXIS_TPS_TURN 0x0A020201 /* Turn left/right */ #define DIAXIS_TPS_MOVE 0x0A010202 /* Move forward/backward */ #define DIBUTTON_TPS_RUN 0x0A000401 /* Run or walk toggle switch */ #define DIBUTTON_TPS_ACTION 0x0A000402 /* Action Button */ #define DIBUTTON_TPS_SELECT 0x0A000403 /* Select next weapon */ #define DIBUTTON_TPS_USE 0x0A000404 /* Use inventory item currently selected */ #define DIBUTTON_TPS_JUMP 0x0A000405 /* Character Jumps */ #define DIBUTTON_TPS_MENU 0x0A0004FD /* Show menu options */ /*--- Priority 2 controls ---*/ #define DIHATSWITCH_TPS_GLANCE 0x0A004601 /* Look around */ #define DIBUTTON_TPS_VIEW 0x0A004406 /* Select camera view */ #define DIBUTTON_TPS_STEPLEFT 0x0A004407 /* Character takes a left step */ #define DIBUTTON_TPS_STEPRIGHT 0x0A004408 /* Character takes a right step */ #define DIAXIS_TPS_STEP 0x0A00C203 /* Character steps left/right */ #define DIBUTTON_TPS_DODGE 0x0A004409 /* Character dodges or ducks */ #define DIBUTTON_TPS_INVENTORY 0x0A00440A /* Cycle through inventory */ #define DIBUTTON_TPS_TURN_LEFT_LINK 0x0A0244E4 /* Fallback turn left button */ #define DIBUTTON_TPS_TURN_RIGHT_LINK 0x0A0244EC /* Fallback turn right button */ #define DIBUTTON_TPS_FORWARD_LINK 0x0A0144E0 /* Fallback forward button */ #define DIBUTTON_TPS_BACKWARD_LINK 0x0A0144E8 /* Fallback backward button */ #define DIBUTTON_TPS_GLANCE_UP_LINK 0x0A07C4E0 /* Fallback look up button */ #define DIBUTTON_TPS_GLANCE_DOWN_LINK 0x0A07C4E8 /* Fallback look down button */ #define DIBUTTON_TPS_GLANCE_LEFT_LINK 0x0A07C4E4 /* Fallback glance up button */ #define DIBUTTON_TPS_GLANCE_RIGHT_LINK 0x0A07C4EC /* Fallback glance right button */ #define DIBUTTON_TPS_DEVICE 0x0A0044FE /* Show input device and controls */ #define DIBUTTON_TPS_PAUSE 0x0A0044FC /* Start / Pause / Restart game */ /*--- Strategy - Role Playing Navigation and problem solving are primary actions ---*/ #define DIVIRTUAL_STRATEGY_ROLEPLAYING 0x0B000000 #define DIAXIS_STRATEGYR_LATERAL 0x0B008201 /* sidestep - left/right */ #define DIAXIS_STRATEGYR_MOVE 0x0B010202 /* move forward/backward */ #define DIBUTTON_STRATEGYR_GET 0x0B000401 /* Acquire item */ #define DIBUTTON_STRATEGYR_APPLY 0x0B000402 /* Use selected item */ #define DIBUTTON_STRATEGYR_SELECT 0x0B000403 /* Select nextitem */ #define DIBUTTON_STRATEGYR_ATTACK 0x0B000404 /* Attack */ #define DIBUTTON_STRATEGYR_CAST 0x0B000405 /* Cast Spell */ #define DIBUTTON_STRATEGYR_CROUCH 0x0B000406 /* Crouch */ #define DIBUTTON_STRATEGYR_JUMP 0x0B000407 /* Jump */ #define DIBUTTON_STRATEGYR_MENU 0x0B0004FD /* Show menu options */ /*--- Priority 2 controls ---*/ #define DIHATSWITCH_STRATEGYR_GLANCE 0x0B004601 /* Look around */ #define DIBUTTON_STRATEGYR_MAP 0x0B004408 /* Cycle through map options */ #define DIBUTTON_STRATEGYR_DISPLAY 0x0B004409 /* Shows next on-screen display option */ #define DIAXIS_STRATEGYR_ROTATE 0x0B024203 /* Turn body left/right */ #define DIBUTTON_STRATEGYR_LEFT_LINK 0x0B00C4E4 /* Fallback sidestep left button */ #define DIBUTTON_STRATEGYR_RIGHT_LINK 0x0B00C4EC /* Fallback sidestep right button */ #define DIBUTTON_STRATEGYR_FORWARD_LINK 0x0B0144E0 /* Fallback move forward button */ #define DIBUTTON_STRATEGYR_BACK_LINK 0x0B0144E8 /* Fallback move backward button */ #define DIBUTTON_STRATEGYR_ROTATE_LEFT_LINK 0x0B0244E4 /* Fallback turn body left button */ #define DIBUTTON_STRATEGYR_ROTATE_RIGHT_LINK 0x0B0244EC /* Fallback turn body right button */ #define DIBUTTON_STRATEGYR_DEVICE 0x0B0044FE /* Show input device and controls */ #define DIBUTTON_STRATEGYR_PAUSE 0x0B0044FC /* Start / Pause / Restart game */ /*--- Strategy - Turn based Navigation and problem solving are primary actions ---*/ #define DIVIRTUAL_STRATEGY_TURN 0x0C000000 #define DIAXIS_STRATEGYT_LATERAL 0x0C008201 /* Sidestep left/right */ #define DIAXIS_STRATEGYT_MOVE 0x0C010202 /* Move forward/backwards */ #define DIBUTTON_STRATEGYT_SELECT 0x0C000401 /* Select unit or object */ #define DIBUTTON_STRATEGYT_INSTRUCT 0x0C000402 /* Cycle through instructions */ #define DIBUTTON_STRATEGYT_APPLY 0x0C000403 /* Apply selected instruction */ #define DIBUTTON_STRATEGYT_TEAM 0x0C000404 /* Select next team / cycle through all */ #define DIBUTTON_STRATEGYT_TURN 0x0C000405 /* Indicate turn over */ #define DIBUTTON_STRATEGYT_MENU 0x0C0004FD /* Show menu options */ /*--- Priority 2 controls ---*/ #define DIBUTTON_STRATEGYT_ZOOM 0x0C004406 /* Zoom - in / out */ #define DIBUTTON_STRATEGYT_MAP 0x0C004407 /* cycle through map options */ #define DIBUTTON_STRATEGYT_DISPLAY 0x0C004408 /* shows next on-screen display options */ #define DIBUTTON_STRATEGYT_LEFT_LINK 0x0C00C4E4 /* Fallback sidestep left button */ #define DIBUTTON_STRATEGYT_RIGHT_LINK 0x0C00C4EC /* Fallback sidestep right button */ #define DIBUTTON_STRATEGYT_FORWARD_LINK 0x0C0144E0 /* Fallback move forward button */ #define DIBUTTON_STRATEGYT_BACK_LINK 0x0C0144E8 /* Fallback move back button */ #define DIBUTTON_STRATEGYT_DEVICE 0x0C0044FE /* Show input device and controls */ #define DIBUTTON_STRATEGYT_PAUSE 0x0C0044FC /* Start / Pause / Restart game */ /*--- Sports - Hunting Hunting ---*/ #define DIVIRTUAL_SPORTS_HUNTING 0x0D000000 #define DIAXIS_HUNTING_LATERAL 0x0D008201 /* sidestep left/right */ #define DIAXIS_HUNTING_MOVE 0x0D010202 /* move forward/backwards */ #define DIBUTTON_HUNTING_FIRE 0x0D000401 /* Fire selected weapon */ #define DIBUTTON_HUNTING_AIM 0x0D000402 /* Select aim/move */ #define DIBUTTON_HUNTING_WEAPON 0x0D000403 /* Select next weapon */ #define DIBUTTON_HUNTING_BINOCULAR 0x0D000404 /* Look through Binoculars */ #define DIBUTTON_HUNTING_CALL 0x0D000405 /* Make animal call */ #define DIBUTTON_HUNTING_MAP 0x0D000406 /* View Map */ #define DIBUTTON_HUNTING_SPECIAL 0x0D000407 /* Special game operation */ #define DIBUTTON_HUNTING_MENU 0x0D0004FD /* Show menu options */ /*--- Priority 2 controls ---*/ #define DIHATSWITCH_HUNTING_GLANCE 0x0D004601 /* Look around */ #define DIBUTTON_HUNTING_DISPLAY 0x0D004408 /* show next on-screen display option */ #define DIAXIS_HUNTING_ROTATE 0x0D024203 /* Turn body left/right */ #define DIBUTTON_HUNTING_CROUCH 0x0D004409 /* Crouch/ Climb / Swim down */ #define DIBUTTON_HUNTING_JUMP 0x0D00440A /* Jump/ Climb up / Swim up */ #define DIBUTTON_HUNTING_FIRESECONDARY 0x0D00440B /* Alternative fire button */ #define DIBUTTON_HUNTING_LEFT_LINK 0x0D00C4E4 /* Fallback sidestep left button */ #define DIBUTTON_HUNTING_RIGHT_LINK 0x0D00C4EC /* Fallback sidestep right button */ #define DIBUTTON_HUNTING_FORWARD_LINK 0x0D0144E0 /* Fallback move forward button */ #define DIBUTTON_HUNTING_BACK_LINK 0x0D0144E8 /* Fallback move back button */ #define DIBUTTON_HUNTING_ROTATE_LEFT_LINK 0x0D0244E4 /* Fallback turn body left button */ #define DIBUTTON_HUNTING_ROTATE_RIGHT_LINK 0x0D0244EC /* Fallback turn body right button */ #define DIBUTTON_HUNTING_DEVICE 0x0D0044FE /* Show input device and controls */ #define DIBUTTON_HUNTING_PAUSE 0x0D0044FC /* Start / Pause / Restart game */ /*--- Sports - Fishing Catching Fish is primary objective ---*/ #define DIVIRTUAL_SPORTS_FISHING 0x0E000000 #define DIAXIS_FISHING_LATERAL 0x0E008201 /* sidestep left/right */ #define DIAXIS_FISHING_MOVE 0x0E010202 /* move forward/backwards */ #define DIBUTTON_FISHING_CAST 0x0E000401 /* Cast line */ #define DIBUTTON_FISHING_TYPE 0x0E000402 /* Select cast type */ #define DIBUTTON_FISHING_BINOCULAR 0x0E000403 /* Look through Binocular */ #define DIBUTTON_FISHING_BAIT 0x0E000404 /* Select type of Bait */ #define DIBUTTON_FISHING_MAP 0x0E000405 /* View Map */ #define DIBUTTON_FISHING_MENU 0x0E0004FD /* Show menu options */ /*--- Priority 2 controls ---*/ #define DIHATSWITCH_FISHING_GLANCE 0x0E004601 /* Look around */ #define DIBUTTON_FISHING_DISPLAY 0x0E004406 /* Show next on-screen display option */ #define DIAXIS_FISHING_ROTATE 0x0E024203 /* Turn character left / right */ #define DIBUTTON_FISHING_CROUCH 0x0E004407 /* Crouch/ Climb / Swim down */ #define DIBUTTON_FISHING_JUMP 0x0E004408 /* Jump/ Climb up / Swim up */ #define DIBUTTON_FISHING_LEFT_LINK 0x0E00C4E4 /* Fallback sidestep left button */ #define DIBUTTON_FISHING_RIGHT_LINK 0x0E00C4EC /* Fallback sidestep right button */ #define DIBUTTON_FISHING_FORWARD_LINK 0x0E0144E0 /* Fallback move forward button */ #define DIBUTTON_FISHING_BACK_LINK 0x0E0144E8 /* Fallback move back button */ #define DIBUTTON_FISHING_ROTATE_LEFT_LINK 0x0E0244E4 /* Fallback turn body left button */ #define DIBUTTON_FISHING_ROTATE_RIGHT_LINK 0x0E0244EC /* Fallback turn body right button */ #define DIBUTTON_FISHING_DEVICE 0x0E0044FE /* Show input device and controls */ #define DIBUTTON_FISHING_PAUSE 0x0E0044FC /* Start / Pause / Restart game */ /*--- Sports - Baseball - Batting Batter control is primary objective ---*/ #define DIVIRTUAL_SPORTS_BASEBALL_BAT 0x0F000000 #define DIAXIS_BASEBALLB_LATERAL 0x0F008201 /* Aim left / right */ #define DIAXIS_BASEBALLB_MOVE 0x0F010202 /* Aim up / down */ #define DIBUTTON_BASEBALLB_SELECT 0x0F000401 /* cycle through swing options */ #define DIBUTTON_BASEBALLB_NORMAL 0x0F000402 /* normal swing */ #define DIBUTTON_BASEBALLB_POWER 0x0F000403 /* swing for the fence */ #define DIBUTTON_BASEBALLB_BUNT 0x0F000404 /* bunt */ #define DIBUTTON_BASEBALLB_STEAL 0x0F000405 /* Base runner attempts to steal a base */ #define DIBUTTON_BASEBALLB_BURST 0x0F000406 /* Base runner invokes burst of speed */ #define DIBUTTON_BASEBALLB_SLIDE 0x0F000407 /* Base runner slides into base */ #define DIBUTTON_BASEBALLB_CONTACT 0x0F000408 /* Contact swing */ #define DIBUTTON_BASEBALLB_MENU 0x0F0004FD /* Show menu options */ /*--- Priority 2 controls ---*/ #define DIBUTTON_BASEBALLB_NOSTEAL 0x0F004409 /* Base runner goes back to a base */ #define DIBUTTON_BASEBALLB_BOX 0x0F00440A /* Enter or exit batting box */ #define DIBUTTON_BASEBALLB_LEFT_LINK 0x0F00C4E4 /* Fallback sidestep left button */ #define DIBUTTON_BASEBALLB_RIGHT_LINK 0x0F00C4EC /* Fallback sidestep right button */ #define DIBUTTON_BASEBALLB_FORWARD_LINK 0x0F0144E0 /* Fallback move forward button */ #define DIBUTTON_BASEBALLB_BACK_LINK 0x0F0144E8 /* Fallback move back button */ #define DIBUTTON_BASEBALLB_DEVICE 0x0F0044FE /* Show input device and controls */ #define DIBUTTON_BASEBALLB_PAUSE 0x0F0044FC /* Start / Pause / Restart game */ /*--- Sports - Baseball - Pitching Pitcher control is primary objective ---*/ #define DIVIRTUAL_SPORTS_BASEBALL_PITCH 0x10000000 #define DIAXIS_BASEBALLP_LATERAL 0x10008201 /* Aim left / right */ #define DIAXIS_BASEBALLP_MOVE 0x10010202 /* Aim up / down */ #define DIBUTTON_BASEBALLP_SELECT 0x10000401 /* cycle through pitch selections */ #define DIBUTTON_BASEBALLP_PITCH 0x10000402 /* throw pitch */ #define DIBUTTON_BASEBALLP_BASE 0x10000403 /* select base to throw to */ #define DIBUTTON_BASEBALLP_THROW 0x10000404 /* throw to base */ #define DIBUTTON_BASEBALLP_FAKE 0x10000405 /* Fake a throw to a base */ #define DIBUTTON_BASEBALLP_MENU 0x100004FD /* Show menu options */ /*--- Priority 2 controls ---*/ #define DIBUTTON_BASEBALLP_WALK 0x10004406 /* Throw intentional walk / pitch out */ #define DIBUTTON_BASEBALLP_LOOK 0x10004407 /* Look at runners on bases */ #define DIBUTTON_BASEBALLP_LEFT_LINK 0x1000C4E4 /* Fallback sidestep left button */ #define DIBUTTON_BASEBALLP_RIGHT_LINK 0x1000C4EC /* Fallback sidestep right button */ #define DIBUTTON_BASEBALLP_FORWARD_LINK 0x100144E0 /* Fallback move forward button */ #define DIBUTTON_BASEBALLP_BACK_LINK 0x100144E8 /* Fallback move back button */ #define DIBUTTON_BASEBALLP_DEVICE 0x100044FE /* Show input device and controls */ #define DIBUTTON_BASEBALLP_PAUSE 0x100044FC /* Start / Pause / Restart game */ /*--- Sports - Baseball - Fielding Fielder control is primary objective ---*/ #define DIVIRTUAL_SPORTS_BASEBALL_FIELD 0x11000000 #define DIAXIS_BASEBALLF_LATERAL 0x11008201 /* Aim left / right */ #define DIAXIS_BASEBALLF_MOVE 0x11010202 /* Aim up / down */ #define DIBUTTON_BASEBALLF_NEAREST 0x11000401 /* Switch to fielder nearest to the ball */ #define DIBUTTON_BASEBALLF_THROW1 0x11000402 /* Make conservative throw */ #define DIBUTTON_BASEBALLF_THROW2 0x11000403 /* Make aggressive throw */ #define DIBUTTON_BASEBALLF_BURST 0x11000404 /* Invoke burst of speed */ #define DIBUTTON_BASEBALLF_JUMP 0x11000405 /* Jump to catch ball */ #define DIBUTTON_BASEBALLF_DIVE 0x11000406 /* Dive to catch ball */ #define DIBUTTON_BASEBALLF_MENU 0x110004FD /* Show menu options */ /*--- Priority 2 controls ---*/ #define DIBUTTON_BASEBALLF_SHIFTIN 0x11004407 /* Shift the infield positioning */ #define DIBUTTON_BASEBALLF_SHIFTOUT 0x11004408 /* Shift the outfield positioning */ #define DIBUTTON_BASEBALLF_AIM_LEFT_LINK 0x1100C4E4 /* Fallback aim left button */ #define DIBUTTON_BASEBALLF_AIM_RIGHT_LINK 0x1100C4EC /* Fallback aim right button */ #define DIBUTTON_BASEBALLF_FORWARD_LINK 0x110144E0 /* Fallback move forward button */ #define DIBUTTON_BASEBALLF_BACK_LINK 0x110144E8 /* Fallback move back button */ #define DIBUTTON_BASEBALLF_DEVICE 0x110044FE /* Show input device and controls */ #define DIBUTTON_BASEBALLF_PAUSE 0x110044FC /* Start / Pause / Restart game */ /*--- Sports - Basketball - Offense Offense ---*/ #define DIVIRTUAL_SPORTS_BASKETBALL_OFFENSE 0x12000000 #define DIAXIS_BBALLO_LATERAL 0x12008201 /* left / right */ #define DIAXIS_BBALLO_MOVE 0x12010202 /* up / down */ #define DIBUTTON_BBALLO_SHOOT 0x12000401 /* shoot basket */ #define DIBUTTON_BBALLO_DUNK 0x12000402 /* dunk basket */ #define DIBUTTON_BBALLO_PASS 0x12000403 /* throw pass */ #define DIBUTTON_BBALLO_FAKE 0x12000404 /* fake shot or pass */ #define DIBUTTON_BBALLO_SPECIAL 0x12000405 /* apply special move */ #define DIBUTTON_BBALLO_PLAYER 0x12000406 /* select next player */ #define DIBUTTON_BBALLO_BURST 0x12000407 /* invoke burst */ #define DIBUTTON_BBALLO_CALL 0x12000408 /* call for ball / pass to me */ #define DIBUTTON_BBALLO_MENU 0x120004FD /* Show menu options */ /*--- Priority 2 controls ---*/ #define DIHATSWITCH_BBALLO_GLANCE 0x12004601 /* scroll view */ #define DIBUTTON_BBALLO_SCREEN 0x12004409 /* Call for screen */ #define DIBUTTON_BBALLO_PLAY 0x1200440A /* Call for specific offensive play */ #define DIBUTTON_BBALLO_JAB 0x1200440B /* Initiate fake drive to basket */ #define DIBUTTON_BBALLO_POST 0x1200440C /* Perform post move */ #define DIBUTTON_BBALLO_TIMEOUT 0x1200440D /* Time Out */ #define DIBUTTON_BBALLO_SUBSTITUTE 0x1200440E /* substitute one player for another */ #define DIBUTTON_BBALLO_LEFT_LINK 0x1200C4E4 /* Fallback sidestep left button */ #define DIBUTTON_BBALLO_RIGHT_LINK 0x1200C4EC /* Fallback sidestep right button */ #define DIBUTTON_BBALLO_FORWARD_LINK 0x120144E0 /* Fallback move forward button */ #define DIBUTTON_BBALLO_BACK_LINK 0x120144E8 /* Fallback move back button */ #define DIBUTTON_BBALLO_DEVICE 0x120044FE /* Show input device and controls */ #define DIBUTTON_BBALLO_PAUSE 0x120044FC /* Start / Pause / Restart game */ /*--- Sports - Basketball - Defense Defense ---*/ #define DIVIRTUAL_SPORTS_BASKETBALL_DEFENSE 0x13000000 #define DIAXIS_BBALLD_LATERAL 0x13008201 /* left / right */ #define DIAXIS_BBALLD_MOVE 0x13010202 /* up / down */ #define DIBUTTON_BBALLD_JUMP 0x13000401 /* jump to block shot */ #define DIBUTTON_BBALLD_STEAL 0x13000402 /* attempt to steal ball */ #define DIBUTTON_BBALLD_FAKE 0x13000403 /* fake block or steal */ #define DIBUTTON_BBALLD_SPECIAL 0x13000404 /* apply special move */ #define DIBUTTON_BBALLD_PLAYER 0x13000405 /* select next player */ #define DIBUTTON_BBALLD_BURST 0x13000406 /* invoke burst */ #define DIBUTTON_BBALLD_PLAY 0x13000407 /* call for specific defensive play */ #define DIBUTTON_BBALLD_MENU 0x130004FD /* Show menu options */ /*--- Priority 2 controls ---*/ #define DIHATSWITCH_BBALLD_GLANCE 0x13004601 /* scroll view */ #define DIBUTTON_BBALLD_TIMEOUT 0x13004408 /* Time Out */ #define DIBUTTON_BBALLD_SUBSTITUTE 0x13004409 /* substitute one player for another */ #define DIBUTTON_BBALLD_LEFT_LINK 0x1300C4E4 /* Fallback sidestep left button */ #define DIBUTTON_BBALLD_RIGHT_LINK 0x1300C4EC /* Fallback sidestep right button */ #define DIBUTTON_BBALLD_FORWARD_LINK 0x130144E0 /* Fallback move forward button */ #define DIBUTTON_BBALLD_BACK_LINK 0x130144E8 /* Fallback move back button */ #define DIBUTTON_BBALLD_DEVICE 0x130044FE /* Show input device and controls */ #define DIBUTTON_BBALLD_PAUSE 0x130044FC /* Start / Pause / Restart game */ /*--- Sports - Football - Play Play selection ---*/ #define DIVIRTUAL_SPORTS_FOOTBALL_FIELD 0x14000000 #define DIBUTTON_FOOTBALLP_PLAY 0x14000401 /* cycle through available plays */ #define DIBUTTON_FOOTBALLP_SELECT 0x14000402 /* select play */ #define DIBUTTON_FOOTBALLP_HELP 0x14000403 /* Bring up pop-up help */ #define DIBUTTON_FOOTBALLP_MENU 0x140004FD /* Show menu options */ /*--- Priority 2 controls ---*/ #define DIBUTTON_FOOTBALLP_DEVICE 0x140044FE /* Show input device and controls */ #define DIBUTTON_FOOTBALLP_PAUSE 0x140044FC /* Start / Pause / Restart game */ /*--- Sports - Football - QB Offense: Quarterback / Kicker ---*/ #define DIVIRTUAL_SPORTS_FOOTBALL_QBCK 0x15000000 #define DIAXIS_FOOTBALLQ_LATERAL 0x15008201 /* Move / Aim: left / right */ #define DIAXIS_FOOTBALLQ_MOVE 0x15010202 /* Move / Aim: up / down */ #define DIBUTTON_FOOTBALLQ_SELECT 0x15000401 /* Select */ #define DIBUTTON_FOOTBALLQ_SNAP 0x15000402 /* snap ball - start play */ #define DIBUTTON_FOOTBALLQ_JUMP 0x15000403 /* jump over defender */ #define DIBUTTON_FOOTBALLQ_SLIDE 0x15000404 /* Dive/Slide */ #define DIBUTTON_FOOTBALLQ_PASS 0x15000405 /* throws pass to receiver */ #define DIBUTTON_FOOTBALLQ_FAKE 0x15000406 /* pump fake pass or fake kick */ #define DIBUTTON_FOOTBALLQ_MENU 0x150004FD /* Show menu options */ /*--- Priority 2 controls ---*/ #define DIBUTTON_FOOTBALLQ_FAKESNAP 0x15004407 /* Fake snap */ #define DIBUTTON_FOOTBALLQ_MOTION 0x15004408 /* Send receivers in motion */ #define DIBUTTON_FOOTBALLQ_AUDIBLE 0x15004409 /* Change offensive play at line of scrimmage */ #define DIBUTTON_FOOTBALLQ_LEFT_LINK 0x1500C4E4 /* Fallback sidestep left button */ #define DIBUTTON_FOOTBALLQ_RIGHT_LINK 0x1500C4EC /* Fallback sidestep right button */ #define DIBUTTON_FOOTBALLQ_FORWARD_LINK 0x150144E0 /* Fallback move forward button */ #define DIBUTTON_FOOTBALLQ_BACK_LINK 0x150144E8 /* Fallback move back button */ #define DIBUTTON_FOOTBALLQ_DEVICE 0x150044FE /* Show input device and controls */ #define DIBUTTON_FOOTBALLQ_PAUSE 0x150044FC /* Start / Pause / Restart game */ /*--- Sports - Football - Offense Offense - Runner ---*/ #define DIVIRTUAL_SPORTS_FOOTBALL_OFFENSE 0x16000000 #define DIAXIS_FOOTBALLO_LATERAL 0x16008201 /* Move / Aim: left / right */ #define DIAXIS_FOOTBALLO_MOVE 0x16010202 /* Move / Aim: up / down */ #define DIBUTTON_FOOTBALLO_JUMP 0x16000401 /* jump or hurdle over defender */ #define DIBUTTON_FOOTBALLO_LEFTARM 0x16000402 /* holds out left arm */ #define DIBUTTON_FOOTBALLO_RIGHTARM 0x16000403 /* holds out right arm */ #define DIBUTTON_FOOTBALLO_THROW 0x16000404 /* throw pass or lateral ball to another runner */ #define DIBUTTON_FOOTBALLO_SPIN 0x16000405 /* Spin to avoid defenders */ #define DIBUTTON_FOOTBALLO_MENU 0x160004FD /* Show menu options */ /*--- Priority 2 controls ---*/ #define DIBUTTON_FOOTBALLO_JUKE 0x16004406 /* Use special move to avoid defenders */ #define DIBUTTON_FOOTBALLO_SHOULDER 0x16004407 /* Lower shoulder to run over defenders */ #define DIBUTTON_FOOTBALLO_TURBO 0x16004408 /* Speed burst past defenders */ #define DIBUTTON_FOOTBALLO_DIVE 0x16004409 /* Dive over defenders */ #define DIBUTTON_FOOTBALLO_ZOOM 0x1600440A /* Zoom view in / out */ #define DIBUTTON_FOOTBALLO_SUBSTITUTE 0x1600440B /* substitute one player for another */ #define DIBUTTON_FOOTBALLO_LEFT_LINK 0x1600C4E4 /* Fallback sidestep left button */ #define DIBUTTON_FOOTBALLO_RIGHT_LINK 0x1600C4EC /* Fallback sidestep right button */ #define DIBUTTON_FOOTBALLO_FORWARD_LINK 0x160144E0 /* Fallback move forward button */ #define DIBUTTON_FOOTBALLO_BACK_LINK 0x160144E8 /* Fallback move back button */ #define DIBUTTON_FOOTBALLO_DEVICE 0x160044FE /* Show input device and controls */ #define DIBUTTON_FOOTBALLO_PAUSE 0x160044FC /* Start / Pause / Restart game */ /*--- Sports - Football - Defense Defense ---*/ #define DIVIRTUAL_SPORTS_FOOTBALL_DEFENSE 0x17000000 #define DIAXIS_FOOTBALLD_LATERAL 0x17008201 /* Move / Aim: left / right */ #define DIAXIS_FOOTBALLD_MOVE 0x17010202 /* Move / Aim: up / down */ #define DIBUTTON_FOOTBALLD_PLAY 0x17000401 /* cycle through available plays */ #define DIBUTTON_FOOTBALLD_SELECT 0x17000402 /* select player closest to the ball */ #define DIBUTTON_FOOTBALLD_JUMP 0x17000403 /* jump to intercept or block */ #define DIBUTTON_FOOTBALLD_TACKLE 0x17000404 /* tackler runner */ #define DIBUTTON_FOOTBALLD_FAKE 0x17000405 /* hold down to fake tackle or intercept */ #define DIBUTTON_FOOTBALLD_SUPERTACKLE 0x17000406 /* Initiate special tackle */ #define DIBUTTON_FOOTBALLD_MENU 0x170004FD /* Show menu options */ /*--- Priority 2 controls ---*/ #define DIBUTTON_FOOTBALLD_SPIN 0x17004407 /* Spin to beat offensive line */ #define DIBUTTON_FOOTBALLD_SWIM 0x17004408 /* Swim to beat the offensive line */ #define DIBUTTON_FOOTBALLD_BULLRUSH 0x17004409 /* Bull rush the offensive line */ #define DIBUTTON_FOOTBALLD_RIP 0x1700440A /* Rip the offensive line */ #define DIBUTTON_FOOTBALLD_AUDIBLE 0x1700440B /* Change defensive play at the line of scrimmage */ #define DIBUTTON_FOOTBALLD_ZOOM 0x1700440C /* Zoom view in / out */ #define DIBUTTON_FOOTBALLD_SUBSTITUTE 0x1700440D /* substitute one player for another */ #define DIBUTTON_FOOTBALLD_LEFT_LINK 0x1700C4E4 /* Fallback sidestep left button */ #define DIBUTTON_FOOTBALLD_RIGHT_LINK 0x1700C4EC /* Fallback sidestep right button */ #define DIBUTTON_FOOTBALLD_FORWARD_LINK 0x170144E0 /* Fallback move forward button */ #define DIBUTTON_FOOTBALLD_BACK_LINK 0x170144E8 /* Fallback move back button */ #define DIBUTTON_FOOTBALLD_DEVICE 0x170044FE /* Show input device and controls */ #define DIBUTTON_FOOTBALLD_PAUSE 0x170044FC /* Start / Pause / Restart game */ /*--- Sports - Golf ---*/ #define DIVIRTUAL_SPORTS_GOLF 0x18000000 #define DIAXIS_GOLF_LATERAL 0x18008201 /* Move / Aim: left / right */ #define DIAXIS_GOLF_MOVE 0x18010202 /* Move / Aim: up / down */ #define DIBUTTON_GOLF_SWING 0x18000401 /* swing club */ #define DIBUTTON_GOLF_SELECT 0x18000402 /* cycle between: club / swing strength / ball arc / ball spin */ #define DIBUTTON_GOLF_UP 0x18000403 /* increase selection */ #define DIBUTTON_GOLF_DOWN 0x18000404 /* decrease selection */ #define DIBUTTON_GOLF_TERRAIN 0x18000405 /* shows terrain detail */ #define DIBUTTON_GOLF_FLYBY 0x18000406 /* view the hole via a flyby */ #define DIBUTTON_GOLF_MENU 0x180004FD /* Show menu options */ /*--- Priority 2 controls ---*/ #define DIHATSWITCH_GOLF_SCROLL 0x18004601 /* scroll view */ #define DIBUTTON_GOLF_ZOOM 0x18004407 /* Zoom view in / out */ #define DIBUTTON_GOLF_TIMEOUT 0x18004408 /* Call for time out */ #define DIBUTTON_GOLF_SUBSTITUTE 0x18004409 /* substitute one player for another */ #define DIBUTTON_GOLF_LEFT_LINK 0x1800C4E4 /* Fallback sidestep left button */ #define DIBUTTON_GOLF_RIGHT_LINK 0x1800C4EC /* Fallback sidestep right button */ #define DIBUTTON_GOLF_FORWARD_LINK 0x180144E0 /* Fallback move forward button */ #define DIBUTTON_GOLF_BACK_LINK 0x180144E8 /* Fallback move back button */ #define DIBUTTON_GOLF_DEVICE 0x180044FE /* Show input device and controls */ #define DIBUTTON_GOLF_PAUSE 0x180044FC /* Start / Pause / Restart game */ /*--- Sports - Hockey - Offense Offense ---*/ #define DIVIRTUAL_SPORTS_HOCKEY_OFFENSE 0x19000000 #define DIAXIS_HOCKEYO_LATERAL 0x19008201 /* Move / Aim: left / right */ #define DIAXIS_HOCKEYO_MOVE 0x19010202 /* Move / Aim: up / down */ #define DIBUTTON_HOCKEYO_SHOOT 0x19000401 /* Shoot */ #define DIBUTTON_HOCKEYO_PASS 0x19000402 /* pass the puck */ #define DIBUTTON_HOCKEYO_BURST 0x19000403 /* invoke speed burst */ #define DIBUTTON_HOCKEYO_SPECIAL 0x19000404 /* invoke special move */ #define DIBUTTON_HOCKEYO_FAKE 0x19000405 /* hold down to fake pass or kick */ #define DIBUTTON_HOCKEYO_MENU 0x190004FD /* Show menu options */ /*--- Priority 2 controls ---*/ #define DIHATSWITCH_HOCKEYO_SCROLL 0x19004601 /* scroll view */ #define DIBUTTON_HOCKEYO_ZOOM 0x19004406 /* Zoom view in / out */ #define DIBUTTON_HOCKEYO_STRATEGY 0x19004407 /* Invoke coaching menu for strategy help */ #define DIBUTTON_HOCKEYO_TIMEOUT 0x19004408 /* Call for time out */ #define DIBUTTON_HOCKEYO_SUBSTITUTE 0x19004409 /* substitute one player for another */ #define DIBUTTON_HOCKEYO_LEFT_LINK 0x1900C4E4 /* Fallback sidestep left button */ #define DIBUTTON_HOCKEYO_RIGHT_LINK 0x1900C4EC /* Fallback sidestep right button */ #define DIBUTTON_HOCKEYO_FORWARD_LINK 0x190144E0 /* Fallback move forward button */ #define DIBUTTON_HOCKEYO_BACK_LINK 0x190144E8 /* Fallback move back button */ #define DIBUTTON_HOCKEYO_DEVICE 0x190044FE /* Show input device and controls */ #define DIBUTTON_HOCKEYO_PAUSE 0x190044FC /* Start / Pause / Restart game */ /*--- Sports - Hockey - Defense Defense ---*/ #define DIVIRTUAL_SPORTS_HOCKEY_DEFENSE 0x1A000000 #define DIAXIS_HOCKEYD_LATERAL 0x1A008201 /* Move / Aim: left / right */ #define DIAXIS_HOCKEYD_MOVE 0x1A010202 /* Move / Aim: up / down */ #define DIBUTTON_HOCKEYD_PLAYER 0x1A000401 /* control player closest to the puck */ #define DIBUTTON_HOCKEYD_STEAL 0x1A000402 /* attempt steal */ #define DIBUTTON_HOCKEYD_BURST 0x1A000403 /* speed burst or body check */ #define DIBUTTON_HOCKEYD_BLOCK 0x1A000404 /* block puck */ #define DIBUTTON_HOCKEYD_FAKE 0x1A000405 /* hold down to fake tackle or intercept */ #define DIBUTTON_HOCKEYD_MENU 0x1A0004FD /* Show menu options */ /*--- Priority 2 controls ---*/ #define DIHATSWITCH_HOCKEYD_SCROLL 0x1A004601 /* scroll view */ #define DIBUTTON_HOCKEYD_ZOOM 0x1A004406 /* Zoom view in / out */ #define DIBUTTON_HOCKEYD_STRATEGY 0x1A004407 /* Invoke coaching menu for strategy help */ #define DIBUTTON_HOCKEYD_TIMEOUT 0x1A004408 /* Call for time out */ #define DIBUTTON_HOCKEYD_SUBSTITUTE 0x1A004409 /* substitute one player for another */ #define DIBUTTON_HOCKEYD_LEFT_LINK 0x1A00C4E4 /* Fallback sidestep left button */ #define DIBUTTON_HOCKEYD_RIGHT_LINK 0x1A00C4EC /* Fallback sidestep right button */ #define DIBUTTON_HOCKEYD_FORWARD_LINK 0x1A0144E0 /* Fallback move forward button */ #define DIBUTTON_HOCKEYD_BACK_LINK 0x1A0144E8 /* Fallback move back button */ #define DIBUTTON_HOCKEYD_DEVICE 0x1A0044FE /* Show input device and controls */ #define DIBUTTON_HOCKEYD_PAUSE 0x1A0044FC /* Start / Pause / Restart game */ /*--- Sports - Hockey - Goalie Goal tending ---*/ #define DIVIRTUAL_SPORTS_HOCKEY_GOALIE 0x1B000000 #define DIAXIS_HOCKEYG_LATERAL 0x1B008201 /* Move / Aim: left / right */ #define DIAXIS_HOCKEYG_MOVE 0x1B010202 /* Move / Aim: up / down */ #define DIBUTTON_HOCKEYG_PASS 0x1B000401 /* pass puck */ #define DIBUTTON_HOCKEYG_POKE 0x1B000402 /* poke / check / hack */ #define DIBUTTON_HOCKEYG_STEAL 0x1B000403 /* attempt steal */ #define DIBUTTON_HOCKEYG_BLOCK 0x1B000404 /* block puck */ #define DIBUTTON_HOCKEYG_MENU 0x1B0004FD /* Show menu options */ /*--- Priority 2 controls ---*/ #define DIHATSWITCH_HOCKEYG_SCROLL 0x1B004601 /* scroll view */ #define DIBUTTON_HOCKEYG_ZOOM 0x1B004405 /* Zoom view in / out */ #define DIBUTTON_HOCKEYG_STRATEGY 0x1B004406 /* Invoke coaching menu for strategy help */ #define DIBUTTON_HOCKEYG_TIMEOUT 0x1B004407 /* Call for time out */ #define DIBUTTON_HOCKEYG_SUBSTITUTE 0x1B004408 /* substitute one player for another */ #define DIBUTTON_HOCKEYG_LEFT_LINK 0x1B00C4E4 /* Fallback sidestep left button */ #define DIBUTTON_HOCKEYG_RIGHT_LINK 0x1B00C4EC /* Fallback sidestep right button */ #define DIBUTTON_HOCKEYG_FORWARD_LINK 0x1B0144E0 /* Fallback move forward button */ #define DIBUTTON_HOCKEYG_BACK_LINK 0x1B0144E8 /* Fallback move back button */ #define DIBUTTON_HOCKEYG_DEVICE 0x1B0044FE /* Show input device and controls */ #define DIBUTTON_HOCKEYG_PAUSE 0x1B0044FC /* Start / Pause / Restart game */ /*--- Sports - Mountain Biking ---*/ #define DIVIRTUAL_SPORTS_BIKING_MOUNTAIN 0x1C000000 #define DIAXIS_BIKINGM_TURN 0x1C008201 /* left / right */ #define DIAXIS_BIKINGM_PEDAL 0x1C010202 /* Pedal faster / slower / brake */ #define DIBUTTON_BIKINGM_JUMP 0x1C000401 /* jump over obstacle */ #define DIBUTTON_BIKINGM_CAMERA 0x1C000402 /* switch camera view */ #define DIBUTTON_BIKINGM_SPECIAL1 0x1C000403 /* perform first special move */ #define DIBUTTON_BIKINGM_SELECT 0x1C000404 /* Select */ #define DIBUTTON_BIKINGM_SPECIAL2 0x1C000405 /* perform second special move */ #define DIBUTTON_BIKINGM_MENU 0x1C0004FD /* Show menu options */ /*--- Priority 2 controls ---*/ #define DIHATSWITCH_BIKINGM_SCROLL 0x1C004601 /* scroll view */ #define DIBUTTON_BIKINGM_ZOOM 0x1C004406 /* Zoom view in / out */ #define DIAXIS_BIKINGM_BRAKE 0x1C044203 /* Brake axis */ #define DIBUTTON_BIKINGM_LEFT_LINK 0x1C00C4E4 /* Fallback turn left button */ #define DIBUTTON_BIKINGM_RIGHT_LINK 0x1C00C4EC /* Fallback turn right button */ #define DIBUTTON_BIKINGM_FASTER_LINK 0x1C0144E0 /* Fallback pedal faster button */ #define DIBUTTON_BIKINGM_SLOWER_LINK 0x1C0144E8 /* Fallback pedal slower button */ #define DIBUTTON_BIKINGM_BRAKE_BUTTON_LINK 0x1C0444E8 /* Fallback brake button */ #define DIBUTTON_BIKINGM_DEVICE 0x1C0044FE /* Show input device and controls */ #define DIBUTTON_BIKINGM_PAUSE 0x1C0044FC /* Start / Pause / Restart game */ /*--- Sports: Skiing / Snowboarding / Skateboarding ---*/ #define DIVIRTUAL_SPORTS_SKIING 0x1D000000 #define DIAXIS_SKIING_TURN 0x1D008201 /* left / right */ #define DIAXIS_SKIING_SPEED 0x1D010202 /* faster / slower */ #define DIBUTTON_SKIING_JUMP 0x1D000401 /* Jump */ #define DIBUTTON_SKIING_CROUCH 0x1D000402 /* crouch down */ #define DIBUTTON_SKIING_CAMERA 0x1D000403 /* switch camera view */ #define DIBUTTON_SKIING_SPECIAL1 0x1D000404 /* perform first special move */ #define DIBUTTON_SKIING_SELECT 0x1D000405 /* Select */ #define DIBUTTON_SKIING_SPECIAL2 0x1D000406 /* perform second special move */ #define DIBUTTON_SKIING_MENU 0x1D0004FD /* Show menu options */ /*--- Priority 2 controls ---*/ #define DIHATSWITCH_SKIING_GLANCE 0x1D004601 /* scroll view */ #define DIBUTTON_SKIING_ZOOM 0x1D004407 /* Zoom view in / out */ #define DIBUTTON_SKIING_LEFT_LINK 0x1D00C4E4 /* Fallback turn left button */ #define DIBUTTON_SKIING_RIGHT_LINK 0x1D00C4EC /* Fallback turn right button */ #define DIBUTTON_SKIING_FASTER_LINK 0x1D0144E0 /* Fallback increase speed button */ #define DIBUTTON_SKIING_SLOWER_LINK 0x1D0144E8 /* Fallback decrease speed button */ #define DIBUTTON_SKIING_DEVICE 0x1D0044FE /* Show input device and controls */ #define DIBUTTON_SKIING_PAUSE 0x1D0044FC /* Start / Pause / Restart game */ /*--- Sports - Soccer - Offense Offense ---*/ #define DIVIRTUAL_SPORTS_SOCCER_OFFENSE 0x1E000000 #define DIAXIS_SOCCERO_LATERAL 0x1E008201 /* Move / Aim: left / right */ #define DIAXIS_SOCCERO_MOVE 0x1E010202 /* Move / Aim: up / down */ #define DIAXIS_SOCCERO_BEND 0x1E018203 /* Bend to soccer shot/pass */ #define DIBUTTON_SOCCERO_SHOOT 0x1E000401 /* Shoot the ball */ #define DIBUTTON_SOCCERO_PASS 0x1E000402 /* Pass */ #define DIBUTTON_SOCCERO_FAKE 0x1E000403 /* Fake */ #define DIBUTTON_SOCCERO_PLAYER 0x1E000404 /* Select next player */ #define DIBUTTON_SOCCERO_SPECIAL1 0x1E000405 /* Apply special move */ #define DIBUTTON_SOCCERO_SELECT 0x1E000406 /* Select special move */ #define DIBUTTON_SOCCERO_MENU 0x1E0004FD /* Show menu options */ /*--- Priority 2 controls ---*/ #define DIHATSWITCH_SOCCERO_GLANCE 0x1E004601 /* scroll view */ #define DIBUTTON_SOCCERO_SUBSTITUTE 0x1E004407 /* Substitute one player for another */ #define DIBUTTON_SOCCERO_SHOOTLOW 0x1E004408 /* Shoot the ball low */ #define DIBUTTON_SOCCERO_SHOOTHIGH 0x1E004409 /* Shoot the ball high */ #define DIBUTTON_SOCCERO_PASSTHRU 0x1E00440A /* Make a thru pass */ #define DIBUTTON_SOCCERO_SPRINT 0x1E00440B /* Sprint / turbo boost */ #define DIBUTTON_SOCCERO_CONTROL 0x1E00440C /* Obtain control of the ball */ #define DIBUTTON_SOCCERO_HEAD 0x1E00440D /* Attempt to head the ball */ #define DIBUTTON_SOCCERO_LEFT_LINK 0x1E00C4E4 /* Fallback sidestep left button */ #define DIBUTTON_SOCCERO_RIGHT_LINK 0x1E00C4EC /* Fallback sidestep right button */ #define DIBUTTON_SOCCERO_FORWARD_LINK 0x1E0144E0 /* Fallback move forward button */ #define DIBUTTON_SOCCERO_BACK_LINK 0x1E0144E8 /* Fallback move back button */ #define DIBUTTON_SOCCERO_DEVICE 0x1E0044FE /* Show input device and controls */ #define DIBUTTON_SOCCERO_PAUSE 0x1E0044FC /* Start / Pause / Restart game */ /*--- Sports - Soccer - Defense Defense ---*/ #define DIVIRTUAL_SPORTS_SOCCER_DEFENSE 0x1F000000 #define DIAXIS_SOCCERD_LATERAL 0x1F008201 /* Move / Aim: left / right */ #define DIAXIS_SOCCERD_MOVE 0x1F010202 /* Move / Aim: up / down */ #define DIBUTTON_SOCCERD_BLOCK 0x1F000401 /* Attempt to block shot */ #define DIBUTTON_SOCCERD_STEAL 0x1F000402 /* Attempt to steal ball */ #define DIBUTTON_SOCCERD_FAKE 0x1F000403 /* Fake a block or a steal */ #define DIBUTTON_SOCCERD_PLAYER 0x1F000404 /* Select next player */ #define DIBUTTON_SOCCERD_SPECIAL 0x1F000405 /* Apply special move */ #define DIBUTTON_SOCCERD_SELECT 0x1F000406 /* Select special move */ #define DIBUTTON_SOCCERD_SLIDE 0x1F000407 /* Attempt a slide tackle */ #define DIBUTTON_SOCCERD_MENU 0x1F0004FD /* Show menu options */ /*--- Priority 2 controls ---*/ #define DIHATSWITCH_SOCCERD_GLANCE 0x1F004601 /* scroll view */ #define DIBUTTON_SOCCERD_FOUL 0x1F004408 /* Initiate a foul / hard-foul */ #define DIBUTTON_SOCCERD_HEAD 0x1F004409 /* Attempt a Header */ #define DIBUTTON_SOCCERD_CLEAR 0x1F00440A /* Attempt to clear the ball down the field */ #define DIBUTTON_SOCCERD_GOALIECHARGE 0x1F00440B /* Make the goalie charge out of the box */ #define DIBUTTON_SOCCERD_SUBSTITUTE 0x1F00440C /* Substitute one player for another */ #define DIBUTTON_SOCCERD_LEFT_LINK 0x1F00C4E4 /* Fallback sidestep left button */ #define DIBUTTON_SOCCERD_RIGHT_LINK 0x1F00C4EC /* Fallback sidestep right button */ #define DIBUTTON_SOCCERD_FORWARD_LINK 0x1F0144E0 /* Fallback move forward button */ #define DIBUTTON_SOCCERD_BACK_LINK 0x1F0144E8 /* Fallback move back button */ #define DIBUTTON_SOCCERD_DEVICE 0x1F0044FE /* Show input device and controls */ #define DIBUTTON_SOCCERD_PAUSE 0x1F0044FC /* Start / Pause / Restart game */ /*--- Sports - Racquet Tennis - Table-Tennis - Squash ---*/ #define DIVIRTUAL_SPORTS_RACQUET 0x20000000 #define DIAXIS_RACQUET_LATERAL 0x20008201 /* Move / Aim: left / right */ #define DIAXIS_RACQUET_MOVE 0x20010202 /* Move / Aim: up / down */ #define DIBUTTON_RACQUET_SWING 0x20000401 /* Swing racquet */ #define DIBUTTON_RACQUET_BACKSWING 0x20000402 /* Swing backhand */ #define DIBUTTON_RACQUET_SMASH 0x20000403 /* Smash shot */ #define DIBUTTON_RACQUET_SPECIAL 0x20000404 /* Special shot */ #define DIBUTTON_RACQUET_SELECT 0x20000405 /* Select special shot */ #define DIBUTTON_RACQUET_MENU 0x200004FD /* Show menu options */ /*--- Priority 2 controls ---*/ #define DIHATSWITCH_RACQUET_GLANCE 0x20004601 /* scroll view */ #define DIBUTTON_RACQUET_TIMEOUT 0x20004406 /* Call for time out */ #define DIBUTTON_RACQUET_SUBSTITUTE 0x20004407 /* Substitute one player for another */ #define DIBUTTON_RACQUET_LEFT_LINK 0x2000C4E4 /* Fallback sidestep left button */ #define DIBUTTON_RACQUET_RIGHT_LINK 0x2000C4EC /* Fallback sidestep right button */ #define DIBUTTON_RACQUET_FORWARD_LINK 0x200144E0 /* Fallback move forward button */ #define DIBUTTON_RACQUET_BACK_LINK 0x200144E8 /* Fallback move back button */ #define DIBUTTON_RACQUET_DEVICE 0x200044FE /* Show input device and controls */ #define DIBUTTON_RACQUET_PAUSE 0x200044FC /* Start / Pause / Restart game */ /*--- Arcade- 2D Side to Side movement ---*/ #define DIVIRTUAL_ARCADE_SIDE2SIDE 0x21000000 #define DIAXIS_ARCADES_LATERAL 0x21008201 /* left / right */ #define DIAXIS_ARCADES_MOVE 0x21010202 /* up / down */ #define DIBUTTON_ARCADES_THROW 0x21000401 /* throw object */ #define DIBUTTON_ARCADES_CARRY 0x21000402 /* carry object */ #define DIBUTTON_ARCADES_ATTACK 0x21000403 /* attack */ #define DIBUTTON_ARCADES_SPECIAL 0x21000404 /* apply special move */ #define DIBUTTON_ARCADES_SELECT 0x21000405 /* select special move */ #define DIBUTTON_ARCADES_MENU 0x210004FD /* Show menu options */ /*--- Priority 2 controls ---*/ #define DIHATSWITCH_ARCADES_VIEW 0x21004601 /* scroll view left / right / up / down */ #define DIBUTTON_ARCADES_LEFT_LINK 0x2100C4E4 /* Fallback sidestep left button */ #define DIBUTTON_ARCADES_RIGHT_LINK 0x2100C4EC /* Fallback sidestep right button */ #define DIBUTTON_ARCADES_FORWARD_LINK 0x210144E0 /* Fallback move forward button */ #define DIBUTTON_ARCADES_BACK_LINK 0x210144E8 /* Fallback move back button */ #define DIBUTTON_ARCADES_VIEW_UP_LINK 0x2107C4E0 /* Fallback scroll view up button */ #define DIBUTTON_ARCADES_VIEW_DOWN_LINK 0x2107C4E8 /* Fallback scroll view down button */ #define DIBUTTON_ARCADES_VIEW_LEFT_LINK 0x2107C4E4 /* Fallback scroll view left button */ #define DIBUTTON_ARCADES_VIEW_RIGHT_LINK 0x2107C4EC /* Fallback scroll view right button */ #define DIBUTTON_ARCADES_DEVICE 0x210044FE /* Show input device and controls */ #define DIBUTTON_ARCADES_PAUSE 0x210044FC /* Start / Pause / Restart game */ /*--- Arcade - Platform Game Character moves around on screen ---*/ #define DIVIRTUAL_ARCADE_PLATFORM 0x22000000 #define DIAXIS_ARCADEP_LATERAL 0x22008201 /* Left / right */ #define DIAXIS_ARCADEP_MOVE 0x22010202 /* Up / down */ #define DIBUTTON_ARCADEP_JUMP 0x22000401 /* Jump */ #define DIBUTTON_ARCADEP_FIRE 0x22000402 /* Fire */ #define DIBUTTON_ARCADEP_CROUCH 0x22000403 /* Crouch */ #define DIBUTTON_ARCADEP_SPECIAL 0x22000404 /* Apply special move */ #define DIBUTTON_ARCADEP_SELECT 0x22000405 /* Select special move */ #define DIBUTTON_ARCADEP_MENU 0x220004FD /* Show menu options */ /*--- Priority 2 controls ---*/ #define DIHATSWITCH_ARCADEP_VIEW 0x22004601 /* Scroll view */ #define DIBUTTON_ARCADEP_FIRESECONDARY 0x22004406 /* Alternative fire button */ #define DIBUTTON_ARCADEP_LEFT_LINK 0x2200C4E4 /* Fallback sidestep left button */ #define DIBUTTON_ARCADEP_RIGHT_LINK 0x2200C4EC /* Fallback sidestep right button */ #define DIBUTTON_ARCADEP_FORWARD_LINK 0x220144E0 /* Fallback move forward button */ #define DIBUTTON_ARCADEP_BACK_LINK 0x220144E8 /* Fallback move back button */ #define DIBUTTON_ARCADEP_VIEW_UP_LINK 0x2207C4E0 /* Fallback scroll view up button */ #define DIBUTTON_ARCADEP_VIEW_DOWN_LINK 0x2207C4E8 /* Fallback scroll view down button */ #define DIBUTTON_ARCADEP_VIEW_LEFT_LINK 0x2207C4E4 /* Fallback scroll view left button */ #define DIBUTTON_ARCADEP_VIEW_RIGHT_LINK 0x2207C4EC /* Fallback scroll view right button */ #define DIBUTTON_ARCADEP_DEVICE 0x220044FE /* Show input device and controls */ #define DIBUTTON_ARCADEP_PAUSE 0x220044FC /* Start / Pause / Restart game */ /*--- CAD - 2D Object Control Controls to select and move objects in 2D ---*/ #define DIVIRTUAL_CAD_2DCONTROL 0x23000000 #define DIAXIS_2DCONTROL_LATERAL 0x23008201 /* Move view left / right */ #define DIAXIS_2DCONTROL_MOVE 0x23010202 /* Move view up / down */ #define DIAXIS_2DCONTROL_INOUT 0x23018203 /* Zoom - in / out */ #define DIBUTTON_2DCONTROL_SELECT 0x23000401 /* Select Object */ #define DIBUTTON_2DCONTROL_SPECIAL1 0x23000402 /* Do first special operation */ #define DIBUTTON_2DCONTROL_SPECIAL 0x23000403 /* Select special operation */ #define DIBUTTON_2DCONTROL_SPECIAL2 0x23000404 /* Do second special operation */ #define DIBUTTON_2DCONTROL_MENU 0x230004FD /* Show menu options */ /*--- Priority 2 controls ---*/ #define DIHATSWITCH_2DCONTROL_HATSWITCH 0x23004601 /* Hat switch */ #define DIAXIS_2DCONTROL_ROTATEZ 0x23024204 /* Rotate view clockwise / counterclockwise */ #define DIBUTTON_2DCONTROL_DISPLAY 0x23004405 /* Shows next on-screen display options */ #define DIBUTTON_2DCONTROL_DEVICE 0x230044FE /* Show input device and controls */ #define DIBUTTON_2DCONTROL_PAUSE 0x230044FC /* Start / Pause / Restart game */ /*--- CAD - 3D object control Controls to select and move objects within a 3D environment ---*/ #define DIVIRTUAL_CAD_3DCONTROL 0x24000000 #define DIAXIS_3DCONTROL_LATERAL 0x24008201 /* Move view left / right */ #define DIAXIS_3DCONTROL_MOVE 0x24010202 /* Move view up / down */ #define DIAXIS_3DCONTROL_INOUT 0x24018203 /* Zoom - in / out */ #define DIBUTTON_3DCONTROL_SELECT 0x24000401 /* Select Object */ #define DIBUTTON_3DCONTROL_SPECIAL1 0x24000402 /* Do first special operation */ #define DIBUTTON_3DCONTROL_SPECIAL 0x24000403 /* Select special operation */ #define DIBUTTON_3DCONTROL_SPECIAL2 0x24000404 /* Do second special operation */ #define DIBUTTON_3DCONTROL_MENU 0x240004FD /* Show menu options */ /*--- Priority 2 controls ---*/ #define DIHATSWITCH_3DCONTROL_HATSWITCH 0x24004601 /* Hat switch */ #define DIAXIS_3DCONTROL_ROTATEX 0x24034204 /* Rotate view forward or up / backward or down */ #define DIAXIS_3DCONTROL_ROTATEY 0x2402C205 /* Rotate view clockwise / counterclockwise */ #define DIAXIS_3DCONTROL_ROTATEZ 0x24024206 /* Rotate view left / right */ #define DIBUTTON_3DCONTROL_DISPLAY 0x24004405 /* Show next on-screen display options */ #define DIBUTTON_3DCONTROL_DEVICE 0x240044FE /* Show input device and controls */ #define DIBUTTON_3DCONTROL_PAUSE 0x240044FC /* Start / Pause / Restart game */ /*--- CAD - 3D Navigation - Fly through Controls for 3D modeling ---*/ #define DIVIRTUAL_CAD_FLYBY 0x25000000 #define DIAXIS_CADF_LATERAL 0x25008201 /* move view left / right */ #define DIAXIS_CADF_MOVE 0x25010202 /* move view up / down */ #define DIAXIS_CADF_INOUT 0x25018203 /* in / out */ #define DIBUTTON_CADF_SELECT 0x25000401 /* Select Object */ #define DIBUTTON_CADF_SPECIAL1 0x25000402 /* do first special operation */ #define DIBUTTON_CADF_SPECIAL 0x25000403 /* Select special operation */ #define DIBUTTON_CADF_SPECIAL2 0x25000404 /* do second special operation */ #define DIBUTTON_CADF_MENU 0x250004FD /* Show menu options */ /*--- Priority 2 controls ---*/ #define DIHATSWITCH_CADF_HATSWITCH 0x25004601 /* Hat switch */ #define DIAXIS_CADF_ROTATEX 0x25034204 /* Rotate view forward or up / backward or down */ #define DIAXIS_CADF_ROTATEY 0x2502C205 /* Rotate view clockwise / counterclockwise */ #define DIAXIS_CADF_ROTATEZ 0x25024206 /* Rotate view left / right */ #define DIBUTTON_CADF_DISPLAY 0x25004405 /* shows next on-screen display options */ #define DIBUTTON_CADF_DEVICE 0x250044FE /* Show input device and controls */ #define DIBUTTON_CADF_PAUSE 0x250044FC /* Start / Pause / Restart game */ /*--- CAD - 3D Model Control Controls for 3D modeling ---*/ #define DIVIRTUAL_CAD_MODEL 0x26000000 #define DIAXIS_CADM_LATERAL 0x26008201 /* move view left / right */ #define DIAXIS_CADM_MOVE 0x26010202 /* move view up / down */ #define DIAXIS_CADM_INOUT 0x26018203 /* in / out */ #define DIBUTTON_CADM_SELECT 0x26000401 /* Select Object */ #define DIBUTTON_CADM_SPECIAL1 0x26000402 /* do first special operation */ #define DIBUTTON_CADM_SPECIAL 0x26000403 /* Select special operation */ #define DIBUTTON_CADM_SPECIAL2 0x26000404 /* do second special operation */ #define DIBUTTON_CADM_MENU 0x260004FD /* Show menu options */ /*--- Priority 2 controls ---*/ #define DIHATSWITCH_CADM_HATSWITCH 0x26004601 /* Hat switch */ #define DIAXIS_CADM_ROTATEX 0x26034204 /* Rotate view forward or up / backward or down */ #define DIAXIS_CADM_ROTATEY 0x2602C205 /* Rotate view clockwise / counterclockwise */ #define DIAXIS_CADM_ROTATEZ 0x26024206 /* Rotate view left / right */ #define DIBUTTON_CADM_DISPLAY 0x26004405 /* shows next on-screen display options */ #define DIBUTTON_CADM_DEVICE 0x260044FE /* Show input device and controls */ #define DIBUTTON_CADM_PAUSE 0x260044FC /* Start / Pause / Restart game */ /*--- Control - Media Equipment Remote ---*/ #define DIVIRTUAL_REMOTE_CONTROL 0x27000000 #define DIAXIS_REMOTE_SLIDER 0x27050201 /* Slider for adjustment: volume / color / bass / etc */ #define DIBUTTON_REMOTE_MUTE 0x27000401 /* Set volume on current device to zero */ #define DIBUTTON_REMOTE_SELECT 0x27000402 /* Next/previous: channel/ track / chapter / picture / station */ #define DIBUTTON_REMOTE_PLAY 0x27002403 /* Start or pause entertainment on current device */ #define DIBUTTON_REMOTE_CUE 0x27002404 /* Move through current media */ #define DIBUTTON_REMOTE_REVIEW 0x27002405 /* Move through current media */ #define DIBUTTON_REMOTE_CHANGE 0x27002406 /* Select next device */ #define DIBUTTON_REMOTE_RECORD 0x27002407 /* Start recording the current media */ #define DIBUTTON_REMOTE_MENU 0x270004FD /* Show menu options */ /*--- Priority 2 controls ---*/ #define DIAXIS_REMOTE_SLIDER2 0x27054202 /* Slider for adjustment: volume */ #define DIBUTTON_REMOTE_TV 0x27005C08 /* Select TV */ #define DIBUTTON_REMOTE_CABLE 0x27005C09 /* Select cable box */ #define DIBUTTON_REMOTE_CD 0x27005C0A /* Select CD player */ #define DIBUTTON_REMOTE_VCR 0x27005C0B /* Select VCR */ #define DIBUTTON_REMOTE_TUNER 0x27005C0C /* Select tuner */ #define DIBUTTON_REMOTE_DVD 0x27005C0D /* Select DVD player */ #define DIBUTTON_REMOTE_ADJUST 0x27005C0E /* Enter device adjustment menu */ #define DIBUTTON_REMOTE_DIGIT0 0x2700540F /* Digit 0 */ #define DIBUTTON_REMOTE_DIGIT1 0x27005410 /* Digit 1 */ #define DIBUTTON_REMOTE_DIGIT2 0x27005411 /* Digit 2 */ #define DIBUTTON_REMOTE_DIGIT3 0x27005412 /* Digit 3 */ #define DIBUTTON_REMOTE_DIGIT4 0x27005413 /* Digit 4 */ #define DIBUTTON_REMOTE_DIGIT5 0x27005414 /* Digit 5 */ #define DIBUTTON_REMOTE_DIGIT6 0x27005415 /* Digit 6 */ #define DIBUTTON_REMOTE_DIGIT7 0x27005416 /* Digit 7 */ #define DIBUTTON_REMOTE_DIGIT8 0x27005417 /* Digit 8 */ #define DIBUTTON_REMOTE_DIGIT9 0x27005418 /* Digit 9 */ #define DIBUTTON_REMOTE_DEVICE 0x270044FE /* Show input device and controls */ #define DIBUTTON_REMOTE_PAUSE 0x270044FC /* Start / Pause / Restart game */ /*--- Control- Web Help or Browser ---*/ #define DIVIRTUAL_BROWSER_CONTROL 0x28000000 #define DIAXIS_BROWSER_LATERAL 0x28008201 /* Move on screen pointer */ #define DIAXIS_BROWSER_MOVE 0x28010202 /* Move on screen pointer */ #define DIBUTTON_BROWSER_SELECT 0x28000401 /* Select current item */ #define DIAXIS_BROWSER_VIEW 0x28018203 /* Move view up/down */ #define DIBUTTON_BROWSER_REFRESH 0x28000402 /* Refresh */ #define DIBUTTON_BROWSER_MENU 0x280004FD /* Show menu options */ /*--- Priority 2 controls ---*/ #define DIBUTTON_BROWSER_SEARCH 0x28004403 /* Use search tool */ #define DIBUTTON_BROWSER_STOP 0x28004404 /* Cease current update */ #define DIBUTTON_BROWSER_HOME 0x28004405 /* Go directly to "home" location */ #define DIBUTTON_BROWSER_FAVORITES 0x28004406 /* Mark current site as favorite */ #define DIBUTTON_BROWSER_NEXT 0x28004407 /* Select Next page */ #define DIBUTTON_BROWSER_PREVIOUS 0x28004408 /* Select Previous page */ #define DIBUTTON_BROWSER_HISTORY 0x28004409 /* Show/Hide History */ #define DIBUTTON_BROWSER_PRINT 0x2800440A /* Print current page */ #define DIBUTTON_BROWSER_DEVICE 0x280044FE /* Show input device and controls */ #define DIBUTTON_BROWSER_PAUSE 0x280044FC /* Start / Pause / Restart game */ /*--- Driving Simulator - Giant Walking Robot Walking tank with weapons ---*/ #define DIVIRTUAL_DRIVING_MECHA 0x29000000 #define DIAXIS_MECHA_STEER 0x29008201 /* Turns mecha left/right */ #define DIAXIS_MECHA_TORSO 0x29010202 /* Tilts torso forward/backward */ #define DIAXIS_MECHA_ROTATE 0x29020203 /* Turns torso left/right */ #define DIAXIS_MECHA_THROTTLE 0x29038204 /* Engine Speed */ #define DIBUTTON_MECHA_FIRE 0x29000401 /* Fire */ #define DIBUTTON_MECHA_WEAPONS 0x29000402 /* Select next weapon group */ #define DIBUTTON_MECHA_TARGET 0x29000403 /* Select closest enemy available target */ #define DIBUTTON_MECHA_REVERSE 0x29000404 /* Toggles throttle in/out of reverse */ #define DIBUTTON_MECHA_ZOOM 0x29000405 /* Zoom in/out targeting reticule */ #define DIBUTTON_MECHA_JUMP 0x29000406 /* Fires jump jets */ #define DIBUTTON_MECHA_MENU 0x290004FD /* Show menu options */ /*--- Priority 2 controls ---*/ #define DIBUTTON_MECHA_CENTER 0x29004407 /* Center torso to legs */ #define DIHATSWITCH_MECHA_GLANCE 0x29004601 /* Look around */ #define DIBUTTON_MECHA_VIEW 0x29004408 /* Cycle through view options */ #define DIBUTTON_MECHA_FIRESECONDARY 0x29004409 /* Alternative fire button */ #define DIBUTTON_MECHA_LEFT_LINK 0x2900C4E4 /* Fallback steer left button */ #define DIBUTTON_MECHA_RIGHT_LINK 0x2900C4EC /* Fallback steer right button */ #define DIBUTTON_MECHA_FORWARD_LINK 0x290144E0 /* Fallback tilt torso forward button */ #define DIBUTTON_MECHA_BACK_LINK 0x290144E8 /* Fallback tilt toroso backward button */ #define DIBUTTON_MECHA_ROTATE_LEFT_LINK 0x290244E4 /* Fallback rotate toroso right button */ #define DIBUTTON_MECHA_ROTATE_RIGHT_LINK 0x290244EC /* Fallback rotate torso left button */ #define DIBUTTON_MECHA_FASTER_LINK 0x2903C4E0 /* Fallback increase engine speed */ #define DIBUTTON_MECHA_SLOWER_LINK 0x2903C4E8 /* Fallback decrease engine speed */ #define DIBUTTON_MECHA_DEVICE 0x290044FE /* Show input device and controls */ #define DIBUTTON_MECHA_PAUSE 0x290044FC /* Start / Pause / Restart game */ /* * "ANY" semantics can be used as a last resort to get mappings for actions * that match nothing in the chosen virtual genre. These semantics will be * mapped at a lower priority that virtual genre semantics. Also, hardware * vendors will not be able to provide sensible mappings for these unless * they provide application specific mappings. */ #define DIAXIS_ANY_X_1 0xFF00C201 #define DIAXIS_ANY_X_2 0xFF00C202 #define DIAXIS_ANY_Y_1 0xFF014201 #define DIAXIS_ANY_Y_2 0xFF014202 #define DIAXIS_ANY_Z_1 0xFF01C201 #define DIAXIS_ANY_Z_2 0xFF01C202 #define DIAXIS_ANY_R_1 0xFF024201 #define DIAXIS_ANY_R_2 0xFF024202 #define DIAXIS_ANY_U_1 0xFF02C201 #define DIAXIS_ANY_U_2 0xFF02C202 #define DIAXIS_ANY_V_1 0xFF034201 #define DIAXIS_ANY_V_2 0xFF034202 #define DIAXIS_ANY_A_1 0xFF03C201 #define DIAXIS_ANY_A_2 0xFF03C202 #define DIAXIS_ANY_B_1 0xFF044201 #define DIAXIS_ANY_B_2 0xFF044202 #define DIAXIS_ANY_C_1 0xFF04C201 #define DIAXIS_ANY_C_2 0xFF04C202 #define DIAXIS_ANY_S_1 0xFF054201 #define DIAXIS_ANY_S_2 0xFF054202 #define DIAXIS_ANY_1 0xFF004201 #define DIAXIS_ANY_2 0xFF004202 #define DIAXIS_ANY_3 0xFF004203 #define DIAXIS_ANY_4 0xFF004204 #define DIPOV_ANY_1 0xFF004601 #define DIPOV_ANY_2 0xFF004602 #define DIPOV_ANY_3 0xFF004603 #define DIPOV_ANY_4 0xFF004604 #define DIBUTTON_ANY(instance) ( 0xFF004400 | instance ) #ifdef __cplusplus }; #endif #endif /* __DINPUT_INCLUDED__ */ /**************************************************************************** * * Definitions for non-IDirectInput (VJoyD) features defined more recently * than the current sdk files * ****************************************************************************/ #ifdef _INC_MMSYSTEM #ifndef MMNOJOY #ifndef __VJOYDX_INCLUDED__ #define __VJOYDX_INCLUDED__ #ifdef __cplusplus extern "C" { #endif /* * Flag to indicate that the dwReserved2 field of the JOYINFOEX structure * contains mini-driver specific data to be passed by VJoyD to the mini- * driver instead of doing a poll. */ #define JOY_PASSDRIVERDATA 0x10000000l /* * Informs the joystick driver that the configuration has been changed * and should be reloaded from the registery. * dwFlags is reserved and should be set to zero */ WINMMAPI MMRESULT WINAPI joyConfigChanged( DWORD dwFlags ); #ifndef DIJ_RINGZERO /* * Invoke the joystick control panel directly, using the passed window handle * as the parent of the dialog. This API is only supported for compatibility * purposes; new applications should use the RunControlPanel method of a * device interface for a game controller. * The API is called by using the function pointer returned by * GetProcAddress( hCPL, TEXT("ShowJoyCPL") ) where hCPL is a HMODULE returned * by LoadLibrary( TEXT("joy.cpl") ). The typedef is provided to allow * declaration and casting of an appropriately typed variable. */ void WINAPI ShowJoyCPL( HWND hWnd ); typedef void (WINAPI* LPFNSHOWJOYCPL)( HWND hWnd ); #endif /* DIJ_RINGZERO */ /* * Hardware Setting indicating that the device is a headtracker */ #define JOY_HWS_ISHEADTRACKER 0x02000000l /* * Hardware Setting indicating that the VxD is used to replace * the standard analog polling */ #define JOY_HWS_ISGAMEPORTDRIVER 0x04000000l /* * Hardware Setting indicating that the driver needs a standard * gameport in order to communicate with the device. */ #define JOY_HWS_ISANALOGPORTDRIVER 0x08000000l /* * Hardware Setting indicating that VJoyD should not load this * driver, it will be loaded externally and will register with * VJoyD of it's own accord. */ #define JOY_HWS_AUTOLOAD 0x10000000l /* * Hardware Setting indicating that the driver acquires any * resources needed without needing a devnode through VJoyD. */ #define JOY_HWS_NODEVNODE 0x20000000l /* * Hardware Setting indicating that the device is a gameport bus */ #define JOY_HWS_ISGAMEPORTBUS 0x80000000l #define JOY_HWS_GAMEPORTBUSBUSY 0x00000001l /* * Usage Setting indicating that the settings are volatile and * should be removed if still present on a reboot. */ #define JOY_US_VOLATILE 0x00000008L #ifdef __cplusplus }; #endif #endif /* __VJOYDX_INCLUDED__ */ #endif /* not MMNOJOY */ #endif /* _INC_MMSYSTEM */ /**************************************************************************** * * Definitions for non-IDirectInput (VJoyD) features defined more recently * than the current ddk files * ****************************************************************************/ #ifndef DIJ_RINGZERO #ifdef _INC_MMDDK #ifndef MMNOJOYDEV #ifndef __VJOYDXD_INCLUDED__ #define __VJOYDXD_INCLUDED__ /* * Poll type in which the do_other field of the JOYOEMPOLLDATA * structure contains mini-driver specific data passed from an app. */ #define JOY_OEMPOLL_PASSDRIVERDATA 7 #endif /* __VJOYDXD_INCLUDED__ */ #endif /* not MMNOJOYDEV */ #endif /* _INC_MMDDK */ #endif /* DIJ_RINGZERO */ ================================================ FILE: Include/disasm.h ================================================ //////////////////////////////////////////////////////////////////////////////// // // // OllyDbg Disassembling Engine v2.01 // // // // Copyright (c) 2007-2013 Oleh Yuschuk, ollydbg@t-online.de // // // // This code is part of the OllyDbg Disassembler v2.01 // // // // Disassembling engine 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 3 of the License, or (at // // your option) any later version. // // // // This code 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, see . // // // //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// // // // This is a fast disassembler that can be used to determine the length of // // the binary 80x86 32-bit command and its attributes, to convert it to the // // human-readable text form, highlight its operands, and create hexadecimal // // dump of the binary command. // // // // It is a stripped down version of the disassembler used by OllyDbg 2.01. // // It can't analyse and comment the contents of the operands, or predict the // // results of the command execution. Analysis-dependent features are not // // included, too. Most other features are kept. // // // // Disassembler supports integer, FPU, MMX, 3DNow, SSE1-SSE4.1 and AVX // // instructions. 64-bit mode, AVX2, FMA and XOP are not (yet) supported. // // // // This code can be compiled either in ASCII or UNICODE mode. It is reentrant // // (thread-safe, feature not available in the original OllyDbg code). // // // // Typical operation speed on 3-GHz Phenom II in MASM mode is: // // // // Command length and info: 130 ns/command (7,700,000 commands/s) // // Disassembly: 290 ns/command (3,400,000 commands/s) // // Disassembly, dump, highlighting: 350 ns/command (2,800,000 commands/s) // // // //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// ////////////// PREFERRED SETTINGS AND FIXES FOR BORLAND COMPILERS ////////////// #ifdef __BORLANDC__ #pragma option -a1 // Byte alignment #pragma option -w-pin // Disable "partially bracketed" warning // Redefinition of MAKELONG removes nasty warning under Borland Builder 4.0: // boolean OR in one row with arithmetical shift. #undef MAKELONG #define MAKELONG(lo,hi) ((LONG)(((WORD)(lo))|(((DWORD)((WORD)(hi)))<<16))) #endif #define MAKEWP(lo,hi) ((WPARAM)MAKELONG(lo,hi)) #define MAKELP(lo,hi) ((LPARAM)MAKELONG(lo,hi)) #define LOINT(l) ((signed short)((WORD)(l))) #define HIINT(l) ((signed short)(((DWORD)(l)>>16) & 0xFFFF)) #ifndef FIELD_OFFSET #define FIELD_OFFSET(type,field) ((long)&(((type *)0)->field)) #endif //////////////////////////////////////////////////////////////////////////////// #define TEXTLEN 256 // Max length of text string #define SHORTNAME 32 // Max length of short or module name #ifdef UNICODE #define tchar wchar_t // Or replace it with TCHAR #define T(x) L##x #define tstrlen wcslen #define tstrcpy wcscpy #define tstrcmp wcscmp #define tstrlwr _wcslwr #define tsprintf swprintf #define ttolower towlower #else #define tchar char #define T(x) x #define tstrlen strlen #define tstrcpy strcpy #define tstrcmp strcmp #define tstrlwr strlwr #define tsprintf sprintf #define ttolower tolower #endif #define NOPERAND 4 // Maximal allowed number of operands #define NREG 8 // Number of registers (of any type) #define NSEG 6 // Number of valid segment registers #define MAXCMDSIZE 16 // Maximal length of valid 80x86 command #define NEGLIMIT (-16384) // Limit to decode offsets as negative #define DECLIMIT 16384 // Limit to decode constants as decimal typedef unsigned char uchar; // Unsigned character (byte) typedef unsigned short ushort; // Unsigned short typedef unsigned int uint; // Unsigned integer typedef unsigned long ulong; // Unsigned long // CMDMASK can be used to balance between the necessary memory size and the // disassembly time. #define CMDMASK 0x3FFF // Search mask for Disassembler, 2**n-1 #define NCHAIN 44300 // Max allowed number of chain links // Registers. #define REG_UNDEF (-1) // Codes of general purpose registers #define REG_EAX 0 #define REG_ECX 1 #define REG_EDX 2 #define REG_EBX 3 #define REG_ESP 4 #define REG_EBP 5 #define REG_ESI 6 #define REG_EDI 7 #define REG_AL 0 // Symbolic indices of 8-bit registers #define REG_CL 1 #define REG_DL 2 #define REG_BL 3 #define REG_AH 4 #define REG_CH 5 #define REG_DH 6 #define REG_BH 7 #define SEG_UNDEF (-1) // Codes of segment/selector registers #define SEG_ES 0 #define SEG_CS 1 #define SEG_SS 2 #define SEG_DS 3 #define SEG_FS 4 #define SEG_GS 5 // Command highlighting. #define DRAW_PLAIN '.' //0x0000000C // Plain commands #define DRAW_JUMP '>' //0x0000000D // Unconditional jump commands #define DRAW_CJMP '?' //0x0000000E // Conditional jump commands #define DRAW_PUSHPOP '=' //0x0000000F // PUSH/POP commands #define DRAW_CALL '@' //0x00000010 // CALL commands #define DRAW_RET '<' //0x00000011 // RET commands #define DRAW_FPU '1' //0x00000012 // FPU, MMX, 3DNow! and SSE commands #define DRAW_SUSPECT '!' //0x00000013 // Bad, system and privileged commands // Operand highlighting. #define DRAW_IREG 'R' //0x00000018 // General purpose registers #define DRAW_FREG 'F' //0x00000019 // FPU, MMX and SSE registers #define DRAW_SYSREG 'S' //0x0000001A // Segment and system registers #define DRAW_STKMEM 'K' //0x0000001B // Memory accessed over ESP or EBP #define DRAW_MEM 'M' //0x0000001C // Any other memory #define DRAW_CONST 'C' //0x0000001E // Constant #define D_NONE 0x00000000 // No special features // General type of command, only one is allowed. #define D_CMDTYPE 0x0000001F // Mask to extract type of command #define D_CMD 0x00000000 // Ordinary (none of listed below) #define D_MOV 0x00000001 // Move to or from integer register #define D_MOVC 0x00000002 // Conditional move to integer register #define D_SETC 0x00000003 // Conditional set integer register #define D_TEST 0x00000004 // Used to test data (CMP, TEST, AND...) #define D_STRING 0x00000005 // String command with REPxxx prefix #define D_JMP 0x00000006 // Unconditional near jump #define D_JMPFAR 0x00000007 // Unconditional far jump #define D_JMC 0x00000008 // Conditional jump on flags #define D_JMCX 0x00000009 // Conditional jump on (E)CX (and flags) #define D_PUSH 0x0000000A // PUSH exactly 1 (d)word of data #define D_POP 0x0000000B // POP exactly 1 (d)word of data #define D_CALL 0x0000000C // Plain near call #define D_CALLFAR 0x0000000D // Far call #define D_INT 0x0000000E // Interrupt #define D_RET 0x0000000F // Plain near return from call #define D_RETFAR 0x00000010 // Far return or IRET #define D_FPU 0x00000011 // FPU command #define D_MMX 0x00000012 // MMX instruction, incl. SSE extensions #define D_3DNOW 0x00000013 // 3DNow! instruction #define D_SSE 0x00000014 // SSE instruction #define D_IO 0x00000015 // Accesses I/O ports #define D_SYS 0x00000016 // Legal but useful in system code only #define D_PRIVILEGED 0x00000017 // Privileged (non-Ring3) command #define D_AVX 0x00000018 // AVX instruction #define D_XOP 0x00000019 // AMD instruction with XOP prefix #define D_DATA 0x0000001C // Data recognized by Analyser #define D_PSEUDO 0x0000001D // Pseudocommand, for search models only #define D_PREFIX 0x0000001E // Standalone prefix #define D_BAD 0x0000001F // Bad or unrecognized command // Additional parts of the command. #define D_SIZE01 0x00000020 // Bit 0x01 in last cmd is data size #define D_POSTBYTE 0x00000040 // Command continues in postbyte // For string commands, either long or short form can be selected. #define D_LONGFORM 0x00000080 // Long form of string command // Decoding of some commands depends on data or address size. #define D_SIZEMASK 0x00000F00 // Mask for data/address size dependence #define D_DATA16 0x00000100 // Requires 16-bit data size #define D_DATA32 0x00000200 // Requires 32-bit data size #define D_ADDR16 0x00000400 // Requires 16-bit address size #define D_ADDR32 0x00000800 // Requires 32-bit address size // Prefixes that command may, must or must not possess. #define D_MUSTMASK 0x0000F000 // Mask for fixed set of prefixes #define D_NOMUST 0x00000000 // No obligatory prefixes (default) #define D_MUST66 0x00001000 // (SSE,AVX) Requires 66, no F2 or F3 #define D_MUSTF2 0x00002000 // (SSE,AVX) Requires F2, no 66 or F3 #define D_MUSTF3 0x00003000 // (SSE,AVX) Requires F3, no 66 or F2 #define D_MUSTNONE 0x00004000 // (MMX,SSE,AVX) Requires no 66, F2, F3 #define D_NEEDF2 0x00005000 // (SSE,AVX) Requires F2, no F3 #define D_NEEDF3 0x00006000 // (SSE,AVX) Requires F3, no F2 #define D_NOREP 0x00007000 // Must not include F2 or F3 #define D_MUSTREP 0x00008000 // Must include F3 (REP) #define D_MUSTREPE 0x00009000 // Must include F3 (REPE) #define D_MUSTREPNE 0x0000A000 // Must include F2 (REPNE) #define D_LOCKABLE 0x00010000 // Allows for F0 (LOCK, memory only) #define D_BHINT 0x00020000 // Allows for branch hints (2E, 3E) // Decoding of some commands with ModRM-SIB depends whether register or memory. #define D_MEMORY 0x00040000 // Mod field must indicate memory #define D_REGISTER 0x00080000 // Mod field must indicate register // Side effects caused by command. #define D_FLAGMASK 0x00700000 // Mask to extract modified flags #define D_NOFLAGS 0x00000000 // Flags S,Z,P,O,C remain unchanged #define D_ALLFLAGS 0x00100000 // Modifies flags S,Z,P,O,C #define D_FLAGZ 0x00200000 // Modifies flag Z only #define D_FLAGC 0x00300000 // Modifies flag C only #define D_FLAGSCO 0x00400000 // Modifies flag C and O only #define D_FLAGD 0x00500000 // Modifies flag D only #define D_FLAGSZPC 0x00600000 // Modifies flags Z, P and C only (FPU) #define D_NOCFLAG 0x00700000 // S,Z,P,O modified, C unaffected #define D_FPUMASK 0x01800000 // Mask for effects on FPU stack #define D_FPUSAME 0x00000000 // Doesn't rotate FPU stack (default) #define D_FPUPOP 0x00800000 // Pops FPU stack #define D_FPUPOP2 0x01000000 // Pops FPU stack twice #define D_FPUPUSH 0x01800000 // Pushes FPU stack #define D_CHGESP 0x02000000 // Command indirectly modifies ESP // Command features. #define D_HLADIR 0x04000000 // Nonstandard order of operands in HLA #define D_WILDCARD 0x08000000 // Mnemonics contains W/D wildcard ('*') #define D_COND 0x10000000 // Conditional (action depends on flags) #define D_USESCARRY 0x20000000 // Uses Carry flag #define D_USEMASK 0xC0000000 // Mask to detect unusual commands #define D_RARE 0x40000000 // Rare or obsolete in Win32 apps #define D_SUSPICIOUS 0x80000000 // Suspicious command #define D_UNDOC 0xC0000000 // Undocumented command // Extension of D_xxx. #define DX_ZEROMASK 0x00000003 // How to decode FLAGS.Z flag #define DX_JE 0x00000001 // JE, JNE instead of JZ, JNZ #define DX_JZ 0x00000002 // JZ, JNZ instead of JE, JNE #define DX_CARRYMASK 0x0000000C // How to decode FLAGS.C flag #define DX_JB 0x00000004 // JAE, JB instead of JC, JNC #define DX_JC 0x00000008 // JC, JNC instead of JAE, JB #define DX_RETN 0x00000010 // The mnemonics is RETN #define DX_VEX 0x00000100 // Requires VEX prefix #define DX_VLMASK 0x00000600 // Mask to extract VEX operand length #define DX_LSHORT 0x00000000 // 128-bit only #define DX_LBOTH 0x00000200 // Both 128- and 256-bit versions #define DX_LLONG 0x00000400 // 256-bit only #define DX_IGNOREL 0x00000600 // Ignore VEX.L #define DX_NOVREG 0x00000800 // VEX.vvvv must be set to all 1's #define DX_VWMASK 0x00003000 // Mask to extract VEX.W #define DX_W0 0x00001000 // VEX.W must be 0 #define DX_W1 0x00002000 // VEX.W must be 1 #define DX_LEADMASK 0x00070000 // Mask to extract leading opcode bytes #define DX_LEAD0F 0x00000000 // Implied 0F leading byte (default) #define DX_LEAD38 0x00010000 // Implied 0F 38 leading opcode bytes #define DX_LEAD3A 0x00020000 // Implied 0F 3A leading opcode bytes #define DX_WONKYTRAP 0x00800000 // Don't single-step this command #define DX_TYPEMASK 0xFF000000 // Precised command type mask #define DX_ADD 0x01000000 // The command is integer ADD #define DX_SUB 0x02000000 // The command is integer SUB #define DX_LEA 0x03000000 // The command is LEA #define DX_NOP 0x04000000 // The command is NOP //#define DX_LVEX (DX_VEX|DX_LBOTH) //#define DX_GVEX (DX_VEX|DX_LLONG) // Type of operand, only one is allowed. Size of SSE operands is given for the // case of 128-bit operations and usually doubles for 256-bit AVX commands. If // B_NOVEXSIZE is set, memory may double but XMM registers are not promoted to // YMM. #define B_ARGMASK 0x000000FF // Mask to extract type of argument #define B_NONE 0x00000000 // Operand absent #define B_AL 0x00000001 // Register AL #define B_AH 0x00000002 // Register AH #define B_AX 0x00000003 // Register AX #define B_CL 0x00000004 // Register CL #define B_CX 0x00000005 // Register CX #define B_DX 0x00000006 // Register DX #define B_DXPORT 0x00000007 // Register DX as I/O port address #define B_EAX 0x00000008 // Register EAX #define B_EBX 0x00000009 // Register EBX #define B_ECX 0x0000000A // Register ECX #define B_EDX 0x0000000B // Register EDX #define B_ACC 0x0000000C // Accumulator (AL/AX/EAX) #define B_STRCNT 0x0000000D // Register CX or ECX as REPxx counter #define B_DXEDX 0x0000000E // Register DX or EDX in DIV/MUL #define B_BPEBP 0x0000000F // Register BP or EBP in ENTER/LEAVE #define B_REG 0x00000010 // 8/16/32-bit register in Reg #define B_REG16 0x00000011 // 16-bit register in Reg #define B_REG32 0x00000012 // 32-bit register in Reg #define B_REGCMD 0x00000013 // 16/32-bit register in last cmd byte #define B_REGCMD8 0x00000014 // 8-bit register in last cmd byte #define B_ANYREG 0x00000015 // Reg field is unused, any allowed #define B_INT 0x00000016 // 8/16/32-bit register/memory in ModRM #define B_INT8 0x00000017 // 8-bit register/memory in ModRM #define B_INT16 0x00000018 // 16-bit register/memory in ModRM #define B_INT32 0x00000019 // 32-bit register/memory in ModRM #define B_INT1632 0x0000001A // 16/32-bit register/memory in ModRM #define B_INT64 0x0000001B // 64-bit integer in ModRM, memory only #define B_INT128 0x0000001C // 128-bit integer in ModRM, memory only #define B_IMMINT 0x0000001D // 8/16/32-bit int at immediate addr #define B_INTPAIR 0x0000001E // Two signed 16/32 in ModRM, memory only #define B_SEGOFFS 0x0000001F // 16:16/16:32 absolute address in memory #define B_STRDEST 0x00000020 // 8/16/32-bit string dest, [ES:(E)DI] #define B_STRDEST8 0x00000021 // 8-bit string destination, [ES:(E)DI] #define B_STRSRC 0x00000022 // 8/16/32-bit string source, [(E)SI] #define B_STRSRC8 0x00000023 // 8-bit string source, [(E)SI] #define B_XLATMEM 0x00000024 // 8-bit memory in XLAT, [(E)BX+AL] #define B_EAXMEM 0x00000025 // Reference to memory addressed by [EAX] #define B_LONGDATA 0x00000026 // Long data in ModRM, mem only #define B_ANYMEM 0x00000027 // Reference to memory, data unimportant #define B_STKTOP 0x00000028 // 16/32-bit int top of stack #define B_STKTOPFAR 0x00000029 // Top of stack (16:16/16:32 far addr) #define B_STKTOPEFL 0x0000002A // 16/32-bit flags on top of stack #define B_STKTOPA 0x0000002B // 16/32-bit top of stack all registers #define B_PUSH 0x0000002C // 16/32-bit int push to stack #define B_PUSHRET 0x0000002D // 16/32-bit push of return address #define B_PUSHRETF 0x0000002E // 16:16/16:32-bit push of far retaddr #define B_PUSHA 0x0000002F // 16/32-bit push all registers #define B_EBPMEM 0x00000030 // 16/32-bit int at [EBP] #define B_SEG 0x00000031 // Segment register in Reg #define B_SEGNOCS 0x00000032 // Segment register in Reg, but not CS #define B_SEGCS 0x00000033 // Segment register CS #define B_SEGDS 0x00000034 // Segment register DS #define B_SEGES 0x00000035 // Segment register ES #define B_SEGFS 0x00000036 // Segment register FS #define B_SEGGS 0x00000037 // Segment register GS #define B_SEGSS 0x00000038 // Segment register SS #define B_ST 0x00000039 // 80-bit FPU register in last cmd byte #define B_ST0 0x0000003A // 80-bit FPU register ST0 #define B_ST1 0x0000003B // 80-bit FPU register ST1 #define B_FLOAT32 0x0000003C // 32-bit float in ModRM, memory only #define B_FLOAT64 0x0000003D // 64-bit float in ModRM, memory only #define B_FLOAT80 0x0000003E // 80-bit float in ModRM, memory only #define B_BCD 0x0000003F // 80-bit BCD in ModRM, memory only #define B_MREG8x8 0x00000040 // MMX register as 8 8-bit integers #define B_MMX8x8 0x00000041 // MMX reg/memory as 8 8-bit integers #define B_MMX8x8DI 0x00000042 // MMX 8 8-bit integers at [DS:(E)DI] #define B_MREG16x4 0x00000043 // MMX register as 4 16-bit integers #define B_MMX16x4 0x00000044 // MMX reg/memory as 4 16-bit integers #define B_MREG32x2 0x00000045 // MMX register as 2 32-bit integers #define B_MMX32x2 0x00000046 // MMX reg/memory as 2 32-bit integers #define B_MREG64 0x00000047 // MMX register as 1 64-bit integer #define B_MMX64 0x00000048 // MMX reg/memory as 1 64-bit integer #define B_3DREG 0x00000049 // 3DNow! register as 2 32-bit floats #define B_3DNOW 0x0000004A // 3DNow! reg/memory as 2 32-bit floats #define B_XMM0I32x4 0x0000004B // XMM0 as 4 32-bit integers #define B_XMM0I64x2 0x0000004C // XMM0 as 2 64-bit integers #define B_XMM0I8x16 0x0000004D // XMM0 as 16 8-bit integers #define B_SREGF32x4 0x0000004E // SSE register as 4 32-bit floats #define B_SREGF32L 0x0000004F // Low 32-bit float in SSE register #define B_SREGF32x2L 0x00000050 // Low 2 32-bit floats in SSE register #define B_SSEF32x4 0x00000051 // SSE reg/memory as 4 32-bit floats #define B_SSEF32L 0x00000052 // Low 32-bit float in SSE reg/memory #define B_SSEF32x2L 0x00000053 // Low 2 32-bit floats in SSE reg/memory #define B_SREGF64x2 0x00000054 // SSE register as 2 64-bit floats #define B_SREGF64L 0x00000055 // Low 64-bit float in SSE register #define B_SSEF64x2 0x00000056 // SSE reg/memory as 2 64-bit floats #define B_SSEF64L 0x00000057 // Low 64-bit float in SSE reg/memory #define B_SREGI8x16 0x00000058 // SSE register as 16 8-bit sigints #define B_SSEI8x16 0x00000059 // SSE reg/memory as 16 8-bit sigints #define B_SSEI8x16DI 0x0000005A // SSE 16 8-bit sigints at [DS:(E)DI] #define B_SSEI8x8L 0x0000005B // Low 8 8-bit ints in SSE reg/memory #define B_SSEI8x4L 0x0000005C // Low 4 8-bit ints in SSE reg/memory #define B_SSEI8x2L 0x0000005D // Low 2 8-bit ints in SSE reg/memory #define B_SREGI16x8 0x0000005E // SSE register as 8 16-bit sigints #define B_SSEI16x8 0x0000005F // SSE reg/memory as 8 16-bit sigints #define B_SSEI16x4L 0x00000060 // Low 4 16-bit ints in SSE reg/memory #define B_SSEI16x2L 0x00000061 // Low 2 16-bit ints in SSE reg/memory #define B_SREGI32x4 0x00000062 // SSE register as 4 32-bit sigints #define B_SREGI32L 0x00000063 // Low 32-bit sigint in SSE register #define B_SREGI32x2L 0x00000064 // Low 2 32-bit sigints in SSE register #define B_SSEI32x4 0x00000065 // SSE reg/memory as 4 32-bit sigints #define B_SSEI32x2L 0x00000066 // Low 2 32-bit sigints in SSE reg/memory #define B_SREGI64x2 0x00000067 // SSE register as 2 64-bit sigints #define B_SSEI64x2 0x00000068 // SSE reg/memory as 2 64-bit sigints #define B_SREGI64L 0x00000069 // Low 64-bit sigint in SSE register #define B_EFL 0x0000006A // Flags register EFL #define B_FLAGS8 0x0000006B // Flags (low byte) #define B_OFFSET 0x0000006C // 16/32 const offset from next command #define B_BYTEOFFS 0x0000006D // 8-bit sxt const offset from next cmd #define B_FARCONST 0x0000006E // 16:16/16:32 absolute address constant #define B_DESCR 0x0000006F // 16:32 descriptor in ModRM #define B_1 0x00000070 // Immediate constant 1 #define B_CONST8 0x00000071 // Immediate 8-bit constant #define B_CONST8_2 0x00000072 // Immediate 8-bit const, second in cmd #define B_CONST16 0x00000073 // Immediate 16-bit constant #define B_CONST 0x00000074 // Immediate 8/16/32-bit constant #define B_CONSTL 0x00000075 // Immediate 16/32-bit constant #define B_SXTCONST 0x00000076 // Immediate 8-bit sign-extended to size #define B_CR 0x00000077 // Control register in Reg #define B_CR0 0x00000078 // Control register CR0 #define B_DR 0x00000079 // Debug register in Reg #define B_FST 0x0000007A // FPU status register #define B_FCW 0x0000007B // FPU control register #define B_MXCSR 0x0000007C // SSE media control and status register #define B_SVEXF32x4 0x0000007D // SSE reg in VEX as 4 32-bit floats #define B_SVEXF32L 0x0000007E // Low 32-bit float in SSE in VEX #define B_SVEXF64x2 0x0000007F // SSE reg in VEX as 2 64-bit floats #define B_SVEXF64L 0x00000080 // Low 64-bit float in SSE in VEX #define B_SVEXI8x16 0x00000081 // SSE reg in VEX as 16 8-bit sigints #define B_SVEXI16x8 0x00000082 // SSE reg in VEX as 8 16-bit sigints #define B_SVEXI32x4 0x00000083 // SSE reg in VEX as 4 32-bit sigints #define B_SVEXI64x2 0x00000084 // SSE reg in VEX as 2 64-bit sigints #define B_SIMMI8x16 0x00000085 // SSE reg in immediate 8-bit constant // Type modifiers, used for interpretation of contents, only one is allowed. #define B_MODMASK 0x000F0000 // Mask to extract type modifier #define B_NONSPEC 0x00000000 // Non-specific operand #define B_UNSIGNED 0x00010000 // Decode as unsigned decimal #define B_SIGNED 0x00020000 // Decode as signed decimal #define B_BINARY 0x00030000 // Decode as binary (full hex) data #define B_BITCNT 0x00040000 // Bit count #define B_SHIFTCNT 0x00050000 // Shift count #define B_COUNT 0x00060000 // General-purpose count #define B_NOADDR 0x00070000 // Not an address #define B_JMPCALL 0x00080000 // Near jump/call/return destination #define B_JMPCALLFAR 0x00090000 // Far jump/call/return destination #define B_STACKINC 0x000A0000 // Unsigned stack increment/decrement #define B_PORT 0x000B0000 // I/O port #define B_ADDR 0x000F0000 // Used internally // Validity markers. #define B_MEMORY 0x00100000 // Memory only, reg version different #define B_REGISTER 0x00200000 // Register only, mem version different #define B_MEMONLY 0x00400000 // Warn if operand in register #define B_REGONLY 0x00800000 // Warn if operand in memory #define B_32BITONLY 0x01000000 // Warn if 16-bit operand #define B_NOESP 0x02000000 // ESP is not allowed // Miscellaneous options. #define B_NOVEXSIZE 0x04000000 // Always 128-bit SSE in 256-bit AVX #define B_SHOWSIZE 0x08000000 // Always show argument size in disasm #define B_CHG 0x10000000 // Changed, old contents is not used #define B_UPD 0x20000000 // Modified using old contents #define B_PSEUDO 0x40000000 // Pseoudooperand, not in assembler cmd #define B_NOSEG 0x80000000 // Don't add offset of selector // Location of operand, only one bit is allowed. #define OP_SOMEREG 0x000000FF // Mask for any kind of register #define OP_REGISTER 0x00000001 // Operand is a general-purpose register #define OP_SEGREG 0x00000002 // Operand is a segment register #define OP_FPUREG 0x00000004 // Operand is a FPU register #define OP_MMXREG 0x00000008 // Operand is a MMX register #define OP_3DNOWREG 0x00000010 // Operand is a 3DNow! register #define OP_SSEREG 0x00000020 // Operand is a SSE register #define OP_CREG 0x00000040 // Operand is a control register #define OP_DREG 0x00000080 // Operand is a debug register #define OP_MEMORY 0x00000100 // Operand is in memory #define OP_CONST 0x00000200 // Operand is an immediate constant // Additional operand properties. #define OP_PORT 0x00000400 // Used to access I/O port #define OP_OTHERREG 0x00000800 // Special register like EFL or MXCSR #define OP_INVALID 0x00001000 // Invalid operand, like reg in mem-only #define OP_PSEUDO 0x00002000 // Pseudooperand (not in mnenonics) #define OP_MOD 0x00004000 // Command may change/update operand #define OP_MODREG 0x00008000 // Memory, but modifies reg (POP,MOVSD) #define OP_IMPORT 0x00020000 // Value imported from different module #define OP_SELECTOR 0x00040000 // Includes immediate selector // Additional properties of memory address. #define OP_INDEXED 0x00080000 // Memory address contains registers #define OP_OPCONST 0x00100000 // Memory address contains constant #define OP_ADDR16 0x00200000 // 16-bit memory address #define OP_ADDR32 0x00400000 // Explicit 32-bit memory address #define DAMODE_MASM 0 // MASM assembling/disassembling style #define DAMODE_IDEAL 1 // IDEAL assembling/disassembling style #define DAMODE_HLA 2 // HLA assembling/disassembling style #define DAMODE_ATT 3 // AT&T disassembling style #define NUM_STYLE 0x0003 // Mask to extract hex style #define NUM_STD 0x0000 // 123, 12345678h, 0ABCD1234h #define NUM_X 0x0001 // 123, 0x12345678, 0xABCD1234 #define NUM_OLLY 0x0002 // 123., 12345678, 0ABCD1234 #define NUM_LONG 0x0010 // 00001234h instead of 1234h #define NUM_DECIMAL 0x0020 // 123 instead of 7Bh if under DECLIMIT // Disassembling options. #define DA_TEXT 0x00000001 // Decode command to text and comment #define DA_HILITE 0x00000002 // Use syntax highlighting #define DA_JZ 0x00000004 // JZ, JNZ instead of JE, JNE #define DA_JC 0x00000008 // JC, JNC instead of JAE, JB #define DA_DUMP 0x00000020 // Dump command to hexadecimal text #define DA_PSEUDO 0x00000400 // List pseudooperands // Disassembling errors. #define DAE_NOERR 0x00000000 // No errors #define DAE_BADCMD 0x00000001 // Unrecognized command #define DAE_CROSS 0x00000002 // Command crosses end of memory block #define DAE_MEMORY 0x00000004 // Register where only memory allowed #define DAE_REGISTER 0x00000008 // Memory where only register allowed #define DAE_LOCK 0x00000010 // LOCK prefix is not allowed #define DAE_BADSEG 0x00000020 // Invalid segment register #define DAE_SAMEPREF 0x00000040 // Two prefixes from the same group #define DAE_MANYPREF 0x00000080 // More than 4 prefixes #define DAE_BADCR 0x00000100 // Invalid CR register #define DAE_INTERN 0x00000200 // Internal error // Disassembling warnings. #define DAW_NOWARN 0x00000000 // No warnings #define DAW_DATASIZE 0x00000001 // Superfluous data size prefix #define DAW_ADDRSIZE 0x00000002 // Superfluous address size prefix #define DAW_SEGPREFIX 0x00000004 // Superfluous segment override prefix #define DAW_REPPREFIX 0x00000008 // Superfluous REPxx prefix #define DAW_DEFSEG 0x00000010 // Segment prefix coincides with default #define DAW_JMP16 0x00000020 // 16-bit jump, call or return #define DAW_FARADDR 0x00000040 // Far jump or call #define DAW_SEGMOD 0x00000080 // Modifies segment register #define DAW_PRIV 0x00000100 // Privileged command #define DAW_IO 0x00000200 // I/O command #define DAW_SHIFT 0x00000400 // Shift out of range 1..31 #define DAW_LOCK 0x00000800 // Command with valid LOCK prefix #define DAW_STACK 0x00001000 // Unaligned stack operation #define DAW_NOESP 0x00002000 // Suspicious use of stack pointer #define DAW_RARE 0x00004000 // Rare, seldom used command #define DAW_NONCLASS 0x00008000 // Non-standard or non-documented code #define DAW_INTERRUPT 0x00010000 // Interrupt command // List of prefixes. #define PF_SEGMASK 0x0000003F // Mask for segment override prefixes #define PF_ES 0x00000001 // 0x26, ES segment override #define PF_CS 0x00000002 // 0x2E, CS segment override #define PF_SS 0x00000004 // 0x36, SS segment override #define PF_DS 0x00000008 // 0x3E, DS segment override #define PF_FS 0x00000010 // 0x64, FS segment override #define PF_GS 0x00000020 // 0x65, GS segment override #define PF_DSIZE 0x00000040 // 0x66, data size override #define PF_ASIZE 0x00000080 // 0x67, address size override #define PF_LOCK 0x00000100 // 0xF0, bus lock #define PF_REPMASK 0x00000600 // Mask for repeat prefixes #define PF_REPNE 0x00000200 // 0xF2, REPNE prefix #define PF_REP 0x00000400 // 0xF3, REP/REPE prefix #define PF_BYTE 0x00000800 // Size bit in command, used in cmdexec #define PF_MUSTMASK D_MUSTMASK // Necessary prefixes, used in t_asmmod #define PF_VEX2 0x00010000 // 2-byte VEX prefix #define PF_VEX3 0x00020000 // 3-byte VEX prefix // Useful shortcuts. #define PF_66 PF_DSIZE // Alternative names for SSE prefixes #define PF_F2 PF_REPNE #define PF_F3 PF_REP #define PF_HINT (PF_CS|PF_DS) // Alternative names for branch hints #define PF_NOTTAKEN PF_CS #define PF_TAKEN PF_DS #define PF_VEX (PF_VEX2|PF_VEX3) typedef struct t_modrm { // ModRM byte decoding ulong size; // Total size with SIB and disp, bytes struct t_modrm *psib; // Pointer to SIB table or NULL ulong dispsize; // Size of displacement or 0 if none ulong features; // Operand features, set of OP_xxx int reg; // Register index or REG_UNDEF int defseg; // Default selector (SEG_xxx) uchar scale[NREG]; // Scales of registers in memory address ulong aregs; // List of registers used in address int basereg; // Register used as base or REG_UNDEF tchar ardec[SHORTNAME]; // Register part of address, INTEL fmt tchar aratt[SHORTNAME]; // Register part of address, AT&T fmt } t_modrm; typedef struct t_bincmd { // Description of 80x86 command tchar *name; // Symbolic name for this command ulong cmdtype; // Command's features, set of D_xxx ulong exttype; // More features, set of DX_xxx ulong length; // Length of main code (before ModRM/SIB) ulong mask; // Mask for first 4 bytes of the command ulong code; // Compare masked bytes with this ulong postbyte; // Postbyte ulong arg[NOPERAND]; // Types of arguments, set of B_xxx } t_bincmd; typedef struct t_chain { // Element of command chain const t_bincmd *pcmd; // Pointer to command descriptor or NULL struct t_chain *pnext; // Pointer to next element in chain } t_chain; typedef struct t_config { // Disassembler configuration int disasmmode; // Main style, one of DAMODE_xxx int memmode; // Constant part of address, NUM_xxx int jmpmode; // Jump/call destination, NUM_xxx int binconstmode; // Binary constants, NUM_xxx int constmode; // Numeric constants, NUM_xxx int lowercase; // Force lowercase display int tabarguments; // Tab between mnemonic and arguments int extraspace; // Extra space between arguments int useretform; // Use RET instead of RETN int shortstringcmds; // Use short form of string commands int putdefseg; // Display default segments in listing int showmemsize; // Always show memory size int shownear; // Show NEAR modifiers int ssesizemode; // How to decode size of SSE operands int jumphintmode; // How to decode jump hints int sizesens; // How to decode size-sensitive mnemonics int simplifiedst; // How to decode top of FPU stack int hiliteoperands; // Highlight operands } t_config; typedef struct t_operand { // Description of disassembled operand // Description of operand. ulong features; // Operand features, set of OP_xxx ulong arg; // Operand type, set of B_xxx // int optype; // DEC_INT, DEC_FLOAT or DEC_UNKNOWN int opsize; // Total size of data, bytes int granularity; // Size of element (opsize exc. MMX/SSE) int reg; // REG_xxx (also ESP in POP) or REG_UNDEF ulong uses; // List of used regs (not in address!) ulong modifies; // List of modified regs (not in addr!) // Description of memory address. int seg; // Selector (SEG_xxx) uchar scale[NREG]; // Scales of registers in memory address ulong aregs; // List of registers used in address ulong opconst; // Constant or const part of address ulong selector; // Immediate selector in far jump/call // Textual decoding. tchar text[TEXTLEN]; // Operand, decoded to text } t_operand; // Note that used registers are those which contents is necessary to create // result. Modified registers are those which value is changed. For example, // command MOV EAX,[EBX+ECX] uses EBX and ECX and modifies EAX. Command // ADD ESI,EDI uses ESI and EDI and modifies ESI. typedef struct t_disasm { // Disassembled command ulong ip; // Address of first command byte ulong size; // Full length of command, bytes ulong cmdtype; // Type of command, D_xxx ulong exttype; // More features, set of DX_xxx ulong prefixes; // List of prefixes, set of PF_xxx ulong nprefix; // Number of prefixes, including SSE2 ulong memfixup; // Offset of first 4-byte fixup or -1 ulong immfixup; // Offset of second 4-byte fixup or -1 int errors; // Set of DAE_xxx int warnings; // Set of DAW_xxx ulong uses; // List of used registers ulong modifies; // List of modified registers ulong memconst; // Constant in memory address or 0 ulong stackinc; // Data size in ENTER/RETN/RETF t_operand op[NOPERAND]; // Operands tchar dump[TEXTLEN]; // Hex dump of the command tchar result[TEXTLEN]; // Fully decoded command as text uchar mask[TEXTLEN]; // Mask to highlight result int masksize; // Length of mask corresponding to result } t_disasm; extern t_modrm modrm16[256]; // 16-bit ModRM decodings extern t_modrm modrm32[256]; // 32-bit ModRM decodings without SIB extern t_modrm sib0[256]; // ModRM-SIB decodings with Mod=00 extern t_modrm sib1[256]; // ModRM-SIB decodings with Mod=01 extern t_modrm sib2[256]; // ModRM-SIB decodings with Mod=10 extern const t_bincmd bincmd[]; // List of 80x86 commands extern t_chain *cmdchain; // Commands sorted by first CMDMASK bits int Preparedisasm(void); void Finishdisasm(void); ulong Disasm(uchar const *cmd,ulong cmdsize,ulong cmdip, t_disasm *da,int cmdmode,t_config *cmdconfig, int (*decodeaddress)(tchar *s,ulong addr)); tchar *Geterrwarnmessage(ulong errors,ulong warnings); ================================================ FILE: Include/dsound.h ================================================ /*==========================================================================; * * Copyright (c) Microsoft Corporation. All rights reserved. * * File: dsound.h * Content: DirectSound include file * **************************************************************************/ #define COM_NO_WINDOWS_H #include #include #ifndef DIRECTSOUND_VERSION #define DIRECTSOUND_VERSION 0x0900 /* Version 9.0 */ #endif #ifdef __cplusplus extern "C" { #endif // __cplusplus #ifndef __DSOUND_INCLUDED__ #define __DSOUND_INCLUDED__ /* Type definitions shared with Direct3D */ #ifndef DX_SHARED_DEFINES typedef float D3DVALUE, *LPD3DVALUE; #ifndef D3DCOLOR_DEFINED typedef DWORD D3DCOLOR; #define D3DCOLOR_DEFINED #endif #ifndef LPD3DCOLOR_DEFINED typedef DWORD *LPD3DCOLOR; #define LPD3DCOLOR_DEFINED #endif #ifndef D3DVECTOR_DEFINED typedef struct _D3DVECTOR { float x; float y; float z; } D3DVECTOR; #define D3DVECTOR_DEFINED #endif #ifndef LPD3DVECTOR_DEFINED typedef D3DVECTOR *LPD3DVECTOR; #define LPD3DVECTOR_DEFINED #endif #define DX_SHARED_DEFINES #endif // DX_SHARED_DEFINES #define _FACDS 0x878 /* DirectSound's facility code */ #define MAKE_DSHRESULT(code) MAKE_HRESULT(1, _FACDS, code) // DirectSound Component GUID {47D4D946-62E8-11CF-93BC-444553540000} DEFINE_GUID(CLSID_DirectSound, 0x47d4d946, 0x62e8, 0x11cf, 0x93, 0xbc, 0x44, 0x45, 0x53, 0x54, 0x0, 0x0); // DirectSound 8.0 Component GUID {3901CC3F-84B5-4FA4-BA35-AA8172B8A09B} DEFINE_GUID(CLSID_DirectSound8, 0x3901cc3f, 0x84b5, 0x4fa4, 0xba, 0x35, 0xaa, 0x81, 0x72, 0xb8, 0xa0, 0x9b); // DirectSound Capture Component GUID {B0210780-89CD-11D0-AF08-00A0C925CD16} DEFINE_GUID(CLSID_DirectSoundCapture, 0xb0210780, 0x89cd, 0x11d0, 0xaf, 0x8, 0x0, 0xa0, 0xc9, 0x25, 0xcd, 0x16); // DirectSound 8.0 Capture Component GUID {E4BCAC13-7F99-4908-9A8E-74E3BF24B6E1} DEFINE_GUID(CLSID_DirectSoundCapture8, 0xe4bcac13, 0x7f99, 0x4908, 0x9a, 0x8e, 0x74, 0xe3, 0xbf, 0x24, 0xb6, 0xe1); // DirectSound Full Duplex Component GUID {FEA4300C-7959-4147-B26A-2377B9E7A91D} DEFINE_GUID(CLSID_DirectSoundFullDuplex, 0xfea4300c, 0x7959, 0x4147, 0xb2, 0x6a, 0x23, 0x77, 0xb9, 0xe7, 0xa9, 0x1d); // DirectSound default playback device GUID {DEF00000-9C6D-47ED-AAF1-4DDA8F2B5C03} DEFINE_GUID(DSDEVID_DefaultPlayback, 0xdef00000, 0x9c6d, 0x47ed, 0xaa, 0xf1, 0x4d, 0xda, 0x8f, 0x2b, 0x5c, 0x03); // DirectSound default capture device GUID {DEF00001-9C6D-47ED-AAF1-4DDA8F2B5C03} DEFINE_GUID(DSDEVID_DefaultCapture, 0xdef00001, 0x9c6d, 0x47ed, 0xaa, 0xf1, 0x4d, 0xda, 0x8f, 0x2b, 0x5c, 0x03); // DirectSound default device for voice playback {DEF00002-9C6D-47ED-AAF1-4DDA8F2B5C03} DEFINE_GUID(DSDEVID_DefaultVoicePlayback, 0xdef00002, 0x9c6d, 0x47ed, 0xaa, 0xf1, 0x4d, 0xda, 0x8f, 0x2b, 0x5c, 0x03); // DirectSound default device for voice capture {DEF00003-9C6D-47ED-AAF1-4DDA8F2B5C03} DEFINE_GUID(DSDEVID_DefaultVoiceCapture, 0xdef00003, 0x9c6d, 0x47ed, 0xaa, 0xf1, 0x4d, 0xda, 0x8f, 0x2b, 0x5c, 0x03); // // Forward declarations for interfaces. // 'struct' not 'class' per the way DECLARE_INTERFACE_ is defined // #ifdef __cplusplus struct IDirectSound; struct IDirectSoundBuffer; struct IDirectSound3DListener; struct IDirectSound3DBuffer; struct IDirectSoundCapture; struct IDirectSoundCaptureBuffer; struct IDirectSoundNotify; #endif // __cplusplus // // DirectSound 8.0 interfaces. // #if DIRECTSOUND_VERSION >= 0x0800 #ifdef __cplusplus struct IDirectSound8; struct IDirectSoundBuffer8; struct IDirectSoundCaptureBuffer8; struct IDirectSoundFXGargle; struct IDirectSoundFXChorus; struct IDirectSoundFXFlanger; struct IDirectSoundFXEcho; struct IDirectSoundFXDistortion; struct IDirectSoundFXCompressor; struct IDirectSoundFXParamEq; struct IDirectSoundFXWavesReverb; struct IDirectSoundFXI3DL2Reverb; struct IDirectSoundCaptureFXAec; struct IDirectSoundCaptureFXNoiseSuppress; struct IDirectSoundFullDuplex; #endif // __cplusplus // IDirectSound8, IDirectSoundBuffer8 and IDirectSoundCaptureBuffer8 are the // only DirectSound 7.0 interfaces with changed functionality in version 8.0. // The other level 8 interfaces as equivalent to their level 7 counterparts: #define IDirectSoundCapture8 IDirectSoundCapture #define IDirectSound3DListener8 IDirectSound3DListener #define IDirectSound3DBuffer8 IDirectSound3DBuffer #define IDirectSoundNotify8 IDirectSoundNotify #define IDirectSoundFXGargle8 IDirectSoundFXGargle #define IDirectSoundFXChorus8 IDirectSoundFXChorus #define IDirectSoundFXFlanger8 IDirectSoundFXFlanger #define IDirectSoundFXEcho8 IDirectSoundFXEcho #define IDirectSoundFXDistortion8 IDirectSoundFXDistortion #define IDirectSoundFXCompressor8 IDirectSoundFXCompressor #define IDirectSoundFXParamEq8 IDirectSoundFXParamEq #define IDirectSoundFXWavesReverb8 IDirectSoundFXWavesReverb #define IDirectSoundFXI3DL2Reverb8 IDirectSoundFXI3DL2Reverb #define IDirectSoundCaptureFXAec8 IDirectSoundCaptureFXAec #define IDirectSoundCaptureFXNoiseSuppress8 IDirectSoundCaptureFXNoiseSuppress #define IDirectSoundFullDuplex8 IDirectSoundFullDuplex #endif // DIRECTSOUND_VERSION >= 0x0800 typedef struct IDirectSound *LPDIRECTSOUND; typedef struct IDirectSoundBuffer *LPDIRECTSOUNDBUFFER; typedef struct IDirectSound3DListener *LPDIRECTSOUND3DLISTENER; typedef struct IDirectSound3DBuffer *LPDIRECTSOUND3DBUFFER; typedef struct IDirectSoundCapture *LPDIRECTSOUNDCAPTURE; typedef struct IDirectSoundCaptureBuffer *LPDIRECTSOUNDCAPTUREBUFFER; typedef struct IDirectSoundNotify *LPDIRECTSOUNDNOTIFY; #if DIRECTSOUND_VERSION >= 0x0800 typedef struct IDirectSoundFXGargle *LPDIRECTSOUNDFXGARGLE; typedef struct IDirectSoundFXChorus *LPDIRECTSOUNDFXCHORUS; typedef struct IDirectSoundFXFlanger *LPDIRECTSOUNDFXFLANGER; typedef struct IDirectSoundFXEcho *LPDIRECTSOUNDFXECHO; typedef struct IDirectSoundFXDistortion *LPDIRECTSOUNDFXDISTORTION; typedef struct IDirectSoundFXCompressor *LPDIRECTSOUNDFXCOMPRESSOR; typedef struct IDirectSoundFXParamEq *LPDIRECTSOUNDFXPARAMEQ; typedef struct IDirectSoundFXWavesReverb *LPDIRECTSOUNDFXWAVESREVERB; typedef struct IDirectSoundFXI3DL2Reverb *LPDIRECTSOUNDFXI3DL2REVERB; typedef struct IDirectSoundCaptureFXAec *LPDIRECTSOUNDCAPTUREFXAEC; typedef struct IDirectSoundCaptureFXNoiseSuppress *LPDIRECTSOUNDCAPTUREFXNOISESUPPRESS; typedef struct IDirectSoundFullDuplex *LPDIRECTSOUNDFULLDUPLEX; typedef struct IDirectSound8 *LPDIRECTSOUND8; typedef struct IDirectSoundBuffer8 *LPDIRECTSOUNDBUFFER8; typedef struct IDirectSound3DListener8 *LPDIRECTSOUND3DLISTENER8; typedef struct IDirectSound3DBuffer8 *LPDIRECTSOUND3DBUFFER8; typedef struct IDirectSoundCapture8 *LPDIRECTSOUNDCAPTURE8; typedef struct IDirectSoundCaptureBuffer8 *LPDIRECTSOUNDCAPTUREBUFFER8; typedef struct IDirectSoundNotify8 *LPDIRECTSOUNDNOTIFY8; typedef struct IDirectSoundFXGargle8 *LPDIRECTSOUNDFXGARGLE8; typedef struct IDirectSoundFXChorus8 *LPDIRECTSOUNDFXCHORUS8; typedef struct IDirectSoundFXFlanger8 *LPDIRECTSOUNDFXFLANGER8; typedef struct IDirectSoundFXEcho8 *LPDIRECTSOUNDFXECHO8; typedef struct IDirectSoundFXDistortion8 *LPDIRECTSOUNDFXDISTORTION8; typedef struct IDirectSoundFXCompressor8 *LPDIRECTSOUNDFXCOMPRESSOR8; typedef struct IDirectSoundFXParamEq8 *LPDIRECTSOUNDFXPARAMEQ8; typedef struct IDirectSoundFXWavesReverb8 *LPDIRECTSOUNDFXWAVESREVERB8; typedef struct IDirectSoundFXI3DL2Reverb8 *LPDIRECTSOUNDFXI3DL2REVERB8; typedef struct IDirectSoundCaptureFXAec8 *LPDIRECTSOUNDCAPTUREFXAEC8; typedef struct IDirectSoundCaptureFXNoiseSuppress8 *LPDIRECTSOUNDCAPTUREFXNOISESUPPRESS8; typedef struct IDirectSoundFullDuplex8 *LPDIRECTSOUNDFULLDUPLEX8; #endif // DIRECTSOUND_VERSION >= 0x0800 // // IID definitions for the unchanged DirectSound 8.0 interfaces // #if DIRECTSOUND_VERSION >= 0x0800 #define IID_IDirectSoundCapture8 IID_IDirectSoundCapture #define IID_IDirectSound3DListener8 IID_IDirectSound3DListener #define IID_IDirectSound3DBuffer8 IID_IDirectSound3DBuffer #define IID_IDirectSoundNotify8 IID_IDirectSoundNotify #define IID_IDirectSoundFXGargle8 IID_IDirectSoundFXGargle #define IID_IDirectSoundFXChorus8 IID_IDirectSoundFXChorus #define IID_IDirectSoundFXFlanger8 IID_IDirectSoundFXFlanger #define IID_IDirectSoundFXEcho8 IID_IDirectSoundFXEcho #define IID_IDirectSoundFXDistortion8 IID_IDirectSoundFXDistortion #define IID_IDirectSoundFXCompressor8 IID_IDirectSoundFXCompressor #define IID_IDirectSoundFXParamEq8 IID_IDirectSoundFXParamEq #define IID_IDirectSoundFXWavesReverb8 IID_IDirectSoundFXWavesReverb #define IID_IDirectSoundFXI3DL2Reverb8 IID_IDirectSoundFXI3DL2Reverb #define IID_IDirectSoundCaptureFXAec8 IID_IDirectSoundCaptureFXAec #define IID_IDirectSoundCaptureFXNoiseSuppress8 IID_IDirectSoundCaptureFXNoiseSuppress #define IID_IDirectSoundFullDuplex8 IID_IDirectSoundFullDuplex #endif // DIRECTSOUND_VERSION >= 0x0800 // // Compatibility typedefs // #ifndef _LPCWAVEFORMATEX_DEFINED #define _LPCWAVEFORMATEX_DEFINED typedef const WAVEFORMATEX *LPCWAVEFORMATEX; #endif // _LPCWAVEFORMATEX_DEFINED #ifndef __LPCGUID_DEFINED__ #define __LPCGUID_DEFINED__ typedef const GUID *LPCGUID; #endif // __LPCGUID_DEFINED__ typedef LPDIRECTSOUND *LPLPDIRECTSOUND; typedef LPDIRECTSOUNDBUFFER *LPLPDIRECTSOUNDBUFFER; typedef LPDIRECTSOUND3DLISTENER *LPLPDIRECTSOUND3DLISTENER; typedef LPDIRECTSOUND3DBUFFER *LPLPDIRECTSOUND3DBUFFER; typedef LPDIRECTSOUNDCAPTURE *LPLPDIRECTSOUNDCAPTURE; typedef LPDIRECTSOUNDCAPTUREBUFFER *LPLPDIRECTSOUNDCAPTUREBUFFER; typedef LPDIRECTSOUNDNOTIFY *LPLPDIRECTSOUNDNOTIFY; #if DIRECTSOUND_VERSION >= 0x0800 typedef LPDIRECTSOUND8 *LPLPDIRECTSOUND8; typedef LPDIRECTSOUNDBUFFER8 *LPLPDIRECTSOUNDBUFFER8; typedef LPDIRECTSOUNDCAPTURE8 *LPLPDIRECTSOUNDCAPTURE8; typedef LPDIRECTSOUNDCAPTUREBUFFER8 *LPLPDIRECTSOUNDCAPTUREBUFFER8; #endif // DIRECTSOUND_VERSION >= 0x0800 // // Structures // typedef struct _DSCAPS { DWORD dwSize; DWORD dwFlags; DWORD dwMinSecondarySampleRate; DWORD dwMaxSecondarySampleRate; DWORD dwPrimaryBuffers; DWORD dwMaxHwMixingAllBuffers; DWORD dwMaxHwMixingStaticBuffers; DWORD dwMaxHwMixingStreamingBuffers; DWORD dwFreeHwMixingAllBuffers; DWORD dwFreeHwMixingStaticBuffers; DWORD dwFreeHwMixingStreamingBuffers; DWORD dwMaxHw3DAllBuffers; DWORD dwMaxHw3DStaticBuffers; DWORD dwMaxHw3DStreamingBuffers; DWORD dwFreeHw3DAllBuffers; DWORD dwFreeHw3DStaticBuffers; DWORD dwFreeHw3DStreamingBuffers; DWORD dwTotalHwMemBytes; DWORD dwFreeHwMemBytes; DWORD dwMaxContigFreeHwMemBytes; DWORD dwUnlockTransferRateHwBuffers; DWORD dwPlayCpuOverheadSwBuffers; DWORD dwReserved1; DWORD dwReserved2; } DSCAPS, *LPDSCAPS; typedef const DSCAPS *LPCDSCAPS; typedef struct _DSBCAPS { DWORD dwSize; DWORD dwFlags; DWORD dwBufferBytes; DWORD dwUnlockTransferRate; DWORD dwPlayCpuOverhead; } DSBCAPS, *LPDSBCAPS; typedef const DSBCAPS *LPCDSBCAPS; #if DIRECTSOUND_VERSION >= 0x0800 typedef struct _DSEFFECTDESC { DWORD dwSize; DWORD dwFlags; GUID guidDSFXClass; DWORD_PTR dwReserved1; DWORD_PTR dwReserved2; } DSEFFECTDESC, *LPDSEFFECTDESC; typedef const DSEFFECTDESC *LPCDSEFFECTDESC; #define DSFX_LOCHARDWARE 0x00000001 #define DSFX_LOCSOFTWARE 0x00000002 enum { DSFXR_PRESENT, // 0 DSFXR_LOCHARDWARE, // 1 DSFXR_LOCSOFTWARE, // 2 DSFXR_UNALLOCATED, // 3 DSFXR_FAILED, // 4 DSFXR_UNKNOWN, // 5 DSFXR_SENDLOOP // 6 }; typedef struct _DSCEFFECTDESC { DWORD dwSize; DWORD dwFlags; GUID guidDSCFXClass; GUID guidDSCFXInstance; DWORD dwReserved1; DWORD dwReserved2; } DSCEFFECTDESC, *LPDSCEFFECTDESC; typedef const DSCEFFECTDESC *LPCDSCEFFECTDESC; #define DSCFX_LOCHARDWARE 0x00000001 #define DSCFX_LOCSOFTWARE 0x00000002 #define DSCFXR_LOCHARDWARE 0x00000010 #define DSCFXR_LOCSOFTWARE 0x00000020 #endif // DIRECTSOUND_VERSION >= 0x0800 typedef struct _DSBUFFERDESC { DWORD dwSize; DWORD dwFlags; DWORD dwBufferBytes; DWORD dwReserved; LPWAVEFORMATEX lpwfxFormat; #if DIRECTSOUND_VERSION >= 0x0700 GUID guid3DAlgorithm; #endif } DSBUFFERDESC, *LPDSBUFFERDESC; typedef const DSBUFFERDESC *LPCDSBUFFERDESC; // Older version of this structure: typedef struct _DSBUFFERDESC1 { DWORD dwSize; DWORD dwFlags; DWORD dwBufferBytes; DWORD dwReserved; LPWAVEFORMATEX lpwfxFormat; } DSBUFFERDESC1, *LPDSBUFFERDESC1; typedef const DSBUFFERDESC1 *LPCDSBUFFERDESC1; typedef struct _DS3DBUFFER { DWORD dwSize; D3DVECTOR vPosition; D3DVECTOR vVelocity; DWORD dwInsideConeAngle; DWORD dwOutsideConeAngle; D3DVECTOR vConeOrientation; LONG lConeOutsideVolume; D3DVALUE flMinDistance; D3DVALUE flMaxDistance; DWORD dwMode; } DS3DBUFFER, *LPDS3DBUFFER; typedef const DS3DBUFFER *LPCDS3DBUFFER; typedef struct _DS3DLISTENER { DWORD dwSize; D3DVECTOR vPosition; D3DVECTOR vVelocity; D3DVECTOR vOrientFront; D3DVECTOR vOrientTop; D3DVALUE flDistanceFactor; D3DVALUE flRolloffFactor; D3DVALUE flDopplerFactor; } DS3DLISTENER, *LPDS3DLISTENER; typedef const DS3DLISTENER *LPCDS3DLISTENER; typedef struct _DSCCAPS { DWORD dwSize; DWORD dwFlags; DWORD dwFormats; DWORD dwChannels; } DSCCAPS, *LPDSCCAPS; typedef const DSCCAPS *LPCDSCCAPS; typedef struct _DSCBUFFERDESC1 { DWORD dwSize; DWORD dwFlags; DWORD dwBufferBytes; DWORD dwReserved; LPWAVEFORMATEX lpwfxFormat; } DSCBUFFERDESC1, *LPDSCBUFFERDESC1; typedef struct _DSCBUFFERDESC { DWORD dwSize; DWORD dwFlags; DWORD dwBufferBytes; DWORD dwReserved; LPWAVEFORMATEX lpwfxFormat; #if DIRECTSOUND_VERSION >= 0x0800 DWORD dwFXCount; LPDSCEFFECTDESC lpDSCFXDesc; #endif } DSCBUFFERDESC, *LPDSCBUFFERDESC; typedef const DSCBUFFERDESC *LPCDSCBUFFERDESC; typedef struct _DSCBCAPS { DWORD dwSize; DWORD dwFlags; DWORD dwBufferBytes; DWORD dwReserved; } DSCBCAPS, *LPDSCBCAPS; typedef const DSCBCAPS *LPCDSCBCAPS; typedef struct _DSBPOSITIONNOTIFY { DWORD dwOffset; HANDLE hEventNotify; } DSBPOSITIONNOTIFY, *LPDSBPOSITIONNOTIFY; typedef const DSBPOSITIONNOTIFY *LPCDSBPOSITIONNOTIFY; // // DirectSound API // typedef BOOL (CALLBACK *LPDSENUMCALLBACKA)(LPGUID, LPCSTR, LPCSTR, LPVOID); typedef BOOL (CALLBACK *LPDSENUMCALLBACKW)(LPGUID, LPCWSTR, LPCWSTR, LPVOID); extern HRESULT WINAPI DirectSoundCreate(LPCGUID pcGuidDevice, LPDIRECTSOUND *ppDS, LPUNKNOWN pUnkOuter); extern HRESULT WINAPI DirectSoundEnumerateA(LPDSENUMCALLBACKA pDSEnumCallback, LPVOID pContext); extern HRESULT WINAPI DirectSoundEnumerateW(LPDSENUMCALLBACKW pDSEnumCallback, LPVOID pContext); extern HRESULT WINAPI DirectSoundCaptureCreate(LPCGUID pcGuidDevice, LPDIRECTSOUNDCAPTURE *ppDSC, LPUNKNOWN pUnkOuter); extern HRESULT WINAPI DirectSoundCaptureEnumerateA(LPDSENUMCALLBACKA pDSEnumCallback, LPVOID pContext); extern HRESULT WINAPI DirectSoundCaptureEnumerateW(LPDSENUMCALLBACKW pDSEnumCallback, LPVOID pContext); #if DIRECTSOUND_VERSION >= 0x0800 extern HRESULT WINAPI DirectSoundCreate8(LPCGUID pcGuidDevice, LPDIRECTSOUND8 *ppDS8, LPUNKNOWN pUnkOuter); extern HRESULT WINAPI DirectSoundCaptureCreate8(LPCGUID pcGuidDevice, LPDIRECTSOUNDCAPTURE8 *ppDSC8, LPUNKNOWN pUnkOuter); extern HRESULT WINAPI DirectSoundFullDuplexCreate(LPCGUID pcGuidCaptureDevice, LPCGUID pcGuidRenderDevice, LPCDSCBUFFERDESC pcDSCBufferDesc, LPCDSBUFFERDESC pcDSBufferDesc, HWND hWnd, DWORD dwLevel, LPDIRECTSOUNDFULLDUPLEX* ppDSFD, LPDIRECTSOUNDCAPTUREBUFFER8 *ppDSCBuffer8, LPDIRECTSOUNDBUFFER8 *ppDSBuffer8, LPUNKNOWN pUnkOuter); #define DirectSoundFullDuplexCreate8 DirectSoundFullDuplexCreate extern HRESULT WINAPI GetDeviceID(LPCGUID pGuidSrc, LPGUID pGuidDest); #endif // DIRECTSOUND_VERSION >= 0x0800 #ifdef UNICODE #define LPDSENUMCALLBACK LPDSENUMCALLBACKW #define DirectSoundEnumerate DirectSoundEnumerateW #define DirectSoundCaptureEnumerate DirectSoundCaptureEnumerateW #else // UNICODE #define LPDSENUMCALLBACK LPDSENUMCALLBACKA #define DirectSoundEnumerate DirectSoundEnumerateA #define DirectSoundCaptureEnumerate DirectSoundCaptureEnumerateA #endif // UNICODE // // IUnknown // #if !defined(__cplusplus) || defined(CINTERFACE) #ifndef IUnknown_QueryInterface #define IUnknown_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #endif // IUnknown_QueryInterface #ifndef IUnknown_AddRef #define IUnknown_AddRef(p) (p)->lpVtbl->AddRef(p) #endif // IUnknown_AddRef #ifndef IUnknown_Release #define IUnknown_Release(p) (p)->lpVtbl->Release(p) #endif // IUnknown_Release #else // !defined(__cplusplus) || defined(CINTERFACE) #ifndef IUnknown_QueryInterface #define IUnknown_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #endif // IUnknown_QueryInterface #ifndef IUnknown_AddRef #define IUnknown_AddRef(p) (p)->AddRef() #endif // IUnknown_AddRef #ifndef IUnknown_Release #define IUnknown_Release(p) (p)->Release() #endif // IUnknown_Release #endif // !defined(__cplusplus) || defined(CINTERFACE) #ifndef __IReferenceClock_INTERFACE_DEFINED__ #define __IReferenceClock_INTERFACE_DEFINED__ typedef LONGLONG REFERENCE_TIME; typedef REFERENCE_TIME *LPREFERENCE_TIME; DEFINE_GUID(IID_IReferenceClock, 0x56a86897, 0x0ad4, 0x11ce, 0xb0, 0x3a, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70); #undef INTERFACE #define INTERFACE IReferenceClock DECLARE_INTERFACE_(IReferenceClock, IUnknown) { // IUnknown methods STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // IReferenceClock methods STDMETHOD(GetTime) (THIS_ REFERENCE_TIME *pTime) PURE; STDMETHOD(AdviseTime) (THIS_ REFERENCE_TIME rtBaseTime, REFERENCE_TIME rtStreamTime, HANDLE hEvent, LPDWORD pdwAdviseCookie) PURE; STDMETHOD(AdvisePeriodic) (THIS_ REFERENCE_TIME rtStartTime, REFERENCE_TIME rtPeriodTime, HANDLE hSemaphore, LPDWORD pdwAdviseCookie) PURE; STDMETHOD(Unadvise) (THIS_ DWORD dwAdviseCookie) PURE; }; #endif // __IReferenceClock_INTERFACE_DEFINED__ #ifndef IReferenceClock_QueryInterface #define IReferenceClock_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) #define IReferenceClock_AddRef(p) IUnknown_AddRef(p) #define IReferenceClock_Release(p) IUnknown_Release(p) #if !defined(__cplusplus) || defined(CINTERFACE) #define IReferenceClock_GetTime(p,a) (p)->lpVtbl->GetTime(p,a) #define IReferenceClock_AdviseTime(p,a,b,c,d) (p)->lpVtbl->AdviseTime(p,a,b,c,d) #define IReferenceClock_AdvisePeriodic(p,a,b,c,d) (p)->lpVtbl->AdvisePeriodic(p,a,b,c,d) #define IReferenceClock_Unadvise(p,a) (p)->lpVtbl->Unadvise(p,a) #else // !defined(__cplusplus) || defined(CINTERFACE) #define IReferenceClock_GetTime(p,a) (p)->GetTime(a) #define IReferenceClock_AdviseTime(p,a,b,c,d) (p)->AdviseTime(a,b,c,d) #define IReferenceClock_AdvisePeriodic(p,a,b,c,d) (p)->AdvisePeriodic(a,b,c,d) #define IReferenceClock_Unadvise(p,a) (p)->Unadvise(a) #endif // !defined(__cplusplus) || defined(CINTERFACE) #endif // IReferenceClock_QueryInterface // // IDirectSound // DEFINE_GUID(IID_IDirectSound, 0x279AFA83, 0x4981, 0x11CE, 0xA5, 0x21, 0x00, 0x20, 0xAF, 0x0B, 0xE5, 0x60); #undef INTERFACE #define INTERFACE IDirectSound DECLARE_INTERFACE_(IDirectSound, IUnknown) { // IUnknown methods STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // IDirectSound methods STDMETHOD(CreateSoundBuffer) (THIS_ LPCDSBUFFERDESC pcDSBufferDesc, LPDIRECTSOUNDBUFFER *ppDSBuffer, LPUNKNOWN pUnkOuter) PURE; STDMETHOD(GetCaps) (THIS_ LPDSCAPS pDSCaps) PURE; STDMETHOD(DuplicateSoundBuffer) (THIS_ LPDIRECTSOUNDBUFFER pDSBufferOriginal, LPDIRECTSOUNDBUFFER *ppDSBufferDuplicate) PURE; STDMETHOD(SetCooperativeLevel) (THIS_ HWND hwnd, DWORD dwLevel) PURE; STDMETHOD(Compact) (THIS) PURE; STDMETHOD(GetSpeakerConfig) (THIS_ LPDWORD pdwSpeakerConfig) PURE; STDMETHOD(SetSpeakerConfig) (THIS_ DWORD dwSpeakerConfig) PURE; STDMETHOD(Initialize) (THIS_ LPCGUID pcGuidDevice) PURE; }; #define IDirectSound_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) #define IDirectSound_AddRef(p) IUnknown_AddRef(p) #define IDirectSound_Release(p) IUnknown_Release(p) #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirectSound_CreateSoundBuffer(p,a,b,c) (p)->lpVtbl->CreateSoundBuffer(p,a,b,c) #define IDirectSound_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a) #define IDirectSound_DuplicateSoundBuffer(p,a,b) (p)->lpVtbl->DuplicateSoundBuffer(p,a,b) #define IDirectSound_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b) #define IDirectSound_Compact(p) (p)->lpVtbl->Compact(p) #define IDirectSound_GetSpeakerConfig(p,a) (p)->lpVtbl->GetSpeakerConfig(p,a) #define IDirectSound_SetSpeakerConfig(p,b) (p)->lpVtbl->SetSpeakerConfig(p,b) #define IDirectSound_Initialize(p,a) (p)->lpVtbl->Initialize(p,a) #else // !defined(__cplusplus) || defined(CINTERFACE) #define IDirectSound_CreateSoundBuffer(p,a,b,c) (p)->CreateSoundBuffer(a,b,c) #define IDirectSound_GetCaps(p,a) (p)->GetCaps(a) #define IDirectSound_DuplicateSoundBuffer(p,a,b) (p)->DuplicateSoundBuffer(a,b) #define IDirectSound_SetCooperativeLevel(p,a,b) (p)->SetCooperativeLevel(a,b) #define IDirectSound_Compact(p) (p)->Compact() #define IDirectSound_GetSpeakerConfig(p,a) (p)->GetSpeakerConfig(a) #define IDirectSound_SetSpeakerConfig(p,b) (p)->SetSpeakerConfig(b) #define IDirectSound_Initialize(p,a) (p)->Initialize(a) #endif // !defined(__cplusplus) || defined(CINTERFACE) #if DIRECTSOUND_VERSION >= 0x0800 // // IDirectSound8 // DEFINE_GUID(IID_IDirectSound8, 0xC50A7E93, 0xF395, 0x4834, 0x9E, 0xF6, 0x7F, 0xA9, 0x9D, 0xE5, 0x09, 0x66); #undef INTERFACE #define INTERFACE IDirectSound8 DECLARE_INTERFACE_(IDirectSound8, IDirectSound) { // IUnknown methods STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // IDirectSound methods STDMETHOD(CreateSoundBuffer) (THIS_ LPCDSBUFFERDESC pcDSBufferDesc, LPDIRECTSOUNDBUFFER *ppDSBuffer, LPUNKNOWN pUnkOuter) PURE; STDMETHOD(GetCaps) (THIS_ LPDSCAPS pDSCaps) PURE; STDMETHOD(DuplicateSoundBuffer) (THIS_ LPDIRECTSOUNDBUFFER pDSBufferOriginal, LPDIRECTSOUNDBUFFER *ppDSBufferDuplicate) PURE; STDMETHOD(SetCooperativeLevel) (THIS_ HWND hwnd, DWORD dwLevel) PURE; STDMETHOD(Compact) (THIS) PURE; STDMETHOD(GetSpeakerConfig) (THIS_ LPDWORD pdwSpeakerConfig) PURE; STDMETHOD(SetSpeakerConfig) (THIS_ DWORD dwSpeakerConfig) PURE; STDMETHOD(Initialize) (THIS_ LPCGUID pcGuidDevice) PURE; // IDirectSound8 methods STDMETHOD(VerifyCertification) (THIS_ LPDWORD pdwCertified) PURE; }; #define IDirectSound8_QueryInterface(p,a,b) IDirectSound_QueryInterface(p,a,b) #define IDirectSound8_AddRef(p) IDirectSound_AddRef(p) #define IDirectSound8_Release(p) IDirectSound_Release(p) #define IDirectSound8_CreateSoundBuffer(p,a,b,c) IDirectSound_CreateSoundBuffer(p,a,b,c) #define IDirectSound8_GetCaps(p,a) IDirectSound_GetCaps(p,a) #define IDirectSound8_DuplicateSoundBuffer(p,a,b) IDirectSound_DuplicateSoundBuffer(p,a,b) #define IDirectSound8_SetCooperativeLevel(p,a,b) IDirectSound_SetCooperativeLevel(p,a,b) #define IDirectSound8_Compact(p) IDirectSound_Compact(p) #define IDirectSound8_GetSpeakerConfig(p,a) IDirectSound_GetSpeakerConfig(p,a) #define IDirectSound8_SetSpeakerConfig(p,a) IDirectSound_SetSpeakerConfig(p,a) #define IDirectSound8_Initialize(p,a) IDirectSound_Initialize(p,a) #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirectSound8_VerifyCertification(p,a) (p)->lpVtbl->VerifyCertification(p,a) #else // !defined(__cplusplus) || defined(CINTERFACE) #define IDirectSound8_VerifyCertification(p,a) (p)->VerifyCertification(a) #endif // !defined(__cplusplus) || defined(CINTERFACE) #endif // DIRECTSOUND_VERSION >= 0x0800 // // IDirectSoundBuffer // DEFINE_GUID(IID_IDirectSoundBuffer, 0x279AFA85, 0x4981, 0x11CE, 0xA5, 0x21, 0x00, 0x20, 0xAF, 0x0B, 0xE5, 0x60); #undef INTERFACE #define INTERFACE IDirectSoundBuffer DECLARE_INTERFACE_(IDirectSoundBuffer, IUnknown) { // IUnknown methods STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // IDirectSoundBuffer methods STDMETHOD(GetCaps) (THIS_ LPDSBCAPS pDSBufferCaps) PURE; STDMETHOD(GetCurrentPosition) (THIS_ LPDWORD pdwCurrentPlayCursor, LPDWORD pdwCurrentWriteCursor) PURE; STDMETHOD(GetFormat) (THIS_ LPWAVEFORMATEX pwfxFormat, DWORD dwSizeAllocated, LPDWORD pdwSizeWritten) PURE; STDMETHOD(GetVolume) (THIS_ LPLONG plVolume) PURE; STDMETHOD(GetPan) (THIS_ LPLONG plPan) PURE; STDMETHOD(GetFrequency) (THIS_ LPDWORD pdwFrequency) PURE; STDMETHOD(GetStatus) (THIS_ LPDWORD pdwStatus) PURE; STDMETHOD(Initialize) (THIS_ LPDIRECTSOUND pDirectSound, LPCDSBUFFERDESC pcDSBufferDesc) PURE; STDMETHOD(Lock) (THIS_ DWORD dwOffset, DWORD dwBytes, LPVOID *ppvAudioPtr1, LPDWORD pdwAudioBytes1, LPVOID *ppvAudioPtr2, LPDWORD pdwAudioBytes2, DWORD dwFlags) PURE; STDMETHOD(Play) (THIS_ DWORD dwReserved1, DWORD dwPriority, DWORD dwFlags) PURE; STDMETHOD(SetCurrentPosition) (THIS_ DWORD dwNewPosition) PURE; STDMETHOD(SetFormat) (THIS_ LPCWAVEFORMATEX pcfxFormat) PURE; STDMETHOD(SetVolume) (THIS_ LONG lVolume) PURE; STDMETHOD(SetPan) (THIS_ LONG lPan) PURE; STDMETHOD(SetFrequency) (THIS_ DWORD dwFrequency) PURE; STDMETHOD(Stop) (THIS) PURE; STDMETHOD(Unlock) (THIS_ LPVOID pvAudioPtr1, DWORD dwAudioBytes1, LPVOID pvAudioPtr2, DWORD dwAudioBytes2) PURE; STDMETHOD(Restore) (THIS) PURE; }; #define IDirectSoundBuffer_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) #define IDirectSoundBuffer_AddRef(p) IUnknown_AddRef(p) #define IDirectSoundBuffer_Release(p) IUnknown_Release(p) #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirectSoundBuffer_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a) #define IDirectSoundBuffer_GetCurrentPosition(p,a,b) (p)->lpVtbl->GetCurrentPosition(p,a,b) #define IDirectSoundBuffer_GetFormat(p,a,b,c) (p)->lpVtbl->GetFormat(p,a,b,c) #define IDirectSoundBuffer_GetVolume(p,a) (p)->lpVtbl->GetVolume(p,a) #define IDirectSoundBuffer_GetPan(p,a) (p)->lpVtbl->GetPan(p,a) #define IDirectSoundBuffer_GetFrequency(p,a) (p)->lpVtbl->GetFrequency(p,a) #define IDirectSoundBuffer_GetStatus(p,a) (p)->lpVtbl->GetStatus(p,a) #define IDirectSoundBuffer_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b) #define IDirectSoundBuffer_Lock(p,a,b,c,d,e,f,g) (p)->lpVtbl->Lock(p,a,b,c,d,e,f,g) #define IDirectSoundBuffer_Play(p,a,b,c) (p)->lpVtbl->Play(p,a,b,c) #define IDirectSoundBuffer_SetCurrentPosition(p,a) (p)->lpVtbl->SetCurrentPosition(p,a) #define IDirectSoundBuffer_SetFormat(p,a) (p)->lpVtbl->SetFormat(p,a) #define IDirectSoundBuffer_SetVolume(p,a) (p)->lpVtbl->SetVolume(p,a) #define IDirectSoundBuffer_SetPan(p,a) (p)->lpVtbl->SetPan(p,a) #define IDirectSoundBuffer_SetFrequency(p,a) (p)->lpVtbl->SetFrequency(p,a) #define IDirectSoundBuffer_Stop(p) (p)->lpVtbl->Stop(p) #define IDirectSoundBuffer_Unlock(p,a,b,c,d) (p)->lpVtbl->Unlock(p,a,b,c,d) #define IDirectSoundBuffer_Restore(p) (p)->lpVtbl->Restore(p) #else // !defined(__cplusplus) || defined(CINTERFACE) #define IDirectSoundBuffer_GetCaps(p,a) (p)->GetCaps(a) #define IDirectSoundBuffer_GetCurrentPosition(p,a,b) (p)->GetCurrentPosition(a,b) #define IDirectSoundBuffer_GetFormat(p,a,b,c) (p)->GetFormat(a,b,c) #define IDirectSoundBuffer_GetVolume(p,a) (p)->GetVolume(a) #define IDirectSoundBuffer_GetPan(p,a) (p)->GetPan(a) #define IDirectSoundBuffer_GetFrequency(p,a) (p)->GetFrequency(a) #define IDirectSoundBuffer_GetStatus(p,a) (p)->GetStatus(a) #define IDirectSoundBuffer_Initialize(p,a,b) (p)->Initialize(a,b) #define IDirectSoundBuffer_Lock(p,a,b,c,d,e,f,g) (p)->Lock(a,b,c,d,e,f,g) #define IDirectSoundBuffer_Play(p,a,b,c) (p)->Play(a,b,c) #define IDirectSoundBuffer_SetCurrentPosition(p,a) (p)->SetCurrentPosition(a) #define IDirectSoundBuffer_SetFormat(p,a) (p)->SetFormat(a) #define IDirectSoundBuffer_SetVolume(p,a) (p)->SetVolume(a) #define IDirectSoundBuffer_SetPan(p,a) (p)->SetPan(a) #define IDirectSoundBuffer_SetFrequency(p,a) (p)->SetFrequency(a) #define IDirectSoundBuffer_Stop(p) (p)->Stop() #define IDirectSoundBuffer_Unlock(p,a,b,c,d) (p)->Unlock(a,b,c,d) #define IDirectSoundBuffer_Restore(p) (p)->Restore() #endif // !defined(__cplusplus) || defined(CINTERFACE) #if DIRECTSOUND_VERSION >= 0x0800 // // IDirectSoundBuffer8 // DEFINE_GUID(IID_IDirectSoundBuffer8, 0x6825a449, 0x7524, 0x4d82, 0x92, 0x0f, 0x50, 0xe3, 0x6a, 0xb3, 0xab, 0x1e); #undef INTERFACE #define INTERFACE IDirectSoundBuffer8 DECLARE_INTERFACE_(IDirectSoundBuffer8, IDirectSoundBuffer) { // IUnknown methods STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // IDirectSoundBuffer methods STDMETHOD(GetCaps) (THIS_ LPDSBCAPS pDSBufferCaps) PURE; STDMETHOD(GetCurrentPosition) (THIS_ LPDWORD pdwCurrentPlayCursor, LPDWORD pdwCurrentWriteCursor) PURE; STDMETHOD(GetFormat) (THIS_ LPWAVEFORMATEX pwfxFormat, DWORD dwSizeAllocated, LPDWORD pdwSizeWritten) PURE; STDMETHOD(GetVolume) (THIS_ LPLONG plVolume) PURE; STDMETHOD(GetPan) (THIS_ LPLONG plPan) PURE; STDMETHOD(GetFrequency) (THIS_ LPDWORD pdwFrequency) PURE; STDMETHOD(GetStatus) (THIS_ LPDWORD pdwStatus) PURE; STDMETHOD(Initialize) (THIS_ LPDIRECTSOUND pDirectSound, LPCDSBUFFERDESC pcDSBufferDesc) PURE; STDMETHOD(Lock) (THIS_ DWORD dwOffset, DWORD dwBytes, LPVOID *ppvAudioPtr1, LPDWORD pdwAudioBytes1, LPVOID *ppvAudioPtr2, LPDWORD pdwAudioBytes2, DWORD dwFlags) PURE; STDMETHOD(Play) (THIS_ DWORD dwReserved1, DWORD dwPriority, DWORD dwFlags) PURE; STDMETHOD(SetCurrentPosition) (THIS_ DWORD dwNewPosition) PURE; STDMETHOD(SetFormat) (THIS_ LPCWAVEFORMATEX pcfxFormat) PURE; STDMETHOD(SetVolume) (THIS_ LONG lVolume) PURE; STDMETHOD(SetPan) (THIS_ LONG lPan) PURE; STDMETHOD(SetFrequency) (THIS_ DWORD dwFrequency) PURE; STDMETHOD(Stop) (THIS) PURE; STDMETHOD(Unlock) (THIS_ LPVOID pvAudioPtr1, DWORD dwAudioBytes1, LPVOID pvAudioPtr2, DWORD dwAudioBytes2) PURE; STDMETHOD(Restore) (THIS) PURE; // IDirectSoundBuffer8 methods STDMETHOD(SetFX) (THIS_ DWORD dwEffectsCount, LPDSEFFECTDESC pDSFXDesc, LPDWORD pdwResultCodes) PURE; STDMETHOD(AcquireResources) (THIS_ DWORD dwFlags, DWORD dwEffectsCount, LPDWORD pdwResultCodes) PURE; STDMETHOD(GetObjectInPath) (THIS_ REFGUID rguidObject, DWORD dwIndex, REFGUID rguidInterface, LPVOID *ppObject) PURE; }; // Special GUID meaning "select all objects" for use in GetObjectInPath() DEFINE_GUID(GUID_All_Objects, 0xaa114de5, 0xc262, 0x4169, 0xa1, 0xc8, 0x23, 0xd6, 0x98, 0xcc, 0x73, 0xb5); #define IDirectSoundBuffer8_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) #define IDirectSoundBuffer8_AddRef(p) IUnknown_AddRef(p) #define IDirectSoundBuffer8_Release(p) IUnknown_Release(p) #define IDirectSoundBuffer8_GetCaps(p,a) IDirectSoundBuffer_GetCaps(p,a) #define IDirectSoundBuffer8_GetCurrentPosition(p,a,b) IDirectSoundBuffer_GetCurrentPosition(p,a,b) #define IDirectSoundBuffer8_GetFormat(p,a,b,c) IDirectSoundBuffer_GetFormat(p,a,b,c) #define IDirectSoundBuffer8_GetVolume(p,a) IDirectSoundBuffer_GetVolume(p,a) #define IDirectSoundBuffer8_GetPan(p,a) IDirectSoundBuffer_GetPan(p,a) #define IDirectSoundBuffer8_GetFrequency(p,a) IDirectSoundBuffer_GetFrequency(p,a) #define IDirectSoundBuffer8_GetStatus(p,a) IDirectSoundBuffer_GetStatus(p,a) #define IDirectSoundBuffer8_Initialize(p,a,b) IDirectSoundBuffer_Initialize(p,a,b) #define IDirectSoundBuffer8_Lock(p,a,b,c,d,e,f,g) IDirectSoundBuffer_Lock(p,a,b,c,d,e,f,g) #define IDirectSoundBuffer8_Play(p,a,b,c) IDirectSoundBuffer_Play(p,a,b,c) #define IDirectSoundBuffer8_SetCurrentPosition(p,a) IDirectSoundBuffer_SetCurrentPosition(p,a) #define IDirectSoundBuffer8_SetFormat(p,a) IDirectSoundBuffer_SetFormat(p,a) #define IDirectSoundBuffer8_SetVolume(p,a) IDirectSoundBuffer_SetVolume(p,a) #define IDirectSoundBuffer8_SetPan(p,a) IDirectSoundBuffer_SetPan(p,a) #define IDirectSoundBuffer8_SetFrequency(p,a) IDirectSoundBuffer_SetFrequency(p,a) #define IDirectSoundBuffer8_Stop(p) IDirectSoundBuffer_Stop(p) #define IDirectSoundBuffer8_Unlock(p,a,b,c,d) IDirectSoundBuffer_Unlock(p,a,b,c,d) #define IDirectSoundBuffer8_Restore(p) IDirectSoundBuffer_Restore(p) #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirectSoundBuffer8_SetFX(p,a,b,c) (p)->lpVtbl->SetFX(p,a,b,c) #define IDirectSoundBuffer8_AcquireResources(p,a,b,c) (p)->lpVtbl->AcquireResources(p,a,b,c) #define IDirectSoundBuffer8_GetObjectInPath(p,a,b,c,d) (p)->lpVtbl->GetObjectInPath(p,a,b,c,d) #else // !defined(__cplusplus) || defined(CINTERFACE) #define IDirectSoundBuffer8_SetFX(p,a,b,c) (p)->SetFX(a,b,c) #define IDirectSoundBuffer8_AcquireResources(p,a,b,c) (p)->AcquireResources(a,b,c) #define IDirectSoundBuffer8_GetObjectInPath(p,a,b,c,d) (p)->GetObjectInPath(a,b,c,d) #endif // !defined(__cplusplus) || defined(CINTERFACE) #endif // DIRECTSOUND_VERSION >= 0x0800 // // IDirectSound3DListener // DEFINE_GUID(IID_IDirectSound3DListener, 0x279AFA84, 0x4981, 0x11CE, 0xA5, 0x21, 0x00, 0x20, 0xAF, 0x0B, 0xE5, 0x60); #undef INTERFACE #define INTERFACE IDirectSound3DListener DECLARE_INTERFACE_(IDirectSound3DListener, IUnknown) { // IUnknown methods STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // IDirectSound3DListener methods STDMETHOD(GetAllParameters) (THIS_ LPDS3DLISTENER pListener) PURE; STDMETHOD(GetDistanceFactor) (THIS_ D3DVALUE* pflDistanceFactor) PURE; STDMETHOD(GetDopplerFactor) (THIS_ D3DVALUE* pflDopplerFactor) PURE; STDMETHOD(GetOrientation) (THIS_ D3DVECTOR* pvOrientFront, D3DVECTOR* pvOrientTop) PURE; STDMETHOD(GetPosition) (THIS_ D3DVECTOR* pvPosition) PURE; STDMETHOD(GetRolloffFactor) (THIS_ D3DVALUE* pflRolloffFactor) PURE; STDMETHOD(GetVelocity) (THIS_ D3DVECTOR* pvVelocity) PURE; STDMETHOD(SetAllParameters) (THIS_ LPCDS3DLISTENER pcListener, DWORD dwApply) PURE; STDMETHOD(SetDistanceFactor) (THIS_ D3DVALUE flDistanceFactor, DWORD dwApply) PURE; STDMETHOD(SetDopplerFactor) (THIS_ D3DVALUE flDopplerFactor, DWORD dwApply) PURE; STDMETHOD(SetOrientation) (THIS_ D3DVALUE xFront, D3DVALUE yFront, D3DVALUE zFront, D3DVALUE xTop, D3DVALUE yTop, D3DVALUE zTop, DWORD dwApply) PURE; STDMETHOD(SetPosition) (THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z, DWORD dwApply) PURE; STDMETHOD(SetRolloffFactor) (THIS_ D3DVALUE flRolloffFactor, DWORD dwApply) PURE; STDMETHOD(SetVelocity) (THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z, DWORD dwApply) PURE; STDMETHOD(CommitDeferredSettings) (THIS) PURE; }; #define IDirectSound3DListener_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) #define IDirectSound3DListener_AddRef(p) IUnknown_AddRef(p) #define IDirectSound3DListener_Release(p) IUnknown_Release(p) #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirectSound3DListener_GetAllParameters(p,a) (p)->lpVtbl->GetAllParameters(p,a) #define IDirectSound3DListener_GetDistanceFactor(p,a) (p)->lpVtbl->GetDistanceFactor(p,a) #define IDirectSound3DListener_GetDopplerFactor(p,a) (p)->lpVtbl->GetDopplerFactor(p,a) #define IDirectSound3DListener_GetOrientation(p,a,b) (p)->lpVtbl->GetOrientation(p,a,b) #define IDirectSound3DListener_GetPosition(p,a) (p)->lpVtbl->GetPosition(p,a) #define IDirectSound3DListener_GetRolloffFactor(p,a) (p)->lpVtbl->GetRolloffFactor(p,a) #define IDirectSound3DListener_GetVelocity(p,a) (p)->lpVtbl->GetVelocity(p,a) #define IDirectSound3DListener_SetAllParameters(p,a,b) (p)->lpVtbl->SetAllParameters(p,a,b) #define IDirectSound3DListener_SetDistanceFactor(p,a,b) (p)->lpVtbl->SetDistanceFactor(p,a,b) #define IDirectSound3DListener_SetDopplerFactor(p,a,b) (p)->lpVtbl->SetDopplerFactor(p,a,b) #define IDirectSound3DListener_SetOrientation(p,a,b,c,d,e,f,g) (p)->lpVtbl->SetOrientation(p,a,b,c,d,e,f,g) #define IDirectSound3DListener_SetPosition(p,a,b,c,d) (p)->lpVtbl->SetPosition(p,a,b,c,d) #define IDirectSound3DListener_SetRolloffFactor(p,a,b) (p)->lpVtbl->SetRolloffFactor(p,a,b) #define IDirectSound3DListener_SetVelocity(p,a,b,c,d) (p)->lpVtbl->SetVelocity(p,a,b,c,d) #define IDirectSound3DListener_CommitDeferredSettings(p) (p)->lpVtbl->CommitDeferredSettings(p) #else // !defined(__cplusplus) || defined(CINTERFACE) #define IDirectSound3DListener_GetAllParameters(p,a) (p)->GetAllParameters(a) #define IDirectSound3DListener_GetDistanceFactor(p,a) (p)->GetDistanceFactor(a) #define IDirectSound3DListener_GetDopplerFactor(p,a) (p)->GetDopplerFactor(a) #define IDirectSound3DListener_GetOrientation(p,a,b) (p)->GetOrientation(a,b) #define IDirectSound3DListener_GetPosition(p,a) (p)->GetPosition(a) #define IDirectSound3DListener_GetRolloffFactor(p,a) (p)->GetRolloffFactor(a) #define IDirectSound3DListener_GetVelocity(p,a) (p)->GetVelocity(a) #define IDirectSound3DListener_SetAllParameters(p,a,b) (p)->SetAllParameters(a,b) #define IDirectSound3DListener_SetDistanceFactor(p,a,b) (p)->SetDistanceFactor(a,b) #define IDirectSound3DListener_SetDopplerFactor(p,a,b) (p)->SetDopplerFactor(a,b) #define IDirectSound3DListener_SetOrientation(p,a,b,c,d,e,f,g) (p)->SetOrientation(a,b,c,d,e,f,g) #define IDirectSound3DListener_SetPosition(p,a,b,c,d) (p)->SetPosition(a,b,c,d) #define IDirectSound3DListener_SetRolloffFactor(p,a,b) (p)->SetRolloffFactor(a,b) #define IDirectSound3DListener_SetVelocity(p,a,b,c,d) (p)->SetVelocity(a,b,c,d) #define IDirectSound3DListener_CommitDeferredSettings(p) (p)->CommitDeferredSettings() #endif // !defined(__cplusplus) || defined(CINTERFACE) // // IDirectSound3DBuffer // DEFINE_GUID(IID_IDirectSound3DBuffer, 0x279AFA86, 0x4981, 0x11CE, 0xA5, 0x21, 0x00, 0x20, 0xAF, 0x0B, 0xE5, 0x60); #undef INTERFACE #define INTERFACE IDirectSound3DBuffer DECLARE_INTERFACE_(IDirectSound3DBuffer, IUnknown) { // IUnknown methods STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // IDirectSound3DBuffer methods STDMETHOD(GetAllParameters) (THIS_ LPDS3DBUFFER pDs3dBuffer) PURE; STDMETHOD(GetConeAngles) (THIS_ LPDWORD pdwInsideConeAngle, LPDWORD pdwOutsideConeAngle) PURE; STDMETHOD(GetConeOrientation) (THIS_ D3DVECTOR* pvOrientation) PURE; STDMETHOD(GetConeOutsideVolume) (THIS_ LPLONG plConeOutsideVolume) PURE; STDMETHOD(GetMaxDistance) (THIS_ D3DVALUE* pflMaxDistance) PURE; STDMETHOD(GetMinDistance) (THIS_ D3DVALUE* pflMinDistance) PURE; STDMETHOD(GetMode) (THIS_ LPDWORD pdwMode) PURE; STDMETHOD(GetPosition) (THIS_ D3DVECTOR* pvPosition) PURE; STDMETHOD(GetVelocity) (THIS_ D3DVECTOR* pvVelocity) PURE; STDMETHOD(SetAllParameters) (THIS_ LPCDS3DBUFFER pcDs3dBuffer, DWORD dwApply) PURE; STDMETHOD(SetConeAngles) (THIS_ DWORD dwInsideConeAngle, DWORD dwOutsideConeAngle, DWORD dwApply) PURE; STDMETHOD(SetConeOrientation) (THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z, DWORD dwApply) PURE; STDMETHOD(SetConeOutsideVolume) (THIS_ LONG lConeOutsideVolume, DWORD dwApply) PURE; STDMETHOD(SetMaxDistance) (THIS_ D3DVALUE flMaxDistance, DWORD dwApply) PURE; STDMETHOD(SetMinDistance) (THIS_ D3DVALUE flMinDistance, DWORD dwApply) PURE; STDMETHOD(SetMode) (THIS_ DWORD dwMode, DWORD dwApply) PURE; STDMETHOD(SetPosition) (THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z, DWORD dwApply) PURE; STDMETHOD(SetVelocity) (THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z, DWORD dwApply) PURE; }; #define IDirectSound3DBuffer_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) #define IDirectSound3DBuffer_AddRef(p) IUnknown_AddRef(p) #define IDirectSound3DBuffer_Release(p) IUnknown_Release(p) #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirectSound3DBuffer_GetAllParameters(p,a) (p)->lpVtbl->GetAllParameters(p,a) #define IDirectSound3DBuffer_GetConeAngles(p,a,b) (p)->lpVtbl->GetConeAngles(p,a,b) #define IDirectSound3DBuffer_GetConeOrientation(p,a) (p)->lpVtbl->GetConeOrientation(p,a) #define IDirectSound3DBuffer_GetConeOutsideVolume(p,a) (p)->lpVtbl->GetConeOutsideVolume(p,a) #define IDirectSound3DBuffer_GetPosition(p,a) (p)->lpVtbl->GetPosition(p,a) #define IDirectSound3DBuffer_GetMinDistance(p,a) (p)->lpVtbl->GetMinDistance(p,a) #define IDirectSound3DBuffer_GetMaxDistance(p,a) (p)->lpVtbl->GetMaxDistance(p,a) #define IDirectSound3DBuffer_GetMode(p,a) (p)->lpVtbl->GetMode(p,a) #define IDirectSound3DBuffer_GetVelocity(p,a) (p)->lpVtbl->GetVelocity(p,a) #define IDirectSound3DBuffer_SetAllParameters(p,a,b) (p)->lpVtbl->SetAllParameters(p,a,b) #define IDirectSound3DBuffer_SetConeAngles(p,a,b,c) (p)->lpVtbl->SetConeAngles(p,a,b,c) #define IDirectSound3DBuffer_SetConeOrientation(p,a,b,c,d) (p)->lpVtbl->SetConeOrientation(p,a,b,c,d) #define IDirectSound3DBuffer_SetConeOutsideVolume(p,a,b) (p)->lpVtbl->SetConeOutsideVolume(p,a,b) #define IDirectSound3DBuffer_SetPosition(p,a,b,c,d) (p)->lpVtbl->SetPosition(p,a,b,c,d) #define IDirectSound3DBuffer_SetMinDistance(p,a,b) (p)->lpVtbl->SetMinDistance(p,a,b) #define IDirectSound3DBuffer_SetMaxDistance(p,a,b) (p)->lpVtbl->SetMaxDistance(p,a,b) #define IDirectSound3DBuffer_SetMode(p,a,b) (p)->lpVtbl->SetMode(p,a,b) #define IDirectSound3DBuffer_SetVelocity(p,a,b,c,d) (p)->lpVtbl->SetVelocity(p,a,b,c,d) #else // !defined(__cplusplus) || defined(CINTERFACE) #define IDirectSound3DBuffer_GetAllParameters(p,a) (p)->GetAllParameters(a) #define IDirectSound3DBuffer_GetConeAngles(p,a,b) (p)->GetConeAngles(a,b) #define IDirectSound3DBuffer_GetConeOrientation(p,a) (p)->GetConeOrientation(a) #define IDirectSound3DBuffer_GetConeOutsideVolume(p,a) (p)->GetConeOutsideVolume(a) #define IDirectSound3DBuffer_GetPosition(p,a) (p)->GetPosition(a) #define IDirectSound3DBuffer_GetMinDistance(p,a) (p)->GetMinDistance(a) #define IDirectSound3DBuffer_GetMaxDistance(p,a) (p)->GetMaxDistance(a) #define IDirectSound3DBuffer_GetMode(p,a) (p)->GetMode(a) #define IDirectSound3DBuffer_GetVelocity(p,a) (p)->GetVelocity(a) #define IDirectSound3DBuffer_SetAllParameters(p,a,b) (p)->SetAllParameters(a,b) #define IDirectSound3DBuffer_SetConeAngles(p,a,b,c) (p)->SetConeAngles(a,b,c) #define IDirectSound3DBuffer_SetConeOrientation(p,a,b,c,d) (p)->SetConeOrientation(a,b,c,d) #define IDirectSound3DBuffer_SetConeOutsideVolume(p,a,b) (p)->SetConeOutsideVolume(a,b) #define IDirectSound3DBuffer_SetPosition(p,a,b,c,d) (p)->SetPosition(a,b,c,d) #define IDirectSound3DBuffer_SetMinDistance(p,a,b) (p)->SetMinDistance(a,b) #define IDirectSound3DBuffer_SetMaxDistance(p,a,b) (p)->SetMaxDistance(a,b) #define IDirectSound3DBuffer_SetMode(p,a,b) (p)->SetMode(a,b) #define IDirectSound3DBuffer_SetVelocity(p,a,b,c,d) (p)->SetVelocity(a,b,c,d) #endif // !defined(__cplusplus) || defined(CINTERFACE) // // IDirectSoundCapture // DEFINE_GUID(IID_IDirectSoundCapture, 0xb0210781, 0x89cd, 0x11d0, 0xaf, 0x8, 0x0, 0xa0, 0xc9, 0x25, 0xcd, 0x16); #undef INTERFACE #define INTERFACE IDirectSoundCapture DECLARE_INTERFACE_(IDirectSoundCapture, IUnknown) { // IUnknown methods STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // IDirectSoundCapture methods STDMETHOD(CreateCaptureBuffer) (THIS_ LPCDSCBUFFERDESC pcDSCBufferDesc, LPDIRECTSOUNDCAPTUREBUFFER *ppDSCBuffer, LPUNKNOWN pUnkOuter) PURE; STDMETHOD(GetCaps) (THIS_ LPDSCCAPS pDSCCaps) PURE; STDMETHOD(Initialize) (THIS_ LPCGUID pcGuidDevice) PURE; }; #define IDirectSoundCapture_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) #define IDirectSoundCapture_AddRef(p) IUnknown_AddRef(p) #define IDirectSoundCapture_Release(p) IUnknown_Release(p) #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirectSoundCapture_CreateCaptureBuffer(p,a,b,c) (p)->lpVtbl->CreateCaptureBuffer(p,a,b,c) #define IDirectSoundCapture_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a) #define IDirectSoundCapture_Initialize(p,a) (p)->lpVtbl->Initialize(p,a) #else // !defined(__cplusplus) || defined(CINTERFACE) #define IDirectSoundCapture_CreateCaptureBuffer(p,a,b,c) (p)->CreateCaptureBuffer(a,b,c) #define IDirectSoundCapture_GetCaps(p,a) (p)->GetCaps(a) #define IDirectSoundCapture_Initialize(p,a) (p)->Initialize(a) #endif // !defined(__cplusplus) || defined(CINTERFACE) // // IDirectSoundCaptureBuffer // DEFINE_GUID(IID_IDirectSoundCaptureBuffer, 0xb0210782, 0x89cd, 0x11d0, 0xaf, 0x8, 0x0, 0xa0, 0xc9, 0x25, 0xcd, 0x16); #undef INTERFACE #define INTERFACE IDirectSoundCaptureBuffer DECLARE_INTERFACE_(IDirectSoundCaptureBuffer, IUnknown) { // IUnknown methods STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // IDirectSoundCaptureBuffer methods STDMETHOD(GetCaps) (THIS_ LPDSCBCAPS pDSCBCaps) PURE; STDMETHOD(GetCurrentPosition) (THIS_ LPDWORD pdwCapturePosition, LPDWORD pdwReadPosition) PURE; STDMETHOD(GetFormat) (THIS_ LPWAVEFORMATEX pwfxFormat, DWORD dwSizeAllocated, LPDWORD pdwSizeWritten) PURE; STDMETHOD(GetStatus) (THIS_ LPDWORD pdwStatus) PURE; STDMETHOD(Initialize) (THIS_ LPDIRECTSOUNDCAPTURE pDirectSoundCapture, LPCDSCBUFFERDESC pcDSCBufferDesc) PURE; STDMETHOD(Lock) (THIS_ DWORD dwOffset, DWORD dwBytes, LPVOID *ppvAudioPtr1, LPDWORD pdwAudioBytes1, LPVOID *ppvAudioPtr2, LPDWORD pdwAudioBytes2, DWORD dwFlags) PURE; STDMETHOD(Start) (THIS_ DWORD dwFlags) PURE; STDMETHOD(Stop) (THIS) PURE; STDMETHOD(Unlock) (THIS_ LPVOID pvAudioPtr1, DWORD dwAudioBytes1, LPVOID pvAudioPtr2, DWORD dwAudioBytes2) PURE; }; #define IDirectSoundCaptureBuffer_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) #define IDirectSoundCaptureBuffer_AddRef(p) IUnknown_AddRef(p) #define IDirectSoundCaptureBuffer_Release(p) IUnknown_Release(p) #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirectSoundCaptureBuffer_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a) #define IDirectSoundCaptureBuffer_GetCurrentPosition(p,a,b) (p)->lpVtbl->GetCurrentPosition(p,a,b) #define IDirectSoundCaptureBuffer_GetFormat(p,a,b,c) (p)->lpVtbl->GetFormat(p,a,b,c) #define IDirectSoundCaptureBuffer_GetStatus(p,a) (p)->lpVtbl->GetStatus(p,a) #define IDirectSoundCaptureBuffer_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b) #define IDirectSoundCaptureBuffer_Lock(p,a,b,c,d,e,f,g) (p)->lpVtbl->Lock(p,a,b,c,d,e,f,g) #define IDirectSoundCaptureBuffer_Start(p,a) (p)->lpVtbl->Start(p,a) #define IDirectSoundCaptureBuffer_Stop(p) (p)->lpVtbl->Stop(p) #define IDirectSoundCaptureBuffer_Unlock(p,a,b,c,d) (p)->lpVtbl->Unlock(p,a,b,c,d) #else // !defined(__cplusplus) || defined(CINTERFACE) #define IDirectSoundCaptureBuffer_GetCaps(p,a) (p)->GetCaps(a) #define IDirectSoundCaptureBuffer_GetCurrentPosition(p,a,b) (p)->GetCurrentPosition(a,b) #define IDirectSoundCaptureBuffer_GetFormat(p,a,b,c) (p)->GetFormat(a,b,c) #define IDirectSoundCaptureBuffer_GetStatus(p,a) (p)->GetStatus(a) #define IDirectSoundCaptureBuffer_Initialize(p,a,b) (p)->Initialize(a,b) #define IDirectSoundCaptureBuffer_Lock(p,a,b,c,d,e,f,g) (p)->Lock(a,b,c,d,e,f,g) #define IDirectSoundCaptureBuffer_Start(p,a) (p)->Start(a) #define IDirectSoundCaptureBuffer_Stop(p) (p)->Stop() #define IDirectSoundCaptureBuffer_Unlock(p,a,b,c,d) (p)->Unlock(a,b,c,d) #endif // !defined(__cplusplus) || defined(CINTERFACE) #if DIRECTSOUND_VERSION >= 0x0800 // // IDirectSoundCaptureBuffer8 // DEFINE_GUID(IID_IDirectSoundCaptureBuffer8, 0x990df4, 0xdbb, 0x4872, 0x83, 0x3e, 0x6d, 0x30, 0x3e, 0x80, 0xae, 0xb6); #undef INTERFACE #define INTERFACE IDirectSoundCaptureBuffer8 DECLARE_INTERFACE_(IDirectSoundCaptureBuffer8, IDirectSoundCaptureBuffer) { // IUnknown methods STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // IDirectSoundCaptureBuffer methods STDMETHOD(GetCaps) (THIS_ LPDSCBCAPS pDSCBCaps) PURE; STDMETHOD(GetCurrentPosition) (THIS_ LPDWORD pdwCapturePosition, LPDWORD pdwReadPosition) PURE; STDMETHOD(GetFormat) (THIS_ LPWAVEFORMATEX pwfxFormat, DWORD dwSizeAllocated, LPDWORD pdwSizeWritten) PURE; STDMETHOD(GetStatus) (THIS_ LPDWORD pdwStatus) PURE; STDMETHOD(Initialize) (THIS_ LPDIRECTSOUNDCAPTURE pDirectSoundCapture, LPCDSCBUFFERDESC pcDSCBufferDesc) PURE; STDMETHOD(Lock) (THIS_ DWORD dwOffset, DWORD dwBytes, LPVOID *ppvAudioPtr1, LPDWORD pdwAudioBytes1, LPVOID *ppvAudioPtr2, LPDWORD pdwAudioBytes2, DWORD dwFlags) PURE; STDMETHOD(Start) (THIS_ DWORD dwFlags) PURE; STDMETHOD(Stop) (THIS) PURE; STDMETHOD(Unlock) (THIS_ LPVOID pvAudioPtr1, DWORD dwAudioBytes1, LPVOID pvAudioPtr2, DWORD dwAudioBytes2) PURE; // IDirectSoundCaptureBuffer8 methods STDMETHOD(GetObjectInPath) (THIS_ REFGUID rguidObject, DWORD dwIndex, REFGUID rguidInterface, LPVOID *ppObject) PURE; STDMETHOD(GetFXStatus) (DWORD dwFXCount, LPDWORD pdwFXStatus) PURE; }; #define IDirectSoundCaptureBuffer8_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) #define IDirectSoundCaptureBuffer8_AddRef(p) IUnknown_AddRef(p) #define IDirectSoundCaptureBuffer8_Release(p) IUnknown_Release(p) #define IDirectSoundCaptureBuffer8_GetCaps(p,a) IDirectSoundCaptureBuffer_GetCaps(p,a) #define IDirectSoundCaptureBuffer8_GetCurrentPosition(p,a,b) IDirectSoundCaptureBuffer_GetCurrentPosition(p,a,b) #define IDirectSoundCaptureBuffer8_GetFormat(p,a,b,c) IDirectSoundCaptureBuffer_GetFormat(p,a,b,c) #define IDirectSoundCaptureBuffer8_GetStatus(p,a) IDirectSoundCaptureBuffer_GetStatus(p,a) #define IDirectSoundCaptureBuffer8_Initialize(p,a,b) IDirectSoundCaptureBuffer_Initialize(p,a,b) #define IDirectSoundCaptureBuffer8_Lock(p,a,b,c,d,e,f,g) IDirectSoundCaptureBuffer_Lock(p,a,b,c,d,e,f,g) #define IDirectSoundCaptureBuffer8_Start(p,a) IDirectSoundCaptureBuffer_Start(p,a) #define IDirectSoundCaptureBuffer8_Stop(p) IDirectSoundCaptureBuffer_Stop(p)) #define IDirectSoundCaptureBuffer8_Unlock(p,a,b,c,d) IDirectSoundCaptureBuffer_Unlock(p,a,b,c,d) #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirectSoundCaptureBuffer8_GetObjectInPath(p,a,b,c,d) (p)->lpVtbl->GetObjectInPath(p,a,b,c,d) #define IDirectSoundCaptureBuffer8_GetFXStatus(p,a,b) (p)->lpVtbl->GetFXStatus(p,a,b) #else // !defined(__cplusplus) || defined(CINTERFACE) #define IDirectSoundCaptureBuffer8_GetObjectInPath(p,a,b,c,d) (p)->GetObjectInPath(a,b,c,d) #define IDirectSoundCaptureBuffer8_GetFXStatus(p,a,b) (p)->GetFXStatus(a,b) #endif // !defined(__cplusplus) || defined(CINTERFACE) #endif // DIRECTSOUND_VERSION >= 0x0800 // // IDirectSoundNotify // DEFINE_GUID(IID_IDirectSoundNotify, 0xb0210783, 0x89cd, 0x11d0, 0xaf, 0x8, 0x0, 0xa0, 0xc9, 0x25, 0xcd, 0x16); #undef INTERFACE #define INTERFACE IDirectSoundNotify DECLARE_INTERFACE_(IDirectSoundNotify, IUnknown) { // IUnknown methods STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // IDirectSoundNotify methods STDMETHOD(SetNotificationPositions) (THIS_ DWORD dwPositionNotifies, LPCDSBPOSITIONNOTIFY pcPositionNotifies) PURE; }; #define IDirectSoundNotify_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) #define IDirectSoundNotify_AddRef(p) IUnknown_AddRef(p) #define IDirectSoundNotify_Release(p) IUnknown_Release(p) #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirectSoundNotify_SetNotificationPositions(p,a,b) (p)->lpVtbl->SetNotificationPositions(p,a,b) #else // !defined(__cplusplus) || defined(CINTERFACE) #define IDirectSoundNotify_SetNotificationPositions(p,a,b) (p)->SetNotificationPositions(a,b) #endif // !defined(__cplusplus) || defined(CINTERFACE) // // IKsPropertySet // #ifndef _IKsPropertySet_ #define _IKsPropertySet_ #ifdef __cplusplus // 'struct' not 'class' per the way DECLARE_INTERFACE_ is defined struct IKsPropertySet; #endif // __cplusplus typedef struct IKsPropertySet *LPKSPROPERTYSET; #define KSPROPERTY_SUPPORT_GET 0x00000001 #define KSPROPERTY_SUPPORT_SET 0x00000002 DEFINE_GUID(IID_IKsPropertySet, 0x31efac30, 0x515c, 0x11d0, 0xa9, 0xaa, 0x00, 0xaa, 0x00, 0x61, 0xbe, 0x93); #undef INTERFACE #define INTERFACE IKsPropertySet DECLARE_INTERFACE_(IKsPropertySet, IUnknown) { // IUnknown methods STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // IKsPropertySet methods STDMETHOD(Get) (THIS_ REFGUID rguidPropSet, ULONG ulId, LPVOID pInstanceData, ULONG ulInstanceLength, LPVOID pPropertyData, ULONG ulDataLength, PULONG pulBytesReturned) PURE; STDMETHOD(Set) (THIS_ REFGUID rguidPropSet, ULONG ulId, LPVOID pInstanceData, ULONG ulInstanceLength, LPVOID pPropertyData, ULONG ulDataLength) PURE; STDMETHOD(QuerySupport) (THIS_ REFGUID rguidPropSet, ULONG ulId, PULONG pulTypeSupport) PURE; }; #define IKsPropertySet_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) #define IKsPropertySet_AddRef(p) IUnknown_AddRef(p) #define IKsPropertySet_Release(p) IUnknown_Release(p) #if !defined(__cplusplus) || defined(CINTERFACE) #define IKsPropertySet_Get(p,a,b,c,d,e,f,g) (p)->lpVtbl->Get(p,a,b,c,d,e,f,g) #define IKsPropertySet_Set(p,a,b,c,d,e,f) (p)->lpVtbl->Set(p,a,b,c,d,e,f) #define IKsPropertySet_QuerySupport(p,a,b,c) (p)->lpVtbl->QuerySupport(p,a,b,c) #else // !defined(__cplusplus) || defined(CINTERFACE) #define IKsPropertySet_Get(p,a,b,c,d,e,f,g) (p)->Get(a,b,c,d,e,f,g) #define IKsPropertySet_Set(p,a,b,c,d,e,f) (p)->Set(a,b,c,d,e,f) #define IKsPropertySet_QuerySupport(p,a,b,c) (p)->QuerySupport(a,b,c) #endif // !defined(__cplusplus) || defined(CINTERFACE) #endif // _IKsPropertySet_ #if DIRECTSOUND_VERSION >= 0x0800 // // IDirectSoundFXGargle // DEFINE_GUID(IID_IDirectSoundFXGargle, 0xd616f352, 0xd622, 0x11ce, 0xaa, 0xc5, 0x00, 0x20, 0xaf, 0x0b, 0x99, 0xa3); typedef struct _DSFXGargle { DWORD dwRateHz; // Rate of modulation in hz DWORD dwWaveShape; // DSFXGARGLE_WAVE_xxx } DSFXGargle, *LPDSFXGargle; #define DSFXGARGLE_WAVE_TRIANGLE 0 #define DSFXGARGLE_WAVE_SQUARE 1 typedef const DSFXGargle *LPCDSFXGargle; #define DSFXGARGLE_RATEHZ_MIN 1 #define DSFXGARGLE_RATEHZ_MAX 1000 #undef INTERFACE #define INTERFACE IDirectSoundFXGargle DECLARE_INTERFACE_(IDirectSoundFXGargle, IUnknown) { // IUnknown methods STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // IDirectSoundFXGargle methods STDMETHOD(SetAllParameters) (THIS_ LPCDSFXGargle pcDsFxGargle) PURE; STDMETHOD(GetAllParameters) (THIS_ LPDSFXGargle pDsFxGargle) PURE; }; #define IDirectSoundFXGargle_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) #define IDirectSoundFXGargle_AddRef(p) IUnknown_AddRef(p) #define IDirectSoundFXGargle_Release(p) IUnknown_Release(p) #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirectSoundFXGargle_SetAllParameters(p,a) (p)->lpVtbl->SetAllParameters(p,a) #define IDirectSoundFXGargle_GetAllParameters(p,a) (p)->lpVtbl->GetAllParameters(p,a) #else // !defined(__cplusplus) || defined(CINTERFACE) #define IDirectSoundFXGargle_SetAllParameters(p,a) (p)->SetAllParameters(a) #define IDirectSoundFXGargle_GetAllParameters(p,a) (p)->GetAllParameters(a) #endif // !defined(__cplusplus) || defined(CINTERFACE) // // IDirectSoundFXChorus // DEFINE_GUID(IID_IDirectSoundFXChorus, 0x880842e3, 0x145f, 0x43e6, 0xa9, 0x34, 0xa7, 0x18, 0x06, 0xe5, 0x05, 0x47); typedef struct _DSFXChorus { FLOAT fWetDryMix; FLOAT fDepth; FLOAT fFeedback; FLOAT fFrequency; LONG lWaveform; // LFO shape; DSFXCHORUS_WAVE_xxx FLOAT fDelay; LONG lPhase; } DSFXChorus, *LPDSFXChorus; typedef const DSFXChorus *LPCDSFXChorus; #define DSFXCHORUS_WAVE_TRIANGLE 0 #define DSFXCHORUS_WAVE_SIN 1 #define DSFXCHORUS_WETDRYMIX_MIN 0.0f #define DSFXCHORUS_WETDRYMIX_MAX 100.0f #define DSFXCHORUS_DEPTH_MIN 0.0f #define DSFXCHORUS_DEPTH_MAX 100.0f #define DSFXCHORUS_FEEDBACK_MIN -99.0f #define DSFXCHORUS_FEEDBACK_MAX 99.0f #define DSFXCHORUS_FREQUENCY_MIN 0.0f #define DSFXCHORUS_FREQUENCY_MAX 10.0f #define DSFXCHORUS_DELAY_MIN 0.0f #define DSFXCHORUS_DELAY_MAX 20.0f #define DSFXCHORUS_PHASE_MIN 0 #define DSFXCHORUS_PHASE_MAX 4 #define DSFXCHORUS_PHASE_NEG_180 0 #define DSFXCHORUS_PHASE_NEG_90 1 #define DSFXCHORUS_PHASE_ZERO 2 #define DSFXCHORUS_PHASE_90 3 #define DSFXCHORUS_PHASE_180 4 #undef INTERFACE #define INTERFACE IDirectSoundFXChorus DECLARE_INTERFACE_(IDirectSoundFXChorus, IUnknown) { // IUnknown methods STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // IDirectSoundFXChorus methods STDMETHOD(SetAllParameters) (THIS_ LPCDSFXChorus pcDsFxChorus) PURE; STDMETHOD(GetAllParameters) (THIS_ LPDSFXChorus pDsFxChorus) PURE; }; #define IDirectSoundFXChorus_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) #define IDirectSoundFXChorus_AddRef(p) IUnknown_AddRef(p) #define IDirectSoundFXChorus_Release(p) IUnknown_Release(p) #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirectSoundFXChorus_SetAllParameters(p,a) (p)->lpVtbl->SetAllParameters(p,a) #define IDirectSoundFXChorus_GetAllParameters(p,a) (p)->lpVtbl->GetAllParameters(p,a) #else // !defined(__cplusplus) || defined(CINTERFACE) #define IDirectSoundFXChorus_SetAllParameters(p,a) (p)->SetAllParameters(a) #define IDirectSoundFXChorus_GetAllParameters(p,a) (p)->GetAllParameters(a) #endif // !defined(__cplusplus) || defined(CINTERFACE) // // IDirectSoundFXFlanger // DEFINE_GUID(IID_IDirectSoundFXFlanger, 0x903e9878, 0x2c92, 0x4072, 0x9b, 0x2c, 0xea, 0x68, 0xf5, 0x39, 0x67, 0x83); typedef struct _DSFXFlanger { FLOAT fWetDryMix; FLOAT fDepth; FLOAT fFeedback; FLOAT fFrequency; LONG lWaveform; FLOAT fDelay; LONG lPhase; } DSFXFlanger, *LPDSFXFlanger; typedef const DSFXFlanger *LPCDSFXFlanger; #define DSFXFLANGER_WAVE_TRIANGLE 0 #define DSFXFLANGER_WAVE_SIN 1 #define DSFXFLANGER_WETDRYMIX_MIN 0.0f #define DSFXFLANGER_WETDRYMIX_MAX 100.0f #define DSFXFLANGER_FREQUENCY_MIN 0.0f #define DSFXFLANGER_FREQUENCY_MAX 10.0f #define DSFXFLANGER_DEPTH_MIN 0.0f #define DSFXFLANGER_DEPTH_MAX 100.0f #define DSFXFLANGER_PHASE_MIN 0 #define DSFXFLANGER_PHASE_MAX 4 #define DSFXFLANGER_FEEDBACK_MIN -99.0f #define DSFXFLANGER_FEEDBACK_MAX 99.0f #define DSFXFLANGER_DELAY_MIN 0.0f #define DSFXFLANGER_DELAY_MAX 4.0f #define DSFXFLANGER_PHASE_NEG_180 0 #define DSFXFLANGER_PHASE_NEG_90 1 #define DSFXFLANGER_PHASE_ZERO 2 #define DSFXFLANGER_PHASE_90 3 #define DSFXFLANGER_PHASE_180 4 #undef INTERFACE #define INTERFACE IDirectSoundFXFlanger DECLARE_INTERFACE_(IDirectSoundFXFlanger, IUnknown) { // IUnknown methods STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // IDirectSoundFXFlanger methods STDMETHOD(SetAllParameters) (THIS_ LPCDSFXFlanger pcDsFxFlanger) PURE; STDMETHOD(GetAllParameters) (THIS_ LPDSFXFlanger pDsFxFlanger) PURE; }; #define IDirectSoundFXFlanger_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) #define IDirectSoundFXFlanger_AddRef(p) IUnknown_AddRef(p) #define IDirectSoundFXFlanger_Release(p) IUnknown_Release(p) #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirectSoundFXFlanger_SetAllParameters(p,a) (p)->lpVtbl->SetAllParameters(p,a) #define IDirectSoundFXFlanger_GetAllParameters(p,a) (p)->lpVtbl->GetAllParameters(p,a) #else // !defined(__cplusplus) || defined(CINTERFACE) #define IDirectSoundFXFlanger_SetAllParameters(p,a) (p)->SetAllParameters(a) #define IDirectSoundFXFlanger_GetAllParameters(p,a) (p)->GetAllParameters(a) #endif // !defined(__cplusplus) || defined(CINTERFACE) // // IDirectSoundFXEcho // DEFINE_GUID(IID_IDirectSoundFXEcho, 0x8bd28edf, 0x50db, 0x4e92, 0xa2, 0xbd, 0x44, 0x54, 0x88, 0xd1, 0xed, 0x42); typedef struct _DSFXEcho { FLOAT fWetDryMix; FLOAT fFeedback; FLOAT fLeftDelay; FLOAT fRightDelay; LONG lPanDelay; } DSFXEcho, *LPDSFXEcho; typedef const DSFXEcho *LPCDSFXEcho; #define DSFXECHO_WETDRYMIX_MIN 0.0f #define DSFXECHO_WETDRYMIX_MAX 100.0f #define DSFXECHO_FEEDBACK_MIN 0.0f #define DSFXECHO_FEEDBACK_MAX 100.0f #define DSFXECHO_LEFTDELAY_MIN 1.0f #define DSFXECHO_LEFTDELAY_MAX 2000.0f #define DSFXECHO_RIGHTDELAY_MIN 1.0f #define DSFXECHO_RIGHTDELAY_MAX 2000.0f #define DSFXECHO_PANDELAY_MIN 0 #define DSFXECHO_PANDELAY_MAX 1 #undef INTERFACE #define INTERFACE IDirectSoundFXEcho DECLARE_INTERFACE_(IDirectSoundFXEcho, IUnknown) { // IUnknown methods STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // IDirectSoundFXEcho methods STDMETHOD(SetAllParameters) (THIS_ LPCDSFXEcho pcDsFxEcho) PURE; STDMETHOD(GetAllParameters) (THIS_ LPDSFXEcho pDsFxEcho) PURE; }; #define IDirectSoundFXEcho_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) #define IDirectSoundFXEcho_AddRef(p) IUnknown_AddRef(p) #define IDirectSoundFXEcho_Release(p) IUnknown_Release(p) #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirectSoundFXEcho_SetAllParameters(p,a) (p)->lpVtbl->SetAllParameters(p,a) #define IDirectSoundFXEcho_GetAllParameters(p,a) (p)->lpVtbl->GetAllParameters(p,a) #else // !defined(__cplusplus) || defined(CINTERFACE) #define IDirectSoundFXEcho_SetAllParameters(p,a) (p)->SetAllParameters(a) #define IDirectSoundFXEcho_GetAllParameters(p,a) (p)->GetAllParameters(a) #endif // !defined(__cplusplus) || defined(CINTERFACE) // // IDirectSoundFXDistortion // DEFINE_GUID(IID_IDirectSoundFXDistortion, 0x8ecf4326, 0x455f, 0x4d8b, 0xbd, 0xa9, 0x8d, 0x5d, 0x3e, 0x9e, 0x3e, 0x0b); typedef struct _DSFXDistortion { FLOAT fGain; FLOAT fEdge; FLOAT fPostEQCenterFrequency; FLOAT fPostEQBandwidth; FLOAT fPreLowpassCutoff; } DSFXDistortion, *LPDSFXDistortion; typedef const DSFXDistortion *LPCDSFXDistortion; #define DSFXDISTORTION_GAIN_MIN -60.0f #define DSFXDISTORTION_GAIN_MAX 0.0f #define DSFXDISTORTION_EDGE_MIN 0.0f #define DSFXDISTORTION_EDGE_MAX 100.0f #define DSFXDISTORTION_POSTEQCENTERFREQUENCY_MIN 100.0f #define DSFXDISTORTION_POSTEQCENTERFREQUENCY_MAX 8000.0f #define DSFXDISTORTION_POSTEQBANDWIDTH_MIN 100.0f #define DSFXDISTORTION_POSTEQBANDWIDTH_MAX 8000.0f #define DSFXDISTORTION_PRELOWPASSCUTOFF_MIN 100.0f #define DSFXDISTORTION_PRELOWPASSCUTOFF_MAX 8000.0f #undef INTERFACE #define INTERFACE IDirectSoundFXDistortion DECLARE_INTERFACE_(IDirectSoundFXDistortion, IUnknown) { // IUnknown methods STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // IDirectSoundFXDistortion methods STDMETHOD(SetAllParameters) (THIS_ LPCDSFXDistortion pcDsFxDistortion) PURE; STDMETHOD(GetAllParameters) (THIS_ LPDSFXDistortion pDsFxDistortion) PURE; }; #define IDirectSoundFXDistortion_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) #define IDirectSoundFXDistortion_AddRef(p) IUnknown_AddRef(p) #define IDirectSoundFXDistortion_Release(p) IUnknown_Release(p) #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirectSoundFXDistortion_SetAllParameters(p,a) (p)->lpVtbl->SetAllParameters(p,a) #define IDirectSoundFXDistortion_GetAllParameters(p,a) (p)->lpVtbl->GetAllParameters(p,a) #else // !defined(__cplusplus) || defined(CINTERFACE) #define IDirectSoundFXDistortion_SetAllParameters(p,a) (p)->SetAllParameters(a) #define IDirectSoundFXDistortion_GetAllParameters(p,a) (p)->GetAllParameters(a) #endif // !defined(__cplusplus) || defined(CINTERFACE) // // IDirectSoundFXCompressor // DEFINE_GUID(IID_IDirectSoundFXCompressor, 0x4bbd1154, 0x62f6, 0x4e2c, 0xa1, 0x5c, 0xd3, 0xb6, 0xc4, 0x17, 0xf7, 0xa0); typedef struct _DSFXCompressor { FLOAT fGain; FLOAT fAttack; FLOAT fRelease; FLOAT fThreshold; FLOAT fRatio; FLOAT fPredelay; } DSFXCompressor, *LPDSFXCompressor; typedef const DSFXCompressor *LPCDSFXCompressor; #define DSFXCOMPRESSOR_GAIN_MIN -60.0f #define DSFXCOMPRESSOR_GAIN_MAX 60.0f #define DSFXCOMPRESSOR_ATTACK_MIN 0.01f #define DSFXCOMPRESSOR_ATTACK_MAX 500.0f #define DSFXCOMPRESSOR_RELEASE_MIN 50.0f #define DSFXCOMPRESSOR_RELEASE_MAX 3000.0f #define DSFXCOMPRESSOR_THRESHOLD_MIN -60.0f #define DSFXCOMPRESSOR_THRESHOLD_MAX 0.0f #define DSFXCOMPRESSOR_RATIO_MIN 1.0f #define DSFXCOMPRESSOR_RATIO_MAX 100.0f #define DSFXCOMPRESSOR_PREDELAY_MIN 0.0f #define DSFXCOMPRESSOR_PREDELAY_MAX 4.0f #undef INTERFACE #define INTERFACE IDirectSoundFXCompressor DECLARE_INTERFACE_(IDirectSoundFXCompressor, IUnknown) { // IUnknown methods STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // IDirectSoundFXCompressor methods STDMETHOD(SetAllParameters) (THIS_ LPCDSFXCompressor pcDsFxCompressor) PURE; STDMETHOD(GetAllParameters) (THIS_ LPDSFXCompressor pDsFxCompressor) PURE; }; #define IDirectSoundFXCompressor_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) #define IDirectSoundFXCompressor_AddRef(p) IUnknown_AddRef(p) #define IDirectSoundFXCompressor_Release(p) IUnknown_Release(p) #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirectSoundFXCompressor_SetAllParameters(p,a) (p)->lpVtbl->SetAllParameters(p,a) #define IDirectSoundFXCompressor_GetAllParameters(p,a) (p)->lpVtbl->GetAllParameters(p,a) #else // !defined(__cplusplus) || defined(CINTERFACE) #define IDirectSoundFXCompressor_SetAllParameters(p,a) (p)->SetAllParameters(a) #define IDirectSoundFXCompressor_GetAllParameters(p,a) (p)->GetAllParameters(a) #endif // !defined(__cplusplus) || defined(CINTERFACE) // // IDirectSoundFXParamEq // DEFINE_GUID(IID_IDirectSoundFXParamEq, 0xc03ca9fe, 0xfe90, 0x4204, 0x80, 0x78, 0x82, 0x33, 0x4c, 0xd1, 0x77, 0xda); typedef struct _DSFXParamEq { FLOAT fCenter; FLOAT fBandwidth; FLOAT fGain; } DSFXParamEq, *LPDSFXParamEq; typedef const DSFXParamEq *LPCDSFXParamEq; #define DSFXPARAMEQ_CENTER_MIN 80.0f #define DSFXPARAMEQ_CENTER_MAX 16000.0f #define DSFXPARAMEQ_BANDWIDTH_MIN 1.0f #define DSFXPARAMEQ_BANDWIDTH_MAX 36.0f #define DSFXPARAMEQ_GAIN_MIN -15.0f #define DSFXPARAMEQ_GAIN_MAX 15.0f #undef INTERFACE #define INTERFACE IDirectSoundFXParamEq DECLARE_INTERFACE_(IDirectSoundFXParamEq, IUnknown) { // IUnknown methods STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // IDirectSoundFXParamEq methods STDMETHOD(SetAllParameters) (THIS_ LPCDSFXParamEq pcDsFxParamEq) PURE; STDMETHOD(GetAllParameters) (THIS_ LPDSFXParamEq pDsFxParamEq) PURE; }; #define IDirectSoundFXParamEq_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) #define IDirectSoundFXParamEq_AddRef(p) IUnknown_AddRef(p) #define IDirectSoundFXParamEq_Release(p) IUnknown_Release(p) #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirectSoundFXParamEq_SetAllParameters(p,a) (p)->lpVtbl->SetAllParameters(p,a) #define IDirectSoundFXParamEq_GetAllParameters(p,a) (p)->lpVtbl->GetAllParameters(p,a) #else // !defined(__cplusplus) || defined(CINTERFACE) #define IDirectSoundFXParamEq_SetAllParameters(p,a) (p)->SetAllParameters(a) #define IDirectSoundFXParamEq_GetAllParameters(p,a) (p)->GetAllParameters(a) #endif // !defined(__cplusplus) || defined(CINTERFACE) // // IDirectSoundFXI3DL2Reverb // DEFINE_GUID(IID_IDirectSoundFXI3DL2Reverb, 0x4b166a6a, 0x0d66, 0x43f3, 0x80, 0xe3, 0xee, 0x62, 0x80, 0xde, 0xe1, 0xa4); typedef struct _DSFXI3DL2Reverb { LONG lRoom; // [-10000, 0] default: -1000 mB LONG lRoomHF; // [-10000, 0] default: 0 mB FLOAT flRoomRolloffFactor; // [0.0, 10.0] default: 0.0 FLOAT flDecayTime; // [0.1, 20.0] default: 1.49s FLOAT flDecayHFRatio; // [0.1, 2.0] default: 0.83 LONG lReflections; // [-10000, 1000] default: -2602 mB FLOAT flReflectionsDelay; // [0.0, 0.3] default: 0.007 s LONG lReverb; // [-10000, 2000] default: 200 mB FLOAT flReverbDelay; // [0.0, 0.1] default: 0.011 s FLOAT flDiffusion; // [0.0, 100.0] default: 100.0 % FLOAT flDensity; // [0.0, 100.0] default: 100.0 % FLOAT flHFReference; // [20.0, 20000.0] default: 5000.0 Hz } DSFXI3DL2Reverb, *LPDSFXI3DL2Reverb; typedef const DSFXI3DL2Reverb *LPCDSFXI3DL2Reverb; #define DSFX_I3DL2REVERB_ROOM_MIN (-10000) #define DSFX_I3DL2REVERB_ROOM_MAX 0 #define DSFX_I3DL2REVERB_ROOM_DEFAULT (-1000) #define DSFX_I3DL2REVERB_ROOMHF_MIN (-10000) #define DSFX_I3DL2REVERB_ROOMHF_MAX 0 #define DSFX_I3DL2REVERB_ROOMHF_DEFAULT (-100) #define DSFX_I3DL2REVERB_ROOMROLLOFFFACTOR_MIN 0.0f #define DSFX_I3DL2REVERB_ROOMROLLOFFFACTOR_MAX 10.0f #define DSFX_I3DL2REVERB_ROOMROLLOFFFACTOR_DEFAULT 0.0f #define DSFX_I3DL2REVERB_DECAYTIME_MIN 0.1f #define DSFX_I3DL2REVERB_DECAYTIME_MAX 20.0f #define DSFX_I3DL2REVERB_DECAYTIME_DEFAULT 1.49f #define DSFX_I3DL2REVERB_DECAYHFRATIO_MIN 0.1f #define DSFX_I3DL2REVERB_DECAYHFRATIO_MAX 2.0f #define DSFX_I3DL2REVERB_DECAYHFRATIO_DEFAULT 0.83f #define DSFX_I3DL2REVERB_REFLECTIONS_MIN (-10000) #define DSFX_I3DL2REVERB_REFLECTIONS_MAX 1000 #define DSFX_I3DL2REVERB_REFLECTIONS_DEFAULT (-2602) #define DSFX_I3DL2REVERB_REFLECTIONSDELAY_MIN 0.0f #define DSFX_I3DL2REVERB_REFLECTIONSDELAY_MAX 0.3f #define DSFX_I3DL2REVERB_REFLECTIONSDELAY_DEFAULT 0.007f #define DSFX_I3DL2REVERB_REVERB_MIN (-10000) #define DSFX_I3DL2REVERB_REVERB_MAX 2000 #define DSFX_I3DL2REVERB_REVERB_DEFAULT (200) #define DSFX_I3DL2REVERB_REVERBDELAY_MIN 0.0f #define DSFX_I3DL2REVERB_REVERBDELAY_MAX 0.1f #define DSFX_I3DL2REVERB_REVERBDELAY_DEFAULT 0.011f #define DSFX_I3DL2REVERB_DIFFUSION_MIN 0.0f #define DSFX_I3DL2REVERB_DIFFUSION_MAX 100.0f #define DSFX_I3DL2REVERB_DIFFUSION_DEFAULT 100.0f #define DSFX_I3DL2REVERB_DENSITY_MIN 0.0f #define DSFX_I3DL2REVERB_DENSITY_MAX 100.0f #define DSFX_I3DL2REVERB_DENSITY_DEFAULT 100.0f #define DSFX_I3DL2REVERB_HFREFERENCE_MIN 20.0f #define DSFX_I3DL2REVERB_HFREFERENCE_MAX 20000.0f #define DSFX_I3DL2REVERB_HFREFERENCE_DEFAULT 5000.0f #define DSFX_I3DL2REVERB_QUALITY_MIN 0 #define DSFX_I3DL2REVERB_QUALITY_MAX 3 #define DSFX_I3DL2REVERB_QUALITY_DEFAULT 2 #undef INTERFACE #define INTERFACE IDirectSoundFXI3DL2Reverb DECLARE_INTERFACE_(IDirectSoundFXI3DL2Reverb, IUnknown) { // IUnknown methods STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // IDirectSoundFXI3DL2Reverb methods STDMETHOD(SetAllParameters) (THIS_ LPCDSFXI3DL2Reverb pcDsFxI3DL2Reverb) PURE; STDMETHOD(GetAllParameters) (THIS_ LPDSFXI3DL2Reverb pDsFxI3DL2Reverb) PURE; STDMETHOD(SetPreset) (THIS_ DWORD dwPreset) PURE; STDMETHOD(GetPreset) (THIS_ LPDWORD pdwPreset) PURE; STDMETHOD(SetQuality) (THIS_ LONG lQuality) PURE; STDMETHOD(GetQuality) (THIS_ LONG *plQuality) PURE; }; #define IDirectSoundFXI3DL2Reverb_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) #define IDirectSoundFXI3DL2Reverb_AddRef(p) IUnknown_AddRef(p) #define IDirectSoundFXI3DL2Reverb_Release(p) IUnknown_Release(p) #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirectSoundFXI3DL2Reverb_SetAllParameters(p,a) (p)->lpVtbl->SetAllParameters(p,a) #define IDirectSoundFXI3DL2Reverb_GetAllParameters(p,a) (p)->lpVtbl->GetAllParameters(p,a) #define IDirectSoundFXI3DL2Reverb_SetPreset(p,a) (p)->lpVtbl->SetPreset(p,a) #define IDirectSoundFXI3DL2Reverb_GetPreset(p,a) (p)->lpVtbl->GetPreset(p,a) #else // !defined(__cplusplus) || defined(CINTERFACE) #define IDirectSoundFXI3DL2Reverb_SetAllParameters(p,a) (p)->SetAllParameters(a) #define IDirectSoundFXI3DL2Reverb_GetAllParameters(p,a) (p)->GetAllParameters(a) #define IDirectSoundFXI3DL2Reverb_SetPreset(p,a) (p)->SetPreset(a) #define IDirectSoundFXI3DL2Reverb_GetPreset(p,a) (p)->GetPreset(a) #endif // !defined(__cplusplus) || defined(CINTERFACE) // // IDirectSoundFXWavesReverb // DEFINE_GUID(IID_IDirectSoundFXWavesReverb,0x46858c3a,0x0dc6,0x45e3,0xb7,0x60,0xd4,0xee,0xf1,0x6c,0xb3,0x25); typedef struct _DSFXWavesReverb { FLOAT fInGain; // [-96.0,0.0] default: 0.0 dB FLOAT fReverbMix; // [-96.0,0.0] default: 0.0 db FLOAT fReverbTime; // [0.001,3000.0] default: 1000.0 ms FLOAT fHighFreqRTRatio; // [0.001,0.999] default: 0.001 } DSFXWavesReverb, *LPDSFXWavesReverb; typedef const DSFXWavesReverb *LPCDSFXWavesReverb; #define DSFX_WAVESREVERB_INGAIN_MIN -96.0f #define DSFX_WAVESREVERB_INGAIN_MAX 0.0f #define DSFX_WAVESREVERB_INGAIN_DEFAULT 0.0f #define DSFX_WAVESREVERB_REVERBMIX_MIN -96.0f #define DSFX_WAVESREVERB_REVERBMIX_MAX 0.0f #define DSFX_WAVESREVERB_REVERBMIX_DEFAULT 0.0f #define DSFX_WAVESREVERB_REVERBTIME_MIN 0.001f #define DSFX_WAVESREVERB_REVERBTIME_MAX 3000.0f #define DSFX_WAVESREVERB_REVERBTIME_DEFAULT 1000.0f #define DSFX_WAVESREVERB_HIGHFREQRTRATIO_MIN 0.001f #define DSFX_WAVESREVERB_HIGHFREQRTRATIO_MAX 0.999f #define DSFX_WAVESREVERB_HIGHFREQRTRATIO_DEFAULT 0.001f #undef INTERFACE #define INTERFACE IDirectSoundFXWavesReverb DECLARE_INTERFACE_(IDirectSoundFXWavesReverb, IUnknown) { // IUnknown methods STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // IDirectSoundFXWavesReverb methods STDMETHOD(SetAllParameters) (THIS_ LPCDSFXWavesReverb pcDsFxWavesReverb) PURE; STDMETHOD(GetAllParameters) (THIS_ LPDSFXWavesReverb pDsFxWavesReverb) PURE; }; #define IDirectSoundFXWavesReverb_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) #define IDirectSoundFXWavesReverb_AddRef(p) IUnknown_AddRef(p) #define IDirectSoundFXWavesReverb_Release(p) IUnknown_Release(p) #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirectSoundFXWavesReverb_SetAllParameters(p,a) (p)->lpVtbl->SetAllParameters(p,a) #define IDirectSoundFXWavesReverb_GetAllParameters(p,a) (p)->lpVtbl->GetAllParameters(p,a) #else // !defined(__cplusplus) || defined(CINTERFACE) #define IDirectSoundFXWavesReverb_SetAllParameters(p,a) (p)->SetAllParameters(a) #define IDirectSoundFXWavesReverb_GetAllParameters(p,a) (p)->GetAllParameters(a) #endif // !defined(__cplusplus) || defined(CINTERFACE) // // IDirectSoundCaptureFXAec // DEFINE_GUID(IID_IDirectSoundCaptureFXAec, 0xad74143d, 0x903d, 0x4ab7, 0x80, 0x66, 0x28, 0xd3, 0x63, 0x03, 0x6d, 0x65); typedef struct _DSCFXAec { BOOL fEnable; BOOL fNoiseFill; DWORD dwMode; } DSCFXAec, *LPDSCFXAec; typedef const DSCFXAec *LPCDSCFXAec; // These match the AEC_MODE_* constants in the DDK's ksmedia.h file #define DSCFX_AEC_MODE_PASS_THROUGH 0x0 #define DSCFX_AEC_MODE_HALF_DUPLEX 0x1 #define DSCFX_AEC_MODE_FULL_DUPLEX 0x2 // These match the AEC_STATUS_* constants in ksmedia.h #define DSCFX_AEC_STATUS_HISTORY_UNINITIALIZED 0x0 #define DSCFX_AEC_STATUS_HISTORY_CONTINUOUSLY_CONVERGED 0x1 #define DSCFX_AEC_STATUS_HISTORY_PREVIOUSLY_DIVERGED 0x2 #define DSCFX_AEC_STATUS_CURRENTLY_CONVERGED 0x8 #undef INTERFACE #define INTERFACE IDirectSoundCaptureFXAec DECLARE_INTERFACE_(IDirectSoundCaptureFXAec, IUnknown) { // IUnknown methods STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // IDirectSoundCaptureFXAec methods STDMETHOD(SetAllParameters) (THIS_ LPCDSCFXAec pDscFxAec) PURE; STDMETHOD(GetAllParameters) (THIS_ LPDSCFXAec pDscFxAec) PURE; STDMETHOD(GetStatus) (THIS_ PDWORD pdwStatus) PURE; STDMETHOD(Reset) (THIS) PURE; }; #define IDirectSoundCaptureFXAec_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) #define IDirectSoundCaptureFXAec_AddRef(p) IUnknown_AddRef(p) #define IDirectSoundCaptureFXAec_Release(p) IUnknown_Release(p) #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirectSoundCaptureFXAec_SetAllParameters(p,a) (p)->lpVtbl->SetAllParameters(p,a) #define IDirectSoundCaptureFXAec_GetAllParameters(p,a) (p)->lpVtbl->GetAllParameters(p,a) #else // !defined(__cplusplus) || defined(CINTERFACE) #define IDirectSoundCaptureFXAec_SetAllParameters(p,a) (p)->SetAllParameters(a) #define IDirectSoundCaptureFXAec_GetAllParameters(p,a) (p)->GetAllParameters(a) #endif // !defined(__cplusplus) || defined(CINTERFACE) // // IDirectSoundCaptureFXNoiseSuppress // DEFINE_GUID(IID_IDirectSoundCaptureFXNoiseSuppress, 0xed311e41, 0xfbae, 0x4175, 0x96, 0x25, 0xcd, 0x8, 0x54, 0xf6, 0x93, 0xca); typedef struct _DSCFXNoiseSuppress { BOOL fEnable; } DSCFXNoiseSuppress, *LPDSCFXNoiseSuppress; typedef const DSCFXNoiseSuppress *LPCDSCFXNoiseSuppress; #undef INTERFACE #define INTERFACE IDirectSoundCaptureFXNoiseSuppress DECLARE_INTERFACE_(IDirectSoundCaptureFXNoiseSuppress, IUnknown) { // IUnknown methods STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // IDirectSoundCaptureFXNoiseSuppress methods STDMETHOD(SetAllParameters) (THIS_ LPCDSCFXNoiseSuppress pcDscFxNoiseSuppress) PURE; STDMETHOD(GetAllParameters) (THIS_ LPDSCFXNoiseSuppress pDscFxNoiseSuppress) PURE; STDMETHOD(Reset) (THIS) PURE; }; #define IDirectSoundCaptureFXNoiseSuppress_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) #define IDirectSoundCaptureFXNoiseSuppress_AddRef(p) IUnknown_AddRef(p) #define IDirectSoundCaptureFXNoiseSuppress_Release(p) IUnknown_Release(p) #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirectSoundCaptureFXNoiseSuppress_SetAllParameters(p,a) (p)->lpVtbl->SetAllParameters(p,a) #define IDirectSoundCaptureFXNoiseSuppress_GetAllParameters(p,a) (p)->lpVtbl->GetAllParameters(p,a) #else // !defined(__cplusplus) || defined(CINTERFACE) #define IDirectSoundCaptureFXNoiseSuppress_SetAllParameters(p,a) (p)->SetAllParameters(a) #define IDirectSoundCaptureFXNoiseSuppress_GetAllParameters(p,a) (p)->GetAllParameters(a) #endif // !defined(__cplusplus) || defined(CINTERFACE) // // IDirectSoundFullDuplex // #ifndef _IDirectSoundFullDuplex_ #define _IDirectSoundFullDuplex_ #ifdef __cplusplus // 'struct' not 'class' per the way DECLARE_INTERFACE_ is defined struct IDirectSoundFullDuplex; #endif // __cplusplus typedef struct IDirectSoundFullDuplex *LPDIRECTSOUNDFULLDUPLEX; DEFINE_GUID(IID_IDirectSoundFullDuplex, 0xedcb4c7a, 0xdaab, 0x4216, 0xa4, 0x2e, 0x6c, 0x50, 0x59, 0x6d, 0xdc, 0x1d); #undef INTERFACE #define INTERFACE IDirectSoundFullDuplex DECLARE_INTERFACE_(IDirectSoundFullDuplex, IUnknown) { // IUnknown methods STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // IDirectSoundFullDuplex methods STDMETHOD(Initialize) (THIS_ LPCGUID pCaptureGuid, LPCGUID pRenderGuid, LPCDSCBUFFERDESC lpDscBufferDesc, LPCDSBUFFERDESC lpDsBufferDesc, HWND hWnd, DWORD dwLevel, LPLPDIRECTSOUNDCAPTUREBUFFER8 lplpDirectSoundCaptureBuffer8, LPLPDIRECTSOUNDBUFFER8 lplpDirectSoundBuffer8) PURE; }; #define IDirectSoundFullDuplex_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) #define IDirectSoundFullDuplex_AddRef(p) IUnknown_AddRef(p) #define IDirectSoundFullDuplex_Release(p) IUnknown_Release(p) #if !defined(__cplusplus) || defined(CINTERFACE) #define IDirectSoundFullDuplex_Initialize(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->Initialize(p,a,b,c,d,e,f,g,h) #else // !defined(__cplusplus) || defined(CINTERFACE) #define IDirectSoundFullDuplex_Initialize(p,a,b,c,d,e,f,g,h) (p)->Initialize(a,b,c,d,e,f,g,h) #endif // !defined(__cplusplus) || defined(CINTERFACE) #endif // _IDirectSoundFullDuplex_ #endif // DIRECTSOUND_VERSION >= 0x0800 // // Return Codes // // The function completed successfully #define DS_OK S_OK // The call succeeded, but we had to substitute the 3D algorithm #define DS_NO_VIRTUALIZATION MAKE_HRESULT(0, _FACDS, 10) // The call failed because resources (such as a priority level) // were already being used by another caller #define DSERR_ALLOCATED MAKE_DSHRESULT(10) // The control (vol, pan, etc.) requested by the caller is not available #define DSERR_CONTROLUNAVAIL MAKE_DSHRESULT(30) // An invalid parameter was passed to the returning function #define DSERR_INVALIDPARAM E_INVALIDARG // This call is not valid for the current state of this object #define DSERR_INVALIDCALL MAKE_DSHRESULT(50) // An undetermined error occurred inside the DirectSound subsystem #define DSERR_GENERIC E_FAIL // The caller does not have the priority level required for the function to // succeed #define DSERR_PRIOLEVELNEEDED MAKE_DSHRESULT(70) // Not enough free memory is available to complete the operation #define DSERR_OUTOFMEMORY E_OUTOFMEMORY // The specified WAVE format is not supported #define DSERR_BADFORMAT MAKE_DSHRESULT(100) // The function called is not supported at this time #define DSERR_UNSUPPORTED E_NOTIMPL // No sound driver is available for use #define DSERR_NODRIVER MAKE_DSHRESULT(120) // This object is already initialized #define DSERR_ALREADYINITIALIZED MAKE_DSHRESULT(130) // This object does not support aggregation #define DSERR_NOAGGREGATION CLASS_E_NOAGGREGATION // The buffer memory has been lost, and must be restored #define DSERR_BUFFERLOST MAKE_DSHRESULT(150) // Another app has a higher priority level, preventing this call from // succeeding #define DSERR_OTHERAPPHASPRIO MAKE_DSHRESULT(160) // This object has not been initialized #define DSERR_UNINITIALIZED MAKE_DSHRESULT(170) // The requested COM interface is not available #define DSERR_NOINTERFACE E_NOINTERFACE // Access is denied #define DSERR_ACCESSDENIED E_ACCESSDENIED // Tried to create a DSBCAPS_CTRLFX buffer shorter than DSBSIZE_FX_MIN milliseconds #define DSERR_BUFFERTOOSMALL MAKE_DSHRESULT(180) // Attempt to use DirectSound 8 functionality on an older DirectSound object #define DSERR_DS8_REQUIRED MAKE_DSHRESULT(190) // A circular loop of send effects was detected #define DSERR_SENDLOOP MAKE_DSHRESULT(200) // The GUID specified in an audiopath file does not match a valid MIXIN buffer #define DSERR_BADSENDBUFFERGUID MAKE_DSHRESULT(210) // The object requested was not found (numerically equal to DMUS_E_NOT_FOUND) #define DSERR_OBJECTNOTFOUND MAKE_DSHRESULT(4449) // The effects requested could not be found on the system, or they were found // but in the wrong order, or in the wrong hardware/software locations. #define DSERR_FXUNAVAILABLE MAKE_DSHRESULT(220) // // Flags // #define DSCAPS_PRIMARYMONO 0x00000001 #define DSCAPS_PRIMARYSTEREO 0x00000002 #define DSCAPS_PRIMARY8BIT 0x00000004 #define DSCAPS_PRIMARY16BIT 0x00000008 #define DSCAPS_CONTINUOUSRATE 0x00000010 #define DSCAPS_EMULDRIVER 0x00000020 #define DSCAPS_CERTIFIED 0x00000040 #define DSCAPS_SECONDARYMONO 0x00000100 #define DSCAPS_SECONDARYSTEREO 0x00000200 #define DSCAPS_SECONDARY8BIT 0x00000400 #define DSCAPS_SECONDARY16BIT 0x00000800 #define DSSCL_NORMAL 0x00000001 #define DSSCL_PRIORITY 0x00000002 #define DSSCL_EXCLUSIVE 0x00000003 #define DSSCL_WRITEPRIMARY 0x00000004 #define DSSPEAKER_DIRECTOUT 0x00000000 #define DSSPEAKER_HEADPHONE 0x00000001 #define DSSPEAKER_MONO 0x00000002 #define DSSPEAKER_QUAD 0x00000003 #define DSSPEAKER_STEREO 0x00000004 #define DSSPEAKER_SURROUND 0x00000005 #define DSSPEAKER_5POINT1 0x00000006 // obsolete 5.1 setting #define DSSPEAKER_7POINT1 0x00000007 // obsolete 7.1 setting #define DSSPEAKER_7POINT1_SURROUND 0x00000008 // correct 7.1 Home Theater setting #define DSSPEAKER_7POINT1_WIDE DSSPEAKER_7POINT1 #if (DIRECTSOUND_VERSION >= 0x1000) #define DSSPEAKER_5POINT1_SURROUND 0x00000009 // correct 5.1 setting #define DSSPEAKER_5POINT1_BACK DSSPEAKER_5POINT1 #endif #define DSSPEAKER_GEOMETRY_MIN 0x00000005 // 5 degrees #define DSSPEAKER_GEOMETRY_NARROW 0x0000000A // 10 degrees #define DSSPEAKER_GEOMETRY_WIDE 0x00000014 // 20 degrees #define DSSPEAKER_GEOMETRY_MAX 0x000000B4 // 180 degrees #define DSSPEAKER_COMBINED(c, g) ((DWORD)(((BYTE)(c)) | ((DWORD)((BYTE)(g))) << 16)) #define DSSPEAKER_CONFIG(a) ((BYTE)(a)) #define DSSPEAKER_GEOMETRY(a) ((BYTE)(((DWORD)(a) >> 16) & 0x00FF)) #define DSBCAPS_PRIMARYBUFFER 0x00000001 #define DSBCAPS_STATIC 0x00000002 #define DSBCAPS_LOCHARDWARE 0x00000004 #define DSBCAPS_LOCSOFTWARE 0x00000008 #define DSBCAPS_CTRL3D 0x00000010 #define DSBCAPS_CTRLFREQUENCY 0x00000020 #define DSBCAPS_CTRLPAN 0x00000040 #define DSBCAPS_CTRLVOLUME 0x00000080 #define DSBCAPS_CTRLPOSITIONNOTIFY 0x00000100 #define DSBCAPS_CTRLFX 0x00000200 #define DSBCAPS_STICKYFOCUS 0x00004000 #define DSBCAPS_GLOBALFOCUS 0x00008000 #define DSBCAPS_GETCURRENTPOSITION2 0x00010000 #define DSBCAPS_MUTE3DATMAXDISTANCE 0x00020000 #define DSBCAPS_LOCDEFER 0x00040000 #if (DIRECTSOUND_VERSION >= 0x1000) // Force GetCurrentPosition() to return a buffer's true play position; // unmodified by aids to enhance backward compatibility. #define DSBCAPS_TRUEPLAYPOSITION 0x00080000 #endif #define DSBPLAY_LOOPING 0x00000001 #define DSBPLAY_LOCHARDWARE 0x00000002 #define DSBPLAY_LOCSOFTWARE 0x00000004 #define DSBPLAY_TERMINATEBY_TIME 0x00000008 #define DSBPLAY_TERMINATEBY_DISTANCE 0x000000010 #define DSBPLAY_TERMINATEBY_PRIORITY 0x000000020 #define DSBSTATUS_PLAYING 0x00000001 #define DSBSTATUS_BUFFERLOST 0x00000002 #define DSBSTATUS_LOOPING 0x00000004 #define DSBSTATUS_LOCHARDWARE 0x00000008 #define DSBSTATUS_LOCSOFTWARE 0x00000010 #define DSBSTATUS_TERMINATED 0x00000020 #define DSBLOCK_FROMWRITECURSOR 0x00000001 #define DSBLOCK_ENTIREBUFFER 0x00000002 #define DSBFREQUENCY_ORIGINAL 0 #define DSBFREQUENCY_MIN 100 #if DIRECTSOUND_VERSION >= 0x0900 #define DSBFREQUENCY_MAX 200000 #else #define DSBFREQUENCY_MAX 100000 #endif #define DSBPAN_LEFT -10000 #define DSBPAN_CENTER 0 #define DSBPAN_RIGHT 10000 #define DSBVOLUME_MIN -10000 #define DSBVOLUME_MAX 0 #define DSBSIZE_MIN 4 #define DSBSIZE_MAX 0x0FFFFFFF #define DSBSIZE_FX_MIN 150 // NOTE: Milliseconds, not bytes #define DSBNOTIFICATIONS_MAX 100000UL #define DS3DMODE_NORMAL 0x00000000 #define DS3DMODE_HEADRELATIVE 0x00000001 #define DS3DMODE_DISABLE 0x00000002 #define DS3D_IMMEDIATE 0x00000000 #define DS3D_DEFERRED 0x00000001 #define DS3D_MINDISTANCEFACTOR FLT_MIN #define DS3D_MAXDISTANCEFACTOR FLT_MAX #define DS3D_DEFAULTDISTANCEFACTOR 1.0f #define DS3D_MINROLLOFFFACTOR 0.0f #define DS3D_MAXROLLOFFFACTOR 10.0f #define DS3D_DEFAULTROLLOFFFACTOR 1.0f #define DS3D_MINDOPPLERFACTOR 0.0f #define DS3D_MAXDOPPLERFACTOR 10.0f #define DS3D_DEFAULTDOPPLERFACTOR 1.0f #define DS3D_DEFAULTMINDISTANCE 1.0f #define DS3D_DEFAULTMAXDISTANCE 1000000000.0f #define DS3D_MINCONEANGLE 0 #define DS3D_MAXCONEANGLE 360 #define DS3D_DEFAULTCONEANGLE 360 #define DS3D_DEFAULTCONEOUTSIDEVOLUME DSBVOLUME_MAX // IDirectSoundCapture attributes #define DSCCAPS_EMULDRIVER DSCAPS_EMULDRIVER #define DSCCAPS_CERTIFIED DSCAPS_CERTIFIED #define DSCCAPS_MULTIPLECAPTURE 0x00000001 // IDirectSoundCaptureBuffer attributes #define DSCBCAPS_WAVEMAPPED 0x80000000 #if DIRECTSOUND_VERSION >= 0x0800 #define DSCBCAPS_CTRLFX 0x00000200 #endif #define DSCBLOCK_ENTIREBUFFER 0x00000001 #define DSCBSTATUS_CAPTURING 0x00000001 #define DSCBSTATUS_LOOPING 0x00000002 #define DSCBSTART_LOOPING 0x00000001 #define DSBPN_OFFSETSTOP 0xFFFFFFFF #define DS_CERTIFIED 0x00000000 #define DS_UNCERTIFIED 0x00000001 // // Flags for the I3DL2 effects // // // I3DL2 Material Presets // enum { DSFX_I3DL2_MATERIAL_PRESET_SINGLEWINDOW, DSFX_I3DL2_MATERIAL_PRESET_DOUBLEWINDOW, DSFX_I3DL2_MATERIAL_PRESET_THINDOOR, DSFX_I3DL2_MATERIAL_PRESET_THICKDOOR, DSFX_I3DL2_MATERIAL_PRESET_WOODWALL, DSFX_I3DL2_MATERIAL_PRESET_BRICKWALL, DSFX_I3DL2_MATERIAL_PRESET_STONEWALL, DSFX_I3DL2_MATERIAL_PRESET_CURTAIN }; #define I3DL2_MATERIAL_PRESET_SINGLEWINDOW -2800,0.71f #define I3DL2_MATERIAL_PRESET_DOUBLEWINDOW -5000,0.40f #define I3DL2_MATERIAL_PRESET_THINDOOR -1800,0.66f #define I3DL2_MATERIAL_PRESET_THICKDOOR -4400,0.64f #define I3DL2_MATERIAL_PRESET_WOODWALL -4000,0.50f #define I3DL2_MATERIAL_PRESET_BRICKWALL -5000,0.60f #define I3DL2_MATERIAL_PRESET_STONEWALL -6000,0.68f #define I3DL2_MATERIAL_PRESET_CURTAIN -1200,0.15f enum { DSFX_I3DL2_ENVIRONMENT_PRESET_DEFAULT, DSFX_I3DL2_ENVIRONMENT_PRESET_GENERIC, DSFX_I3DL2_ENVIRONMENT_PRESET_PADDEDCELL, DSFX_I3DL2_ENVIRONMENT_PRESET_ROOM, DSFX_I3DL2_ENVIRONMENT_PRESET_BATHROOM, DSFX_I3DL2_ENVIRONMENT_PRESET_LIVINGROOM, DSFX_I3DL2_ENVIRONMENT_PRESET_STONEROOM, DSFX_I3DL2_ENVIRONMENT_PRESET_AUDITORIUM, DSFX_I3DL2_ENVIRONMENT_PRESET_CONCERTHALL, DSFX_I3DL2_ENVIRONMENT_PRESET_CAVE, DSFX_I3DL2_ENVIRONMENT_PRESET_ARENA, DSFX_I3DL2_ENVIRONMENT_PRESET_HANGAR, DSFX_I3DL2_ENVIRONMENT_PRESET_CARPETEDHALLWAY, DSFX_I3DL2_ENVIRONMENT_PRESET_HALLWAY, DSFX_I3DL2_ENVIRONMENT_PRESET_STONECORRIDOR, DSFX_I3DL2_ENVIRONMENT_PRESET_ALLEY, DSFX_I3DL2_ENVIRONMENT_PRESET_FOREST, DSFX_I3DL2_ENVIRONMENT_PRESET_CITY, DSFX_I3DL2_ENVIRONMENT_PRESET_MOUNTAINS, DSFX_I3DL2_ENVIRONMENT_PRESET_QUARRY, DSFX_I3DL2_ENVIRONMENT_PRESET_PLAIN, DSFX_I3DL2_ENVIRONMENT_PRESET_PARKINGLOT, DSFX_I3DL2_ENVIRONMENT_PRESET_SEWERPIPE, DSFX_I3DL2_ENVIRONMENT_PRESET_UNDERWATER, DSFX_I3DL2_ENVIRONMENT_PRESET_SMALLROOM, DSFX_I3DL2_ENVIRONMENT_PRESET_MEDIUMROOM, DSFX_I3DL2_ENVIRONMENT_PRESET_LARGEROOM, DSFX_I3DL2_ENVIRONMENT_PRESET_MEDIUMHALL, DSFX_I3DL2_ENVIRONMENT_PRESET_LARGEHALL, DSFX_I3DL2_ENVIRONMENT_PRESET_PLATE }; // // I3DL2 Reverberation Presets Values // #define I3DL2_ENVIRONMENT_PRESET_DEFAULT -1000, -100, 0.0f, 1.49f, 0.83f, -2602, 0.007f, 200, 0.011f, 100.0f, 100.0f, 5000.0f #define I3DL2_ENVIRONMENT_PRESET_GENERIC -1000, -100, 0.0f, 1.49f, 0.83f, -2602, 0.007f, 200, 0.011f, 100.0f, 100.0f, 5000.0f #define I3DL2_ENVIRONMENT_PRESET_PADDEDCELL -1000,-6000, 0.0f, 0.17f, 0.10f, -1204, 0.001f, 207, 0.002f, 100.0f, 100.0f, 5000.0f #define I3DL2_ENVIRONMENT_PRESET_ROOM -1000, -454, 0.0f, 0.40f, 0.83f, -1646, 0.002f, 53, 0.003f, 100.0f, 100.0f, 5000.0f #define I3DL2_ENVIRONMENT_PRESET_BATHROOM -1000,-1200, 0.0f, 1.49f, 0.54f, -370, 0.007f, 1030, 0.011f, 100.0f, 60.0f, 5000.0f #define I3DL2_ENVIRONMENT_PRESET_LIVINGROOM -1000,-6000, 0.0f, 0.50f, 0.10f, -1376, 0.003f, -1104, 0.004f, 100.0f, 100.0f, 5000.0f #define I3DL2_ENVIRONMENT_PRESET_STONEROOM -1000, -300, 0.0f, 2.31f, 0.64f, -711, 0.012f, 83, 0.017f, 100.0f, 100.0f, 5000.0f #define I3DL2_ENVIRONMENT_PRESET_AUDITORIUM -1000, -476, 0.0f, 4.32f, 0.59f, -789, 0.020f, -289, 0.030f, 100.0f, 100.0f, 5000.0f #define I3DL2_ENVIRONMENT_PRESET_CONCERTHALL -1000, -500, 0.0f, 3.92f, 0.70f, -1230, 0.020f, -2, 0.029f, 100.0f, 100.0f, 5000.0f #define I3DL2_ENVIRONMENT_PRESET_CAVE -1000, 0, 0.0f, 2.91f, 1.30f, -602, 0.015f, -302, 0.022f, 100.0f, 100.0f, 5000.0f #define I3DL2_ENVIRONMENT_PRESET_ARENA -1000, -698, 0.0f, 7.24f, 0.33f, -1166, 0.020f, 16, 0.030f, 100.0f, 100.0f, 5000.0f #define I3DL2_ENVIRONMENT_PRESET_HANGAR -1000,-1000, 0.0f,10.05f, 0.23f, -602, 0.020f, 198, 0.030f, 100.0f, 100.0f, 5000.0f #define I3DL2_ENVIRONMENT_PRESET_CARPETEDHALLWAY -1000,-4000, 0.0f, 0.30f, 0.10f, -1831, 0.002f, -1630, 0.030f, 100.0f, 100.0f, 5000.0f #define I3DL2_ENVIRONMENT_PRESET_HALLWAY -1000, -300, 0.0f, 1.49f, 0.59f, -1219, 0.007f, 441, 0.011f, 100.0f, 100.0f, 5000.0f #define I3DL2_ENVIRONMENT_PRESET_STONECORRIDOR -1000, -237, 0.0f, 2.70f, 0.79f, -1214, 0.013f, 395, 0.020f, 100.0f, 100.0f, 5000.0f #define I3DL2_ENVIRONMENT_PRESET_ALLEY -1000, -270, 0.0f, 1.49f, 0.86f, -1204, 0.007f, -4, 0.011f, 100.0f, 100.0f, 5000.0f #define I3DL2_ENVIRONMENT_PRESET_FOREST -1000,-3300, 0.0f, 1.49f, 0.54f, -2560, 0.162f, -613, 0.088f, 79.0f, 100.0f, 5000.0f #define I3DL2_ENVIRONMENT_PRESET_CITY -1000, -800, 0.0f, 1.49f, 0.67f, -2273, 0.007f, -2217, 0.011f, 50.0f, 100.0f, 5000.0f #define I3DL2_ENVIRONMENT_PRESET_MOUNTAINS -1000,-2500, 0.0f, 1.49f, 0.21f, -2780, 0.300f, -2014, 0.100f, 27.0f, 100.0f, 5000.0f #define I3DL2_ENVIRONMENT_PRESET_QUARRY -1000,-1000, 0.0f, 1.49f, 0.83f,-10000, 0.061f, 500, 0.025f, 100.0f, 100.0f, 5000.0f #define I3DL2_ENVIRONMENT_PRESET_PLAIN -1000,-2000, 0.0f, 1.49f, 0.50f, -2466, 0.179f, -2514, 0.100f, 21.0f, 100.0f, 5000.0f #define I3DL2_ENVIRONMENT_PRESET_PARKINGLOT -1000, 0, 0.0f, 1.65f, 1.50f, -1363, 0.008f, -1153, 0.012f, 100.0f, 100.0f, 5000.0f #define I3DL2_ENVIRONMENT_PRESET_SEWERPIPE -1000,-1000, 0.0f, 2.81f, 0.14f, 429, 0.014f, 648, 0.021f, 80.0f, 60.0f, 5000.0f #define I3DL2_ENVIRONMENT_PRESET_UNDERWATER -1000,-4000, 0.0f, 1.49f, 0.10f, -449, 0.007f, 1700, 0.011f, 100.0f, 100.0f, 5000.0f // // Examples simulating 'musical' reverb presets // // Name Decay time Description // Small Room 1.1s A small size room with a length of 5m or so. // Medium Room 1.3s A medium size room with a length of 10m or so. // Large Room 1.5s A large size room suitable for live performances. // Medium Hall 1.8s A medium size concert hall. // Large Hall 1.8s A large size concert hall suitable for a full orchestra. // Plate 1.3s A plate reverb simulation. // #define I3DL2_ENVIRONMENT_PRESET_SMALLROOM -1000, -600, 0.0f, 1.10f, 0.83f, -400, 0.005f, 500, 0.010f, 100.0f, 100.0f, 5000.0f #define I3DL2_ENVIRONMENT_PRESET_MEDIUMROOM -1000, -600, 0.0f, 1.30f, 0.83f, -1000, 0.010f, -200, 0.020f, 100.0f, 100.0f, 5000.0f #define I3DL2_ENVIRONMENT_PRESET_LARGEROOM -1000, -600, 0.0f, 1.50f, 0.83f, -1600, 0.020f, -1000, 0.040f, 100.0f, 100.0f, 5000.0f #define I3DL2_ENVIRONMENT_PRESET_MEDIUMHALL -1000, -600, 0.0f, 1.80f, 0.70f, -1300, 0.015f, -800, 0.030f, 100.0f, 100.0f, 5000.0f #define I3DL2_ENVIRONMENT_PRESET_LARGEHALL -1000, -600, 0.0f, 1.80f, 0.70f, -2000, 0.030f, -1400, 0.060f, 100.0f, 100.0f, 5000.0f #define I3DL2_ENVIRONMENT_PRESET_PLATE -1000, -200, 0.0f, 1.30f, 0.90f, 0, 0.002f, 0, 0.010f, 100.0f, 75.0f, 5000.0f // // DirectSound3D Algorithms // // Default DirectSound3D algorithm {00000000-0000-0000-0000-000000000000} #define DS3DALG_DEFAULT GUID_NULL // No virtualization (Pan3D) {C241333F-1C1B-11d2-94F5-00C04FC28ACA} DEFINE_GUID(DS3DALG_NO_VIRTUALIZATION, 0xc241333f, 0x1c1b, 0x11d2, 0x94, 0xf5, 0x0, 0xc0, 0x4f, 0xc2, 0x8a, 0xca); // High-quality HRTF algorithm {C2413340-1C1B-11d2-94F5-00C04FC28ACA} DEFINE_GUID(DS3DALG_HRTF_FULL, 0xc2413340, 0x1c1b, 0x11d2, 0x94, 0xf5, 0x0, 0xc0, 0x4f, 0xc2, 0x8a, 0xca); // Lower-quality HRTF algorithm {C2413342-1C1B-11d2-94F5-00C04FC28ACA} DEFINE_GUID(DS3DALG_HRTF_LIGHT, 0xc2413342, 0x1c1b, 0x11d2, 0x94, 0xf5, 0x0, 0xc0, 0x4f, 0xc2, 0x8a, 0xca); #if DIRECTSOUND_VERSION >= 0x0800 // // DirectSound Internal Effect Algorithms // // Gargle {DAFD8210-5711-4B91-9FE3-F75B7AE279BF} DEFINE_GUID(GUID_DSFX_STANDARD_GARGLE, 0xdafd8210, 0x5711, 0x4b91, 0x9f, 0xe3, 0xf7, 0x5b, 0x7a, 0xe2, 0x79, 0xbf); // Chorus {EFE6629C-81F7-4281-BD91-C9D604A95AF6} DEFINE_GUID(GUID_DSFX_STANDARD_CHORUS, 0xefe6629c, 0x81f7, 0x4281, 0xbd, 0x91, 0xc9, 0xd6, 0x04, 0xa9, 0x5a, 0xf6); // Flanger {EFCA3D92-DFD8-4672-A603-7420894BAD98} DEFINE_GUID(GUID_DSFX_STANDARD_FLANGER, 0xefca3d92, 0xdfd8, 0x4672, 0xa6, 0x03, 0x74, 0x20, 0x89, 0x4b, 0xad, 0x98); // Echo/Delay {EF3E932C-D40B-4F51-8CCF-3F98F1B29D5D} DEFINE_GUID(GUID_DSFX_STANDARD_ECHO, 0xef3e932c, 0xd40b, 0x4f51, 0x8c, 0xcf, 0x3f, 0x98, 0xf1, 0xb2, 0x9d, 0x5d); // Distortion {EF114C90-CD1D-484E-96E5-09CFAF912A21} DEFINE_GUID(GUID_DSFX_STANDARD_DISTORTION, 0xef114c90, 0xcd1d, 0x484e, 0x96, 0xe5, 0x09, 0xcf, 0xaf, 0x91, 0x2a, 0x21); // Compressor/Limiter {EF011F79-4000-406D-87AF-BFFB3FC39D57} DEFINE_GUID(GUID_DSFX_STANDARD_COMPRESSOR, 0xef011f79, 0x4000, 0x406d, 0x87, 0xaf, 0xbf, 0xfb, 0x3f, 0xc3, 0x9d, 0x57); // Parametric Equalization {120CED89-3BF4-4173-A132-3CB406CF3231} DEFINE_GUID(GUID_DSFX_STANDARD_PARAMEQ, 0x120ced89, 0x3bf4, 0x4173, 0xa1, 0x32, 0x3c, 0xb4, 0x06, 0xcf, 0x32, 0x31); // I3DL2 Environmental Reverberation: Reverb (Listener) Effect {EF985E71-D5C7-42D4-BA4D-2D073E2E96F4} DEFINE_GUID(GUID_DSFX_STANDARD_I3DL2REVERB, 0xef985e71, 0xd5c7, 0x42d4, 0xba, 0x4d, 0x2d, 0x07, 0x3e, 0x2e, 0x96, 0xf4); // Waves Reverberation {87FC0268-9A55-4360-95AA-004A1D9DE26C} DEFINE_GUID(GUID_DSFX_WAVES_REVERB, 0x87fc0268, 0x9a55, 0x4360, 0x95, 0xaa, 0x00, 0x4a, 0x1d, 0x9d, 0xe2, 0x6c); // // DirectSound Capture Effect Algorithms // // Acoustic Echo Canceller {BF963D80-C559-11D0-8A2B-00A0C9255AC1} // Matches KSNODETYPE_ACOUSTIC_ECHO_CANCEL in ksmedia.h DEFINE_GUID(GUID_DSCFX_CLASS_AEC, 0xBF963D80L, 0xC559, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1); // Microsoft AEC {CDEBB919-379A-488a-8765-F53CFD36DE40} DEFINE_GUID(GUID_DSCFX_MS_AEC, 0xcdebb919, 0x379a, 0x488a, 0x87, 0x65, 0xf5, 0x3c, 0xfd, 0x36, 0xde, 0x40); // System AEC {1C22C56D-9879-4f5b-A389-27996DDC2810} DEFINE_GUID(GUID_DSCFX_SYSTEM_AEC, 0x1c22c56d, 0x9879, 0x4f5b, 0xa3, 0x89, 0x27, 0x99, 0x6d, 0xdc, 0x28, 0x10); // Noise Supression {E07F903F-62FD-4e60-8CDD-DEA7236665B5} // Matches KSNODETYPE_NOISE_SUPPRESS in post Windows ME DDK's ksmedia.h DEFINE_GUID(GUID_DSCFX_CLASS_NS, 0xe07f903f, 0x62fd, 0x4e60, 0x8c, 0xdd, 0xde, 0xa7, 0x23, 0x66, 0x65, 0xb5); // Microsoft Noise Suppresion {11C5C73B-66E9-4ba1-A0BA-E814C6EED92D} DEFINE_GUID(GUID_DSCFX_MS_NS, 0x11c5c73b, 0x66e9, 0x4ba1, 0xa0, 0xba, 0xe8, 0x14, 0xc6, 0xee, 0xd9, 0x2d); // System Noise Suppresion {5AB0882E-7274-4516-877D-4EEE99BA4FD0} DEFINE_GUID(GUID_DSCFX_SYSTEM_NS, 0x5ab0882e, 0x7274, 0x4516, 0x87, 0x7d, 0x4e, 0xee, 0x99, 0xba, 0x4f, 0xd0); #endif // DIRECTSOUND_VERSION >= 0x0800 #endif // __DSOUND_INCLUDED__ #ifdef __cplusplus }; #endif // __cplusplus ================================================ FILE: Include/dxdiag.h ================================================ /*==========================================================================; * * Copyright (C) Microsoft Corporation. All Rights Reserved. * * File: dxdiag.h * Content: DirectX Diagnostic Tool include file * ****************************************************************************/ #ifndef _DXDIAG_H_ #define _DXDIAG_H_ #include // for DECLARE_INTERFACE_ and HRESULT // This identifier is passed to IDxDiagProvider::Initialize in order to ensure that an // application was built against the correct header files. This number is // incremented whenever a header (or other) change would require applications // to be rebuilt. If the version doesn't match, IDxDiagProvider::Initialize will fail. // (The number itself has no meaning.) #define DXDIAG_DX9_SDK_VERSION 111 #ifdef __cplusplus extern "C" { #endif /**************************************************************************** * * DxDiag Errors * ****************************************************************************/ #define DXDIAG_E_INSUFFICIENT_BUFFER ((HRESULT)0x8007007AL) // HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER) /**************************************************************************** * * DxDiag CLSIDs * ****************************************************************************/ // {A65B8071-3BFE-4213-9A5B-491DA4461CA7} DEFINE_GUID(CLSID_DxDiagProvider, 0xA65B8071, 0x3BFE, 0x4213, 0x9A, 0x5B, 0x49, 0x1D, 0xA4, 0x46, 0x1C, 0xA7); /**************************************************************************** * * DxDiag Interface IIDs * ****************************************************************************/ // {9C6B4CB0-23F8-49CC-A3ED-45A55000A6D2} DEFINE_GUID(IID_IDxDiagProvider, 0x9C6B4CB0, 0x23F8, 0x49CC, 0xA3, 0xED, 0x45, 0xA5, 0x50, 0x00, 0xA6, 0xD2); // {0x7D0F462F-0x4064-0x4862-BC7F-933E5058C10F} DEFINE_GUID(IID_IDxDiagContainer, 0x7D0F462F, 0x4064, 0x4862, 0xBC, 0x7F, 0x93, 0x3E, 0x50, 0x58, 0xC1, 0x0F); /**************************************************************************** * * DxDiag Interface Pointer definitions * ****************************************************************************/ typedef struct IDxDiagProvider *LPDXDIAGPROVIDER, *PDXDIAGPROVIDER; typedef struct IDxDiagContainer *LPDXDIAGCONTAINER, *PDXDIAGCONTAINER; /**************************************************************************** * * DxDiag Structures * ****************************************************************************/ typedef struct _DXDIAG_INIT_PARAMS { DWORD dwSize; // Size of this structure. DWORD dwDxDiagHeaderVersion; // Pass in DXDIAG_DX9_SDK_VERSION. This verifies // the header and dll are correctly matched. BOOL bAllowWHQLChecks; // If true, allow dxdiag to check if drivers are // digital signed as logo'd by WHQL which may // connect via internet to update WHQL certificates. VOID* pReserved; // Reserved. Must be NULL. } DXDIAG_INIT_PARAMS; /**************************************************************************** * * DxDiag Application Interfaces * ****************************************************************************/ // // COM definition for IDxDiagProvider // #undef INTERFACE // External COM Implementation #define INTERFACE IDxDiagProvider DECLARE_INTERFACE_(IDxDiagProvider,IUnknown) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID *ppvObj) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; /*** IDxDiagProvider methods ***/ STDMETHOD(Initialize) (THIS_ DXDIAG_INIT_PARAMS* pParams) PURE; STDMETHOD(GetRootContainer) (THIS_ IDxDiagContainer **ppInstance) PURE; }; // // COM definition for IDxDiagContainer // #undef INTERFACE // External COM Implementation #define INTERFACE IDxDiagContainer DECLARE_INTERFACE_(IDxDiagContainer,IUnknown) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID *ppvObj) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; /*** IDxDiagContainer methods ***/ STDMETHOD(GetNumberOfChildContainers) (THIS_ DWORD *pdwCount) PURE; STDMETHOD(EnumChildContainerNames) (THIS_ DWORD dwIndex, LPWSTR pwszContainer, DWORD cchContainer) PURE; STDMETHOD(GetChildContainer) (THIS_ LPCWSTR pwszContainer, IDxDiagContainer **ppInstance) PURE; STDMETHOD(GetNumberOfProps) (THIS_ DWORD *pdwCount) PURE; STDMETHOD(EnumPropNames) (THIS_ DWORD dwIndex, LPWSTR pwszPropName, DWORD cchPropName) PURE; STDMETHOD(GetProp) (THIS_ LPCWSTR pwszPropName, VARIANT *pvarProp) PURE; }; /**************************************************************************** * * DxDiag application interface macros * ****************************************************************************/ #if !defined(__cplusplus) || defined(CINTERFACE) #define IDxDiagProvider_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDxDiagProvider_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDxDiagProvider_Release(p) (p)->lpVtbl->Release(p) #define IDxDiagProvider_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b) #define IDxDiagProvider_GetRootContainer(p,a) (p)->lpVtbl->GetRootContainer(p,a) #define IDxDiagContainer_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IDxDiagContainer_AddRef(p) (p)->lpVtbl->AddRef(p) #define IDxDiagContainer_Release(p) (p)->lpVtbl->Release(p) #define IDxDiagContainer_GetNumberOfChildContainers(p,a) (p)->lpVtbl->GetNumberOfChildContainers(p,a) #define IDxDiagContainer_EnumChildContainerNames(p,a,b,c) (p)->lpVtbl->EnumChildContainerNames(p,a,b,c) #define IDxDiagContainer_GetChildContainer(p,a,b) (p)->lpVtbl->GetChildContainer(p,a,b) #define IDxDiagContainer_GetNumberOfProps(p,a) (p)->lpVtbl->GetNumberOfProps(p,a) #define IDxDiagContainer_EnumProps(p,a,b) (p)->lpVtbl->EnumProps(p,a,b,c) #define IDxDiagContainer_GetProp(p,a,b) (p)->lpVtbl->GetProp(p,a,b) #else /* C++ */ #define IDxDiagProvider_QueryInterface(p,a,b) (p)->QueryInterface(p,a,b) #define IDxDiagProvider_AddRef(p) (p)->AddRef(p) #define IDxDiagProvider_Release(p) (p)->Release(p) #define IDxDiagProvider_Initialize(p,a,b) (p)->Initialize(p,a,b) #define IDxDiagProvider_GetRootContainer(p,a) (p)->GetRootContainer(p,a) #define IDxDiagContainer_QueryInterface(p,a,b) (p)->QueryInterface(p,a,b) #define IDxDiagContainer_AddRef(p) (p)->AddRef(p) #define IDxDiagContainer_Release(p) (p)->Release(p) #define IDxDiagContainer_GetNumberOfChildContainers(p,a) (p)->GetNumberOfChildContainers(p,a) #define IDxDiagContainer_EnumChildContainerNames(p,a,b,c) (p)->EnumChildContainerNames(p,a,b,c) #define IDxDiagContainer_GetChildContainer(p,a,b) (p)->GetChildContainer(p,a,b) #define IDxDiagContainer_GetNumberOfProps(p,a) (p)->GetNumberOfProps(p,a) #define IDxDiagContainer_EnumProps(p,a,b) (p)->EnumProps(p,a,b,c) #define IDxDiagContainer_GetProp(p,a,b) (p)->GetProp(p,a,b) #endif #ifdef __cplusplus } #endif #endif /* _DXDIAG_H_ */ ================================================ FILE: Include/dxwnd.h ================================================ #include //#include "dxwcore.hpp" #define DXW_IDLE 0 #define DXW_ACTIVE 1 #define DXW_RUNNING 2 #define MAXTARGETS 256 #define ONEPIXELFIX 1 #define HOOKDDRAWNONE 12 // first flags DWORD dwFlags1: #define UNNOTIFY 0x00000001 #define EMULATESURFACE 0x00000002 #define CLIPCURSOR 0x00000004 // Force cursor clipping within window #define NEEDADMINCAPS 0x00000008 // DxWnd needs administrator's privileges to hook this program #define HOOKDI 0x00000010 #define MODIFYMOUSE 0x00000020 #define HANDLEEXCEPTIONS 0x00000040 // Handles exceptions: Div by 0 .... #define SAVELOAD 0x00000080 #define EMULATEBUFFER 0x00000100 #define HOOKDI8 0x00000200 #define BLITFROMBACKBUFFER 0x00000400 #define SUPPRESSCLIPPING 0x00000800 #define AUTOREFRESH 0x00001000 #define FIXWINFRAME 0x00002000 #define HIDEHWCURSOR 0x00004000 #define SLOWDOWN 0x00008000 #define DISABLECLIPPING 0x00010000 #define LOCKWINSTYLE 0x00020000 #define MAPGDITOPRIMARY 0x00040000 #define FIXTEXTOUT 0x00080000 #define KEEPCURSORWITHIN 0x00100000 #define USERGB565 0x00200000 #define SUPPRESSDXERRORS 0x00400000 // suppresses some common dx errors (BUSY) #define PREVENTMAXIMIZE 0x00800000 // struggle to avoid window maximize #define LOCKEDSURFACE 0x01000000 // emulates the buffer of the primary surface when locked and written directly #define FIXPARENTWIN 0x02000000 // fixes parent window size & position #define SWITCHVIDEOMEMORY 0x04000000 // when VIDEO memory is over, switches to SYSTEM memory #define CLIENTREMAPPING 0x08000000 // hooks ClientToRect, RectToClient, GetClientRect, GetWinRect #define HANDLEALTF4 0x10000000 // forces quitting the program when receiving Alt-F4 key #define LOCKWINPOS 0x20000000 // prevent the program to change its own windows properties #define HOOKCHILDWIN 0x40000000 // hook CHILD windows to alter placement coordinates #define MESSAGEPROC 0x80000000 // process peek/get messages // second flags DWORD dxw.dwFlags2: #define RECOVERSCREENMODE 0x00000001 // actively set screen mode to initial state after hooking #define REFRESHONRESIZE 0x00000002 // forces a refresh (blitting from backbuffer to primary) upon win resize #define BACKBUFATTACH 0x00000004 // sets backbuf wxh dim. equal to primary surface so that ZBUFFER is attachable..... #define MODALSTYLE 0x00000008 // window with no borders #define KEEPASPECTRATIO 0x00000010 // when resizing, keep original aspect ratio #define INIT8BPP 0x00000020 // simulate a 8BPP initial desktop setting (in GetDeviceCaps API) #define FORCEWINRESIZE 0x00000040 // adds NCMOUSEUP/DOWN processing to the win procedure if missing #define INIT16BPP 0x00000080 // simulate a 16BPP initial desktop setting (in GetDeviceCaps API) #define KEEPCURSORFIXED 0x00000100 // inhibit SetCursorPos operation #define DISABLEGAMMARAMP 0x00000200 // let the application retrieve the desktop DC (for capability queries) #define INDEPENDENTREFRESH 0x00000400 // Makes automatic primary surface refresh but independently from the message loop processing #define FIXNCHITTEST 0x00000800 // fixes WM_NCHITTEST message X,Y coordinates #define LIMITFPS 0x00001000 // delays primary blit operations to limit FPS #define SKIPFPS 0x00002000 // skips primary blit operations up to limit #define SHOWFPS 0x00004000 // shows FPS value to status win / log / title bar #define HIDEMULTIMONITOR 0x00008000 // hide multimonitor configurations: GetAdapterCount returns 1. #define TIMESTRETCH 0x00010000 // make system time stretchable #define HOOKOPENGL 0x00020000 // Hook OpenGL calls #define LOCKEDSIZE 0x00040000 // window resizzing is not allowed #define SHOWHWCURSOR 0x00080000 // enable hardware cursor #define GDISTRETCHED 0x00100000 // Stretch GDI/user32 coordinates to adapt to window size #define SHOWFPSOVERLAY 0x00200000 // shows FPS value to status win / log / screen overlay #define FAKEVERSION 0x00400000 // pretends the platvorm is a given window version / subversion #define FULLRECTBLT 0x00800000 // blit to primary surface using NULL source & dest rect #define NOPALETTEUPDATE 0x01000000 // Do not refresh primary surface on palette updates #define SUPPRESSIME 0x02000000 // suppress IME #define NOBANNER 0x04000000 // suppress fancy logo & banneer effects #define WINDOWIZE 0x08000000 // Run in a Window (default TRUE) #define LIMITRESOURCES 0x10000000 // Limit resources to fit an old program's expectations #define STARTDEBUG 0x20000000 // Start in DEBUG mode #define SETCOMPATIBILITY 0x40000000 // invoke ddraw SetAppCompatData to set aero compatibility mode #define WIREFRAME 0x80000000 // forces wireframe display for D3D and Glide games // third flags DWORD dxw.dwFlags3: #define FORCEHOOKOPENGL 0x00000001 // loads OpenGL32.dll and hooks it #define MARKBLIT 0x00000002 // higlights the blit to primary surface operation by surroundig the rect in color #define HOOKDLLS 0x00000004 // Hook all DLLs referenced in PE #define SUPPRESSD3DEXT 0x00000008 // Disables extended d3d APIs for Vista/Win7/Win8 platforms #define HOOKENABLED 0x00000010 // Enables task hooking #define FIXD3DFRAME 0x00000020 // Preserve windows frame in D3D9 programs #define FORCE16BPP 0x00000040 // Forces 16BPP desktop color depth #define BLACKWHITE 0x00000080 // Simulate a B&W screen monitor mapping colors to grayscales #define MARKLOCK 0x00000100 // higlights the locked/unlocked surfaces by surroundig the rect in color #define SINGLEPROCAFFINITY 0x00000200 // Set Process Affinity to a single core #define EMULATEREGISTRY 0x00000400 // Emulate registry api to read extra keys #define CDROMDRIVETYPE 0x00000800 // Pretends that GetDriveType() always returns DRIVE_CDROM #define NOWINDOWMOVE 0x00001000 // Do not try to update window position & size on D3D rendering #define FORCECLIPPER 0x00002000 // Set ddraw clipping for real primary surface and primary window - but FastBlt cannot be used! #define LOCKSYSCOLORS 0x00004000 // Lock Sys Colors changes by SetSysColors() call #define GDIEMULATEDC 0x00008000 // Map GDI/user32 calls to primary to a memory surface to be stretch-blitted to the primary #define FULLSCREENONLY 0x00010000 // assume that the program is always in fullscreen mode #define FONTBYPASS 0x00020000 // bypass font unsupported API #define MINIMALCAPS 0x00040000 // Simulate minimal HW caps (copied from VMWare virtual screen) #define DEFAULTMESSAGES 0x00080000 // peocess offending messages that are typical of a window with default action #define BUFFEREDIOFIX 0x00100000 // fix buffered IO incompatibilities between pre-Win98 and post-WinNT #define FILTERMESSAGES 0x00200000 // ignore offending messages that are typical of a window and are hot handled by a fullscreeen app #define PEEKALLMESSAGES 0x00400000 // force Peek-ing all sort of messages to avoid Win7 message queue saturation that leads to program halt #define SURFACEWARN 0x00800000 // warn when a unclassified surface capability is met (debug only!) #define ANALYTICMODE 0x01000000 // activate analytic mode (debug only!) #define FORCESHEL 0x02000000 // Forces HEL (DDCREATE_EMULATIONONLY) #define CAPMASK 0x04000000 // Enable capability mask (according to ini file) #define COLORFIX 0x08000000 // Win7 color fix for 8bpp paletized modes #define NODDRAWBLT 0x10000000 // Suppress ddraw Blt to primary #define NODDRAWFLIP 0x20000000 // Suppress ddraw Flip to primary #define NOGDIBLT 0x40000000 // Suppress GDI Blt to video device #define NOPIXELFORMAT 0x80000000 // Don't fix the pixel format for plain surfaces // fourth flags DWORD dxw.dwFlags4: #define NOALPHACHANNEL 0x00000001 // By default, create surfaces with no DDPF_ALPHAPIXELS capability #define SUPPRESSCHILD 0x00000002 // suppress child process generation (CreateProcessA, ...?) #define FIXREFCOUNTER 0x00000004 // fixes the reference counter for the main directdraw session (the one connected to primary surfaces) #define SHOWTIMESTRETCH 0x00000008 // Shows time stretching multiplier on screen overlay #define ZBUFFERCLEAN 0x00000010 // Clean ZBUFFER upon (fix for "Star Wars Ep. I - Racer") #define ZBUFFER0CLEAN 0x00000020 // Clean ZBUFFER upon (fix for "Star Wars Ep. I - Racer") #define ZBUFFERALWAYS 0x00000040 // Forces ZBUFFER D3DCMP_ALWAYS condition to show all planes.... #define DISABLEFOGGING 0x00000080 // Disable D3D fogging #define NOPOWER2FIX 0x00000100 // Handle textures whose size is not a power of 2 (32, 64, 128 ...) #define NOPERFCOUNTER 0x00000200 // Disables the GetPerfCounter performance metrics API,as if it was not supported.... #define BILINEAR2XFILTER 0x00000400 // attempt to smooth low-res graphic by applying simplified bilinear filtering in emulation mode #define INTERCEPTRDTSC 0x00000800 // Intercapts RDTSC opcodes to hook at assembly level #define LIMITSCREENRES 0x00001000 // Limit available screen resolution up to defined maximum #define NOFILLRECT 0x00002000 // Suppress FillRect calls #define HOOKGLIDE 0x00004000 // Hook glide calls #define HIDEDESKTOP 0x00008000 // Hide desktop background #define STRETCHTIMERS 0x00010000 // Enables timers stretching when TIMESTRETCH is on #define NOFLIPEMULATION 0x00020000 // Compensate the effect of Flip-ping through Blt operations #define NOTEXTURES 0x00040000 // Disabled (whitened) textures #define RETURNNULLREF 0x00080000 // IDirectDraw::Release and IDDrawSurface::Release will always return 0 ref. counter #define FINETIMING 0x00100000 // Fine timeslider coarse, by 10% steps ranging from about :2 to x2 #define NATIVERES 0x00200000 // Supports hardware native resolutions (depending on your PC) #define SUPPORTSVGA 0x00400000 // Supports SVGA standard resolutions #define SUPPORTHDTV 0x00800000 // Supports HDTV standard resolutions #define RELEASEMOUSE 0x01000000 // GetCursorPos returns centered coordinates when the mouse cursor is moved outside the window #define ENABLETIMEFREEZE 0x02000000 // Enable Time Freeze functionality and toggle key #define HOTPATCH 0x04000000 // Use hot patching technique to handle obfuscated IAT #define ENABLEHOTKEYS 0x08000000 // Enables hot keys #define HOTPATCHALWAYS 0x10000000 // Force hot patching to every call #define NOD3DRESET 0x20000000 // Disables D3D8/9 D3DDevice::Reset method #define OVERRIDEREGISTRY 0x40000000 // same as EMULATEREGISTRY, but fake keys takeprecedence #define HIDECDROMEMPTY 0x80000000 // hide empty CDROM drivers // fifth flags DWORD dxw.dwFlags5: #define DIABLOTWEAK 0x00000001 // ... ??? ... #define CLEARTARGET 0x00000002 // forces a D3D clean on target surface upon each BeginScene invocation #define NOWINPOSCHANGES 0x00000004 // suppress WM_WINDOWPOSCHANGING/CHANGED messages (RollerCoaster Tycoon...) #define ANSIWIDE 0x00000008 // by default uses Widechar version of API intead od ANSI #define NOBLT 0x00000010 // suppress blit to primary surface #define USELASTCORE 0x00000020 // Same as single core process affinity, but using the last availabe core instead of first one #define DOFASTBLT 0x00000040 // use FastBlt to primary surface #define AEROBOOST 0x00000080 // Optimize for AERO environment: does all stretching in sysmemory surfaces #define QUARTERBLT 0x00000100 // Consider a screen update (to count or limit FPS) only blt operations bigger than a quarter of the whole primary surface #define NOIMAGEHLP 0x00000200 // Interceptd Imagehlp.dll unsupported calls (used by "the 5th element") #define BILINEARFILTER 0x00000400 // experimental bilinear filtering #define REPLACEPRIVOPS 0x00000800 // replace privileged opcodes, such as IN (Ubik) #define REMAPMCI 0x00001000 // remap MCI calls coordinates in mciSendString #define TEXTUREHIGHLIGHT 0x00002000 // highlight textures with random color & grid #define TEXTUREDUMP 0x00004000 // dump textures to file system as bmp files #define TEXTUREHACK 0x00008000 // load (replace) hacked textures from file system (bmp files) #define TEXTURETRANSP 0x00010000 // transparent textures (unimplemented) #define NORMALIZEPERFCOUNT 0x00020000 // Normalize Performance Counter to a Performance Frequency of 1MHz #define HYBRIDMODE 0x00040000 // ????? #define GDICOLORCONV 0x00080000 // do color conversion using GDI #define INJECTSON 0x00100000 // when starting a son process, inject dxwnd.dll at the beginning of execution #define ENABLESONHOOK 0x00200000 // forward hooking capability to son processes #define FREEZEINJECTEDSON 0x00400000 // BEWARE!!!! you must know what you're doing. Leaves the injected son in an endless loop #define GDIMODE 0x00800000 // Use GDI to both stretch and color conversion. It seems faster.... #define CENTERTOWIN 0x01000000 // do NOT stretch the image to the whole window client area, but center to it. #define STRESSRESOURCES 0x02000000 // simulates a lack of resources condition, for testing (debug opt.) #define MESSAGEPUMP 0x04000000 // inserts a "message pump" loop between repeated operation that may stop the task on Win7 and greater #define TEXTUREFORMAT 0x08000000 // Apply virtual pixel format to texture surfaces without DDSD_PIXELFORMAT attribute #define DEINTERLACE 0x10000000 // Deinterlace movies / screens that have black odd lines by interpolating even lines #define LOCKRESERVEDPALETTE 0x20000000 // lock the reserved palette entries (usually 20: 0-9 and 246-255) #define UNLOCKZORDER 0x40000000 // Inhibit attempts to keep the main win on top of ZORDER by stripping BringWindowToTop and SetForegroundWindow calls #define EASPORTSHACK 0X80000000 // Hack to intercept and neutralize some of the hooks set internally by EA Sports games // sixth flags DWORD dxw.dwFlags6: #define FORCESWAPEFFECT 0x00000001 // in D3D8/9, forces the SwapEffect value in CreateDevice/Reset operations #define LEGACYALLOC 0x00000002 // reserve legacy memory segments #define NODESTROYWINDOW 0x00000004 // suppress the main window destruction #define NOMOVIES 0x00000008 // suppress MCI Movies #define SUPPRESSRELEASE 0x00000010 // Avoid releasing critical emulated surfaces - the backbuffer #define FIXMOVIESCOLOR 0x00000020 // Fixes vfw movies color depth forcing the virtual value #define WOW64REGISTRY 0x00000040 // Sets KEY_WOW64_64KEY registry flag #define DISABLEMAXWINMODE 0x00000080 // invoke ddraw SetAppCompatData(12,0) to set DisableMaxWindowedMode #define FIXPITCH 0x00000100 // Fixes surface filling made with no concern to actual pitch value #define POWER2WIDTH 0x00000200 // Fixes ..... #define HIDETASKBAR 0x00000400 // Hides taskbar & start menu during game execution #define ACTIVATEAPP 0x00000800 // sends WM_ACTIVATEAPP message after every WM_WINPOSCHANGED message #define NOSYSMEMPRIMARY 0x00001000 // forces suppression of DDSCAPS_SYSTEMMEMORY capability on emulated primary surface #define NOSYSMEMBACKBUF 0x00002000 // forces suppression of DDSCAPS_SYSTEMMEMORY capability on emulated backbuffer surface #define CONFIRMONCLOSE 0x00004000 // on close button, ask the user before closing the window / terminating the program #define TERMINATEONCLOSE 0x00008000 // on WM_CLOSE message, also terminates the program #define FLIPEMULATION 0x00010000 // create virtual primary and backbuffer as un-attached surfaces and replace Flip with Blt #define SETZBUFFERBITDEPTHS 0x00020000 // when not set, set the legacy dwZBufferBitDepths field in the directdraw capability from GetCaps() #define SHAREDDC 0x00040000 // enable sharing window DC and primary surface DC #define WOW32REGISTRY 0x00080000 // Sets KEY_WOW32_64KEY registry flag #define STRETCHMOVIES 0x00100000 // Stretches ActiveMovie Windows to the whole window size #define BYPASSMCI 0x00200000 // bypass all MCI calls returning OK. #define FIXPIXELZOOM 0x00400000 #define REUSEEMULATEDDC 0x00800000 #define CREATEDESKTOP 0x01000000 // creates a virtual desktop window to replace the real one #define NOWINDOWHOOKS 0x02000000 // do not intercept window callback routines #define SYNCPALETTE 0x04000000 // Syncronize GDI to DDRAW palette #define VIRTUALJOYSTICK 0x08000000 // Enables the DxWnd virtual joystick #define UNACQUIRE 0x10000000 // Unacquire DirectInput devices when losing focus and acquire back when gaining focus #define HOOKGOGLIBS 0x20000000 // Hook additional libraries provided by GOG with different names but same functionalities as system ones #define BYPASSGOGLIBS 0x40000000 // Bypass GOG proxy system libraries loading directly the system libraries from the system folder #define EMULATERELMOUSE 0x80000000 // Emulates the dinput detection of relative mouse position by keeping the mouse at the center of window and looking for movements // seventh flags DWORD dxw.dwFlags7: #define LIMITDDRAW 0x00000001 // Limit the maximum available ddraw object version #define DISABLEDISABLEALTTAB 0x00000002 // Disables the compatibility patch that disables the Alt-Tab key and other special combinations #define FIXCLIPPERAREA 0x00000004 // fix clipper area in ddraw & GDI shared DC mode #define HOOKDIRECTSOUND 0x00000008 // Hook DirectSound dll #define HOOKSMACKW32 0x00000010 // hook Smackw32 functions #define BLOCKPRIORITYCLASS 0x00000020 // blocks attempts to change the process priority class #define CPUSLOWDOWN 0x00000040 // reduces CPU time dedicated to non time critical threads #define CPUMAXUSAGE 0x00000080 // reduces CPU time to non time critical threads that consume more than the given ratio #define NOWINERRORS 0x00000100 // suppress some possible window errors returning OK also in case of failure #define SUPPRESSOVERLAY 0x00000200 // Supress ddraw overlay capabilities (moto racer 2) #define INIT24BPP 0x00000400 // simulate a 24BPP initial desktop setting (in GetDeviceCaps API) #define INIT32BPP 0x00000800 // simulate a 24BPP initial desktop setting (in GetDeviceCaps API) #define FIXGLOBALUNLOCK 0x00001000 // Fix GlobalUnlock kernel32 API when it keeps returning the 1 retcode. #define SHOWHINTS 0x00002000 // show configuration hints at runtime #define SKIPDEVTYPEHID 0x00004000 // do not enumerate HID device types, some programs are not properly coded! #define INJECTSUSPENDED 0x00008000 // Inject the suspended process while running infinite loop ad starting address #define SUPPRESSDIERRORS 0x00010000 // Suppress DirectInput common errors #define HOOKNORUN 0x00020000 // Hook process but don't start it from DxWnd interface #define FIXBINDTEXTURE 0x00040000 // Fix the problems caused by the lack of glActiveTexture on some Windows OpenGL32.dll versions #define ENUM16BITMODES 0x00080000 // Enumerates 16 bit video modes when using DirectDraw8/9::EnumAdapterModes on a Win10 OS #define SHAREDKEYBOARD 0x00100000 // Forces DirectInput cooperative level to NONEXCLUSIVE mode for the keyboard #define HOOKNOUPDATE 0x00200000 // Updates the original addresses when changed #define HOOKGLUT32 0x00400000 // Hook glut32.dll opengl extension library #define INITIALRES 0x00800000 // Set initial screen resolution accorting to sizw x sizh fields #define MAXIMUMRES 0x01000000 // Set maximum screen resolution accorting to sizw x sizh fields #define LOCKCOLORDEPTH 0x02000000 // lock ddraw color depth to current desktop value (used in SetDisplayMode) #define FIXSMACKLOOP 0x04000000 // fix Smack loop by insert processmessage and blit between frames #define FIXFREELIBRARY 0x08000000 // fix FreeLibrary simulating retcode 0(error) when attempting free of unallocated module #define ANCHORED 0x10000000 // Anchored position & size, mo stretching or sliding is allowed #define CLEARTEXTUREFOURCC 0x20000000 // Clear DDSCAPS2_FOURCC bit and makes texture load without codec #define NODDEXCLUSIVEMODE 0x40000000 // Do not allow ddraw EXCLUSIVE mode also in non windowed mode #define COPYNOSHIMS 0x80000000 // Create a hiden and temporary copy of the target exe so that shims are not applied // eighth flags DWORD dxw.dwFlags8: #define FORCEWAIT 0x00000001 // Forces DDBLT/DDFLIP WAIT flags #define FORCENOWAIT 0x00000002 // Forces DDBLT/DDFLIP NOWAIT flags #define FORCEVSYNC 0x00000004 // Forces hardware VSync #define FORCENOVSYNC 0x00000008 // Forces NO hardware VSync #define VSYNCSCANLINE 0x00000010 // Activates WaitForVerticalBlank algorythm based on reaching a given scan line #define TRIMTEXTUREFORMATS 0x00000020 // Emulates "DirectXTrimTextureFormats" shim to fix textures in Heavy Gear II #define NOHALDEVICE 0x00000040 // Simulates a situation of lack of 3D hardware support, like in presence of remote desktop #define CLIPLOCKED 0x00000080 // never destroy cursor clipper on window move events .... #define PRETENDVISIBLE 0x00000100 // Pretend the main window is visible (IsWindowVisible) and on Z-order top (GetTopWindow) #define RAWFORMAT 0x00000200 // texture dump / hack are performed in raw format, compression / decompression to be made offline #define WININSULATION 0x00000400 // EnumerateWin finds no windows! #define FIXMOUSEHOOK 0x00000800 // fixes mouse coordinates retrieved through MouseProc routine associated to SetWindowsHook(WH_MOUSE,..) #define DDSFORMAT 0x00001000 // texture dump / hack are performed in MS DDS format #define HOOKWING32 0x00002000 // Hook WinG32.dll #define SEQUENCEDIAT 0x00004000 // IFT has sequential format, DLL entries before and API next #define D3D8BACK16 0x00008000 // D3D8 emulate 16 bpp backbuffer on a 32 bpp desktop (Win8-10 needed feature) #define MARKWING32 0x00010000 // Marks (highlights with colored frames) all WinG32 operations #define DYNAMICZCLEAN 0x00020000 // Performs ZBUFFER cleaning also every time the ZBUFFER is activated #define MARKGDI32 0x00040000 // Marks (highlights with colored frames) the main GDI32 operations #define DUMPDIBSECTION 0x00080000 // dumps DIBs to BMP files for debugging purposes #define DUMPDEVCONTEXT 0x00100000 // dumps source HDC to BMP files for debugging purposes #define QUALITYFONTS 0x00200000 // Forces adoption of high quality fonts (CLEARTYPE_NATURAL_QUALITY) #define ALLOWSYSMEMON3DDEV 0x00400000 // Suppress DDSCAPS_SYSTEMMEMORY option when DDSCAPS_3DDEVICE is set #define CLIPMENU 0x00800000 // Include window menu in mouse clipper area #define BACKGROUNDPRIORITY 0x01000000 // Lower process priority when in background state #define OFFSCREENZBUFFER 0x02000000 // Allow building plain surfaces and ZBuffer on offscreen videomemory surfaces #define VIRTUALHEAP 0x04000000 // Remap heap calls to C library memory allocation routines #define ZBUFFERHARDCLEAN 0x08000000 // Clean ZBUFFER the hard way (memset 0xFF on whole surface buffer ....) #define LOADLIBRARYERR 0x10000000 // When LoadLibrary* fail for missing file returns ... instead of .... #define SHAREDDCHYBRID 0x20000000 // Hybrid mode for shared dc GDI emulation - blits both on ddraw surface and window surface #define FIXADJUSTWINRECT 0x40000000 // Hybrid mode for shared dc GDI emulation - blits both on ddraw surface and window surface #define HOOKDLGWIN 0x80000000 // Hook dialog WindowProc // 9th flags DWORD dxw.dwFlags9: #define FIXTHINFRAME 0x00000001 // Fix window style like OVERLAPPEDWINDOW but with thin border // 10th flags DWORD dxw.dwFlags10: // logging Tflags DWORD: #define OUTTRACE 0x00000001 // enables tracing to dxwnd.log in general #define OUTDDRAWTRACE 0x00000002 // traces DxWnd directdraw screen handling #define OUTWINMESSAGES 0x00000004 // traces windows messages #define OUTCURSORTRACE 0x00000008 // traces cursor positions & operations #define OUTSEPARATED 0x00000010 // write the log on a separate file named dxwnd(n).log where n is the figure of first non-existent file //#define DXPROXED 0x00000020 // hook DX proxy methods to log each call in original behaviour #define ASSERTDIALOG 0x00000040 // show assert messages in Dialog Box #define OUTIMPORTTABLE 0x00000080 // dump import table contents #define OUTDEBUG 0x00000100 // detailed debugging information #define OUTREGISTRY 0x00000200 // log registry operations #define TRACEHOOKS 0x00000400 // log hook operations #define OUTD3DTRACE 0x00000800 // traces DxWnd direct3d screen handling #define OUTDXWINTRACE 0x00001000 // traces DxWnd internal operations #define OUTWINGTRACE 0x00002000 // traces WinG32 hooked calls #define OUTOGLTRACE 0x00004000 // traces OpenGL hooked calls #define OUTHEXTRACE 0x00008000 // traces hexdump of critical structures #define ADDRELATIVETIME 0x08000000 // log timestamp is relative to previous line //#define NOLOGCLOSE 0x10000000 // avoid closing the log file handle ("Riven, during CD changes ...) #define ADDTIMESTAMP 0x20000000 // add timestamp (GetTickCount) to log file #define OUTDEBUGSTRING 0x40000000 // duplicate logs through OutputDebugString() #define ERASELOGFILE 0x80000000 // clears old trace file before writing new logs #define EMULATEFLAGS (EMULATEBUFFER | EMULATESURFACE | LOCKEDSURFACE) #define HANDLEFPS (SHOWFPS | SHOWFPSOVERLAY | LIMITFPS | SKIPFPS) #define TEXTUREMASK (TEXTUREHIGHLIGHT|TEXTUREDUMP|TEXTUREHACK|TEXTURETRANSP) // DxWnd host app data to be passed to the hook callback typedef struct TARGETMAP { int index; char path[MAX_PATH+1]; char module[60+1]; char OpenGLLib[20+1]; int dxversion; int coordinates; int flags; int flags2; int flags3; int flags4; int flags5; int flags6; int flags7; int flags8; int flags9; int flags10; int tflags; // trace flags (cleared when exported/imported) int dflags; // debug flags (cleared when exported/imported) int monitorid; short posx; short posy; short sizx; short sizy; short resw; short resh; short MaxFPS; short InitTS; short FakeVersionId; short MaxScreenRes; short SwapEffect; short MaxDdrawInterface; short SlowRatio; short ScanLine; }TARGETMAP; // VJoyStatus flags #define VJOYPRESENT 0x00000001 // Virtual joystick configured for the program #define VJOYENABLED 0x00000002 // Virtual Joystick enabled and sending input coordinates #define CROSSENABLED 0x00000004 // Crossfire display enabled #define INVERTYAXIS 0x00000008 // Invert virtual joystick Y axis #define INVERTXAXIS 0x00000010 // Invert virtual joystick X axis #define B1AUTOFIRE 0x00000020 // Button 1 auto fire #define B2AUTOFIRE 0x00000040 // Button 2 auto fire #define VJAUTOCENTER 0x00000080 // auto-center feature #define VJKEYBOARDMAP 0x00000100 // mapvirtual joystick lever & buttons to keyboard #define VJMOUSEMAP 0x00000200 // mapvirtual joystick lever & buttons to mouse #define VJSENSIVITY 0x00000400 // tune sensibility through mouse wheel #define VJMOUSEWHEEL 0x00000800 // tune sensibility through mouse wheel typedef struct { short Status; short TaskIdx; short OrigIdx; short IsFullScreen; short Width, Height; short ColorDepth; DDPIXELFORMAT pfd; short DXVersion; HWND hWnd; DWORD dwPid; BOOL isLogging; DWORD FPSCount; int TimeShift; short CursorX, CursorY; PALETTEENTRY Palette[256]; BOOL AllowMultiTask; DWORD VJoyStatus; DWORD VJoySensivity; short joyposx; short joyposy; } DXWNDSTATUS; extern DXWNDSTATUS DxWndStatus; int SetTarget(DXWNDSTATUS *, TARGETMAP *); int StartHook(void); int EndHook(void); void GetDllVersion(char *); int GetHookStatus(DXWNDSTATUS *); DXWNDSTATUS *GetHookInfo(); void HookInit(TARGETMAP *, HWND); void ShowHint(int); LPCSTR GetFlagCaption(int, int); char *GetDxWndPath(); void *SetHook(void *, void *); void SetHook(void *, void *, void **, char *); void OutTrace(const char *, ...); void OutTraceHex(BYTE *, int); void *HookAPI(HMODULE, char *, void *, const char *, void *); void AdjustWindowFrame(HWND, DWORD, DWORD); char *hexdump(unsigned char *, int); void HexTrace(unsigned char *, int); LRESULT CALLBACK extWindowProc(HWND, UINT, WPARAM, LPARAM); LRESULT CALLBACK extChildWindowProc(HWND, UINT, WPARAM, LPARAM); LRESULT CALLBACK extDialogWindowProc(HWND, UINT, WPARAM, LPARAM); LRESULT CALLBACK dw_Hider_Message_Handler(HWND, UINT, WPARAM, LPARAM); // defines below to condition debug message handling #define OutTraceW if(dxw.dwTFlags & OUTWINMESSAGES) OutTrace //#define OutTraceX if(dxw.dwTFlags & OUTPROXYTRACE) OutTrace #define OutTraceDW if(dxw.dwTFlags & OUTDXWINTRACE) OutTrace #define OutTraceDDRAW if(dxw.dwTFlags & OUTDDRAWTRACE) OutTrace #define OutTraceD3D if(dxw.dwTFlags & OUTD3DTRACE) OutTrace #define OutTraceC if(dxw.dwTFlags & OUTCURSORTRACE) OutTrace #define OutTraceB if(dxw.dwTFlags & OUTDEBUG) OutTrace #define OutTraceR if(dxw.dwTFlags & OUTREGISTRY) OutTrace #define OutTraceH if(dxw.dwTFlags & TRACEHOOKS) OutTrace #define OutTraceP OutTrace #define OutTraceE OutTrace #define OutTraceWG if(dxw.dwTFlags & OUTWINGTRACE) OutTrace #define OutTraceOGL if(dxw.dwTFlags & OUTOGLTRACE) OutTrace #define OutHex if(dxw.dwTFlags & OUTHEXTRACE) OutTrace #define IsTraceW (dxw.dwTFlags & OUTWINMESSAGES) //#define IsTraceX (dxw.dwTFlags & OUTPROXYTRACE) #define IsTraceDW (dxw.dwTFlags & OUTDXWINTRACE) #define IsTraceDDRAW (dxw.dwTFlags & OUTDDRAWTRACE) #define IsTraceD3D (dxw.dwTFlags & OUTD3DTRACE) #define IsTraceC (dxw.dwTFlags & OUTCURSORTRACE) #define IsTraceR (dxw.dwTFlags & OUTREGISTRY) #define IsTraceH (dxw.dwTFlags & TRACEHOOKS) #define IsTraceP (TRUE) #define IsTraceE (TRUE) #define IsTraceWG (dxw.dwTFlags & OUTWINGTRACE) #define IsTraceOGL (dxw.dwTFlags & OUTOGLTRACE) #define IsTraceHex (dxw.dwTFlags & OUTHEXTRACE) #define IsDebug (dxw.dwTFlags & OUTDEBUG) #define IsAssertEnabled (dxw.dwTFlags & ASSERTDIALOG) #define STEP OutTrace("STEP at %s:%d\n", __FILE__, __LINE__) typedef enum { DXW_SET_COORDINATES = 0, DXW_DESKTOP_CENTER, DXW_DESKTOP_WORKAREA, DXW_DESKTOP_FULL } Coordinates_Types; typedef enum { DXW_NO_LIMIT = 0, DXW_LIMIT_320x200, DXW_LIMIT_400x300, DXW_LIMIT_640x480, DXW_LIMIT_800x600, DXW_LIMIT_1024x768, DXW_LIMIT_1280x960, DXW_LIMIT_1280x1024 } ResolutionLimits_Types; typedef enum { TIMER_TYPE_NONE = 0, TIMER_TYPE_USER32, TIMER_TYPE_WINMM } Timer_Types; typedef struct { int w; int h; } SupportedRes_Type; extern SupportedRes_Type SupportedSVGARes[]; extern SupportedRes_Type SupportedHDTVRes[]; extern int SupportedDepths[]; #define SUPPORTED_DEPTHS_NUMBER 4 ================================================ FILE: Include/gl/gl.h ================================================ /* * Mesa 3-D graphics library * Version: 4.0 * * Copyright (C) 1999-2001 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /************************************************************************ * 2002-Apr-22, Jos Fonseca: * Removed non Win32 system-specific stuff * * 2002-Apr-17, Marcus Geelnard: * For win32, OpenGL 1.2 & 1.3 definitions are not made in this file * anymore, since under Windows those are regarded as extensions, and * are better defined in glext.h (especially the function prototypes may * conflict with extension function pointers). A few "cosmetical" * changes were also made to this file. * * 2002-Apr-15, Marcus Geelnard: * Modified this file to better fit a wider range of compilers, removed * Mesa specific stuff, and removed extension definitions (this file now * relies on GL/glext.h). Hopefully this file should now function as a * generic OpenGL gl.h include file for most compilers and environments. * Changed GLAPIENTRY to APIENTRY (to be consistent with GL/glext.h). ************************************************************************/ #ifndef __gl_h_ #define __gl_h_ /************************************************************************ * Begin system-specific stuff. */ /* __WIN32__ */ #if !defined(__WIN32__) && (defined(_WIN32) || defined(WIN32) || defined(__CYGWIN__)) # define __WIN32__ #endif /* GLAPI, part 1 (use WINGDIAPI, if defined) */ #if defined(__WIN32__) && defined(WINGDIAPI) # define GLAPI WINGDIAPI #endif /* GLAPI, part 2 */ #if !defined(GLAPI) # if defined(_MSC_VER) /* Microsoft Visual C++ */ # define GLAPI __declspec(dllimport) # elif defined(__LCC__) && defined(__WIN32__) /* LCC-Win32 */ # define GLAPI __stdcall # else /* Others (e.g. MinGW, Cygwin, non-win32) */ # define GLAPI extern # endif #endif /* APIENTRY */ #if !defined(APIENTRY) # if defined(__WIN32__) # define APIENTRY __stdcall # else # define APIENTRY # endif #endif /* * End system-specific stuff. ************************************************************************/ #ifdef __cplusplus extern "C" { #endif #define GL_VERSION_1_1 1 #if !defined(__WIN32__) #define GL_VERSION_1_2 1 #define GL_VERSION_1_3 1 #define GL_ARB_imaging 1 #endif /* * * Datatypes * */ #ifdef CENTERLINE_CLPP #define signed #endif typedef unsigned int GLenum; typedef unsigned char GLboolean; typedef unsigned int GLbitfield; typedef void GLvoid; typedef signed char GLbyte; /* 1-byte signed */ typedef short GLshort; /* 2-byte signed */ typedef int GLint; /* 4-byte signed */ typedef unsigned char GLubyte; /* 1-byte unsigned */ typedef unsigned short GLushort; /* 2-byte unsigned */ typedef unsigned int GLuint; /* 4-byte unsigned */ typedef int GLsizei; /* 4-byte signed */ typedef float GLfloat; /* single precision float */ typedef float GLclampf; /* single precision float in [0,1] */ typedef double GLdouble; /* double precision float */ typedef double GLclampd; /* double precision float in [0,1] */ /************************************************************************ * * Constants * ************************************************************************/ /* Boolean values */ #define GL_FALSE 0x0 #define GL_TRUE 0x1 /* Data types */ #define GL_BYTE 0x1400 #define GL_UNSIGNED_BYTE 0x1401 #define GL_SHORT 0x1402 #define GL_UNSIGNED_SHORT 0x1403 #define GL_INT 0x1404 #define GL_UNSIGNED_INT 0x1405 #define GL_FLOAT 0x1406 #define GL_DOUBLE 0x140A #define GL_2_BYTES 0x1407 #define GL_3_BYTES 0x1408 #define GL_4_BYTES 0x1409 /* Primitives */ #define GL_POINTS 0x0000 #define GL_LINES 0x0001 #define GL_LINE_LOOP 0x0002 #define GL_LINE_STRIP 0x0003 #define GL_TRIANGLES 0x0004 #define GL_TRIANGLE_STRIP 0x0005 #define GL_TRIANGLE_FAN 0x0006 #define GL_QUADS 0x0007 #define GL_QUAD_STRIP 0x0008 #define GL_POLYGON 0x0009 /* Vertex Arrays */ #define GL_VERTEX_ARRAY 0x8074 #define GL_NORMAL_ARRAY 0x8075 #define GL_COLOR_ARRAY 0x8076 #define GL_INDEX_ARRAY 0x8077 #define GL_TEXTURE_COORD_ARRAY 0x8078 #define GL_EDGE_FLAG_ARRAY 0x8079 #define GL_VERTEX_ARRAY_SIZE 0x807A #define GL_VERTEX_ARRAY_TYPE 0x807B #define GL_VERTEX_ARRAY_STRIDE 0x807C #define GL_NORMAL_ARRAY_TYPE 0x807E #define GL_NORMAL_ARRAY_STRIDE 0x807F #define GL_COLOR_ARRAY_SIZE 0x8081 #define GL_COLOR_ARRAY_TYPE 0x8082 #define GL_COLOR_ARRAY_STRIDE 0x8083 #define GL_INDEX_ARRAY_TYPE 0x8085 #define GL_INDEX_ARRAY_STRIDE 0x8086 #define GL_TEXTURE_COORD_ARRAY_SIZE 0x8088 #define GL_TEXTURE_COORD_ARRAY_TYPE 0x8089 #define GL_TEXTURE_COORD_ARRAY_STRIDE 0x808A #define GL_EDGE_FLAG_ARRAY_STRIDE 0x808C #define GL_VERTEX_ARRAY_POINTER 0x808E #define GL_NORMAL_ARRAY_POINTER 0x808F #define GL_COLOR_ARRAY_POINTER 0x8090 #define GL_INDEX_ARRAY_POINTER 0x8091 #define GL_TEXTURE_COORD_ARRAY_POINTER 0x8092 #define GL_EDGE_FLAG_ARRAY_POINTER 0x8093 #define GL_V2F 0x2A20 #define GL_V3F 0x2A21 #define GL_C4UB_V2F 0x2A22 #define GL_C4UB_V3F 0x2A23 #define GL_C3F_V3F 0x2A24 #define GL_N3F_V3F 0x2A25 #define GL_C4F_N3F_V3F 0x2A26 #define GL_T2F_V3F 0x2A27 #define GL_T4F_V4F 0x2A28 #define GL_T2F_C4UB_V3F 0x2A29 #define GL_T2F_C3F_V3F 0x2A2A #define GL_T2F_N3F_V3F 0x2A2B #define GL_T2F_C4F_N3F_V3F 0x2A2C #define GL_T4F_C4F_N3F_V4F 0x2A2D /* Matrix Mode */ #define GL_MATRIX_MODE 0x0BA0 #define GL_MODELVIEW 0x1700 #define GL_PROJECTION 0x1701 #define GL_TEXTURE 0x1702 /* Points */ #define GL_POINT_SMOOTH 0x0B10 #define GL_POINT_SIZE 0x0B11 #define GL_POINT_SIZE_GRANULARITY 0x0B13 #define GL_POINT_SIZE_RANGE 0x0B12 /* Lines */ #define GL_LINE_SMOOTH 0x0B20 #define GL_LINE_STIPPLE 0x0B24 #define GL_LINE_STIPPLE_PATTERN 0x0B25 #define GL_LINE_STIPPLE_REPEAT 0x0B26 #define GL_LINE_WIDTH 0x0B21 #define GL_LINE_WIDTH_GRANULARITY 0x0B23 #define GL_LINE_WIDTH_RANGE 0x0B22 /* Polygons */ #define GL_POINT 0x1B00 #define GL_LINE 0x1B01 #define GL_FILL 0x1B02 #define GL_CW 0x0900 #define GL_CCW 0x0901 #define GL_FRONT 0x0404 #define GL_BACK 0x0405 #define GL_POLYGON_MODE 0x0B40 #define GL_POLYGON_SMOOTH 0x0B41 #define GL_POLYGON_STIPPLE 0x0B42 #define GL_EDGE_FLAG 0x0B43 #define GL_CULL_FACE 0x0B44 #define GL_CULL_FACE_MODE 0x0B45 #define GL_FRONT_FACE 0x0B46 #define GL_POLYGON_OFFSET_FACTOR 0x8038 #define GL_POLYGON_OFFSET_UNITS 0x2A00 #define GL_POLYGON_OFFSET_POINT 0x2A01 #define GL_POLYGON_OFFSET_LINE 0x2A02 #define GL_POLYGON_OFFSET_FILL 0x8037 /* Display Lists */ #define GL_COMPILE 0x1300 #define GL_COMPILE_AND_EXECUTE 0x1301 #define GL_LIST_BASE 0x0B32 #define GL_LIST_INDEX 0x0B33 #define GL_LIST_MODE 0x0B30 /* Depth buffer */ #define GL_NEVER 0x0200 #define GL_LESS 0x0201 #define GL_EQUAL 0x0202 #define GL_LEQUAL 0x0203 #define GL_GREATER 0x0204 #define GL_NOTEQUAL 0x0205 #define GL_GEQUAL 0x0206 #define GL_ALWAYS 0x0207 #define GL_DEPTH_TEST 0x0B71 #define GL_DEPTH_BITS 0x0D56 #define GL_DEPTH_CLEAR_VALUE 0x0B73 #define GL_DEPTH_FUNC 0x0B74 #define GL_DEPTH_RANGE 0x0B70 #define GL_DEPTH_WRITEMASK 0x0B72 #define GL_DEPTH_COMPONENT 0x1902 /* Lighting */ #define GL_LIGHTING 0x0B50 #define GL_LIGHT0 0x4000 #define GL_LIGHT1 0x4001 #define GL_LIGHT2 0x4002 #define GL_LIGHT3 0x4003 #define GL_LIGHT4 0x4004 #define GL_LIGHT5 0x4005 #define GL_LIGHT6 0x4006 #define GL_LIGHT7 0x4007 #define GL_SPOT_EXPONENT 0x1205 #define GL_SPOT_CUTOFF 0x1206 #define GL_CONSTANT_ATTENUATION 0x1207 #define GL_LINEAR_ATTENUATION 0x1208 #define GL_QUADRATIC_ATTENUATION 0x1209 #define GL_AMBIENT 0x1200 #define GL_DIFFUSE 0x1201 #define GL_SPECULAR 0x1202 #define GL_SHININESS 0x1601 #define GL_EMISSION 0x1600 #define GL_POSITION 0x1203 #define GL_SPOT_DIRECTION 0x1204 #define GL_AMBIENT_AND_DIFFUSE 0x1602 #define GL_COLOR_INDEXES 0x1603 #define GL_LIGHT_MODEL_TWO_SIDE 0x0B52 #define GL_LIGHT_MODEL_LOCAL_VIEWER 0x0B51 #define GL_LIGHT_MODEL_AMBIENT 0x0B53 #define GL_FRONT_AND_BACK 0x0408 #define GL_SHADE_MODEL 0x0B54 #define GL_FLAT 0x1D00 #define GL_SMOOTH 0x1D01 #define GL_COLOR_MATERIAL 0x0B57 #define GL_COLOR_MATERIAL_FACE 0x0B55 #define GL_COLOR_MATERIAL_PARAMETER 0x0B56 #define GL_NORMALIZE 0x0BA1 /* User clipping planes */ #define GL_CLIP_PLANE0 0x3000 #define GL_CLIP_PLANE1 0x3001 #define GL_CLIP_PLANE2 0x3002 #define GL_CLIP_PLANE3 0x3003 #define GL_CLIP_PLANE4 0x3004 #define GL_CLIP_PLANE5 0x3005 /* Accumulation buffer */ #define GL_ACCUM_RED_BITS 0x0D58 #define GL_ACCUM_GREEN_BITS 0x0D59 #define GL_ACCUM_BLUE_BITS 0x0D5A #define GL_ACCUM_ALPHA_BITS 0x0D5B #define GL_ACCUM_CLEAR_VALUE 0x0B80 #define GL_ACCUM 0x0100 #define GL_ADD 0x0104 #define GL_LOAD 0x0101 #define GL_MULT 0x0103 #define GL_RETURN 0x0102 /* Alpha testing */ #define GL_ALPHA_TEST 0x0BC0 #define GL_ALPHA_TEST_REF 0x0BC2 #define GL_ALPHA_TEST_FUNC 0x0BC1 /* Blending */ #define GL_BLEND 0x0BE2 #define GL_BLEND_SRC 0x0BE1 #define GL_BLEND_DST 0x0BE0 #define GL_ZERO 0x0 #define GL_ONE 0x1 #define GL_SRC_COLOR 0x0300 #define GL_ONE_MINUS_SRC_COLOR 0x0301 #define GL_SRC_ALPHA 0x0302 #define GL_ONE_MINUS_SRC_ALPHA 0x0303 #define GL_DST_ALPHA 0x0304 #define GL_ONE_MINUS_DST_ALPHA 0x0305 #define GL_DST_COLOR 0x0306 #define GL_ONE_MINUS_DST_COLOR 0x0307 #define GL_SRC_ALPHA_SATURATE 0x0308 #define GL_CONSTANT_COLOR 0x8001 #define GL_ONE_MINUS_CONSTANT_COLOR 0x8002 #define GL_CONSTANT_ALPHA 0x8003 #define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 /* Render Mode */ #define GL_FEEDBACK 0x1C01 #define GL_RENDER 0x1C00 #define GL_SELECT 0x1C02 /* Feedback */ #define GL_2D 0x0600 #define GL_3D 0x0601 #define GL_3D_COLOR 0x0602 #define GL_3D_COLOR_TEXTURE 0x0603 #define GL_4D_COLOR_TEXTURE 0x0604 #define GL_POINT_TOKEN 0x0701 #define GL_LINE_TOKEN 0x0702 #define GL_LINE_RESET_TOKEN 0x0707 #define GL_POLYGON_TOKEN 0x0703 #define GL_BITMAP_TOKEN 0x0704 #define GL_DRAW_PIXEL_TOKEN 0x0705 #define GL_COPY_PIXEL_TOKEN 0x0706 #define GL_PASS_THROUGH_TOKEN 0x0700 #define GL_FEEDBACK_BUFFER_POINTER 0x0DF0 #define GL_FEEDBACK_BUFFER_SIZE 0x0DF1 #define GL_FEEDBACK_BUFFER_TYPE 0x0DF2 /* Selection */ #define GL_SELECTION_BUFFER_POINTER 0x0DF3 #define GL_SELECTION_BUFFER_SIZE 0x0DF4 /* Fog */ #define GL_FOG 0x0B60 #define GL_FOG_MODE 0x0B65 #define GL_FOG_DENSITY 0x0B62 #define GL_FOG_COLOR 0x0B66 #define GL_FOG_INDEX 0x0B61 #define GL_FOG_START 0x0B63 #define GL_FOG_END 0x0B64 #define GL_LINEAR 0x2601 #define GL_EXP 0x0800 #define GL_EXP2 0x0801 /* Logic Ops */ #define GL_LOGIC_OP 0x0BF1 #define GL_INDEX_LOGIC_OP 0x0BF1 #define GL_COLOR_LOGIC_OP 0x0BF2 #define GL_LOGIC_OP_MODE 0x0BF0 #define GL_CLEAR 0x1500 #define GL_SET 0x150F #define GL_COPY 0x1503 #define GL_COPY_INVERTED 0x150C #define GL_NOOP 0x1505 #define GL_INVERT 0x150A #define GL_AND 0x1501 #define GL_NAND 0x150E #define GL_OR 0x1507 #define GL_NOR 0x1508 #define GL_XOR 0x1506 #define GL_EQUIV 0x1509 #define GL_AND_REVERSE 0x1502 #define GL_AND_INVERTED 0x1504 #define GL_OR_REVERSE 0x150B #define GL_OR_INVERTED 0x150D /* Stencil */ #define GL_STENCIL_TEST 0x0B90 #define GL_STENCIL_WRITEMASK 0x0B98 #define GL_STENCIL_BITS 0x0D57 #define GL_STENCIL_FUNC 0x0B92 #define GL_STENCIL_VALUE_MASK 0x0B93 #define GL_STENCIL_REF 0x0B97 #define GL_STENCIL_FAIL 0x0B94 #define GL_STENCIL_PASS_DEPTH_PASS 0x0B96 #define GL_STENCIL_PASS_DEPTH_FAIL 0x0B95 #define GL_STENCIL_CLEAR_VALUE 0x0B91 #define GL_STENCIL_INDEX 0x1901 #define GL_KEEP 0x1E00 #define GL_REPLACE 0x1E01 #define GL_INCR 0x1E02 #define GL_DECR 0x1E03 /* Buffers, Pixel Drawing/Reading */ #define GL_NONE 0x0 #define GL_LEFT 0x0406 #define GL_RIGHT 0x0407 /*GL_FRONT 0x0404 */ /*GL_BACK 0x0405 */ /*GL_FRONT_AND_BACK 0x0408 */ #define GL_FRONT_LEFT 0x0400 #define GL_FRONT_RIGHT 0x0401 #define GL_BACK_LEFT 0x0402 #define GL_BACK_RIGHT 0x0403 #define GL_AUX0 0x0409 #define GL_AUX1 0x040A #define GL_AUX2 0x040B #define GL_AUX3 0x040C #define GL_COLOR_INDEX 0x1900 #define GL_RED 0x1903 #define GL_GREEN 0x1904 #define GL_BLUE 0x1905 #define GL_ALPHA 0x1906 #define GL_LUMINANCE 0x1909 #define GL_LUMINANCE_ALPHA 0x190A #define GL_ALPHA_BITS 0x0D55 #define GL_RED_BITS 0x0D52 #define GL_GREEN_BITS 0x0D53 #define GL_BLUE_BITS 0x0D54 #define GL_INDEX_BITS 0x0D51 #define GL_SUBPIXEL_BITS 0x0D50 #define GL_AUX_BUFFERS 0x0C00 #define GL_READ_BUFFER 0x0C02 #define GL_DRAW_BUFFER 0x0C01 #define GL_DOUBLEBUFFER 0x0C32 #define GL_STEREO 0x0C33 #define GL_BITMAP 0x1A00 #define GL_COLOR 0x1800 #define GL_DEPTH 0x1801 #define GL_STENCIL 0x1802 #define GL_DITHER 0x0BD0 #define GL_RGB 0x1907 #define GL_RGBA 0x1908 /* Implementation limits */ #define GL_MAX_LIST_NESTING 0x0B31 #define GL_MAX_ATTRIB_STACK_DEPTH 0x0D35 #define GL_MAX_MODELVIEW_STACK_DEPTH 0x0D36 #define GL_MAX_NAME_STACK_DEPTH 0x0D37 #define GL_MAX_PROJECTION_STACK_DEPTH 0x0D38 #define GL_MAX_TEXTURE_STACK_DEPTH 0x0D39 #define GL_MAX_EVAL_ORDER 0x0D30 #define GL_MAX_LIGHTS 0x0D31 #define GL_MAX_CLIP_PLANES 0x0D32 #define GL_MAX_TEXTURE_SIZE 0x0D33 #define GL_MAX_PIXEL_MAP_TABLE 0x0D34 #define GL_MAX_VIEWPORT_DIMS 0x0D3A #define GL_MAX_CLIENT_ATTRIB_STACK_DEPTH 0x0D3B /* Gets */ #define GL_ATTRIB_STACK_DEPTH 0x0BB0 #define GL_CLIENT_ATTRIB_STACK_DEPTH 0x0BB1 #define GL_COLOR_CLEAR_VALUE 0x0C22 #define GL_COLOR_WRITEMASK 0x0C23 #define GL_CURRENT_INDEX 0x0B01 #define GL_CURRENT_COLOR 0x0B00 #define GL_CURRENT_NORMAL 0x0B02 #define GL_CURRENT_RASTER_COLOR 0x0B04 #define GL_CURRENT_RASTER_DISTANCE 0x0B09 #define GL_CURRENT_RASTER_INDEX 0x0B05 #define GL_CURRENT_RASTER_POSITION 0x0B07 #define GL_CURRENT_RASTER_TEXTURE_COORDS 0x0B06 #define GL_CURRENT_RASTER_POSITION_VALID 0x0B08 #define GL_CURRENT_TEXTURE_COORDS 0x0B03 #define GL_INDEX_CLEAR_VALUE 0x0C20 #define GL_INDEX_MODE 0x0C30 #define GL_INDEX_WRITEMASK 0x0C21 #define GL_MODELVIEW_MATRIX 0x0BA6 #define GL_MODELVIEW_STACK_DEPTH 0x0BA3 #define GL_NAME_STACK_DEPTH 0x0D70 #define GL_PROJECTION_MATRIX 0x0BA7 #define GL_PROJECTION_STACK_DEPTH 0x0BA4 #define GL_RENDER_MODE 0x0C40 #define GL_RGBA_MODE 0x0C31 #define GL_TEXTURE_MATRIX 0x0BA8 #define GL_TEXTURE_STACK_DEPTH 0x0BA5 #define GL_VIEWPORT 0x0BA2 /* Evaluators */ #define GL_AUTO_NORMAL 0x0D80 #define GL_MAP1_COLOR_4 0x0D90 #define GL_MAP1_GRID_DOMAIN 0x0DD0 #define GL_MAP1_GRID_SEGMENTS 0x0DD1 #define GL_MAP1_INDEX 0x0D91 #define GL_MAP1_NORMAL 0x0D92 #define GL_MAP1_TEXTURE_COORD_1 0x0D93 #define GL_MAP1_TEXTURE_COORD_2 0x0D94 #define GL_MAP1_TEXTURE_COORD_3 0x0D95 #define GL_MAP1_TEXTURE_COORD_4 0x0D96 #define GL_MAP1_VERTEX_3 0x0D97 #define GL_MAP1_VERTEX_4 0x0D98 #define GL_MAP2_COLOR_4 0x0DB0 #define GL_MAP2_GRID_DOMAIN 0x0DD2 #define GL_MAP2_GRID_SEGMENTS 0x0DD3 #define GL_MAP2_INDEX 0x0DB1 #define GL_MAP2_NORMAL 0x0DB2 #define GL_MAP2_TEXTURE_COORD_1 0x0DB3 #define GL_MAP2_TEXTURE_COORD_2 0x0DB4 #define GL_MAP2_TEXTURE_COORD_3 0x0DB5 #define GL_MAP2_TEXTURE_COORD_4 0x0DB6 #define GL_MAP2_VERTEX_3 0x0DB7 #define GL_MAP2_VERTEX_4 0x0DB8 #define GL_COEFF 0x0A00 #define GL_DOMAIN 0x0A02 #define GL_ORDER 0x0A01 /* Hints */ #define GL_FOG_HINT 0x0C54 #define GL_LINE_SMOOTH_HINT 0x0C52 #define GL_PERSPECTIVE_CORRECTION_HINT 0x0C50 #define GL_POINT_SMOOTH_HINT 0x0C51 #define GL_POLYGON_SMOOTH_HINT 0x0C53 #define GL_DONT_CARE 0x1100 #define GL_FASTEST 0x1101 #define GL_NICEST 0x1102 /* Scissor box */ #define GL_SCISSOR_TEST 0x0C11 #define GL_SCISSOR_BOX 0x0C10 /* Pixel Mode / Transfer */ #define GL_MAP_COLOR 0x0D10 #define GL_MAP_STENCIL 0x0D11 #define GL_INDEX_SHIFT 0x0D12 #define GL_INDEX_OFFSET 0x0D13 #define GL_RED_SCALE 0x0D14 #define GL_RED_BIAS 0x0D15 #define GL_GREEN_SCALE 0x0D18 #define GL_GREEN_BIAS 0x0D19 #define GL_BLUE_SCALE 0x0D1A #define GL_BLUE_BIAS 0x0D1B #define GL_ALPHA_SCALE 0x0D1C #define GL_ALPHA_BIAS 0x0D1D #define GL_DEPTH_SCALE 0x0D1E #define GL_DEPTH_BIAS 0x0D1F #define GL_PIXEL_MAP_S_TO_S_SIZE 0x0CB1 #define GL_PIXEL_MAP_I_TO_I_SIZE 0x0CB0 #define GL_PIXEL_MAP_I_TO_R_SIZE 0x0CB2 #define GL_PIXEL_MAP_I_TO_G_SIZE 0x0CB3 #define GL_PIXEL_MAP_I_TO_B_SIZE 0x0CB4 #define GL_PIXEL_MAP_I_TO_A_SIZE 0x0CB5 #define GL_PIXEL_MAP_R_TO_R_SIZE 0x0CB6 #define GL_PIXEL_MAP_G_TO_G_SIZE 0x0CB7 #define GL_PIXEL_MAP_B_TO_B_SIZE 0x0CB8 #define GL_PIXEL_MAP_A_TO_A_SIZE 0x0CB9 #define GL_PIXEL_MAP_S_TO_S 0x0C71 #define GL_PIXEL_MAP_I_TO_I 0x0C70 #define GL_PIXEL_MAP_I_TO_R 0x0C72 #define GL_PIXEL_MAP_I_TO_G 0x0C73 #define GL_PIXEL_MAP_I_TO_B 0x0C74 #define GL_PIXEL_MAP_I_TO_A 0x0C75 #define GL_PIXEL_MAP_R_TO_R 0x0C76 #define GL_PIXEL_MAP_G_TO_G 0x0C77 #define GL_PIXEL_MAP_B_TO_B 0x0C78 #define GL_PIXEL_MAP_A_TO_A 0x0C79 #define GL_PACK_ALIGNMENT 0x0D05 #define GL_PACK_LSB_FIRST 0x0D01 #define GL_PACK_ROW_LENGTH 0x0D02 #define GL_PACK_SKIP_PIXELS 0x0D04 #define GL_PACK_SKIP_ROWS 0x0D03 #define GL_PACK_SWAP_BYTES 0x0D00 #define GL_UNPACK_ALIGNMENT 0x0CF5 #define GL_UNPACK_LSB_FIRST 0x0CF1 #define GL_UNPACK_ROW_LENGTH 0x0CF2 #define GL_UNPACK_SKIP_PIXELS 0x0CF4 #define GL_UNPACK_SKIP_ROWS 0x0CF3 #define GL_UNPACK_SWAP_BYTES 0x0CF0 #define GL_ZOOM_X 0x0D16 #define GL_ZOOM_Y 0x0D17 /* Texture mapping */ #define GL_TEXTURE_ENV 0x2300 #define GL_TEXTURE_ENV_MODE 0x2200 #define GL_TEXTURE_1D 0x0DE0 #define GL_TEXTURE_2D 0x0DE1 #define GL_TEXTURE_WRAP_S 0x2802 #define GL_TEXTURE_WRAP_T 0x2803 #define GL_TEXTURE_MAG_FILTER 0x2800 #define GL_TEXTURE_MIN_FILTER 0x2801 #define GL_TEXTURE_ENV_COLOR 0x2201 #define GL_TEXTURE_GEN_S 0x0C60 #define GL_TEXTURE_GEN_T 0x0C61 #define GL_TEXTURE_GEN_MODE 0x2500 #define GL_TEXTURE_BORDER_COLOR 0x1004 #define GL_TEXTURE_WIDTH 0x1000 #define GL_TEXTURE_HEIGHT 0x1001 #define GL_TEXTURE_BORDER 0x1005 #define GL_TEXTURE_COMPONENTS 0x1003 #define GL_TEXTURE_RED_SIZE 0x805C #define GL_TEXTURE_GREEN_SIZE 0x805D #define GL_TEXTURE_BLUE_SIZE 0x805E #define GL_TEXTURE_ALPHA_SIZE 0x805F #define GL_TEXTURE_LUMINANCE_SIZE 0x8060 #define GL_TEXTURE_INTENSITY_SIZE 0x8061 #define GL_NEAREST_MIPMAP_NEAREST 0x2700 #define GL_NEAREST_MIPMAP_LINEAR 0x2702 #define GL_LINEAR_MIPMAP_NEAREST 0x2701 #define GL_LINEAR_MIPMAP_LINEAR 0x2703 #define GL_OBJECT_LINEAR 0x2401 #define GL_OBJECT_PLANE 0x2501 #define GL_EYE_LINEAR 0x2400 #define GL_EYE_PLANE 0x2502 #define GL_SPHERE_MAP 0x2402 #define GL_DECAL 0x2101 #define GL_MODULATE 0x2100 #define GL_NEAREST 0x2600 #define GL_REPEAT 0x2901 #define GL_CLAMP 0x2900 #define GL_S 0x2000 #define GL_T 0x2001 #define GL_R 0x2002 #define GL_Q 0x2003 #define GL_TEXTURE_GEN_R 0x0C62 #define GL_TEXTURE_GEN_Q 0x0C63 /* Utility */ #define GL_VENDOR 0x1F00 #define GL_RENDERER 0x1F01 #define GL_VERSION 0x1F02 #define GL_EXTENSIONS 0x1F03 /* Errors */ #define GL_NO_ERROR 0x0 #define GL_INVALID_VALUE 0x0501 #define GL_INVALID_ENUM 0x0500 #define GL_INVALID_OPERATION 0x0502 #define GL_STACK_OVERFLOW 0x0503 #define GL_STACK_UNDERFLOW 0x0504 #define GL_OUT_OF_MEMORY 0x0505 /* glPush/PopAttrib bits */ #define GL_CURRENT_BIT 0x00000001 #define GL_POINT_BIT 0x00000002 #define GL_LINE_BIT 0x00000004 #define GL_POLYGON_BIT 0x00000008 #define GL_POLYGON_STIPPLE_BIT 0x00000010 #define GL_PIXEL_MODE_BIT 0x00000020 #define GL_LIGHTING_BIT 0x00000040 #define GL_FOG_BIT 0x00000080 #define GL_DEPTH_BUFFER_BIT 0x00000100 #define GL_ACCUM_BUFFER_BIT 0x00000200 #define GL_STENCIL_BUFFER_BIT 0x00000400 #define GL_VIEWPORT_BIT 0x00000800 #define GL_TRANSFORM_BIT 0x00001000 #define GL_ENABLE_BIT 0x00002000 #define GL_COLOR_BUFFER_BIT 0x00004000 #define GL_HINT_BIT 0x00008000 #define GL_EVAL_BIT 0x00010000 #define GL_LIST_BIT 0x00020000 #define GL_TEXTURE_BIT 0x00040000 #define GL_SCISSOR_BIT 0x00080000 #define GL_ALL_ATTRIB_BITS 0x000FFFFF /* OpenGL 1.1 */ #define GL_PROXY_TEXTURE_1D 0x8063 #define GL_PROXY_TEXTURE_2D 0x8064 #define GL_TEXTURE_PRIORITY 0x8066 #define GL_TEXTURE_RESIDENT 0x8067 #define GL_TEXTURE_BINDING_1D 0x8068 #define GL_TEXTURE_BINDING_2D 0x8069 #define GL_TEXTURE_INTERNAL_FORMAT 0x1003 #define GL_ALPHA4 0x803B #define GL_ALPHA8 0x803C #define GL_ALPHA12 0x803D #define GL_ALPHA16 0x803E #define GL_LUMINANCE4 0x803F #define GL_LUMINANCE8 0x8040 #define GL_LUMINANCE12 0x8041 #define GL_LUMINANCE16 0x8042 #define GL_LUMINANCE4_ALPHA4 0x8043 #define GL_LUMINANCE6_ALPHA2 0x8044 #define GL_LUMINANCE8_ALPHA8 0x8045 #define GL_LUMINANCE12_ALPHA4 0x8046 #define GL_LUMINANCE12_ALPHA12 0x8047 #define GL_LUMINANCE16_ALPHA16 0x8048 #define GL_INTENSITY 0x8049 #define GL_INTENSITY4 0x804A #define GL_INTENSITY8 0x804B #define GL_INTENSITY12 0x804C #define GL_INTENSITY16 0x804D #define GL_R3_G3_B2 0x2A10 #define GL_RGB4 0x804F #define GL_RGB5 0x8050 #define GL_RGB8 0x8051 #define GL_RGB10 0x8052 #define GL_RGB12 0x8053 #define GL_RGB16 0x8054 #define GL_RGBA2 0x8055 #define GL_RGBA4 0x8056 #define GL_RGB5_A1 0x8057 #define GL_RGBA8 0x8058 #define GL_RGB10_A2 0x8059 #define GL_RGBA12 0x805A #define GL_RGBA16 0x805B #define GL_CLIENT_PIXEL_STORE_BIT 0x00000001 #define GL_CLIENT_VERTEX_ARRAY_BIT 0x00000002 #define GL_ALL_CLIENT_ATTRIB_BITS 0xFFFFFFFF #define GL_CLIENT_ALL_ATTRIB_BITS 0xFFFFFFFF /* Under Windows, we do not define OpenGL 1.2 & 1.3 functionality, since it is treated as extensions (defined in glext.h) */ #if !defined(__WIN32__) /* OpenGL 1.2 */ #define GL_RESCALE_NORMAL 0x803A #define GL_CLAMP_TO_EDGE 0x812F #define GL_MAX_ELEMENTS_VERTICES 0x80E8 #define GL_MAX_ELEMENTS_INDICES 0x80E9 #define GL_BGR 0x80E0 #define GL_BGRA 0x80E1 #define GL_UNSIGNED_BYTE_3_3_2 0x8032 #define GL_UNSIGNED_BYTE_2_3_3_REV 0x8362 #define GL_UNSIGNED_SHORT_5_6_5 0x8363 #define GL_UNSIGNED_SHORT_5_6_5_REV 0x8364 #define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 #define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365 #define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 #define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366 #define GL_UNSIGNED_INT_8_8_8_8 0x8035 #define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367 #define GL_UNSIGNED_INT_10_10_10_2 0x8036 #define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368 #define GL_LIGHT_MODEL_COLOR_CONTROL 0x81F8 #define GL_SINGLE_COLOR 0x81F9 #define GL_SEPARATE_SPECULAR_COLOR 0x81FA #define GL_TEXTURE_MIN_LOD 0x813A #define GL_TEXTURE_MAX_LOD 0x813B #define GL_TEXTURE_BASE_LEVEL 0x813C #define GL_TEXTURE_MAX_LEVEL 0x813D #define GL_SMOOTH_POINT_SIZE_RANGE 0x0B12 #define GL_SMOOTH_POINT_SIZE_GRANULARITY 0x0B13 #define GL_SMOOTH_LINE_WIDTH_RANGE 0x0B22 #define GL_SMOOTH_LINE_WIDTH_GRANULARITY 0x0B23 #define GL_ALIASED_POINT_SIZE_RANGE 0x846D #define GL_ALIASED_LINE_WIDTH_RANGE 0x846E #define GL_PACK_SKIP_IMAGES 0x806B #define GL_PACK_IMAGE_HEIGHT 0x806C #define GL_UNPACK_SKIP_IMAGES 0x806D #define GL_UNPACK_IMAGE_HEIGHT 0x806E #define GL_TEXTURE_3D 0x806F #define GL_PROXY_TEXTURE_3D 0x8070 #define GL_TEXTURE_DEPTH 0x8071 #define GL_TEXTURE_WRAP_R 0x8072 #define GL_MAX_3D_TEXTURE_SIZE 0x8073 #define GL_TEXTURE_BINDING_3D 0x806A /* OpenGL 1.2 imaging subset */ /* GL_EXT_color_table */ #define GL_COLOR_TABLE 0x80D0 #define GL_POST_CONVOLUTION_COLOR_TABLE 0x80D1 #define GL_POST_COLOR_MATRIX_COLOR_TABLE 0x80D2 #define GL_PROXY_COLOR_TABLE 0x80D3 #define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE 0x80D4 #define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE 0x80D5 #define GL_COLOR_TABLE_SCALE 0x80D6 #define GL_COLOR_TABLE_BIAS 0x80D7 #define GL_COLOR_TABLE_FORMAT 0x80D8 #define GL_COLOR_TABLE_WIDTH 0x80D9 #define GL_COLOR_TABLE_RED_SIZE 0x80DA #define GL_COLOR_TABLE_GREEN_SIZE 0x80DB #define GL_COLOR_TABLE_BLUE_SIZE 0x80DC #define GL_COLOR_TABLE_ALPHA_SIZE 0x80DD #define GL_COLOR_TABLE_LUMINANCE_SIZE 0x80DE #define GL_COLOR_TABLE_INTENSITY_SIZE 0x80DF /* GL_EXT_convolution and GL_HP_convolution_border_modes */ #define GL_CONVOLUTION_1D 0x8010 #define GL_CONVOLUTION_2D 0x8011 #define GL_SEPARABLE_2D 0x8012 #define GL_CONVOLUTION_BORDER_MODE 0x8013 #define GL_CONVOLUTION_FILTER_SCALE 0x8014 #define GL_CONVOLUTION_FILTER_BIAS 0x8015 #define GL_REDUCE 0x8016 #define GL_CONVOLUTION_FORMAT 0x8017 #define GL_CONVOLUTION_WIDTH 0x8018 #define GL_CONVOLUTION_HEIGHT 0x8019 #define GL_MAX_CONVOLUTION_WIDTH 0x801A #define GL_MAX_CONVOLUTION_HEIGHT 0x801B #define GL_POST_CONVOLUTION_RED_SCALE 0x801C #define GL_POST_CONVOLUTION_GREEN_SCALE 0x801D #define GL_POST_CONVOLUTION_BLUE_SCALE 0x801E #define GL_POST_CONVOLUTION_ALPHA_SCALE 0x801F #define GL_POST_CONVOLUTION_RED_BIAS 0x8020 #define GL_POST_CONVOLUTION_GREEN_BIAS 0x8021 #define GL_POST_CONVOLUTION_BLUE_BIAS 0x8022 #define GL_POST_CONVOLUTION_ALPHA_BIAS 0x8023 #define GL_CONSTANT_BORDER 0x8151 #define GL_REPLICATE_BORDER 0x8153 #define GL_CONVOLUTION_BORDER_COLOR 0x8154 /* GL_SGI_color_matrix */ #define GL_COLOR_MATRIX 0x80B1 #define GL_COLOR_MATRIX_STACK_DEPTH 0x80B2 #define GL_MAX_COLOR_MATRIX_STACK_DEPTH 0x80B3 #define GL_POST_COLOR_MATRIX_RED_SCALE 0x80B4 #define GL_POST_COLOR_MATRIX_GREEN_SCALE 0x80B5 #define GL_POST_COLOR_MATRIX_BLUE_SCALE 0x80B6 #define GL_POST_COLOR_MATRIX_ALPHA_SCALE 0x80B7 #define GL_POST_COLOR_MATRIX_RED_BIAS 0x80B8 #define GL_POST_COLOR_MATRIX_GREEN_BIAS 0x80B9 #define GL_POST_COLOR_MATRIX_BLUE_BIAS 0x80BA #define GL_POST_COLOR_MATRIX_ALPHA_BIAS 0x80BB /* GL_EXT_histogram */ #define GL_HISTOGRAM 0x8024 #define GL_PROXY_HISTOGRAM 0x8025 #define GL_HISTOGRAM_WIDTH 0x8026 #define GL_HISTOGRAM_FORMAT 0x8027 #define GL_HISTOGRAM_RED_SIZE 0x8028 #define GL_HISTOGRAM_GREEN_SIZE 0x8029 #define GL_HISTOGRAM_BLUE_SIZE 0x802A #define GL_HISTOGRAM_ALPHA_SIZE 0x802B #define GL_HISTOGRAM_LUMINANCE_SIZE 0x802C #define GL_HISTOGRAM_SINK 0x802D #define GL_MINMAX 0x802E #define GL_MINMAX_FORMAT 0x802F #define GL_MINMAX_SINK 0x8030 #define GL_TABLE_TOO_LARGE 0x8031 /* GL_EXT_blend_color, GL_EXT_blend_minmax */ #define GL_BLEND_EQUATION 0x8009 #define GL_MIN 0x8007 #define GL_MAX 0x8008 #define GL_FUNC_ADD 0x8006 #define GL_FUNC_SUBTRACT 0x800A #define GL_FUNC_REVERSE_SUBTRACT 0x800B #define GL_BLEND_COLOR 0x8005 /* OpenGL 1.3 */ /* multitexture */ #define GL_TEXTURE0 0x84C0 #define GL_TEXTURE1 0x84C1 #define GL_TEXTURE2 0x84C2 #define GL_TEXTURE3 0x84C3 #define GL_TEXTURE4 0x84C4 #define GL_TEXTURE5 0x84C5 #define GL_TEXTURE6 0x84C6 #define GL_TEXTURE7 0x84C7 #define GL_TEXTURE8 0x84C8 #define GL_TEXTURE9 0x84C9 #define GL_TEXTURE10 0x84CA #define GL_TEXTURE11 0x84CB #define GL_TEXTURE12 0x84CC #define GL_TEXTURE13 0x84CD #define GL_TEXTURE14 0x84CE #define GL_TEXTURE15 0x84CF #define GL_TEXTURE16 0x84D0 #define GL_TEXTURE17 0x84D1 #define GL_TEXTURE18 0x84D2 #define GL_TEXTURE19 0x84D3 #define GL_TEXTURE20 0x84D4 #define GL_TEXTURE21 0x84D5 #define GL_TEXTURE22 0x84D6 #define GL_TEXTURE23 0x84D7 #define GL_TEXTURE24 0x84D8 #define GL_TEXTURE25 0x84D9 #define GL_TEXTURE26 0x84DA #define GL_TEXTURE27 0x84DB #define GL_TEXTURE28 0x84DC #define GL_TEXTURE29 0x84DD #define GL_TEXTURE30 0x84DE #define GL_TEXTURE31 0x84DF #define GL_ACTIVE_TEXTURE 0x84E0 #define GL_CLIENT_ACTIVE_TEXTURE 0x84E1 #define GL_MAX_TEXTURE_UNITS 0x84E2 /* texture_cube_map */ #define GL_NORMAL_MAP 0x8511 #define GL_REFLECTION_MAP 0x8512 #define GL_TEXTURE_CUBE_MAP 0x8513 #define GL_TEXTURE_BINDING_CUBE_MAP 0x8514 #define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A #define GL_PROXY_TEXTURE_CUBE_MAP 0x851B #define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C /* texture_compression */ #define GL_COMPRESSED_ALPHA 0x84E9 #define GL_COMPRESSED_LUMINANCE 0x84EA #define GL_COMPRESSED_LUMINANCE_ALPHA 0x84EB #define GL_COMPRESSED_INTENSITY 0x84EC #define GL_COMPRESSED_RGB 0x84ED #define GL_COMPRESSED_RGBA 0x84EE #define GL_TEXTURE_COMPRESSION_HINT 0x84EF #define GL_TEXTURE_COMPRESSED_IMAGE_SIZE 0x86A0 #define GL_TEXTURE_COMPRESSED 0x86A1 #define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 #define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 /* multisample */ #define GL_MULTISAMPLE 0x809D #define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E #define GL_SAMPLE_ALPHA_TO_ONE 0x809F #define GL_SAMPLE_COVERAGE 0x80A0 #define GL_SAMPLE_BUFFERS 0x80A8 #define GL_SAMPLES 0x80A9 #define GL_SAMPLE_COVERAGE_VALUE 0x80AA #define GL_SAMPLE_COVERAGE_INVERT 0x80AB #define GL_MULTISAMPLE_BIT 0x20000000 /* transpose_matrix */ #define GL_TRANSPOSE_MODELVIEW_MATRIX 0x84E3 #define GL_TRANSPOSE_PROJECTION_MATRIX 0x84E4 #define GL_TRANSPOSE_TEXTURE_MATRIX 0x84E5 #define GL_TRANSPOSE_COLOR_MATRIX 0x84E6 /* texture_env_combine */ #define GL_COMBINE 0x8570 #define GL_COMBINE_RGB 0x8571 #define GL_COMBINE_ALPHA 0x8572 #define GL_SOURCE0_RGB 0x8580 #define GL_SOURCE1_RGB 0x8581 #define GL_SOURCE2_RGB 0x8582 #define GL_SOURCE0_ALPHA 0x8588 #define GL_SOURCE1_ALPHA 0x8589 #define GL_SOURCE2_ALPHA 0x858A #define GL_OPERAND0_RGB 0x8590 #define GL_OPERAND1_RGB 0x8591 #define GL_OPERAND2_RGB 0x8592 #define GL_OPERAND0_ALPHA 0x8598 #define GL_OPERAND1_ALPHA 0x8599 #define GL_OPERAND2_ALPHA 0x859A #define GL_RGB_SCALE 0x8573 #define GL_ADD_SIGNED 0x8574 #define GL_INTERPOLATE 0x8575 #define GL_SUBTRACT 0x84E7 #define GL_CONSTANT 0x8576 #define GL_PRIMARY_COLOR 0x8577 #define GL_PREVIOUS 0x8578 /* texture_env_dot3 */ #define GL_DOT3_RGB 0x86AE #define GL_DOT3_RGBA 0x86AF /* texture_border_clamp */ #define GL_CLAMP_TO_BORDER 0x812D #endif /* __WIN32__ */ /************************************************************************ * * Function prototypes * ************************************************************************/ /* Miscellaneous */ GLAPI void APIENTRY glClearIndex( GLfloat c ); GLAPI void APIENTRY glClearColor( GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha ); GLAPI void APIENTRY glClear( GLbitfield mask ); GLAPI void APIENTRY glIndexMask( GLuint mask ); GLAPI void APIENTRY glColorMask( GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha ); GLAPI void APIENTRY glAlphaFunc( GLenum func, GLclampf ref ); GLAPI void APIENTRY glBlendFunc( GLenum sfactor, GLenum dfactor ); GLAPI void APIENTRY glLogicOp( GLenum opcode ); GLAPI void APIENTRY glCullFace( GLenum mode ); GLAPI void APIENTRY glFrontFace( GLenum mode ); GLAPI void APIENTRY glPointSize( GLfloat size ); GLAPI void APIENTRY glLineWidth( GLfloat width ); GLAPI void APIENTRY glLineStipple( GLint factor, GLushort pattern ); GLAPI void APIENTRY glPolygonMode( GLenum face, GLenum mode ); GLAPI void APIENTRY glPolygonOffset( GLfloat factor, GLfloat units ); GLAPI void APIENTRY glPolygonStipple( const GLubyte *mask ); GLAPI void APIENTRY glGetPolygonStipple( GLubyte *mask ); GLAPI void APIENTRY glEdgeFlag( GLboolean flag ); GLAPI void APIENTRY glEdgeFlagv( const GLboolean *flag ); GLAPI void APIENTRY glScissor( GLint x, GLint y, GLsizei width, GLsizei height); GLAPI void APIENTRY glClipPlane( GLenum plane, const GLdouble *equation ); GLAPI void APIENTRY glGetClipPlane( GLenum plane, GLdouble *equation ); GLAPI void APIENTRY glDrawBuffer( GLenum mode ); GLAPI void APIENTRY glReadBuffer( GLenum mode ); GLAPI void APIENTRY glEnable( GLenum cap ); GLAPI void APIENTRY glDisable( GLenum cap ); GLAPI GLboolean APIENTRY glIsEnabled( GLenum cap ); GLAPI void APIENTRY glEnableClientState( GLenum cap ); /* 1.1 */ GLAPI void APIENTRY glDisableClientState( GLenum cap ); /* 1.1 */ GLAPI void APIENTRY glGetBooleanv( GLenum pname, GLboolean *params ); GLAPI void APIENTRY glGetDoublev( GLenum pname, GLdouble *params ); GLAPI void APIENTRY glGetFloatv( GLenum pname, GLfloat *params ); GLAPI void APIENTRY glGetIntegerv( GLenum pname, GLint *params ); GLAPI void APIENTRY glPushAttrib( GLbitfield mask ); GLAPI void APIENTRY glPopAttrib( void ); GLAPI void APIENTRY glPushClientAttrib( GLbitfield mask ); /* 1.1 */ GLAPI void APIENTRY glPopClientAttrib( void ); /* 1.1 */ GLAPI GLint APIENTRY glRenderMode( GLenum mode ); GLAPI GLenum APIENTRY glGetError( void ); GLAPI const GLubyte* APIENTRY glGetString( GLenum name ); GLAPI void APIENTRY glFinish( void ); GLAPI void APIENTRY glFlush( void ); GLAPI void APIENTRY glHint( GLenum target, GLenum mode ); /* Depth Buffer */ GLAPI void APIENTRY glClearDepth( GLclampd depth ); GLAPI void APIENTRY glDepthFunc( GLenum func ); GLAPI void APIENTRY glDepthMask( GLboolean flag ); GLAPI void APIENTRY glDepthRange( GLclampd near_val, GLclampd far_val ); /* Accumulation Buffer */ GLAPI void APIENTRY glClearAccum( GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha ); GLAPI void APIENTRY glAccum( GLenum op, GLfloat value ); /* Transformation */ GLAPI void APIENTRY glMatrixMode( GLenum mode ); GLAPI void APIENTRY glOrtho( GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near_val, GLdouble far_val ); GLAPI void APIENTRY glFrustum( GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near_val, GLdouble far_val ); GLAPI void APIENTRY glViewport( GLint x, GLint y, GLsizei width, GLsizei height ); GLAPI void APIENTRY glPushMatrix( void ); GLAPI void APIENTRY glPopMatrix( void ); GLAPI void APIENTRY glLoadIdentity( void ); GLAPI void APIENTRY glLoadMatrixd( const GLdouble *m ); GLAPI void APIENTRY glLoadMatrixf( const GLfloat *m ); GLAPI void APIENTRY glMultMatrixd( const GLdouble *m ); GLAPI void APIENTRY glMultMatrixf( const GLfloat *m ); GLAPI void APIENTRY glRotated( GLdouble angle, GLdouble x, GLdouble y, GLdouble z ); GLAPI void APIENTRY glRotatef( GLfloat angle, GLfloat x, GLfloat y, GLfloat z ); GLAPI void APIENTRY glScaled( GLdouble x, GLdouble y, GLdouble z ); GLAPI void APIENTRY glScalef( GLfloat x, GLfloat y, GLfloat z ); GLAPI void APIENTRY glTranslated( GLdouble x, GLdouble y, GLdouble z ); GLAPI void APIENTRY glTranslatef( GLfloat x, GLfloat y, GLfloat z ); /* Display Lists */ GLAPI GLboolean APIENTRY glIsList( GLuint list ); GLAPI void APIENTRY glDeleteLists( GLuint list, GLsizei range ); GLAPI GLuint APIENTRY glGenLists( GLsizei range ); GLAPI void APIENTRY glNewList( GLuint list, GLenum mode ); GLAPI void APIENTRY glEndList( void ); GLAPI void APIENTRY glCallList( GLuint list ); GLAPI void APIENTRY glCallLists( GLsizei n, GLenum type, const GLvoid *lists ); GLAPI void APIENTRY glListBase( GLuint base ); /* Drawing Functions */ GLAPI void APIENTRY glBegin( GLenum mode ); GLAPI void APIENTRY glEnd( void ); GLAPI void APIENTRY glVertex2d( GLdouble x, GLdouble y ); GLAPI void APIENTRY glVertex2f( GLfloat x, GLfloat y ); GLAPI void APIENTRY glVertex2i( GLint x, GLint y ); GLAPI void APIENTRY glVertex2s( GLshort x, GLshort y ); GLAPI void APIENTRY glVertex3d( GLdouble x, GLdouble y, GLdouble z ); GLAPI void APIENTRY glVertex3f( GLfloat x, GLfloat y, GLfloat z ); GLAPI void APIENTRY glVertex3i( GLint x, GLint y, GLint z ); GLAPI void APIENTRY glVertex3s( GLshort x, GLshort y, GLshort z ); GLAPI void APIENTRY glVertex4d( GLdouble x, GLdouble y, GLdouble z, GLdouble w ); GLAPI void APIENTRY glVertex4f( GLfloat x, GLfloat y, GLfloat z, GLfloat w ); GLAPI void APIENTRY glVertex4i( GLint x, GLint y, GLint z, GLint w ); GLAPI void APIENTRY glVertex4s( GLshort x, GLshort y, GLshort z, GLshort w ); GLAPI void APIENTRY glVertex2dv( const GLdouble *v ); GLAPI void APIENTRY glVertex2fv( const GLfloat *v ); GLAPI void APIENTRY glVertex2iv( const GLint *v ); GLAPI void APIENTRY glVertex2sv( const GLshort *v ); GLAPI void APIENTRY glVertex3dv( const GLdouble *v ); GLAPI void APIENTRY glVertex3fv( const GLfloat *v ); GLAPI void APIENTRY glVertex3iv( const GLint *v ); GLAPI void APIENTRY glVertex3sv( const GLshort *v ); GLAPI void APIENTRY glVertex4dv( const GLdouble *v ); GLAPI void APIENTRY glVertex4fv( const GLfloat *v ); GLAPI void APIENTRY glVertex4iv( const GLint *v ); GLAPI void APIENTRY glVertex4sv( const GLshort *v ); GLAPI void APIENTRY glNormal3b( GLbyte nx, GLbyte ny, GLbyte nz ); GLAPI void APIENTRY glNormal3d( GLdouble nx, GLdouble ny, GLdouble nz ); GLAPI void APIENTRY glNormal3f( GLfloat nx, GLfloat ny, GLfloat nz ); GLAPI void APIENTRY glNormal3i( GLint nx, GLint ny, GLint nz ); GLAPI void APIENTRY glNormal3s( GLshort nx, GLshort ny, GLshort nz ); GLAPI void APIENTRY glNormal3bv( const GLbyte *v ); GLAPI void APIENTRY glNormal3dv( const GLdouble *v ); GLAPI void APIENTRY glNormal3fv( const GLfloat *v ); GLAPI void APIENTRY glNormal3iv( const GLint *v ); GLAPI void APIENTRY glNormal3sv( const GLshort *v ); GLAPI void APIENTRY glIndexd( GLdouble c ); GLAPI void APIENTRY glIndexf( GLfloat c ); GLAPI void APIENTRY glIndexi( GLint c ); GLAPI void APIENTRY glIndexs( GLshort c ); GLAPI void APIENTRY glIndexub( GLubyte c ); /* 1.1 */ GLAPI void APIENTRY glIndexdv( const GLdouble *c ); GLAPI void APIENTRY glIndexfv( const GLfloat *c ); GLAPI void APIENTRY glIndexiv( const GLint *c ); GLAPI void APIENTRY glIndexsv( const GLshort *c ); GLAPI void APIENTRY glIndexubv( const GLubyte *c ); /* 1.1 */ GLAPI void APIENTRY glColor3b( GLbyte red, GLbyte green, GLbyte blue ); GLAPI void APIENTRY glColor3d( GLdouble red, GLdouble green, GLdouble blue ); GLAPI void APIENTRY glColor3f( GLfloat red, GLfloat green, GLfloat blue ); GLAPI void APIENTRY glColor3i( GLint red, GLint green, GLint blue ); GLAPI void APIENTRY glColor3s( GLshort red, GLshort green, GLshort blue ); GLAPI void APIENTRY glColor3ub( GLubyte red, GLubyte green, GLubyte blue ); GLAPI void APIENTRY glColor3ui( GLuint red, GLuint green, GLuint blue ); GLAPI void APIENTRY glColor3us( GLushort red, GLushort green, GLushort blue ); GLAPI void APIENTRY glColor4b( GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha ); GLAPI void APIENTRY glColor4d( GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha ); GLAPI void APIENTRY glColor4f( GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha ); GLAPI void APIENTRY glColor4i( GLint red, GLint green, GLint blue, GLint alpha ); GLAPI void APIENTRY glColor4s( GLshort red, GLshort green, GLshort blue, GLshort alpha ); GLAPI void APIENTRY glColor4ub( GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha ); GLAPI void APIENTRY glColor4ui( GLuint red, GLuint green, GLuint blue, GLuint alpha ); GLAPI void APIENTRY glColor4us( GLushort red, GLushort green, GLushort blue, GLushort alpha ); GLAPI void APIENTRY glColor3bv( const GLbyte *v ); GLAPI void APIENTRY glColor3dv( const GLdouble *v ); GLAPI void APIENTRY glColor3fv( const GLfloat *v ); GLAPI void APIENTRY glColor3iv( const GLint *v ); GLAPI void APIENTRY glColor3sv( const GLshort *v ); GLAPI void APIENTRY glColor3ubv( const GLubyte *v ); GLAPI void APIENTRY glColor3uiv( const GLuint *v ); GLAPI void APIENTRY glColor3usv( const GLushort *v ); GLAPI void APIENTRY glColor4bv( const GLbyte *v ); GLAPI void APIENTRY glColor4dv( const GLdouble *v ); GLAPI void APIENTRY glColor4fv( const GLfloat *v ); GLAPI void APIENTRY glColor4iv( const GLint *v ); GLAPI void APIENTRY glColor4sv( const GLshort *v ); GLAPI void APIENTRY glColor4ubv( const GLubyte *v ); GLAPI void APIENTRY glColor4uiv( const GLuint *v ); GLAPI void APIENTRY glColor4usv( const GLushort *v ); GLAPI void APIENTRY glTexCoord1d( GLdouble s ); GLAPI void APIENTRY glTexCoord1f( GLfloat s ); GLAPI void APIENTRY glTexCoord1i( GLint s ); GLAPI void APIENTRY glTexCoord1s( GLshort s ); GLAPI void APIENTRY glTexCoord2d( GLdouble s, GLdouble t ); GLAPI void APIENTRY glTexCoord2f( GLfloat s, GLfloat t ); GLAPI void APIENTRY glTexCoord2i( GLint s, GLint t ); GLAPI void APIENTRY glTexCoord2s( GLshort s, GLshort t ); GLAPI void APIENTRY glTexCoord3d( GLdouble s, GLdouble t, GLdouble r ); GLAPI void APIENTRY glTexCoord3f( GLfloat s, GLfloat t, GLfloat r ); GLAPI void APIENTRY glTexCoord3i( GLint s, GLint t, GLint r ); GLAPI void APIENTRY glTexCoord3s( GLshort s, GLshort t, GLshort r ); GLAPI void APIENTRY glTexCoord4d( GLdouble s, GLdouble t, GLdouble r, GLdouble q ); GLAPI void APIENTRY glTexCoord4f( GLfloat s, GLfloat t, GLfloat r, GLfloat q ); GLAPI void APIENTRY glTexCoord4i( GLint s, GLint t, GLint r, GLint q ); GLAPI void APIENTRY glTexCoord4s( GLshort s, GLshort t, GLshort r, GLshort q ); GLAPI void APIENTRY glTexCoord1dv( const GLdouble *v ); GLAPI void APIENTRY glTexCoord1fv( const GLfloat *v ); GLAPI void APIENTRY glTexCoord1iv( const GLint *v ); GLAPI void APIENTRY glTexCoord1sv( const GLshort *v ); GLAPI void APIENTRY glTexCoord2dv( const GLdouble *v ); GLAPI void APIENTRY glTexCoord2fv( const GLfloat *v ); GLAPI void APIENTRY glTexCoord2iv( const GLint *v ); GLAPI void APIENTRY glTexCoord2sv( const GLshort *v ); GLAPI void APIENTRY glTexCoord3dv( const GLdouble *v ); GLAPI void APIENTRY glTexCoord3fv( const GLfloat *v ); GLAPI void APIENTRY glTexCoord3iv( const GLint *v ); GLAPI void APIENTRY glTexCoord3sv( const GLshort *v ); GLAPI void APIENTRY glTexCoord4dv( const GLdouble *v ); GLAPI void APIENTRY glTexCoord4fv( const GLfloat *v ); GLAPI void APIENTRY glTexCoord4iv( const GLint *v ); GLAPI void APIENTRY glTexCoord4sv( const GLshort *v ); GLAPI void APIENTRY glRasterPos2d( GLdouble x, GLdouble y ); GLAPI void APIENTRY glRasterPos2f( GLfloat x, GLfloat y ); GLAPI void APIENTRY glRasterPos2i( GLint x, GLint y ); GLAPI void APIENTRY glRasterPos2s( GLshort x, GLshort y ); GLAPI void APIENTRY glRasterPos3d( GLdouble x, GLdouble y, GLdouble z ); GLAPI void APIENTRY glRasterPos3f( GLfloat x, GLfloat y, GLfloat z ); GLAPI void APIENTRY glRasterPos3i( GLint x, GLint y, GLint z ); GLAPI void APIENTRY glRasterPos3s( GLshort x, GLshort y, GLshort z ); GLAPI void APIENTRY glRasterPos4d( GLdouble x, GLdouble y, GLdouble z, GLdouble w ); GLAPI void APIENTRY glRasterPos4f( GLfloat x, GLfloat y, GLfloat z, GLfloat w ); GLAPI void APIENTRY glRasterPos4i( GLint x, GLint y, GLint z, GLint w ); GLAPI void APIENTRY glRasterPos4s( GLshort x, GLshort y, GLshort z, GLshort w ); GLAPI void APIENTRY glRasterPos2dv( const GLdouble *v ); GLAPI void APIENTRY glRasterPos2fv( const GLfloat *v ); GLAPI void APIENTRY glRasterPos2iv( const GLint *v ); GLAPI void APIENTRY glRasterPos2sv( const GLshort *v ); GLAPI void APIENTRY glRasterPos3dv( const GLdouble *v ); GLAPI void APIENTRY glRasterPos3fv( const GLfloat *v ); GLAPI void APIENTRY glRasterPos3iv( const GLint *v ); GLAPI void APIENTRY glRasterPos3sv( const GLshort *v ); GLAPI void APIENTRY glRasterPos4dv( const GLdouble *v ); GLAPI void APIENTRY glRasterPos4fv( const GLfloat *v ); GLAPI void APIENTRY glRasterPos4iv( const GLint *v ); GLAPI void APIENTRY glRasterPos4sv( const GLshort *v ); GLAPI void APIENTRY glRectd( GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2 ); GLAPI void APIENTRY glRectf( GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2 ); GLAPI void APIENTRY glRecti( GLint x1, GLint y1, GLint x2, GLint y2 ); GLAPI void APIENTRY glRects( GLshort x1, GLshort y1, GLshort x2, GLshort y2 ); GLAPI void APIENTRY glRectdv( const GLdouble *v1, const GLdouble *v2 ); GLAPI void APIENTRY glRectfv( const GLfloat *v1, const GLfloat *v2 ); GLAPI void APIENTRY glRectiv( const GLint *v1, const GLint *v2 ); GLAPI void APIENTRY glRectsv( const GLshort *v1, const GLshort *v2 ); /* Lighting */ GLAPI void APIENTRY glShadeModel( GLenum mode ); GLAPI void APIENTRY glLightf( GLenum light, GLenum pname, GLfloat param ); GLAPI void APIENTRY glLighti( GLenum light, GLenum pname, GLint param ); GLAPI void APIENTRY glLightfv( GLenum light, GLenum pname, const GLfloat *params ); GLAPI void APIENTRY glLightiv( GLenum light, GLenum pname, const GLint *params ); GLAPI void APIENTRY glGetLightfv( GLenum light, GLenum pname, GLfloat *params ); GLAPI void APIENTRY glGetLightiv( GLenum light, GLenum pname, GLint *params ); GLAPI void APIENTRY glLightModelf( GLenum pname, GLfloat param ); GLAPI void APIENTRY glLightModeli( GLenum pname, GLint param ); GLAPI void APIENTRY glLightModelfv( GLenum pname, const GLfloat *params ); GLAPI void APIENTRY glLightModeliv( GLenum pname, const GLint *params ); GLAPI void APIENTRY glMaterialf( GLenum face, GLenum pname, GLfloat param ); GLAPI void APIENTRY glMateriali( GLenum face, GLenum pname, GLint param ); GLAPI void APIENTRY glMaterialfv( GLenum face, GLenum pname, const GLfloat *params ); GLAPI void APIENTRY glMaterialiv( GLenum face, GLenum pname, const GLint *params ); GLAPI void APIENTRY glGetMaterialfv( GLenum face, GLenum pname, GLfloat *params ); GLAPI void APIENTRY glGetMaterialiv( GLenum face, GLenum pname, GLint *params ); GLAPI void APIENTRY glColorMaterial( GLenum face, GLenum mode ); /* Raster functions */ GLAPI void APIENTRY glPixelZoom( GLfloat xfactor, GLfloat yfactor ); GLAPI void APIENTRY glPixelStoref( GLenum pname, GLfloat param ); GLAPI void APIENTRY glPixelStorei( GLenum pname, GLint param ); GLAPI void APIENTRY glPixelTransferf( GLenum pname, GLfloat param ); GLAPI void APIENTRY glPixelTransferi( GLenum pname, GLint param ); GLAPI void APIENTRY glPixelMapfv( GLenum map, GLint mapsize, const GLfloat *values ); GLAPI void APIENTRY glPixelMapuiv( GLenum map, GLint mapsize, const GLuint *values ); GLAPI void APIENTRY glPixelMapusv( GLenum map, GLint mapsize, const GLushort *values ); GLAPI void APIENTRY glGetPixelMapfv( GLenum map, GLfloat *values ); GLAPI void APIENTRY glGetPixelMapuiv( GLenum map, GLuint *values ); GLAPI void APIENTRY glGetPixelMapusv( GLenum map, GLushort *values ); GLAPI void APIENTRY glBitmap( GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte *bitmap ); GLAPI void APIENTRY glReadPixels( GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels ); GLAPI void APIENTRY glDrawPixels( GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels ); GLAPI void APIENTRY glCopyPixels( GLint x, GLint y, GLsizei width, GLsizei height, GLenum type ); /* Stenciling */ GLAPI void APIENTRY glStencilFunc( GLenum func, GLint ref, GLuint mask ); GLAPI void APIENTRY glStencilMask( GLuint mask ); GLAPI void APIENTRY glStencilOp( GLenum fail, GLenum zfail, GLenum zpass ); GLAPI void APIENTRY glClearStencil( GLint s ); /* Texture mapping */ GLAPI void APIENTRY glTexGend( GLenum coord, GLenum pname, GLdouble param ); GLAPI void APIENTRY glTexGenf( GLenum coord, GLenum pname, GLfloat param ); GLAPI void APIENTRY glTexGeni( GLenum coord, GLenum pname, GLint param ); GLAPI void APIENTRY glTexGendv( GLenum coord, GLenum pname, const GLdouble *params ); GLAPI void APIENTRY glTexGenfv( GLenum coord, GLenum pname, const GLfloat *params ); GLAPI void APIENTRY glTexGeniv( GLenum coord, GLenum pname, const GLint *params ); GLAPI void APIENTRY glGetTexGendv( GLenum coord, GLenum pname, GLdouble *params ); GLAPI void APIENTRY glGetTexGenfv( GLenum coord, GLenum pname, GLfloat *params ); GLAPI void APIENTRY glGetTexGeniv( GLenum coord, GLenum pname, GLint *params ); GLAPI void APIENTRY glTexEnvf( GLenum target, GLenum pname, GLfloat param ); GLAPI void APIENTRY glTexEnvi( GLenum target, GLenum pname, GLint param ); GLAPI void APIENTRY glTexEnvfv( GLenum target, GLenum pname, const GLfloat *params ); GLAPI void APIENTRY glTexEnviv( GLenum target, GLenum pname, const GLint *params ); GLAPI void APIENTRY glGetTexEnvfv( GLenum target, GLenum pname, GLfloat *params ); GLAPI void APIENTRY glGetTexEnviv( GLenum target, GLenum pname, GLint *params ); GLAPI void APIENTRY glTexParameterf( GLenum target, GLenum pname, GLfloat param ); GLAPI void APIENTRY glTexParameteri( GLenum target, GLenum pname, GLint param ); GLAPI void APIENTRY glTexParameterfv( GLenum target, GLenum pname, const GLfloat *params ); GLAPI void APIENTRY glTexParameteriv( GLenum target, GLenum pname, const GLint *params ); GLAPI void APIENTRY glGetTexParameterfv( GLenum target, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetTexParameteriv( GLenum target, GLenum pname, GLint *params ); GLAPI void APIENTRY glGetTexLevelParameterfv( GLenum target, GLint level, GLenum pname, GLfloat *params ); GLAPI void APIENTRY glGetTexLevelParameteriv( GLenum target, GLint level, GLenum pname, GLint *params ); GLAPI void APIENTRY glTexImage1D( GLenum target, GLint level, GLint internalFormat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels ); GLAPI void APIENTRY glTexImage2D( GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels ); GLAPI void APIENTRY glGetTexImage( GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels ); /* Evaluators */ GLAPI void APIENTRY glMap1d( GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points ); GLAPI void APIENTRY glMap1f( GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points ); GLAPI void APIENTRY glMap2d( GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points ); GLAPI void APIENTRY glMap2f( GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points ); GLAPI void APIENTRY glGetMapdv( GLenum target, GLenum query, GLdouble *v ); GLAPI void APIENTRY glGetMapfv( GLenum target, GLenum query, GLfloat *v ); GLAPI void APIENTRY glGetMapiv( GLenum target, GLenum query, GLint *v ); GLAPI void APIENTRY glEvalCoord1d( GLdouble u ); GLAPI void APIENTRY glEvalCoord1f( GLfloat u ); GLAPI void APIENTRY glEvalCoord1dv( const GLdouble *u ); GLAPI void APIENTRY glEvalCoord1fv( const GLfloat *u ); GLAPI void APIENTRY glEvalCoord2d( GLdouble u, GLdouble v ); GLAPI void APIENTRY glEvalCoord2f( GLfloat u, GLfloat v ); GLAPI void APIENTRY glEvalCoord2dv( const GLdouble *u ); GLAPI void APIENTRY glEvalCoord2fv( const GLfloat *u ); GLAPI void APIENTRY glMapGrid1d( GLint un, GLdouble u1, GLdouble u2 ); GLAPI void APIENTRY glMapGrid1f( GLint un, GLfloat u1, GLfloat u2 ); GLAPI void APIENTRY glMapGrid2d( GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2 ); GLAPI void APIENTRY glMapGrid2f( GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2 ); GLAPI void APIENTRY glEvalPoint1( GLint i ); GLAPI void APIENTRY glEvalPoint2( GLint i, GLint j ); GLAPI void APIENTRY glEvalMesh1( GLenum mode, GLint i1, GLint i2 ); GLAPI void APIENTRY glEvalMesh2( GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2 ); /* Fog */ GLAPI void APIENTRY glFogf( GLenum pname, GLfloat param ); GLAPI void APIENTRY glFogi( GLenum pname, GLint param ); GLAPI void APIENTRY glFogfv( GLenum pname, const GLfloat *params ); GLAPI void APIENTRY glFogiv( GLenum pname, const GLint *params ); /* Selection and Feedback */ GLAPI void APIENTRY glFeedbackBuffer( GLsizei size, GLenum type, GLfloat *buffer ); GLAPI void APIENTRY glPassThrough( GLfloat token ); GLAPI void APIENTRY glSelectBuffer( GLsizei size, GLuint *buffer ); GLAPI void APIENTRY glInitNames( void ); GLAPI void APIENTRY glLoadName( GLuint name ); GLAPI void APIENTRY glPushName( GLuint name ); GLAPI void APIENTRY glPopName( void ); /* 1.1 functions */ /* texture objects */ GLAPI void APIENTRY glGenTextures( GLsizei n, GLuint *textures ); GLAPI void APIENTRY glDeleteTextures( GLsizei n, const GLuint *textures); GLAPI void APIENTRY glBindTexture( GLenum target, GLuint texture ); GLAPI void APIENTRY glPrioritizeTextures( GLsizei n, const GLuint *textures, const GLclampf *priorities ); GLAPI GLboolean APIENTRY glAreTexturesResident( GLsizei n, const GLuint *textures, GLboolean *residences ); GLAPI GLboolean APIENTRY glIsTexture( GLuint texture ); /* texture mapping */ GLAPI void APIENTRY glTexSubImage1D( GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels ); GLAPI void APIENTRY glTexSubImage2D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels ); GLAPI void APIENTRY glCopyTexImage1D( GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border ); GLAPI void APIENTRY glCopyTexImage2D( GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border ); GLAPI void APIENTRY glCopyTexSubImage1D( GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width ); GLAPI void APIENTRY glCopyTexSubImage2D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height ); /* vertex arrays */ GLAPI void APIENTRY glVertexPointer( GLint size, GLenum type, GLsizei stride, const GLvoid *ptr ); GLAPI void APIENTRY glNormalPointer( GLenum type, GLsizei stride, const GLvoid *ptr ); GLAPI void APIENTRY glColorPointer( GLint size, GLenum type, GLsizei stride, const GLvoid *ptr ); GLAPI void APIENTRY glIndexPointer( GLenum type, GLsizei stride, const GLvoid *ptr ); GLAPI void APIENTRY glTexCoordPointer( GLint size, GLenum type, GLsizei stride, const GLvoid *ptr ); GLAPI void APIENTRY glEdgeFlagPointer( GLsizei stride, const GLvoid *ptr ); GLAPI void APIENTRY glGetPointerv( GLenum pname, GLvoid **params ); GLAPI void APIENTRY glArrayElement( GLint i ); GLAPI void APIENTRY glDrawArrays( GLenum mode, GLint first, GLsizei count ); GLAPI void APIENTRY glDrawElements( GLenum mode, GLsizei count, GLenum type, const GLvoid *indices ); GLAPI void APIENTRY glInterleavedArrays( GLenum format, GLsizei stride, const GLvoid *pointer ); /* Under Windows, we do not define OpenGL 1.2 & 1.3 functionality, since it is treated as extensions (defined in glext.h) */ #if !defined(__WIN32__) /* 1.2 functions */ GLAPI void APIENTRY glDrawRangeElements( GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices ); GLAPI void APIENTRY glTexImage3D( GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels ); GLAPI void APIENTRY glTexSubImage3D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); GLAPI void APIENTRY glCopyTexSubImage3D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height ); /* 1.2 imaging extension functions */ GLAPI void APIENTRY glColorTable( GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table ); GLAPI void APIENTRY glColorSubTable( GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data ); GLAPI void APIENTRY glColorTableParameteriv(GLenum target, GLenum pname, const GLint *params); GLAPI void APIENTRY glColorTableParameterfv(GLenum target, GLenum pname, const GLfloat *params); GLAPI void APIENTRY glCopyColorSubTable( GLenum target, GLsizei start, GLint x, GLint y, GLsizei width ); GLAPI void APIENTRY glCopyColorTable( GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width ); GLAPI void APIENTRY glGetColorTable( GLenum target, GLenum format, GLenum type, GLvoid *table ); GLAPI void APIENTRY glGetColorTableParameterfv( GLenum target, GLenum pname, GLfloat *params ); GLAPI void APIENTRY glGetColorTableParameteriv( GLenum target, GLenum pname, GLint *params ); GLAPI void APIENTRY glBlendEquation( GLenum mode ); GLAPI void APIENTRY glBlendColor( GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha ); GLAPI void APIENTRY glHistogram( GLenum target, GLsizei width, GLenum internalformat, GLboolean sink ); GLAPI void APIENTRY glResetHistogram( GLenum target ); GLAPI void APIENTRY glGetHistogram( GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values ); GLAPI void APIENTRY glGetHistogramParameterfv( GLenum target, GLenum pname, GLfloat *params ); GLAPI void APIENTRY glGetHistogramParameteriv( GLenum target, GLenum pname, GLint *params ); GLAPI void APIENTRY glMinmax( GLenum target, GLenum internalformat, GLboolean sink ); GLAPI void APIENTRY glResetMinmax( GLenum target ); GLAPI void APIENTRY glGetMinmax( GLenum target, GLboolean reset, GLenum format, GLenum types, GLvoid *values ); GLAPI void APIENTRY glGetMinmaxParameterfv( GLenum target, GLenum pname, GLfloat *params ); GLAPI void APIENTRY glGetMinmaxParameteriv( GLenum target, GLenum pname, GLint *params ); GLAPI void APIENTRY glConvolutionFilter1D( GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image ); GLAPI void APIENTRY glConvolutionFilter2D( GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image ); GLAPI void APIENTRY glConvolutionParameterf( GLenum target, GLenum pname, GLfloat params ); GLAPI void APIENTRY glConvolutionParameterfv( GLenum target, GLenum pname, const GLfloat *params ); GLAPI void APIENTRY glConvolutionParameteri( GLenum target, GLenum pname, GLint params ); GLAPI void APIENTRY glConvolutionParameteriv( GLenum target, GLenum pname, const GLint *params ); GLAPI void APIENTRY glCopyConvolutionFilter1D( GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width ); GLAPI void APIENTRY glCopyConvolutionFilter2D( GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); GLAPI void APIENTRY glGetConvolutionFilter( GLenum target, GLenum format, GLenum type, GLvoid *image ); GLAPI void APIENTRY glGetConvolutionParameterfv( GLenum target, GLenum pname, GLfloat *params ); GLAPI void APIENTRY glGetConvolutionParameteriv( GLenum target, GLenum pname, GLint *params ); GLAPI void APIENTRY glSeparableFilter2D( GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column ); GLAPI void APIENTRY glGetSeparableFilter( GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span ); /* 1.3 functions */ GLAPI void APIENTRY glActiveTexture( GLenum texture ); GLAPI void APIENTRY glClientActiveTexture( GLenum texture ); GLAPI void APIENTRY glCompressedTexImage1D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data ); GLAPI void APIENTRY glCompressedTexImage2D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data ); GLAPI void APIENTRY glCompressedTexImage3D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data ); GLAPI void APIENTRY glCompressedTexSubImage1D( GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data ); GLAPI void APIENTRY glCompressedTexSubImage2D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data ); GLAPI void APIENTRY glCompressedTexSubImage3D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data ); GLAPI void APIENTRY glGetCompressedTexImage( GLenum target, GLint lod, GLvoid *img ); GLAPI void APIENTRY glMultiTexCoord1d( GLenum target, GLdouble s ); GLAPI void APIENTRY glMultiTexCoord1dv( GLenum target, const GLdouble *v ); GLAPI void APIENTRY glMultiTexCoord1f( GLenum target, GLfloat s ); GLAPI void APIENTRY glMultiTexCoord1fv( GLenum target, const GLfloat *v ); GLAPI void APIENTRY glMultiTexCoord1i( GLenum target, GLint s ); GLAPI void APIENTRY glMultiTexCoord1iv( GLenum target, const GLint *v ); GLAPI void APIENTRY glMultiTexCoord1s( GLenum target, GLshort s ); GLAPI void APIENTRY glMultiTexCoord1sv( GLenum target, const GLshort *v ); GLAPI void APIENTRY glMultiTexCoord2d( GLenum target, GLdouble s, GLdouble t ); GLAPI void APIENTRY glMultiTexCoord2dv( GLenum target, const GLdouble *v ); GLAPI void APIENTRY glMultiTexCoord2f( GLenum target, GLfloat s, GLfloat t ); GLAPI void APIENTRY glMultiTexCoord2fv( GLenum target, const GLfloat *v ); GLAPI void APIENTRY glMultiTexCoord2i( GLenum target, GLint s, GLint t ); GLAPI void APIENTRY glMultiTexCoord2iv( GLenum target, const GLint *v ); GLAPI void APIENTRY glMultiTexCoord2s( GLenum target, GLshort s, GLshort t ); GLAPI void APIENTRY glMultiTexCoord2sv( GLenum target, const GLshort *v ); GLAPI void APIENTRY glMultiTexCoord3d( GLenum target, GLdouble s, GLdouble t, GLdouble r ); GLAPI void APIENTRY glMultiTexCoord3dv( GLenum target, const GLdouble *v ); GLAPI void APIENTRY glMultiTexCoord3f( GLenum target, GLfloat s, GLfloat t, GLfloat r ); GLAPI void APIENTRY glMultiTexCoord3fv( GLenum target, const GLfloat *v ); GLAPI void APIENTRY glMultiTexCoord3i( GLenum target, GLint s, GLint t, GLint r ); GLAPI void APIENTRY glMultiTexCoord3iv( GLenum target, const GLint *v ); GLAPI void APIENTRY glMultiTexCoord3s( GLenum target, GLshort s, GLshort t, GLshort r ); GLAPI void APIENTRY glMultiTexCoord3sv( GLenum target, const GLshort *v ); GLAPI void APIENTRY glMultiTexCoord4d( GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q ); GLAPI void APIENTRY glMultiTexCoord4dv( GLenum target, const GLdouble *v ); GLAPI void APIENTRY glMultiTexCoord4f( GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q ); GLAPI void APIENTRY glMultiTexCoord4fv( GLenum target, const GLfloat *v ); GLAPI void APIENTRY glMultiTexCoord4i( GLenum target, GLint s, GLint t, GLint r, GLint q ); GLAPI void APIENTRY glMultiTexCoord4iv( GLenum target, const GLint *v ); GLAPI void APIENTRY glMultiTexCoord4s( GLenum target, GLshort s, GLshort t, GLshort r, GLshort q ); GLAPI void APIENTRY glMultiTexCoord4sv( GLenum target, const GLshort *v ); GLAPI void APIENTRY glLoadTransposeMatrixd( const GLdouble m[16] ); GLAPI void APIENTRY glLoadTransposeMatrixf( const GLfloat m[16] ); GLAPI void APIENTRY glMultTransposeMatrixd( const GLdouble m[16] ); GLAPI void APIENTRY glMultTransposeMatrixf( const GLfloat m[16] ); GLAPI void APIENTRY glSampleCoverage( GLclampf value, GLboolean invert ); GLAPI void APIENTRY glSamplePass( GLenum pass ); #endif /* __WIN32__ */ /* Include external definitions of OpenGL extensions */ /* Removed, see this bug report for reference: * http://sourceforge.net/tracker/index.php?func=detail&aid=610178&group_id=2435&atid=102435 * * #include */ /************************************************************************ * Begin system-specific stuff */ /* * End system-specific stuff ************************************************************************/ #ifdef __cplusplus } #endif #endif /* __gl_h_ */ ================================================ FILE: Include/gl/glext.h ================================================ #ifndef __glext_h_ #define __glext_h_ #ifdef __cplusplus extern "C" { #endif /* ** THIS FILE IS OBSOLETE. Please migrate away from using the ** ".spec" files and the headers generated from them to the ** XML Registry and headers generated from that. See ** http://www.opengl.org/registry/api/README.txt ** for more information. ** ** ** Copyright (c) 2007-2013 The Khronos Group Inc. ** ** Permission is hereby granted, free of charge, to any person obtaining a ** copy of this software and/or associated documentation files (the ** "Materials"), to deal in the Materials without restriction, including ** without limitation the rights to use, copy, modify, merge, publish, ** distribute, sublicense, and/or sell copies of the Materials, and to ** permit persons to whom the Materials are furnished to do so, subject to ** the following conditions: ** ** The above copyright notice and this permission notice shall be included ** in all copies or substantial portions of the Materials. ** ** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. ** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY ** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, ** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE ** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. */ /* Header file version number, required by OpenGL ABI for Linux */ /* glext.h last updated $Date: 2013-06-13 02:52:31 -0700 (Thu, 13 Jun 2013) $ */ /* Current version at http://www.opengl.org/registry/ */ #define GL_GLEXT_VERSION 87 /* Function declaration macros - to move into glplatform.h */ #if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__) #define WIN32_LEAN_AND_MEAN 1 #include #endif #ifndef APIENTRY #define APIENTRY #endif #ifndef APIENTRYP #define APIENTRYP APIENTRY * #endif #ifndef GLAPI #define GLAPI extern #endif /*************************************************************/ #ifndef GL_VERSION_1_2 #define GL_UNSIGNED_BYTE_3_3_2 0x8032 #define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 #define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 #define GL_UNSIGNED_INT_8_8_8_8 0x8035 #define GL_UNSIGNED_INT_10_10_10_2 0x8036 #define GL_TEXTURE_BINDING_3D 0x806A #define GL_PACK_SKIP_IMAGES 0x806B #define GL_PACK_IMAGE_HEIGHT 0x806C #define GL_UNPACK_SKIP_IMAGES 0x806D #define GL_UNPACK_IMAGE_HEIGHT 0x806E #define GL_TEXTURE_3D 0x806F #define GL_PROXY_TEXTURE_3D 0x8070 #define GL_TEXTURE_DEPTH 0x8071 #define GL_TEXTURE_WRAP_R 0x8072 #define GL_MAX_3D_TEXTURE_SIZE 0x8073 #define GL_UNSIGNED_BYTE_2_3_3_REV 0x8362 #define GL_UNSIGNED_SHORT_5_6_5 0x8363 #define GL_UNSIGNED_SHORT_5_6_5_REV 0x8364 #define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365 #define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366 #define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367 #define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368 #define GL_BGR 0x80E0 #define GL_BGRA 0x80E1 #define GL_MAX_ELEMENTS_VERTICES 0x80E8 #define GL_MAX_ELEMENTS_INDICES 0x80E9 #define GL_CLAMP_TO_EDGE 0x812F #define GL_TEXTURE_MIN_LOD 0x813A #define GL_TEXTURE_MAX_LOD 0x813B #define GL_TEXTURE_BASE_LEVEL 0x813C #define GL_TEXTURE_MAX_LEVEL 0x813D #define GL_SMOOTH_POINT_SIZE_RANGE 0x0B12 #define GL_SMOOTH_POINT_SIZE_GRANULARITY 0x0B13 #define GL_SMOOTH_LINE_WIDTH_RANGE 0x0B22 #define GL_SMOOTH_LINE_WIDTH_GRANULARITY 0x0B23 #define GL_ALIASED_LINE_WIDTH_RANGE 0x846E #define GL_RESCALE_NORMAL 0x803A #define GL_LIGHT_MODEL_COLOR_CONTROL 0x81F8 #define GL_SINGLE_COLOR 0x81F9 #define GL_SEPARATE_SPECULAR_COLOR 0x81FA #define GL_ALIASED_POINT_SIZE_RANGE 0x846D #endif #ifndef GL_ARB_imaging #define GL_CONSTANT_COLOR 0x8001 #define GL_ONE_MINUS_CONSTANT_COLOR 0x8002 #define GL_CONSTANT_ALPHA 0x8003 #define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 #define GL_BLEND_COLOR 0x8005 #define GL_FUNC_ADD 0x8006 #define GL_MIN 0x8007 #define GL_MAX 0x8008 #define GL_BLEND_EQUATION 0x8009 #define GL_FUNC_SUBTRACT 0x800A #define GL_FUNC_REVERSE_SUBTRACT 0x800B #define GL_CONVOLUTION_1D 0x8010 #define GL_CONVOLUTION_2D 0x8011 #define GL_SEPARABLE_2D 0x8012 #define GL_CONVOLUTION_BORDER_MODE 0x8013 #define GL_CONVOLUTION_FILTER_SCALE 0x8014 #define GL_CONVOLUTION_FILTER_BIAS 0x8015 #define GL_REDUCE 0x8016 #define GL_CONVOLUTION_FORMAT 0x8017 #define GL_CONVOLUTION_WIDTH 0x8018 #define GL_CONVOLUTION_HEIGHT 0x8019 #define GL_MAX_CONVOLUTION_WIDTH 0x801A #define GL_MAX_CONVOLUTION_HEIGHT 0x801B #define GL_POST_CONVOLUTION_RED_SCALE 0x801C #define GL_POST_CONVOLUTION_GREEN_SCALE 0x801D #define GL_POST_CONVOLUTION_BLUE_SCALE 0x801E #define GL_POST_CONVOLUTION_ALPHA_SCALE 0x801F #define GL_POST_CONVOLUTION_RED_BIAS 0x8020 #define GL_POST_CONVOLUTION_GREEN_BIAS 0x8021 #define GL_POST_CONVOLUTION_BLUE_BIAS 0x8022 #define GL_POST_CONVOLUTION_ALPHA_BIAS 0x8023 #define GL_HISTOGRAM 0x8024 #define GL_PROXY_HISTOGRAM 0x8025 #define GL_HISTOGRAM_WIDTH 0x8026 #define GL_HISTOGRAM_FORMAT 0x8027 #define GL_HISTOGRAM_RED_SIZE 0x8028 #define GL_HISTOGRAM_GREEN_SIZE 0x8029 #define GL_HISTOGRAM_BLUE_SIZE 0x802A #define GL_HISTOGRAM_ALPHA_SIZE 0x802B #define GL_HISTOGRAM_LUMINANCE_SIZE 0x802C #define GL_HISTOGRAM_SINK 0x802D #define GL_MINMAX 0x802E #define GL_MINMAX_FORMAT 0x802F #define GL_MINMAX_SINK 0x8030 #define GL_TABLE_TOO_LARGE 0x8031 #define GL_COLOR_MATRIX 0x80B1 #define GL_COLOR_MATRIX_STACK_DEPTH 0x80B2 #define GL_MAX_COLOR_MATRIX_STACK_DEPTH 0x80B3 #define GL_POST_COLOR_MATRIX_RED_SCALE 0x80B4 #define GL_POST_COLOR_MATRIX_GREEN_SCALE 0x80B5 #define GL_POST_COLOR_MATRIX_BLUE_SCALE 0x80B6 #define GL_POST_COLOR_MATRIX_ALPHA_SCALE 0x80B7 #define GL_POST_COLOR_MATRIX_RED_BIAS 0x80B8 #define GL_POST_COLOR_MATRIX_GREEN_BIAS 0x80B9 #define GL_POST_COLOR_MATRIX_BLUE_BIAS 0x80BA #define GL_POST_COLOR_MATRIX_ALPHA_BIAS 0x80BB #define GL_COLOR_TABLE 0x80D0 #define GL_POST_CONVOLUTION_COLOR_TABLE 0x80D1 #define GL_POST_COLOR_MATRIX_COLOR_TABLE 0x80D2 #define GL_PROXY_COLOR_TABLE 0x80D3 #define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE 0x80D4 #define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE 0x80D5 #define GL_COLOR_TABLE_SCALE 0x80D6 #define GL_COLOR_TABLE_BIAS 0x80D7 #define GL_COLOR_TABLE_FORMAT 0x80D8 #define GL_COLOR_TABLE_WIDTH 0x80D9 #define GL_COLOR_TABLE_RED_SIZE 0x80DA #define GL_COLOR_TABLE_GREEN_SIZE 0x80DB #define GL_COLOR_TABLE_BLUE_SIZE 0x80DC #define GL_COLOR_TABLE_ALPHA_SIZE 0x80DD #define GL_COLOR_TABLE_LUMINANCE_SIZE 0x80DE #define GL_COLOR_TABLE_INTENSITY_SIZE 0x80DF #define GL_CONSTANT_BORDER 0x8151 #define GL_REPLICATE_BORDER 0x8153 #define GL_CONVOLUTION_BORDER_COLOR 0x8154 #endif #ifndef GL_VERSION_1_3 #define GL_TEXTURE0 0x84C0 #define GL_TEXTURE1 0x84C1 #define GL_TEXTURE2 0x84C2 #define GL_TEXTURE3 0x84C3 #define GL_TEXTURE4 0x84C4 #define GL_TEXTURE5 0x84C5 #define GL_TEXTURE6 0x84C6 #define GL_TEXTURE7 0x84C7 #define GL_TEXTURE8 0x84C8 #define GL_TEXTURE9 0x84C9 #define GL_TEXTURE10 0x84CA #define GL_TEXTURE11 0x84CB #define GL_TEXTURE12 0x84CC #define GL_TEXTURE13 0x84CD #define GL_TEXTURE14 0x84CE #define GL_TEXTURE15 0x84CF #define GL_TEXTURE16 0x84D0 #define GL_TEXTURE17 0x84D1 #define GL_TEXTURE18 0x84D2 #define GL_TEXTURE19 0x84D3 #define GL_TEXTURE20 0x84D4 #define GL_TEXTURE21 0x84D5 #define GL_TEXTURE22 0x84D6 #define GL_TEXTURE23 0x84D7 #define GL_TEXTURE24 0x84D8 #define GL_TEXTURE25 0x84D9 #define GL_TEXTURE26 0x84DA #define GL_TEXTURE27 0x84DB #define GL_TEXTURE28 0x84DC #define GL_TEXTURE29 0x84DD #define GL_TEXTURE30 0x84DE #define GL_TEXTURE31 0x84DF #define GL_ACTIVE_TEXTURE 0x84E0 #define GL_MULTISAMPLE 0x809D #define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E #define GL_SAMPLE_ALPHA_TO_ONE 0x809F #define GL_SAMPLE_COVERAGE 0x80A0 #define GL_SAMPLE_BUFFERS 0x80A8 #define GL_SAMPLES 0x80A9 #define GL_SAMPLE_COVERAGE_VALUE 0x80AA #define GL_SAMPLE_COVERAGE_INVERT 0x80AB #define GL_TEXTURE_CUBE_MAP 0x8513 #define GL_TEXTURE_BINDING_CUBE_MAP 0x8514 #define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A #define GL_PROXY_TEXTURE_CUBE_MAP 0x851B #define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C #define GL_COMPRESSED_RGB 0x84ED #define GL_COMPRESSED_RGBA 0x84EE #define GL_TEXTURE_COMPRESSION_HINT 0x84EF #define GL_TEXTURE_COMPRESSED_IMAGE_SIZE 0x86A0 #define GL_TEXTURE_COMPRESSED 0x86A1 #define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 #define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 #define GL_CLAMP_TO_BORDER 0x812D #define GL_CLIENT_ACTIVE_TEXTURE 0x84E1 #define GL_MAX_TEXTURE_UNITS 0x84E2 #define GL_TRANSPOSE_MODELVIEW_MATRIX 0x84E3 #define GL_TRANSPOSE_PROJECTION_MATRIX 0x84E4 #define GL_TRANSPOSE_TEXTURE_MATRIX 0x84E5 #define GL_TRANSPOSE_COLOR_MATRIX 0x84E6 #define GL_MULTISAMPLE_BIT 0x20000000 #define GL_NORMAL_MAP 0x8511 #define GL_REFLECTION_MAP 0x8512 #define GL_COMPRESSED_ALPHA 0x84E9 #define GL_COMPRESSED_LUMINANCE 0x84EA #define GL_COMPRESSED_LUMINANCE_ALPHA 0x84EB #define GL_COMPRESSED_INTENSITY 0x84EC #define GL_COMBINE 0x8570 #define GL_COMBINE_RGB 0x8571 #define GL_COMBINE_ALPHA 0x8572 #define GL_SOURCE0_RGB 0x8580 #define GL_SOURCE1_RGB 0x8581 #define GL_SOURCE2_RGB 0x8582 #define GL_SOURCE0_ALPHA 0x8588 #define GL_SOURCE1_ALPHA 0x8589 #define GL_SOURCE2_ALPHA 0x858A #define GL_OPERAND0_RGB 0x8590 #define GL_OPERAND1_RGB 0x8591 #define GL_OPERAND2_RGB 0x8592 #define GL_OPERAND0_ALPHA 0x8598 #define GL_OPERAND1_ALPHA 0x8599 #define GL_OPERAND2_ALPHA 0x859A #define GL_RGB_SCALE 0x8573 #define GL_ADD_SIGNED 0x8574 #define GL_INTERPOLATE 0x8575 #define GL_SUBTRACT 0x84E7 #define GL_CONSTANT 0x8576 #define GL_PRIMARY_COLOR 0x8577 #define GL_PREVIOUS 0x8578 #define GL_DOT3_RGB 0x86AE #define GL_DOT3_RGBA 0x86AF #endif #ifndef GL_VERSION_1_4 #define GL_BLEND_DST_RGB 0x80C8 #define GL_BLEND_SRC_RGB 0x80C9 #define GL_BLEND_DST_ALPHA 0x80CA #define GL_BLEND_SRC_ALPHA 0x80CB #define GL_POINT_FADE_THRESHOLD_SIZE 0x8128 #define GL_DEPTH_COMPONENT16 0x81A5 #define GL_DEPTH_COMPONENT24 0x81A6 #define GL_DEPTH_COMPONENT32 0x81A7 #define GL_MIRRORED_REPEAT 0x8370 #define GL_MAX_TEXTURE_LOD_BIAS 0x84FD #define GL_TEXTURE_LOD_BIAS 0x8501 #define GL_INCR_WRAP 0x8507 #define GL_DECR_WRAP 0x8508 #define GL_TEXTURE_DEPTH_SIZE 0x884A #define GL_TEXTURE_COMPARE_MODE 0x884C #define GL_TEXTURE_COMPARE_FUNC 0x884D #define GL_POINT_SIZE_MIN 0x8126 #define GL_POINT_SIZE_MAX 0x8127 #define GL_POINT_DISTANCE_ATTENUATION 0x8129 #define GL_GENERATE_MIPMAP 0x8191 #define GL_GENERATE_MIPMAP_HINT 0x8192 #define GL_FOG_COORDINATE_SOURCE 0x8450 #define GL_FOG_COORDINATE 0x8451 #define GL_FRAGMENT_DEPTH 0x8452 #define GL_CURRENT_FOG_COORDINATE 0x8453 #define GL_FOG_COORDINATE_ARRAY_TYPE 0x8454 #define GL_FOG_COORDINATE_ARRAY_STRIDE 0x8455 #define GL_FOG_COORDINATE_ARRAY_POINTER 0x8456 #define GL_FOG_COORDINATE_ARRAY 0x8457 #define GL_COLOR_SUM 0x8458 #define GL_CURRENT_SECONDARY_COLOR 0x8459 #define GL_SECONDARY_COLOR_ARRAY_SIZE 0x845A #define GL_SECONDARY_COLOR_ARRAY_TYPE 0x845B #define GL_SECONDARY_COLOR_ARRAY_STRIDE 0x845C #define GL_SECONDARY_COLOR_ARRAY_POINTER 0x845D #define GL_SECONDARY_COLOR_ARRAY 0x845E #define GL_TEXTURE_FILTER_CONTROL 0x8500 #define GL_DEPTH_TEXTURE_MODE 0x884B #define GL_COMPARE_R_TO_TEXTURE 0x884E #endif #ifndef GL_VERSION_1_5 #define GL_BUFFER_SIZE 0x8764 #define GL_BUFFER_USAGE 0x8765 #define GL_QUERY_COUNTER_BITS 0x8864 #define GL_CURRENT_QUERY 0x8865 #define GL_QUERY_RESULT 0x8866 #define GL_QUERY_RESULT_AVAILABLE 0x8867 #define GL_ARRAY_BUFFER 0x8892 #define GL_ELEMENT_ARRAY_BUFFER 0x8893 #define GL_ARRAY_BUFFER_BINDING 0x8894 #define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895 #define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F #define GL_READ_ONLY 0x88B8 #define GL_WRITE_ONLY 0x88B9 #define GL_READ_WRITE 0x88BA #define GL_BUFFER_ACCESS 0x88BB #define GL_BUFFER_MAPPED 0x88BC #define GL_BUFFER_MAP_POINTER 0x88BD #define GL_STREAM_DRAW 0x88E0 #define GL_STREAM_READ 0x88E1 #define GL_STREAM_COPY 0x88E2 #define GL_STATIC_DRAW 0x88E4 #define GL_STATIC_READ 0x88E5 #define GL_STATIC_COPY 0x88E6 #define GL_DYNAMIC_DRAW 0x88E8 #define GL_DYNAMIC_READ 0x88E9 #define GL_DYNAMIC_COPY 0x88EA #define GL_SAMPLES_PASSED 0x8914 #define GL_SRC1_ALPHA 0x8589 #define GL_VERTEX_ARRAY_BUFFER_BINDING 0x8896 #define GL_NORMAL_ARRAY_BUFFER_BINDING 0x8897 #define GL_COLOR_ARRAY_BUFFER_BINDING 0x8898 #define GL_INDEX_ARRAY_BUFFER_BINDING 0x8899 #define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING 0x889A #define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING 0x889B #define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING 0x889C #define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING 0x889D #define GL_WEIGHT_ARRAY_BUFFER_BINDING 0x889E #define GL_FOG_COORD_SRC 0x8450 #define GL_FOG_COORD 0x8451 #define GL_CURRENT_FOG_COORD 0x8453 #define GL_FOG_COORD_ARRAY_TYPE 0x8454 #define GL_FOG_COORD_ARRAY_STRIDE 0x8455 #define GL_FOG_COORD_ARRAY_POINTER 0x8456 #define GL_FOG_COORD_ARRAY 0x8457 #define GL_FOG_COORD_ARRAY_BUFFER_BINDING 0x889D #define GL_SRC0_RGB 0x8580 #define GL_SRC1_RGB 0x8581 #define GL_SRC2_RGB 0x8582 #define GL_SRC0_ALPHA 0x8588 #define GL_SRC2_ALPHA 0x858A #endif #ifndef GL_VERSION_2_0 #define GL_BLEND_EQUATION_RGB 0x8009 #define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622 #define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623 #define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624 #define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625 #define GL_CURRENT_VERTEX_ATTRIB 0x8626 #define GL_VERTEX_PROGRAM_POINT_SIZE 0x8642 #define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645 #define GL_STENCIL_BACK_FUNC 0x8800 #define GL_STENCIL_BACK_FAIL 0x8801 #define GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802 #define GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803 #define GL_MAX_DRAW_BUFFERS 0x8824 #define GL_DRAW_BUFFER0 0x8825 #define GL_DRAW_BUFFER1 0x8826 #define GL_DRAW_BUFFER2 0x8827 #define GL_DRAW_BUFFER3 0x8828 #define GL_DRAW_BUFFER4 0x8829 #define GL_DRAW_BUFFER5 0x882A #define GL_DRAW_BUFFER6 0x882B #define GL_DRAW_BUFFER7 0x882C #define GL_DRAW_BUFFER8 0x882D #define GL_DRAW_BUFFER9 0x882E #define GL_DRAW_BUFFER10 0x882F #define GL_DRAW_BUFFER11 0x8830 #define GL_DRAW_BUFFER12 0x8831 #define GL_DRAW_BUFFER13 0x8832 #define GL_DRAW_BUFFER14 0x8833 #define GL_DRAW_BUFFER15 0x8834 #define GL_BLEND_EQUATION_ALPHA 0x883D #define GL_MAX_VERTEX_ATTRIBS 0x8869 #define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A #define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872 #define GL_FRAGMENT_SHADER 0x8B30 #define GL_VERTEX_SHADER 0x8B31 #define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS 0x8B49 #define GL_MAX_VERTEX_UNIFORM_COMPONENTS 0x8B4A #define GL_MAX_VARYING_FLOATS 0x8B4B #define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C #define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D #define GL_SHADER_TYPE 0x8B4F #define GL_FLOAT_VEC2 0x8B50 #define GL_FLOAT_VEC3 0x8B51 #define GL_FLOAT_VEC4 0x8B52 #define GL_INT_VEC2 0x8B53 #define GL_INT_VEC3 0x8B54 #define GL_INT_VEC4 0x8B55 #define GL_BOOL 0x8B56 #define GL_BOOL_VEC2 0x8B57 #define GL_BOOL_VEC3 0x8B58 #define GL_BOOL_VEC4 0x8B59 #define GL_FLOAT_MAT2 0x8B5A #define GL_FLOAT_MAT3 0x8B5B #define GL_FLOAT_MAT4 0x8B5C #define GL_SAMPLER_1D 0x8B5D #define GL_SAMPLER_2D 0x8B5E #define GL_SAMPLER_3D 0x8B5F #define GL_SAMPLER_CUBE 0x8B60 #define GL_SAMPLER_1D_SHADOW 0x8B61 #define GL_SAMPLER_2D_SHADOW 0x8B62 #define GL_DELETE_STATUS 0x8B80 #define GL_COMPILE_STATUS 0x8B81 #define GL_LINK_STATUS 0x8B82 #define GL_VALIDATE_STATUS 0x8B83 #define GL_INFO_LOG_LENGTH 0x8B84 #define GL_ATTACHED_SHADERS 0x8B85 #define GL_ACTIVE_UNIFORMS 0x8B86 #define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87 #define GL_SHADER_SOURCE_LENGTH 0x8B88 #define GL_ACTIVE_ATTRIBUTES 0x8B89 #define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A #define GL_FRAGMENT_SHADER_DERIVATIVE_HINT 0x8B8B #define GL_SHADING_LANGUAGE_VERSION 0x8B8C #define GL_CURRENT_PROGRAM 0x8B8D #define GL_POINT_SPRITE_COORD_ORIGIN 0x8CA0 #define GL_LOWER_LEFT 0x8CA1 #define GL_UPPER_LEFT 0x8CA2 #define GL_STENCIL_BACK_REF 0x8CA3 #define GL_STENCIL_BACK_VALUE_MASK 0x8CA4 #define GL_STENCIL_BACK_WRITEMASK 0x8CA5 #define GL_VERTEX_PROGRAM_TWO_SIDE 0x8643 #define GL_POINT_SPRITE 0x8861 #define GL_COORD_REPLACE 0x8862 #define GL_MAX_TEXTURE_COORDS 0x8871 #endif #ifndef GL_VERSION_2_1 #define GL_PIXEL_PACK_BUFFER 0x88EB #define GL_PIXEL_UNPACK_BUFFER 0x88EC #define GL_PIXEL_PACK_BUFFER_BINDING 0x88ED #define GL_PIXEL_UNPACK_BUFFER_BINDING 0x88EF #define GL_FLOAT_MAT2x3 0x8B65 #define GL_FLOAT_MAT2x4 0x8B66 #define GL_FLOAT_MAT3x2 0x8B67 #define GL_FLOAT_MAT3x4 0x8B68 #define GL_FLOAT_MAT4x2 0x8B69 #define GL_FLOAT_MAT4x3 0x8B6A #define GL_SRGB 0x8C40 #define GL_SRGB8 0x8C41 #define GL_SRGB_ALPHA 0x8C42 #define GL_SRGB8_ALPHA8 0x8C43 #define GL_COMPRESSED_SRGB 0x8C48 #define GL_COMPRESSED_SRGB_ALPHA 0x8C49 #define GL_CURRENT_RASTER_SECONDARY_COLOR 0x845F #define GL_SLUMINANCE_ALPHA 0x8C44 #define GL_SLUMINANCE8_ALPHA8 0x8C45 #define GL_SLUMINANCE 0x8C46 #define GL_SLUMINANCE8 0x8C47 #define GL_COMPRESSED_SLUMINANCE 0x8C4A #define GL_COMPRESSED_SLUMINANCE_ALPHA 0x8C4B #endif #ifndef GL_VERSION_3_0 #define GL_COMPARE_REF_TO_TEXTURE 0x884E #define GL_CLIP_DISTANCE0 0x3000 #define GL_CLIP_DISTANCE1 0x3001 #define GL_CLIP_DISTANCE2 0x3002 #define GL_CLIP_DISTANCE3 0x3003 #define GL_CLIP_DISTANCE4 0x3004 #define GL_CLIP_DISTANCE5 0x3005 #define GL_CLIP_DISTANCE6 0x3006 #define GL_CLIP_DISTANCE7 0x3007 #define GL_MAX_CLIP_DISTANCES 0x0D32 #define GL_MAJOR_VERSION 0x821B #define GL_MINOR_VERSION 0x821C #define GL_NUM_EXTENSIONS 0x821D #define GL_CONTEXT_FLAGS 0x821E #define GL_COMPRESSED_RED 0x8225 #define GL_COMPRESSED_RG 0x8226 #define GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT 0x00000001 #define GL_RGBA32F 0x8814 #define GL_RGB32F 0x8815 #define GL_RGBA16F 0x881A #define GL_RGB16F 0x881B #define GL_VERTEX_ATTRIB_ARRAY_INTEGER 0x88FD #define GL_MAX_ARRAY_TEXTURE_LAYERS 0x88FF #define GL_MIN_PROGRAM_TEXEL_OFFSET 0x8904 #define GL_MAX_PROGRAM_TEXEL_OFFSET 0x8905 #define GL_CLAMP_READ_COLOR 0x891C #define GL_FIXED_ONLY 0x891D #define GL_MAX_VARYING_COMPONENTS 0x8B4B #define GL_TEXTURE_1D_ARRAY 0x8C18 #define GL_PROXY_TEXTURE_1D_ARRAY 0x8C19 #define GL_TEXTURE_2D_ARRAY 0x8C1A #define GL_PROXY_TEXTURE_2D_ARRAY 0x8C1B #define GL_TEXTURE_BINDING_1D_ARRAY 0x8C1C #define GL_TEXTURE_BINDING_2D_ARRAY 0x8C1D #define GL_R11F_G11F_B10F 0x8C3A #define GL_UNSIGNED_INT_10F_11F_11F_REV 0x8C3B #define GL_RGB9_E5 0x8C3D #define GL_UNSIGNED_INT_5_9_9_9_REV 0x8C3E #define GL_TEXTURE_SHARED_SIZE 0x8C3F #define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH 0x8C76 #define GL_TRANSFORM_FEEDBACK_BUFFER_MODE 0x8C7F #define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS 0x8C80 #define GL_TRANSFORM_FEEDBACK_VARYINGS 0x8C83 #define GL_TRANSFORM_FEEDBACK_BUFFER_START 0x8C84 #define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE 0x8C85 #define GL_PRIMITIVES_GENERATED 0x8C87 #define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN 0x8C88 #define GL_RASTERIZER_DISCARD 0x8C89 #define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS 0x8C8A #define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS 0x8C8B #define GL_INTERLEAVED_ATTRIBS 0x8C8C #define GL_SEPARATE_ATTRIBS 0x8C8D #define GL_TRANSFORM_FEEDBACK_BUFFER 0x8C8E #define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING 0x8C8F #define GL_RGBA32UI 0x8D70 #define GL_RGB32UI 0x8D71 #define GL_RGBA16UI 0x8D76 #define GL_RGB16UI 0x8D77 #define GL_RGBA8UI 0x8D7C #define GL_RGB8UI 0x8D7D #define GL_RGBA32I 0x8D82 #define GL_RGB32I 0x8D83 #define GL_RGBA16I 0x8D88 #define GL_RGB16I 0x8D89 #define GL_RGBA8I 0x8D8E #define GL_RGB8I 0x8D8F #define GL_RED_INTEGER 0x8D94 #define GL_GREEN_INTEGER 0x8D95 #define GL_BLUE_INTEGER 0x8D96 #define GL_RGB_INTEGER 0x8D98 #define GL_RGBA_INTEGER 0x8D99 #define GL_BGR_INTEGER 0x8D9A #define GL_BGRA_INTEGER 0x8D9B #define GL_SAMPLER_1D_ARRAY 0x8DC0 #define GL_SAMPLER_2D_ARRAY 0x8DC1 #define GL_SAMPLER_1D_ARRAY_SHADOW 0x8DC3 #define GL_SAMPLER_2D_ARRAY_SHADOW 0x8DC4 #define GL_SAMPLER_CUBE_SHADOW 0x8DC5 #define GL_UNSIGNED_INT_VEC2 0x8DC6 #define GL_UNSIGNED_INT_VEC3 0x8DC7 #define GL_UNSIGNED_INT_VEC4 0x8DC8 #define GL_INT_SAMPLER_1D 0x8DC9 #define GL_INT_SAMPLER_2D 0x8DCA #define GL_INT_SAMPLER_3D 0x8DCB #define GL_INT_SAMPLER_CUBE 0x8DCC #define GL_INT_SAMPLER_1D_ARRAY 0x8DCE #define GL_INT_SAMPLER_2D_ARRAY 0x8DCF #define GL_UNSIGNED_INT_SAMPLER_1D 0x8DD1 #define GL_UNSIGNED_INT_SAMPLER_2D 0x8DD2 #define GL_UNSIGNED_INT_SAMPLER_3D 0x8DD3 #define GL_UNSIGNED_INT_SAMPLER_CUBE 0x8DD4 #define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY 0x8DD6 #define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY 0x8DD7 #define GL_QUERY_WAIT 0x8E13 #define GL_QUERY_NO_WAIT 0x8E14 #define GL_QUERY_BY_REGION_WAIT 0x8E15 #define GL_QUERY_BY_REGION_NO_WAIT 0x8E16 #define GL_BUFFER_ACCESS_FLAGS 0x911F #define GL_BUFFER_MAP_LENGTH 0x9120 #define GL_BUFFER_MAP_OFFSET 0x9121 /* Reuse tokens from ARB_depth_buffer_float */ /* reuse GL_DEPTH_COMPONENT32F */ /* reuse GL_DEPTH32F_STENCIL8 */ /* reuse GL_FLOAT_32_UNSIGNED_INT_24_8_REV */ /* Reuse tokens from ARB_framebuffer_object */ /* reuse GL_INVALID_FRAMEBUFFER_OPERATION */ /* reuse GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING */ /* reuse GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE */ /* reuse GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE */ /* reuse GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE */ /* reuse GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE */ /* reuse GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE */ /* reuse GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE */ /* reuse GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE */ /* reuse GL_FRAMEBUFFER_DEFAULT */ /* reuse GL_FRAMEBUFFER_UNDEFINED */ /* reuse GL_DEPTH_STENCIL_ATTACHMENT */ /* reuse GL_INDEX */ /* reuse GL_MAX_RENDERBUFFER_SIZE */ /* reuse GL_DEPTH_STENCIL */ /* reuse GL_UNSIGNED_INT_24_8 */ /* reuse GL_DEPTH24_STENCIL8 */ /* reuse GL_TEXTURE_STENCIL_SIZE */ /* reuse GL_TEXTURE_RED_TYPE */ /* reuse GL_TEXTURE_GREEN_TYPE */ /* reuse GL_TEXTURE_BLUE_TYPE */ /* reuse GL_TEXTURE_ALPHA_TYPE */ /* reuse GL_TEXTURE_DEPTH_TYPE */ /* reuse GL_UNSIGNED_NORMALIZED */ /* reuse GL_FRAMEBUFFER_BINDING */ /* reuse GL_DRAW_FRAMEBUFFER_BINDING */ /* reuse GL_RENDERBUFFER_BINDING */ /* reuse GL_READ_FRAMEBUFFER */ /* reuse GL_DRAW_FRAMEBUFFER */ /* reuse GL_READ_FRAMEBUFFER_BINDING */ /* reuse GL_RENDERBUFFER_SAMPLES */ /* reuse GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE */ /* reuse GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME */ /* reuse GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL */ /* reuse GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE */ /* reuse GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER */ /* reuse GL_FRAMEBUFFER_COMPLETE */ /* reuse GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT */ /* reuse GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT */ /* reuse GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER */ /* reuse GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER */ /* reuse GL_FRAMEBUFFER_UNSUPPORTED */ /* reuse GL_MAX_COLOR_ATTACHMENTS */ /* reuse GL_COLOR_ATTACHMENT0 */ /* reuse GL_COLOR_ATTACHMENT1 */ /* reuse GL_COLOR_ATTACHMENT2 */ /* reuse GL_COLOR_ATTACHMENT3 */ /* reuse GL_COLOR_ATTACHMENT4 */ /* reuse GL_COLOR_ATTACHMENT5 */ /* reuse GL_COLOR_ATTACHMENT6 */ /* reuse GL_COLOR_ATTACHMENT7 */ /* reuse GL_COLOR_ATTACHMENT8 */ /* reuse GL_COLOR_ATTACHMENT9 */ /* reuse GL_COLOR_ATTACHMENT10 */ /* reuse GL_COLOR_ATTACHMENT11 */ /* reuse GL_COLOR_ATTACHMENT12 */ /* reuse GL_COLOR_ATTACHMENT13 */ /* reuse GL_COLOR_ATTACHMENT14 */ /* reuse GL_COLOR_ATTACHMENT15 */ /* reuse GL_DEPTH_ATTACHMENT */ /* reuse GL_STENCIL_ATTACHMENT */ /* reuse GL_FRAMEBUFFER */ /* reuse GL_RENDERBUFFER */ /* reuse GL_RENDERBUFFER_WIDTH */ /* reuse GL_RENDERBUFFER_HEIGHT */ /* reuse GL_RENDERBUFFER_INTERNAL_FORMAT */ /* reuse GL_STENCIL_INDEX1 */ /* reuse GL_STENCIL_INDEX4 */ /* reuse GL_STENCIL_INDEX8 */ /* reuse GL_STENCIL_INDEX16 */ /* reuse GL_RENDERBUFFER_RED_SIZE */ /* reuse GL_RENDERBUFFER_GREEN_SIZE */ /* reuse GL_RENDERBUFFER_BLUE_SIZE */ /* reuse GL_RENDERBUFFER_ALPHA_SIZE */ /* reuse GL_RENDERBUFFER_DEPTH_SIZE */ /* reuse GL_RENDERBUFFER_STENCIL_SIZE */ /* reuse GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE */ /* reuse GL_MAX_SAMPLES */ /* Reuse tokens from ARB_framebuffer_sRGB */ /* reuse GL_FRAMEBUFFER_SRGB */ /* Reuse tokens from ARB_half_float_vertex */ /* reuse GL_HALF_FLOAT */ /* Reuse tokens from ARB_map_buffer_range */ /* reuse GL_MAP_READ_BIT */ /* reuse GL_MAP_WRITE_BIT */ /* reuse GL_MAP_INVALIDATE_RANGE_BIT */ /* reuse GL_MAP_INVALIDATE_BUFFER_BIT */ /* reuse GL_MAP_FLUSH_EXPLICIT_BIT */ /* reuse GL_MAP_UNSYNCHRONIZED_BIT */ /* Reuse tokens from ARB_texture_compression_rgtc */ /* reuse GL_COMPRESSED_RED_RGTC1 */ /* reuse GL_COMPRESSED_SIGNED_RED_RGTC1 */ /* reuse GL_COMPRESSED_RG_RGTC2 */ /* reuse GL_COMPRESSED_SIGNED_RG_RGTC2 */ /* Reuse tokens from ARB_texture_rg */ /* reuse GL_RG */ /* reuse GL_RG_INTEGER */ /* reuse GL_R8 */ /* reuse GL_R16 */ /* reuse GL_RG8 */ /* reuse GL_RG16 */ /* reuse GL_R16F */ /* reuse GL_R32F */ /* reuse GL_RG16F */ /* reuse GL_RG32F */ /* reuse GL_R8I */ /* reuse GL_R8UI */ /* reuse GL_R16I */ /* reuse GL_R16UI */ /* reuse GL_R32I */ /* reuse GL_R32UI */ /* reuse GL_RG8I */ /* reuse GL_RG8UI */ /* reuse GL_RG16I */ /* reuse GL_RG16UI */ /* reuse GL_RG32I */ /* reuse GL_RG32UI */ /* Reuse tokens from ARB_vertex_array_object */ /* reuse GL_VERTEX_ARRAY_BINDING */ #define GL_CLAMP_VERTEX_COLOR 0x891A #define GL_CLAMP_FRAGMENT_COLOR 0x891B #define GL_ALPHA_INTEGER 0x8D97 /* Reuse tokens from ARB_framebuffer_object */ /* reuse GL_TEXTURE_LUMINANCE_TYPE */ /* reuse GL_TEXTURE_INTENSITY_TYPE */ #endif #ifndef GL_VERSION_3_1 #define GL_SAMPLER_2D_RECT 0x8B63 #define GL_SAMPLER_2D_RECT_SHADOW 0x8B64 #define GL_SAMPLER_BUFFER 0x8DC2 #define GL_INT_SAMPLER_2D_RECT 0x8DCD #define GL_INT_SAMPLER_BUFFER 0x8DD0 #define GL_UNSIGNED_INT_SAMPLER_2D_RECT 0x8DD5 #define GL_UNSIGNED_INT_SAMPLER_BUFFER 0x8DD8 #define GL_TEXTURE_BUFFER 0x8C2A #define GL_MAX_TEXTURE_BUFFER_SIZE 0x8C2B #define GL_TEXTURE_BINDING_BUFFER 0x8C2C #define GL_TEXTURE_BUFFER_DATA_STORE_BINDING 0x8C2D #define GL_TEXTURE_RECTANGLE 0x84F5 #define GL_TEXTURE_BINDING_RECTANGLE 0x84F6 #define GL_PROXY_TEXTURE_RECTANGLE 0x84F7 #define GL_MAX_RECTANGLE_TEXTURE_SIZE 0x84F8 #define GL_RED_SNORM 0x8F90 #define GL_RG_SNORM 0x8F91 #define GL_RGB_SNORM 0x8F92 #define GL_RGBA_SNORM 0x8F93 #define GL_R8_SNORM 0x8F94 #define GL_RG8_SNORM 0x8F95 #define GL_RGB8_SNORM 0x8F96 #define GL_RGBA8_SNORM 0x8F97 #define GL_R16_SNORM 0x8F98 #define GL_RG16_SNORM 0x8F99 #define GL_RGB16_SNORM 0x8F9A #define GL_RGBA16_SNORM 0x8F9B #define GL_SIGNED_NORMALIZED 0x8F9C #define GL_PRIMITIVE_RESTART 0x8F9D #define GL_PRIMITIVE_RESTART_INDEX 0x8F9E /* Reuse tokens from ARB_copy_buffer */ /* reuse GL_COPY_READ_BUFFER */ /* reuse GL_COPY_WRITE_BUFFER */ /* Reuse tokens from ARB_draw_instanced (none) */ /* Reuse tokens from ARB_uniform_buffer_object */ /* reuse GL_UNIFORM_BUFFER */ /* reuse GL_UNIFORM_BUFFER_BINDING */ /* reuse GL_UNIFORM_BUFFER_START */ /* reuse GL_UNIFORM_BUFFER_SIZE */ /* reuse GL_MAX_VERTEX_UNIFORM_BLOCKS */ /* reuse GL_MAX_FRAGMENT_UNIFORM_BLOCKS */ /* reuse GL_MAX_COMBINED_UNIFORM_BLOCKS */ /* reuse GL_MAX_UNIFORM_BUFFER_BINDINGS */ /* reuse GL_MAX_UNIFORM_BLOCK_SIZE */ /* reuse GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS */ /* reuse GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS */ /* reuse GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT */ /* reuse GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH */ /* reuse GL_ACTIVE_UNIFORM_BLOCKS */ /* reuse GL_UNIFORM_TYPE */ /* reuse GL_UNIFORM_SIZE */ /* reuse GL_UNIFORM_NAME_LENGTH */ /* reuse GL_UNIFORM_BLOCK_INDEX */ /* reuse GL_UNIFORM_OFFSET */ /* reuse GL_UNIFORM_ARRAY_STRIDE */ /* reuse GL_UNIFORM_MATRIX_STRIDE */ /* reuse GL_UNIFORM_IS_ROW_MAJOR */ /* reuse GL_UNIFORM_BLOCK_BINDING */ /* reuse GL_UNIFORM_BLOCK_DATA_SIZE */ /* reuse GL_UNIFORM_BLOCK_NAME_LENGTH */ /* reuse GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS */ /* reuse GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES */ /* reuse GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER */ /* reuse GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER */ /* reuse GL_INVALID_INDEX */ #endif #ifndef GL_VERSION_3_2 #define GL_CONTEXT_CORE_PROFILE_BIT 0x00000001 #define GL_CONTEXT_COMPATIBILITY_PROFILE_BIT 0x00000002 #define GL_LINES_ADJACENCY 0x000A #define GL_LINE_STRIP_ADJACENCY 0x000B #define GL_TRIANGLES_ADJACENCY 0x000C #define GL_TRIANGLE_STRIP_ADJACENCY 0x000D #define GL_PROGRAM_POINT_SIZE 0x8642 #define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS 0x8C29 #define GL_FRAMEBUFFER_ATTACHMENT_LAYERED 0x8DA7 #define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS 0x8DA8 #define GL_GEOMETRY_SHADER 0x8DD9 #define GL_GEOMETRY_VERTICES_OUT 0x8916 #define GL_GEOMETRY_INPUT_TYPE 0x8917 #define GL_GEOMETRY_OUTPUT_TYPE 0x8918 #define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS 0x8DDF #define GL_MAX_GEOMETRY_OUTPUT_VERTICES 0x8DE0 #define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS 0x8DE1 #define GL_MAX_VERTEX_OUTPUT_COMPONENTS 0x9122 #define GL_MAX_GEOMETRY_INPUT_COMPONENTS 0x9123 #define GL_MAX_GEOMETRY_OUTPUT_COMPONENTS 0x9124 #define GL_MAX_FRAGMENT_INPUT_COMPONENTS 0x9125 #define GL_CONTEXT_PROFILE_MASK 0x9126 /* reuse GL_MAX_VARYING_COMPONENTS */ /* reuse GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER */ /* Reuse tokens from ARB_depth_clamp */ /* reuse GL_DEPTH_CLAMP */ /* Reuse tokens from ARB_draw_elements_base_vertex (none) */ /* Reuse tokens from ARB_fragment_coord_conventions (none) */ /* Reuse tokens from ARB_provoking_vertex */ /* reuse GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION */ /* reuse GL_FIRST_VERTEX_CONVENTION */ /* reuse GL_LAST_VERTEX_CONVENTION */ /* reuse GL_PROVOKING_VERTEX */ /* Reuse tokens from ARB_seamless_cube_map */ /* reuse GL_TEXTURE_CUBE_MAP_SEAMLESS */ /* Reuse tokens from ARB_sync */ /* reuse GL_MAX_SERVER_WAIT_TIMEOUT */ /* reuse GL_OBJECT_TYPE */ /* reuse GL_SYNC_CONDITION */ /* reuse GL_SYNC_STATUS */ /* reuse GL_SYNC_FLAGS */ /* reuse GL_SYNC_FENCE */ /* reuse GL_SYNC_GPU_COMMANDS_COMPLETE */ /* reuse GL_UNSIGNALED */ /* reuse GL_SIGNALED */ /* reuse GL_ALREADY_SIGNALED */ /* reuse GL_TIMEOUT_EXPIRED */ /* reuse GL_CONDITION_SATISFIED */ /* reuse GL_WAIT_FAILED */ /* reuse GL_TIMEOUT_IGNORED */ /* reuse GL_SYNC_FLUSH_COMMANDS_BIT */ /* reuse GL_TIMEOUT_IGNORED */ /* Reuse tokens from ARB_texture_multisample */ /* reuse GL_SAMPLE_POSITION */ /* reuse GL_SAMPLE_MASK */ /* reuse GL_SAMPLE_MASK_VALUE */ /* reuse GL_MAX_SAMPLE_MASK_WORDS */ /* reuse GL_TEXTURE_2D_MULTISAMPLE */ /* reuse GL_PROXY_TEXTURE_2D_MULTISAMPLE */ /* reuse GL_TEXTURE_2D_MULTISAMPLE_ARRAY */ /* reuse GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY */ /* reuse GL_TEXTURE_BINDING_2D_MULTISAMPLE */ /* reuse GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY */ /* reuse GL_TEXTURE_SAMPLES */ /* reuse GL_TEXTURE_FIXED_SAMPLE_LOCATIONS */ /* reuse GL_SAMPLER_2D_MULTISAMPLE */ /* reuse GL_INT_SAMPLER_2D_MULTISAMPLE */ /* reuse GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE */ /* reuse GL_SAMPLER_2D_MULTISAMPLE_ARRAY */ /* reuse GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY */ /* reuse GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY */ /* reuse GL_MAX_COLOR_TEXTURE_SAMPLES */ /* reuse GL_MAX_DEPTH_TEXTURE_SAMPLES */ /* reuse GL_MAX_INTEGER_SAMPLES */ /* Don't need to reuse tokens from ARB_vertex_array_bgra since they're already in 1.2 core */ #endif #ifndef GL_VERSION_3_3 #define GL_VERTEX_ATTRIB_ARRAY_DIVISOR 0x88FE /* Reuse tokens from ARB_blend_func_extended */ /* reuse GL_SRC1_COLOR */ /* reuse GL_ONE_MINUS_SRC1_COLOR */ /* reuse GL_ONE_MINUS_SRC1_ALPHA */ /* reuse GL_MAX_DUAL_SOURCE_DRAW_BUFFERS */ /* Reuse tokens from ARB_explicit_attrib_location (none) */ /* Reuse tokens from ARB_occlusion_query2 */ /* reuse GL_ANY_SAMPLES_PASSED */ /* Reuse tokens from ARB_sampler_objects */ /* reuse GL_SAMPLER_BINDING */ /* Reuse tokens from ARB_shader_bit_encoding (none) */ /* Reuse tokens from ARB_texture_rgb10_a2ui */ /* reuse GL_RGB10_A2UI */ /* Reuse tokens from ARB_texture_swizzle */ /* reuse GL_TEXTURE_SWIZZLE_R */ /* reuse GL_TEXTURE_SWIZZLE_G */ /* reuse GL_TEXTURE_SWIZZLE_B */ /* reuse GL_TEXTURE_SWIZZLE_A */ /* reuse GL_TEXTURE_SWIZZLE_RGBA */ /* Reuse tokens from ARB_timer_query */ /* reuse GL_TIME_ELAPSED */ /* reuse GL_TIMESTAMP */ /* Reuse tokens from ARB_vertex_type_2_10_10_10_rev */ /* reuse GL_INT_2_10_10_10_REV */ #endif #ifndef GL_VERSION_4_0 #define GL_SAMPLE_SHADING 0x8C36 #define GL_MIN_SAMPLE_SHADING_VALUE 0x8C37 #define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5E #define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5F #define GL_TEXTURE_CUBE_MAP_ARRAY 0x9009 #define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY 0x900A #define GL_PROXY_TEXTURE_CUBE_MAP_ARRAY 0x900B #define GL_SAMPLER_CUBE_MAP_ARRAY 0x900C #define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW 0x900D #define GL_INT_SAMPLER_CUBE_MAP_ARRAY 0x900E #define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY 0x900F /* Reuse tokens from ARB_texture_query_lod (none) */ /* Reuse tokens from ARB_draw_buffers_blend (none) */ /* Reuse tokens from ARB_draw_indirect */ /* reuse GL_DRAW_INDIRECT_BUFFER */ /* reuse GL_DRAW_INDIRECT_BUFFER_BINDING */ /* Reuse tokens from ARB_gpu_shader5 */ /* reuse GL_GEOMETRY_SHADER_INVOCATIONS */ /* reuse GL_MAX_GEOMETRY_SHADER_INVOCATIONS */ /* reuse GL_MIN_FRAGMENT_INTERPOLATION_OFFSET */ /* reuse GL_MAX_FRAGMENT_INTERPOLATION_OFFSET */ /* reuse GL_FRAGMENT_INTERPOLATION_OFFSET_BITS */ /* Reuse tokens from ARB_gpu_shader_fp64 */ /* reuse GL_DOUBLE_VEC2 */ /* reuse GL_DOUBLE_VEC3 */ /* reuse GL_DOUBLE_VEC4 */ /* reuse GL_DOUBLE_MAT2 */ /* reuse GL_DOUBLE_MAT3 */ /* reuse GL_DOUBLE_MAT4 */ /* reuse GL_DOUBLE_MAT2x3 */ /* reuse GL_DOUBLE_MAT2x4 */ /* reuse GL_DOUBLE_MAT3x2 */ /* reuse GL_DOUBLE_MAT3x4 */ /* reuse GL_DOUBLE_MAT4x2 */ /* reuse GL_DOUBLE_MAT4x3 */ /* Reuse tokens from ARB_shader_subroutine */ /* reuse GL_ACTIVE_SUBROUTINES */ /* reuse GL_ACTIVE_SUBROUTINE_UNIFORMS */ /* reuse GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS */ /* reuse GL_ACTIVE_SUBROUTINE_MAX_LENGTH */ /* reuse GL_ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH */ /* reuse GL_MAX_SUBROUTINES */ /* reuse GL_MAX_SUBROUTINE_UNIFORM_LOCATIONS */ /* reuse GL_NUM_COMPATIBLE_SUBROUTINES */ /* reuse GL_COMPATIBLE_SUBROUTINES */ /* Reuse tokens from ARB_tessellation_shader */ /* reuse GL_PATCHES */ /* reuse GL_PATCH_VERTICES */ /* reuse GL_PATCH_DEFAULT_INNER_LEVEL */ /* reuse GL_PATCH_DEFAULT_OUTER_LEVEL */ /* reuse GL_TESS_CONTROL_OUTPUT_VERTICES */ /* reuse GL_TESS_GEN_MODE */ /* reuse GL_TESS_GEN_SPACING */ /* reuse GL_TESS_GEN_VERTEX_ORDER */ /* reuse GL_TESS_GEN_POINT_MODE */ /* reuse GL_ISOLINES */ /* reuse GL_FRACTIONAL_ODD */ /* reuse GL_FRACTIONAL_EVEN */ /* reuse GL_MAX_PATCH_VERTICES */ /* reuse GL_MAX_TESS_GEN_LEVEL */ /* reuse GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS */ /* reuse GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS */ /* reuse GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS */ /* reuse GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS */ /* reuse GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS */ /* reuse GL_MAX_TESS_PATCH_COMPONENTS */ /* reuse GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS */ /* reuse GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS */ /* reuse GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS */ /* reuse GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS */ /* reuse GL_MAX_TESS_CONTROL_INPUT_COMPONENTS */ /* reuse GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS */ /* reuse GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS */ /* reuse GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS */ /* reuse GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER */ /* reuse GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER */ /* reuse GL_TESS_EVALUATION_SHADER */ /* reuse GL_TESS_CONTROL_SHADER */ /* Reuse tokens from ARB_texture_buffer_object_rgb32 (none) */ /* Reuse tokens from ARB_transform_feedback2 */ /* reuse GL_TRANSFORM_FEEDBACK */ /* reuse GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED */ /* reuse GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE */ /* reuse GL_TRANSFORM_FEEDBACK_BINDING */ /* Reuse tokens from ARB_transform_feedback3 */ /* reuse GL_MAX_TRANSFORM_FEEDBACK_BUFFERS */ /* reuse GL_MAX_VERTEX_STREAMS */ #endif #ifndef GL_VERSION_4_1 /* Reuse tokens from ARB_ES2_compatibility */ /* reuse GL_FIXED */ /* reuse GL_IMPLEMENTATION_COLOR_READ_TYPE */ /* reuse GL_IMPLEMENTATION_COLOR_READ_FORMAT */ /* reuse GL_LOW_FLOAT */ /* reuse GL_MEDIUM_FLOAT */ /* reuse GL_HIGH_FLOAT */ /* reuse GL_LOW_INT */ /* reuse GL_MEDIUM_INT */ /* reuse GL_HIGH_INT */ /* reuse GL_SHADER_COMPILER */ /* reuse GL_SHADER_BINARY_FORMATS */ /* reuse GL_NUM_SHADER_BINARY_FORMATS */ /* reuse GL_MAX_VERTEX_UNIFORM_VECTORS */ /* reuse GL_MAX_VARYING_VECTORS */ /* reuse GL_MAX_FRAGMENT_UNIFORM_VECTORS */ /* reuse GL_RGB565 */ /* Reuse tokens from ARB_get_program_binary */ /* reuse GL_PROGRAM_BINARY_RETRIEVABLE_HINT */ /* reuse GL_PROGRAM_BINARY_LENGTH */ /* reuse GL_NUM_PROGRAM_BINARY_FORMATS */ /* reuse GL_PROGRAM_BINARY_FORMATS */ /* Reuse tokens from ARB_separate_shader_objects */ /* reuse GL_VERTEX_SHADER_BIT */ /* reuse GL_FRAGMENT_SHADER_BIT */ /* reuse GL_GEOMETRY_SHADER_BIT */ /* reuse GL_TESS_CONTROL_SHADER_BIT */ /* reuse GL_TESS_EVALUATION_SHADER_BIT */ /* reuse GL_ALL_SHADER_BITS */ /* reuse GL_PROGRAM_SEPARABLE */ /* reuse GL_ACTIVE_PROGRAM */ /* reuse GL_PROGRAM_PIPELINE_BINDING */ /* Reuse tokens from ARB_shader_precision (none) */ /* Reuse tokens from ARB_vertex_attrib_64bit - all are in GL 3.0 and 4.0 already */ /* Reuse tokens from ARB_viewport_array - some are in GL 1.1 and ARB_provoking_vertex already */ /* reuse GL_MAX_VIEWPORTS */ /* reuse GL_VIEWPORT_SUBPIXEL_BITS */ /* reuse GL_VIEWPORT_BOUNDS_RANGE */ /* reuse GL_LAYER_PROVOKING_VERTEX */ /* reuse GL_VIEWPORT_INDEX_PROVOKING_VERTEX */ /* reuse GL_UNDEFINED_VERTEX */ #endif #ifndef GL_VERSION_4_2 /* Reuse tokens from ARB_base_instance (none) */ /* Reuse tokens from ARB_shading_language_420pack (none) */ /* Reuse tokens from ARB_transform_feedback_instanced (none) */ /* Reuse tokens from ARB_compressed_texture_pixel_storage */ /* reuse GL_UNPACK_COMPRESSED_BLOCK_WIDTH */ /* reuse GL_UNPACK_COMPRESSED_BLOCK_HEIGHT */ /* reuse GL_UNPACK_COMPRESSED_BLOCK_DEPTH */ /* reuse GL_UNPACK_COMPRESSED_BLOCK_SIZE */ /* reuse GL_PACK_COMPRESSED_BLOCK_WIDTH */ /* reuse GL_PACK_COMPRESSED_BLOCK_HEIGHT */ /* reuse GL_PACK_COMPRESSED_BLOCK_DEPTH */ /* reuse GL_PACK_COMPRESSED_BLOCK_SIZE */ /* Reuse tokens from ARB_conservative_depth (none) */ /* Reuse tokens from ARB_internalformat_query */ /* reuse GL_NUM_SAMPLE_COUNTS */ /* Reuse tokens from ARB_map_buffer_alignment */ /* reuse GL_MIN_MAP_BUFFER_ALIGNMENT */ /* Reuse tokens from ARB_shader_atomic_counters */ /* reuse GL_ATOMIC_COUNTER_BUFFER */ /* reuse GL_ATOMIC_COUNTER_BUFFER_BINDING */ /* reuse GL_ATOMIC_COUNTER_BUFFER_START */ /* reuse GL_ATOMIC_COUNTER_BUFFER_SIZE */ /* reuse GL_ATOMIC_COUNTER_BUFFER_DATA_SIZE */ /* reuse GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTERS */ /* reuse GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTER_INDICES */ /* reuse GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_VERTEX_SHADER */ /* reuse GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_CONTROL_SHADER */ /* reuse GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_EVALUATION_SHADER */ /* reuse GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_GEOMETRY_SHADER */ /* reuse GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_FRAGMENT_SHADER */ /* reuse GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS */ /* reuse GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS */ /* reuse GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS */ /* reuse GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS */ /* reuse GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS */ /* reuse GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS */ /* reuse GL_MAX_VERTEX_ATOMIC_COUNTERS */ /* reuse GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS */ /* reuse GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS */ /* reuse GL_MAX_GEOMETRY_ATOMIC_COUNTERS */ /* reuse GL_MAX_FRAGMENT_ATOMIC_COUNTERS */ /* reuse GL_MAX_COMBINED_ATOMIC_COUNTERS */ /* reuse GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE */ /* reuse GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS */ /* reuse GL_ACTIVE_ATOMIC_COUNTER_BUFFERS */ /* reuse GL_UNIFORM_ATOMIC_COUNTER_BUFFER_INDEX */ /* reuse GL_UNSIGNED_INT_ATOMIC_COUNTER */ /* Reuse tokens from ARB_shader_image_load_store */ /* reuse GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT */ /* reuse GL_ELEMENT_ARRAY_BARRIER_BIT */ /* reuse GL_UNIFORM_BARRIER_BIT */ /* reuse GL_TEXTURE_FETCH_BARRIER_BIT */ /* reuse GL_SHADER_IMAGE_ACCESS_BARRIER_BIT */ /* reuse GL_COMMAND_BARRIER_BIT */ /* reuse GL_PIXEL_BUFFER_BARRIER_BIT */ /* reuse GL_TEXTURE_UPDATE_BARRIER_BIT */ /* reuse GL_BUFFER_UPDATE_BARRIER_BIT */ /* reuse GL_FRAMEBUFFER_BARRIER_BIT */ /* reuse GL_TRANSFORM_FEEDBACK_BARRIER_BIT */ /* reuse GL_ATOMIC_COUNTER_BARRIER_BIT */ /* reuse GL_ALL_BARRIER_BITS */ /* reuse GL_MAX_IMAGE_UNITS */ /* reuse GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS */ /* reuse GL_IMAGE_BINDING_NAME */ /* reuse GL_IMAGE_BINDING_LEVEL */ /* reuse GL_IMAGE_BINDING_LAYERED */ /* reuse GL_IMAGE_BINDING_LAYER */ /* reuse GL_IMAGE_BINDING_ACCESS */ /* reuse GL_IMAGE_1D */ /* reuse GL_IMAGE_2D */ /* reuse GL_IMAGE_3D */ /* reuse GL_IMAGE_2D_RECT */ /* reuse GL_IMAGE_CUBE */ /* reuse GL_IMAGE_BUFFER */ /* reuse GL_IMAGE_1D_ARRAY */ /* reuse GL_IMAGE_2D_ARRAY */ /* reuse GL_IMAGE_CUBE_MAP_ARRAY */ /* reuse GL_IMAGE_2D_MULTISAMPLE */ /* reuse GL_IMAGE_2D_MULTISAMPLE_ARRAY */ /* reuse GL_INT_IMAGE_1D */ /* reuse GL_INT_IMAGE_2D */ /* reuse GL_INT_IMAGE_3D */ /* reuse GL_INT_IMAGE_2D_RECT */ /* reuse GL_INT_IMAGE_CUBE */ /* reuse GL_INT_IMAGE_BUFFER */ /* reuse GL_INT_IMAGE_1D_ARRAY */ /* reuse GL_INT_IMAGE_2D_ARRAY */ /* reuse GL_INT_IMAGE_CUBE_MAP_ARRAY */ /* reuse GL_INT_IMAGE_2D_MULTISAMPLE */ /* reuse GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY */ /* reuse GL_UNSIGNED_INT_IMAGE_1D */ /* reuse GL_UNSIGNED_INT_IMAGE_2D */ /* reuse GL_UNSIGNED_INT_IMAGE_3D */ /* reuse GL_UNSIGNED_INT_IMAGE_2D_RECT */ /* reuse GL_UNSIGNED_INT_IMAGE_CUBE */ /* reuse GL_UNSIGNED_INT_IMAGE_BUFFER */ /* reuse GL_UNSIGNED_INT_IMAGE_1D_ARRAY */ /* reuse GL_UNSIGNED_INT_IMAGE_2D_ARRAY */ /* reuse GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY */ /* reuse GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE */ /* reuse GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY */ /* reuse GL_MAX_IMAGE_SAMPLES */ /* reuse GL_IMAGE_BINDING_FORMAT */ /* reuse GL_IMAGE_FORMAT_COMPATIBILITY_TYPE */ /* reuse GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE */ /* reuse GL_IMAGE_FORMAT_COMPATIBILITY_BY_CLASS */ /* reuse GL_MAX_VERTEX_IMAGE_UNIFORMS */ /* reuse GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS */ /* reuse GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS */ /* reuse GL_MAX_GEOMETRY_IMAGE_UNIFORMS */ /* reuse GL_MAX_FRAGMENT_IMAGE_UNIFORMS */ /* reuse GL_MAX_COMBINED_IMAGE_UNIFORMS */ /* Reuse tokens from ARB_shading_language_packing (none) */ /* Reuse tokens from ARB_texture_storage */ /* reuse GL_TEXTURE_IMMUTABLE_FORMAT */ #endif #ifndef GL_VERSION_4_3 #define GL_NUM_SHADING_LANGUAGE_VERSIONS 0x82E9 #define GL_VERTEX_ATTRIB_ARRAY_LONG 0x874E /* Reuse tokens from ARB_arrays_of_arrays (none, GLSL only) */ /* Reuse tokens from ARB_fragment_layer_viewport (none, GLSL only) */ /* Reuse tokens from ARB_shader_image_size (none, GLSL only) */ /* Reuse tokens from ARB_ES3_compatibility */ /* reuse GL_COMPRESSED_RGB8_ETC2 */ /* reuse GL_COMPRESSED_SRGB8_ETC2 */ /* reuse GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 */ /* reuse GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 */ /* reuse GL_COMPRESSED_RGBA8_ETC2_EAC */ /* reuse GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC */ /* reuse GL_COMPRESSED_R11_EAC */ /* reuse GL_COMPRESSED_SIGNED_R11_EAC */ /* reuse GL_COMPRESSED_RG11_EAC */ /* reuse GL_COMPRESSED_SIGNED_RG11_EAC */ /* reuse GL_PRIMITIVE_RESTART_FIXED_INDEX */ /* reuse GL_ANY_SAMPLES_PASSED_CONSERVATIVE */ /* reuse GL_MAX_ELEMENT_INDEX */ /* Reuse tokens from ARB_clear_buffer_object (none) */ /* Reuse tokens from ARB_compute_shader */ /* reuse GL_COMPUTE_SHADER */ /* reuse GL_MAX_COMPUTE_UNIFORM_BLOCKS */ /* reuse GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS */ /* reuse GL_MAX_COMPUTE_IMAGE_UNIFORMS */ /* reuse GL_MAX_COMPUTE_SHARED_MEMORY_SIZE */ /* reuse GL_MAX_COMPUTE_UNIFORM_COMPONENTS */ /* reuse GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS */ /* reuse GL_MAX_COMPUTE_ATOMIC_COUNTERS */ /* reuse GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS */ /* reuse GL_MAX_COMPUTE_LOCAL_INVOCATIONS */ /* reuse GL_MAX_COMPUTE_WORK_GROUP_COUNT */ /* reuse GL_MAX_COMPUTE_WORK_GROUP_SIZE */ /* reuse GL_COMPUTE_LOCAL_WORK_SIZE */ /* reuse GL_UNIFORM_BLOCK_REFERENCED_BY_COMPUTE_SHADER */ /* reuse GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_COMPUTE_SHADER */ /* reuse GL_DISPATCH_INDIRECT_BUFFER */ /* reuse GL_DISPATCH_INDIRECT_BUFFER_BINDING */ /* Reuse tokens from ARB_copy_image (none) */ /* Reuse tokens from KHR_debug */ /* reuse GL_DEBUG_OUTPUT_SYNCHRONOUS */ /* reuse GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH */ /* reuse GL_DEBUG_CALLBACK_FUNCTION */ /* reuse GL_DEBUG_CALLBACK_USER_PARAM */ /* reuse GL_DEBUG_SOURCE_API */ /* reuse GL_DEBUG_SOURCE_WINDOW_SYSTEM */ /* reuse GL_DEBUG_SOURCE_SHADER_COMPILER */ /* reuse GL_DEBUG_SOURCE_THIRD_PARTY */ /* reuse GL_DEBUG_SOURCE_APPLICATION */ /* reuse GL_DEBUG_SOURCE_OTHER */ /* reuse GL_DEBUG_TYPE_ERROR */ /* reuse GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR */ /* reuse GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR */ /* reuse GL_DEBUG_TYPE_PORTABILITY */ /* reuse GL_DEBUG_TYPE_PERFORMANCE */ /* reuse GL_DEBUG_TYPE_OTHER */ /* reuse GL_MAX_DEBUG_MESSAGE_LENGTH */ /* reuse GL_MAX_DEBUG_LOGGED_MESSAGES */ /* reuse GL_DEBUG_LOGGED_MESSAGES */ /* reuse GL_DEBUG_SEVERITY_HIGH */ /* reuse GL_DEBUG_SEVERITY_MEDIUM */ /* reuse GL_DEBUG_SEVERITY_LOW */ /* reuse GL_DEBUG_TYPE_MARKER */ /* reuse GL_DEBUG_TYPE_PUSH_GROUP */ /* reuse GL_DEBUG_TYPE_POP_GROUP */ /* reuse GL_DEBUG_SEVERITY_NOTIFICATION */ /* reuse GL_MAX_DEBUG_GROUP_STACK_DEPTH */ /* reuse GL_DEBUG_GROUP_STACK_DEPTH */ /* reuse GL_BUFFER */ /* reuse GL_SHADER */ /* reuse GL_PROGRAM */ /* reuse GL_QUERY */ /* reuse GL_PROGRAM_PIPELINE */ /* reuse GL_SAMPLER */ /* reuse GL_DISPLAY_LIST */ /* reuse GL_MAX_LABEL_LENGTH */ /* reuse GL_DEBUG_OUTPUT */ /* reuse GL_CONTEXT_FLAG_DEBUG_BIT */ /* reuse GL_STACK_UNDERFLOW */ /* reuse GL_STACK_OVERFLOW */ /* Reuse tokens from ARB_explicit_uniform_location */ /* reuse GL_MAX_UNIFORM_LOCATIONS */ /* Reuse tokens from ARB_framebuffer_no_attachments */ /* reuse GL_FRAMEBUFFER_DEFAULT_WIDTH */ /* reuse GL_FRAMEBUFFER_DEFAULT_HEIGHT */ /* reuse GL_FRAMEBUFFER_DEFAULT_LAYERS */ /* reuse GL_FRAMEBUFFER_DEFAULT_SAMPLES */ /* reuse GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS */ /* reuse GL_MAX_FRAMEBUFFER_WIDTH */ /* reuse GL_MAX_FRAMEBUFFER_HEIGHT */ /* reuse GL_MAX_FRAMEBUFFER_LAYERS */ /* reuse GL_MAX_FRAMEBUFFER_SAMPLES */ /* Reuse tokens from ARB_internalformat_query2 */ /* reuse GL_INTERNALFORMAT_SUPPORTED */ /* reuse GL_INTERNALFORMAT_PREFERRED */ /* reuse GL_INTERNALFORMAT_RED_SIZE */ /* reuse GL_INTERNALFORMAT_GREEN_SIZE */ /* reuse GL_INTERNALFORMAT_BLUE_SIZE */ /* reuse GL_INTERNALFORMAT_ALPHA_SIZE */ /* reuse GL_INTERNALFORMAT_DEPTH_SIZE */ /* reuse GL_INTERNALFORMAT_STENCIL_SIZE */ /* reuse GL_INTERNALFORMAT_SHARED_SIZE */ /* reuse GL_INTERNALFORMAT_RED_TYPE */ /* reuse GL_INTERNALFORMAT_GREEN_TYPE */ /* reuse GL_INTERNALFORMAT_BLUE_TYPE */ /* reuse GL_INTERNALFORMAT_ALPHA_TYPE */ /* reuse GL_INTERNALFORMAT_DEPTH_TYPE */ /* reuse GL_INTERNALFORMAT_STENCIL_TYPE */ /* reuse GL_MAX_WIDTH */ /* reuse GL_MAX_HEIGHT */ /* reuse GL_MAX_DEPTH */ /* reuse GL_MAX_LAYERS */ /* reuse GL_MAX_COMBINED_DIMENSIONS */ /* reuse GL_COLOR_COMPONENTS */ /* reuse GL_DEPTH_COMPONENTS */ /* reuse GL_STENCIL_COMPONENTS */ /* reuse GL_COLOR_RENDERABLE */ /* reuse GL_DEPTH_RENDERABLE */ /* reuse GL_STENCIL_RENDERABLE */ /* reuse GL_FRAMEBUFFER_RENDERABLE */ /* reuse GL_FRAMEBUFFER_RENDERABLE_LAYERED */ /* reuse GL_FRAMEBUFFER_BLEND */ /* reuse GL_READ_PIXELS */ /* reuse GL_READ_PIXELS_FORMAT */ /* reuse GL_READ_PIXELS_TYPE */ /* reuse GL_TEXTURE_IMAGE_FORMAT */ /* reuse GL_TEXTURE_IMAGE_TYPE */ /* reuse GL_GET_TEXTURE_IMAGE_FORMAT */ /* reuse GL_GET_TEXTURE_IMAGE_TYPE */ /* reuse GL_MIPMAP */ /* reuse GL_MANUAL_GENERATE_MIPMAP */ /* reuse GL_AUTO_GENERATE_MIPMAP */ /* reuse GL_COLOR_ENCODING */ /* reuse GL_SRGB_READ */ /* reuse GL_SRGB_WRITE */ /* reuse GL_FILTER */ /* reuse GL_VERTEX_TEXTURE */ /* reuse GL_TESS_CONTROL_TEXTURE */ /* reuse GL_TESS_EVALUATION_TEXTURE */ /* reuse GL_GEOMETRY_TEXTURE */ /* reuse GL_FRAGMENT_TEXTURE */ /* reuse GL_COMPUTE_TEXTURE */ /* reuse GL_TEXTURE_SHADOW */ /* reuse GL_TEXTURE_GATHER */ /* reuse GL_TEXTURE_GATHER_SHADOW */ /* reuse GL_SHADER_IMAGE_LOAD */ /* reuse GL_SHADER_IMAGE_STORE */ /* reuse GL_SHADER_IMAGE_ATOMIC */ /* reuse GL_IMAGE_TEXEL_SIZE */ /* reuse GL_IMAGE_COMPATIBILITY_CLASS */ /* reuse GL_IMAGE_PIXEL_FORMAT */ /* reuse GL_IMAGE_PIXEL_TYPE */ /* reuse GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST */ /* reuse GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST */ /* reuse GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE */ /* reuse GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE */ /* reuse GL_TEXTURE_COMPRESSED_BLOCK_WIDTH */ /* reuse GL_TEXTURE_COMPRESSED_BLOCK_HEIGHT */ /* reuse GL_TEXTURE_COMPRESSED_BLOCK_SIZE */ /* reuse GL_CLEAR_BUFFER */ /* reuse GL_TEXTURE_VIEW */ /* reuse GL_VIEW_COMPATIBILITY_CLASS */ /* reuse GL_FULL_SUPPORT */ /* reuse GL_CAVEAT_SUPPORT */ /* reuse GL_IMAGE_CLASS_4_X_32 */ /* reuse GL_IMAGE_CLASS_2_X_32 */ /* reuse GL_IMAGE_CLASS_1_X_32 */ /* reuse GL_IMAGE_CLASS_4_X_16 */ /* reuse GL_IMAGE_CLASS_2_X_16 */ /* reuse GL_IMAGE_CLASS_1_X_16 */ /* reuse GL_IMAGE_CLASS_4_X_8 */ /* reuse GL_IMAGE_CLASS_2_X_8 */ /* reuse GL_IMAGE_CLASS_1_X_8 */ /* reuse GL_IMAGE_CLASS_11_11_10 */ /* reuse GL_IMAGE_CLASS_10_10_10_2 */ /* reuse GL_VIEW_CLASS_128_BITS */ /* reuse GL_VIEW_CLASS_96_BITS */ /* reuse GL_VIEW_CLASS_64_BITS */ /* reuse GL_VIEW_CLASS_48_BITS */ /* reuse GL_VIEW_CLASS_32_BITS */ /* reuse GL_VIEW_CLASS_24_BITS */ /* reuse GL_VIEW_CLASS_16_BITS */ /* reuse GL_VIEW_CLASS_8_BITS */ /* reuse GL_VIEW_CLASS_S3TC_DXT1_RGB */ /* reuse GL_VIEW_CLASS_S3TC_DXT1_RGBA */ /* reuse GL_VIEW_CLASS_S3TC_DXT3_RGBA */ /* reuse GL_VIEW_CLASS_S3TC_DXT5_RGBA */ /* reuse GL_VIEW_CLASS_RGTC1_RED */ /* reuse GL_VIEW_CLASS_RGTC2_RG */ /* reuse GL_VIEW_CLASS_BPTC_UNORM */ /* reuse GL_VIEW_CLASS_BPTC_FLOAT */ /* Reuse tokens from ARB_invalidate_subdata (none) */ /* Reuse tokens from ARB_multi_draw_indirect (none) */ /* Reuse tokens from ARB_program_interface_query */ /* reuse GL_UNIFORM */ /* reuse GL_UNIFORM_BLOCK */ /* reuse GL_PROGRAM_INPUT */ /* reuse GL_PROGRAM_OUTPUT */ /* reuse GL_BUFFER_VARIABLE */ /* reuse GL_SHADER_STORAGE_BLOCK */ /* reuse GL_VERTEX_SUBROUTINE */ /* reuse GL_TESS_CONTROL_SUBROUTINE */ /* reuse GL_TESS_EVALUATION_SUBROUTINE */ /* reuse GL_GEOMETRY_SUBROUTINE */ /* reuse GL_FRAGMENT_SUBROUTINE */ /* reuse GL_COMPUTE_SUBROUTINE */ /* reuse GL_VERTEX_SUBROUTINE_UNIFORM */ /* reuse GL_TESS_CONTROL_SUBROUTINE_UNIFORM */ /* reuse GL_TESS_EVALUATION_SUBROUTINE_UNIFORM */ /* reuse GL_GEOMETRY_SUBROUTINE_UNIFORM */ /* reuse GL_FRAGMENT_SUBROUTINE_UNIFORM */ /* reuse GL_COMPUTE_SUBROUTINE_UNIFORM */ /* reuse GL_TRANSFORM_FEEDBACK_VARYING */ /* reuse GL_ACTIVE_RESOURCES */ /* reuse GL_MAX_NAME_LENGTH */ /* reuse GL_MAX_NUM_ACTIVE_VARIABLES */ /* reuse GL_MAX_NUM_COMPATIBLE_SUBROUTINES */ /* reuse GL_NAME_LENGTH */ /* reuse GL_TYPE */ /* reuse GL_ARRAY_SIZE */ /* reuse GL_OFFSET */ /* reuse GL_BLOCK_INDEX */ /* reuse GL_ARRAY_STRIDE */ /* reuse GL_MATRIX_STRIDE */ /* reuse GL_IS_ROW_MAJOR */ /* reuse GL_ATOMIC_COUNTER_BUFFER_INDEX */ /* reuse GL_BUFFER_BINDING */ /* reuse GL_BUFFER_DATA_SIZE */ /* reuse GL_NUM_ACTIVE_VARIABLES */ /* reuse GL_ACTIVE_VARIABLES */ /* reuse GL_REFERENCED_BY_VERTEX_SHADER */ /* reuse GL_REFERENCED_BY_TESS_CONTROL_SHADER */ /* reuse GL_REFERENCED_BY_TESS_EVALUATION_SHADER */ /* reuse GL_REFERENCED_BY_GEOMETRY_SHADER */ /* reuse GL_REFERENCED_BY_FRAGMENT_SHADER */ /* reuse GL_REFERENCED_BY_COMPUTE_SHADER */ /* reuse GL_TOP_LEVEL_ARRAY_SIZE */ /* reuse GL_TOP_LEVEL_ARRAY_STRIDE */ /* reuse GL_LOCATION */ /* reuse GL_LOCATION_INDEX */ /* reuse GL_IS_PER_PATCH */ /* Reuse tokens from ARB_robust_buffer_access_behavior (none) */ /* Reuse tokens from ARB_shader_storage_buffer_object */ /* reuse GL_SHADER_STORAGE_BUFFER */ /* reuse GL_SHADER_STORAGE_BUFFER_BINDING */ /* reuse GL_SHADER_STORAGE_BUFFER_START */ /* reuse GL_SHADER_STORAGE_BUFFER_SIZE */ /* reuse GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS */ /* reuse GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS */ /* reuse GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS */ /* reuse GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS */ /* reuse GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS */ /* reuse GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS */ /* reuse GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS */ /* reuse GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS */ /* reuse GL_MAX_SHADER_STORAGE_BLOCK_SIZE */ /* reuse GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT */ /* reuse GL_SHADER_STORAGE_BARRIER_BIT */ /* reuse GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES */ /* Reuse tokens from ARB_stencil_texturing */ /* reuse GL_DEPTH_STENCIL_TEXTURE_MODE */ /* Reuse tokens from ARB_texture_buffer_range */ /* reuse GL_TEXTURE_BUFFER_OFFSET */ /* reuse GL_TEXTURE_BUFFER_SIZE */ /* reuse GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT */ /* Reuse tokens from ARB_texture_query_levels (none) */ /* Reuse tokens from ARB_texture_storage_multisample (none) */ /* Reuse tokens from ARB_texture_view */ /* reuse GL_TEXTURE_VIEW_MIN_LEVEL */ /* reuse GL_TEXTURE_VIEW_NUM_LEVELS */ /* reuse GL_TEXTURE_VIEW_MIN_LAYER */ /* reuse GL_TEXTURE_VIEW_NUM_LAYERS */ /* reuse GL_TEXTURE_IMMUTABLE_LEVELS */ /* Reuse tokens from ARB_vertex_attrib_binding */ /* reuse GL_VERTEX_ATTRIB_BINDING */ /* reuse GL_VERTEX_ATTRIB_RELATIVE_OFFSET */ /* reuse GL_VERTEX_BINDING_DIVISOR */ /* reuse GL_VERTEX_BINDING_OFFSET */ /* reuse GL_VERTEX_BINDING_STRIDE */ /* reuse GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET */ /* reuse GL_MAX_VERTEX_ATTRIB_BINDINGS */ #endif #ifndef GL_ARB_multitexture #define GL_TEXTURE0_ARB 0x84C0 #define GL_TEXTURE1_ARB 0x84C1 #define GL_TEXTURE2_ARB 0x84C2 #define GL_TEXTURE3_ARB 0x84C3 #define GL_TEXTURE4_ARB 0x84C4 #define GL_TEXTURE5_ARB 0x84C5 #define GL_TEXTURE6_ARB 0x84C6 #define GL_TEXTURE7_ARB 0x84C7 #define GL_TEXTURE8_ARB 0x84C8 #define GL_TEXTURE9_ARB 0x84C9 #define GL_TEXTURE10_ARB 0x84CA #define GL_TEXTURE11_ARB 0x84CB #define GL_TEXTURE12_ARB 0x84CC #define GL_TEXTURE13_ARB 0x84CD #define GL_TEXTURE14_ARB 0x84CE #define GL_TEXTURE15_ARB 0x84CF #define GL_TEXTURE16_ARB 0x84D0 #define GL_TEXTURE17_ARB 0x84D1 #define GL_TEXTURE18_ARB 0x84D2 #define GL_TEXTURE19_ARB 0x84D3 #define GL_TEXTURE20_ARB 0x84D4 #define GL_TEXTURE21_ARB 0x84D5 #define GL_TEXTURE22_ARB 0x84D6 #define GL_TEXTURE23_ARB 0x84D7 #define GL_TEXTURE24_ARB 0x84D8 #define GL_TEXTURE25_ARB 0x84D9 #define GL_TEXTURE26_ARB 0x84DA #define GL_TEXTURE27_ARB 0x84DB #define GL_TEXTURE28_ARB 0x84DC #define GL_TEXTURE29_ARB 0x84DD #define GL_TEXTURE30_ARB 0x84DE #define GL_TEXTURE31_ARB 0x84DF #define GL_ACTIVE_TEXTURE_ARB 0x84E0 #define GL_CLIENT_ACTIVE_TEXTURE_ARB 0x84E1 #define GL_MAX_TEXTURE_UNITS_ARB 0x84E2 #endif #ifndef GL_ARB_transpose_matrix #define GL_TRANSPOSE_MODELVIEW_MATRIX_ARB 0x84E3 #define GL_TRANSPOSE_PROJECTION_MATRIX_ARB 0x84E4 #define GL_TRANSPOSE_TEXTURE_MATRIX_ARB 0x84E5 #define GL_TRANSPOSE_COLOR_MATRIX_ARB 0x84E6 #endif #ifndef GL_ARB_multisample #define GL_MULTISAMPLE_ARB 0x809D #define GL_SAMPLE_ALPHA_TO_COVERAGE_ARB 0x809E #define GL_SAMPLE_ALPHA_TO_ONE_ARB 0x809F #define GL_SAMPLE_COVERAGE_ARB 0x80A0 #define GL_SAMPLE_BUFFERS_ARB 0x80A8 #define GL_SAMPLES_ARB 0x80A9 #define GL_SAMPLE_COVERAGE_VALUE_ARB 0x80AA #define GL_SAMPLE_COVERAGE_INVERT_ARB 0x80AB #define GL_MULTISAMPLE_BIT_ARB 0x20000000 #endif #ifndef GL_ARB_texture_env_add #endif #ifndef GL_ARB_texture_cube_map #define GL_NORMAL_MAP_ARB 0x8511 #define GL_REFLECTION_MAP_ARB 0x8512 #define GL_TEXTURE_CUBE_MAP_ARB 0x8513 #define GL_TEXTURE_BINDING_CUBE_MAP_ARB 0x8514 #define GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x8515 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x8516 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x8517 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x8518 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x8519 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x851A #define GL_PROXY_TEXTURE_CUBE_MAP_ARB 0x851B #define GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB 0x851C #endif #ifndef GL_ARB_texture_compression #define GL_COMPRESSED_ALPHA_ARB 0x84E9 #define GL_COMPRESSED_LUMINANCE_ARB 0x84EA #define GL_COMPRESSED_LUMINANCE_ALPHA_ARB 0x84EB #define GL_COMPRESSED_INTENSITY_ARB 0x84EC #define GL_COMPRESSED_RGB_ARB 0x84ED #define GL_COMPRESSED_RGBA_ARB 0x84EE #define GL_TEXTURE_COMPRESSION_HINT_ARB 0x84EF #define GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB 0x86A0 #define GL_TEXTURE_COMPRESSED_ARB 0x86A1 #define GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A2 #define GL_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A3 #endif #ifndef GL_ARB_texture_border_clamp #define GL_CLAMP_TO_BORDER_ARB 0x812D #endif #ifndef GL_ARB_point_parameters #define GL_POINT_SIZE_MIN_ARB 0x8126 #define GL_POINT_SIZE_MAX_ARB 0x8127 #define GL_POINT_FADE_THRESHOLD_SIZE_ARB 0x8128 #define GL_POINT_DISTANCE_ATTENUATION_ARB 0x8129 #endif #ifndef GL_ARB_vertex_blend #define GL_MAX_VERTEX_UNITS_ARB 0x86A4 #define GL_ACTIVE_VERTEX_UNITS_ARB 0x86A5 #define GL_WEIGHT_SUM_UNITY_ARB 0x86A6 #define GL_VERTEX_BLEND_ARB 0x86A7 #define GL_CURRENT_WEIGHT_ARB 0x86A8 #define GL_WEIGHT_ARRAY_TYPE_ARB 0x86A9 #define GL_WEIGHT_ARRAY_STRIDE_ARB 0x86AA #define GL_WEIGHT_ARRAY_SIZE_ARB 0x86AB #define GL_WEIGHT_ARRAY_POINTER_ARB 0x86AC #define GL_WEIGHT_ARRAY_ARB 0x86AD #define GL_MODELVIEW0_ARB 0x1700 #define GL_MODELVIEW1_ARB 0x850A #define GL_MODELVIEW2_ARB 0x8722 #define GL_MODELVIEW3_ARB 0x8723 #define GL_MODELVIEW4_ARB 0x8724 #define GL_MODELVIEW5_ARB 0x8725 #define GL_MODELVIEW6_ARB 0x8726 #define GL_MODELVIEW7_ARB 0x8727 #define GL_MODELVIEW8_ARB 0x8728 #define GL_MODELVIEW9_ARB 0x8729 #define GL_MODELVIEW10_ARB 0x872A #define GL_MODELVIEW11_ARB 0x872B #define GL_MODELVIEW12_ARB 0x872C #define GL_MODELVIEW13_ARB 0x872D #define GL_MODELVIEW14_ARB 0x872E #define GL_MODELVIEW15_ARB 0x872F #define GL_MODELVIEW16_ARB 0x8730 #define GL_MODELVIEW17_ARB 0x8731 #define GL_MODELVIEW18_ARB 0x8732 #define GL_MODELVIEW19_ARB 0x8733 #define GL_MODELVIEW20_ARB 0x8734 #define GL_MODELVIEW21_ARB 0x8735 #define GL_MODELVIEW22_ARB 0x8736 #define GL_MODELVIEW23_ARB 0x8737 #define GL_MODELVIEW24_ARB 0x8738 #define GL_MODELVIEW25_ARB 0x8739 #define GL_MODELVIEW26_ARB 0x873A #define GL_MODELVIEW27_ARB 0x873B #define GL_MODELVIEW28_ARB 0x873C #define GL_MODELVIEW29_ARB 0x873D #define GL_MODELVIEW30_ARB 0x873E #define GL_MODELVIEW31_ARB 0x873F #endif #ifndef GL_ARB_matrix_palette #define GL_MATRIX_PALETTE_ARB 0x8840 #define GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB 0x8841 #define GL_MAX_PALETTE_MATRICES_ARB 0x8842 #define GL_CURRENT_PALETTE_MATRIX_ARB 0x8843 #define GL_MATRIX_INDEX_ARRAY_ARB 0x8844 #define GL_CURRENT_MATRIX_INDEX_ARB 0x8845 #define GL_MATRIX_INDEX_ARRAY_SIZE_ARB 0x8846 #define GL_MATRIX_INDEX_ARRAY_TYPE_ARB 0x8847 #define GL_MATRIX_INDEX_ARRAY_STRIDE_ARB 0x8848 #define GL_MATRIX_INDEX_ARRAY_POINTER_ARB 0x8849 #endif #ifndef GL_ARB_texture_env_combine #define GL_COMBINE_ARB 0x8570 #define GL_COMBINE_RGB_ARB 0x8571 #define GL_COMBINE_ALPHA_ARB 0x8572 #define GL_SOURCE0_RGB_ARB 0x8580 #define GL_SOURCE1_RGB_ARB 0x8581 #define GL_SOURCE2_RGB_ARB 0x8582 #define GL_SOURCE0_ALPHA_ARB 0x8588 #define GL_SOURCE1_ALPHA_ARB 0x8589 #define GL_SOURCE2_ALPHA_ARB 0x858A #define GL_OPERAND0_RGB_ARB 0x8590 #define GL_OPERAND1_RGB_ARB 0x8591 #define GL_OPERAND2_RGB_ARB 0x8592 #define GL_OPERAND0_ALPHA_ARB 0x8598 #define GL_OPERAND1_ALPHA_ARB 0x8599 #define GL_OPERAND2_ALPHA_ARB 0x859A #define GL_RGB_SCALE_ARB 0x8573 #define GL_ADD_SIGNED_ARB 0x8574 #define GL_INTERPOLATE_ARB 0x8575 #define GL_SUBTRACT_ARB 0x84E7 #define GL_CONSTANT_ARB 0x8576 #define GL_PRIMARY_COLOR_ARB 0x8577 #define GL_PREVIOUS_ARB 0x8578 #endif #ifndef GL_ARB_texture_env_crossbar #endif #ifndef GL_ARB_texture_env_dot3 #define GL_DOT3_RGB_ARB 0x86AE #define GL_DOT3_RGBA_ARB 0x86AF #endif #ifndef GL_ARB_texture_mirrored_repeat #define GL_MIRRORED_REPEAT_ARB 0x8370 #endif #ifndef GL_ARB_depth_texture #define GL_DEPTH_COMPONENT16_ARB 0x81A5 #define GL_DEPTH_COMPONENT24_ARB 0x81A6 #define GL_DEPTH_COMPONENT32_ARB 0x81A7 #define GL_TEXTURE_DEPTH_SIZE_ARB 0x884A #define GL_DEPTH_TEXTURE_MODE_ARB 0x884B #endif #ifndef GL_ARB_shadow #define GL_TEXTURE_COMPARE_MODE_ARB 0x884C #define GL_TEXTURE_COMPARE_FUNC_ARB 0x884D #define GL_COMPARE_R_TO_TEXTURE_ARB 0x884E #endif #ifndef GL_ARB_shadow_ambient #define GL_TEXTURE_COMPARE_FAIL_VALUE_ARB 0x80BF #endif #ifndef GL_ARB_window_pos #endif #ifndef GL_ARB_vertex_program #define GL_COLOR_SUM_ARB 0x8458 #define GL_VERTEX_PROGRAM_ARB 0x8620 #define GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB 0x8622 #define GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB 0x8623 #define GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB 0x8624 #define GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB 0x8625 #define GL_CURRENT_VERTEX_ATTRIB_ARB 0x8626 #define GL_PROGRAM_LENGTH_ARB 0x8627 #define GL_PROGRAM_STRING_ARB 0x8628 #define GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB 0x862E #define GL_MAX_PROGRAM_MATRICES_ARB 0x862F #define GL_CURRENT_MATRIX_STACK_DEPTH_ARB 0x8640 #define GL_CURRENT_MATRIX_ARB 0x8641 #define GL_VERTEX_PROGRAM_POINT_SIZE_ARB 0x8642 #define GL_VERTEX_PROGRAM_TWO_SIDE_ARB 0x8643 #define GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB 0x8645 #define GL_PROGRAM_ERROR_POSITION_ARB 0x864B #define GL_PROGRAM_BINDING_ARB 0x8677 #define GL_MAX_VERTEX_ATTRIBS_ARB 0x8869 #define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB 0x886A #define GL_PROGRAM_ERROR_STRING_ARB 0x8874 #define GL_PROGRAM_FORMAT_ASCII_ARB 0x8875 #define GL_PROGRAM_FORMAT_ARB 0x8876 #define GL_PROGRAM_INSTRUCTIONS_ARB 0x88A0 #define GL_MAX_PROGRAM_INSTRUCTIONS_ARB 0x88A1 #define GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A2 #define GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A3 #define GL_PROGRAM_TEMPORARIES_ARB 0x88A4 #define GL_MAX_PROGRAM_TEMPORARIES_ARB 0x88A5 #define GL_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A6 #define GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A7 #define GL_PROGRAM_PARAMETERS_ARB 0x88A8 #define GL_MAX_PROGRAM_PARAMETERS_ARB 0x88A9 #define GL_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AA #define GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AB #define GL_PROGRAM_ATTRIBS_ARB 0x88AC #define GL_MAX_PROGRAM_ATTRIBS_ARB 0x88AD #define GL_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AE #define GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AF #define GL_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B0 #define GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B1 #define GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B2 #define GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B3 #define GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB 0x88B4 #define GL_MAX_PROGRAM_ENV_PARAMETERS_ARB 0x88B5 #define GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB 0x88B6 #define GL_TRANSPOSE_CURRENT_MATRIX_ARB 0x88B7 #define GL_MATRIX0_ARB 0x88C0 #define GL_MATRIX1_ARB 0x88C1 #define GL_MATRIX2_ARB 0x88C2 #define GL_MATRIX3_ARB 0x88C3 #define GL_MATRIX4_ARB 0x88C4 #define GL_MATRIX5_ARB 0x88C5 #define GL_MATRIX6_ARB 0x88C6 #define GL_MATRIX7_ARB 0x88C7 #define GL_MATRIX8_ARB 0x88C8 #define GL_MATRIX9_ARB 0x88C9 #define GL_MATRIX10_ARB 0x88CA #define GL_MATRIX11_ARB 0x88CB #define GL_MATRIX12_ARB 0x88CC #define GL_MATRIX13_ARB 0x88CD #define GL_MATRIX14_ARB 0x88CE #define GL_MATRIX15_ARB 0x88CF #define GL_MATRIX16_ARB 0x88D0 #define GL_MATRIX17_ARB 0x88D1 #define GL_MATRIX18_ARB 0x88D2 #define GL_MATRIX19_ARB 0x88D3 #define GL_MATRIX20_ARB 0x88D4 #define GL_MATRIX21_ARB 0x88D5 #define GL_MATRIX22_ARB 0x88D6 #define GL_MATRIX23_ARB 0x88D7 #define GL_MATRIX24_ARB 0x88D8 #define GL_MATRIX25_ARB 0x88D9 #define GL_MATRIX26_ARB 0x88DA #define GL_MATRIX27_ARB 0x88DB #define GL_MATRIX28_ARB 0x88DC #define GL_MATRIX29_ARB 0x88DD #define GL_MATRIX30_ARB 0x88DE #define GL_MATRIX31_ARB 0x88DF #endif #ifndef GL_ARB_fragment_program #define GL_FRAGMENT_PROGRAM_ARB 0x8804 #define GL_PROGRAM_ALU_INSTRUCTIONS_ARB 0x8805 #define GL_PROGRAM_TEX_INSTRUCTIONS_ARB 0x8806 #define GL_PROGRAM_TEX_INDIRECTIONS_ARB 0x8807 #define GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x8808 #define GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x8809 #define GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x880A #define GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB 0x880B #define GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB 0x880C #define GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB 0x880D #define GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x880E #define GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x880F #define GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x8810 #define GL_MAX_TEXTURE_COORDS_ARB 0x8871 #define GL_MAX_TEXTURE_IMAGE_UNITS_ARB 0x8872 #endif #ifndef GL_ARB_vertex_buffer_object #define GL_BUFFER_SIZE_ARB 0x8764 #define GL_BUFFER_USAGE_ARB 0x8765 #define GL_ARRAY_BUFFER_ARB 0x8892 #define GL_ELEMENT_ARRAY_BUFFER_ARB 0x8893 #define GL_ARRAY_BUFFER_BINDING_ARB 0x8894 #define GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB 0x8895 #define GL_VERTEX_ARRAY_BUFFER_BINDING_ARB 0x8896 #define GL_NORMAL_ARRAY_BUFFER_BINDING_ARB 0x8897 #define GL_COLOR_ARRAY_BUFFER_BINDING_ARB 0x8898 #define GL_INDEX_ARRAY_BUFFER_BINDING_ARB 0x8899 #define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB 0x889A #define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB 0x889B #define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB 0x889C #define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB 0x889D #define GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB 0x889E #define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB 0x889F #define GL_READ_ONLY_ARB 0x88B8 #define GL_WRITE_ONLY_ARB 0x88B9 #define GL_READ_WRITE_ARB 0x88BA #define GL_BUFFER_ACCESS_ARB 0x88BB #define GL_BUFFER_MAPPED_ARB 0x88BC #define GL_BUFFER_MAP_POINTER_ARB 0x88BD #define GL_STREAM_DRAW_ARB 0x88E0 #define GL_STREAM_READ_ARB 0x88E1 #define GL_STREAM_COPY_ARB 0x88E2 #define GL_STATIC_DRAW_ARB 0x88E4 #define GL_STATIC_READ_ARB 0x88E5 #define GL_STATIC_COPY_ARB 0x88E6 #define GL_DYNAMIC_DRAW_ARB 0x88E8 #define GL_DYNAMIC_READ_ARB 0x88E9 #define GL_DYNAMIC_COPY_ARB 0x88EA #endif #ifndef GL_ARB_occlusion_query #define GL_QUERY_COUNTER_BITS_ARB 0x8864 #define GL_CURRENT_QUERY_ARB 0x8865 #define GL_QUERY_RESULT_ARB 0x8866 #define GL_QUERY_RESULT_AVAILABLE_ARB 0x8867 #define GL_SAMPLES_PASSED_ARB 0x8914 #endif #ifndef GL_ARB_shader_objects #define GL_PROGRAM_OBJECT_ARB 0x8B40 #define GL_SHADER_OBJECT_ARB 0x8B48 #define GL_OBJECT_TYPE_ARB 0x8B4E #define GL_OBJECT_SUBTYPE_ARB 0x8B4F #define GL_FLOAT_VEC2_ARB 0x8B50 #define GL_FLOAT_VEC3_ARB 0x8B51 #define GL_FLOAT_VEC4_ARB 0x8B52 #define GL_INT_VEC2_ARB 0x8B53 #define GL_INT_VEC3_ARB 0x8B54 #define GL_INT_VEC4_ARB 0x8B55 #define GL_BOOL_ARB 0x8B56 #define GL_BOOL_VEC2_ARB 0x8B57 #define GL_BOOL_VEC3_ARB 0x8B58 #define GL_BOOL_VEC4_ARB 0x8B59 #define GL_FLOAT_MAT2_ARB 0x8B5A #define GL_FLOAT_MAT3_ARB 0x8B5B #define GL_FLOAT_MAT4_ARB 0x8B5C #define GL_SAMPLER_1D_ARB 0x8B5D #define GL_SAMPLER_2D_ARB 0x8B5E #define GL_SAMPLER_3D_ARB 0x8B5F #define GL_SAMPLER_CUBE_ARB 0x8B60 #define GL_SAMPLER_1D_SHADOW_ARB 0x8B61 #define GL_SAMPLER_2D_SHADOW_ARB 0x8B62 #define GL_SAMPLER_2D_RECT_ARB 0x8B63 #define GL_SAMPLER_2D_RECT_SHADOW_ARB 0x8B64 #define GL_OBJECT_DELETE_STATUS_ARB 0x8B80 #define GL_OBJECT_COMPILE_STATUS_ARB 0x8B81 #define GL_OBJECT_LINK_STATUS_ARB 0x8B82 #define GL_OBJECT_VALIDATE_STATUS_ARB 0x8B83 #define GL_OBJECT_INFO_LOG_LENGTH_ARB 0x8B84 #define GL_OBJECT_ATTACHED_OBJECTS_ARB 0x8B85 #define GL_OBJECT_ACTIVE_UNIFORMS_ARB 0x8B86 #define GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB 0x8B87 #define GL_OBJECT_SHADER_SOURCE_LENGTH_ARB 0x8B88 #endif #ifndef GL_ARB_vertex_shader #define GL_VERTEX_SHADER_ARB 0x8B31 #define GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB 0x8B4A #define GL_MAX_VARYING_FLOATS_ARB 0x8B4B #define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB 0x8B4C #define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB 0x8B4D #define GL_OBJECT_ACTIVE_ATTRIBUTES_ARB 0x8B89 #define GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB 0x8B8A #endif #ifndef GL_ARB_fragment_shader #define GL_FRAGMENT_SHADER_ARB 0x8B30 #define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB 0x8B49 #define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB 0x8B8B #endif #ifndef GL_ARB_shading_language_100 #define GL_SHADING_LANGUAGE_VERSION_ARB 0x8B8C #endif #ifndef GL_ARB_texture_non_power_of_two #endif #ifndef GL_ARB_point_sprite #define GL_POINT_SPRITE_ARB 0x8861 #define GL_COORD_REPLACE_ARB 0x8862 #endif #ifndef GL_ARB_fragment_program_shadow #endif #ifndef GL_ARB_draw_buffers #define GL_MAX_DRAW_BUFFERS_ARB 0x8824 #define GL_DRAW_BUFFER0_ARB 0x8825 #define GL_DRAW_BUFFER1_ARB 0x8826 #define GL_DRAW_BUFFER2_ARB 0x8827 #define GL_DRAW_BUFFER3_ARB 0x8828 #define GL_DRAW_BUFFER4_ARB 0x8829 #define GL_DRAW_BUFFER5_ARB 0x882A #define GL_DRAW_BUFFER6_ARB 0x882B #define GL_DRAW_BUFFER7_ARB 0x882C #define GL_DRAW_BUFFER8_ARB 0x882D #define GL_DRAW_BUFFER9_ARB 0x882E #define GL_DRAW_BUFFER10_ARB 0x882F #define GL_DRAW_BUFFER11_ARB 0x8830 #define GL_DRAW_BUFFER12_ARB 0x8831 #define GL_DRAW_BUFFER13_ARB 0x8832 #define GL_DRAW_BUFFER14_ARB 0x8833 #define GL_DRAW_BUFFER15_ARB 0x8834 #endif #ifndef GL_ARB_texture_rectangle #define GL_TEXTURE_RECTANGLE_ARB 0x84F5 #define GL_TEXTURE_BINDING_RECTANGLE_ARB 0x84F6 #define GL_PROXY_TEXTURE_RECTANGLE_ARB 0x84F7 #define GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB 0x84F8 #endif #ifndef GL_ARB_color_buffer_float #define GL_RGBA_FLOAT_MODE_ARB 0x8820 #define GL_CLAMP_VERTEX_COLOR_ARB 0x891A #define GL_CLAMP_FRAGMENT_COLOR_ARB 0x891B #define GL_CLAMP_READ_COLOR_ARB 0x891C #define GL_FIXED_ONLY_ARB 0x891D #endif #ifndef GL_ARB_half_float_pixel #define GL_HALF_FLOAT_ARB 0x140B #endif #ifndef GL_ARB_texture_float #define GL_TEXTURE_RED_TYPE_ARB 0x8C10 #define GL_TEXTURE_GREEN_TYPE_ARB 0x8C11 #define GL_TEXTURE_BLUE_TYPE_ARB 0x8C12 #define GL_TEXTURE_ALPHA_TYPE_ARB 0x8C13 #define GL_TEXTURE_LUMINANCE_TYPE_ARB 0x8C14 #define GL_TEXTURE_INTENSITY_TYPE_ARB 0x8C15 #define GL_TEXTURE_DEPTH_TYPE_ARB 0x8C16 #define GL_UNSIGNED_NORMALIZED_ARB 0x8C17 #define GL_RGBA32F_ARB 0x8814 #define GL_RGB32F_ARB 0x8815 #define GL_ALPHA32F_ARB 0x8816 #define GL_INTENSITY32F_ARB 0x8817 #define GL_LUMINANCE32F_ARB 0x8818 #define GL_LUMINANCE_ALPHA32F_ARB 0x8819 #define GL_RGBA16F_ARB 0x881A #define GL_RGB16F_ARB 0x881B #define GL_ALPHA16F_ARB 0x881C #define GL_INTENSITY16F_ARB 0x881D #define GL_LUMINANCE16F_ARB 0x881E #define GL_LUMINANCE_ALPHA16F_ARB 0x881F #endif #ifndef GL_ARB_pixel_buffer_object #define GL_PIXEL_PACK_BUFFER_ARB 0x88EB #define GL_PIXEL_UNPACK_BUFFER_ARB 0x88EC #define GL_PIXEL_PACK_BUFFER_BINDING_ARB 0x88ED #define GL_PIXEL_UNPACK_BUFFER_BINDING_ARB 0x88EF #endif #ifndef GL_ARB_depth_buffer_float #define GL_DEPTH_COMPONENT32F 0x8CAC #define GL_DEPTH32F_STENCIL8 0x8CAD #define GL_FLOAT_32_UNSIGNED_INT_24_8_REV 0x8DAD #endif #ifndef GL_ARB_draw_instanced #endif #ifndef GL_ARB_framebuffer_object #define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506 #define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING 0x8210 #define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE 0x8211 #define GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE 0x8212 #define GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE 0x8213 #define GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE 0x8214 #define GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE 0x8215 #define GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE 0x8216 #define GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE 0x8217 #define GL_FRAMEBUFFER_DEFAULT 0x8218 #define GL_FRAMEBUFFER_UNDEFINED 0x8219 #define GL_DEPTH_STENCIL_ATTACHMENT 0x821A #define GL_MAX_RENDERBUFFER_SIZE 0x84E8 #define GL_DEPTH_STENCIL 0x84F9 #define GL_UNSIGNED_INT_24_8 0x84FA #define GL_DEPTH24_STENCIL8 0x88F0 #define GL_TEXTURE_STENCIL_SIZE 0x88F1 #define GL_TEXTURE_RED_TYPE 0x8C10 #define GL_TEXTURE_GREEN_TYPE 0x8C11 #define GL_TEXTURE_BLUE_TYPE 0x8C12 #define GL_TEXTURE_ALPHA_TYPE 0x8C13 #define GL_TEXTURE_DEPTH_TYPE 0x8C16 #define GL_UNSIGNED_NORMALIZED 0x8C17 #define GL_FRAMEBUFFER_BINDING 0x8CA6 #define GL_DRAW_FRAMEBUFFER_BINDING 0x8CA6 #define GL_RENDERBUFFER_BINDING 0x8CA7 #define GL_READ_FRAMEBUFFER 0x8CA8 #define GL_DRAW_FRAMEBUFFER 0x8CA9 #define GL_READ_FRAMEBUFFER_BINDING 0x8CAA #define GL_RENDERBUFFER_SAMPLES 0x8CAB #define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE 0x8CD0 #define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME 0x8CD1 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL 0x8CD2 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE 0x8CD3 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER 0x8CD4 #define GL_FRAMEBUFFER_COMPLETE 0x8CD5 #define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8CD6 #define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7 #define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER 0x8CDB #define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER 0x8CDC #define GL_FRAMEBUFFER_UNSUPPORTED 0x8CDD #define GL_MAX_COLOR_ATTACHMENTS 0x8CDF #define GL_COLOR_ATTACHMENT0 0x8CE0 #define GL_COLOR_ATTACHMENT1 0x8CE1 #define GL_COLOR_ATTACHMENT2 0x8CE2 #define GL_COLOR_ATTACHMENT3 0x8CE3 #define GL_COLOR_ATTACHMENT4 0x8CE4 #define GL_COLOR_ATTACHMENT5 0x8CE5 #define GL_COLOR_ATTACHMENT6 0x8CE6 #define GL_COLOR_ATTACHMENT7 0x8CE7 #define GL_COLOR_ATTACHMENT8 0x8CE8 #define GL_COLOR_ATTACHMENT9 0x8CE9 #define GL_COLOR_ATTACHMENT10 0x8CEA #define GL_COLOR_ATTACHMENT11 0x8CEB #define GL_COLOR_ATTACHMENT12 0x8CEC #define GL_COLOR_ATTACHMENT13 0x8CED #define GL_COLOR_ATTACHMENT14 0x8CEE #define GL_COLOR_ATTACHMENT15 0x8CEF #define GL_DEPTH_ATTACHMENT 0x8D00 #define GL_STENCIL_ATTACHMENT 0x8D20 #define GL_FRAMEBUFFER 0x8D40 #define GL_RENDERBUFFER 0x8D41 #define GL_RENDERBUFFER_WIDTH 0x8D42 #define GL_RENDERBUFFER_HEIGHT 0x8D43 #define GL_RENDERBUFFER_INTERNAL_FORMAT 0x8D44 #define GL_STENCIL_INDEX1 0x8D46 #define GL_STENCIL_INDEX4 0x8D47 #define GL_STENCIL_INDEX8 0x8D48 #define GL_STENCIL_INDEX16 0x8D49 #define GL_RENDERBUFFER_RED_SIZE 0x8D50 #define GL_RENDERBUFFER_GREEN_SIZE 0x8D51 #define GL_RENDERBUFFER_BLUE_SIZE 0x8D52 #define GL_RENDERBUFFER_ALPHA_SIZE 0x8D53 #define GL_RENDERBUFFER_DEPTH_SIZE 0x8D54 #define GL_RENDERBUFFER_STENCIL_SIZE 0x8D55 #define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE 0x8D56 #define GL_MAX_SAMPLES 0x8D57 #define GL_INDEX 0x8222 #define GL_TEXTURE_LUMINANCE_TYPE 0x8C14 #define GL_TEXTURE_INTENSITY_TYPE 0x8C15 #endif #ifndef GL_ARB_framebuffer_sRGB #define GL_FRAMEBUFFER_SRGB 0x8DB9 #endif #ifndef GL_ARB_geometry_shader4 #define GL_LINES_ADJACENCY_ARB 0x000A #define GL_LINE_STRIP_ADJACENCY_ARB 0x000B #define GL_TRIANGLES_ADJACENCY_ARB 0x000C #define GL_TRIANGLE_STRIP_ADJACENCY_ARB 0x000D #define GL_PROGRAM_POINT_SIZE_ARB 0x8642 #define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_ARB 0x8C29 #define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_ARB 0x8DA7 #define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_ARB 0x8DA8 #define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_ARB 0x8DA9 #define GL_GEOMETRY_SHADER_ARB 0x8DD9 #define GL_GEOMETRY_VERTICES_OUT_ARB 0x8DDA #define GL_GEOMETRY_INPUT_TYPE_ARB 0x8DDB #define GL_GEOMETRY_OUTPUT_TYPE_ARB 0x8DDC #define GL_MAX_GEOMETRY_VARYING_COMPONENTS_ARB 0x8DDD #define GL_MAX_VERTEX_VARYING_COMPONENTS_ARB 0x8DDE #define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_ARB 0x8DDF #define GL_MAX_GEOMETRY_OUTPUT_VERTICES_ARB 0x8DE0 #define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_ARB 0x8DE1 /* reuse GL_MAX_VARYING_COMPONENTS */ /* reuse GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER */ #endif #ifndef GL_ARB_half_float_vertex #define GL_HALF_FLOAT 0x140B #endif #ifndef GL_ARB_instanced_arrays #define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ARB 0x88FE #endif #ifndef GL_ARB_map_buffer_range #define GL_MAP_READ_BIT 0x0001 #define GL_MAP_WRITE_BIT 0x0002 #define GL_MAP_INVALIDATE_RANGE_BIT 0x0004 #define GL_MAP_INVALIDATE_BUFFER_BIT 0x0008 #define GL_MAP_FLUSH_EXPLICIT_BIT 0x0010 #define GL_MAP_UNSYNCHRONIZED_BIT 0x0020 #endif #ifndef GL_ARB_texture_buffer_object #define GL_TEXTURE_BUFFER_ARB 0x8C2A #define GL_MAX_TEXTURE_BUFFER_SIZE_ARB 0x8C2B #define GL_TEXTURE_BINDING_BUFFER_ARB 0x8C2C #define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_ARB 0x8C2D #define GL_TEXTURE_BUFFER_FORMAT_ARB 0x8C2E #endif #ifndef GL_ARB_texture_compression_rgtc #define GL_COMPRESSED_RED_RGTC1 0x8DBB #define GL_COMPRESSED_SIGNED_RED_RGTC1 0x8DBC #define GL_COMPRESSED_RG_RGTC2 0x8DBD #define GL_COMPRESSED_SIGNED_RG_RGTC2 0x8DBE #endif #ifndef GL_ARB_texture_rg #define GL_RG 0x8227 #define GL_RG_INTEGER 0x8228 #define GL_R8 0x8229 #define GL_R16 0x822A #define GL_RG8 0x822B #define GL_RG16 0x822C #define GL_R16F 0x822D #define GL_R32F 0x822E #define GL_RG16F 0x822F #define GL_RG32F 0x8230 #define GL_R8I 0x8231 #define GL_R8UI 0x8232 #define GL_R16I 0x8233 #define GL_R16UI 0x8234 #define GL_R32I 0x8235 #define GL_R32UI 0x8236 #define GL_RG8I 0x8237 #define GL_RG8UI 0x8238 #define GL_RG16I 0x8239 #define GL_RG16UI 0x823A #define GL_RG32I 0x823B #define GL_RG32UI 0x823C #endif #ifndef GL_ARB_vertex_array_object #define GL_VERTEX_ARRAY_BINDING 0x85B5 #endif #ifndef GL_ARB_uniform_buffer_object #define GL_UNIFORM_BUFFER 0x8A11 #define GL_UNIFORM_BUFFER_BINDING 0x8A28 #define GL_UNIFORM_BUFFER_START 0x8A29 #define GL_UNIFORM_BUFFER_SIZE 0x8A2A #define GL_MAX_VERTEX_UNIFORM_BLOCKS 0x8A2B #define GL_MAX_GEOMETRY_UNIFORM_BLOCKS 0x8A2C #define GL_MAX_FRAGMENT_UNIFORM_BLOCKS 0x8A2D #define GL_MAX_COMBINED_UNIFORM_BLOCKS 0x8A2E #define GL_MAX_UNIFORM_BUFFER_BINDINGS 0x8A2F #define GL_MAX_UNIFORM_BLOCK_SIZE 0x8A30 #define GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS 0x8A31 #define GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS 0x8A32 #define GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS 0x8A33 #define GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT 0x8A34 #define GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH 0x8A35 #define GL_ACTIVE_UNIFORM_BLOCKS 0x8A36 #define GL_UNIFORM_TYPE 0x8A37 #define GL_UNIFORM_SIZE 0x8A38 #define GL_UNIFORM_NAME_LENGTH 0x8A39 #define GL_UNIFORM_BLOCK_INDEX 0x8A3A #define GL_UNIFORM_OFFSET 0x8A3B #define GL_UNIFORM_ARRAY_STRIDE 0x8A3C #define GL_UNIFORM_MATRIX_STRIDE 0x8A3D #define GL_UNIFORM_IS_ROW_MAJOR 0x8A3E #define GL_UNIFORM_BLOCK_BINDING 0x8A3F #define GL_UNIFORM_BLOCK_DATA_SIZE 0x8A40 #define GL_UNIFORM_BLOCK_NAME_LENGTH 0x8A41 #define GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS 0x8A42 #define GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES 0x8A43 #define GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER 0x8A44 #define GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER 0x8A45 #define GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER 0x8A46 #define GL_INVALID_INDEX 0xFFFFFFFFu #endif #ifndef GL_ARB_compatibility /* ARB_compatibility just defines tokens from core 3.0 */ #endif #ifndef GL_ARB_copy_buffer #define GL_COPY_READ_BUFFER_BINDING 0x8F36 #define GL_COPY_READ_BUFFER 0x8F36 #define GL_COPY_WRITE_BUFFER_BINDING 0x8F37 #define GL_COPY_WRITE_BUFFER 0x8F37 #endif #ifndef GL_ARB_shader_texture_lod #endif #ifndef GL_ARB_depth_clamp #define GL_DEPTH_CLAMP 0x864F #endif #ifndef GL_ARB_draw_elements_base_vertex #endif #ifndef GL_ARB_fragment_coord_conventions #endif #ifndef GL_ARB_provoking_vertex #define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION 0x8E4C #define GL_FIRST_VERTEX_CONVENTION 0x8E4D #define GL_LAST_VERTEX_CONVENTION 0x8E4E #define GL_PROVOKING_VERTEX 0x8E4F #endif #ifndef GL_ARB_seamless_cube_map #define GL_TEXTURE_CUBE_MAP_SEAMLESS 0x884F #endif #ifndef GL_ARB_sync #define GL_MAX_SERVER_WAIT_TIMEOUT 0x9111 #define GL_OBJECT_TYPE 0x9112 #define GL_SYNC_CONDITION 0x9113 #define GL_SYNC_STATUS 0x9114 #define GL_SYNC_FLAGS 0x9115 #define GL_SYNC_FENCE 0x9116 #define GL_SYNC_GPU_COMMANDS_COMPLETE 0x9117 #define GL_UNSIGNALED 0x9118 #define GL_SIGNALED 0x9119 #define GL_ALREADY_SIGNALED 0x911A #define GL_TIMEOUT_EXPIRED 0x911B #define GL_CONDITION_SATISFIED 0x911C #define GL_WAIT_FAILED 0x911D #define GL_SYNC_FLUSH_COMMANDS_BIT 0x00000001 #define GL_TIMEOUT_IGNORED 0xFFFFFFFFFFFFFFFFull #endif #ifndef GL_ARB_texture_multisample #define GL_SAMPLE_POSITION 0x8E50 #define GL_SAMPLE_MASK 0x8E51 #define GL_SAMPLE_MASK_VALUE 0x8E52 #define GL_MAX_SAMPLE_MASK_WORDS 0x8E59 #define GL_TEXTURE_2D_MULTISAMPLE 0x9100 #define GL_PROXY_TEXTURE_2D_MULTISAMPLE 0x9101 #define GL_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9102 #define GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9103 #define GL_TEXTURE_BINDING_2D_MULTISAMPLE 0x9104 #define GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY 0x9105 #define GL_TEXTURE_SAMPLES 0x9106 #define GL_TEXTURE_FIXED_SAMPLE_LOCATIONS 0x9107 #define GL_SAMPLER_2D_MULTISAMPLE 0x9108 #define GL_INT_SAMPLER_2D_MULTISAMPLE 0x9109 #define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE 0x910A #define GL_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910B #define GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910C #define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910D #define GL_MAX_COLOR_TEXTURE_SAMPLES 0x910E #define GL_MAX_DEPTH_TEXTURE_SAMPLES 0x910F #define GL_MAX_INTEGER_SAMPLES 0x9110 #endif #ifndef GL_ARB_vertex_array_bgra /* reuse GL_BGRA */ #endif #ifndef GL_ARB_draw_buffers_blend #endif #ifndef GL_ARB_sample_shading #define GL_SAMPLE_SHADING_ARB 0x8C36 #define GL_MIN_SAMPLE_SHADING_VALUE_ARB 0x8C37 #endif #ifndef GL_ARB_texture_cube_map_array #define GL_TEXTURE_CUBE_MAP_ARRAY_ARB 0x9009 #define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_ARB 0x900A #define GL_PROXY_TEXTURE_CUBE_MAP_ARRAY_ARB 0x900B #define GL_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900C #define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_ARB 0x900D #define GL_INT_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900E #define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900F #endif #ifndef GL_ARB_texture_gather #define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_ARB 0x8E5E #define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_ARB 0x8E5F #define GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS_ARB 0x8F9F #endif #ifndef GL_ARB_texture_query_lod #endif #ifndef GL_ARB_shading_language_include #define GL_SHADER_INCLUDE_ARB 0x8DAE #define GL_NAMED_STRING_LENGTH_ARB 0x8DE9 #define GL_NAMED_STRING_TYPE_ARB 0x8DEA #endif #ifndef GL_ARB_texture_compression_bptc #define GL_COMPRESSED_RGBA_BPTC_UNORM_ARB 0x8E8C #define GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_ARB 0x8E8D #define GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_ARB 0x8E8E #define GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB 0x8E8F #endif #ifndef GL_ARB_blend_func_extended #define GL_SRC1_COLOR 0x88F9 /* reuse GL_SRC1_ALPHA */ #define GL_ONE_MINUS_SRC1_COLOR 0x88FA #define GL_ONE_MINUS_SRC1_ALPHA 0x88FB #define GL_MAX_DUAL_SOURCE_DRAW_BUFFERS 0x88FC #endif #ifndef GL_ARB_explicit_attrib_location #endif #ifndef GL_ARB_occlusion_query2 #define GL_ANY_SAMPLES_PASSED 0x8C2F #endif #ifndef GL_ARB_sampler_objects #define GL_SAMPLER_BINDING 0x8919 #endif #ifndef GL_ARB_shader_bit_encoding #endif #ifndef GL_ARB_texture_rgb10_a2ui #define GL_RGB10_A2UI 0x906F #endif #ifndef GL_ARB_texture_swizzle #define GL_TEXTURE_SWIZZLE_R 0x8E42 #define GL_TEXTURE_SWIZZLE_G 0x8E43 #define GL_TEXTURE_SWIZZLE_B 0x8E44 #define GL_TEXTURE_SWIZZLE_A 0x8E45 #define GL_TEXTURE_SWIZZLE_RGBA 0x8E46 #endif #ifndef GL_ARB_timer_query #define GL_TIME_ELAPSED 0x88BF #define GL_TIMESTAMP 0x8E28 #endif #ifndef GL_ARB_vertex_type_2_10_10_10_rev /* reuse GL_UNSIGNED_INT_2_10_10_10_REV */ #define GL_INT_2_10_10_10_REV 0x8D9F #endif #ifndef GL_ARB_draw_indirect #define GL_DRAW_INDIRECT_BUFFER 0x8F3F #define GL_DRAW_INDIRECT_BUFFER_BINDING 0x8F43 #endif #ifndef GL_ARB_gpu_shader5 #define GL_GEOMETRY_SHADER_INVOCATIONS 0x887F #define GL_MAX_GEOMETRY_SHADER_INVOCATIONS 0x8E5A #define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET 0x8E5B #define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET 0x8E5C #define GL_FRAGMENT_INTERPOLATION_OFFSET_BITS 0x8E5D /* reuse GL_MAX_VERTEX_STREAMS */ #endif #ifndef GL_ARB_gpu_shader_fp64 /* reuse GL_DOUBLE */ #define GL_DOUBLE_VEC2 0x8FFC #define GL_DOUBLE_VEC3 0x8FFD #define GL_DOUBLE_VEC4 0x8FFE #define GL_DOUBLE_MAT2 0x8F46 #define GL_DOUBLE_MAT3 0x8F47 #define GL_DOUBLE_MAT4 0x8F48 #define GL_DOUBLE_MAT2x3 0x8F49 #define GL_DOUBLE_MAT2x4 0x8F4A #define GL_DOUBLE_MAT3x2 0x8F4B #define GL_DOUBLE_MAT3x4 0x8F4C #define GL_DOUBLE_MAT4x2 0x8F4D #define GL_DOUBLE_MAT4x3 0x8F4E #endif #ifndef GL_ARB_shader_subroutine #define GL_ACTIVE_SUBROUTINES 0x8DE5 #define GL_ACTIVE_SUBROUTINE_UNIFORMS 0x8DE6 #define GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS 0x8E47 #define GL_ACTIVE_SUBROUTINE_MAX_LENGTH 0x8E48 #define GL_ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH 0x8E49 #define GL_MAX_SUBROUTINES 0x8DE7 #define GL_MAX_SUBROUTINE_UNIFORM_LOCATIONS 0x8DE8 #define GL_NUM_COMPATIBLE_SUBROUTINES 0x8E4A #define GL_COMPATIBLE_SUBROUTINES 0x8E4B /* reuse GL_UNIFORM_SIZE */ /* reuse GL_UNIFORM_NAME_LENGTH */ #endif #ifndef GL_ARB_tessellation_shader #define GL_PATCHES 0x000E #define GL_PATCH_VERTICES 0x8E72 #define GL_PATCH_DEFAULT_INNER_LEVEL 0x8E73 #define GL_PATCH_DEFAULT_OUTER_LEVEL 0x8E74 #define GL_TESS_CONTROL_OUTPUT_VERTICES 0x8E75 #define GL_TESS_GEN_MODE 0x8E76 #define GL_TESS_GEN_SPACING 0x8E77 #define GL_TESS_GEN_VERTEX_ORDER 0x8E78 #define GL_TESS_GEN_POINT_MODE 0x8E79 /* reuse GL_TRIANGLES */ /* reuse GL_QUADS */ #define GL_ISOLINES 0x8E7A /* reuse GL_EQUAL */ #define GL_FRACTIONAL_ODD 0x8E7B #define GL_FRACTIONAL_EVEN 0x8E7C /* reuse GL_CCW */ /* reuse GL_CW */ #define GL_MAX_PATCH_VERTICES 0x8E7D #define GL_MAX_TESS_GEN_LEVEL 0x8E7E #define GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E7F #define GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E80 #define GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS 0x8E81 #define GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS 0x8E82 #define GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS 0x8E83 #define GL_MAX_TESS_PATCH_COMPONENTS 0x8E84 #define GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS 0x8E85 #define GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS 0x8E86 #define GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS 0x8E89 #define GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS 0x8E8A #define GL_MAX_TESS_CONTROL_INPUT_COMPONENTS 0x886C #define GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS 0x886D #define GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E1E #define GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E1F #define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER 0x84F0 #define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER 0x84F1 #define GL_TESS_EVALUATION_SHADER 0x8E87 #define GL_TESS_CONTROL_SHADER 0x8E88 #endif #ifndef GL_ARB_texture_buffer_object_rgb32 /* reuse GL_RGB32F */ /* reuse GL_RGB32UI */ /* reuse GL_RGB32I */ #endif #ifndef GL_ARB_transform_feedback2 #define GL_TRANSFORM_FEEDBACK 0x8E22 #define GL_TRANSFORM_FEEDBACK_PAUSED 0x8E23 #define GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED 0x8E23 #define GL_TRANSFORM_FEEDBACK_ACTIVE 0x8E24 #define GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE 0x8E24 #define GL_TRANSFORM_FEEDBACK_BINDING 0x8E25 #endif #ifndef GL_ARB_transform_feedback3 #define GL_MAX_TRANSFORM_FEEDBACK_BUFFERS 0x8E70 #define GL_MAX_VERTEX_STREAMS 0x8E71 #endif #ifndef GL_ARB_ES2_compatibility #define GL_FIXED 0x140C #define GL_IMPLEMENTATION_COLOR_READ_TYPE 0x8B9A #define GL_IMPLEMENTATION_COLOR_READ_FORMAT 0x8B9B #define GL_LOW_FLOAT 0x8DF0 #define GL_MEDIUM_FLOAT 0x8DF1 #define GL_HIGH_FLOAT 0x8DF2 #define GL_LOW_INT 0x8DF3 #define GL_MEDIUM_INT 0x8DF4 #define GL_HIGH_INT 0x8DF5 #define GL_SHADER_COMPILER 0x8DFA #define GL_SHADER_BINARY_FORMATS 0x8DF8 #define GL_NUM_SHADER_BINARY_FORMATS 0x8DF9 #define GL_MAX_VERTEX_UNIFORM_VECTORS 0x8DFB #define GL_MAX_VARYING_VECTORS 0x8DFC #define GL_MAX_FRAGMENT_UNIFORM_VECTORS 0x8DFD #define GL_RGB565 0x8D62 #endif #ifndef GL_ARB_get_program_binary #define GL_PROGRAM_BINARY_RETRIEVABLE_HINT 0x8257 #define GL_PROGRAM_BINARY_LENGTH 0x8741 #define GL_NUM_PROGRAM_BINARY_FORMATS 0x87FE #define GL_PROGRAM_BINARY_FORMATS 0x87FF #endif #ifndef GL_ARB_separate_shader_objects #define GL_VERTEX_SHADER_BIT 0x00000001 #define GL_FRAGMENT_SHADER_BIT 0x00000002 #define GL_GEOMETRY_SHADER_BIT 0x00000004 #define GL_TESS_CONTROL_SHADER_BIT 0x00000008 #define GL_TESS_EVALUATION_SHADER_BIT 0x00000010 #define GL_ALL_SHADER_BITS 0xFFFFFFFF #define GL_PROGRAM_SEPARABLE 0x8258 #define GL_ACTIVE_PROGRAM 0x8259 #define GL_PROGRAM_PIPELINE_BINDING 0x825A #endif #ifndef GL_ARB_shader_precision #endif #ifndef GL_ARB_vertex_attrib_64bit /* reuse GL_RGB32I */ /* reuse GL_DOUBLE_VEC2 */ /* reuse GL_DOUBLE_VEC3 */ /* reuse GL_DOUBLE_VEC4 */ /* reuse GL_DOUBLE_MAT2 */ /* reuse GL_DOUBLE_MAT3 */ /* reuse GL_DOUBLE_MAT4 */ /* reuse GL_DOUBLE_MAT2x3 */ /* reuse GL_DOUBLE_MAT2x4 */ /* reuse GL_DOUBLE_MAT3x2 */ /* reuse GL_DOUBLE_MAT3x4 */ /* reuse GL_DOUBLE_MAT4x2 */ /* reuse GL_DOUBLE_MAT4x3 */ #endif #ifndef GL_ARB_viewport_array /* reuse GL_SCISSOR_BOX */ /* reuse GL_VIEWPORT */ /* reuse GL_DEPTH_RANGE */ /* reuse GL_SCISSOR_TEST */ #define GL_MAX_VIEWPORTS 0x825B #define GL_VIEWPORT_SUBPIXEL_BITS 0x825C #define GL_VIEWPORT_BOUNDS_RANGE 0x825D #define GL_LAYER_PROVOKING_VERTEX 0x825E #define GL_VIEWPORT_INDEX_PROVOKING_VERTEX 0x825F #define GL_UNDEFINED_VERTEX 0x8260 /* reuse GL_FIRST_VERTEX_CONVENTION */ /* reuse GL_LAST_VERTEX_CONVENTION */ /* reuse GL_PROVOKING_VERTEX */ #endif #ifndef GL_ARB_cl_event #define GL_SYNC_CL_EVENT_ARB 0x8240 #define GL_SYNC_CL_EVENT_COMPLETE_ARB 0x8241 #endif #ifndef GL_ARB_debug_output #define GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB 0x8242 #define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_ARB 0x8243 #define GL_DEBUG_CALLBACK_FUNCTION_ARB 0x8244 #define GL_DEBUG_CALLBACK_USER_PARAM_ARB 0x8245 #define GL_DEBUG_SOURCE_API_ARB 0x8246 #define GL_DEBUG_SOURCE_WINDOW_SYSTEM_ARB 0x8247 #define GL_DEBUG_SOURCE_SHADER_COMPILER_ARB 0x8248 #define GL_DEBUG_SOURCE_THIRD_PARTY_ARB 0x8249 #define GL_DEBUG_SOURCE_APPLICATION_ARB 0x824A #define GL_DEBUG_SOURCE_OTHER_ARB 0x824B #define GL_DEBUG_TYPE_ERROR_ARB 0x824C #define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_ARB 0x824D #define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_ARB 0x824E #define GL_DEBUG_TYPE_PORTABILITY_ARB 0x824F #define GL_DEBUG_TYPE_PERFORMANCE_ARB 0x8250 #define GL_DEBUG_TYPE_OTHER_ARB 0x8251 #define GL_MAX_DEBUG_MESSAGE_LENGTH_ARB 0x9143 #define GL_MAX_DEBUG_LOGGED_MESSAGES_ARB 0x9144 #define GL_DEBUG_LOGGED_MESSAGES_ARB 0x9145 #define GL_DEBUG_SEVERITY_HIGH_ARB 0x9146 #define GL_DEBUG_SEVERITY_MEDIUM_ARB 0x9147 #define GL_DEBUG_SEVERITY_LOW_ARB 0x9148 #endif #ifndef GL_ARB_robustness /* reuse GL_NO_ERROR */ #define GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT_ARB 0x00000004 #define GL_LOSE_CONTEXT_ON_RESET_ARB 0x8252 #define GL_GUILTY_CONTEXT_RESET_ARB 0x8253 #define GL_INNOCENT_CONTEXT_RESET_ARB 0x8254 #define GL_UNKNOWN_CONTEXT_RESET_ARB 0x8255 #define GL_RESET_NOTIFICATION_STRATEGY_ARB 0x8256 #define GL_NO_RESET_NOTIFICATION_ARB 0x8261 #endif #ifndef GL_ARB_shader_stencil_export #endif #ifndef GL_ARB_base_instance #endif #ifndef GL_ARB_shading_language_420pack #endif #ifndef GL_ARB_transform_feedback_instanced #endif #ifndef GL_ARB_compressed_texture_pixel_storage #define GL_UNPACK_COMPRESSED_BLOCK_WIDTH 0x9127 #define GL_UNPACK_COMPRESSED_BLOCK_HEIGHT 0x9128 #define GL_UNPACK_COMPRESSED_BLOCK_DEPTH 0x9129 #define GL_UNPACK_COMPRESSED_BLOCK_SIZE 0x912A #define GL_PACK_COMPRESSED_BLOCK_WIDTH 0x912B #define GL_PACK_COMPRESSED_BLOCK_HEIGHT 0x912C #define GL_PACK_COMPRESSED_BLOCK_DEPTH 0x912D #define GL_PACK_COMPRESSED_BLOCK_SIZE 0x912E #endif #ifndef GL_ARB_conservative_depth #endif #ifndef GL_ARB_internalformat_query #define GL_NUM_SAMPLE_COUNTS 0x9380 #endif #ifndef GL_ARB_map_buffer_alignment #define GL_MIN_MAP_BUFFER_ALIGNMENT 0x90BC #endif #ifndef GL_ARB_shader_atomic_counters #define GL_ATOMIC_COUNTER_BUFFER 0x92C0 #define GL_ATOMIC_COUNTER_BUFFER_BINDING 0x92C1 #define GL_ATOMIC_COUNTER_BUFFER_START 0x92C2 #define GL_ATOMIC_COUNTER_BUFFER_SIZE 0x92C3 #define GL_ATOMIC_COUNTER_BUFFER_DATA_SIZE 0x92C4 #define GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTERS 0x92C5 #define GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTER_INDICES 0x92C6 #define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_VERTEX_SHADER 0x92C7 #define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_CONTROL_SHADER 0x92C8 #define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_EVALUATION_SHADER 0x92C9 #define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_GEOMETRY_SHADER 0x92CA #define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_FRAGMENT_SHADER 0x92CB #define GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS 0x92CC #define GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS 0x92CD #define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS 0x92CE #define GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS 0x92CF #define GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS 0x92D0 #define GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS 0x92D1 #define GL_MAX_VERTEX_ATOMIC_COUNTERS 0x92D2 #define GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS 0x92D3 #define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS 0x92D4 #define GL_MAX_GEOMETRY_ATOMIC_COUNTERS 0x92D5 #define GL_MAX_FRAGMENT_ATOMIC_COUNTERS 0x92D6 #define GL_MAX_COMBINED_ATOMIC_COUNTERS 0x92D7 #define GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE 0x92D8 #define GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS 0x92DC #define GL_ACTIVE_ATOMIC_COUNTER_BUFFERS 0x92D9 #define GL_UNIFORM_ATOMIC_COUNTER_BUFFER_INDEX 0x92DA #define GL_UNSIGNED_INT_ATOMIC_COUNTER 0x92DB #endif #ifndef GL_ARB_shader_image_load_store #define GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT 0x00000001 #define GL_ELEMENT_ARRAY_BARRIER_BIT 0x00000002 #define GL_UNIFORM_BARRIER_BIT 0x00000004 #define GL_TEXTURE_FETCH_BARRIER_BIT 0x00000008 #define GL_SHADER_IMAGE_ACCESS_BARRIER_BIT 0x00000020 #define GL_COMMAND_BARRIER_BIT 0x00000040 #define GL_PIXEL_BUFFER_BARRIER_BIT 0x00000080 #define GL_TEXTURE_UPDATE_BARRIER_BIT 0x00000100 #define GL_BUFFER_UPDATE_BARRIER_BIT 0x00000200 #define GL_FRAMEBUFFER_BARRIER_BIT 0x00000400 #define GL_TRANSFORM_FEEDBACK_BARRIER_BIT 0x00000800 #define GL_ATOMIC_COUNTER_BARRIER_BIT 0x00001000 #define GL_ALL_BARRIER_BITS 0xFFFFFFFF #define GL_MAX_IMAGE_UNITS 0x8F38 #define GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS 0x8F39 #define GL_IMAGE_BINDING_NAME 0x8F3A #define GL_IMAGE_BINDING_LEVEL 0x8F3B #define GL_IMAGE_BINDING_LAYERED 0x8F3C #define GL_IMAGE_BINDING_LAYER 0x8F3D #define GL_IMAGE_BINDING_ACCESS 0x8F3E #define GL_IMAGE_1D 0x904C #define GL_IMAGE_2D 0x904D #define GL_IMAGE_3D 0x904E #define GL_IMAGE_2D_RECT 0x904F #define GL_IMAGE_CUBE 0x9050 #define GL_IMAGE_BUFFER 0x9051 #define GL_IMAGE_1D_ARRAY 0x9052 #define GL_IMAGE_2D_ARRAY 0x9053 #define GL_IMAGE_CUBE_MAP_ARRAY 0x9054 #define GL_IMAGE_2D_MULTISAMPLE 0x9055 #define GL_IMAGE_2D_MULTISAMPLE_ARRAY 0x9056 #define GL_INT_IMAGE_1D 0x9057 #define GL_INT_IMAGE_2D 0x9058 #define GL_INT_IMAGE_3D 0x9059 #define GL_INT_IMAGE_2D_RECT 0x905A #define GL_INT_IMAGE_CUBE 0x905B #define GL_INT_IMAGE_BUFFER 0x905C #define GL_INT_IMAGE_1D_ARRAY 0x905D #define GL_INT_IMAGE_2D_ARRAY 0x905E #define GL_INT_IMAGE_CUBE_MAP_ARRAY 0x905F #define GL_INT_IMAGE_2D_MULTISAMPLE 0x9060 #define GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY 0x9061 #define GL_UNSIGNED_INT_IMAGE_1D 0x9062 #define GL_UNSIGNED_INT_IMAGE_2D 0x9063 #define GL_UNSIGNED_INT_IMAGE_3D 0x9064 #define GL_UNSIGNED_INT_IMAGE_2D_RECT 0x9065 #define GL_UNSIGNED_INT_IMAGE_CUBE 0x9066 #define GL_UNSIGNED_INT_IMAGE_BUFFER 0x9067 #define GL_UNSIGNED_INT_IMAGE_1D_ARRAY 0x9068 #define GL_UNSIGNED_INT_IMAGE_2D_ARRAY 0x9069 #define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY 0x906A #define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE 0x906B #define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY 0x906C #define GL_MAX_IMAGE_SAMPLES 0x906D #define GL_IMAGE_BINDING_FORMAT 0x906E #define GL_IMAGE_FORMAT_COMPATIBILITY_TYPE 0x90C7 #define GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE 0x90C8 #define GL_IMAGE_FORMAT_COMPATIBILITY_BY_CLASS 0x90C9 #define GL_MAX_VERTEX_IMAGE_UNIFORMS 0x90CA #define GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS 0x90CB #define GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS 0x90CC #define GL_MAX_GEOMETRY_IMAGE_UNIFORMS 0x90CD #define GL_MAX_FRAGMENT_IMAGE_UNIFORMS 0x90CE #define GL_MAX_COMBINED_IMAGE_UNIFORMS 0x90CF #endif #ifndef GL_ARB_shading_language_packing #endif #ifndef GL_ARB_texture_storage #define GL_TEXTURE_IMMUTABLE_FORMAT 0x912F #endif #ifndef GL_KHR_texture_compression_astc_ldr #define GL_COMPRESSED_RGBA_ASTC_4x4_KHR 0x93B0 #define GL_COMPRESSED_RGBA_ASTC_5x4_KHR 0x93B1 #define GL_COMPRESSED_RGBA_ASTC_5x5_KHR 0x93B2 #define GL_COMPRESSED_RGBA_ASTC_6x5_KHR 0x93B3 #define GL_COMPRESSED_RGBA_ASTC_6x6_KHR 0x93B4 #define GL_COMPRESSED_RGBA_ASTC_8x5_KHR 0x93B5 #define GL_COMPRESSED_RGBA_ASTC_8x6_KHR 0x93B6 #define GL_COMPRESSED_RGBA_ASTC_8x8_KHR 0x93B7 #define GL_COMPRESSED_RGBA_ASTC_10x5_KHR 0x93B8 #define GL_COMPRESSED_RGBA_ASTC_10x6_KHR 0x93B9 #define GL_COMPRESSED_RGBA_ASTC_10x8_KHR 0x93BA #define GL_COMPRESSED_RGBA_ASTC_10x10_KHR 0x93BB #define GL_COMPRESSED_RGBA_ASTC_12x10_KHR 0x93BC #define GL_COMPRESSED_RGBA_ASTC_12x12_KHR 0x93BD #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR 0x93D0 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR 0x93D1 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR 0x93D2 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR 0x93D3 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR 0x93D4 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR 0x93D5 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR 0x93D6 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR 0x93D7 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR 0x93D8 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR 0x93D9 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR 0x93DA #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR 0x93DB #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR 0x93DC #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR 0x93DD #endif #ifndef GL_KHR_debug #define GL_DEBUG_OUTPUT_SYNCHRONOUS 0x8242 #define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH 0x8243 #define GL_DEBUG_CALLBACK_FUNCTION 0x8244 #define GL_DEBUG_CALLBACK_USER_PARAM 0x8245 #define GL_DEBUG_SOURCE_API 0x8246 #define GL_DEBUG_SOURCE_WINDOW_SYSTEM 0x8247 #define GL_DEBUG_SOURCE_SHADER_COMPILER 0x8248 #define GL_DEBUG_SOURCE_THIRD_PARTY 0x8249 #define GL_DEBUG_SOURCE_APPLICATION 0x824A #define GL_DEBUG_SOURCE_OTHER 0x824B #define GL_DEBUG_TYPE_ERROR 0x824C #define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR 0x824D #define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR 0x824E #define GL_DEBUG_TYPE_PORTABILITY 0x824F #define GL_DEBUG_TYPE_PERFORMANCE 0x8250 #define GL_DEBUG_TYPE_OTHER 0x8251 #define GL_DEBUG_TYPE_MARKER 0x8268 #define GL_DEBUG_TYPE_PUSH_GROUP 0x8269 #define GL_DEBUG_TYPE_POP_GROUP 0x826A #define GL_DEBUG_SEVERITY_NOTIFICATION 0x826B #define GL_MAX_DEBUG_GROUP_STACK_DEPTH 0x826C #define GL_DEBUG_GROUP_STACK_DEPTH 0x826D #define GL_BUFFER 0x82E0 #define GL_SHADER 0x82E1 #define GL_PROGRAM 0x82E2 #define GL_QUERY 0x82E3 #define GL_PROGRAM_PIPELINE 0x82E4 #define GL_SAMPLER 0x82E6 #define GL_DISPLAY_LIST 0x82E7 /* DISPLAY_LIST used in compatibility profile only */ #define GL_MAX_LABEL_LENGTH 0x82E8 #define GL_MAX_DEBUG_MESSAGE_LENGTH 0x9143 #define GL_MAX_DEBUG_LOGGED_MESSAGES 0x9144 #define GL_DEBUG_LOGGED_MESSAGES 0x9145 #define GL_DEBUG_SEVERITY_HIGH 0x9146 #define GL_DEBUG_SEVERITY_MEDIUM 0x9147 #define GL_DEBUG_SEVERITY_LOW 0x9148 #define GL_DEBUG_OUTPUT 0x92E0 #define GL_CONTEXT_FLAG_DEBUG_BIT 0x00000002 /* reuse GL_STACK_UNDERFLOW */ /* reuse GL_STACK_OVERFLOW */ #endif #ifndef GL_ARB_arrays_of_arrays #endif #ifndef GL_ARB_clear_buffer_object #endif #ifndef GL_ARB_compute_shader #define GL_COMPUTE_SHADER 0x91B9 #define GL_MAX_COMPUTE_UNIFORM_BLOCKS 0x91BB #define GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS 0x91BC #define GL_MAX_COMPUTE_IMAGE_UNIFORMS 0x91BD #define GL_MAX_COMPUTE_SHARED_MEMORY_SIZE 0x8262 #define GL_MAX_COMPUTE_UNIFORM_COMPONENTS 0x8263 #define GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS 0x8264 #define GL_MAX_COMPUTE_ATOMIC_COUNTERS 0x8265 #define GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS 0x8266 #define GL_MAX_COMPUTE_LOCAL_INVOCATIONS 0x90EB #define GL_MAX_COMPUTE_WORK_GROUP_COUNT 0x91BE #define GL_MAX_COMPUTE_WORK_GROUP_SIZE 0x91BF #define GL_COMPUTE_LOCAL_WORK_SIZE 0x8267 #define GL_UNIFORM_BLOCK_REFERENCED_BY_COMPUTE_SHADER 0x90EC #define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_COMPUTE_SHADER 0x90ED #define GL_DISPATCH_INDIRECT_BUFFER 0x90EE #define GL_DISPATCH_INDIRECT_BUFFER_BINDING 0x90EF #define GL_COMPUTE_SHADER_BIT 0x00000020 #endif #ifndef GL_ARB_copy_image #endif #ifndef GL_ARB_texture_view #define GL_TEXTURE_VIEW_MIN_LEVEL 0x82DB #define GL_TEXTURE_VIEW_NUM_LEVELS 0x82DC #define GL_TEXTURE_VIEW_MIN_LAYER 0x82DD #define GL_TEXTURE_VIEW_NUM_LAYERS 0x82DE #define GL_TEXTURE_IMMUTABLE_LEVELS 0x82DF #endif #ifndef GL_ARB_vertex_attrib_binding #define GL_VERTEX_ATTRIB_BINDING 0x82D4 #define GL_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D5 #define GL_VERTEX_BINDING_DIVISOR 0x82D6 #define GL_VERTEX_BINDING_OFFSET 0x82D7 #define GL_VERTEX_BINDING_STRIDE 0x82D8 #define GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D9 #define GL_MAX_VERTEX_ATTRIB_BINDINGS 0x82DA #endif #ifndef GL_ARB_robustness_isolation #endif #ifndef GL_ARB_ES3_compatibility #define GL_COMPRESSED_RGB8_ETC2 0x9274 #define GL_COMPRESSED_SRGB8_ETC2 0x9275 #define GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9276 #define GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9277 #define GL_COMPRESSED_RGBA8_ETC2_EAC 0x9278 #define GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC 0x9279 #define GL_COMPRESSED_R11_EAC 0x9270 #define GL_COMPRESSED_SIGNED_R11_EAC 0x9271 #define GL_COMPRESSED_RG11_EAC 0x9272 #define GL_COMPRESSED_SIGNED_RG11_EAC 0x9273 #define GL_PRIMITIVE_RESTART_FIXED_INDEX 0x8D69 #define GL_ANY_SAMPLES_PASSED_CONSERVATIVE 0x8D6A #define GL_MAX_ELEMENT_INDEX 0x8D6B #endif #ifndef GL_ARB_explicit_uniform_location #define GL_MAX_UNIFORM_LOCATIONS 0x826E #endif #ifndef GL_ARB_fragment_layer_viewport #endif #ifndef GL_ARB_framebuffer_no_attachments #define GL_FRAMEBUFFER_DEFAULT_WIDTH 0x9310 #define GL_FRAMEBUFFER_DEFAULT_HEIGHT 0x9311 #define GL_FRAMEBUFFER_DEFAULT_LAYERS 0x9312 #define GL_FRAMEBUFFER_DEFAULT_SAMPLES 0x9313 #define GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS 0x9314 #define GL_MAX_FRAMEBUFFER_WIDTH 0x9315 #define GL_MAX_FRAMEBUFFER_HEIGHT 0x9316 #define GL_MAX_FRAMEBUFFER_LAYERS 0x9317 #define GL_MAX_FRAMEBUFFER_SAMPLES 0x9318 #endif #ifndef GL_ARB_internalformat_query2 /* reuse GL_IMAGE_FORMAT_COMPATIBILITY_TYPE */ /* reuse GL_NUM_SAMPLE_COUNTS */ /* reuse GL_RENDERBUFFER */ /* reuse GL_SAMPLES */ /* reuse GL_TEXTURE_1D */ /* reuse GL_TEXTURE_1D_ARRAY */ /* reuse GL_TEXTURE_2D */ /* reuse GL_TEXTURE_2D_ARRAY */ /* reuse GL_TEXTURE_3D */ /* reuse GL_TEXTURE_CUBE_MAP */ /* reuse GL_TEXTURE_CUBE_MAP_ARRAY */ /* reuse GL_TEXTURE_RECTANGLE */ /* reuse GL_TEXTURE_BUFFER */ /* reuse GL_TEXTURE_2D_MULTISAMPLE */ /* reuse GL_TEXTURE_2D_MULTISAMPLE_ARRAY */ /* reuse GL_TEXTURE_COMPRESSED */ #define GL_INTERNALFORMAT_SUPPORTED 0x826F #define GL_INTERNALFORMAT_PREFERRED 0x8270 #define GL_INTERNALFORMAT_RED_SIZE 0x8271 #define GL_INTERNALFORMAT_GREEN_SIZE 0x8272 #define GL_INTERNALFORMAT_BLUE_SIZE 0x8273 #define GL_INTERNALFORMAT_ALPHA_SIZE 0x8274 #define GL_INTERNALFORMAT_DEPTH_SIZE 0x8275 #define GL_INTERNALFORMAT_STENCIL_SIZE 0x8276 #define GL_INTERNALFORMAT_SHARED_SIZE 0x8277 #define GL_INTERNALFORMAT_RED_TYPE 0x8278 #define GL_INTERNALFORMAT_GREEN_TYPE 0x8279 #define GL_INTERNALFORMAT_BLUE_TYPE 0x827A #define GL_INTERNALFORMAT_ALPHA_TYPE 0x827B #define GL_INTERNALFORMAT_DEPTH_TYPE 0x827C #define GL_INTERNALFORMAT_STENCIL_TYPE 0x827D #define GL_MAX_WIDTH 0x827E #define GL_MAX_HEIGHT 0x827F #define GL_MAX_DEPTH 0x8280 #define GL_MAX_LAYERS 0x8281 #define GL_MAX_COMBINED_DIMENSIONS 0x8282 #define GL_COLOR_COMPONENTS 0x8283 #define GL_DEPTH_COMPONENTS 0x8284 #define GL_STENCIL_COMPONENTS 0x8285 #define GL_COLOR_RENDERABLE 0x8286 #define GL_DEPTH_RENDERABLE 0x8287 #define GL_STENCIL_RENDERABLE 0x8288 #define GL_FRAMEBUFFER_RENDERABLE 0x8289 #define GL_FRAMEBUFFER_RENDERABLE_LAYERED 0x828A #define GL_FRAMEBUFFER_BLEND 0x828B #define GL_READ_PIXELS 0x828C #define GL_READ_PIXELS_FORMAT 0x828D #define GL_READ_PIXELS_TYPE 0x828E #define GL_TEXTURE_IMAGE_FORMAT 0x828F #define GL_TEXTURE_IMAGE_TYPE 0x8290 #define GL_GET_TEXTURE_IMAGE_FORMAT 0x8291 #define GL_GET_TEXTURE_IMAGE_TYPE 0x8292 #define GL_MIPMAP 0x8293 #define GL_MANUAL_GENERATE_MIPMAP 0x8294 #define GL_AUTO_GENERATE_MIPMAP 0x8295 #define GL_COLOR_ENCODING 0x8296 #define GL_SRGB_READ 0x8297 #define GL_SRGB_WRITE 0x8298 #define GL_SRGB_DECODE_ARB 0x8299 #define GL_FILTER 0x829A #define GL_VERTEX_TEXTURE 0x829B #define GL_TESS_CONTROL_TEXTURE 0x829C #define GL_TESS_EVALUATION_TEXTURE 0x829D #define GL_GEOMETRY_TEXTURE 0x829E #define GL_FRAGMENT_TEXTURE 0x829F #define GL_COMPUTE_TEXTURE 0x82A0 #define GL_TEXTURE_SHADOW 0x82A1 #define GL_TEXTURE_GATHER 0x82A2 #define GL_TEXTURE_GATHER_SHADOW 0x82A3 #define GL_SHADER_IMAGE_LOAD 0x82A4 #define GL_SHADER_IMAGE_STORE 0x82A5 #define GL_SHADER_IMAGE_ATOMIC 0x82A6 #define GL_IMAGE_TEXEL_SIZE 0x82A7 #define GL_IMAGE_COMPATIBILITY_CLASS 0x82A8 #define GL_IMAGE_PIXEL_FORMAT 0x82A9 #define GL_IMAGE_PIXEL_TYPE 0x82AA #define GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST 0x82AC #define GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST 0x82AD #define GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE 0x82AE #define GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE 0x82AF #define GL_TEXTURE_COMPRESSED_BLOCK_WIDTH 0x82B1 #define GL_TEXTURE_COMPRESSED_BLOCK_HEIGHT 0x82B2 #define GL_TEXTURE_COMPRESSED_BLOCK_SIZE 0x82B3 #define GL_CLEAR_BUFFER 0x82B4 #define GL_TEXTURE_VIEW 0x82B5 #define GL_VIEW_COMPATIBILITY_CLASS 0x82B6 #define GL_FULL_SUPPORT 0x82B7 #define GL_CAVEAT_SUPPORT 0x82B8 #define GL_IMAGE_CLASS_4_X_32 0x82B9 #define GL_IMAGE_CLASS_2_X_32 0x82BA #define GL_IMAGE_CLASS_1_X_32 0x82BB #define GL_IMAGE_CLASS_4_X_16 0x82BC #define GL_IMAGE_CLASS_2_X_16 0x82BD #define GL_IMAGE_CLASS_1_X_16 0x82BE #define GL_IMAGE_CLASS_4_X_8 0x82BF #define GL_IMAGE_CLASS_2_X_8 0x82C0 #define GL_IMAGE_CLASS_1_X_8 0x82C1 #define GL_IMAGE_CLASS_11_11_10 0x82C2 #define GL_IMAGE_CLASS_10_10_10_2 0x82C3 #define GL_VIEW_CLASS_128_BITS 0x82C4 #define GL_VIEW_CLASS_96_BITS 0x82C5 #define GL_VIEW_CLASS_64_BITS 0x82C6 #define GL_VIEW_CLASS_48_BITS 0x82C7 #define GL_VIEW_CLASS_32_BITS 0x82C8 #define GL_VIEW_CLASS_24_BITS 0x82C9 #define GL_VIEW_CLASS_16_BITS 0x82CA #define GL_VIEW_CLASS_8_BITS 0x82CB #define GL_VIEW_CLASS_S3TC_DXT1_RGB 0x82CC #define GL_VIEW_CLASS_S3TC_DXT1_RGBA 0x82CD #define GL_VIEW_CLASS_S3TC_DXT3_RGBA 0x82CE #define GL_VIEW_CLASS_S3TC_DXT5_RGBA 0x82CF #define GL_VIEW_CLASS_RGTC1_RED 0x82D0 #define GL_VIEW_CLASS_RGTC2_RG 0x82D1 #define GL_VIEW_CLASS_BPTC_UNORM 0x82D2 #define GL_VIEW_CLASS_BPTC_FLOAT 0x82D3 #endif #ifndef GL_ARB_invalidate_subdata #endif #ifndef GL_ARB_multi_draw_indirect #endif #ifndef GL_ARB_program_interface_query #define GL_UNIFORM 0x92E1 #define GL_UNIFORM_BLOCK 0x92E2 #define GL_PROGRAM_INPUT 0x92E3 #define GL_PROGRAM_OUTPUT 0x92E4 #define GL_BUFFER_VARIABLE 0x92E5 #define GL_SHADER_STORAGE_BLOCK 0x92E6 /* reuse GL_ATOMIC_COUNTER_BUFFER */ #define GL_VERTEX_SUBROUTINE 0x92E8 #define GL_TESS_CONTROL_SUBROUTINE 0x92E9 #define GL_TESS_EVALUATION_SUBROUTINE 0x92EA #define GL_GEOMETRY_SUBROUTINE 0x92EB #define GL_FRAGMENT_SUBROUTINE 0x92EC #define GL_COMPUTE_SUBROUTINE 0x92ED #define GL_VERTEX_SUBROUTINE_UNIFORM 0x92EE #define GL_TESS_CONTROL_SUBROUTINE_UNIFORM 0x92EF #define GL_TESS_EVALUATION_SUBROUTINE_UNIFORM 0x92F0 #define GL_GEOMETRY_SUBROUTINE_UNIFORM 0x92F1 #define GL_FRAGMENT_SUBROUTINE_UNIFORM 0x92F2 #define GL_COMPUTE_SUBROUTINE_UNIFORM 0x92F3 #define GL_TRANSFORM_FEEDBACK_VARYING 0x92F4 #define GL_ACTIVE_RESOURCES 0x92F5 #define GL_MAX_NAME_LENGTH 0x92F6 #define GL_MAX_NUM_ACTIVE_VARIABLES 0x92F7 #define GL_MAX_NUM_COMPATIBLE_SUBROUTINES 0x92F8 #define GL_NAME_LENGTH 0x92F9 #define GL_TYPE 0x92FA #define GL_ARRAY_SIZE 0x92FB #define GL_OFFSET 0x92FC #define GL_BLOCK_INDEX 0x92FD #define GL_ARRAY_STRIDE 0x92FE #define GL_MATRIX_STRIDE 0x92FF #define GL_IS_ROW_MAJOR 0x9300 #define GL_ATOMIC_COUNTER_BUFFER_INDEX 0x9301 #define GL_BUFFER_BINDING 0x9302 #define GL_BUFFER_DATA_SIZE 0x9303 #define GL_NUM_ACTIVE_VARIABLES 0x9304 #define GL_ACTIVE_VARIABLES 0x9305 #define GL_REFERENCED_BY_VERTEX_SHADER 0x9306 #define GL_REFERENCED_BY_TESS_CONTROL_SHADER 0x9307 #define GL_REFERENCED_BY_TESS_EVALUATION_SHADER 0x9308 #define GL_REFERENCED_BY_GEOMETRY_SHADER 0x9309 #define GL_REFERENCED_BY_FRAGMENT_SHADER 0x930A #define GL_REFERENCED_BY_COMPUTE_SHADER 0x930B #define GL_TOP_LEVEL_ARRAY_SIZE 0x930C #define GL_TOP_LEVEL_ARRAY_STRIDE 0x930D #define GL_LOCATION 0x930E #define GL_LOCATION_INDEX 0x930F #define GL_IS_PER_PATCH 0x92E7 /* reuse GL_NUM_COMPATIBLE_SUBROUTINES */ /* reuse GL_COMPATIBLE_SUBROUTINES */ #endif #ifndef GL_ARB_robust_buffer_access_behavior #endif #ifndef GL_ARB_shader_image_size #endif #ifndef GL_ARB_shader_storage_buffer_object #define GL_SHADER_STORAGE_BUFFER 0x90D2 #define GL_SHADER_STORAGE_BUFFER_BINDING 0x90D3 #define GL_SHADER_STORAGE_BUFFER_START 0x90D4 #define GL_SHADER_STORAGE_BUFFER_SIZE 0x90D5 #define GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS 0x90D6 #define GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS 0x90D7 #define GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS 0x90D8 #define GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS 0x90D9 #define GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS 0x90DA #define GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS 0x90DB #define GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS 0x90DC #define GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS 0x90DD #define GL_MAX_SHADER_STORAGE_BLOCK_SIZE 0x90DE #define GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT 0x90DF #define GL_SHADER_STORAGE_BARRIER_BIT 0x00002000 #define GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES 0x8F39 /* reuse GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS */ #endif #ifndef GL_ARB_stencil_texturing #define GL_DEPTH_STENCIL_TEXTURE_MODE 0x90EA #endif #ifndef GL_ARB_texture_buffer_range #define GL_TEXTURE_BUFFER_OFFSET 0x919D #define GL_TEXTURE_BUFFER_SIZE 0x919E #define GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT 0x919F #endif #ifndef GL_ARB_texture_query_levels #endif #ifndef GL_ARB_texture_storage_multisample #endif #ifndef GL_EXT_abgr #define GL_ABGR_EXT 0x8000 #endif #ifndef GL_EXT_blend_color #define GL_CONSTANT_COLOR_EXT 0x8001 #define GL_ONE_MINUS_CONSTANT_COLOR_EXT 0x8002 #define GL_CONSTANT_ALPHA_EXT 0x8003 #define GL_ONE_MINUS_CONSTANT_ALPHA_EXT 0x8004 #define GL_BLEND_COLOR_EXT 0x8005 #endif #ifndef GL_EXT_polygon_offset #define GL_POLYGON_OFFSET_EXT 0x8037 #define GL_POLYGON_OFFSET_FACTOR_EXT 0x8038 #define GL_POLYGON_OFFSET_BIAS_EXT 0x8039 #endif #ifndef GL_EXT_texture #define GL_ALPHA4_EXT 0x803B #define GL_ALPHA8_EXT 0x803C #define GL_ALPHA12_EXT 0x803D #define GL_ALPHA16_EXT 0x803E #define GL_LUMINANCE4_EXT 0x803F #define GL_LUMINANCE8_EXT 0x8040 #define GL_LUMINANCE12_EXT 0x8041 #define GL_LUMINANCE16_EXT 0x8042 #define GL_LUMINANCE4_ALPHA4_EXT 0x8043 #define GL_LUMINANCE6_ALPHA2_EXT 0x8044 #define GL_LUMINANCE8_ALPHA8_EXT 0x8045 #define GL_LUMINANCE12_ALPHA4_EXT 0x8046 #define GL_LUMINANCE12_ALPHA12_EXT 0x8047 #define GL_LUMINANCE16_ALPHA16_EXT 0x8048 #define GL_INTENSITY_EXT 0x8049 #define GL_INTENSITY4_EXT 0x804A #define GL_INTENSITY8_EXT 0x804B #define GL_INTENSITY12_EXT 0x804C #define GL_INTENSITY16_EXT 0x804D #define GL_RGB2_EXT 0x804E #define GL_RGB4_EXT 0x804F #define GL_RGB5_EXT 0x8050 #define GL_RGB8_EXT 0x8051 #define GL_RGB10_EXT 0x8052 #define GL_RGB12_EXT 0x8053 #define GL_RGB16_EXT 0x8054 #define GL_RGBA2_EXT 0x8055 #define GL_RGBA4_EXT 0x8056 #define GL_RGB5_A1_EXT 0x8057 #define GL_RGBA8_EXT 0x8058 #define GL_RGB10_A2_EXT 0x8059 #define GL_RGBA12_EXT 0x805A #define GL_RGBA16_EXT 0x805B #define GL_TEXTURE_RED_SIZE_EXT 0x805C #define GL_TEXTURE_GREEN_SIZE_EXT 0x805D #define GL_TEXTURE_BLUE_SIZE_EXT 0x805E #define GL_TEXTURE_ALPHA_SIZE_EXT 0x805F #define GL_TEXTURE_LUMINANCE_SIZE_EXT 0x8060 #define GL_TEXTURE_INTENSITY_SIZE_EXT 0x8061 #define GL_REPLACE_EXT 0x8062 #define GL_PROXY_TEXTURE_1D_EXT 0x8063 #define GL_PROXY_TEXTURE_2D_EXT 0x8064 #define GL_TEXTURE_TOO_LARGE_EXT 0x8065 #endif #ifndef GL_EXT_texture3D #define GL_PACK_SKIP_IMAGES_EXT 0x806B #define GL_PACK_IMAGE_HEIGHT_EXT 0x806C #define GL_UNPACK_SKIP_IMAGES_EXT 0x806D #define GL_UNPACK_IMAGE_HEIGHT_EXT 0x806E #define GL_TEXTURE_3D_EXT 0x806F #define GL_PROXY_TEXTURE_3D_EXT 0x8070 #define GL_TEXTURE_DEPTH_EXT 0x8071 #define GL_TEXTURE_WRAP_R_EXT 0x8072 #define GL_MAX_3D_TEXTURE_SIZE_EXT 0x8073 #endif #ifndef GL_SGIS_texture_filter4 #define GL_FILTER4_SGIS 0x8146 #define GL_TEXTURE_FILTER4_SIZE_SGIS 0x8147 #endif #ifndef GL_EXT_subtexture #endif #ifndef GL_EXT_copy_texture #endif #ifndef GL_EXT_histogram #define GL_HISTOGRAM_EXT 0x8024 #define GL_PROXY_HISTOGRAM_EXT 0x8025 #define GL_HISTOGRAM_WIDTH_EXT 0x8026 #define GL_HISTOGRAM_FORMAT_EXT 0x8027 #define GL_HISTOGRAM_RED_SIZE_EXT 0x8028 #define GL_HISTOGRAM_GREEN_SIZE_EXT 0x8029 #define GL_HISTOGRAM_BLUE_SIZE_EXT 0x802A #define GL_HISTOGRAM_ALPHA_SIZE_EXT 0x802B #define GL_HISTOGRAM_LUMINANCE_SIZE_EXT 0x802C #define GL_HISTOGRAM_SINK_EXT 0x802D #define GL_MINMAX_EXT 0x802E #define GL_MINMAX_FORMAT_EXT 0x802F #define GL_MINMAX_SINK_EXT 0x8030 #define GL_TABLE_TOO_LARGE_EXT 0x8031 #endif #ifndef GL_EXT_convolution #define GL_CONVOLUTION_1D_EXT 0x8010 #define GL_CONVOLUTION_2D_EXT 0x8011 #define GL_SEPARABLE_2D_EXT 0x8012 #define GL_CONVOLUTION_BORDER_MODE_EXT 0x8013 #define GL_CONVOLUTION_FILTER_SCALE_EXT 0x8014 #define GL_CONVOLUTION_FILTER_BIAS_EXT 0x8015 #define GL_REDUCE_EXT 0x8016 #define GL_CONVOLUTION_FORMAT_EXT 0x8017 #define GL_CONVOLUTION_WIDTH_EXT 0x8018 #define GL_CONVOLUTION_HEIGHT_EXT 0x8019 #define GL_MAX_CONVOLUTION_WIDTH_EXT 0x801A #define GL_MAX_CONVOLUTION_HEIGHT_EXT 0x801B #define GL_POST_CONVOLUTION_RED_SCALE_EXT 0x801C #define GL_POST_CONVOLUTION_GREEN_SCALE_EXT 0x801D #define GL_POST_CONVOLUTION_BLUE_SCALE_EXT 0x801E #define GL_POST_CONVOLUTION_ALPHA_SCALE_EXT 0x801F #define GL_POST_CONVOLUTION_RED_BIAS_EXT 0x8020 #define GL_POST_CONVOLUTION_GREEN_BIAS_EXT 0x8021 #define GL_POST_CONVOLUTION_BLUE_BIAS_EXT 0x8022 #define GL_POST_CONVOLUTION_ALPHA_BIAS_EXT 0x8023 #endif #ifndef GL_SGI_color_matrix #define GL_COLOR_MATRIX_SGI 0x80B1 #define GL_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B2 #define GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B3 #define GL_POST_COLOR_MATRIX_RED_SCALE_SGI 0x80B4 #define GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI 0x80B5 #define GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI 0x80B6 #define GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI 0x80B7 #define GL_POST_COLOR_MATRIX_RED_BIAS_SGI 0x80B8 #define GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI 0x80B9 #define GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI 0x80BA #define GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI 0x80BB #endif #ifndef GL_SGI_color_table #define GL_COLOR_TABLE_SGI 0x80D0 #define GL_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D1 #define GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D2 #define GL_PROXY_COLOR_TABLE_SGI 0x80D3 #define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D4 #define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D5 #define GL_COLOR_TABLE_SCALE_SGI 0x80D6 #define GL_COLOR_TABLE_BIAS_SGI 0x80D7 #define GL_COLOR_TABLE_FORMAT_SGI 0x80D8 #define GL_COLOR_TABLE_WIDTH_SGI 0x80D9 #define GL_COLOR_TABLE_RED_SIZE_SGI 0x80DA #define GL_COLOR_TABLE_GREEN_SIZE_SGI 0x80DB #define GL_COLOR_TABLE_BLUE_SIZE_SGI 0x80DC #define GL_COLOR_TABLE_ALPHA_SIZE_SGI 0x80DD #define GL_COLOR_TABLE_LUMINANCE_SIZE_SGI 0x80DE #define GL_COLOR_TABLE_INTENSITY_SIZE_SGI 0x80DF #endif #ifndef GL_SGIS_pixel_texture #define GL_PIXEL_TEXTURE_SGIS 0x8353 #define GL_PIXEL_FRAGMENT_RGB_SOURCE_SGIS 0x8354 #define GL_PIXEL_FRAGMENT_ALPHA_SOURCE_SGIS 0x8355 #define GL_PIXEL_GROUP_COLOR_SGIS 0x8356 #endif #ifndef GL_SGIX_pixel_texture #define GL_PIXEL_TEX_GEN_SGIX 0x8139 #define GL_PIXEL_TEX_GEN_MODE_SGIX 0x832B #endif #ifndef GL_SGIS_texture4D #define GL_PACK_SKIP_VOLUMES_SGIS 0x8130 #define GL_PACK_IMAGE_DEPTH_SGIS 0x8131 #define GL_UNPACK_SKIP_VOLUMES_SGIS 0x8132 #define GL_UNPACK_IMAGE_DEPTH_SGIS 0x8133 #define GL_TEXTURE_4D_SGIS 0x8134 #define GL_PROXY_TEXTURE_4D_SGIS 0x8135 #define GL_TEXTURE_4DSIZE_SGIS 0x8136 #define GL_TEXTURE_WRAP_Q_SGIS 0x8137 #define GL_MAX_4D_TEXTURE_SIZE_SGIS 0x8138 #define GL_TEXTURE_4D_BINDING_SGIS 0x814F #endif #ifndef GL_SGI_texture_color_table #define GL_TEXTURE_COLOR_TABLE_SGI 0x80BC #define GL_PROXY_TEXTURE_COLOR_TABLE_SGI 0x80BD #endif #ifndef GL_EXT_cmyka #define GL_CMYK_EXT 0x800C #define GL_CMYKA_EXT 0x800D #define GL_PACK_CMYK_HINT_EXT 0x800E #define GL_UNPACK_CMYK_HINT_EXT 0x800F #endif #ifndef GL_EXT_texture_object #define GL_TEXTURE_PRIORITY_EXT 0x8066 #define GL_TEXTURE_RESIDENT_EXT 0x8067 #define GL_TEXTURE_1D_BINDING_EXT 0x8068 #define GL_TEXTURE_2D_BINDING_EXT 0x8069 #define GL_TEXTURE_3D_BINDING_EXT 0x806A #endif #ifndef GL_SGIS_detail_texture #define GL_DETAIL_TEXTURE_2D_SGIS 0x8095 #define GL_DETAIL_TEXTURE_2D_BINDING_SGIS 0x8096 #define GL_LINEAR_DETAIL_SGIS 0x8097 #define GL_LINEAR_DETAIL_ALPHA_SGIS 0x8098 #define GL_LINEAR_DETAIL_COLOR_SGIS 0x8099 #define GL_DETAIL_TEXTURE_LEVEL_SGIS 0x809A #define GL_DETAIL_TEXTURE_MODE_SGIS 0x809B #define GL_DETAIL_TEXTURE_FUNC_POINTS_SGIS 0x809C #endif #ifndef GL_SGIS_sharpen_texture #define GL_LINEAR_SHARPEN_SGIS 0x80AD #define GL_LINEAR_SHARPEN_ALPHA_SGIS 0x80AE #define GL_LINEAR_SHARPEN_COLOR_SGIS 0x80AF #define GL_SHARPEN_TEXTURE_FUNC_POINTS_SGIS 0x80B0 #endif #ifndef GL_EXT_packed_pixels #define GL_UNSIGNED_BYTE_3_3_2_EXT 0x8032 #define GL_UNSIGNED_SHORT_4_4_4_4_EXT 0x8033 #define GL_UNSIGNED_SHORT_5_5_5_1_EXT 0x8034 #define GL_UNSIGNED_INT_8_8_8_8_EXT 0x8035 #define GL_UNSIGNED_INT_10_10_10_2_EXT 0x8036 #endif #ifndef GL_SGIS_texture_lod #define GL_TEXTURE_MIN_LOD_SGIS 0x813A #define GL_TEXTURE_MAX_LOD_SGIS 0x813B #define GL_TEXTURE_BASE_LEVEL_SGIS 0x813C #define GL_TEXTURE_MAX_LEVEL_SGIS 0x813D #endif #ifndef GL_SGIS_multisample #define GL_MULTISAMPLE_SGIS 0x809D #define GL_SAMPLE_ALPHA_TO_MASK_SGIS 0x809E #define GL_SAMPLE_ALPHA_TO_ONE_SGIS 0x809F #define GL_SAMPLE_MASK_SGIS 0x80A0 #define GL_1PASS_SGIS 0x80A1 #define GL_2PASS_0_SGIS 0x80A2 #define GL_2PASS_1_SGIS 0x80A3 #define GL_4PASS_0_SGIS 0x80A4 #define GL_4PASS_1_SGIS 0x80A5 #define GL_4PASS_2_SGIS 0x80A6 #define GL_4PASS_3_SGIS 0x80A7 #define GL_SAMPLE_BUFFERS_SGIS 0x80A8 #define GL_SAMPLES_SGIS 0x80A9 #define GL_SAMPLE_MASK_VALUE_SGIS 0x80AA #define GL_SAMPLE_MASK_INVERT_SGIS 0x80AB #define GL_SAMPLE_PATTERN_SGIS 0x80AC #endif #ifndef GL_EXT_rescale_normal #define GL_RESCALE_NORMAL_EXT 0x803A #endif #ifndef GL_EXT_vertex_array #define GL_VERTEX_ARRAY_EXT 0x8074 #define GL_NORMAL_ARRAY_EXT 0x8075 #define GL_COLOR_ARRAY_EXT 0x8076 #define GL_INDEX_ARRAY_EXT 0x8077 #define GL_TEXTURE_COORD_ARRAY_EXT 0x8078 #define GL_EDGE_FLAG_ARRAY_EXT 0x8079 #define GL_VERTEX_ARRAY_SIZE_EXT 0x807A #define GL_VERTEX_ARRAY_TYPE_EXT 0x807B #define GL_VERTEX_ARRAY_STRIDE_EXT 0x807C #define GL_VERTEX_ARRAY_COUNT_EXT 0x807D #define GL_NORMAL_ARRAY_TYPE_EXT 0x807E #define GL_NORMAL_ARRAY_STRIDE_EXT 0x807F #define GL_NORMAL_ARRAY_COUNT_EXT 0x8080 #define GL_COLOR_ARRAY_SIZE_EXT 0x8081 #define GL_COLOR_ARRAY_TYPE_EXT 0x8082 #define GL_COLOR_ARRAY_STRIDE_EXT 0x8083 #define GL_COLOR_ARRAY_COUNT_EXT 0x8084 #define GL_INDEX_ARRAY_TYPE_EXT 0x8085 #define GL_INDEX_ARRAY_STRIDE_EXT 0x8086 #define GL_INDEX_ARRAY_COUNT_EXT 0x8087 #define GL_TEXTURE_COORD_ARRAY_SIZE_EXT 0x8088 #define GL_TEXTURE_COORD_ARRAY_TYPE_EXT 0x8089 #define GL_TEXTURE_COORD_ARRAY_STRIDE_EXT 0x808A #define GL_TEXTURE_COORD_ARRAY_COUNT_EXT 0x808B #define GL_EDGE_FLAG_ARRAY_STRIDE_EXT 0x808C #define GL_EDGE_FLAG_ARRAY_COUNT_EXT 0x808D #define GL_VERTEX_ARRAY_POINTER_EXT 0x808E #define GL_NORMAL_ARRAY_POINTER_EXT 0x808F #define GL_COLOR_ARRAY_POINTER_EXT 0x8090 #define GL_INDEX_ARRAY_POINTER_EXT 0x8091 #define GL_TEXTURE_COORD_ARRAY_POINTER_EXT 0x8092 #define GL_EDGE_FLAG_ARRAY_POINTER_EXT 0x8093 #endif #ifndef GL_EXT_misc_attribute #endif #ifndef GL_SGIS_generate_mipmap #define GL_GENERATE_MIPMAP_SGIS 0x8191 #define GL_GENERATE_MIPMAP_HINT_SGIS 0x8192 #endif #ifndef GL_SGIX_clipmap #define GL_LINEAR_CLIPMAP_LINEAR_SGIX 0x8170 #define GL_TEXTURE_CLIPMAP_CENTER_SGIX 0x8171 #define GL_TEXTURE_CLIPMAP_FRAME_SGIX 0x8172 #define GL_TEXTURE_CLIPMAP_OFFSET_SGIX 0x8173 #define GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8174 #define GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX 0x8175 #define GL_TEXTURE_CLIPMAP_DEPTH_SGIX 0x8176 #define GL_MAX_CLIPMAP_DEPTH_SGIX 0x8177 #define GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8178 #define GL_NEAREST_CLIPMAP_NEAREST_SGIX 0x844D #define GL_NEAREST_CLIPMAP_LINEAR_SGIX 0x844E #define GL_LINEAR_CLIPMAP_NEAREST_SGIX 0x844F #endif #ifndef GL_SGIX_shadow #define GL_TEXTURE_COMPARE_SGIX 0x819A #define GL_TEXTURE_COMPARE_OPERATOR_SGIX 0x819B #define GL_TEXTURE_LEQUAL_R_SGIX 0x819C #define GL_TEXTURE_GEQUAL_R_SGIX 0x819D #endif #ifndef GL_SGIS_texture_edge_clamp #define GL_CLAMP_TO_EDGE_SGIS 0x812F #endif #ifndef GL_SGIS_texture_border_clamp #define GL_CLAMP_TO_BORDER_SGIS 0x812D #endif #ifndef GL_EXT_blend_minmax #define GL_FUNC_ADD_EXT 0x8006 #define GL_MIN_EXT 0x8007 #define GL_MAX_EXT 0x8008 #define GL_BLEND_EQUATION_EXT 0x8009 #endif #ifndef GL_EXT_blend_subtract #define GL_FUNC_SUBTRACT_EXT 0x800A #define GL_FUNC_REVERSE_SUBTRACT_EXT 0x800B #endif #ifndef GL_EXT_blend_logic_op #endif #ifndef GL_SGIX_interlace #define GL_INTERLACE_SGIX 0x8094 #endif #ifndef GL_SGIX_pixel_tiles #define GL_PIXEL_TILE_BEST_ALIGNMENT_SGIX 0x813E #define GL_PIXEL_TILE_CACHE_INCREMENT_SGIX 0x813F #define GL_PIXEL_TILE_WIDTH_SGIX 0x8140 #define GL_PIXEL_TILE_HEIGHT_SGIX 0x8141 #define GL_PIXEL_TILE_GRID_WIDTH_SGIX 0x8142 #define GL_PIXEL_TILE_GRID_HEIGHT_SGIX 0x8143 #define GL_PIXEL_TILE_GRID_DEPTH_SGIX 0x8144 #define GL_PIXEL_TILE_CACHE_SIZE_SGIX 0x8145 #endif #ifndef GL_SGIS_texture_select #define GL_DUAL_ALPHA4_SGIS 0x8110 #define GL_DUAL_ALPHA8_SGIS 0x8111 #define GL_DUAL_ALPHA12_SGIS 0x8112 #define GL_DUAL_ALPHA16_SGIS 0x8113 #define GL_DUAL_LUMINANCE4_SGIS 0x8114 #define GL_DUAL_LUMINANCE8_SGIS 0x8115 #define GL_DUAL_LUMINANCE12_SGIS 0x8116 #define GL_DUAL_LUMINANCE16_SGIS 0x8117 #define GL_DUAL_INTENSITY4_SGIS 0x8118 #define GL_DUAL_INTENSITY8_SGIS 0x8119 #define GL_DUAL_INTENSITY12_SGIS 0x811A #define GL_DUAL_INTENSITY16_SGIS 0x811B #define GL_DUAL_LUMINANCE_ALPHA4_SGIS 0x811C #define GL_DUAL_LUMINANCE_ALPHA8_SGIS 0x811D #define GL_QUAD_ALPHA4_SGIS 0x811E #define GL_QUAD_ALPHA8_SGIS 0x811F #define GL_QUAD_LUMINANCE4_SGIS 0x8120 #define GL_QUAD_LUMINANCE8_SGIS 0x8121 #define GL_QUAD_INTENSITY4_SGIS 0x8122 #define GL_QUAD_INTENSITY8_SGIS 0x8123 #define GL_DUAL_TEXTURE_SELECT_SGIS 0x8124 #define GL_QUAD_TEXTURE_SELECT_SGIS 0x8125 #endif #ifndef GL_SGIX_sprite #define GL_SPRITE_SGIX 0x8148 #define GL_SPRITE_MODE_SGIX 0x8149 #define GL_SPRITE_AXIS_SGIX 0x814A #define GL_SPRITE_TRANSLATION_SGIX 0x814B #define GL_SPRITE_AXIAL_SGIX 0x814C #define GL_SPRITE_OBJECT_ALIGNED_SGIX 0x814D #define GL_SPRITE_EYE_ALIGNED_SGIX 0x814E #endif #ifndef GL_SGIX_texture_multi_buffer #define GL_TEXTURE_MULTI_BUFFER_HINT_SGIX 0x812E #endif #ifndef GL_EXT_point_parameters #define GL_POINT_SIZE_MIN_EXT 0x8126 #define GL_POINT_SIZE_MAX_EXT 0x8127 #define GL_POINT_FADE_THRESHOLD_SIZE_EXT 0x8128 #define GL_DISTANCE_ATTENUATION_EXT 0x8129 #endif #ifndef GL_SGIS_point_parameters #define GL_POINT_SIZE_MIN_SGIS 0x8126 #define GL_POINT_SIZE_MAX_SGIS 0x8127 #define GL_POINT_FADE_THRESHOLD_SIZE_SGIS 0x8128 #define GL_DISTANCE_ATTENUATION_SGIS 0x8129 #endif #ifndef GL_SGIX_instruments #define GL_INSTRUMENT_BUFFER_POINTER_SGIX 0x8180 #define GL_INSTRUMENT_MEASUREMENTS_SGIX 0x8181 #endif #ifndef GL_SGIX_texture_scale_bias #define GL_POST_TEXTURE_FILTER_BIAS_SGIX 0x8179 #define GL_POST_TEXTURE_FILTER_SCALE_SGIX 0x817A #define GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX 0x817B #define GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX 0x817C #endif #ifndef GL_SGIX_framezoom #define GL_FRAMEZOOM_SGIX 0x818B #define GL_FRAMEZOOM_FACTOR_SGIX 0x818C #define GL_MAX_FRAMEZOOM_FACTOR_SGIX 0x818D #endif #ifndef GL_SGIX_tag_sample_buffer #endif #ifndef GL_SGIX_polynomial_ffd #define GL_TEXTURE_DEFORMATION_BIT_SGIX 0x00000001 #define GL_GEOMETRY_DEFORMATION_BIT_SGIX 0x00000002 #define GL_GEOMETRY_DEFORMATION_SGIX 0x8194 #define GL_TEXTURE_DEFORMATION_SGIX 0x8195 #define GL_DEFORMATIONS_MASK_SGIX 0x8196 #define GL_MAX_DEFORMATION_ORDER_SGIX 0x8197 #endif #ifndef GL_SGIX_reference_plane #define GL_REFERENCE_PLANE_SGIX 0x817D #define GL_REFERENCE_PLANE_EQUATION_SGIX 0x817E #endif #ifndef GL_SGIX_flush_raster #endif #ifndef GL_SGIX_depth_texture #define GL_DEPTH_COMPONENT16_SGIX 0x81A5 #define GL_DEPTH_COMPONENT24_SGIX 0x81A6 #define GL_DEPTH_COMPONENT32_SGIX 0x81A7 #endif #ifndef GL_SGIS_fog_function #define GL_FOG_FUNC_SGIS 0x812A #define GL_FOG_FUNC_POINTS_SGIS 0x812B #define GL_MAX_FOG_FUNC_POINTS_SGIS 0x812C #endif #ifndef GL_SGIX_fog_offset #define GL_FOG_OFFSET_SGIX 0x8198 #define GL_FOG_OFFSET_VALUE_SGIX 0x8199 #endif #ifndef GL_HP_image_transform #define GL_IMAGE_SCALE_X_HP 0x8155 #define GL_IMAGE_SCALE_Y_HP 0x8156 #define GL_IMAGE_TRANSLATE_X_HP 0x8157 #define GL_IMAGE_TRANSLATE_Y_HP 0x8158 #define GL_IMAGE_ROTATE_ANGLE_HP 0x8159 #define GL_IMAGE_ROTATE_ORIGIN_X_HP 0x815A #define GL_IMAGE_ROTATE_ORIGIN_Y_HP 0x815B #define GL_IMAGE_MAG_FILTER_HP 0x815C #define GL_IMAGE_MIN_FILTER_HP 0x815D #define GL_IMAGE_CUBIC_WEIGHT_HP 0x815E #define GL_CUBIC_HP 0x815F #define GL_AVERAGE_HP 0x8160 #define GL_IMAGE_TRANSFORM_2D_HP 0x8161 #define GL_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8162 #define GL_PROXY_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8163 #endif #ifndef GL_HP_convolution_border_modes #define GL_IGNORE_BORDER_HP 0x8150 #define GL_CONSTANT_BORDER_HP 0x8151 #define GL_REPLICATE_BORDER_HP 0x8153 #define GL_CONVOLUTION_BORDER_COLOR_HP 0x8154 #endif #ifndef GL_INGR_palette_buffer #endif #ifndef GL_SGIX_texture_add_env #define GL_TEXTURE_ENV_BIAS_SGIX 0x80BE #endif #ifndef GL_EXT_color_subtable #endif #ifndef GL_PGI_vertex_hints #define GL_VERTEX_DATA_HINT_PGI 0x1A22A #define GL_VERTEX_CONSISTENT_HINT_PGI 0x1A22B #define GL_MATERIAL_SIDE_HINT_PGI 0x1A22C #define GL_MAX_VERTEX_HINT_PGI 0x1A22D #define GL_VERTEX23_BIT_PGI 0x00000004 #define GL_VERTEX4_BIT_PGI 0x00000008 #define GL_COLOR3_BIT_PGI 0x00010000 #define GL_COLOR4_BIT_PGI 0x00020000 #define GL_EDGEFLAG_BIT_PGI 0x00040000 #define GL_INDEX_BIT_PGI 0x00080000 #define GL_MAT_AMBIENT_BIT_PGI 0x00100000 #define GL_MAT_AMBIENT_AND_DIFFUSE_BIT_PGI 0x00200000 #define GL_MAT_DIFFUSE_BIT_PGI 0x00400000 #define GL_MAT_EMISSION_BIT_PGI 0x00800000 #define GL_MAT_COLOR_INDEXES_BIT_PGI 0x01000000 #define GL_MAT_SHININESS_BIT_PGI 0x02000000 #define GL_MAT_SPECULAR_BIT_PGI 0x04000000 #define GL_NORMAL_BIT_PGI 0x08000000 #define GL_TEXCOORD1_BIT_PGI 0x10000000 #define GL_TEXCOORD2_BIT_PGI 0x20000000 #define GL_TEXCOORD3_BIT_PGI 0x40000000 #define GL_TEXCOORD4_BIT_PGI 0x80000000 #endif #ifndef GL_PGI_misc_hints #define GL_PREFER_DOUBLEBUFFER_HINT_PGI 0x1A1F8 #define GL_CONSERVE_MEMORY_HINT_PGI 0x1A1FD #define GL_RECLAIM_MEMORY_HINT_PGI 0x1A1FE #define GL_NATIVE_GRAPHICS_HANDLE_PGI 0x1A202 #define GL_NATIVE_GRAPHICS_BEGIN_HINT_PGI 0x1A203 #define GL_NATIVE_GRAPHICS_END_HINT_PGI 0x1A204 #define GL_ALWAYS_FAST_HINT_PGI 0x1A20C #define GL_ALWAYS_SOFT_HINT_PGI 0x1A20D #define GL_ALLOW_DRAW_OBJ_HINT_PGI 0x1A20E #define GL_ALLOW_DRAW_WIN_HINT_PGI 0x1A20F #define GL_ALLOW_DRAW_FRG_HINT_PGI 0x1A210 #define GL_ALLOW_DRAW_MEM_HINT_PGI 0x1A211 #define GL_STRICT_DEPTHFUNC_HINT_PGI 0x1A216 #define GL_STRICT_LIGHTING_HINT_PGI 0x1A217 #define GL_STRICT_SCISSOR_HINT_PGI 0x1A218 #define GL_FULL_STIPPLE_HINT_PGI 0x1A219 #define GL_CLIP_NEAR_HINT_PGI 0x1A220 #define GL_CLIP_FAR_HINT_PGI 0x1A221 #define GL_WIDE_LINE_HINT_PGI 0x1A222 #define GL_BACK_NORMALS_HINT_PGI 0x1A223 #endif #ifndef GL_EXT_paletted_texture #define GL_COLOR_INDEX1_EXT 0x80E2 #define GL_COLOR_INDEX2_EXT 0x80E3 #define GL_COLOR_INDEX4_EXT 0x80E4 #define GL_COLOR_INDEX8_EXT 0x80E5 #define GL_COLOR_INDEX12_EXT 0x80E6 #define GL_COLOR_INDEX16_EXT 0x80E7 #define GL_TEXTURE_INDEX_SIZE_EXT 0x80ED #endif #ifndef GL_EXT_clip_volume_hint #define GL_CLIP_VOLUME_CLIPPING_HINT_EXT 0x80F0 #endif #ifndef GL_SGIX_list_priority #define GL_LIST_PRIORITY_SGIX 0x8182 #endif #ifndef GL_SGIX_ir_instrument1 #define GL_IR_INSTRUMENT1_SGIX 0x817F #endif #ifndef GL_SGIX_calligraphic_fragment #define GL_CALLIGRAPHIC_FRAGMENT_SGIX 0x8183 #endif #ifndef GL_SGIX_texture_lod_bias #define GL_TEXTURE_LOD_BIAS_S_SGIX 0x818E #define GL_TEXTURE_LOD_BIAS_T_SGIX 0x818F #define GL_TEXTURE_LOD_BIAS_R_SGIX 0x8190 #endif #ifndef GL_SGIX_shadow_ambient #define GL_SHADOW_AMBIENT_SGIX 0x80BF #endif #ifndef GL_EXT_index_texture #endif #ifndef GL_EXT_index_material #define GL_INDEX_MATERIAL_EXT 0x81B8 #define GL_INDEX_MATERIAL_PARAMETER_EXT 0x81B9 #define GL_INDEX_MATERIAL_FACE_EXT 0x81BA #endif #ifndef GL_EXT_index_func #define GL_INDEX_TEST_EXT 0x81B5 #define GL_INDEX_TEST_FUNC_EXT 0x81B6 #define GL_INDEX_TEST_REF_EXT 0x81B7 #endif #ifndef GL_EXT_index_array_formats #define GL_IUI_V2F_EXT 0x81AD #define GL_IUI_V3F_EXT 0x81AE #define GL_IUI_N3F_V2F_EXT 0x81AF #define GL_IUI_N3F_V3F_EXT 0x81B0 #define GL_T2F_IUI_V2F_EXT 0x81B1 #define GL_T2F_IUI_V3F_EXT 0x81B2 #define GL_T2F_IUI_N3F_V2F_EXT 0x81B3 #define GL_T2F_IUI_N3F_V3F_EXT 0x81B4 #endif #ifndef GL_EXT_compiled_vertex_array #define GL_ARRAY_ELEMENT_LOCK_FIRST_EXT 0x81A8 #define GL_ARRAY_ELEMENT_LOCK_COUNT_EXT 0x81A9 #endif #ifndef GL_EXT_cull_vertex #define GL_CULL_VERTEX_EXT 0x81AA #define GL_CULL_VERTEX_EYE_POSITION_EXT 0x81AB #define GL_CULL_VERTEX_OBJECT_POSITION_EXT 0x81AC #endif #ifndef GL_SGIX_ycrcb #define GL_YCRCB_422_SGIX 0x81BB #define GL_YCRCB_444_SGIX 0x81BC #endif #ifndef GL_SGIX_fragment_lighting #define GL_FRAGMENT_LIGHTING_SGIX 0x8400 #define GL_FRAGMENT_COLOR_MATERIAL_SGIX 0x8401 #define GL_FRAGMENT_COLOR_MATERIAL_FACE_SGIX 0x8402 #define GL_FRAGMENT_COLOR_MATERIAL_PARAMETER_SGIX 0x8403 #define GL_MAX_FRAGMENT_LIGHTS_SGIX 0x8404 #define GL_MAX_ACTIVE_LIGHTS_SGIX 0x8405 #define GL_CURRENT_RASTER_NORMAL_SGIX 0x8406 #define GL_LIGHT_ENV_MODE_SGIX 0x8407 #define GL_FRAGMENT_LIGHT_MODEL_LOCAL_VIEWER_SGIX 0x8408 #define GL_FRAGMENT_LIGHT_MODEL_TWO_SIDE_SGIX 0x8409 #define GL_FRAGMENT_LIGHT_MODEL_AMBIENT_SGIX 0x840A #define GL_FRAGMENT_LIGHT_MODEL_NORMAL_INTERPOLATION_SGIX 0x840B #define GL_FRAGMENT_LIGHT0_SGIX 0x840C #define GL_FRAGMENT_LIGHT1_SGIX 0x840D #define GL_FRAGMENT_LIGHT2_SGIX 0x840E #define GL_FRAGMENT_LIGHT3_SGIX 0x840F #define GL_FRAGMENT_LIGHT4_SGIX 0x8410 #define GL_FRAGMENT_LIGHT5_SGIX 0x8411 #define GL_FRAGMENT_LIGHT6_SGIX 0x8412 #define GL_FRAGMENT_LIGHT7_SGIX 0x8413 #endif #ifndef GL_IBM_rasterpos_clip #define GL_RASTER_POSITION_UNCLIPPED_IBM 0x19262 #endif #ifndef GL_HP_texture_lighting #define GL_TEXTURE_LIGHTING_MODE_HP 0x8167 #define GL_TEXTURE_POST_SPECULAR_HP 0x8168 #define GL_TEXTURE_PRE_SPECULAR_HP 0x8169 #endif #ifndef GL_EXT_draw_range_elements #define GL_MAX_ELEMENTS_VERTICES_EXT 0x80E8 #define GL_MAX_ELEMENTS_INDICES_EXT 0x80E9 #endif #ifndef GL_WIN_phong_shading #define GL_PHONG_WIN 0x80EA #define GL_PHONG_HINT_WIN 0x80EB #endif #ifndef GL_WIN_specular_fog #define GL_FOG_SPECULAR_TEXTURE_WIN 0x80EC #endif #ifndef GL_EXT_light_texture #define GL_FRAGMENT_MATERIAL_EXT 0x8349 #define GL_FRAGMENT_NORMAL_EXT 0x834A #define GL_FRAGMENT_COLOR_EXT 0x834C #define GL_ATTENUATION_EXT 0x834D #define GL_SHADOW_ATTENUATION_EXT 0x834E #define GL_TEXTURE_APPLICATION_MODE_EXT 0x834F #define GL_TEXTURE_LIGHT_EXT 0x8350 #define GL_TEXTURE_MATERIAL_FACE_EXT 0x8351 #define GL_TEXTURE_MATERIAL_PARAMETER_EXT 0x8352 /* reuse GL_FRAGMENT_DEPTH_EXT */ #endif #ifndef GL_SGIX_blend_alpha_minmax #define GL_ALPHA_MIN_SGIX 0x8320 #define GL_ALPHA_MAX_SGIX 0x8321 #endif #ifndef GL_EXT_bgra #define GL_BGR_EXT 0x80E0 #define GL_BGRA_EXT 0x80E1 #endif #ifndef GL_SGIX_async #define GL_ASYNC_MARKER_SGIX 0x8329 #endif #ifndef GL_SGIX_async_pixel #define GL_ASYNC_TEX_IMAGE_SGIX 0x835C #define GL_ASYNC_DRAW_PIXELS_SGIX 0x835D #define GL_ASYNC_READ_PIXELS_SGIX 0x835E #define GL_MAX_ASYNC_TEX_IMAGE_SGIX 0x835F #define GL_MAX_ASYNC_DRAW_PIXELS_SGIX 0x8360 #define GL_MAX_ASYNC_READ_PIXELS_SGIX 0x8361 #endif #ifndef GL_SGIX_async_histogram #define GL_ASYNC_HISTOGRAM_SGIX 0x832C #define GL_MAX_ASYNC_HISTOGRAM_SGIX 0x832D #endif #ifndef GL_INTEL_texture_scissor #endif #ifndef GL_INTEL_parallel_arrays #define GL_PARALLEL_ARRAYS_INTEL 0x83F4 #define GL_VERTEX_ARRAY_PARALLEL_POINTERS_INTEL 0x83F5 #define GL_NORMAL_ARRAY_PARALLEL_POINTERS_INTEL 0x83F6 #define GL_COLOR_ARRAY_PARALLEL_POINTERS_INTEL 0x83F7 #define GL_TEXTURE_COORD_ARRAY_PARALLEL_POINTERS_INTEL 0x83F8 #endif #ifndef GL_HP_occlusion_test #define GL_OCCLUSION_TEST_HP 0x8165 #define GL_OCCLUSION_TEST_RESULT_HP 0x8166 #endif #ifndef GL_EXT_pixel_transform #define GL_PIXEL_TRANSFORM_2D_EXT 0x8330 #define GL_PIXEL_MAG_FILTER_EXT 0x8331 #define GL_PIXEL_MIN_FILTER_EXT 0x8332 #define GL_PIXEL_CUBIC_WEIGHT_EXT 0x8333 #define GL_CUBIC_EXT 0x8334 #define GL_AVERAGE_EXT 0x8335 #define GL_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8336 #define GL_MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8337 #define GL_PIXEL_TRANSFORM_2D_MATRIX_EXT 0x8338 #endif #ifndef GL_EXT_pixel_transform_color_table #endif #ifndef GL_EXT_shared_texture_palette #define GL_SHARED_TEXTURE_PALETTE_EXT 0x81FB #endif #ifndef GL_EXT_separate_specular_color #define GL_LIGHT_MODEL_COLOR_CONTROL_EXT 0x81F8 #define GL_SINGLE_COLOR_EXT 0x81F9 #define GL_SEPARATE_SPECULAR_COLOR_EXT 0x81FA #endif #ifndef GL_EXT_secondary_color #define GL_COLOR_SUM_EXT 0x8458 #define GL_CURRENT_SECONDARY_COLOR_EXT 0x8459 #define GL_SECONDARY_COLOR_ARRAY_SIZE_EXT 0x845A #define GL_SECONDARY_COLOR_ARRAY_TYPE_EXT 0x845B #define GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT 0x845C #define GL_SECONDARY_COLOR_ARRAY_POINTER_EXT 0x845D #define GL_SECONDARY_COLOR_ARRAY_EXT 0x845E #endif #ifndef GL_EXT_texture_perturb_normal #define GL_PERTURB_EXT 0x85AE #define GL_TEXTURE_NORMAL_EXT 0x85AF #endif #ifndef GL_EXT_multi_draw_arrays #endif #ifndef GL_EXT_fog_coord #define GL_FOG_COORDINATE_SOURCE_EXT 0x8450 #define GL_FOG_COORDINATE_EXT 0x8451 #define GL_FRAGMENT_DEPTH_EXT 0x8452 #define GL_CURRENT_FOG_COORDINATE_EXT 0x8453 #define GL_FOG_COORDINATE_ARRAY_TYPE_EXT 0x8454 #define GL_FOG_COORDINATE_ARRAY_STRIDE_EXT 0x8455 #define GL_FOG_COORDINATE_ARRAY_POINTER_EXT 0x8456 #define GL_FOG_COORDINATE_ARRAY_EXT 0x8457 #endif #ifndef GL_REND_screen_coordinates #define GL_SCREEN_COORDINATES_REND 0x8490 #define GL_INVERTED_SCREEN_W_REND 0x8491 #endif #ifndef GL_EXT_coordinate_frame #define GL_TANGENT_ARRAY_EXT 0x8439 #define GL_BINORMAL_ARRAY_EXT 0x843A #define GL_CURRENT_TANGENT_EXT 0x843B #define GL_CURRENT_BINORMAL_EXT 0x843C #define GL_TANGENT_ARRAY_TYPE_EXT 0x843E #define GL_TANGENT_ARRAY_STRIDE_EXT 0x843F #define GL_BINORMAL_ARRAY_TYPE_EXT 0x8440 #define GL_BINORMAL_ARRAY_STRIDE_EXT 0x8441 #define GL_TANGENT_ARRAY_POINTER_EXT 0x8442 #define GL_BINORMAL_ARRAY_POINTER_EXT 0x8443 #define GL_MAP1_TANGENT_EXT 0x8444 #define GL_MAP2_TANGENT_EXT 0x8445 #define GL_MAP1_BINORMAL_EXT 0x8446 #define GL_MAP2_BINORMAL_EXT 0x8447 #endif #ifndef GL_EXT_texture_env_combine #define GL_COMBINE_EXT 0x8570 #define GL_COMBINE_RGB_EXT 0x8571 #define GL_COMBINE_ALPHA_EXT 0x8572 #define GL_RGB_SCALE_EXT 0x8573 #define GL_ADD_SIGNED_EXT 0x8574 #define GL_INTERPOLATE_EXT 0x8575 #define GL_CONSTANT_EXT 0x8576 #define GL_PRIMARY_COLOR_EXT 0x8577 #define GL_PREVIOUS_EXT 0x8578 #define GL_SOURCE0_RGB_EXT 0x8580 #define GL_SOURCE1_RGB_EXT 0x8581 #define GL_SOURCE2_RGB_EXT 0x8582 #define GL_SOURCE0_ALPHA_EXT 0x8588 #define GL_SOURCE1_ALPHA_EXT 0x8589 #define GL_SOURCE2_ALPHA_EXT 0x858A #define GL_OPERAND0_RGB_EXT 0x8590 #define GL_OPERAND1_RGB_EXT 0x8591 #define GL_OPERAND2_RGB_EXT 0x8592 #define GL_OPERAND0_ALPHA_EXT 0x8598 #define GL_OPERAND1_ALPHA_EXT 0x8599 #define GL_OPERAND2_ALPHA_EXT 0x859A #endif #ifndef GL_APPLE_specular_vector #define GL_LIGHT_MODEL_SPECULAR_VECTOR_APPLE 0x85B0 #endif #ifndef GL_APPLE_transform_hint #define GL_TRANSFORM_HINT_APPLE 0x85B1 #endif #ifndef GL_SUNX_constant_data #define GL_UNPACK_CONSTANT_DATA_SUNX 0x81D5 #define GL_TEXTURE_CONSTANT_DATA_SUNX 0x81D6 #endif #ifndef GL_SUN_global_alpha #define GL_GLOBAL_ALPHA_SUN 0x81D9 #define GL_GLOBAL_ALPHA_FACTOR_SUN 0x81DA #endif #ifndef GL_SUN_triangle_list #define GL_RESTART_SUN 0x0001 #define GL_REPLACE_MIDDLE_SUN 0x0002 #define GL_REPLACE_OLDEST_SUN 0x0003 #define GL_TRIANGLE_LIST_SUN 0x81D7 #define GL_REPLACEMENT_CODE_SUN 0x81D8 #define GL_REPLACEMENT_CODE_ARRAY_SUN 0x85C0 #define GL_REPLACEMENT_CODE_ARRAY_TYPE_SUN 0x85C1 #define GL_REPLACEMENT_CODE_ARRAY_STRIDE_SUN 0x85C2 #define GL_REPLACEMENT_CODE_ARRAY_POINTER_SUN 0x85C3 #define GL_R1UI_V3F_SUN 0x85C4 #define GL_R1UI_C4UB_V3F_SUN 0x85C5 #define GL_R1UI_C3F_V3F_SUN 0x85C6 #define GL_R1UI_N3F_V3F_SUN 0x85C7 #define GL_R1UI_C4F_N3F_V3F_SUN 0x85C8 #define GL_R1UI_T2F_V3F_SUN 0x85C9 #define GL_R1UI_T2F_N3F_V3F_SUN 0x85CA #define GL_R1UI_T2F_C4F_N3F_V3F_SUN 0x85CB #endif #ifndef GL_SUN_vertex #endif #ifndef GL_EXT_blend_func_separate #define GL_BLEND_DST_RGB_EXT 0x80C8 #define GL_BLEND_SRC_RGB_EXT 0x80C9 #define GL_BLEND_DST_ALPHA_EXT 0x80CA #define GL_BLEND_SRC_ALPHA_EXT 0x80CB #endif #ifndef GL_INGR_color_clamp #define GL_RED_MIN_CLAMP_INGR 0x8560 #define GL_GREEN_MIN_CLAMP_INGR 0x8561 #define GL_BLUE_MIN_CLAMP_INGR 0x8562 #define GL_ALPHA_MIN_CLAMP_INGR 0x8563 #define GL_RED_MAX_CLAMP_INGR 0x8564 #define GL_GREEN_MAX_CLAMP_INGR 0x8565 #define GL_BLUE_MAX_CLAMP_INGR 0x8566 #define GL_ALPHA_MAX_CLAMP_INGR 0x8567 #endif #ifndef GL_INGR_interlace_read #define GL_INTERLACE_READ_INGR 0x8568 #endif #ifndef GL_EXT_stencil_wrap #define GL_INCR_WRAP_EXT 0x8507 #define GL_DECR_WRAP_EXT 0x8508 #endif #ifndef GL_EXT_422_pixels #define GL_422_EXT 0x80CC #define GL_422_REV_EXT 0x80CD #define GL_422_AVERAGE_EXT 0x80CE #define GL_422_REV_AVERAGE_EXT 0x80CF #endif #ifndef GL_NV_texgen_reflection #define GL_NORMAL_MAP_NV 0x8511 #define GL_REFLECTION_MAP_NV 0x8512 #endif #ifndef GL_EXT_texture_cube_map #define GL_NORMAL_MAP_EXT 0x8511 #define GL_REFLECTION_MAP_EXT 0x8512 #define GL_TEXTURE_CUBE_MAP_EXT 0x8513 #define GL_TEXTURE_BINDING_CUBE_MAP_EXT 0x8514 #define GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT 0x8515 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT 0x8516 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT 0x8517 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT 0x8518 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT 0x8519 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT 0x851A #define GL_PROXY_TEXTURE_CUBE_MAP_EXT 0x851B #define GL_MAX_CUBE_MAP_TEXTURE_SIZE_EXT 0x851C #endif #ifndef GL_SUN_convolution_border_modes #define GL_WRAP_BORDER_SUN 0x81D4 #endif #ifndef GL_EXT_texture_env_add #endif #ifndef GL_EXT_texture_lod_bias #define GL_MAX_TEXTURE_LOD_BIAS_EXT 0x84FD #define GL_TEXTURE_FILTER_CONTROL_EXT 0x8500 #define GL_TEXTURE_LOD_BIAS_EXT 0x8501 #endif #ifndef GL_EXT_texture_filter_anisotropic #define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE #define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF #endif #ifndef GL_EXT_vertex_weighting #define GL_MODELVIEW0_STACK_DEPTH_EXT 0x0BA3 #define GL_MODELVIEW1_STACK_DEPTH_EXT 0x8502 #define GL_MODELVIEW0_MATRIX_EXT 0x0BA6 #define GL_MODELVIEW1_MATRIX_EXT 0x8506 #define GL_VERTEX_WEIGHTING_EXT 0x8509 #define GL_MODELVIEW0_EXT 0x1700 #define GL_MODELVIEW1_EXT 0x850A #define GL_CURRENT_VERTEX_WEIGHT_EXT 0x850B #define GL_VERTEX_WEIGHT_ARRAY_EXT 0x850C #define GL_VERTEX_WEIGHT_ARRAY_SIZE_EXT 0x850D #define GL_VERTEX_WEIGHT_ARRAY_TYPE_EXT 0x850E #define GL_VERTEX_WEIGHT_ARRAY_STRIDE_EXT 0x850F #define GL_VERTEX_WEIGHT_ARRAY_POINTER_EXT 0x8510 #endif #ifndef GL_NV_light_max_exponent #define GL_MAX_SHININESS_NV 0x8504 #define GL_MAX_SPOT_EXPONENT_NV 0x8505 #endif #ifndef GL_NV_vertex_array_range #define GL_VERTEX_ARRAY_RANGE_NV 0x851D #define GL_VERTEX_ARRAY_RANGE_LENGTH_NV 0x851E #define GL_VERTEX_ARRAY_RANGE_VALID_NV 0x851F #define GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_NV 0x8520 #define GL_VERTEX_ARRAY_RANGE_POINTER_NV 0x8521 #endif #ifndef GL_NV_register_combiners #define GL_REGISTER_COMBINERS_NV 0x8522 #define GL_VARIABLE_A_NV 0x8523 #define GL_VARIABLE_B_NV 0x8524 #define GL_VARIABLE_C_NV 0x8525 #define GL_VARIABLE_D_NV 0x8526 #define GL_VARIABLE_E_NV 0x8527 #define GL_VARIABLE_F_NV 0x8528 #define GL_VARIABLE_G_NV 0x8529 #define GL_CONSTANT_COLOR0_NV 0x852A #define GL_CONSTANT_COLOR1_NV 0x852B #define GL_PRIMARY_COLOR_NV 0x852C #define GL_SECONDARY_COLOR_NV 0x852D #define GL_SPARE0_NV 0x852E #define GL_SPARE1_NV 0x852F #define GL_DISCARD_NV 0x8530 #define GL_E_TIMES_F_NV 0x8531 #define GL_SPARE0_PLUS_SECONDARY_COLOR_NV 0x8532 #define GL_UNSIGNED_IDENTITY_NV 0x8536 #define GL_UNSIGNED_INVERT_NV 0x8537 #define GL_EXPAND_NORMAL_NV 0x8538 #define GL_EXPAND_NEGATE_NV 0x8539 #define GL_HALF_BIAS_NORMAL_NV 0x853A #define GL_HALF_BIAS_NEGATE_NV 0x853B #define GL_SIGNED_IDENTITY_NV 0x853C #define GL_SIGNED_NEGATE_NV 0x853D #define GL_SCALE_BY_TWO_NV 0x853E #define GL_SCALE_BY_FOUR_NV 0x853F #define GL_SCALE_BY_ONE_HALF_NV 0x8540 #define GL_BIAS_BY_NEGATIVE_ONE_HALF_NV 0x8541 #define GL_COMBINER_INPUT_NV 0x8542 #define GL_COMBINER_MAPPING_NV 0x8543 #define GL_COMBINER_COMPONENT_USAGE_NV 0x8544 #define GL_COMBINER_AB_DOT_PRODUCT_NV 0x8545 #define GL_COMBINER_CD_DOT_PRODUCT_NV 0x8546 #define GL_COMBINER_MUX_SUM_NV 0x8547 #define GL_COMBINER_SCALE_NV 0x8548 #define GL_COMBINER_BIAS_NV 0x8549 #define GL_COMBINER_AB_OUTPUT_NV 0x854A #define GL_COMBINER_CD_OUTPUT_NV 0x854B #define GL_COMBINER_SUM_OUTPUT_NV 0x854C #define GL_MAX_GENERAL_COMBINERS_NV 0x854D #define GL_NUM_GENERAL_COMBINERS_NV 0x854E #define GL_COLOR_SUM_CLAMP_NV 0x854F #define GL_COMBINER0_NV 0x8550 #define GL_COMBINER1_NV 0x8551 #define GL_COMBINER2_NV 0x8552 #define GL_COMBINER3_NV 0x8553 #define GL_COMBINER4_NV 0x8554 #define GL_COMBINER5_NV 0x8555 #define GL_COMBINER6_NV 0x8556 #define GL_COMBINER7_NV 0x8557 /* reuse GL_TEXTURE0_ARB */ /* reuse GL_TEXTURE1_ARB */ /* reuse GL_ZERO */ /* reuse GL_NONE */ /* reuse GL_FOG */ #endif #ifndef GL_NV_fog_distance #define GL_FOG_DISTANCE_MODE_NV 0x855A #define GL_EYE_RADIAL_NV 0x855B #define GL_EYE_PLANE_ABSOLUTE_NV 0x855C /* reuse GL_EYE_PLANE */ #endif #ifndef GL_NV_texgen_emboss #define GL_EMBOSS_LIGHT_NV 0x855D #define GL_EMBOSS_CONSTANT_NV 0x855E #define GL_EMBOSS_MAP_NV 0x855F #endif #ifndef GL_NV_blend_square #endif #ifndef GL_NV_texture_env_combine4 #define GL_COMBINE4_NV 0x8503 #define GL_SOURCE3_RGB_NV 0x8583 #define GL_SOURCE3_ALPHA_NV 0x858B #define GL_OPERAND3_RGB_NV 0x8593 #define GL_OPERAND3_ALPHA_NV 0x859B #endif #ifndef GL_MESA_resize_buffers #endif #ifndef GL_MESA_window_pos #endif #ifndef GL_EXT_texture_compression_s3tc #define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0 #define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1 #define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT 0x83F2 #define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3 #endif #ifndef GL_IBM_cull_vertex #define GL_CULL_VERTEX_IBM 103050 #endif #ifndef GL_IBM_multimode_draw_arrays #endif #ifndef GL_IBM_vertex_array_lists #define GL_VERTEX_ARRAY_LIST_IBM 103070 #define GL_NORMAL_ARRAY_LIST_IBM 103071 #define GL_COLOR_ARRAY_LIST_IBM 103072 #define GL_INDEX_ARRAY_LIST_IBM 103073 #define GL_TEXTURE_COORD_ARRAY_LIST_IBM 103074 #define GL_EDGE_FLAG_ARRAY_LIST_IBM 103075 #define GL_FOG_COORDINATE_ARRAY_LIST_IBM 103076 #define GL_SECONDARY_COLOR_ARRAY_LIST_IBM 103077 #define GL_VERTEX_ARRAY_LIST_STRIDE_IBM 103080 #define GL_NORMAL_ARRAY_LIST_STRIDE_IBM 103081 #define GL_COLOR_ARRAY_LIST_STRIDE_IBM 103082 #define GL_INDEX_ARRAY_LIST_STRIDE_IBM 103083 #define GL_TEXTURE_COORD_ARRAY_LIST_STRIDE_IBM 103084 #define GL_EDGE_FLAG_ARRAY_LIST_STRIDE_IBM 103085 #define GL_FOG_COORDINATE_ARRAY_LIST_STRIDE_IBM 103086 #define GL_SECONDARY_COLOR_ARRAY_LIST_STRIDE_IBM 103087 #endif #ifndef GL_SGIX_subsample #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 #endif #ifndef GL_SGIX_ycrcb_subsample #endif #ifndef GL_SGIX_ycrcba #define GL_YCRCB_SGIX 0x8318 #define GL_YCRCBA_SGIX 0x8319 #endif #ifndef GL_3DFX_texture_compression_FXT1 #define GL_COMPRESSED_RGB_FXT1_3DFX 0x86B0 #define GL_COMPRESSED_RGBA_FXT1_3DFX 0x86B1 #endif #ifndef GL_3DFX_multisample #define GL_MULTISAMPLE_3DFX 0x86B2 #define GL_SAMPLE_BUFFERS_3DFX 0x86B3 #define GL_SAMPLES_3DFX 0x86B4 #define GL_MULTISAMPLE_BIT_3DFX 0x20000000 #endif #ifndef GL_3DFX_tbuffer #endif #ifndef GL_EXT_multisample #define GL_MULTISAMPLE_EXT 0x809D #define GL_SAMPLE_ALPHA_TO_MASK_EXT 0x809E #define GL_SAMPLE_ALPHA_TO_ONE_EXT 0x809F #define GL_SAMPLE_MASK_EXT 0x80A0 #define GL_1PASS_EXT 0x80A1 #define GL_2PASS_0_EXT 0x80A2 #define GL_2PASS_1_EXT 0x80A3 #define GL_4PASS_0_EXT 0x80A4 #define GL_4PASS_1_EXT 0x80A5 #define GL_4PASS_2_EXT 0x80A6 #define GL_4PASS_3_EXT 0x80A7 #define GL_SAMPLE_BUFFERS_EXT 0x80A8 #define GL_SAMPLES_EXT 0x80A9 #define GL_SAMPLE_MASK_VALUE_EXT 0x80AA #define GL_SAMPLE_MASK_INVERT_EXT 0x80AB #define GL_SAMPLE_PATTERN_EXT 0x80AC #define GL_MULTISAMPLE_BIT_EXT 0x20000000 #endif #ifndef GL_SGIX_vertex_preclip #define GL_VERTEX_PRECLIP_SGIX 0x83EE #define GL_VERTEX_PRECLIP_HINT_SGIX 0x83EF #endif #ifndef GL_SGIX_convolution_accuracy #define GL_CONVOLUTION_HINT_SGIX 0x8316 #endif #ifndef GL_SGIX_resample #define GL_PACK_RESAMPLE_SGIX 0x842C #define GL_UNPACK_RESAMPLE_SGIX 0x842D #define GL_RESAMPLE_REPLICATE_SGIX 0x842E #define GL_RESAMPLE_ZERO_FILL_SGIX 0x842F #define GL_RESAMPLE_DECIMATE_SGIX 0x8430 #endif #ifndef GL_SGIS_point_line_texgen #define GL_EYE_DISTANCE_TO_POINT_SGIS 0x81F0 #define GL_OBJECT_DISTANCE_TO_POINT_SGIS 0x81F1 #define GL_EYE_DISTANCE_TO_LINE_SGIS 0x81F2 #define GL_OBJECT_DISTANCE_TO_LINE_SGIS 0x81F3 #define GL_EYE_POINT_SGIS 0x81F4 #define GL_OBJECT_POINT_SGIS 0x81F5 #define GL_EYE_LINE_SGIS 0x81F6 #define GL_OBJECT_LINE_SGIS 0x81F7 #endif #ifndef GL_SGIS_texture_color_mask #define GL_TEXTURE_COLOR_WRITEMASK_SGIS 0x81EF #endif #ifndef GL_EXT_texture_env_dot3 #define GL_DOT3_RGB_EXT 0x8740 #define GL_DOT3_RGBA_EXT 0x8741 #endif #ifndef GL_ATI_texture_mirror_once #define GL_MIRROR_CLAMP_ATI 0x8742 #define GL_MIRROR_CLAMP_TO_EDGE_ATI 0x8743 #endif #ifndef GL_NV_fence #define GL_ALL_COMPLETED_NV 0x84F2 #define GL_FENCE_STATUS_NV 0x84F3 #define GL_FENCE_CONDITION_NV 0x84F4 #endif #ifndef GL_IBM_static_data #define GL_ALL_STATIC_DATA_IBM 103060 #define GL_STATIC_VERTEX_ARRAY_IBM 103061 #endif #ifndef GL_IBM_texture_mirrored_repeat #define GL_MIRRORED_REPEAT_IBM 0x8370 #endif #ifndef GL_NV_evaluators #define GL_EVAL_2D_NV 0x86C0 #define GL_EVAL_TRIANGULAR_2D_NV 0x86C1 #define GL_MAP_TESSELLATION_NV 0x86C2 #define GL_MAP_ATTRIB_U_ORDER_NV 0x86C3 #define GL_MAP_ATTRIB_V_ORDER_NV 0x86C4 #define GL_EVAL_FRACTIONAL_TESSELLATION_NV 0x86C5 #define GL_EVAL_VERTEX_ATTRIB0_NV 0x86C6 #define GL_EVAL_VERTEX_ATTRIB1_NV 0x86C7 #define GL_EVAL_VERTEX_ATTRIB2_NV 0x86C8 #define GL_EVAL_VERTEX_ATTRIB3_NV 0x86C9 #define GL_EVAL_VERTEX_ATTRIB4_NV 0x86CA #define GL_EVAL_VERTEX_ATTRIB5_NV 0x86CB #define GL_EVAL_VERTEX_ATTRIB6_NV 0x86CC #define GL_EVAL_VERTEX_ATTRIB7_NV 0x86CD #define GL_EVAL_VERTEX_ATTRIB8_NV 0x86CE #define GL_EVAL_VERTEX_ATTRIB9_NV 0x86CF #define GL_EVAL_VERTEX_ATTRIB10_NV 0x86D0 #define GL_EVAL_VERTEX_ATTRIB11_NV 0x86D1 #define GL_EVAL_VERTEX_ATTRIB12_NV 0x86D2 #define GL_EVAL_VERTEX_ATTRIB13_NV 0x86D3 #define GL_EVAL_VERTEX_ATTRIB14_NV 0x86D4 #define GL_EVAL_VERTEX_ATTRIB15_NV 0x86D5 #define GL_MAX_MAP_TESSELLATION_NV 0x86D6 #define GL_MAX_RATIONAL_EVAL_ORDER_NV 0x86D7 #endif #ifndef GL_NV_packed_depth_stencil #define GL_DEPTH_STENCIL_NV 0x84F9 #define GL_UNSIGNED_INT_24_8_NV 0x84FA #endif #ifndef GL_NV_register_combiners2 #define GL_PER_STAGE_CONSTANTS_NV 0x8535 #endif #ifndef GL_NV_texture_compression_vtc #endif #ifndef GL_NV_texture_rectangle #define GL_TEXTURE_RECTANGLE_NV 0x84F5 #define GL_TEXTURE_BINDING_RECTANGLE_NV 0x84F6 #define GL_PROXY_TEXTURE_RECTANGLE_NV 0x84F7 #define GL_MAX_RECTANGLE_TEXTURE_SIZE_NV 0x84F8 #endif #ifndef GL_NV_texture_shader #define GL_OFFSET_TEXTURE_RECTANGLE_NV 0x864C #define GL_OFFSET_TEXTURE_RECTANGLE_SCALE_NV 0x864D #define GL_DOT_PRODUCT_TEXTURE_RECTANGLE_NV 0x864E #define GL_RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV 0x86D9 #define GL_UNSIGNED_INT_S8_S8_8_8_NV 0x86DA #define GL_UNSIGNED_INT_8_8_S8_S8_REV_NV 0x86DB #define GL_DSDT_MAG_INTENSITY_NV 0x86DC #define GL_SHADER_CONSISTENT_NV 0x86DD #define GL_TEXTURE_SHADER_NV 0x86DE #define GL_SHADER_OPERATION_NV 0x86DF #define GL_CULL_MODES_NV 0x86E0 #define GL_OFFSET_TEXTURE_MATRIX_NV 0x86E1 #define GL_OFFSET_TEXTURE_2D_MATRIX_NV 0x86E1 #define GL_OFFSET_TEXTURE_SCALE_NV 0x86E2 #define GL_OFFSET_TEXTURE_2D_SCALE_NV 0x86E2 #define GL_OFFSET_TEXTURE_BIAS_NV 0x86E3 #define GL_OFFSET_TEXTURE_2D_BIAS_NV 0x86E3 #define GL_PREVIOUS_TEXTURE_INPUT_NV 0x86E4 #define GL_CONST_EYE_NV 0x86E5 #define GL_PASS_THROUGH_NV 0x86E6 #define GL_CULL_FRAGMENT_NV 0x86E7 #define GL_OFFSET_TEXTURE_2D_NV 0x86E8 #define GL_DEPENDENT_AR_TEXTURE_2D_NV 0x86E9 #define GL_DEPENDENT_GB_TEXTURE_2D_NV 0x86EA #define GL_DOT_PRODUCT_NV 0x86EC #define GL_DOT_PRODUCT_DEPTH_REPLACE_NV 0x86ED #define GL_DOT_PRODUCT_TEXTURE_2D_NV 0x86EE #define GL_DOT_PRODUCT_TEXTURE_CUBE_MAP_NV 0x86F0 #define GL_DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV 0x86F1 #define GL_DOT_PRODUCT_REFLECT_CUBE_MAP_NV 0x86F2 #define GL_DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV 0x86F3 #define GL_HILO_NV 0x86F4 #define GL_DSDT_NV 0x86F5 #define GL_DSDT_MAG_NV 0x86F6 #define GL_DSDT_MAG_VIB_NV 0x86F7 #define GL_HILO16_NV 0x86F8 #define GL_SIGNED_HILO_NV 0x86F9 #define GL_SIGNED_HILO16_NV 0x86FA #define GL_SIGNED_RGBA_NV 0x86FB #define GL_SIGNED_RGBA8_NV 0x86FC #define GL_SIGNED_RGB_NV 0x86FE #define GL_SIGNED_RGB8_NV 0x86FF #define GL_SIGNED_LUMINANCE_NV 0x8701 #define GL_SIGNED_LUMINANCE8_NV 0x8702 #define GL_SIGNED_LUMINANCE_ALPHA_NV 0x8703 #define GL_SIGNED_LUMINANCE8_ALPHA8_NV 0x8704 #define GL_SIGNED_ALPHA_NV 0x8705 #define GL_SIGNED_ALPHA8_NV 0x8706 #define GL_SIGNED_INTENSITY_NV 0x8707 #define GL_SIGNED_INTENSITY8_NV 0x8708 #define GL_DSDT8_NV 0x8709 #define GL_DSDT8_MAG8_NV 0x870A #define GL_DSDT8_MAG8_INTENSITY8_NV 0x870B #define GL_SIGNED_RGB_UNSIGNED_ALPHA_NV 0x870C #define GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV 0x870D #define GL_HI_SCALE_NV 0x870E #define GL_LO_SCALE_NV 0x870F #define GL_DS_SCALE_NV 0x8710 #define GL_DT_SCALE_NV 0x8711 #define GL_MAGNITUDE_SCALE_NV 0x8712 #define GL_VIBRANCE_SCALE_NV 0x8713 #define GL_HI_BIAS_NV 0x8714 #define GL_LO_BIAS_NV 0x8715 #define GL_DS_BIAS_NV 0x8716 #define GL_DT_BIAS_NV 0x8717 #define GL_MAGNITUDE_BIAS_NV 0x8718 #define GL_VIBRANCE_BIAS_NV 0x8719 #define GL_TEXTURE_BORDER_VALUES_NV 0x871A #define GL_TEXTURE_HI_SIZE_NV 0x871B #define GL_TEXTURE_LO_SIZE_NV 0x871C #define GL_TEXTURE_DS_SIZE_NV 0x871D #define GL_TEXTURE_DT_SIZE_NV 0x871E #define GL_TEXTURE_MAG_SIZE_NV 0x871F #endif #ifndef GL_NV_texture_shader2 #define GL_DOT_PRODUCT_TEXTURE_3D_NV 0x86EF #endif #ifndef GL_NV_vertex_array_range2 #define GL_VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV 0x8533 #endif #ifndef GL_NV_vertex_program #define GL_VERTEX_PROGRAM_NV 0x8620 #define GL_VERTEX_STATE_PROGRAM_NV 0x8621 #define GL_ATTRIB_ARRAY_SIZE_NV 0x8623 #define GL_ATTRIB_ARRAY_STRIDE_NV 0x8624 #define GL_ATTRIB_ARRAY_TYPE_NV 0x8625 #define GL_CURRENT_ATTRIB_NV 0x8626 #define GL_PROGRAM_LENGTH_NV 0x8627 #define GL_PROGRAM_STRING_NV 0x8628 #define GL_MODELVIEW_PROJECTION_NV 0x8629 #define GL_IDENTITY_NV 0x862A #define GL_INVERSE_NV 0x862B #define GL_TRANSPOSE_NV 0x862C #define GL_INVERSE_TRANSPOSE_NV 0x862D #define GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV 0x862E #define GL_MAX_TRACK_MATRICES_NV 0x862F #define GL_MATRIX0_NV 0x8630 #define GL_MATRIX1_NV 0x8631 #define GL_MATRIX2_NV 0x8632 #define GL_MATRIX3_NV 0x8633 #define GL_MATRIX4_NV 0x8634 #define GL_MATRIX5_NV 0x8635 #define GL_MATRIX6_NV 0x8636 #define GL_MATRIX7_NV 0x8637 #define GL_CURRENT_MATRIX_STACK_DEPTH_NV 0x8640 #define GL_CURRENT_MATRIX_NV 0x8641 #define GL_VERTEX_PROGRAM_POINT_SIZE_NV 0x8642 #define GL_VERTEX_PROGRAM_TWO_SIDE_NV 0x8643 #define GL_PROGRAM_PARAMETER_NV 0x8644 #define GL_ATTRIB_ARRAY_POINTER_NV 0x8645 #define GL_PROGRAM_TARGET_NV 0x8646 #define GL_PROGRAM_RESIDENT_NV 0x8647 #define GL_TRACK_MATRIX_NV 0x8648 #define GL_TRACK_MATRIX_TRANSFORM_NV 0x8649 #define GL_VERTEX_PROGRAM_BINDING_NV 0x864A #define GL_PROGRAM_ERROR_POSITION_NV 0x864B #define GL_VERTEX_ATTRIB_ARRAY0_NV 0x8650 #define GL_VERTEX_ATTRIB_ARRAY1_NV 0x8651 #define GL_VERTEX_ATTRIB_ARRAY2_NV 0x8652 #define GL_VERTEX_ATTRIB_ARRAY3_NV 0x8653 #define GL_VERTEX_ATTRIB_ARRAY4_NV 0x8654 #define GL_VERTEX_ATTRIB_ARRAY5_NV 0x8655 #define GL_VERTEX_ATTRIB_ARRAY6_NV 0x8656 #define GL_VERTEX_ATTRIB_ARRAY7_NV 0x8657 #define GL_VERTEX_ATTRIB_ARRAY8_NV 0x8658 #define GL_VERTEX_ATTRIB_ARRAY9_NV 0x8659 #define GL_VERTEX_ATTRIB_ARRAY10_NV 0x865A #define GL_VERTEX_ATTRIB_ARRAY11_NV 0x865B #define GL_VERTEX_ATTRIB_ARRAY12_NV 0x865C #define GL_VERTEX_ATTRIB_ARRAY13_NV 0x865D #define GL_VERTEX_ATTRIB_ARRAY14_NV 0x865E #define GL_VERTEX_ATTRIB_ARRAY15_NV 0x865F #define GL_MAP1_VERTEX_ATTRIB0_4_NV 0x8660 #define GL_MAP1_VERTEX_ATTRIB1_4_NV 0x8661 #define GL_MAP1_VERTEX_ATTRIB2_4_NV 0x8662 #define GL_MAP1_VERTEX_ATTRIB3_4_NV 0x8663 #define GL_MAP1_VERTEX_ATTRIB4_4_NV 0x8664 #define GL_MAP1_VERTEX_ATTRIB5_4_NV 0x8665 #define GL_MAP1_VERTEX_ATTRIB6_4_NV 0x8666 #define GL_MAP1_VERTEX_ATTRIB7_4_NV 0x8667 #define GL_MAP1_VERTEX_ATTRIB8_4_NV 0x8668 #define GL_MAP1_VERTEX_ATTRIB9_4_NV 0x8669 #define GL_MAP1_VERTEX_ATTRIB10_4_NV 0x866A #define GL_MAP1_VERTEX_ATTRIB11_4_NV 0x866B #define GL_MAP1_VERTEX_ATTRIB12_4_NV 0x866C #define GL_MAP1_VERTEX_ATTRIB13_4_NV 0x866D #define GL_MAP1_VERTEX_ATTRIB14_4_NV 0x866E #define GL_MAP1_VERTEX_ATTRIB15_4_NV 0x866F #define GL_MAP2_VERTEX_ATTRIB0_4_NV 0x8670 #define GL_MAP2_VERTEX_ATTRIB1_4_NV 0x8671 #define GL_MAP2_VERTEX_ATTRIB2_4_NV 0x8672 #define GL_MAP2_VERTEX_ATTRIB3_4_NV 0x8673 #define GL_MAP2_VERTEX_ATTRIB4_4_NV 0x8674 #define GL_MAP2_VERTEX_ATTRIB5_4_NV 0x8675 #define GL_MAP2_VERTEX_ATTRIB6_4_NV 0x8676 #define GL_MAP2_VERTEX_ATTRIB7_4_NV 0x8677 #define GL_MAP2_VERTEX_ATTRIB8_4_NV 0x8678 #define GL_MAP2_VERTEX_ATTRIB9_4_NV 0x8679 #define GL_MAP2_VERTEX_ATTRIB10_4_NV 0x867A #define GL_MAP2_VERTEX_ATTRIB11_4_NV 0x867B #define GL_MAP2_VERTEX_ATTRIB12_4_NV 0x867C #define GL_MAP2_VERTEX_ATTRIB13_4_NV 0x867D #define GL_MAP2_VERTEX_ATTRIB14_4_NV 0x867E #define GL_MAP2_VERTEX_ATTRIB15_4_NV 0x867F #endif #ifndef GL_SGIX_texture_coordinate_clamp #define GL_TEXTURE_MAX_CLAMP_S_SGIX 0x8369 #define GL_TEXTURE_MAX_CLAMP_T_SGIX 0x836A #define GL_TEXTURE_MAX_CLAMP_R_SGIX 0x836B #endif #ifndef GL_SGIX_scalebias_hint #define GL_SCALEBIAS_HINT_SGIX 0x8322 #endif #ifndef GL_OML_interlace #define GL_INTERLACE_OML 0x8980 #define GL_INTERLACE_READ_OML 0x8981 #endif #ifndef GL_OML_subsample #define GL_FORMAT_SUBSAMPLE_24_24_OML 0x8982 #define GL_FORMAT_SUBSAMPLE_244_244_OML 0x8983 #endif #ifndef GL_OML_resample #define GL_PACK_RESAMPLE_OML 0x8984 #define GL_UNPACK_RESAMPLE_OML 0x8985 #define GL_RESAMPLE_REPLICATE_OML 0x8986 #define GL_RESAMPLE_ZERO_FILL_OML 0x8987 #define GL_RESAMPLE_AVERAGE_OML 0x8988 #define GL_RESAMPLE_DECIMATE_OML 0x8989 #endif #ifndef GL_NV_copy_depth_to_color #define GL_DEPTH_STENCIL_TO_RGBA_NV 0x886E #define GL_DEPTH_STENCIL_TO_BGRA_NV 0x886F #endif #ifndef GL_ATI_envmap_bumpmap #define GL_BUMP_ROT_MATRIX_ATI 0x8775 #define GL_BUMP_ROT_MATRIX_SIZE_ATI 0x8776 #define GL_BUMP_NUM_TEX_UNITS_ATI 0x8777 #define GL_BUMP_TEX_UNITS_ATI 0x8778 #define GL_DUDV_ATI 0x8779 #define GL_DU8DV8_ATI 0x877A #define GL_BUMP_ENVMAP_ATI 0x877B #define GL_BUMP_TARGET_ATI 0x877C #endif #ifndef GL_ATI_fragment_shader #define GL_FRAGMENT_SHADER_ATI 0x8920 #define GL_REG_0_ATI 0x8921 #define GL_REG_1_ATI 0x8922 #define GL_REG_2_ATI 0x8923 #define GL_REG_3_ATI 0x8924 #define GL_REG_4_ATI 0x8925 #define GL_REG_5_ATI 0x8926 #define GL_REG_6_ATI 0x8927 #define GL_REG_7_ATI 0x8928 #define GL_REG_8_ATI 0x8929 #define GL_REG_9_ATI 0x892A #define GL_REG_10_ATI 0x892B #define GL_REG_11_ATI 0x892C #define GL_REG_12_ATI 0x892D #define GL_REG_13_ATI 0x892E #define GL_REG_14_ATI 0x892F #define GL_REG_15_ATI 0x8930 #define GL_REG_16_ATI 0x8931 #define GL_REG_17_ATI 0x8932 #define GL_REG_18_ATI 0x8933 #define GL_REG_19_ATI 0x8934 #define GL_REG_20_ATI 0x8935 #define GL_REG_21_ATI 0x8936 #define GL_REG_22_ATI 0x8937 #define GL_REG_23_ATI 0x8938 #define GL_REG_24_ATI 0x8939 #define GL_REG_25_ATI 0x893A #define GL_REG_26_ATI 0x893B #define GL_REG_27_ATI 0x893C #define GL_REG_28_ATI 0x893D #define GL_REG_29_ATI 0x893E #define GL_REG_30_ATI 0x893F #define GL_REG_31_ATI 0x8940 #define GL_CON_0_ATI 0x8941 #define GL_CON_1_ATI 0x8942 #define GL_CON_2_ATI 0x8943 #define GL_CON_3_ATI 0x8944 #define GL_CON_4_ATI 0x8945 #define GL_CON_5_ATI 0x8946 #define GL_CON_6_ATI 0x8947 #define GL_CON_7_ATI 0x8948 #define GL_CON_8_ATI 0x8949 #define GL_CON_9_ATI 0x894A #define GL_CON_10_ATI 0x894B #define GL_CON_11_ATI 0x894C #define GL_CON_12_ATI 0x894D #define GL_CON_13_ATI 0x894E #define GL_CON_14_ATI 0x894F #define GL_CON_15_ATI 0x8950 #define GL_CON_16_ATI 0x8951 #define GL_CON_17_ATI 0x8952 #define GL_CON_18_ATI 0x8953 #define GL_CON_19_ATI 0x8954 #define GL_CON_20_ATI 0x8955 #define GL_CON_21_ATI 0x8956 #define GL_CON_22_ATI 0x8957 #define GL_CON_23_ATI 0x8958 #define GL_CON_24_ATI 0x8959 #define GL_CON_25_ATI 0x895A #define GL_CON_26_ATI 0x895B #define GL_CON_27_ATI 0x895C #define GL_CON_28_ATI 0x895D #define GL_CON_29_ATI 0x895E #define GL_CON_30_ATI 0x895F #define GL_CON_31_ATI 0x8960 #define GL_MOV_ATI 0x8961 #define GL_ADD_ATI 0x8963 #define GL_MUL_ATI 0x8964 #define GL_SUB_ATI 0x8965 #define GL_DOT3_ATI 0x8966 #define GL_DOT4_ATI 0x8967 #define GL_MAD_ATI 0x8968 #define GL_LERP_ATI 0x8969 #define GL_CND_ATI 0x896A #define GL_CND0_ATI 0x896B #define GL_DOT2_ADD_ATI 0x896C #define GL_SECONDARY_INTERPOLATOR_ATI 0x896D #define GL_NUM_FRAGMENT_REGISTERS_ATI 0x896E #define GL_NUM_FRAGMENT_CONSTANTS_ATI 0x896F #define GL_NUM_PASSES_ATI 0x8970 #define GL_NUM_INSTRUCTIONS_PER_PASS_ATI 0x8971 #define GL_NUM_INSTRUCTIONS_TOTAL_ATI 0x8972 #define GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI 0x8973 #define GL_NUM_LOOPBACK_COMPONENTS_ATI 0x8974 #define GL_COLOR_ALPHA_PAIRING_ATI 0x8975 #define GL_SWIZZLE_STR_ATI 0x8976 #define GL_SWIZZLE_STQ_ATI 0x8977 #define GL_SWIZZLE_STR_DR_ATI 0x8978 #define GL_SWIZZLE_STQ_DQ_ATI 0x8979 #define GL_SWIZZLE_STRQ_ATI 0x897A #define GL_SWIZZLE_STRQ_DQ_ATI 0x897B #define GL_RED_BIT_ATI 0x00000001 #define GL_GREEN_BIT_ATI 0x00000002 #define GL_BLUE_BIT_ATI 0x00000004 #define GL_2X_BIT_ATI 0x00000001 #define GL_4X_BIT_ATI 0x00000002 #define GL_8X_BIT_ATI 0x00000004 #define GL_HALF_BIT_ATI 0x00000008 #define GL_QUARTER_BIT_ATI 0x00000010 #define GL_EIGHTH_BIT_ATI 0x00000020 #define GL_SATURATE_BIT_ATI 0x00000040 #define GL_COMP_BIT_ATI 0x00000002 #define GL_NEGATE_BIT_ATI 0x00000004 #define GL_BIAS_BIT_ATI 0x00000008 #endif #ifndef GL_ATI_pn_triangles #define GL_PN_TRIANGLES_ATI 0x87F0 #define GL_MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F1 #define GL_PN_TRIANGLES_POINT_MODE_ATI 0x87F2 #define GL_PN_TRIANGLES_NORMAL_MODE_ATI 0x87F3 #define GL_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F4 #define GL_PN_TRIANGLES_POINT_MODE_LINEAR_ATI 0x87F5 #define GL_PN_TRIANGLES_POINT_MODE_CUBIC_ATI 0x87F6 #define GL_PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI 0x87F7 #define GL_PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI 0x87F8 #endif #ifndef GL_ATI_vertex_array_object #define GL_STATIC_ATI 0x8760 #define GL_DYNAMIC_ATI 0x8761 #define GL_PRESERVE_ATI 0x8762 #define GL_DISCARD_ATI 0x8763 #define GL_OBJECT_BUFFER_SIZE_ATI 0x8764 #define GL_OBJECT_BUFFER_USAGE_ATI 0x8765 #define GL_ARRAY_OBJECT_BUFFER_ATI 0x8766 #define GL_ARRAY_OBJECT_OFFSET_ATI 0x8767 #endif #ifndef GL_EXT_vertex_shader #define GL_VERTEX_SHADER_EXT 0x8780 #define GL_VERTEX_SHADER_BINDING_EXT 0x8781 #define GL_OP_INDEX_EXT 0x8782 #define GL_OP_NEGATE_EXT 0x8783 #define GL_OP_DOT3_EXT 0x8784 #define GL_OP_DOT4_EXT 0x8785 #define GL_OP_MUL_EXT 0x8786 #define GL_OP_ADD_EXT 0x8787 #define GL_OP_MADD_EXT 0x8788 #define GL_OP_FRAC_EXT 0x8789 #define GL_OP_MAX_EXT 0x878A #define GL_OP_MIN_EXT 0x878B #define GL_OP_SET_GE_EXT 0x878C #define GL_OP_SET_LT_EXT 0x878D #define GL_OP_CLAMP_EXT 0x878E #define GL_OP_FLOOR_EXT 0x878F #define GL_OP_ROUND_EXT 0x8790 #define GL_OP_EXP_BASE_2_EXT 0x8791 #define GL_OP_LOG_BASE_2_EXT 0x8792 #define GL_OP_POWER_EXT 0x8793 #define GL_OP_RECIP_EXT 0x8794 #define GL_OP_RECIP_SQRT_EXT 0x8795 #define GL_OP_SUB_EXT 0x8796 #define GL_OP_CROSS_PRODUCT_EXT 0x8797 #define GL_OP_MULTIPLY_MATRIX_EXT 0x8798 #define GL_OP_MOV_EXT 0x8799 #define GL_OUTPUT_VERTEX_EXT 0x879A #define GL_OUTPUT_COLOR0_EXT 0x879B #define GL_OUTPUT_COLOR1_EXT 0x879C #define GL_OUTPUT_TEXTURE_COORD0_EXT 0x879D #define GL_OUTPUT_TEXTURE_COORD1_EXT 0x879E #define GL_OUTPUT_TEXTURE_COORD2_EXT 0x879F #define GL_OUTPUT_TEXTURE_COORD3_EXT 0x87A0 #define GL_OUTPUT_TEXTURE_COORD4_EXT 0x87A1 #define GL_OUTPUT_TEXTURE_COORD5_EXT 0x87A2 #define GL_OUTPUT_TEXTURE_COORD6_EXT 0x87A3 #define GL_OUTPUT_TEXTURE_COORD7_EXT 0x87A4 #define GL_OUTPUT_TEXTURE_COORD8_EXT 0x87A5 #define GL_OUTPUT_TEXTURE_COORD9_EXT 0x87A6 #define GL_OUTPUT_TEXTURE_COORD10_EXT 0x87A7 #define GL_OUTPUT_TEXTURE_COORD11_EXT 0x87A8 #define GL_OUTPUT_TEXTURE_COORD12_EXT 0x87A9 #define GL_OUTPUT_TEXTURE_COORD13_EXT 0x87AA #define GL_OUTPUT_TEXTURE_COORD14_EXT 0x87AB #define GL_OUTPUT_TEXTURE_COORD15_EXT 0x87AC #define GL_OUTPUT_TEXTURE_COORD16_EXT 0x87AD #define GL_OUTPUT_TEXTURE_COORD17_EXT 0x87AE #define GL_OUTPUT_TEXTURE_COORD18_EXT 0x87AF #define GL_OUTPUT_TEXTURE_COORD19_EXT 0x87B0 #define GL_OUTPUT_TEXTURE_COORD20_EXT 0x87B1 #define GL_OUTPUT_TEXTURE_COORD21_EXT 0x87B2 #define GL_OUTPUT_TEXTURE_COORD22_EXT 0x87B3 #define GL_OUTPUT_TEXTURE_COORD23_EXT 0x87B4 #define GL_OUTPUT_TEXTURE_COORD24_EXT 0x87B5 #define GL_OUTPUT_TEXTURE_COORD25_EXT 0x87B6 #define GL_OUTPUT_TEXTURE_COORD26_EXT 0x87B7 #define GL_OUTPUT_TEXTURE_COORD27_EXT 0x87B8 #define GL_OUTPUT_TEXTURE_COORD28_EXT 0x87B9 #define GL_OUTPUT_TEXTURE_COORD29_EXT 0x87BA #define GL_OUTPUT_TEXTURE_COORD30_EXT 0x87BB #define GL_OUTPUT_TEXTURE_COORD31_EXT 0x87BC #define GL_OUTPUT_FOG_EXT 0x87BD #define GL_SCALAR_EXT 0x87BE #define GL_VECTOR_EXT 0x87BF #define GL_MATRIX_EXT 0x87C0 #define GL_VARIANT_EXT 0x87C1 #define GL_INVARIANT_EXT 0x87C2 #define GL_LOCAL_CONSTANT_EXT 0x87C3 #define GL_LOCAL_EXT 0x87C4 #define GL_MAX_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87C5 #define GL_MAX_VERTEX_SHADER_VARIANTS_EXT 0x87C6 #define GL_MAX_VERTEX_SHADER_INVARIANTS_EXT 0x87C7 #define GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87C8 #define GL_MAX_VERTEX_SHADER_LOCALS_EXT 0x87C9 #define GL_MAX_OPTIMIZED_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CA #define GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT 0x87CB #define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87CC #define GL_MAX_OPTIMIZED_VERTEX_SHADER_INVARIANTS_EXT 0x87CD #define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT 0x87CE #define GL_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CF #define GL_VERTEX_SHADER_VARIANTS_EXT 0x87D0 #define GL_VERTEX_SHADER_INVARIANTS_EXT 0x87D1 #define GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87D2 #define GL_VERTEX_SHADER_LOCALS_EXT 0x87D3 #define GL_VERTEX_SHADER_OPTIMIZED_EXT 0x87D4 #define GL_X_EXT 0x87D5 #define GL_Y_EXT 0x87D6 #define GL_Z_EXT 0x87D7 #define GL_W_EXT 0x87D8 #define GL_NEGATIVE_X_EXT 0x87D9 #define GL_NEGATIVE_Y_EXT 0x87DA #define GL_NEGATIVE_Z_EXT 0x87DB #define GL_NEGATIVE_W_EXT 0x87DC #define GL_ZERO_EXT 0x87DD #define GL_ONE_EXT 0x87DE #define GL_NEGATIVE_ONE_EXT 0x87DF #define GL_NORMALIZED_RANGE_EXT 0x87E0 #define GL_FULL_RANGE_EXT 0x87E1 #define GL_CURRENT_VERTEX_EXT 0x87E2 #define GL_MVP_MATRIX_EXT 0x87E3 #define GL_VARIANT_VALUE_EXT 0x87E4 #define GL_VARIANT_DATATYPE_EXT 0x87E5 #define GL_VARIANT_ARRAY_STRIDE_EXT 0x87E6 #define GL_VARIANT_ARRAY_TYPE_EXT 0x87E7 #define GL_VARIANT_ARRAY_EXT 0x87E8 #define GL_VARIANT_ARRAY_POINTER_EXT 0x87E9 #define GL_INVARIANT_VALUE_EXT 0x87EA #define GL_INVARIANT_DATATYPE_EXT 0x87EB #define GL_LOCAL_CONSTANT_VALUE_EXT 0x87EC #define GL_LOCAL_CONSTANT_DATATYPE_EXT 0x87ED #endif #ifndef GL_ATI_vertex_streams #define GL_MAX_VERTEX_STREAMS_ATI 0x876B #define GL_VERTEX_STREAM0_ATI 0x876C #define GL_VERTEX_STREAM1_ATI 0x876D #define GL_VERTEX_STREAM2_ATI 0x876E #define GL_VERTEX_STREAM3_ATI 0x876F #define GL_VERTEX_STREAM4_ATI 0x8770 #define GL_VERTEX_STREAM5_ATI 0x8771 #define GL_VERTEX_STREAM6_ATI 0x8772 #define GL_VERTEX_STREAM7_ATI 0x8773 #define GL_VERTEX_SOURCE_ATI 0x8774 #endif #ifndef GL_ATI_element_array #define GL_ELEMENT_ARRAY_ATI 0x8768 #define GL_ELEMENT_ARRAY_TYPE_ATI 0x8769 #define GL_ELEMENT_ARRAY_POINTER_ATI 0x876A #endif #ifndef GL_SUN_mesh_array #define GL_QUAD_MESH_SUN 0x8614 #define GL_TRIANGLE_MESH_SUN 0x8615 #endif #ifndef GL_SUN_slice_accum #define GL_SLICE_ACCUM_SUN 0x85CC #endif #ifndef GL_NV_multisample_filter_hint #define GL_MULTISAMPLE_FILTER_HINT_NV 0x8534 #endif #ifndef GL_NV_depth_clamp #define GL_DEPTH_CLAMP_NV 0x864F #endif #ifndef GL_NV_occlusion_query #define GL_PIXEL_COUNTER_BITS_NV 0x8864 #define GL_CURRENT_OCCLUSION_QUERY_ID_NV 0x8865 #define GL_PIXEL_COUNT_NV 0x8866 #define GL_PIXEL_COUNT_AVAILABLE_NV 0x8867 #endif #ifndef GL_NV_point_sprite #define GL_POINT_SPRITE_NV 0x8861 #define GL_COORD_REPLACE_NV 0x8862 #define GL_POINT_SPRITE_R_MODE_NV 0x8863 #endif #ifndef GL_NV_texture_shader3 #define GL_OFFSET_PROJECTIVE_TEXTURE_2D_NV 0x8850 #define GL_OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV 0x8851 #define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8852 #define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV 0x8853 #define GL_OFFSET_HILO_TEXTURE_2D_NV 0x8854 #define GL_OFFSET_HILO_TEXTURE_RECTANGLE_NV 0x8855 #define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV 0x8856 #define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8857 #define GL_DEPENDENT_HILO_TEXTURE_2D_NV 0x8858 #define GL_DEPENDENT_RGB_TEXTURE_3D_NV 0x8859 #define GL_DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV 0x885A #define GL_DOT_PRODUCT_PASS_THROUGH_NV 0x885B #define GL_DOT_PRODUCT_TEXTURE_1D_NV 0x885C #define GL_DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV 0x885D #define GL_HILO8_NV 0x885E #define GL_SIGNED_HILO8_NV 0x885F #define GL_FORCE_BLUE_TO_ONE_NV 0x8860 #endif #ifndef GL_NV_vertex_program1_1 #endif #ifndef GL_EXT_shadow_funcs #endif #ifndef GL_EXT_stencil_two_side #define GL_STENCIL_TEST_TWO_SIDE_EXT 0x8910 #define GL_ACTIVE_STENCIL_FACE_EXT 0x8911 #endif #ifndef GL_ATI_text_fragment_shader #define GL_TEXT_FRAGMENT_SHADER_ATI 0x8200 #endif #ifndef GL_APPLE_client_storage #define GL_UNPACK_CLIENT_STORAGE_APPLE 0x85B2 #endif #ifndef GL_APPLE_element_array #define GL_ELEMENT_ARRAY_APPLE 0x8A0C #define GL_ELEMENT_ARRAY_TYPE_APPLE 0x8A0D #define GL_ELEMENT_ARRAY_POINTER_APPLE 0x8A0E #endif #ifndef GL_APPLE_fence #define GL_DRAW_PIXELS_APPLE 0x8A0A #define GL_FENCE_APPLE 0x8A0B #endif #ifndef GL_APPLE_vertex_array_object #define GL_VERTEX_ARRAY_BINDING_APPLE 0x85B5 #endif #ifndef GL_APPLE_vertex_array_range #define GL_VERTEX_ARRAY_RANGE_APPLE 0x851D #define GL_VERTEX_ARRAY_RANGE_LENGTH_APPLE 0x851E #define GL_VERTEX_ARRAY_STORAGE_HINT_APPLE 0x851F #define GL_VERTEX_ARRAY_RANGE_POINTER_APPLE 0x8521 #define GL_STORAGE_CLIENT_APPLE 0x85B4 #define GL_STORAGE_CACHED_APPLE 0x85BE #define GL_STORAGE_SHARED_APPLE 0x85BF #endif #ifndef GL_APPLE_ycbcr_422 #define GL_YCBCR_422_APPLE 0x85B9 #define GL_UNSIGNED_SHORT_8_8_APPLE 0x85BA #define GL_UNSIGNED_SHORT_8_8_REV_APPLE 0x85BB #endif #ifndef GL_S3_s3tc #define GL_RGB_S3TC 0x83A0 #define GL_RGB4_S3TC 0x83A1 #define GL_RGBA_S3TC 0x83A2 #define GL_RGBA4_S3TC 0x83A3 #define GL_RGBA_DXT5_S3TC 0x83A4 #define GL_RGBA4_DXT5_S3TC 0x83A5 #endif #ifndef GL_ATI_draw_buffers #define GL_MAX_DRAW_BUFFERS_ATI 0x8824 #define GL_DRAW_BUFFER0_ATI 0x8825 #define GL_DRAW_BUFFER1_ATI 0x8826 #define GL_DRAW_BUFFER2_ATI 0x8827 #define GL_DRAW_BUFFER3_ATI 0x8828 #define GL_DRAW_BUFFER4_ATI 0x8829 #define GL_DRAW_BUFFER5_ATI 0x882A #define GL_DRAW_BUFFER6_ATI 0x882B #define GL_DRAW_BUFFER7_ATI 0x882C #define GL_DRAW_BUFFER8_ATI 0x882D #define GL_DRAW_BUFFER9_ATI 0x882E #define GL_DRAW_BUFFER10_ATI 0x882F #define GL_DRAW_BUFFER11_ATI 0x8830 #define GL_DRAW_BUFFER12_ATI 0x8831 #define GL_DRAW_BUFFER13_ATI 0x8832 #define GL_DRAW_BUFFER14_ATI 0x8833 #define GL_DRAW_BUFFER15_ATI 0x8834 #endif #ifndef GL_ATI_pixel_format_float #define GL_RGBA_FLOAT_MODE_ATI 0x8820 #define GL_COLOR_CLEAR_UNCLAMPED_VALUE_ATI 0x8835 #endif #ifndef GL_ATI_texture_env_combine3 #define GL_MODULATE_ADD_ATI 0x8744 #define GL_MODULATE_SIGNED_ADD_ATI 0x8745 #define GL_MODULATE_SUBTRACT_ATI 0x8746 #endif #ifndef GL_ATI_texture_float #define GL_RGBA_FLOAT32_ATI 0x8814 #define GL_RGB_FLOAT32_ATI 0x8815 #define GL_ALPHA_FLOAT32_ATI 0x8816 #define GL_INTENSITY_FLOAT32_ATI 0x8817 #define GL_LUMINANCE_FLOAT32_ATI 0x8818 #define GL_LUMINANCE_ALPHA_FLOAT32_ATI 0x8819 #define GL_RGBA_FLOAT16_ATI 0x881A #define GL_RGB_FLOAT16_ATI 0x881B #define GL_ALPHA_FLOAT16_ATI 0x881C #define GL_INTENSITY_FLOAT16_ATI 0x881D #define GL_LUMINANCE_FLOAT16_ATI 0x881E #define GL_LUMINANCE_ALPHA_FLOAT16_ATI 0x881F #endif #ifndef GL_NV_float_buffer #define GL_FLOAT_R_NV 0x8880 #define GL_FLOAT_RG_NV 0x8881 #define GL_FLOAT_RGB_NV 0x8882 #define GL_FLOAT_RGBA_NV 0x8883 #define GL_FLOAT_R16_NV 0x8884 #define GL_FLOAT_R32_NV 0x8885 #define GL_FLOAT_RG16_NV 0x8886 #define GL_FLOAT_RG32_NV 0x8887 #define GL_FLOAT_RGB16_NV 0x8888 #define GL_FLOAT_RGB32_NV 0x8889 #define GL_FLOAT_RGBA16_NV 0x888A #define GL_FLOAT_RGBA32_NV 0x888B #define GL_TEXTURE_FLOAT_COMPONENTS_NV 0x888C #define GL_FLOAT_CLEAR_COLOR_VALUE_NV 0x888D #define GL_FLOAT_RGBA_MODE_NV 0x888E #endif #ifndef GL_NV_fragment_program #define GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV 0x8868 #define GL_FRAGMENT_PROGRAM_NV 0x8870 #define GL_MAX_TEXTURE_COORDS_NV 0x8871 #define GL_MAX_TEXTURE_IMAGE_UNITS_NV 0x8872 #define GL_FRAGMENT_PROGRAM_BINDING_NV 0x8873 #define GL_PROGRAM_ERROR_STRING_NV 0x8874 #endif #ifndef GL_NV_half_float #define GL_HALF_FLOAT_NV 0x140B #endif #ifndef GL_NV_pixel_data_range #define GL_WRITE_PIXEL_DATA_RANGE_NV 0x8878 #define GL_READ_PIXEL_DATA_RANGE_NV 0x8879 #define GL_WRITE_PIXEL_DATA_RANGE_LENGTH_NV 0x887A #define GL_READ_PIXEL_DATA_RANGE_LENGTH_NV 0x887B #define GL_WRITE_PIXEL_DATA_RANGE_POINTER_NV 0x887C #define GL_READ_PIXEL_DATA_RANGE_POINTER_NV 0x887D #endif #ifndef GL_NV_primitive_restart #define GL_PRIMITIVE_RESTART_NV 0x8558 #define GL_PRIMITIVE_RESTART_INDEX_NV 0x8559 #endif #ifndef GL_NV_texture_expand_normal #define GL_TEXTURE_UNSIGNED_REMAP_MODE_NV 0x888F #endif #ifndef GL_NV_vertex_program2 #endif #ifndef GL_ATI_map_object_buffer #endif #ifndef GL_ATI_separate_stencil #define GL_STENCIL_BACK_FUNC_ATI 0x8800 #define GL_STENCIL_BACK_FAIL_ATI 0x8801 #define GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI 0x8802 #define GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI 0x8803 #endif #ifndef GL_ATI_vertex_attrib_array_object #endif #ifndef GL_OES_byte_coordinates #endif #ifndef GL_OES_fixed_point #define GL_FIXED_OES 0x140C #endif #ifndef GL_OES_single_precision #endif #ifndef GL_OES_compressed_paletted_texture #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 #endif #ifndef GL_OES_read_format #define GL_IMPLEMENTATION_COLOR_READ_TYPE_OES 0x8B9A #define GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES 0x8B9B #endif #ifndef GL_OES_query_matrix #endif #ifndef GL_EXT_depth_bounds_test #define GL_DEPTH_BOUNDS_TEST_EXT 0x8890 #define GL_DEPTH_BOUNDS_EXT 0x8891 #endif #ifndef GL_EXT_texture_mirror_clamp #define GL_MIRROR_CLAMP_EXT 0x8742 #define GL_MIRROR_CLAMP_TO_EDGE_EXT 0x8743 #define GL_MIRROR_CLAMP_TO_BORDER_EXT 0x8912 #endif #ifndef GL_EXT_blend_equation_separate #define GL_BLEND_EQUATION_RGB_EXT 0x8009 #define GL_BLEND_EQUATION_ALPHA_EXT 0x883D #endif #ifndef GL_MESA_pack_invert #define GL_PACK_INVERT_MESA 0x8758 #endif #ifndef GL_MESA_ycbcr_texture #define GL_UNSIGNED_SHORT_8_8_MESA 0x85BA #define GL_UNSIGNED_SHORT_8_8_REV_MESA 0x85BB #define GL_YCBCR_MESA 0x8757 #endif #ifndef GL_EXT_pixel_buffer_object #define GL_PIXEL_PACK_BUFFER_EXT 0x88EB #define GL_PIXEL_UNPACK_BUFFER_EXT 0x88EC #define GL_PIXEL_PACK_BUFFER_BINDING_EXT 0x88ED #define GL_PIXEL_UNPACK_BUFFER_BINDING_EXT 0x88EF #endif #ifndef GL_NV_fragment_program_option #endif #ifndef GL_NV_fragment_program2 #define GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV 0x88F4 #define GL_MAX_PROGRAM_CALL_DEPTH_NV 0x88F5 #define GL_MAX_PROGRAM_IF_DEPTH_NV 0x88F6 #define GL_MAX_PROGRAM_LOOP_DEPTH_NV 0x88F7 #define GL_MAX_PROGRAM_LOOP_COUNT_NV 0x88F8 #endif #ifndef GL_NV_vertex_program2_option /* reuse GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV */ /* reuse GL_MAX_PROGRAM_CALL_DEPTH_NV */ #endif #ifndef GL_NV_vertex_program3 /* reuse GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB */ #endif #ifndef GL_EXT_framebuffer_object #define GL_INVALID_FRAMEBUFFER_OPERATION_EXT 0x0506 #define GL_MAX_RENDERBUFFER_SIZE_EXT 0x84E8 #define GL_FRAMEBUFFER_BINDING_EXT 0x8CA6 #define GL_RENDERBUFFER_BINDING_EXT 0x8CA7 #define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT 0x8CD0 #define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT 0x8CD1 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT 0x8CD2 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT 0x8CD3 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT 0x8CD4 #define GL_FRAMEBUFFER_COMPLETE_EXT 0x8CD5 #define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT 0x8CD6 #define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT 0x8CD7 #define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT 0x8CD9 #define GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT 0x8CDA #define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT 0x8CDB #define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT 0x8CDC #define GL_FRAMEBUFFER_UNSUPPORTED_EXT 0x8CDD #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 #define GL_DEPTH_ATTACHMENT_EXT 0x8D00 #define GL_STENCIL_ATTACHMENT_EXT 0x8D20 #define GL_FRAMEBUFFER_EXT 0x8D40 #define GL_RENDERBUFFER_EXT 0x8D41 #define GL_RENDERBUFFER_WIDTH_EXT 0x8D42 #define GL_RENDERBUFFER_HEIGHT_EXT 0x8D43 #define GL_RENDERBUFFER_INTERNAL_FORMAT_EXT 0x8D44 #define GL_STENCIL_INDEX1_EXT 0x8D46 #define GL_STENCIL_INDEX4_EXT 0x8D47 #define GL_STENCIL_INDEX8_EXT 0x8D48 #define GL_STENCIL_INDEX16_EXT 0x8D49 #define GL_RENDERBUFFER_RED_SIZE_EXT 0x8D50 #define GL_RENDERBUFFER_GREEN_SIZE_EXT 0x8D51 #define GL_RENDERBUFFER_BLUE_SIZE_EXT 0x8D52 #define GL_RENDERBUFFER_ALPHA_SIZE_EXT 0x8D53 #define GL_RENDERBUFFER_DEPTH_SIZE_EXT 0x8D54 #define GL_RENDERBUFFER_STENCIL_SIZE_EXT 0x8D55 #endif #ifndef GL_GREMEDY_string_marker #endif #ifndef GL_EXT_packed_depth_stencil #define GL_DEPTH_STENCIL_EXT 0x84F9 #define GL_UNSIGNED_INT_24_8_EXT 0x84FA #define GL_DEPTH24_STENCIL8_EXT 0x88F0 #define GL_TEXTURE_STENCIL_SIZE_EXT 0x88F1 #endif #ifndef GL_EXT_stencil_clear_tag #define GL_STENCIL_TAG_BITS_EXT 0x88F2 #define GL_STENCIL_CLEAR_TAG_VALUE_EXT 0x88F3 #endif #ifndef GL_EXT_texture_sRGB #define GL_SRGB_EXT 0x8C40 #define GL_SRGB8_EXT 0x8C41 #define GL_SRGB_ALPHA_EXT 0x8C42 #define GL_SRGB8_ALPHA8_EXT 0x8C43 #define GL_SLUMINANCE_ALPHA_EXT 0x8C44 #define GL_SLUMINANCE8_ALPHA8_EXT 0x8C45 #define GL_SLUMINANCE_EXT 0x8C46 #define GL_SLUMINANCE8_EXT 0x8C47 #define GL_COMPRESSED_SRGB_EXT 0x8C48 #define GL_COMPRESSED_SRGB_ALPHA_EXT 0x8C49 #define GL_COMPRESSED_SLUMINANCE_EXT 0x8C4A #define GL_COMPRESSED_SLUMINANCE_ALPHA_EXT 0x8C4B #define GL_COMPRESSED_SRGB_S3TC_DXT1_EXT 0x8C4C #define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT 0x8C4D #define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT 0x8C4E #define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT 0x8C4F #endif #ifndef GL_EXT_framebuffer_blit #define GL_READ_FRAMEBUFFER_EXT 0x8CA8 #define GL_DRAW_FRAMEBUFFER_EXT 0x8CA9 #define GL_DRAW_FRAMEBUFFER_BINDING_EXT 0x8CA6 #define GL_READ_FRAMEBUFFER_BINDING_EXT 0x8CAA #endif #ifndef GL_EXT_framebuffer_multisample #define GL_RENDERBUFFER_SAMPLES_EXT 0x8CAB #define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT 0x8D56 #define GL_MAX_SAMPLES_EXT 0x8D57 #endif #ifndef GL_MESAX_texture_stack #define GL_TEXTURE_1D_STACK_MESAX 0x8759 #define GL_TEXTURE_2D_STACK_MESAX 0x875A #define GL_PROXY_TEXTURE_1D_STACK_MESAX 0x875B #define GL_PROXY_TEXTURE_2D_STACK_MESAX 0x875C #define GL_TEXTURE_1D_STACK_BINDING_MESAX 0x875D #define GL_TEXTURE_2D_STACK_BINDING_MESAX 0x875E #endif #ifndef GL_EXT_timer_query #define GL_TIME_ELAPSED_EXT 0x88BF #endif #ifndef GL_EXT_gpu_program_parameters #endif #ifndef GL_APPLE_flush_buffer_range #define GL_BUFFER_SERIALIZED_MODIFY_APPLE 0x8A12 #define GL_BUFFER_FLUSHING_UNMAP_APPLE 0x8A13 #endif #ifndef GL_NV_gpu_program4 #define GL_MIN_PROGRAM_TEXEL_OFFSET_NV 0x8904 #define GL_MAX_PROGRAM_TEXEL_OFFSET_NV 0x8905 #define GL_PROGRAM_ATTRIB_COMPONENTS_NV 0x8906 #define GL_PROGRAM_RESULT_COMPONENTS_NV 0x8907 #define GL_MAX_PROGRAM_ATTRIB_COMPONENTS_NV 0x8908 #define GL_MAX_PROGRAM_RESULT_COMPONENTS_NV 0x8909 #define GL_MAX_PROGRAM_GENERIC_ATTRIBS_NV 0x8DA5 #define GL_MAX_PROGRAM_GENERIC_RESULTS_NV 0x8DA6 #endif #ifndef GL_NV_geometry_program4 #define GL_LINES_ADJACENCY_EXT 0x000A #define GL_LINE_STRIP_ADJACENCY_EXT 0x000B #define GL_TRIANGLES_ADJACENCY_EXT 0x000C #define GL_TRIANGLE_STRIP_ADJACENCY_EXT 0x000D #define GL_GEOMETRY_PROGRAM_NV 0x8C26 #define GL_MAX_PROGRAM_OUTPUT_VERTICES_NV 0x8C27 #define GL_MAX_PROGRAM_TOTAL_OUTPUT_COMPONENTS_NV 0x8C28 #define GL_GEOMETRY_VERTICES_OUT_EXT 0x8DDA #define GL_GEOMETRY_INPUT_TYPE_EXT 0x8DDB #define GL_GEOMETRY_OUTPUT_TYPE_EXT 0x8DDC #define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT 0x8C29 #define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT 0x8DA7 #define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT 0x8DA8 #define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_EXT 0x8DA9 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT 0x8CD4 #define GL_PROGRAM_POINT_SIZE_EXT 0x8642 #endif #ifndef GL_EXT_geometry_shader4 #define GL_GEOMETRY_SHADER_EXT 0x8DD9 /* reuse GL_GEOMETRY_VERTICES_OUT_EXT */ /* reuse GL_GEOMETRY_INPUT_TYPE_EXT */ /* reuse GL_GEOMETRY_OUTPUT_TYPE_EXT */ /* reuse GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT */ #define GL_MAX_GEOMETRY_VARYING_COMPONENTS_EXT 0x8DDD #define GL_MAX_VERTEX_VARYING_COMPONENTS_EXT 0x8DDE #define GL_MAX_VARYING_COMPONENTS_EXT 0x8B4B #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 /* reuse GL_LINES_ADJACENCY_EXT */ /* reuse GL_LINE_STRIP_ADJACENCY_EXT */ /* reuse GL_TRIANGLES_ADJACENCY_EXT */ /* reuse GL_TRIANGLE_STRIP_ADJACENCY_EXT */ /* reuse GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT */ /* reuse GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_EXT */ /* reuse GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT */ /* reuse GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT */ /* reuse GL_PROGRAM_POINT_SIZE_EXT */ #endif #ifndef GL_NV_vertex_program4 #define GL_VERTEX_ATTRIB_ARRAY_INTEGER_NV 0x88FD #endif #ifndef GL_EXT_gpu_shader4 #define GL_SAMPLER_1D_ARRAY_EXT 0x8DC0 #define GL_SAMPLER_2D_ARRAY_EXT 0x8DC1 #define GL_SAMPLER_BUFFER_EXT 0x8DC2 #define GL_SAMPLER_1D_ARRAY_SHADOW_EXT 0x8DC3 #define GL_SAMPLER_2D_ARRAY_SHADOW_EXT 0x8DC4 #define GL_SAMPLER_CUBE_SHADOW_EXT 0x8DC5 #define GL_UNSIGNED_INT_VEC2_EXT 0x8DC6 #define GL_UNSIGNED_INT_VEC3_EXT 0x8DC7 #define GL_UNSIGNED_INT_VEC4_EXT 0x8DC8 #define GL_INT_SAMPLER_1D_EXT 0x8DC9 #define GL_INT_SAMPLER_2D_EXT 0x8DCA #define GL_INT_SAMPLER_3D_EXT 0x8DCB #define GL_INT_SAMPLER_CUBE_EXT 0x8DCC #define GL_INT_SAMPLER_2D_RECT_EXT 0x8DCD #define GL_INT_SAMPLER_1D_ARRAY_EXT 0x8DCE #define GL_INT_SAMPLER_2D_ARRAY_EXT 0x8DCF #define GL_INT_SAMPLER_BUFFER_EXT 0x8DD0 #define GL_UNSIGNED_INT_SAMPLER_1D_EXT 0x8DD1 #define GL_UNSIGNED_INT_SAMPLER_2D_EXT 0x8DD2 #define GL_UNSIGNED_INT_SAMPLER_3D_EXT 0x8DD3 #define GL_UNSIGNED_INT_SAMPLER_CUBE_EXT 0x8DD4 #define GL_UNSIGNED_INT_SAMPLER_2D_RECT_EXT 0x8DD5 #define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY_EXT 0x8DD6 #define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY_EXT 0x8DD7 #define GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT 0x8DD8 #endif #ifndef GL_EXT_draw_instanced #endif #ifndef GL_EXT_packed_float #define GL_R11F_G11F_B10F_EXT 0x8C3A #define GL_UNSIGNED_INT_10F_11F_11F_REV_EXT 0x8C3B #define GL_RGBA_SIGNED_COMPONENTS_EXT 0x8C3C #endif #ifndef GL_EXT_texture_array #define GL_TEXTURE_1D_ARRAY_EXT 0x8C18 #define GL_PROXY_TEXTURE_1D_ARRAY_EXT 0x8C19 #define GL_TEXTURE_2D_ARRAY_EXT 0x8C1A #define GL_PROXY_TEXTURE_2D_ARRAY_EXT 0x8C1B #define GL_TEXTURE_BINDING_1D_ARRAY_EXT 0x8C1C #define GL_TEXTURE_BINDING_2D_ARRAY_EXT 0x8C1D #define GL_MAX_ARRAY_TEXTURE_LAYERS_EXT 0x88FF #define GL_COMPARE_REF_DEPTH_TO_TEXTURE_EXT 0x884E /* reuse GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT */ #endif #ifndef GL_EXT_texture_buffer_object #define GL_TEXTURE_BUFFER_EXT 0x8C2A #define GL_MAX_TEXTURE_BUFFER_SIZE_EXT 0x8C2B #define GL_TEXTURE_BINDING_BUFFER_EXT 0x8C2C #define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_EXT 0x8C2D #define GL_TEXTURE_BUFFER_FORMAT_EXT 0x8C2E #endif #ifndef GL_EXT_texture_compression_latc #define GL_COMPRESSED_LUMINANCE_LATC1_EXT 0x8C70 #define GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT 0x8C71 #define GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT 0x8C72 #define GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT 0x8C73 #endif #ifndef GL_EXT_texture_compression_rgtc #define GL_COMPRESSED_RED_RGTC1_EXT 0x8DBB #define GL_COMPRESSED_SIGNED_RED_RGTC1_EXT 0x8DBC #define GL_COMPRESSED_RED_GREEN_RGTC2_EXT 0x8DBD #define GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT 0x8DBE #endif #ifndef GL_EXT_texture_shared_exponent #define GL_RGB9_E5_EXT 0x8C3D #define GL_UNSIGNED_INT_5_9_9_9_REV_EXT 0x8C3E #define GL_TEXTURE_SHARED_SIZE_EXT 0x8C3F #endif #ifndef GL_NV_depth_buffer_float #define GL_DEPTH_COMPONENT32F_NV 0x8DAB #define GL_DEPTH32F_STENCIL8_NV 0x8DAC #define GL_FLOAT_32_UNSIGNED_INT_24_8_REV_NV 0x8DAD #define GL_DEPTH_BUFFER_FLOAT_MODE_NV 0x8DAF #endif #ifndef GL_NV_fragment_program4 #endif #ifndef GL_NV_framebuffer_multisample_coverage #define GL_RENDERBUFFER_COVERAGE_SAMPLES_NV 0x8CAB #define GL_RENDERBUFFER_COLOR_SAMPLES_NV 0x8E10 #define GL_MAX_MULTISAMPLE_COVERAGE_MODES_NV 0x8E11 #define GL_MULTISAMPLE_COVERAGE_MODES_NV 0x8E12 #endif #ifndef GL_EXT_framebuffer_sRGB #define GL_FRAMEBUFFER_SRGB_EXT 0x8DB9 #define GL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x8DBA #endif #ifndef GL_NV_geometry_shader4 #endif #ifndef GL_NV_parameter_buffer_object #define GL_MAX_PROGRAM_PARAMETER_BUFFER_BINDINGS_NV 0x8DA0 #define GL_MAX_PROGRAM_PARAMETER_BUFFER_SIZE_NV 0x8DA1 #define GL_VERTEX_PROGRAM_PARAMETER_BUFFER_NV 0x8DA2 #define GL_GEOMETRY_PROGRAM_PARAMETER_BUFFER_NV 0x8DA3 #define GL_FRAGMENT_PROGRAM_PARAMETER_BUFFER_NV 0x8DA4 #endif #ifndef GL_EXT_draw_buffers2 #endif #ifndef GL_NV_transform_feedback #define GL_BACK_PRIMARY_COLOR_NV 0x8C77 #define GL_BACK_SECONDARY_COLOR_NV 0x8C78 #define GL_TEXTURE_COORD_NV 0x8C79 #define GL_CLIP_DISTANCE_NV 0x8C7A #define GL_VERTEX_ID_NV 0x8C7B #define GL_PRIMITIVE_ID_NV 0x8C7C #define GL_GENERIC_ATTRIB_NV 0x8C7D #define GL_TRANSFORM_FEEDBACK_ATTRIBS_NV 0x8C7E #define GL_TRANSFORM_FEEDBACK_BUFFER_MODE_NV 0x8C7F #define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_NV 0x8C80 #define GL_ACTIVE_VARYINGS_NV 0x8C81 #define GL_ACTIVE_VARYING_MAX_LENGTH_NV 0x8C82 #define GL_TRANSFORM_FEEDBACK_VARYINGS_NV 0x8C83 #define GL_TRANSFORM_FEEDBACK_BUFFER_START_NV 0x8C84 #define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_NV 0x8C85 #define GL_TRANSFORM_FEEDBACK_RECORD_NV 0x8C86 #define GL_PRIMITIVES_GENERATED_NV 0x8C87 #define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_NV 0x8C88 #define GL_RASTERIZER_DISCARD_NV 0x8C89 #define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_NV 0x8C8A #define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_NV 0x8C8B #define GL_INTERLEAVED_ATTRIBS_NV 0x8C8C #define GL_SEPARATE_ATTRIBS_NV 0x8C8D #define GL_TRANSFORM_FEEDBACK_BUFFER_NV 0x8C8E #define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_NV 0x8C8F #define GL_LAYER_NV 0x8DAA #define GL_NEXT_BUFFER_NV -2 #define GL_SKIP_COMPONENTS4_NV -3 #define GL_SKIP_COMPONENTS3_NV -4 #define GL_SKIP_COMPONENTS2_NV -5 #define GL_SKIP_COMPONENTS1_NV -6 #endif #ifndef GL_EXT_bindable_uniform #define GL_MAX_VERTEX_BINDABLE_UNIFORMS_EXT 0x8DE2 #define GL_MAX_FRAGMENT_BINDABLE_UNIFORMS_EXT 0x8DE3 #define GL_MAX_GEOMETRY_BINDABLE_UNIFORMS_EXT 0x8DE4 #define GL_MAX_BINDABLE_UNIFORM_SIZE_EXT 0x8DED #define GL_UNIFORM_BUFFER_EXT 0x8DEE #define GL_UNIFORM_BUFFER_BINDING_EXT 0x8DEF #endif #ifndef GL_EXT_texture_integer #define GL_RGBA32UI_EXT 0x8D70 #define GL_RGB32UI_EXT 0x8D71 #define GL_ALPHA32UI_EXT 0x8D72 #define GL_INTENSITY32UI_EXT 0x8D73 #define GL_LUMINANCE32UI_EXT 0x8D74 #define GL_LUMINANCE_ALPHA32UI_EXT 0x8D75 #define GL_RGBA16UI_EXT 0x8D76 #define GL_RGB16UI_EXT 0x8D77 #define GL_ALPHA16UI_EXT 0x8D78 #define GL_INTENSITY16UI_EXT 0x8D79 #define GL_LUMINANCE16UI_EXT 0x8D7A #define GL_LUMINANCE_ALPHA16UI_EXT 0x8D7B #define GL_RGBA8UI_EXT 0x8D7C #define GL_RGB8UI_EXT 0x8D7D #define GL_ALPHA8UI_EXT 0x8D7E #define GL_INTENSITY8UI_EXT 0x8D7F #define GL_LUMINANCE8UI_EXT 0x8D80 #define GL_LUMINANCE_ALPHA8UI_EXT 0x8D81 #define GL_RGBA32I_EXT 0x8D82 #define GL_RGB32I_EXT 0x8D83 #define GL_ALPHA32I_EXT 0x8D84 #define GL_INTENSITY32I_EXT 0x8D85 #define GL_LUMINANCE32I_EXT 0x8D86 #define GL_LUMINANCE_ALPHA32I_EXT 0x8D87 #define GL_RGBA16I_EXT 0x8D88 #define GL_RGB16I_EXT 0x8D89 #define GL_ALPHA16I_EXT 0x8D8A #define GL_INTENSITY16I_EXT 0x8D8B #define GL_LUMINANCE16I_EXT 0x8D8C #define GL_LUMINANCE_ALPHA16I_EXT 0x8D8D #define GL_RGBA8I_EXT 0x8D8E #define GL_RGB8I_EXT 0x8D8F #define GL_ALPHA8I_EXT 0x8D90 #define GL_INTENSITY8I_EXT 0x8D91 #define GL_LUMINANCE8I_EXT 0x8D92 #define GL_LUMINANCE_ALPHA8I_EXT 0x8D93 #define GL_RED_INTEGER_EXT 0x8D94 #define GL_GREEN_INTEGER_EXT 0x8D95 #define GL_BLUE_INTEGER_EXT 0x8D96 #define GL_ALPHA_INTEGER_EXT 0x8D97 #define GL_RGB_INTEGER_EXT 0x8D98 #define GL_RGBA_INTEGER_EXT 0x8D99 #define GL_BGR_INTEGER_EXT 0x8D9A #define GL_BGRA_INTEGER_EXT 0x8D9B #define GL_LUMINANCE_INTEGER_EXT 0x8D9C #define GL_LUMINANCE_ALPHA_INTEGER_EXT 0x8D9D #define GL_RGBA_INTEGER_MODE_EXT 0x8D9E #endif #ifndef GL_GREMEDY_frame_terminator #endif #ifndef GL_NV_conditional_render #define GL_QUERY_WAIT_NV 0x8E13 #define GL_QUERY_NO_WAIT_NV 0x8E14 #define GL_QUERY_BY_REGION_WAIT_NV 0x8E15 #define GL_QUERY_BY_REGION_NO_WAIT_NV 0x8E16 #endif #ifndef GL_NV_present_video #define GL_FRAME_NV 0x8E26 #define GL_FIELDS_NV 0x8E27 #define GL_CURRENT_TIME_NV 0x8E28 #define GL_NUM_FILL_STREAMS_NV 0x8E29 #define GL_PRESENT_TIME_NV 0x8E2A #define GL_PRESENT_DURATION_NV 0x8E2B #endif #ifndef GL_EXT_transform_feedback #define GL_TRANSFORM_FEEDBACK_BUFFER_EXT 0x8C8E #define GL_TRANSFORM_FEEDBACK_BUFFER_START_EXT 0x8C84 #define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_EXT 0x8C85 #define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_EXT 0x8C8F #define GL_INTERLEAVED_ATTRIBS_EXT 0x8C8C #define GL_SEPARATE_ATTRIBS_EXT 0x8C8D #define GL_PRIMITIVES_GENERATED_EXT 0x8C87 #define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_EXT 0x8C88 #define GL_RASTERIZER_DISCARD_EXT 0x8C89 #define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_EXT 0x8C8A #define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_EXT 0x8C8B #define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_EXT 0x8C80 #define GL_TRANSFORM_FEEDBACK_VARYINGS_EXT 0x8C83 #define GL_TRANSFORM_FEEDBACK_BUFFER_MODE_EXT 0x8C7F #define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH_EXT 0x8C76 #endif #ifndef GL_EXT_direct_state_access #define GL_PROGRAM_MATRIX_EXT 0x8E2D #define GL_TRANSPOSE_PROGRAM_MATRIX_EXT 0x8E2E #define GL_PROGRAM_MATRIX_STACK_DEPTH_EXT 0x8E2F #endif #ifndef GL_EXT_vertex_array_bgra /* reuse GL_BGRA */ #endif #ifndef GL_EXT_texture_swizzle #define GL_TEXTURE_SWIZZLE_R_EXT 0x8E42 #define GL_TEXTURE_SWIZZLE_G_EXT 0x8E43 #define GL_TEXTURE_SWIZZLE_B_EXT 0x8E44 #define GL_TEXTURE_SWIZZLE_A_EXT 0x8E45 #define GL_TEXTURE_SWIZZLE_RGBA_EXT 0x8E46 #endif #ifndef GL_NV_explicit_multisample #define GL_SAMPLE_POSITION_NV 0x8E50 #define GL_SAMPLE_MASK_NV 0x8E51 #define GL_SAMPLE_MASK_VALUE_NV 0x8E52 #define GL_TEXTURE_BINDING_RENDERBUFFER_NV 0x8E53 #define GL_TEXTURE_RENDERBUFFER_DATA_STORE_BINDING_NV 0x8E54 #define GL_TEXTURE_RENDERBUFFER_NV 0x8E55 #define GL_SAMPLER_RENDERBUFFER_NV 0x8E56 #define GL_INT_SAMPLER_RENDERBUFFER_NV 0x8E57 #define GL_UNSIGNED_INT_SAMPLER_RENDERBUFFER_NV 0x8E58 #define GL_MAX_SAMPLE_MASK_WORDS_NV 0x8E59 #endif #ifndef GL_NV_transform_feedback2 #define GL_TRANSFORM_FEEDBACK_NV 0x8E22 #define GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED_NV 0x8E23 #define GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE_NV 0x8E24 #define GL_TRANSFORM_FEEDBACK_BINDING_NV 0x8E25 #endif #ifndef GL_ATI_meminfo #define GL_VBO_FREE_MEMORY_ATI 0x87FB #define GL_TEXTURE_FREE_MEMORY_ATI 0x87FC #define GL_RENDERBUFFER_FREE_MEMORY_ATI 0x87FD #endif #ifndef GL_AMD_performance_monitor #define GL_COUNTER_TYPE_AMD 0x8BC0 #define GL_COUNTER_RANGE_AMD 0x8BC1 #define GL_UNSIGNED_INT64_AMD 0x8BC2 #define GL_PERCENTAGE_AMD 0x8BC3 #define GL_PERFMON_RESULT_AVAILABLE_AMD 0x8BC4 #define GL_PERFMON_RESULT_SIZE_AMD 0x8BC5 #define GL_PERFMON_RESULT_AMD 0x8BC6 #endif #ifndef GL_AMD_texture_texture4 #endif #ifndef GL_AMD_vertex_shader_tessellator #define GL_SAMPLER_BUFFER_AMD 0x9001 #define GL_INT_SAMPLER_BUFFER_AMD 0x9002 #define GL_UNSIGNED_INT_SAMPLER_BUFFER_AMD 0x9003 #define GL_TESSELLATION_MODE_AMD 0x9004 #define GL_TESSELLATION_FACTOR_AMD 0x9005 #define GL_DISCRETE_AMD 0x9006 #define GL_CONTINUOUS_AMD 0x9007 #endif #ifndef GL_EXT_provoking_vertex #define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION_EXT 0x8E4C #define GL_FIRST_VERTEX_CONVENTION_EXT 0x8E4D #define GL_LAST_VERTEX_CONVENTION_EXT 0x8E4E #define GL_PROVOKING_VERTEX_EXT 0x8E4F #endif #ifndef GL_EXT_texture_snorm #define GL_ALPHA_SNORM 0x9010 #define GL_LUMINANCE_SNORM 0x9011 #define GL_LUMINANCE_ALPHA_SNORM 0x9012 #define GL_INTENSITY_SNORM 0x9013 #define GL_ALPHA8_SNORM 0x9014 #define GL_LUMINANCE8_SNORM 0x9015 #define GL_LUMINANCE8_ALPHA8_SNORM 0x9016 #define GL_INTENSITY8_SNORM 0x9017 #define GL_ALPHA16_SNORM 0x9018 #define GL_LUMINANCE16_SNORM 0x9019 #define GL_LUMINANCE16_ALPHA16_SNORM 0x901A #define GL_INTENSITY16_SNORM 0x901B /* reuse GL_RED_SNORM */ /* reuse GL_RG_SNORM */ /* reuse GL_RGB_SNORM */ /* reuse GL_RGBA_SNORM */ /* reuse GL_R8_SNORM */ /* reuse GL_RG8_SNORM */ /* reuse GL_RGB8_SNORM */ /* reuse GL_RGBA8_SNORM */ /* reuse GL_R16_SNORM */ /* reuse GL_RG16_SNORM */ /* reuse GL_RGB16_SNORM */ /* reuse GL_RGBA16_SNORM */ /* reuse GL_SIGNED_NORMALIZED */ #endif #ifndef GL_AMD_draw_buffers_blend #endif #ifndef GL_APPLE_texture_range #define GL_TEXTURE_RANGE_LENGTH_APPLE 0x85B7 #define GL_TEXTURE_RANGE_POINTER_APPLE 0x85B8 #define GL_TEXTURE_STORAGE_HINT_APPLE 0x85BC #define GL_STORAGE_PRIVATE_APPLE 0x85BD /* reuse GL_STORAGE_CACHED_APPLE */ /* reuse GL_STORAGE_SHARED_APPLE */ #endif #ifndef GL_APPLE_float_pixels #define GL_HALF_APPLE 0x140B #define GL_RGBA_FLOAT32_APPLE 0x8814 #define GL_RGB_FLOAT32_APPLE 0x8815 #define GL_ALPHA_FLOAT32_APPLE 0x8816 #define GL_INTENSITY_FLOAT32_APPLE 0x8817 #define GL_LUMINANCE_FLOAT32_APPLE 0x8818 #define GL_LUMINANCE_ALPHA_FLOAT32_APPLE 0x8819 #define GL_RGBA_FLOAT16_APPLE 0x881A #define GL_RGB_FLOAT16_APPLE 0x881B #define GL_ALPHA_FLOAT16_APPLE 0x881C #define GL_INTENSITY_FLOAT16_APPLE 0x881D #define GL_LUMINANCE_FLOAT16_APPLE 0x881E #define GL_LUMINANCE_ALPHA_FLOAT16_APPLE 0x881F #define GL_COLOR_FLOAT_APPLE 0x8A0F #endif #ifndef GL_APPLE_vertex_program_evaluators #define GL_VERTEX_ATTRIB_MAP1_APPLE 0x8A00 #define GL_VERTEX_ATTRIB_MAP2_APPLE 0x8A01 #define GL_VERTEX_ATTRIB_MAP1_SIZE_APPLE 0x8A02 #define GL_VERTEX_ATTRIB_MAP1_COEFF_APPLE 0x8A03 #define GL_VERTEX_ATTRIB_MAP1_ORDER_APPLE 0x8A04 #define GL_VERTEX_ATTRIB_MAP1_DOMAIN_APPLE 0x8A05 #define GL_VERTEX_ATTRIB_MAP2_SIZE_APPLE 0x8A06 #define GL_VERTEX_ATTRIB_MAP2_COEFF_APPLE 0x8A07 #define GL_VERTEX_ATTRIB_MAP2_ORDER_APPLE 0x8A08 #define GL_VERTEX_ATTRIB_MAP2_DOMAIN_APPLE 0x8A09 #endif #ifndef GL_APPLE_aux_depth_stencil #define GL_AUX_DEPTH_STENCIL_APPLE 0x8A14 #endif #ifndef GL_APPLE_object_purgeable #define GL_BUFFER_OBJECT_APPLE 0x85B3 #define GL_RELEASED_APPLE 0x8A19 #define GL_VOLATILE_APPLE 0x8A1A #define GL_RETAINED_APPLE 0x8A1B #define GL_UNDEFINED_APPLE 0x8A1C #define GL_PURGEABLE_APPLE 0x8A1D #endif #ifndef GL_APPLE_row_bytes #define GL_PACK_ROW_BYTES_APPLE 0x8A15 #define GL_UNPACK_ROW_BYTES_APPLE 0x8A16 #endif #ifndef GL_APPLE_rgb_422 #define GL_RGB_422_APPLE 0x8A1F /* reuse GL_UNSIGNED_SHORT_8_8_APPLE */ /* reuse GL_UNSIGNED_SHORT_8_8_REV_APPLE */ #endif #ifndef GL_NV_video_capture #define GL_VIDEO_BUFFER_NV 0x9020 #define GL_VIDEO_BUFFER_BINDING_NV 0x9021 #define GL_FIELD_UPPER_NV 0x9022 #define GL_FIELD_LOWER_NV 0x9023 #define GL_NUM_VIDEO_CAPTURE_STREAMS_NV 0x9024 #define GL_NEXT_VIDEO_CAPTURE_BUFFER_STATUS_NV 0x9025 #define GL_VIDEO_CAPTURE_TO_422_SUPPORTED_NV 0x9026 #define GL_LAST_VIDEO_CAPTURE_STATUS_NV 0x9027 #define GL_VIDEO_BUFFER_PITCH_NV 0x9028 #define GL_VIDEO_COLOR_CONVERSION_MATRIX_NV 0x9029 #define GL_VIDEO_COLOR_CONVERSION_MAX_NV 0x902A #define GL_VIDEO_COLOR_CONVERSION_MIN_NV 0x902B #define GL_VIDEO_COLOR_CONVERSION_OFFSET_NV 0x902C #define GL_VIDEO_BUFFER_INTERNAL_FORMAT_NV 0x902D #define GL_PARTIAL_SUCCESS_NV 0x902E #define GL_SUCCESS_NV 0x902F #define GL_FAILURE_NV 0x9030 #define GL_YCBYCR8_422_NV 0x9031 #define GL_YCBAYCR8A_4224_NV 0x9032 #define GL_Z6Y10Z6CB10Z6Y10Z6CR10_422_NV 0x9033 #define GL_Z6Y10Z6CB10Z6A10Z6Y10Z6CR10Z6A10_4224_NV 0x9034 #define GL_Z4Y12Z4CB12Z4Y12Z4CR12_422_NV 0x9035 #define GL_Z4Y12Z4CB12Z4A12Z4Y12Z4CR12Z4A12_4224_NV 0x9036 #define GL_Z4Y12Z4CB12Z4CR12_444_NV 0x9037 #define GL_VIDEO_CAPTURE_FRAME_WIDTH_NV 0x9038 #define GL_VIDEO_CAPTURE_FRAME_HEIGHT_NV 0x9039 #define GL_VIDEO_CAPTURE_FIELD_UPPER_HEIGHT_NV 0x903A #define GL_VIDEO_CAPTURE_FIELD_LOWER_HEIGHT_NV 0x903B #define GL_VIDEO_CAPTURE_SURFACE_ORIGIN_NV 0x903C #endif #ifndef GL_NV_copy_image #endif #ifndef GL_EXT_separate_shader_objects #define GL_ACTIVE_PROGRAM_EXT 0x8B8D #endif #ifndef GL_NV_parameter_buffer_object2 #endif #ifndef GL_NV_shader_buffer_load #define GL_BUFFER_GPU_ADDRESS_NV 0x8F1D #define GL_GPU_ADDRESS_NV 0x8F34 #define GL_MAX_SHADER_BUFFER_ADDRESS_NV 0x8F35 #endif #ifndef GL_NV_vertex_buffer_unified_memory #define GL_VERTEX_ATTRIB_ARRAY_UNIFIED_NV 0x8F1E #define GL_ELEMENT_ARRAY_UNIFIED_NV 0x8F1F #define GL_VERTEX_ATTRIB_ARRAY_ADDRESS_NV 0x8F20 #define GL_VERTEX_ARRAY_ADDRESS_NV 0x8F21 #define GL_NORMAL_ARRAY_ADDRESS_NV 0x8F22 #define GL_COLOR_ARRAY_ADDRESS_NV 0x8F23 #define GL_INDEX_ARRAY_ADDRESS_NV 0x8F24 #define GL_TEXTURE_COORD_ARRAY_ADDRESS_NV 0x8F25 #define GL_EDGE_FLAG_ARRAY_ADDRESS_NV 0x8F26 #define GL_SECONDARY_COLOR_ARRAY_ADDRESS_NV 0x8F27 #define GL_FOG_COORD_ARRAY_ADDRESS_NV 0x8F28 #define GL_ELEMENT_ARRAY_ADDRESS_NV 0x8F29 #define GL_VERTEX_ATTRIB_ARRAY_LENGTH_NV 0x8F2A #define GL_VERTEX_ARRAY_LENGTH_NV 0x8F2B #define GL_NORMAL_ARRAY_LENGTH_NV 0x8F2C #define GL_COLOR_ARRAY_LENGTH_NV 0x8F2D #define GL_INDEX_ARRAY_LENGTH_NV 0x8F2E #define GL_TEXTURE_COORD_ARRAY_LENGTH_NV 0x8F2F #define GL_EDGE_FLAG_ARRAY_LENGTH_NV 0x8F30 #define GL_SECONDARY_COLOR_ARRAY_LENGTH_NV 0x8F31 #define GL_FOG_COORD_ARRAY_LENGTH_NV 0x8F32 #define GL_ELEMENT_ARRAY_LENGTH_NV 0x8F33 #define GL_DRAW_INDIRECT_UNIFIED_NV 0x8F40 #define GL_DRAW_INDIRECT_ADDRESS_NV 0x8F41 #define GL_DRAW_INDIRECT_LENGTH_NV 0x8F42 #endif #ifndef GL_NV_texture_barrier #endif #ifndef GL_AMD_shader_stencil_export #endif #ifndef GL_AMD_seamless_cubemap_per_texture /* reuse GL_TEXTURE_CUBE_MAP_SEAMLESS */ #endif #ifndef GL_AMD_conservative_depth #endif #ifndef GL_EXT_shader_image_load_store #define GL_MAX_IMAGE_UNITS_EXT 0x8F38 #define GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS_EXT 0x8F39 #define GL_IMAGE_BINDING_NAME_EXT 0x8F3A #define GL_IMAGE_BINDING_LEVEL_EXT 0x8F3B #define GL_IMAGE_BINDING_LAYERED_EXT 0x8F3C #define GL_IMAGE_BINDING_LAYER_EXT 0x8F3D #define GL_IMAGE_BINDING_ACCESS_EXT 0x8F3E #define GL_IMAGE_1D_EXT 0x904C #define GL_IMAGE_2D_EXT 0x904D #define GL_IMAGE_3D_EXT 0x904E #define GL_IMAGE_2D_RECT_EXT 0x904F #define GL_IMAGE_CUBE_EXT 0x9050 #define GL_IMAGE_BUFFER_EXT 0x9051 #define GL_IMAGE_1D_ARRAY_EXT 0x9052 #define GL_IMAGE_2D_ARRAY_EXT 0x9053 #define GL_IMAGE_CUBE_MAP_ARRAY_EXT 0x9054 #define GL_IMAGE_2D_MULTISAMPLE_EXT 0x9055 #define GL_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x9056 #define GL_INT_IMAGE_1D_EXT 0x9057 #define GL_INT_IMAGE_2D_EXT 0x9058 #define GL_INT_IMAGE_3D_EXT 0x9059 #define GL_INT_IMAGE_2D_RECT_EXT 0x905A #define GL_INT_IMAGE_CUBE_EXT 0x905B #define GL_INT_IMAGE_BUFFER_EXT 0x905C #define GL_INT_IMAGE_1D_ARRAY_EXT 0x905D #define GL_INT_IMAGE_2D_ARRAY_EXT 0x905E #define GL_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x905F #define GL_INT_IMAGE_2D_MULTISAMPLE_EXT 0x9060 #define GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x9061 #define GL_UNSIGNED_INT_IMAGE_1D_EXT 0x9062 #define GL_UNSIGNED_INT_IMAGE_2D_EXT 0x9063 #define GL_UNSIGNED_INT_IMAGE_3D_EXT 0x9064 #define GL_UNSIGNED_INT_IMAGE_2D_RECT_EXT 0x9065 #define GL_UNSIGNED_INT_IMAGE_CUBE_EXT 0x9066 #define GL_UNSIGNED_INT_IMAGE_BUFFER_EXT 0x9067 #define GL_UNSIGNED_INT_IMAGE_1D_ARRAY_EXT 0x9068 #define GL_UNSIGNED_INT_IMAGE_2D_ARRAY_EXT 0x9069 #define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x906A #define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_EXT 0x906B #define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x906C #define GL_MAX_IMAGE_SAMPLES_EXT 0x906D #define GL_IMAGE_BINDING_FORMAT_EXT 0x906E #define GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT_EXT 0x00000001 #define GL_ELEMENT_ARRAY_BARRIER_BIT_EXT 0x00000002 #define GL_UNIFORM_BARRIER_BIT_EXT 0x00000004 #define GL_TEXTURE_FETCH_BARRIER_BIT_EXT 0x00000008 #define GL_SHADER_IMAGE_ACCESS_BARRIER_BIT_EXT 0x00000020 #define GL_COMMAND_BARRIER_BIT_EXT 0x00000040 #define GL_PIXEL_BUFFER_BARRIER_BIT_EXT 0x00000080 #define GL_TEXTURE_UPDATE_BARRIER_BIT_EXT 0x00000100 #define GL_BUFFER_UPDATE_BARRIER_BIT_EXT 0x00000200 #define GL_FRAMEBUFFER_BARRIER_BIT_EXT 0x00000400 #define GL_TRANSFORM_FEEDBACK_BARRIER_BIT_EXT 0x00000800 #define GL_ATOMIC_COUNTER_BARRIER_BIT_EXT 0x00001000 #define GL_ALL_BARRIER_BITS_EXT 0xFFFFFFFF #endif #ifndef GL_EXT_vertex_attrib_64bit /* reuse GL_DOUBLE */ #define GL_DOUBLE_VEC2_EXT 0x8FFC #define GL_DOUBLE_VEC3_EXT 0x8FFD #define GL_DOUBLE_VEC4_EXT 0x8FFE #define GL_DOUBLE_MAT2_EXT 0x8F46 #define GL_DOUBLE_MAT3_EXT 0x8F47 #define GL_DOUBLE_MAT4_EXT 0x8F48 #define GL_DOUBLE_MAT2x3_EXT 0x8F49 #define GL_DOUBLE_MAT2x4_EXT 0x8F4A #define GL_DOUBLE_MAT3x2_EXT 0x8F4B #define GL_DOUBLE_MAT3x4_EXT 0x8F4C #define GL_DOUBLE_MAT4x2_EXT 0x8F4D #define GL_DOUBLE_MAT4x3_EXT 0x8F4E #endif #ifndef GL_NV_gpu_program5 #define GL_MAX_GEOMETRY_PROGRAM_INVOCATIONS_NV 0x8E5A #define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5B #define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5C #define GL_FRAGMENT_PROGRAM_INTERPOLATION_OFFSET_BITS_NV 0x8E5D #define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_NV 0x8E5E #define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_NV 0x8E5F #define GL_MAX_PROGRAM_SUBROUTINE_PARAMETERS_NV 0x8F44 #define GL_MAX_PROGRAM_SUBROUTINE_NUM_NV 0x8F45 #endif #ifndef GL_NV_gpu_shader5 #define GL_INT64_NV 0x140E #define GL_UNSIGNED_INT64_NV 0x140F #define GL_INT8_NV 0x8FE0 #define GL_INT8_VEC2_NV 0x8FE1 #define GL_INT8_VEC3_NV 0x8FE2 #define GL_INT8_VEC4_NV 0x8FE3 #define GL_INT16_NV 0x8FE4 #define GL_INT16_VEC2_NV 0x8FE5 #define GL_INT16_VEC3_NV 0x8FE6 #define GL_INT16_VEC4_NV 0x8FE7 #define GL_INT64_VEC2_NV 0x8FE9 #define GL_INT64_VEC3_NV 0x8FEA #define GL_INT64_VEC4_NV 0x8FEB #define GL_UNSIGNED_INT8_NV 0x8FEC #define GL_UNSIGNED_INT8_VEC2_NV 0x8FED #define GL_UNSIGNED_INT8_VEC3_NV 0x8FEE #define GL_UNSIGNED_INT8_VEC4_NV 0x8FEF #define GL_UNSIGNED_INT16_NV 0x8FF0 #define GL_UNSIGNED_INT16_VEC2_NV 0x8FF1 #define GL_UNSIGNED_INT16_VEC3_NV 0x8FF2 #define GL_UNSIGNED_INT16_VEC4_NV 0x8FF3 #define GL_UNSIGNED_INT64_VEC2_NV 0x8FF5 #define GL_UNSIGNED_INT64_VEC3_NV 0x8FF6 #define GL_UNSIGNED_INT64_VEC4_NV 0x8FF7 #define GL_FLOAT16_NV 0x8FF8 #define GL_FLOAT16_VEC2_NV 0x8FF9 #define GL_FLOAT16_VEC3_NV 0x8FFA #define GL_FLOAT16_VEC4_NV 0x8FFB /* reuse GL_PATCHES */ #endif #ifndef GL_NV_shader_buffer_store #define GL_SHADER_GLOBAL_ACCESS_BARRIER_BIT_NV 0x00000010 /* reuse GL_READ_WRITE */ /* reuse GL_WRITE_ONLY */ #endif #ifndef GL_NV_tessellation_program5 #define GL_MAX_PROGRAM_PATCH_ATTRIBS_NV 0x86D8 #define GL_TESS_CONTROL_PROGRAM_NV 0x891E #define GL_TESS_EVALUATION_PROGRAM_NV 0x891F #define GL_TESS_CONTROL_PROGRAM_PARAMETER_BUFFER_NV 0x8C74 #define GL_TESS_EVALUATION_PROGRAM_PARAMETER_BUFFER_NV 0x8C75 #endif #ifndef GL_NV_vertex_attrib_integer_64bit /* reuse GL_INT64_NV */ /* reuse GL_UNSIGNED_INT64_NV */ #endif #ifndef GL_NV_multisample_coverage #define GL_COLOR_SAMPLES_NV 0x8E20 /* reuse GL_SAMPLES_ARB */ #endif #ifndef GL_AMD_name_gen_delete #define GL_DATA_BUFFER_AMD 0x9151 #define GL_PERFORMANCE_MONITOR_AMD 0x9152 #define GL_QUERY_OBJECT_AMD 0x9153 #define GL_VERTEX_ARRAY_OBJECT_AMD 0x9154 #define GL_SAMPLER_OBJECT_AMD 0x9155 #endif #ifndef GL_AMD_debug_output #define GL_MAX_DEBUG_MESSAGE_LENGTH_AMD 0x9143 #define GL_MAX_DEBUG_LOGGED_MESSAGES_AMD 0x9144 #define GL_DEBUG_LOGGED_MESSAGES_AMD 0x9145 #define GL_DEBUG_SEVERITY_HIGH_AMD 0x9146 #define GL_DEBUG_SEVERITY_MEDIUM_AMD 0x9147 #define GL_DEBUG_SEVERITY_LOW_AMD 0x9148 #define GL_DEBUG_CATEGORY_API_ERROR_AMD 0x9149 #define GL_DEBUG_CATEGORY_WINDOW_SYSTEM_AMD 0x914A #define GL_DEBUG_CATEGORY_DEPRECATION_AMD 0x914B #define GL_DEBUG_CATEGORY_UNDEFINED_BEHAVIOR_AMD 0x914C #define GL_DEBUG_CATEGORY_PERFORMANCE_AMD 0x914D #define GL_DEBUG_CATEGORY_SHADER_COMPILER_AMD 0x914E #define GL_DEBUG_CATEGORY_APPLICATION_AMD 0x914F #define GL_DEBUG_CATEGORY_OTHER_AMD 0x9150 #endif #ifndef GL_NV_vdpau_interop #define GL_SURFACE_STATE_NV 0x86EB #define GL_SURFACE_REGISTERED_NV 0x86FD #define GL_SURFACE_MAPPED_NV 0x8700 #define GL_WRITE_DISCARD_NV 0x88BE #endif #ifndef GL_AMD_transform_feedback3_lines_triangles #endif #ifndef GL_AMD_depth_clamp_separate #define GL_DEPTH_CLAMP_NEAR_AMD 0x901E #define GL_DEPTH_CLAMP_FAR_AMD 0x901F #endif #ifndef GL_EXT_texture_sRGB_decode #define GL_TEXTURE_SRGB_DECODE_EXT 0x8A48 #define GL_DECODE_EXT 0x8A49 #define GL_SKIP_DECODE_EXT 0x8A4A #endif #ifndef GL_NV_texture_multisample #define GL_TEXTURE_COVERAGE_SAMPLES_NV 0x9045 #define GL_TEXTURE_COLOR_SAMPLES_NV 0x9046 #endif #ifndef GL_AMD_blend_minmax_factor #define GL_FACTOR_MIN_AMD 0x901C #define GL_FACTOR_MAX_AMD 0x901D #endif #ifndef GL_AMD_sample_positions #define GL_SUBSAMPLE_DISTANCE_AMD 0x883F #endif #ifndef GL_EXT_x11_sync_object #define GL_SYNC_X11_FENCE_EXT 0x90E1 #endif #ifndef GL_AMD_multi_draw_indirect #endif #ifndef GL_EXT_framebuffer_multisample_blit_scaled #define GL_SCALED_RESOLVE_FASTEST_EXT 0x90BA #define GL_SCALED_RESOLVE_NICEST_EXT 0x90BB #endif #ifndef GL_NV_path_rendering #define GL_PATH_FORMAT_SVG_NV 0x9070 #define GL_PATH_FORMAT_PS_NV 0x9071 #define GL_STANDARD_FONT_NAME_NV 0x9072 #define GL_SYSTEM_FONT_NAME_NV 0x9073 #define GL_FILE_NAME_NV 0x9074 #define GL_PATH_STROKE_WIDTH_NV 0x9075 #define GL_PATH_END_CAPS_NV 0x9076 #define GL_PATH_INITIAL_END_CAP_NV 0x9077 #define GL_PATH_TERMINAL_END_CAP_NV 0x9078 #define GL_PATH_JOIN_STYLE_NV 0x9079 #define GL_PATH_MITER_LIMIT_NV 0x907A #define GL_PATH_DASH_CAPS_NV 0x907B #define GL_PATH_INITIAL_DASH_CAP_NV 0x907C #define GL_PATH_TERMINAL_DASH_CAP_NV 0x907D #define GL_PATH_DASH_OFFSET_NV 0x907E #define GL_PATH_CLIENT_LENGTH_NV 0x907F #define GL_PATH_FILL_MODE_NV 0x9080 #define GL_PATH_FILL_MASK_NV 0x9081 #define GL_PATH_FILL_COVER_MODE_NV 0x9082 #define GL_PATH_STROKE_COVER_MODE_NV 0x9083 #define GL_PATH_STROKE_MASK_NV 0x9084 #define GL_COUNT_UP_NV 0x9088 #define GL_COUNT_DOWN_NV 0x9089 #define GL_PATH_OBJECT_BOUNDING_BOX_NV 0x908A #define GL_CONVEX_HULL_NV 0x908B #define GL_BOUNDING_BOX_NV 0x908D #define GL_TRANSLATE_X_NV 0x908E #define GL_TRANSLATE_Y_NV 0x908F #define GL_TRANSLATE_2D_NV 0x9090 #define GL_TRANSLATE_3D_NV 0x9091 #define GL_AFFINE_2D_NV 0x9092 #define GL_AFFINE_3D_NV 0x9094 #define GL_TRANSPOSE_AFFINE_2D_NV 0x9096 #define GL_TRANSPOSE_AFFINE_3D_NV 0x9098 #define GL_UTF8_NV 0x909A #define GL_UTF16_NV 0x909B #define GL_BOUNDING_BOX_OF_BOUNDING_BOXES_NV 0x909C #define GL_PATH_COMMAND_COUNT_NV 0x909D #define GL_PATH_COORD_COUNT_NV 0x909E #define GL_PATH_DASH_ARRAY_COUNT_NV 0x909F #define GL_PATH_COMPUTED_LENGTH_NV 0x90A0 #define GL_PATH_FILL_BOUNDING_BOX_NV 0x90A1 #define GL_PATH_STROKE_BOUNDING_BOX_NV 0x90A2 #define GL_SQUARE_NV 0x90A3 #define GL_ROUND_NV 0x90A4 #define GL_TRIANGULAR_NV 0x90A5 #define GL_BEVEL_NV 0x90A6 #define GL_MITER_REVERT_NV 0x90A7 #define GL_MITER_TRUNCATE_NV 0x90A8 #define GL_SKIP_MISSING_GLYPH_NV 0x90A9 #define GL_USE_MISSING_GLYPH_NV 0x90AA #define GL_PATH_ERROR_POSITION_NV 0x90AB #define GL_PATH_FOG_GEN_MODE_NV 0x90AC #define GL_ACCUM_ADJACENT_PAIRS_NV 0x90AD #define GL_ADJACENT_PAIRS_NV 0x90AE #define GL_FIRST_TO_REST_NV 0x90AF #define GL_PATH_GEN_MODE_NV 0x90B0 #define GL_PATH_GEN_COEFF_NV 0x90B1 #define GL_PATH_GEN_COLOR_FORMAT_NV 0x90B2 #define GL_PATH_GEN_COMPONENTS_NV 0x90B3 #define GL_PATH_STENCIL_FUNC_NV 0x90B7 #define GL_PATH_STENCIL_REF_NV 0x90B8 #define GL_PATH_STENCIL_VALUE_MASK_NV 0x90B9 #define GL_PATH_STENCIL_DEPTH_OFFSET_FACTOR_NV 0x90BD #define GL_PATH_STENCIL_DEPTH_OFFSET_UNITS_NV 0x90BE #define GL_PATH_COVER_DEPTH_FUNC_NV 0x90BF #define GL_PATH_DASH_OFFSET_RESET_NV 0x90B4 #define GL_MOVE_TO_RESETS_NV 0x90B5 #define GL_MOVE_TO_CONTINUES_NV 0x90B6 #define GL_CLOSE_PATH_NV 0x00 #define GL_MOVE_TO_NV 0x02 #define GL_RELATIVE_MOVE_TO_NV 0x03 #define GL_LINE_TO_NV 0x04 #define GL_RELATIVE_LINE_TO_NV 0x05 #define GL_HORIZONTAL_LINE_TO_NV 0x06 #define GL_RELATIVE_HORIZONTAL_LINE_TO_NV 0x07 #define GL_VERTICAL_LINE_TO_NV 0x08 #define GL_RELATIVE_VERTICAL_LINE_TO_NV 0x09 #define GL_QUADRATIC_CURVE_TO_NV 0x0A #define GL_RELATIVE_QUADRATIC_CURVE_TO_NV 0x0B #define GL_CUBIC_CURVE_TO_NV 0x0C #define GL_RELATIVE_CUBIC_CURVE_TO_NV 0x0D #define GL_SMOOTH_QUADRATIC_CURVE_TO_NV 0x0E #define GL_RELATIVE_SMOOTH_QUADRATIC_CURVE_TO_NV 0x0F #define GL_SMOOTH_CUBIC_CURVE_TO_NV 0x10 #define GL_RELATIVE_SMOOTH_CUBIC_CURVE_TO_NV 0x11 #define GL_SMALL_CCW_ARC_TO_NV 0x12 #define GL_RELATIVE_SMALL_CCW_ARC_TO_NV 0x13 #define GL_SMALL_CW_ARC_TO_NV 0x14 #define GL_RELATIVE_SMALL_CW_ARC_TO_NV 0x15 #define GL_LARGE_CCW_ARC_TO_NV 0x16 #define GL_RELATIVE_LARGE_CCW_ARC_TO_NV 0x17 #define GL_LARGE_CW_ARC_TO_NV 0x18 #define GL_RELATIVE_LARGE_CW_ARC_TO_NV 0x19 #define GL_RESTART_PATH_NV 0xF0 #define GL_DUP_FIRST_CUBIC_CURVE_TO_NV 0xF2 #define GL_DUP_LAST_CUBIC_CURVE_TO_NV 0xF4 #define GL_RECT_NV 0xF6 #define GL_CIRCULAR_CCW_ARC_TO_NV 0xF8 #define GL_CIRCULAR_CW_ARC_TO_NV 0xFA #define GL_CIRCULAR_TANGENT_ARC_TO_NV 0xFC #define GL_ARC_TO_NV 0xFE #define GL_RELATIVE_ARC_TO_NV 0xFF #define GL_BOLD_BIT_NV 0x01 #define GL_ITALIC_BIT_NV 0x02 #define GL_GLYPH_WIDTH_BIT_NV 0x01 #define GL_GLYPH_HEIGHT_BIT_NV 0x02 #define GL_GLYPH_HORIZONTAL_BEARING_X_BIT_NV 0x04 #define GL_GLYPH_HORIZONTAL_BEARING_Y_BIT_NV 0x08 #define GL_GLYPH_HORIZONTAL_BEARING_ADVANCE_BIT_NV 0x10 #define GL_GLYPH_VERTICAL_BEARING_X_BIT_NV 0x20 #define GL_GLYPH_VERTICAL_BEARING_Y_BIT_NV 0x40 #define GL_GLYPH_VERTICAL_BEARING_ADVANCE_BIT_NV 0x80 #define GL_GLYPH_HAS_KERNING_BIT_NV 0x100 #define GL_FONT_X_MIN_BOUNDS_BIT_NV 0x00010000 #define GL_FONT_Y_MIN_BOUNDS_BIT_NV 0x00020000 #define GL_FONT_X_MAX_BOUNDS_BIT_NV 0x00040000 #define GL_FONT_Y_MAX_BOUNDS_BIT_NV 0x00080000 #define GL_FONT_UNITS_PER_EM_BIT_NV 0x00100000 #define GL_FONT_ASCENDER_BIT_NV 0x00200000 #define GL_FONT_DESCENDER_BIT_NV 0x00400000 #define GL_FONT_HEIGHT_BIT_NV 0x00800000 #define GL_FONT_MAX_ADVANCE_WIDTH_BIT_NV 0x01000000 #define GL_FONT_MAX_ADVANCE_HEIGHT_BIT_NV 0x02000000 #define GL_FONT_UNDERLINE_POSITION_BIT_NV 0x04000000 #define GL_FONT_UNDERLINE_THICKNESS_BIT_NV 0x08000000 #define GL_FONT_HAS_KERNING_BIT_NV 0x10000000 /* reuse GL_PRIMARY_COLOR */ /* reuse GL_PRIMARY_COLOR_NV */ /* reuse GL_SECONDARY_COLOR_NV */ #endif #ifndef GL_AMD_pinned_memory #define GL_EXTERNAL_VIRTUAL_MEMORY_BUFFER_AMD 0x9160 #endif #ifndef GL_AMD_stencil_operation_extended #define GL_SET_AMD 0x874A #define GL_REPLACE_VALUE_AMD 0x874B #define GL_STENCIL_OP_VALUE_AMD 0x874C #define GL_STENCIL_BACK_OP_VALUE_AMD 0x874D #endif #ifndef GL_AMD_vertex_shader_viewport_index #endif #ifndef GL_AMD_vertex_shader_layer #endif #ifndef GL_NV_bindless_texture #endif #ifndef GL_NV_shader_atomic_float #endif #ifndef GL_AMD_query_buffer_object #define GL_QUERY_BUFFER_AMD 0x9192 #define GL_QUERY_BUFFER_BINDING_AMD 0x9193 #define GL_QUERY_RESULT_NO_WAIT_AMD 0x9194 #endif #ifndef GL_NV_compute_program5 #define GL_COMPUTE_PROGRAM_NV 0x90FB #define GL_COMPUTE_PROGRAM_PARAMETER_BUFFER_NV 0x90FC #endif #ifndef GL_NV_shader_storage_buffer_object #endif #ifndef GL_NV_shader_atomic_counters #endif #ifndef GL_NV_deep_texture3D #define GL_MAX_DEEP_3D_TEXTURE_WIDTH_HEIGHT_NV 0x90D0 #define GL_MAX_DEEP_3D_TEXTURE_DEPTH_NV 0x90D1 #endif #ifndef GL_NVX_conditional_render #endif #ifndef GL_AMD_sparse_texture #define GL_VIRTUAL_PAGE_SIZE_X_AMD 0x9195 #define GL_VIRTUAL_PAGE_SIZE_Y_AMD 0x9196 #define GL_VIRTUAL_PAGE_SIZE_Z_AMD 0x9197 #define GL_MAX_SPARSE_TEXTURE_SIZE_AMD 0x9198 #define GL_MAX_SPARSE_3D_TEXTURE_SIZE_AMD 0x9199 #define GL_MAX_SPARSE_ARRAY_TEXTURE_LAYERS 0x919A #define GL_MIN_SPARSE_LEVEL_AMD 0x919B #define GL_MIN_LOD_WARNING_AMD 0x919C #define GL_TEXTURE_STORAGE_SPARSE_BIT_AMD 0x00000001 #endif #ifndef GL_AMD_shader_trinary_minmax #endif #ifndef GL_INTEL_map_texture #define GL_TEXTURE_MEMORY_LAYOUT_INTEL 0x83FF #define GL_LAYOUT_DEFAULT_INTEL 0 #define GL_LAYOUT_LINEAR_INTEL 1 #define GL_LAYOUT_LINEAR_CPU_CACHED_INTEL 2 #endif #ifndef GL_NV_draw_texture #endif /*************************************************************/ #include #ifndef GL_VERSION_2_0 /* GL type for program/shader text */ typedef char GLchar; #endif #ifndef GL_VERSION_1_5 /* GL types for handling large vertex buffer objects */ typedef ptrdiff_t GLintptr; typedef ptrdiff_t GLsizeiptr; #endif #ifndef GL_ARB_vertex_buffer_object /* GL types for handling large vertex buffer objects */ typedef ptrdiff_t GLintptrARB; typedef ptrdiff_t GLsizeiptrARB; #endif #ifndef GL_ARB_shader_objects /* GL types for program/shader text and shader object handles */ typedef char GLcharARB; typedef unsigned int GLhandleARB; #endif /* GL type for "half" precision (s10e5) float data in host memory */ #ifndef GL_ARB_half_float_pixel typedef unsigned short GLhalfARB; #endif #ifndef GL_NV_half_float typedef unsigned short GLhalfNV; #endif #ifndef GLEXT_64_TYPES_DEFINED /* This code block is duplicated in glxext.h, so must be protected */ #define GLEXT_64_TYPES_DEFINED /* Define int32_t, int64_t, and uint64_t types for UST/MSC */ /* (as used in the GL_EXT_timer_query extension). */ #if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L #include #elif defined(__sun__) || defined(__digital__) #include #if defined(__STDC__) #if defined(__arch64__) || defined(_LP64) typedef long int int64_t; typedef unsigned long int uint64_t; #else typedef long long int int64_t; typedef unsigned long long int uint64_t; #endif /* __arch64__ */ #endif /* __STDC__ */ #elif defined( __VMS ) || defined(__sgi) #include #elif defined(__SCO__) || defined(__USLC__) #include #elif defined(__UNIXOS2__) || defined(__SOL64__) typedef long int int32_t; typedef long long int int64_t; typedef unsigned long long int uint64_t; #elif defined(_WIN32) && defined(__GNUC__) #include #elif defined(_WIN32) typedef __int32 int32_t; typedef __int64 int64_t; typedef unsigned __int64 uint64_t; #else /* Fallback if nothing above works */ #include #endif #endif #ifndef GL_EXT_timer_query typedef int64_t GLint64EXT; typedef uint64_t GLuint64EXT; #endif #ifndef GL_ARB_sync typedef int64_t GLint64; typedef uint64_t GLuint64; typedef struct __GLsync *GLsync; #endif #ifndef GL_ARB_cl_event /* These incomplete types let us declare types compatible with OpenCL's cl_context and cl_event */ struct _cl_context; struct _cl_event; #endif #ifndef GL_ARB_debug_output typedef void (APIENTRY *GLDEBUGPROCARB)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,GLvoid *userParam); #endif #ifndef GL_AMD_debug_output typedef void (APIENTRY *GLDEBUGPROCAMD)(GLuint id,GLenum category,GLenum severity,GLsizei length,const GLchar *message,GLvoid *userParam); #endif #ifndef GL_KHR_debug typedef void (APIENTRY *GLDEBUGPROC)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,GLvoid *userParam); #endif #ifndef GL_NV_vdpau_interop typedef GLintptr GLvdpauSurfaceNV; #endif #ifndef GL_OES_fixed_point /* GLint must be 32 bits, a relatively safe assumption on modern CPUs */ typedef GLint GLfixed; #endif #ifndef GL_VERSION_1_2 #define GL_VERSION_1_2 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBlendColor (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); GLAPI void APIENTRY glBlendEquation (GLenum mode); GLAPI void APIENTRY glDrawRangeElements (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices); GLAPI void APIENTRY glTexImage3D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); GLAPI void APIENTRY glTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); GLAPI void APIENTRY glCopyTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); GLAPI void APIENTRY glColorTable (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table); GLAPI void APIENTRY glColorTableParameterfv (GLenum target, GLenum pname, const GLfloat *params); GLAPI void APIENTRY glColorTableParameteriv (GLenum target, GLenum pname, const GLint *params); GLAPI void APIENTRY glCopyColorTable (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); GLAPI void APIENTRY glGetColorTable (GLenum target, GLenum format, GLenum type, GLvoid *table); GLAPI void APIENTRY glGetColorTableParameterfv (GLenum target, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetColorTableParameteriv (GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glColorSubTable (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data); GLAPI void APIENTRY glCopyColorSubTable (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); GLAPI void APIENTRY glConvolutionFilter1D (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image); GLAPI void APIENTRY glConvolutionFilter2D (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image); GLAPI void APIENTRY glConvolutionParameterf (GLenum target, GLenum pname, GLfloat params); GLAPI void APIENTRY glConvolutionParameterfv (GLenum target, GLenum pname, const GLfloat *params); GLAPI void APIENTRY glConvolutionParameteri (GLenum target, GLenum pname, GLint params); GLAPI void APIENTRY glConvolutionParameteriv (GLenum target, GLenum pname, const GLint *params); GLAPI void APIENTRY glCopyConvolutionFilter1D (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); GLAPI void APIENTRY glCopyConvolutionFilter2D (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); GLAPI void APIENTRY glGetConvolutionFilter (GLenum target, GLenum format, GLenum type, GLvoid *image); GLAPI void APIENTRY glGetConvolutionParameterfv (GLenum target, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetConvolutionParameteriv (GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetSeparableFilter (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span); GLAPI void APIENTRY glSeparableFilter2D (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column); GLAPI void APIENTRY glGetHistogram (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); GLAPI void APIENTRY glGetHistogramParameterfv (GLenum target, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetHistogramParameteriv (GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetMinmax (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); GLAPI void APIENTRY glGetMinmaxParameterfv (GLenum target, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetMinmaxParameteriv (GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glHistogram (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); GLAPI void APIENTRY glMinmax (GLenum target, GLenum internalformat, GLboolean sink); GLAPI void APIENTRY glResetHistogram (GLenum target); GLAPI void APIENTRY glResetMinmax (GLenum target); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLBLENDCOLORPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); typedef void (APIENTRYP PFNGLBLENDEQUATIONPROC) (GLenum mode); typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices); typedef void (APIENTRYP PFNGLTEXIMAGE3DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table); typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params); typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLCOPYCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); typedef void (APIENTRYP PFNGLGETCOLORTABLEPROC) (GLenum target, GLenum format, GLenum type, GLvoid *table); typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data); typedef void (APIENTRYP PFNGLCOPYCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image); typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image); typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFPROC) (GLenum target, GLenum pname, GLfloat params); typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params); typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIPROC) (GLenum target, GLenum pname, GLint params); typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLGETCONVOLUTIONFILTERPROC) (GLenum target, GLenum format, GLenum type, GLvoid *image); typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETSEPARABLEFILTERPROC) (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span); typedef void (APIENTRYP PFNGLSEPARABLEFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column); typedef void (APIENTRYP PFNGLGETHISTOGRAMPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETMINMAXPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLHISTOGRAMPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); typedef void (APIENTRYP PFNGLMINMAXPROC) (GLenum target, GLenum internalformat, GLboolean sink); typedef void (APIENTRYP PFNGLRESETHISTOGRAMPROC) (GLenum target); typedef void (APIENTRYP PFNGLRESETMINMAXPROC) (GLenum target); #endif #ifndef GL_VERSION_1_3 #define GL_VERSION_1_3 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glActiveTexture (GLenum texture); GLAPI void APIENTRY glSampleCoverage (GLfloat value, GLboolean invert); GLAPI void APIENTRY glCompressedTexImage3D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data); GLAPI void APIENTRY glCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); GLAPI void APIENTRY glCompressedTexImage1D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data); GLAPI void APIENTRY glCompressedTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data); GLAPI void APIENTRY glCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data); GLAPI void APIENTRY glCompressedTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data); GLAPI void APIENTRY glGetCompressedTexImage (GLenum target, GLint level, GLvoid *img); GLAPI void APIENTRY glClientActiveTexture (GLenum texture); GLAPI void APIENTRY glMultiTexCoord1d (GLenum target, GLdouble s); GLAPI void APIENTRY glMultiTexCoord1dv (GLenum target, const GLdouble *v); GLAPI void APIENTRY glMultiTexCoord1f (GLenum target, GLfloat s); GLAPI void APIENTRY glMultiTexCoord1fv (GLenum target, const GLfloat *v); GLAPI void APIENTRY glMultiTexCoord1i (GLenum target, GLint s); GLAPI void APIENTRY glMultiTexCoord1iv (GLenum target, const GLint *v); GLAPI void APIENTRY glMultiTexCoord1s (GLenum target, GLshort s); GLAPI void APIENTRY glMultiTexCoord1sv (GLenum target, const GLshort *v); GLAPI void APIENTRY glMultiTexCoord2d (GLenum target, GLdouble s, GLdouble t); GLAPI void APIENTRY glMultiTexCoord2dv (GLenum target, const GLdouble *v); GLAPI void APIENTRY glMultiTexCoord2f (GLenum target, GLfloat s, GLfloat t); GLAPI void APIENTRY glMultiTexCoord2fv (GLenum target, const GLfloat *v); GLAPI void APIENTRY glMultiTexCoord2i (GLenum target, GLint s, GLint t); GLAPI void APIENTRY glMultiTexCoord2iv (GLenum target, const GLint *v); GLAPI void APIENTRY glMultiTexCoord2s (GLenum target, GLshort s, GLshort t); GLAPI void APIENTRY glMultiTexCoord2sv (GLenum target, const GLshort *v); GLAPI void APIENTRY glMultiTexCoord3d (GLenum target, GLdouble s, GLdouble t, GLdouble r); GLAPI void APIENTRY glMultiTexCoord3dv (GLenum target, const GLdouble *v); GLAPI void APIENTRY glMultiTexCoord3f (GLenum target, GLfloat s, GLfloat t, GLfloat r); GLAPI void APIENTRY glMultiTexCoord3fv (GLenum target, const GLfloat *v); GLAPI void APIENTRY glMultiTexCoord3i (GLenum target, GLint s, GLint t, GLint r); GLAPI void APIENTRY glMultiTexCoord3iv (GLenum target, const GLint *v); GLAPI void APIENTRY glMultiTexCoord3s (GLenum target, GLshort s, GLshort t, GLshort r); GLAPI void APIENTRY glMultiTexCoord3sv (GLenum target, const GLshort *v); GLAPI void APIENTRY glMultiTexCoord4d (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); GLAPI void APIENTRY glMultiTexCoord4dv (GLenum target, const GLdouble *v); GLAPI void APIENTRY glMultiTexCoord4f (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); GLAPI void APIENTRY glMultiTexCoord4fv (GLenum target, const GLfloat *v); GLAPI void APIENTRY glMultiTexCoord4i (GLenum target, GLint s, GLint t, GLint r, GLint q); GLAPI void APIENTRY glMultiTexCoord4iv (GLenum target, const GLint *v); GLAPI void APIENTRY glMultiTexCoord4s (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); GLAPI void APIENTRY glMultiTexCoord4sv (GLenum target, const GLshort *v); GLAPI void APIENTRY glLoadTransposeMatrixf (const GLfloat *m); GLAPI void APIENTRY glLoadTransposeMatrixd (const GLdouble *m); GLAPI void APIENTRY glMultTransposeMatrixf (const GLfloat *m); GLAPI void APIENTRY glMultTransposeMatrixd (const GLdouble *m); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLACTIVETEXTUREPROC) (GLenum texture); typedef void (APIENTRYP PFNGLSAMPLECOVERAGEPROC) (GLfloat value, GLboolean invert); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data); typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEPROC) (GLenum target, GLint level, GLvoid *img); typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREPROC) (GLenum texture); typedef void (APIENTRYP PFNGLMULTITEXCOORD1DPROC) (GLenum target, GLdouble s); typedef void (APIENTRYP PFNGLMULTITEXCOORD1DVPROC) (GLenum target, const GLdouble *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD1FPROC) (GLenum target, GLfloat s); typedef void (APIENTRYP PFNGLMULTITEXCOORD1FVPROC) (GLenum target, const GLfloat *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD1IPROC) (GLenum target, GLint s); typedef void (APIENTRYP PFNGLMULTITEXCOORD1IVPROC) (GLenum target, const GLint *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD1SPROC) (GLenum target, GLshort s); typedef void (APIENTRYP PFNGLMULTITEXCOORD1SVPROC) (GLenum target, const GLshort *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD2DPROC) (GLenum target, GLdouble s, GLdouble t); typedef void (APIENTRYP PFNGLMULTITEXCOORD2DVPROC) (GLenum target, const GLdouble *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD2FPROC) (GLenum target, GLfloat s, GLfloat t); typedef void (APIENTRYP PFNGLMULTITEXCOORD2FVPROC) (GLenum target, const GLfloat *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD2IPROC) (GLenum target, GLint s, GLint t); typedef void (APIENTRYP PFNGLMULTITEXCOORD2IVPROC) (GLenum target, const GLint *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD2SPROC) (GLenum target, GLshort s, GLshort t); typedef void (APIENTRYP PFNGLMULTITEXCOORD2SVPROC) (GLenum target, const GLshort *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD3DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r); typedef void (APIENTRYP PFNGLMULTITEXCOORD3DVPROC) (GLenum target, const GLdouble *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD3FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r); typedef void (APIENTRYP PFNGLMULTITEXCOORD3FVPROC) (GLenum target, const GLfloat *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD3IPROC) (GLenum target, GLint s, GLint t, GLint r); typedef void (APIENTRYP PFNGLMULTITEXCOORD3IVPROC) (GLenum target, const GLint *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD3SPROC) (GLenum target, GLshort s, GLshort t, GLshort r); typedef void (APIENTRYP PFNGLMULTITEXCOORD3SVPROC) (GLenum target, const GLshort *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD4DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); typedef void (APIENTRYP PFNGLMULTITEXCOORD4DVPROC) (GLenum target, const GLdouble *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD4FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); typedef void (APIENTRYP PFNGLMULTITEXCOORD4FVPROC) (GLenum target, const GLfloat *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD4IPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q); typedef void (APIENTRYP PFNGLMULTITEXCOORD4IVPROC) (GLenum target, const GLint *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD4SPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); typedef void (APIENTRYP PFNGLMULTITEXCOORD4SVPROC) (GLenum target, const GLshort *v); typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXFPROC) (const GLfloat *m); typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXDPROC) (const GLdouble *m); typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXFPROC) (const GLfloat *m); typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXDPROC) (const GLdouble *m); #endif #ifndef GL_VERSION_1_4 #define GL_VERSION_1_4 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBlendFuncSeparate (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); GLAPI void APIENTRY glMultiDrawArrays (GLenum mode, const GLint *first, const GLsizei *count, GLsizei drawcount); GLAPI void APIENTRY glMultiDrawElements (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* const *indices, GLsizei drawcount); GLAPI void APIENTRY glPointParameterf (GLenum pname, GLfloat param); GLAPI void APIENTRY glPointParameterfv (GLenum pname, const GLfloat *params); GLAPI void APIENTRY glPointParameteri (GLenum pname, GLint param); GLAPI void APIENTRY glPointParameteriv (GLenum pname, const GLint *params); GLAPI void APIENTRY glFogCoordf (GLfloat coord); GLAPI void APIENTRY glFogCoordfv (const GLfloat *coord); GLAPI void APIENTRY glFogCoordd (GLdouble coord); GLAPI void APIENTRY glFogCoorddv (const GLdouble *coord); GLAPI void APIENTRY glFogCoordPointer (GLenum type, GLsizei stride, const GLvoid *pointer); GLAPI void APIENTRY glSecondaryColor3b (GLbyte red, GLbyte green, GLbyte blue); GLAPI void APIENTRY glSecondaryColor3bv (const GLbyte *v); GLAPI void APIENTRY glSecondaryColor3d (GLdouble red, GLdouble green, GLdouble blue); GLAPI void APIENTRY glSecondaryColor3dv (const GLdouble *v); GLAPI void APIENTRY glSecondaryColor3f (GLfloat red, GLfloat green, GLfloat blue); GLAPI void APIENTRY glSecondaryColor3fv (const GLfloat *v); GLAPI void APIENTRY glSecondaryColor3i (GLint red, GLint green, GLint blue); GLAPI void APIENTRY glSecondaryColor3iv (const GLint *v); GLAPI void APIENTRY glSecondaryColor3s (GLshort red, GLshort green, GLshort blue); GLAPI void APIENTRY glSecondaryColor3sv (const GLshort *v); GLAPI void APIENTRY glSecondaryColor3ub (GLubyte red, GLubyte green, GLubyte blue); GLAPI void APIENTRY glSecondaryColor3ubv (const GLubyte *v); GLAPI void APIENTRY glSecondaryColor3ui (GLuint red, GLuint green, GLuint blue); GLAPI void APIENTRY glSecondaryColor3uiv (const GLuint *v); GLAPI void APIENTRY glSecondaryColor3us (GLushort red, GLushort green, GLushort blue); GLAPI void APIENTRY glSecondaryColor3usv (const GLushort *v); GLAPI void APIENTRY glSecondaryColorPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); GLAPI void APIENTRY glWindowPos2d (GLdouble x, GLdouble y); GLAPI void APIENTRY glWindowPos2dv (const GLdouble *v); GLAPI void APIENTRY glWindowPos2f (GLfloat x, GLfloat y); GLAPI void APIENTRY glWindowPos2fv (const GLfloat *v); GLAPI void APIENTRY glWindowPos2i (GLint x, GLint y); GLAPI void APIENTRY glWindowPos2iv (const GLint *v); GLAPI void APIENTRY glWindowPos2s (GLshort x, GLshort y); GLAPI void APIENTRY glWindowPos2sv (const GLshort *v); GLAPI void APIENTRY glWindowPos3d (GLdouble x, GLdouble y, GLdouble z); GLAPI void APIENTRY glWindowPos3dv (const GLdouble *v); GLAPI void APIENTRY glWindowPos3f (GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glWindowPos3fv (const GLfloat *v); GLAPI void APIENTRY glWindowPos3i (GLint x, GLint y, GLint z); GLAPI void APIENTRY glWindowPos3iv (const GLint *v); GLAPI void APIENTRY glWindowPos3s (GLshort x, GLshort y, GLshort z); GLAPI void APIENTRY glWindowPos3sv (const GLshort *v); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei drawcount); typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSPROC) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* const *indices, GLsizei drawcount); typedef void (APIENTRYP PFNGLPOINTPARAMETERFPROC) (GLenum pname, GLfloat param); typedef void (APIENTRYP PFNGLPOINTPARAMETERFVPROC) (GLenum pname, const GLfloat *params); typedef void (APIENTRYP PFNGLPOINTPARAMETERIPROC) (GLenum pname, GLint param); typedef void (APIENTRYP PFNGLPOINTPARAMETERIVPROC) (GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLFOGCOORDFPROC) (GLfloat coord); typedef void (APIENTRYP PFNGLFOGCOORDFVPROC) (const GLfloat *coord); typedef void (APIENTRYP PFNGLFOGCOORDDPROC) (GLdouble coord); typedef void (APIENTRYP PFNGLFOGCOORDDVPROC) (const GLdouble *coord); typedef void (APIENTRYP PFNGLFOGCOORDPOINTERPROC) (GLenum type, GLsizei stride, const GLvoid *pointer); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BPROC) (GLbyte red, GLbyte green, GLbyte blue); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BVPROC) (const GLbyte *v); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DPROC) (GLdouble red, GLdouble green, GLdouble blue); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DVPROC) (const GLdouble *v); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FPROC) (GLfloat red, GLfloat green, GLfloat blue); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FVPROC) (const GLfloat *v); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IPROC) (GLint red, GLint green, GLint blue); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IVPROC) (const GLint *v); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SPROC) (GLshort red, GLshort green, GLshort blue); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SVPROC) (const GLshort *v); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBPROC) (GLubyte red, GLubyte green, GLubyte blue); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBVPROC) (const GLubyte *v); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIPROC) (GLuint red, GLuint green, GLuint blue); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIVPROC) (const GLuint *v); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USPROC) (GLushort red, GLushort green, GLushort blue); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USVPROC) (const GLushort *v); typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTERPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); typedef void (APIENTRYP PFNGLWINDOWPOS2DPROC) (GLdouble x, GLdouble y); typedef void (APIENTRYP PFNGLWINDOWPOS2DVPROC) (const GLdouble *v); typedef void (APIENTRYP PFNGLWINDOWPOS2FPROC) (GLfloat x, GLfloat y); typedef void (APIENTRYP PFNGLWINDOWPOS2FVPROC) (const GLfloat *v); typedef void (APIENTRYP PFNGLWINDOWPOS2IPROC) (GLint x, GLint y); typedef void (APIENTRYP PFNGLWINDOWPOS2IVPROC) (const GLint *v); typedef void (APIENTRYP PFNGLWINDOWPOS2SPROC) (GLshort x, GLshort y); typedef void (APIENTRYP PFNGLWINDOWPOS2SVPROC) (const GLshort *v); typedef void (APIENTRYP PFNGLWINDOWPOS3DPROC) (GLdouble x, GLdouble y, GLdouble z); typedef void (APIENTRYP PFNGLWINDOWPOS3DVPROC) (const GLdouble *v); typedef void (APIENTRYP PFNGLWINDOWPOS3FPROC) (GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLWINDOWPOS3FVPROC) (const GLfloat *v); typedef void (APIENTRYP PFNGLWINDOWPOS3IPROC) (GLint x, GLint y, GLint z); typedef void (APIENTRYP PFNGLWINDOWPOS3IVPROC) (const GLint *v); typedef void (APIENTRYP PFNGLWINDOWPOS3SPROC) (GLshort x, GLshort y, GLshort z); typedef void (APIENTRYP PFNGLWINDOWPOS3SVPROC) (const GLshort *v); #endif #ifndef GL_VERSION_1_5 #define GL_VERSION_1_5 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glGenQueries (GLsizei n, GLuint *ids); GLAPI void APIENTRY glDeleteQueries (GLsizei n, const GLuint *ids); GLAPI GLboolean APIENTRY glIsQuery (GLuint id); GLAPI void APIENTRY glBeginQuery (GLenum target, GLuint id); GLAPI void APIENTRY glEndQuery (GLenum target); GLAPI void APIENTRY glGetQueryiv (GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetQueryObjectiv (GLuint id, GLenum pname, GLint *params); GLAPI void APIENTRY glGetQueryObjectuiv (GLuint id, GLenum pname, GLuint *params); GLAPI void APIENTRY glBindBuffer (GLenum target, GLuint buffer); GLAPI void APIENTRY glDeleteBuffers (GLsizei n, const GLuint *buffers); GLAPI void APIENTRY glGenBuffers (GLsizei n, GLuint *buffers); GLAPI GLboolean APIENTRY glIsBuffer (GLuint buffer); GLAPI void APIENTRY glBufferData (GLenum target, GLsizeiptr size, const GLvoid *data, GLenum usage); GLAPI void APIENTRY glBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid *data); GLAPI void APIENTRY glGetBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, GLvoid *data); GLAPI GLvoid* APIENTRY glMapBuffer (GLenum target, GLenum access); GLAPI GLboolean APIENTRY glUnmapBuffer (GLenum target); GLAPI void APIENTRY glGetBufferParameteriv (GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetBufferPointerv (GLenum target, GLenum pname, GLvoid* *params); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLGENQUERIESPROC) (GLsizei n, GLuint *ids); typedef void (APIENTRYP PFNGLDELETEQUERIESPROC) (GLsizei n, const GLuint *ids); typedef GLboolean (APIENTRYP PFNGLISQUERYPROC) (GLuint id); typedef void (APIENTRYP PFNGLBEGINQUERYPROC) (GLenum target, GLuint id); typedef void (APIENTRYP PFNGLENDQUERYPROC) (GLenum target); typedef void (APIENTRYP PFNGLGETQUERYIVPROC) (GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETQUERYOBJECTIVPROC) (GLuint id, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETQUERYOBJECTUIVPROC) (GLuint id, GLenum pname, GLuint *params); typedef void (APIENTRYP PFNGLBINDBUFFERPROC) (GLenum target, GLuint buffer); typedef void (APIENTRYP PFNGLDELETEBUFFERSPROC) (GLsizei n, const GLuint *buffers); typedef void (APIENTRYP PFNGLGENBUFFERSPROC) (GLsizei n, GLuint *buffers); typedef GLboolean (APIENTRYP PFNGLISBUFFERPROC) (GLuint buffer); typedef void (APIENTRYP PFNGLBUFFERDATAPROC) (GLenum target, GLsizeiptr size, const GLvoid *data, GLenum usage); typedef void (APIENTRYP PFNGLBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid *data); typedef void (APIENTRYP PFNGLGETBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, GLvoid *data); typedef GLvoid* (APIENTRYP PFNGLMAPBUFFERPROC) (GLenum target, GLenum access); typedef GLboolean (APIENTRYP PFNGLUNMAPBUFFERPROC) (GLenum target); typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVPROC) (GLenum target, GLenum pname, GLvoid* *params); #endif #ifndef GL_VERSION_2_0 #define GL_VERSION_2_0 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBlendEquationSeparate (GLenum modeRGB, GLenum modeAlpha); GLAPI void APIENTRY glDrawBuffers (GLsizei n, const GLenum *bufs); GLAPI void APIENTRY glStencilOpSeparate (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); GLAPI void APIENTRY glStencilFuncSeparate (GLenum face, GLenum func, GLint ref, GLuint mask); GLAPI void APIENTRY glStencilMaskSeparate (GLenum face, GLuint mask); GLAPI void APIENTRY glAttachShader (GLuint program, GLuint shader); GLAPI void APIENTRY glBindAttribLocation (GLuint program, GLuint index, const GLchar *name); GLAPI void APIENTRY glCompileShader (GLuint shader); GLAPI GLuint APIENTRY glCreateProgram (void); GLAPI GLuint APIENTRY glCreateShader (GLenum type); GLAPI void APIENTRY glDeleteProgram (GLuint program); GLAPI void APIENTRY glDeleteShader (GLuint shader); GLAPI void APIENTRY glDetachShader (GLuint program, GLuint shader); GLAPI void APIENTRY glDisableVertexAttribArray (GLuint index); GLAPI void APIENTRY glEnableVertexAttribArray (GLuint index); GLAPI void APIENTRY glGetActiveAttrib (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); GLAPI void APIENTRY glGetActiveUniform (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); GLAPI void APIENTRY glGetAttachedShaders (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *obj); GLAPI GLint APIENTRY glGetAttribLocation (GLuint program, const GLchar *name); GLAPI void APIENTRY glGetProgramiv (GLuint program, GLenum pname, GLint *params); GLAPI void APIENTRY glGetProgramInfoLog (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog); GLAPI void APIENTRY glGetShaderiv (GLuint shader, GLenum pname, GLint *params); GLAPI void APIENTRY glGetShaderInfoLog (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog); GLAPI void APIENTRY glGetShaderSource (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source); GLAPI GLint APIENTRY glGetUniformLocation (GLuint program, const GLchar *name); GLAPI void APIENTRY glGetUniformfv (GLuint program, GLint location, GLfloat *params); GLAPI void APIENTRY glGetUniformiv (GLuint program, GLint location, GLint *params); GLAPI void APIENTRY glGetVertexAttribdv (GLuint index, GLenum pname, GLdouble *params); GLAPI void APIENTRY glGetVertexAttribfv (GLuint index, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetVertexAttribiv (GLuint index, GLenum pname, GLint *params); GLAPI void APIENTRY glGetVertexAttribPointerv (GLuint index, GLenum pname, GLvoid* *pointer); GLAPI GLboolean APIENTRY glIsProgram (GLuint program); GLAPI GLboolean APIENTRY glIsShader (GLuint shader); GLAPI void APIENTRY glLinkProgram (GLuint program); GLAPI void APIENTRY glShaderSource (GLuint shader, GLsizei count, const GLchar* const *string, const GLint *length); GLAPI void APIENTRY glUseProgram (GLuint program); GLAPI void APIENTRY glUniform1f (GLint location, GLfloat v0); GLAPI void APIENTRY glUniform2f (GLint location, GLfloat v0, GLfloat v1); GLAPI void APIENTRY glUniform3f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); GLAPI void APIENTRY glUniform4f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); GLAPI void APIENTRY glUniform1i (GLint location, GLint v0); GLAPI void APIENTRY glUniform2i (GLint location, GLint v0, GLint v1); GLAPI void APIENTRY glUniform3i (GLint location, GLint v0, GLint v1, GLint v2); GLAPI void APIENTRY glUniform4i (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); GLAPI void APIENTRY glUniform1fv (GLint location, GLsizei count, const GLfloat *value); GLAPI void APIENTRY glUniform2fv (GLint location, GLsizei count, const GLfloat *value); GLAPI void APIENTRY glUniform3fv (GLint location, GLsizei count, const GLfloat *value); GLAPI void APIENTRY glUniform4fv (GLint location, GLsizei count, const GLfloat *value); GLAPI void APIENTRY glUniform1iv (GLint location, GLsizei count, const GLint *value); GLAPI void APIENTRY glUniform2iv (GLint location, GLsizei count, const GLint *value); GLAPI void APIENTRY glUniform3iv (GLint location, GLsizei count, const GLint *value); GLAPI void APIENTRY glUniform4iv (GLint location, GLsizei count, const GLint *value); GLAPI void APIENTRY glUniformMatrix2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glUniformMatrix3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glUniformMatrix4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glValidateProgram (GLuint program); GLAPI void APIENTRY glVertexAttrib1d (GLuint index, GLdouble x); GLAPI void APIENTRY glVertexAttrib1dv (GLuint index, const GLdouble *v); GLAPI void APIENTRY glVertexAttrib1f (GLuint index, GLfloat x); GLAPI void APIENTRY glVertexAttrib1fv (GLuint index, const GLfloat *v); GLAPI void APIENTRY glVertexAttrib1s (GLuint index, GLshort x); GLAPI void APIENTRY glVertexAttrib1sv (GLuint index, const GLshort *v); GLAPI void APIENTRY glVertexAttrib2d (GLuint index, GLdouble x, GLdouble y); GLAPI void APIENTRY glVertexAttrib2dv (GLuint index, const GLdouble *v); GLAPI void APIENTRY glVertexAttrib2f (GLuint index, GLfloat x, GLfloat y); GLAPI void APIENTRY glVertexAttrib2fv (GLuint index, const GLfloat *v); GLAPI void APIENTRY glVertexAttrib2s (GLuint index, GLshort x, GLshort y); GLAPI void APIENTRY glVertexAttrib2sv (GLuint index, const GLshort *v); GLAPI void APIENTRY glVertexAttrib3d (GLuint index, GLdouble x, GLdouble y, GLdouble z); GLAPI void APIENTRY glVertexAttrib3dv (GLuint index, const GLdouble *v); GLAPI void APIENTRY glVertexAttrib3f (GLuint index, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glVertexAttrib3fv (GLuint index, const GLfloat *v); GLAPI void APIENTRY glVertexAttrib3s (GLuint index, GLshort x, GLshort y, GLshort z); GLAPI void APIENTRY glVertexAttrib3sv (GLuint index, const GLshort *v); GLAPI void APIENTRY glVertexAttrib4Nbv (GLuint index, const GLbyte *v); GLAPI void APIENTRY glVertexAttrib4Niv (GLuint index, const GLint *v); GLAPI void APIENTRY glVertexAttrib4Nsv (GLuint index, const GLshort *v); GLAPI void APIENTRY glVertexAttrib4Nub (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); GLAPI void APIENTRY glVertexAttrib4Nubv (GLuint index, const GLubyte *v); GLAPI void APIENTRY glVertexAttrib4Nuiv (GLuint index, const GLuint *v); GLAPI void APIENTRY glVertexAttrib4Nusv (GLuint index, const GLushort *v); GLAPI void APIENTRY glVertexAttrib4bv (GLuint index, const GLbyte *v); GLAPI void APIENTRY glVertexAttrib4d (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLAPI void APIENTRY glVertexAttrib4dv (GLuint index, const GLdouble *v); GLAPI void APIENTRY glVertexAttrib4f (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); GLAPI void APIENTRY glVertexAttrib4fv (GLuint index, const GLfloat *v); GLAPI void APIENTRY glVertexAttrib4iv (GLuint index, const GLint *v); GLAPI void APIENTRY glVertexAttrib4s (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); GLAPI void APIENTRY glVertexAttrib4sv (GLuint index, const GLshort *v); GLAPI void APIENTRY glVertexAttrib4ubv (GLuint index, const GLubyte *v); GLAPI void APIENTRY glVertexAttrib4uiv (GLuint index, const GLuint *v); GLAPI void APIENTRY glVertexAttrib4usv (GLuint index, const GLushort *v); GLAPI void APIENTRY glVertexAttribPointer (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEPROC) (GLenum modeRGB, GLenum modeAlpha); typedef void (APIENTRYP PFNGLDRAWBUFFERSPROC) (GLsizei n, const GLenum *bufs); typedef void (APIENTRYP PFNGLSTENCILOPSEPARATEPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); typedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEPROC) (GLenum face, GLenum func, GLint ref, GLuint mask); typedef void (APIENTRYP PFNGLSTENCILMASKSEPARATEPROC) (GLenum face, GLuint mask); typedef void (APIENTRYP PFNGLATTACHSHADERPROC) (GLuint program, GLuint shader); typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONPROC) (GLuint program, GLuint index, const GLchar *name); typedef void (APIENTRYP PFNGLCOMPILESHADERPROC) (GLuint shader); typedef GLuint (APIENTRYP PFNGLCREATEPROGRAMPROC) (void); typedef GLuint (APIENTRYP PFNGLCREATESHADERPROC) (GLenum type); typedef void (APIENTRYP PFNGLDELETEPROGRAMPROC) (GLuint program); typedef void (APIENTRYP PFNGLDELETESHADERPROC) (GLuint shader); typedef void (APIENTRYP PFNGLDETACHSHADERPROC) (GLuint program, GLuint shader); typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYPROC) (GLuint index); typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYPROC) (GLuint index); typedef void (APIENTRYP PFNGLGETACTIVEATTRIBPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); typedef void (APIENTRYP PFNGLGETATTACHEDSHADERSPROC) (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *obj); typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONPROC) (GLuint program, const GLchar *name); typedef void (APIENTRYP PFNGLGETPROGRAMIVPROC) (GLuint program, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETPROGRAMINFOLOGPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog); typedef void (APIENTRYP PFNGLGETSHADERIVPROC) (GLuint shader, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETSHADERINFOLOGPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog); typedef void (APIENTRYP PFNGLGETSHADERSOURCEPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source); typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONPROC) (GLuint program, const GLchar *name); typedef void (APIENTRYP PFNGLGETUNIFORMFVPROC) (GLuint program, GLint location, GLfloat *params); typedef void (APIENTRYP PFNGLGETUNIFORMIVPROC) (GLuint program, GLint location, GLint *params); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVPROC) (GLuint index, GLenum pname, GLdouble *params); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVPROC) (GLuint index, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVPROC) (GLuint index, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVPROC) (GLuint index, GLenum pname, GLvoid* *pointer); typedef GLboolean (APIENTRYP PFNGLISPROGRAMPROC) (GLuint program); typedef GLboolean (APIENTRYP PFNGLISSHADERPROC) (GLuint shader); typedef void (APIENTRYP PFNGLLINKPROGRAMPROC) (GLuint program); typedef void (APIENTRYP PFNGLSHADERSOURCEPROC) (GLuint shader, GLsizei count, const GLchar* const *string, const GLint *length); typedef void (APIENTRYP PFNGLUSEPROGRAMPROC) (GLuint program); typedef void (APIENTRYP PFNGLUNIFORM1FPROC) (GLint location, GLfloat v0); typedef void (APIENTRYP PFNGLUNIFORM2FPROC) (GLint location, GLfloat v0, GLfloat v1); typedef void (APIENTRYP PFNGLUNIFORM3FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); typedef void (APIENTRYP PFNGLUNIFORM4FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); typedef void (APIENTRYP PFNGLUNIFORM1IPROC) (GLint location, GLint v0); typedef void (APIENTRYP PFNGLUNIFORM2IPROC) (GLint location, GLint v0, GLint v1); typedef void (APIENTRYP PFNGLUNIFORM3IPROC) (GLint location, GLint v0, GLint v1, GLint v2); typedef void (APIENTRYP PFNGLUNIFORM4IPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); typedef void (APIENTRYP PFNGLUNIFORM1FVPROC) (GLint location, GLsizei count, const GLfloat *value); typedef void (APIENTRYP PFNGLUNIFORM2FVPROC) (GLint location, GLsizei count, const GLfloat *value); typedef void (APIENTRYP PFNGLUNIFORM3FVPROC) (GLint location, GLsizei count, const GLfloat *value); typedef void (APIENTRYP PFNGLUNIFORM4FVPROC) (GLint location, GLsizei count, const GLfloat *value); typedef void (APIENTRYP PFNGLUNIFORM1IVPROC) (GLint location, GLsizei count, const GLint *value); typedef void (APIENTRYP PFNGLUNIFORM2IVPROC) (GLint location, GLsizei count, const GLint *value); typedef void (APIENTRYP PFNGLUNIFORM3IVPROC) (GLint location, GLsizei count, const GLint *value); typedef void (APIENTRYP PFNGLUNIFORM4IVPROC) (GLint location, GLsizei count, const GLint *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLVALIDATEPROGRAMPROC) (GLuint program); typedef void (APIENTRYP PFNGLVERTEXATTRIB1DPROC) (GLuint index, GLdouble x); typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVPROC) (GLuint index, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB1FPROC) (GLuint index, GLfloat x); typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVPROC) (GLuint index, const GLfloat *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB1SPROC) (GLuint index, GLshort x); typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVPROC) (GLuint index, const GLshort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB2DPROC) (GLuint index, GLdouble x, GLdouble y); typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVPROC) (GLuint index, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB2FPROC) (GLuint index, GLfloat x, GLfloat y); typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVPROC) (GLuint index, const GLfloat *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB2SPROC) (GLuint index, GLshort x, GLshort y); typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVPROC) (GLuint index, const GLshort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB3DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVPROC) (GLuint index, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB3FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVPROC) (GLuint index, const GLfloat *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB3SPROC) (GLuint index, GLshort x, GLshort y, GLshort z); typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVPROC) (GLuint index, const GLshort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4NBVPROC) (GLuint index, const GLbyte *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4NIVPROC) (GLuint index, const GLint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4NSVPROC) (GLuint index, const GLshort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBVPROC) (GLuint index, const GLubyte *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUIVPROC) (GLuint index, const GLuint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUSVPROC) (GLuint index, const GLushort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4BVPROC) (GLuint index, const GLbyte *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVPROC) (GLuint index, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVPROC) (GLuint index, const GLfloat *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4IVPROC) (GLuint index, const GLint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4SPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVPROC) (GLuint index, const GLshort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVPROC) (GLuint index, const GLubyte *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4UIVPROC) (GLuint index, const GLuint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4USVPROC) (GLuint index, const GLushort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer); #endif #ifndef GL_VERSION_2_1 #define GL_VERSION_2_1 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glUniformMatrix2x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glUniformMatrix3x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glUniformMatrix2x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glUniformMatrix4x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glUniformMatrix3x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glUniformMatrix4x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); #endif #ifndef GL_VERSION_3_0 #define GL_VERSION_3_0 1 /* OpenGL 3.0 also reuses entry points from these extensions: */ /* ARB_framebuffer_object */ /* ARB_map_buffer_range */ /* ARB_vertex_array_object */ #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glColorMaski (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); GLAPI void APIENTRY glGetBooleani_v (GLenum target, GLuint index, GLboolean *data); GLAPI void APIENTRY glGetIntegeri_v (GLenum target, GLuint index, GLint *data); GLAPI void APIENTRY glEnablei (GLenum target, GLuint index); GLAPI void APIENTRY glDisablei (GLenum target, GLuint index); GLAPI GLboolean APIENTRY glIsEnabledi (GLenum target, GLuint index); GLAPI void APIENTRY glBeginTransformFeedback (GLenum primitiveMode); GLAPI void APIENTRY glEndTransformFeedback (void); GLAPI void APIENTRY glBindBufferRange (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); GLAPI void APIENTRY glBindBufferBase (GLenum target, GLuint index, GLuint buffer); GLAPI void APIENTRY glTransformFeedbackVaryings (GLuint program, GLsizei count, const GLchar* const *varyings, GLenum bufferMode); GLAPI void APIENTRY glGetTransformFeedbackVarying (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); GLAPI void APIENTRY glClampColor (GLenum target, GLenum clamp); GLAPI void APIENTRY glBeginConditionalRender (GLuint id, GLenum mode); GLAPI void APIENTRY glEndConditionalRender (void); GLAPI void APIENTRY glVertexAttribIPointer (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); GLAPI void APIENTRY glGetVertexAttribIiv (GLuint index, GLenum pname, GLint *params); GLAPI void APIENTRY glGetVertexAttribIuiv (GLuint index, GLenum pname, GLuint *params); GLAPI void APIENTRY glVertexAttribI1i (GLuint index, GLint x); GLAPI void APIENTRY glVertexAttribI2i (GLuint index, GLint x, GLint y); GLAPI void APIENTRY glVertexAttribI3i (GLuint index, GLint x, GLint y, GLint z); GLAPI void APIENTRY glVertexAttribI4i (GLuint index, GLint x, GLint y, GLint z, GLint w); GLAPI void APIENTRY glVertexAttribI1ui (GLuint index, GLuint x); GLAPI void APIENTRY glVertexAttribI2ui (GLuint index, GLuint x, GLuint y); GLAPI void APIENTRY glVertexAttribI3ui (GLuint index, GLuint x, GLuint y, GLuint z); GLAPI void APIENTRY glVertexAttribI4ui (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); GLAPI void APIENTRY glVertexAttribI1iv (GLuint index, const GLint *v); GLAPI void APIENTRY glVertexAttribI2iv (GLuint index, const GLint *v); GLAPI void APIENTRY glVertexAttribI3iv (GLuint index, const GLint *v); GLAPI void APIENTRY glVertexAttribI4iv (GLuint index, const GLint *v); GLAPI void APIENTRY glVertexAttribI1uiv (GLuint index, const GLuint *v); GLAPI void APIENTRY glVertexAttribI2uiv (GLuint index, const GLuint *v); GLAPI void APIENTRY glVertexAttribI3uiv (GLuint index, const GLuint *v); GLAPI void APIENTRY glVertexAttribI4uiv (GLuint index, const GLuint *v); GLAPI void APIENTRY glVertexAttribI4bv (GLuint index, const GLbyte *v); GLAPI void APIENTRY glVertexAttribI4sv (GLuint index, const GLshort *v); GLAPI void APIENTRY glVertexAttribI4ubv (GLuint index, const GLubyte *v); GLAPI void APIENTRY glVertexAttribI4usv (GLuint index, const GLushort *v); GLAPI void APIENTRY glGetUniformuiv (GLuint program, GLint location, GLuint *params); GLAPI void APIENTRY glBindFragDataLocation (GLuint program, GLuint color, const GLchar *name); GLAPI GLint APIENTRY glGetFragDataLocation (GLuint program, const GLchar *name); GLAPI void APIENTRY glUniform1ui (GLint location, GLuint v0); GLAPI void APIENTRY glUniform2ui (GLint location, GLuint v0, GLuint v1); GLAPI void APIENTRY glUniform3ui (GLint location, GLuint v0, GLuint v1, GLuint v2); GLAPI void APIENTRY glUniform4ui (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); GLAPI void APIENTRY glUniform1uiv (GLint location, GLsizei count, const GLuint *value); GLAPI void APIENTRY glUniform2uiv (GLint location, GLsizei count, const GLuint *value); GLAPI void APIENTRY glUniform3uiv (GLint location, GLsizei count, const GLuint *value); GLAPI void APIENTRY glUniform4uiv (GLint location, GLsizei count, const GLuint *value); GLAPI void APIENTRY glTexParameterIiv (GLenum target, GLenum pname, const GLint *params); GLAPI void APIENTRY glTexParameterIuiv (GLenum target, GLenum pname, const GLuint *params); GLAPI void APIENTRY glGetTexParameterIiv (GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetTexParameterIuiv (GLenum target, GLenum pname, GLuint *params); GLAPI void APIENTRY glClearBufferiv (GLenum buffer, GLint drawbuffer, const GLint *value); GLAPI void APIENTRY glClearBufferuiv (GLenum buffer, GLint drawbuffer, const GLuint *value); GLAPI void APIENTRY glClearBufferfv (GLenum buffer, GLint drawbuffer, const GLfloat *value); GLAPI void APIENTRY glClearBufferfi (GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); GLAPI const GLubyte * APIENTRY glGetStringi (GLenum name, GLuint index); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLCOLORMASKIPROC) (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); typedef void (APIENTRYP PFNGLGETBOOLEANI_VPROC) (GLenum target, GLuint index, GLboolean *data); typedef void (APIENTRYP PFNGLGETINTEGERI_VPROC) (GLenum target, GLuint index, GLint *data); typedef void (APIENTRYP PFNGLENABLEIPROC) (GLenum target, GLuint index); typedef void (APIENTRYP PFNGLDISABLEIPROC) (GLenum target, GLuint index); typedef GLboolean (APIENTRYP PFNGLISENABLEDIPROC) (GLenum target, GLuint index); typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKPROC) (GLenum primitiveMode); typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKPROC) (void); typedef void (APIENTRYP PFNGLBINDBUFFERRANGEPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); typedef void (APIENTRYP PFNGLBINDBUFFERBASEPROC) (GLenum target, GLuint index, GLuint buffer); typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSPROC) (GLuint program, GLsizei count, const GLchar* const *varyings, GLenum bufferMode); typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); typedef void (APIENTRYP PFNGLCLAMPCOLORPROC) (GLenum target, GLenum clamp); typedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERPROC) (GLuint id, GLenum mode); typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERPROC) (void); typedef void (APIENTRYP PFNGLVERTEXATTRIBIPOINTERPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIIVPROC) (GLuint index, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIUIVPROC) (GLuint index, GLenum pname, GLuint *params); typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IPROC) (GLuint index, GLint x); typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IPROC) (GLuint index, GLint x, GLint y); typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IPROC) (GLuint index, GLint x, GLint y, GLint z); typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IPROC) (GLuint index, GLint x, GLint y, GLint z, GLint w); typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIPROC) (GLuint index, GLuint x); typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIPROC) (GLuint index, GLuint x, GLuint y); typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIPROC) (GLuint index, GLuint x, GLuint y, GLuint z); typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIPROC) (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IVPROC) (GLuint index, const GLint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IVPROC) (GLuint index, const GLint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IVPROC) (GLuint index, const GLint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IVPROC) (GLuint index, const GLint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIVPROC) (GLuint index, const GLuint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIVPROC) (GLuint index, const GLuint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIVPROC) (GLuint index, const GLuint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIVPROC) (GLuint index, const GLuint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI4BVPROC) (GLuint index, const GLbyte *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI4SVPROC) (GLuint index, const GLshort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UBVPROC) (GLuint index, const GLubyte *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI4USVPROC) (GLuint index, const GLushort *v); typedef void (APIENTRYP PFNGLGETUNIFORMUIVPROC) (GLuint program, GLint location, GLuint *params); typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONPROC) (GLuint program, GLuint color, const GLchar *name); typedef GLint (APIENTRYP PFNGLGETFRAGDATALOCATIONPROC) (GLuint program, const GLchar *name); typedef void (APIENTRYP PFNGLUNIFORM1UIPROC) (GLint location, GLuint v0); typedef void (APIENTRYP PFNGLUNIFORM2UIPROC) (GLint location, GLuint v0, GLuint v1); typedef void (APIENTRYP PFNGLUNIFORM3UIPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2); typedef void (APIENTRYP PFNGLUNIFORM4UIPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); typedef void (APIENTRYP PFNGLUNIFORM1UIVPROC) (GLint location, GLsizei count, const GLuint *value); typedef void (APIENTRYP PFNGLUNIFORM2UIVPROC) (GLint location, GLsizei count, const GLuint *value); typedef void (APIENTRYP PFNGLUNIFORM3UIVPROC) (GLint location, GLsizei count, const GLuint *value); typedef void (APIENTRYP PFNGLUNIFORM4UIVPROC) (GLint location, GLsizei count, const GLuint *value); typedef void (APIENTRYP PFNGLTEXPARAMETERIIVPROC) (GLenum target, GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLTEXPARAMETERIUIVPROC) (GLenum target, GLenum pname, const GLuint *params); typedef void (APIENTRYP PFNGLGETTEXPARAMETERIIVPROC) (GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETTEXPARAMETERIUIVPROC) (GLenum target, GLenum pname, GLuint *params); typedef void (APIENTRYP PFNGLCLEARBUFFERIVPROC) (GLenum buffer, GLint drawbuffer, const GLint *value); typedef void (APIENTRYP PFNGLCLEARBUFFERUIVPROC) (GLenum buffer, GLint drawbuffer, const GLuint *value); typedef void (APIENTRYP PFNGLCLEARBUFFERFVPROC) (GLenum buffer, GLint drawbuffer, const GLfloat *value); typedef void (APIENTRYP PFNGLCLEARBUFFERFIPROC) (GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); typedef const GLubyte * (APIENTRYP PFNGLGETSTRINGIPROC) (GLenum name, GLuint index); #endif #ifndef GL_VERSION_3_1 #define GL_VERSION_3_1 1 /* OpenGL 3.1 also reuses entry points from these extensions: */ /* ARB_copy_buffer */ /* ARB_uniform_buffer_object */ #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDrawArraysInstanced (GLenum mode, GLint first, GLsizei count, GLsizei instancecount); GLAPI void APIENTRY glDrawElementsInstanced (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei instancecount); GLAPI void APIENTRY glTexBuffer (GLenum target, GLenum internalformat, GLuint buffer); GLAPI void APIENTRY glPrimitiveRestartIndex (GLuint index); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDPROC) (GLenum mode, GLint first, GLsizei count, GLsizei instancecount); typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei instancecount); typedef void (APIENTRYP PFNGLTEXBUFFERPROC) (GLenum target, GLenum internalformat, GLuint buffer); typedef void (APIENTRYP PFNGLPRIMITIVERESTARTINDEXPROC) (GLuint index); #endif #ifndef GL_VERSION_3_2 #define GL_VERSION_3_2 1 /* OpenGL 3.2 also reuses entry points from these extensions: */ /* ARB_draw_elements_base_vertex */ /* ARB_provoking_vertex */ /* ARB_sync */ /* ARB_texture_multisample */ #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glGetInteger64i_v (GLenum target, GLuint index, GLint64 *data); GLAPI void APIENTRY glGetBufferParameteri64v (GLenum target, GLenum pname, GLint64 *params); GLAPI void APIENTRY glFramebufferTexture (GLenum target, GLenum attachment, GLuint texture, GLint level); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLGETINTEGER64I_VPROC) (GLenum target, GLuint index, GLint64 *data); typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERI64VPROC) (GLenum target, GLenum pname, GLint64 *params); typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level); #endif #ifndef GL_VERSION_3_3 #define GL_VERSION_3_3 1 /* OpenGL 3.3 also reuses entry points from these extensions: */ /* ARB_blend_func_extended */ /* ARB_sampler_objects */ /* ARB_explicit_attrib_location, but it has none */ /* ARB_occlusion_query2 (no entry points) */ /* ARB_shader_bit_encoding (no entry points) */ /* ARB_texture_rgb10_a2ui (no entry points) */ /* ARB_texture_swizzle (no entry points) */ /* ARB_timer_query */ /* ARB_vertex_type_2_10_10_10_rev */ #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glVertexAttribDivisor (GLuint index, GLuint divisor); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLVERTEXATTRIBDIVISORPROC) (GLuint index, GLuint divisor); #endif #ifndef GL_VERSION_4_0 #define GL_VERSION_4_0 1 /* OpenGL 4.0 also reuses entry points from these extensions: */ /* ARB_texture_query_lod (no entry points) */ /* ARB_draw_indirect */ /* ARB_gpu_shader5 (no entry points) */ /* ARB_gpu_shader_fp64 */ /* ARB_shader_subroutine */ /* ARB_tessellation_shader */ /* ARB_texture_buffer_object_rgb32 (no entry points) */ /* ARB_texture_cube_map_array (no entry points) */ /* ARB_texture_gather (no entry points) */ /* ARB_transform_feedback2 */ /* ARB_transform_feedback3 */ #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glMinSampleShading (GLfloat value); GLAPI void APIENTRY glBlendEquationi (GLuint buf, GLenum mode); GLAPI void APIENTRY glBlendEquationSeparatei (GLuint buf, GLenum modeRGB, GLenum modeAlpha); GLAPI void APIENTRY glBlendFunci (GLuint buf, GLenum src, GLenum dst); GLAPI void APIENTRY glBlendFuncSeparatei (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLMINSAMPLESHADINGPROC) (GLfloat value); typedef void (APIENTRYP PFNGLBLENDEQUATIONIPROC) (GLuint buf, GLenum mode); typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEIPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha); typedef void (APIENTRYP PFNGLBLENDFUNCIPROC) (GLuint buf, GLenum src, GLenum dst); typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEIPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); #endif #ifndef GL_VERSION_4_1 #define GL_VERSION_4_1 1 /* OpenGL 4.1 reuses entry points from these extensions: */ /* ARB_ES2_compatibility */ /* ARB_get_program_binary */ /* ARB_separate_shader_objects */ /* ARB_shader_precision (no entry points) */ /* ARB_vertex_attrib_64bit */ /* ARB_viewport_array */ #endif #ifndef GL_VERSION_4_2 #define GL_VERSION_4_2 1 /* OpenGL 4.2 reuses entry points from these extensions: */ /* ARB_base_instance */ /* ARB_shading_language_420pack (no entry points) */ /* ARB_transform_feedback_instanced */ /* ARB_compressed_texture_pixel_storage (no entry points) */ /* ARB_conservative_depth (no entry points) */ /* ARB_internalformat_query */ /* ARB_map_buffer_alignment (no entry points) */ /* ARB_shader_atomic_counters */ /* ARB_shader_image_load_store */ /* ARB_shading_language_packing (no entry points) */ /* ARB_texture_storage */ #endif #ifndef GL_VERSION_4_3 #define GL_VERSION_4_3 1 /* OpenGL 4.3 reuses entry points from these extensions: */ /* ARB_arrays_of_arrays (no entry points, GLSL only) */ /* ARB_fragment_layer_viewport (no entry points, GLSL only) */ /* ARB_shader_image_size (no entry points, GLSL only) */ /* ARB_ES3_compatibility (no entry points) */ /* ARB_clear_buffer_object */ /* ARB_compute_shader */ /* ARB_copy_image */ /* KHR_debug (includes ARB_debug_output commands promoted to KHR without suffixes) */ /* ARB_explicit_uniform_location (no entry points) */ /* ARB_framebuffer_no_attachments */ /* ARB_internalformat_query2 */ /* ARB_invalidate_subdata */ /* ARB_multi_draw_indirect */ /* ARB_program_interface_query */ /* ARB_robust_buffer_access_behavior (no entry points) */ /* ARB_shader_storage_buffer_object */ /* ARB_stencil_texturing (no entry points) */ /* ARB_texture_buffer_range */ /* ARB_texture_query_levels (no entry points) */ /* ARB_texture_storage_multisample */ /* ARB_texture_view */ /* ARB_vertex_attrib_binding */ #endif #ifndef GL_ARB_multitexture #define GL_ARB_multitexture 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glActiveTextureARB (GLenum texture); GLAPI void APIENTRY glClientActiveTextureARB (GLenum texture); GLAPI void APIENTRY glMultiTexCoord1dARB (GLenum target, GLdouble s); GLAPI void APIENTRY glMultiTexCoord1dvARB (GLenum target, const GLdouble *v); GLAPI void APIENTRY glMultiTexCoord1fARB (GLenum target, GLfloat s); GLAPI void APIENTRY glMultiTexCoord1fvARB (GLenum target, const GLfloat *v); GLAPI void APIENTRY glMultiTexCoord1iARB (GLenum target, GLint s); GLAPI void APIENTRY glMultiTexCoord1ivARB (GLenum target, const GLint *v); GLAPI void APIENTRY glMultiTexCoord1sARB (GLenum target, GLshort s); GLAPI void APIENTRY glMultiTexCoord1svARB (GLenum target, const GLshort *v); GLAPI void APIENTRY glMultiTexCoord2dARB (GLenum target, GLdouble s, GLdouble t); GLAPI void APIENTRY glMultiTexCoord2dvARB (GLenum target, const GLdouble *v); GLAPI void APIENTRY glMultiTexCoord2fARB (GLenum target, GLfloat s, GLfloat t); GLAPI void APIENTRY glMultiTexCoord2fvARB (GLenum target, const GLfloat *v); GLAPI void APIENTRY glMultiTexCoord2iARB (GLenum target, GLint s, GLint t); GLAPI void APIENTRY glMultiTexCoord2ivARB (GLenum target, const GLint *v); GLAPI void APIENTRY glMultiTexCoord2sARB (GLenum target, GLshort s, GLshort t); GLAPI void APIENTRY glMultiTexCoord2svARB (GLenum target, const GLshort *v); GLAPI void APIENTRY glMultiTexCoord3dARB (GLenum target, GLdouble s, GLdouble t, GLdouble r); GLAPI void APIENTRY glMultiTexCoord3dvARB (GLenum target, const GLdouble *v); GLAPI void APIENTRY glMultiTexCoord3fARB (GLenum target, GLfloat s, GLfloat t, GLfloat r); GLAPI void APIENTRY glMultiTexCoord3fvARB (GLenum target, const GLfloat *v); GLAPI void APIENTRY glMultiTexCoord3iARB (GLenum target, GLint s, GLint t, GLint r); GLAPI void APIENTRY glMultiTexCoord3ivARB (GLenum target, const GLint *v); GLAPI void APIENTRY glMultiTexCoord3sARB (GLenum target, GLshort s, GLshort t, GLshort r); GLAPI void APIENTRY glMultiTexCoord3svARB (GLenum target, const GLshort *v); GLAPI void APIENTRY glMultiTexCoord4dARB (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); GLAPI void APIENTRY glMultiTexCoord4dvARB (GLenum target, const GLdouble *v); GLAPI void APIENTRY glMultiTexCoord4fARB (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); GLAPI void APIENTRY glMultiTexCoord4fvARB (GLenum target, const GLfloat *v); GLAPI void APIENTRY glMultiTexCoord4iARB (GLenum target, GLint s, GLint t, GLint r, GLint q); GLAPI void APIENTRY glMultiTexCoord4ivARB (GLenum target, const GLint *v); GLAPI void APIENTRY glMultiTexCoord4sARB (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); GLAPI void APIENTRY glMultiTexCoord4svARB (GLenum target, const GLshort *v); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLACTIVETEXTUREARBPROC) (GLenum texture); typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREARBPROC) (GLenum texture); typedef void (APIENTRYP PFNGLMULTITEXCOORD1DARBPROC) (GLenum target, GLdouble s); typedef void (APIENTRYP PFNGLMULTITEXCOORD1DVARBPROC) (GLenum target, const GLdouble *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD1FARBPROC) (GLenum target, GLfloat s); typedef void (APIENTRYP PFNGLMULTITEXCOORD1FVARBPROC) (GLenum target, const GLfloat *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD1IARBPROC) (GLenum target, GLint s); typedef void (APIENTRYP PFNGLMULTITEXCOORD1IVARBPROC) (GLenum target, const GLint *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD1SARBPROC) (GLenum target, GLshort s); typedef void (APIENTRYP PFNGLMULTITEXCOORD1SVARBPROC) (GLenum target, const GLshort *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD2DARBPROC) (GLenum target, GLdouble s, GLdouble t); typedef void (APIENTRYP PFNGLMULTITEXCOORD2DVARBPROC) (GLenum target, const GLdouble *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD2FARBPROC) (GLenum target, GLfloat s, GLfloat t); typedef void (APIENTRYP PFNGLMULTITEXCOORD2FVARBPROC) (GLenum target, const GLfloat *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD2IARBPROC) (GLenum target, GLint s, GLint t); typedef void (APIENTRYP PFNGLMULTITEXCOORD2IVARBPROC) (GLenum target, const GLint *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD2SARBPROC) (GLenum target, GLshort s, GLshort t); typedef void (APIENTRYP PFNGLMULTITEXCOORD2SVARBPROC) (GLenum target, const GLshort *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD3DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r); typedef void (APIENTRYP PFNGLMULTITEXCOORD3DVARBPROC) (GLenum target, const GLdouble *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD3FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r); typedef void (APIENTRYP PFNGLMULTITEXCOORD3FVARBPROC) (GLenum target, const GLfloat *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD3IARBPROC) (GLenum target, GLint s, GLint t, GLint r); typedef void (APIENTRYP PFNGLMULTITEXCOORD3IVARBPROC) (GLenum target, const GLint *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD3SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r); typedef void (APIENTRYP PFNGLMULTITEXCOORD3SVARBPROC) (GLenum target, const GLshort *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD4DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); typedef void (APIENTRYP PFNGLMULTITEXCOORD4DVARBPROC) (GLenum target, const GLdouble *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD4FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); typedef void (APIENTRYP PFNGLMULTITEXCOORD4FVARBPROC) (GLenum target, const GLfloat *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD4IARBPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q); typedef void (APIENTRYP PFNGLMULTITEXCOORD4IVARBPROC) (GLenum target, const GLint *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD4SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); typedef void (APIENTRYP PFNGLMULTITEXCOORD4SVARBPROC) (GLenum target, const GLshort *v); #endif #ifndef GL_ARB_transpose_matrix #define GL_ARB_transpose_matrix 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glLoadTransposeMatrixfARB (const GLfloat *m); GLAPI void APIENTRY glLoadTransposeMatrixdARB (const GLdouble *m); GLAPI void APIENTRY glMultTransposeMatrixfARB (const GLfloat *m); GLAPI void APIENTRY glMultTransposeMatrixdARB (const GLdouble *m); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXFARBPROC) (const GLfloat *m); typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXDARBPROC) (const GLdouble *m); typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXFARBPROC) (const GLfloat *m); typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXDARBPROC) (const GLdouble *m); #endif #ifndef GL_ARB_multisample #define GL_ARB_multisample 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glSampleCoverageARB (GLfloat value, GLboolean invert); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLSAMPLECOVERAGEARBPROC) (GLfloat value, GLboolean invert); #endif #ifndef GL_ARB_texture_env_add #define GL_ARB_texture_env_add 1 #endif #ifndef GL_ARB_texture_cube_map #define GL_ARB_texture_cube_map 1 #endif #ifndef GL_ARB_texture_compression #define GL_ARB_texture_compression 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glCompressedTexImage3DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data); GLAPI void APIENTRY glCompressedTexImage2DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); GLAPI void APIENTRY glCompressedTexImage1DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data); GLAPI void APIENTRY glCompressedTexSubImage3DARB (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data); GLAPI void APIENTRY glCompressedTexSubImage2DARB (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data); GLAPI void APIENTRY glCompressedTexSubImage1DARB (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data); GLAPI void APIENTRY glGetCompressedTexImageARB (GLenum target, GLint level, GLvoid *img); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data); typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GLint level, GLvoid *img); #endif #ifndef GL_ARB_texture_border_clamp #define GL_ARB_texture_border_clamp 1 #endif #ifndef GL_ARB_point_parameters #define GL_ARB_point_parameters 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glPointParameterfARB (GLenum pname, GLfloat param); GLAPI void APIENTRY glPointParameterfvARB (GLenum pname, const GLfloat *params); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLPOINTPARAMETERFARBPROC) (GLenum pname, GLfloat param); typedef void (APIENTRYP PFNGLPOINTPARAMETERFVARBPROC) (GLenum pname, const GLfloat *params); #endif #ifndef GL_ARB_vertex_blend #define GL_ARB_vertex_blend 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glWeightbvARB (GLint size, const GLbyte *weights); GLAPI void APIENTRY glWeightsvARB (GLint size, const GLshort *weights); GLAPI void APIENTRY glWeightivARB (GLint size, const GLint *weights); GLAPI void APIENTRY glWeightfvARB (GLint size, const GLfloat *weights); GLAPI void APIENTRY glWeightdvARB (GLint size, const GLdouble *weights); GLAPI void APIENTRY glWeightubvARB (GLint size, const GLubyte *weights); GLAPI void APIENTRY glWeightusvARB (GLint size, const GLushort *weights); GLAPI void APIENTRY glWeightuivARB (GLint size, const GLuint *weights); GLAPI void APIENTRY glWeightPointerARB (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); GLAPI void APIENTRY glVertexBlendARB (GLint count); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLWEIGHTBVARBPROC) (GLint size, const GLbyte *weights); typedef void (APIENTRYP PFNGLWEIGHTSVARBPROC) (GLint size, const GLshort *weights); typedef void (APIENTRYP PFNGLWEIGHTIVARBPROC) (GLint size, const GLint *weights); typedef void (APIENTRYP PFNGLWEIGHTFVARBPROC) (GLint size, const GLfloat *weights); typedef void (APIENTRYP PFNGLWEIGHTDVARBPROC) (GLint size, const GLdouble *weights); typedef void (APIENTRYP PFNGLWEIGHTUBVARBPROC) (GLint size, const GLubyte *weights); typedef void (APIENTRYP PFNGLWEIGHTUSVARBPROC) (GLint size, const GLushort *weights); typedef void (APIENTRYP PFNGLWEIGHTUIVARBPROC) (GLint size, const GLuint *weights); typedef void (APIENTRYP PFNGLWEIGHTPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); typedef void (APIENTRYP PFNGLVERTEXBLENDARBPROC) (GLint count); #endif #ifndef GL_ARB_matrix_palette #define GL_ARB_matrix_palette 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glCurrentPaletteMatrixARB (GLint index); GLAPI void APIENTRY glMatrixIndexubvARB (GLint size, const GLubyte *indices); GLAPI void APIENTRY glMatrixIndexusvARB (GLint size, const GLushort *indices); GLAPI void APIENTRY glMatrixIndexuivARB (GLint size, const GLuint *indices); GLAPI void APIENTRY glMatrixIndexPointerARB (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLCURRENTPALETTEMATRIXARBPROC) (GLint index); typedef void (APIENTRYP PFNGLMATRIXINDEXUBVARBPROC) (GLint size, const GLubyte *indices); typedef void (APIENTRYP PFNGLMATRIXINDEXUSVARBPROC) (GLint size, const GLushort *indices); typedef void (APIENTRYP PFNGLMATRIXINDEXUIVARBPROC) (GLint size, const GLuint *indices); typedef void (APIENTRYP PFNGLMATRIXINDEXPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); #endif #ifndef GL_ARB_texture_env_combine #define GL_ARB_texture_env_combine 1 #endif #ifndef GL_ARB_texture_env_crossbar #define GL_ARB_texture_env_crossbar 1 #endif #ifndef GL_ARB_texture_env_dot3 #define GL_ARB_texture_env_dot3 1 #endif #ifndef GL_ARB_texture_mirrored_repeat #define GL_ARB_texture_mirrored_repeat 1 #endif #ifndef GL_ARB_depth_texture #define GL_ARB_depth_texture 1 #endif #ifndef GL_ARB_shadow #define GL_ARB_shadow 1 #endif #ifndef GL_ARB_shadow_ambient #define GL_ARB_shadow_ambient 1 #endif #ifndef GL_ARB_window_pos #define GL_ARB_window_pos 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glWindowPos2dARB (GLdouble x, GLdouble y); GLAPI void APIENTRY glWindowPos2dvARB (const GLdouble *v); GLAPI void APIENTRY glWindowPos2fARB (GLfloat x, GLfloat y); GLAPI void APIENTRY glWindowPos2fvARB (const GLfloat *v); GLAPI void APIENTRY glWindowPos2iARB (GLint x, GLint y); GLAPI void APIENTRY glWindowPos2ivARB (const GLint *v); GLAPI void APIENTRY glWindowPos2sARB (GLshort x, GLshort y); GLAPI void APIENTRY glWindowPos2svARB (const GLshort *v); GLAPI void APIENTRY glWindowPos3dARB (GLdouble x, GLdouble y, GLdouble z); GLAPI void APIENTRY glWindowPos3dvARB (const GLdouble *v); GLAPI void APIENTRY glWindowPos3fARB (GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glWindowPos3fvARB (const GLfloat *v); GLAPI void APIENTRY glWindowPos3iARB (GLint x, GLint y, GLint z); GLAPI void APIENTRY glWindowPos3ivARB (const GLint *v); GLAPI void APIENTRY glWindowPos3sARB (GLshort x, GLshort y, GLshort z); GLAPI void APIENTRY glWindowPos3svARB (const GLshort *v); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLWINDOWPOS2DARBPROC) (GLdouble x, GLdouble y); typedef void (APIENTRYP PFNGLWINDOWPOS2DVARBPROC) (const GLdouble *v); typedef void (APIENTRYP PFNGLWINDOWPOS2FARBPROC) (GLfloat x, GLfloat y); typedef void (APIENTRYP PFNGLWINDOWPOS2FVARBPROC) (const GLfloat *v); typedef void (APIENTRYP PFNGLWINDOWPOS2IARBPROC) (GLint x, GLint y); typedef void (APIENTRYP PFNGLWINDOWPOS2IVARBPROC) (const GLint *v); typedef void (APIENTRYP PFNGLWINDOWPOS2SARBPROC) (GLshort x, GLshort y); typedef void (APIENTRYP PFNGLWINDOWPOS2SVARBPROC) (const GLshort *v); typedef void (APIENTRYP PFNGLWINDOWPOS3DARBPROC) (GLdouble x, GLdouble y, GLdouble z); typedef void (APIENTRYP PFNGLWINDOWPOS3DVARBPROC) (const GLdouble *v); typedef void (APIENTRYP PFNGLWINDOWPOS3FARBPROC) (GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLWINDOWPOS3FVARBPROC) (const GLfloat *v); typedef void (APIENTRYP PFNGLWINDOWPOS3IARBPROC) (GLint x, GLint y, GLint z); typedef void (APIENTRYP PFNGLWINDOWPOS3IVARBPROC) (const GLint *v); typedef void (APIENTRYP PFNGLWINDOWPOS3SARBPROC) (GLshort x, GLshort y, GLshort z); typedef void (APIENTRYP PFNGLWINDOWPOS3SVARBPROC) (const GLshort *v); #endif #ifndef GL_ARB_vertex_program #define GL_ARB_vertex_program 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glVertexAttrib1dARB (GLuint index, GLdouble x); GLAPI void APIENTRY glVertexAttrib1dvARB (GLuint index, const GLdouble *v); GLAPI void APIENTRY glVertexAttrib1fARB (GLuint index, GLfloat x); GLAPI void APIENTRY glVertexAttrib1fvARB (GLuint index, const GLfloat *v); GLAPI void APIENTRY glVertexAttrib1sARB (GLuint index, GLshort x); GLAPI void APIENTRY glVertexAttrib1svARB (GLuint index, const GLshort *v); GLAPI void APIENTRY glVertexAttrib2dARB (GLuint index, GLdouble x, GLdouble y); GLAPI void APIENTRY glVertexAttrib2dvARB (GLuint index, const GLdouble *v); GLAPI void APIENTRY glVertexAttrib2fARB (GLuint index, GLfloat x, GLfloat y); GLAPI void APIENTRY glVertexAttrib2fvARB (GLuint index, const GLfloat *v); GLAPI void APIENTRY glVertexAttrib2sARB (GLuint index, GLshort x, GLshort y); GLAPI void APIENTRY glVertexAttrib2svARB (GLuint index, const GLshort *v); GLAPI void APIENTRY glVertexAttrib3dARB (GLuint index, GLdouble x, GLdouble y, GLdouble z); GLAPI void APIENTRY glVertexAttrib3dvARB (GLuint index, const GLdouble *v); GLAPI void APIENTRY glVertexAttrib3fARB (GLuint index, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glVertexAttrib3fvARB (GLuint index, const GLfloat *v); GLAPI void APIENTRY glVertexAttrib3sARB (GLuint index, GLshort x, GLshort y, GLshort z); GLAPI void APIENTRY glVertexAttrib3svARB (GLuint index, const GLshort *v); GLAPI void APIENTRY glVertexAttrib4NbvARB (GLuint index, const GLbyte *v); GLAPI void APIENTRY glVertexAttrib4NivARB (GLuint index, const GLint *v); GLAPI void APIENTRY glVertexAttrib4NsvARB (GLuint index, const GLshort *v); GLAPI void APIENTRY glVertexAttrib4NubARB (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); GLAPI void APIENTRY glVertexAttrib4NubvARB (GLuint index, const GLubyte *v); GLAPI void APIENTRY glVertexAttrib4NuivARB (GLuint index, const GLuint *v); GLAPI void APIENTRY glVertexAttrib4NusvARB (GLuint index, const GLushort *v); GLAPI void APIENTRY glVertexAttrib4bvARB (GLuint index, const GLbyte *v); GLAPI void APIENTRY glVertexAttrib4dARB (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLAPI void APIENTRY glVertexAttrib4dvARB (GLuint index, const GLdouble *v); GLAPI void APIENTRY glVertexAttrib4fARB (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); GLAPI void APIENTRY glVertexAttrib4fvARB (GLuint index, const GLfloat *v); GLAPI void APIENTRY glVertexAttrib4ivARB (GLuint index, const GLint *v); GLAPI void APIENTRY glVertexAttrib4sARB (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); GLAPI void APIENTRY glVertexAttrib4svARB (GLuint index, const GLshort *v); GLAPI void APIENTRY glVertexAttrib4ubvARB (GLuint index, const GLubyte *v); GLAPI void APIENTRY glVertexAttrib4uivARB (GLuint index, const GLuint *v); GLAPI void APIENTRY glVertexAttrib4usvARB (GLuint index, const GLushort *v); GLAPI void APIENTRY glVertexAttribPointerARB (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer); GLAPI void APIENTRY glEnableVertexAttribArrayARB (GLuint index); GLAPI void APIENTRY glDisableVertexAttribArrayARB (GLuint index); GLAPI void APIENTRY glProgramStringARB (GLenum target, GLenum format, GLsizei len, const GLvoid *string); GLAPI void APIENTRY glBindProgramARB (GLenum target, GLuint program); GLAPI void APIENTRY glDeleteProgramsARB (GLsizei n, const GLuint *programs); GLAPI void APIENTRY glGenProgramsARB (GLsizei n, GLuint *programs); GLAPI void APIENTRY glProgramEnvParameter4dARB (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLAPI void APIENTRY glProgramEnvParameter4dvARB (GLenum target, GLuint index, const GLdouble *params); GLAPI void APIENTRY glProgramEnvParameter4fARB (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); GLAPI void APIENTRY glProgramEnvParameter4fvARB (GLenum target, GLuint index, const GLfloat *params); GLAPI void APIENTRY glProgramLocalParameter4dARB (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLAPI void APIENTRY glProgramLocalParameter4dvARB (GLenum target, GLuint index, const GLdouble *params); GLAPI void APIENTRY glProgramLocalParameter4fARB (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); GLAPI void APIENTRY glProgramLocalParameter4fvARB (GLenum target, GLuint index, const GLfloat *params); GLAPI void APIENTRY glGetProgramEnvParameterdvARB (GLenum target, GLuint index, GLdouble *params); GLAPI void APIENTRY glGetProgramEnvParameterfvARB (GLenum target, GLuint index, GLfloat *params); GLAPI void APIENTRY glGetProgramLocalParameterdvARB (GLenum target, GLuint index, GLdouble *params); GLAPI void APIENTRY glGetProgramLocalParameterfvARB (GLenum target, GLuint index, GLfloat *params); GLAPI void APIENTRY glGetProgramivARB (GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetProgramStringARB (GLenum target, GLenum pname, GLvoid *string); GLAPI void APIENTRY glGetVertexAttribdvARB (GLuint index, GLenum pname, GLdouble *params); GLAPI void APIENTRY glGetVertexAttribfvARB (GLuint index, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetVertexAttribivARB (GLuint index, GLenum pname, GLint *params); GLAPI void APIENTRY glGetVertexAttribPointervARB (GLuint index, GLenum pname, GLvoid* *pointer); GLAPI GLboolean APIENTRY glIsProgramARB (GLuint program); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLVERTEXATTRIB1DARBPROC) (GLuint index, GLdouble x); typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVARBPROC) (GLuint index, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB1FARBPROC) (GLuint index, GLfloat x); typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVARBPROC) (GLuint index, const GLfloat *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB1SARBPROC) (GLuint index, GLshort x); typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVARBPROC) (GLuint index, const GLshort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB2DARBPROC) (GLuint index, GLdouble x, GLdouble y); typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVARBPROC) (GLuint index, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB2FARBPROC) (GLuint index, GLfloat x, GLfloat y); typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVARBPROC) (GLuint index, const GLfloat *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB2SARBPROC) (GLuint index, GLshort x, GLshort y); typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVARBPROC) (GLuint index, const GLshort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB3DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVARBPROC) (GLuint index, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB3FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVARBPROC) (GLuint index, const GLfloat *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB3SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z); typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVARBPROC) (GLuint index, const GLshort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4NBVARBPROC) (GLuint index, const GLbyte *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4NIVARBPROC) (GLuint index, const GLint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4NSVARBPROC) (GLuint index, const GLshort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBARBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBVARBPROC) (GLuint index, const GLubyte *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUIVARBPROC) (GLuint index, const GLuint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUSVARBPROC) (GLuint index, const GLushort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4BVARBPROC) (GLuint index, const GLbyte *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVARBPROC) (GLuint index, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVARBPROC) (GLuint index, const GLfloat *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4IVARBPROC) (GLuint index, const GLint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVARBPROC) (GLuint index, const GLshort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVARBPROC) (GLuint index, const GLubyte *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4UIVARBPROC) (GLuint index, const GLuint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4USVARBPROC) (GLuint index, const GLushort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERARBPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer); typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYARBPROC) (GLuint index); typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYARBPROC) (GLuint index); typedef void (APIENTRYP PFNGLPROGRAMSTRINGARBPROC) (GLenum target, GLenum format, GLsizei len, const GLvoid *string); typedef void (APIENTRYP PFNGLBINDPROGRAMARBPROC) (GLenum target, GLuint program); typedef void (APIENTRYP PFNGLDELETEPROGRAMSARBPROC) (GLsizei n, const GLuint *programs); typedef void (APIENTRYP PFNGLGENPROGRAMSARBPROC) (GLsizei n, GLuint *programs); typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4DARBPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble *params); typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat *params); typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4DARBPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble *params); typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat *params); typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble *params); typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat *params); typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble *params); typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat *params); typedef void (APIENTRYP PFNGLGETPROGRAMIVARBPROC) (GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETPROGRAMSTRINGARBPROC) (GLenum target, GLenum pname, GLvoid *string); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVARBPROC) (GLuint index, GLenum pname, GLdouble *params); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVARBPROC) (GLuint index, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVARBPROC) (GLuint index, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVARBPROC) (GLuint index, GLenum pname, GLvoid* *pointer); typedef GLboolean (APIENTRYP PFNGLISPROGRAMARBPROC) (GLuint program); #endif #ifndef GL_ARB_fragment_program #define GL_ARB_fragment_program 1 /* All ARB_fragment_program entry points are shared with ARB_vertex_program. */ #endif #ifndef GL_ARB_vertex_buffer_object #define GL_ARB_vertex_buffer_object 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBindBufferARB (GLenum target, GLuint buffer); GLAPI void APIENTRY glDeleteBuffersARB (GLsizei n, const GLuint *buffers); GLAPI void APIENTRY glGenBuffersARB (GLsizei n, GLuint *buffers); GLAPI GLboolean APIENTRY glIsBufferARB (GLuint buffer); GLAPI void APIENTRY glBufferDataARB (GLenum target, GLsizeiptrARB size, const GLvoid *data, GLenum usage); GLAPI void APIENTRY glBufferSubDataARB (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid *data); GLAPI void APIENTRY glGetBufferSubDataARB (GLenum target, GLintptrARB offset, GLsizeiptrARB size, GLvoid *data); GLAPI GLvoid* APIENTRY glMapBufferARB (GLenum target, GLenum access); GLAPI GLboolean APIENTRY glUnmapBufferARB (GLenum target); GLAPI void APIENTRY glGetBufferParameterivARB (GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetBufferPointervARB (GLenum target, GLenum pname, GLvoid* *params); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLBINDBUFFERARBPROC) (GLenum target, GLuint buffer); typedef void (APIENTRYP PFNGLDELETEBUFFERSARBPROC) (GLsizei n, const GLuint *buffers); typedef void (APIENTRYP PFNGLGENBUFFERSARBPROC) (GLsizei n, GLuint *buffers); typedef GLboolean (APIENTRYP PFNGLISBUFFERARBPROC) (GLuint buffer); typedef void (APIENTRYP PFNGLBUFFERDATAARBPROC) (GLenum target, GLsizeiptrARB size, const GLvoid *data, GLenum usage); typedef void (APIENTRYP PFNGLBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid *data); typedef void (APIENTRYP PFNGLGETBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, GLvoid *data); typedef GLvoid* (APIENTRYP PFNGLMAPBUFFERARBPROC) (GLenum target, GLenum access); typedef GLboolean (APIENTRYP PFNGLUNMAPBUFFERARBPROC) (GLenum target); typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVARBPROC) (GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVARBPROC) (GLenum target, GLenum pname, GLvoid* *params); #endif #ifndef GL_ARB_occlusion_query #define GL_ARB_occlusion_query 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glGenQueriesARB (GLsizei n, GLuint *ids); GLAPI void APIENTRY glDeleteQueriesARB (GLsizei n, const GLuint *ids); GLAPI GLboolean APIENTRY glIsQueryARB (GLuint id); GLAPI void APIENTRY glBeginQueryARB (GLenum target, GLuint id); GLAPI void APIENTRY glEndQueryARB (GLenum target); GLAPI void APIENTRY glGetQueryivARB (GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetQueryObjectivARB (GLuint id, GLenum pname, GLint *params); GLAPI void APIENTRY glGetQueryObjectuivARB (GLuint id, GLenum pname, GLuint *params); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLGENQUERIESARBPROC) (GLsizei n, GLuint *ids); typedef void (APIENTRYP PFNGLDELETEQUERIESARBPROC) (GLsizei n, const GLuint *ids); typedef GLboolean (APIENTRYP PFNGLISQUERYARBPROC) (GLuint id); typedef void (APIENTRYP PFNGLBEGINQUERYARBPROC) (GLenum target, GLuint id); typedef void (APIENTRYP PFNGLENDQUERYARBPROC) (GLenum target); typedef void (APIENTRYP PFNGLGETQUERYIVARBPROC) (GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETQUERYOBJECTIVARBPROC) (GLuint id, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETQUERYOBJECTUIVARBPROC) (GLuint id, GLenum pname, GLuint *params); #endif #ifndef GL_ARB_shader_objects #define GL_ARB_shader_objects 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDeleteObjectARB (GLhandleARB obj); GLAPI GLhandleARB APIENTRY glGetHandleARB (GLenum pname); GLAPI void APIENTRY glDetachObjectARB (GLhandleARB containerObj, GLhandleARB attachedObj); GLAPI GLhandleARB APIENTRY glCreateShaderObjectARB (GLenum shaderType); GLAPI void APIENTRY glShaderSourceARB (GLhandleARB shaderObj, GLsizei count, const GLcharARB* *string, const GLint *length); GLAPI void APIENTRY glCompileShaderARB (GLhandleARB shaderObj); GLAPI GLhandleARB APIENTRY glCreateProgramObjectARB (void); GLAPI void APIENTRY glAttachObjectARB (GLhandleARB containerObj, GLhandleARB obj); GLAPI void APIENTRY glLinkProgramARB (GLhandleARB programObj); GLAPI void APIENTRY glUseProgramObjectARB (GLhandleARB programObj); GLAPI void APIENTRY glValidateProgramARB (GLhandleARB programObj); GLAPI void APIENTRY glUniform1fARB (GLint location, GLfloat v0); GLAPI void APIENTRY glUniform2fARB (GLint location, GLfloat v0, GLfloat v1); GLAPI void APIENTRY glUniform3fARB (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); GLAPI void APIENTRY glUniform4fARB (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); GLAPI void APIENTRY glUniform1iARB (GLint location, GLint v0); GLAPI void APIENTRY glUniform2iARB (GLint location, GLint v0, GLint v1); GLAPI void APIENTRY glUniform3iARB (GLint location, GLint v0, GLint v1, GLint v2); GLAPI void APIENTRY glUniform4iARB (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); GLAPI void APIENTRY glUniform1fvARB (GLint location, GLsizei count, const GLfloat *value); GLAPI void APIENTRY glUniform2fvARB (GLint location, GLsizei count, const GLfloat *value); GLAPI void APIENTRY glUniform3fvARB (GLint location, GLsizei count, const GLfloat *value); GLAPI void APIENTRY glUniform4fvARB (GLint location, GLsizei count, const GLfloat *value); GLAPI void APIENTRY glUniform1ivARB (GLint location, GLsizei count, const GLint *value); GLAPI void APIENTRY glUniform2ivARB (GLint location, GLsizei count, const GLint *value); GLAPI void APIENTRY glUniform3ivARB (GLint location, GLsizei count, const GLint *value); GLAPI void APIENTRY glUniform4ivARB (GLint location, GLsizei count, const GLint *value); GLAPI void APIENTRY glUniformMatrix2fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glUniformMatrix3fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glUniformMatrix4fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glGetObjectParameterfvARB (GLhandleARB obj, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetObjectParameterivARB (GLhandleARB obj, GLenum pname, GLint *params); GLAPI void APIENTRY glGetInfoLogARB (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog); GLAPI void APIENTRY glGetAttachedObjectsARB (GLhandleARB containerObj, GLsizei maxCount, GLsizei *count, GLhandleARB *obj); GLAPI GLint APIENTRY glGetUniformLocationARB (GLhandleARB programObj, const GLcharARB *name); GLAPI void APIENTRY glGetActiveUniformARB (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); GLAPI void APIENTRY glGetUniformfvARB (GLhandleARB programObj, GLint location, GLfloat *params); GLAPI void APIENTRY glGetUniformivARB (GLhandleARB programObj, GLint location, GLint *params); GLAPI void APIENTRY glGetShaderSourceARB (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *source); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLDELETEOBJECTARBPROC) (GLhandleARB obj); typedef GLhandleARB (APIENTRYP PFNGLGETHANDLEARBPROC) (GLenum pname); typedef void (APIENTRYP PFNGLDETACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB attachedObj); typedef GLhandleARB (APIENTRYP PFNGLCREATESHADEROBJECTARBPROC) (GLenum shaderType); typedef void (APIENTRYP PFNGLSHADERSOURCEARBPROC) (GLhandleARB shaderObj, GLsizei count, const GLcharARB* *string, const GLint *length); typedef void (APIENTRYP PFNGLCOMPILESHADERARBPROC) (GLhandleARB shaderObj); typedef GLhandleARB (APIENTRYP PFNGLCREATEPROGRAMOBJECTARBPROC) (void); typedef void (APIENTRYP PFNGLATTACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB obj); typedef void (APIENTRYP PFNGLLINKPROGRAMARBPROC) (GLhandleARB programObj); typedef void (APIENTRYP PFNGLUSEPROGRAMOBJECTARBPROC) (GLhandleARB programObj); typedef void (APIENTRYP PFNGLVALIDATEPROGRAMARBPROC) (GLhandleARB programObj); typedef void (APIENTRYP PFNGLUNIFORM1FARBPROC) (GLint location, GLfloat v0); typedef void (APIENTRYP PFNGLUNIFORM2FARBPROC) (GLint location, GLfloat v0, GLfloat v1); typedef void (APIENTRYP PFNGLUNIFORM3FARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); typedef void (APIENTRYP PFNGLUNIFORM4FARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); typedef void (APIENTRYP PFNGLUNIFORM1IARBPROC) (GLint location, GLint v0); typedef void (APIENTRYP PFNGLUNIFORM2IARBPROC) (GLint location, GLint v0, GLint v1); typedef void (APIENTRYP PFNGLUNIFORM3IARBPROC) (GLint location, GLint v0, GLint v1, GLint v2); typedef void (APIENTRYP PFNGLUNIFORM4IARBPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); typedef void (APIENTRYP PFNGLUNIFORM1FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); typedef void (APIENTRYP PFNGLUNIFORM2FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); typedef void (APIENTRYP PFNGLUNIFORM3FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); typedef void (APIENTRYP PFNGLUNIFORM4FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); typedef void (APIENTRYP PFNGLUNIFORM1IVARBPROC) (GLint location, GLsizei count, const GLint *value); typedef void (APIENTRYP PFNGLUNIFORM2IVARBPROC) (GLint location, GLsizei count, const GLint *value); typedef void (APIENTRYP PFNGLUNIFORM3IVARBPROC) (GLint location, GLsizei count, const GLint *value); typedef void (APIENTRYP PFNGLUNIFORM4IVARBPROC) (GLint location, GLsizei count, const GLint *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX2FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX3FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERFVARBPROC) (GLhandleARB obj, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERIVARBPROC) (GLhandleARB obj, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETINFOLOGARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog); typedef void (APIENTRYP PFNGLGETATTACHEDOBJECTSARBPROC) (GLhandleARB containerObj, GLsizei maxCount, GLsizei *count, GLhandleARB *obj); typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB *name); typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); typedef void (APIENTRYP PFNGLGETUNIFORMFVARBPROC) (GLhandleARB programObj, GLint location, GLfloat *params); typedef void (APIENTRYP PFNGLGETUNIFORMIVARBPROC) (GLhandleARB programObj, GLint location, GLint *params); typedef void (APIENTRYP PFNGLGETSHADERSOURCEARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *source); #endif #ifndef GL_ARB_vertex_shader #define GL_ARB_vertex_shader 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBindAttribLocationARB (GLhandleARB programObj, GLuint index, const GLcharARB *name); GLAPI void APIENTRY glGetActiveAttribARB (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); GLAPI GLint APIENTRY glGetAttribLocationARB (GLhandleARB programObj, const GLcharARB *name); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONARBPROC) (GLhandleARB programObj, GLuint index, const GLcharARB *name); typedef void (APIENTRYP PFNGLGETACTIVEATTRIBARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB *name); #endif #ifndef GL_ARB_fragment_shader #define GL_ARB_fragment_shader 1 #endif #ifndef GL_ARB_shading_language_100 #define GL_ARB_shading_language_100 1 #endif #ifndef GL_ARB_texture_non_power_of_two #define GL_ARB_texture_non_power_of_two 1 #endif #ifndef GL_ARB_point_sprite #define GL_ARB_point_sprite 1 #endif #ifndef GL_ARB_fragment_program_shadow #define GL_ARB_fragment_program_shadow 1 #endif #ifndef GL_ARB_draw_buffers #define GL_ARB_draw_buffers 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDrawBuffersARB (GLsizei n, const GLenum *bufs); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLDRAWBUFFERSARBPROC) (GLsizei n, const GLenum *bufs); #endif #ifndef GL_ARB_texture_rectangle #define GL_ARB_texture_rectangle 1 #endif #ifndef GL_ARB_color_buffer_float #define GL_ARB_color_buffer_float 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glClampColorARB (GLenum target, GLenum clamp); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLCLAMPCOLORARBPROC) (GLenum target, GLenum clamp); #endif #ifndef GL_ARB_half_float_pixel #define GL_ARB_half_float_pixel 1 #endif #ifndef GL_ARB_texture_float #define GL_ARB_texture_float 1 #endif #ifndef GL_ARB_pixel_buffer_object #define GL_ARB_pixel_buffer_object 1 #endif #ifndef GL_ARB_depth_buffer_float #define GL_ARB_depth_buffer_float 1 #endif #ifndef GL_ARB_draw_instanced #define GL_ARB_draw_instanced 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDrawArraysInstancedARB (GLenum mode, GLint first, GLsizei count, GLsizei primcount); GLAPI void APIENTRY glDrawElementsInstancedARB (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDARBPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount); typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDARBPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount); #endif #ifndef GL_ARB_framebuffer_object #define GL_ARB_framebuffer_object 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI GLboolean APIENTRY glIsRenderbuffer (GLuint renderbuffer); GLAPI void APIENTRY glBindRenderbuffer (GLenum target, GLuint renderbuffer); GLAPI void APIENTRY glDeleteRenderbuffers (GLsizei n, const GLuint *renderbuffers); GLAPI void APIENTRY glGenRenderbuffers (GLsizei n, GLuint *renderbuffers); GLAPI void APIENTRY glRenderbufferStorage (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); GLAPI void APIENTRY glGetRenderbufferParameteriv (GLenum target, GLenum pname, GLint *params); GLAPI GLboolean APIENTRY glIsFramebuffer (GLuint framebuffer); GLAPI void APIENTRY glBindFramebuffer (GLenum target, GLuint framebuffer); GLAPI void APIENTRY glDeleteFramebuffers (GLsizei n, const GLuint *framebuffers); GLAPI void APIENTRY glGenFramebuffers (GLsizei n, GLuint *framebuffers); GLAPI GLenum APIENTRY glCheckFramebufferStatus (GLenum target); GLAPI void APIENTRY glFramebufferTexture1D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); GLAPI void APIENTRY glFramebufferTexture2D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); GLAPI void APIENTRY glFramebufferTexture3D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); GLAPI void APIENTRY glFramebufferRenderbuffer (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); GLAPI void APIENTRY glGetFramebufferAttachmentParameteriv (GLenum target, GLenum attachment, GLenum pname, GLint *params); GLAPI void APIENTRY glGenerateMipmap (GLenum target); GLAPI void APIENTRY glBlitFramebuffer (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); GLAPI void APIENTRY glRenderbufferStorageMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); GLAPI void APIENTRY glFramebufferTextureLayer (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); #endif /* GL_GLEXT_PROTOTYPES */ typedef GLboolean (APIENTRYP PFNGLISRENDERBUFFERPROC) (GLuint renderbuffer); typedef void (APIENTRYP PFNGLBINDRENDERBUFFERPROC) (GLenum target, GLuint renderbuffer); typedef void (APIENTRYP PFNGLDELETERENDERBUFFERSPROC) (GLsizei n, const GLuint *renderbuffers); typedef void (APIENTRYP PFNGLGENRENDERBUFFERSPROC) (GLsizei n, GLuint *renderbuffers); typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); typedef GLboolean (APIENTRYP PFNGLISFRAMEBUFFERPROC) (GLuint framebuffer); typedef void (APIENTRYP PFNGLBINDFRAMEBUFFERPROC) (GLenum target, GLuint framebuffer); typedef void (APIENTRYP PFNGLDELETEFRAMEBUFFERSPROC) (GLsizei n, const GLuint *framebuffers); typedef void (APIENTRYP PFNGLGENFRAMEBUFFERSPROC) (GLsizei n, GLuint *framebuffers); typedef GLenum (APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSPROC) (GLenum target); typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE1DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); typedef void (APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFERPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); typedef void (APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC) (GLenum target, GLenum attachment, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGENERATEMIPMAPPROC) (GLenum target); typedef void (APIENTRYP PFNGLBLITFRAMEBUFFERPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYERPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); #endif #ifndef GL_ARB_framebuffer_sRGB #define GL_ARB_framebuffer_sRGB 1 #endif #ifndef GL_ARB_geometry_shader4 #define GL_ARB_geometry_shader4 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glProgramParameteriARB (GLuint program, GLenum pname, GLint value); GLAPI void APIENTRY glFramebufferTextureARB (GLenum target, GLenum attachment, GLuint texture, GLint level); GLAPI void APIENTRY glFramebufferTextureLayerARB (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); GLAPI void APIENTRY glFramebufferTextureFaceARB (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIARBPROC) (GLuint program, GLenum pname, GLint value); typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level); typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYERARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREFACEARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); #endif #ifndef GL_ARB_half_float_vertex #define GL_ARB_half_float_vertex 1 #endif #ifndef GL_ARB_instanced_arrays #define GL_ARB_instanced_arrays 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glVertexAttribDivisorARB (GLuint index, GLuint divisor); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLVERTEXATTRIBDIVISORARBPROC) (GLuint index, GLuint divisor); #endif #ifndef GL_ARB_map_buffer_range #define GL_ARB_map_buffer_range 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI GLvoid* APIENTRY glMapBufferRange (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); GLAPI void APIENTRY glFlushMappedBufferRange (GLenum target, GLintptr offset, GLsizeiptr length); #endif /* GL_GLEXT_PROTOTYPES */ typedef GLvoid* (APIENTRYP PFNGLMAPBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); typedef void (APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length); #endif #ifndef GL_ARB_texture_buffer_object #define GL_ARB_texture_buffer_object 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glTexBufferARB (GLenum target, GLenum internalformat, GLuint buffer); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLTEXBUFFERARBPROC) (GLenum target, GLenum internalformat, GLuint buffer); #endif #ifndef GL_ARB_texture_compression_rgtc #define GL_ARB_texture_compression_rgtc 1 #endif #ifndef GL_ARB_texture_rg #define GL_ARB_texture_rg 1 #endif #ifndef GL_ARB_vertex_array_object #define GL_ARB_vertex_array_object 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBindVertexArray (GLuint array); GLAPI void APIENTRY glDeleteVertexArrays (GLsizei n, const GLuint *arrays); GLAPI void APIENTRY glGenVertexArrays (GLsizei n, GLuint *arrays); GLAPI GLboolean APIENTRY glIsVertexArray (GLuint array); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLBINDVERTEXARRAYPROC) (GLuint array); typedef void (APIENTRYP PFNGLDELETEVERTEXARRAYSPROC) (GLsizei n, const GLuint *arrays); typedef void (APIENTRYP PFNGLGENVERTEXARRAYSPROC) (GLsizei n, GLuint *arrays); typedef GLboolean (APIENTRYP PFNGLISVERTEXARRAYPROC) (GLuint array); #endif #ifndef GL_ARB_uniform_buffer_object #define GL_ARB_uniform_buffer_object 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glGetUniformIndices (GLuint program, GLsizei uniformCount, const GLchar* const *uniformNames, GLuint *uniformIndices); GLAPI void APIENTRY glGetActiveUniformsiv (GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params); GLAPI void APIENTRY glGetActiveUniformName (GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformName); GLAPI GLuint APIENTRY glGetUniformBlockIndex (GLuint program, const GLchar *uniformBlockName); GLAPI void APIENTRY glGetActiveUniformBlockiv (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params); GLAPI void APIENTRY glGetActiveUniformBlockName (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName); GLAPI void APIENTRY glUniformBlockBinding (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLGETUNIFORMINDICESPROC) (GLuint program, GLsizei uniformCount, const GLchar* const *uniformNames, GLuint *uniformIndices); typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMSIVPROC) (GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMNAMEPROC) (GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformName); typedef GLuint (APIENTRYP PFNGLGETUNIFORMBLOCKINDEXPROC) (GLuint program, const GLchar *uniformBlockName); typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKIVPROC) (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC) (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName); typedef void (APIENTRYP PFNGLUNIFORMBLOCKBINDINGPROC) (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding); #endif #ifndef GL_ARB_compatibility #define GL_ARB_compatibility 1 #endif #ifndef GL_ARB_copy_buffer #define GL_ARB_copy_buffer 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glCopyBufferSubData (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLCOPYBUFFERSUBDATAPROC) (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); #endif #ifndef GL_ARB_shader_texture_lod #define GL_ARB_shader_texture_lod 1 #endif #ifndef GL_ARB_depth_clamp #define GL_ARB_depth_clamp 1 #endif #ifndef GL_ARB_draw_elements_base_vertex #define GL_ARB_draw_elements_base_vertex 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDrawElementsBaseVertex (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLint basevertex); GLAPI void APIENTRY glDrawRangeElementsBaseVertex (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices, GLint basevertex); GLAPI void APIENTRY glDrawElementsInstancedBaseVertex (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei instancecount, GLint basevertex); GLAPI void APIENTRY glMultiDrawElementsBaseVertex (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* const *indices, GLsizei drawcount, const GLint *basevertex); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLDRAWELEMENTSBASEVERTEXPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLint basevertex); typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices, GLint basevertex); typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei instancecount, GLint basevertex); typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* const *indices, GLsizei drawcount, const GLint *basevertex); #endif #ifndef GL_ARB_fragment_coord_conventions #define GL_ARB_fragment_coord_conventions 1 #endif #ifndef GL_ARB_provoking_vertex #define GL_ARB_provoking_vertex 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glProvokingVertex (GLenum mode); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLPROVOKINGVERTEXPROC) (GLenum mode); #endif #ifndef GL_ARB_seamless_cube_map #define GL_ARB_seamless_cube_map 1 #endif #ifndef GL_ARB_sync #define GL_ARB_sync 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI GLsync APIENTRY glFenceSync (GLenum condition, GLbitfield flags); GLAPI GLboolean APIENTRY glIsSync (GLsync sync); GLAPI void APIENTRY glDeleteSync (GLsync sync); GLAPI GLenum APIENTRY glClientWaitSync (GLsync sync, GLbitfield flags, GLuint64 timeout); GLAPI void APIENTRY glWaitSync (GLsync sync, GLbitfield flags, GLuint64 timeout); GLAPI void APIENTRY glGetInteger64v (GLenum pname, GLint64 *params); GLAPI void APIENTRY glGetSynciv (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); #endif /* GL_GLEXT_PROTOTYPES */ typedef GLsync (APIENTRYP PFNGLFENCESYNCPROC) (GLenum condition, GLbitfield flags); typedef GLboolean (APIENTRYP PFNGLISSYNCPROC) (GLsync sync); typedef void (APIENTRYP PFNGLDELETESYNCPROC) (GLsync sync); typedef GLenum (APIENTRYP PFNGLCLIENTWAITSYNCPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout); typedef void (APIENTRYP PFNGLWAITSYNCPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout); typedef void (APIENTRYP PFNGLGETINTEGER64VPROC) (GLenum pname, GLint64 *params); typedef void (APIENTRYP PFNGLGETSYNCIVPROC) (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); #endif #ifndef GL_ARB_texture_multisample #define GL_ARB_texture_multisample 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glTexImage2DMultisample (GLenum target, GLsizei samples, GLint internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); GLAPI void APIENTRY glTexImage3DMultisample (GLenum target, GLsizei samples, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); GLAPI void APIENTRY glGetMultisamplefv (GLenum pname, GLuint index, GLfloat *val); GLAPI void APIENTRY glSampleMaski (GLuint index, GLbitfield mask); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLTEXIMAGE2DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLint internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); typedef void (APIENTRYP PFNGLTEXIMAGE3DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); typedef void (APIENTRYP PFNGLGETMULTISAMPLEFVPROC) (GLenum pname, GLuint index, GLfloat *val); typedef void (APIENTRYP PFNGLSAMPLEMASKIPROC) (GLuint index, GLbitfield mask); #endif #ifndef GL_ARB_vertex_array_bgra #define GL_ARB_vertex_array_bgra 1 #endif #ifndef GL_ARB_draw_buffers_blend #define GL_ARB_draw_buffers_blend 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBlendEquationiARB (GLuint buf, GLenum mode); GLAPI void APIENTRY glBlendEquationSeparateiARB (GLuint buf, GLenum modeRGB, GLenum modeAlpha); GLAPI void APIENTRY glBlendFunciARB (GLuint buf, GLenum src, GLenum dst); GLAPI void APIENTRY glBlendFuncSeparateiARB (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLBLENDEQUATIONIARBPROC) (GLuint buf, GLenum mode); typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEIARBPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha); typedef void (APIENTRYP PFNGLBLENDFUNCIARBPROC) (GLuint buf, GLenum src, GLenum dst); typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEIARBPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); #endif #ifndef GL_ARB_sample_shading #define GL_ARB_sample_shading 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glMinSampleShadingARB (GLfloat value); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLMINSAMPLESHADINGARBPROC) (GLfloat value); #endif #ifndef GL_ARB_texture_cube_map_array #define GL_ARB_texture_cube_map_array 1 #endif #ifndef GL_ARB_texture_gather #define GL_ARB_texture_gather 1 #endif #ifndef GL_ARB_texture_query_lod #define GL_ARB_texture_query_lod 1 #endif #ifndef GL_ARB_shading_language_include #define GL_ARB_shading_language_include 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glNamedStringARB (GLenum type, GLint namelen, const GLchar *name, GLint stringlen, const GLchar *string); GLAPI void APIENTRY glDeleteNamedStringARB (GLint namelen, const GLchar *name); GLAPI void APIENTRY glCompileShaderIncludeARB (GLuint shader, GLsizei count, const GLchar* *path, const GLint *length); GLAPI GLboolean APIENTRY glIsNamedStringARB (GLint namelen, const GLchar *name); GLAPI void APIENTRY glGetNamedStringARB (GLint namelen, const GLchar *name, GLsizei bufSize, GLint *stringlen, GLchar *string); GLAPI void APIENTRY glGetNamedStringivARB (GLint namelen, const GLchar *name, GLenum pname, GLint *params); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLNAMEDSTRINGARBPROC) (GLenum type, GLint namelen, const GLchar *name, GLint stringlen, const GLchar *string); typedef void (APIENTRYP PFNGLDELETENAMEDSTRINGARBPROC) (GLint namelen, const GLchar *name); typedef void (APIENTRYP PFNGLCOMPILESHADERINCLUDEARBPROC) (GLuint shader, GLsizei count, const GLchar* *path, const GLint *length); typedef GLboolean (APIENTRYP PFNGLISNAMEDSTRINGARBPROC) (GLint namelen, const GLchar *name); typedef void (APIENTRYP PFNGLGETNAMEDSTRINGARBPROC) (GLint namelen, const GLchar *name, GLsizei bufSize, GLint *stringlen, GLchar *string); typedef void (APIENTRYP PFNGLGETNAMEDSTRINGIVARBPROC) (GLint namelen, const GLchar *name, GLenum pname, GLint *params); #endif #ifndef GL_ARB_texture_compression_bptc #define GL_ARB_texture_compression_bptc 1 #endif #ifndef GL_ARB_blend_func_extended #define GL_ARB_blend_func_extended 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBindFragDataLocationIndexed (GLuint program, GLuint colorNumber, GLuint index, const GLchar *name); GLAPI GLint APIENTRY glGetFragDataIndex (GLuint program, const GLchar *name); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONINDEXEDPROC) (GLuint program, GLuint colorNumber, GLuint index, const GLchar *name); typedef GLint (APIENTRYP PFNGLGETFRAGDATAINDEXPROC) (GLuint program, const GLchar *name); #endif #ifndef GL_ARB_explicit_attrib_location #define GL_ARB_explicit_attrib_location 1 #endif #ifndef GL_ARB_occlusion_query2 #define GL_ARB_occlusion_query2 1 #endif #ifndef GL_ARB_sampler_objects #define GL_ARB_sampler_objects 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glGenSamplers (GLsizei count, GLuint *samplers); GLAPI void APIENTRY glDeleteSamplers (GLsizei count, const GLuint *samplers); GLAPI GLboolean APIENTRY glIsSampler (GLuint sampler); GLAPI void APIENTRY glBindSampler (GLuint unit, GLuint sampler); GLAPI void APIENTRY glSamplerParameteri (GLuint sampler, GLenum pname, GLint param); GLAPI void APIENTRY glSamplerParameteriv (GLuint sampler, GLenum pname, const GLint *param); GLAPI void APIENTRY glSamplerParameterf (GLuint sampler, GLenum pname, GLfloat param); GLAPI void APIENTRY glSamplerParameterfv (GLuint sampler, GLenum pname, const GLfloat *param); GLAPI void APIENTRY glSamplerParameterIiv (GLuint sampler, GLenum pname, const GLint *param); GLAPI void APIENTRY glSamplerParameterIuiv (GLuint sampler, GLenum pname, const GLuint *param); GLAPI void APIENTRY glGetSamplerParameteriv (GLuint sampler, GLenum pname, GLint *params); GLAPI void APIENTRY glGetSamplerParameterIiv (GLuint sampler, GLenum pname, GLint *params); GLAPI void APIENTRY glGetSamplerParameterfv (GLuint sampler, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetSamplerParameterIuiv (GLuint sampler, GLenum pname, GLuint *params); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLGENSAMPLERSPROC) (GLsizei count, GLuint *samplers); typedef void (APIENTRYP PFNGLDELETESAMPLERSPROC) (GLsizei count, const GLuint *samplers); typedef GLboolean (APIENTRYP PFNGLISSAMPLERPROC) (GLuint sampler); typedef void (APIENTRYP PFNGLBINDSAMPLERPROC) (GLuint unit, GLuint sampler); typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIPROC) (GLuint sampler, GLenum pname, GLint param); typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIVPROC) (GLuint sampler, GLenum pname, const GLint *param); typedef void (APIENTRYP PFNGLSAMPLERPARAMETERFPROC) (GLuint sampler, GLenum pname, GLfloat param); typedef void (APIENTRYP PFNGLSAMPLERPARAMETERFVPROC) (GLuint sampler, GLenum pname, const GLfloat *param); typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIIVPROC) (GLuint sampler, GLenum pname, const GLint *param); typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIUIVPROC) (GLuint sampler, GLenum pname, const GLuint *param); typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIVPROC) (GLuint sampler, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIIVPROC) (GLuint sampler, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERFVPROC) (GLuint sampler, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIUIVPROC) (GLuint sampler, GLenum pname, GLuint *params); #endif #ifndef GL_ARB_shader_bit_encoding #define GL_ARB_shader_bit_encoding 1 #endif #ifndef GL_ARB_texture_rgb10_a2ui #define GL_ARB_texture_rgb10_a2ui 1 #endif #ifndef GL_ARB_texture_swizzle #define GL_ARB_texture_swizzle 1 #endif #ifndef GL_ARB_timer_query #define GL_ARB_timer_query 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glQueryCounter (GLuint id, GLenum target); GLAPI void APIENTRY glGetQueryObjecti64v (GLuint id, GLenum pname, GLint64 *params); GLAPI void APIENTRY glGetQueryObjectui64v (GLuint id, GLenum pname, GLuint64 *params); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLQUERYCOUNTERPROC) (GLuint id, GLenum target); typedef void (APIENTRYP PFNGLGETQUERYOBJECTI64VPROC) (GLuint id, GLenum pname, GLint64 *params); typedef void (APIENTRYP PFNGLGETQUERYOBJECTUI64VPROC) (GLuint id, GLenum pname, GLuint64 *params); #endif #ifndef GL_ARB_vertex_type_2_10_10_10_rev #define GL_ARB_vertex_type_2_10_10_10_rev 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glVertexP2ui (GLenum type, GLuint value); GLAPI void APIENTRY glVertexP2uiv (GLenum type, const GLuint *value); GLAPI void APIENTRY glVertexP3ui (GLenum type, GLuint value); GLAPI void APIENTRY glVertexP3uiv (GLenum type, const GLuint *value); GLAPI void APIENTRY glVertexP4ui (GLenum type, GLuint value); GLAPI void APIENTRY glVertexP4uiv (GLenum type, const GLuint *value); GLAPI void APIENTRY glTexCoordP1ui (GLenum type, GLuint coords); GLAPI void APIENTRY glTexCoordP1uiv (GLenum type, const GLuint *coords); GLAPI void APIENTRY glTexCoordP2ui (GLenum type, GLuint coords); GLAPI void APIENTRY glTexCoordP2uiv (GLenum type, const GLuint *coords); GLAPI void APIENTRY glTexCoordP3ui (GLenum type, GLuint coords); GLAPI void APIENTRY glTexCoordP3uiv (GLenum type, const GLuint *coords); GLAPI void APIENTRY glTexCoordP4ui (GLenum type, GLuint coords); GLAPI void APIENTRY glTexCoordP4uiv (GLenum type, const GLuint *coords); GLAPI void APIENTRY glMultiTexCoordP1ui (GLenum texture, GLenum type, GLuint coords); GLAPI void APIENTRY glMultiTexCoordP1uiv (GLenum texture, GLenum type, const GLuint *coords); GLAPI void APIENTRY glMultiTexCoordP2ui (GLenum texture, GLenum type, GLuint coords); GLAPI void APIENTRY glMultiTexCoordP2uiv (GLenum texture, GLenum type, const GLuint *coords); GLAPI void APIENTRY glMultiTexCoordP3ui (GLenum texture, GLenum type, GLuint coords); GLAPI void APIENTRY glMultiTexCoordP3uiv (GLenum texture, GLenum type, const GLuint *coords); GLAPI void APIENTRY glMultiTexCoordP4ui (GLenum texture, GLenum type, GLuint coords); GLAPI void APIENTRY glMultiTexCoordP4uiv (GLenum texture, GLenum type, const GLuint *coords); GLAPI void APIENTRY glNormalP3ui (GLenum type, GLuint coords); GLAPI void APIENTRY glNormalP3uiv (GLenum type, const GLuint *coords); GLAPI void APIENTRY glColorP3ui (GLenum type, GLuint color); GLAPI void APIENTRY glColorP3uiv (GLenum type, const GLuint *color); GLAPI void APIENTRY glColorP4ui (GLenum type, GLuint color); GLAPI void APIENTRY glColorP4uiv (GLenum type, const GLuint *color); GLAPI void APIENTRY glSecondaryColorP3ui (GLenum type, GLuint color); GLAPI void APIENTRY glSecondaryColorP3uiv (GLenum type, const GLuint *color); GLAPI void APIENTRY glVertexAttribP1ui (GLuint index, GLenum type, GLboolean normalized, GLuint value); GLAPI void APIENTRY glVertexAttribP1uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); GLAPI void APIENTRY glVertexAttribP2ui (GLuint index, GLenum type, GLboolean normalized, GLuint value); GLAPI void APIENTRY glVertexAttribP2uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); GLAPI void APIENTRY glVertexAttribP3ui (GLuint index, GLenum type, GLboolean normalized, GLuint value); GLAPI void APIENTRY glVertexAttribP3uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); GLAPI void APIENTRY glVertexAttribP4ui (GLuint index, GLenum type, GLboolean normalized, GLuint value); GLAPI void APIENTRY glVertexAttribP4uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLVERTEXP2UIPROC) (GLenum type, GLuint value); typedef void (APIENTRYP PFNGLVERTEXP2UIVPROC) (GLenum type, const GLuint *value); typedef void (APIENTRYP PFNGLVERTEXP3UIPROC) (GLenum type, GLuint value); typedef void (APIENTRYP PFNGLVERTEXP3UIVPROC) (GLenum type, const GLuint *value); typedef void (APIENTRYP PFNGLVERTEXP4UIPROC) (GLenum type, GLuint value); typedef void (APIENTRYP PFNGLVERTEXP4UIVPROC) (GLenum type, const GLuint *value); typedef void (APIENTRYP PFNGLTEXCOORDP1UIPROC) (GLenum type, GLuint coords); typedef void (APIENTRYP PFNGLTEXCOORDP1UIVPROC) (GLenum type, const GLuint *coords); typedef void (APIENTRYP PFNGLTEXCOORDP2UIPROC) (GLenum type, GLuint coords); typedef void (APIENTRYP PFNGLTEXCOORDP2UIVPROC) (GLenum type, const GLuint *coords); typedef void (APIENTRYP PFNGLTEXCOORDP3UIPROC) (GLenum type, GLuint coords); typedef void (APIENTRYP PFNGLTEXCOORDP3UIVPROC) (GLenum type, const GLuint *coords); typedef void (APIENTRYP PFNGLTEXCOORDP4UIPROC) (GLenum type, GLuint coords); typedef void (APIENTRYP PFNGLTEXCOORDP4UIVPROC) (GLenum type, const GLuint *coords); typedef void (APIENTRYP PFNGLMULTITEXCOORDP1UIPROC) (GLenum texture, GLenum type, GLuint coords); typedef void (APIENTRYP PFNGLMULTITEXCOORDP1UIVPROC) (GLenum texture, GLenum type, const GLuint *coords); typedef void (APIENTRYP PFNGLMULTITEXCOORDP2UIPROC) (GLenum texture, GLenum type, GLuint coords); typedef void (APIENTRYP PFNGLMULTITEXCOORDP2UIVPROC) (GLenum texture, GLenum type, const GLuint *coords); typedef void (APIENTRYP PFNGLMULTITEXCOORDP3UIPROC) (GLenum texture, GLenum type, GLuint coords); typedef void (APIENTRYP PFNGLMULTITEXCOORDP3UIVPROC) (GLenum texture, GLenum type, const GLuint *coords); typedef void (APIENTRYP PFNGLMULTITEXCOORDP4UIPROC) (GLenum texture, GLenum type, GLuint coords); typedef void (APIENTRYP PFNGLMULTITEXCOORDP4UIVPROC) (GLenum texture, GLenum type, const GLuint *coords); typedef void (APIENTRYP PFNGLNORMALP3UIPROC) (GLenum type, GLuint coords); typedef void (APIENTRYP PFNGLNORMALP3UIVPROC) (GLenum type, const GLuint *coords); typedef void (APIENTRYP PFNGLCOLORP3UIPROC) (GLenum type, GLuint color); typedef void (APIENTRYP PFNGLCOLORP3UIVPROC) (GLenum type, const GLuint *color); typedef void (APIENTRYP PFNGLCOLORP4UIPROC) (GLenum type, GLuint color); typedef void (APIENTRYP PFNGLCOLORP4UIVPROC) (GLenum type, const GLuint *color); typedef void (APIENTRYP PFNGLSECONDARYCOLORP3UIPROC) (GLenum type, GLuint color); typedef void (APIENTRYP PFNGLSECONDARYCOLORP3UIVPROC) (GLenum type, const GLuint *color); typedef void (APIENTRYP PFNGLVERTEXATTRIBP1UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); typedef void (APIENTRYP PFNGLVERTEXATTRIBP1UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); typedef void (APIENTRYP PFNGLVERTEXATTRIBP2UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); typedef void (APIENTRYP PFNGLVERTEXATTRIBP2UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); typedef void (APIENTRYP PFNGLVERTEXATTRIBP3UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); typedef void (APIENTRYP PFNGLVERTEXATTRIBP3UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); typedef void (APIENTRYP PFNGLVERTEXATTRIBP4UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); typedef void (APIENTRYP PFNGLVERTEXATTRIBP4UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); #endif #ifndef GL_ARB_draw_indirect #define GL_ARB_draw_indirect 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDrawArraysIndirect (GLenum mode, const GLvoid *indirect); GLAPI void APIENTRY glDrawElementsIndirect (GLenum mode, GLenum type, const GLvoid *indirect); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLDRAWARRAYSINDIRECTPROC) (GLenum mode, const GLvoid *indirect); typedef void (APIENTRYP PFNGLDRAWELEMENTSINDIRECTPROC) (GLenum mode, GLenum type, const GLvoid *indirect); #endif #ifndef GL_ARB_gpu_shader5 #define GL_ARB_gpu_shader5 1 #endif #ifndef GL_ARB_gpu_shader_fp64 #define GL_ARB_gpu_shader_fp64 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glUniform1d (GLint location, GLdouble x); GLAPI void APIENTRY glUniform2d (GLint location, GLdouble x, GLdouble y); GLAPI void APIENTRY glUniform3d (GLint location, GLdouble x, GLdouble y, GLdouble z); GLAPI void APIENTRY glUniform4d (GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLAPI void APIENTRY glUniform1dv (GLint location, GLsizei count, const GLdouble *value); GLAPI void APIENTRY glUniform2dv (GLint location, GLsizei count, const GLdouble *value); GLAPI void APIENTRY glUniform3dv (GLint location, GLsizei count, const GLdouble *value); GLAPI void APIENTRY glUniform4dv (GLint location, GLsizei count, const GLdouble *value); GLAPI void APIENTRY glUniformMatrix2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glUniformMatrix3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glUniformMatrix4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glUniformMatrix2x3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glUniformMatrix2x4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glUniformMatrix3x2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glUniformMatrix3x4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glUniformMatrix4x2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glUniformMatrix4x3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glGetUniformdv (GLuint program, GLint location, GLdouble *params); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLUNIFORM1DPROC) (GLint location, GLdouble x); typedef void (APIENTRYP PFNGLUNIFORM2DPROC) (GLint location, GLdouble x, GLdouble y); typedef void (APIENTRYP PFNGLUNIFORM3DPROC) (GLint location, GLdouble x, GLdouble y, GLdouble z); typedef void (APIENTRYP PFNGLUNIFORM4DPROC) (GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); typedef void (APIENTRYP PFNGLUNIFORM1DVPROC) (GLint location, GLsizei count, const GLdouble *value); typedef void (APIENTRYP PFNGLUNIFORM2DVPROC) (GLint location, GLsizei count, const GLdouble *value); typedef void (APIENTRYP PFNGLUNIFORM3DVPROC) (GLint location, GLsizei count, const GLdouble *value); typedef void (APIENTRYP PFNGLUNIFORM4DVPROC) (GLint location, GLsizei count, const GLdouble *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLGETUNIFORMDVPROC) (GLuint program, GLint location, GLdouble *params); #endif #ifndef GL_ARB_shader_subroutine #define GL_ARB_shader_subroutine 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI GLint APIENTRY glGetSubroutineUniformLocation (GLuint program, GLenum shadertype, const GLchar *name); GLAPI GLuint APIENTRY glGetSubroutineIndex (GLuint program, GLenum shadertype, const GLchar *name); GLAPI void APIENTRY glGetActiveSubroutineUniformiv (GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint *values); GLAPI void APIENTRY glGetActiveSubroutineUniformName (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name); GLAPI void APIENTRY glGetActiveSubroutineName (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name); GLAPI void APIENTRY glUniformSubroutinesuiv (GLenum shadertype, GLsizei count, const GLuint *indices); GLAPI void APIENTRY glGetUniformSubroutineuiv (GLenum shadertype, GLint location, GLuint *params); GLAPI void APIENTRY glGetProgramStageiv (GLuint program, GLenum shadertype, GLenum pname, GLint *values); #endif /* GL_GLEXT_PROTOTYPES */ typedef GLint (APIENTRYP PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC) (GLuint program, GLenum shadertype, const GLchar *name); typedef GLuint (APIENTRYP PFNGLGETSUBROUTINEINDEXPROC) (GLuint program, GLenum shadertype, const GLchar *name); typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC) (GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint *values); typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC) (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name); typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINENAMEPROC) (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name); typedef void (APIENTRYP PFNGLUNIFORMSUBROUTINESUIVPROC) (GLenum shadertype, GLsizei count, const GLuint *indices); typedef void (APIENTRYP PFNGLGETUNIFORMSUBROUTINEUIVPROC) (GLenum shadertype, GLint location, GLuint *params); typedef void (APIENTRYP PFNGLGETPROGRAMSTAGEIVPROC) (GLuint program, GLenum shadertype, GLenum pname, GLint *values); #endif #ifndef GL_ARB_tessellation_shader #define GL_ARB_tessellation_shader 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glPatchParameteri (GLenum pname, GLint value); GLAPI void APIENTRY glPatchParameterfv (GLenum pname, const GLfloat *values); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLPATCHPARAMETERIPROC) (GLenum pname, GLint value); typedef void (APIENTRYP PFNGLPATCHPARAMETERFVPROC) (GLenum pname, const GLfloat *values); #endif #ifndef GL_ARB_texture_buffer_object_rgb32 #define GL_ARB_texture_buffer_object_rgb32 1 #endif #ifndef GL_ARB_transform_feedback2 #define GL_ARB_transform_feedback2 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBindTransformFeedback (GLenum target, GLuint id); GLAPI void APIENTRY glDeleteTransformFeedbacks (GLsizei n, const GLuint *ids); GLAPI void APIENTRY glGenTransformFeedbacks (GLsizei n, GLuint *ids); GLAPI GLboolean APIENTRY glIsTransformFeedback (GLuint id); GLAPI void APIENTRY glPauseTransformFeedback (void); GLAPI void APIENTRY glResumeTransformFeedback (void); GLAPI void APIENTRY glDrawTransformFeedback (GLenum mode, GLuint id); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLBINDTRANSFORMFEEDBACKPROC) (GLenum target, GLuint id); typedef void (APIENTRYP PFNGLDELETETRANSFORMFEEDBACKSPROC) (GLsizei n, const GLuint *ids); typedef void (APIENTRYP PFNGLGENTRANSFORMFEEDBACKSPROC) (GLsizei n, GLuint *ids); typedef GLboolean (APIENTRYP PFNGLISTRANSFORMFEEDBACKPROC) (GLuint id); typedef void (APIENTRYP PFNGLPAUSETRANSFORMFEEDBACKPROC) (void); typedef void (APIENTRYP PFNGLRESUMETRANSFORMFEEDBACKPROC) (void); typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKPROC) (GLenum mode, GLuint id); #endif #ifndef GL_ARB_transform_feedback3 #define GL_ARB_transform_feedback3 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDrawTransformFeedbackStream (GLenum mode, GLuint id, GLuint stream); GLAPI void APIENTRY glBeginQueryIndexed (GLenum target, GLuint index, GLuint id); GLAPI void APIENTRY glEndQueryIndexed (GLenum target, GLuint index); GLAPI void APIENTRY glGetQueryIndexediv (GLenum target, GLuint index, GLenum pname, GLint *params); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC) (GLenum mode, GLuint id, GLuint stream); typedef void (APIENTRYP PFNGLBEGINQUERYINDEXEDPROC) (GLenum target, GLuint index, GLuint id); typedef void (APIENTRYP PFNGLENDQUERYINDEXEDPROC) (GLenum target, GLuint index); typedef void (APIENTRYP PFNGLGETQUERYINDEXEDIVPROC) (GLenum target, GLuint index, GLenum pname, GLint *params); #endif #ifndef GL_ARB_ES2_compatibility #define GL_ARB_ES2_compatibility 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glReleaseShaderCompiler (void); GLAPI void APIENTRY glShaderBinary (GLsizei count, const GLuint *shaders, GLenum binaryformat, const GLvoid *binary, GLsizei length); GLAPI void APIENTRY glGetShaderPrecisionFormat (GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision); GLAPI void APIENTRY glDepthRangef (GLfloat n, GLfloat f); GLAPI void APIENTRY glClearDepthf (GLfloat d); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLRELEASESHADERCOMPILERPROC) (void); typedef void (APIENTRYP PFNGLSHADERBINARYPROC) (GLsizei count, const GLuint *shaders, GLenum binaryformat, const GLvoid *binary, GLsizei length); typedef void (APIENTRYP PFNGLGETSHADERPRECISIONFORMATPROC) (GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision); typedef void (APIENTRYP PFNGLDEPTHRANGEFPROC) (GLfloat n, GLfloat f); typedef void (APIENTRYP PFNGLCLEARDEPTHFPROC) (GLfloat d); #endif #ifndef GL_ARB_get_program_binary #define GL_ARB_get_program_binary 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glGetProgramBinary (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, GLvoid *binary); GLAPI void APIENTRY glProgramBinary (GLuint program, GLenum binaryFormat, const GLvoid *binary, GLsizei length); GLAPI void APIENTRY glProgramParameteri (GLuint program, GLenum pname, GLint value); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLGETPROGRAMBINARYPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, GLvoid *binary); typedef void (APIENTRYP PFNGLPROGRAMBINARYPROC) (GLuint program, GLenum binaryFormat, const GLvoid *binary, GLsizei length); typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIPROC) (GLuint program, GLenum pname, GLint value); #endif #ifndef GL_ARB_separate_shader_objects #define GL_ARB_separate_shader_objects 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glUseProgramStages (GLuint pipeline, GLbitfield stages, GLuint program); GLAPI void APIENTRY glActiveShaderProgram (GLuint pipeline, GLuint program); GLAPI GLuint APIENTRY glCreateShaderProgramv (GLenum type, GLsizei count, const GLchar* const *strings); GLAPI void APIENTRY glBindProgramPipeline (GLuint pipeline); GLAPI void APIENTRY glDeleteProgramPipelines (GLsizei n, const GLuint *pipelines); GLAPI void APIENTRY glGenProgramPipelines (GLsizei n, GLuint *pipelines); GLAPI GLboolean APIENTRY glIsProgramPipeline (GLuint pipeline); GLAPI void APIENTRY glGetProgramPipelineiv (GLuint pipeline, GLenum pname, GLint *params); GLAPI void APIENTRY glProgramUniform1i (GLuint program, GLint location, GLint v0); GLAPI void APIENTRY glProgramUniform1iv (GLuint program, GLint location, GLsizei count, const GLint *value); GLAPI void APIENTRY glProgramUniform1f (GLuint program, GLint location, GLfloat v0); GLAPI void APIENTRY glProgramUniform1fv (GLuint program, GLint location, GLsizei count, const GLfloat *value); GLAPI void APIENTRY glProgramUniform1d (GLuint program, GLint location, GLdouble v0); GLAPI void APIENTRY glProgramUniform1dv (GLuint program, GLint location, GLsizei count, const GLdouble *value); GLAPI void APIENTRY glProgramUniform1ui (GLuint program, GLint location, GLuint v0); GLAPI void APIENTRY glProgramUniform1uiv (GLuint program, GLint location, GLsizei count, const GLuint *value); GLAPI void APIENTRY glProgramUniform2i (GLuint program, GLint location, GLint v0, GLint v1); GLAPI void APIENTRY glProgramUniform2iv (GLuint program, GLint location, GLsizei count, const GLint *value); GLAPI void APIENTRY glProgramUniform2f (GLuint program, GLint location, GLfloat v0, GLfloat v1); GLAPI void APIENTRY glProgramUniform2fv (GLuint program, GLint location, GLsizei count, const GLfloat *value); GLAPI void APIENTRY glProgramUniform2d (GLuint program, GLint location, GLdouble v0, GLdouble v1); GLAPI void APIENTRY glProgramUniform2dv (GLuint program, GLint location, GLsizei count, const GLdouble *value); GLAPI void APIENTRY glProgramUniform2ui (GLuint program, GLint location, GLuint v0, GLuint v1); GLAPI void APIENTRY glProgramUniform2uiv (GLuint program, GLint location, GLsizei count, const GLuint *value); GLAPI void APIENTRY glProgramUniform3i (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); GLAPI void APIENTRY glProgramUniform3iv (GLuint program, GLint location, GLsizei count, const GLint *value); GLAPI void APIENTRY glProgramUniform3f (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); GLAPI void APIENTRY glProgramUniform3fv (GLuint program, GLint location, GLsizei count, const GLfloat *value); GLAPI void APIENTRY glProgramUniform3d (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2); GLAPI void APIENTRY glProgramUniform3dv (GLuint program, GLint location, GLsizei count, const GLdouble *value); GLAPI void APIENTRY glProgramUniform3ui (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); GLAPI void APIENTRY glProgramUniform3uiv (GLuint program, GLint location, GLsizei count, const GLuint *value); GLAPI void APIENTRY glProgramUniform4i (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); GLAPI void APIENTRY glProgramUniform4iv (GLuint program, GLint location, GLsizei count, const GLint *value); GLAPI void APIENTRY glProgramUniform4f (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); GLAPI void APIENTRY glProgramUniform4fv (GLuint program, GLint location, GLsizei count, const GLfloat *value); GLAPI void APIENTRY glProgramUniform4d (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3); GLAPI void APIENTRY glProgramUniform4dv (GLuint program, GLint location, GLsizei count, const GLdouble *value); GLAPI void APIENTRY glProgramUniform4ui (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); GLAPI void APIENTRY glProgramUniform4uiv (GLuint program, GLint location, GLsizei count, const GLuint *value); GLAPI void APIENTRY glProgramUniformMatrix2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glProgramUniformMatrix3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glProgramUniformMatrix4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glProgramUniformMatrix2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glProgramUniformMatrix3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glProgramUniformMatrix4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glProgramUniformMatrix2x3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glProgramUniformMatrix3x2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glProgramUniformMatrix2x4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glProgramUniformMatrix4x2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glProgramUniformMatrix3x4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glProgramUniformMatrix4x3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glProgramUniformMatrix2x3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glProgramUniformMatrix3x2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glProgramUniformMatrix2x4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glProgramUniformMatrix4x2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glProgramUniformMatrix3x4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glProgramUniformMatrix4x3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glValidateProgramPipeline (GLuint pipeline); GLAPI void APIENTRY glGetProgramPipelineInfoLog (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLUSEPROGRAMSTAGESPROC) (GLuint pipeline, GLbitfield stages, GLuint program); typedef void (APIENTRYP PFNGLACTIVESHADERPROGRAMPROC) (GLuint pipeline, GLuint program); typedef GLuint (APIENTRYP PFNGLCREATESHADERPROGRAMVPROC) (GLenum type, GLsizei count, const GLchar* const *strings); typedef void (APIENTRYP PFNGLBINDPROGRAMPIPELINEPROC) (GLuint pipeline); typedef void (APIENTRYP PFNGLDELETEPROGRAMPIPELINESPROC) (GLsizei n, const GLuint *pipelines); typedef void (APIENTRYP PFNGLGENPROGRAMPIPELINESPROC) (GLsizei n, GLuint *pipelines); typedef GLboolean (APIENTRYP PFNGLISPROGRAMPIPELINEPROC) (GLuint pipeline); typedef void (APIENTRYP PFNGLGETPROGRAMPIPELINEIVPROC) (GLuint pipeline, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IPROC) (GLuint program, GLint location, GLint v0); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FPROC) (GLuint program, GLint location, GLfloat v0); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DPROC) (GLuint program, GLint location, GLdouble v0); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIPROC) (GLuint program, GLint location, GLuint v0); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IPROC) (GLuint program, GLint location, GLint v0, GLint v1); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLVALIDATEPROGRAMPIPELINEPROC) (GLuint pipeline); typedef void (APIENTRYP PFNGLGETPROGRAMPIPELINEINFOLOGPROC) (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog); #endif #ifndef GL_ARB_vertex_attrib_64bit #define GL_ARB_vertex_attrib_64bit 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glVertexAttribL1d (GLuint index, GLdouble x); GLAPI void APIENTRY glVertexAttribL2d (GLuint index, GLdouble x, GLdouble y); GLAPI void APIENTRY glVertexAttribL3d (GLuint index, GLdouble x, GLdouble y, GLdouble z); GLAPI void APIENTRY glVertexAttribL4d (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLAPI void APIENTRY glVertexAttribL1dv (GLuint index, const GLdouble *v); GLAPI void APIENTRY glVertexAttribL2dv (GLuint index, const GLdouble *v); GLAPI void APIENTRY glVertexAttribL3dv (GLuint index, const GLdouble *v); GLAPI void APIENTRY glVertexAttribL4dv (GLuint index, const GLdouble *v); GLAPI void APIENTRY glVertexAttribLPointer (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); GLAPI void APIENTRY glGetVertexAttribLdv (GLuint index, GLenum pname, GLdouble *params); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DPROC) (GLuint index, GLdouble x); typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DPROC) (GLuint index, GLdouble x, GLdouble y); typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DVPROC) (GLuint index, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DVPROC) (GLuint index, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DVPROC) (GLuint index, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DVPROC) (GLuint index, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBLPOINTERPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLDVPROC) (GLuint index, GLenum pname, GLdouble *params); #endif #ifndef GL_ARB_viewport_array #define GL_ARB_viewport_array 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glViewportArrayv (GLuint first, GLsizei count, const GLfloat *v); GLAPI void APIENTRY glViewportIndexedf (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); GLAPI void APIENTRY glViewportIndexedfv (GLuint index, const GLfloat *v); GLAPI void APIENTRY glScissorArrayv (GLuint first, GLsizei count, const GLint *v); GLAPI void APIENTRY glScissorIndexed (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); GLAPI void APIENTRY glScissorIndexedv (GLuint index, const GLint *v); GLAPI void APIENTRY glDepthRangeArrayv (GLuint first, GLsizei count, const GLdouble *v); GLAPI void APIENTRY glDepthRangeIndexed (GLuint index, GLdouble n, GLdouble f); GLAPI void APIENTRY glGetFloati_v (GLenum target, GLuint index, GLfloat *data); GLAPI void APIENTRY glGetDoublei_v (GLenum target, GLuint index, GLdouble *data); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLVIEWPORTARRAYVPROC) (GLuint first, GLsizei count, const GLfloat *v); typedef void (APIENTRYP PFNGLVIEWPORTINDEXEDFPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); typedef void (APIENTRYP PFNGLVIEWPORTINDEXEDFVPROC) (GLuint index, const GLfloat *v); typedef void (APIENTRYP PFNGLSCISSORARRAYVPROC) (GLuint first, GLsizei count, const GLint *v); typedef void (APIENTRYP PFNGLSCISSORINDEXEDPROC) (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLSCISSORINDEXEDVPROC) (GLuint index, const GLint *v); typedef void (APIENTRYP PFNGLDEPTHRANGEARRAYVPROC) (GLuint first, GLsizei count, const GLdouble *v); typedef void (APIENTRYP PFNGLDEPTHRANGEINDEXEDPROC) (GLuint index, GLdouble n, GLdouble f); typedef void (APIENTRYP PFNGLGETFLOATI_VPROC) (GLenum target, GLuint index, GLfloat *data); typedef void (APIENTRYP PFNGLGETDOUBLEI_VPROC) (GLenum target, GLuint index, GLdouble *data); #endif #ifndef GL_ARB_cl_event #define GL_ARB_cl_event 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI GLsync APIENTRY glCreateSyncFromCLeventARB (struct _cl_context * context, struct _cl_event * event, GLbitfield flags); #endif /* GL_GLEXT_PROTOTYPES */ typedef GLsync (APIENTRYP PFNGLCREATESYNCFROMCLEVENTARBPROC) (struct _cl_context * context, struct _cl_event * event, GLbitfield flags); #endif #ifndef GL_ARB_debug_output #define GL_ARB_debug_output 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDebugMessageControlARB (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); GLAPI void APIENTRY glDebugMessageInsertARB (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); GLAPI void APIENTRY glDebugMessageCallbackARB (GLDEBUGPROCARB callback, const GLvoid *userParam); GLAPI GLuint APIENTRY glGetDebugMessageLogARB (GLuint count, GLsizei bufsize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLDEBUGMESSAGECONTROLARBPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTARBPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKARBPROC) (GLDEBUGPROCARB callback, const GLvoid *userParam); typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGARBPROC) (GLuint count, GLsizei bufsize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); #endif #ifndef GL_ARB_robustness #define GL_ARB_robustness 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI GLenum APIENTRY glGetGraphicsResetStatusARB (void); GLAPI void APIENTRY glGetnMapdvARB (GLenum target, GLenum query, GLsizei bufSize, GLdouble *v); GLAPI void APIENTRY glGetnMapfvARB (GLenum target, GLenum query, GLsizei bufSize, GLfloat *v); GLAPI void APIENTRY glGetnMapivARB (GLenum target, GLenum query, GLsizei bufSize, GLint *v); GLAPI void APIENTRY glGetnPixelMapfvARB (GLenum map, GLsizei bufSize, GLfloat *values); GLAPI void APIENTRY glGetnPixelMapuivARB (GLenum map, GLsizei bufSize, GLuint *values); GLAPI void APIENTRY glGetnPixelMapusvARB (GLenum map, GLsizei bufSize, GLushort *values); GLAPI void APIENTRY glGetnPolygonStippleARB (GLsizei bufSize, GLubyte *pattern); GLAPI void APIENTRY glGetnColorTableARB (GLenum target, GLenum format, GLenum type, GLsizei bufSize, GLvoid *table); GLAPI void APIENTRY glGetnConvolutionFilterARB (GLenum target, GLenum format, GLenum type, GLsizei bufSize, GLvoid *image); GLAPI void APIENTRY glGetnSeparableFilterARB (GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, GLvoid *row, GLsizei columnBufSize, GLvoid *column, GLvoid *span); GLAPI void APIENTRY glGetnHistogramARB (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, GLvoid *values); GLAPI void APIENTRY glGetnMinmaxARB (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, GLvoid *values); GLAPI void APIENTRY glGetnTexImageARB (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, GLvoid *img); GLAPI void APIENTRY glReadnPixelsARB (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, GLvoid *data); GLAPI void APIENTRY glGetnCompressedTexImageARB (GLenum target, GLint lod, GLsizei bufSize, GLvoid *img); GLAPI void APIENTRY glGetnUniformfvARB (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); GLAPI void APIENTRY glGetnUniformivARB (GLuint program, GLint location, GLsizei bufSize, GLint *params); GLAPI void APIENTRY glGetnUniformuivARB (GLuint program, GLint location, GLsizei bufSize, GLuint *params); GLAPI void APIENTRY glGetnUniformdvARB (GLuint program, GLint location, GLsizei bufSize, GLdouble *params); #endif /* GL_GLEXT_PROTOTYPES */ typedef GLenum (APIENTRYP PFNGLGETGRAPHICSRESETSTATUSARBPROC) (void); typedef void (APIENTRYP PFNGLGETNMAPDVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLdouble *v); typedef void (APIENTRYP PFNGLGETNMAPFVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLfloat *v); typedef void (APIENTRYP PFNGLGETNMAPIVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLint *v); typedef void (APIENTRYP PFNGLGETNPIXELMAPFVARBPROC) (GLenum map, GLsizei bufSize, GLfloat *values); typedef void (APIENTRYP PFNGLGETNPIXELMAPUIVARBPROC) (GLenum map, GLsizei bufSize, GLuint *values); typedef void (APIENTRYP PFNGLGETNPIXELMAPUSVARBPROC) (GLenum map, GLsizei bufSize, GLushort *values); typedef void (APIENTRYP PFNGLGETNPOLYGONSTIPPLEARBPROC) (GLsizei bufSize, GLubyte *pattern); typedef void (APIENTRYP PFNGLGETNCOLORTABLEARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei bufSize, GLvoid *table); typedef void (APIENTRYP PFNGLGETNCONVOLUTIONFILTERARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei bufSize, GLvoid *image); typedef void (APIENTRYP PFNGLGETNSEPARABLEFILTERARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, GLvoid *row, GLsizei columnBufSize, GLvoid *column, GLvoid *span); typedef void (APIENTRYP PFNGLGETNHISTOGRAMARBPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, GLvoid *values); typedef void (APIENTRYP PFNGLGETNMINMAXARBPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, GLvoid *values); typedef void (APIENTRYP PFNGLGETNTEXIMAGEARBPROC) (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, GLvoid *img); typedef void (APIENTRYP PFNGLREADNPIXELSARBPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, GLvoid *data); typedef void (APIENTRYP PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GLint lod, GLsizei bufSize, GLvoid *img); typedef void (APIENTRYP PFNGLGETNUNIFORMFVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); typedef void (APIENTRYP PFNGLGETNUNIFORMIVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLint *params); typedef void (APIENTRYP PFNGLGETNUNIFORMUIVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLuint *params); typedef void (APIENTRYP PFNGLGETNUNIFORMDVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLdouble *params); #endif #ifndef GL_ARB_shader_stencil_export #define GL_ARB_shader_stencil_export 1 #endif #ifndef GL_ARB_base_instance #define GL_ARB_base_instance 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDrawArraysInstancedBaseInstance (GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance); GLAPI void APIENTRY glDrawElementsInstancedBaseInstance (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLuint baseinstance); GLAPI void APIENTRY glDrawElementsInstancedBaseVertexBaseInstance (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC) (GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance); typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLuint baseinstance); typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance); #endif #ifndef GL_ARB_shading_language_420pack #define GL_ARB_shading_language_420pack 1 #endif #ifndef GL_ARB_transform_feedback_instanced #define GL_ARB_transform_feedback_instanced 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDrawTransformFeedbackInstanced (GLenum mode, GLuint id, GLsizei instancecount); GLAPI void APIENTRY glDrawTransformFeedbackStreamInstanced (GLenum mode, GLuint id, GLuint stream, GLsizei instancecount); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC) (GLenum mode, GLuint id, GLsizei instancecount); typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC) (GLenum mode, GLuint id, GLuint stream, GLsizei instancecount); #endif #ifndef GL_ARB_compressed_texture_pixel_storage #define GL_ARB_compressed_texture_pixel_storage 1 #endif #ifndef GL_ARB_conservative_depth #define GL_ARB_conservative_depth 1 #endif #ifndef GL_ARB_internalformat_query #define GL_ARB_internalformat_query 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glGetInternalformativ (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLGETINTERNALFORMATIVPROC) (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params); #endif #ifndef GL_ARB_map_buffer_alignment #define GL_ARB_map_buffer_alignment 1 #endif #ifndef GL_ARB_shader_atomic_counters #define GL_ARB_shader_atomic_counters 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glGetActiveAtomicCounterBufferiv (GLuint program, GLuint bufferIndex, GLenum pname, GLint *params); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC) (GLuint program, GLuint bufferIndex, GLenum pname, GLint *params); #endif #ifndef GL_ARB_shader_image_load_store #define GL_ARB_shader_image_load_store 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBindImageTexture (GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format); GLAPI void APIENTRY glMemoryBarrier (GLbitfield barriers); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLBINDIMAGETEXTUREPROC) (GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format); typedef void (APIENTRYP PFNGLMEMORYBARRIERPROC) (GLbitfield barriers); #endif #ifndef GL_ARB_shading_language_packing #define GL_ARB_shading_language_packing 1 #endif #ifndef GL_ARB_texture_storage #define GL_ARB_texture_storage 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glTexStorage1D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); GLAPI void APIENTRY glTexStorage2D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); GLAPI void APIENTRY glTexStorage3D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); GLAPI void APIENTRY glTextureStorage1DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); GLAPI void APIENTRY glTextureStorage2DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); GLAPI void APIENTRY glTextureStorage3DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLTEXSTORAGE1DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); typedef void (APIENTRYP PFNGLTEXSTORAGE2DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLTEXSTORAGE3DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); typedef void (APIENTRYP PFNGLTEXTURESTORAGE1DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); typedef void (APIENTRYP PFNGLTEXTURESTORAGE2DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLTEXTURESTORAGE3DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); #endif #ifndef GL_KHR_texture_compression_astc_ldr #define GL_KHR_texture_compression_astc_ldr 1 #endif #ifndef GL_KHR_debug #define GL_KHR_debug 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDebugMessageControl (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); GLAPI void APIENTRY glDebugMessageInsert (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); GLAPI void APIENTRY glDebugMessageCallback (GLDEBUGPROC callback, const void *userParam); GLAPI GLuint APIENTRY glGetDebugMessageLog (GLuint count, GLsizei bufsize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); GLAPI void APIENTRY glPushDebugGroup (GLenum source, GLuint id, GLsizei length, const GLchar *message); GLAPI void APIENTRY glPopDebugGroup (void); GLAPI void APIENTRY glObjectLabel (GLenum identifier, GLuint name, GLsizei length, const GLchar *label); GLAPI void APIENTRY glGetObjectLabel (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label); GLAPI void APIENTRY glObjectPtrLabel (const void *ptr, GLsizei length, const GLchar *label); GLAPI void APIENTRY glGetObjectPtrLabel (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLDEBUGMESSAGECONTROLPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKPROC) (GLDEBUGPROC callback, const void *userParam); typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGPROC) (GLuint count, GLsizei bufsize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); typedef void (APIENTRYP PFNGLPUSHDEBUGGROUPPROC) (GLenum source, GLuint id, GLsizei length, const GLchar *message); typedef void (APIENTRYP PFNGLPOPDEBUGGROUPPROC) (void); typedef void (APIENTRYP PFNGLOBJECTLABELPROC) (GLenum identifier, GLuint name, GLsizei length, const GLchar *label); typedef void (APIENTRYP PFNGLGETOBJECTLABELPROC) (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label); typedef void (APIENTRYP PFNGLOBJECTPTRLABELPROC) (const void *ptr, GLsizei length, const GLchar *label); typedef void (APIENTRYP PFNGLGETOBJECTPTRLABELPROC) (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label); #endif #ifndef GL_ARB_arrays_of_arrays #define GL_ARB_arrays_of_arrays 1 #endif #ifndef GL_ARB_clear_buffer_object #define GL_ARB_clear_buffer_object 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glClearBufferData (GLenum target, GLenum internalformat, GLenum format, GLenum type, const void *data); GLAPI void APIENTRY glClearBufferSubData (GLenum target, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data); GLAPI void APIENTRY glClearNamedBufferDataEXT (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void *data); GLAPI void APIENTRY glClearNamedBufferSubDataEXT (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, GLsizeiptr offset, GLsizeiptr size, const void *data); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLCLEARBUFFERDATAPROC) (GLenum target, GLenum internalformat, GLenum format, GLenum type, const void *data); typedef void (APIENTRYP PFNGLCLEARBUFFERSUBDATAPROC) (GLenum target, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data); typedef void (APIENTRYP PFNGLCLEARNAMEDBUFFERDATAEXTPROC) (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void *data); typedef void (APIENTRYP PFNGLCLEARNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, GLsizeiptr offset, GLsizeiptr size, const void *data); #endif #ifndef GL_ARB_compute_shader #define GL_ARB_compute_shader 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDispatchCompute (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z); GLAPI void APIENTRY glDispatchComputeIndirect (GLintptr indirect); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLDISPATCHCOMPUTEPROC) (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z); typedef void (APIENTRYP PFNGLDISPATCHCOMPUTEINDIRECTPROC) (GLintptr indirect); #endif #ifndef GL_ARB_copy_image #define GL_ARB_copy_image 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glCopyImageSubData (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); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLCOPYIMAGESUBDATAPROC) (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); #endif #ifndef GL_ARB_texture_view #define GL_ARB_texture_view 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glTextureView (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLTEXTUREVIEWPROC) (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers); #endif #ifndef GL_ARB_vertex_attrib_binding #define GL_ARB_vertex_attrib_binding 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBindVertexBuffer (GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); GLAPI void APIENTRY glVertexAttribFormat (GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); GLAPI void APIENTRY glVertexAttribIFormat (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); GLAPI void APIENTRY glVertexAttribLFormat (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); GLAPI void APIENTRY glVertexAttribBinding (GLuint attribindex, GLuint bindingindex); GLAPI void APIENTRY glVertexBindingDivisor (GLuint bindingindex, GLuint divisor); GLAPI void APIENTRY glVertexArrayBindVertexBufferEXT (GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); GLAPI void APIENTRY glVertexArrayVertexAttribFormatEXT (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); GLAPI void APIENTRY glVertexArrayVertexAttribIFormatEXT (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); GLAPI void APIENTRY glVertexArrayVertexAttribLFormatEXT (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); GLAPI void APIENTRY glVertexArrayVertexAttribBindingEXT (GLuint vaobj, GLuint attribindex, GLuint bindingindex); GLAPI void APIENTRY glVertexArrayVertexBindingDivisorEXT (GLuint vaobj, GLuint bindingindex, GLuint divisor); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLBINDVERTEXBUFFERPROC) (GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); typedef void (APIENTRYP PFNGLVERTEXATTRIBFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); typedef void (APIENTRYP PFNGLVERTEXATTRIBIFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); typedef void (APIENTRYP PFNGLVERTEXATTRIBLFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); typedef void (APIENTRYP PFNGLVERTEXATTRIBBINDINGPROC) (GLuint attribindex, GLuint bindingindex); typedef void (APIENTRYP PFNGLVERTEXBINDINGDIVISORPROC) (GLuint bindingindex, GLuint divisor); typedef void (APIENTRYP PFNGLVERTEXARRAYBINDVERTEXBUFFEREXTPROC) (GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBFORMATEXTPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBIFORMATEXTPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBLFORMATEXTPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBBINDINGEXTPROC) (GLuint vaobj, GLuint attribindex, GLuint bindingindex); typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXBINDINGDIVISOREXTPROC) (GLuint vaobj, GLuint bindingindex, GLuint divisor); #endif #ifndef GL_ARB_robustness_isolation #define GL_ARB_robustness_isolation 1 #endif #ifndef GL_ARB_ES3_compatibility #define GL_ARB_ES3_compatibility 1 #endif #ifndef GL_ARB_explicit_uniform_location #define GL_ARB_explicit_uniform_location 1 #endif #ifndef GL_ARB_fragment_layer_viewport #define GL_ARB_fragment_layer_viewport 1 #endif #ifndef GL_ARB_framebuffer_no_attachments #define GL_ARB_framebuffer_no_attachments 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glFramebufferParameteri (GLenum target, GLenum pname, GLint param); GLAPI void APIENTRY glGetFramebufferParameteriv (GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glNamedFramebufferParameteriEXT (GLuint framebuffer, GLenum pname, GLint param); GLAPI void APIENTRY glGetNamedFramebufferParameterivEXT (GLuint framebuffer, GLenum pname, GLint *params); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLFRAMEBUFFERPARAMETERIPROC) (GLenum target, GLenum pname, GLint param); typedef void (APIENTRYP PFNGLGETFRAMEBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERPARAMETERIEXTPROC) (GLuint framebuffer, GLenum pname, GLint param); typedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum pname, GLint *params); #endif #ifndef GL_ARB_internalformat_query2 #define GL_ARB_internalformat_query2 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glGetInternalformati64v (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint64 *params); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLGETINTERNALFORMATI64VPROC) (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint64 *params); #endif #ifndef GL_ARB_invalidate_subdata #define GL_ARB_invalidate_subdata 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glInvalidateTexSubImage (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth); GLAPI void APIENTRY glInvalidateTexImage (GLuint texture, GLint level); GLAPI void APIENTRY glInvalidateBufferSubData (GLuint buffer, GLintptr offset, GLsizeiptr length); GLAPI void APIENTRY glInvalidateBufferData (GLuint buffer); GLAPI void APIENTRY glInvalidateFramebuffer (GLenum target, GLsizei numAttachments, const GLenum *attachments); GLAPI void APIENTRY glInvalidateSubFramebuffer (GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLINVALIDATETEXSUBIMAGEPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth); typedef void (APIENTRYP PFNGLINVALIDATETEXIMAGEPROC) (GLuint texture, GLint level); typedef void (APIENTRYP PFNGLINVALIDATEBUFFERSUBDATAPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length); typedef void (APIENTRYP PFNGLINVALIDATEBUFFERDATAPROC) (GLuint buffer); typedef void (APIENTRYP PFNGLINVALIDATEFRAMEBUFFERPROC) (GLenum target, GLsizei numAttachments, const GLenum *attachments); typedef void (APIENTRYP PFNGLINVALIDATESUBFRAMEBUFFERPROC) (GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height); #endif #ifndef GL_ARB_multi_draw_indirect #define GL_ARB_multi_draw_indirect 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glMultiDrawArraysIndirect (GLenum mode, const void *indirect, GLsizei drawcount, GLsizei stride); GLAPI void APIENTRY glMultiDrawElementsIndirect (GLenum mode, GLenum type, const void *indirect, GLsizei drawcount, GLsizei stride); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTPROC) (GLenum mode, const void *indirect, GLsizei drawcount, GLsizei stride); typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTPROC) (GLenum mode, GLenum type, const void *indirect, GLsizei drawcount, GLsizei stride); #endif #ifndef GL_ARB_program_interface_query #define GL_ARB_program_interface_query 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glGetProgramInterfaceiv (GLuint program, GLenum programInterface, GLenum pname, GLint *params); GLAPI GLuint APIENTRY glGetProgramResourceIndex (GLuint program, GLenum programInterface, const GLchar *name); GLAPI void APIENTRY glGetProgramResourceName (GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name); GLAPI void APIENTRY glGetProgramResourceiv (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLint *params); GLAPI GLint APIENTRY glGetProgramResourceLocation (GLuint program, GLenum programInterface, const GLchar *name); GLAPI GLint APIENTRY glGetProgramResourceLocationIndex (GLuint program, GLenum programInterface, const GLchar *name); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLGETPROGRAMINTERFACEIVPROC) (GLuint program, GLenum programInterface, GLenum pname, GLint *params); typedef GLuint (APIENTRYP PFNGLGETPROGRAMRESOURCEINDEXPROC) (GLuint program, GLenum programInterface, const GLchar *name); typedef void (APIENTRYP PFNGLGETPROGRAMRESOURCENAMEPROC) (GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name); typedef void (APIENTRYP PFNGLGETPROGRAMRESOURCEIVPROC) (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLint *params); typedef GLint (APIENTRYP PFNGLGETPROGRAMRESOURCELOCATIONPROC) (GLuint program, GLenum programInterface, const GLchar *name); typedef GLint (APIENTRYP PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC) (GLuint program, GLenum programInterface, const GLchar *name); #endif #ifndef GL_ARB_robust_buffer_access_behavior #define GL_ARB_robust_buffer_access_behavior 1 #endif #ifndef GL_ARB_shader_image_size #define GL_ARB_shader_image_size 1 #endif #ifndef GL_ARB_shader_storage_buffer_object #define GL_ARB_shader_storage_buffer_object 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glShaderStorageBlockBinding (GLuint program, GLuint storageBlockIndex, GLuint storageBlockBinding); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLSHADERSTORAGEBLOCKBINDINGPROC) (GLuint program, GLuint storageBlockIndex, GLuint storageBlockBinding); #endif #ifndef GL_ARB_stencil_texturing #define GL_ARB_stencil_texturing 1 #endif #ifndef GL_ARB_texture_buffer_range #define GL_ARB_texture_buffer_range 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glTexBufferRange (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); GLAPI void APIENTRY glTextureBufferRangeEXT (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLTEXBUFFERRANGEPROC) (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); typedef void (APIENTRYP PFNGLTEXTUREBUFFERRANGEEXTPROC) (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); #endif #ifndef GL_ARB_texture_query_levels #define GL_ARB_texture_query_levels 1 #endif #ifndef GL_ARB_texture_storage_multisample #define GL_ARB_texture_storage_multisample 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glTexStorage2DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); GLAPI void APIENTRY glTexStorage3DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); GLAPI void APIENTRY glTextureStorage2DMultisampleEXT (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); GLAPI void APIENTRY glTextureStorage3DMultisampleEXT (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLTEXSTORAGE2DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); typedef void (APIENTRYP PFNGLTEXSTORAGE3DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); typedef void (APIENTRYP PFNGLTEXTURESTORAGE2DMULTISAMPLEEXTPROC) (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); typedef void (APIENTRYP PFNGLTEXTURESTORAGE3DMULTISAMPLEEXTPROC) (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); #endif #ifndef GL_EXT_abgr #define GL_EXT_abgr 1 #endif #ifndef GL_EXT_blend_color #define GL_EXT_blend_color 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBlendColorEXT (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLBLENDCOLOREXTPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); #endif #ifndef GL_EXT_polygon_offset #define GL_EXT_polygon_offset 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glPolygonOffsetEXT (GLfloat factor, GLfloat bias); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLPOLYGONOFFSETEXTPROC) (GLfloat factor, GLfloat bias); #endif #ifndef GL_EXT_texture #define GL_EXT_texture 1 #endif #ifndef GL_EXT_texture3D #define GL_EXT_texture3D 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glTexImage3DEXT (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); GLAPI void APIENTRY glTexSubImage3DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLTEXIMAGE3DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); #endif #ifndef GL_SGIS_texture_filter4 #define GL_SGIS_texture_filter4 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glGetTexFilterFuncSGIS (GLenum target, GLenum filter, GLfloat *weights); GLAPI void APIENTRY glTexFilterFuncSGIS (GLenum target, GLenum filter, GLsizei n, const GLfloat *weights); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLGETTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLfloat *weights); typedef void (APIENTRYP PFNGLTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLsizei n, const GLfloat *weights); #endif #ifndef GL_EXT_subtexture #define GL_EXT_subtexture 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glTexSubImage1DEXT (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels); GLAPI void APIENTRY glTexSubImage2DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels); typedef void (APIENTRYP PFNGLTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); #endif #ifndef GL_EXT_copy_texture #define GL_EXT_copy_texture 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glCopyTexImage1DEXT (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); GLAPI void APIENTRY glCopyTexImage2DEXT (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); GLAPI void APIENTRY glCopyTexSubImage1DEXT (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); GLAPI void APIENTRY glCopyTexSubImage2DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); GLAPI void APIENTRY glCopyTexSubImage3DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLCOPYTEXIMAGE1DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); typedef void (APIENTRYP PFNGLCOPYTEXIMAGE2DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); #endif #ifndef GL_EXT_histogram #define GL_EXT_histogram 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glGetHistogramEXT (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); GLAPI void APIENTRY glGetHistogramParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetHistogramParameterivEXT (GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetMinmaxEXT (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); GLAPI void APIENTRY glGetMinmaxParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetMinmaxParameterivEXT (GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glHistogramEXT (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); GLAPI void APIENTRY glMinmaxEXT (GLenum target, GLenum internalformat, GLboolean sink); GLAPI void APIENTRY glResetHistogramEXT (GLenum target); GLAPI void APIENTRY glResetMinmaxEXT (GLenum target); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLGETHISTOGRAMEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETMINMAXEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLHISTOGRAMEXTPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); typedef void (APIENTRYP PFNGLMINMAXEXTPROC) (GLenum target, GLenum internalformat, GLboolean sink); typedef void (APIENTRYP PFNGLRESETHISTOGRAMEXTPROC) (GLenum target); typedef void (APIENTRYP PFNGLRESETMINMAXEXTPROC) (GLenum target); #endif #ifndef GL_EXT_convolution #define GL_EXT_convolution 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glConvolutionFilter1DEXT (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image); GLAPI void APIENTRY glConvolutionFilter2DEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image); GLAPI void APIENTRY glConvolutionParameterfEXT (GLenum target, GLenum pname, GLfloat params); GLAPI void APIENTRY glConvolutionParameterfvEXT (GLenum target, GLenum pname, const GLfloat *params); GLAPI void APIENTRY glConvolutionParameteriEXT (GLenum target, GLenum pname, GLint params); GLAPI void APIENTRY glConvolutionParameterivEXT (GLenum target, GLenum pname, const GLint *params); GLAPI void APIENTRY glCopyConvolutionFilter1DEXT (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); GLAPI void APIENTRY glCopyConvolutionFilter2DEXT (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); GLAPI void APIENTRY glGetConvolutionFilterEXT (GLenum target, GLenum format, GLenum type, GLvoid *image); GLAPI void APIENTRY glGetConvolutionParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetConvolutionParameterivEXT (GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetSeparableFilterEXT (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span); GLAPI void APIENTRY glSeparableFilter2DEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image); typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image); typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat params); typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat *params); typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint params); typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLGETCONVOLUTIONFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, GLvoid *image); typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETSEPARABLEFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span); typedef void (APIENTRYP PFNGLSEPARABLEFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column); #endif #ifndef GL_SGI_color_matrix #define GL_SGI_color_matrix 1 #endif #ifndef GL_SGI_color_table #define GL_SGI_color_table 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glColorTableSGI (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table); GLAPI void APIENTRY glColorTableParameterfvSGI (GLenum target, GLenum pname, const GLfloat *params); GLAPI void APIENTRY glColorTableParameterivSGI (GLenum target, GLenum pname, const GLint *params); GLAPI void APIENTRY glCopyColorTableSGI (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); GLAPI void APIENTRY glGetColorTableSGI (GLenum target, GLenum format, GLenum type, GLvoid *table); GLAPI void APIENTRY glGetColorTableParameterfvSGI (GLenum target, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetColorTableParameterivSGI (GLenum target, GLenum pname, GLint *params); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table); typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, const GLfloat *params); typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLCOPYCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); typedef void (APIENTRYP PFNGLGETCOLORTABLESGIPROC) (GLenum target, GLenum format, GLenum type, GLvoid *table); typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, GLint *params); #endif #ifndef GL_SGIX_pixel_texture #define GL_SGIX_pixel_texture 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glPixelTexGenSGIX (GLenum mode); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLPIXELTEXGENSGIXPROC) (GLenum mode); #endif #ifndef GL_SGIS_pixel_texture #define GL_SGIS_pixel_texture 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glPixelTexGenParameteriSGIS (GLenum pname, GLint param); GLAPI void APIENTRY glPixelTexGenParameterivSGIS (GLenum pname, const GLint *params); GLAPI void APIENTRY glPixelTexGenParameterfSGIS (GLenum pname, GLfloat param); GLAPI void APIENTRY glPixelTexGenParameterfvSGIS (GLenum pname, const GLfloat *params); GLAPI void APIENTRY glGetPixelTexGenParameterivSGIS (GLenum pname, GLint *params); GLAPI void APIENTRY glGetPixelTexGenParameterfvSGIS (GLenum pname, GLfloat *params); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERISGISPROC) (GLenum pname, GLint param); typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERIVSGISPROC) (GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERFSGISPROC) (GLenum pname, GLfloat param); typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERFVSGISPROC) (GLenum pname, const GLfloat *params); typedef void (APIENTRYP PFNGLGETPIXELTEXGENPARAMETERIVSGISPROC) (GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETPIXELTEXGENPARAMETERFVSGISPROC) (GLenum pname, GLfloat *params); #endif #ifndef GL_SGIS_texture4D #define GL_SGIS_texture4D 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glTexImage4DSGIS (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const GLvoid *pixels); GLAPI void APIENTRY glTexSubImage4DSGIS (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLenum format, GLenum type, const GLvoid *pixels); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLTEXIMAGE4DSGISPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const GLvoid *pixels); typedef void (APIENTRYP PFNGLTEXSUBIMAGE4DSGISPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLenum format, GLenum type, const GLvoid *pixels); #endif #ifndef GL_SGI_texture_color_table #define GL_SGI_texture_color_table 1 #endif #ifndef GL_EXT_cmyka #define GL_EXT_cmyka 1 #endif #ifndef GL_EXT_texture_object #define GL_EXT_texture_object 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI GLboolean APIENTRY glAreTexturesResidentEXT (GLsizei n, const GLuint *textures, GLboolean *residences); GLAPI void APIENTRY glBindTextureEXT (GLenum target, GLuint texture); GLAPI void APIENTRY glDeleteTexturesEXT (GLsizei n, const GLuint *textures); GLAPI void APIENTRY glGenTexturesEXT (GLsizei n, GLuint *textures); GLAPI GLboolean APIENTRY glIsTextureEXT (GLuint texture); GLAPI void APIENTRY glPrioritizeTexturesEXT (GLsizei n, const GLuint *textures, const GLclampf *priorities); #endif /* GL_GLEXT_PROTOTYPES */ typedef GLboolean (APIENTRYP PFNGLARETEXTURESRESIDENTEXTPROC) (GLsizei n, const GLuint *textures, GLboolean *residences); typedef void (APIENTRYP PFNGLBINDTEXTUREEXTPROC) (GLenum target, GLuint texture); typedef void (APIENTRYP PFNGLDELETETEXTURESEXTPROC) (GLsizei n, const GLuint *textures); typedef void (APIENTRYP PFNGLGENTEXTURESEXTPROC) (GLsizei n, GLuint *textures); typedef GLboolean (APIENTRYP PFNGLISTEXTUREEXTPROC) (GLuint texture); typedef void (APIENTRYP PFNGLPRIORITIZETEXTURESEXTPROC) (GLsizei n, const GLuint *textures, const GLclampf *priorities); #endif #ifndef GL_SGIS_detail_texture #define GL_SGIS_detail_texture 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDetailTexFuncSGIS (GLenum target, GLsizei n, const GLfloat *points); GLAPI void APIENTRY glGetDetailTexFuncSGIS (GLenum target, GLfloat *points); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLDETAILTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat *points); typedef void (APIENTRYP PFNGLGETDETAILTEXFUNCSGISPROC) (GLenum target, GLfloat *points); #endif #ifndef GL_SGIS_sharpen_texture #define GL_SGIS_sharpen_texture 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glSharpenTexFuncSGIS (GLenum target, GLsizei n, const GLfloat *points); GLAPI void APIENTRY glGetSharpenTexFuncSGIS (GLenum target, GLfloat *points); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLSHARPENTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat *points); typedef void (APIENTRYP PFNGLGETSHARPENTEXFUNCSGISPROC) (GLenum target, GLfloat *points); #endif #ifndef GL_EXT_packed_pixels #define GL_EXT_packed_pixels 1 #endif #ifndef GL_SGIS_texture_lod #define GL_SGIS_texture_lod 1 #endif #ifndef GL_SGIS_multisample #define GL_SGIS_multisample 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glSampleMaskSGIS (GLclampf value, GLboolean invert); GLAPI void APIENTRY glSamplePatternSGIS (GLenum pattern); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLSAMPLEMASKSGISPROC) (GLclampf value, GLboolean invert); typedef void (APIENTRYP PFNGLSAMPLEPATTERNSGISPROC) (GLenum pattern); #endif #ifndef GL_EXT_rescale_normal #define GL_EXT_rescale_normal 1 #endif #ifndef GL_EXT_vertex_array #define GL_EXT_vertex_array 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glArrayElementEXT (GLint i); GLAPI void APIENTRY glColorPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); GLAPI void APIENTRY glDrawArraysEXT (GLenum mode, GLint first, GLsizei count); GLAPI void APIENTRY glEdgeFlagPointerEXT (GLsizei stride, GLsizei count, const GLboolean *pointer); GLAPI void APIENTRY glGetPointervEXT (GLenum pname, GLvoid* *params); GLAPI void APIENTRY glIndexPointerEXT (GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); GLAPI void APIENTRY glNormalPointerEXT (GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); GLAPI void APIENTRY glTexCoordPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); GLAPI void APIENTRY glVertexPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLARRAYELEMENTEXTPROC) (GLint i); typedef void (APIENTRYP PFNGLCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); typedef void (APIENTRYP PFNGLDRAWARRAYSEXTPROC) (GLenum mode, GLint first, GLsizei count); typedef void (APIENTRYP PFNGLEDGEFLAGPOINTEREXTPROC) (GLsizei stride, GLsizei count, const GLboolean *pointer); typedef void (APIENTRYP PFNGLGETPOINTERVEXTPROC) (GLenum pname, GLvoid* *params); typedef void (APIENTRYP PFNGLINDEXPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); typedef void (APIENTRYP PFNGLNORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); typedef void (APIENTRYP PFNGLTEXCOORDPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); typedef void (APIENTRYP PFNGLVERTEXPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); #endif #ifndef GL_EXT_misc_attribute #define GL_EXT_misc_attribute 1 #endif #ifndef GL_SGIS_generate_mipmap #define GL_SGIS_generate_mipmap 1 #endif #ifndef GL_SGIX_clipmap #define GL_SGIX_clipmap 1 #endif #ifndef GL_SGIX_shadow #define GL_SGIX_shadow 1 #endif #ifndef GL_SGIS_texture_edge_clamp #define GL_SGIS_texture_edge_clamp 1 #endif #ifndef GL_SGIS_texture_border_clamp #define GL_SGIS_texture_border_clamp 1 #endif #ifndef GL_EXT_blend_minmax #define GL_EXT_blend_minmax 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBlendEquationEXT (GLenum mode); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLBLENDEQUATIONEXTPROC) (GLenum mode); #endif #ifndef GL_EXT_blend_subtract #define GL_EXT_blend_subtract 1 #endif #ifndef GL_EXT_blend_logic_op #define GL_EXT_blend_logic_op 1 #endif #ifndef GL_SGIX_interlace #define GL_SGIX_interlace 1 #endif #ifndef GL_SGIX_pixel_tiles #define GL_SGIX_pixel_tiles 1 #endif #ifndef GL_SGIS_texture_select #define GL_SGIS_texture_select 1 /* This used to be SGIX prefix, which was an error in the header */ #endif #ifndef GL_SGIX_sprite #define GL_SGIX_sprite 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glSpriteParameterfSGIX (GLenum pname, GLfloat param); GLAPI void APIENTRY glSpriteParameterfvSGIX (GLenum pname, const GLfloat *params); GLAPI void APIENTRY glSpriteParameteriSGIX (GLenum pname, GLint param); GLAPI void APIENTRY glSpriteParameterivSGIX (GLenum pname, const GLint *params); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLSPRITEPARAMETERFSGIXPROC) (GLenum pname, GLfloat param); typedef void (APIENTRYP PFNGLSPRITEPARAMETERFVSGIXPROC) (GLenum pname, const GLfloat *params); typedef void (APIENTRYP PFNGLSPRITEPARAMETERISGIXPROC) (GLenum pname, GLint param); typedef void (APIENTRYP PFNGLSPRITEPARAMETERIVSGIXPROC) (GLenum pname, const GLint *params); #endif #ifndef GL_SGIX_texture_multi_buffer #define GL_SGIX_texture_multi_buffer 1 #endif #ifndef GL_EXT_point_parameters #define GL_EXT_point_parameters 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glPointParameterfEXT (GLenum pname, GLfloat param); GLAPI void APIENTRY glPointParameterfvEXT (GLenum pname, const GLfloat *params); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLPOINTPARAMETERFEXTPROC) (GLenum pname, GLfloat param); typedef void (APIENTRYP PFNGLPOINTPARAMETERFVEXTPROC) (GLenum pname, const GLfloat *params); #endif #ifndef GL_SGIS_point_parameters #define GL_SGIS_point_parameters 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glPointParameterfSGIS (GLenum pname, GLfloat param); GLAPI void APIENTRY glPointParameterfvSGIS (GLenum pname, const GLfloat *params); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLPOINTPARAMETERFSGISPROC) (GLenum pname, GLfloat param); typedef void (APIENTRYP PFNGLPOINTPARAMETERFVSGISPROC) (GLenum pname, const GLfloat *params); #endif #ifndef GL_SGIX_instruments #define GL_SGIX_instruments 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI GLint APIENTRY glGetInstrumentsSGIX (void); GLAPI void APIENTRY glInstrumentsBufferSGIX (GLsizei size, GLint *buffer); GLAPI GLint APIENTRY glPollInstrumentsSGIX (GLint *marker_p); GLAPI void APIENTRY glReadInstrumentsSGIX (GLint marker); GLAPI void APIENTRY glStartInstrumentsSGIX (void); GLAPI void APIENTRY glStopInstrumentsSGIX (GLint marker); #endif /* GL_GLEXT_PROTOTYPES */ typedef GLint (APIENTRYP PFNGLGETINSTRUMENTSSGIXPROC) (void); typedef void (APIENTRYP PFNGLINSTRUMENTSBUFFERSGIXPROC) (GLsizei size, GLint *buffer); typedef GLint (APIENTRYP PFNGLPOLLINSTRUMENTSSGIXPROC) (GLint *marker_p); typedef void (APIENTRYP PFNGLREADINSTRUMENTSSGIXPROC) (GLint marker); typedef void (APIENTRYP PFNGLSTARTINSTRUMENTSSGIXPROC) (void); typedef void (APIENTRYP PFNGLSTOPINSTRUMENTSSGIXPROC) (GLint marker); #endif #ifndef GL_SGIX_texture_scale_bias #define GL_SGIX_texture_scale_bias 1 #endif #ifndef GL_SGIX_framezoom #define GL_SGIX_framezoom 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glFrameZoomSGIX (GLint factor); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLFRAMEZOOMSGIXPROC) (GLint factor); #endif #ifndef GL_SGIX_tag_sample_buffer #define GL_SGIX_tag_sample_buffer 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glTagSampleBufferSGIX (void); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLTAGSAMPLEBUFFERSGIXPROC) (void); #endif #ifndef GL_SGIX_polynomial_ffd #define GL_SGIX_polynomial_ffd 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDeformationMap3dSGIX (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, GLdouble w1, GLdouble w2, GLint wstride, GLint worder, const GLdouble *points); GLAPI void APIENTRY glDeformationMap3fSGIX (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, GLfloat w1, GLfloat w2, GLint wstride, GLint worder, const GLfloat *points); GLAPI void APIENTRY glDeformSGIX (GLbitfield mask); GLAPI void APIENTRY glLoadIdentityDeformationMapSGIX (GLbitfield mask); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLDEFORMATIONMAP3DSGIXPROC) (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, GLdouble w1, GLdouble w2, GLint wstride, GLint worder, const GLdouble *points); typedef void (APIENTRYP PFNGLDEFORMATIONMAP3FSGIXPROC) (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, GLfloat w1, GLfloat w2, GLint wstride, GLint worder, const GLfloat *points); typedef void (APIENTRYP PFNGLDEFORMSGIXPROC) (GLbitfield mask); typedef void (APIENTRYP PFNGLLOADIDENTITYDEFORMATIONMAPSGIXPROC) (GLbitfield mask); #endif #ifndef GL_SGIX_reference_plane #define GL_SGIX_reference_plane 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glReferencePlaneSGIX (const GLdouble *equation); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLREFERENCEPLANESGIXPROC) (const GLdouble *equation); #endif #ifndef GL_SGIX_flush_raster #define GL_SGIX_flush_raster 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glFlushRasterSGIX (void); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLFLUSHRASTERSGIXPROC) (void); #endif #ifndef GL_SGIX_depth_texture #define GL_SGIX_depth_texture 1 #endif #ifndef GL_SGIS_fog_function #define GL_SGIS_fog_function 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glFogFuncSGIS (GLsizei n, const GLfloat *points); GLAPI void APIENTRY glGetFogFuncSGIS (GLfloat *points); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLFOGFUNCSGISPROC) (GLsizei n, const GLfloat *points); typedef void (APIENTRYP PFNGLGETFOGFUNCSGISPROC) (GLfloat *points); #endif #ifndef GL_SGIX_fog_offset #define GL_SGIX_fog_offset 1 #endif #ifndef GL_HP_image_transform #define GL_HP_image_transform 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glImageTransformParameteriHP (GLenum target, GLenum pname, GLint param); GLAPI void APIENTRY glImageTransformParameterfHP (GLenum target, GLenum pname, GLfloat param); GLAPI void APIENTRY glImageTransformParameterivHP (GLenum target, GLenum pname, const GLint *params); GLAPI void APIENTRY glImageTransformParameterfvHP (GLenum target, GLenum pname, const GLfloat *params); GLAPI void APIENTRY glGetImageTransformParameterivHP (GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetImageTransformParameterfvHP (GLenum target, GLenum pname, GLfloat *params); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERIHPPROC) (GLenum target, GLenum pname, GLint param); typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERFHPPROC) (GLenum target, GLenum pname, GLfloat param); typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, const GLfloat *params); typedef void (APIENTRYP PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, GLfloat *params); #endif #ifndef GL_HP_convolution_border_modes #define GL_HP_convolution_border_modes 1 #endif #ifndef GL_SGIX_texture_add_env #define GL_SGIX_texture_add_env 1 #endif #ifndef GL_EXT_color_subtable #define GL_EXT_color_subtable 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glColorSubTableEXT (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data); GLAPI void APIENTRY glCopyColorSubTableEXT (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data); typedef void (APIENTRYP PFNGLCOPYCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); #endif #ifndef GL_PGI_vertex_hints #define GL_PGI_vertex_hints 1 #endif #ifndef GL_PGI_misc_hints #define GL_PGI_misc_hints 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glHintPGI (GLenum target, GLint mode); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLHINTPGIPROC) (GLenum target, GLint mode); #endif #ifndef GL_EXT_paletted_texture #define GL_EXT_paletted_texture 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glColorTableEXT (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const GLvoid *table); GLAPI void APIENTRY glGetColorTableEXT (GLenum target, GLenum format, GLenum type, GLvoid *data); GLAPI void APIENTRY glGetColorTableParameterivEXT (GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetColorTableParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLCOLORTABLEEXTPROC) (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const GLvoid *table); typedef void (APIENTRYP PFNGLGETCOLORTABLEEXTPROC) (GLenum target, GLenum format, GLenum type, GLvoid *data); typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); #endif #ifndef GL_EXT_clip_volume_hint #define GL_EXT_clip_volume_hint 1 #endif #ifndef GL_SGIX_list_priority #define GL_SGIX_list_priority 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glGetListParameterfvSGIX (GLuint list, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetListParameterivSGIX (GLuint list, GLenum pname, GLint *params); GLAPI void APIENTRY glListParameterfSGIX (GLuint list, GLenum pname, GLfloat param); GLAPI void APIENTRY glListParameterfvSGIX (GLuint list, GLenum pname, const GLfloat *params); GLAPI void APIENTRY glListParameteriSGIX (GLuint list, GLenum pname, GLint param); GLAPI void APIENTRY glListParameterivSGIX (GLuint list, GLenum pname, const GLint *params); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLGETLISTPARAMETERFVSGIXPROC) (GLuint list, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETLISTPARAMETERIVSGIXPROC) (GLuint list, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLLISTPARAMETERFSGIXPROC) (GLuint list, GLenum pname, GLfloat param); typedef void (APIENTRYP PFNGLLISTPARAMETERFVSGIXPROC) (GLuint list, GLenum pname, const GLfloat *params); typedef void (APIENTRYP PFNGLLISTPARAMETERISGIXPROC) (GLuint list, GLenum pname, GLint param); typedef void (APIENTRYP PFNGLLISTPARAMETERIVSGIXPROC) (GLuint list, GLenum pname, const GLint *params); #endif #ifndef GL_SGIX_ir_instrument1 #define GL_SGIX_ir_instrument1 1 #endif #ifndef GL_SGIX_calligraphic_fragment #define GL_SGIX_calligraphic_fragment 1 #endif #ifndef GL_SGIX_texture_lod_bias #define GL_SGIX_texture_lod_bias 1 #endif #ifndef GL_SGIX_shadow_ambient #define GL_SGIX_shadow_ambient 1 #endif #ifndef GL_EXT_index_texture #define GL_EXT_index_texture 1 #endif #ifndef GL_EXT_index_material #define GL_EXT_index_material 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glIndexMaterialEXT (GLenum face, GLenum mode); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLINDEXMATERIALEXTPROC) (GLenum face, GLenum mode); #endif #ifndef GL_EXT_index_func #define GL_EXT_index_func 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glIndexFuncEXT (GLenum func, GLclampf ref); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLINDEXFUNCEXTPROC) (GLenum func, GLclampf ref); #endif #ifndef GL_EXT_index_array_formats #define GL_EXT_index_array_formats 1 #endif #ifndef GL_EXT_compiled_vertex_array #define GL_EXT_compiled_vertex_array 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glLockArraysEXT (GLint first, GLsizei count); GLAPI void APIENTRY glUnlockArraysEXT (void); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLLOCKARRAYSEXTPROC) (GLint first, GLsizei count); typedef void (APIENTRYP PFNGLUNLOCKARRAYSEXTPROC) (void); #endif #ifndef GL_EXT_cull_vertex #define GL_EXT_cull_vertex 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glCullParameterdvEXT (GLenum pname, GLdouble *params); GLAPI void APIENTRY glCullParameterfvEXT (GLenum pname, GLfloat *params); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLCULLPARAMETERDVEXTPROC) (GLenum pname, GLdouble *params); typedef void (APIENTRYP PFNGLCULLPARAMETERFVEXTPROC) (GLenum pname, GLfloat *params); #endif #ifndef GL_SGIX_ycrcb #define GL_SGIX_ycrcb 1 #endif #ifndef GL_SGIX_fragment_lighting #define GL_SGIX_fragment_lighting 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glFragmentColorMaterialSGIX (GLenum face, GLenum mode); GLAPI void APIENTRY glFragmentLightfSGIX (GLenum light, GLenum pname, GLfloat param); GLAPI void APIENTRY glFragmentLightfvSGIX (GLenum light, GLenum pname, const GLfloat *params); GLAPI void APIENTRY glFragmentLightiSGIX (GLenum light, GLenum pname, GLint param); GLAPI void APIENTRY glFragmentLightivSGIX (GLenum light, GLenum pname, const GLint *params); GLAPI void APIENTRY glFragmentLightModelfSGIX (GLenum pname, GLfloat param); GLAPI void APIENTRY glFragmentLightModelfvSGIX (GLenum pname, const GLfloat *params); GLAPI void APIENTRY glFragmentLightModeliSGIX (GLenum pname, GLint param); GLAPI void APIENTRY glFragmentLightModelivSGIX (GLenum pname, const GLint *params); GLAPI void APIENTRY glFragmentMaterialfSGIX (GLenum face, GLenum pname, GLfloat param); GLAPI void APIENTRY glFragmentMaterialfvSGIX (GLenum face, GLenum pname, const GLfloat *params); GLAPI void APIENTRY glFragmentMaterialiSGIX (GLenum face, GLenum pname, GLint param); GLAPI void APIENTRY glFragmentMaterialivSGIX (GLenum face, GLenum pname, const GLint *params); GLAPI void APIENTRY glGetFragmentLightfvSGIX (GLenum light, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetFragmentLightivSGIX (GLenum light, GLenum pname, GLint *params); GLAPI void APIENTRY glGetFragmentMaterialfvSGIX (GLenum face, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetFragmentMaterialivSGIX (GLenum face, GLenum pname, GLint *params); GLAPI void APIENTRY glLightEnviSGIX (GLenum pname, GLint param); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLFRAGMENTCOLORMATERIALSGIXPROC) (GLenum face, GLenum mode); typedef void (APIENTRYP PFNGLFRAGMENTLIGHTFSGIXPROC) (GLenum light, GLenum pname, GLfloat param); typedef void (APIENTRYP PFNGLFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, const GLfloat *params); typedef void (APIENTRYP PFNGLFRAGMENTLIGHTISGIXPROC) (GLenum light, GLenum pname, GLint param); typedef void (APIENTRYP PFNGLFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELFSGIXPROC) (GLenum pname, GLfloat param); typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELFVSGIXPROC) (GLenum pname, const GLfloat *params); typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELISGIXPROC) (GLenum pname, GLint param); typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELIVSGIXPROC) (GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLFRAGMENTMATERIALFSGIXPROC) (GLenum face, GLenum pname, GLfloat param); typedef void (APIENTRYP PFNGLFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, const GLfloat *params); typedef void (APIENTRYP PFNGLFRAGMENTMATERIALISGIXPROC) (GLenum face, GLenum pname, GLint param); typedef void (APIENTRYP PFNGLFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLGETFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLLIGHTENVISGIXPROC) (GLenum pname, GLint param); #endif #ifndef GL_IBM_rasterpos_clip #define GL_IBM_rasterpos_clip 1 #endif #ifndef GL_HP_texture_lighting #define GL_HP_texture_lighting 1 #endif #ifndef GL_EXT_draw_range_elements #define GL_EXT_draw_range_elements 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDrawRangeElementsEXT (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSEXTPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices); #endif #ifndef GL_WIN_phong_shading #define GL_WIN_phong_shading 1 #endif #ifndef GL_WIN_specular_fog #define GL_WIN_specular_fog 1 #endif #ifndef GL_EXT_light_texture #define GL_EXT_light_texture 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glApplyTextureEXT (GLenum mode); GLAPI void APIENTRY glTextureLightEXT (GLenum pname); GLAPI void APIENTRY glTextureMaterialEXT (GLenum face, GLenum mode); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLAPPLYTEXTUREEXTPROC) (GLenum mode); typedef void (APIENTRYP PFNGLTEXTURELIGHTEXTPROC) (GLenum pname); typedef void (APIENTRYP PFNGLTEXTUREMATERIALEXTPROC) (GLenum face, GLenum mode); #endif #ifndef GL_SGIX_blend_alpha_minmax #define GL_SGIX_blend_alpha_minmax 1 #endif #ifndef GL_EXT_bgra #define GL_EXT_bgra 1 #endif #ifndef GL_SGIX_async #define GL_SGIX_async 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glAsyncMarkerSGIX (GLuint marker); GLAPI GLint APIENTRY glFinishAsyncSGIX (GLuint *markerp); GLAPI GLint APIENTRY glPollAsyncSGIX (GLuint *markerp); GLAPI GLuint APIENTRY glGenAsyncMarkersSGIX (GLsizei range); GLAPI void APIENTRY glDeleteAsyncMarkersSGIX (GLuint marker, GLsizei range); GLAPI GLboolean APIENTRY glIsAsyncMarkerSGIX (GLuint marker); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLASYNCMARKERSGIXPROC) (GLuint marker); typedef GLint (APIENTRYP PFNGLFINISHASYNCSGIXPROC) (GLuint *markerp); typedef GLint (APIENTRYP PFNGLPOLLASYNCSGIXPROC) (GLuint *markerp); typedef GLuint (APIENTRYP PFNGLGENASYNCMARKERSSGIXPROC) (GLsizei range); typedef void (APIENTRYP PFNGLDELETEASYNCMARKERSSGIXPROC) (GLuint marker, GLsizei range); typedef GLboolean (APIENTRYP PFNGLISASYNCMARKERSGIXPROC) (GLuint marker); #endif #ifndef GL_SGIX_async_pixel #define GL_SGIX_async_pixel 1 #endif #ifndef GL_SGIX_async_histogram #define GL_SGIX_async_histogram 1 #endif #ifndef GL_INTEL_parallel_arrays #define GL_INTEL_parallel_arrays 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glVertexPointervINTEL (GLint size, GLenum type, const GLvoid* *pointer); GLAPI void APIENTRY glNormalPointervINTEL (GLenum type, const GLvoid* *pointer); GLAPI void APIENTRY glColorPointervINTEL (GLint size, GLenum type, const GLvoid* *pointer); GLAPI void APIENTRY glTexCoordPointervINTEL (GLint size, GLenum type, const GLvoid* *pointer); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLVERTEXPOINTERVINTELPROC) (GLint size, GLenum type, const GLvoid* *pointer); typedef void (APIENTRYP PFNGLNORMALPOINTERVINTELPROC) (GLenum type, const GLvoid* *pointer); typedef void (APIENTRYP PFNGLCOLORPOINTERVINTELPROC) (GLint size, GLenum type, const GLvoid* *pointer); typedef void (APIENTRYP PFNGLTEXCOORDPOINTERVINTELPROC) (GLint size, GLenum type, const GLvoid* *pointer); #endif #ifndef GL_HP_occlusion_test #define GL_HP_occlusion_test 1 #endif #ifndef GL_EXT_pixel_transform #define GL_EXT_pixel_transform 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glPixelTransformParameteriEXT (GLenum target, GLenum pname, GLint param); GLAPI void APIENTRY glPixelTransformParameterfEXT (GLenum target, GLenum pname, GLfloat param); GLAPI void APIENTRY glPixelTransformParameterivEXT (GLenum target, GLenum pname, const GLint *params); GLAPI void APIENTRY glPixelTransformParameterfvEXT (GLenum target, GLenum pname, const GLfloat *params); GLAPI void APIENTRY glGetPixelTransformParameterivEXT (GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetPixelTransformParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint param); typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat param); typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat *params); typedef void (APIENTRYP PFNGLGETPIXELTRANSFORMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETPIXELTRANSFORMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); #endif #ifndef GL_EXT_pixel_transform_color_table #define GL_EXT_pixel_transform_color_table 1 #endif #ifndef GL_EXT_shared_texture_palette #define GL_EXT_shared_texture_palette 1 #endif #ifndef GL_EXT_separate_specular_color #define GL_EXT_separate_specular_color 1 #endif #ifndef GL_EXT_secondary_color #define GL_EXT_secondary_color 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glSecondaryColor3bEXT (GLbyte red, GLbyte green, GLbyte blue); GLAPI void APIENTRY glSecondaryColor3bvEXT (const GLbyte *v); GLAPI void APIENTRY glSecondaryColor3dEXT (GLdouble red, GLdouble green, GLdouble blue); GLAPI void APIENTRY glSecondaryColor3dvEXT (const GLdouble *v); GLAPI void APIENTRY glSecondaryColor3fEXT (GLfloat red, GLfloat green, GLfloat blue); GLAPI void APIENTRY glSecondaryColor3fvEXT (const GLfloat *v); GLAPI void APIENTRY glSecondaryColor3iEXT (GLint red, GLint green, GLint blue); GLAPI void APIENTRY glSecondaryColor3ivEXT (const GLint *v); GLAPI void APIENTRY glSecondaryColor3sEXT (GLshort red, GLshort green, GLshort blue); GLAPI void APIENTRY glSecondaryColor3svEXT (const GLshort *v); GLAPI void APIENTRY glSecondaryColor3ubEXT (GLubyte red, GLubyte green, GLubyte blue); GLAPI void APIENTRY glSecondaryColor3ubvEXT (const GLubyte *v); GLAPI void APIENTRY glSecondaryColor3uiEXT (GLuint red, GLuint green, GLuint blue); GLAPI void APIENTRY glSecondaryColor3uivEXT (const GLuint *v); GLAPI void APIENTRY glSecondaryColor3usEXT (GLushort red, GLushort green, GLushort blue); GLAPI void APIENTRY glSecondaryColor3usvEXT (const GLushort *v); GLAPI void APIENTRY glSecondaryColorPointerEXT (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BEXTPROC) (GLbyte red, GLbyte green, GLbyte blue); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BVEXTPROC) (const GLbyte *v); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DEXTPROC) (GLdouble red, GLdouble green, GLdouble blue); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DVEXTPROC) (const GLdouble *v); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FEXTPROC) (GLfloat red, GLfloat green, GLfloat blue); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FVEXTPROC) (const GLfloat *v); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IEXTPROC) (GLint red, GLint green, GLint blue); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IVEXTPROC) (const GLint *v); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SEXTPROC) (GLshort red, GLshort green, GLshort blue); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SVEXTPROC) (const GLshort *v); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBEXTPROC) (GLubyte red, GLubyte green, GLubyte blue); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBVEXTPROC) (const GLubyte *v); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIEXTPROC) (GLuint red, GLuint green, GLuint blue); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIVEXTPROC) (const GLuint *v); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USEXTPROC) (GLushort red, GLushort green, GLushort blue); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USVEXTPROC) (const GLushort *v); typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); #endif #ifndef GL_EXT_texture_perturb_normal #define GL_EXT_texture_perturb_normal 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glTextureNormalEXT (GLenum mode); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLTEXTURENORMALEXTPROC) (GLenum mode); #endif #ifndef GL_EXT_multi_draw_arrays #define GL_EXT_multi_draw_arrays 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glMultiDrawArraysEXT (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); GLAPI void APIENTRY glMultiDrawElementsEXT (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSEXTPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSEXTPROC) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount); #endif #ifndef GL_EXT_fog_coord #define GL_EXT_fog_coord 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glFogCoordfEXT (GLfloat coord); GLAPI void APIENTRY glFogCoordfvEXT (const GLfloat *coord); GLAPI void APIENTRY glFogCoorddEXT (GLdouble coord); GLAPI void APIENTRY glFogCoorddvEXT (const GLdouble *coord); GLAPI void APIENTRY glFogCoordPointerEXT (GLenum type, GLsizei stride, const GLvoid *pointer); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLFOGCOORDFEXTPROC) (GLfloat coord); typedef void (APIENTRYP PFNGLFOGCOORDFVEXTPROC) (const GLfloat *coord); typedef void (APIENTRYP PFNGLFOGCOORDDEXTPROC) (GLdouble coord); typedef void (APIENTRYP PFNGLFOGCOORDDVEXTPROC) (const GLdouble *coord); typedef void (APIENTRYP PFNGLFOGCOORDPOINTEREXTPROC) (GLenum type, GLsizei stride, const GLvoid *pointer); #endif #ifndef GL_REND_screen_coordinates #define GL_REND_screen_coordinates 1 #endif #ifndef GL_EXT_coordinate_frame #define GL_EXT_coordinate_frame 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glTangent3bEXT (GLbyte tx, GLbyte ty, GLbyte tz); GLAPI void APIENTRY glTangent3bvEXT (const GLbyte *v); GLAPI void APIENTRY glTangent3dEXT (GLdouble tx, GLdouble ty, GLdouble tz); GLAPI void APIENTRY glTangent3dvEXT (const GLdouble *v); GLAPI void APIENTRY glTangent3fEXT (GLfloat tx, GLfloat ty, GLfloat tz); GLAPI void APIENTRY glTangent3fvEXT (const GLfloat *v); GLAPI void APIENTRY glTangent3iEXT (GLint tx, GLint ty, GLint tz); GLAPI void APIENTRY glTangent3ivEXT (const GLint *v); GLAPI void APIENTRY glTangent3sEXT (GLshort tx, GLshort ty, GLshort tz); GLAPI void APIENTRY glTangent3svEXT (const GLshort *v); GLAPI void APIENTRY glBinormal3bEXT (GLbyte bx, GLbyte by, GLbyte bz); GLAPI void APIENTRY glBinormal3bvEXT (const GLbyte *v); GLAPI void APIENTRY glBinormal3dEXT (GLdouble bx, GLdouble by, GLdouble bz); GLAPI void APIENTRY glBinormal3dvEXT (const GLdouble *v); GLAPI void APIENTRY glBinormal3fEXT (GLfloat bx, GLfloat by, GLfloat bz); GLAPI void APIENTRY glBinormal3fvEXT (const GLfloat *v); GLAPI void APIENTRY glBinormal3iEXT (GLint bx, GLint by, GLint bz); GLAPI void APIENTRY glBinormal3ivEXT (const GLint *v); GLAPI void APIENTRY glBinormal3sEXT (GLshort bx, GLshort by, GLshort bz); GLAPI void APIENTRY glBinormal3svEXT (const GLshort *v); GLAPI void APIENTRY glTangentPointerEXT (GLenum type, GLsizei stride, const GLvoid *pointer); GLAPI void APIENTRY glBinormalPointerEXT (GLenum type, GLsizei stride, const GLvoid *pointer); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLTANGENT3BEXTPROC) (GLbyte tx, GLbyte ty, GLbyte tz); typedef void (APIENTRYP PFNGLTANGENT3BVEXTPROC) (const GLbyte *v); typedef void (APIENTRYP PFNGLTANGENT3DEXTPROC) (GLdouble tx, GLdouble ty, GLdouble tz); typedef void (APIENTRYP PFNGLTANGENT3DVEXTPROC) (const GLdouble *v); typedef void (APIENTRYP PFNGLTANGENT3FEXTPROC) (GLfloat tx, GLfloat ty, GLfloat tz); typedef void (APIENTRYP PFNGLTANGENT3FVEXTPROC) (const GLfloat *v); typedef void (APIENTRYP PFNGLTANGENT3IEXTPROC) (GLint tx, GLint ty, GLint tz); typedef void (APIENTRYP PFNGLTANGENT3IVEXTPROC) (const GLint *v); typedef void (APIENTRYP PFNGLTANGENT3SEXTPROC) (GLshort tx, GLshort ty, GLshort tz); typedef void (APIENTRYP PFNGLTANGENT3SVEXTPROC) (const GLshort *v); typedef void (APIENTRYP PFNGLBINORMAL3BEXTPROC) (GLbyte bx, GLbyte by, GLbyte bz); typedef void (APIENTRYP PFNGLBINORMAL3BVEXTPROC) (const GLbyte *v); typedef void (APIENTRYP PFNGLBINORMAL3DEXTPROC) (GLdouble bx, GLdouble by, GLdouble bz); typedef void (APIENTRYP PFNGLBINORMAL3DVEXTPROC) (const GLdouble *v); typedef void (APIENTRYP PFNGLBINORMAL3FEXTPROC) (GLfloat bx, GLfloat by, GLfloat bz); typedef void (APIENTRYP PFNGLBINORMAL3FVEXTPROC) (const GLfloat *v); typedef void (APIENTRYP PFNGLBINORMAL3IEXTPROC) (GLint bx, GLint by, GLint bz); typedef void (APIENTRYP PFNGLBINORMAL3IVEXTPROC) (const GLint *v); typedef void (APIENTRYP PFNGLBINORMAL3SEXTPROC) (GLshort bx, GLshort by, GLshort bz); typedef void (APIENTRYP PFNGLBINORMAL3SVEXTPROC) (const GLshort *v); typedef void (APIENTRYP PFNGLTANGENTPOINTEREXTPROC) (GLenum type, GLsizei stride, const GLvoid *pointer); typedef void (APIENTRYP PFNGLBINORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, const GLvoid *pointer); #endif #ifndef GL_EXT_texture_env_combine #define GL_EXT_texture_env_combine 1 #endif #ifndef GL_APPLE_specular_vector #define GL_APPLE_specular_vector 1 #endif #ifndef GL_APPLE_transform_hint #define GL_APPLE_transform_hint 1 #endif #ifndef GL_SGIX_fog_scale #define GL_SGIX_fog_scale 1 #endif #ifndef GL_SUNX_constant_data #define GL_SUNX_constant_data 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glFinishTextureSUNX (void); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLFINISHTEXTURESUNXPROC) (void); #endif #ifndef GL_SUN_global_alpha #define GL_SUN_global_alpha 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glGlobalAlphaFactorbSUN (GLbyte factor); GLAPI void APIENTRY glGlobalAlphaFactorsSUN (GLshort factor); GLAPI void APIENTRY glGlobalAlphaFactoriSUN (GLint factor); GLAPI void APIENTRY glGlobalAlphaFactorfSUN (GLfloat factor); GLAPI void APIENTRY glGlobalAlphaFactordSUN (GLdouble factor); GLAPI void APIENTRY glGlobalAlphaFactorubSUN (GLubyte factor); GLAPI void APIENTRY glGlobalAlphaFactorusSUN (GLushort factor); GLAPI void APIENTRY glGlobalAlphaFactoruiSUN (GLuint factor); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORBSUNPROC) (GLbyte factor); typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORSSUNPROC) (GLshort factor); typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORISUNPROC) (GLint factor); typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORFSUNPROC) (GLfloat factor); typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORDSUNPROC) (GLdouble factor); typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUBSUNPROC) (GLubyte factor); typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUSSUNPROC) (GLushort factor); typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUISUNPROC) (GLuint factor); #endif #ifndef GL_SUN_triangle_list #define GL_SUN_triangle_list 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glReplacementCodeuiSUN (GLuint code); GLAPI void APIENTRY glReplacementCodeusSUN (GLushort code); GLAPI void APIENTRY glReplacementCodeubSUN (GLubyte code); GLAPI void APIENTRY glReplacementCodeuivSUN (const GLuint *code); GLAPI void APIENTRY glReplacementCodeusvSUN (const GLushort *code); GLAPI void APIENTRY glReplacementCodeubvSUN (const GLubyte *code); GLAPI void APIENTRY glReplacementCodePointerSUN (GLenum type, GLsizei stride, const GLvoid* *pointer); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLREPLACEMENTCODEUISUNPROC) (GLuint code); typedef void (APIENTRYP PFNGLREPLACEMENTCODEUSSUNPROC) (GLushort code); typedef void (APIENTRYP PFNGLREPLACEMENTCODEUBSUNPROC) (GLubyte code); typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVSUNPROC) (const GLuint *code); typedef void (APIENTRYP PFNGLREPLACEMENTCODEUSVSUNPROC) (const GLushort *code); typedef void (APIENTRYP PFNGLREPLACEMENTCODEUBVSUNPROC) (const GLubyte *code); typedef void (APIENTRYP PFNGLREPLACEMENTCODEPOINTERSUNPROC) (GLenum type, GLsizei stride, const GLvoid* *pointer); #endif #ifndef GL_SUN_vertex #define GL_SUN_vertex 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glColor4ubVertex2fSUN (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y); GLAPI void APIENTRY glColor4ubVertex2fvSUN (const GLubyte *c, const GLfloat *v); GLAPI void APIENTRY glColor4ubVertex3fSUN (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glColor4ubVertex3fvSUN (const GLubyte *c, const GLfloat *v); GLAPI void APIENTRY glColor3fVertex3fSUN (GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glColor3fVertex3fvSUN (const GLfloat *c, const GLfloat *v); GLAPI void APIENTRY glNormal3fVertex3fSUN (GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glNormal3fVertex3fvSUN (const GLfloat *n, const GLfloat *v); GLAPI void APIENTRY glColor4fNormal3fVertex3fSUN (GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glColor4fNormal3fVertex3fvSUN (const GLfloat *c, const GLfloat *n, const GLfloat *v); GLAPI void APIENTRY glTexCoord2fVertex3fSUN (GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glTexCoord2fVertex3fvSUN (const GLfloat *tc, const GLfloat *v); GLAPI void APIENTRY glTexCoord4fVertex4fSUN (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w); GLAPI void APIENTRY glTexCoord4fVertex4fvSUN (const GLfloat *tc, const GLfloat *v); GLAPI void APIENTRY glTexCoord2fColor4ubVertex3fSUN (GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glTexCoord2fColor4ubVertex3fvSUN (const GLfloat *tc, const GLubyte *c, const GLfloat *v); GLAPI void APIENTRY glTexCoord2fColor3fVertex3fSUN (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glTexCoord2fColor3fVertex3fvSUN (const GLfloat *tc, const GLfloat *c, const GLfloat *v); GLAPI void APIENTRY glTexCoord2fNormal3fVertex3fSUN (GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glTexCoord2fNormal3fVertex3fvSUN (const GLfloat *tc, const GLfloat *n, const GLfloat *v); GLAPI void APIENTRY glTexCoord2fColor4fNormal3fVertex3fSUN (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glTexCoord2fColor4fNormal3fVertex3fvSUN (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); GLAPI void APIENTRY glTexCoord4fColor4fNormal3fVertex4fSUN (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z, GLfloat w); GLAPI void APIENTRY glTexCoord4fColor4fNormal3fVertex4fvSUN (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); GLAPI void APIENTRY glReplacementCodeuiVertex3fSUN (GLuint rc, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glReplacementCodeuiVertex3fvSUN (const GLuint *rc, const GLfloat *v); GLAPI void APIENTRY glReplacementCodeuiColor4ubVertex3fSUN (GLuint rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glReplacementCodeuiColor4ubVertex3fvSUN (const GLuint *rc, const GLubyte *c, const GLfloat *v); GLAPI void APIENTRY glReplacementCodeuiColor3fVertex3fSUN (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glReplacementCodeuiColor3fVertex3fvSUN (const GLuint *rc, const GLfloat *c, const GLfloat *v); GLAPI void APIENTRY glReplacementCodeuiNormal3fVertex3fSUN (GLuint rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glReplacementCodeuiNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *n, const GLfloat *v); GLAPI void APIENTRY glReplacementCodeuiColor4fNormal3fVertex3fSUN (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glReplacementCodeuiColor4fNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *c, const GLfloat *n, const GLfloat *v); GLAPI void APIENTRY glReplacementCodeuiTexCoord2fVertex3fSUN (GLuint rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glReplacementCodeuiTexCoord2fVertex3fvSUN (const GLuint *rc, const GLfloat *tc, const GLfloat *v); GLAPI void APIENTRY glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN (GLuint rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *tc, const GLfloat *n, const GLfloat *v); GLAPI void APIENTRY glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN (GLuint rc, GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX2FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y); typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX2FVSUNPROC) (const GLubyte *c, const GLfloat *v); typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX3FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX3FVSUNPROC) (const GLubyte *c, const GLfloat *v); typedef void (APIENTRYP PFNGLCOLOR3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLCOLOR3FVERTEX3FVSUNPROC) (const GLfloat *c, const GLfloat *v); typedef void (APIENTRYP PFNGLNORMAL3FVERTEX3FSUNPROC) (GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *n, const GLfloat *v); typedef void (APIENTRYP PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *c, const GLfloat *n, const GLfloat *v); typedef void (APIENTRYP PFNGLTEXCOORD2FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLTEXCOORD2FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *v); typedef void (APIENTRYP PFNGLTEXCOORD4FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w); typedef void (APIENTRYP PFNGLTEXCOORD4FVERTEX4FVSUNPROC) (const GLfloat *tc, const GLfloat *v); typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC) (const GLfloat *tc, const GLubyte *c, const GLfloat *v); typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *v); typedef void (APIENTRYP PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *n, const GLfloat *v); typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); typedef void (APIENTRYP PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z, GLfloat w); typedef void (APIENTRYP PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC) (GLuint rc, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *v); typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC) (GLuint rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC) (const GLuint *rc, const GLubyte *c, const GLfloat *v); typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC) (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *c, const GLfloat *v); typedef void (APIENTRYP PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *n, const GLfloat *v); typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *c, const GLfloat *n, const GLfloat *v); typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *v); typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *n, const GLfloat *v); typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); #endif #ifndef GL_EXT_blend_func_separate #define GL_EXT_blend_func_separate 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBlendFuncSeparateEXT (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEEXTPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); #endif #ifndef GL_INGR_blend_func_separate #define GL_INGR_blend_func_separate 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBlendFuncSeparateINGR (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEINGRPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); #endif #ifndef GL_INGR_color_clamp #define GL_INGR_color_clamp 1 #endif #ifndef GL_INGR_interlace_read #define GL_INGR_interlace_read 1 #endif #ifndef GL_EXT_stencil_wrap #define GL_EXT_stencil_wrap 1 #endif #ifndef GL_EXT_422_pixels #define GL_EXT_422_pixels 1 #endif #ifndef GL_NV_texgen_reflection #define GL_NV_texgen_reflection 1 #endif #ifndef GL_SUN_convolution_border_modes #define GL_SUN_convolution_border_modes 1 #endif #ifndef GL_EXT_texture_env_add #define GL_EXT_texture_env_add 1 #endif #ifndef GL_EXT_texture_lod_bias #define GL_EXT_texture_lod_bias 1 #endif #ifndef GL_EXT_texture_filter_anisotropic #define GL_EXT_texture_filter_anisotropic 1 #endif #ifndef GL_EXT_vertex_weighting #define GL_EXT_vertex_weighting 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glVertexWeightfEXT (GLfloat weight); GLAPI void APIENTRY glVertexWeightfvEXT (const GLfloat *weight); GLAPI void APIENTRY glVertexWeightPointerEXT (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLVERTEXWEIGHTFEXTPROC) (GLfloat weight); typedef void (APIENTRYP PFNGLVERTEXWEIGHTFVEXTPROC) (const GLfloat *weight); typedef void (APIENTRYP PFNGLVERTEXWEIGHTPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); #endif #ifndef GL_NV_light_max_exponent #define GL_NV_light_max_exponent 1 #endif #ifndef GL_NV_vertex_array_range #define GL_NV_vertex_array_range 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glFlushVertexArrayRangeNV (void); GLAPI void APIENTRY glVertexArrayRangeNV (GLsizei length, const GLvoid *pointer); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLFLUSHVERTEXARRAYRANGENVPROC) (void); typedef void (APIENTRYP PFNGLVERTEXARRAYRANGENVPROC) (GLsizei length, const GLvoid *pointer); #endif #ifndef GL_NV_register_combiners #define GL_NV_register_combiners 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glCombinerParameterfvNV (GLenum pname, const GLfloat *params); GLAPI void APIENTRY glCombinerParameterfNV (GLenum pname, GLfloat param); GLAPI void APIENTRY glCombinerParameterivNV (GLenum pname, const GLint *params); GLAPI void APIENTRY glCombinerParameteriNV (GLenum pname, GLint param); GLAPI void APIENTRY glCombinerInputNV (GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); GLAPI void APIENTRY glCombinerOutputNV (GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum); GLAPI void APIENTRY glFinalCombinerInputNV (GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); GLAPI void APIENTRY glGetCombinerInputParameterfvNV (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetCombinerInputParameterivNV (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint *params); GLAPI void APIENTRY glGetCombinerOutputParameterfvNV (GLenum stage, GLenum portion, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetCombinerOutputParameterivNV (GLenum stage, GLenum portion, GLenum pname, GLint *params); GLAPI void APIENTRY glGetFinalCombinerInputParameterfvNV (GLenum variable, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetFinalCombinerInputParameterivNV (GLenum variable, GLenum pname, GLint *params); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLCOMBINERPARAMETERFVNVPROC) (GLenum pname, const GLfloat *params); typedef void (APIENTRYP PFNGLCOMBINERPARAMETERFNVPROC) (GLenum pname, GLfloat param); typedef void (APIENTRYP PFNGLCOMBINERPARAMETERIVNVPROC) (GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLCOMBINERPARAMETERINVPROC) (GLenum pname, GLint param); typedef void (APIENTRYP PFNGLCOMBINERINPUTNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); typedef void (APIENTRYP PFNGLCOMBINEROUTPUTNVPROC) (GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum); typedef void (APIENTRYP PFNGLFINALCOMBINERINPUTNVPROC) (GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); typedef void (APIENTRYP PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC) (GLenum variable, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC) (GLenum variable, GLenum pname, GLint *params); #endif #ifndef GL_NV_fog_distance #define GL_NV_fog_distance 1 #endif #ifndef GL_NV_texgen_emboss #define GL_NV_texgen_emboss 1 #endif #ifndef GL_NV_blend_square #define GL_NV_blend_square 1 #endif #ifndef GL_NV_texture_env_combine4 #define GL_NV_texture_env_combine4 1 #endif #ifndef GL_MESA_resize_buffers #define GL_MESA_resize_buffers 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glResizeBuffersMESA (void); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLRESIZEBUFFERSMESAPROC) (void); #endif #ifndef GL_MESA_window_pos #define GL_MESA_window_pos 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glWindowPos2dMESA (GLdouble x, GLdouble y); GLAPI void APIENTRY glWindowPos2dvMESA (const GLdouble *v); GLAPI void APIENTRY glWindowPos2fMESA (GLfloat x, GLfloat y); GLAPI void APIENTRY glWindowPos2fvMESA (const GLfloat *v); GLAPI void APIENTRY glWindowPos2iMESA (GLint x, GLint y); GLAPI void APIENTRY glWindowPos2ivMESA (const GLint *v); GLAPI void APIENTRY glWindowPos2sMESA (GLshort x, GLshort y); GLAPI void APIENTRY glWindowPos2svMESA (const GLshort *v); GLAPI void APIENTRY glWindowPos3dMESA (GLdouble x, GLdouble y, GLdouble z); GLAPI void APIENTRY glWindowPos3dvMESA (const GLdouble *v); GLAPI void APIENTRY glWindowPos3fMESA (GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glWindowPos3fvMESA (const GLfloat *v); GLAPI void APIENTRY glWindowPos3iMESA (GLint x, GLint y, GLint z); GLAPI void APIENTRY glWindowPos3ivMESA (const GLint *v); GLAPI void APIENTRY glWindowPos3sMESA (GLshort x, GLshort y, GLshort z); GLAPI void APIENTRY glWindowPos3svMESA (const GLshort *v); GLAPI void APIENTRY glWindowPos4dMESA (GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLAPI void APIENTRY glWindowPos4dvMESA (const GLdouble *v); GLAPI void APIENTRY glWindowPos4fMESA (GLfloat x, GLfloat y, GLfloat z, GLfloat w); GLAPI void APIENTRY glWindowPos4fvMESA (const GLfloat *v); GLAPI void APIENTRY glWindowPos4iMESA (GLint x, GLint y, GLint z, GLint w); GLAPI void APIENTRY glWindowPos4ivMESA (const GLint *v); GLAPI void APIENTRY glWindowPos4sMESA (GLshort x, GLshort y, GLshort z, GLshort w); GLAPI void APIENTRY glWindowPos4svMESA (const GLshort *v); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLWINDOWPOS2DMESAPROC) (GLdouble x, GLdouble y); typedef void (APIENTRYP PFNGLWINDOWPOS2DVMESAPROC) (const GLdouble *v); typedef void (APIENTRYP PFNGLWINDOWPOS2FMESAPROC) (GLfloat x, GLfloat y); typedef void (APIENTRYP PFNGLWINDOWPOS2FVMESAPROC) (const GLfloat *v); typedef void (APIENTRYP PFNGLWINDOWPOS2IMESAPROC) (GLint x, GLint y); typedef void (APIENTRYP PFNGLWINDOWPOS2IVMESAPROC) (const GLint *v); typedef void (APIENTRYP PFNGLWINDOWPOS2SMESAPROC) (GLshort x, GLshort y); typedef void (APIENTRYP PFNGLWINDOWPOS2SVMESAPROC) (const GLshort *v); typedef void (APIENTRYP PFNGLWINDOWPOS3DMESAPROC) (GLdouble x, GLdouble y, GLdouble z); typedef void (APIENTRYP PFNGLWINDOWPOS3DVMESAPROC) (const GLdouble *v); typedef void (APIENTRYP PFNGLWINDOWPOS3FMESAPROC) (GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLWINDOWPOS3FVMESAPROC) (const GLfloat *v); typedef void (APIENTRYP PFNGLWINDOWPOS3IMESAPROC) (GLint x, GLint y, GLint z); typedef void (APIENTRYP PFNGLWINDOWPOS3IVMESAPROC) (const GLint *v); typedef void (APIENTRYP PFNGLWINDOWPOS3SMESAPROC) (GLshort x, GLshort y, GLshort z); typedef void (APIENTRYP PFNGLWINDOWPOS3SVMESAPROC) (const GLshort *v); typedef void (APIENTRYP PFNGLWINDOWPOS4DMESAPROC) (GLdouble x, GLdouble y, GLdouble z, GLdouble w); typedef void (APIENTRYP PFNGLWINDOWPOS4DVMESAPROC) (const GLdouble *v); typedef void (APIENTRYP PFNGLWINDOWPOS4FMESAPROC) (GLfloat x, GLfloat y, GLfloat z, GLfloat w); typedef void (APIENTRYP PFNGLWINDOWPOS4FVMESAPROC) (const GLfloat *v); typedef void (APIENTRYP PFNGLWINDOWPOS4IMESAPROC) (GLint x, GLint y, GLint z, GLint w); typedef void (APIENTRYP PFNGLWINDOWPOS4IVMESAPROC) (const GLint *v); typedef void (APIENTRYP PFNGLWINDOWPOS4SMESAPROC) (GLshort x, GLshort y, GLshort z, GLshort w); typedef void (APIENTRYP PFNGLWINDOWPOS4SVMESAPROC) (const GLshort *v); #endif #ifndef GL_EXT_texture_compression_s3tc #define GL_EXT_texture_compression_s3tc 1 #endif #ifndef GL_IBM_cull_vertex #define GL_IBM_cull_vertex 1 #endif #ifndef GL_IBM_multimode_draw_arrays #define GL_IBM_multimode_draw_arrays 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glMultiModeDrawArraysIBM (const GLenum *mode, const GLint *first, const GLsizei *count, GLsizei primcount, GLint modestride); GLAPI void APIENTRY glMultiModeDrawElementsIBM (const GLenum *mode, const GLsizei *count, GLenum type, const GLvoid* const *indices, GLsizei primcount, GLint modestride); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLMULTIMODEDRAWARRAYSIBMPROC) (const GLenum *mode, const GLint *first, const GLsizei *count, GLsizei primcount, GLint modestride); typedef void (APIENTRYP PFNGLMULTIMODEDRAWELEMENTSIBMPROC) (const GLenum *mode, const GLsizei *count, GLenum type, const GLvoid* const *indices, GLsizei primcount, GLint modestride); #endif #ifndef GL_IBM_vertex_array_lists #define GL_IBM_vertex_array_lists 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glColorPointerListIBM (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); GLAPI void APIENTRY glSecondaryColorPointerListIBM (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); GLAPI void APIENTRY glEdgeFlagPointerListIBM (GLint stride, const GLboolean* *pointer, GLint ptrstride); GLAPI void APIENTRY glFogCoordPointerListIBM (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); GLAPI void APIENTRY glIndexPointerListIBM (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); GLAPI void APIENTRY glNormalPointerListIBM (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); GLAPI void APIENTRY glTexCoordPointerListIBM (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); GLAPI void APIENTRY glVertexPointerListIBM (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); typedef void (APIENTRYP PFNGLEDGEFLAGPOINTERLISTIBMPROC) (GLint stride, const GLboolean* *pointer, GLint ptrstride); typedef void (APIENTRYP PFNGLFOGCOORDPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); typedef void (APIENTRYP PFNGLINDEXPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); typedef void (APIENTRYP PFNGLNORMALPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); typedef void (APIENTRYP PFNGLTEXCOORDPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); typedef void (APIENTRYP PFNGLVERTEXPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); #endif #ifndef GL_SGIX_subsample #define GL_SGIX_subsample 1 #endif #ifndef GL_SGIX_ycrcba #define GL_SGIX_ycrcba 1 #endif #ifndef GL_SGIX_ycrcb_subsample #define GL_SGIX_ycrcb_subsample 1 #endif #ifndef GL_SGIX_depth_pass_instrument #define GL_SGIX_depth_pass_instrument 1 #endif #ifndef GL_3DFX_texture_compression_FXT1 #define GL_3DFX_texture_compression_FXT1 1 #endif #ifndef GL_3DFX_multisample #define GL_3DFX_multisample 1 #endif #ifndef GL_3DFX_tbuffer #define GL_3DFX_tbuffer 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glTbufferMask3DFX (GLuint mask); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLTBUFFERMASK3DFXPROC) (GLuint mask); #endif #ifndef GL_EXT_multisample #define GL_EXT_multisample 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glSampleMaskEXT (GLclampf value, GLboolean invert); GLAPI void APIENTRY glSamplePatternEXT (GLenum pattern); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLSAMPLEMASKEXTPROC) (GLclampf value, GLboolean invert); typedef void (APIENTRYP PFNGLSAMPLEPATTERNEXTPROC) (GLenum pattern); #endif #ifndef GL_SGIX_vertex_preclip #define GL_SGIX_vertex_preclip 1 #endif #ifndef GL_SGIX_convolution_accuracy #define GL_SGIX_convolution_accuracy 1 #endif #ifndef GL_SGIX_resample #define GL_SGIX_resample 1 #endif #ifndef GL_SGIS_point_line_texgen #define GL_SGIS_point_line_texgen 1 #endif #ifndef GL_SGIS_texture_color_mask #define GL_SGIS_texture_color_mask 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glTextureColorMaskSGIS (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLTEXTURECOLORMASKSGISPROC) (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); #endif #ifndef GL_SGIX_igloo_interface #define GL_SGIX_igloo_interface 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glIglooInterfaceSGIX (GLenum pname, const GLvoid *params); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLIGLOOINTERFACESGIXPROC) (GLenum pname, const GLvoid *params); #endif #ifndef GL_EXT_texture_env_dot3 #define GL_EXT_texture_env_dot3 1 #endif #ifndef GL_ATI_texture_mirror_once #define GL_ATI_texture_mirror_once 1 #endif #ifndef GL_NV_fence #define GL_NV_fence 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDeleteFencesNV (GLsizei n, const GLuint *fences); GLAPI void APIENTRY glGenFencesNV (GLsizei n, GLuint *fences); GLAPI GLboolean APIENTRY glIsFenceNV (GLuint fence); GLAPI GLboolean APIENTRY glTestFenceNV (GLuint fence); GLAPI void APIENTRY glGetFenceivNV (GLuint fence, GLenum pname, GLint *params); GLAPI void APIENTRY glFinishFenceNV (GLuint fence); GLAPI void APIENTRY glSetFenceNV (GLuint fence, GLenum condition); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLDELETEFENCESNVPROC) (GLsizei n, const GLuint *fences); typedef void (APIENTRYP PFNGLGENFENCESNVPROC) (GLsizei n, GLuint *fences); typedef GLboolean (APIENTRYP PFNGLISFENCENVPROC) (GLuint fence); typedef GLboolean (APIENTRYP PFNGLTESTFENCENVPROC) (GLuint fence); typedef void (APIENTRYP PFNGLGETFENCEIVNVPROC) (GLuint fence, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLFINISHFENCENVPROC) (GLuint fence); typedef void (APIENTRYP PFNGLSETFENCENVPROC) (GLuint fence, GLenum condition); #endif #ifndef GL_IBM_static_data #define GL_IBM_static_data 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glFlushStaticDataIBM (GLenum target); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLFLUSHSTATICDATAIBMPROC) (GLenum target); #endif #ifndef GL_IBM_texture_mirrored_repeat #define GL_IBM_texture_mirrored_repeat 1 #endif #ifndef GL_NV_evaluators #define GL_NV_evaluators 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glMapControlPointsNV (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const GLvoid *points); GLAPI void APIENTRY glMapParameterivNV (GLenum target, GLenum pname, const GLint *params); GLAPI void APIENTRY glMapParameterfvNV (GLenum target, GLenum pname, const GLfloat *params); GLAPI void APIENTRY glGetMapControlPointsNV (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, GLvoid *points); GLAPI void APIENTRY glGetMapParameterivNV (GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetMapParameterfvNV (GLenum target, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetMapAttribParameterivNV (GLenum target, GLuint index, GLenum pname, GLint *params); GLAPI void APIENTRY glGetMapAttribParameterfvNV (GLenum target, GLuint index, GLenum pname, GLfloat *params); GLAPI void APIENTRY glEvalMapsNV (GLenum target, GLenum mode); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const GLvoid *points); typedef void (APIENTRYP PFNGLMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, const GLfloat *params); typedef void (APIENTRYP PFNGLGETMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, GLvoid *points); typedef void (APIENTRYP PFNGLGETMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETMAPATTRIBPARAMETERIVNVPROC) (GLenum target, GLuint index, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETMAPATTRIBPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLEVALMAPSNVPROC) (GLenum target, GLenum mode); #endif #ifndef GL_NV_packed_depth_stencil #define GL_NV_packed_depth_stencil 1 #endif #ifndef GL_NV_register_combiners2 #define GL_NV_register_combiners2 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glCombinerStageParameterfvNV (GLenum stage, GLenum pname, const GLfloat *params); GLAPI void APIENTRY glGetCombinerStageParameterfvNV (GLenum stage, GLenum pname, GLfloat *params); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, const GLfloat *params); typedef void (APIENTRYP PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, GLfloat *params); #endif #ifndef GL_NV_texture_compression_vtc #define GL_NV_texture_compression_vtc 1 #endif #ifndef GL_NV_texture_rectangle #define GL_NV_texture_rectangle 1 #endif #ifndef GL_NV_texture_shader #define GL_NV_texture_shader 1 #endif #ifndef GL_NV_texture_shader2 #define GL_NV_texture_shader2 1 #endif #ifndef GL_NV_vertex_array_range2 #define GL_NV_vertex_array_range2 1 #endif #ifndef GL_NV_vertex_program #define GL_NV_vertex_program 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI GLboolean APIENTRY glAreProgramsResidentNV (GLsizei n, const GLuint *programs, GLboolean *residences); GLAPI void APIENTRY glBindProgramNV (GLenum target, GLuint id); GLAPI void APIENTRY glDeleteProgramsNV (GLsizei n, const GLuint *programs); GLAPI void APIENTRY glExecuteProgramNV (GLenum target, GLuint id, const GLfloat *params); GLAPI void APIENTRY glGenProgramsNV (GLsizei n, GLuint *programs); GLAPI void APIENTRY glGetProgramParameterdvNV (GLenum target, GLuint index, GLenum pname, GLdouble *params); GLAPI void APIENTRY glGetProgramParameterfvNV (GLenum target, GLuint index, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetProgramivNV (GLuint id, GLenum pname, GLint *params); GLAPI void APIENTRY glGetProgramStringNV (GLuint id, GLenum pname, GLubyte *program); GLAPI void APIENTRY glGetTrackMatrixivNV (GLenum target, GLuint address, GLenum pname, GLint *params); GLAPI void APIENTRY glGetVertexAttribdvNV (GLuint index, GLenum pname, GLdouble *params); GLAPI void APIENTRY glGetVertexAttribfvNV (GLuint index, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetVertexAttribivNV (GLuint index, GLenum pname, GLint *params); GLAPI void APIENTRY glGetVertexAttribPointervNV (GLuint index, GLenum pname, GLvoid* *pointer); GLAPI GLboolean APIENTRY glIsProgramNV (GLuint id); GLAPI void APIENTRY glLoadProgramNV (GLenum target, GLuint id, GLsizei len, const GLubyte *program); GLAPI void APIENTRY glProgramParameter4dNV (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLAPI void APIENTRY glProgramParameter4dvNV (GLenum target, GLuint index, const GLdouble *v); GLAPI void APIENTRY glProgramParameter4fNV (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); GLAPI void APIENTRY glProgramParameter4fvNV (GLenum target, GLuint index, const GLfloat *v); GLAPI void APIENTRY glProgramParameters4dvNV (GLenum target, GLuint index, GLsizei count, const GLdouble *v); GLAPI void APIENTRY glProgramParameters4fvNV (GLenum target, GLuint index, GLsizei count, const GLfloat *v); GLAPI void APIENTRY glRequestResidentProgramsNV (GLsizei n, const GLuint *programs); GLAPI void APIENTRY glTrackMatrixNV (GLenum target, GLuint address, GLenum matrix, GLenum transform); GLAPI void APIENTRY glVertexAttribPointerNV (GLuint index, GLint fsize, GLenum type, GLsizei stride, const GLvoid *pointer); GLAPI void APIENTRY glVertexAttrib1dNV (GLuint index, GLdouble x); GLAPI void APIENTRY glVertexAttrib1dvNV (GLuint index, const GLdouble *v); GLAPI void APIENTRY glVertexAttrib1fNV (GLuint index, GLfloat x); GLAPI void APIENTRY glVertexAttrib1fvNV (GLuint index, const GLfloat *v); GLAPI void APIENTRY glVertexAttrib1sNV (GLuint index, GLshort x); GLAPI void APIENTRY glVertexAttrib1svNV (GLuint index, const GLshort *v); GLAPI void APIENTRY glVertexAttrib2dNV (GLuint index, GLdouble x, GLdouble y); GLAPI void APIENTRY glVertexAttrib2dvNV (GLuint index, const GLdouble *v); GLAPI void APIENTRY glVertexAttrib2fNV (GLuint index, GLfloat x, GLfloat y); GLAPI void APIENTRY glVertexAttrib2fvNV (GLuint index, const GLfloat *v); GLAPI void APIENTRY glVertexAttrib2sNV (GLuint index, GLshort x, GLshort y); GLAPI void APIENTRY glVertexAttrib2svNV (GLuint index, const GLshort *v); GLAPI void APIENTRY glVertexAttrib3dNV (GLuint index, GLdouble x, GLdouble y, GLdouble z); GLAPI void APIENTRY glVertexAttrib3dvNV (GLuint index, const GLdouble *v); GLAPI void APIENTRY glVertexAttrib3fNV (GLuint index, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glVertexAttrib3fvNV (GLuint index, const GLfloat *v); GLAPI void APIENTRY glVertexAttrib3sNV (GLuint index, GLshort x, GLshort y, GLshort z); GLAPI void APIENTRY glVertexAttrib3svNV (GLuint index, const GLshort *v); GLAPI void APIENTRY glVertexAttrib4dNV (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLAPI void APIENTRY glVertexAttrib4dvNV (GLuint index, const GLdouble *v); GLAPI void APIENTRY glVertexAttrib4fNV (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); GLAPI void APIENTRY glVertexAttrib4fvNV (GLuint index, const GLfloat *v); GLAPI void APIENTRY glVertexAttrib4sNV (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); GLAPI void APIENTRY glVertexAttrib4svNV (GLuint index, const GLshort *v); GLAPI void APIENTRY glVertexAttrib4ubNV (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); GLAPI void APIENTRY glVertexAttrib4ubvNV (GLuint index, const GLubyte *v); GLAPI void APIENTRY glVertexAttribs1dvNV (GLuint index, GLsizei count, const GLdouble *v); GLAPI void APIENTRY glVertexAttribs1fvNV (GLuint index, GLsizei count, const GLfloat *v); GLAPI void APIENTRY glVertexAttribs1svNV (GLuint index, GLsizei count, const GLshort *v); GLAPI void APIENTRY glVertexAttribs2dvNV (GLuint index, GLsizei count, const GLdouble *v); GLAPI void APIENTRY glVertexAttribs2fvNV (GLuint index, GLsizei count, const GLfloat *v); GLAPI void APIENTRY glVertexAttribs2svNV (GLuint index, GLsizei count, const GLshort *v); GLAPI void APIENTRY glVertexAttribs3dvNV (GLuint index, GLsizei count, const GLdouble *v); GLAPI void APIENTRY glVertexAttribs3fvNV (GLuint index, GLsizei count, const GLfloat *v); GLAPI void APIENTRY glVertexAttribs3svNV (GLuint index, GLsizei count, const GLshort *v); GLAPI void APIENTRY glVertexAttribs4dvNV (GLuint index, GLsizei count, const GLdouble *v); GLAPI void APIENTRY glVertexAttribs4fvNV (GLuint index, GLsizei count, const GLfloat *v); GLAPI void APIENTRY glVertexAttribs4svNV (GLuint index, GLsizei count, const GLshort *v); GLAPI void APIENTRY glVertexAttribs4ubvNV (GLuint index, GLsizei count, const GLubyte *v); #endif /* GL_GLEXT_PROTOTYPES */ typedef GLboolean (APIENTRYP PFNGLAREPROGRAMSRESIDENTNVPROC) (GLsizei n, const GLuint *programs, GLboolean *residences); typedef void (APIENTRYP PFNGLBINDPROGRAMNVPROC) (GLenum target, GLuint id); typedef void (APIENTRYP PFNGLDELETEPROGRAMSNVPROC) (GLsizei n, const GLuint *programs); typedef void (APIENTRYP PFNGLEXECUTEPROGRAMNVPROC) (GLenum target, GLuint id, const GLfloat *params); typedef void (APIENTRYP PFNGLGENPROGRAMSNVPROC) (GLsizei n, GLuint *programs); typedef void (APIENTRYP PFNGLGETPROGRAMPARAMETERDVNVPROC) (GLenum target, GLuint index, GLenum pname, GLdouble *params); typedef void (APIENTRYP PFNGLGETPROGRAMPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETPROGRAMIVNVPROC) (GLuint id, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETPROGRAMSTRINGNVPROC) (GLuint id, GLenum pname, GLubyte *program); typedef void (APIENTRYP PFNGLGETTRACKMATRIXIVNVPROC) (GLenum target, GLuint address, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVNVPROC) (GLuint index, GLenum pname, GLdouble *params); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVNVPROC) (GLuint index, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVNVPROC) (GLuint index, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVNVPROC) (GLuint index, GLenum pname, GLvoid* *pointer); typedef GLboolean (APIENTRYP PFNGLISPROGRAMNVPROC) (GLuint id); typedef void (APIENTRYP PFNGLLOADPROGRAMNVPROC) (GLenum target, GLuint id, GLsizei len, const GLubyte *program); typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4DNVPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4DVNVPROC) (GLenum target, GLuint index, const GLdouble *v); typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4FNVPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4FVNVPROC) (GLenum target, GLuint index, const GLfloat *v); typedef void (APIENTRYP PFNGLPROGRAMPARAMETERS4DVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLdouble *v); typedef void (APIENTRYP PFNGLPROGRAMPARAMETERS4FVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat *v); typedef void (APIENTRYP PFNGLREQUESTRESIDENTPROGRAMSNVPROC) (GLsizei n, const GLuint *programs); typedef void (APIENTRYP PFNGLTRACKMATRIXNVPROC) (GLenum target, GLuint address, GLenum matrix, GLenum transform); typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERNVPROC) (GLuint index, GLint fsize, GLenum type, GLsizei stride, const GLvoid *pointer); typedef void (APIENTRYP PFNGLVERTEXATTRIB1DNVPROC) (GLuint index, GLdouble x); typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVNVPROC) (GLuint index, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB1FNVPROC) (GLuint index, GLfloat x); typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVNVPROC) (GLuint index, const GLfloat *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB1SNVPROC) (GLuint index, GLshort x); typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVNVPROC) (GLuint index, const GLshort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB2DNVPROC) (GLuint index, GLdouble x, GLdouble y); typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVNVPROC) (GLuint index, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB2FNVPROC) (GLuint index, GLfloat x, GLfloat y); typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVNVPROC) (GLuint index, const GLfloat *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB2SNVPROC) (GLuint index, GLshort x, GLshort y); typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVNVPROC) (GLuint index, const GLshort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB3DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVNVPROC) (GLuint index, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB3FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVNVPROC) (GLuint index, const GLfloat *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB3SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z); typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVNVPROC) (GLuint index, const GLshort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVNVPROC) (GLuint index, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVNVPROC) (GLuint index, const GLfloat *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVNVPROC) (GLuint index, const GLshort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBNVPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVNVPROC) (GLuint index, const GLubyte *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBS1DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBS1FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBS1SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBS2DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBS2FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBS2SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBS3DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBS3FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBS3SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBS4DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBS4FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBS4SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBS4UBVNVPROC) (GLuint index, GLsizei count, const GLubyte *v); #endif #ifndef GL_SGIX_texture_coordinate_clamp #define GL_SGIX_texture_coordinate_clamp 1 #endif #ifndef GL_SGIX_scalebias_hint #define GL_SGIX_scalebias_hint 1 #endif #ifndef GL_OML_interlace #define GL_OML_interlace 1 #endif #ifndef GL_OML_subsample #define GL_OML_subsample 1 #endif #ifndef GL_OML_resample #define GL_OML_resample 1 #endif #ifndef GL_NV_copy_depth_to_color #define GL_NV_copy_depth_to_color 1 #endif #ifndef GL_ATI_envmap_bumpmap #define GL_ATI_envmap_bumpmap 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glTexBumpParameterivATI (GLenum pname, const GLint *param); GLAPI void APIENTRY glTexBumpParameterfvATI (GLenum pname, const GLfloat *param); GLAPI void APIENTRY glGetTexBumpParameterivATI (GLenum pname, GLint *param); GLAPI void APIENTRY glGetTexBumpParameterfvATI (GLenum pname, GLfloat *param); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLTEXBUMPPARAMETERIVATIPROC) (GLenum pname, const GLint *param); typedef void (APIENTRYP PFNGLTEXBUMPPARAMETERFVATIPROC) (GLenum pname, const GLfloat *param); typedef void (APIENTRYP PFNGLGETTEXBUMPPARAMETERIVATIPROC) (GLenum pname, GLint *param); typedef void (APIENTRYP PFNGLGETTEXBUMPPARAMETERFVATIPROC) (GLenum pname, GLfloat *param); #endif #ifndef GL_ATI_fragment_shader #define GL_ATI_fragment_shader 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI GLuint APIENTRY glGenFragmentShadersATI (GLuint range); GLAPI void APIENTRY glBindFragmentShaderATI (GLuint id); GLAPI void APIENTRY glDeleteFragmentShaderATI (GLuint id); GLAPI void APIENTRY glBeginFragmentShaderATI (void); GLAPI void APIENTRY glEndFragmentShaderATI (void); GLAPI void APIENTRY glPassTexCoordATI (GLuint dst, GLuint coord, GLenum swizzle); GLAPI void APIENTRY glSampleMapATI (GLuint dst, GLuint interp, GLenum swizzle); GLAPI void APIENTRY glColorFragmentOp1ATI (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); GLAPI void APIENTRY glColorFragmentOp2ATI (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); GLAPI void APIENTRY glColorFragmentOp3ATI (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); GLAPI void APIENTRY glAlphaFragmentOp1ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); GLAPI void APIENTRY glAlphaFragmentOp2ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); GLAPI void APIENTRY glAlphaFragmentOp3ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); GLAPI void APIENTRY glSetFragmentShaderConstantATI (GLuint dst, const GLfloat *value); #endif /* GL_GLEXT_PROTOTYPES */ typedef GLuint (APIENTRYP PFNGLGENFRAGMENTSHADERSATIPROC) (GLuint range); typedef void (APIENTRYP PFNGLBINDFRAGMENTSHADERATIPROC) (GLuint id); typedef void (APIENTRYP PFNGLDELETEFRAGMENTSHADERATIPROC) (GLuint id); typedef void (APIENTRYP PFNGLBEGINFRAGMENTSHADERATIPROC) (void); typedef void (APIENTRYP PFNGLENDFRAGMENTSHADERATIPROC) (void); typedef void (APIENTRYP PFNGLPASSTEXCOORDATIPROC) (GLuint dst, GLuint coord, GLenum swizzle); typedef void (APIENTRYP PFNGLSAMPLEMAPATIPROC) (GLuint dst, GLuint interp, GLenum swizzle); typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP3ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP3ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); typedef void (APIENTRYP PFNGLSETFRAGMENTSHADERCONSTANTATIPROC) (GLuint dst, const GLfloat *value); #endif #ifndef GL_ATI_pn_triangles #define GL_ATI_pn_triangles 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glPNTrianglesiATI (GLenum pname, GLint param); GLAPI void APIENTRY glPNTrianglesfATI (GLenum pname, GLfloat param); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLPNTRIANGLESIATIPROC) (GLenum pname, GLint param); typedef void (APIENTRYP PFNGLPNTRIANGLESFATIPROC) (GLenum pname, GLfloat param); #endif #ifndef GL_ATI_vertex_array_object #define GL_ATI_vertex_array_object 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI GLuint APIENTRY glNewObjectBufferATI (GLsizei size, const GLvoid *pointer, GLenum usage); GLAPI GLboolean APIENTRY glIsObjectBufferATI (GLuint buffer); GLAPI void APIENTRY glUpdateObjectBufferATI (GLuint buffer, GLuint offset, GLsizei size, const GLvoid *pointer, GLenum preserve); GLAPI void APIENTRY glGetObjectBufferfvATI (GLuint buffer, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetObjectBufferivATI (GLuint buffer, GLenum pname, GLint *params); GLAPI void APIENTRY glFreeObjectBufferATI (GLuint buffer); GLAPI void APIENTRY glArrayObjectATI (GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); GLAPI void APIENTRY glGetArrayObjectfvATI (GLenum array, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetArrayObjectivATI (GLenum array, GLenum pname, GLint *params); GLAPI void APIENTRY glVariantArrayObjectATI (GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); GLAPI void APIENTRY glGetVariantArrayObjectfvATI (GLuint id, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetVariantArrayObjectivATI (GLuint id, GLenum pname, GLint *params); #endif /* GL_GLEXT_PROTOTYPES */ typedef GLuint (APIENTRYP PFNGLNEWOBJECTBUFFERATIPROC) (GLsizei size, const GLvoid *pointer, GLenum usage); typedef GLboolean (APIENTRYP PFNGLISOBJECTBUFFERATIPROC) (GLuint buffer); typedef void (APIENTRYP PFNGLUPDATEOBJECTBUFFERATIPROC) (GLuint buffer, GLuint offset, GLsizei size, const GLvoid *pointer, GLenum preserve); typedef void (APIENTRYP PFNGLGETOBJECTBUFFERFVATIPROC) (GLuint buffer, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETOBJECTBUFFERIVATIPROC) (GLuint buffer, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLFREEOBJECTBUFFERATIPROC) (GLuint buffer); typedef void (APIENTRYP PFNGLARRAYOBJECTATIPROC) (GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); typedef void (APIENTRYP PFNGLGETARRAYOBJECTFVATIPROC) (GLenum array, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETARRAYOBJECTIVATIPROC) (GLenum array, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLVARIANTARRAYOBJECTATIPROC) (GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); typedef void (APIENTRYP PFNGLGETVARIANTARRAYOBJECTFVATIPROC) (GLuint id, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETVARIANTARRAYOBJECTIVATIPROC) (GLuint id, GLenum pname, GLint *params); #endif #ifndef GL_EXT_vertex_shader #define GL_EXT_vertex_shader 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBeginVertexShaderEXT (void); GLAPI void APIENTRY glEndVertexShaderEXT (void); GLAPI void APIENTRY glBindVertexShaderEXT (GLuint id); GLAPI GLuint APIENTRY glGenVertexShadersEXT (GLuint range); GLAPI void APIENTRY glDeleteVertexShaderEXT (GLuint id); GLAPI void APIENTRY glShaderOp1EXT (GLenum op, GLuint res, GLuint arg1); GLAPI void APIENTRY glShaderOp2EXT (GLenum op, GLuint res, GLuint arg1, GLuint arg2); GLAPI void APIENTRY glShaderOp3EXT (GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3); GLAPI void APIENTRY glSwizzleEXT (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); GLAPI void APIENTRY glWriteMaskEXT (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); GLAPI void APIENTRY glInsertComponentEXT (GLuint res, GLuint src, GLuint num); GLAPI void APIENTRY glExtractComponentEXT (GLuint res, GLuint src, GLuint num); GLAPI GLuint APIENTRY glGenSymbolsEXT (GLenum datatype, GLenum storagetype, GLenum range, GLuint components); GLAPI void APIENTRY glSetInvariantEXT (GLuint id, GLenum type, const GLvoid *addr); GLAPI void APIENTRY glSetLocalConstantEXT (GLuint id, GLenum type, const GLvoid *addr); GLAPI void APIENTRY glVariantbvEXT (GLuint id, const GLbyte *addr); GLAPI void APIENTRY glVariantsvEXT (GLuint id, const GLshort *addr); GLAPI void APIENTRY glVariantivEXT (GLuint id, const GLint *addr); GLAPI void APIENTRY glVariantfvEXT (GLuint id, const GLfloat *addr); GLAPI void APIENTRY glVariantdvEXT (GLuint id, const GLdouble *addr); GLAPI void APIENTRY glVariantubvEXT (GLuint id, const GLubyte *addr); GLAPI void APIENTRY glVariantusvEXT (GLuint id, const GLushort *addr); GLAPI void APIENTRY glVariantuivEXT (GLuint id, const GLuint *addr); GLAPI void APIENTRY glVariantPointerEXT (GLuint id, GLenum type, GLuint stride, const GLvoid *addr); GLAPI void APIENTRY glEnableVariantClientStateEXT (GLuint id); GLAPI void APIENTRY glDisableVariantClientStateEXT (GLuint id); GLAPI GLuint APIENTRY glBindLightParameterEXT (GLenum light, GLenum value); GLAPI GLuint APIENTRY glBindMaterialParameterEXT (GLenum face, GLenum value); GLAPI GLuint APIENTRY glBindTexGenParameterEXT (GLenum unit, GLenum coord, GLenum value); GLAPI GLuint APIENTRY glBindTextureUnitParameterEXT (GLenum unit, GLenum value); GLAPI GLuint APIENTRY glBindParameterEXT (GLenum value); GLAPI GLboolean APIENTRY glIsVariantEnabledEXT (GLuint id, GLenum cap); GLAPI void APIENTRY glGetVariantBooleanvEXT (GLuint id, GLenum value, GLboolean *data); GLAPI void APIENTRY glGetVariantIntegervEXT (GLuint id, GLenum value, GLint *data); GLAPI void APIENTRY glGetVariantFloatvEXT (GLuint id, GLenum value, GLfloat *data); GLAPI void APIENTRY glGetVariantPointervEXT (GLuint id, GLenum value, GLvoid* *data); GLAPI void APIENTRY glGetInvariantBooleanvEXT (GLuint id, GLenum value, GLboolean *data); GLAPI void APIENTRY glGetInvariantIntegervEXT (GLuint id, GLenum value, GLint *data); GLAPI void APIENTRY glGetInvariantFloatvEXT (GLuint id, GLenum value, GLfloat *data); GLAPI void APIENTRY glGetLocalConstantBooleanvEXT (GLuint id, GLenum value, GLboolean *data); GLAPI void APIENTRY glGetLocalConstantIntegervEXT (GLuint id, GLenum value, GLint *data); GLAPI void APIENTRY glGetLocalConstantFloatvEXT (GLuint id, GLenum value, GLfloat *data); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLBEGINVERTEXSHADEREXTPROC) (void); typedef void (APIENTRYP PFNGLENDVERTEXSHADEREXTPROC) (void); typedef void (APIENTRYP PFNGLBINDVERTEXSHADEREXTPROC) (GLuint id); typedef GLuint (APIENTRYP PFNGLGENVERTEXSHADERSEXTPROC) (GLuint range); typedef void (APIENTRYP PFNGLDELETEVERTEXSHADEREXTPROC) (GLuint id); typedef void (APIENTRYP PFNGLSHADEROP1EXTPROC) (GLenum op, GLuint res, GLuint arg1); typedef void (APIENTRYP PFNGLSHADEROP2EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2); typedef void (APIENTRYP PFNGLSHADEROP3EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3); typedef void (APIENTRYP PFNGLSWIZZLEEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); typedef void (APIENTRYP PFNGLWRITEMASKEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); typedef void (APIENTRYP PFNGLINSERTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num); typedef void (APIENTRYP PFNGLEXTRACTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num); typedef GLuint (APIENTRYP PFNGLGENSYMBOLSEXTPROC) (GLenum datatype, GLenum storagetype, GLenum range, GLuint components); typedef void (APIENTRYP PFNGLSETINVARIANTEXTPROC) (GLuint id, GLenum type, const GLvoid *addr); typedef void (APIENTRYP PFNGLSETLOCALCONSTANTEXTPROC) (GLuint id, GLenum type, const GLvoid *addr); typedef void (APIENTRYP PFNGLVARIANTBVEXTPROC) (GLuint id, const GLbyte *addr); typedef void (APIENTRYP PFNGLVARIANTSVEXTPROC) (GLuint id, const GLshort *addr); typedef void (APIENTRYP PFNGLVARIANTIVEXTPROC) (GLuint id, const GLint *addr); typedef void (APIENTRYP PFNGLVARIANTFVEXTPROC) (GLuint id, const GLfloat *addr); typedef void (APIENTRYP PFNGLVARIANTDVEXTPROC) (GLuint id, const GLdouble *addr); typedef void (APIENTRYP PFNGLVARIANTUBVEXTPROC) (GLuint id, const GLubyte *addr); typedef void (APIENTRYP PFNGLVARIANTUSVEXTPROC) (GLuint id, const GLushort *addr); typedef void (APIENTRYP PFNGLVARIANTUIVEXTPROC) (GLuint id, const GLuint *addr); typedef void (APIENTRYP PFNGLVARIANTPOINTEREXTPROC) (GLuint id, GLenum type, GLuint stride, const GLvoid *addr); typedef void (APIENTRYP PFNGLENABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id); typedef void (APIENTRYP PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id); typedef GLuint (APIENTRYP PFNGLBINDLIGHTPARAMETEREXTPROC) (GLenum light, GLenum value); typedef GLuint (APIENTRYP PFNGLBINDMATERIALPARAMETEREXTPROC) (GLenum face, GLenum value); typedef GLuint (APIENTRYP PFNGLBINDTEXGENPARAMETEREXTPROC) (GLenum unit, GLenum coord, GLenum value); typedef GLuint (APIENTRYP PFNGLBINDTEXTUREUNITPARAMETEREXTPROC) (GLenum unit, GLenum value); typedef GLuint (APIENTRYP PFNGLBINDPARAMETEREXTPROC) (GLenum value); typedef GLboolean (APIENTRYP PFNGLISVARIANTENABLEDEXTPROC) (GLuint id, GLenum cap); typedef void (APIENTRYP PFNGLGETVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); typedef void (APIENTRYP PFNGLGETVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); typedef void (APIENTRYP PFNGLGETVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); typedef void (APIENTRYP PFNGLGETVARIANTPOINTERVEXTPROC) (GLuint id, GLenum value, GLvoid* *data); typedef void (APIENTRYP PFNGLGETINVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); typedef void (APIENTRYP PFNGLGETINVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); typedef void (APIENTRYP PFNGLGETINVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); typedef void (APIENTRYP PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); typedef void (APIENTRYP PFNGLGETLOCALCONSTANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); typedef void (APIENTRYP PFNGLGETLOCALCONSTANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); #endif #ifndef GL_ATI_vertex_streams #define GL_ATI_vertex_streams 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glVertexStream1sATI (GLenum stream, GLshort x); GLAPI void APIENTRY glVertexStream1svATI (GLenum stream, const GLshort *coords); GLAPI void APIENTRY glVertexStream1iATI (GLenum stream, GLint x); GLAPI void APIENTRY glVertexStream1ivATI (GLenum stream, const GLint *coords); GLAPI void APIENTRY glVertexStream1fATI (GLenum stream, GLfloat x); GLAPI void APIENTRY glVertexStream1fvATI (GLenum stream, const GLfloat *coords); GLAPI void APIENTRY glVertexStream1dATI (GLenum stream, GLdouble x); GLAPI void APIENTRY glVertexStream1dvATI (GLenum stream, const GLdouble *coords); GLAPI void APIENTRY glVertexStream2sATI (GLenum stream, GLshort x, GLshort y); GLAPI void APIENTRY glVertexStream2svATI (GLenum stream, const GLshort *coords); GLAPI void APIENTRY glVertexStream2iATI (GLenum stream, GLint x, GLint y); GLAPI void APIENTRY glVertexStream2ivATI (GLenum stream, const GLint *coords); GLAPI void APIENTRY glVertexStream2fATI (GLenum stream, GLfloat x, GLfloat y); GLAPI void APIENTRY glVertexStream2fvATI (GLenum stream, const GLfloat *coords); GLAPI void APIENTRY glVertexStream2dATI (GLenum stream, GLdouble x, GLdouble y); GLAPI void APIENTRY glVertexStream2dvATI (GLenum stream, const GLdouble *coords); GLAPI void APIENTRY glVertexStream3sATI (GLenum stream, GLshort x, GLshort y, GLshort z); GLAPI void APIENTRY glVertexStream3svATI (GLenum stream, const GLshort *coords); GLAPI void APIENTRY glVertexStream3iATI (GLenum stream, GLint x, GLint y, GLint z); GLAPI void APIENTRY glVertexStream3ivATI (GLenum stream, const GLint *coords); GLAPI void APIENTRY glVertexStream3fATI (GLenum stream, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glVertexStream3fvATI (GLenum stream, const GLfloat *coords); GLAPI void APIENTRY glVertexStream3dATI (GLenum stream, GLdouble x, GLdouble y, GLdouble z); GLAPI void APIENTRY glVertexStream3dvATI (GLenum stream, const GLdouble *coords); GLAPI void APIENTRY glVertexStream4sATI (GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w); GLAPI void APIENTRY glVertexStream4svATI (GLenum stream, const GLshort *coords); GLAPI void APIENTRY glVertexStream4iATI (GLenum stream, GLint x, GLint y, GLint z, GLint w); GLAPI void APIENTRY glVertexStream4ivATI (GLenum stream, const GLint *coords); GLAPI void APIENTRY glVertexStream4fATI (GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w); GLAPI void APIENTRY glVertexStream4fvATI (GLenum stream, const GLfloat *coords); GLAPI void APIENTRY glVertexStream4dATI (GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLAPI void APIENTRY glVertexStream4dvATI (GLenum stream, const GLdouble *coords); GLAPI void APIENTRY glNormalStream3bATI (GLenum stream, GLbyte nx, GLbyte ny, GLbyte nz); GLAPI void APIENTRY glNormalStream3bvATI (GLenum stream, const GLbyte *coords); GLAPI void APIENTRY glNormalStream3sATI (GLenum stream, GLshort nx, GLshort ny, GLshort nz); GLAPI void APIENTRY glNormalStream3svATI (GLenum stream, const GLshort *coords); GLAPI void APIENTRY glNormalStream3iATI (GLenum stream, GLint nx, GLint ny, GLint nz); GLAPI void APIENTRY glNormalStream3ivATI (GLenum stream, const GLint *coords); GLAPI void APIENTRY glNormalStream3fATI (GLenum stream, GLfloat nx, GLfloat ny, GLfloat nz); GLAPI void APIENTRY glNormalStream3fvATI (GLenum stream, const GLfloat *coords); GLAPI void APIENTRY glNormalStream3dATI (GLenum stream, GLdouble nx, GLdouble ny, GLdouble nz); GLAPI void APIENTRY glNormalStream3dvATI (GLenum stream, const GLdouble *coords); GLAPI void APIENTRY glClientActiveVertexStreamATI (GLenum stream); GLAPI void APIENTRY glVertexBlendEnviATI (GLenum pname, GLint param); GLAPI void APIENTRY glVertexBlendEnvfATI (GLenum pname, GLfloat param); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLVERTEXSTREAM1SATIPROC) (GLenum stream, GLshort x); typedef void (APIENTRYP PFNGLVERTEXSTREAM1SVATIPROC) (GLenum stream, const GLshort *coords); typedef void (APIENTRYP PFNGLVERTEXSTREAM1IATIPROC) (GLenum stream, GLint x); typedef void (APIENTRYP PFNGLVERTEXSTREAM1IVATIPROC) (GLenum stream, const GLint *coords); typedef void (APIENTRYP PFNGLVERTEXSTREAM1FATIPROC) (GLenum stream, GLfloat x); typedef void (APIENTRYP PFNGLVERTEXSTREAM1FVATIPROC) (GLenum stream, const GLfloat *coords); typedef void (APIENTRYP PFNGLVERTEXSTREAM1DATIPROC) (GLenum stream, GLdouble x); typedef void (APIENTRYP PFNGLVERTEXSTREAM1DVATIPROC) (GLenum stream, const GLdouble *coords); typedef void (APIENTRYP PFNGLVERTEXSTREAM2SATIPROC) (GLenum stream, GLshort x, GLshort y); typedef void (APIENTRYP PFNGLVERTEXSTREAM2SVATIPROC) (GLenum stream, const GLshort *coords); typedef void (APIENTRYP PFNGLVERTEXSTREAM2IATIPROC) (GLenum stream, GLint x, GLint y); typedef void (APIENTRYP PFNGLVERTEXSTREAM2IVATIPROC) (GLenum stream, const GLint *coords); typedef void (APIENTRYP PFNGLVERTEXSTREAM2FATIPROC) (GLenum stream, GLfloat x, GLfloat y); typedef void (APIENTRYP PFNGLVERTEXSTREAM2FVATIPROC) (GLenum stream, const GLfloat *coords); typedef void (APIENTRYP PFNGLVERTEXSTREAM2DATIPROC) (GLenum stream, GLdouble x, GLdouble y); typedef void (APIENTRYP PFNGLVERTEXSTREAM2DVATIPROC) (GLenum stream, const GLdouble *coords); typedef void (APIENTRYP PFNGLVERTEXSTREAM3SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z); typedef void (APIENTRYP PFNGLVERTEXSTREAM3SVATIPROC) (GLenum stream, const GLshort *coords); typedef void (APIENTRYP PFNGLVERTEXSTREAM3IATIPROC) (GLenum stream, GLint x, GLint y, GLint z); typedef void (APIENTRYP PFNGLVERTEXSTREAM3IVATIPROC) (GLenum stream, const GLint *coords); typedef void (APIENTRYP PFNGLVERTEXSTREAM3FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLVERTEXSTREAM3FVATIPROC) (GLenum stream, const GLfloat *coords); typedef void (APIENTRYP PFNGLVERTEXSTREAM3DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z); typedef void (APIENTRYP PFNGLVERTEXSTREAM3DVATIPROC) (GLenum stream, const GLdouble *coords); typedef void (APIENTRYP PFNGLVERTEXSTREAM4SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w); typedef void (APIENTRYP PFNGLVERTEXSTREAM4SVATIPROC) (GLenum stream, const GLshort *coords); typedef void (APIENTRYP PFNGLVERTEXSTREAM4IATIPROC) (GLenum stream, GLint x, GLint y, GLint z, GLint w); typedef void (APIENTRYP PFNGLVERTEXSTREAM4IVATIPROC) (GLenum stream, const GLint *coords); typedef void (APIENTRYP PFNGLVERTEXSTREAM4FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w); typedef void (APIENTRYP PFNGLVERTEXSTREAM4FVATIPROC) (GLenum stream, const GLfloat *coords); typedef void (APIENTRYP PFNGLVERTEXSTREAM4DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w); typedef void (APIENTRYP PFNGLVERTEXSTREAM4DVATIPROC) (GLenum stream, const GLdouble *coords); typedef void (APIENTRYP PFNGLNORMALSTREAM3BATIPROC) (GLenum stream, GLbyte nx, GLbyte ny, GLbyte nz); typedef void (APIENTRYP PFNGLNORMALSTREAM3BVATIPROC) (GLenum stream, const GLbyte *coords); typedef void (APIENTRYP PFNGLNORMALSTREAM3SATIPROC) (GLenum stream, GLshort nx, GLshort ny, GLshort nz); typedef void (APIENTRYP PFNGLNORMALSTREAM3SVATIPROC) (GLenum stream, const GLshort *coords); typedef void (APIENTRYP PFNGLNORMALSTREAM3IATIPROC) (GLenum stream, GLint nx, GLint ny, GLint nz); typedef void (APIENTRYP PFNGLNORMALSTREAM3IVATIPROC) (GLenum stream, const GLint *coords); typedef void (APIENTRYP PFNGLNORMALSTREAM3FATIPROC) (GLenum stream, GLfloat nx, GLfloat ny, GLfloat nz); typedef void (APIENTRYP PFNGLNORMALSTREAM3FVATIPROC) (GLenum stream, const GLfloat *coords); typedef void (APIENTRYP PFNGLNORMALSTREAM3DATIPROC) (GLenum stream, GLdouble nx, GLdouble ny, GLdouble nz); typedef void (APIENTRYP PFNGLNORMALSTREAM3DVATIPROC) (GLenum stream, const GLdouble *coords); typedef void (APIENTRYP PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC) (GLenum stream); typedef void (APIENTRYP PFNGLVERTEXBLENDENVIATIPROC) (GLenum pname, GLint param); typedef void (APIENTRYP PFNGLVERTEXBLENDENVFATIPROC) (GLenum pname, GLfloat param); #endif #ifndef GL_ATI_element_array #define GL_ATI_element_array 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glElementPointerATI (GLenum type, const GLvoid *pointer); GLAPI void APIENTRY glDrawElementArrayATI (GLenum mode, GLsizei count); GLAPI void APIENTRY glDrawRangeElementArrayATI (GLenum mode, GLuint start, GLuint end, GLsizei count); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLELEMENTPOINTERATIPROC) (GLenum type, const GLvoid *pointer); typedef void (APIENTRYP PFNGLDRAWELEMENTARRAYATIPROC) (GLenum mode, GLsizei count); typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTARRAYATIPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count); #endif #ifndef GL_SUN_mesh_array #define GL_SUN_mesh_array 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDrawMeshArraysSUN (GLenum mode, GLint first, GLsizei count, GLsizei width); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLDRAWMESHARRAYSSUNPROC) (GLenum mode, GLint first, GLsizei count, GLsizei width); #endif #ifndef GL_SUN_slice_accum #define GL_SUN_slice_accum 1 #endif #ifndef GL_NV_multisample_filter_hint #define GL_NV_multisample_filter_hint 1 #endif #ifndef GL_NV_depth_clamp #define GL_NV_depth_clamp 1 #endif #ifndef GL_NV_occlusion_query #define GL_NV_occlusion_query 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glGenOcclusionQueriesNV (GLsizei n, GLuint *ids); GLAPI void APIENTRY glDeleteOcclusionQueriesNV (GLsizei n, const GLuint *ids); GLAPI GLboolean APIENTRY glIsOcclusionQueryNV (GLuint id); GLAPI void APIENTRY glBeginOcclusionQueryNV (GLuint id); GLAPI void APIENTRY glEndOcclusionQueryNV (void); GLAPI void APIENTRY glGetOcclusionQueryivNV (GLuint id, GLenum pname, GLint *params); GLAPI void APIENTRY glGetOcclusionQueryuivNV (GLuint id, GLenum pname, GLuint *params); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLGENOCCLUSIONQUERIESNVPROC) (GLsizei n, GLuint *ids); typedef void (APIENTRYP PFNGLDELETEOCCLUSIONQUERIESNVPROC) (GLsizei n, const GLuint *ids); typedef GLboolean (APIENTRYP PFNGLISOCCLUSIONQUERYNVPROC) (GLuint id); typedef void (APIENTRYP PFNGLBEGINOCCLUSIONQUERYNVPROC) (GLuint id); typedef void (APIENTRYP PFNGLENDOCCLUSIONQUERYNVPROC) (void); typedef void (APIENTRYP PFNGLGETOCCLUSIONQUERYIVNVPROC) (GLuint id, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETOCCLUSIONQUERYUIVNVPROC) (GLuint id, GLenum pname, GLuint *params); #endif #ifndef GL_NV_point_sprite #define GL_NV_point_sprite 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glPointParameteriNV (GLenum pname, GLint param); GLAPI void APIENTRY glPointParameterivNV (GLenum pname, const GLint *params); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLPOINTPARAMETERINVPROC) (GLenum pname, GLint param); typedef void (APIENTRYP PFNGLPOINTPARAMETERIVNVPROC) (GLenum pname, const GLint *params); #endif #ifndef GL_NV_texture_shader3 #define GL_NV_texture_shader3 1 #endif #ifndef GL_NV_vertex_program1_1 #define GL_NV_vertex_program1_1 1 #endif #ifndef GL_EXT_shadow_funcs #define GL_EXT_shadow_funcs 1 #endif #ifndef GL_EXT_stencil_two_side #define GL_EXT_stencil_two_side 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glActiveStencilFaceEXT (GLenum face); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLACTIVESTENCILFACEEXTPROC) (GLenum face); #endif #ifndef GL_ATI_text_fragment_shader #define GL_ATI_text_fragment_shader 1 #endif #ifndef GL_APPLE_client_storage #define GL_APPLE_client_storage 1 #endif #ifndef GL_APPLE_element_array #define GL_APPLE_element_array 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glElementPointerAPPLE (GLenum type, const GLvoid *pointer); GLAPI void APIENTRY glDrawElementArrayAPPLE (GLenum mode, GLint first, GLsizei count); GLAPI void APIENTRY glDrawRangeElementArrayAPPLE (GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count); GLAPI void APIENTRY glMultiDrawElementArrayAPPLE (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); GLAPI void APIENTRY glMultiDrawRangeElementArrayAPPLE (GLenum mode, GLuint start, GLuint end, const GLint *first, const GLsizei *count, GLsizei primcount); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLELEMENTPOINTERAPPLEPROC) (GLenum type, const GLvoid *pointer); typedef void (APIENTRYP PFNGLDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, GLint first, GLsizei count); typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count); typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); typedef void (APIENTRYP PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, GLuint start, GLuint end, const GLint *first, const GLsizei *count, GLsizei primcount); #endif #ifndef GL_APPLE_fence #define GL_APPLE_fence 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glGenFencesAPPLE (GLsizei n, GLuint *fences); GLAPI void APIENTRY glDeleteFencesAPPLE (GLsizei n, const GLuint *fences); GLAPI void APIENTRY glSetFenceAPPLE (GLuint fence); GLAPI GLboolean APIENTRY glIsFenceAPPLE (GLuint fence); GLAPI GLboolean APIENTRY glTestFenceAPPLE (GLuint fence); GLAPI void APIENTRY glFinishFenceAPPLE (GLuint fence); GLAPI GLboolean APIENTRY glTestObjectAPPLE (GLenum object, GLuint name); GLAPI void APIENTRY glFinishObjectAPPLE (GLenum object, GLint name); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLGENFENCESAPPLEPROC) (GLsizei n, GLuint *fences); typedef void (APIENTRYP PFNGLDELETEFENCESAPPLEPROC) (GLsizei n, const GLuint *fences); typedef void (APIENTRYP PFNGLSETFENCEAPPLEPROC) (GLuint fence); typedef GLboolean (APIENTRYP PFNGLISFENCEAPPLEPROC) (GLuint fence); typedef GLboolean (APIENTRYP PFNGLTESTFENCEAPPLEPROC) (GLuint fence); typedef void (APIENTRYP PFNGLFINISHFENCEAPPLEPROC) (GLuint fence); typedef GLboolean (APIENTRYP PFNGLTESTOBJECTAPPLEPROC) (GLenum object, GLuint name); typedef void (APIENTRYP PFNGLFINISHOBJECTAPPLEPROC) (GLenum object, GLint name); #endif #ifndef GL_APPLE_vertex_array_object #define GL_APPLE_vertex_array_object 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBindVertexArrayAPPLE (GLuint array); GLAPI void APIENTRY glDeleteVertexArraysAPPLE (GLsizei n, const GLuint *arrays); GLAPI void APIENTRY glGenVertexArraysAPPLE (GLsizei n, GLuint *arrays); GLAPI GLboolean APIENTRY glIsVertexArrayAPPLE (GLuint array); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLBINDVERTEXARRAYAPPLEPROC) (GLuint array); typedef void (APIENTRYP PFNGLDELETEVERTEXARRAYSAPPLEPROC) (GLsizei n, const GLuint *arrays); typedef void (APIENTRYP PFNGLGENVERTEXARRAYSAPPLEPROC) (GLsizei n, GLuint *arrays); typedef GLboolean (APIENTRYP PFNGLISVERTEXARRAYAPPLEPROC) (GLuint array); #endif #ifndef GL_APPLE_vertex_array_range #define GL_APPLE_vertex_array_range 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glVertexArrayRangeAPPLE (GLsizei length, GLvoid *pointer); GLAPI void APIENTRY glFlushVertexArrayRangeAPPLE (GLsizei length, GLvoid *pointer); GLAPI void APIENTRY glVertexArrayParameteriAPPLE (GLenum pname, GLint param); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, GLvoid *pointer); typedef void (APIENTRYP PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, GLvoid *pointer); typedef void (APIENTRYP PFNGLVERTEXARRAYPARAMETERIAPPLEPROC) (GLenum pname, GLint param); #endif #ifndef GL_APPLE_ycbcr_422 #define GL_APPLE_ycbcr_422 1 #endif #ifndef GL_S3_s3tc #define GL_S3_s3tc 1 #endif #ifndef GL_ATI_draw_buffers #define GL_ATI_draw_buffers 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDrawBuffersATI (GLsizei n, const GLenum *bufs); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLDRAWBUFFERSATIPROC) (GLsizei n, const GLenum *bufs); #endif #ifndef GL_ATI_pixel_format_float #define GL_ATI_pixel_format_float 1 /* This is really a WGL extension, but defines some associated GL enums. * ATI does not export "GL_ATI_pixel_format_float" in the GL_EXTENSIONS string. */ #endif #ifndef GL_ATI_texture_env_combine3 #define GL_ATI_texture_env_combine3 1 #endif #ifndef GL_ATI_texture_float #define GL_ATI_texture_float 1 #endif #ifndef GL_NV_float_buffer #define GL_NV_float_buffer 1 #endif #ifndef GL_NV_fragment_program #define GL_NV_fragment_program 1 /* Some NV_fragment_program entry points are shared with ARB_vertex_program. */ #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glProgramNamedParameter4fNV (GLuint id, GLsizei len, const GLubyte *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w); GLAPI void APIENTRY glProgramNamedParameter4fvNV (GLuint id, GLsizei len, const GLubyte *name, const GLfloat *v); GLAPI void APIENTRY glProgramNamedParameter4dNV (GLuint id, GLsizei len, const GLubyte *name, GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLAPI void APIENTRY glProgramNamedParameter4dvNV (GLuint id, GLsizei len, const GLubyte *name, const GLdouble *v); GLAPI void APIENTRY glGetProgramNamedParameterfvNV (GLuint id, GLsizei len, const GLubyte *name, GLfloat *params); GLAPI void APIENTRY glGetProgramNamedParameterdvNV (GLuint id, GLsizei len, const GLubyte *name, GLdouble *params); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4FNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w); typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, const GLfloat *v); typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4DNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLdouble x, GLdouble y, GLdouble z, GLdouble w); typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, const GLdouble *v); typedef void (APIENTRYP PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLfloat *params); typedef void (APIENTRYP PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLdouble *params); #endif #ifndef GL_NV_half_float #define GL_NV_half_float 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glVertex2hNV (GLhalfNV x, GLhalfNV y); GLAPI void APIENTRY glVertex2hvNV (const GLhalfNV *v); GLAPI void APIENTRY glVertex3hNV (GLhalfNV x, GLhalfNV y, GLhalfNV z); GLAPI void APIENTRY glVertex3hvNV (const GLhalfNV *v); GLAPI void APIENTRY glVertex4hNV (GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); GLAPI void APIENTRY glVertex4hvNV (const GLhalfNV *v); GLAPI void APIENTRY glNormal3hNV (GLhalfNV nx, GLhalfNV ny, GLhalfNV nz); GLAPI void APIENTRY glNormal3hvNV (const GLhalfNV *v); GLAPI void APIENTRY glColor3hNV (GLhalfNV red, GLhalfNV green, GLhalfNV blue); GLAPI void APIENTRY glColor3hvNV (const GLhalfNV *v); GLAPI void APIENTRY glColor4hNV (GLhalfNV red, GLhalfNV green, GLhalfNV blue, GLhalfNV alpha); GLAPI void APIENTRY glColor4hvNV (const GLhalfNV *v); GLAPI void APIENTRY glTexCoord1hNV (GLhalfNV s); GLAPI void APIENTRY glTexCoord1hvNV (const GLhalfNV *v); GLAPI void APIENTRY glTexCoord2hNV (GLhalfNV s, GLhalfNV t); GLAPI void APIENTRY glTexCoord2hvNV (const GLhalfNV *v); GLAPI void APIENTRY glTexCoord3hNV (GLhalfNV s, GLhalfNV t, GLhalfNV r); GLAPI void APIENTRY glTexCoord3hvNV (const GLhalfNV *v); GLAPI void APIENTRY glTexCoord4hNV (GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); GLAPI void APIENTRY glTexCoord4hvNV (const GLhalfNV *v); GLAPI void APIENTRY glMultiTexCoord1hNV (GLenum target, GLhalfNV s); GLAPI void APIENTRY glMultiTexCoord1hvNV (GLenum target, const GLhalfNV *v); GLAPI void APIENTRY glMultiTexCoord2hNV (GLenum target, GLhalfNV s, GLhalfNV t); GLAPI void APIENTRY glMultiTexCoord2hvNV (GLenum target, const GLhalfNV *v); GLAPI void APIENTRY glMultiTexCoord3hNV (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r); GLAPI void APIENTRY glMultiTexCoord3hvNV (GLenum target, const GLhalfNV *v); GLAPI void APIENTRY glMultiTexCoord4hNV (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); GLAPI void APIENTRY glMultiTexCoord4hvNV (GLenum target, const GLhalfNV *v); GLAPI void APIENTRY glFogCoordhNV (GLhalfNV fog); GLAPI void APIENTRY glFogCoordhvNV (const GLhalfNV *fog); GLAPI void APIENTRY glSecondaryColor3hNV (GLhalfNV red, GLhalfNV green, GLhalfNV blue); GLAPI void APIENTRY glSecondaryColor3hvNV (const GLhalfNV *v); GLAPI void APIENTRY glVertexWeighthNV (GLhalfNV weight); GLAPI void APIENTRY glVertexWeighthvNV (const GLhalfNV *weight); GLAPI void APIENTRY glVertexAttrib1hNV (GLuint index, GLhalfNV x); GLAPI void APIENTRY glVertexAttrib1hvNV (GLuint index, const GLhalfNV *v); GLAPI void APIENTRY glVertexAttrib2hNV (GLuint index, GLhalfNV x, GLhalfNV y); GLAPI void APIENTRY glVertexAttrib2hvNV (GLuint index, const GLhalfNV *v); GLAPI void APIENTRY glVertexAttrib3hNV (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z); GLAPI void APIENTRY glVertexAttrib3hvNV (GLuint index, const GLhalfNV *v); GLAPI void APIENTRY glVertexAttrib4hNV (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); GLAPI void APIENTRY glVertexAttrib4hvNV (GLuint index, const GLhalfNV *v); GLAPI void APIENTRY glVertexAttribs1hvNV (GLuint index, GLsizei n, const GLhalfNV *v); GLAPI void APIENTRY glVertexAttribs2hvNV (GLuint index, GLsizei n, const GLhalfNV *v); GLAPI void APIENTRY glVertexAttribs3hvNV (GLuint index, GLsizei n, const GLhalfNV *v); GLAPI void APIENTRY glVertexAttribs4hvNV (GLuint index, GLsizei n, const GLhalfNV *v); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLVERTEX2HNVPROC) (GLhalfNV x, GLhalfNV y); typedef void (APIENTRYP PFNGLVERTEX2HVNVPROC) (const GLhalfNV *v); typedef void (APIENTRYP PFNGLVERTEX3HNVPROC) (GLhalfNV x, GLhalfNV y, GLhalfNV z); typedef void (APIENTRYP PFNGLVERTEX3HVNVPROC) (const GLhalfNV *v); typedef void (APIENTRYP PFNGLVERTEX4HNVPROC) (GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); typedef void (APIENTRYP PFNGLVERTEX4HVNVPROC) (const GLhalfNV *v); typedef void (APIENTRYP PFNGLNORMAL3HNVPROC) (GLhalfNV nx, GLhalfNV ny, GLhalfNV nz); typedef void (APIENTRYP PFNGLNORMAL3HVNVPROC) (const GLhalfNV *v); typedef void (APIENTRYP PFNGLCOLOR3HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue); typedef void (APIENTRYP PFNGLCOLOR3HVNVPROC) (const GLhalfNV *v); typedef void (APIENTRYP PFNGLCOLOR4HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue, GLhalfNV alpha); typedef void (APIENTRYP PFNGLCOLOR4HVNVPROC) (const GLhalfNV *v); typedef void (APIENTRYP PFNGLTEXCOORD1HNVPROC) (GLhalfNV s); typedef void (APIENTRYP PFNGLTEXCOORD1HVNVPROC) (const GLhalfNV *v); typedef void (APIENTRYP PFNGLTEXCOORD2HNVPROC) (GLhalfNV s, GLhalfNV t); typedef void (APIENTRYP PFNGLTEXCOORD2HVNVPROC) (const GLhalfNV *v); typedef void (APIENTRYP PFNGLTEXCOORD3HNVPROC) (GLhalfNV s, GLhalfNV t, GLhalfNV r); typedef void (APIENTRYP PFNGLTEXCOORD3HVNVPROC) (const GLhalfNV *v); typedef void (APIENTRYP PFNGLTEXCOORD4HNVPROC) (GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); typedef void (APIENTRYP PFNGLTEXCOORD4HVNVPROC) (const GLhalfNV *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD1HNVPROC) (GLenum target, GLhalfNV s); typedef void (APIENTRYP PFNGLMULTITEXCOORD1HVNVPROC) (GLenum target, const GLhalfNV *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD2HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t); typedef void (APIENTRYP PFNGLMULTITEXCOORD2HVNVPROC) (GLenum target, const GLhalfNV *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD3HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r); typedef void (APIENTRYP PFNGLMULTITEXCOORD3HVNVPROC) (GLenum target, const GLhalfNV *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD4HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); typedef void (APIENTRYP PFNGLMULTITEXCOORD4HVNVPROC) (GLenum target, const GLhalfNV *v); typedef void (APIENTRYP PFNGLFOGCOORDHNVPROC) (GLhalfNV fog); typedef void (APIENTRYP PFNGLFOGCOORDHVNVPROC) (const GLhalfNV *fog); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue); typedef void (APIENTRYP PFNGLSECONDARYCOLOR3HVNVPROC) (const GLhalfNV *v); typedef void (APIENTRYP PFNGLVERTEXWEIGHTHNVPROC) (GLhalfNV weight); typedef void (APIENTRYP PFNGLVERTEXWEIGHTHVNVPROC) (const GLhalfNV *weight); typedef void (APIENTRYP PFNGLVERTEXATTRIB1HNVPROC) (GLuint index, GLhalfNV x); typedef void (APIENTRYP PFNGLVERTEXATTRIB1HVNVPROC) (GLuint index, const GLhalfNV *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB2HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y); typedef void (APIENTRYP PFNGLVERTEXATTRIB2HVNVPROC) (GLuint index, const GLhalfNV *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB3HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z); typedef void (APIENTRYP PFNGLVERTEXATTRIB3HVNVPROC) (GLuint index, const GLhalfNV *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); typedef void (APIENTRYP PFNGLVERTEXATTRIB4HVNVPROC) (GLuint index, const GLhalfNV *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBS1HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBS2HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBS3HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBS4HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); #endif #ifndef GL_NV_pixel_data_range #define GL_NV_pixel_data_range 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glPixelDataRangeNV (GLenum target, GLsizei length, const GLvoid *pointer); GLAPI void APIENTRY glFlushPixelDataRangeNV (GLenum target); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLPIXELDATARANGENVPROC) (GLenum target, GLsizei length, const GLvoid *pointer); typedef void (APIENTRYP PFNGLFLUSHPIXELDATARANGENVPROC) (GLenum target); #endif #ifndef GL_NV_primitive_restart #define GL_NV_primitive_restart 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glPrimitiveRestartNV (void); GLAPI void APIENTRY glPrimitiveRestartIndexNV (GLuint index); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLPRIMITIVERESTARTNVPROC) (void); typedef void (APIENTRYP PFNGLPRIMITIVERESTARTINDEXNVPROC) (GLuint index); #endif #ifndef GL_NV_texture_expand_normal #define GL_NV_texture_expand_normal 1 #endif #ifndef GL_NV_vertex_program2 #define GL_NV_vertex_program2 1 #endif #ifndef GL_ATI_map_object_buffer #define GL_ATI_map_object_buffer 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI GLvoid* APIENTRY glMapObjectBufferATI (GLuint buffer); GLAPI void APIENTRY glUnmapObjectBufferATI (GLuint buffer); #endif /* GL_GLEXT_PROTOTYPES */ typedef GLvoid* (APIENTRYP PFNGLMAPOBJECTBUFFERATIPROC) (GLuint buffer); typedef void (APIENTRYP PFNGLUNMAPOBJECTBUFFERATIPROC) (GLuint buffer); #endif #ifndef GL_ATI_separate_stencil #define GL_ATI_separate_stencil 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glStencilOpSeparateATI (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); GLAPI void APIENTRY glStencilFuncSeparateATI (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLSTENCILOPSEPARATEATIPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); typedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEATIPROC) (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); #endif #ifndef GL_ATI_vertex_attrib_array_object #define GL_ATI_vertex_attrib_array_object 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glVertexAttribArrayObjectATI (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset); GLAPI void APIENTRY glGetVertexAttribArrayObjectfvATI (GLuint index, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetVertexAttribArrayObjectivATI (GLuint index, GLenum pname, GLint *params); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLVERTEXATTRIBARRAYOBJECTATIPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC) (GLuint index, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC) (GLuint index, GLenum pname, GLint *params); #endif #ifndef GL_OES_byte_coordinates #define GL_OES_byte_coordinates 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glMultiTexCoord1bOES (GLenum texture, GLbyte s); GLAPI void APIENTRY glMultiTexCoord1bvOES (GLenum texture, const GLbyte *coords); GLAPI void APIENTRY glMultiTexCoord2bOES (GLenum texture, GLbyte s, GLbyte t); GLAPI void APIENTRY glMultiTexCoord2bvOES (GLenum texture, const GLbyte *coords); GLAPI void APIENTRY glMultiTexCoord3bOES (GLenum texture, GLbyte s, GLbyte t, GLbyte r); GLAPI void APIENTRY glMultiTexCoord3bvOES (GLenum texture, const GLbyte *coords); GLAPI void APIENTRY glMultiTexCoord4bOES (GLenum texture, GLbyte s, GLbyte t, GLbyte r, GLbyte q); GLAPI void APIENTRY glMultiTexCoord4bvOES (GLenum texture, const GLbyte *coords); GLAPI void APIENTRY glTexCoord1bOES (GLbyte s); GLAPI void APIENTRY glTexCoord1bvOES (const GLbyte *coords); GLAPI void APIENTRY glTexCoord2bOES (GLbyte s, GLbyte t); GLAPI void APIENTRY glTexCoord2bvOES (const GLbyte *coords); GLAPI void APIENTRY glTexCoord3bOES (GLbyte s, GLbyte t, GLbyte r); GLAPI void APIENTRY glTexCoord3bvOES (const GLbyte *coords); GLAPI void APIENTRY glTexCoord4bOES (GLbyte s, GLbyte t, GLbyte r, GLbyte q); GLAPI void APIENTRY glTexCoord4bvOES (const GLbyte *coords); GLAPI void APIENTRY glVertex2bOES (GLbyte x); GLAPI void APIENTRY glVertex2bvOES (const GLbyte *coords); GLAPI void APIENTRY glVertex3bOES (GLbyte x, GLbyte y); GLAPI void APIENTRY glVertex3bvOES (const GLbyte *coords); GLAPI void APIENTRY glVertex4bOES (GLbyte x, GLbyte y, GLbyte z); GLAPI void APIENTRY glVertex4bvOES (const GLbyte *coords); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLMULTITEXCOORD1BOESPROC) (GLenum texture, GLbyte s); typedef void (APIENTRYP PFNGLMULTITEXCOORD1BVOESPROC) (GLenum texture, const GLbyte *coords); typedef void (APIENTRYP PFNGLMULTITEXCOORD2BOESPROC) (GLenum texture, GLbyte s, GLbyte t); typedef void (APIENTRYP PFNGLMULTITEXCOORD2BVOESPROC) (GLenum texture, const GLbyte *coords); typedef void (APIENTRYP PFNGLMULTITEXCOORD3BOESPROC) (GLenum texture, GLbyte s, GLbyte t, GLbyte r); typedef void (APIENTRYP PFNGLMULTITEXCOORD3BVOESPROC) (GLenum texture, const GLbyte *coords); typedef void (APIENTRYP PFNGLMULTITEXCOORD4BOESPROC) (GLenum texture, GLbyte s, GLbyte t, GLbyte r, GLbyte q); typedef void (APIENTRYP PFNGLMULTITEXCOORD4BVOESPROC) (GLenum texture, const GLbyte *coords); typedef void (APIENTRYP PFNGLTEXCOORD1BOESPROC) (GLbyte s); typedef void (APIENTRYP PFNGLTEXCOORD1BVOESPROC) (const GLbyte *coords); typedef void (APIENTRYP PFNGLTEXCOORD2BOESPROC) (GLbyte s, GLbyte t); typedef void (APIENTRYP PFNGLTEXCOORD2BVOESPROC) (const GLbyte *coords); typedef void (APIENTRYP PFNGLTEXCOORD3BOESPROC) (GLbyte s, GLbyte t, GLbyte r); typedef void (APIENTRYP PFNGLTEXCOORD3BVOESPROC) (const GLbyte *coords); typedef void (APIENTRYP PFNGLTEXCOORD4BOESPROC) (GLbyte s, GLbyte t, GLbyte r, GLbyte q); typedef void (APIENTRYP PFNGLTEXCOORD4BVOESPROC) (const GLbyte *coords); typedef void (APIENTRYP PFNGLVERTEX2BOESPROC) (GLbyte x); typedef void (APIENTRYP PFNGLVERTEX2BVOESPROC) (const GLbyte *coords); typedef void (APIENTRYP PFNGLVERTEX3BOESPROC) (GLbyte x, GLbyte y); typedef void (APIENTRYP PFNGLVERTEX3BVOESPROC) (const GLbyte *coords); typedef void (APIENTRYP PFNGLVERTEX4BOESPROC) (GLbyte x, GLbyte y, GLbyte z); typedef void (APIENTRYP PFNGLVERTEX4BVOESPROC) (const GLbyte *coords); #endif #ifndef GL_OES_fixed_point #define GL_OES_fixed_point 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glAccumxOES (GLenum op, GLfixed value); GLAPI void APIENTRY glAlphaFuncxOES (GLenum func, GLfixed ref); GLAPI void APIENTRY glBitmapxOES (GLsizei width, GLsizei height, GLfixed xorig, GLfixed yorig, GLfixed xmove, GLfixed ymove, const GLubyte *bitmap); GLAPI void APIENTRY glBlendColorxOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); GLAPI void APIENTRY glClearAccumxOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); GLAPI void APIENTRY glClearColorxOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); GLAPI void APIENTRY glClearDepthxOES (GLfixed depth); GLAPI void APIENTRY glClipPlanexOES (GLenum plane, const GLfixed *equation); GLAPI void APIENTRY glColor3xOES (GLfixed red, GLfixed green, GLfixed blue); GLAPI void APIENTRY glColor4xOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); GLAPI void APIENTRY glColor3xvOES (const GLfixed *components); GLAPI void APIENTRY glColor4xvOES (const GLfixed *components); GLAPI void APIENTRY glConvolutionParameterxOES (GLenum target, GLenum pname, GLfixed param); GLAPI void APIENTRY glConvolutionParameterxvOES (GLenum target, GLenum pname, const GLfixed *params); GLAPI void APIENTRY glDepthRangexOES (GLfixed n, GLfixed f); GLAPI void APIENTRY glEvalCoord1xOES (GLfixed u); GLAPI void APIENTRY glEvalCoord2xOES (GLfixed u, GLfixed v); GLAPI void APIENTRY glEvalCoord1xvOES (const GLfixed *coords); GLAPI void APIENTRY glEvalCoord2xvOES (const GLfixed *coords); GLAPI void APIENTRY glFeedbackBufferxOES (GLsizei n, GLenum type, const GLfixed *buffer); GLAPI void APIENTRY glFogxOES (GLenum pname, GLfixed param); GLAPI void APIENTRY glFogxvOES (GLenum pname, const GLfixed *param); GLAPI void APIENTRY glFrustumxOES (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f); GLAPI void APIENTRY glGetClipPlanexOES (GLenum plane, GLfixed *equation); GLAPI void APIENTRY glGetConvolutionParameterxvOES (GLenum target, GLenum pname, GLfixed *params); GLAPI void APIENTRY glGetFixedvOES (GLenum pname, GLfixed *params); GLAPI void APIENTRY glGetHistogramParameterxvOES (GLenum target, GLenum pname, GLfixed *params); GLAPI void APIENTRY glGetLightxOES (GLenum light, GLenum pname, GLfixed *params); GLAPI void APIENTRY glGetMapxvOES (GLenum target, GLenum query, GLfixed *v); GLAPI void APIENTRY glGetMaterialxOES (GLenum face, GLenum pname, GLfixed param); GLAPI void APIENTRY glGetPixelMapxv (GLenum map, GLint size, GLfixed *values); GLAPI void APIENTRY glGetTexEnvxvOES (GLenum target, GLenum pname, GLfixed *params); GLAPI void APIENTRY glGetTexGenxvOES (GLenum coord, GLenum pname, GLfixed *params); GLAPI void APIENTRY glGetTexLevelParameterxvOES (GLenum target, GLint level, GLenum pname, GLfixed *params); GLAPI void APIENTRY glGetTexParameterxvOES (GLenum target, GLenum pname, GLfixed *params); GLAPI void APIENTRY glIndexxOES (GLfixed component); GLAPI void APIENTRY glIndexxvOES (const GLfixed *component); GLAPI void APIENTRY glLightModelxOES (GLenum pname, GLfixed param); GLAPI void APIENTRY glLightModelxvOES (GLenum pname, const GLfixed *param); GLAPI void APIENTRY glLightxOES (GLenum light, GLenum pname, GLfixed param); GLAPI void APIENTRY glLightxvOES (GLenum light, GLenum pname, const GLfixed *params); GLAPI void APIENTRY glLineWidthxOES (GLfixed width); GLAPI void APIENTRY glLoadMatrixxOES (const GLfixed *m); GLAPI void APIENTRY glLoadTransposeMatrixxOES (const GLfixed *m); GLAPI void APIENTRY glMap1xOES (GLenum target, GLfixed u1, GLfixed u2, GLint stride, GLint order, GLfixed points); GLAPI void APIENTRY glMap2xOES (GLenum target, GLfixed u1, GLfixed u2, GLint ustride, GLint uorder, GLfixed v1, GLfixed v2, GLint vstride, GLint vorder, GLfixed points); GLAPI void APIENTRY glMapGrid1xOES (GLint n, GLfixed u1, GLfixed u2); GLAPI void APIENTRY glMapGrid2xOES (GLint n, GLfixed u1, GLfixed u2, GLfixed v1, GLfixed v2); GLAPI void APIENTRY glMaterialxOES (GLenum face, GLenum pname, GLfixed param); GLAPI void APIENTRY glMaterialxvOES (GLenum face, GLenum pname, const GLfixed *param); GLAPI void APIENTRY glMultMatrixxOES (const GLfixed *m); GLAPI void APIENTRY glMultTransposeMatrixxOES (const GLfixed *m); GLAPI void APIENTRY glMultiTexCoord1xOES (GLenum texture, GLfixed s); GLAPI void APIENTRY glMultiTexCoord2xOES (GLenum texture, GLfixed s, GLfixed t); GLAPI void APIENTRY glMultiTexCoord3xOES (GLenum texture, GLfixed s, GLfixed t, GLfixed r); GLAPI void APIENTRY glMultiTexCoord4xOES (GLenum texture, GLfixed s, GLfixed t, GLfixed r, GLfixed q); GLAPI void APIENTRY glMultiTexCoord1xvOES (GLenum texture, const GLfixed *coords); GLAPI void APIENTRY glMultiTexCoord2xvOES (GLenum texture, const GLfixed *coords); GLAPI void APIENTRY glMultiTexCoord3xvOES (GLenum texture, const GLfixed *coords); GLAPI void APIENTRY glMultiTexCoord4xvOES (GLenum texture, const GLfixed *coords); GLAPI void APIENTRY glNormal3xOES (GLfixed nx, GLfixed ny, GLfixed nz); GLAPI void APIENTRY glNormal3xvOES (const GLfixed *coords); GLAPI void APIENTRY glOrthoxOES (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f); GLAPI void APIENTRY glPassThroughxOES (GLfixed token); GLAPI void APIENTRY glPixelMapx (GLenum map, GLint size, const GLfixed *values); GLAPI void APIENTRY glPixelStorex (GLenum pname, GLfixed param); GLAPI void APIENTRY glPixelTransferxOES (GLenum pname, GLfixed param); GLAPI void APIENTRY glPixelZoomxOES (GLfixed xfactor, GLfixed yfactor); GLAPI void APIENTRY glPointParameterxvOES (GLenum pname, const GLfixed *params); GLAPI void APIENTRY glPointSizexOES (GLfixed size); GLAPI void APIENTRY glPolygonOffsetxOES (GLfixed factor, GLfixed units); GLAPI void APIENTRY glPrioritizeTexturesxOES (GLsizei n, const GLuint *textures, const GLfixed *priorities); GLAPI void APIENTRY glRasterPos2xOES (GLfixed x, GLfixed y); GLAPI void APIENTRY glRasterPos3xOES (GLfixed x, GLfixed y, GLfixed z); GLAPI void APIENTRY glRasterPos4xOES (GLfixed x, GLfixed y, GLfixed z, GLfixed w); GLAPI void APIENTRY glRasterPos2xvOES (const GLfixed *coords); GLAPI void APIENTRY glRasterPos3xvOES (const GLfixed *coords); GLAPI void APIENTRY glRasterPos4xvOES (const GLfixed *coords); GLAPI void APIENTRY glRectxOES (GLfixed x1, GLfixed y1, GLfixed x2, GLfixed y2); GLAPI void APIENTRY glRectxvOES (const GLfixed *v1, const GLfixed *v2); GLAPI void APIENTRY glRotatexOES (GLfixed angle, GLfixed x, GLfixed y, GLfixed z); GLAPI void APIENTRY glSampleCoverageOES (GLfixed value, GLboolean invert); GLAPI void APIENTRY glScalexOES (GLfixed x, GLfixed y, GLfixed z); GLAPI void APIENTRY glTexCoord1xOES (GLfixed s); GLAPI void APIENTRY glTexCoord2xOES (GLfixed s, GLfixed t); GLAPI void APIENTRY glTexCoord3xOES (GLfixed s, GLfixed t, GLfixed r); GLAPI void APIENTRY glTexCoord4xOES (GLfixed s, GLfixed t, GLfixed r, GLfixed q); GLAPI void APIENTRY glTexCoord1xvOES (const GLfixed *coords); GLAPI void APIENTRY glTexCoord2xvOES (const GLfixed *coords); GLAPI void APIENTRY glTexCoord3xvOES (const GLfixed *coords); GLAPI void APIENTRY glTexCoord4xvOES (const GLfixed *coords); GLAPI void APIENTRY glTexEnvxOES (GLenum target, GLenum pname, GLfixed param); GLAPI void APIENTRY glTexEnvxvOES (GLenum target, GLenum pname, const GLfixed *params); GLAPI void APIENTRY glTexGenxOES (GLenum coord, GLenum pname, GLfixed param); GLAPI void APIENTRY glTexGenxvOES (GLenum coord, GLenum pname, const GLfixed *params); GLAPI void APIENTRY glTexParameterxOES (GLenum target, GLenum pname, GLfixed param); GLAPI void APIENTRY glTexParameterxvOES (GLenum target, GLenum pname, const GLfixed *params); GLAPI void APIENTRY glTranslatexOES (GLfixed x, GLfixed y, GLfixed z); GLAPI void APIENTRY glVertex2xOES (GLfixed x); GLAPI void APIENTRY glVertex3xOES (GLfixed x, GLfixed y); GLAPI void APIENTRY glVertex4xOES (GLfixed x, GLfixed y, GLfixed z); GLAPI void APIENTRY glVertex2xvOES (const GLfixed *coords); GLAPI void APIENTRY glVertex3xvOES (const GLfixed *coords); GLAPI void APIENTRY glVertex4xvOES (const GLfixed *coords); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLACCUMXOESPROC) (GLenum op, GLfixed value); typedef void (APIENTRYP PFNGLALPHAFUNCXOESPROC) (GLenum func, GLfixed ref); typedef void (APIENTRYP PFNGLBITMAPXOESPROC) (GLsizei width, GLsizei height, GLfixed xorig, GLfixed yorig, GLfixed xmove, GLfixed ymove, const GLubyte *bitmap); typedef void (APIENTRYP PFNGLBLENDCOLORXOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); typedef void (APIENTRYP PFNGLCLEARACCUMXOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); typedef void (APIENTRYP PFNGLCLEARCOLORXOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); typedef void (APIENTRYP PFNGLCLEARDEPTHXOESPROC) (GLfixed depth); typedef void (APIENTRYP PFNGLCLIPPLANEXOESPROC) (GLenum plane, const GLfixed *equation); typedef void (APIENTRYP PFNGLCOLOR3XOESPROC) (GLfixed red, GLfixed green, GLfixed blue); typedef void (APIENTRYP PFNGLCOLOR4XOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); typedef void (APIENTRYP PFNGLCOLOR3XVOESPROC) (const GLfixed *components); typedef void (APIENTRYP PFNGLCOLOR4XVOESPROC) (const GLfixed *components); typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERXOESPROC) (GLenum target, GLenum pname, GLfixed param); typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERXVOESPROC) (GLenum target, GLenum pname, const GLfixed *params); typedef void (APIENTRYP PFNGLDEPTHRANGEXOESPROC) (GLfixed n, GLfixed f); typedef void (APIENTRYP PFNGLEVALCOORD1XOESPROC) (GLfixed u); typedef void (APIENTRYP PFNGLEVALCOORD2XOESPROC) (GLfixed u, GLfixed v); typedef void (APIENTRYP PFNGLEVALCOORD1XVOESPROC) (const GLfixed *coords); typedef void (APIENTRYP PFNGLEVALCOORD2XVOESPROC) (const GLfixed *coords); typedef void (APIENTRYP PFNGLFEEDBACKBUFFERXOESPROC) (GLsizei n, GLenum type, const GLfixed *buffer); typedef void (APIENTRYP PFNGLFOGXOESPROC) (GLenum pname, GLfixed param); typedef void (APIENTRYP PFNGLFOGXVOESPROC) (GLenum pname, const GLfixed *param); typedef void (APIENTRYP PFNGLFRUSTUMXOESPROC) (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f); typedef void (APIENTRYP PFNGLGETCLIPPLANEXOESPROC) (GLenum plane, GLfixed *equation); typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERXVOESPROC) (GLenum target, GLenum pname, GLfixed *params); typedef void (APIENTRYP PFNGLGETFIXEDVOESPROC) (GLenum pname, GLfixed *params); typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERXVOESPROC) (GLenum target, GLenum pname, GLfixed *params); typedef void (APIENTRYP PFNGLGETLIGHTXOESPROC) (GLenum light, GLenum pname, GLfixed *params); typedef void (APIENTRYP PFNGLGETMAPXVOESPROC) (GLenum target, GLenum query, GLfixed *v); typedef void (APIENTRYP PFNGLGETMATERIALXOESPROC) (GLenum face, GLenum pname, GLfixed param); typedef void (APIENTRYP PFNGLGETPIXELMAPXVPROC) (GLenum map, GLint size, GLfixed *values); typedef void (APIENTRYP PFNGLGETTEXENVXVOESPROC) (GLenum target, GLenum pname, GLfixed *params); typedef void (APIENTRYP PFNGLGETTEXGENXVOESPROC) (GLenum coord, GLenum pname, GLfixed *params); typedef void (APIENTRYP PFNGLGETTEXLEVELPARAMETERXVOESPROC) (GLenum target, GLint level, GLenum pname, GLfixed *params); typedef void (APIENTRYP PFNGLGETTEXPARAMETERXVOESPROC) (GLenum target, GLenum pname, GLfixed *params); typedef void (APIENTRYP PFNGLINDEXXOESPROC) (GLfixed component); typedef void (APIENTRYP PFNGLINDEXXVOESPROC) (const GLfixed *component); typedef void (APIENTRYP PFNGLLIGHTMODELXOESPROC) (GLenum pname, GLfixed param); typedef void (APIENTRYP PFNGLLIGHTMODELXVOESPROC) (GLenum pname, const GLfixed *param); typedef void (APIENTRYP PFNGLLIGHTXOESPROC) (GLenum light, GLenum pname, GLfixed param); typedef void (APIENTRYP PFNGLLIGHTXVOESPROC) (GLenum light, GLenum pname, const GLfixed *params); typedef void (APIENTRYP PFNGLLINEWIDTHXOESPROC) (GLfixed width); typedef void (APIENTRYP PFNGLLOADMATRIXXOESPROC) (const GLfixed *m); typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXXOESPROC) (const GLfixed *m); typedef void (APIENTRYP PFNGLMAP1XOESPROC) (GLenum target, GLfixed u1, GLfixed u2, GLint stride, GLint order, GLfixed points); typedef void (APIENTRYP PFNGLMAP2XOESPROC) (GLenum target, GLfixed u1, GLfixed u2, GLint ustride, GLint uorder, GLfixed v1, GLfixed v2, GLint vstride, GLint vorder, GLfixed points); typedef void (APIENTRYP PFNGLMAPGRID1XOESPROC) (GLint n, GLfixed u1, GLfixed u2); typedef void (APIENTRYP PFNGLMAPGRID2XOESPROC) (GLint n, GLfixed u1, GLfixed u2, GLfixed v1, GLfixed v2); typedef void (APIENTRYP PFNGLMATERIALXOESPROC) (GLenum face, GLenum pname, GLfixed param); typedef void (APIENTRYP PFNGLMATERIALXVOESPROC) (GLenum face, GLenum pname, const GLfixed *param); typedef void (APIENTRYP PFNGLMULTMATRIXXOESPROC) (const GLfixed *m); typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXXOESPROC) (const GLfixed *m); typedef void (APIENTRYP PFNGLMULTITEXCOORD1XOESPROC) (GLenum texture, GLfixed s); typedef void (APIENTRYP PFNGLMULTITEXCOORD2XOESPROC) (GLenum texture, GLfixed s, GLfixed t); typedef void (APIENTRYP PFNGLMULTITEXCOORD3XOESPROC) (GLenum texture, GLfixed s, GLfixed t, GLfixed r); typedef void (APIENTRYP PFNGLMULTITEXCOORD4XOESPROC) (GLenum texture, GLfixed s, GLfixed t, GLfixed r, GLfixed q); typedef void (APIENTRYP PFNGLMULTITEXCOORD1XVOESPROC) (GLenum texture, const GLfixed *coords); typedef void (APIENTRYP PFNGLMULTITEXCOORD2XVOESPROC) (GLenum texture, const GLfixed *coords); typedef void (APIENTRYP PFNGLMULTITEXCOORD3XVOESPROC) (GLenum texture, const GLfixed *coords); typedef void (APIENTRYP PFNGLMULTITEXCOORD4XVOESPROC) (GLenum texture, const GLfixed *coords); typedef void (APIENTRYP PFNGLNORMAL3XOESPROC) (GLfixed nx, GLfixed ny, GLfixed nz); typedef void (APIENTRYP PFNGLNORMAL3XVOESPROC) (const GLfixed *coords); typedef void (APIENTRYP PFNGLORTHOXOESPROC) (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f); typedef void (APIENTRYP PFNGLPASSTHROUGHXOESPROC) (GLfixed token); typedef void (APIENTRYP PFNGLPIXELMAPXPROC) (GLenum map, GLint size, const GLfixed *values); typedef void (APIENTRYP PFNGLPIXELSTOREXPROC) (GLenum pname, GLfixed param); typedef void (APIENTRYP PFNGLPIXELTRANSFERXOESPROC) (GLenum pname, GLfixed param); typedef void (APIENTRYP PFNGLPIXELZOOMXOESPROC) (GLfixed xfactor, GLfixed yfactor); typedef void (APIENTRYP PFNGLPOINTPARAMETERXVOESPROC) (GLenum pname, const GLfixed *params); typedef void (APIENTRYP PFNGLPOINTSIZEXOESPROC) (GLfixed size); typedef void (APIENTRYP PFNGLPOLYGONOFFSETXOESPROC) (GLfixed factor, GLfixed units); typedef void (APIENTRYP PFNGLPRIORITIZETEXTURESXOESPROC) (GLsizei n, const GLuint *textures, const GLfixed *priorities); typedef void (APIENTRYP PFNGLRASTERPOS2XOESPROC) (GLfixed x, GLfixed y); typedef void (APIENTRYP PFNGLRASTERPOS3XOESPROC) (GLfixed x, GLfixed y, GLfixed z); typedef void (APIENTRYP PFNGLRASTERPOS4XOESPROC) (GLfixed x, GLfixed y, GLfixed z, GLfixed w); typedef void (APIENTRYP PFNGLRASTERPOS2XVOESPROC) (const GLfixed *coords); typedef void (APIENTRYP PFNGLRASTERPOS3XVOESPROC) (const GLfixed *coords); typedef void (APIENTRYP PFNGLRASTERPOS4XVOESPROC) (const GLfixed *coords); typedef void (APIENTRYP PFNGLRECTXOESPROC) (GLfixed x1, GLfixed y1, GLfixed x2, GLfixed y2); typedef void (APIENTRYP PFNGLRECTXVOESPROC) (const GLfixed *v1, const GLfixed *v2); typedef void (APIENTRYP PFNGLROTATEXOESPROC) (GLfixed angle, GLfixed x, GLfixed y, GLfixed z); typedef void (APIENTRYP PFNGLSAMPLECOVERAGEOESPROC) (GLfixed value, GLboolean invert); typedef void (APIENTRYP PFNGLSCALEXOESPROC) (GLfixed x, GLfixed y, GLfixed z); typedef void (APIENTRYP PFNGLTEXCOORD1XOESPROC) (GLfixed s); typedef void (APIENTRYP PFNGLTEXCOORD2XOESPROC) (GLfixed s, GLfixed t); typedef void (APIENTRYP PFNGLTEXCOORD3XOESPROC) (GLfixed s, GLfixed t, GLfixed r); typedef void (APIENTRYP PFNGLTEXCOORD4XOESPROC) (GLfixed s, GLfixed t, GLfixed r, GLfixed q); typedef void (APIENTRYP PFNGLTEXCOORD1XVOESPROC) (const GLfixed *coords); typedef void (APIENTRYP PFNGLTEXCOORD2XVOESPROC) (const GLfixed *coords); typedef void (APIENTRYP PFNGLTEXCOORD3XVOESPROC) (const GLfixed *coords); typedef void (APIENTRYP PFNGLTEXCOORD4XVOESPROC) (const GLfixed *coords); typedef void (APIENTRYP PFNGLTEXENVXOESPROC) (GLenum target, GLenum pname, GLfixed param); typedef void (APIENTRYP PFNGLTEXENVXVOESPROC) (GLenum target, GLenum pname, const GLfixed *params); typedef void (APIENTRYP PFNGLTEXGENXOESPROC) (GLenum coord, GLenum pname, GLfixed param); typedef void (APIENTRYP PFNGLTEXGENXVOESPROC) (GLenum coord, GLenum pname, const GLfixed *params); typedef void (APIENTRYP PFNGLTEXPARAMETERXOESPROC) (GLenum target, GLenum pname, GLfixed param); typedef void (APIENTRYP PFNGLTEXPARAMETERXVOESPROC) (GLenum target, GLenum pname, const GLfixed *params); typedef void (APIENTRYP PFNGLTRANSLATEXOESPROC) (GLfixed x, GLfixed y, GLfixed z); typedef void (APIENTRYP PFNGLVERTEX2XOESPROC) (GLfixed x); typedef void (APIENTRYP PFNGLVERTEX3XOESPROC) (GLfixed x, GLfixed y); typedef void (APIENTRYP PFNGLVERTEX4XOESPROC) (GLfixed x, GLfixed y, GLfixed z); typedef void (APIENTRYP PFNGLVERTEX2XVOESPROC) (const GLfixed *coords); typedef void (APIENTRYP PFNGLVERTEX3XVOESPROC) (const GLfixed *coords); typedef void (APIENTRYP PFNGLVERTEX4XVOESPROC) (const GLfixed *coords); #endif #ifndef GL_OES_single_precision #define GL_OES_single_precision 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDepthRangefOES (GLclampf n, GLclampf f); GLAPI void APIENTRY glFrustumfOES (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); GLAPI void APIENTRY glOrthofOES (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); GLAPI void APIENTRY glClipPlanefOES (GLenum plane, const GLfloat *equation); GLAPI void APIENTRY glClearDepthfOES (GLclampf depth); GLAPI void APIENTRY glGetClipPlanefOES (GLenum plane, GLfloat *equation); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLDEPTHRANGEFOESPROC) (GLclampf n, GLclampf f); typedef void (APIENTRYP PFNGLFRUSTUMFOESPROC) (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); typedef void (APIENTRYP PFNGLORTHOFOESPROC) (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); typedef void (APIENTRYP PFNGLCLIPPLANEFOESPROC) (GLenum plane, const GLfloat *equation); typedef void (APIENTRYP PFNGLCLEARDEPTHFOESPROC) (GLclampf depth); typedef void (APIENTRYP PFNGLGETCLIPPLANEFOESPROC) (GLenum plane, GLfloat *equation); #endif #ifndef GL_OES_compressed_paletted_texture #define GL_OES_compressed_paletted_texture 1 #endif #ifndef GL_OES_read_format #define GL_OES_read_format 1 #endif #ifndef GL_OES_query_matrix #define GL_OES_query_matrix 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI GLbitfield APIENTRY glQueryMatrixxOES (GLfixed *mantissa, GLint *exponent); #endif /* GL_GLEXT_PROTOTYPES */ typedef GLbitfield (APIENTRYP PFNGLQUERYMATRIXXOESPROC) (GLfixed *mantissa, GLint *exponent); #endif #ifndef GL_EXT_depth_bounds_test #define GL_EXT_depth_bounds_test 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDepthBoundsEXT (GLclampd zmin, GLclampd zmax); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLDEPTHBOUNDSEXTPROC) (GLclampd zmin, GLclampd zmax); #endif #ifndef GL_EXT_texture_mirror_clamp #define GL_EXT_texture_mirror_clamp 1 #endif #ifndef GL_EXT_blend_equation_separate #define GL_EXT_blend_equation_separate 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBlendEquationSeparateEXT (GLenum modeRGB, GLenum modeAlpha); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEEXTPROC) (GLenum modeRGB, GLenum modeAlpha); #endif #ifndef GL_MESA_pack_invert #define GL_MESA_pack_invert 1 #endif #ifndef GL_MESA_ycbcr_texture #define GL_MESA_ycbcr_texture 1 #endif #ifndef GL_EXT_pixel_buffer_object #define GL_EXT_pixel_buffer_object 1 #endif #ifndef GL_NV_fragment_program_option #define GL_NV_fragment_program_option 1 #endif #ifndef GL_NV_fragment_program2 #define GL_NV_fragment_program2 1 #endif #ifndef GL_NV_vertex_program2_option #define GL_NV_vertex_program2_option 1 #endif #ifndef GL_NV_vertex_program3 #define GL_NV_vertex_program3 1 #endif #ifndef GL_EXT_framebuffer_object #define GL_EXT_framebuffer_object 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI GLboolean APIENTRY glIsRenderbufferEXT (GLuint renderbuffer); GLAPI void APIENTRY glBindRenderbufferEXT (GLenum target, GLuint renderbuffer); GLAPI void APIENTRY glDeleteRenderbuffersEXT (GLsizei n, const GLuint *renderbuffers); GLAPI void APIENTRY glGenRenderbuffersEXT (GLsizei n, GLuint *renderbuffers); GLAPI void APIENTRY glRenderbufferStorageEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); GLAPI void APIENTRY glGetRenderbufferParameterivEXT (GLenum target, GLenum pname, GLint *params); GLAPI GLboolean APIENTRY glIsFramebufferEXT (GLuint framebuffer); GLAPI void APIENTRY glBindFramebufferEXT (GLenum target, GLuint framebuffer); GLAPI void APIENTRY glDeleteFramebuffersEXT (GLsizei n, const GLuint *framebuffers); GLAPI void APIENTRY glGenFramebuffersEXT (GLsizei n, GLuint *framebuffers); GLAPI GLenum APIENTRY glCheckFramebufferStatusEXT (GLenum target); GLAPI void APIENTRY glFramebufferTexture1DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); GLAPI void APIENTRY glFramebufferTexture2DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); GLAPI void APIENTRY glFramebufferTexture3DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); GLAPI void APIENTRY glFramebufferRenderbufferEXT (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); GLAPI void APIENTRY glGetFramebufferAttachmentParameterivEXT (GLenum target, GLenum attachment, GLenum pname, GLint *params); GLAPI void APIENTRY glGenerateMipmapEXT (GLenum target); #endif /* GL_GLEXT_PROTOTYPES */ typedef GLboolean (APIENTRYP PFNGLISRENDERBUFFEREXTPROC) (GLuint renderbuffer); typedef void (APIENTRYP PFNGLBINDRENDERBUFFEREXTPROC) (GLenum target, GLuint renderbuffer); typedef void (APIENTRYP PFNGLDELETERENDERBUFFERSEXTPROC) (GLsizei n, const GLuint *renderbuffers); typedef void (APIENTRYP PFNGLGENRENDERBUFFERSEXTPROC) (GLsizei n, GLuint *renderbuffers); typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); typedef GLboolean (APIENTRYP PFNGLISFRAMEBUFFEREXTPROC) (GLuint framebuffer); typedef void (APIENTRYP PFNGLBINDFRAMEBUFFEREXTPROC) (GLenum target, GLuint framebuffer); typedef void (APIENTRYP PFNGLDELETEFRAMEBUFFERSEXTPROC) (GLsizei n, const GLuint *framebuffers); typedef void (APIENTRYP PFNGLGENFRAMEBUFFERSEXTPROC) (GLsizei n, GLuint *framebuffers); typedef GLenum (APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC) (GLenum target); typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE1DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); typedef void (APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); typedef void (APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) (GLenum target, GLenum attachment, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGENERATEMIPMAPEXTPROC) (GLenum target); #endif #ifndef GL_GREMEDY_string_marker #define GL_GREMEDY_string_marker 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glStringMarkerGREMEDY (GLsizei len, const GLvoid *string); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLSTRINGMARKERGREMEDYPROC) (GLsizei len, const GLvoid *string); #endif #ifndef GL_EXT_packed_depth_stencil #define GL_EXT_packed_depth_stencil 1 #endif #ifndef GL_EXT_stencil_clear_tag #define GL_EXT_stencil_clear_tag 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glStencilClearTagEXT (GLsizei stencilTagBits, GLuint stencilClearTag); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLSTENCILCLEARTAGEXTPROC) (GLsizei stencilTagBits, GLuint stencilClearTag); #endif #ifndef GL_EXT_texture_sRGB #define GL_EXT_texture_sRGB 1 #endif #ifndef GL_EXT_framebuffer_blit #define GL_EXT_framebuffer_blit 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBlitFramebufferEXT (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLBLITFRAMEBUFFEREXTPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); #endif #ifndef GL_EXT_framebuffer_multisample #define GL_EXT_framebuffer_multisample 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glRenderbufferStorageMultisampleEXT (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); #endif #ifndef GL_MESAX_texture_stack #define GL_MESAX_texture_stack 1 #endif #ifndef GL_EXT_timer_query #define GL_EXT_timer_query 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glGetQueryObjecti64vEXT (GLuint id, GLenum pname, GLint64EXT *params); GLAPI void APIENTRY glGetQueryObjectui64vEXT (GLuint id, GLenum pname, GLuint64EXT *params); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLGETQUERYOBJECTI64VEXTPROC) (GLuint id, GLenum pname, GLint64EXT *params); typedef void (APIENTRYP PFNGLGETQUERYOBJECTUI64VEXTPROC) (GLuint id, GLenum pname, GLuint64EXT *params); #endif #ifndef GL_EXT_gpu_program_parameters #define GL_EXT_gpu_program_parameters 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glProgramEnvParameters4fvEXT (GLenum target, GLuint index, GLsizei count, const GLfloat *params); GLAPI void APIENTRY glProgramLocalParameters4fvEXT (GLenum target, GLuint index, GLsizei count, const GLfloat *params); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERS4FVEXTPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat *params); typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat *params); #endif #ifndef GL_APPLE_flush_buffer_range #define GL_APPLE_flush_buffer_range 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBufferParameteriAPPLE (GLenum target, GLenum pname, GLint param); GLAPI void APIENTRY glFlushMappedBufferRangeAPPLE (GLenum target, GLintptr offset, GLsizeiptr size); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLBUFFERPARAMETERIAPPLEPROC) (GLenum target, GLenum pname, GLint param); typedef void (APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC) (GLenum target, GLintptr offset, GLsizeiptr size); #endif #ifndef GL_NV_gpu_program4 #define GL_NV_gpu_program4 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glProgramLocalParameterI4iNV (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); GLAPI void APIENTRY glProgramLocalParameterI4ivNV (GLenum target, GLuint index, const GLint *params); GLAPI void APIENTRY glProgramLocalParametersI4ivNV (GLenum target, GLuint index, GLsizei count, const GLint *params); GLAPI void APIENTRY glProgramLocalParameterI4uiNV (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); GLAPI void APIENTRY glProgramLocalParameterI4uivNV (GLenum target, GLuint index, const GLuint *params); GLAPI void APIENTRY glProgramLocalParametersI4uivNV (GLenum target, GLuint index, GLsizei count, const GLuint *params); GLAPI void APIENTRY glProgramEnvParameterI4iNV (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); GLAPI void APIENTRY glProgramEnvParameterI4ivNV (GLenum target, GLuint index, const GLint *params); GLAPI void APIENTRY glProgramEnvParametersI4ivNV (GLenum target, GLuint index, GLsizei count, const GLint *params); GLAPI void APIENTRY glProgramEnvParameterI4uiNV (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); GLAPI void APIENTRY glProgramEnvParameterI4uivNV (GLenum target, GLuint index, const GLuint *params); GLAPI void APIENTRY glProgramEnvParametersI4uivNV (GLenum target, GLuint index, GLsizei count, const GLuint *params); GLAPI void APIENTRY glGetProgramLocalParameterIivNV (GLenum target, GLuint index, GLint *params); GLAPI void APIENTRY glGetProgramLocalParameterIuivNV (GLenum target, GLuint index, GLuint *params); GLAPI void APIENTRY glGetProgramEnvParameterIivNV (GLenum target, GLuint index, GLint *params); GLAPI void APIENTRY glGetProgramEnvParameterIuivNV (GLenum target, GLuint index, GLuint *params); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4INVPROC) (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4IVNVPROC) (GLenum target, GLuint index, const GLint *params); typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERSI4IVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLint *params); typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4UINVPROC) (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4UIVNVPROC) (GLenum target, GLuint index, const GLuint *params); typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERSI4UIVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLuint *params); typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4INVPROC) (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4IVNVPROC) (GLenum target, GLuint index, const GLint *params); typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERSI4IVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLint *params); typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4UINVPROC) (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4UIVNVPROC) (GLenum target, GLuint index, const GLuint *params); typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERSI4UIVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLuint *params); typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERIIVNVPROC) (GLenum target, GLuint index, GLint *params); typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERIUIVNVPROC) (GLenum target, GLuint index, GLuint *params); typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERIIVNVPROC) (GLenum target, GLuint index, GLint *params); typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERIUIVNVPROC) (GLenum target, GLuint index, GLuint *params); #endif #ifndef GL_NV_geometry_program4 #define GL_NV_geometry_program4 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glProgramVertexLimitNV (GLenum target, GLint limit); GLAPI void APIENTRY glFramebufferTextureEXT (GLenum target, GLenum attachment, GLuint texture, GLint level); GLAPI void APIENTRY glFramebufferTextureLayerEXT (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); GLAPI void APIENTRY glFramebufferTextureFaceEXT (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLPROGRAMVERTEXLIMITNVPROC) (GLenum target, GLint limit); typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREEXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level); typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREFACEEXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); #endif #ifndef GL_EXT_geometry_shader4 #define GL_EXT_geometry_shader4 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glProgramParameteriEXT (GLuint program, GLenum pname, GLint value); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIEXTPROC) (GLuint program, GLenum pname, GLint value); #endif #ifndef GL_NV_vertex_program4 #define GL_NV_vertex_program4 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glVertexAttribI1iEXT (GLuint index, GLint x); GLAPI void APIENTRY glVertexAttribI2iEXT (GLuint index, GLint x, GLint y); GLAPI void APIENTRY glVertexAttribI3iEXT (GLuint index, GLint x, GLint y, GLint z); GLAPI void APIENTRY glVertexAttribI4iEXT (GLuint index, GLint x, GLint y, GLint z, GLint w); GLAPI void APIENTRY glVertexAttribI1uiEXT (GLuint index, GLuint x); GLAPI void APIENTRY glVertexAttribI2uiEXT (GLuint index, GLuint x, GLuint y); GLAPI void APIENTRY glVertexAttribI3uiEXT (GLuint index, GLuint x, GLuint y, GLuint z); GLAPI void APIENTRY glVertexAttribI4uiEXT (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); GLAPI void APIENTRY glVertexAttribI1ivEXT (GLuint index, const GLint *v); GLAPI void APIENTRY glVertexAttribI2ivEXT (GLuint index, const GLint *v); GLAPI void APIENTRY glVertexAttribI3ivEXT (GLuint index, const GLint *v); GLAPI void APIENTRY glVertexAttribI4ivEXT (GLuint index, const GLint *v); GLAPI void APIENTRY glVertexAttribI1uivEXT (GLuint index, const GLuint *v); GLAPI void APIENTRY glVertexAttribI2uivEXT (GLuint index, const GLuint *v); GLAPI void APIENTRY glVertexAttribI3uivEXT (GLuint index, const GLuint *v); GLAPI void APIENTRY glVertexAttribI4uivEXT (GLuint index, const GLuint *v); GLAPI void APIENTRY glVertexAttribI4bvEXT (GLuint index, const GLbyte *v); GLAPI void APIENTRY glVertexAttribI4svEXT (GLuint index, const GLshort *v); GLAPI void APIENTRY glVertexAttribI4ubvEXT (GLuint index, const GLubyte *v); GLAPI void APIENTRY glVertexAttribI4usvEXT (GLuint index, const GLushort *v); GLAPI void APIENTRY glVertexAttribIPointerEXT (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); GLAPI void APIENTRY glGetVertexAttribIivEXT (GLuint index, GLenum pname, GLint *params); GLAPI void APIENTRY glGetVertexAttribIuivEXT (GLuint index, GLenum pname, GLuint *params); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IEXTPROC) (GLuint index, GLint x); typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IEXTPROC) (GLuint index, GLint x, GLint y); typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IEXTPROC) (GLuint index, GLint x, GLint y, GLint z); typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IEXTPROC) (GLuint index, GLint x, GLint y, GLint z, GLint w); typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIEXTPROC) (GLuint index, GLuint x); typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIEXTPROC) (GLuint index, GLuint x, GLuint y); typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIEXTPROC) (GLuint index, GLuint x, GLuint y, GLuint z); typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIEXTPROC) (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IVEXTPROC) (GLuint index, const GLint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IVEXTPROC) (GLuint index, const GLint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IVEXTPROC) (GLuint index, const GLint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IVEXTPROC) (GLuint index, const GLint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIVEXTPROC) (GLuint index, const GLuint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIVEXTPROC) (GLuint index, const GLuint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIVEXTPROC) (GLuint index, const GLuint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIVEXTPROC) (GLuint index, const GLuint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI4BVEXTPROC) (GLuint index, const GLbyte *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI4SVEXTPROC) (GLuint index, const GLshort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UBVEXTPROC) (GLuint index, const GLubyte *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI4USVEXTPROC) (GLuint index, const GLushort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBIPOINTEREXTPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIIVEXTPROC) (GLuint index, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIUIVEXTPROC) (GLuint index, GLenum pname, GLuint *params); #endif #ifndef GL_EXT_gpu_shader4 #define GL_EXT_gpu_shader4 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glGetUniformuivEXT (GLuint program, GLint location, GLuint *params); GLAPI void APIENTRY glBindFragDataLocationEXT (GLuint program, GLuint color, const GLchar *name); GLAPI GLint APIENTRY glGetFragDataLocationEXT (GLuint program, const GLchar *name); GLAPI void APIENTRY glUniform1uiEXT (GLint location, GLuint v0); GLAPI void APIENTRY glUniform2uiEXT (GLint location, GLuint v0, GLuint v1); GLAPI void APIENTRY glUniform3uiEXT (GLint location, GLuint v0, GLuint v1, GLuint v2); GLAPI void APIENTRY glUniform4uiEXT (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); GLAPI void APIENTRY glUniform1uivEXT (GLint location, GLsizei count, const GLuint *value); GLAPI void APIENTRY glUniform2uivEXT (GLint location, GLsizei count, const GLuint *value); GLAPI void APIENTRY glUniform3uivEXT (GLint location, GLsizei count, const GLuint *value); GLAPI void APIENTRY glUniform4uivEXT (GLint location, GLsizei count, const GLuint *value); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLGETUNIFORMUIVEXTPROC) (GLuint program, GLint location, GLuint *params); typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONEXTPROC) (GLuint program, GLuint color, const GLchar *name); typedef GLint (APIENTRYP PFNGLGETFRAGDATALOCATIONEXTPROC) (GLuint program, const GLchar *name); typedef void (APIENTRYP PFNGLUNIFORM1UIEXTPROC) (GLint location, GLuint v0); typedef void (APIENTRYP PFNGLUNIFORM2UIEXTPROC) (GLint location, GLuint v0, GLuint v1); typedef void (APIENTRYP PFNGLUNIFORM3UIEXTPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2); typedef void (APIENTRYP PFNGLUNIFORM4UIEXTPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); typedef void (APIENTRYP PFNGLUNIFORM1UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); typedef void (APIENTRYP PFNGLUNIFORM2UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); typedef void (APIENTRYP PFNGLUNIFORM3UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); typedef void (APIENTRYP PFNGLUNIFORM4UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); #endif #ifndef GL_EXT_draw_instanced #define GL_EXT_draw_instanced 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDrawArraysInstancedEXT (GLenum mode, GLint start, GLsizei count, GLsizei primcount); GLAPI void APIENTRY glDrawElementsInstancedEXT (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDEXTPROC) (GLenum mode, GLint start, GLsizei count, GLsizei primcount); typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDEXTPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount); #endif #ifndef GL_EXT_packed_float #define GL_EXT_packed_float 1 #endif #ifndef GL_EXT_texture_array #define GL_EXT_texture_array 1 #endif #ifndef GL_EXT_texture_buffer_object #define GL_EXT_texture_buffer_object 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glTexBufferEXT (GLenum target, GLenum internalformat, GLuint buffer); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLTEXBUFFEREXTPROC) (GLenum target, GLenum internalformat, GLuint buffer); #endif #ifndef GL_EXT_texture_compression_latc #define GL_EXT_texture_compression_latc 1 #endif #ifndef GL_EXT_texture_compression_rgtc #define GL_EXT_texture_compression_rgtc 1 #endif #ifndef GL_EXT_texture_shared_exponent #define GL_EXT_texture_shared_exponent 1 #endif #ifndef GL_NV_depth_buffer_float #define GL_NV_depth_buffer_float 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDepthRangedNV (GLdouble zNear, GLdouble zFar); GLAPI void APIENTRY glClearDepthdNV (GLdouble depth); GLAPI void APIENTRY glDepthBoundsdNV (GLdouble zmin, GLdouble zmax); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLDEPTHRANGEDNVPROC) (GLdouble zNear, GLdouble zFar); typedef void (APIENTRYP PFNGLCLEARDEPTHDNVPROC) (GLdouble depth); typedef void (APIENTRYP PFNGLDEPTHBOUNDSDNVPROC) (GLdouble zmin, GLdouble zmax); #endif #ifndef GL_NV_fragment_program4 #define GL_NV_fragment_program4 1 #endif #ifndef GL_NV_framebuffer_multisample_coverage #define GL_NV_framebuffer_multisample_coverage 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glRenderbufferStorageMultisampleCoverageNV (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); #endif #ifndef GL_EXT_framebuffer_sRGB #define GL_EXT_framebuffer_sRGB 1 #endif #ifndef GL_NV_geometry_shader4 #define GL_NV_geometry_shader4 1 #endif #ifndef GL_NV_parameter_buffer_object #define GL_NV_parameter_buffer_object 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glProgramBufferParametersfvNV (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLfloat *params); GLAPI void APIENTRY glProgramBufferParametersIivNV (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLint *params); GLAPI void APIENTRY glProgramBufferParametersIuivNV (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLuint *params); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSFVNVPROC) (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLfloat *params); typedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC) (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLint *params); typedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC) (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLuint *params); #endif #ifndef GL_EXT_draw_buffers2 #define GL_EXT_draw_buffers2 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glColorMaskIndexedEXT (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); GLAPI void APIENTRY glGetBooleanIndexedvEXT (GLenum target, GLuint index, GLboolean *data); GLAPI void APIENTRY glGetIntegerIndexedvEXT (GLenum target, GLuint index, GLint *data); GLAPI void APIENTRY glEnableIndexedEXT (GLenum target, GLuint index); GLAPI void APIENTRY glDisableIndexedEXT (GLenum target, GLuint index); GLAPI GLboolean APIENTRY glIsEnabledIndexedEXT (GLenum target, GLuint index); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLCOLORMASKINDEXEDEXTPROC) (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); typedef void (APIENTRYP PFNGLGETBOOLEANINDEXEDVEXTPROC) (GLenum target, GLuint index, GLboolean *data); typedef void (APIENTRYP PFNGLGETINTEGERINDEXEDVEXTPROC) (GLenum target, GLuint index, GLint *data); typedef void (APIENTRYP PFNGLENABLEINDEXEDEXTPROC) (GLenum target, GLuint index); typedef void (APIENTRYP PFNGLDISABLEINDEXEDEXTPROC) (GLenum target, GLuint index); typedef GLboolean (APIENTRYP PFNGLISENABLEDINDEXEDEXTPROC) (GLenum target, GLuint index); #endif #ifndef GL_NV_transform_feedback #define GL_NV_transform_feedback 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBeginTransformFeedbackNV (GLenum primitiveMode); GLAPI void APIENTRY glEndTransformFeedbackNV (void); GLAPI void APIENTRY glTransformFeedbackAttribsNV (GLuint count, const GLint *attribs, GLenum bufferMode); GLAPI void APIENTRY glBindBufferRangeNV (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); GLAPI void APIENTRY glBindBufferOffsetNV (GLenum target, GLuint index, GLuint buffer, GLintptr offset); GLAPI void APIENTRY glBindBufferBaseNV (GLenum target, GLuint index, GLuint buffer); GLAPI void APIENTRY glTransformFeedbackVaryingsNV (GLuint program, GLsizei count, const GLint *locations, GLenum bufferMode); GLAPI void APIENTRY glActiveVaryingNV (GLuint program, const GLchar *name); GLAPI GLint APIENTRY glGetVaryingLocationNV (GLuint program, const GLchar *name); GLAPI void APIENTRY glGetActiveVaryingNV (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); GLAPI void APIENTRY glGetTransformFeedbackVaryingNV (GLuint program, GLuint index, GLint *location); GLAPI void APIENTRY glTransformFeedbackStreamAttribsNV (GLsizei count, const GLint *attribs, GLsizei nbuffers, const GLint *bufstreams, GLenum bufferMode); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKNVPROC) (GLenum primitiveMode); typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKNVPROC) (void); typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKATTRIBSNVPROC) (GLuint count, const GLint *attribs, GLenum bufferMode); typedef void (APIENTRYP PFNGLBINDBUFFERRANGENVPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); typedef void (APIENTRYP PFNGLBINDBUFFEROFFSETNVPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset); typedef void (APIENTRYP PFNGLBINDBUFFERBASENVPROC) (GLenum target, GLuint index, GLuint buffer); typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSNVPROC) (GLuint program, GLsizei count, const GLint *locations, GLenum bufferMode); typedef void (APIENTRYP PFNGLACTIVEVARYINGNVPROC) (GLuint program, const GLchar *name); typedef GLint (APIENTRYP PFNGLGETVARYINGLOCATIONNVPROC) (GLuint program, const GLchar *name); typedef void (APIENTRYP PFNGLGETACTIVEVARYINGNVPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC) (GLuint program, GLuint index, GLint *location); typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKSTREAMATTRIBSNVPROC) (GLsizei count, const GLint *attribs, GLsizei nbuffers, const GLint *bufstreams, GLenum bufferMode); #endif #ifndef GL_EXT_bindable_uniform #define GL_EXT_bindable_uniform 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glUniformBufferEXT (GLuint program, GLint location, GLuint buffer); GLAPI GLint APIENTRY glGetUniformBufferSizeEXT (GLuint program, GLint location); GLAPI GLintptr APIENTRY glGetUniformOffsetEXT (GLuint program, GLint location); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLUNIFORMBUFFEREXTPROC) (GLuint program, GLint location, GLuint buffer); typedef GLint (APIENTRYP PFNGLGETUNIFORMBUFFERSIZEEXTPROC) (GLuint program, GLint location); typedef GLintptr (APIENTRYP PFNGLGETUNIFORMOFFSETEXTPROC) (GLuint program, GLint location); #endif #ifndef GL_EXT_texture_integer #define GL_EXT_texture_integer 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glTexParameterIivEXT (GLenum target, GLenum pname, const GLint *params); GLAPI void APIENTRY glTexParameterIuivEXT (GLenum target, GLenum pname, const GLuint *params); GLAPI void APIENTRY glGetTexParameterIivEXT (GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetTexParameterIuivEXT (GLenum target, GLenum pname, GLuint *params); GLAPI void APIENTRY glClearColorIiEXT (GLint red, GLint green, GLint blue, GLint alpha); GLAPI void APIENTRY glClearColorIuiEXT (GLuint red, GLuint green, GLuint blue, GLuint alpha); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, const GLuint *params); typedef void (APIENTRYP PFNGLGETTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, GLuint *params); typedef void (APIENTRYP PFNGLCLEARCOLORIIEXTPROC) (GLint red, GLint green, GLint blue, GLint alpha); typedef void (APIENTRYP PFNGLCLEARCOLORIUIEXTPROC) (GLuint red, GLuint green, GLuint blue, GLuint alpha); #endif #ifndef GL_GREMEDY_frame_terminator #define GL_GREMEDY_frame_terminator 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glFrameTerminatorGREMEDY (void); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLFRAMETERMINATORGREMEDYPROC) (void); #endif #ifndef GL_NV_conditional_render #define GL_NV_conditional_render 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBeginConditionalRenderNV (GLuint id, GLenum mode); GLAPI void APIENTRY glEndConditionalRenderNV (void); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERNVPROC) (GLuint id, GLenum mode); typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERNVPROC) (void); #endif #ifndef GL_NV_present_video #define GL_NV_present_video 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glPresentFrameKeyedNV (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLuint key0, GLenum target1, GLuint fill1, GLuint key1); GLAPI void APIENTRY glPresentFrameDualFillNV (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLenum target1, GLuint fill1, GLenum target2, GLuint fill2, GLenum target3, GLuint fill3); GLAPI void APIENTRY glGetVideoivNV (GLuint video_slot, GLenum pname, GLint *params); GLAPI void APIENTRY glGetVideouivNV (GLuint video_slot, GLenum pname, GLuint *params); GLAPI void APIENTRY glGetVideoi64vNV (GLuint video_slot, GLenum pname, GLint64EXT *params); GLAPI void APIENTRY glGetVideoui64vNV (GLuint video_slot, GLenum pname, GLuint64EXT *params); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLPRESENTFRAMEKEYEDNVPROC) (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLuint key0, GLenum target1, GLuint fill1, GLuint key1); typedef void (APIENTRYP PFNGLPRESENTFRAMEDUALFILLNVPROC) (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLenum target1, GLuint fill1, GLenum target2, GLuint fill2, GLenum target3, GLuint fill3); typedef void (APIENTRYP PFNGLGETVIDEOIVNVPROC) (GLuint video_slot, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETVIDEOUIVNVPROC) (GLuint video_slot, GLenum pname, GLuint *params); typedef void (APIENTRYP PFNGLGETVIDEOI64VNVPROC) (GLuint video_slot, GLenum pname, GLint64EXT *params); typedef void (APIENTRYP PFNGLGETVIDEOUI64VNVPROC) (GLuint video_slot, GLenum pname, GLuint64EXT *params); #endif #ifndef GL_EXT_transform_feedback #define GL_EXT_transform_feedback 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBeginTransformFeedbackEXT (GLenum primitiveMode); GLAPI void APIENTRY glEndTransformFeedbackEXT (void); GLAPI void APIENTRY glBindBufferRangeEXT (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); GLAPI void APIENTRY glBindBufferOffsetEXT (GLenum target, GLuint index, GLuint buffer, GLintptr offset); GLAPI void APIENTRY glBindBufferBaseEXT (GLenum target, GLuint index, GLuint buffer); GLAPI void APIENTRY glTransformFeedbackVaryingsEXT (GLuint program, GLsizei count, const GLchar* *varyings, GLenum bufferMode); GLAPI void APIENTRY glGetTransformFeedbackVaryingEXT (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKEXTPROC) (GLenum primitiveMode); typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKEXTPROC) (void); typedef void (APIENTRYP PFNGLBINDBUFFERRANGEEXTPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); typedef void (APIENTRYP PFNGLBINDBUFFEROFFSETEXTPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset); typedef void (APIENTRYP PFNGLBINDBUFFERBASEEXTPROC) (GLenum target, GLuint index, GLuint buffer); typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSEXTPROC) (GLuint program, GLsizei count, const GLchar* *varyings, GLenum bufferMode); typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGEXTPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); #endif #ifndef GL_EXT_direct_state_access #define GL_EXT_direct_state_access 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glClientAttribDefaultEXT (GLbitfield mask); GLAPI void APIENTRY glPushClientAttribDefaultEXT (GLbitfield mask); GLAPI void APIENTRY glMatrixLoadfEXT (GLenum mode, const GLfloat *m); GLAPI void APIENTRY glMatrixLoaddEXT (GLenum mode, const GLdouble *m); GLAPI void APIENTRY glMatrixMultfEXT (GLenum mode, const GLfloat *m); GLAPI void APIENTRY glMatrixMultdEXT (GLenum mode, const GLdouble *m); GLAPI void APIENTRY glMatrixLoadIdentityEXT (GLenum mode); GLAPI void APIENTRY glMatrixRotatefEXT (GLenum mode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glMatrixRotatedEXT (GLenum mode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z); GLAPI void APIENTRY glMatrixScalefEXT (GLenum mode, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glMatrixScaledEXT (GLenum mode, GLdouble x, GLdouble y, GLdouble z); GLAPI void APIENTRY glMatrixTranslatefEXT (GLenum mode, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glMatrixTranslatedEXT (GLenum mode, GLdouble x, GLdouble y, GLdouble z); GLAPI void APIENTRY glMatrixFrustumEXT (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); GLAPI void APIENTRY glMatrixOrthoEXT (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); GLAPI void APIENTRY glMatrixPopEXT (GLenum mode); GLAPI void APIENTRY glMatrixPushEXT (GLenum mode); GLAPI void APIENTRY glMatrixLoadTransposefEXT (GLenum mode, const GLfloat *m); GLAPI void APIENTRY glMatrixLoadTransposedEXT (GLenum mode, const GLdouble *m); GLAPI void APIENTRY glMatrixMultTransposefEXT (GLenum mode, const GLfloat *m); GLAPI void APIENTRY glMatrixMultTransposedEXT (GLenum mode, const GLdouble *m); GLAPI void APIENTRY glTextureParameterfEXT (GLuint texture, GLenum target, GLenum pname, GLfloat param); GLAPI void APIENTRY glTextureParameterfvEXT (GLuint texture, GLenum target, GLenum pname, const GLfloat *params); GLAPI void APIENTRY glTextureParameteriEXT (GLuint texture, GLenum target, GLenum pname, GLint param); GLAPI void APIENTRY glTextureParameterivEXT (GLuint texture, GLenum target, GLenum pname, const GLint *params); GLAPI void APIENTRY glTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels); GLAPI void APIENTRY glTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels); GLAPI void APIENTRY glTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels); GLAPI void APIENTRY glTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); GLAPI void APIENTRY glCopyTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); GLAPI void APIENTRY glCopyTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); GLAPI void APIENTRY glCopyTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); GLAPI void APIENTRY glCopyTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); GLAPI void APIENTRY glGetTextureImageEXT (GLuint texture, GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels); GLAPI void APIENTRY glGetTextureParameterfvEXT (GLuint texture, GLenum target, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetTextureParameterivEXT (GLuint texture, GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetTextureLevelParameterfvEXT (GLuint texture, GLenum target, GLint level, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetTextureLevelParameterivEXT (GLuint texture, GLenum target, GLint level, GLenum pname, GLint *params); GLAPI void APIENTRY glTextureImage3DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); GLAPI void APIENTRY glTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); GLAPI void APIENTRY glCopyTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); GLAPI void APIENTRY glMultiTexParameterfEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat param); GLAPI void APIENTRY glMultiTexParameterfvEXT (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params); GLAPI void APIENTRY glMultiTexParameteriEXT (GLenum texunit, GLenum target, GLenum pname, GLint param); GLAPI void APIENTRY glMultiTexParameterivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint *params); GLAPI void APIENTRY glMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels); GLAPI void APIENTRY glMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels); GLAPI void APIENTRY glMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels); GLAPI void APIENTRY glMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); GLAPI void APIENTRY glCopyMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); GLAPI void APIENTRY glCopyMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); GLAPI void APIENTRY glCopyMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); GLAPI void APIENTRY glCopyMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); GLAPI void APIENTRY glGetMultiTexImageEXT (GLenum texunit, GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels); GLAPI void APIENTRY glGetMultiTexParameterfvEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetMultiTexParameterivEXT (GLenum texunit, GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetMultiTexLevelParameterfvEXT (GLenum texunit, GLenum target, GLint level, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetMultiTexLevelParameterivEXT (GLenum texunit, GLenum target, GLint level, GLenum pname, GLint *params); GLAPI void APIENTRY glMultiTexImage3DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); GLAPI void APIENTRY glMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); GLAPI void APIENTRY glCopyMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); GLAPI void APIENTRY glBindMultiTextureEXT (GLenum texunit, GLenum target, GLuint texture); GLAPI void APIENTRY glEnableClientStateIndexedEXT (GLenum array, GLuint index); GLAPI void APIENTRY glDisableClientStateIndexedEXT (GLenum array, GLuint index); GLAPI void APIENTRY glMultiTexCoordPointerEXT (GLenum texunit, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); GLAPI void APIENTRY glMultiTexEnvfEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat param); GLAPI void APIENTRY glMultiTexEnvfvEXT (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params); GLAPI void APIENTRY glMultiTexEnviEXT (GLenum texunit, GLenum target, GLenum pname, GLint param); GLAPI void APIENTRY glMultiTexEnvivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint *params); GLAPI void APIENTRY glMultiTexGendEXT (GLenum texunit, GLenum coord, GLenum pname, GLdouble param); GLAPI void APIENTRY glMultiTexGendvEXT (GLenum texunit, GLenum coord, GLenum pname, const GLdouble *params); GLAPI void APIENTRY glMultiTexGenfEXT (GLenum texunit, GLenum coord, GLenum pname, GLfloat param); GLAPI void APIENTRY glMultiTexGenfvEXT (GLenum texunit, GLenum coord, GLenum pname, const GLfloat *params); GLAPI void APIENTRY glMultiTexGeniEXT (GLenum texunit, GLenum coord, GLenum pname, GLint param); GLAPI void APIENTRY glMultiTexGenivEXT (GLenum texunit, GLenum coord, GLenum pname, const GLint *params); GLAPI void APIENTRY glGetMultiTexEnvfvEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetMultiTexEnvivEXT (GLenum texunit, GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetMultiTexGendvEXT (GLenum texunit, GLenum coord, GLenum pname, GLdouble *params); GLAPI void APIENTRY glGetMultiTexGenfvEXT (GLenum texunit, GLenum coord, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetMultiTexGenivEXT (GLenum texunit, GLenum coord, GLenum pname, GLint *params); GLAPI void APIENTRY glGetFloatIndexedvEXT (GLenum target, GLuint index, GLfloat *data); GLAPI void APIENTRY glGetDoubleIndexedvEXT (GLenum target, GLuint index, GLdouble *data); GLAPI void APIENTRY glGetPointerIndexedvEXT (GLenum target, GLuint index, GLvoid* *data); GLAPI void APIENTRY glCompressedTextureImage3DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *bits); GLAPI void APIENTRY glCompressedTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *bits); GLAPI void APIENTRY glCompressedTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *bits); GLAPI void APIENTRY glCompressedTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *bits); GLAPI void APIENTRY glCompressedTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *bits); GLAPI void APIENTRY glCompressedTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *bits); GLAPI void APIENTRY glGetCompressedTextureImageEXT (GLuint texture, GLenum target, GLint lod, GLvoid *img); GLAPI void APIENTRY glCompressedMultiTexImage3DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *bits); GLAPI void APIENTRY glCompressedMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *bits); GLAPI void APIENTRY glCompressedMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *bits); GLAPI void APIENTRY glCompressedMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *bits); GLAPI void APIENTRY glCompressedMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *bits); GLAPI void APIENTRY glCompressedMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *bits); GLAPI void APIENTRY glGetCompressedMultiTexImageEXT (GLenum texunit, GLenum target, GLint lod, GLvoid *img); GLAPI void APIENTRY glNamedProgramStringEXT (GLuint program, GLenum target, GLenum format, GLsizei len, const GLvoid *string); GLAPI void APIENTRY glNamedProgramLocalParameter4dEXT (GLuint program, GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLAPI void APIENTRY glNamedProgramLocalParameter4dvEXT (GLuint program, GLenum target, GLuint index, const GLdouble *params); GLAPI void APIENTRY glNamedProgramLocalParameter4fEXT (GLuint program, GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); GLAPI void APIENTRY glNamedProgramLocalParameter4fvEXT (GLuint program, GLenum target, GLuint index, const GLfloat *params); GLAPI void APIENTRY glGetNamedProgramLocalParameterdvEXT (GLuint program, GLenum target, GLuint index, GLdouble *params); GLAPI void APIENTRY glGetNamedProgramLocalParameterfvEXT (GLuint program, GLenum target, GLuint index, GLfloat *params); GLAPI void APIENTRY glGetNamedProgramivEXT (GLuint program, GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetNamedProgramStringEXT (GLuint program, GLenum target, GLenum pname, GLvoid *string); GLAPI void APIENTRY glNamedProgramLocalParameters4fvEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLfloat *params); GLAPI void APIENTRY glNamedProgramLocalParameterI4iEXT (GLuint program, GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); GLAPI void APIENTRY glNamedProgramLocalParameterI4ivEXT (GLuint program, GLenum target, GLuint index, const GLint *params); GLAPI void APIENTRY glNamedProgramLocalParametersI4ivEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLint *params); GLAPI void APIENTRY glNamedProgramLocalParameterI4uiEXT (GLuint program, GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); GLAPI void APIENTRY glNamedProgramLocalParameterI4uivEXT (GLuint program, GLenum target, GLuint index, const GLuint *params); GLAPI void APIENTRY glNamedProgramLocalParametersI4uivEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLuint *params); GLAPI void APIENTRY glGetNamedProgramLocalParameterIivEXT (GLuint program, GLenum target, GLuint index, GLint *params); GLAPI void APIENTRY glGetNamedProgramLocalParameterIuivEXT (GLuint program, GLenum target, GLuint index, GLuint *params); GLAPI void APIENTRY glTextureParameterIivEXT (GLuint texture, GLenum target, GLenum pname, const GLint *params); GLAPI void APIENTRY glTextureParameterIuivEXT (GLuint texture, GLenum target, GLenum pname, const GLuint *params); GLAPI void APIENTRY glGetTextureParameterIivEXT (GLuint texture, GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetTextureParameterIuivEXT (GLuint texture, GLenum target, GLenum pname, GLuint *params); GLAPI void APIENTRY glMultiTexParameterIivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint *params); GLAPI void APIENTRY glMultiTexParameterIuivEXT (GLenum texunit, GLenum target, GLenum pname, const GLuint *params); GLAPI void APIENTRY glGetMultiTexParameterIivEXT (GLenum texunit, GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetMultiTexParameterIuivEXT (GLenum texunit, GLenum target, GLenum pname, GLuint *params); GLAPI void APIENTRY glProgramUniform1fEXT (GLuint program, GLint location, GLfloat v0); GLAPI void APIENTRY glProgramUniform2fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1); GLAPI void APIENTRY glProgramUniform3fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); GLAPI void APIENTRY glProgramUniform4fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); GLAPI void APIENTRY glProgramUniform1iEXT (GLuint program, GLint location, GLint v0); GLAPI void APIENTRY glProgramUniform2iEXT (GLuint program, GLint location, GLint v0, GLint v1); GLAPI void APIENTRY glProgramUniform3iEXT (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); GLAPI void APIENTRY glProgramUniform4iEXT (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); GLAPI void APIENTRY glProgramUniform1fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); GLAPI void APIENTRY glProgramUniform2fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); GLAPI void APIENTRY glProgramUniform3fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); GLAPI void APIENTRY glProgramUniform4fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); GLAPI void APIENTRY glProgramUniform1ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); GLAPI void APIENTRY glProgramUniform2ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); GLAPI void APIENTRY glProgramUniform3ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); GLAPI void APIENTRY glProgramUniform4ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); GLAPI void APIENTRY glProgramUniformMatrix2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glProgramUniformMatrix3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glProgramUniformMatrix4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glProgramUniformMatrix2x3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glProgramUniformMatrix3x2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glProgramUniformMatrix2x4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glProgramUniformMatrix4x2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glProgramUniformMatrix3x4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glProgramUniformMatrix4x3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glProgramUniform1uiEXT (GLuint program, GLint location, GLuint v0); GLAPI void APIENTRY glProgramUniform2uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1); GLAPI void APIENTRY glProgramUniform3uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); GLAPI void APIENTRY glProgramUniform4uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); GLAPI void APIENTRY glProgramUniform1uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); GLAPI void APIENTRY glProgramUniform2uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); GLAPI void APIENTRY glProgramUniform3uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); GLAPI void APIENTRY glProgramUniform4uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); GLAPI void APIENTRY glNamedBufferDataEXT (GLuint buffer, GLsizeiptr size, const GLvoid *data, GLenum usage); GLAPI void APIENTRY glNamedBufferSubDataEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, const GLvoid *data); GLAPI GLvoid* APIENTRY glMapNamedBufferEXT (GLuint buffer, GLenum access); GLAPI GLboolean APIENTRY glUnmapNamedBufferEXT (GLuint buffer); GLAPI GLvoid* APIENTRY glMapNamedBufferRangeEXT (GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access); GLAPI void APIENTRY glFlushMappedNamedBufferRangeEXT (GLuint buffer, GLintptr offset, GLsizeiptr length); GLAPI void APIENTRY glNamedCopyBufferSubDataEXT (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); GLAPI void APIENTRY glGetNamedBufferParameterivEXT (GLuint buffer, GLenum pname, GLint *params); GLAPI void APIENTRY glGetNamedBufferPointervEXT (GLuint buffer, GLenum pname, GLvoid* *params); GLAPI void APIENTRY glGetNamedBufferSubDataEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, GLvoid *data); GLAPI void APIENTRY glTextureBufferEXT (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer); GLAPI void APIENTRY glMultiTexBufferEXT (GLenum texunit, GLenum target, GLenum internalformat, GLuint buffer); GLAPI void APIENTRY glNamedRenderbufferStorageEXT (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height); GLAPI void APIENTRY glGetNamedRenderbufferParameterivEXT (GLuint renderbuffer, GLenum pname, GLint *params); GLAPI GLenum APIENTRY glCheckNamedFramebufferStatusEXT (GLuint framebuffer, GLenum target); GLAPI void APIENTRY glNamedFramebufferTexture1DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); GLAPI void APIENTRY glNamedFramebufferTexture2DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); GLAPI void APIENTRY glNamedFramebufferTexture3DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); GLAPI void APIENTRY glNamedFramebufferRenderbufferEXT (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); GLAPI void APIENTRY glGetNamedFramebufferAttachmentParameterivEXT (GLuint framebuffer, GLenum attachment, GLenum pname, GLint *params); GLAPI void APIENTRY glGenerateTextureMipmapEXT (GLuint texture, GLenum target); GLAPI void APIENTRY glGenerateMultiTexMipmapEXT (GLenum texunit, GLenum target); GLAPI void APIENTRY glFramebufferDrawBufferEXT (GLuint framebuffer, GLenum mode); GLAPI void APIENTRY glFramebufferDrawBuffersEXT (GLuint framebuffer, GLsizei n, const GLenum *bufs); GLAPI void APIENTRY glFramebufferReadBufferEXT (GLuint framebuffer, GLenum mode); GLAPI void APIENTRY glGetFramebufferParameterivEXT (GLuint framebuffer, GLenum pname, GLint *params); GLAPI void APIENTRY glNamedRenderbufferStorageMultisampleEXT (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); GLAPI void APIENTRY glNamedRenderbufferStorageMultisampleCoverageEXT (GLuint renderbuffer, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); GLAPI void APIENTRY glNamedFramebufferTextureEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level); GLAPI void APIENTRY glNamedFramebufferTextureLayerEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer); GLAPI void APIENTRY glNamedFramebufferTextureFaceEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLenum face); GLAPI void APIENTRY glTextureRenderbufferEXT (GLuint texture, GLenum target, GLuint renderbuffer); GLAPI void APIENTRY glMultiTexRenderbufferEXT (GLenum texunit, GLenum target, GLuint renderbuffer); GLAPI void APIENTRY glProgramUniform1dEXT (GLuint program, GLint location, GLdouble x); GLAPI void APIENTRY glProgramUniform2dEXT (GLuint program, GLint location, GLdouble x, GLdouble y); GLAPI void APIENTRY glProgramUniform3dEXT (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z); GLAPI void APIENTRY glProgramUniform4dEXT (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLAPI void APIENTRY glProgramUniform1dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value); GLAPI void APIENTRY glProgramUniform2dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value); GLAPI void APIENTRY glProgramUniform3dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value); GLAPI void APIENTRY glProgramUniform4dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value); GLAPI void APIENTRY glProgramUniformMatrix2dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glProgramUniformMatrix3dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glProgramUniformMatrix4dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glProgramUniformMatrix2x3dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glProgramUniformMatrix2x4dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glProgramUniformMatrix3x2dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glProgramUniformMatrix3x4dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glProgramUniformMatrix4x2dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glProgramUniformMatrix4x3dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLCLIENTATTRIBDEFAULTEXTPROC) (GLbitfield mask); typedef void (APIENTRYP PFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC) (GLbitfield mask); typedef void (APIENTRYP PFNGLMATRIXLOADFEXTPROC) (GLenum mode, const GLfloat *m); typedef void (APIENTRYP PFNGLMATRIXLOADDEXTPROC) (GLenum mode, const GLdouble *m); typedef void (APIENTRYP PFNGLMATRIXMULTFEXTPROC) (GLenum mode, const GLfloat *m); typedef void (APIENTRYP PFNGLMATRIXMULTDEXTPROC) (GLenum mode, const GLdouble *m); typedef void (APIENTRYP PFNGLMATRIXLOADIDENTITYEXTPROC) (GLenum mode); typedef void (APIENTRYP PFNGLMATRIXROTATEFEXTPROC) (GLenum mode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLMATRIXROTATEDEXTPROC) (GLenum mode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z); typedef void (APIENTRYP PFNGLMATRIXSCALEFEXTPROC) (GLenum mode, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLMATRIXSCALEDEXTPROC) (GLenum mode, GLdouble x, GLdouble y, GLdouble z); typedef void (APIENTRYP PFNGLMATRIXTRANSLATEFEXTPROC) (GLenum mode, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLMATRIXTRANSLATEDEXTPROC) (GLenum mode, GLdouble x, GLdouble y, GLdouble z); typedef void (APIENTRYP PFNGLMATRIXFRUSTUMEXTPROC) (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); typedef void (APIENTRYP PFNGLMATRIXORTHOEXTPROC) (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); typedef void (APIENTRYP PFNGLMATRIXPOPEXTPROC) (GLenum mode); typedef void (APIENTRYP PFNGLMATRIXPUSHEXTPROC) (GLenum mode); typedef void (APIENTRYP PFNGLMATRIXLOADTRANSPOSEFEXTPROC) (GLenum mode, const GLfloat *m); typedef void (APIENTRYP PFNGLMATRIXLOADTRANSPOSEDEXTPROC) (GLenum mode, const GLdouble *m); typedef void (APIENTRYP PFNGLMATRIXMULTTRANSPOSEFEXTPROC) (GLenum mode, const GLfloat *m); typedef void (APIENTRYP PFNGLMATRIXMULTTRANSPOSEDEXTPROC) (GLenum mode, const GLdouble *m); typedef void (APIENTRYP PFNGLTEXTUREPARAMETERFEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLfloat param); typedef void (APIENTRYP PFNGLTEXTUREPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLfloat *params); typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint param); typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels); typedef void (APIENTRYP PFNGLTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels); typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels); typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); typedef void (APIENTRYP PFNGLCOPYTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); typedef void (APIENTRYP PFNGLCOPYTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLGETTEXTUREIMAGEEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels); typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETTEXTURELEVELPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETTEXTURELEVELPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLTEXTUREIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLMULTITEXPARAMETERFEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat param); typedef void (APIENTRYP PFNGLMULTITEXPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params); typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint param); typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels); typedef void (APIENTRYP PFNGLMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels); typedef void (APIENTRYP PFNGLMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels); typedef void (APIENTRYP PFNGLMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); typedef void (APIENTRYP PFNGLCOPYMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); typedef void (APIENTRYP PFNGLCOPYMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); typedef void (APIENTRYP PFNGLCOPYMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); typedef void (APIENTRYP PFNGLCOPYMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLGETMULTITEXIMAGEEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels); typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETMULTITEXLEVELPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETMULTITEXLEVELPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLMULTITEXIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); typedef void (APIENTRYP PFNGLMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); typedef void (APIENTRYP PFNGLCOPYMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLBINDMULTITEXTUREEXTPROC) (GLenum texunit, GLenum target, GLuint texture); typedef void (APIENTRYP PFNGLENABLECLIENTSTATEINDEXEDEXTPROC) (GLenum array, GLuint index); typedef void (APIENTRYP PFNGLDISABLECLIENTSTATEINDEXEDEXTPROC) (GLenum array, GLuint index); typedef void (APIENTRYP PFNGLMULTITEXCOORDPOINTEREXTPROC) (GLenum texunit, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); typedef void (APIENTRYP PFNGLMULTITEXENVFEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat param); typedef void (APIENTRYP PFNGLMULTITEXENVFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params); typedef void (APIENTRYP PFNGLMULTITEXENVIEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint param); typedef void (APIENTRYP PFNGLMULTITEXENVIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLMULTITEXGENDEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLdouble param); typedef void (APIENTRYP PFNGLMULTITEXGENDVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLdouble *params); typedef void (APIENTRYP PFNGLMULTITEXGENFEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLfloat param); typedef void (APIENTRYP PFNGLMULTITEXGENFVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLfloat *params); typedef void (APIENTRYP PFNGLMULTITEXGENIEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLint param); typedef void (APIENTRYP PFNGLMULTITEXGENIVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLGETMULTITEXENVFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETMULTITEXENVIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETMULTITEXGENDVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLdouble *params); typedef void (APIENTRYP PFNGLGETMULTITEXGENFVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETMULTITEXGENIVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETFLOATINDEXEDVEXTPROC) (GLenum target, GLuint index, GLfloat *data); typedef void (APIENTRYP PFNGLGETDOUBLEINDEXEDVEXTPROC) (GLenum target, GLuint index, GLdouble *data); typedef void (APIENTRYP PFNGLGETPOINTERINDEXEDVEXTPROC) (GLenum target, GLuint index, GLvoid* *data); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *bits); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *bits); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *bits); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *bits); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *bits); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *bits); typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXTUREIMAGEEXTPROC) (GLuint texture, GLenum target, GLint lod, GLvoid *img); typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *bits); typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *bits); typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *bits); typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *bits); typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *bits); typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *bits); typedef void (APIENTRYP PFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC) (GLenum texunit, GLenum target, GLint lod, GLvoid *img); typedef void (APIENTRYP PFNGLNAMEDPROGRAMSTRINGEXTPROC) (GLuint program, GLenum target, GLenum format, GLsizei len, const GLvoid *string); typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4DEXTPROC) (GLuint program, GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4DVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLdouble *params); typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4FEXTPROC) (GLuint program, GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4FVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLfloat *params); typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERDVEXTPROC) (GLuint program, GLenum target, GLuint index, GLdouble *params); typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERFVEXTPROC) (GLuint program, GLenum target, GLuint index, GLfloat *params); typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMIVEXTPROC) (GLuint program, GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMSTRINGEXTPROC) (GLuint program, GLenum target, GLenum pname, GLvoid *string); typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERS4FVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLfloat *params); typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4IEXTPROC) (GLuint program, GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4IVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLint *params); typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERSI4IVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLint *params); typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIEXTPROC) (GLuint program, GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLuint *params); typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERSI4UIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLuint *params); typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERIIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLint *params); typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERIUIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLuint *params); typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIUIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLuint *params); typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIUIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLuint *params); typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIUIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLuint *params); typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERIIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERIUIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLuint *params); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FEXTPROC) (GLuint program, GLint location, GLfloat v0); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IEXTPROC) (GLuint program, GLint location, GLint v0); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIEXTPROC) (GLuint program, GLint location, GLuint v0); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); typedef void (APIENTRYP PFNGLNAMEDBUFFERDATAEXTPROC) (GLuint buffer, GLsizeiptr size, const GLvoid *data, GLenum usage); typedef void (APIENTRYP PFNGLNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, const GLvoid *data); typedef GLvoid* (APIENTRYP PFNGLMAPNAMEDBUFFEREXTPROC) (GLuint buffer, GLenum access); typedef GLboolean (APIENTRYP PFNGLUNMAPNAMEDBUFFEREXTPROC) (GLuint buffer); typedef GLvoid* (APIENTRYP PFNGLMAPNAMEDBUFFERRANGEEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access); typedef void (APIENTRYP PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length); typedef void (APIENTRYP PFNGLNAMEDCOPYBUFFERSUBDATAEXTPROC) (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC) (GLuint buffer, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPOINTERVEXTPROC) (GLuint buffer, GLenum pname, GLvoid* *params); typedef void (APIENTRYP PFNGLGETNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, GLvoid *data); typedef void (APIENTRYP PFNGLTEXTUREBUFFEREXTPROC) (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer); typedef void (APIENTRYP PFNGLMULTITEXBUFFEREXTPROC) (GLenum texunit, GLenum target, GLenum internalformat, GLuint buffer); typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC) (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC) (GLuint renderbuffer, GLenum pname, GLint *params); typedef GLenum (APIENTRYP PFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC) (GLuint framebuffer, GLenum target); typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC) (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); typedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGENERATETEXTUREMIPMAPEXTPROC) (GLuint texture, GLenum target); typedef void (APIENTRYP PFNGLGENERATEMULTITEXMIPMAPEXTPROC) (GLenum texunit, GLenum target); typedef void (APIENTRYP PFNGLFRAMEBUFFERDRAWBUFFEREXTPROC) (GLuint framebuffer, GLenum mode); typedef void (APIENTRYP PFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC) (GLuint framebuffer, GLsizei n, const GLenum *bufs); typedef void (APIENTRYP PFNGLFRAMEBUFFERREADBUFFEREXTPROC) (GLuint framebuffer, GLenum mode); typedef void (APIENTRYP PFNGLGETFRAMEBUFFERPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC) (GLuint renderbuffer, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level); typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer); typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTUREFACEEXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLenum face); typedef void (APIENTRYP PFNGLTEXTURERENDERBUFFEREXTPROC) (GLuint texture, GLenum target, GLuint renderbuffer); typedef void (APIENTRYP PFNGLMULTITEXRENDERBUFFEREXTPROC) (GLenum texunit, GLenum target, GLuint renderbuffer); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DEXTPROC) (GLuint program, GLint location, GLdouble x); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); #endif #ifndef GL_EXT_vertex_array_bgra #define GL_EXT_vertex_array_bgra 1 #endif #ifndef GL_EXT_texture_swizzle #define GL_EXT_texture_swizzle 1 #endif #ifndef GL_NV_explicit_multisample #define GL_NV_explicit_multisample 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glGetMultisamplefvNV (GLenum pname, GLuint index, GLfloat *val); GLAPI void APIENTRY glSampleMaskIndexedNV (GLuint index, GLbitfield mask); GLAPI void APIENTRY glTexRenderbufferNV (GLenum target, GLuint renderbuffer); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLGETMULTISAMPLEFVNVPROC) (GLenum pname, GLuint index, GLfloat *val); typedef void (APIENTRYP PFNGLSAMPLEMASKINDEXEDNVPROC) (GLuint index, GLbitfield mask); typedef void (APIENTRYP PFNGLTEXRENDERBUFFERNVPROC) (GLenum target, GLuint renderbuffer); #endif #ifndef GL_NV_transform_feedback2 #define GL_NV_transform_feedback2 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBindTransformFeedbackNV (GLenum target, GLuint id); GLAPI void APIENTRY glDeleteTransformFeedbacksNV (GLsizei n, const GLuint *ids); GLAPI void APIENTRY glGenTransformFeedbacksNV (GLsizei n, GLuint *ids); GLAPI GLboolean APIENTRY glIsTransformFeedbackNV (GLuint id); GLAPI void APIENTRY glPauseTransformFeedbackNV (void); GLAPI void APIENTRY glResumeTransformFeedbackNV (void); GLAPI void APIENTRY glDrawTransformFeedbackNV (GLenum mode, GLuint id); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLBINDTRANSFORMFEEDBACKNVPROC) (GLenum target, GLuint id); typedef void (APIENTRYP PFNGLDELETETRANSFORMFEEDBACKSNVPROC) (GLsizei n, const GLuint *ids); typedef void (APIENTRYP PFNGLGENTRANSFORMFEEDBACKSNVPROC) (GLsizei n, GLuint *ids); typedef GLboolean (APIENTRYP PFNGLISTRANSFORMFEEDBACKNVPROC) (GLuint id); typedef void (APIENTRYP PFNGLPAUSETRANSFORMFEEDBACKNVPROC) (void); typedef void (APIENTRYP PFNGLRESUMETRANSFORMFEEDBACKNVPROC) (void); typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKNVPROC) (GLenum mode, GLuint id); #endif #ifndef GL_ATI_meminfo #define GL_ATI_meminfo 1 #endif #ifndef GL_AMD_performance_monitor #define GL_AMD_performance_monitor 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glGetPerfMonitorGroupsAMD (GLint *numGroups, GLsizei groupsSize, GLuint *groups); GLAPI void APIENTRY glGetPerfMonitorCountersAMD (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters); GLAPI void APIENTRY glGetPerfMonitorGroupStringAMD (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString); GLAPI void APIENTRY glGetPerfMonitorCounterStringAMD (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString); GLAPI void APIENTRY glGetPerfMonitorCounterInfoAMD (GLuint group, GLuint counter, GLenum pname, GLvoid *data); GLAPI void APIENTRY glGenPerfMonitorsAMD (GLsizei n, GLuint *monitors); GLAPI void APIENTRY glDeletePerfMonitorsAMD (GLsizei n, GLuint *monitors); GLAPI void APIENTRY glSelectPerfMonitorCountersAMD (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *counterList); GLAPI void APIENTRY glBeginPerfMonitorAMD (GLuint monitor); GLAPI void APIENTRY glEndPerfMonitorAMD (GLuint monitor); GLAPI void APIENTRY glGetPerfMonitorCounterDataAMD (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLGETPERFMONITORGROUPSAMDPROC) (GLint *numGroups, GLsizei groupsSize, GLuint *groups); typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERSAMDPROC) (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters); typedef void (APIENTRYP PFNGLGETPERFMONITORGROUPSTRINGAMDPROC) (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString); typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC) (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString); typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERINFOAMDPROC) (GLuint group, GLuint counter, GLenum pname, GLvoid *data); typedef void (APIENTRYP PFNGLGENPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors); typedef void (APIENTRYP PFNGLDELETEPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors); typedef void (APIENTRYP PFNGLSELECTPERFMONITORCOUNTERSAMDPROC) (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *counterList); typedef void (APIENTRYP PFNGLBEGINPERFMONITORAMDPROC) (GLuint monitor); typedef void (APIENTRYP PFNGLENDPERFMONITORAMDPROC) (GLuint monitor); typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERDATAAMDPROC) (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten); #endif #ifndef GL_AMD_texture_texture4 #define GL_AMD_texture_texture4 1 #endif #ifndef GL_AMD_vertex_shader_tessellator #define GL_AMD_vertex_shader_tessellator 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glTessellationFactorAMD (GLfloat factor); GLAPI void APIENTRY glTessellationModeAMD (GLenum mode); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLTESSELLATIONFACTORAMDPROC) (GLfloat factor); typedef void (APIENTRYP PFNGLTESSELLATIONMODEAMDPROC) (GLenum mode); #endif #ifndef GL_EXT_provoking_vertex #define GL_EXT_provoking_vertex 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glProvokingVertexEXT (GLenum mode); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLPROVOKINGVERTEXEXTPROC) (GLenum mode); #endif #ifndef GL_EXT_texture_snorm #define GL_EXT_texture_snorm 1 #endif #ifndef GL_AMD_draw_buffers_blend #define GL_AMD_draw_buffers_blend 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBlendFuncIndexedAMD (GLuint buf, GLenum src, GLenum dst); GLAPI void APIENTRY glBlendFuncSeparateIndexedAMD (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); GLAPI void APIENTRY glBlendEquationIndexedAMD (GLuint buf, GLenum mode); GLAPI void APIENTRY glBlendEquationSeparateIndexedAMD (GLuint buf, GLenum modeRGB, GLenum modeAlpha); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLBLENDFUNCINDEXEDAMDPROC) (GLuint buf, GLenum src, GLenum dst); typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEINDEXEDAMDPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); typedef void (APIENTRYP PFNGLBLENDEQUATIONINDEXEDAMDPROC) (GLuint buf, GLenum mode); typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEINDEXEDAMDPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha); #endif #ifndef GL_APPLE_texture_range #define GL_APPLE_texture_range 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glTextureRangeAPPLE (GLenum target, GLsizei length, const GLvoid *pointer); GLAPI void APIENTRY glGetTexParameterPointervAPPLE (GLenum target, GLenum pname, GLvoid* *params); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLTEXTURERANGEAPPLEPROC) (GLenum target, GLsizei length, const GLvoid *pointer); typedef void (APIENTRYP PFNGLGETTEXPARAMETERPOINTERVAPPLEPROC) (GLenum target, GLenum pname, GLvoid* *params); #endif #ifndef GL_APPLE_float_pixels #define GL_APPLE_float_pixels 1 #endif #ifndef GL_APPLE_vertex_program_evaluators #define GL_APPLE_vertex_program_evaluators 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glEnableVertexAttribAPPLE (GLuint index, GLenum pname); GLAPI void APIENTRY glDisableVertexAttribAPPLE (GLuint index, GLenum pname); GLAPI GLboolean APIENTRY glIsVertexAttribEnabledAPPLE (GLuint index, GLenum pname); GLAPI void APIENTRY glMapVertexAttrib1dAPPLE (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points); GLAPI void APIENTRY glMapVertexAttrib1fAPPLE (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points); GLAPI void APIENTRY glMapVertexAttrib2dAPPLE (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points); GLAPI void APIENTRY glMapVertexAttrib2fAPPLE (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBAPPLEPROC) (GLuint index, GLenum pname); typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBAPPLEPROC) (GLuint index, GLenum pname); typedef GLboolean (APIENTRYP PFNGLISVERTEXATTRIBENABLEDAPPLEPROC) (GLuint index, GLenum pname); typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB1DAPPLEPROC) (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points); typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB1FAPPLEPROC) (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points); typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB2DAPPLEPROC) (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points); typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB2FAPPLEPROC) (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points); #endif #ifndef GL_APPLE_aux_depth_stencil #define GL_APPLE_aux_depth_stencil 1 #endif #ifndef GL_APPLE_object_purgeable #define GL_APPLE_object_purgeable 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI GLenum APIENTRY glObjectPurgeableAPPLE (GLenum objectType, GLuint name, GLenum option); GLAPI GLenum APIENTRY glObjectUnpurgeableAPPLE (GLenum objectType, GLuint name, GLenum option); GLAPI void APIENTRY glGetObjectParameterivAPPLE (GLenum objectType, GLuint name, GLenum pname, GLint *params); #endif /* GL_GLEXT_PROTOTYPES */ typedef GLenum (APIENTRYP PFNGLOBJECTPURGEABLEAPPLEPROC) (GLenum objectType, GLuint name, GLenum option); typedef GLenum (APIENTRYP PFNGLOBJECTUNPURGEABLEAPPLEPROC) (GLenum objectType, GLuint name, GLenum option); typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERIVAPPLEPROC) (GLenum objectType, GLuint name, GLenum pname, GLint *params); #endif #ifndef GL_APPLE_row_bytes #define GL_APPLE_row_bytes 1 #endif #ifndef GL_APPLE_rgb_422 #define GL_APPLE_rgb_422 1 #endif #ifndef GL_NV_video_capture #define GL_NV_video_capture 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBeginVideoCaptureNV (GLuint video_capture_slot); GLAPI void APIENTRY glBindVideoCaptureStreamBufferNV (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLintptrARB offset); GLAPI void APIENTRY glBindVideoCaptureStreamTextureNV (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLenum target, GLuint texture); GLAPI void APIENTRY glEndVideoCaptureNV (GLuint video_capture_slot); GLAPI void APIENTRY glGetVideoCaptureivNV (GLuint video_capture_slot, GLenum pname, GLint *params); GLAPI void APIENTRY glGetVideoCaptureStreamivNV (GLuint video_capture_slot, GLuint stream, GLenum pname, GLint *params); GLAPI void APIENTRY glGetVideoCaptureStreamfvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetVideoCaptureStreamdvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, GLdouble *params); GLAPI GLenum APIENTRY glVideoCaptureNV (GLuint video_capture_slot, GLuint *sequence_num, GLuint64EXT *capture_time); GLAPI void APIENTRY glVideoCaptureStreamParameterivNV (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLint *params); GLAPI void APIENTRY glVideoCaptureStreamParameterfvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLfloat *params); GLAPI void APIENTRY glVideoCaptureStreamParameterdvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLdouble *params); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLBEGINVIDEOCAPTURENVPROC) (GLuint video_capture_slot); typedef void (APIENTRYP PFNGLBINDVIDEOCAPTURESTREAMBUFFERNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLintptrARB offset); typedef void (APIENTRYP PFNGLBINDVIDEOCAPTURESTREAMTEXTURENVPROC) (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLenum target, GLuint texture); typedef void (APIENTRYP PFNGLENDVIDEOCAPTURENVPROC) (GLuint video_capture_slot); typedef void (APIENTRYP PFNGLGETVIDEOCAPTUREIVNVPROC) (GLuint video_capture_slot, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETVIDEOCAPTURESTREAMIVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETVIDEOCAPTURESTREAMFVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETVIDEOCAPTURESTREAMDVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLdouble *params); typedef GLenum (APIENTRYP PFNGLVIDEOCAPTURENVPROC) (GLuint video_capture_slot, GLuint *sequence_num, GLuint64EXT *capture_time); typedef void (APIENTRYP PFNGLVIDEOCAPTURESTREAMPARAMETERIVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLVIDEOCAPTURESTREAMPARAMETERFVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLfloat *params); typedef void (APIENTRYP PFNGLVIDEOCAPTURESTREAMPARAMETERDVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLdouble *params); #endif #ifndef GL_NV_copy_image #define GL_NV_copy_image 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glCopyImageSubDataNV (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 width, GLsizei height, GLsizei depth); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLCOPYIMAGESUBDATANVPROC) (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 width, GLsizei height, GLsizei depth); #endif #ifndef GL_EXT_separate_shader_objects #define GL_EXT_separate_shader_objects 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glUseShaderProgramEXT (GLenum type, GLuint program); GLAPI void APIENTRY glActiveProgramEXT (GLuint program); GLAPI GLuint APIENTRY glCreateShaderProgramEXT (GLenum type, const GLchar *string); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLUSESHADERPROGRAMEXTPROC) (GLenum type, GLuint program); typedef void (APIENTRYP PFNGLACTIVEPROGRAMEXTPROC) (GLuint program); typedef GLuint (APIENTRYP PFNGLCREATESHADERPROGRAMEXTPROC) (GLenum type, const GLchar *string); #endif #ifndef GL_NV_parameter_buffer_object2 #define GL_NV_parameter_buffer_object2 1 #endif #ifndef GL_NV_shader_buffer_load #define GL_NV_shader_buffer_load 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glMakeBufferResidentNV (GLenum target, GLenum access); GLAPI void APIENTRY glMakeBufferNonResidentNV (GLenum target); GLAPI GLboolean APIENTRY glIsBufferResidentNV (GLenum target); GLAPI void APIENTRY glMakeNamedBufferResidentNV (GLuint buffer, GLenum access); GLAPI void APIENTRY glMakeNamedBufferNonResidentNV (GLuint buffer); GLAPI GLboolean APIENTRY glIsNamedBufferResidentNV (GLuint buffer); GLAPI void APIENTRY glGetBufferParameterui64vNV (GLenum target, GLenum pname, GLuint64EXT *params); GLAPI void APIENTRY glGetNamedBufferParameterui64vNV (GLuint buffer, GLenum pname, GLuint64EXT *params); GLAPI void APIENTRY glGetIntegerui64vNV (GLenum value, GLuint64EXT *result); GLAPI void APIENTRY glUniformui64NV (GLint location, GLuint64EXT value); GLAPI void APIENTRY glUniformui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); GLAPI void APIENTRY glGetUniformui64vNV (GLuint program, GLint location, GLuint64EXT *params); GLAPI void APIENTRY glProgramUniformui64NV (GLuint program, GLint location, GLuint64EXT value); GLAPI void APIENTRY glProgramUniformui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLMAKEBUFFERRESIDENTNVPROC) (GLenum target, GLenum access); typedef void (APIENTRYP PFNGLMAKEBUFFERNONRESIDENTNVPROC) (GLenum target); typedef GLboolean (APIENTRYP PFNGLISBUFFERRESIDENTNVPROC) (GLenum target); typedef void (APIENTRYP PFNGLMAKENAMEDBUFFERRESIDENTNVPROC) (GLuint buffer, GLenum access); typedef void (APIENTRYP PFNGLMAKENAMEDBUFFERNONRESIDENTNVPROC) (GLuint buffer); typedef GLboolean (APIENTRYP PFNGLISNAMEDBUFFERRESIDENTNVPROC) (GLuint buffer); typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERUI64VNVPROC) (GLenum target, GLenum pname, GLuint64EXT *params); typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPARAMETERUI64VNVPROC) (GLuint buffer, GLenum pname, GLuint64EXT *params); typedef void (APIENTRYP PFNGLGETINTEGERUI64VNVPROC) (GLenum value, GLuint64EXT *result); typedef void (APIENTRYP PFNGLUNIFORMUI64NVPROC) (GLint location, GLuint64EXT value); typedef void (APIENTRYP PFNGLUNIFORMUI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); typedef void (APIENTRYP PFNGLGETUNIFORMUI64VNVPROC) (GLuint program, GLint location, GLuint64EXT *params); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMUI64NVPROC) (GLuint program, GLint location, GLuint64EXT value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMUI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); #endif #ifndef GL_NV_vertex_buffer_unified_memory #define GL_NV_vertex_buffer_unified_memory 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBufferAddressRangeNV (GLenum pname, GLuint index, GLuint64EXT address, GLsizeiptr length); GLAPI void APIENTRY glVertexFormatNV (GLint size, GLenum type, GLsizei stride); GLAPI void APIENTRY glNormalFormatNV (GLenum type, GLsizei stride); GLAPI void APIENTRY glColorFormatNV (GLint size, GLenum type, GLsizei stride); GLAPI void APIENTRY glIndexFormatNV (GLenum type, GLsizei stride); GLAPI void APIENTRY glTexCoordFormatNV (GLint size, GLenum type, GLsizei stride); GLAPI void APIENTRY glEdgeFlagFormatNV (GLsizei stride); GLAPI void APIENTRY glSecondaryColorFormatNV (GLint size, GLenum type, GLsizei stride); GLAPI void APIENTRY glFogCoordFormatNV (GLenum type, GLsizei stride); GLAPI void APIENTRY glVertexAttribFormatNV (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride); GLAPI void APIENTRY glVertexAttribIFormatNV (GLuint index, GLint size, GLenum type, GLsizei stride); GLAPI void APIENTRY glGetIntegerui64i_vNV (GLenum value, GLuint index, GLuint64EXT *result); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLBUFFERADDRESSRANGENVPROC) (GLenum pname, GLuint index, GLuint64EXT address, GLsizeiptr length); typedef void (APIENTRYP PFNGLVERTEXFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); typedef void (APIENTRYP PFNGLNORMALFORMATNVPROC) (GLenum type, GLsizei stride); typedef void (APIENTRYP PFNGLCOLORFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); typedef void (APIENTRYP PFNGLINDEXFORMATNVPROC) (GLenum type, GLsizei stride); typedef void (APIENTRYP PFNGLTEXCOORDFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); typedef void (APIENTRYP PFNGLEDGEFLAGFORMATNVPROC) (GLsizei stride); typedef void (APIENTRYP PFNGLSECONDARYCOLORFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); typedef void (APIENTRYP PFNGLFOGCOORDFORMATNVPROC) (GLenum type, GLsizei stride); typedef void (APIENTRYP PFNGLVERTEXATTRIBFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride); typedef void (APIENTRYP PFNGLVERTEXATTRIBIFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLsizei stride); typedef void (APIENTRYP PFNGLGETINTEGERUI64I_VNVPROC) (GLenum value, GLuint index, GLuint64EXT *result); #endif #ifndef GL_NV_texture_barrier #define GL_NV_texture_barrier 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glTextureBarrierNV (void); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLTEXTUREBARRIERNVPROC) (void); #endif #ifndef GL_AMD_shader_stencil_export #define GL_AMD_shader_stencil_export 1 #endif #ifndef GL_AMD_seamless_cubemap_per_texture #define GL_AMD_seamless_cubemap_per_texture 1 #endif #ifndef GL_AMD_conservative_depth #define GL_AMD_conservative_depth 1 #endif #ifndef GL_EXT_shader_image_load_store #define GL_EXT_shader_image_load_store 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBindImageTextureEXT (GLuint index, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLint format); GLAPI void APIENTRY glMemoryBarrierEXT (GLbitfield barriers); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLBINDIMAGETEXTUREEXTPROC) (GLuint index, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLint format); typedef void (APIENTRYP PFNGLMEMORYBARRIEREXTPROC) (GLbitfield barriers); #endif #ifndef GL_EXT_vertex_attrib_64bit #define GL_EXT_vertex_attrib_64bit 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glVertexAttribL1dEXT (GLuint index, GLdouble x); GLAPI void APIENTRY glVertexAttribL2dEXT (GLuint index, GLdouble x, GLdouble y); GLAPI void APIENTRY glVertexAttribL3dEXT (GLuint index, GLdouble x, GLdouble y, GLdouble z); GLAPI void APIENTRY glVertexAttribL4dEXT (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLAPI void APIENTRY glVertexAttribL1dvEXT (GLuint index, const GLdouble *v); GLAPI void APIENTRY glVertexAttribL2dvEXT (GLuint index, const GLdouble *v); GLAPI void APIENTRY glVertexAttribL3dvEXT (GLuint index, const GLdouble *v); GLAPI void APIENTRY glVertexAttribL4dvEXT (GLuint index, const GLdouble *v); GLAPI void APIENTRY glVertexAttribLPointerEXT (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); GLAPI void APIENTRY glGetVertexAttribLdvEXT (GLuint index, GLenum pname, GLdouble *params); GLAPI void APIENTRY glVertexArrayVertexAttribLOffsetEXT (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DEXTPROC) (GLuint index, GLdouble x); typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DEXTPROC) (GLuint index, GLdouble x, GLdouble y); typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DEXTPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DEXTPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DVEXTPROC) (GLuint index, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DVEXTPROC) (GLuint index, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DVEXTPROC) (GLuint index, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DVEXTPROC) (GLuint index, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBLPOINTEREXTPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLDVEXTPROC) (GLuint index, GLenum pname, GLdouble *params); typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBLOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); #endif #ifndef GL_NV_gpu_program5 #define GL_NV_gpu_program5 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glProgramSubroutineParametersuivNV (GLenum target, GLsizei count, const GLuint *params); GLAPI void APIENTRY glGetProgramSubroutineParameteruivNV (GLenum target, GLuint index, GLuint *param); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLPROGRAMSUBROUTINEPARAMETERSUIVNVPROC) (GLenum target, GLsizei count, const GLuint *params); typedef void (APIENTRYP PFNGLGETPROGRAMSUBROUTINEPARAMETERUIVNVPROC) (GLenum target, GLuint index, GLuint *param); #endif #ifndef GL_NV_gpu_shader5 #define GL_NV_gpu_shader5 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glUniform1i64NV (GLint location, GLint64EXT x); GLAPI void APIENTRY glUniform2i64NV (GLint location, GLint64EXT x, GLint64EXT y); GLAPI void APIENTRY glUniform3i64NV (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); GLAPI void APIENTRY glUniform4i64NV (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); GLAPI void APIENTRY glUniform1i64vNV (GLint location, GLsizei count, const GLint64EXT *value); GLAPI void APIENTRY glUniform2i64vNV (GLint location, GLsizei count, const GLint64EXT *value); GLAPI void APIENTRY glUniform3i64vNV (GLint location, GLsizei count, const GLint64EXT *value); GLAPI void APIENTRY glUniform4i64vNV (GLint location, GLsizei count, const GLint64EXT *value); GLAPI void APIENTRY glUniform1ui64NV (GLint location, GLuint64EXT x); GLAPI void APIENTRY glUniform2ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y); GLAPI void APIENTRY glUniform3ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); GLAPI void APIENTRY glUniform4ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); GLAPI void APIENTRY glUniform1ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); GLAPI void APIENTRY glUniform2ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); GLAPI void APIENTRY glUniform3ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); GLAPI void APIENTRY glUniform4ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); GLAPI void APIENTRY glGetUniformi64vNV (GLuint program, GLint location, GLint64EXT *params); GLAPI void APIENTRY glProgramUniform1i64NV (GLuint program, GLint location, GLint64EXT x); GLAPI void APIENTRY glProgramUniform2i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y); GLAPI void APIENTRY glProgramUniform3i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); GLAPI void APIENTRY glProgramUniform4i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); GLAPI void APIENTRY glProgramUniform1i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); GLAPI void APIENTRY glProgramUniform2i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); GLAPI void APIENTRY glProgramUniform3i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); GLAPI void APIENTRY glProgramUniform4i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); GLAPI void APIENTRY glProgramUniform1ui64NV (GLuint program, GLint location, GLuint64EXT x); GLAPI void APIENTRY glProgramUniform2ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y); GLAPI void APIENTRY glProgramUniform3ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); GLAPI void APIENTRY glProgramUniform4ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); GLAPI void APIENTRY glProgramUniform1ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); GLAPI void APIENTRY glProgramUniform2ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); GLAPI void APIENTRY glProgramUniform3ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); GLAPI void APIENTRY glProgramUniform4ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLUNIFORM1I64NVPROC) (GLint location, GLint64EXT x); typedef void (APIENTRYP PFNGLUNIFORM2I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y); typedef void (APIENTRYP PFNGLUNIFORM3I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); typedef void (APIENTRYP PFNGLUNIFORM4I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); typedef void (APIENTRYP PFNGLUNIFORM1I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); typedef void (APIENTRYP PFNGLUNIFORM2I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); typedef void (APIENTRYP PFNGLUNIFORM3I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); typedef void (APIENTRYP PFNGLUNIFORM4I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); typedef void (APIENTRYP PFNGLUNIFORM1UI64NVPROC) (GLint location, GLuint64EXT x); typedef void (APIENTRYP PFNGLUNIFORM2UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y); typedef void (APIENTRYP PFNGLUNIFORM3UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); typedef void (APIENTRYP PFNGLUNIFORM4UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); typedef void (APIENTRYP PFNGLUNIFORM1UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); typedef void (APIENTRYP PFNGLUNIFORM2UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); typedef void (APIENTRYP PFNGLUNIFORM3UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); typedef void (APIENTRYP PFNGLUNIFORM4UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); typedef void (APIENTRYP PFNGLGETUNIFORMI64VNVPROC) (GLuint program, GLint location, GLint64EXT *params); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1I64NVPROC) (GLuint program, GLint location, GLint64EXT x); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); #endif #ifndef GL_NV_shader_buffer_store #define GL_NV_shader_buffer_store 1 #endif #ifndef GL_NV_tessellation_program5 #define GL_NV_tessellation_program5 1 #endif #ifndef GL_NV_vertex_attrib_integer_64bit #define GL_NV_vertex_attrib_integer_64bit 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glVertexAttribL1i64NV (GLuint index, GLint64EXT x); GLAPI void APIENTRY glVertexAttribL2i64NV (GLuint index, GLint64EXT x, GLint64EXT y); GLAPI void APIENTRY glVertexAttribL3i64NV (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z); GLAPI void APIENTRY glVertexAttribL4i64NV (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); GLAPI void APIENTRY glVertexAttribL1i64vNV (GLuint index, const GLint64EXT *v); GLAPI void APIENTRY glVertexAttribL2i64vNV (GLuint index, const GLint64EXT *v); GLAPI void APIENTRY glVertexAttribL3i64vNV (GLuint index, const GLint64EXT *v); GLAPI void APIENTRY glVertexAttribL4i64vNV (GLuint index, const GLint64EXT *v); GLAPI void APIENTRY glVertexAttribL1ui64NV (GLuint index, GLuint64EXT x); GLAPI void APIENTRY glVertexAttribL2ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y); GLAPI void APIENTRY glVertexAttribL3ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); GLAPI void APIENTRY glVertexAttribL4ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); GLAPI void APIENTRY glVertexAttribL1ui64vNV (GLuint index, const GLuint64EXT *v); GLAPI void APIENTRY glVertexAttribL2ui64vNV (GLuint index, const GLuint64EXT *v); GLAPI void APIENTRY glVertexAttribL3ui64vNV (GLuint index, const GLuint64EXT *v); GLAPI void APIENTRY glVertexAttribL4ui64vNV (GLuint index, const GLuint64EXT *v); GLAPI void APIENTRY glGetVertexAttribLi64vNV (GLuint index, GLenum pname, GLint64EXT *params); GLAPI void APIENTRY glGetVertexAttribLui64vNV (GLuint index, GLenum pname, GLuint64EXT *params); GLAPI void APIENTRY glVertexAttribLFormatNV (GLuint index, GLint size, GLenum type, GLsizei stride); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLVERTEXATTRIBL1I64NVPROC) (GLuint index, GLint64EXT x); typedef void (APIENTRYP PFNGLVERTEXATTRIBL2I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y); typedef void (APIENTRYP PFNGLVERTEXATTRIBL3I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z); typedef void (APIENTRYP PFNGLVERTEXATTRIBL4I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); typedef void (APIENTRYP PFNGLVERTEXATTRIBL1I64VNVPROC) (GLuint index, const GLint64EXT *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBL2I64VNVPROC) (GLuint index, const GLint64EXT *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBL3I64VNVPROC) (GLuint index, const GLint64EXT *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBL4I64VNVPROC) (GLuint index, const GLint64EXT *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64NVPROC) (GLuint index, GLuint64EXT x); typedef void (APIENTRYP PFNGLVERTEXATTRIBL2UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y); typedef void (APIENTRYP PFNGLVERTEXATTRIBL3UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); typedef void (APIENTRYP PFNGLVERTEXATTRIBL4UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64VNVPROC) (GLuint index, const GLuint64EXT *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBL2UI64VNVPROC) (GLuint index, const GLuint64EXT *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBL3UI64VNVPROC) (GLuint index, const GLuint64EXT *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBL4UI64VNVPROC) (GLuint index, const GLuint64EXT *v); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLI64VNVPROC) (GLuint index, GLenum pname, GLint64EXT *params); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLUI64VNVPROC) (GLuint index, GLenum pname, GLuint64EXT *params); typedef void (APIENTRYP PFNGLVERTEXATTRIBLFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLsizei stride); #endif #ifndef GL_NV_multisample_coverage #define GL_NV_multisample_coverage 1 #endif #ifndef GL_AMD_name_gen_delete #define GL_AMD_name_gen_delete 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glGenNamesAMD (GLenum identifier, GLuint num, GLuint *names); GLAPI void APIENTRY glDeleteNamesAMD (GLenum identifier, GLuint num, const GLuint *names); GLAPI GLboolean APIENTRY glIsNameAMD (GLenum identifier, GLuint name); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLGENNAMESAMDPROC) (GLenum identifier, GLuint num, GLuint *names); typedef void (APIENTRYP PFNGLDELETENAMESAMDPROC) (GLenum identifier, GLuint num, const GLuint *names); typedef GLboolean (APIENTRYP PFNGLISNAMEAMDPROC) (GLenum identifier, GLuint name); #endif #ifndef GL_AMD_debug_output #define GL_AMD_debug_output 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDebugMessageEnableAMD (GLenum category, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); GLAPI void APIENTRY glDebugMessageInsertAMD (GLenum category, GLenum severity, GLuint id, GLsizei length, const GLchar *buf); GLAPI void APIENTRY glDebugMessageCallbackAMD (GLDEBUGPROCAMD callback, GLvoid *userParam); GLAPI GLuint APIENTRY glGetDebugMessageLogAMD (GLuint count, GLsizei bufsize, GLenum *categories, GLuint *severities, GLuint *ids, GLsizei *lengths, GLchar *message); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLDEBUGMESSAGEENABLEAMDPROC) (GLenum category, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTAMDPROC) (GLenum category, GLenum severity, GLuint id, GLsizei length, const GLchar *buf); typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKAMDPROC) (GLDEBUGPROCAMD callback, GLvoid *userParam); typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGAMDPROC) (GLuint count, GLsizei bufsize, GLenum *categories, GLuint *severities, GLuint *ids, GLsizei *lengths, GLchar *message); #endif #ifndef GL_NV_vdpau_interop #define GL_NV_vdpau_interop 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glVDPAUInitNV (const GLvoid *vdpDevice, const GLvoid *getProcAddress); GLAPI void APIENTRY glVDPAUFiniNV (void); GLAPI GLvdpauSurfaceNV APIENTRY glVDPAURegisterVideoSurfaceNV (const GLvoid *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames); GLAPI GLvdpauSurfaceNV APIENTRY glVDPAURegisterOutputSurfaceNV (GLvoid *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames); GLAPI void APIENTRY glVDPAUIsSurfaceNV (GLvdpauSurfaceNV surface); GLAPI void APIENTRY glVDPAUUnregisterSurfaceNV (GLvdpauSurfaceNV surface); GLAPI void APIENTRY glVDPAUGetSurfaceivNV (GLvdpauSurfaceNV surface, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); GLAPI void APIENTRY glVDPAUSurfaceAccessNV (GLvdpauSurfaceNV surface, GLenum access); GLAPI void APIENTRY glVDPAUMapSurfacesNV (GLsizei numSurfaces, const GLvdpauSurfaceNV *surfaces); GLAPI void APIENTRY glVDPAUUnmapSurfacesNV (GLsizei numSurface, const GLvdpauSurfaceNV *surfaces); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLVDPAUINITNVPROC) (const GLvoid *vdpDevice, const GLvoid *getProcAddress); typedef void (APIENTRYP PFNGLVDPAUFININVPROC) (void); typedef GLvdpauSurfaceNV (APIENTRYP PFNGLVDPAUREGISTERVIDEOSURFACENVPROC) (const GLvoid *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames); typedef GLvdpauSurfaceNV (APIENTRYP PFNGLVDPAUREGISTEROUTPUTSURFACENVPROC) (GLvoid *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames); typedef void (APIENTRYP PFNGLVDPAUISSURFACENVPROC) (GLvdpauSurfaceNV surface); typedef void (APIENTRYP PFNGLVDPAUUNREGISTERSURFACENVPROC) (GLvdpauSurfaceNV surface); typedef void (APIENTRYP PFNGLVDPAUGETSURFACEIVNVPROC) (GLvdpauSurfaceNV surface, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); typedef void (APIENTRYP PFNGLVDPAUSURFACEACCESSNVPROC) (GLvdpauSurfaceNV surface, GLenum access); typedef void (APIENTRYP PFNGLVDPAUMAPSURFACESNVPROC) (GLsizei numSurfaces, const GLvdpauSurfaceNV *surfaces); typedef void (APIENTRYP PFNGLVDPAUUNMAPSURFACESNVPROC) (GLsizei numSurface, const GLvdpauSurfaceNV *surfaces); #endif #ifndef GL_AMD_transform_feedback3_lines_triangles #define GL_AMD_transform_feedback3_lines_triangles 1 #endif #ifndef GL_AMD_depth_clamp_separate #define GL_AMD_depth_clamp_separate 1 #endif #ifndef GL_EXT_texture_sRGB_decode #define GL_EXT_texture_sRGB_decode 1 #endif #ifndef GL_NV_texture_multisample #define GL_NV_texture_multisample 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glTexImage2DMultisampleCoverageNV (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); GLAPI void APIENTRY glTexImage3DMultisampleCoverageNV (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); GLAPI void APIENTRY glTextureImage2DMultisampleNV (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); GLAPI void APIENTRY glTextureImage3DMultisampleNV (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); GLAPI void APIENTRY glTextureImage2DMultisampleCoverageNV (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); GLAPI void APIENTRY glTextureImage3DMultisampleCoverageNV (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLTEXIMAGE2DMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); typedef void (APIENTRYP PFNGLTEXIMAGE3DMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); typedef void (APIENTRYP PFNGLTEXTUREIMAGE2DMULTISAMPLENVPROC) (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); typedef void (APIENTRYP PFNGLTEXTUREIMAGE3DMULTISAMPLENVPROC) (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); typedef void (APIENTRYP PFNGLTEXTUREIMAGE2DMULTISAMPLECOVERAGENVPROC) (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); typedef void (APIENTRYP PFNGLTEXTUREIMAGE3DMULTISAMPLECOVERAGENVPROC) (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); #endif #ifndef GL_AMD_blend_minmax_factor #define GL_AMD_blend_minmax_factor 1 #endif #ifndef GL_AMD_sample_positions #define GL_AMD_sample_positions 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glSetMultisamplefvAMD (GLenum pname, GLuint index, const GLfloat *val); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLSETMULTISAMPLEFVAMDPROC) (GLenum pname, GLuint index, const GLfloat *val); #endif #ifndef GL_EXT_x11_sync_object #define GL_EXT_x11_sync_object 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI GLsync APIENTRY glImportSyncEXT (GLenum external_sync_type, GLintptr external_sync, GLbitfield flags); #endif /* GL_GLEXT_PROTOTYPES */ typedef GLsync (APIENTRYP PFNGLIMPORTSYNCEXTPROC) (GLenum external_sync_type, GLintptr external_sync, GLbitfield flags); #endif #ifndef GL_AMD_multi_draw_indirect #define GL_AMD_multi_draw_indirect 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glMultiDrawArraysIndirectAMD (GLenum mode, const GLvoid *indirect, GLsizei primcount, GLsizei stride); GLAPI void APIENTRY glMultiDrawElementsIndirectAMD (GLenum mode, GLenum type, const GLvoid *indirect, GLsizei primcount, GLsizei stride); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTAMDPROC) (GLenum mode, const GLvoid *indirect, GLsizei primcount, GLsizei stride); typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTAMDPROC) (GLenum mode, GLenum type, const GLvoid *indirect, GLsizei primcount, GLsizei stride); #endif #ifndef GL_EXT_framebuffer_multisample_blit_scaled #define GL_EXT_framebuffer_multisample_blit_scaled 1 #endif #ifndef GL_NV_path_rendering #define GL_NV_path_rendering 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI GLuint APIENTRY glGenPathsNV (GLsizei range); GLAPI void APIENTRY glDeletePathsNV (GLuint path, GLsizei range); GLAPI GLboolean APIENTRY glIsPathNV (GLuint path); GLAPI void APIENTRY glPathCommandsNV (GLuint path, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const GLvoid *coords); GLAPI void APIENTRY glPathCoordsNV (GLuint path, GLsizei numCoords, GLenum coordType, const GLvoid *coords); GLAPI void APIENTRY glPathSubCommandsNV (GLuint path, GLsizei commandStart, GLsizei commandsToDelete, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const GLvoid *coords); GLAPI void APIENTRY glPathSubCoordsNV (GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const GLvoid *coords); GLAPI void APIENTRY glPathStringNV (GLuint path, GLenum format, GLsizei length, const GLvoid *pathString); GLAPI void APIENTRY glPathGlyphsNV (GLuint firstPathName, GLenum fontTarget, const GLvoid *fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const GLvoid *charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); GLAPI void APIENTRY glPathGlyphRangeNV (GLuint firstPathName, GLenum fontTarget, const GLvoid *fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); GLAPI void APIENTRY glWeightPathsNV (GLuint resultPath, GLsizei numPaths, const GLuint *paths, const GLfloat *weights); GLAPI void APIENTRY glCopyPathNV (GLuint resultPath, GLuint srcPath); GLAPI void APIENTRY glInterpolatePathsNV (GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat weight); GLAPI void APIENTRY glTransformPathNV (GLuint resultPath, GLuint srcPath, GLenum transformType, const GLfloat *transformValues); GLAPI void APIENTRY glPathParameterivNV (GLuint path, GLenum pname, const GLint *value); GLAPI void APIENTRY glPathParameteriNV (GLuint path, GLenum pname, GLint value); GLAPI void APIENTRY glPathParameterfvNV (GLuint path, GLenum pname, const GLfloat *value); GLAPI void APIENTRY glPathParameterfNV (GLuint path, GLenum pname, GLfloat value); GLAPI void APIENTRY glPathDashArrayNV (GLuint path, GLsizei dashCount, const GLfloat *dashArray); GLAPI void APIENTRY glPathStencilFuncNV (GLenum func, GLint ref, GLuint mask); GLAPI void APIENTRY glPathStencilDepthOffsetNV (GLfloat factor, GLfloat units); GLAPI void APIENTRY glStencilFillPathNV (GLuint path, GLenum fillMode, GLuint mask); GLAPI void APIENTRY glStencilStrokePathNV (GLuint path, GLint reference, GLuint mask); GLAPI void APIENTRY glStencilFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const GLvoid *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat *transformValues); GLAPI void APIENTRY glStencilStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const GLvoid *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat *transformValues); GLAPI void APIENTRY glPathCoverDepthFuncNV (GLenum func); GLAPI void APIENTRY glPathColorGenNV (GLenum color, GLenum genMode, GLenum colorFormat, const GLfloat *coeffs); GLAPI void APIENTRY glPathTexGenNV (GLenum texCoordSet, GLenum genMode, GLint components, const GLfloat *coeffs); GLAPI void APIENTRY glPathFogGenNV (GLenum genMode); GLAPI void APIENTRY glCoverFillPathNV (GLuint path, GLenum coverMode); GLAPI void APIENTRY glCoverStrokePathNV (GLuint path, GLenum coverMode); GLAPI void APIENTRY glCoverFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const GLvoid *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); GLAPI void APIENTRY glCoverStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const GLvoid *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); GLAPI void APIENTRY glGetPathParameterivNV (GLuint path, GLenum pname, GLint *value); GLAPI void APIENTRY glGetPathParameterfvNV (GLuint path, GLenum pname, GLfloat *value); GLAPI void APIENTRY glGetPathCommandsNV (GLuint path, GLubyte *commands); GLAPI void APIENTRY glGetPathCoordsNV (GLuint path, GLfloat *coords); GLAPI void APIENTRY glGetPathDashArrayNV (GLuint path, GLfloat *dashArray); GLAPI void APIENTRY glGetPathMetricsNV (GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const GLvoid *paths, GLuint pathBase, GLsizei stride, GLfloat *metrics); GLAPI void APIENTRY glGetPathMetricRangeNV (GLbitfield metricQueryMask, GLuint firstPathName, GLsizei numPaths, GLsizei stride, GLfloat *metrics); GLAPI void APIENTRY glGetPathSpacingNV (GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const GLvoid *paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat *returnedSpacing); GLAPI void APIENTRY glGetPathColorGenivNV (GLenum color, GLenum pname, GLint *value); GLAPI void APIENTRY glGetPathColorGenfvNV (GLenum color, GLenum pname, GLfloat *value); GLAPI void APIENTRY glGetPathTexGenivNV (GLenum texCoordSet, GLenum pname, GLint *value); GLAPI void APIENTRY glGetPathTexGenfvNV (GLenum texCoordSet, GLenum pname, GLfloat *value); GLAPI GLboolean APIENTRY glIsPointInFillPathNV (GLuint path, GLuint mask, GLfloat x, GLfloat y); GLAPI GLboolean APIENTRY glIsPointInStrokePathNV (GLuint path, GLfloat x, GLfloat y); GLAPI GLfloat APIENTRY glGetPathLengthNV (GLuint path, GLsizei startSegment, GLsizei numSegments); GLAPI GLboolean APIENTRY glPointAlongPathNV (GLuint path, GLsizei startSegment, GLsizei numSegments, GLfloat distance, GLfloat *x, GLfloat *y, GLfloat *tangentX, GLfloat *tangentY); #endif /* GL_GLEXT_PROTOTYPES */ typedef GLuint (APIENTRYP PFNGLGENPATHSNVPROC) (GLsizei range); typedef void (APIENTRYP PFNGLDELETEPATHSNVPROC) (GLuint path, GLsizei range); typedef GLboolean (APIENTRYP PFNGLISPATHNVPROC) (GLuint path); typedef void (APIENTRYP PFNGLPATHCOMMANDSNVPROC) (GLuint path, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const GLvoid *coords); typedef void (APIENTRYP PFNGLPATHCOORDSNVPROC) (GLuint path, GLsizei numCoords, GLenum coordType, const GLvoid *coords); typedef void (APIENTRYP PFNGLPATHSUBCOMMANDSNVPROC) (GLuint path, GLsizei commandStart, GLsizei commandsToDelete, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const GLvoid *coords); typedef void (APIENTRYP PFNGLPATHSUBCOORDSNVPROC) (GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const GLvoid *coords); typedef void (APIENTRYP PFNGLPATHSTRINGNVPROC) (GLuint path, GLenum format, GLsizei length, const GLvoid *pathString); typedef void (APIENTRYP PFNGLPATHGLYPHSNVPROC) (GLuint firstPathName, GLenum fontTarget, const GLvoid *fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const GLvoid *charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); typedef void (APIENTRYP PFNGLPATHGLYPHRANGENVPROC) (GLuint firstPathName, GLenum fontTarget, const GLvoid *fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); typedef void (APIENTRYP PFNGLWEIGHTPATHSNVPROC) (GLuint resultPath, GLsizei numPaths, const GLuint *paths, const GLfloat *weights); typedef void (APIENTRYP PFNGLCOPYPATHNVPROC) (GLuint resultPath, GLuint srcPath); typedef void (APIENTRYP PFNGLINTERPOLATEPATHSNVPROC) (GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat weight); typedef void (APIENTRYP PFNGLTRANSFORMPATHNVPROC) (GLuint resultPath, GLuint srcPath, GLenum transformType, const GLfloat *transformValues); typedef void (APIENTRYP PFNGLPATHPARAMETERIVNVPROC) (GLuint path, GLenum pname, const GLint *value); typedef void (APIENTRYP PFNGLPATHPARAMETERINVPROC) (GLuint path, GLenum pname, GLint value); typedef void (APIENTRYP PFNGLPATHPARAMETERFVNVPROC) (GLuint path, GLenum pname, const GLfloat *value); typedef void (APIENTRYP PFNGLPATHPARAMETERFNVPROC) (GLuint path, GLenum pname, GLfloat value); typedef void (APIENTRYP PFNGLPATHDASHARRAYNVPROC) (GLuint path, GLsizei dashCount, const GLfloat *dashArray); typedef void (APIENTRYP PFNGLPATHSTENCILFUNCNVPROC) (GLenum func, GLint ref, GLuint mask); typedef void (APIENTRYP PFNGLPATHSTENCILDEPTHOFFSETNVPROC) (GLfloat factor, GLfloat units); typedef void (APIENTRYP PFNGLSTENCILFILLPATHNVPROC) (GLuint path, GLenum fillMode, GLuint mask); typedef void (APIENTRYP PFNGLSTENCILSTROKEPATHNVPROC) (GLuint path, GLint reference, GLuint mask); typedef void (APIENTRYP PFNGLSTENCILFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const GLvoid *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat *transformValues); typedef void (APIENTRYP PFNGLSTENCILSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const GLvoid *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat *transformValues); typedef void (APIENTRYP PFNGLPATHCOVERDEPTHFUNCNVPROC) (GLenum func); typedef void (APIENTRYP PFNGLPATHCOLORGENNVPROC) (GLenum color, GLenum genMode, GLenum colorFormat, const GLfloat *coeffs); typedef void (APIENTRYP PFNGLPATHTEXGENNVPROC) (GLenum texCoordSet, GLenum genMode, GLint components, const GLfloat *coeffs); typedef void (APIENTRYP PFNGLPATHFOGGENNVPROC) (GLenum genMode); typedef void (APIENTRYP PFNGLCOVERFILLPATHNVPROC) (GLuint path, GLenum coverMode); typedef void (APIENTRYP PFNGLCOVERSTROKEPATHNVPROC) (GLuint path, GLenum coverMode); typedef void (APIENTRYP PFNGLCOVERFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const GLvoid *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); typedef void (APIENTRYP PFNGLCOVERSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const GLvoid *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); typedef void (APIENTRYP PFNGLGETPATHPARAMETERIVNVPROC) (GLuint path, GLenum pname, GLint *value); typedef void (APIENTRYP PFNGLGETPATHPARAMETERFVNVPROC) (GLuint path, GLenum pname, GLfloat *value); typedef void (APIENTRYP PFNGLGETPATHCOMMANDSNVPROC) (GLuint path, GLubyte *commands); typedef void (APIENTRYP PFNGLGETPATHCOORDSNVPROC) (GLuint path, GLfloat *coords); typedef void (APIENTRYP PFNGLGETPATHDASHARRAYNVPROC) (GLuint path, GLfloat *dashArray); typedef void (APIENTRYP PFNGLGETPATHMETRICSNVPROC) (GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const GLvoid *paths, GLuint pathBase, GLsizei stride, GLfloat *metrics); typedef void (APIENTRYP PFNGLGETPATHMETRICRANGENVPROC) (GLbitfield metricQueryMask, GLuint firstPathName, GLsizei numPaths, GLsizei stride, GLfloat *metrics); typedef void (APIENTRYP PFNGLGETPATHSPACINGNVPROC) (GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const GLvoid *paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat *returnedSpacing); typedef void (APIENTRYP PFNGLGETPATHCOLORGENIVNVPROC) (GLenum color, GLenum pname, GLint *value); typedef void (APIENTRYP PFNGLGETPATHCOLORGENFVNVPROC) (GLenum color, GLenum pname, GLfloat *value); typedef void (APIENTRYP PFNGLGETPATHTEXGENIVNVPROC) (GLenum texCoordSet, GLenum pname, GLint *value); typedef void (APIENTRYP PFNGLGETPATHTEXGENFVNVPROC) (GLenum texCoordSet, GLenum pname, GLfloat *value); typedef GLboolean (APIENTRYP PFNGLISPOINTINFILLPATHNVPROC) (GLuint path, GLuint mask, GLfloat x, GLfloat y); typedef GLboolean (APIENTRYP PFNGLISPOINTINSTROKEPATHNVPROC) (GLuint path, GLfloat x, GLfloat y); typedef GLfloat (APIENTRYP PFNGLGETPATHLENGTHNVPROC) (GLuint path, GLsizei startSegment, GLsizei numSegments); typedef GLboolean (APIENTRYP PFNGLPOINTALONGPATHNVPROC) (GLuint path, GLsizei startSegment, GLsizei numSegments, GLfloat distance, GLfloat *x, GLfloat *y, GLfloat *tangentX, GLfloat *tangentY); #endif #ifndef GL_AMD_pinned_memory #define GL_AMD_pinned_memory 1 #endif #ifndef GL_AMD_stencil_operation_extended #define GL_AMD_stencil_operation_extended 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glStencilOpValueAMD (GLenum face, GLuint value); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLSTENCILOPVALUEAMDPROC) (GLenum face, GLuint value); #endif #ifndef GL_AMD_vertex_shader_viewport_index #define GL_AMD_vertex_shader_viewport_index 1 #endif #ifndef GL_AMD_vertex_shader_layer #define GL_AMD_vertex_shader_layer 1 #endif #ifndef GL_NV_bindless_texture #define GL_NV_bindless_texture 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI GLuint64 APIENTRY glGetTextureHandleNV (GLuint texture); GLAPI GLuint64 APIENTRY glGetTextureSamplerHandleNV (GLuint texture, GLuint sampler); GLAPI void APIENTRY glMakeTextureHandleResidentNV (GLuint64 handle); GLAPI void APIENTRY glMakeTextureHandleNonResidentNV (GLuint64 handle); GLAPI GLuint64 APIENTRY glGetImageHandleNV (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); GLAPI void APIENTRY glMakeImageHandleResidentNV (GLuint64 handle, GLenum access); GLAPI void APIENTRY glMakeImageHandleNonResidentNV (GLuint64 handle); GLAPI void APIENTRY glUniformHandleui64NV (GLint location, GLuint64 value); GLAPI void APIENTRY glUniformHandleui64vNV (GLint location, GLsizei count, const GLuint64 *value); GLAPI void APIENTRY glProgramUniformHandleui64NV (GLuint program, GLint location, GLuint64 value); GLAPI void APIENTRY glProgramUniformHandleui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64 *values); GLAPI GLboolean APIENTRY glIsTextureHandleResidentNV (GLuint64 handle); GLAPI GLboolean APIENTRY glIsImageHandleResidentNV (GLuint64 handle); #endif /* GL_GLEXT_PROTOTYPES */ typedef GLuint64 (APIENTRYP PFNGLGETTEXTUREHANDLENVPROC) (GLuint texture); typedef GLuint64 (APIENTRYP PFNGLGETTEXTURESAMPLERHANDLENVPROC) (GLuint texture, GLuint sampler); typedef void (APIENTRYP PFNGLMAKETEXTUREHANDLERESIDENTNVPROC) (GLuint64 handle); typedef void (APIENTRYP PFNGLMAKETEXTUREHANDLENONRESIDENTNVPROC) (GLuint64 handle); typedef GLuint64 (APIENTRYP PFNGLGETIMAGEHANDLENVPROC) (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); typedef void (APIENTRYP PFNGLMAKEIMAGEHANDLERESIDENTNVPROC) (GLuint64 handle, GLenum access); typedef void (APIENTRYP PFNGLMAKEIMAGEHANDLENONRESIDENTNVPROC) (GLuint64 handle); typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64NVPROC) (GLint location, GLuint64 value); typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64VNVPROC) (GLint location, GLsizei count, const GLuint64 *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64NVPROC) (GLuint program, GLint location, GLuint64 value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *values); typedef GLboolean (APIENTRYP PFNGLISTEXTUREHANDLERESIDENTNVPROC) (GLuint64 handle); typedef GLboolean (APIENTRYP PFNGLISIMAGEHANDLERESIDENTNVPROC) (GLuint64 handle); #endif #ifndef GL_NV_shader_atomic_float #define GL_NV_shader_atomic_float 1 #endif #ifndef GL_AMD_query_buffer_object #define GL_AMD_query_buffer_object 1 #endif #ifndef GL_NV_compute_program5 #define GL_NV_compute_program5 1 #endif #ifndef GL_NV_shader_storage_buffer_object #define GL_NV_shader_storage_buffer_object 1 #endif #ifndef GL_NV_shader_atomic_counters #define GL_NV_shader_atomic_counters 1 #endif #ifndef GL_NV_deep_texture3D #define GL_NV_deep_texture3D 1 #endif #ifndef GL_NVX_conditional_render #define GL_NVX_conditional_render 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBeginConditionalRenderNVX (GLuint id); GLAPI void APIENTRY glEndConditionalRenderNVX (void); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERNVXPROC) (GLuint id); typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERNVXPROC) (void); #endif #ifndef GL_AMD_sparse_texture #define GL_AMD_sparse_texture 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glTexStorageSparseAMD (GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags); GLAPI void APIENTRY glTextureStorageSparseAMD (GLuint texture, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLTEXSTORAGESPARSEAMDPROC) (GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags); typedef void (APIENTRYP PFNGLTEXTURESTORAGESPARSEAMDPROC) (GLuint texture, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags); #endif #ifndef GL_AMD_shader_trinary_minmax #define GL_AMD_shader_trinary_minmax 1 #endif #ifndef GL_INTEL_map_texture #define GL_INTEL_map_texture 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glSyncTextureINTEL (GLuint texture); GLAPI void APIENTRY glUnmapTexture2DINTEL (GLuint texture, GLint level); GLAPI GLvoid* APIENTRY glMapTexture2DINTEL (GLuint texture, GLint level, GLbitfield access, const GLint *stride, const GLenum *layout); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLSYNCTEXTUREINTELPROC) (GLuint texture); typedef void (APIENTRYP PFNGLUNMAPTEXTURE2DINTELPROC) (GLuint texture, GLint level); typedef GLvoid* (APIENTRYP PFNGLMAPTEXTURE2DINTELPROC) (GLuint texture, GLint level, GLbitfield access, const GLint *stride, const GLenum *layout); #endif #ifndef GL_NV_draw_texture #define GL_NV_draw_texture 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDrawTextureNV (GLuint texture, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLDRAWTEXTURENVPROC) (GLuint texture, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1); #endif #ifdef __cplusplus } #endif #endif ================================================ FILE: Include/gl/glxext.h ================================================ #ifndef __glxext_h_ #define __glxext_h_ 1 #ifdef __cplusplus extern "C" { #endif /* ** Copyright (c) 2013-2014 The Khronos Group Inc. ** ** Permission is hereby granted, free of charge, to any person obtaining a ** copy of this software and/or associated documentation files (the ** "Materials"), to deal in the Materials without restriction, including ** without limitation the rights to use, copy, modify, merge, publish, ** distribute, sublicense, and/or sell copies of the Materials, and to ** permit persons to whom the Materials are furnished to do so, subject to ** the following conditions: ** ** The above copyright notice and this permission notice shall be included ** in all copies or substantial portions of the Materials. ** ** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. ** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY ** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, ** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE ** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. */ /* ** This header is generated from the Khronos OpenGL / OpenGL ES XML ** API Registry. The current version of the Registry, generator scripts ** used to make the header, and the header can be found at ** http://www.opengl.org/registry/ ** ** Khronos $Revision: 28198 $ on $Date: 2014-09-18 07:42:14 -0700 (Thu, 18 Sep 2014) $ */ #define GLX_GLXEXT_VERSION 20140918 /* Generated C header for: * API: glx * Versions considered: .* * Versions emitted: 1\.[3-9] * Default extensions included: glx * Additional extensions included: _nomatch_^ * Extensions removed: _nomatch_^ */ #ifndef GLX_VERSION_1_3 #define GLX_VERSION_1_3 1 typedef XID GLXContextID; typedef struct __GLXFBConfigRec *GLXFBConfig; typedef XID GLXWindow; typedef XID GLXPbuffer; #define GLX_WINDOW_BIT 0x00000001 #define GLX_PIXMAP_BIT 0x00000002 #define GLX_PBUFFER_BIT 0x00000004 #define GLX_RGBA_BIT 0x00000001 #define GLX_COLOR_INDEX_BIT 0x00000002 #define GLX_PBUFFER_CLOBBER_MASK 0x08000000 #define GLX_FRONT_LEFT_BUFFER_BIT 0x00000001 #define GLX_FRONT_RIGHT_BUFFER_BIT 0x00000002 #define GLX_BACK_LEFT_BUFFER_BIT 0x00000004 #define GLX_BACK_RIGHT_BUFFER_BIT 0x00000008 #define GLX_AUX_BUFFERS_BIT 0x00000010 #define GLX_DEPTH_BUFFER_BIT 0x00000020 #define GLX_STENCIL_BUFFER_BIT 0x00000040 #define GLX_ACCUM_BUFFER_BIT 0x00000080 #define GLX_CONFIG_CAVEAT 0x20 #define GLX_X_VISUAL_TYPE 0x22 #define GLX_TRANSPARENT_TYPE 0x23 #define GLX_TRANSPARENT_INDEX_VALUE 0x24 #define GLX_TRANSPARENT_RED_VALUE 0x25 #define GLX_TRANSPARENT_GREEN_VALUE 0x26 #define GLX_TRANSPARENT_BLUE_VALUE 0x27 #define GLX_TRANSPARENT_ALPHA_VALUE 0x28 #define GLX_DONT_CARE 0xFFFFFFFF #define GLX_NONE 0x8000 #define GLX_SLOW_CONFIG 0x8001 #define GLX_TRUE_COLOR 0x8002 #define GLX_DIRECT_COLOR 0x8003 #define GLX_PSEUDO_COLOR 0x8004 #define GLX_STATIC_COLOR 0x8005 #define GLX_GRAY_SCALE 0x8006 #define GLX_STATIC_GRAY 0x8007 #define GLX_TRANSPARENT_RGB 0x8008 #define GLX_TRANSPARENT_INDEX 0x8009 #define GLX_VISUAL_ID 0x800B #define GLX_SCREEN 0x800C #define GLX_NON_CONFORMANT_CONFIG 0x800D #define GLX_DRAWABLE_TYPE 0x8010 #define GLX_RENDER_TYPE 0x8011 #define GLX_X_RENDERABLE 0x8012 #define GLX_FBCONFIG_ID 0x8013 #define GLX_RGBA_TYPE 0x8014 #define GLX_COLOR_INDEX_TYPE 0x8015 #define GLX_MAX_PBUFFER_WIDTH 0x8016 #define GLX_MAX_PBUFFER_HEIGHT 0x8017 #define GLX_MAX_PBUFFER_PIXELS 0x8018 #define GLX_PRESERVED_CONTENTS 0x801B #define GLX_LARGEST_PBUFFER 0x801C #define GLX_WIDTH 0x801D #define GLX_HEIGHT 0x801E #define GLX_EVENT_MASK 0x801F #define GLX_DAMAGED 0x8020 #define GLX_SAVED 0x8021 #define GLX_WINDOW 0x8022 #define GLX_PBUFFER 0x8023 #define GLX_PBUFFER_HEIGHT 0x8040 #define GLX_PBUFFER_WIDTH 0x8041 typedef GLXFBConfig *( *PFNGLXGETFBCONFIGSPROC) (Display *dpy, int screen, int *nelements); typedef GLXFBConfig *( *PFNGLXCHOOSEFBCONFIGPROC) (Display *dpy, int screen, const int *attrib_list, int *nelements); typedef int ( *PFNGLXGETFBCONFIGATTRIBPROC) (Display *dpy, GLXFBConfig config, int attribute, int *value); typedef XVisualInfo *( *PFNGLXGETVISUALFROMFBCONFIGPROC) (Display *dpy, GLXFBConfig config); typedef GLXWindow ( *PFNGLXCREATEWINDOWPROC) (Display *dpy, GLXFBConfig config, Window win, const int *attrib_list); typedef void ( *PFNGLXDESTROYWINDOWPROC) (Display *dpy, GLXWindow win); typedef GLXPixmap ( *PFNGLXCREATEPIXMAPPROC) (Display *dpy, GLXFBConfig config, Pixmap pixmap, const int *attrib_list); typedef void ( *PFNGLXDESTROYPIXMAPPROC) (Display *dpy, GLXPixmap pixmap); typedef GLXPbuffer ( *PFNGLXCREATEPBUFFERPROC) (Display *dpy, GLXFBConfig config, const int *attrib_list); typedef void ( *PFNGLXDESTROYPBUFFERPROC) (Display *dpy, GLXPbuffer pbuf); typedef void ( *PFNGLXQUERYDRAWABLEPROC) (Display *dpy, GLXDrawable draw, int attribute, unsigned int *value); typedef GLXContext ( *PFNGLXCREATENEWCONTEXTPROC) (Display *dpy, GLXFBConfig config, int render_type, GLXContext share_list, Bool direct); typedef Bool ( *PFNGLXMAKECONTEXTCURRENTPROC) (Display *dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx); typedef GLXDrawable ( *PFNGLXGETCURRENTREADDRAWABLEPROC) (void); typedef int ( *PFNGLXQUERYCONTEXTPROC) (Display *dpy, GLXContext ctx, int attribute, int *value); typedef void ( *PFNGLXSELECTEVENTPROC) (Display *dpy, GLXDrawable draw, unsigned long event_mask); typedef void ( *PFNGLXGETSELECTEDEVENTPROC) (Display *dpy, GLXDrawable draw, unsigned long *event_mask); #ifdef GLX_GLXEXT_PROTOTYPES GLXFBConfig *glXGetFBConfigs (Display *dpy, int screen, int *nelements); GLXFBConfig *glXChooseFBConfig (Display *dpy, int screen, const int *attrib_list, int *nelements); int glXGetFBConfigAttrib (Display *dpy, GLXFBConfig config, int attribute, int *value); XVisualInfo *glXGetVisualFromFBConfig (Display *dpy, GLXFBConfig config); GLXWindow glXCreateWindow (Display *dpy, GLXFBConfig config, Window win, const int *attrib_list); void glXDestroyWindow (Display *dpy, GLXWindow win); GLXPixmap glXCreatePixmap (Display *dpy, GLXFBConfig config, Pixmap pixmap, const int *attrib_list); void glXDestroyPixmap (Display *dpy, GLXPixmap pixmap); GLXPbuffer glXCreatePbuffer (Display *dpy, GLXFBConfig config, const int *attrib_list); void glXDestroyPbuffer (Display *dpy, GLXPbuffer pbuf); void glXQueryDrawable (Display *dpy, GLXDrawable draw, int attribute, unsigned int *value); GLXContext glXCreateNewContext (Display *dpy, GLXFBConfig config, int render_type, GLXContext share_list, Bool direct); Bool glXMakeContextCurrent (Display *dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx); GLXDrawable glXGetCurrentReadDrawable (void); int glXQueryContext (Display *dpy, GLXContext ctx, int attribute, int *value); void glXSelectEvent (Display *dpy, GLXDrawable draw, unsigned long event_mask); void glXGetSelectedEvent (Display *dpy, GLXDrawable draw, unsigned long *event_mask); #endif #endif /* GLX_VERSION_1_3 */ #ifndef GLX_VERSION_1_4 #define GLX_VERSION_1_4 1 typedef void ( *__GLXextFuncPtr)(void); #define GLX_SAMPLE_BUFFERS 100000 #define GLX_SAMPLES 100001 typedef __GLXextFuncPtr ( *PFNGLXGETPROCADDRESSPROC) (const GLubyte *procName); #ifdef GLX_GLXEXT_PROTOTYPES __GLXextFuncPtr glXGetProcAddress (const GLubyte *procName); #endif #endif /* GLX_VERSION_1_4 */ #ifndef GLX_ARB_context_flush_control #define GLX_ARB_context_flush_control 1 #define GLX_CONTEXT_RELEASE_BEHAVIOR_ARB 0x2097 #define GLX_CONTEXT_RELEASE_BEHAVIOR_NONE_ARB 0 #define GLX_CONTEXT_RELEASE_BEHAVIOR_FLUSH_ARB 0x2098 #endif /* GLX_ARB_context_flush_control */ #ifndef GLX_ARB_create_context #define GLX_ARB_create_context 1 #define GLX_CONTEXT_DEBUG_BIT_ARB 0x00000001 #define GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x00000002 #define GLX_CONTEXT_MAJOR_VERSION_ARB 0x2091 #define GLX_CONTEXT_MINOR_VERSION_ARB 0x2092 #define GLX_CONTEXT_FLAGS_ARB 0x2094 typedef GLXContext ( *PFNGLXCREATECONTEXTATTRIBSARBPROC) (Display *dpy, GLXFBConfig config, GLXContext share_context, Bool direct, const int *attrib_list); #ifdef GLX_GLXEXT_PROTOTYPES GLXContext glXCreateContextAttribsARB (Display *dpy, GLXFBConfig config, GLXContext share_context, Bool direct, const int *attrib_list); #endif #endif /* GLX_ARB_create_context */ #ifndef GLX_ARB_create_context_profile #define GLX_ARB_create_context_profile 1 #define GLX_CONTEXT_CORE_PROFILE_BIT_ARB 0x00000001 #define GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002 #define GLX_CONTEXT_PROFILE_MASK_ARB 0x9126 #endif /* GLX_ARB_create_context_profile */ #ifndef GLX_ARB_create_context_robustness #define GLX_ARB_create_context_robustness 1 #define GLX_CONTEXT_ROBUST_ACCESS_BIT_ARB 0x00000004 #define GLX_LOSE_CONTEXT_ON_RESET_ARB 0x8252 #define GLX_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB 0x8256 #define GLX_NO_RESET_NOTIFICATION_ARB 0x8261 #endif /* GLX_ARB_create_context_robustness */ #ifndef GLX_ARB_fbconfig_float #define GLX_ARB_fbconfig_float 1 #define GLX_RGBA_FLOAT_TYPE_ARB 0x20B9 #define GLX_RGBA_FLOAT_BIT_ARB 0x00000004 #endif /* GLX_ARB_fbconfig_float */ #ifndef GLX_ARB_framebuffer_sRGB #define GLX_ARB_framebuffer_sRGB 1 #define GLX_FRAMEBUFFER_SRGB_CAPABLE_ARB 0x20B2 #endif /* GLX_ARB_framebuffer_sRGB */ #ifndef GLX_ARB_get_proc_address #define GLX_ARB_get_proc_address 1 typedef __GLXextFuncPtr ( *PFNGLXGETPROCADDRESSARBPROC) (const GLubyte *procName); #ifdef GLX_GLXEXT_PROTOTYPES __GLXextFuncPtr glXGetProcAddressARB (const GLubyte *procName); #endif #endif /* GLX_ARB_get_proc_address */ #ifndef GLX_ARB_multisample #define GLX_ARB_multisample 1 #define GLX_SAMPLE_BUFFERS_ARB 100000 #define GLX_SAMPLES_ARB 100001 #endif /* GLX_ARB_multisample */ #ifndef GLX_ARB_robustness_application_isolation #define GLX_ARB_robustness_application_isolation 1 #define GLX_CONTEXT_RESET_ISOLATION_BIT_ARB 0x00000008 #endif /* GLX_ARB_robustness_application_isolation */ #ifndef GLX_ARB_robustness_share_group_isolation #define GLX_ARB_robustness_share_group_isolation 1 #endif /* GLX_ARB_robustness_share_group_isolation */ #ifndef GLX_ARB_vertex_buffer_object #define GLX_ARB_vertex_buffer_object 1 #define GLX_CONTEXT_ALLOW_BUFFER_BYTE_ORDER_MISMATCH_ARB 0x2095 #endif /* GLX_ARB_vertex_buffer_object */ #ifndef GLX_3DFX_multisample #define GLX_3DFX_multisample 1 #define GLX_SAMPLE_BUFFERS_3DFX 0x8050 #define GLX_SAMPLES_3DFX 0x8051 #endif /* GLX_3DFX_multisample */ #ifndef GLX_AMD_gpu_association #define GLX_AMD_gpu_association 1 #define GLX_GPU_VENDOR_AMD 0x1F00 #define GLX_GPU_RENDERER_STRING_AMD 0x1F01 #define GLX_GPU_OPENGL_VERSION_STRING_AMD 0x1F02 #define GLX_GPU_FASTEST_TARGET_GPUS_AMD 0x21A2 #define GLX_GPU_RAM_AMD 0x21A3 #define GLX_GPU_CLOCK_AMD 0x21A4 #define GLX_GPU_NUM_PIPES_AMD 0x21A5 #define GLX_GPU_NUM_SIMD_AMD 0x21A6 #define GLX_GPU_NUM_RB_AMD 0x21A7 #define GLX_GPU_NUM_SPI_AMD 0x21A8 typedef unsigned int ( *PFNGLXGETGPUIDSAMDPROC) (unsigned int maxCount, unsigned int *ids); typedef int ( *PFNGLXGETGPUINFOAMDPROC) (unsigned int id, int property, GLenum dataType, unsigned int size, void *data); typedef unsigned int ( *PFNGLXGETCONTEXTGPUIDAMDPROC) (GLXContext ctx); typedef GLXContext ( *PFNGLXCREATEASSOCIATEDCONTEXTAMDPROC) (unsigned int id, GLXContext share_list); typedef GLXContext ( *PFNGLXCREATEASSOCIATEDCONTEXTATTRIBSAMDPROC) (unsigned int id, GLXContext share_context, const int *attribList); typedef Bool ( *PFNGLXDELETEASSOCIATEDCONTEXTAMDPROC) (GLXContext ctx); typedef Bool ( *PFNGLXMAKEASSOCIATEDCONTEXTCURRENTAMDPROC) (GLXContext ctx); typedef GLXContext ( *PFNGLXGETCURRENTASSOCIATEDCONTEXTAMDPROC) (void); typedef void ( *PFNGLXBLITCONTEXTFRAMEBUFFERAMDPROC) (GLXContext dstCtx, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); #ifdef GLX_GLXEXT_PROTOTYPES unsigned int glXGetGPUIDsAMD (unsigned int maxCount, unsigned int *ids); int glXGetGPUInfoAMD (unsigned int id, int property, GLenum dataType, unsigned int size, void *data); unsigned int glXGetContextGPUIDAMD (GLXContext ctx); GLXContext glXCreateAssociatedContextAMD (unsigned int id, GLXContext share_list); GLXContext glXCreateAssociatedContextAttribsAMD (unsigned int id, GLXContext share_context, const int *attribList); Bool glXDeleteAssociatedContextAMD (GLXContext ctx); Bool glXMakeAssociatedContextCurrentAMD (GLXContext ctx); GLXContext glXGetCurrentAssociatedContextAMD (void); void glXBlitContextFramebufferAMD (GLXContext dstCtx, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); #endif #endif /* GLX_AMD_gpu_association */ #ifndef GLX_EXT_buffer_age #define GLX_EXT_buffer_age 1 #define GLX_BACK_BUFFER_AGE_EXT 0x20F4 #endif /* GLX_EXT_buffer_age */ #ifndef GLX_EXT_create_context_es2_profile #define GLX_EXT_create_context_es2_profile 1 #define GLX_CONTEXT_ES2_PROFILE_BIT_EXT 0x00000004 #endif /* GLX_EXT_create_context_es2_profile */ #ifndef GLX_EXT_create_context_es_profile #define GLX_EXT_create_context_es_profile 1 #define GLX_CONTEXT_ES_PROFILE_BIT_EXT 0x00000004 #endif /* GLX_EXT_create_context_es_profile */ #ifndef GLX_EXT_fbconfig_packed_float #define GLX_EXT_fbconfig_packed_float 1 #define GLX_RGBA_UNSIGNED_FLOAT_TYPE_EXT 0x20B1 #define GLX_RGBA_UNSIGNED_FLOAT_BIT_EXT 0x00000008 #endif /* GLX_EXT_fbconfig_packed_float */ #ifndef GLX_EXT_framebuffer_sRGB #define GLX_EXT_framebuffer_sRGB 1 #define GLX_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x20B2 #endif /* GLX_EXT_framebuffer_sRGB */ #ifndef GLX_EXT_import_context #define GLX_EXT_import_context 1 #define GLX_SHARE_CONTEXT_EXT 0x800A #define GLX_VISUAL_ID_EXT 0x800B #define GLX_SCREEN_EXT 0x800C typedef Display *( *PFNGLXGETCURRENTDISPLAYEXTPROC) (void); typedef int ( *PFNGLXQUERYCONTEXTINFOEXTPROC) (Display *dpy, GLXContext context, int attribute, int *value); typedef GLXContextID ( *PFNGLXGETCONTEXTIDEXTPROC) (const GLXContext context); typedef GLXContext ( *PFNGLXIMPORTCONTEXTEXTPROC) (Display *dpy, GLXContextID contextID); typedef void ( *PFNGLXFREECONTEXTEXTPROC) (Display *dpy, GLXContext context); #ifdef GLX_GLXEXT_PROTOTYPES Display *glXGetCurrentDisplayEXT (void); int glXQueryContextInfoEXT (Display *dpy, GLXContext context, int attribute, int *value); GLXContextID glXGetContextIDEXT (const GLXContext context); GLXContext glXImportContextEXT (Display *dpy, GLXContextID contextID); void glXFreeContextEXT (Display *dpy, GLXContext context); #endif #endif /* GLX_EXT_import_context */ #ifndef GLX_EXT_stereo_tree #define GLX_EXT_stereo_tree 1 typedef struct { int type; unsigned long serial; Bool send_event; Display *display; int extension; int evtype; GLXDrawable window; Bool stereo_tree; } GLXStereoNotifyEventEXT; #define GLX_STEREO_TREE_EXT 0x20F5 #define GLX_STEREO_NOTIFY_MASK_EXT 0x00000001 #define GLX_STEREO_NOTIFY_EXT 0x00000000 #endif /* GLX_EXT_stereo_tree */ #ifndef GLX_EXT_swap_control #define GLX_EXT_swap_control 1 #define GLX_SWAP_INTERVAL_EXT 0x20F1 #define GLX_MAX_SWAP_INTERVAL_EXT 0x20F2 typedef void ( *PFNGLXSWAPINTERVALEXTPROC) (Display *dpy, GLXDrawable drawable, int interval); #ifdef GLX_GLXEXT_PROTOTYPES void glXSwapIntervalEXT (Display *dpy, GLXDrawable drawable, int interval); #endif #endif /* GLX_EXT_swap_control */ #ifndef GLX_EXT_swap_control_tear #define GLX_EXT_swap_control_tear 1 #define GLX_LATE_SWAPS_TEAR_EXT 0x20F3 #endif /* GLX_EXT_swap_control_tear */ #ifndef GLX_EXT_texture_from_pixmap #define GLX_EXT_texture_from_pixmap 1 #define GLX_TEXTURE_1D_BIT_EXT 0x00000001 #define GLX_TEXTURE_2D_BIT_EXT 0x00000002 #define GLX_TEXTURE_RECTANGLE_BIT_EXT 0x00000004 #define GLX_BIND_TO_TEXTURE_RGB_EXT 0x20D0 #define GLX_BIND_TO_TEXTURE_RGBA_EXT 0x20D1 #define GLX_BIND_TO_MIPMAP_TEXTURE_EXT 0x20D2 #define GLX_BIND_TO_TEXTURE_TARGETS_EXT 0x20D3 #define GLX_Y_INVERTED_EXT 0x20D4 #define GLX_TEXTURE_FORMAT_EXT 0x20D5 #define GLX_TEXTURE_TARGET_EXT 0x20D6 #define GLX_MIPMAP_TEXTURE_EXT 0x20D7 #define GLX_TEXTURE_FORMAT_NONE_EXT 0x20D8 #define GLX_TEXTURE_FORMAT_RGB_EXT 0x20D9 #define GLX_TEXTURE_FORMAT_RGBA_EXT 0x20DA #define GLX_TEXTURE_1D_EXT 0x20DB #define GLX_TEXTURE_2D_EXT 0x20DC #define GLX_TEXTURE_RECTANGLE_EXT 0x20DD #define GLX_FRONT_LEFT_EXT 0x20DE #define GLX_FRONT_RIGHT_EXT 0x20DF #define GLX_BACK_LEFT_EXT 0x20E0 #define GLX_BACK_RIGHT_EXT 0x20E1 #define GLX_FRONT_EXT 0x20DE #define GLX_BACK_EXT 0x20E0 #define GLX_AUX0_EXT 0x20E2 #define GLX_AUX1_EXT 0x20E3 #define GLX_AUX2_EXT 0x20E4 #define GLX_AUX3_EXT 0x20E5 #define GLX_AUX4_EXT 0x20E6 #define GLX_AUX5_EXT 0x20E7 #define GLX_AUX6_EXT 0x20E8 #define GLX_AUX7_EXT 0x20E9 #define GLX_AUX8_EXT 0x20EA #define GLX_AUX9_EXT 0x20EB typedef void ( *PFNGLXBINDTEXIMAGEEXTPROC) (Display *dpy, GLXDrawable drawable, int buffer, const int *attrib_list); typedef void ( *PFNGLXRELEASETEXIMAGEEXTPROC) (Display *dpy, GLXDrawable drawable, int buffer); #ifdef GLX_GLXEXT_PROTOTYPES void glXBindTexImageEXT (Display *dpy, GLXDrawable drawable, int buffer, const int *attrib_list); void glXReleaseTexImageEXT (Display *dpy, GLXDrawable drawable, int buffer); #endif #endif /* GLX_EXT_texture_from_pixmap */ #ifndef GLX_EXT_visual_info #define GLX_EXT_visual_info 1 #define GLX_X_VISUAL_TYPE_EXT 0x22 #define GLX_TRANSPARENT_TYPE_EXT 0x23 #define GLX_TRANSPARENT_INDEX_VALUE_EXT 0x24 #define GLX_TRANSPARENT_RED_VALUE_EXT 0x25 #define GLX_TRANSPARENT_GREEN_VALUE_EXT 0x26 #define GLX_TRANSPARENT_BLUE_VALUE_EXT 0x27 #define GLX_TRANSPARENT_ALPHA_VALUE_EXT 0x28 #define GLX_NONE_EXT 0x8000 #define GLX_TRUE_COLOR_EXT 0x8002 #define GLX_DIRECT_COLOR_EXT 0x8003 #define GLX_PSEUDO_COLOR_EXT 0x8004 #define GLX_STATIC_COLOR_EXT 0x8005 #define GLX_GRAY_SCALE_EXT 0x8006 #define GLX_STATIC_GRAY_EXT 0x8007 #define GLX_TRANSPARENT_RGB_EXT 0x8008 #define GLX_TRANSPARENT_INDEX_EXT 0x8009 #endif /* GLX_EXT_visual_info */ #ifndef GLX_EXT_visual_rating #define GLX_EXT_visual_rating 1 #define GLX_VISUAL_CAVEAT_EXT 0x20 #define GLX_SLOW_VISUAL_EXT 0x8001 #define GLX_NON_CONFORMANT_VISUAL_EXT 0x800D #endif /* GLX_EXT_visual_rating */ #ifndef GLX_INTEL_swap_event #define GLX_INTEL_swap_event 1 #define GLX_BUFFER_SWAP_COMPLETE_INTEL_MASK 0x04000000 #define GLX_EXCHANGE_COMPLETE_INTEL 0x8180 #define GLX_COPY_COMPLETE_INTEL 0x8181 #define GLX_FLIP_COMPLETE_INTEL 0x8182 #endif /* GLX_INTEL_swap_event */ #ifndef GLX_MESA_agp_offset #define GLX_MESA_agp_offset 1 typedef unsigned int ( *PFNGLXGETAGPOFFSETMESAPROC) (const void *pointer); #ifdef GLX_GLXEXT_PROTOTYPES unsigned int glXGetAGPOffsetMESA (const void *pointer); #endif #endif /* GLX_MESA_agp_offset */ #ifndef GLX_MESA_copy_sub_buffer #define GLX_MESA_copy_sub_buffer 1 typedef void ( *PFNGLXCOPYSUBBUFFERMESAPROC) (Display *dpy, GLXDrawable drawable, int x, int y, int width, int height); #ifdef GLX_GLXEXT_PROTOTYPES void glXCopySubBufferMESA (Display *dpy, GLXDrawable drawable, int x, int y, int width, int height); #endif #endif /* GLX_MESA_copy_sub_buffer */ #ifndef GLX_MESA_pixmap_colormap #define GLX_MESA_pixmap_colormap 1 typedef GLXPixmap ( *PFNGLXCREATEGLXPIXMAPMESAPROC) (Display *dpy, XVisualInfo *visual, Pixmap pixmap, Colormap cmap); #ifdef GLX_GLXEXT_PROTOTYPES GLXPixmap glXCreateGLXPixmapMESA (Display *dpy, XVisualInfo *visual, Pixmap pixmap, Colormap cmap); #endif #endif /* GLX_MESA_pixmap_colormap */ #ifndef GLX_MESA_query_renderer #define GLX_MESA_query_renderer 1 #define GLX_RENDERER_VENDOR_ID_MESA 0x8183 #define GLX_RENDERER_DEVICE_ID_MESA 0x8184 #define GLX_RENDERER_VERSION_MESA 0x8185 #define GLX_RENDERER_ACCELERATED_MESA 0x8186 #define GLX_RENDERER_VIDEO_MEMORY_MESA 0x8187 #define GLX_RENDERER_UNIFIED_MEMORY_ARCHITECTURE_MESA 0x8188 #define GLX_RENDERER_PREFERRED_PROFILE_MESA 0x8189 #define GLX_RENDERER_OPENGL_CORE_PROFILE_VERSION_MESA 0x818A #define GLX_RENDERER_OPENGL_COMPATIBILITY_PROFILE_VERSION_MESA 0x818B #define GLX_RENDERER_OPENGL_ES_PROFILE_VERSION_MESA 0x818C #define GLX_RENDERER_OPENGL_ES2_PROFILE_VERSION_MESA 0x818D #define GLX_RENDERER_ID_MESA 0x818E typedef Bool ( *PFNGLXQUERYCURRENTRENDERERINTEGERMESAPROC) (int attribute, unsigned int *value); typedef const char *( *PFNGLXQUERYCURRENTRENDERERSTRINGMESAPROC) (int attribute); typedef Bool ( *PFNGLXQUERYRENDERERINTEGERMESAPROC) (Display *dpy, int screen, int renderer, int attribute, unsigned int *value); typedef const char *( *PFNGLXQUERYRENDERERSTRINGMESAPROC) (Display *dpy, int screen, int renderer, int attribute); #ifdef GLX_GLXEXT_PROTOTYPES Bool glXQueryCurrentRendererIntegerMESA (int attribute, unsigned int *value); const char *glXQueryCurrentRendererStringMESA (int attribute); Bool glXQueryRendererIntegerMESA (Display *dpy, int screen, int renderer, int attribute, unsigned int *value); const char *glXQueryRendererStringMESA (Display *dpy, int screen, int renderer, int attribute); #endif #endif /* GLX_MESA_query_renderer */ #ifndef GLX_MESA_release_buffers #define GLX_MESA_release_buffers 1 typedef Bool ( *PFNGLXRELEASEBUFFERSMESAPROC) (Display *dpy, GLXDrawable drawable); #ifdef GLX_GLXEXT_PROTOTYPES Bool glXReleaseBuffersMESA (Display *dpy, GLXDrawable drawable); #endif #endif /* GLX_MESA_release_buffers */ #ifndef GLX_MESA_set_3dfx_mode #define GLX_MESA_set_3dfx_mode 1 #define GLX_3DFX_WINDOW_MODE_MESA 0x1 #define GLX_3DFX_FULLSCREEN_MODE_MESA 0x2 typedef Bool ( *PFNGLXSET3DFXMODEMESAPROC) (int mode); #ifdef GLX_GLXEXT_PROTOTYPES Bool glXSet3DfxModeMESA (int mode); #endif #endif /* GLX_MESA_set_3dfx_mode */ #ifndef GLX_NV_copy_buffer #define GLX_NV_copy_buffer 1 typedef void ( *PFNGLXCOPYBUFFERSUBDATANVPROC) (Display *dpy, GLXContext readCtx, GLXContext writeCtx, GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); typedef void ( *PFNGLXNAMEDCOPYBUFFERSUBDATANVPROC) (Display *dpy, GLXContext readCtx, GLXContext writeCtx, GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); #ifdef GLX_GLXEXT_PROTOTYPES void glXCopyBufferSubDataNV (Display *dpy, GLXContext readCtx, GLXContext writeCtx, GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); void glXNamedCopyBufferSubDataNV (Display *dpy, GLXContext readCtx, GLXContext writeCtx, GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); #endif #endif /* GLX_NV_copy_buffer */ #ifndef GLX_NV_copy_image #define GLX_NV_copy_image 1 typedef void ( *PFNGLXCOPYIMAGESUBDATANVPROC) (Display *dpy, GLXContext srcCtx, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLXContext dstCtx, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); #ifdef GLX_GLXEXT_PROTOTYPES void glXCopyImageSubDataNV (Display *dpy, GLXContext srcCtx, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLXContext dstCtx, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); #endif #endif /* GLX_NV_copy_image */ #ifndef GLX_NV_delay_before_swap #define GLX_NV_delay_before_swap 1 typedef Bool ( *PFNGLXDELAYBEFORESWAPNVPROC) (Display *dpy, GLXDrawable drawable, GLfloat seconds); #ifdef GLX_GLXEXT_PROTOTYPES Bool glXDelayBeforeSwapNV (Display *dpy, GLXDrawable drawable, GLfloat seconds); #endif #endif /* GLX_NV_delay_before_swap */ #ifndef GLX_NV_float_buffer #define GLX_NV_float_buffer 1 #define GLX_FLOAT_COMPONENTS_NV 0x20B0 #endif /* GLX_NV_float_buffer */ #ifndef GLX_NV_multisample_coverage #define GLX_NV_multisample_coverage 1 #define GLX_COVERAGE_SAMPLES_NV 100001 #define GLX_COLOR_SAMPLES_NV 0x20B3 #endif /* GLX_NV_multisample_coverage */ #ifndef GLX_NV_present_video #define GLX_NV_present_video 1 #define GLX_NUM_VIDEO_SLOTS_NV 0x20F0 typedef unsigned int *( *PFNGLXENUMERATEVIDEODEVICESNVPROC) (Display *dpy, int screen, int *nelements); typedef int ( *PFNGLXBINDVIDEODEVICENVPROC) (Display *dpy, unsigned int video_slot, unsigned int video_device, const int *attrib_list); #ifdef GLX_GLXEXT_PROTOTYPES unsigned int *glXEnumerateVideoDevicesNV (Display *dpy, int screen, int *nelements); int glXBindVideoDeviceNV (Display *dpy, unsigned int video_slot, unsigned int video_device, const int *attrib_list); #endif #endif /* GLX_NV_present_video */ #ifndef GLX_NV_swap_group #define GLX_NV_swap_group 1 typedef Bool ( *PFNGLXJOINSWAPGROUPNVPROC) (Display *dpy, GLXDrawable drawable, GLuint group); typedef Bool ( *PFNGLXBINDSWAPBARRIERNVPROC) (Display *dpy, GLuint group, GLuint barrier); typedef Bool ( *PFNGLXQUERYSWAPGROUPNVPROC) (Display *dpy, GLXDrawable drawable, GLuint *group, GLuint *barrier); typedef Bool ( *PFNGLXQUERYMAXSWAPGROUPSNVPROC) (Display *dpy, int screen, GLuint *maxGroups, GLuint *maxBarriers); typedef Bool ( *PFNGLXQUERYFRAMECOUNTNVPROC) (Display *dpy, int screen, GLuint *count); typedef Bool ( *PFNGLXRESETFRAMECOUNTNVPROC) (Display *dpy, int screen); #ifdef GLX_GLXEXT_PROTOTYPES Bool glXJoinSwapGroupNV (Display *dpy, GLXDrawable drawable, GLuint group); Bool glXBindSwapBarrierNV (Display *dpy, GLuint group, GLuint barrier); Bool glXQuerySwapGroupNV (Display *dpy, GLXDrawable drawable, GLuint *group, GLuint *barrier); Bool glXQueryMaxSwapGroupsNV (Display *dpy, int screen, GLuint *maxGroups, GLuint *maxBarriers); Bool glXQueryFrameCountNV (Display *dpy, int screen, GLuint *count); Bool glXResetFrameCountNV (Display *dpy, int screen); #endif #endif /* GLX_NV_swap_group */ #ifndef GLX_NV_video_capture #define GLX_NV_video_capture 1 typedef XID GLXVideoCaptureDeviceNV; #define GLX_DEVICE_ID_NV 0x20CD #define GLX_UNIQUE_ID_NV 0x20CE #define GLX_NUM_VIDEO_CAPTURE_SLOTS_NV 0x20CF typedef int ( *PFNGLXBINDVIDEOCAPTUREDEVICENVPROC) (Display *dpy, unsigned int video_capture_slot, GLXVideoCaptureDeviceNV device); typedef GLXVideoCaptureDeviceNV *( *PFNGLXENUMERATEVIDEOCAPTUREDEVICESNVPROC) (Display *dpy, int screen, int *nelements); typedef void ( *PFNGLXLOCKVIDEOCAPTUREDEVICENVPROC) (Display *dpy, GLXVideoCaptureDeviceNV device); typedef int ( *PFNGLXQUERYVIDEOCAPTUREDEVICENVPROC) (Display *dpy, GLXVideoCaptureDeviceNV device, int attribute, int *value); typedef void ( *PFNGLXRELEASEVIDEOCAPTUREDEVICENVPROC) (Display *dpy, GLXVideoCaptureDeviceNV device); #ifdef GLX_GLXEXT_PROTOTYPES int glXBindVideoCaptureDeviceNV (Display *dpy, unsigned int video_capture_slot, GLXVideoCaptureDeviceNV device); GLXVideoCaptureDeviceNV *glXEnumerateVideoCaptureDevicesNV (Display *dpy, int screen, int *nelements); void glXLockVideoCaptureDeviceNV (Display *dpy, GLXVideoCaptureDeviceNV device); int glXQueryVideoCaptureDeviceNV (Display *dpy, GLXVideoCaptureDeviceNV device, int attribute, int *value); void glXReleaseVideoCaptureDeviceNV (Display *dpy, GLXVideoCaptureDeviceNV device); #endif #endif /* GLX_NV_video_capture */ #ifndef GLX_NV_video_out #define GLX_NV_video_out 1 typedef unsigned int GLXVideoDeviceNV; #define GLX_VIDEO_OUT_COLOR_NV 0x20C3 #define GLX_VIDEO_OUT_ALPHA_NV 0x20C4 #define GLX_VIDEO_OUT_DEPTH_NV 0x20C5 #define GLX_VIDEO_OUT_COLOR_AND_ALPHA_NV 0x20C6 #define GLX_VIDEO_OUT_COLOR_AND_DEPTH_NV 0x20C7 #define GLX_VIDEO_OUT_FRAME_NV 0x20C8 #define GLX_VIDEO_OUT_FIELD_1_NV 0x20C9 #define GLX_VIDEO_OUT_FIELD_2_NV 0x20CA #define GLX_VIDEO_OUT_STACKED_FIELDS_1_2_NV 0x20CB #define GLX_VIDEO_OUT_STACKED_FIELDS_2_1_NV 0x20CC typedef int ( *PFNGLXGETVIDEODEVICENVPROC) (Display *dpy, int screen, int numVideoDevices, GLXVideoDeviceNV *pVideoDevice); typedef int ( *PFNGLXRELEASEVIDEODEVICENVPROC) (Display *dpy, int screen, GLXVideoDeviceNV VideoDevice); typedef int ( *PFNGLXBINDVIDEOIMAGENVPROC) (Display *dpy, GLXVideoDeviceNV VideoDevice, GLXPbuffer pbuf, int iVideoBuffer); typedef int ( *PFNGLXRELEASEVIDEOIMAGENVPROC) (Display *dpy, GLXPbuffer pbuf); typedef int ( *PFNGLXSENDPBUFFERTOVIDEONVPROC) (Display *dpy, GLXPbuffer pbuf, int iBufferType, unsigned long *pulCounterPbuffer, GLboolean bBlock); typedef int ( *PFNGLXGETVIDEOINFONVPROC) (Display *dpy, int screen, GLXVideoDeviceNV VideoDevice, unsigned long *pulCounterOutputPbuffer, unsigned long *pulCounterOutputVideo); #ifdef GLX_GLXEXT_PROTOTYPES int glXGetVideoDeviceNV (Display *dpy, int screen, int numVideoDevices, GLXVideoDeviceNV *pVideoDevice); int glXReleaseVideoDeviceNV (Display *dpy, int screen, GLXVideoDeviceNV VideoDevice); int glXBindVideoImageNV (Display *dpy, GLXVideoDeviceNV VideoDevice, GLXPbuffer pbuf, int iVideoBuffer); int glXReleaseVideoImageNV (Display *dpy, GLXPbuffer pbuf); int glXSendPbufferToVideoNV (Display *dpy, GLXPbuffer pbuf, int iBufferType, unsigned long *pulCounterPbuffer, GLboolean bBlock); int glXGetVideoInfoNV (Display *dpy, int screen, GLXVideoDeviceNV VideoDevice, unsigned long *pulCounterOutputPbuffer, unsigned long *pulCounterOutputVideo); #endif #endif /* GLX_NV_video_out */ #ifndef GLX_OML_swap_method #define GLX_OML_swap_method 1 #define GLX_SWAP_METHOD_OML 0x8060 #define GLX_SWAP_EXCHANGE_OML 0x8061 #define GLX_SWAP_COPY_OML 0x8062 #define GLX_SWAP_UNDEFINED_OML 0x8063 #endif /* GLX_OML_swap_method */ #ifndef GLX_OML_sync_control #define GLX_OML_sync_control 1 #ifndef GLEXT_64_TYPES_DEFINED /* This code block is duplicated in glext.h, so must be protected */ #define GLEXT_64_TYPES_DEFINED /* Define int32_t, int64_t, and uint64_t types for UST/MSC */ /* (as used in the GLX_OML_sync_control extension). */ #if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L #include #elif defined(__sun__) || defined(__digital__) #include #if defined(__STDC__) #if defined(__arch64__) || defined(_LP64) typedef long int int64_t; typedef unsigned long int uint64_t; #else typedef long long int int64_t; typedef unsigned long long int uint64_t; #endif /* __arch64__ */ #endif /* __STDC__ */ #elif defined( __VMS ) || defined(__sgi) #include #elif defined(__SCO__) || defined(__USLC__) #include #elif defined(__UNIXOS2__) || defined(__SOL64__) typedef long int int32_t; typedef long long int int64_t; typedef unsigned long long int uint64_t; #elif defined(_WIN32) && defined(__GNUC__) #include #elif defined(_WIN32) typedef __int32 int32_t; typedef __int64 int64_t; typedef unsigned __int64 uint64_t; #else /* Fallback if nothing above works */ #include #endif #endif typedef Bool ( *PFNGLXGETSYNCVALUESOMLPROC) (Display *dpy, GLXDrawable drawable, int64_t *ust, int64_t *msc, int64_t *sbc); typedef Bool ( *PFNGLXGETMSCRATEOMLPROC) (Display *dpy, GLXDrawable drawable, int32_t *numerator, int32_t *denominator); typedef int64_t ( *PFNGLXSWAPBUFFERSMSCOMLPROC) (Display *dpy, GLXDrawable drawable, int64_t target_msc, int64_t divisor, int64_t remainder); typedef Bool ( *PFNGLXWAITFORMSCOMLPROC) (Display *dpy, GLXDrawable drawable, int64_t target_msc, int64_t divisor, int64_t remainder, int64_t *ust, int64_t *msc, int64_t *sbc); typedef Bool ( *PFNGLXWAITFORSBCOMLPROC) (Display *dpy, GLXDrawable drawable, int64_t target_sbc, int64_t *ust, int64_t *msc, int64_t *sbc); #ifdef GLX_GLXEXT_PROTOTYPES Bool glXGetSyncValuesOML (Display *dpy, GLXDrawable drawable, int64_t *ust, int64_t *msc, int64_t *sbc); Bool glXGetMscRateOML (Display *dpy, GLXDrawable drawable, int32_t *numerator, int32_t *denominator); int64_t glXSwapBuffersMscOML (Display *dpy, GLXDrawable drawable, int64_t target_msc, int64_t divisor, int64_t remainder); Bool glXWaitForMscOML (Display *dpy, GLXDrawable drawable, int64_t target_msc, int64_t divisor, int64_t remainder, int64_t *ust, int64_t *msc, int64_t *sbc); Bool glXWaitForSbcOML (Display *dpy, GLXDrawable drawable, int64_t target_sbc, int64_t *ust, int64_t *msc, int64_t *sbc); #endif #endif /* GLX_OML_sync_control */ #ifndef GLX_SGIS_blended_overlay #define GLX_SGIS_blended_overlay 1 #define GLX_BLENDED_RGBA_SGIS 0x8025 #endif /* GLX_SGIS_blended_overlay */ #ifndef GLX_SGIS_multisample #define GLX_SGIS_multisample 1 #define GLX_SAMPLE_BUFFERS_SGIS 100000 #define GLX_SAMPLES_SGIS 100001 #endif /* GLX_SGIS_multisample */ #ifndef GLX_SGIS_shared_multisample #define GLX_SGIS_shared_multisample 1 #define GLX_MULTISAMPLE_SUB_RECT_WIDTH_SGIS 0x8026 #define GLX_MULTISAMPLE_SUB_RECT_HEIGHT_SGIS 0x8027 #endif /* GLX_SGIS_shared_multisample */ #ifndef GLX_SGIX_dmbuffer #define GLX_SGIX_dmbuffer 1 typedef XID GLXPbufferSGIX; #ifdef _DM_BUFFER_H_ #define GLX_DIGITAL_MEDIA_PBUFFER_SGIX 0x8024 typedef Bool ( *PFNGLXASSOCIATEDMPBUFFERSGIXPROC) (Display *dpy, GLXPbufferSGIX pbuffer, DMparams *params, DMbuffer dmbuffer); #ifdef GLX_GLXEXT_PROTOTYPES Bool glXAssociateDMPbufferSGIX (Display *dpy, GLXPbufferSGIX pbuffer, DMparams *params, DMbuffer dmbuffer); #endif #endif /* _DM_BUFFER_H_ */ #endif /* GLX_SGIX_dmbuffer */ #ifndef GLX_SGIX_fbconfig #define GLX_SGIX_fbconfig 1 typedef struct __GLXFBConfigRec *GLXFBConfigSGIX; #define GLX_WINDOW_BIT_SGIX 0x00000001 #define GLX_PIXMAP_BIT_SGIX 0x00000002 #define GLX_RGBA_BIT_SGIX 0x00000001 #define GLX_COLOR_INDEX_BIT_SGIX 0x00000002 #define GLX_DRAWABLE_TYPE_SGIX 0x8010 #define GLX_RENDER_TYPE_SGIX 0x8011 #define GLX_X_RENDERABLE_SGIX 0x8012 #define GLX_FBCONFIG_ID_SGIX 0x8013 #define GLX_RGBA_TYPE_SGIX 0x8014 #define GLX_COLOR_INDEX_TYPE_SGIX 0x8015 typedef int ( *PFNGLXGETFBCONFIGATTRIBSGIXPROC) (Display *dpy, GLXFBConfigSGIX config, int attribute, int *value); typedef GLXFBConfigSGIX *( *PFNGLXCHOOSEFBCONFIGSGIXPROC) (Display *dpy, int screen, int *attrib_list, int *nelements); typedef GLXPixmap ( *PFNGLXCREATEGLXPIXMAPWITHCONFIGSGIXPROC) (Display *dpy, GLXFBConfigSGIX config, Pixmap pixmap); typedef GLXContext ( *PFNGLXCREATECONTEXTWITHCONFIGSGIXPROC) (Display *dpy, GLXFBConfigSGIX config, int render_type, GLXContext share_list, Bool direct); typedef XVisualInfo *( *PFNGLXGETVISUALFROMFBCONFIGSGIXPROC) (Display *dpy, GLXFBConfigSGIX config); typedef GLXFBConfigSGIX ( *PFNGLXGETFBCONFIGFROMVISUALSGIXPROC) (Display *dpy, XVisualInfo *vis); #ifdef GLX_GLXEXT_PROTOTYPES int glXGetFBConfigAttribSGIX (Display *dpy, GLXFBConfigSGIX config, int attribute, int *value); GLXFBConfigSGIX *glXChooseFBConfigSGIX (Display *dpy, int screen, int *attrib_list, int *nelements); GLXPixmap glXCreateGLXPixmapWithConfigSGIX (Display *dpy, GLXFBConfigSGIX config, Pixmap pixmap); GLXContext glXCreateContextWithConfigSGIX (Display *dpy, GLXFBConfigSGIX config, int render_type, GLXContext share_list, Bool direct); XVisualInfo *glXGetVisualFromFBConfigSGIX (Display *dpy, GLXFBConfigSGIX config); GLXFBConfigSGIX glXGetFBConfigFromVisualSGIX (Display *dpy, XVisualInfo *vis); #endif #endif /* GLX_SGIX_fbconfig */ #ifndef GLX_SGIX_hyperpipe #define GLX_SGIX_hyperpipe 1 typedef struct { char pipeName[80]; /* Should be [GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX] */ int networkId; } GLXHyperpipeNetworkSGIX; typedef struct { char pipeName[80]; /* Should be [GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX] */ int channel; unsigned int participationType; int timeSlice; } GLXHyperpipeConfigSGIX; typedef struct { char pipeName[80]; /* Should be [GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX] */ int srcXOrigin, srcYOrigin, srcWidth, srcHeight; int destXOrigin, destYOrigin, destWidth, destHeight; } GLXPipeRect; typedef struct { char pipeName[80]; /* Should be [GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX] */ int XOrigin, YOrigin, maxHeight, maxWidth; } GLXPipeRectLimits; #define GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX 80 #define GLX_BAD_HYPERPIPE_CONFIG_SGIX 91 #define GLX_BAD_HYPERPIPE_SGIX 92 #define GLX_HYPERPIPE_DISPLAY_PIPE_SGIX 0x00000001 #define GLX_HYPERPIPE_RENDER_PIPE_SGIX 0x00000002 #define GLX_PIPE_RECT_SGIX 0x00000001 #define GLX_PIPE_RECT_LIMITS_SGIX 0x00000002 #define GLX_HYPERPIPE_STEREO_SGIX 0x00000003 #define GLX_HYPERPIPE_PIXEL_AVERAGE_SGIX 0x00000004 #define GLX_HYPERPIPE_ID_SGIX 0x8030 typedef GLXHyperpipeNetworkSGIX *( *PFNGLXQUERYHYPERPIPENETWORKSGIXPROC) (Display *dpy, int *npipes); typedef int ( *PFNGLXHYPERPIPECONFIGSGIXPROC) (Display *dpy, int networkId, int npipes, GLXHyperpipeConfigSGIX *cfg, int *hpId); typedef GLXHyperpipeConfigSGIX *( *PFNGLXQUERYHYPERPIPECONFIGSGIXPROC) (Display *dpy, int hpId, int *npipes); typedef int ( *PFNGLXDESTROYHYPERPIPECONFIGSGIXPROC) (Display *dpy, int hpId); typedef int ( *PFNGLXBINDHYPERPIPESGIXPROC) (Display *dpy, int hpId); typedef int ( *PFNGLXQUERYHYPERPIPEBESTATTRIBSGIXPROC) (Display *dpy, int timeSlice, int attrib, int size, void *attribList, void *returnAttribList); typedef int ( *PFNGLXHYPERPIPEATTRIBSGIXPROC) (Display *dpy, int timeSlice, int attrib, int size, void *attribList); typedef int ( *PFNGLXQUERYHYPERPIPEATTRIBSGIXPROC) (Display *dpy, int timeSlice, int attrib, int size, void *returnAttribList); #ifdef GLX_GLXEXT_PROTOTYPES GLXHyperpipeNetworkSGIX *glXQueryHyperpipeNetworkSGIX (Display *dpy, int *npipes); int glXHyperpipeConfigSGIX (Display *dpy, int networkId, int npipes, GLXHyperpipeConfigSGIX *cfg, int *hpId); GLXHyperpipeConfigSGIX *glXQueryHyperpipeConfigSGIX (Display *dpy, int hpId, int *npipes); int glXDestroyHyperpipeConfigSGIX (Display *dpy, int hpId); int glXBindHyperpipeSGIX (Display *dpy, int hpId); int glXQueryHyperpipeBestAttribSGIX (Display *dpy, int timeSlice, int attrib, int size, void *attribList, void *returnAttribList); int glXHyperpipeAttribSGIX (Display *dpy, int timeSlice, int attrib, int size, void *attribList); int glXQueryHyperpipeAttribSGIX (Display *dpy, int timeSlice, int attrib, int size, void *returnAttribList); #endif #endif /* GLX_SGIX_hyperpipe */ #ifndef GLX_SGIX_pbuffer #define GLX_SGIX_pbuffer 1 #define GLX_PBUFFER_BIT_SGIX 0x00000004 #define GLX_BUFFER_CLOBBER_MASK_SGIX 0x08000000 #define GLX_FRONT_LEFT_BUFFER_BIT_SGIX 0x00000001 #define GLX_FRONT_RIGHT_BUFFER_BIT_SGIX 0x00000002 #define GLX_BACK_LEFT_BUFFER_BIT_SGIX 0x00000004 #define GLX_BACK_RIGHT_BUFFER_BIT_SGIX 0x00000008 #define GLX_AUX_BUFFERS_BIT_SGIX 0x00000010 #define GLX_DEPTH_BUFFER_BIT_SGIX 0x00000020 #define GLX_STENCIL_BUFFER_BIT_SGIX 0x00000040 #define GLX_ACCUM_BUFFER_BIT_SGIX 0x00000080 #define GLX_SAMPLE_BUFFERS_BIT_SGIX 0x00000100 #define GLX_MAX_PBUFFER_WIDTH_SGIX 0x8016 #define GLX_MAX_PBUFFER_HEIGHT_SGIX 0x8017 #define GLX_MAX_PBUFFER_PIXELS_SGIX 0x8018 #define GLX_OPTIMAL_PBUFFER_WIDTH_SGIX 0x8019 #define GLX_OPTIMAL_PBUFFER_HEIGHT_SGIX 0x801A #define GLX_PRESERVED_CONTENTS_SGIX 0x801B #define GLX_LARGEST_PBUFFER_SGIX 0x801C #define GLX_WIDTH_SGIX 0x801D #define GLX_HEIGHT_SGIX 0x801E #define GLX_EVENT_MASK_SGIX 0x801F #define GLX_DAMAGED_SGIX 0x8020 #define GLX_SAVED_SGIX 0x8021 #define GLX_WINDOW_SGIX 0x8022 #define GLX_PBUFFER_SGIX 0x8023 typedef GLXPbufferSGIX ( *PFNGLXCREATEGLXPBUFFERSGIXPROC) (Display *dpy, GLXFBConfigSGIX config, unsigned int width, unsigned int height, int *attrib_list); typedef void ( *PFNGLXDESTROYGLXPBUFFERSGIXPROC) (Display *dpy, GLXPbufferSGIX pbuf); typedef int ( *PFNGLXQUERYGLXPBUFFERSGIXPROC) (Display *dpy, GLXPbufferSGIX pbuf, int attribute, unsigned int *value); typedef void ( *PFNGLXSELECTEVENTSGIXPROC) (Display *dpy, GLXDrawable drawable, unsigned long mask); typedef void ( *PFNGLXGETSELECTEDEVENTSGIXPROC) (Display *dpy, GLXDrawable drawable, unsigned long *mask); #ifdef GLX_GLXEXT_PROTOTYPES GLXPbufferSGIX glXCreateGLXPbufferSGIX (Display *dpy, GLXFBConfigSGIX config, unsigned int width, unsigned int height, int *attrib_list); void glXDestroyGLXPbufferSGIX (Display *dpy, GLXPbufferSGIX pbuf); int glXQueryGLXPbufferSGIX (Display *dpy, GLXPbufferSGIX pbuf, int attribute, unsigned int *value); void glXSelectEventSGIX (Display *dpy, GLXDrawable drawable, unsigned long mask); void glXGetSelectedEventSGIX (Display *dpy, GLXDrawable drawable, unsigned long *mask); #endif #endif /* GLX_SGIX_pbuffer */ #ifndef GLX_SGIX_swap_barrier #define GLX_SGIX_swap_barrier 1 typedef void ( *PFNGLXBINDSWAPBARRIERSGIXPROC) (Display *dpy, GLXDrawable drawable, int barrier); typedef Bool ( *PFNGLXQUERYMAXSWAPBARRIERSSGIXPROC) (Display *dpy, int screen, int *max); #ifdef GLX_GLXEXT_PROTOTYPES void glXBindSwapBarrierSGIX (Display *dpy, GLXDrawable drawable, int barrier); Bool glXQueryMaxSwapBarriersSGIX (Display *dpy, int screen, int *max); #endif #endif /* GLX_SGIX_swap_barrier */ #ifndef GLX_SGIX_swap_group #define GLX_SGIX_swap_group 1 typedef void ( *PFNGLXJOINSWAPGROUPSGIXPROC) (Display *dpy, GLXDrawable drawable, GLXDrawable member); #ifdef GLX_GLXEXT_PROTOTYPES void glXJoinSwapGroupSGIX (Display *dpy, GLXDrawable drawable, GLXDrawable member); #endif #endif /* GLX_SGIX_swap_group */ #ifndef GLX_SGIX_video_resize #define GLX_SGIX_video_resize 1 #define GLX_SYNC_FRAME_SGIX 0x00000000 #define GLX_SYNC_SWAP_SGIX 0x00000001 typedef int ( *PFNGLXBINDCHANNELTOWINDOWSGIXPROC) (Display *display, int screen, int channel, Window window); typedef int ( *PFNGLXCHANNELRECTSGIXPROC) (Display *display, int screen, int channel, int x, int y, int w, int h); typedef int ( *PFNGLXQUERYCHANNELRECTSGIXPROC) (Display *display, int screen, int channel, int *dx, int *dy, int *dw, int *dh); typedef int ( *PFNGLXQUERYCHANNELDELTASSGIXPROC) (Display *display, int screen, int channel, int *x, int *y, int *w, int *h); typedef int ( *PFNGLXCHANNELRECTSYNCSGIXPROC) (Display *display, int screen, int channel, GLenum synctype); #ifdef GLX_GLXEXT_PROTOTYPES int glXBindChannelToWindowSGIX (Display *display, int screen, int channel, Window window); int glXChannelRectSGIX (Display *display, int screen, int channel, int x, int y, int w, int h); int glXQueryChannelRectSGIX (Display *display, int screen, int channel, int *dx, int *dy, int *dw, int *dh); int glXQueryChannelDeltasSGIX (Display *display, int screen, int channel, int *x, int *y, int *w, int *h); int glXChannelRectSyncSGIX (Display *display, int screen, int channel, GLenum synctype); #endif #endif /* GLX_SGIX_video_resize */ #ifndef GLX_SGIX_video_source #define GLX_SGIX_video_source 1 typedef XID GLXVideoSourceSGIX; #ifdef _VL_H typedef GLXVideoSourceSGIX ( *PFNGLXCREATEGLXVIDEOSOURCESGIXPROC) (Display *display, int screen, VLServer server, VLPath path, int nodeClass, VLNode drainNode); typedef void ( *PFNGLXDESTROYGLXVIDEOSOURCESGIXPROC) (Display *dpy, GLXVideoSourceSGIX glxvideosource); #ifdef GLX_GLXEXT_PROTOTYPES GLXVideoSourceSGIX glXCreateGLXVideoSourceSGIX (Display *display, int screen, VLServer server, VLPath path, int nodeClass, VLNode drainNode); void glXDestroyGLXVideoSourceSGIX (Display *dpy, GLXVideoSourceSGIX glxvideosource); #endif #endif /* _VL_H */ #endif /* GLX_SGIX_video_source */ #ifndef GLX_SGIX_visual_select_group #define GLX_SGIX_visual_select_group 1 #define GLX_VISUAL_SELECT_GROUP_SGIX 0x8028 #endif /* GLX_SGIX_visual_select_group */ #ifndef GLX_SGI_cushion #define GLX_SGI_cushion 1 typedef void ( *PFNGLXCUSHIONSGIPROC) (Display *dpy, Window window, float cushion); #ifdef GLX_GLXEXT_PROTOTYPES void glXCushionSGI (Display *dpy, Window window, float cushion); #endif #endif /* GLX_SGI_cushion */ #ifndef GLX_SGI_make_current_read #define GLX_SGI_make_current_read 1 typedef Bool ( *PFNGLXMAKECURRENTREADSGIPROC) (Display *dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx); typedef GLXDrawable ( *PFNGLXGETCURRENTREADDRAWABLESGIPROC) (void); #ifdef GLX_GLXEXT_PROTOTYPES Bool glXMakeCurrentReadSGI (Display *dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx); GLXDrawable glXGetCurrentReadDrawableSGI (void); #endif #endif /* GLX_SGI_make_current_read */ #ifndef GLX_SGI_swap_control #define GLX_SGI_swap_control 1 typedef int ( *PFNGLXSWAPINTERVALSGIPROC) (int interval); #ifdef GLX_GLXEXT_PROTOTYPES int glXSwapIntervalSGI (int interval); #endif #endif /* GLX_SGI_swap_control */ #ifndef GLX_SGI_video_sync #define GLX_SGI_video_sync 1 typedef int ( *PFNGLXGETVIDEOSYNCSGIPROC) (unsigned int *count); typedef int ( *PFNGLXWAITVIDEOSYNCSGIPROC) (int divisor, int remainder, unsigned int *count); #ifdef GLX_GLXEXT_PROTOTYPES int glXGetVideoSyncSGI (unsigned int *count); int glXWaitVideoSyncSGI (int divisor, int remainder, unsigned int *count); #endif #endif /* GLX_SGI_video_sync */ #ifndef GLX_SUN_get_transparent_index #define GLX_SUN_get_transparent_index 1 typedef Status ( *PFNGLXGETTRANSPARENTINDEXSUNPROC) (Display *dpy, Window overlay, Window underlay, long *pTransparentIndex); #ifdef GLX_GLXEXT_PROTOTYPES Status glXGetTransparentIndexSUN (Display *dpy, Window overlay, Window underlay, long *pTransparentIndex); #endif #endif /* GLX_SUN_get_transparent_index */ #ifdef __cplusplus } #endif #endif ================================================ FILE: Include/gl/wglext.h ================================================ #ifndef __wglext_h_ #define __wglext_h_ 1 #ifdef __cplusplus extern "C" { #endif /* ** Copyright (c) 2013-2014 The Khronos Group Inc. ** ** Permission is hereby granted, free of charge, to any person obtaining a ** copy of this software and/or associated documentation files (the ** "Materials"), to deal in the Materials without restriction, including ** without limitation the rights to use, copy, modify, merge, publish, ** distribute, sublicense, and/or sell copies of the Materials, and to ** permit persons to whom the Materials are furnished to do so, subject to ** the following conditions: ** ** The above copyright notice and this permission notice shall be included ** in all copies or substantial portions of the Materials. ** ** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. ** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY ** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, ** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE ** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. */ /* ** This header is generated from the Khronos OpenGL / OpenGL ES XML ** API Registry. The current version of the Registry, generator scripts ** used to make the header, and the header can be found at ** http://www.opengl.org/registry/ ** ** Khronos $Revision: 27684 $ on $Date: 2014-08-11 01:21:35 -0700 (Mon, 11 Aug 2014) $ */ #if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__) #define WIN32_LEAN_AND_MEAN 1 #include #endif #define WGL_WGLEXT_VERSION 20140810 /* Generated C header for: * API: wgl * Versions considered: .* * Versions emitted: _nomatch_^ * Default extensions included: wgl * Additional extensions included: _nomatch_^ * Extensions removed: _nomatch_^ */ #ifndef WGL_ARB_buffer_region #define WGL_ARB_buffer_region 1 #define WGL_FRONT_COLOR_BUFFER_BIT_ARB 0x00000001 #define WGL_BACK_COLOR_BUFFER_BIT_ARB 0x00000002 #define WGL_DEPTH_BUFFER_BIT_ARB 0x00000004 #define WGL_STENCIL_BUFFER_BIT_ARB 0x00000008 typedef HANDLE (WINAPI * PFNWGLCREATEBUFFERREGIONARBPROC) (HDC hDC, int iLayerPlane, UINT uType); typedef VOID (WINAPI * PFNWGLDELETEBUFFERREGIONARBPROC) (HANDLE hRegion); typedef BOOL (WINAPI * PFNWGLSAVEBUFFERREGIONARBPROC) (HANDLE hRegion, int x, int y, int width, int height); typedef BOOL (WINAPI * PFNWGLRESTOREBUFFERREGIONARBPROC) (HANDLE hRegion, int x, int y, int width, int height, int xSrc, int ySrc); #ifdef WGL_WGLEXT_PROTOTYPES HANDLE WINAPI wglCreateBufferRegionARB (HDC hDC, int iLayerPlane, UINT uType); VOID WINAPI wglDeleteBufferRegionARB (HANDLE hRegion); BOOL WINAPI wglSaveBufferRegionARB (HANDLE hRegion, int x, int y, int width, int height); BOOL WINAPI wglRestoreBufferRegionARB (HANDLE hRegion, int x, int y, int width, int height, int xSrc, int ySrc); #endif #endif /* WGL_ARB_buffer_region */ #ifndef WGL_ARB_context_flush_control #define WGL_ARB_context_flush_control 1 #define WGL_CONTEXT_RELEASE_BEHAVIOR_ARB 0x2097 #define WGL_CONTEXT_RELEASE_BEHAVIOR_NONE_ARB 0 #define WGL_CONTEXT_RELEASE_BEHAVIOR_FLUSH_ARB 0x2098 #endif /* WGL_ARB_context_flush_control */ #ifndef WGL_ARB_create_context #define WGL_ARB_create_context 1 #define WGL_CONTEXT_DEBUG_BIT_ARB 0x00000001 #define WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x00000002 #define WGL_CONTEXT_MAJOR_VERSION_ARB 0x2091 #define WGL_CONTEXT_MINOR_VERSION_ARB 0x2092 #define WGL_CONTEXT_LAYER_PLANE_ARB 0x2093 #define WGL_CONTEXT_FLAGS_ARB 0x2094 #define ERROR_INVALID_VERSION_ARB 0x2095 typedef HGLRC (WINAPI * PFNWGLCREATECONTEXTATTRIBSARBPROC) (HDC hDC, HGLRC hShareContext, const int *attribList); #ifdef WGL_WGLEXT_PROTOTYPES HGLRC WINAPI wglCreateContextAttribsARB (HDC hDC, HGLRC hShareContext, const int *attribList); #endif #endif /* WGL_ARB_create_context */ #ifndef WGL_ARB_create_context_profile #define WGL_ARB_create_context_profile 1 #define WGL_CONTEXT_PROFILE_MASK_ARB 0x9126 #define WGL_CONTEXT_CORE_PROFILE_BIT_ARB 0x00000001 #define WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002 #define ERROR_INVALID_PROFILE_ARB 0x2096 #endif /* WGL_ARB_create_context_profile */ #ifndef WGL_ARB_create_context_robustness #define WGL_ARB_create_context_robustness 1 #define WGL_CONTEXT_ROBUST_ACCESS_BIT_ARB 0x00000004 #define WGL_LOSE_CONTEXT_ON_RESET_ARB 0x8252 #define WGL_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB 0x8256 #define WGL_NO_RESET_NOTIFICATION_ARB 0x8261 #endif /* WGL_ARB_create_context_robustness */ #ifndef WGL_ARB_extensions_string #define WGL_ARB_extensions_string 1 typedef const char *(WINAPI * PFNWGLGETEXTENSIONSSTRINGARBPROC) (HDC hdc); #ifdef WGL_WGLEXT_PROTOTYPES const char *WINAPI wglGetExtensionsStringARB (HDC hdc); #endif #endif /* WGL_ARB_extensions_string */ #ifndef WGL_ARB_framebuffer_sRGB #define WGL_ARB_framebuffer_sRGB 1 #define WGL_FRAMEBUFFER_SRGB_CAPABLE_ARB 0x20A9 #endif /* WGL_ARB_framebuffer_sRGB */ #ifndef WGL_ARB_make_current_read #define WGL_ARB_make_current_read 1 #define ERROR_INVALID_PIXEL_TYPE_ARB 0x2043 #define ERROR_INCOMPATIBLE_DEVICE_CONTEXTS_ARB 0x2054 typedef BOOL (WINAPI * PFNWGLMAKECONTEXTCURRENTARBPROC) (HDC hDrawDC, HDC hReadDC, HGLRC hglrc); typedef HDC (WINAPI * PFNWGLGETCURRENTREADDCARBPROC) (void); #ifdef WGL_WGLEXT_PROTOTYPES BOOL WINAPI wglMakeContextCurrentARB (HDC hDrawDC, HDC hReadDC, HGLRC hglrc); HDC WINAPI wglGetCurrentReadDCARB (void); #endif #endif /* WGL_ARB_make_current_read */ #ifndef WGL_ARB_multisample #define WGL_ARB_multisample 1 #define WGL_SAMPLE_BUFFERS_ARB 0x2041 #define WGL_SAMPLES_ARB 0x2042 #endif /* WGL_ARB_multisample */ #ifndef WGL_ARB_pbuffer #define WGL_ARB_pbuffer 1 DECLARE_HANDLE(HPBUFFERARB); #define WGL_DRAW_TO_PBUFFER_ARB 0x202D #define WGL_MAX_PBUFFER_PIXELS_ARB 0x202E #define WGL_MAX_PBUFFER_WIDTH_ARB 0x202F #define WGL_MAX_PBUFFER_HEIGHT_ARB 0x2030 #define WGL_PBUFFER_LARGEST_ARB 0x2033 #define WGL_PBUFFER_WIDTH_ARB 0x2034 #define WGL_PBUFFER_HEIGHT_ARB 0x2035 #define WGL_PBUFFER_LOST_ARB 0x2036 typedef HPBUFFERARB (WINAPI * PFNWGLCREATEPBUFFERARBPROC) (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int *piAttribList); typedef HDC (WINAPI * PFNWGLGETPBUFFERDCARBPROC) (HPBUFFERARB hPbuffer); typedef int (WINAPI * PFNWGLRELEASEPBUFFERDCARBPROC) (HPBUFFERARB hPbuffer, HDC hDC); typedef BOOL (WINAPI * PFNWGLDESTROYPBUFFERARBPROC) (HPBUFFERARB hPbuffer); typedef BOOL (WINAPI * PFNWGLQUERYPBUFFERARBPROC) (HPBUFFERARB hPbuffer, int iAttribute, int *piValue); #ifdef WGL_WGLEXT_PROTOTYPES HPBUFFERARB WINAPI wglCreatePbufferARB (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int *piAttribList); HDC WINAPI wglGetPbufferDCARB (HPBUFFERARB hPbuffer); int WINAPI wglReleasePbufferDCARB (HPBUFFERARB hPbuffer, HDC hDC); BOOL WINAPI wglDestroyPbufferARB (HPBUFFERARB hPbuffer); BOOL WINAPI wglQueryPbufferARB (HPBUFFERARB hPbuffer, int iAttribute, int *piValue); #endif #endif /* WGL_ARB_pbuffer */ #ifndef WGL_ARB_pixel_format #define WGL_ARB_pixel_format 1 #define WGL_NUMBER_PIXEL_FORMATS_ARB 0x2000 #define WGL_DRAW_TO_WINDOW_ARB 0x2001 #define WGL_DRAW_TO_BITMAP_ARB 0x2002 #define WGL_ACCELERATION_ARB 0x2003 #define WGL_NEED_PALETTE_ARB 0x2004 #define WGL_NEED_SYSTEM_PALETTE_ARB 0x2005 #define WGL_SWAP_LAYER_BUFFERS_ARB 0x2006 #define WGL_SWAP_METHOD_ARB 0x2007 #define WGL_NUMBER_OVERLAYS_ARB 0x2008 #define WGL_NUMBER_UNDERLAYS_ARB 0x2009 #define WGL_TRANSPARENT_ARB 0x200A #define WGL_TRANSPARENT_RED_VALUE_ARB 0x2037 #define WGL_TRANSPARENT_GREEN_VALUE_ARB 0x2038 #define WGL_TRANSPARENT_BLUE_VALUE_ARB 0x2039 #define WGL_TRANSPARENT_ALPHA_VALUE_ARB 0x203A #define WGL_TRANSPARENT_INDEX_VALUE_ARB 0x203B #define WGL_SHARE_DEPTH_ARB 0x200C #define WGL_SHARE_STENCIL_ARB 0x200D #define WGL_SHARE_ACCUM_ARB 0x200E #define WGL_SUPPORT_GDI_ARB 0x200F #define WGL_SUPPORT_OPENGL_ARB 0x2010 #define WGL_DOUBLE_BUFFER_ARB 0x2011 #define WGL_STEREO_ARB 0x2012 #define WGL_PIXEL_TYPE_ARB 0x2013 #define WGL_COLOR_BITS_ARB 0x2014 #define WGL_RED_BITS_ARB 0x2015 #define WGL_RED_SHIFT_ARB 0x2016 #define WGL_GREEN_BITS_ARB 0x2017 #define WGL_GREEN_SHIFT_ARB 0x2018 #define WGL_BLUE_BITS_ARB 0x2019 #define WGL_BLUE_SHIFT_ARB 0x201A #define WGL_ALPHA_BITS_ARB 0x201B #define WGL_ALPHA_SHIFT_ARB 0x201C #define WGL_ACCUM_BITS_ARB 0x201D #define WGL_ACCUM_RED_BITS_ARB 0x201E #define WGL_ACCUM_GREEN_BITS_ARB 0x201F #define WGL_ACCUM_BLUE_BITS_ARB 0x2020 #define WGL_ACCUM_ALPHA_BITS_ARB 0x2021 #define WGL_DEPTH_BITS_ARB 0x2022 #define WGL_STENCIL_BITS_ARB 0x2023 #define WGL_AUX_BUFFERS_ARB 0x2024 #define WGL_NO_ACCELERATION_ARB 0x2025 #define WGL_GENERIC_ACCELERATION_ARB 0x2026 #define WGL_FULL_ACCELERATION_ARB 0x2027 #define WGL_SWAP_EXCHANGE_ARB 0x2028 #define WGL_SWAP_COPY_ARB 0x2029 #define WGL_SWAP_UNDEFINED_ARB 0x202A #define WGL_TYPE_RGBA_ARB 0x202B #define WGL_TYPE_COLORINDEX_ARB 0x202C typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBIVARBPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int *piAttributes, int *piValues); typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBFVARBPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int *piAttributes, FLOAT *pfValues); typedef BOOL (WINAPI * PFNWGLCHOOSEPIXELFORMATARBPROC) (HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats); #ifdef WGL_WGLEXT_PROTOTYPES BOOL WINAPI wglGetPixelFormatAttribivARB (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int *piAttributes, int *piValues); BOOL WINAPI wglGetPixelFormatAttribfvARB (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int *piAttributes, FLOAT *pfValues); BOOL WINAPI wglChoosePixelFormatARB (HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats); #endif #endif /* WGL_ARB_pixel_format */ #ifndef WGL_ARB_pixel_format_float #define WGL_ARB_pixel_format_float 1 #define WGL_TYPE_RGBA_FLOAT_ARB 0x21A0 #endif /* WGL_ARB_pixel_format_float */ #ifndef WGL_ARB_render_texture #define WGL_ARB_render_texture 1 #define WGL_BIND_TO_TEXTURE_RGB_ARB 0x2070 #define WGL_BIND_TO_TEXTURE_RGBA_ARB 0x2071 #define WGL_TEXTURE_FORMAT_ARB 0x2072 #define WGL_TEXTURE_TARGET_ARB 0x2073 #define WGL_MIPMAP_TEXTURE_ARB 0x2074 #define WGL_TEXTURE_RGB_ARB 0x2075 #define WGL_TEXTURE_RGBA_ARB 0x2076 #define WGL_NO_TEXTURE_ARB 0x2077 #define WGL_TEXTURE_CUBE_MAP_ARB 0x2078 #define WGL_TEXTURE_1D_ARB 0x2079 #define WGL_TEXTURE_2D_ARB 0x207A #define WGL_MIPMAP_LEVEL_ARB 0x207B #define WGL_CUBE_MAP_FACE_ARB 0x207C #define WGL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x207D #define WGL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x207E #define WGL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x207F #define WGL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x2080 #define WGL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x2081 #define WGL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x2082 #define WGL_FRONT_LEFT_ARB 0x2083 #define WGL_FRONT_RIGHT_ARB 0x2084 #define WGL_BACK_LEFT_ARB 0x2085 #define WGL_BACK_RIGHT_ARB 0x2086 #define WGL_AUX0_ARB 0x2087 #define WGL_AUX1_ARB 0x2088 #define WGL_AUX2_ARB 0x2089 #define WGL_AUX3_ARB 0x208A #define WGL_AUX4_ARB 0x208B #define WGL_AUX5_ARB 0x208C #define WGL_AUX6_ARB 0x208D #define WGL_AUX7_ARB 0x208E #define WGL_AUX8_ARB 0x208F #define WGL_AUX9_ARB 0x2090 typedef BOOL (WINAPI * PFNWGLBINDTEXIMAGEARBPROC) (HPBUFFERARB hPbuffer, int iBuffer); typedef BOOL (WINAPI * PFNWGLRELEASETEXIMAGEARBPROC) (HPBUFFERARB hPbuffer, int iBuffer); typedef BOOL (WINAPI * PFNWGLSETPBUFFERATTRIBARBPROC) (HPBUFFERARB hPbuffer, const int *piAttribList); #ifdef WGL_WGLEXT_PROTOTYPES BOOL WINAPI wglBindTexImageARB (HPBUFFERARB hPbuffer, int iBuffer); BOOL WINAPI wglReleaseTexImageARB (HPBUFFERARB hPbuffer, int iBuffer); BOOL WINAPI wglSetPbufferAttribARB (HPBUFFERARB hPbuffer, const int *piAttribList); #endif #endif /* WGL_ARB_render_texture */ #ifndef WGL_ARB_robustness_application_isolation #define WGL_ARB_robustness_application_isolation 1 #define WGL_CONTEXT_RESET_ISOLATION_BIT_ARB 0x00000008 #endif /* WGL_ARB_robustness_application_isolation */ #ifndef WGL_ARB_robustness_share_group_isolation #define WGL_ARB_robustness_share_group_isolation 1 #endif /* WGL_ARB_robustness_share_group_isolation */ #ifndef WGL_3DFX_multisample #define WGL_3DFX_multisample 1 #define WGL_SAMPLE_BUFFERS_3DFX 0x2060 #define WGL_SAMPLES_3DFX 0x2061 #endif /* WGL_3DFX_multisample */ #ifndef WGL_3DL_stereo_control #define WGL_3DL_stereo_control 1 #define WGL_STEREO_EMITTER_ENABLE_3DL 0x2055 #define WGL_STEREO_EMITTER_DISABLE_3DL 0x2056 #define WGL_STEREO_POLARITY_NORMAL_3DL 0x2057 #define WGL_STEREO_POLARITY_INVERT_3DL 0x2058 typedef BOOL (WINAPI * PFNWGLSETSTEREOEMITTERSTATE3DLPROC) (HDC hDC, UINT uState); #ifdef WGL_WGLEXT_PROTOTYPES BOOL WINAPI wglSetStereoEmitterState3DL (HDC hDC, UINT uState); #endif #endif /* WGL_3DL_stereo_control */ #ifndef WGL_AMD_gpu_association #define WGL_AMD_gpu_association 1 #define WGL_GPU_VENDOR_AMD 0x1F00 #define WGL_GPU_RENDERER_STRING_AMD 0x1F01 #define WGL_GPU_OPENGL_VERSION_STRING_AMD 0x1F02 #define WGL_GPU_FASTEST_TARGET_GPUS_AMD 0x21A2 #define WGL_GPU_RAM_AMD 0x21A3 #define WGL_GPU_CLOCK_AMD 0x21A4 #define WGL_GPU_NUM_PIPES_AMD 0x21A5 #define WGL_GPU_NUM_SIMD_AMD 0x21A6 #define WGL_GPU_NUM_RB_AMD 0x21A7 #define WGL_GPU_NUM_SPI_AMD 0x21A8 typedef UINT (WINAPI * PFNWGLGETGPUIDSAMDPROC) (UINT maxCount, UINT *ids); typedef INT (WINAPI * PFNWGLGETGPUINFOAMDPROC) (UINT id, int property, GLenum dataType, UINT size, void *data); typedef UINT (WINAPI * PFNWGLGETCONTEXTGPUIDAMDPROC) (HGLRC hglrc); typedef HGLRC (WINAPI * PFNWGLCREATEASSOCIATEDCONTEXTAMDPROC) (UINT id); typedef HGLRC (WINAPI * PFNWGLCREATEASSOCIATEDCONTEXTATTRIBSAMDPROC) (UINT id, HGLRC hShareContext, const int *attribList); typedef BOOL (WINAPI * PFNWGLDELETEASSOCIATEDCONTEXTAMDPROC) (HGLRC hglrc); typedef BOOL (WINAPI * PFNWGLMAKEASSOCIATEDCONTEXTCURRENTAMDPROC) (HGLRC hglrc); typedef HGLRC (WINAPI * PFNWGLGETCURRENTASSOCIATEDCONTEXTAMDPROC) (void); typedef VOID (WINAPI * PFNWGLBLITCONTEXTFRAMEBUFFERAMDPROC) (HGLRC dstCtx, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); #ifdef WGL_WGLEXT_PROTOTYPES UINT WINAPI wglGetGPUIDsAMD (UINT maxCount, UINT *ids); INT WINAPI wglGetGPUInfoAMD (UINT id, int property, GLenum dataType, UINT size, void *data); UINT WINAPI wglGetContextGPUIDAMD (HGLRC hglrc); HGLRC WINAPI wglCreateAssociatedContextAMD (UINT id); HGLRC WINAPI wglCreateAssociatedContextAttribsAMD (UINT id, HGLRC hShareContext, const int *attribList); BOOL WINAPI wglDeleteAssociatedContextAMD (HGLRC hglrc); BOOL WINAPI wglMakeAssociatedContextCurrentAMD (HGLRC hglrc); HGLRC WINAPI wglGetCurrentAssociatedContextAMD (void); VOID WINAPI wglBlitContextFramebufferAMD (HGLRC dstCtx, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); #endif #endif /* WGL_AMD_gpu_association */ #ifndef WGL_ATI_pixel_format_float #define WGL_ATI_pixel_format_float 1 #define WGL_TYPE_RGBA_FLOAT_ATI 0x21A0 #endif /* WGL_ATI_pixel_format_float */ #ifndef WGL_EXT_create_context_es2_profile #define WGL_EXT_create_context_es2_profile 1 #define WGL_CONTEXT_ES2_PROFILE_BIT_EXT 0x00000004 #endif /* WGL_EXT_create_context_es2_profile */ #ifndef WGL_EXT_create_context_es_profile #define WGL_EXT_create_context_es_profile 1 #define WGL_CONTEXT_ES_PROFILE_BIT_EXT 0x00000004 #endif /* WGL_EXT_create_context_es_profile */ #ifndef WGL_EXT_depth_float #define WGL_EXT_depth_float 1 #define WGL_DEPTH_FLOAT_EXT 0x2040 #endif /* WGL_EXT_depth_float */ #ifndef WGL_EXT_display_color_table #define WGL_EXT_display_color_table 1 typedef GLboolean (WINAPI * PFNWGLCREATEDISPLAYCOLORTABLEEXTPROC) (GLushort id); typedef GLboolean (WINAPI * PFNWGLLOADDISPLAYCOLORTABLEEXTPROC) (const GLushort *table, GLuint length); typedef GLboolean (WINAPI * PFNWGLBINDDISPLAYCOLORTABLEEXTPROC) (GLushort id); typedef VOID (WINAPI * PFNWGLDESTROYDISPLAYCOLORTABLEEXTPROC) (GLushort id); #ifdef WGL_WGLEXT_PROTOTYPES GLboolean WINAPI wglCreateDisplayColorTableEXT (GLushort id); GLboolean WINAPI wglLoadDisplayColorTableEXT (const GLushort *table, GLuint length); GLboolean WINAPI wglBindDisplayColorTableEXT (GLushort id); VOID WINAPI wglDestroyDisplayColorTableEXT (GLushort id); #endif #endif /* WGL_EXT_display_color_table */ #ifndef WGL_EXT_extensions_string #define WGL_EXT_extensions_string 1 typedef const char *(WINAPI * PFNWGLGETEXTENSIONSSTRINGEXTPROC) (void); #ifdef WGL_WGLEXT_PROTOTYPES const char *WINAPI wglGetExtensionsStringEXT (void); #endif #endif /* WGL_EXT_extensions_string */ #ifndef WGL_EXT_framebuffer_sRGB #define WGL_EXT_framebuffer_sRGB 1 #define WGL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x20A9 #endif /* WGL_EXT_framebuffer_sRGB */ #ifndef WGL_EXT_make_current_read #define WGL_EXT_make_current_read 1 #define ERROR_INVALID_PIXEL_TYPE_EXT 0x2043 typedef BOOL (WINAPI * PFNWGLMAKECONTEXTCURRENTEXTPROC) (HDC hDrawDC, HDC hReadDC, HGLRC hglrc); typedef HDC (WINAPI * PFNWGLGETCURRENTREADDCEXTPROC) (void); #ifdef WGL_WGLEXT_PROTOTYPES BOOL WINAPI wglMakeContextCurrentEXT (HDC hDrawDC, HDC hReadDC, HGLRC hglrc); HDC WINAPI wglGetCurrentReadDCEXT (void); #endif #endif /* WGL_EXT_make_current_read */ #ifndef WGL_EXT_multisample #define WGL_EXT_multisample 1 #define WGL_SAMPLE_BUFFERS_EXT 0x2041 #define WGL_SAMPLES_EXT 0x2042 #endif /* WGL_EXT_multisample */ #ifndef WGL_EXT_pbuffer #define WGL_EXT_pbuffer 1 DECLARE_HANDLE(HPBUFFEREXT); #define WGL_DRAW_TO_PBUFFER_EXT 0x202D #define WGL_MAX_PBUFFER_PIXELS_EXT 0x202E #define WGL_MAX_PBUFFER_WIDTH_EXT 0x202F #define WGL_MAX_PBUFFER_HEIGHT_EXT 0x2030 #define WGL_OPTIMAL_PBUFFER_WIDTH_EXT 0x2031 #define WGL_OPTIMAL_PBUFFER_HEIGHT_EXT 0x2032 #define WGL_PBUFFER_LARGEST_EXT 0x2033 #define WGL_PBUFFER_WIDTH_EXT 0x2034 #define WGL_PBUFFER_HEIGHT_EXT 0x2035 typedef HPBUFFEREXT (WINAPI * PFNWGLCREATEPBUFFEREXTPROC) (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int *piAttribList); typedef HDC (WINAPI * PFNWGLGETPBUFFERDCEXTPROC) (HPBUFFEREXT hPbuffer); typedef int (WINAPI * PFNWGLRELEASEPBUFFERDCEXTPROC) (HPBUFFEREXT hPbuffer, HDC hDC); typedef BOOL (WINAPI * PFNWGLDESTROYPBUFFEREXTPROC) (HPBUFFEREXT hPbuffer); typedef BOOL (WINAPI * PFNWGLQUERYPBUFFEREXTPROC) (HPBUFFEREXT hPbuffer, int iAttribute, int *piValue); #ifdef WGL_WGLEXT_PROTOTYPES HPBUFFEREXT WINAPI wglCreatePbufferEXT (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int *piAttribList); HDC WINAPI wglGetPbufferDCEXT (HPBUFFEREXT hPbuffer); int WINAPI wglReleasePbufferDCEXT (HPBUFFEREXT hPbuffer, HDC hDC); BOOL WINAPI wglDestroyPbufferEXT (HPBUFFEREXT hPbuffer); BOOL WINAPI wglQueryPbufferEXT (HPBUFFEREXT hPbuffer, int iAttribute, int *piValue); #endif #endif /* WGL_EXT_pbuffer */ #ifndef WGL_EXT_pixel_format #define WGL_EXT_pixel_format 1 #define WGL_NUMBER_PIXEL_FORMATS_EXT 0x2000 #define WGL_DRAW_TO_WINDOW_EXT 0x2001 #define WGL_DRAW_TO_BITMAP_EXT 0x2002 #define WGL_ACCELERATION_EXT 0x2003 #define WGL_NEED_PALETTE_EXT 0x2004 #define WGL_NEED_SYSTEM_PALETTE_EXT 0x2005 #define WGL_SWAP_LAYER_BUFFERS_EXT 0x2006 #define WGL_SWAP_METHOD_EXT 0x2007 #define WGL_NUMBER_OVERLAYS_EXT 0x2008 #define WGL_NUMBER_UNDERLAYS_EXT 0x2009 #define WGL_TRANSPARENT_EXT 0x200A #define WGL_TRANSPARENT_VALUE_EXT 0x200B #define WGL_SHARE_DEPTH_EXT 0x200C #define WGL_SHARE_STENCIL_EXT 0x200D #define WGL_SHARE_ACCUM_EXT 0x200E #define WGL_SUPPORT_GDI_EXT 0x200F #define WGL_SUPPORT_OPENGL_EXT 0x2010 #define WGL_DOUBLE_BUFFER_EXT 0x2011 #define WGL_STEREO_EXT 0x2012 #define WGL_PIXEL_TYPE_EXT 0x2013 #define WGL_COLOR_BITS_EXT 0x2014 #define WGL_RED_BITS_EXT 0x2015 #define WGL_RED_SHIFT_EXT 0x2016 #define WGL_GREEN_BITS_EXT 0x2017 #define WGL_GREEN_SHIFT_EXT 0x2018 #define WGL_BLUE_BITS_EXT 0x2019 #define WGL_BLUE_SHIFT_EXT 0x201A #define WGL_ALPHA_BITS_EXT 0x201B #define WGL_ALPHA_SHIFT_EXT 0x201C #define WGL_ACCUM_BITS_EXT 0x201D #define WGL_ACCUM_RED_BITS_EXT 0x201E #define WGL_ACCUM_GREEN_BITS_EXT 0x201F #define WGL_ACCUM_BLUE_BITS_EXT 0x2020 #define WGL_ACCUM_ALPHA_BITS_EXT 0x2021 #define WGL_DEPTH_BITS_EXT 0x2022 #define WGL_STENCIL_BITS_EXT 0x2023 #define WGL_AUX_BUFFERS_EXT 0x2024 #define WGL_NO_ACCELERATION_EXT 0x2025 #define WGL_GENERIC_ACCELERATION_EXT 0x2026 #define WGL_FULL_ACCELERATION_EXT 0x2027 #define WGL_SWAP_EXCHANGE_EXT 0x2028 #define WGL_SWAP_COPY_EXT 0x2029 #define WGL_SWAP_UNDEFINED_EXT 0x202A #define WGL_TYPE_RGBA_EXT 0x202B #define WGL_TYPE_COLORINDEX_EXT 0x202C typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBIVEXTPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int *piAttributes, int *piValues); typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBFVEXTPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int *piAttributes, FLOAT *pfValues); typedef BOOL (WINAPI * PFNWGLCHOOSEPIXELFORMATEXTPROC) (HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats); #ifdef WGL_WGLEXT_PROTOTYPES BOOL WINAPI wglGetPixelFormatAttribivEXT (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int *piAttributes, int *piValues); BOOL WINAPI wglGetPixelFormatAttribfvEXT (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int *piAttributes, FLOAT *pfValues); BOOL WINAPI wglChoosePixelFormatEXT (HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats); #endif #endif /* WGL_EXT_pixel_format */ #ifndef WGL_EXT_pixel_format_packed_float #define WGL_EXT_pixel_format_packed_float 1 #define WGL_TYPE_RGBA_UNSIGNED_FLOAT_EXT 0x20A8 #endif /* WGL_EXT_pixel_format_packed_float */ #ifndef WGL_EXT_swap_control #define WGL_EXT_swap_control 1 typedef BOOL (WINAPI * PFNWGLSWAPINTERVALEXTPROC) (int interval); typedef int (WINAPI * PFNWGLGETSWAPINTERVALEXTPROC) (void); #ifdef WGL_WGLEXT_PROTOTYPES BOOL WINAPI wglSwapIntervalEXT (int interval); int WINAPI wglGetSwapIntervalEXT (void); #endif #endif /* WGL_EXT_swap_control */ #ifndef WGL_EXT_swap_control_tear #define WGL_EXT_swap_control_tear 1 #endif /* WGL_EXT_swap_control_tear */ #ifndef WGL_I3D_digital_video_control #define WGL_I3D_digital_video_control 1 #define WGL_DIGITAL_VIDEO_CURSOR_ALPHA_FRAMEBUFFER_I3D 0x2050 #define WGL_DIGITAL_VIDEO_CURSOR_ALPHA_VALUE_I3D 0x2051 #define WGL_DIGITAL_VIDEO_CURSOR_INCLUDED_I3D 0x2052 #define WGL_DIGITAL_VIDEO_GAMMA_CORRECTED_I3D 0x2053 typedef BOOL (WINAPI * PFNWGLGETDIGITALVIDEOPARAMETERSI3DPROC) (HDC hDC, int iAttribute, int *piValue); typedef BOOL (WINAPI * PFNWGLSETDIGITALVIDEOPARAMETERSI3DPROC) (HDC hDC, int iAttribute, const int *piValue); #ifdef WGL_WGLEXT_PROTOTYPES BOOL WINAPI wglGetDigitalVideoParametersI3D (HDC hDC, int iAttribute, int *piValue); BOOL WINAPI wglSetDigitalVideoParametersI3D (HDC hDC, int iAttribute, const int *piValue); #endif #endif /* WGL_I3D_digital_video_control */ #ifndef WGL_I3D_gamma #define WGL_I3D_gamma 1 #define WGL_GAMMA_TABLE_SIZE_I3D 0x204E #define WGL_GAMMA_EXCLUDE_DESKTOP_I3D 0x204F typedef BOOL (WINAPI * PFNWGLGETGAMMATABLEPARAMETERSI3DPROC) (HDC hDC, int iAttribute, int *piValue); typedef BOOL (WINAPI * PFNWGLSETGAMMATABLEPARAMETERSI3DPROC) (HDC hDC, int iAttribute, const int *piValue); typedef BOOL (WINAPI * PFNWGLGETGAMMATABLEI3DPROC) (HDC hDC, int iEntries, USHORT *puRed, USHORT *puGreen, USHORT *puBlue); typedef BOOL (WINAPI * PFNWGLSETGAMMATABLEI3DPROC) (HDC hDC, int iEntries, const USHORT *puRed, const USHORT *puGreen, const USHORT *puBlue); #ifdef WGL_WGLEXT_PROTOTYPES BOOL WINAPI wglGetGammaTableParametersI3D (HDC hDC, int iAttribute, int *piValue); BOOL WINAPI wglSetGammaTableParametersI3D (HDC hDC, int iAttribute, const int *piValue); BOOL WINAPI wglGetGammaTableI3D (HDC hDC, int iEntries, USHORT *puRed, USHORT *puGreen, USHORT *puBlue); BOOL WINAPI wglSetGammaTableI3D (HDC hDC, int iEntries, const USHORT *puRed, const USHORT *puGreen, const USHORT *puBlue); #endif #endif /* WGL_I3D_gamma */ #ifndef WGL_I3D_genlock #define WGL_I3D_genlock 1 #define WGL_GENLOCK_SOURCE_MULTIVIEW_I3D 0x2044 #define WGL_GENLOCK_SOURCE_EXTERNAL_SYNC_I3D 0x2045 #define WGL_GENLOCK_SOURCE_EXTERNAL_FIELD_I3D 0x2046 #define WGL_GENLOCK_SOURCE_EXTERNAL_TTL_I3D 0x2047 #define WGL_GENLOCK_SOURCE_DIGITAL_SYNC_I3D 0x2048 #define WGL_GENLOCK_SOURCE_DIGITAL_FIELD_I3D 0x2049 #define WGL_GENLOCK_SOURCE_EDGE_FALLING_I3D 0x204A #define WGL_GENLOCK_SOURCE_EDGE_RISING_I3D 0x204B #define WGL_GENLOCK_SOURCE_EDGE_BOTH_I3D 0x204C typedef BOOL (WINAPI * PFNWGLENABLEGENLOCKI3DPROC) (HDC hDC); typedef BOOL (WINAPI * PFNWGLDISABLEGENLOCKI3DPROC) (HDC hDC); typedef BOOL (WINAPI * PFNWGLISENABLEDGENLOCKI3DPROC) (HDC hDC, BOOL *pFlag); typedef BOOL (WINAPI * PFNWGLGENLOCKSOURCEI3DPROC) (HDC hDC, UINT uSource); typedef BOOL (WINAPI * PFNWGLGETGENLOCKSOURCEI3DPROC) (HDC hDC, UINT *uSource); typedef BOOL (WINAPI * PFNWGLGENLOCKSOURCEEDGEI3DPROC) (HDC hDC, UINT uEdge); typedef BOOL (WINAPI * PFNWGLGETGENLOCKSOURCEEDGEI3DPROC) (HDC hDC, UINT *uEdge); typedef BOOL (WINAPI * PFNWGLGENLOCKSAMPLERATEI3DPROC) (HDC hDC, UINT uRate); typedef BOOL (WINAPI * PFNWGLGETGENLOCKSAMPLERATEI3DPROC) (HDC hDC, UINT *uRate); typedef BOOL (WINAPI * PFNWGLGENLOCKSOURCEDELAYI3DPROC) (HDC hDC, UINT uDelay); typedef BOOL (WINAPI * PFNWGLGETGENLOCKSOURCEDELAYI3DPROC) (HDC hDC, UINT *uDelay); typedef BOOL (WINAPI * PFNWGLQUERYGENLOCKMAXSOURCEDELAYI3DPROC) (HDC hDC, UINT *uMaxLineDelay, UINT *uMaxPixelDelay); #ifdef WGL_WGLEXT_PROTOTYPES BOOL WINAPI wglEnableGenlockI3D (HDC hDC); BOOL WINAPI wglDisableGenlockI3D (HDC hDC); BOOL WINAPI wglIsEnabledGenlockI3D (HDC hDC, BOOL *pFlag); BOOL WINAPI wglGenlockSourceI3D (HDC hDC, UINT uSource); BOOL WINAPI wglGetGenlockSourceI3D (HDC hDC, UINT *uSource); BOOL WINAPI wglGenlockSourceEdgeI3D (HDC hDC, UINT uEdge); BOOL WINAPI wglGetGenlockSourceEdgeI3D (HDC hDC, UINT *uEdge); BOOL WINAPI wglGenlockSampleRateI3D (HDC hDC, UINT uRate); BOOL WINAPI wglGetGenlockSampleRateI3D (HDC hDC, UINT *uRate); BOOL WINAPI wglGenlockSourceDelayI3D (HDC hDC, UINT uDelay); BOOL WINAPI wglGetGenlockSourceDelayI3D (HDC hDC, UINT *uDelay); BOOL WINAPI wglQueryGenlockMaxSourceDelayI3D (HDC hDC, UINT *uMaxLineDelay, UINT *uMaxPixelDelay); #endif #endif /* WGL_I3D_genlock */ #ifndef WGL_I3D_image_buffer #define WGL_I3D_image_buffer 1 #define WGL_IMAGE_BUFFER_MIN_ACCESS_I3D 0x00000001 #define WGL_IMAGE_BUFFER_LOCK_I3D 0x00000002 typedef LPVOID (WINAPI * PFNWGLCREATEIMAGEBUFFERI3DPROC) (HDC hDC, DWORD dwSize, UINT uFlags); typedef BOOL (WINAPI * PFNWGLDESTROYIMAGEBUFFERI3DPROC) (HDC hDC, LPVOID pAddress); typedef BOOL (WINAPI * PFNWGLASSOCIATEIMAGEBUFFEREVENTSI3DPROC) (HDC hDC, const HANDLE *pEvent, const LPVOID *pAddress, const DWORD *pSize, UINT count); typedef BOOL (WINAPI * PFNWGLRELEASEIMAGEBUFFEREVENTSI3DPROC) (HDC hDC, const LPVOID *pAddress, UINT count); #ifdef WGL_WGLEXT_PROTOTYPES LPVOID WINAPI wglCreateImageBufferI3D (HDC hDC, DWORD dwSize, UINT uFlags); BOOL WINAPI wglDestroyImageBufferI3D (HDC hDC, LPVOID pAddress); BOOL WINAPI wglAssociateImageBufferEventsI3D (HDC hDC, const HANDLE *pEvent, const LPVOID *pAddress, const DWORD *pSize, UINT count); BOOL WINAPI wglReleaseImageBufferEventsI3D (HDC hDC, const LPVOID *pAddress, UINT count); #endif #endif /* WGL_I3D_image_buffer */ #ifndef WGL_I3D_swap_frame_lock #define WGL_I3D_swap_frame_lock 1 typedef BOOL (WINAPI * PFNWGLENABLEFRAMELOCKI3DPROC) (void); typedef BOOL (WINAPI * PFNWGLDISABLEFRAMELOCKI3DPROC) (void); typedef BOOL (WINAPI * PFNWGLISENABLEDFRAMELOCKI3DPROC) (BOOL *pFlag); typedef BOOL (WINAPI * PFNWGLQUERYFRAMELOCKMASTERI3DPROC) (BOOL *pFlag); #ifdef WGL_WGLEXT_PROTOTYPES BOOL WINAPI wglEnableFrameLockI3D (void); BOOL WINAPI wglDisableFrameLockI3D (void); BOOL WINAPI wglIsEnabledFrameLockI3D (BOOL *pFlag); BOOL WINAPI wglQueryFrameLockMasterI3D (BOOL *pFlag); #endif #endif /* WGL_I3D_swap_frame_lock */ #ifndef WGL_I3D_swap_frame_usage #define WGL_I3D_swap_frame_usage 1 typedef BOOL (WINAPI * PFNWGLGETFRAMEUSAGEI3DPROC) (float *pUsage); typedef BOOL (WINAPI * PFNWGLBEGINFRAMETRACKINGI3DPROC) (void); typedef BOOL (WINAPI * PFNWGLENDFRAMETRACKINGI3DPROC) (void); typedef BOOL (WINAPI * PFNWGLQUERYFRAMETRACKINGI3DPROC) (DWORD *pFrameCount, DWORD *pMissedFrames, float *pLastMissedUsage); #ifdef WGL_WGLEXT_PROTOTYPES BOOL WINAPI wglGetFrameUsageI3D (float *pUsage); BOOL WINAPI wglBeginFrameTrackingI3D (void); BOOL WINAPI wglEndFrameTrackingI3D (void); BOOL WINAPI wglQueryFrameTrackingI3D (DWORD *pFrameCount, DWORD *pMissedFrames, float *pLastMissedUsage); #endif #endif /* WGL_I3D_swap_frame_usage */ #ifndef WGL_NV_DX_interop #define WGL_NV_DX_interop 1 #define WGL_ACCESS_READ_ONLY_NV 0x00000000 #define WGL_ACCESS_READ_WRITE_NV 0x00000001 #define WGL_ACCESS_WRITE_DISCARD_NV 0x00000002 typedef BOOL (WINAPI * PFNWGLDXSETRESOURCESHAREHANDLENVPROC) (void *dxObject, HANDLE shareHandle); typedef HANDLE (WINAPI * PFNWGLDXOPENDEVICENVPROC) (void *dxDevice); typedef BOOL (WINAPI * PFNWGLDXCLOSEDEVICENVPROC) (HANDLE hDevice); typedef HANDLE (WINAPI * PFNWGLDXREGISTEROBJECTNVPROC) (HANDLE hDevice, void *dxObject, GLuint name, GLenum type, GLenum access); typedef BOOL (WINAPI * PFNWGLDXUNREGISTEROBJECTNVPROC) (HANDLE hDevice, HANDLE hObject); typedef BOOL (WINAPI * PFNWGLDXOBJECTACCESSNVPROC) (HANDLE hObject, GLenum access); typedef BOOL (WINAPI * PFNWGLDXLOCKOBJECTSNVPROC) (HANDLE hDevice, GLint count, HANDLE *hObjects); typedef BOOL (WINAPI * PFNWGLDXUNLOCKOBJECTSNVPROC) (HANDLE hDevice, GLint count, HANDLE *hObjects); #ifdef WGL_WGLEXT_PROTOTYPES BOOL WINAPI wglDXSetResourceShareHandleNV (void *dxObject, HANDLE shareHandle); HANDLE WINAPI wglDXOpenDeviceNV (void *dxDevice); BOOL WINAPI wglDXCloseDeviceNV (HANDLE hDevice); HANDLE WINAPI wglDXRegisterObjectNV (HANDLE hDevice, void *dxObject, GLuint name, GLenum type, GLenum access); BOOL WINAPI wglDXUnregisterObjectNV (HANDLE hDevice, HANDLE hObject); BOOL WINAPI wglDXObjectAccessNV (HANDLE hObject, GLenum access); BOOL WINAPI wglDXLockObjectsNV (HANDLE hDevice, GLint count, HANDLE *hObjects); BOOL WINAPI wglDXUnlockObjectsNV (HANDLE hDevice, GLint count, HANDLE *hObjects); #endif #endif /* WGL_NV_DX_interop */ #ifndef WGL_NV_DX_interop2 #define WGL_NV_DX_interop2 1 #endif /* WGL_NV_DX_interop2 */ #ifndef WGL_NV_copy_image #define WGL_NV_copy_image 1 typedef BOOL (WINAPI * PFNWGLCOPYIMAGESUBDATANVPROC) (HGLRC hSrcRC, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, HGLRC hDstRC, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); #ifdef WGL_WGLEXT_PROTOTYPES BOOL WINAPI wglCopyImageSubDataNV (HGLRC hSrcRC, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, HGLRC hDstRC, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); #endif #endif /* WGL_NV_copy_image */ #ifndef WGL_NV_delay_before_swap #define WGL_NV_delay_before_swap 1 typedef BOOL (WINAPI * PFNWGLDELAYBEFORESWAPNVPROC) (HDC hDC, GLfloat seconds); #ifdef WGL_WGLEXT_PROTOTYPES BOOL WINAPI wglDelayBeforeSwapNV (HDC hDC, GLfloat seconds); #endif #endif /* WGL_NV_delay_before_swap */ #ifndef WGL_NV_float_buffer #define WGL_NV_float_buffer 1 #define WGL_FLOAT_COMPONENTS_NV 0x20B0 #define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_R_NV 0x20B1 #define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RG_NV 0x20B2 #define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGB_NV 0x20B3 #define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGBA_NV 0x20B4 #define WGL_TEXTURE_FLOAT_R_NV 0x20B5 #define WGL_TEXTURE_FLOAT_RG_NV 0x20B6 #define WGL_TEXTURE_FLOAT_RGB_NV 0x20B7 #define WGL_TEXTURE_FLOAT_RGBA_NV 0x20B8 #endif /* WGL_NV_float_buffer */ #ifndef WGL_NV_gpu_affinity #define WGL_NV_gpu_affinity 1 DECLARE_HANDLE(HGPUNV); struct _GPU_DEVICE { DWORD cb; CHAR DeviceName[32]; CHAR DeviceString[128]; DWORD Flags; RECT rcVirtualScreen; }; typedef struct _GPU_DEVICE *PGPU_DEVICE; #define ERROR_INCOMPATIBLE_AFFINITY_MASKS_NV 0x20D0 #define ERROR_MISSING_AFFINITY_MASK_NV 0x20D1 typedef BOOL (WINAPI * PFNWGLENUMGPUSNVPROC) (UINT iGpuIndex, HGPUNV *phGpu); typedef BOOL (WINAPI * PFNWGLENUMGPUDEVICESNVPROC) (HGPUNV hGpu, UINT iDeviceIndex, PGPU_DEVICE lpGpuDevice); typedef HDC (WINAPI * PFNWGLCREATEAFFINITYDCNVPROC) (const HGPUNV *phGpuList); typedef BOOL (WINAPI * PFNWGLENUMGPUSFROMAFFINITYDCNVPROC) (HDC hAffinityDC, UINT iGpuIndex, HGPUNV *hGpu); typedef BOOL (WINAPI * PFNWGLDELETEDCNVPROC) (HDC hdc); #ifdef WGL_WGLEXT_PROTOTYPES BOOL WINAPI wglEnumGpusNV (UINT iGpuIndex, HGPUNV *phGpu); BOOL WINAPI wglEnumGpuDevicesNV (HGPUNV hGpu, UINT iDeviceIndex, PGPU_DEVICE lpGpuDevice); HDC WINAPI wglCreateAffinityDCNV (const HGPUNV *phGpuList); BOOL WINAPI wglEnumGpusFromAffinityDCNV (HDC hAffinityDC, UINT iGpuIndex, HGPUNV *hGpu); BOOL WINAPI wglDeleteDCNV (HDC hdc); #endif #endif /* WGL_NV_gpu_affinity */ #ifndef WGL_NV_multisample_coverage #define WGL_NV_multisample_coverage 1 #define WGL_COVERAGE_SAMPLES_NV 0x2042 #define WGL_COLOR_SAMPLES_NV 0x20B9 #endif /* WGL_NV_multisample_coverage */ #ifndef WGL_NV_present_video #define WGL_NV_present_video 1 DECLARE_HANDLE(HVIDEOOUTPUTDEVICENV); #define WGL_NUM_VIDEO_SLOTS_NV 0x20F0 typedef int (WINAPI * PFNWGLENUMERATEVIDEODEVICESNVPROC) (HDC hDC, HVIDEOOUTPUTDEVICENV *phDeviceList); typedef BOOL (WINAPI * PFNWGLBINDVIDEODEVICENVPROC) (HDC hDC, unsigned int uVideoSlot, HVIDEOOUTPUTDEVICENV hVideoDevice, const int *piAttribList); typedef BOOL (WINAPI * PFNWGLQUERYCURRENTCONTEXTNVPROC) (int iAttribute, int *piValue); #ifdef WGL_WGLEXT_PROTOTYPES int WINAPI wglEnumerateVideoDevicesNV (HDC hDC, HVIDEOOUTPUTDEVICENV *phDeviceList); BOOL WINAPI wglBindVideoDeviceNV (HDC hDC, unsigned int uVideoSlot, HVIDEOOUTPUTDEVICENV hVideoDevice, const int *piAttribList); BOOL WINAPI wglQueryCurrentContextNV (int iAttribute, int *piValue); #endif #endif /* WGL_NV_present_video */ #ifndef WGL_NV_render_depth_texture #define WGL_NV_render_depth_texture 1 #define WGL_BIND_TO_TEXTURE_DEPTH_NV 0x20A3 #define WGL_BIND_TO_TEXTURE_RECTANGLE_DEPTH_NV 0x20A4 #define WGL_DEPTH_TEXTURE_FORMAT_NV 0x20A5 #define WGL_TEXTURE_DEPTH_COMPONENT_NV 0x20A6 #define WGL_DEPTH_COMPONENT_NV 0x20A7 #endif /* WGL_NV_render_depth_texture */ #ifndef WGL_NV_render_texture_rectangle #define WGL_NV_render_texture_rectangle 1 #define WGL_BIND_TO_TEXTURE_RECTANGLE_RGB_NV 0x20A0 #define WGL_BIND_TO_TEXTURE_RECTANGLE_RGBA_NV 0x20A1 #define WGL_TEXTURE_RECTANGLE_NV 0x20A2 #endif /* WGL_NV_render_texture_rectangle */ #ifndef WGL_NV_swap_group #define WGL_NV_swap_group 1 typedef BOOL (WINAPI * PFNWGLJOINSWAPGROUPNVPROC) (HDC hDC, GLuint group); typedef BOOL (WINAPI * PFNWGLBINDSWAPBARRIERNVPROC) (GLuint group, GLuint barrier); typedef BOOL (WINAPI * PFNWGLQUERYSWAPGROUPNVPROC) (HDC hDC, GLuint *group, GLuint *barrier); typedef BOOL (WINAPI * PFNWGLQUERYMAXSWAPGROUPSNVPROC) (HDC hDC, GLuint *maxGroups, GLuint *maxBarriers); typedef BOOL (WINAPI * PFNWGLQUERYFRAMECOUNTNVPROC) (HDC hDC, GLuint *count); typedef BOOL (WINAPI * PFNWGLRESETFRAMECOUNTNVPROC) (HDC hDC); #ifdef WGL_WGLEXT_PROTOTYPES BOOL WINAPI wglJoinSwapGroupNV (HDC hDC, GLuint group); BOOL WINAPI wglBindSwapBarrierNV (GLuint group, GLuint barrier); BOOL WINAPI wglQuerySwapGroupNV (HDC hDC, GLuint *group, GLuint *barrier); BOOL WINAPI wglQueryMaxSwapGroupsNV (HDC hDC, GLuint *maxGroups, GLuint *maxBarriers); BOOL WINAPI wglQueryFrameCountNV (HDC hDC, GLuint *count); BOOL WINAPI wglResetFrameCountNV (HDC hDC); #endif #endif /* WGL_NV_swap_group */ #ifndef WGL_NV_vertex_array_range #define WGL_NV_vertex_array_range 1 typedef void *(WINAPI * PFNWGLALLOCATEMEMORYNVPROC) (GLsizei size, GLfloat readfreq, GLfloat writefreq, GLfloat priority); typedef void (WINAPI * PFNWGLFREEMEMORYNVPROC) (void *pointer); #ifdef WGL_WGLEXT_PROTOTYPES void *WINAPI wglAllocateMemoryNV (GLsizei size, GLfloat readfreq, GLfloat writefreq, GLfloat priority); void WINAPI wglFreeMemoryNV (void *pointer); #endif #endif /* WGL_NV_vertex_array_range */ #ifndef WGL_NV_video_capture #define WGL_NV_video_capture 1 DECLARE_HANDLE(HVIDEOINPUTDEVICENV); #define WGL_UNIQUE_ID_NV 0x20CE #define WGL_NUM_VIDEO_CAPTURE_SLOTS_NV 0x20CF typedef BOOL (WINAPI * PFNWGLBINDVIDEOCAPTUREDEVICENVPROC) (UINT uVideoSlot, HVIDEOINPUTDEVICENV hDevice); typedef UINT (WINAPI * PFNWGLENUMERATEVIDEOCAPTUREDEVICESNVPROC) (HDC hDc, HVIDEOINPUTDEVICENV *phDeviceList); typedef BOOL (WINAPI * PFNWGLLOCKVIDEOCAPTUREDEVICENVPROC) (HDC hDc, HVIDEOINPUTDEVICENV hDevice); typedef BOOL (WINAPI * PFNWGLQUERYVIDEOCAPTUREDEVICENVPROC) (HDC hDc, HVIDEOINPUTDEVICENV hDevice, int iAttribute, int *piValue); typedef BOOL (WINAPI * PFNWGLRELEASEVIDEOCAPTUREDEVICENVPROC) (HDC hDc, HVIDEOINPUTDEVICENV hDevice); #ifdef WGL_WGLEXT_PROTOTYPES BOOL WINAPI wglBindVideoCaptureDeviceNV (UINT uVideoSlot, HVIDEOINPUTDEVICENV hDevice); UINT WINAPI wglEnumerateVideoCaptureDevicesNV (HDC hDc, HVIDEOINPUTDEVICENV *phDeviceList); BOOL WINAPI wglLockVideoCaptureDeviceNV (HDC hDc, HVIDEOINPUTDEVICENV hDevice); BOOL WINAPI wglQueryVideoCaptureDeviceNV (HDC hDc, HVIDEOINPUTDEVICENV hDevice, int iAttribute, int *piValue); BOOL WINAPI wglReleaseVideoCaptureDeviceNV (HDC hDc, HVIDEOINPUTDEVICENV hDevice); #endif #endif /* WGL_NV_video_capture */ #ifndef WGL_NV_video_output #define WGL_NV_video_output 1 DECLARE_HANDLE(HPVIDEODEV); #define WGL_BIND_TO_VIDEO_RGB_NV 0x20C0 #define WGL_BIND_TO_VIDEO_RGBA_NV 0x20C1 #define WGL_BIND_TO_VIDEO_RGB_AND_DEPTH_NV 0x20C2 #define WGL_VIDEO_OUT_COLOR_NV 0x20C3 #define WGL_VIDEO_OUT_ALPHA_NV 0x20C4 #define WGL_VIDEO_OUT_DEPTH_NV 0x20C5 #define WGL_VIDEO_OUT_COLOR_AND_ALPHA_NV 0x20C6 #define WGL_VIDEO_OUT_COLOR_AND_DEPTH_NV 0x20C7 #define WGL_VIDEO_OUT_FRAME 0x20C8 #define WGL_VIDEO_OUT_FIELD_1 0x20C9 #define WGL_VIDEO_OUT_FIELD_2 0x20CA #define WGL_VIDEO_OUT_STACKED_FIELDS_1_2 0x20CB #define WGL_VIDEO_OUT_STACKED_FIELDS_2_1 0x20CC typedef BOOL (WINAPI * PFNWGLGETVIDEODEVICENVPROC) (HDC hDC, int numDevices, HPVIDEODEV *hVideoDevice); typedef BOOL (WINAPI * PFNWGLRELEASEVIDEODEVICENVPROC) (HPVIDEODEV hVideoDevice); typedef BOOL (WINAPI * PFNWGLBINDVIDEOIMAGENVPROC) (HPVIDEODEV hVideoDevice, HPBUFFERARB hPbuffer, int iVideoBuffer); typedef BOOL (WINAPI * PFNWGLRELEASEVIDEOIMAGENVPROC) (HPBUFFERARB hPbuffer, int iVideoBuffer); typedef BOOL (WINAPI * PFNWGLSENDPBUFFERTOVIDEONVPROC) (HPBUFFERARB hPbuffer, int iBufferType, unsigned long *pulCounterPbuffer, BOOL bBlock); typedef BOOL (WINAPI * PFNWGLGETVIDEOINFONVPROC) (HPVIDEODEV hpVideoDevice, unsigned long *pulCounterOutputPbuffer, unsigned long *pulCounterOutputVideo); #ifdef WGL_WGLEXT_PROTOTYPES BOOL WINAPI wglGetVideoDeviceNV (HDC hDC, int numDevices, HPVIDEODEV *hVideoDevice); BOOL WINAPI wglReleaseVideoDeviceNV (HPVIDEODEV hVideoDevice); BOOL WINAPI wglBindVideoImageNV (HPVIDEODEV hVideoDevice, HPBUFFERARB hPbuffer, int iVideoBuffer); BOOL WINAPI wglReleaseVideoImageNV (HPBUFFERARB hPbuffer, int iVideoBuffer); BOOL WINAPI wglSendPbufferToVideoNV (HPBUFFERARB hPbuffer, int iBufferType, unsigned long *pulCounterPbuffer, BOOL bBlock); BOOL WINAPI wglGetVideoInfoNV (HPVIDEODEV hpVideoDevice, unsigned long *pulCounterOutputPbuffer, unsigned long *pulCounterOutputVideo); #endif #endif /* WGL_NV_video_output */ #ifndef WGL_OML_sync_control #define WGL_OML_sync_control 1 typedef BOOL (WINAPI * PFNWGLGETSYNCVALUESOMLPROC) (HDC hdc, INT64 *ust, INT64 *msc, INT64 *sbc); typedef BOOL (WINAPI * PFNWGLGETMSCRATEOMLPROC) (HDC hdc, INT32 *numerator, INT32 *denominator); typedef INT64 (WINAPI * PFNWGLSWAPBUFFERSMSCOMLPROC) (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder); typedef INT64 (WINAPI * PFNWGLSWAPLAYERBUFFERSMSCOMLPROC) (HDC hdc, int fuPlanes, INT64 target_msc, INT64 divisor, INT64 remainder); typedef BOOL (WINAPI * PFNWGLWAITFORMSCOMLPROC) (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder, INT64 *ust, INT64 *msc, INT64 *sbc); typedef BOOL (WINAPI * PFNWGLWAITFORSBCOMLPROC) (HDC hdc, INT64 target_sbc, INT64 *ust, INT64 *msc, INT64 *sbc); #ifdef WGL_WGLEXT_PROTOTYPES BOOL WINAPI wglGetSyncValuesOML (HDC hdc, INT64 *ust, INT64 *msc, INT64 *sbc); BOOL WINAPI wglGetMscRateOML (HDC hdc, INT32 *numerator, INT32 *denominator); INT64 WINAPI wglSwapBuffersMscOML (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder); INT64 WINAPI wglSwapLayerBuffersMscOML (HDC hdc, int fuPlanes, INT64 target_msc, INT64 divisor, INT64 remainder); BOOL WINAPI wglWaitForMscOML (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder, INT64 *ust, INT64 *msc, INT64 *sbc); BOOL WINAPI wglWaitForSbcOML (HDC hdc, INT64 target_sbc, INT64 *ust, INT64 *msc, INT64 *sbc); #endif #endif /* WGL_OML_sync_control */ #ifdef __cplusplus } #endif #endif ================================================ FILE: Include/gl.h ================================================ /* * Mesa 3-D graphics library * Version: 4.0 * * Copyright (C) 1999-2001 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /************************************************************************ * 2002-Apr-22, Jos Fonseca: * Removed non Win32 system-specific stuff * * 2002-Apr-17, Marcus Geelnard: * For win32, OpenGL 1.2 & 1.3 definitions are not made in this file * anymore, since under Windows those are regarded as extensions, and * are better defined in glext.h (especially the function prototypes may * conflict with extension function pointers). A few "cosmetical" * changes were also made to this file. * * 2002-Apr-15, Marcus Geelnard: * Modified this file to better fit a wider range of compilers, removed * Mesa specific stuff, and removed extension definitions (this file now * relies on GL/glext.h). Hopefully this file should now function as a * generic OpenGL gl.h include file for most compilers and environments. * Changed GLAPIENTRY to APIENTRY (to be consistent with GL/glext.h). ************************************************************************/ #ifndef __gl_h_ #define __gl_h_ /************************************************************************ * Begin system-specific stuff. */ /* __WIN32__ */ #if !defined(__WIN32__) && (defined(_WIN32) || defined(WIN32) || defined(__CYGWIN__)) # define __WIN32__ #endif /* GLAPI, part 1 (use WINGDIAPI, if defined) */ #if defined(__WIN32__) && defined(WINGDIAPI) # define GLAPI WINGDIAPI #endif /* GLAPI, part 2 */ #if !defined(GLAPI) # if defined(_MSC_VER) /* Microsoft Visual C++ */ # define GLAPI __declspec(dllimport) # elif defined(__LCC__) && defined(__WIN32__) /* LCC-Win32 */ # define GLAPI __stdcall # else /* Others (e.g. MinGW, Cygwin, non-win32) */ # define GLAPI extern # endif #endif /* APIENTRY */ #if !defined(APIENTRY) # if defined(__WIN32__) # define APIENTRY __stdcall # else # define APIENTRY # endif #endif /* * End system-specific stuff. ************************************************************************/ #ifdef __cplusplus extern "C" { #endif #define GL_VERSION_1_1 1 #if !defined(__WIN32__) #define GL_VERSION_1_2 1 #define GL_VERSION_1_3 1 #define GL_ARB_imaging 1 #endif /* * * Datatypes * */ #ifdef CENTERLINE_CLPP #define signed #endif typedef unsigned int GLenum; typedef unsigned char GLboolean; typedef unsigned int GLbitfield; typedef void GLvoid; typedef signed char GLbyte; /* 1-byte signed */ typedef short GLshort; /* 2-byte signed */ typedef int GLint; /* 4-byte signed */ typedef unsigned char GLubyte; /* 1-byte unsigned */ typedef unsigned short GLushort; /* 2-byte unsigned */ typedef unsigned int GLuint; /* 4-byte unsigned */ typedef int GLsizei; /* 4-byte signed */ typedef float GLfloat; /* single precision float */ typedef float GLclampf; /* single precision float in [0,1] */ typedef double GLdouble; /* double precision float */ typedef double GLclampd; /* double precision float in [0,1] */ /************************************************************************ * * Constants * ************************************************************************/ /* Boolean values */ #define GL_FALSE 0x0 #define GL_TRUE 0x1 /* Data types */ #define GL_BYTE 0x1400 #define GL_UNSIGNED_BYTE 0x1401 #define GL_SHORT 0x1402 #define GL_UNSIGNED_SHORT 0x1403 #define GL_INT 0x1404 #define GL_UNSIGNED_INT 0x1405 #define GL_FLOAT 0x1406 #define GL_DOUBLE 0x140A #define GL_2_BYTES 0x1407 #define GL_3_BYTES 0x1408 #define GL_4_BYTES 0x1409 /* Primitives */ #define GL_POINTS 0x0000 #define GL_LINES 0x0001 #define GL_LINE_LOOP 0x0002 #define GL_LINE_STRIP 0x0003 #define GL_TRIANGLES 0x0004 #define GL_TRIANGLE_STRIP 0x0005 #define GL_TRIANGLE_FAN 0x0006 #define GL_QUADS 0x0007 #define GL_QUAD_STRIP 0x0008 #define GL_POLYGON 0x0009 /* Vertex Arrays */ #define GL_VERTEX_ARRAY 0x8074 #define GL_NORMAL_ARRAY 0x8075 #define GL_COLOR_ARRAY 0x8076 #define GL_INDEX_ARRAY 0x8077 #define GL_TEXTURE_COORD_ARRAY 0x8078 #define GL_EDGE_FLAG_ARRAY 0x8079 #define GL_VERTEX_ARRAY_SIZE 0x807A #define GL_VERTEX_ARRAY_TYPE 0x807B #define GL_VERTEX_ARRAY_STRIDE 0x807C #define GL_NORMAL_ARRAY_TYPE 0x807E #define GL_NORMAL_ARRAY_STRIDE 0x807F #define GL_COLOR_ARRAY_SIZE 0x8081 #define GL_COLOR_ARRAY_TYPE 0x8082 #define GL_COLOR_ARRAY_STRIDE 0x8083 #define GL_INDEX_ARRAY_TYPE 0x8085 #define GL_INDEX_ARRAY_STRIDE 0x8086 #define GL_TEXTURE_COORD_ARRAY_SIZE 0x8088 #define GL_TEXTURE_COORD_ARRAY_TYPE 0x8089 #define GL_TEXTURE_COORD_ARRAY_STRIDE 0x808A #define GL_EDGE_FLAG_ARRAY_STRIDE 0x808C #define GL_VERTEX_ARRAY_POINTER 0x808E #define GL_NORMAL_ARRAY_POINTER 0x808F #define GL_COLOR_ARRAY_POINTER 0x8090 #define GL_INDEX_ARRAY_POINTER 0x8091 #define GL_TEXTURE_COORD_ARRAY_POINTER 0x8092 #define GL_EDGE_FLAG_ARRAY_POINTER 0x8093 #define GL_V2F 0x2A20 #define GL_V3F 0x2A21 #define GL_C4UB_V2F 0x2A22 #define GL_C4UB_V3F 0x2A23 #define GL_C3F_V3F 0x2A24 #define GL_N3F_V3F 0x2A25 #define GL_C4F_N3F_V3F 0x2A26 #define GL_T2F_V3F 0x2A27 #define GL_T4F_V4F 0x2A28 #define GL_T2F_C4UB_V3F 0x2A29 #define GL_T2F_C3F_V3F 0x2A2A #define GL_T2F_N3F_V3F 0x2A2B #define GL_T2F_C4F_N3F_V3F 0x2A2C #define GL_T4F_C4F_N3F_V4F 0x2A2D /* Matrix Mode */ #define GL_MATRIX_MODE 0x0BA0 #define GL_MODELVIEW 0x1700 #define GL_PROJECTION 0x1701 #define GL_TEXTURE 0x1702 /* Points */ #define GL_POINT_SMOOTH 0x0B10 #define GL_POINT_SIZE 0x0B11 #define GL_POINT_SIZE_GRANULARITY 0x0B13 #define GL_POINT_SIZE_RANGE 0x0B12 /* Lines */ #define GL_LINE_SMOOTH 0x0B20 #define GL_LINE_STIPPLE 0x0B24 #define GL_LINE_STIPPLE_PATTERN 0x0B25 #define GL_LINE_STIPPLE_REPEAT 0x0B26 #define GL_LINE_WIDTH 0x0B21 #define GL_LINE_WIDTH_GRANULARITY 0x0B23 #define GL_LINE_WIDTH_RANGE 0x0B22 /* Polygons */ #define GL_POINT 0x1B00 #define GL_LINE 0x1B01 #define GL_FILL 0x1B02 #define GL_CW 0x0900 #define GL_CCW 0x0901 #define GL_FRONT 0x0404 #define GL_BACK 0x0405 #define GL_POLYGON_MODE 0x0B40 #define GL_POLYGON_SMOOTH 0x0B41 #define GL_POLYGON_STIPPLE 0x0B42 #define GL_EDGE_FLAG 0x0B43 #define GL_CULL_FACE 0x0B44 #define GL_CULL_FACE_MODE 0x0B45 #define GL_FRONT_FACE 0x0B46 #define GL_POLYGON_OFFSET_FACTOR 0x8038 #define GL_POLYGON_OFFSET_UNITS 0x2A00 #define GL_POLYGON_OFFSET_POINT 0x2A01 #define GL_POLYGON_OFFSET_LINE 0x2A02 #define GL_POLYGON_OFFSET_FILL 0x8037 /* Display Lists */ #define GL_COMPILE 0x1300 #define GL_COMPILE_AND_EXECUTE 0x1301 #define GL_LIST_BASE 0x0B32 #define GL_LIST_INDEX 0x0B33 #define GL_LIST_MODE 0x0B30 /* Depth buffer */ #define GL_NEVER 0x0200 #define GL_LESS 0x0201 #define GL_EQUAL 0x0202 #define GL_LEQUAL 0x0203 #define GL_GREATER 0x0204 #define GL_NOTEQUAL 0x0205 #define GL_GEQUAL 0x0206 #define GL_ALWAYS 0x0207 #define GL_DEPTH_TEST 0x0B71 #define GL_DEPTH_BITS 0x0D56 #define GL_DEPTH_CLEAR_VALUE 0x0B73 #define GL_DEPTH_FUNC 0x0B74 #define GL_DEPTH_RANGE 0x0B70 #define GL_DEPTH_WRITEMASK 0x0B72 #define GL_DEPTH_COMPONENT 0x1902 /* Lighting */ #define GL_LIGHTING 0x0B50 #define GL_LIGHT0 0x4000 #define GL_LIGHT1 0x4001 #define GL_LIGHT2 0x4002 #define GL_LIGHT3 0x4003 #define GL_LIGHT4 0x4004 #define GL_LIGHT5 0x4005 #define GL_LIGHT6 0x4006 #define GL_LIGHT7 0x4007 #define GL_SPOT_EXPONENT 0x1205 #define GL_SPOT_CUTOFF 0x1206 #define GL_CONSTANT_ATTENUATION 0x1207 #define GL_LINEAR_ATTENUATION 0x1208 #define GL_QUADRATIC_ATTENUATION 0x1209 #define GL_AMBIENT 0x1200 #define GL_DIFFUSE 0x1201 #define GL_SPECULAR 0x1202 #define GL_SHININESS 0x1601 #define GL_EMISSION 0x1600 #define GL_POSITION 0x1203 #define GL_SPOT_DIRECTION 0x1204 #define GL_AMBIENT_AND_DIFFUSE 0x1602 #define GL_COLOR_INDEXES 0x1603 #define GL_LIGHT_MODEL_TWO_SIDE 0x0B52 #define GL_LIGHT_MODEL_LOCAL_VIEWER 0x0B51 #define GL_LIGHT_MODEL_AMBIENT 0x0B53 #define GL_FRONT_AND_BACK 0x0408 #define GL_SHADE_MODEL 0x0B54 #define GL_FLAT 0x1D00 #define GL_SMOOTH 0x1D01 #define GL_COLOR_MATERIAL 0x0B57 #define GL_COLOR_MATERIAL_FACE 0x0B55 #define GL_COLOR_MATERIAL_PARAMETER 0x0B56 #define GL_NORMALIZE 0x0BA1 /* User clipping planes */ #define GL_CLIP_PLANE0 0x3000 #define GL_CLIP_PLANE1 0x3001 #define GL_CLIP_PLANE2 0x3002 #define GL_CLIP_PLANE3 0x3003 #define GL_CLIP_PLANE4 0x3004 #define GL_CLIP_PLANE5 0x3005 /* Accumulation buffer */ #define GL_ACCUM_RED_BITS 0x0D58 #define GL_ACCUM_GREEN_BITS 0x0D59 #define GL_ACCUM_BLUE_BITS 0x0D5A #define GL_ACCUM_ALPHA_BITS 0x0D5B #define GL_ACCUM_CLEAR_VALUE 0x0B80 #define GL_ACCUM 0x0100 #define GL_ADD 0x0104 #define GL_LOAD 0x0101 #define GL_MULT 0x0103 #define GL_RETURN 0x0102 /* Alpha testing */ #define GL_ALPHA_TEST 0x0BC0 #define GL_ALPHA_TEST_REF 0x0BC2 #define GL_ALPHA_TEST_FUNC 0x0BC1 /* Blending */ #define GL_BLEND 0x0BE2 #define GL_BLEND_SRC 0x0BE1 #define GL_BLEND_DST 0x0BE0 #define GL_ZERO 0x0 #define GL_ONE 0x1 #define GL_SRC_COLOR 0x0300 #define GL_ONE_MINUS_SRC_COLOR 0x0301 #define GL_SRC_ALPHA 0x0302 #define GL_ONE_MINUS_SRC_ALPHA 0x0303 #define GL_DST_ALPHA 0x0304 #define GL_ONE_MINUS_DST_ALPHA 0x0305 #define GL_DST_COLOR 0x0306 #define GL_ONE_MINUS_DST_COLOR 0x0307 #define GL_SRC_ALPHA_SATURATE 0x0308 #define GL_CONSTANT_COLOR 0x8001 #define GL_ONE_MINUS_CONSTANT_COLOR 0x8002 #define GL_CONSTANT_ALPHA 0x8003 #define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 /* Render Mode */ #define GL_FEEDBACK 0x1C01 #define GL_RENDER 0x1C00 #define GL_SELECT 0x1C02 /* Feedback */ #define GL_2D 0x0600 #define GL_3D 0x0601 #define GL_3D_COLOR 0x0602 #define GL_3D_COLOR_TEXTURE 0x0603 #define GL_4D_COLOR_TEXTURE 0x0604 #define GL_POINT_TOKEN 0x0701 #define GL_LINE_TOKEN 0x0702 #define GL_LINE_RESET_TOKEN 0x0707 #define GL_POLYGON_TOKEN 0x0703 #define GL_BITMAP_TOKEN 0x0704 #define GL_DRAW_PIXEL_TOKEN 0x0705 #define GL_COPY_PIXEL_TOKEN 0x0706 #define GL_PASS_THROUGH_TOKEN 0x0700 #define GL_FEEDBACK_BUFFER_POINTER 0x0DF0 #define GL_FEEDBACK_BUFFER_SIZE 0x0DF1 #define GL_FEEDBACK_BUFFER_TYPE 0x0DF2 /* Selection */ #define GL_SELECTION_BUFFER_POINTER 0x0DF3 #define GL_SELECTION_BUFFER_SIZE 0x0DF4 /* Fog */ #define GL_FOG 0x0B60 #define GL_FOG_MODE 0x0B65 #define GL_FOG_DENSITY 0x0B62 #define GL_FOG_COLOR 0x0B66 #define GL_FOG_INDEX 0x0B61 #define GL_FOG_START 0x0B63 #define GL_FOG_END 0x0B64 #define GL_LINEAR 0x2601 #define GL_EXP 0x0800 #define GL_EXP2 0x0801 /* Logic Ops */ #define GL_LOGIC_OP 0x0BF1 #define GL_INDEX_LOGIC_OP 0x0BF1 #define GL_COLOR_LOGIC_OP 0x0BF2 #define GL_LOGIC_OP_MODE 0x0BF0 #define GL_CLEAR 0x1500 #define GL_SET 0x150F #define GL_COPY 0x1503 #define GL_COPY_INVERTED 0x150C #define GL_NOOP 0x1505 #define GL_INVERT 0x150A #define GL_AND 0x1501 #define GL_NAND 0x150E #define GL_OR 0x1507 #define GL_NOR 0x1508 #define GL_XOR 0x1506 #define GL_EQUIV 0x1509 #define GL_AND_REVERSE 0x1502 #define GL_AND_INVERTED 0x1504 #define GL_OR_REVERSE 0x150B #define GL_OR_INVERTED 0x150D /* Stencil */ #define GL_STENCIL_TEST 0x0B90 #define GL_STENCIL_WRITEMASK 0x0B98 #define GL_STENCIL_BITS 0x0D57 #define GL_STENCIL_FUNC 0x0B92 #define GL_STENCIL_VALUE_MASK 0x0B93 #define GL_STENCIL_REF 0x0B97 #define GL_STENCIL_FAIL 0x0B94 #define GL_STENCIL_PASS_DEPTH_PASS 0x0B96 #define GL_STENCIL_PASS_DEPTH_FAIL 0x0B95 #define GL_STENCIL_CLEAR_VALUE 0x0B91 #define GL_STENCIL_INDEX 0x1901 #define GL_KEEP 0x1E00 #define GL_REPLACE 0x1E01 #define GL_INCR 0x1E02 #define GL_DECR 0x1E03 /* Buffers, Pixel Drawing/Reading */ #define GL_NONE 0x0 #define GL_LEFT 0x0406 #define GL_RIGHT 0x0407 /*GL_FRONT 0x0404 */ /*GL_BACK 0x0405 */ /*GL_FRONT_AND_BACK 0x0408 */ #define GL_FRONT_LEFT 0x0400 #define GL_FRONT_RIGHT 0x0401 #define GL_BACK_LEFT 0x0402 #define GL_BACK_RIGHT 0x0403 #define GL_AUX0 0x0409 #define GL_AUX1 0x040A #define GL_AUX2 0x040B #define GL_AUX3 0x040C #define GL_COLOR_INDEX 0x1900 #define GL_RED 0x1903 #define GL_GREEN 0x1904 #define GL_BLUE 0x1905 #define GL_ALPHA 0x1906 #define GL_LUMINANCE 0x1909 #define GL_LUMINANCE_ALPHA 0x190A #define GL_ALPHA_BITS 0x0D55 #define GL_RED_BITS 0x0D52 #define GL_GREEN_BITS 0x0D53 #define GL_BLUE_BITS 0x0D54 #define GL_INDEX_BITS 0x0D51 #define GL_SUBPIXEL_BITS 0x0D50 #define GL_AUX_BUFFERS 0x0C00 #define GL_READ_BUFFER 0x0C02 #define GL_DRAW_BUFFER 0x0C01 #define GL_DOUBLEBUFFER 0x0C32 #define GL_STEREO 0x0C33 #define GL_BITMAP 0x1A00 #define GL_COLOR 0x1800 #define GL_DEPTH 0x1801 #define GL_STENCIL 0x1802 #define GL_DITHER 0x0BD0 #define GL_RGB 0x1907 #define GL_RGBA 0x1908 /* Implementation limits */ #define GL_MAX_LIST_NESTING 0x0B31 #define GL_MAX_ATTRIB_STACK_DEPTH 0x0D35 #define GL_MAX_MODELVIEW_STACK_DEPTH 0x0D36 #define GL_MAX_NAME_STACK_DEPTH 0x0D37 #define GL_MAX_PROJECTION_STACK_DEPTH 0x0D38 #define GL_MAX_TEXTURE_STACK_DEPTH 0x0D39 #define GL_MAX_EVAL_ORDER 0x0D30 #define GL_MAX_LIGHTS 0x0D31 #define GL_MAX_CLIP_PLANES 0x0D32 #define GL_MAX_TEXTURE_SIZE 0x0D33 #define GL_MAX_PIXEL_MAP_TABLE 0x0D34 #define GL_MAX_VIEWPORT_DIMS 0x0D3A #define GL_MAX_CLIENT_ATTRIB_STACK_DEPTH 0x0D3B /* Gets */ #define GL_ATTRIB_STACK_DEPTH 0x0BB0 #define GL_CLIENT_ATTRIB_STACK_DEPTH 0x0BB1 #define GL_COLOR_CLEAR_VALUE 0x0C22 #define GL_COLOR_WRITEMASK 0x0C23 #define GL_CURRENT_INDEX 0x0B01 #define GL_CURRENT_COLOR 0x0B00 #define GL_CURRENT_NORMAL 0x0B02 #define GL_CURRENT_RASTER_COLOR 0x0B04 #define GL_CURRENT_RASTER_DISTANCE 0x0B09 #define GL_CURRENT_RASTER_INDEX 0x0B05 #define GL_CURRENT_RASTER_POSITION 0x0B07 #define GL_CURRENT_RASTER_TEXTURE_COORDS 0x0B06 #define GL_CURRENT_RASTER_POSITION_VALID 0x0B08 #define GL_CURRENT_TEXTURE_COORDS 0x0B03 #define GL_INDEX_CLEAR_VALUE 0x0C20 #define GL_INDEX_MODE 0x0C30 #define GL_INDEX_WRITEMASK 0x0C21 #define GL_MODELVIEW_MATRIX 0x0BA6 #define GL_MODELVIEW_STACK_DEPTH 0x0BA3 #define GL_NAME_STACK_DEPTH 0x0D70 #define GL_PROJECTION_MATRIX 0x0BA7 #define GL_PROJECTION_STACK_DEPTH 0x0BA4 #define GL_RENDER_MODE 0x0C40 #define GL_RGBA_MODE 0x0C31 #define GL_TEXTURE_MATRIX 0x0BA8 #define GL_TEXTURE_STACK_DEPTH 0x0BA5 #define GL_VIEWPORT 0x0BA2 /* Evaluators */ #define GL_AUTO_NORMAL 0x0D80 #define GL_MAP1_COLOR_4 0x0D90 #define GL_MAP1_GRID_DOMAIN 0x0DD0 #define GL_MAP1_GRID_SEGMENTS 0x0DD1 #define GL_MAP1_INDEX 0x0D91 #define GL_MAP1_NORMAL 0x0D92 #define GL_MAP1_TEXTURE_COORD_1 0x0D93 #define GL_MAP1_TEXTURE_COORD_2 0x0D94 #define GL_MAP1_TEXTURE_COORD_3 0x0D95 #define GL_MAP1_TEXTURE_COORD_4 0x0D96 #define GL_MAP1_VERTEX_3 0x0D97 #define GL_MAP1_VERTEX_4 0x0D98 #define GL_MAP2_COLOR_4 0x0DB0 #define GL_MAP2_GRID_DOMAIN 0x0DD2 #define GL_MAP2_GRID_SEGMENTS 0x0DD3 #define GL_MAP2_INDEX 0x0DB1 #define GL_MAP2_NORMAL 0x0DB2 #define GL_MAP2_TEXTURE_COORD_1 0x0DB3 #define GL_MAP2_TEXTURE_COORD_2 0x0DB4 #define GL_MAP2_TEXTURE_COORD_3 0x0DB5 #define GL_MAP2_TEXTURE_COORD_4 0x0DB6 #define GL_MAP2_VERTEX_3 0x0DB7 #define GL_MAP2_VERTEX_4 0x0DB8 #define GL_COEFF 0x0A00 #define GL_DOMAIN 0x0A02 #define GL_ORDER 0x0A01 /* Hints */ #define GL_FOG_HINT 0x0C54 #define GL_LINE_SMOOTH_HINT 0x0C52 #define GL_PERSPECTIVE_CORRECTION_HINT 0x0C50 #define GL_POINT_SMOOTH_HINT 0x0C51 #define GL_POLYGON_SMOOTH_HINT 0x0C53 #define GL_DONT_CARE 0x1100 #define GL_FASTEST 0x1101 #define GL_NICEST 0x1102 /* Scissor box */ #define GL_SCISSOR_TEST 0x0C11 #define GL_SCISSOR_BOX 0x0C10 /* Pixel Mode / Transfer */ #define GL_MAP_COLOR 0x0D10 #define GL_MAP_STENCIL 0x0D11 #define GL_INDEX_SHIFT 0x0D12 #define GL_INDEX_OFFSET 0x0D13 #define GL_RED_SCALE 0x0D14 #define GL_RED_BIAS 0x0D15 #define GL_GREEN_SCALE 0x0D18 #define GL_GREEN_BIAS 0x0D19 #define GL_BLUE_SCALE 0x0D1A #define GL_BLUE_BIAS 0x0D1B #define GL_ALPHA_SCALE 0x0D1C #define GL_ALPHA_BIAS 0x0D1D #define GL_DEPTH_SCALE 0x0D1E #define GL_DEPTH_BIAS 0x0D1F #define GL_PIXEL_MAP_S_TO_S_SIZE 0x0CB1 #define GL_PIXEL_MAP_I_TO_I_SIZE 0x0CB0 #define GL_PIXEL_MAP_I_TO_R_SIZE 0x0CB2 #define GL_PIXEL_MAP_I_TO_G_SIZE 0x0CB3 #define GL_PIXEL_MAP_I_TO_B_SIZE 0x0CB4 #define GL_PIXEL_MAP_I_TO_A_SIZE 0x0CB5 #define GL_PIXEL_MAP_R_TO_R_SIZE 0x0CB6 #define GL_PIXEL_MAP_G_TO_G_SIZE 0x0CB7 #define GL_PIXEL_MAP_B_TO_B_SIZE 0x0CB8 #define GL_PIXEL_MAP_A_TO_A_SIZE 0x0CB9 #define GL_PIXEL_MAP_S_TO_S 0x0C71 #define GL_PIXEL_MAP_I_TO_I 0x0C70 #define GL_PIXEL_MAP_I_TO_R 0x0C72 #define GL_PIXEL_MAP_I_TO_G 0x0C73 #define GL_PIXEL_MAP_I_TO_B 0x0C74 #define GL_PIXEL_MAP_I_TO_A 0x0C75 #define GL_PIXEL_MAP_R_TO_R 0x0C76 #define GL_PIXEL_MAP_G_TO_G 0x0C77 #define GL_PIXEL_MAP_B_TO_B 0x0C78 #define GL_PIXEL_MAP_A_TO_A 0x0C79 #define GL_PACK_ALIGNMENT 0x0D05 #define GL_PACK_LSB_FIRST 0x0D01 #define GL_PACK_ROW_LENGTH 0x0D02 #define GL_PACK_SKIP_PIXELS 0x0D04 #define GL_PACK_SKIP_ROWS 0x0D03 #define GL_PACK_SWAP_BYTES 0x0D00 #define GL_UNPACK_ALIGNMENT 0x0CF5 #define GL_UNPACK_LSB_FIRST 0x0CF1 #define GL_UNPACK_ROW_LENGTH 0x0CF2 #define GL_UNPACK_SKIP_PIXELS 0x0CF4 #define GL_UNPACK_SKIP_ROWS 0x0CF3 #define GL_UNPACK_SWAP_BYTES 0x0CF0 #define GL_ZOOM_X 0x0D16 #define GL_ZOOM_Y 0x0D17 /* Texture mapping */ #define GL_TEXTURE_ENV 0x2300 #define GL_TEXTURE_ENV_MODE 0x2200 #define GL_TEXTURE_1D 0x0DE0 #define GL_TEXTURE_2D 0x0DE1 #define GL_TEXTURE_WRAP_S 0x2802 #define GL_TEXTURE_WRAP_T 0x2803 #define GL_TEXTURE_MAG_FILTER 0x2800 #define GL_TEXTURE_MIN_FILTER 0x2801 #define GL_TEXTURE_ENV_COLOR 0x2201 #define GL_TEXTURE_GEN_S 0x0C60 #define GL_TEXTURE_GEN_T 0x0C61 #define GL_TEXTURE_GEN_MODE 0x2500 #define GL_TEXTURE_BORDER_COLOR 0x1004 #define GL_TEXTURE_WIDTH 0x1000 #define GL_TEXTURE_HEIGHT 0x1001 #define GL_TEXTURE_BORDER 0x1005 #define GL_TEXTURE_COMPONENTS 0x1003 #define GL_TEXTURE_RED_SIZE 0x805C #define GL_TEXTURE_GREEN_SIZE 0x805D #define GL_TEXTURE_BLUE_SIZE 0x805E #define GL_TEXTURE_ALPHA_SIZE 0x805F #define GL_TEXTURE_LUMINANCE_SIZE 0x8060 #define GL_TEXTURE_INTENSITY_SIZE 0x8061 #define GL_NEAREST_MIPMAP_NEAREST 0x2700 #define GL_NEAREST_MIPMAP_LINEAR 0x2702 #define GL_LINEAR_MIPMAP_NEAREST 0x2701 #define GL_LINEAR_MIPMAP_LINEAR 0x2703 #define GL_OBJECT_LINEAR 0x2401 #define GL_OBJECT_PLANE 0x2501 #define GL_EYE_LINEAR 0x2400 #define GL_EYE_PLANE 0x2502 #define GL_SPHERE_MAP 0x2402 #define GL_DECAL 0x2101 #define GL_MODULATE 0x2100 #define GL_NEAREST 0x2600 #define GL_REPEAT 0x2901 #define GL_CLAMP 0x2900 #define GL_S 0x2000 #define GL_T 0x2001 #define GL_R 0x2002 #define GL_Q 0x2003 #define GL_TEXTURE_GEN_R 0x0C62 #define GL_TEXTURE_GEN_Q 0x0C63 /* Utility */ #define GL_VENDOR 0x1F00 #define GL_RENDERER 0x1F01 #define GL_VERSION 0x1F02 #define GL_EXTENSIONS 0x1F03 /* Errors */ #define GL_NO_ERROR 0x0 #define GL_INVALID_VALUE 0x0501 #define GL_INVALID_ENUM 0x0500 #define GL_INVALID_OPERATION 0x0502 #define GL_STACK_OVERFLOW 0x0503 #define GL_STACK_UNDERFLOW 0x0504 #define GL_OUT_OF_MEMORY 0x0505 /* glPush/PopAttrib bits */ #define GL_CURRENT_BIT 0x00000001 #define GL_POINT_BIT 0x00000002 #define GL_LINE_BIT 0x00000004 #define GL_POLYGON_BIT 0x00000008 #define GL_POLYGON_STIPPLE_BIT 0x00000010 #define GL_PIXEL_MODE_BIT 0x00000020 #define GL_LIGHTING_BIT 0x00000040 #define GL_FOG_BIT 0x00000080 #define GL_DEPTH_BUFFER_BIT 0x00000100 #define GL_ACCUM_BUFFER_BIT 0x00000200 #define GL_STENCIL_BUFFER_BIT 0x00000400 #define GL_VIEWPORT_BIT 0x00000800 #define GL_TRANSFORM_BIT 0x00001000 #define GL_ENABLE_BIT 0x00002000 #define GL_COLOR_BUFFER_BIT 0x00004000 #define GL_HINT_BIT 0x00008000 #define GL_EVAL_BIT 0x00010000 #define GL_LIST_BIT 0x00020000 #define GL_TEXTURE_BIT 0x00040000 #define GL_SCISSOR_BIT 0x00080000 #define GL_ALL_ATTRIB_BITS 0x000FFFFF /* OpenGL 1.1 */ #define GL_PROXY_TEXTURE_1D 0x8063 #define GL_PROXY_TEXTURE_2D 0x8064 #define GL_TEXTURE_PRIORITY 0x8066 #define GL_TEXTURE_RESIDENT 0x8067 #define GL_TEXTURE_BINDING_1D 0x8068 #define GL_TEXTURE_BINDING_2D 0x8069 #define GL_TEXTURE_INTERNAL_FORMAT 0x1003 #define GL_ALPHA4 0x803B #define GL_ALPHA8 0x803C #define GL_ALPHA12 0x803D #define GL_ALPHA16 0x803E #define GL_LUMINANCE4 0x803F #define GL_LUMINANCE8 0x8040 #define GL_LUMINANCE12 0x8041 #define GL_LUMINANCE16 0x8042 #define GL_LUMINANCE4_ALPHA4 0x8043 #define GL_LUMINANCE6_ALPHA2 0x8044 #define GL_LUMINANCE8_ALPHA8 0x8045 #define GL_LUMINANCE12_ALPHA4 0x8046 #define GL_LUMINANCE12_ALPHA12 0x8047 #define GL_LUMINANCE16_ALPHA16 0x8048 #define GL_INTENSITY 0x8049 #define GL_INTENSITY4 0x804A #define GL_INTENSITY8 0x804B #define GL_INTENSITY12 0x804C #define GL_INTENSITY16 0x804D #define GL_R3_G3_B2 0x2A10 #define GL_RGB4 0x804F #define GL_RGB5 0x8050 #define GL_RGB8 0x8051 #define GL_RGB10 0x8052 #define GL_RGB12 0x8053 #define GL_RGB16 0x8054 #define GL_RGBA2 0x8055 #define GL_RGBA4 0x8056 #define GL_RGB5_A1 0x8057 #define GL_RGBA8 0x8058 #define GL_RGB10_A2 0x8059 #define GL_RGBA12 0x805A #define GL_RGBA16 0x805B #define GL_CLIENT_PIXEL_STORE_BIT 0x00000001 #define GL_CLIENT_VERTEX_ARRAY_BIT 0x00000002 #define GL_ALL_CLIENT_ATTRIB_BITS 0xFFFFFFFF #define GL_CLIENT_ALL_ATTRIB_BITS 0xFFFFFFFF /* Under Windows, we do not define OpenGL 1.2 & 1.3 functionality, since it is treated as extensions (defined in glext.h) */ #if !defined(__WIN32__) /* OpenGL 1.2 */ #define GL_RESCALE_NORMAL 0x803A #define GL_CLAMP_TO_EDGE 0x812F #define GL_MAX_ELEMENTS_VERTICES 0x80E8 #define GL_MAX_ELEMENTS_INDICES 0x80E9 #define GL_BGR 0x80E0 #define GL_BGRA 0x80E1 #define GL_UNSIGNED_BYTE_3_3_2 0x8032 #define GL_UNSIGNED_BYTE_2_3_3_REV 0x8362 #define GL_UNSIGNED_SHORT_5_6_5 0x8363 #define GL_UNSIGNED_SHORT_5_6_5_REV 0x8364 #define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 #define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365 #define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 #define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366 #define GL_UNSIGNED_INT_8_8_8_8 0x8035 #define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367 #define GL_UNSIGNED_INT_10_10_10_2 0x8036 #define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368 #define GL_LIGHT_MODEL_COLOR_CONTROL 0x81F8 #define GL_SINGLE_COLOR 0x81F9 #define GL_SEPARATE_SPECULAR_COLOR 0x81FA #define GL_TEXTURE_MIN_LOD 0x813A #define GL_TEXTURE_MAX_LOD 0x813B #define GL_TEXTURE_BASE_LEVEL 0x813C #define GL_TEXTURE_MAX_LEVEL 0x813D #define GL_SMOOTH_POINT_SIZE_RANGE 0x0B12 #define GL_SMOOTH_POINT_SIZE_GRANULARITY 0x0B13 #define GL_SMOOTH_LINE_WIDTH_RANGE 0x0B22 #define GL_SMOOTH_LINE_WIDTH_GRANULARITY 0x0B23 #define GL_ALIASED_POINT_SIZE_RANGE 0x846D #define GL_ALIASED_LINE_WIDTH_RANGE 0x846E #define GL_PACK_SKIP_IMAGES 0x806B #define GL_PACK_IMAGE_HEIGHT 0x806C #define GL_UNPACK_SKIP_IMAGES 0x806D #define GL_UNPACK_IMAGE_HEIGHT 0x806E #define GL_TEXTURE_3D 0x806F #define GL_PROXY_TEXTURE_3D 0x8070 #define GL_TEXTURE_DEPTH 0x8071 #define GL_TEXTURE_WRAP_R 0x8072 #define GL_MAX_3D_TEXTURE_SIZE 0x8073 #define GL_TEXTURE_BINDING_3D 0x806A /* OpenGL 1.2 imaging subset */ /* GL_EXT_color_table */ #define GL_COLOR_TABLE 0x80D0 #define GL_POST_CONVOLUTION_COLOR_TABLE 0x80D1 #define GL_POST_COLOR_MATRIX_COLOR_TABLE 0x80D2 #define GL_PROXY_COLOR_TABLE 0x80D3 #define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE 0x80D4 #define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE 0x80D5 #define GL_COLOR_TABLE_SCALE 0x80D6 #define GL_COLOR_TABLE_BIAS 0x80D7 #define GL_COLOR_TABLE_FORMAT 0x80D8 #define GL_COLOR_TABLE_WIDTH 0x80D9 #define GL_COLOR_TABLE_RED_SIZE 0x80DA #define GL_COLOR_TABLE_GREEN_SIZE 0x80DB #define GL_COLOR_TABLE_BLUE_SIZE 0x80DC #define GL_COLOR_TABLE_ALPHA_SIZE 0x80DD #define GL_COLOR_TABLE_LUMINANCE_SIZE 0x80DE #define GL_COLOR_TABLE_INTENSITY_SIZE 0x80DF /* GL_EXT_convolution and GL_HP_convolution_border_modes */ #define GL_CONVOLUTION_1D 0x8010 #define GL_CONVOLUTION_2D 0x8011 #define GL_SEPARABLE_2D 0x8012 #define GL_CONVOLUTION_BORDER_MODE 0x8013 #define GL_CONVOLUTION_FILTER_SCALE 0x8014 #define GL_CONVOLUTION_FILTER_BIAS 0x8015 #define GL_REDUCE 0x8016 #define GL_CONVOLUTION_FORMAT 0x8017 #define GL_CONVOLUTION_WIDTH 0x8018 #define GL_CONVOLUTION_HEIGHT 0x8019 #define GL_MAX_CONVOLUTION_WIDTH 0x801A #define GL_MAX_CONVOLUTION_HEIGHT 0x801B #define GL_POST_CONVOLUTION_RED_SCALE 0x801C #define GL_POST_CONVOLUTION_GREEN_SCALE 0x801D #define GL_POST_CONVOLUTION_BLUE_SCALE 0x801E #define GL_POST_CONVOLUTION_ALPHA_SCALE 0x801F #define GL_POST_CONVOLUTION_RED_BIAS 0x8020 #define GL_POST_CONVOLUTION_GREEN_BIAS 0x8021 #define GL_POST_CONVOLUTION_BLUE_BIAS 0x8022 #define GL_POST_CONVOLUTION_ALPHA_BIAS 0x8023 #define GL_CONSTANT_BORDER 0x8151 #define GL_REPLICATE_BORDER 0x8153 #define GL_CONVOLUTION_BORDER_COLOR 0x8154 /* GL_SGI_color_matrix */ #define GL_COLOR_MATRIX 0x80B1 #define GL_COLOR_MATRIX_STACK_DEPTH 0x80B2 #define GL_MAX_COLOR_MATRIX_STACK_DEPTH 0x80B3 #define GL_POST_COLOR_MATRIX_RED_SCALE 0x80B4 #define GL_POST_COLOR_MATRIX_GREEN_SCALE 0x80B5 #define GL_POST_COLOR_MATRIX_BLUE_SCALE 0x80B6 #define GL_POST_COLOR_MATRIX_ALPHA_SCALE 0x80B7 #define GL_POST_COLOR_MATRIX_RED_BIAS 0x80B8 #define GL_POST_COLOR_MATRIX_GREEN_BIAS 0x80B9 #define GL_POST_COLOR_MATRIX_BLUE_BIAS 0x80BA #define GL_POST_COLOR_MATRIX_ALPHA_BIAS 0x80BB /* GL_EXT_histogram */ #define GL_HISTOGRAM 0x8024 #define GL_PROXY_HISTOGRAM 0x8025 #define GL_HISTOGRAM_WIDTH 0x8026 #define GL_HISTOGRAM_FORMAT 0x8027 #define GL_HISTOGRAM_RED_SIZE 0x8028 #define GL_HISTOGRAM_GREEN_SIZE 0x8029 #define GL_HISTOGRAM_BLUE_SIZE 0x802A #define GL_HISTOGRAM_ALPHA_SIZE 0x802B #define GL_HISTOGRAM_LUMINANCE_SIZE 0x802C #define GL_HISTOGRAM_SINK 0x802D #define GL_MINMAX 0x802E #define GL_MINMAX_FORMAT 0x802F #define GL_MINMAX_SINK 0x8030 #define GL_TABLE_TOO_LARGE 0x8031 /* GL_EXT_blend_color, GL_EXT_blend_minmax */ #define GL_BLEND_EQUATION 0x8009 #define GL_MIN 0x8007 #define GL_MAX 0x8008 #define GL_FUNC_ADD 0x8006 #define GL_FUNC_SUBTRACT 0x800A #define GL_FUNC_REVERSE_SUBTRACT 0x800B #define GL_BLEND_COLOR 0x8005 /* OpenGL 1.3 */ /* multitexture */ #define GL_TEXTURE0 0x84C0 #define GL_TEXTURE1 0x84C1 #define GL_TEXTURE2 0x84C2 #define GL_TEXTURE3 0x84C3 #define GL_TEXTURE4 0x84C4 #define GL_TEXTURE5 0x84C5 #define GL_TEXTURE6 0x84C6 #define GL_TEXTURE7 0x84C7 #define GL_TEXTURE8 0x84C8 #define GL_TEXTURE9 0x84C9 #define GL_TEXTURE10 0x84CA #define GL_TEXTURE11 0x84CB #define GL_TEXTURE12 0x84CC #define GL_TEXTURE13 0x84CD #define GL_TEXTURE14 0x84CE #define GL_TEXTURE15 0x84CF #define GL_TEXTURE16 0x84D0 #define GL_TEXTURE17 0x84D1 #define GL_TEXTURE18 0x84D2 #define GL_TEXTURE19 0x84D3 #define GL_TEXTURE20 0x84D4 #define GL_TEXTURE21 0x84D5 #define GL_TEXTURE22 0x84D6 #define GL_TEXTURE23 0x84D7 #define GL_TEXTURE24 0x84D8 #define GL_TEXTURE25 0x84D9 #define GL_TEXTURE26 0x84DA #define GL_TEXTURE27 0x84DB #define GL_TEXTURE28 0x84DC #define GL_TEXTURE29 0x84DD #define GL_TEXTURE30 0x84DE #define GL_TEXTURE31 0x84DF #define GL_ACTIVE_TEXTURE 0x84E0 #define GL_CLIENT_ACTIVE_TEXTURE 0x84E1 #define GL_MAX_TEXTURE_UNITS 0x84E2 /* texture_cube_map */ #define GL_NORMAL_MAP 0x8511 #define GL_REFLECTION_MAP 0x8512 #define GL_TEXTURE_CUBE_MAP 0x8513 #define GL_TEXTURE_BINDING_CUBE_MAP 0x8514 #define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A #define GL_PROXY_TEXTURE_CUBE_MAP 0x851B #define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C /* texture_compression */ #define GL_COMPRESSED_ALPHA 0x84E9 #define GL_COMPRESSED_LUMINANCE 0x84EA #define GL_COMPRESSED_LUMINANCE_ALPHA 0x84EB #define GL_COMPRESSED_INTENSITY 0x84EC #define GL_COMPRESSED_RGB 0x84ED #define GL_COMPRESSED_RGBA 0x84EE #define GL_TEXTURE_COMPRESSION_HINT 0x84EF #define GL_TEXTURE_COMPRESSED_IMAGE_SIZE 0x86A0 #define GL_TEXTURE_COMPRESSED 0x86A1 #define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 #define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 /* multisample */ #define GL_MULTISAMPLE 0x809D #define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E #define GL_SAMPLE_ALPHA_TO_ONE 0x809F #define GL_SAMPLE_COVERAGE 0x80A0 #define GL_SAMPLE_BUFFERS 0x80A8 #define GL_SAMPLES 0x80A9 #define GL_SAMPLE_COVERAGE_VALUE 0x80AA #define GL_SAMPLE_COVERAGE_INVERT 0x80AB #define GL_MULTISAMPLE_BIT 0x20000000 /* transpose_matrix */ #define GL_TRANSPOSE_MODELVIEW_MATRIX 0x84E3 #define GL_TRANSPOSE_PROJECTION_MATRIX 0x84E4 #define GL_TRANSPOSE_TEXTURE_MATRIX 0x84E5 #define GL_TRANSPOSE_COLOR_MATRIX 0x84E6 /* texture_env_combine */ #define GL_COMBINE 0x8570 #define GL_COMBINE_RGB 0x8571 #define GL_COMBINE_ALPHA 0x8572 #define GL_SOURCE0_RGB 0x8580 #define GL_SOURCE1_RGB 0x8581 #define GL_SOURCE2_RGB 0x8582 #define GL_SOURCE0_ALPHA 0x8588 #define GL_SOURCE1_ALPHA 0x8589 #define GL_SOURCE2_ALPHA 0x858A #define GL_OPERAND0_RGB 0x8590 #define GL_OPERAND1_RGB 0x8591 #define GL_OPERAND2_RGB 0x8592 #define GL_OPERAND0_ALPHA 0x8598 #define GL_OPERAND1_ALPHA 0x8599 #define GL_OPERAND2_ALPHA 0x859A #define GL_RGB_SCALE 0x8573 #define GL_ADD_SIGNED 0x8574 #define GL_INTERPOLATE 0x8575 #define GL_SUBTRACT 0x84E7 #define GL_CONSTANT 0x8576 #define GL_PRIMARY_COLOR 0x8577 #define GL_PREVIOUS 0x8578 /* texture_env_dot3 */ #define GL_DOT3_RGB 0x86AE #define GL_DOT3_RGBA 0x86AF /* texture_border_clamp */ #define GL_CLAMP_TO_BORDER 0x812D #endif /* __WIN32__ */ /************************************************************************ * * Function prototypes * ************************************************************************/ /* Miscellaneous */ GLAPI void APIENTRY glClearIndex( GLfloat c ); GLAPI void APIENTRY glClearColor( GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha ); GLAPI void APIENTRY glClear( GLbitfield mask ); GLAPI void APIENTRY glIndexMask( GLuint mask ); GLAPI void APIENTRY glColorMask( GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha ); GLAPI void APIENTRY glAlphaFunc( GLenum func, GLclampf ref ); GLAPI void APIENTRY glBlendFunc( GLenum sfactor, GLenum dfactor ); GLAPI void APIENTRY glLogicOp( GLenum opcode ); GLAPI void APIENTRY glCullFace( GLenum mode ); GLAPI void APIENTRY glFrontFace( GLenum mode ); GLAPI void APIENTRY glPointSize( GLfloat size ); GLAPI void APIENTRY glLineWidth( GLfloat width ); GLAPI void APIENTRY glLineStipple( GLint factor, GLushort pattern ); GLAPI void APIENTRY glPolygonMode( GLenum face, GLenum mode ); GLAPI void APIENTRY glPolygonOffset( GLfloat factor, GLfloat units ); GLAPI void APIENTRY glPolygonStipple( const GLubyte *mask ); GLAPI void APIENTRY glGetPolygonStipple( GLubyte *mask ); GLAPI void APIENTRY glEdgeFlag( GLboolean flag ); GLAPI void APIENTRY glEdgeFlagv( const GLboolean *flag ); GLAPI void APIENTRY glScissor( GLint x, GLint y, GLsizei width, GLsizei height); GLAPI void APIENTRY glClipPlane( GLenum plane, const GLdouble *equation ); GLAPI void APIENTRY glGetClipPlane( GLenum plane, GLdouble *equation ); GLAPI void APIENTRY glDrawBuffer( GLenum mode ); GLAPI void APIENTRY glReadBuffer( GLenum mode ); GLAPI void APIENTRY glEnable( GLenum cap ); GLAPI void APIENTRY glDisable( GLenum cap ); GLAPI GLboolean APIENTRY glIsEnabled( GLenum cap ); GLAPI void APIENTRY glEnableClientState( GLenum cap ); /* 1.1 */ GLAPI void APIENTRY glDisableClientState( GLenum cap ); /* 1.1 */ GLAPI void APIENTRY glGetBooleanv( GLenum pname, GLboolean *params ); GLAPI void APIENTRY glGetDoublev( GLenum pname, GLdouble *params ); GLAPI void APIENTRY glGetFloatv( GLenum pname, GLfloat *params ); GLAPI void APIENTRY glGetIntegerv( GLenum pname, GLint *params ); GLAPI void APIENTRY glPushAttrib( GLbitfield mask ); GLAPI void APIENTRY glPopAttrib( void ); GLAPI void APIENTRY glPushClientAttrib( GLbitfield mask ); /* 1.1 */ GLAPI void APIENTRY glPopClientAttrib( void ); /* 1.1 */ GLAPI GLint APIENTRY glRenderMode( GLenum mode ); GLAPI GLenum APIENTRY glGetError( void ); GLAPI const GLubyte* APIENTRY glGetString( GLenum name ); GLAPI void APIENTRY glFinish( void ); GLAPI void APIENTRY glFlush( void ); GLAPI void APIENTRY glHint( GLenum target, GLenum mode ); /* Depth Buffer */ GLAPI void APIENTRY glClearDepth( GLclampd depth ); GLAPI void APIENTRY glDepthFunc( GLenum func ); GLAPI void APIENTRY glDepthMask( GLboolean flag ); GLAPI void APIENTRY glDepthRange( GLclampd near_val, GLclampd far_val ); /* Accumulation Buffer */ GLAPI void APIENTRY glClearAccum( GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha ); GLAPI void APIENTRY glAccum( GLenum op, GLfloat value ); /* Transformation */ GLAPI void APIENTRY glMatrixMode( GLenum mode ); GLAPI void APIENTRY glOrtho( GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near_val, GLdouble far_val ); GLAPI void APIENTRY glFrustum( GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near_val, GLdouble far_val ); GLAPI void APIENTRY glViewport( GLint x, GLint y, GLsizei width, GLsizei height ); GLAPI void APIENTRY glPushMatrix( void ); GLAPI void APIENTRY glPopMatrix( void ); GLAPI void APIENTRY glLoadIdentity( void ); GLAPI void APIENTRY glLoadMatrixd( const GLdouble *m ); GLAPI void APIENTRY glLoadMatrixf( const GLfloat *m ); GLAPI void APIENTRY glMultMatrixd( const GLdouble *m ); GLAPI void APIENTRY glMultMatrixf( const GLfloat *m ); GLAPI void APIENTRY glRotated( GLdouble angle, GLdouble x, GLdouble y, GLdouble z ); GLAPI void APIENTRY glRotatef( GLfloat angle, GLfloat x, GLfloat y, GLfloat z ); GLAPI void APIENTRY glScaled( GLdouble x, GLdouble y, GLdouble z ); GLAPI void APIENTRY glScalef( GLfloat x, GLfloat y, GLfloat z ); GLAPI void APIENTRY glTranslated( GLdouble x, GLdouble y, GLdouble z ); GLAPI void APIENTRY glTranslatef( GLfloat x, GLfloat y, GLfloat z ); /* Display Lists */ GLAPI GLboolean APIENTRY glIsList( GLuint list ); GLAPI void APIENTRY glDeleteLists( GLuint list, GLsizei range ); GLAPI GLuint APIENTRY glGenLists( GLsizei range ); GLAPI void APIENTRY glNewList( GLuint list, GLenum mode ); GLAPI void APIENTRY glEndList( void ); GLAPI void APIENTRY glCallList( GLuint list ); GLAPI void APIENTRY glCallLists( GLsizei n, GLenum type, const GLvoid *lists ); GLAPI void APIENTRY glListBase( GLuint base ); /* Drawing Functions */ GLAPI void APIENTRY glBegin( GLenum mode ); GLAPI void APIENTRY glEnd( void ); GLAPI void APIENTRY glVertex2d( GLdouble x, GLdouble y ); GLAPI void APIENTRY glVertex2f( GLfloat x, GLfloat y ); GLAPI void APIENTRY glVertex2i( GLint x, GLint y ); GLAPI void APIENTRY glVertex2s( GLshort x, GLshort y ); GLAPI void APIENTRY glVertex3d( GLdouble x, GLdouble y, GLdouble z ); GLAPI void APIENTRY glVertex3f( GLfloat x, GLfloat y, GLfloat z ); GLAPI void APIENTRY glVertex3i( GLint x, GLint y, GLint z ); GLAPI void APIENTRY glVertex3s( GLshort x, GLshort y, GLshort z ); GLAPI void APIENTRY glVertex4d( GLdouble x, GLdouble y, GLdouble z, GLdouble w ); GLAPI void APIENTRY glVertex4f( GLfloat x, GLfloat y, GLfloat z, GLfloat w ); GLAPI void APIENTRY glVertex4i( GLint x, GLint y, GLint z, GLint w ); GLAPI void APIENTRY glVertex4s( GLshort x, GLshort y, GLshort z, GLshort w ); GLAPI void APIENTRY glVertex2dv( const GLdouble *v ); GLAPI void APIENTRY glVertex2fv( const GLfloat *v ); GLAPI void APIENTRY glVertex2iv( const GLint *v ); GLAPI void APIENTRY glVertex2sv( const GLshort *v ); GLAPI void APIENTRY glVertex3dv( const GLdouble *v ); GLAPI void APIENTRY glVertex3fv( const GLfloat *v ); GLAPI void APIENTRY glVertex3iv( const GLint *v ); GLAPI void APIENTRY glVertex3sv( const GLshort *v ); GLAPI void APIENTRY glVertex4dv( const GLdouble *v ); GLAPI void APIENTRY glVertex4fv( const GLfloat *v ); GLAPI void APIENTRY glVertex4iv( const GLint *v ); GLAPI void APIENTRY glVertex4sv( const GLshort *v ); GLAPI void APIENTRY glNormal3b( GLbyte nx, GLbyte ny, GLbyte nz ); GLAPI void APIENTRY glNormal3d( GLdouble nx, GLdouble ny, GLdouble nz ); GLAPI void APIENTRY glNormal3f( GLfloat nx, GLfloat ny, GLfloat nz ); GLAPI void APIENTRY glNormal3i( GLint nx, GLint ny, GLint nz ); GLAPI void APIENTRY glNormal3s( GLshort nx, GLshort ny, GLshort nz ); GLAPI void APIENTRY glNormal3bv( const GLbyte *v ); GLAPI void APIENTRY glNormal3dv( const GLdouble *v ); GLAPI void APIENTRY glNormal3fv( const GLfloat *v ); GLAPI void APIENTRY glNormal3iv( const GLint *v ); GLAPI void APIENTRY glNormal3sv( const GLshort *v ); GLAPI void APIENTRY glIndexd( GLdouble c ); GLAPI void APIENTRY glIndexf( GLfloat c ); GLAPI void APIENTRY glIndexi( GLint c ); GLAPI void APIENTRY glIndexs( GLshort c ); GLAPI void APIENTRY glIndexub( GLubyte c ); /* 1.1 */ GLAPI void APIENTRY glIndexdv( const GLdouble *c ); GLAPI void APIENTRY glIndexfv( const GLfloat *c ); GLAPI void APIENTRY glIndexiv( const GLint *c ); GLAPI void APIENTRY glIndexsv( const GLshort *c ); GLAPI void APIENTRY glIndexubv( const GLubyte *c ); /* 1.1 */ GLAPI void APIENTRY glColor3b( GLbyte red, GLbyte green, GLbyte blue ); GLAPI void APIENTRY glColor3d( GLdouble red, GLdouble green, GLdouble blue ); GLAPI void APIENTRY glColor3f( GLfloat red, GLfloat green, GLfloat blue ); GLAPI void APIENTRY glColor3i( GLint red, GLint green, GLint blue ); GLAPI void APIENTRY glColor3s( GLshort red, GLshort green, GLshort blue ); GLAPI void APIENTRY glColor3ub( GLubyte red, GLubyte green, GLubyte blue ); GLAPI void APIENTRY glColor3ui( GLuint red, GLuint green, GLuint blue ); GLAPI void APIENTRY glColor3us( GLushort red, GLushort green, GLushort blue ); GLAPI void APIENTRY glColor4b( GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha ); GLAPI void APIENTRY glColor4d( GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha ); GLAPI void APIENTRY glColor4f( GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha ); GLAPI void APIENTRY glColor4i( GLint red, GLint green, GLint blue, GLint alpha ); GLAPI void APIENTRY glColor4s( GLshort red, GLshort green, GLshort blue, GLshort alpha ); GLAPI void APIENTRY glColor4ub( GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha ); GLAPI void APIENTRY glColor4ui( GLuint red, GLuint green, GLuint blue, GLuint alpha ); GLAPI void APIENTRY glColor4us( GLushort red, GLushort green, GLushort blue, GLushort alpha ); GLAPI void APIENTRY glColor3bv( const GLbyte *v ); GLAPI void APIENTRY glColor3dv( const GLdouble *v ); GLAPI void APIENTRY glColor3fv( const GLfloat *v ); GLAPI void APIENTRY glColor3iv( const GLint *v ); GLAPI void APIENTRY glColor3sv( const GLshort *v ); GLAPI void APIENTRY glColor3ubv( const GLubyte *v ); GLAPI void APIENTRY glColor3uiv( const GLuint *v ); GLAPI void APIENTRY glColor3usv( const GLushort *v ); GLAPI void APIENTRY glColor4bv( const GLbyte *v ); GLAPI void APIENTRY glColor4dv( const GLdouble *v ); GLAPI void APIENTRY glColor4fv( const GLfloat *v ); GLAPI void APIENTRY glColor4iv( const GLint *v ); GLAPI void APIENTRY glColor4sv( const GLshort *v ); GLAPI void APIENTRY glColor4ubv( const GLubyte *v ); GLAPI void APIENTRY glColor4uiv( const GLuint *v ); GLAPI void APIENTRY glColor4usv( const GLushort *v ); GLAPI void APIENTRY glTexCoord1d( GLdouble s ); GLAPI void APIENTRY glTexCoord1f( GLfloat s ); GLAPI void APIENTRY glTexCoord1i( GLint s ); GLAPI void APIENTRY glTexCoord1s( GLshort s ); GLAPI void APIENTRY glTexCoord2d( GLdouble s, GLdouble t ); GLAPI void APIENTRY glTexCoord2f( GLfloat s, GLfloat t ); GLAPI void APIENTRY glTexCoord2i( GLint s, GLint t ); GLAPI void APIENTRY glTexCoord2s( GLshort s, GLshort t ); GLAPI void APIENTRY glTexCoord3d( GLdouble s, GLdouble t, GLdouble r ); GLAPI void APIENTRY glTexCoord3f( GLfloat s, GLfloat t, GLfloat r ); GLAPI void APIENTRY glTexCoord3i( GLint s, GLint t, GLint r ); GLAPI void APIENTRY glTexCoord3s( GLshort s, GLshort t, GLshort r ); GLAPI void APIENTRY glTexCoord4d( GLdouble s, GLdouble t, GLdouble r, GLdouble q ); GLAPI void APIENTRY glTexCoord4f( GLfloat s, GLfloat t, GLfloat r, GLfloat q ); GLAPI void APIENTRY glTexCoord4i( GLint s, GLint t, GLint r, GLint q ); GLAPI void APIENTRY glTexCoord4s( GLshort s, GLshort t, GLshort r, GLshort q ); GLAPI void APIENTRY glTexCoord1dv( const GLdouble *v ); GLAPI void APIENTRY glTexCoord1fv( const GLfloat *v ); GLAPI void APIENTRY glTexCoord1iv( const GLint *v ); GLAPI void APIENTRY glTexCoord1sv( const GLshort *v ); GLAPI void APIENTRY glTexCoord2dv( const GLdouble *v ); GLAPI void APIENTRY glTexCoord2fv( const GLfloat *v ); GLAPI void APIENTRY glTexCoord2iv( const GLint *v ); GLAPI void APIENTRY glTexCoord2sv( const GLshort *v ); GLAPI void APIENTRY glTexCoord3dv( const GLdouble *v ); GLAPI void APIENTRY glTexCoord3fv( const GLfloat *v ); GLAPI void APIENTRY glTexCoord3iv( const GLint *v ); GLAPI void APIENTRY glTexCoord3sv( const GLshort *v ); GLAPI void APIENTRY glTexCoord4dv( const GLdouble *v ); GLAPI void APIENTRY glTexCoord4fv( const GLfloat *v ); GLAPI void APIENTRY glTexCoord4iv( const GLint *v ); GLAPI void APIENTRY glTexCoord4sv( const GLshort *v ); GLAPI void APIENTRY glRasterPos2d( GLdouble x, GLdouble y ); GLAPI void APIENTRY glRasterPos2f( GLfloat x, GLfloat y ); GLAPI void APIENTRY glRasterPos2i( GLint x, GLint y ); GLAPI void APIENTRY glRasterPos2s( GLshort x, GLshort y ); GLAPI void APIENTRY glRasterPos3d( GLdouble x, GLdouble y, GLdouble z ); GLAPI void APIENTRY glRasterPos3f( GLfloat x, GLfloat y, GLfloat z ); GLAPI void APIENTRY glRasterPos3i( GLint x, GLint y, GLint z ); GLAPI void APIENTRY glRasterPos3s( GLshort x, GLshort y, GLshort z ); GLAPI void APIENTRY glRasterPos4d( GLdouble x, GLdouble y, GLdouble z, GLdouble w ); GLAPI void APIENTRY glRasterPos4f( GLfloat x, GLfloat y, GLfloat z, GLfloat w ); GLAPI void APIENTRY glRasterPos4i( GLint x, GLint y, GLint z, GLint w ); GLAPI void APIENTRY glRasterPos4s( GLshort x, GLshort y, GLshort z, GLshort w ); GLAPI void APIENTRY glRasterPos2dv( const GLdouble *v ); GLAPI void APIENTRY glRasterPos2fv( const GLfloat *v ); GLAPI void APIENTRY glRasterPos2iv( const GLint *v ); GLAPI void APIENTRY glRasterPos2sv( const GLshort *v ); GLAPI void APIENTRY glRasterPos3dv( const GLdouble *v ); GLAPI void APIENTRY glRasterPos3fv( const GLfloat *v ); GLAPI void APIENTRY glRasterPos3iv( const GLint *v ); GLAPI void APIENTRY glRasterPos3sv( const GLshort *v ); GLAPI void APIENTRY glRasterPos4dv( const GLdouble *v ); GLAPI void APIENTRY glRasterPos4fv( const GLfloat *v ); GLAPI void APIENTRY glRasterPos4iv( const GLint *v ); GLAPI void APIENTRY glRasterPos4sv( const GLshort *v ); GLAPI void APIENTRY glRectd( GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2 ); GLAPI void APIENTRY glRectf( GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2 ); GLAPI void APIENTRY glRecti( GLint x1, GLint y1, GLint x2, GLint y2 ); GLAPI void APIENTRY glRects( GLshort x1, GLshort y1, GLshort x2, GLshort y2 ); GLAPI void APIENTRY glRectdv( const GLdouble *v1, const GLdouble *v2 ); GLAPI void APIENTRY glRectfv( const GLfloat *v1, const GLfloat *v2 ); GLAPI void APIENTRY glRectiv( const GLint *v1, const GLint *v2 ); GLAPI void APIENTRY glRectsv( const GLshort *v1, const GLshort *v2 ); /* Lighting */ GLAPI void APIENTRY glShadeModel( GLenum mode ); GLAPI void APIENTRY glLightf( GLenum light, GLenum pname, GLfloat param ); GLAPI void APIENTRY glLighti( GLenum light, GLenum pname, GLint param ); GLAPI void APIENTRY glLightfv( GLenum light, GLenum pname, const GLfloat *params ); GLAPI void APIENTRY glLightiv( GLenum light, GLenum pname, const GLint *params ); GLAPI void APIENTRY glGetLightfv( GLenum light, GLenum pname, GLfloat *params ); GLAPI void APIENTRY glGetLightiv( GLenum light, GLenum pname, GLint *params ); GLAPI void APIENTRY glLightModelf( GLenum pname, GLfloat param ); GLAPI void APIENTRY glLightModeli( GLenum pname, GLint param ); GLAPI void APIENTRY glLightModelfv( GLenum pname, const GLfloat *params ); GLAPI void APIENTRY glLightModeliv( GLenum pname, const GLint *params ); GLAPI void APIENTRY glMaterialf( GLenum face, GLenum pname, GLfloat param ); GLAPI void APIENTRY glMateriali( GLenum face, GLenum pname, GLint param ); GLAPI void APIENTRY glMaterialfv( GLenum face, GLenum pname, const GLfloat *params ); GLAPI void APIENTRY glMaterialiv( GLenum face, GLenum pname, const GLint *params ); GLAPI void APIENTRY glGetMaterialfv( GLenum face, GLenum pname, GLfloat *params ); GLAPI void APIENTRY glGetMaterialiv( GLenum face, GLenum pname, GLint *params ); GLAPI void APIENTRY glColorMaterial( GLenum face, GLenum mode ); /* Raster functions */ GLAPI void APIENTRY glPixelZoom( GLfloat xfactor, GLfloat yfactor ); GLAPI void APIENTRY glPixelStoref( GLenum pname, GLfloat param ); GLAPI void APIENTRY glPixelStorei( GLenum pname, GLint param ); GLAPI void APIENTRY glPixelTransferf( GLenum pname, GLfloat param ); GLAPI void APIENTRY glPixelTransferi( GLenum pname, GLint param ); GLAPI void APIENTRY glPixelMapfv( GLenum map, GLint mapsize, const GLfloat *values ); GLAPI void APIENTRY glPixelMapuiv( GLenum map, GLint mapsize, const GLuint *values ); GLAPI void APIENTRY glPixelMapusv( GLenum map, GLint mapsize, const GLushort *values ); GLAPI void APIENTRY glGetPixelMapfv( GLenum map, GLfloat *values ); GLAPI void APIENTRY glGetPixelMapuiv( GLenum map, GLuint *values ); GLAPI void APIENTRY glGetPixelMapusv( GLenum map, GLushort *values ); GLAPI void APIENTRY glBitmap( GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte *bitmap ); GLAPI void APIENTRY glReadPixels( GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels ); GLAPI void APIENTRY glDrawPixels( GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels ); GLAPI void APIENTRY glCopyPixels( GLint x, GLint y, GLsizei width, GLsizei height, GLenum type ); /* Stenciling */ GLAPI void APIENTRY glStencilFunc( GLenum func, GLint ref, GLuint mask ); GLAPI void APIENTRY glStencilMask( GLuint mask ); GLAPI void APIENTRY glStencilOp( GLenum fail, GLenum zfail, GLenum zpass ); GLAPI void APIENTRY glClearStencil( GLint s ); /* Texture mapping */ GLAPI void APIENTRY glTexGend( GLenum coord, GLenum pname, GLdouble param ); GLAPI void APIENTRY glTexGenf( GLenum coord, GLenum pname, GLfloat param ); GLAPI void APIENTRY glTexGeni( GLenum coord, GLenum pname, GLint param ); GLAPI void APIENTRY glTexGendv( GLenum coord, GLenum pname, const GLdouble *params ); GLAPI void APIENTRY glTexGenfv( GLenum coord, GLenum pname, const GLfloat *params ); GLAPI void APIENTRY glTexGeniv( GLenum coord, GLenum pname, const GLint *params ); GLAPI void APIENTRY glGetTexGendv( GLenum coord, GLenum pname, GLdouble *params ); GLAPI void APIENTRY glGetTexGenfv( GLenum coord, GLenum pname, GLfloat *params ); GLAPI void APIENTRY glGetTexGeniv( GLenum coord, GLenum pname, GLint *params ); GLAPI void APIENTRY glTexEnvf( GLenum target, GLenum pname, GLfloat param ); GLAPI void APIENTRY glTexEnvi( GLenum target, GLenum pname, GLint param ); GLAPI void APIENTRY glTexEnvfv( GLenum target, GLenum pname, const GLfloat *params ); GLAPI void APIENTRY glTexEnviv( GLenum target, GLenum pname, const GLint *params ); GLAPI void APIENTRY glGetTexEnvfv( GLenum target, GLenum pname, GLfloat *params ); GLAPI void APIENTRY glGetTexEnviv( GLenum target, GLenum pname, GLint *params ); GLAPI void APIENTRY glTexParameterf( GLenum target, GLenum pname, GLfloat param ); GLAPI void APIENTRY glTexParameteri( GLenum target, GLenum pname, GLint param ); GLAPI void APIENTRY glTexParameterfv( GLenum target, GLenum pname, const GLfloat *params ); GLAPI void APIENTRY glTexParameteriv( GLenum target, GLenum pname, const GLint *params ); GLAPI void APIENTRY glGetTexParameterfv( GLenum target, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetTexParameteriv( GLenum target, GLenum pname, GLint *params ); GLAPI void APIENTRY glGetTexLevelParameterfv( GLenum target, GLint level, GLenum pname, GLfloat *params ); GLAPI void APIENTRY glGetTexLevelParameteriv( GLenum target, GLint level, GLenum pname, GLint *params ); GLAPI void APIENTRY glTexImage1D( GLenum target, GLint level, GLint internalFormat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels ); GLAPI void APIENTRY glTexImage2D( GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels ); GLAPI void APIENTRY glGetTexImage( GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels ); /* Evaluators */ GLAPI void APIENTRY glMap1d( GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points ); GLAPI void APIENTRY glMap1f( GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points ); GLAPI void APIENTRY glMap2d( GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points ); GLAPI void APIENTRY glMap2f( GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points ); GLAPI void APIENTRY glGetMapdv( GLenum target, GLenum query, GLdouble *v ); GLAPI void APIENTRY glGetMapfv( GLenum target, GLenum query, GLfloat *v ); GLAPI void APIENTRY glGetMapiv( GLenum target, GLenum query, GLint *v ); GLAPI void APIENTRY glEvalCoord1d( GLdouble u ); GLAPI void APIENTRY glEvalCoord1f( GLfloat u ); GLAPI void APIENTRY glEvalCoord1dv( const GLdouble *u ); GLAPI void APIENTRY glEvalCoord1fv( const GLfloat *u ); GLAPI void APIENTRY glEvalCoord2d( GLdouble u, GLdouble v ); GLAPI void APIENTRY glEvalCoord2f( GLfloat u, GLfloat v ); GLAPI void APIENTRY glEvalCoord2dv( const GLdouble *u ); GLAPI void APIENTRY glEvalCoord2fv( const GLfloat *u ); GLAPI void APIENTRY glMapGrid1d( GLint un, GLdouble u1, GLdouble u2 ); GLAPI void APIENTRY glMapGrid1f( GLint un, GLfloat u1, GLfloat u2 ); GLAPI void APIENTRY glMapGrid2d( GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2 ); GLAPI void APIENTRY glMapGrid2f( GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2 ); GLAPI void APIENTRY glEvalPoint1( GLint i ); GLAPI void APIENTRY glEvalPoint2( GLint i, GLint j ); GLAPI void APIENTRY glEvalMesh1( GLenum mode, GLint i1, GLint i2 ); GLAPI void APIENTRY glEvalMesh2( GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2 ); /* Fog */ GLAPI void APIENTRY glFogf( GLenum pname, GLfloat param ); GLAPI void APIENTRY glFogi( GLenum pname, GLint param ); GLAPI void APIENTRY glFogfv( GLenum pname, const GLfloat *params ); GLAPI void APIENTRY glFogiv( GLenum pname, const GLint *params ); /* Selection and Feedback */ GLAPI void APIENTRY glFeedbackBuffer( GLsizei size, GLenum type, GLfloat *buffer ); GLAPI void APIENTRY glPassThrough( GLfloat token ); GLAPI void APIENTRY glSelectBuffer( GLsizei size, GLuint *buffer ); GLAPI void APIENTRY glInitNames( void ); GLAPI void APIENTRY glLoadName( GLuint name ); GLAPI void APIENTRY glPushName( GLuint name ); GLAPI void APIENTRY glPopName( void ); /* 1.1 functions */ /* texture objects */ GLAPI void APIENTRY glGenTextures( GLsizei n, GLuint *textures ); GLAPI void APIENTRY glDeleteTextures( GLsizei n, const GLuint *textures); GLAPI void APIENTRY glBindTexture( GLenum target, GLuint texture ); GLAPI void APIENTRY glPrioritizeTextures( GLsizei n, const GLuint *textures, const GLclampf *priorities ); GLAPI GLboolean APIENTRY glAreTexturesResident( GLsizei n, const GLuint *textures, GLboolean *residences ); GLAPI GLboolean APIENTRY glIsTexture( GLuint texture ); /* texture mapping */ GLAPI void APIENTRY glTexSubImage1D( GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels ); GLAPI void APIENTRY glTexSubImage2D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels ); GLAPI void APIENTRY glCopyTexImage1D( GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border ); GLAPI void APIENTRY glCopyTexImage2D( GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border ); GLAPI void APIENTRY glCopyTexSubImage1D( GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width ); GLAPI void APIENTRY glCopyTexSubImage2D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height ); /* vertex arrays */ GLAPI void APIENTRY glVertexPointer( GLint size, GLenum type, GLsizei stride, const GLvoid *ptr ); GLAPI void APIENTRY glNormalPointer( GLenum type, GLsizei stride, const GLvoid *ptr ); GLAPI void APIENTRY glColorPointer( GLint size, GLenum type, GLsizei stride, const GLvoid *ptr ); GLAPI void APIENTRY glIndexPointer( GLenum type, GLsizei stride, const GLvoid *ptr ); GLAPI void APIENTRY glTexCoordPointer( GLint size, GLenum type, GLsizei stride, const GLvoid *ptr ); GLAPI void APIENTRY glEdgeFlagPointer( GLsizei stride, const GLvoid *ptr ); GLAPI void APIENTRY glGetPointerv( GLenum pname, GLvoid **params ); GLAPI void APIENTRY glArrayElement( GLint i ); GLAPI void APIENTRY glDrawArrays( GLenum mode, GLint first, GLsizei count ); GLAPI void APIENTRY glDrawElements( GLenum mode, GLsizei count, GLenum type, const GLvoid *indices ); GLAPI void APIENTRY glInterleavedArrays( GLenum format, GLsizei stride, const GLvoid *pointer ); /* Under Windows, we do not define OpenGL 1.2 & 1.3 functionality, since it is treated as extensions (defined in glext.h) */ #if !defined(__WIN32__) /* 1.2 functions */ GLAPI void APIENTRY glDrawRangeElements( GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices ); GLAPI void APIENTRY glTexImage3D( GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels ); GLAPI void APIENTRY glTexSubImage3D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); GLAPI void APIENTRY glCopyTexSubImage3D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height ); /* 1.2 imaging extension functions */ GLAPI void APIENTRY glColorTable( GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table ); GLAPI void APIENTRY glColorSubTable( GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data ); GLAPI void APIENTRY glColorTableParameteriv(GLenum target, GLenum pname, const GLint *params); GLAPI void APIENTRY glColorTableParameterfv(GLenum target, GLenum pname, const GLfloat *params); GLAPI void APIENTRY glCopyColorSubTable( GLenum target, GLsizei start, GLint x, GLint y, GLsizei width ); GLAPI void APIENTRY glCopyColorTable( GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width ); GLAPI void APIENTRY glGetColorTable( GLenum target, GLenum format, GLenum type, GLvoid *table ); GLAPI void APIENTRY glGetColorTableParameterfv( GLenum target, GLenum pname, GLfloat *params ); GLAPI void APIENTRY glGetColorTableParameteriv( GLenum target, GLenum pname, GLint *params ); GLAPI void APIENTRY glBlendEquation( GLenum mode ); GLAPI void APIENTRY glBlendColor( GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha ); GLAPI void APIENTRY glHistogram( GLenum target, GLsizei width, GLenum internalformat, GLboolean sink ); GLAPI void APIENTRY glResetHistogram( GLenum target ); GLAPI void APIENTRY glGetHistogram( GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values ); GLAPI void APIENTRY glGetHistogramParameterfv( GLenum target, GLenum pname, GLfloat *params ); GLAPI void APIENTRY glGetHistogramParameteriv( GLenum target, GLenum pname, GLint *params ); GLAPI void APIENTRY glMinmax( GLenum target, GLenum internalformat, GLboolean sink ); GLAPI void APIENTRY glResetMinmax( GLenum target ); GLAPI void APIENTRY glGetMinmax( GLenum target, GLboolean reset, GLenum format, GLenum types, GLvoid *values ); GLAPI void APIENTRY glGetMinmaxParameterfv( GLenum target, GLenum pname, GLfloat *params ); GLAPI void APIENTRY glGetMinmaxParameteriv( GLenum target, GLenum pname, GLint *params ); GLAPI void APIENTRY glConvolutionFilter1D( GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image ); GLAPI void APIENTRY glConvolutionFilter2D( GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image ); GLAPI void APIENTRY glConvolutionParameterf( GLenum target, GLenum pname, GLfloat params ); GLAPI void APIENTRY glConvolutionParameterfv( GLenum target, GLenum pname, const GLfloat *params ); GLAPI void APIENTRY glConvolutionParameteri( GLenum target, GLenum pname, GLint params ); GLAPI void APIENTRY glConvolutionParameteriv( GLenum target, GLenum pname, const GLint *params ); GLAPI void APIENTRY glCopyConvolutionFilter1D( GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width ); GLAPI void APIENTRY glCopyConvolutionFilter2D( GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); GLAPI void APIENTRY glGetConvolutionFilter( GLenum target, GLenum format, GLenum type, GLvoid *image ); GLAPI void APIENTRY glGetConvolutionParameterfv( GLenum target, GLenum pname, GLfloat *params ); GLAPI void APIENTRY glGetConvolutionParameteriv( GLenum target, GLenum pname, GLint *params ); GLAPI void APIENTRY glSeparableFilter2D( GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column ); GLAPI void APIENTRY glGetSeparableFilter( GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span ); /* 1.3 functions */ GLAPI void APIENTRY glActiveTexture( GLenum texture ); GLAPI void APIENTRY glClientActiveTexture( GLenum texture ); GLAPI void APIENTRY glCompressedTexImage1D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data ); GLAPI void APIENTRY glCompressedTexImage2D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data ); GLAPI void APIENTRY glCompressedTexImage3D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data ); GLAPI void APIENTRY glCompressedTexSubImage1D( GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data ); GLAPI void APIENTRY glCompressedTexSubImage2D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data ); GLAPI void APIENTRY glCompressedTexSubImage3D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data ); GLAPI void APIENTRY glGetCompressedTexImage( GLenum target, GLint lod, GLvoid *img ); GLAPI void APIENTRY glMultiTexCoord1d( GLenum target, GLdouble s ); GLAPI void APIENTRY glMultiTexCoord1dv( GLenum target, const GLdouble *v ); GLAPI void APIENTRY glMultiTexCoord1f( GLenum target, GLfloat s ); GLAPI void APIENTRY glMultiTexCoord1fv( GLenum target, const GLfloat *v ); GLAPI void APIENTRY glMultiTexCoord1i( GLenum target, GLint s ); GLAPI void APIENTRY glMultiTexCoord1iv( GLenum target, const GLint *v ); GLAPI void APIENTRY glMultiTexCoord1s( GLenum target, GLshort s ); GLAPI void APIENTRY glMultiTexCoord1sv( GLenum target, const GLshort *v ); GLAPI void APIENTRY glMultiTexCoord2d( GLenum target, GLdouble s, GLdouble t ); GLAPI void APIENTRY glMultiTexCoord2dv( GLenum target, const GLdouble *v ); GLAPI void APIENTRY glMultiTexCoord2f( GLenum target, GLfloat s, GLfloat t ); GLAPI void APIENTRY glMultiTexCoord2fv( GLenum target, const GLfloat *v ); GLAPI void APIENTRY glMultiTexCoord2i( GLenum target, GLint s, GLint t ); GLAPI void APIENTRY glMultiTexCoord2iv( GLenum target, const GLint *v ); GLAPI void APIENTRY glMultiTexCoord2s( GLenum target, GLshort s, GLshort t ); GLAPI void APIENTRY glMultiTexCoord2sv( GLenum target, const GLshort *v ); GLAPI void APIENTRY glMultiTexCoord3d( GLenum target, GLdouble s, GLdouble t, GLdouble r ); GLAPI void APIENTRY glMultiTexCoord3dv( GLenum target, const GLdouble *v ); GLAPI void APIENTRY glMultiTexCoord3f( GLenum target, GLfloat s, GLfloat t, GLfloat r ); GLAPI void APIENTRY glMultiTexCoord3fv( GLenum target, const GLfloat *v ); GLAPI void APIENTRY glMultiTexCoord3i( GLenum target, GLint s, GLint t, GLint r ); GLAPI void APIENTRY glMultiTexCoord3iv( GLenum target, const GLint *v ); GLAPI void APIENTRY glMultiTexCoord3s( GLenum target, GLshort s, GLshort t, GLshort r ); GLAPI void APIENTRY glMultiTexCoord3sv( GLenum target, const GLshort *v ); GLAPI void APIENTRY glMultiTexCoord4d( GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q ); GLAPI void APIENTRY glMultiTexCoord4dv( GLenum target, const GLdouble *v ); GLAPI void APIENTRY glMultiTexCoord4f( GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q ); GLAPI void APIENTRY glMultiTexCoord4fv( GLenum target, const GLfloat *v ); GLAPI void APIENTRY glMultiTexCoord4i( GLenum target, GLint s, GLint t, GLint r, GLint q ); GLAPI void APIENTRY glMultiTexCoord4iv( GLenum target, const GLint *v ); GLAPI void APIENTRY glMultiTexCoord4s( GLenum target, GLshort s, GLshort t, GLshort r, GLshort q ); GLAPI void APIENTRY glMultiTexCoord4sv( GLenum target, const GLshort *v ); GLAPI void APIENTRY glLoadTransposeMatrixd( const GLdouble m[16] ); GLAPI void APIENTRY glLoadTransposeMatrixf( const GLfloat m[16] ); GLAPI void APIENTRY glMultTransposeMatrixd( const GLdouble m[16] ); GLAPI void APIENTRY glMultTransposeMatrixf( const GLfloat m[16] ); GLAPI void APIENTRY glSampleCoverage( GLclampf value, GLboolean invert ); GLAPI void APIENTRY glSamplePass( GLenum pass ); #endif /* __WIN32__ */ /* Include external definitions of OpenGL extensions */ /* Removed, see this bug report for reference: * http://sourceforge.net/tracker/index.php?func=detail&aid=610178&group_id=2435&atid=102435 * * #include */ /************************************************************************ * Begin system-specific stuff */ /* * End system-specific stuff ************************************************************************/ #ifdef __cplusplus } #endif #endif /* __gl_h_ */ ================================================ FILE: Include/glext.h ================================================ #ifndef __glext_h_ #define __glext_h_ #ifdef __cplusplus extern "C" { #endif /* ** License Applicability. Except to the extent portions of this file are ** made subject to an alternative license as permitted in the SGI Free ** Software License B, Version 1.1 (the "License"), the contents of this ** file are subject only to the provisions of the License. You may not use ** this file except in compliance with the License. You may obtain a copy ** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600 ** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at: ** ** http://oss.sgi.com/projects/FreeB ** ** Note that, as provided in the License, the Software is distributed on an ** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS ** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND ** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A ** PARTICULAR PURPOSE, AND NON-INFRINGEMENT. ** ** Original Code. The Original Code is: OpenGL Sample Implementation, ** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics, ** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc. ** Copyright in any portions created by third parties is as indicated ** elsewhere herein. All Rights Reserved. ** ** Additional Notice Provisions: This software was created using the ** OpenGL(R) version 1.2.1 Sample Implementation published by SGI, but has ** not been independently verified as being compliant with the OpenGL(R) ** version 1.2.1 Specification. */ #if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) #define WIN32_LEAN_AND_MEAN 1 #include #endif #ifndef APIENTRY #define APIENTRY #endif #ifndef GLAPI #define GLAPI extern #endif /*************************************************************/ /* Header file version number, required by OpenGL ABI for Linux */ /* glext.h last updated 2002/03/22 */ /* Current version at http://oss.sgi.com/projects/ogl-sample/registry/ */ #define GL_GLEXT_VERSION 11 #ifndef GL_VERSION_1_2 #define GL_CONSTANT_COLOR 0x8001 #define GL_ONE_MINUS_CONSTANT_COLOR 0x8002 #define GL_CONSTANT_ALPHA 0x8003 #define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 #define GL_BLEND_COLOR 0x8005 #define GL_FUNC_ADD 0x8006 #define GL_MIN 0x8007 #define GL_MAX 0x8008 #define GL_BLEND_EQUATION 0x8009 #define GL_FUNC_SUBTRACT 0x800A #define GL_FUNC_REVERSE_SUBTRACT 0x800B #define GL_CONVOLUTION_1D 0x8010 #define GL_CONVOLUTION_2D 0x8011 #define GL_SEPARABLE_2D 0x8012 #define GL_CONVOLUTION_BORDER_MODE 0x8013 #define GL_CONVOLUTION_FILTER_SCALE 0x8014 #define GL_CONVOLUTION_FILTER_BIAS 0x8015 #define GL_REDUCE 0x8016 #define GL_CONVOLUTION_FORMAT 0x8017 #define GL_CONVOLUTION_WIDTH 0x8018 #define GL_CONVOLUTION_HEIGHT 0x8019 #define GL_MAX_CONVOLUTION_WIDTH 0x801A #define GL_MAX_CONVOLUTION_HEIGHT 0x801B #define GL_POST_CONVOLUTION_RED_SCALE 0x801C #define GL_POST_CONVOLUTION_GREEN_SCALE 0x801D #define GL_POST_CONVOLUTION_BLUE_SCALE 0x801E #define GL_POST_CONVOLUTION_ALPHA_SCALE 0x801F #define GL_POST_CONVOLUTION_RED_BIAS 0x8020 #define GL_POST_CONVOLUTION_GREEN_BIAS 0x8021 #define GL_POST_CONVOLUTION_BLUE_BIAS 0x8022 #define GL_POST_CONVOLUTION_ALPHA_BIAS 0x8023 #define GL_HISTOGRAM 0x8024 #define GL_PROXY_HISTOGRAM 0x8025 #define GL_HISTOGRAM_WIDTH 0x8026 #define GL_HISTOGRAM_FORMAT 0x8027 #define GL_HISTOGRAM_RED_SIZE 0x8028 #define GL_HISTOGRAM_GREEN_SIZE 0x8029 #define GL_HISTOGRAM_BLUE_SIZE 0x802A #define GL_HISTOGRAM_ALPHA_SIZE 0x802B #define GL_HISTOGRAM_LUMINANCE_SIZE 0x802C #define GL_HISTOGRAM_SINK 0x802D #define GL_MINMAX 0x802E #define GL_MINMAX_FORMAT 0x802F #define GL_MINMAX_SINK 0x8030 #define GL_TABLE_TOO_LARGE 0x8031 #define GL_UNSIGNED_BYTE_3_3_2 0x8032 #define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 #define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 #define GL_UNSIGNED_INT_8_8_8_8 0x8035 #define GL_UNSIGNED_INT_10_10_10_2 0x8036 #define GL_RESCALE_NORMAL 0x803A #define GL_UNSIGNED_BYTE_2_3_3_REV 0x8362 #define GL_UNSIGNED_SHORT_5_6_5 0x8363 #define GL_UNSIGNED_SHORT_5_6_5_REV 0x8364 #define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365 #define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366 #define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367 #define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368 #define GL_COLOR_MATRIX 0x80B1 #define GL_COLOR_MATRIX_STACK_DEPTH 0x80B2 #define GL_MAX_COLOR_MATRIX_STACK_DEPTH 0x80B3 #define GL_POST_COLOR_MATRIX_RED_SCALE 0x80B4 #define GL_POST_COLOR_MATRIX_GREEN_SCALE 0x80B5 #define GL_POST_COLOR_MATRIX_BLUE_SCALE 0x80B6 #define GL_POST_COLOR_MATRIX_ALPHA_SCALE 0x80B7 #define GL_POST_COLOR_MATRIX_RED_BIAS 0x80B8 #define GL_POST_COLOR_MATRIX_GREEN_BIAS 0x80B9 #define GL_POST_COLOR_MATRIX_BLUE_BIAS 0x80BA #define GL_COLOR_TABLE 0x80D0 #define GL_POST_CONVOLUTION_COLOR_TABLE 0x80D1 #define GL_POST_COLOR_MATRIX_COLOR_TABLE 0x80D2 #define GL_PROXY_COLOR_TABLE 0x80D3 #define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE 0x80D4 #define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE 0x80D5 #define GL_COLOR_TABLE_SCALE 0x80D6 #define GL_COLOR_TABLE_BIAS 0x80D7 #define GL_COLOR_TABLE_FORMAT 0x80D8 #define GL_COLOR_TABLE_WIDTH 0x80D9 #define GL_COLOR_TABLE_RED_SIZE 0x80DA #define GL_COLOR_TABLE_GREEN_SIZE 0x80DB #define GL_COLOR_TABLE_BLUE_SIZE 0x80DC #define GL_COLOR_TABLE_ALPHA_SIZE 0x80DD #define GL_COLOR_TABLE_LUMINANCE_SIZE 0x80DE #define GL_COLOR_TABLE_INTENSITY_SIZE 0x80DF #define GL_BGR 0x80E0 #define GL_BGRA 0x80E1 #define GL_MAX_ELEMENTS_VERTICES 0x80E8 #define GL_MAX_ELEMENTS_INDICES 0x80E9 #define GL_CLAMP_TO_EDGE 0x812F #define GL_TEXTURE_MIN_LOD 0x813A #define GL_TEXTURE_MAX_LOD 0x813B #define GL_TEXTURE_BASE_LEVEL 0x813C #define GL_TEXTURE_MAX_LEVEL 0x813D #define GL_IGNORE_BORDER 0x8150 #define GL_CONSTANT_BORDER 0x8151 #define GL_WRAP_BORDER 0x8152 #define GL_REPLICATE_BORDER 0x8153 #define GL_CONVOLUTION_BORDER_COLOR 0x8154 #define GL_LIGHT_MODEL_COLOR_CONTROL 0x81F8 #define GL_SINGLE_COLOR 0x81F9 #define GL_SEPARATE_SPECULAR_COLOR 0x81FA #define GL_SMOOTH_POINT_SIZE_RANGE 0x0B12 #define GL_SMOOTH_POINT_SIZE_GRANULARITY 0x0B13 #define GL_SMOOTH_LINE_WIDTH_RANGE 0x0B22 #define GL_SMOOTH_LINE_WIDTH_GRANULARITY 0x0B23 #define GL_ALIASED_POINT_SIZE_RANGE 0x846D #define GL_ALIASED_LINE_WIDTH_RANGE 0x846E #endif #ifndef GL_VERSION_1_3 #define GL_TEXTURE0 0x84C0 #define GL_TEXTURE1 0x84C1 #define GL_TEXTURE2 0x84C2 #define GL_TEXTURE3 0x84C3 #define GL_TEXTURE4 0x84C4 #define GL_TEXTURE5 0x84C5 #define GL_TEXTURE6 0x84C6 #define GL_TEXTURE7 0x84C7 #define GL_TEXTURE8 0x84C8 #define GL_TEXTURE9 0x84C9 #define GL_TEXTURE10 0x84CA #define GL_TEXTURE11 0x84CB #define GL_TEXTURE12 0x84CC #define GL_TEXTURE13 0x84CD #define GL_TEXTURE14 0x84CE #define GL_TEXTURE15 0x84CF #define GL_TEXTURE16 0x84D0 #define GL_TEXTURE17 0x84D1 #define GL_TEXTURE18 0x84D2 #define GL_TEXTURE19 0x84D3 #define GL_TEXTURE20 0x84D4 #define GL_TEXTURE21 0x84D5 #define GL_TEXTURE22 0x84D6 #define GL_TEXTURE23 0x84D7 #define GL_TEXTURE24 0x84D8 #define GL_TEXTURE25 0x84D9 #define GL_TEXTURE26 0x84DA #define GL_TEXTURE27 0x84DB #define GL_TEXTURE28 0x84DC #define GL_TEXTURE29 0x84DD #define GL_TEXTURE30 0x84DE #define GL_TEXTURE31 0x84DF #define GL_ACTIVE_TEXTURE 0x84E0 #define GL_CLIENT_ACTIVE_TEXTURE 0x84E1 #define GL_MAX_TEXTURE_UNITS 0x84E2 #define GL_TRANSPOSE_MODELVIEW_MATRIX 0x84E3 #define GL_TRANSPOSE_PROJECTION_MATRIX 0x84E4 #define GL_TRANSPOSE_TEXTURE_MATRIX 0x84E5 #define GL_TRANSPOSE_COLOR_MATRIX 0x84E6 #define GL_MULTISAMPLE 0x809D #define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E #define GL_SAMPLE_ALPHA_TO_ONE 0x809F #define GL_SAMPLE_COVERAGE 0x80A0 #define GL_SAMPLE_BUFFERS 0x80A8 #define GL_SAMPLES 0x80A9 #define GL_SAMPLE_COVERAGE_VALUE 0x80AA #define GL_SAMPLE_COVERAGE_INVERT 0x80AB #define GL_MULTISAMPLE_BIT 0x20000000 #define GL_NORMAL_MAP 0x8511 #define GL_REFLECTION_MAP 0x8512 #define GL_TEXTURE_CUBE_MAP 0x8513 #define GL_TEXTURE_BINDING_CUBE_MAP 0x8514 #define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A #define GL_PROXY_TEXTURE_CUBE_MAP 0x851B #define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C #define GL_COMPRESSED_ALPHA 0x84E9 #define GL_COMPRESSED_LUMINANCE 0x84EA #define GL_COMPRESSED_LUMINANCE_ALPHA 0x84EB #define GL_COMPRESSED_INTENSITY 0x84EC #define GL_COMPRESSED_RGB 0x84ED #define GL_COMPRESSED_RGBA 0x84EE #define GL_TEXTURE_COMPRESSION_HINT 0x84EF #define GL_TEXTURE_COMPRESSED_IMAGE_SIZE 0x86A0 #define GL_TEXTURE_COMPRESSED 0x86A1 #define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 #define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 #define GL_CLAMP_TO_BORDER 0x812D #define GL_CLAMP_TO_BORDER_SGIS 0x812D #define GL_COMBINE 0x8570 #define GL_COMBINE_RGB 0x8571 #define GL_COMBINE_ALPHA 0x8572 #define GL_SOURCE0_RGB 0x8580 #define GL_SOURCE1_RGB 0x8581 #define GL_SOURCE2_RGB 0x8582 #define GL_SOURCE0_ALPHA 0x8588 #define GL_SOURCE1_ALPHA 0x8589 #define GL_SOURCE2_ALPHA 0x858A #define GL_OPERAND0_RGB 0x8590 #define GL_OPERAND1_RGB 0x8591 #define GL_OPERAND2_RGB 0x8592 #define GL_OPERAND0_ALPHA 0x8598 #define GL_OPERAND1_ALPHA 0x8599 #define GL_OPERAND2_ALPHA 0x859A #define GL_RGB_SCALE 0x8573 #define GL_ADD_SIGNED 0x8574 #define GL_INTERPOLATE 0x8575 #define GL_SUBTRACT 0x84E7 #define GL_CONSTANT 0x8576 #define GL_PRIMARY_COLOR 0x8577 #define GL_PREVIOUS 0x8578 #define GL_DOT3_RGB 0x86AE #define GL_DOT3_RGBA 0x86AF #endif #ifndef GL_ARB_multitexture #define GL_TEXTURE0_ARB 0x84C0 #define GL_TEXTURE1_ARB 0x84C1 #define GL_TEXTURE2_ARB 0x84C2 #define GL_TEXTURE3_ARB 0x84C3 #define GL_TEXTURE4_ARB 0x84C4 #define GL_TEXTURE5_ARB 0x84C5 #define GL_TEXTURE6_ARB 0x84C6 #define GL_TEXTURE7_ARB 0x84C7 #define GL_TEXTURE8_ARB 0x84C8 #define GL_TEXTURE9_ARB 0x84C9 #define GL_TEXTURE10_ARB 0x84CA #define GL_TEXTURE11_ARB 0x84CB #define GL_TEXTURE12_ARB 0x84CC #define GL_TEXTURE13_ARB 0x84CD #define GL_TEXTURE14_ARB 0x84CE #define GL_TEXTURE15_ARB 0x84CF #define GL_TEXTURE16_ARB 0x84D0 #define GL_TEXTURE17_ARB 0x84D1 #define GL_TEXTURE18_ARB 0x84D2 #define GL_TEXTURE19_ARB 0x84D3 #define GL_TEXTURE20_ARB 0x84D4 #define GL_TEXTURE21_ARB 0x84D5 #define GL_TEXTURE22_ARB 0x84D6 #define GL_TEXTURE23_ARB 0x84D7 #define GL_TEXTURE24_ARB 0x84D8 #define GL_TEXTURE25_ARB 0x84D9 #define GL_TEXTURE26_ARB 0x84DA #define GL_TEXTURE27_ARB 0x84DB #define GL_TEXTURE28_ARB 0x84DC #define GL_TEXTURE29_ARB 0x84DD #define GL_TEXTURE30_ARB 0x84DE #define GL_TEXTURE31_ARB 0x84DF #define GL_ACTIVE_TEXTURE_ARB 0x84E0 #define GL_CLIENT_ACTIVE_TEXTURE_ARB 0x84E1 #define GL_MAX_TEXTURE_UNITS_ARB 0x84E2 #endif #ifndef GL_ARB_transpose_matrix #define GL_TRANSPOSE_MODELVIEW_MATRIX_ARB 0x84E3 #define GL_TRANSPOSE_PROJECTION_MATRIX_ARB 0x84E4 #define GL_TRANSPOSE_TEXTURE_MATRIX_ARB 0x84E5 #define GL_TRANSPOSE_COLOR_MATRIX_ARB 0x84E6 #endif #ifndef GL_ARB_multisample #define GL_MULTISAMPLE_ARB 0x809D #define GL_SAMPLE_ALPHA_TO_COVERAGE_ARB 0x809E #define GL_SAMPLE_ALPHA_TO_ONE_ARB 0x809F #define GL_SAMPLE_COVERAGE_ARB 0x80A0 #define GL_SAMPLE_BUFFERS_ARB 0x80A8 #define GL_SAMPLES_ARB 0x80A9 #define GL_SAMPLE_COVERAGE_VALUE_ARB 0x80AA #define GL_SAMPLE_COVERAGE_INVERT_ARB 0x80AB #define GL_MULTISAMPLE_BIT_ARB 0x20000000 #endif #ifndef GL_ARB_texture_env_add #endif #ifndef GL_ARB_texture_cube_map #define GL_NORMAL_MAP_ARB 0x8511 #define GL_REFLECTION_MAP_ARB 0x8512 #define GL_TEXTURE_CUBE_MAP_ARB 0x8513 #define GL_TEXTURE_BINDING_CUBE_MAP_ARB 0x8514 #define GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x8515 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x8516 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x8517 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x8518 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x8519 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x851A #define GL_PROXY_TEXTURE_CUBE_MAP_ARB 0x851B #define GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB 0x851C #endif #ifndef GL_ARB_texture_compression #define GL_COMPRESSED_ALPHA_ARB 0x84E9 #define GL_COMPRESSED_LUMINANCE_ARB 0x84EA #define GL_COMPRESSED_LUMINANCE_ALPHA_ARB 0x84EB #define GL_COMPRESSED_INTENSITY_ARB 0x84EC #define GL_COMPRESSED_RGB_ARB 0x84ED #define GL_COMPRESSED_RGBA_ARB 0x84EE #define GL_TEXTURE_COMPRESSION_HINT_ARB 0x84EF #define GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB 0x86A0 #define GL_TEXTURE_COMPRESSED_ARB 0x86A1 #define GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A2 #define GL_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A3 #endif #ifndef GL_ARB_texture_border_clamp #define GL_CLAMP_TO_BORDER_ARB 0x812D #endif #ifndef GL_ARB_point_parameters #define GL_POINT_SIZE_MIN_ARB 0x8126 #define GL_POINT_SIZE_MIN_EXT 0x8126 #define GL_POINT_SIZE_MIN_SGIS 0x8126 #define GL_POINT_SIZE_MAX_ARB 0x8127 #define GL_POINT_SIZE_MAX_EXT 0x8127 #define GL_POINT_SIZE_MAX_SGIS 0x8127 #define GL_POINT_FADE_THRESHOLD_SIZE_ARB 0x8128 #define GL_POINT_FADE_THRESHOLD_SIZE_EXT 0x8128 #define GL_POINT_FADE_THRESHOLD_SIZE_SGIS 0x8128 #define GL_POINT_DISTANCE_ATTENUATION_ARB 0x8129 #define GL_DISTANCE_ATTENUATION_EXT 0x8129 #define GL_DISTANCE_ATTENUATION_SGIS 0x8129 #endif #ifndef GL_ARB_vertex_blend #define GL_MAX_VERTEX_UNITS_ARB 0x86A4 #define GL_ACTIVE_VERTEX_UNITS_ARB 0x86A5 #define GL_WEIGHT_SUM_UNITY_ARB 0x86A6 #define GL_VERTEX_BLEND_ARB 0x86A7 #define GL_CURRENT_WEIGHT_ARB 0x86A8 #define GL_WEIGHT_ARRAY_TYPE_ARB 0x86A9 #define GL_WEIGHT_ARRAY_STRIDE_ARB 0x86AA #define GL_WEIGHT_ARRAY_SIZE_ARB 0x86AB #define GL_WEIGHT_ARRAY_POINTER_ARB 0x86AC #define GL_WEIGHT_ARRAY_ARB 0x86AD #define GL_MODELVIEW0_ARB 0x1700 #define GL_MODELVIEW1_ARB 0x850A #define GL_MODELVIEW2_ARB 0x8722 #define GL_MODELVIEW3_ARB 0x8723 #define GL_MODELVIEW4_ARB 0x8724 #define GL_MODELVIEW5_ARB 0x8725 #define GL_MODELVIEW6_ARB 0x8726 #define GL_MODELVIEW7_ARB 0x8727 #define GL_MODELVIEW8_ARB 0x8728 #define GL_MODELVIEW9_ARB 0x8729 #define GL_MODELVIEW10_ARB 0x872A #define GL_MODELVIEW11_ARB 0x872B #define GL_MODELVIEW12_ARB 0x872C #define GL_MODELVIEW13_ARB 0x872D #define GL_MODELVIEW14_ARB 0x872E #define GL_MODELVIEW15_ARB 0x872F #define GL_MODELVIEW16_ARB 0x8730 #define GL_MODELVIEW17_ARB 0x8731 #define GL_MODELVIEW18_ARB 0x8732 #define GL_MODELVIEW19_ARB 0x8733 #define GL_MODELVIEW20_ARB 0x8734 #define GL_MODELVIEW21_ARB 0x8735 #define GL_MODELVIEW22_ARB 0x8736 #define GL_MODELVIEW23_ARB 0x8737 #define GL_MODELVIEW24_ARB 0x8738 #define GL_MODELVIEW25_ARB 0x8739 #define GL_MODELVIEW26_ARB 0x873A #define GL_MODELVIEW27_ARB 0x873B #define GL_MODELVIEW28_ARB 0x873C #define GL_MODELVIEW29_ARB 0x873D #define GL_MODELVIEW30_ARB 0x873E #define GL_MODELVIEW31_ARB 0x873F #endif #ifndef GL_ARB_matrix_palette #define GL_MATRIX_PALETTE_ARB 0x8840 #define GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB 0x8841 #define GL_MAX_PALETTE_MATRICES_ARB 0x8842 #define GL_CURRENT_PALETTE_MATRIX_ARB 0x8843 #define GL_MATRIX_INDEX_ARRAY_ARB 0x8844 #define GL_CURRENT_MATRIX_INDEX_ARB 0x8845 #define GL_MATRIX_INDEX_ARRAY_SIZE_ARB 0x8846 #define GL_MATRIX_INDEX_ARRAY_TYPE_ARB 0x8847 #define GL_MATRIX_INDEX_ARRAY_STRIDE_ARB 0x8848 #define GL_MATRIX_INDEX_ARRAY_POINTER_ARB 0x8849 #endif #ifndef GL_ARB_texture_env_combine #define GL_COMBINE_ARB 0x8570 #define GL_COMBINE_RGB_ARB 0x8571 #define GL_COMBINE_ALPHA_ARB 0x8572 #define GL_SOURCE0_RGB_ARB 0x8580 #define GL_SOURCE1_RGB_ARB 0x8581 #define GL_SOURCE2_RGB_ARB 0x8582 #define GL_SOURCE0_ALPHA_ARB 0x8588 #define GL_SOURCE1_ALPHA_ARB 0x8589 #define GL_SOURCE2_ALPHA_ARB 0x858A #define GL_OPERAND0_RGB_ARB 0x8590 #define GL_OPERAND1_RGB_ARB 0x8591 #define GL_OPERAND2_RGB_ARB 0x8592 #define GL_OPERAND0_ALPHA_ARB 0x8598 #define GL_OPERAND1_ALPHA_ARB 0x8599 #define GL_OPERAND2_ALPHA_ARB 0x859A #define GL_RGB_SCALE_ARB 0x8573 #define GL_ADD_SIGNED_ARB 0x8574 #define GL_INTERPOLATE_ARB 0x8575 #define GL_SUBTRACT_ARB 0x84E7 #define GL_CONSTANT_ARB 0x8576 #define GL_PRIMARY_COLOR_ARB 0x8577 #define GL_PREVIOUS_ARB 0x8578 #endif #ifndef GL_ARB_texture_env_crossbar #endif #ifndef GL_ARB_texture_env_dot3 #define GL_DOT3_RGB_ARB 0x86AE #define GL_DOT3_RGB_EXT 0x86AE #define GL_DOT3_RGBA_ARB 0x86AF #define GL_DOT3_RGBA_EXT 0x86AF #endif #ifndef GL_ARB_texture_mirrored_repeat #define GL_MIRRORED_REPEAT_ARB 0x8370 #endif #ifndef GL_ARB_depth_texture #define GL_DEPTH_COMPONENT16_ARB 0x81A5 #define GL_DEPTH_COMPONENT24_ARB 0x81A6 #define GL_DEPTH_COMPONENT32_ARB 0x81A7 #define GL_TEXTURE_DEPTH_SIZE_ARB 0x884A #define GL_DEPTH_TEXTURE_MODE_ARB 0x884B #endif #ifndef GL_ARB_shadow #define GL_TEXTURE_COMPARE_MODE_ARB 0x884C #define GL_TEXTURE_COMPARE_FUNC_ARB 0x884D #define GL_COMPARE_R_TO_TEXTURE_ARB 0x884E #endif #ifndef GL_ARB_shadow_ambient #define GL_TEXTURE_COMPARE_FAIL_VALUE_ARB 0x80BF #endif #ifndef GL_ARB_window_pos #endif #ifndef GL_EXT_abgr #define GL_ABGR_EXT 0x8000 #endif #ifndef GL_EXT_blend_color #define GL_CONSTANT_COLOR_EXT 0x8001 #define GL_ONE_MINUS_CONSTANT_COLOR_EXT 0x8002 #define GL_CONSTANT_ALPHA_EXT 0x8003 #define GL_ONE_MINUS_CONSTANT_ALPHA_EXT 0x8004 #define GL_BLEND_COLOR_EXT 0x8005 #endif #ifndef GL_EXT_polygon_offset #define GL_POLYGON_OFFSET_EXT 0x8037 #define GL_POLYGON_OFFSET_FACTOR_EXT 0x8038 #define GL_POLYGON_OFFSET_BIAS_EXT 0x8039 #endif #ifndef GL_EXT_texture #define GL_ALPHA4_EXT 0x803B #define GL_ALPHA8_EXT 0x803C #define GL_ALPHA12_EXT 0x803D #define GL_ALPHA16_EXT 0x803E #define GL_LUMINANCE4_EXT 0x803F #define GL_LUMINANCE8_EXT 0x8040 #define GL_LUMINANCE12_EXT 0x8041 #define GL_LUMINANCE16_EXT 0x8042 #define GL_LUMINANCE4_ALPHA4_EXT 0x8043 #define GL_LUMINANCE6_ALPHA2_EXT 0x8044 #define GL_LUMINANCE8_ALPHA8_EXT 0x8045 #define GL_LUMINANCE12_ALPHA4_EXT 0x8046 #define GL_LUMINANCE12_ALPHA12_EXT 0x8047 #define GL_LUMINANCE16_ALPHA16_EXT 0x8048 #define GL_INTENSITY_EXT 0x8049 #define GL_INTENSITY4_EXT 0x804A #define GL_INTENSITY8_EXT 0x804B #define GL_INTENSITY12_EXT 0x804C #define GL_INTENSITY16_EXT 0x804D #define GL_RGB2_EXT 0x804E #define GL_RGB4_EXT 0x804F #define GL_RGB5_EXT 0x8050 #define GL_RGB8_EXT 0x8051 #define GL_RGB10_EXT 0x8052 #define GL_RGB12_EXT 0x8053 #define GL_RGB16_EXT 0x8054 #define GL_RGBA2_EXT 0x8055 #define GL_RGBA4_EXT 0x8056 #define GL_RGB5_A1_EXT 0x8057 #define GL_RGBA8_EXT 0x8058 #define GL_RGB10_A2_EXT 0x8059 #define GL_RGBA12_EXT 0x805A #define GL_RGBA16_EXT 0x805B #define GL_TEXTURE_RED_SIZE_EXT 0x805C #define GL_TEXTURE_GREEN_SIZE_EXT 0x805D #define GL_TEXTURE_BLUE_SIZE_EXT 0x805E #define GL_TEXTURE_ALPHA_SIZE_EXT 0x805F #define GL_TEXTURE_LUMINANCE_SIZE_EXT 0x8060 #define GL_TEXTURE_INTENSITY_SIZE_EXT 0x8061 #define GL_REPLACE_EXT 0x8062 #define GL_PROXY_TEXTURE_1D_EXT 0x8063 #define GL_PROXY_TEXTURE_2D_EXT 0x8064 #define GL_TEXTURE_TOO_LARGE_EXT 0x8065 #endif #ifndef GL_EXT_texture3D #define GL_PACK_SKIP_IMAGES 0x806B #define GL_PACK_SKIP_IMAGES_EXT 0x806B #define GL_PACK_IMAGE_HEIGHT 0x806C #define GL_PACK_IMAGE_HEIGHT_EXT 0x806C #define GL_UNPACK_SKIP_IMAGES 0x806D #define GL_UNPACK_SKIP_IMAGES_EXT 0x806D #define GL_UNPACK_IMAGE_HEIGHT 0x806E #define GL_UNPACK_IMAGE_HEIGHT_EXT 0x806E #define GL_TEXTURE_3D 0x806F #define GL_TEXTURE_3D_EXT 0x806F #define GL_PROXY_TEXTURE_3D 0x8070 #define GL_PROXY_TEXTURE_3D_EXT 0x8070 #define GL_TEXTURE_DEPTH 0x8071 #define GL_TEXTURE_DEPTH_EXT 0x8071 #define GL_TEXTURE_WRAP_R 0x8072 #define GL_TEXTURE_WRAP_R_EXT 0x8072 #define GL_MAX_3D_TEXTURE_SIZE 0x8073 #define GL_MAX_3D_TEXTURE_SIZE_EXT 0x8073 #endif #ifndef GL_SGIS_texture_filter4 #define GL_FILTER4_SGIS 0x8146 #define GL_TEXTURE_FILTER4_SIZE_SGIS 0x8147 #endif #ifndef GL_EXT_subtexture #endif #ifndef GL_EXT_copy_texture #endif #ifndef GL_EXT_histogram #define GL_HISTOGRAM_EXT 0x8024 #define GL_PROXY_HISTOGRAM_EXT 0x8025 #define GL_HISTOGRAM_WIDTH_EXT 0x8026 #define GL_HISTOGRAM_FORMAT_EXT 0x8027 #define GL_HISTOGRAM_RED_SIZE_EXT 0x8028 #define GL_HISTOGRAM_GREEN_SIZE_EXT 0x8029 #define GL_HISTOGRAM_BLUE_SIZE_EXT 0x802A #define GL_HISTOGRAM_ALPHA_SIZE_EXT 0x802B #define GL_HISTOGRAM_LUMINANCE_SIZE_EXT 0x802C #define GL_HISTOGRAM_SINK_EXT 0x802D #define GL_MINMAX_EXT 0x802E #define GL_MINMAX_FORMAT_EXT 0x802F #define GL_MINMAX_SINK_EXT 0x8030 #define GL_TABLE_TOO_LARGE_EXT 0x8031 #endif #ifndef GL_EXT_convolution #define GL_CONVOLUTION_1D_EXT 0x8010 #define GL_CONVOLUTION_2D_EXT 0x8011 #define GL_SEPARABLE_2D_EXT 0x8012 #define GL_CONVOLUTION_BORDER_MODE_EXT 0x8013 #define GL_CONVOLUTION_FILTER_SCALE_EXT 0x8014 #define GL_CONVOLUTION_FILTER_BIAS_EXT 0x8015 #define GL_REDUCE_EXT 0x8016 #define GL_CONVOLUTION_FORMAT_EXT 0x8017 #define GL_CONVOLUTION_WIDTH_EXT 0x8018 #define GL_CONVOLUTION_HEIGHT_EXT 0x8019 #define GL_MAX_CONVOLUTION_WIDTH_EXT 0x801A #define GL_MAX_CONVOLUTION_HEIGHT_EXT 0x801B #define GL_POST_CONVOLUTION_RED_SCALE_EXT 0x801C #define GL_POST_CONVOLUTION_GREEN_SCALE_EXT 0x801D #define GL_POST_CONVOLUTION_BLUE_SCALE_EXT 0x801E #define GL_POST_CONVOLUTION_ALPHA_SCALE_EXT 0x801F #define GL_POST_CONVOLUTION_RED_BIAS_EXT 0x8020 #define GL_POST_CONVOLUTION_GREEN_BIAS_EXT 0x8021 #define GL_POST_CONVOLUTION_BLUE_BIAS_EXT 0x8022 #define GL_POST_CONVOLUTION_ALPHA_BIAS_EXT 0x8023 #endif #ifndef GL_SGI_color_matrix #define GL_COLOR_MATRIX_SGI 0x80B1 #define GL_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B2 #define GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B3 #define GL_POST_COLOR_MATRIX_RED_SCALE_SGI 0x80B4 #define GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI 0x80B5 #define GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI 0x80B6 #define GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI 0x80B7 #define GL_POST_COLOR_MATRIX_RED_BIAS_SGI 0x80B8 #define GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI 0x80B9 #define GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI 0x80BA #define GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI 0x80BB #endif #ifndef GL_SGI_color_table #define GL_COLOR_TABLE_SGI 0x80D0 #define GL_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D1 #define GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D2 #define GL_PROXY_COLOR_TABLE_SGI 0x80D3 #define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D4 #define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D5 #define GL_COLOR_TABLE_SCALE_SGI 0x80D6 #define GL_COLOR_TABLE_BIAS_SGI 0x80D7 #define GL_COLOR_TABLE_FORMAT_SGI 0x80D8 #define GL_COLOR_TABLE_WIDTH_SGI 0x80D9 #define GL_COLOR_TABLE_RED_SIZE_SGI 0x80DA #define GL_COLOR_TABLE_GREEN_SIZE_SGI 0x80DB #define GL_COLOR_TABLE_BLUE_SIZE_SGI 0x80DC #define GL_COLOR_TABLE_ALPHA_SIZE_SGI 0x80DD #define GL_COLOR_TABLE_LUMINANCE_SIZE_SGI 0x80DE #define GL_COLOR_TABLE_INTENSITY_SIZE_SGI 0x80DF #endif #ifndef GL_SGIS_pixel_texture #define GL_PIXEL_TEXTURE_SGIS 0x8353 #define GL_PIXEL_FRAGMENT_RGB_SOURCE_SGIS 0x8354 #define GL_PIXEL_FRAGMENT_ALPHA_SOURCE_SGIS 0x8355 #define GL_PIXEL_GROUP_COLOR_SGIS 0x8356 #endif #ifndef GL_SGIX_pixel_texture #define GL_PIXEL_TEX_GEN_SGIX 0x8139 #define GL_PIXEL_TEX_GEN_MODE_SGIX 0x832B #endif #ifndef GL_SGIS_texture4D #define GL_PACK_SKIP_VOLUMES_SGIS 0x8130 #define GL_PACK_IMAGE_DEPTH_SGIS 0x8131 #define GL_UNPACK_SKIP_VOLUMES_SGIS 0x8132 #define GL_UNPACK_IMAGE_DEPTH_SGIS 0x8133 #define GL_TEXTURE_4D_SGIS 0x8134 #define GL_PROXY_TEXTURE_4D_SGIS 0x8135 #define GL_TEXTURE_4DSIZE_SGIS 0x8136 #define GL_TEXTURE_WRAP_Q_SGIS 0x8137 #define GL_MAX_4D_TEXTURE_SIZE_SGIS 0x8138 #define GL_TEXTURE_4D_BINDING_SGIS 0x814F #endif #ifndef GL_SGI_texture_color_table #define GL_TEXTURE_COLOR_TABLE_SGI 0x80BC #define GL_PROXY_TEXTURE_COLOR_TABLE_SGI 0x80BD #endif #ifndef GL_EXT_cmyka #define GL_CMYK_EXT 0x800C #define GL_CMYKA_EXT 0x800D #define GL_PACK_CMYK_HINT_EXT 0x800E #define GL_UNPACK_CMYK_HINT_EXT 0x800F #endif #ifndef GL_EXT_texture_object #define GL_TEXTURE_PRIORITY_EXT 0x8066 #define GL_TEXTURE_RESIDENT_EXT 0x8067 #define GL_TEXTURE_1D_BINDING_EXT 0x8068 #define GL_TEXTURE_2D_BINDING_EXT 0x8069 #define GL_TEXTURE_3D_BINDING_EXT 0x806A #endif #ifndef GL_SGIS_detail_texture #define GL_DETAIL_TEXTURE_2D_SGIS 0x8095 #define GL_DETAIL_TEXTURE_2D_BINDING_SGIS 0x8096 #define GL_LINEAR_DETAIL_SGIS 0x8097 #define GL_LINEAR_DETAIL_ALPHA_SGIS 0x8098 #define GL_LINEAR_DETAIL_COLOR_SGIS 0x8099 #define GL_DETAIL_TEXTURE_LEVEL_SGIS 0x809A #define GL_DETAIL_TEXTURE_MODE_SGIS 0x809B #define GL_DETAIL_TEXTURE_FUNC_POINTS_SGIS 0x809C #endif #ifndef GL_SGIS_sharpen_texture #define GL_LINEAR_SHARPEN_SGIS 0x80AD #define GL_LINEAR_SHARPEN_ALPHA_SGIS 0x80AE #define GL_LINEAR_SHARPEN_COLOR_SGIS 0x80AF #define GL_SHARPEN_TEXTURE_FUNC_POINTS_SGIS 0x80B0 #endif #ifndef GL_EXT_packed_pixels #define GL_UNSIGNED_BYTE_3_3_2_EXT 0x8032 #define GL_UNSIGNED_SHORT_4_4_4_4_EXT 0x8033 #define GL_UNSIGNED_SHORT_5_5_5_1_EXT 0x8034 #define GL_UNSIGNED_INT_8_8_8_8_EXT 0x8035 #define GL_UNSIGNED_INT_10_10_10_2_EXT 0x8036 #endif #ifndef GL_SGIS_texture_lod #define GL_TEXTURE_MIN_LOD_SGIS 0x813A #define GL_TEXTURE_MAX_LOD_SGIS 0x813B #define GL_TEXTURE_BASE_LEVEL_SGIS 0x813C #define GL_TEXTURE_MAX_LEVEL_SGIS 0x813D #endif #ifndef GL_SGIS_multisample #define GL_MULTISAMPLE_SGIS 0x809D #define GL_SAMPLE_ALPHA_TO_MASK_SGIS 0x809E #define GL_SAMPLE_ALPHA_TO_ONE_SGIS 0x809F #define GL_SAMPLE_MASK_SGIS 0x80A0 #define GL_1PASS_SGIS 0x80A1 #define GL_2PASS_0_SGIS 0x80A2 #define GL_2PASS_1_SGIS 0x80A3 #define GL_4PASS_0_SGIS 0x80A4 #define GL_4PASS_1_SGIS 0x80A5 #define GL_4PASS_2_SGIS 0x80A6 #define GL_4PASS_3_SGIS 0x80A7 #define GL_SAMPLE_BUFFERS_SGIS 0x80A8 #define GL_SAMPLES_SGIS 0x80A9 #define GL_SAMPLE_MASK_VALUE_SGIS 0x80AA #define GL_SAMPLE_MASK_INVERT_SGIS 0x80AB #define GL_SAMPLE_PATTERN_SGIS 0x80AC #endif #ifndef GL_EXT_rescale_normal #define GL_RESCALE_NORMAL_EXT 0x803A #endif #ifndef GL_EXT_vertex_array #define GL_VERTEX_ARRAY_EXT 0x8074 #define GL_NORMAL_ARRAY_EXT 0x8075 #define GL_COLOR_ARRAY_EXT 0x8076 #define GL_INDEX_ARRAY_EXT 0x8077 #define GL_TEXTURE_COORD_ARRAY_EXT 0x8078 #define GL_EDGE_FLAG_ARRAY_EXT 0x8079 #define GL_VERTEX_ARRAY_SIZE_EXT 0x807A #define GL_VERTEX_ARRAY_TYPE_EXT 0x807B #define GL_VERTEX_ARRAY_STRIDE_EXT 0x807C #define GL_VERTEX_ARRAY_COUNT_EXT 0x807D #define GL_NORMAL_ARRAY_TYPE_EXT 0x807E #define GL_NORMAL_ARRAY_STRIDE_EXT 0x807F #define GL_NORMAL_ARRAY_COUNT_EXT 0x8080 #define GL_COLOR_ARRAY_SIZE_EXT 0x8081 #define GL_COLOR_ARRAY_TYPE_EXT 0x8082 #define GL_COLOR_ARRAY_STRIDE_EXT 0x8083 #define GL_COLOR_ARRAY_COUNT_EXT 0x8084 #define GL_INDEX_ARRAY_TYPE_EXT 0x8085 #define GL_INDEX_ARRAY_STRIDE_EXT 0x8086 #define GL_INDEX_ARRAY_COUNT_EXT 0x8087 #define GL_TEXTURE_COORD_ARRAY_SIZE_EXT 0x8088 #define GL_TEXTURE_COORD_ARRAY_TYPE_EXT 0x8089 #define GL_TEXTURE_COORD_ARRAY_STRIDE_EXT 0x808A #define GL_TEXTURE_COORD_ARRAY_COUNT_EXT 0x808B #define GL_EDGE_FLAG_ARRAY_STRIDE_EXT 0x808C #define GL_EDGE_FLAG_ARRAY_COUNT_EXT 0x808D #define GL_VERTEX_ARRAY_POINTER_EXT 0x808E #define GL_NORMAL_ARRAY_POINTER_EXT 0x808F #define GL_COLOR_ARRAY_POINTER_EXT 0x8090 #define GL_INDEX_ARRAY_POINTER_EXT 0x8091 #define GL_TEXTURE_COORD_ARRAY_POINTER_EXT 0x8092 #define GL_EDGE_FLAG_ARRAY_POINTER_EXT 0x8093 #endif #ifndef GL_EXT_misc_attribute #endif #ifndef GL_SGIS_generate_mipmap #define GL_GENERATE_MIPMAP_SGIS 0x8191 #define GL_GENERATE_MIPMAP_HINT_SGIS 0x8192 #endif #ifndef GL_SGIX_clipmap #define GL_LINEAR_CLIPMAP_LINEAR_SGIX 0x8170 #define GL_TEXTURE_CLIPMAP_CENTER_SGIX 0x8171 #define GL_TEXTURE_CLIPMAP_FRAME_SGIX 0x8172 #define GL_TEXTURE_CLIPMAP_OFFSET_SGIX 0x8173 #define GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8174 #define GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX 0x8175 #define GL_TEXTURE_CLIPMAP_DEPTH_SGIX 0x8176 #define GL_MAX_CLIPMAP_DEPTH_SGIX 0x8177 #define GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8178 #define GL_NEAREST_CLIPMAP_NEAREST_SGIX 0x844D #define GL_NEAREST_CLIPMAP_LINEAR_SGIX 0x844E #define GL_LINEAR_CLIPMAP_NEAREST_SGIX 0x844F #endif #ifndef GL_SGIX_shadow #define GL_TEXTURE_COMPARE_SGIX 0x819A #define GL_TEXTURE_COMPARE_OPERATOR_SGIX 0x819B #define GL_TEXTURE_LEQUAL_R_SGIX 0x819C #define GL_TEXTURE_GEQUAL_R_SGIX 0x819D #endif #ifndef GL_SGIS_texture_edge_clamp #define GL_CLAMP_TO_EDGE_SGIS 0x812F #endif #ifndef GL_EXT_blend_minmax #define GL_FUNC_ADD_EXT 0x8006 #define GL_MIN_EXT 0x8007 #define GL_MAX_EXT 0x8008 #define GL_BLEND_EQUATION_EXT 0x8009 #endif #ifndef GL_EXT_blend_subtract #define GL_FUNC_SUBTRACT_EXT 0x800A #define GL_FUNC_REVERSE_SUBTRACT_EXT 0x800B #endif #ifndef GL_EXT_blend_logic_op #endif #ifndef GL_SGIX_interlace #define GL_INTERLACE_SGIX 0x8094 #endif #ifndef GL_SGIX_pixel_tiles #define GL_PIXEL_TILE_BEST_ALIGNMENT_SGIX 0x813E #define GL_PIXEL_TILE_CACHE_INCREMENT_SGIX 0x813F #define GL_PIXEL_TILE_WIDTH_SGIX 0x8140 #define GL_PIXEL_TILE_HEIGHT_SGIX 0x8141 #define GL_PIXEL_TILE_GRID_WIDTH_SGIX 0x8142 #define GL_PIXEL_TILE_GRID_HEIGHT_SGIX 0x8143 #define GL_PIXEL_TILE_GRID_DEPTH_SGIX 0x8144 #define GL_PIXEL_TILE_CACHE_SIZE_SGIX 0x8145 #endif #ifndef GL_SGIS_texture_select #define GL_DUAL_ALPHA4_SGIS 0x8110 #define GL_DUAL_ALPHA8_SGIS 0x8111 #define GL_DUAL_ALPHA12_SGIS 0x8112 #define GL_DUAL_ALPHA16_SGIS 0x8113 #define GL_DUAL_LUMINANCE4_SGIS 0x8114 #define GL_DUAL_LUMINANCE8_SGIS 0x8115 #define GL_DUAL_LUMINANCE12_SGIS 0x8116 #define GL_DUAL_LUMINANCE16_SGIS 0x8117 #define GL_DUAL_INTENSITY4_SGIS 0x8118 #define GL_DUAL_INTENSITY8_SGIS 0x8119 #define GL_DUAL_INTENSITY12_SGIS 0x811A #define GL_DUAL_INTENSITY16_SGIS 0x811B #define GL_DUAL_LUMINANCE_ALPHA4_SGIS 0x811C #define GL_DUAL_LUMINANCE_ALPHA8_SGIS 0x811D #define GL_QUAD_ALPHA4_SGIS 0x811E #define GL_QUAD_ALPHA8_SGIS 0x811F #define GL_QUAD_LUMINANCE4_SGIS 0x8120 #define GL_QUAD_LUMINANCE8_SGIS 0x8121 #define GL_QUAD_INTENSITY4_SGIS 0x8122 #define GL_QUAD_INTENSITY8_SGIS 0x8123 #define GL_DUAL_TEXTURE_SELECT_SGIS 0x8124 #define GL_QUAD_TEXTURE_SELECT_SGIS 0x8125 #endif #ifndef GL_SGIX_sprite #define GL_SPRITE_SGIX 0x8148 #define GL_SPRITE_MODE_SGIX 0x8149 #define GL_SPRITE_AXIS_SGIX 0x814A #define GL_SPRITE_TRANSLATION_SGIX 0x814B #define GL_SPRITE_AXIAL_SGIX 0x814C #define GL_SPRITE_OBJECT_ALIGNED_SGIX 0x814D #define GL_SPRITE_EYE_ALIGNED_SGIX 0x814E #endif #ifndef GL_SGIX_texture_multi_buffer #define GL_TEXTURE_MULTI_BUFFER_HINT_SGIX 0x812E #endif #ifndef GL_SGIX_instruments #define GL_INSTRUMENT_BUFFER_POINTER_SGIX 0x8180 #define GL_INSTRUMENT_MEASUREMENTS_SGIX 0x8181 #endif #ifndef GL_SGIX_texture_scale_bias #define GL_POST_TEXTURE_FILTER_BIAS_SGIX 0x8179 #define GL_POST_TEXTURE_FILTER_SCALE_SGIX 0x817A #define GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX 0x817B #define GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX 0x817C #endif #ifndef GL_SGIX_framezoom #define GL_FRAMEZOOM_SGIX 0x818B #define GL_FRAMEZOOM_FACTOR_SGIX 0x818C #define GL_MAX_FRAMEZOOM_FACTOR_SGIX 0x818D #endif #ifndef GL_SGIX_tag_sample_buffer #endif #ifndef GL_FfdMaskSGIX #define GL_TEXTURE_DEFORMATION_BIT_SGIX 0x00000001 #define GL_GEOMETRY_DEFORMATION_BIT_SGIX 0x00000002 #endif #ifndef GL_SGIX_polynomial_ffd #define GL_GEOMETRY_DEFORMATION_SGIX 0x8194 #define GL_TEXTURE_DEFORMATION_SGIX 0x8195 #define GL_DEFORMATIONS_MASK_SGIX 0x8196 #define GL_MAX_DEFORMATION_ORDER_SGIX 0x8197 #endif #ifndef GL_SGIX_reference_plane #define GL_REFERENCE_PLANE_SGIX 0x817D #define GL_REFERENCE_PLANE_EQUATION_SGIX 0x817E #endif #ifndef GL_SGIX_flush_raster #endif #ifndef GL_SGIX_depth_texture #define GL_DEPTH_COMPONENT16_SGIX 0x81A5 #define GL_DEPTH_COMPONENT24_SGIX 0x81A6 #define GL_DEPTH_COMPONENT32_SGIX 0x81A7 #endif #ifndef GL_SGIS_fog_function #define GL_FOG_FUNC_SGIS 0x812A #define GL_FOG_FUNC_POINTS_SGIS 0x812B #define GL_MAX_FOG_FUNC_POINTS_SGIS 0x812C #endif #ifndef GL_SGIX_fog_offset #define GL_FOG_OFFSET_SGIX 0x8198 #define GL_FOG_OFFSET_VALUE_SGIX 0x8199 #endif #ifndef GL_HP_image_transform #define GL_IMAGE_SCALE_X_HP 0x8155 #define GL_IMAGE_SCALE_Y_HP 0x8156 #define GL_IMAGE_TRANSLATE_X_HP 0x8157 #define GL_IMAGE_TRANSLATE_Y_HP 0x8158 #define GL_IMAGE_ROTATE_ANGLE_HP 0x8159 #define GL_IMAGE_ROTATE_ORIGIN_X_HP 0x815A #define GL_IMAGE_ROTATE_ORIGIN_Y_HP 0x815B #define GL_IMAGE_MAG_FILTER_HP 0x815C #define GL_IMAGE_MIN_FILTER_HP 0x815D #define GL_IMAGE_CUBIC_WEIGHT_HP 0x815E #define GL_CUBIC_HP 0x815F #define GL_AVERAGE_HP 0x8160 #define GL_IMAGE_TRANSFORM_2D_HP 0x8161 #define GL_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8162 #define GL_PROXY_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8163 #endif #ifndef GL_HP_convolution_border_modes #define GL_IGNORE_BORDER_HP 0x8150 #define GL_CONSTANT_BORDER_HP 0x8151 #define GL_REPLICATE_BORDER_HP 0x8153 #define GL_CONVOLUTION_BORDER_COLOR_HP 0x8154 #endif #ifndef GL_INGR_palette_buffer #endif #ifndef GL_SGIX_texture_add_env #define GL_TEXTURE_ENV_BIAS_SGIX 0x80BE #endif #ifndef GL_EXT_color_subtable #endif #ifndef GL_PGI_vertex_hints #define GL_VERTEX_DATA_HINT_PGI 0x1A22A #define GL_VERTEX_CONSISTENT_HINT_PGI 0x1A22B #define GL_MATERIAL_SIDE_HINT_PGI 0x1A22C #define GL_MAX_VERTEX_HINT_PGI 0x1A22D #define GL_COLOR3_BIT_PGI 0x00010000 #define GL_COLOR4_BIT_PGI 0x00020000 #define GL_EDGEFLAG_BIT_PGI 0x00040000 #define GL_INDEX_BIT_PGI 0x00080000 #define GL_MAT_AMBIENT_BIT_PGI 0x00100000 #define GL_MAT_AMBIENT_AND_DIFFUSE_BIT_PGI 0x00200000 #define GL_MAT_DIFFUSE_BIT_PGI 0x00400000 #define GL_MAT_EMISSION_BIT_PGI 0x00800000 #define GL_MAT_COLOR_INDEXES_BIT_PGI 0x01000000 #define GL_MAT_SHININESS_BIT_PGI 0x02000000 #define GL_MAT_SPECULAR_BIT_PGI 0x04000000 #define GL_NORMAL_BIT_PGI 0x08000000 #define GL_TEXCOORD1_BIT_PGI 0x10000000 #define GL_TEXCOORD2_BIT_PGI 0x20000000 #define GL_TEXCOORD3_BIT_PGI 0x40000000 #define GL_TEXCOORD4_BIT_PGI 0x80000000 #define GL_VERTEX23_BIT_PGI 0x00000004 #define GL_VERTEX4_BIT_PGI 0x00000008 #endif #ifndef GL_PGI_misc_hints #define GL_PREFER_DOUBLEBUFFER_HINT_PGI 0x1A1F8 #define GL_CONSERVE_MEMORY_HINT_PGI 0x1A1FD #define GL_RECLAIM_MEMORY_HINT_PGI 0x1A1FE #define GL_NATIVE_GRAPHICS_HANDLE_PGI 0x1A202 #define GL_NATIVE_GRAPHICS_BEGIN_HINT_PGI 0x1A203 #define GL_NATIVE_GRAPHICS_END_HINT_PGI 0x1A204 #define GL_ALWAYS_FAST_HINT_PGI 0x1A20C #define GL_ALWAYS_SOFT_HINT_PGI 0x1A20D #define GL_ALLOW_DRAW_OBJ_HINT_PGI 0x1A20E #define GL_ALLOW_DRAW_WIN_HINT_PGI 0x1A20F #define GL_ALLOW_DRAW_FRG_HINT_PGI 0x1A210 #define GL_ALLOW_DRAW_MEM_HINT_PGI 0x1A211 #define GL_STRICT_DEPTHFUNC_HINT_PGI 0x1A216 #define GL_STRICT_LIGHTING_HINT_PGI 0x1A217 #define GL_STRICT_SCISSOR_HINT_PGI 0x1A218 #define GL_FULL_STIPPLE_HINT_PGI 0x1A219 #define GL_CLIP_NEAR_HINT_PGI 0x1A220 #define GL_CLIP_FAR_HINT_PGI 0x1A221 #define GL_WIDE_LINE_HINT_PGI 0x1A222 #define GL_BACK_NORMALS_HINT_PGI 0x1A223 #endif #ifndef GL_EXT_paletted_texture #define GL_COLOR_INDEX1_EXT 0x80E2 #define GL_COLOR_INDEX2_EXT 0x80E3 #define GL_COLOR_INDEX4_EXT 0x80E4 #define GL_COLOR_INDEX8_EXT 0x80E5 #define GL_COLOR_INDEX12_EXT 0x80E6 #define GL_COLOR_INDEX16_EXT 0x80E7 #define GL_TEXTURE_INDEX_SIZE_EXT 0x80ED #endif #ifndef GL_EXT_clip_volume_hint #define GL_CLIP_VOLUME_CLIPPING_HINT_EXT 0x80F0 #endif #ifndef GL_SGIX_list_priority #define GL_LIST_PRIORITY_SGIX 0x8182 #endif #ifndef GL_SGIX_ir_instrument1 #define GL_IR_INSTRUMENT1_SGIX 0x817F #endif #ifndef GL_SGIX_calligraphic_fragment #define GL_CALLIGRAPHIC_FRAGMENT_SGIX 0x8183 #endif #ifndef GL_SGIX_texture_lod_bias #define GL_TEXTURE_LOD_BIAS_S_SGIX 0x818E #define GL_TEXTURE_LOD_BIAS_T_SGIX 0x818F #define GL_TEXTURE_LOD_BIAS_R_SGIX 0x8190 #endif #ifndef GL_SGIX_shadow_ambient #define GL_SHADOW_AMBIENT_SGIX 0x80BF #endif #ifndef GL_EXT_index_texture #endif #ifndef GL_EXT_index_material #define GL_INDEX_MATERIAL_EXT 0x81B8 #define GL_INDEX_MATERIAL_PARAMETER_EXT 0x81B9 #define GL_INDEX_MATERIAL_FACE_EXT 0x81BA #endif #ifndef GL_EXT_index_func #define GL_INDEX_TEST_EXT 0x81B5 #define GL_INDEX_TEST_FUNC_EXT 0x81B6 #define GL_INDEX_TEST_REF_EXT 0x81B7 #endif #ifndef GL_EXT_index_array_formats #define GL_IUI_V2F_EXT 0x81AD #define GL_IUI_V3F_EXT 0x81AE #define GL_IUI_N3F_V2F_EXT 0x81AF #define GL_IUI_N3F_V3F_EXT 0x81B0 #define GL_T2F_IUI_V2F_EXT 0x81B1 #define GL_T2F_IUI_V3F_EXT 0x81B2 #define GL_T2F_IUI_N3F_V2F_EXT 0x81B3 #define GL_T2F_IUI_N3F_V3F_EXT 0x81B4 #endif #ifndef GL_EXT_compiled_vertex_array #define GL_ARRAY_ELEMENT_LOCK_FIRST_EXT 0x81A8 #define GL_ARRAY_ELEMENT_LOCK_COUNT_EXT 0x81A9 #endif #ifndef GL_EXT_cull_vertex #define GL_CULL_VERTEX_EXT 0x81AA #define GL_CULL_VERTEX_EYE_POSITION_EXT 0x81AB #define GL_CULL_VERTEX_OBJECT_POSITION_EXT 0x81AC #endif #ifndef GL_SGIX_ycrcb #define GL_YCRCB_422_SGIX 0x81BB #define GL_YCRCB_444_SGIX 0x81BC #endif #ifndef GL_SGIX_fragment_lighting #define GL_FRAGMENT_LIGHTING_SGIX 0x8400 #define GL_FRAGMENT_COLOR_MATERIAL_SGIX 0x8401 #define GL_FRAGMENT_COLOR_MATERIAL_FACE_SGIX 0x8402 #define GL_FRAGMENT_COLOR_MATERIAL_PARAMETER_SGIX 0x8403 #define GL_MAX_FRAGMENT_LIGHTS_SGIX 0x8404 #define GL_MAX_ACTIVE_LIGHTS_SGIX 0x8405 #define GL_CURRENT_RASTER_NORMAL_SGIX 0x8406 #define GL_LIGHT_ENV_MODE_SGIX 0x8407 #define GL_FRAGMENT_LIGHT_MODEL_LOCAL_VIEWER_SGIX 0x8408 #define GL_FRAGMENT_LIGHT_MODEL_TWO_SIDE_SGIX 0x8409 #define GL_FRAGMENT_LIGHT_MODEL_AMBIENT_SGIX 0x840A #define GL_FRAGMENT_LIGHT_MODEL_NORMAL_INTERPOLATION_SGIX 0x840B #define GL_FRAGMENT_LIGHT0_SGIX 0x840C #define GL_FRAGMENT_LIGHT1_SGIX 0x840D #define GL_FRAGMENT_LIGHT2_SGIX 0x840E #define GL_FRAGMENT_LIGHT3_SGIX 0x840F #define GL_FRAGMENT_LIGHT4_SGIX 0x8410 #define GL_FRAGMENT_LIGHT5_SGIX 0x8411 #define GL_FRAGMENT_LIGHT6_SGIX 0x8412 #define GL_FRAGMENT_LIGHT7_SGIX 0x8413 #endif #ifndef GL_IBM_rasterpos_clip #define GL_RASTER_POSITION_UNCLIPPED_IBM 0x19262 #endif #ifndef GL_HP_texture_lighting #define GL_TEXTURE_LIGHTING_MODE_HP 0x8167 #define GL_TEXTURE_POST_SPECULAR_HP 0x8168 #define GL_TEXTURE_PRE_SPECULAR_HP 0x8169 #endif #ifndef GL_EXT_draw_range_elements #define GL_MAX_ELEMENTS_VERTICES_EXT 0x80E8 #define GL_MAX_ELEMENTS_INDICES_EXT 0x80E9 #endif #ifndef GL_WIN_phong_shading #define GL_PHONG_WIN 0x80EA #define GL_PHONG_HINT_WIN 0x80EB #endif #ifndef GL_WIN_specular_fog #define GL_FOG_SPECULAR_TEXTURE_WIN 0x80EC #endif #ifndef GL_EXT_light_texture #define GL_FRAGMENT_MATERIAL_EXT 0x8349 #define GL_FRAGMENT_NORMAL_EXT 0x834A #define GL_FRAGMENT_COLOR_EXT 0x834C #define GL_ATTENUATION_EXT 0x834D #define GL_SHADOW_ATTENUATION_EXT 0x834E #define GL_TEXTURE_APPLICATION_MODE_EXT 0x834F #define GL_TEXTURE_LIGHT_EXT 0x8350 #define GL_TEXTURE_MATERIAL_FACE_EXT 0x8351 #define GL_TEXTURE_MATERIAL_PARAMETER_EXT 0x8352 /* reuse GL_FRAGMENT_DEPTH_EXT */ #endif #ifndef GL_SGIX_blend_alpha_minmax #define GL_ALPHA_MIN_SGIX 0x8320 #define GL_ALPHA_MAX_SGIX 0x8321 #endif #ifndef GL_SGIX_impact_pixel_texture #define GL_PIXEL_TEX_GEN_Q_CEILING_SGIX 0x8184 #define GL_PIXEL_TEX_GEN_Q_ROUND_SGIX 0x8185 #define GL_PIXEL_TEX_GEN_Q_FLOOR_SGIX 0x8186 #define GL_PIXEL_TEX_GEN_ALPHA_REPLACE_SGIX 0x8187 #define GL_PIXEL_TEX_GEN_ALPHA_NO_REPLACE_SGIX 0x8188 #define GL_PIXEL_TEX_GEN_ALPHA_LS_SGIX 0x8189 #define GL_PIXEL_TEX_GEN_ALPHA_MS_SGIX 0x818A #endif #ifndef GL_EXT_bgra #define GL_BGR_EXT 0x80E0 #define GL_BGRA_EXT 0x80E1 #endif #ifndef GL_SGIX_async #define GL_ASYNC_MARKER_SGIX 0x8329 #endif #ifndef GL_SGIX_async_pixel #define GL_ASYNC_TEX_IMAGE_SGIX 0x835C #define GL_ASYNC_DRAW_PIXELS_SGIX 0x835D #define GL_ASYNC_READ_PIXELS_SGIX 0x835E #define GL_MAX_ASYNC_TEX_IMAGE_SGIX 0x835F #define GL_MAX_ASYNC_DRAW_PIXELS_SGIX 0x8360 #define GL_MAX_ASYNC_READ_PIXELS_SGIX 0x8361 #endif #ifndef GL_SGIX_async_histogram #define GL_ASYNC_HISTOGRAM_SGIX 0x832C #define GL_MAX_ASYNC_HISTOGRAM_SGIX 0x832D #endif #ifndef GL_INTEL_texture_scissor #endif #ifndef GL_INTEL_parallel_arrays #define GL_PARALLEL_ARRAYS_INTEL 0x83F4 #define GL_VERTEX_ARRAY_PARALLEL_POINTERS_INTEL 0x83F5 #define GL_NORMAL_ARRAY_PARALLEL_POINTERS_INTEL 0x83F6 #define GL_COLOR_ARRAY_PARALLEL_POINTERS_INTEL 0x83F7 #define GL_TEXTURE_COORD_ARRAY_PARALLEL_POINTERS_INTEL 0x83F8 #endif #ifndef GL_HP_occlusion_test #define GL_OCCLUSION_TEST_HP 0x8165 #define GL_OCCLUSION_TEST_RESULT_HP 0x8166 #endif #ifndef GL_EXT_pixel_transform #define GL_PIXEL_TRANSFORM_2D_EXT 0x8330 #define GL_PIXEL_MAG_FILTER_EXT 0x8331 #define GL_PIXEL_MIN_FILTER_EXT 0x8332 #define GL_PIXEL_CUBIC_WEIGHT_EXT 0x8333 #define GL_CUBIC_EXT 0x8334 #define GL_AVERAGE_EXT 0x8335 #define GL_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8336 #define GL_MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8337 #define GL_PIXEL_TRANSFORM_2D_MATRIX_EXT 0x8338 #endif #ifndef GL_EXT_pixel_transform_color_table #endif #ifndef GL_EXT_shared_texture_palette #define GL_SHARED_TEXTURE_PALETTE_EXT 0x81FB #endif #ifndef GL_EXT_separate_specular_color #define GL_LIGHT_MODEL_COLOR_CONTROL_EXT 0x81F8 #define GL_SINGLE_COLOR_EXT 0x81F9 #define GL_SEPARATE_SPECULAR_COLOR_EXT 0x81FA #endif #ifndef GL_EXT_secondary_color #define GL_COLOR_SUM_EXT 0x8458 #define GL_CURRENT_SECONDARY_COLOR_EXT 0x8459 #define GL_SECONDARY_COLOR_ARRAY_SIZE_EXT 0x845A #define GL_SECONDARY_COLOR_ARRAY_TYPE_EXT 0x845B #define GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT 0x845C #define GL_SECONDARY_COLOR_ARRAY_POINTER_EXT 0x845D #define GL_SECONDARY_COLOR_ARRAY_EXT 0x845E #endif #ifndef GL_EXT_texture_perturb_normal #define GL_PERTURB_EXT 0x85AE #define GL_TEXTURE_NORMAL_EXT 0x85AF #endif #ifndef GL_EXT_multi_draw_arrays #endif #ifndef GL_EXT_fog_coord #define GL_FOG_COORDINATE_SOURCE_EXT 0x8450 #define GL_FOG_COORDINATE_EXT 0x8451 #define GL_FRAGMENT_DEPTH_EXT 0x8452 #define GL_CURRENT_FOG_COORDINATE_EXT 0x8453 #define GL_FOG_COORDINATE_ARRAY_TYPE_EXT 0x8454 #define GL_FOG_COORDINATE_ARRAY_STRIDE_EXT 0x8455 #define GL_FOG_COORDINATE_ARRAY_POINTER_EXT 0x8456 #define GL_FOG_COORDINATE_ARRAY_EXT 0x8457 #endif #ifndef GL_REND_screen_coordinates #define GL_SCREEN_COORDINATES_REND 0x8490 #define GL_INVERTED_SCREEN_W_REND 0x8491 #endif #ifndef GL_EXT_coordinate_frame #define GL_TANGENT_ARRAY_EXT 0x8439 #define GL_BINORMAL_ARRAY_EXT 0x843A #define GL_CURRENT_TANGENT_EXT 0x843B #define GL_CURRENT_BINORMAL_EXT 0x843C #define GL_TANGENT_ARRAY_TYPE_EXT 0x843E #define GL_TANGENT_ARRAY_STRIDE_EXT 0x843F #define GL_BINORMAL_ARRAY_TYPE_EXT 0x8440 #define GL_BINORMAL_ARRAY_STRIDE_EXT 0x8441 #define GL_TANGENT_ARRAY_POINTER_EXT 0x8442 #define GL_BINORMAL_ARRAY_POINTER_EXT 0x8443 #define GL_MAP1_TANGENT_EXT 0x8444 #define GL_MAP2_TANGENT_EXT 0x8445 #define GL_MAP1_BINORMAL_EXT 0x8446 #define GL_MAP2_BINORMAL_EXT 0x8447 #endif #ifndef GL_EXT_texture_env_combine #define GL_COMBINE_EXT 0x8570 #define GL_COMBINE_RGB_EXT 0x8571 #define GL_COMBINE_ALPHA_EXT 0x8572 #define GL_RGB_SCALE_EXT 0x8573 #define GL_ADD_SIGNED_EXT 0x8574 #define GL_INTERPOLATE_EXT 0x8575 #define GL_CONSTANT_EXT 0x8576 #define GL_PRIMARY_COLOR_EXT 0x8577 #define GL_PREVIOUS_EXT 0x8578 #define GL_SOURCE0_RGB_EXT 0x8580 #define GL_SOURCE1_RGB_EXT 0x8581 #define GL_SOURCE2_RGB_EXT 0x8582 #define GL_SOURCE0_ALPHA_EXT 0x8588 #define GL_SOURCE1_ALPHA_EXT 0x8589 #define GL_SOURCE2_ALPHA_EXT 0x858A #define GL_OPERAND0_RGB_EXT 0x8590 #define GL_OPERAND1_RGB_EXT 0x8591 #define GL_OPERAND2_RGB_EXT 0x8592 #define GL_OPERAND0_ALPHA_EXT 0x8598 #define GL_OPERAND1_ALPHA_EXT 0x8599 #define GL_OPERAND2_ALPHA_EXT 0x859A #endif #ifndef GL_APPLE_specular_vector #define GL_LIGHT_MODEL_SPECULAR_VECTOR_APPLE 0x85B0 #endif #ifndef GL_APPLE_transform_hint #define GL_TRANSFORM_HINT_APPLE 0x85B1 #endif #ifndef GL_SGIX_fog_scale #define GL_FOG_SCALE_SGIX 0x81FC #define GL_FOG_SCALE_VALUE_SGIX 0x81FD #endif #ifndef GL_SUNX_constant_data #define GL_UNPACK_CONSTANT_DATA_SUNX 0x81D5 #define GL_TEXTURE_CONSTANT_DATA_SUNX 0x81D6 #endif #ifndef GL_SUN_global_alpha #define GL_GLOBAL_ALPHA_SUN 0x81D9 #define GL_GLOBAL_ALPHA_FACTOR_SUN 0x81DA #endif #ifndef GL_SUN_triangle_list #define GL_RESTART_SUN 0x0001 #define GL_REPLACE_MIDDLE_SUN 0x0002 #define GL_REPLACE_OLDEST_SUN 0x0003 #define GL_TRIANGLE_LIST_SUN 0x81D7 #define GL_REPLACEMENT_CODE_SUN 0x81D8 #define GL_REPLACEMENT_CODE_ARRAY_SUN 0x85C0 #define GL_REPLACEMENT_CODE_ARRAY_TYPE_SUN 0x85C1 #define GL_REPLACEMENT_CODE_ARRAY_STRIDE_SUN 0x85C2 #define GL_REPLACEMENT_CODE_ARRAY_POINTER_SUN 0x85C3 #define GL_R1UI_V3F_SUN 0x85C4 #define GL_R1UI_C4UB_V3F_SUN 0x85C5 #define GL_R1UI_C3F_V3F_SUN 0x85C6 #define GL_R1UI_N3F_V3F_SUN 0x85C7 #define GL_R1UI_C4F_N3F_V3F_SUN 0x85C8 #define GL_R1UI_T2F_V3F_SUN 0x85C9 #define GL_R1UI_T2F_N3F_V3F_SUN 0x85CA #define GL_R1UI_T2F_C4F_N3F_V3F_SUN 0x85CB #endif #ifndef GL_SUN_vertex #endif #ifndef GL_EXT_blend_func_separate #define GL_BLEND_DST_RGB_EXT 0x80C8 #define GL_BLEND_SRC_RGB_EXT 0x80C9 #define GL_BLEND_DST_ALPHA_EXT 0x80CA #define GL_BLEND_SRC_ALPHA_EXT 0x80CB #endif #ifndef GL_INGR_color_clamp #define GL_RED_MIN_CLAMP_INGR 0x8560 #define GL_GREEN_MIN_CLAMP_INGR 0x8561 #define GL_BLUE_MIN_CLAMP_INGR 0x8562 #define GL_ALPHA_MIN_CLAMP_INGR 0x8563 #define GL_RED_MAX_CLAMP_INGR 0x8564 #define GL_GREEN_MAX_CLAMP_INGR 0x8565 #define GL_BLUE_MAX_CLAMP_INGR 0x8566 #define GL_ALPHA_MAX_CLAMP_INGR 0x8567 #endif #ifndef GL_INGR_interlace_read #define GL_INTERLACE_READ_INGR 0x8568 #endif #ifndef GL_EXT_stencil_wrap #define GL_INCR_WRAP_EXT 0x8507 #define GL_DECR_WRAP_EXT 0x8508 #endif #ifndef GL_EXT_422_pixels #define GL_422_EXT 0x80CC #define GL_422_REV_EXT 0x80CD #define GL_422_AVERAGE_EXT 0x80CE #define GL_422_REV_AVERAGE_EXT 0x80CF #endif #ifndef GL_NV_texgen_reflection #define GL_NORMAL_MAP_NV 0x8511 #define GL_REFLECTION_MAP_NV 0x8512 #endif #ifndef GL_EXT_texture_cube_map #define GL_NORMAL_MAP_EXT 0x8511 #define GL_REFLECTION_MAP_EXT 0x8512 #define GL_TEXTURE_CUBE_MAP_EXT 0x8513 #define GL_TEXTURE_BINDING_CUBE_MAP_EXT 0x8514 #define GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT 0x8515 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT 0x8516 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT 0x8517 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT 0x8518 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT 0x8519 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT 0x851A #define GL_PROXY_TEXTURE_CUBE_MAP_EXT 0x851B #define GL_MAX_CUBE_MAP_TEXTURE_SIZE_EXT 0x851C #endif #ifndef GL_SUN_convolution_border_modes #define GL_WRAP_BORDER_SUN 0x81D4 #endif #ifndef GL_EXT_texture_env_add #endif #ifndef GL_EXT_texture_lod_bias #define GL_MAX_TEXTURE_LOD_BIAS_EXT 0x84FD #define GL_TEXTURE_FILTER_CONTROL_EXT 0x8500 #define GL_TEXTURE_LOD_BIAS_EXT 0x8501 #endif #ifndef GL_EXT_texture_filter_anisotropic #define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE #define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF #endif #ifndef GL_EXT_vertex_weighting #define GL_MODELVIEW0_STACK_DEPTH_EXT GL_MODELVIEW_STACK_DEPTH #define GL_MODELVIEW1_STACK_DEPTH_EXT 0x8502 #define GL_MODELVIEW0_MATRIX_EXT GL_MODELVIEW_MATRIX #define GL_MODELVIEW1_MATRIX_EXT 0x8506 #define GL_VERTEX_WEIGHTING_EXT 0x8509 #define GL_MODELVIEW0_EXT GL_MODELVIEW #define GL_MODELVIEW1_EXT 0x850A #define GL_CURRENT_VERTEX_WEIGHT_EXT 0x850B #define GL_VERTEX_WEIGHT_ARRAY_EXT 0x850C #define GL_VERTEX_WEIGHT_ARRAY_SIZE_EXT 0x850D #define GL_VERTEX_WEIGHT_ARRAY_TYPE_EXT 0x850E #define GL_VERTEX_WEIGHT_ARRAY_STRIDE_EXT 0x850F #define GL_VERTEX_WEIGHT_ARRAY_POINTER_EXT 0x8510 #endif #ifndef GL_NV_light_max_exponent #define GL_MAX_SHININESS_NV 0x8504 #define GL_MAX_SPOT_EXPONENT_NV 0x8505 #endif #ifndef GL_NV_vertex_array_range #define GL_VERTEX_ARRAY_RANGE_NV 0x851D #define GL_VERTEX_ARRAY_RANGE_LENGTH_NV 0x851E #define GL_VERTEX_ARRAY_RANGE_VALID_NV 0x851F #define GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_NV 0x8520 #define GL_VERTEX_ARRAY_RANGE_POINTER_NV 0x8521 #endif #ifndef GL_NV_register_combiners #define GL_REGISTER_COMBINERS_NV 0x8522 #define GL_VARIABLE_A_NV 0x8523 #define GL_VARIABLE_B_NV 0x8524 #define GL_VARIABLE_C_NV 0x8525 #define GL_VARIABLE_D_NV 0x8526 #define GL_VARIABLE_E_NV 0x8527 #define GL_VARIABLE_F_NV 0x8528 #define GL_VARIABLE_G_NV 0x8529 #define GL_CONSTANT_COLOR0_NV 0x852A #define GL_CONSTANT_COLOR1_NV 0x852B #define GL_PRIMARY_COLOR_NV 0x852C #define GL_SECONDARY_COLOR_NV 0x852D #define GL_SPARE0_NV 0x852E #define GL_SPARE1_NV 0x852F #define GL_DISCARD_NV 0x8530 #define GL_E_TIMES_F_NV 0x8531 #define GL_SPARE0_PLUS_SECONDARY_COLOR_NV 0x8532 #define GL_UNSIGNED_IDENTITY_NV 0x8536 #define GL_UNSIGNED_INVERT_NV 0x8537 #define GL_EXPAND_NORMAL_NV 0x8538 #define GL_EXPAND_NEGATE_NV 0x8539 #define GL_HALF_BIAS_NORMAL_NV 0x853A #define GL_HALF_BIAS_NEGATE_NV 0x853B #define GL_SIGNED_IDENTITY_NV 0x853C #define GL_SIGNED_NEGATE_NV 0x853D #define GL_SCALE_BY_TWO_NV 0x853E #define GL_SCALE_BY_FOUR_NV 0x853F #define GL_SCALE_BY_ONE_HALF_NV 0x8540 #define GL_BIAS_BY_NEGATIVE_ONE_HALF_NV 0x8541 #define GL_COMBINER_INPUT_NV 0x8542 #define GL_COMBINER_MAPPING_NV 0x8543 #define GL_COMBINER_COMPONENT_USAGE_NV 0x8544 #define GL_COMBINER_AB_DOT_PRODUCT_NV 0x8545 #define GL_COMBINER_CD_DOT_PRODUCT_NV 0x8546 #define GL_COMBINER_MUX_SUM_NV 0x8547 #define GL_COMBINER_SCALE_NV 0x8548 #define GL_COMBINER_BIAS_NV 0x8549 #define GL_COMBINER_AB_OUTPUT_NV 0x854A #define GL_COMBINER_CD_OUTPUT_NV 0x854B #define GL_COMBINER_SUM_OUTPUT_NV 0x854C #define GL_MAX_GENERAL_COMBINERS_NV 0x854D #define GL_NUM_GENERAL_COMBINERS_NV 0x854E #define GL_COLOR_SUM_CLAMP_NV 0x854F #define GL_COMBINER0_NV 0x8550 #define GL_COMBINER1_NV 0x8551 #define GL_COMBINER2_NV 0x8552 #define GL_COMBINER3_NV 0x8553 #define GL_COMBINER4_NV 0x8554 #define GL_COMBINER5_NV 0x8555 #define GL_COMBINER6_NV 0x8556 #define GL_COMBINER7_NV 0x8557 /* reuse GL_TEXTURE0_ARB */ /* reuse GL_TEXTURE1_ARB */ /* reuse GL_ZERO */ /* reuse GL_NONE */ /* reuse GL_FOG */ #endif #ifndef GL_NV_fog_distance #define GL_FOG_DISTANCE_MODE_NV 0x855A #define GL_EYE_RADIAL_NV 0x855B #define GL_EYE_PLANE_ABSOLUTE_NV 0x855C /* reuse GL_EYE_PLANE */ #endif #ifndef GL_NV_texgen_emboss #define GL_EMBOSS_LIGHT_NV 0x855D #define GL_EMBOSS_CONSTANT_NV 0x855E #define GL_EMBOSS_MAP_NV 0x855F #endif #ifndef GL_NV_blend_square #endif #ifndef GL_NV_texture_env_combine4 #define GL_COMBINE4_NV 0x8503 #define GL_SOURCE3_RGB_NV 0x8583 #define GL_SOURCE3_ALPHA_NV 0x858B #define GL_OPERAND3_RGB_NV 0x8593 #define GL_OPERAND3_ALPHA_NV 0x859B #endif #ifndef GL_MESA_resize_buffers #endif #ifndef GL_MESA_window_pos #endif #ifndef GL_EXT_texture_compression_s3tc #define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0 #define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1 #define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT 0x83F2 #define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3 #endif #ifndef GL_IBM_cull_vertex #define GL_CULL_VERTEX_IBM 103050 #endif #ifndef GL_IBM_multimode_draw_arrays #endif #ifndef GL_IBM_vertex_array_lists #define GL_VERTEX_ARRAY_LIST_IBM 103070 #define GL_NORMAL_ARRAY_LIST_IBM 103071 #define GL_COLOR_ARRAY_LIST_IBM 103072 #define GL_INDEX_ARRAY_LIST_IBM 103073 #define GL_TEXTURE_COORD_ARRAY_LIST_IBM 103074 #define GL_EDGE_FLAG_ARRAY_LIST_IBM 103075 #define GL_FOG_COORDINATE_ARRAY_LIST_IBM 103076 #define GL_SECONDARY_COLOR_ARRAY_LIST_IBM 103077 #define GL_VERTEX_ARRAY_LIST_STRIDE_IBM 103080 #define GL_NORMAL_ARRAY_LIST_STRIDE_IBM 103081 #define GL_COLOR_ARRAY_LIST_STRIDE_IBM 103082 #define GL_INDEX_ARRAY_LIST_STRIDE_IBM 103083 #define GL_TEXTURE_COORD_ARRAY_LIST_STRIDE_IBM 103084 #define GL_EDGE_FLAG_ARRAY_LIST_STRIDE_IBM 103085 #define GL_FOG_COORDINATE_ARRAY_LIST_STRIDE_IBM 103086 #define GL_SECONDARY_COLOR_ARRAY_LIST_STRIDE_IBM 103087 #endif #ifndef GL_SGIX_subsample #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 #endif #ifndef GL_SGIX_ycrcb_subsample #endif #ifndef GL_SGIX_ycrcba #define GL_YCRCB_SGIX 0x8318 #define GL_YCRCBA_SGIX 0x8319 #endif #ifndef GL_SGI_depth_pass_instrument #define GL_DEPTH_PASS_INSTRUMENT_SGIX 0x8310 #define GL_DEPTH_PASS_INSTRUMENT_COUNTERS_SGIX 0x8311 #define GL_DEPTH_PASS_INSTRUMENT_MAX_SGIX 0x8312 #endif #ifndef GL_3DFX_texture_compression_FXT1 #define GL_COMPRESSED_RGB_FXT1_3DFX 0x86B0 #define GL_COMPRESSED_RGBA_FXT1_3DFX 0x86B1 #endif #ifndef GL_3DFX_multisample #define GL_MULTISAMPLE_3DFX 0x86B2 #define GL_SAMPLE_BUFFERS_3DFX 0x86B3 #define GL_SAMPLES_3DFX 0x86B4 #define GL_MULTISAMPLE_BIT_3DFX 0x20000000 #endif #ifndef GL_3DFX_tbuffer #endif #ifndef GL_EXT_multisample #define GL_MULTISAMPLE_EXT 0x809D #define GL_SAMPLE_ALPHA_TO_MASK_EXT 0x809E #define GL_SAMPLE_ALPHA_TO_ONE_EXT 0x809F #define GL_SAMPLE_MASK_EXT 0x80A0 #define GL_1PASS_EXT 0x80A1 #define GL_2PASS_0_EXT 0x80A2 #define GL_2PASS_1_EXT 0x80A3 #define GL_4PASS_0_EXT 0x80A4 #define GL_4PASS_1_EXT 0x80A5 #define GL_4PASS_2_EXT 0x80A6 #define GL_4PASS_3_EXT 0x80A7 #define GL_SAMPLE_BUFFERS_EXT 0x80A8 #define GL_SAMPLES_EXT 0x80A9 #define GL_SAMPLE_MASK_VALUE_EXT 0x80AA #define GL_SAMPLE_MASK_INVERT_EXT 0x80AB #define GL_SAMPLE_PATTERN_EXT 0x80AC #define GL_MULTISAMPLE_BIT_EXT 0x20000000 #endif #ifndef GL_SGIX_vertex_preclip #define GL_VERTEX_PRECLIP_SGIX 0x83EE #define GL_VERTEX_PRECLIP_HINT_SGIX 0x83EF #endif #ifndef GL_SGIX_convolution_accuracy #define GL_CONVOLUTION_HINT_SGIX 0x8316 #endif #ifndef GL_SGIX_resample #define GL_PACK_RESAMPLE_SGIX 0x842C #define GL_UNPACK_RESAMPLE_SGIX 0x842D #define GL_RESAMPLE_REPLICATE_SGIX 0x842E #define GL_RESAMPLE_ZERO_FILL_SGIX 0x842F #define GL_RESAMPLE_DECIMATE_SGIX 0x8430 #endif #ifndef GL_SGIS_point_line_texgen #define GL_EYE_DISTANCE_TO_POINT_SGIS 0x81F0 #define GL_OBJECT_DISTANCE_TO_POINT_SGIS 0x81F1 #define GL_EYE_DISTANCE_TO_LINE_SGIS 0x81F2 #define GL_OBJECT_DISTANCE_TO_LINE_SGIS 0x81F3 #define GL_EYE_POINT_SGIS 0x81F4 #define GL_OBJECT_POINT_SGIS 0x81F5 #define GL_EYE_LINE_SGIS 0x81F6 #define GL_OBJECT_LINE_SGIS 0x81F7 #endif #ifndef GL_SGIS_texture_color_mask #define GL_TEXTURE_COLOR_WRITEMASK_SGIS 0x81EF #endif #ifndef GL_NV_fence #define GL_ALL_COMPLETED_NV 0x84F2 #define GL_FENCE_STATUS_NV 0x84F3 #define GL_FENCE_CONDITION_NV 0x84F4 #endif #ifndef GL_IBM_texture_mirrored_repeat #define GL_MIRRORED_REPEAT_IBM 0x8370 #endif #ifndef GL_NV_evaluators #define GL_EVAL_2D_NV 0x86C0 #define GL_EVAL_TRIANGULAR_2D_NV 0x86C1 #define GL_MAP_TESSELLATION_NV 0x86C2 #define GL_MAP_ATTRIB_U_ORDER_NV 0x86C3 #define GL_MAP_ATTRIB_V_ORDER_NV 0x86C4 #define GL_EVAL_FRACTIONAL_TESSELLATION_NV 0x86C5 #define GL_EVAL_VERTEX_ATTRIB0_NV 0x86C6 #define GL_EVAL_VERTEX_ATTRIB1_NV 0x86C7 #define GL_EVAL_VERTEX_ATTRIB2_NV 0x86C8 #define GL_EVAL_VERTEX_ATTRIB3_NV 0x86C9 #define GL_EVAL_VERTEX_ATTRIB4_NV 0x86CA #define GL_EVAL_VERTEX_ATTRIB5_NV 0x86CB #define GL_EVAL_VERTEX_ATTRIB6_NV 0x86CC #define GL_EVAL_VERTEX_ATTRIB7_NV 0x86CD #define GL_EVAL_VERTEX_ATTRIB8_NV 0x86CE #define GL_EVAL_VERTEX_ATTRIB9_NV 0x86CF #define GL_EVAL_VERTEX_ATTRIB10_NV 0x86D0 #define GL_EVAL_VERTEX_ATTRIB11_NV 0x86D1 #define GL_EVAL_VERTEX_ATTRIB12_NV 0x86D2 #define GL_EVAL_VERTEX_ATTRIB13_NV 0x86D3 #define GL_EVAL_VERTEX_ATTRIB14_NV 0x86D4 #define GL_EVAL_VERTEX_ATTRIB15_NV 0x86D5 #define GL_MAX_MAP_TESSELLATION_NV 0x86D6 #define GL_MAX_RATIONAL_EVAL_ORDER_NV 0x86D7 #endif #ifndef GL_NV_packed_depth_stencil #define GL_DEPTH_STENCIL_NV 0x84F9 #define GL_UNSIGNED_INT_24_8_NV 0x84FA #endif #ifndef GL_NV_register_combiners2 #define GL_PER_STAGE_CONSTANTS_NV 0x8535 #endif #ifndef GL_NV_texture_compression_vtc #endif #ifndef GL_NV_texture_rectangle #define GL_TEXTURE_RECTANGLE_NV 0x84F5 #define GL_TEXTURE_BINDING_RECTANGLE_NV 0x84F6 #define GL_PROXY_TEXTURE_RECTANGLE_NV 0x84F7 #define GL_MAX_TEXTURE_RECTANGLE_SIZE_NV 0x84F8 #endif #ifndef GL_NV_texture_shader #define GL_OFFSET_TEXTURE_RECTANGLE_NV 0x864C #define GL_OFFSET_TEXTURE_RECTANGLE_SCALE_NV 0x864D #define GL_DOT_PRODUCT_TEXTURE_RECTANGLE_NV 0x864E #define GL_RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV 0x86D9 #define GL_UNSIGNED_INT_S8_S8_8_8_NV 0x86DA #define GL_UNSIGNED_INT_8_8_S8_S8_REV_NV 0x86DB #define GL_DSDT_MAG_INTENSITY_NV 0x86DC #define GL_SHADER_CONSISTENT_NV 0x86DD #define GL_TEXTURE_SHADER_NV 0x86DE #define GL_SHADER_OPERATION_NV 0x86DF #define GL_CULL_MODES_NV 0x86E0 #define GL_OFFSET_TEXTURE_MATRIX_NV 0x86E1 #define GL_OFFSET_TEXTURE_SCALE_NV 0x86E2 #define GL_OFFSET_TEXTURE_BIAS_NV 0x86E3 #define GL_OFFSET_TEXTURE_2D_MATRIX_NV GL_OFFSET_TEXTURE_MATRIX_NV #define GL_OFFSET_TEXTURE_2D_SCALE_NV GL_OFFSET_TEXTURE_SCALE_NV #define GL_OFFSET_TEXTURE_2D_BIAS_NV GL_OFFSET_TEXTURE_BIAS_NV #define GL_PREVIOUS_TEXTURE_INPUT_NV 0x86E4 #define GL_CONST_EYE_NV 0x86E5 #define GL_PASS_THROUGH_NV 0x86E6 #define GL_CULL_FRAGMENT_NV 0x86E7 #define GL_OFFSET_TEXTURE_2D_NV 0x86E8 #define GL_DEPENDENT_AR_TEXTURE_2D_NV 0x86E9 #define GL_DEPENDENT_GB_TEXTURE_2D_NV 0x86EA #define GL_DOT_PRODUCT_NV 0x86EC #define GL_DOT_PRODUCT_DEPTH_REPLACE_NV 0x86ED #define GL_DOT_PRODUCT_TEXTURE_2D_NV 0x86EE #define GL_DOT_PRODUCT_TEXTURE_CUBE_MAP_NV 0x86F0 #define GL_DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV 0x86F1 #define GL_DOT_PRODUCT_REFLECT_CUBE_MAP_NV 0x86F2 #define GL_DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV 0x86F3 #define GL_HILO_NV 0x86F4 #define GL_DSDT_NV 0x86F5 #define GL_DSDT_MAG_NV 0x86F6 #define GL_DSDT_MAG_VIB_NV 0x86F7 #define GL_HILO16_NV 0x86F8 #define GL_SIGNED_HILO_NV 0x86F9 #define GL_SIGNED_HILO16_NV 0x86FA #define GL_SIGNED_RGBA_NV 0x86FB #define GL_SIGNED_RGBA8_NV 0x86FC #define GL_SIGNED_RGB_NV 0x86FE #define GL_SIGNED_RGB8_NV 0x86FF #define GL_SIGNED_LUMINANCE_NV 0x8701 #define GL_SIGNED_LUMINANCE8_NV 0x8702 #define GL_SIGNED_LUMINANCE_ALPHA_NV 0x8703 #define GL_SIGNED_LUMINANCE8_ALPHA8_NV 0x8704 #define GL_SIGNED_ALPHA_NV 0x8705 #define GL_SIGNED_ALPHA8_NV 0x8706 #define GL_SIGNED_INTENSITY_NV 0x8707 #define GL_SIGNED_INTENSITY8_NV 0x8708 #define GL_DSDT8_NV 0x8709 #define GL_DSDT8_MAG8_NV 0x870A #define GL_DSDT8_MAG8_INTENSITY8_NV 0x870B #define GL_SIGNED_RGB_UNSIGNED_ALPHA_NV 0x870C #define GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV 0x870D #define GL_HI_SCALE_NV 0x870E #define GL_LO_SCALE_NV 0x870F #define GL_DS_SCALE_NV 0x8710 #define GL_DT_SCALE_NV 0x8711 #define GL_MAGNITUDE_SCALE_NV 0x8712 #define GL_VIBRANCE_SCALE_NV 0x8713 #define GL_HI_BIAS_NV 0x8714 #define GL_LO_BIAS_NV 0x8715 #define GL_DS_BIAS_NV 0x8716 #define GL_DT_BIAS_NV 0x8717 #define GL_MAGNITUDE_BIAS_NV 0x8718 #define GL_VIBRANCE_BIAS_NV 0x8719 #define GL_TEXTURE_BORDER_VALUES_NV 0x871A #define GL_TEXTURE_HI_SIZE_NV 0x871B #define GL_TEXTURE_LO_SIZE_NV 0x871C #define GL_TEXTURE_DS_SIZE_NV 0x871D #define GL_TEXTURE_DT_SIZE_NV 0x871E #define GL_TEXTURE_MAG_SIZE_NV 0x871F #endif #ifndef GL_NV_texture_shader2 #define GL_DOT_PRODUCT_TEXTURE_3D_NV 0x86EF #endif #ifndef GL_NV_vertex_array_range2 #define GL_VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV 0x8533 #endif #ifndef GL_NV_vertex_program #define GL_VERTEX_PROGRAM_NV 0x8620 #define GL_VERTEX_STATE_PROGRAM_NV 0x8621 #define GL_ATTRIB_ARRAY_SIZE_NV 0x8623 #define GL_ATTRIB_ARRAY_STRIDE_NV 0x8624 #define GL_ATTRIB_ARRAY_TYPE_NV 0x8625 #define GL_CURRENT_ATTRIB_NV 0x8626 #define GL_PROGRAM_LENGTH_NV 0x8627 #define GL_PROGRAM_STRING_NV 0x8628 #define GL_MODELVIEW_PROJECTION_NV 0x8629 #define GL_IDENTITY_NV 0x862A #define GL_INVERSE_NV 0x862B #define GL_TRANSPOSE_NV 0x862C #define GL_INVERSE_TRANSPOSE_NV 0x862D #define GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV 0x862E #define GL_MAX_TRACK_MATRICES_NV 0x862F #define GL_MATRIX0_NV 0x8630 #define GL_MATRIX1_NV 0x8631 #define GL_MATRIX2_NV 0x8632 #define GL_MATRIX3_NV 0x8633 #define GL_MATRIX4_NV 0x8634 #define GL_MATRIX5_NV 0x8635 #define GL_MATRIX6_NV 0x8636 #define GL_MATRIX7_NV 0x8637 #define GL_CURRENT_MATRIX_STACK_DEPTH_NV 0x8640 #define GL_CURRENT_MATRIX_NV 0x8641 #define GL_VERTEX_PROGRAM_POINT_SIZE_NV 0x8642 #define GL_VERTEX_PROGRAM_TWO_SIDE_NV 0x8643 #define GL_PROGRAM_PARAMETER_NV 0x8644 #define GL_ATTRIB_ARRAY_POINTER_NV 0x8645 #define GL_PROGRAM_TARGET_NV 0x8646 #define GL_PROGRAM_RESIDENT_NV 0x8647 #define GL_TRACK_MATRIX_NV 0x8648 #define GL_TRACK_MATRIX_TRANSFORM_NV 0x8649 #define GL_VERTEX_PROGRAM_BINDING_NV 0x864A #define GL_PROGRAM_ERROR_POSITION_NV 0x864B #define GL_VERTEX_ATTRIB_ARRAY0_NV 0x8650 #define GL_VERTEX_ATTRIB_ARRAY1_NV 0x8651 #define GL_VERTEX_ATTRIB_ARRAY2_NV 0x8652 #define GL_VERTEX_ATTRIB_ARRAY3_NV 0x8653 #define GL_VERTEX_ATTRIB_ARRAY4_NV 0x8654 #define GL_VERTEX_ATTRIB_ARRAY5_NV 0x8655 #define GL_VERTEX_ATTRIB_ARRAY6_NV 0x8656 #define GL_VERTEX_ATTRIB_ARRAY7_NV 0x8657 #define GL_VERTEX_ATTRIB_ARRAY8_NV 0x8658 #define GL_VERTEX_ATTRIB_ARRAY9_NV 0x8659 #define GL_VERTEX_ATTRIB_ARRAY10_NV 0x865A #define GL_VERTEX_ATTRIB_ARRAY11_NV 0x865B #define GL_VERTEX_ATTRIB_ARRAY12_NV 0x865C #define GL_VERTEX_ATTRIB_ARRAY13_NV 0x865D #define GL_VERTEX_ATTRIB_ARRAY14_NV 0x865E #define GL_VERTEX_ATTRIB_ARRAY15_NV 0x865F #define GL_MAP1_VERTEX_ATTRIB0_4_NV 0x8660 #define GL_MAP1_VERTEX_ATTRIB1_4_NV 0x8661 #define GL_MAP1_VERTEX_ATTRIB2_4_NV 0x8662 #define GL_MAP1_VERTEX_ATTRIB3_4_NV 0x8663 #define GL_MAP1_VERTEX_ATTRIB4_4_NV 0x8664 #define GL_MAP1_VERTEX_ATTRIB5_4_NV 0x8665 #define GL_MAP1_VERTEX_ATTRIB6_4_NV 0x8666 #define GL_MAP1_VERTEX_ATTRIB7_4_NV 0x8667 #define GL_MAP1_VERTEX_ATTRIB8_4_NV 0x8668 #define GL_MAP1_VERTEX_ATTRIB9_4_NV 0x8669 #define GL_MAP1_VERTEX_ATTRIB10_4_NV 0x866A #define GL_MAP1_VERTEX_ATTRIB11_4_NV 0x866B #define GL_MAP1_VERTEX_ATTRIB12_4_NV 0x866C #define GL_MAP1_VERTEX_ATTRIB13_4_NV 0x866D #define GL_MAP1_VERTEX_ATTRIB14_4_NV 0x866E #define GL_MAP1_VERTEX_ATTRIB15_4_NV 0x866F #define GL_MAP2_VERTEX_ATTRIB0_4_NV 0x8670 #define GL_MAP2_VERTEX_ATTRIB1_4_NV 0x8671 #define GL_MAP2_VERTEX_ATTRIB2_4_NV 0x8672 #define GL_MAP2_VERTEX_ATTRIB3_4_NV 0x8673 #define GL_MAP2_VERTEX_ATTRIB4_4_NV 0x8674 #define GL_MAP2_VERTEX_ATTRIB5_4_NV 0x8675 #define GL_MAP2_VERTEX_ATTRIB6_4_NV 0x8676 #define GL_MAP2_VERTEX_ATTRIB7_4_NV 0x8677 #define GL_MAP2_VERTEX_ATTRIB8_4_NV 0x8678 #define GL_MAP2_VERTEX_ATTRIB9_4_NV 0x8679 #define GL_MAP2_VERTEX_ATTRIB10_4_NV 0x867A #define GL_MAP2_VERTEX_ATTRIB11_4_NV 0x867B #define GL_MAP2_VERTEX_ATTRIB12_4_NV 0x867C #define GL_MAP2_VERTEX_ATTRIB13_4_NV 0x867D #define GL_MAP2_VERTEX_ATTRIB14_4_NV 0x867E #define GL_MAP2_VERTEX_ATTRIB15_4_NV 0x867F #endif #ifndef GL_SGIX_texture_coordinate_clamp #define GL_TEXTURE_MAX_CLAMP_S_SGIX 0x8369 #define GL_TEXTURE_MAX_CLAMP_T_SGIX 0x836A #define GL_TEXTURE_MAX_CLAMP_R_SGIX 0x836B #endif #ifndef GL_SGIX_scalebias_hint #define GL_SCALEBIAS_HINT_SGIX 0x8322 #endif #ifndef GL_OML_interlace #define GL_INTERLACE_OML 0x8980 #define GL_INTERLACE_READ_OML 0x8981 #endif #ifndef GL_OML_subsample #define GL_FORMAT_SUBSAMPLE_24_24_OML 0x8982 #define GL_FORMAT_SUBSAMPLE_244_244_OML 0x8983 #endif #ifndef GL_OML_resample #define GL_PACK_RESAMPLE_OML 0x8984 #define GL_UNPACK_RESAMPLE_OML 0x8985 #define GL_RESAMPLE_REPLICATE_OML 0x8986 #define GL_RESAMPLE_ZERO_FILL_OML 0x8987 #define GL_RESAMPLE_AVERAGE_OML 0x8988 #define GL_RESAMPLE_DECIMATE_OML 0x8989 #endif #ifndef GL_NV_copy_depth_to_color #define GL_DEPTH_STENCIL_TO_RGBA_NV 0x886E #define GL_DEPTH_STENCIL_TO_BGRA_NV 0x886F #endif #ifndef GL_ATI_envmap_bumpmap #define GL_BUMP_ROT_MATRIX_ATI 0x8775 #define GL_BUMP_ROT_MATRIX_SIZE_ATI 0x8776 #define GL_BUMP_NUM_TEX_UNITS_ATI 0x8777 #define GL_BUMP_TEX_UNITS_ATI 0x8778 #define GL_DUDV_ATI 0x8779 #define GL_DU8DV8_ATI 0x877A #define GL_BUMP_ENVMAP_ATI 0x877B #define GL_BUMP_TARGET_ATI 0x877C #endif #ifndef GL_ATI_fragment_shader #define GL_FRAGMENT_SHADER_ATI 0x8920 #define GL_REG_0_ATI 0x8921 #define GL_REG_1_ATI 0x8922 #define GL_REG_2_ATI 0x8923 #define GL_REG_3_ATI 0x8924 #define GL_REG_4_ATI 0x8925 #define GL_REG_5_ATI 0x8926 #define GL_REG_6_ATI 0x8927 #define GL_REG_7_ATI 0x8928 #define GL_REG_8_ATI 0x8929 #define GL_REG_9_ATI 0x892A #define GL_REG_10_ATI 0x892B #define GL_REG_11_ATI 0x892C #define GL_REG_12_ATI 0x892D #define GL_REG_13_ATI 0x892E #define GL_REG_14_ATI 0x892F #define GL_REG_15_ATI 0x8930 #define GL_REG_16_ATI 0x8931 #define GL_REG_17_ATI 0x8932 #define GL_REG_18_ATI 0x8933 #define GL_REG_19_ATI 0x8934 #define GL_REG_20_ATI 0x8935 #define GL_REG_21_ATI 0x8936 #define GL_REG_22_ATI 0x8937 #define GL_REG_23_ATI 0x8938 #define GL_REG_24_ATI 0x8939 #define GL_REG_25_ATI 0x893A #define GL_REG_26_ATI 0x893B #define GL_REG_27_ATI 0x893C #define GL_REG_28_ATI 0x893D #define GL_REG_29_ATI 0x893E #define GL_REG_30_ATI 0x893F #define GL_REG_31_ATI 0x8940 #define GL_CON_0_ATI 0x8941 #define GL_CON_1_ATI 0x8942 #define GL_CON_2_ATI 0x8943 #define GL_CON_3_ATI 0x8944 #define GL_CON_4_ATI 0x8945 #define GL_CON_5_ATI 0x8946 #define GL_CON_6_ATI 0x8947 #define GL_CON_7_ATI 0x8948 #define GL_CON_8_ATI 0x8949 #define GL_CON_9_ATI 0x894A #define GL_CON_10_ATI 0x894B #define GL_CON_11_ATI 0x894C #define GL_CON_12_ATI 0x894D #define GL_CON_13_ATI 0x894E #define GL_CON_14_ATI 0x894F #define GL_CON_15_ATI 0x8950 #define GL_CON_16_ATI 0x8951 #define GL_CON_17_ATI 0x8952 #define GL_CON_18_ATI 0x8953 #define GL_CON_19_ATI 0x8954 #define GL_CON_20_ATI 0x8955 #define GL_CON_21_ATI 0x8956 #define GL_CON_22_ATI 0x8957 #define GL_CON_23_ATI 0x8958 #define GL_CON_24_ATI 0x8959 #define GL_CON_25_ATI 0x895A #define GL_CON_26_ATI 0x895B #define GL_CON_27_ATI 0x895C #define GL_CON_28_ATI 0x895D #define GL_CON_29_ATI 0x895E #define GL_CON_30_ATI 0x895F #define GL_CON_31_ATI 0x8960 #define GL_MOV_ATI 0x8961 #define GL_ADD_ATI 0x8963 #define GL_MUL_ATI 0x8964 #define GL_SUB_ATI 0x8965 #define GL_DOT3_ATI 0x8966 #define GL_DOT4_ATI 0x8967 #define GL_MAD_ATI 0x8968 #define GL_LERP_ATI 0x8969 #define GL_CND_ATI 0x896A #define GL_CND0_ATI 0x896B #define GL_DOT2_ADD_ATI 0x896C #define GL_SECONDARY_INTERPOLATOR_ATI 0x896D #define GL_NUM_FRAGMENT_REGISTERS_ATI 0x896E #define GL_NUM_FRAGMENT_CONSTANTS_ATI 0x896F #define GL_NUM_PASSES_ATI 0x8970 #define GL_NUM_INSTRUCTIONS_PER_PASS_ATI 0x8971 #define GL_NUM_INSTRUCTIONS_TOTAL_ATI 0x8972 #define GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI 0x8973 #define GL_NUM_LOOPBACK_COMPONENTS_ATI 0x8974 #define GL_COLOR_ALPHA_PAIRING_ATI 0x8975 #define GL_SWIZZLE_STR_ATI 0x8976 #define GL_SWIZZLE_STQ_ATI 0x8977 #define GL_SWIZZLE_STR_DR_ATI 0x8978 #define GL_SWIZZLE_STQ_DQ_ATI 0x8979 #define GL_SWIZZLE_STRQ_ATI 0x897A #define GL_SWIZZLE_STRQ_DQ_ATI 0x897B #define GL_RED_BIT_ATI 0x00000001 #define GL_GREEN_BIT_ATI 0x00000002 #define GL_BLUE_BIT_ATI 0x00000004 #define GL_2X_BIT_ATI 0x00000001 #define GL_4X_BIT_ATI 0x00000002 #define GL_8X_BIT_ATI 0x00000004 #define GL_HALF_BIT_ATI 0x00000008 #define GL_QUARTER_BIT_ATI 0x00000010 #define GL_EIGHTH_BIT_ATI 0x00000020 #define GL_SATURATE_BIT_ATI 0x00000040 #define GL_COMP_BIT_ATI 0x00000002 #define GL_NEGATE_BIT_ATI 0x00000004 #define GL_BIAS_BIT_ATI 0x00000008 #endif #ifndef GL_ATI_pn_triangles #define GL_PN_TRIANGLES_ATI 0x87F0 #define GL_MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F1 #define GL_PN_TRIANGLES_POINT_MODE_ATI 0x87F2 #define GL_PN_TRIANGLES_NORMAL_MODE_ATI 0x87F3 #define GL_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F4 #define GL_PN_TRIANGLES_POINT_MODE_LINEAR_ATI 0x87F5 #define GL_PN_TRIANGLES_POINT_MODE_CUBIC_ATI 0x87F6 #define GL_PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI 0x87F7 #define GL_PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI 0x87F8 #endif #ifndef GL_ATI_vertex_array_object #define GL_STATIC_ATI 0x8760 #define GL_DYNAMIC_ATI 0x8761 #define GL_PRESERVE_ATI 0x8762 #define GL_DISCARD_ATI 0x8763 #define GL_OBJECT_BUFFER_SIZE_ATI 0x8764 #define GL_OBJECT_BUFFER_USAGE_ATI 0x8765 #define GL_ARRAY_OBJECT_BUFFER_ATI 0x8766 #define GL_ARRAY_OBJECT_OFFSET_ATI 0x8767 #endif #ifndef GL_EXT_vertex_shader #define GL_VERTEX_SHADER_EXT 0x8780 #define GL_VERTEX_SHADER_BINDING_EXT 0x8781 #define GL_OP_INDEX_EXT 0x8782 #define GL_OP_NEGATE_EXT 0x8783 #define GL_OP_DOT3_EXT 0x8784 #define GL_OP_DOT4_EXT 0x8785 #define GL_OP_MUL_EXT 0x8786 #define GL_OP_ADD_EXT 0x8787 #define GL_OP_MADD_EXT 0x8788 #define GL_OP_FRAC_EXT 0x8789 #define GL_OP_MAX_EXT 0x878A #define GL_OP_MIN_EXT 0x878B #define GL_OP_SET_GE_EXT 0x878C #define GL_OP_SET_LT_EXT 0x878D #define GL_OP_CLAMP_EXT 0x878E #define GL_OP_FLOOR_EXT 0x878F #define GL_OP_ROUND_EXT 0x8790 #define GL_OP_EXP_BASE_2_EXT 0x8791 #define GL_OP_LOG_BASE_2_EXT 0x8792 #define GL_OP_POWER_EXT 0x8793 #define GL_OP_RECIP_EXT 0x8794 #define GL_OP_RECIP_SQRT_EXT 0x8795 #define GL_OP_SUB_EXT 0x8796 #define GL_OP_CROSS_PRODUCT_EXT 0x8797 #define GL_OP_MULTIPLY_MATRIX_EXT 0x8798 #define GL_OP_MOV_EXT 0x8799 #define GL_OUTPUT_VERTEX_EXT 0x879A #define GL_OUTPUT_COLOR0_EXT 0x879B #define GL_OUTPUT_COLOR1_EXT 0x879C #define GL_OUTPUT_TEXTURE_COORD0_EXT 0x879D #define GL_OUTPUT_TEXTURE_COORD1_EXT 0x879E #define GL_OUTPUT_TEXTURE_COORD2_EXT 0x879F #define GL_OUTPUT_TEXTURE_COORD3_EXT 0x87A0 #define GL_OUTPUT_TEXTURE_COORD4_EXT 0x87A1 #define GL_OUTPUT_TEXTURE_COORD5_EXT 0x87A2 #define GL_OUTPUT_TEXTURE_COORD6_EXT 0x87A3 #define GL_OUTPUT_TEXTURE_COORD7_EXT 0x87A4 #define GL_OUTPUT_TEXTURE_COORD8_EXT 0x87A5 #define GL_OUTPUT_TEXTURE_COORD9_EXT 0x87A6 #define GL_OUTPUT_TEXTURE_COORD10_EXT 0x87A7 #define GL_OUTPUT_TEXTURE_COORD11_EXT 0x87A8 #define GL_OUTPUT_TEXTURE_COORD12_EXT 0x87A9 #define GL_OUTPUT_TEXTURE_COORD13_EXT 0x87AA #define GL_OUTPUT_TEXTURE_COORD14_EXT 0x87AB #define GL_OUTPUT_TEXTURE_COORD15_EXT 0x87AC #define GL_OUTPUT_TEXTURE_COORD16_EXT 0x87AD #define GL_OUTPUT_TEXTURE_COORD17_EXT 0x87AE #define GL_OUTPUT_TEXTURE_COORD18_EXT 0x87AF #define GL_OUTPUT_TEXTURE_COORD19_EXT 0x87B0 #define GL_OUTPUT_TEXTURE_COORD20_EXT 0x87B1 #define GL_OUTPUT_TEXTURE_COORD21_EXT 0x87B2 #define GL_OUTPUT_TEXTURE_COORD22_EXT 0x87B3 #define GL_OUTPUT_TEXTURE_COORD23_EXT 0x87B4 #define GL_OUTPUT_TEXTURE_COORD24_EXT 0x87B5 #define GL_OUTPUT_TEXTURE_COORD25_EXT 0x87B6 #define GL_OUTPUT_TEXTURE_COORD26_EXT 0x87B7 #define GL_OUTPUT_TEXTURE_COORD27_EXT 0x87B8 #define GL_OUTPUT_TEXTURE_COORD28_EXT 0x87B9 #define GL_OUTPUT_TEXTURE_COORD29_EXT 0x87BA #define GL_OUTPUT_TEXTURE_COORD30_EXT 0x87BB #define GL_OUTPUT_TEXTURE_COORD31_EXT 0x87BC #define GL_OUTPUT_FOG_EXT 0x87BD #define GL_SCALAR_EXT 0x87BE #define GL_VECTOR_EXT 0x87BF #define GL_MATRIX_EXT 0x87C0 #define GL_VARIANT_EXT 0x87C1 #define GL_INVARIANT_EXT 0x87C2 #define GL_LOCAL_CONSTANT_EXT 0x87C3 #define GL_LOCAL_EXT 0x87C4 #define GL_MAX_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87C5 #define GL_MAX_VERTEX_SHADER_VARIANTS_EXT 0x87C6 #define GL_MAX_VERTEX_SHADER_INVARIANTS_EXT 0x87C7 #define GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87C8 #define GL_MAX_VERTEX_SHADER_LOCALS_EXT 0x87C9 #define GL_MAX_OPTIMIZED_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CA #define GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT 0x87CB #define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87CC #define GL_MAX_OPTIMIZED_VERTEX_SHADER_INARIANTS_EXT 0x87CD #define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT 0x87CE #define GL_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CF #define GL_VERTEX_SHADER_VARIANTS_EXT 0x87D0 #define GL_VERTEX_SHADER_INVARIANTS_EXT 0x87D1 #define GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87D2 #define GL_VERTEX_SHADER_LOCALS_EXT 0x87D3 #define GL_VERTEX_SHADER_OPTIMIZED_EXT 0x87D4 #define GL_X_EXT 0x87D5 #define GL_Y_EXT 0x87D6 #define GL_Z_EXT 0x87D7 #define GL_W_EXT 0x87D8 #define GL_NEGATIVE_X_EXT 0x87D9 #define GL_NEGATIVE_Y_EXT 0x87DA #define GL_NEGATIVE_Z_EXT 0x87DB #define GL_NEGATIVE_W_EXT 0x87DC #define GL_ZERO_EXT 0x87DD #define GL_ONE_EXT 0x87DE #define GL_NEGATIVE_ONE_EXT 0x87DF #define GL_NORMALIZED_RANGE_EXT 0x87E0 #define GL_FULL_RANGE_EXT 0x87E1 #define GL_CURRENT_VERTEX_EXT 0x87E2 #define GL_MVP_MATRIX_EXT 0x87E3 #define GL_VARIANT_VALUE_EXT 0x87E4 #define GL_VARIANT_DATATYPE_EXT 0x87E5 #define GL_VARIANT_ARRAY_STRIDE_EXT 0x87E6 #define GL_VARIANT_ARRAY_TYPE_EXT 0x87E7 #define GL_VARIANT_ARRAY_EXT 0x87E8 #define GL_VARIANT_ARRAY_POINTER_EXT 0x87E9 #define GL_INVARIANT_VALUE_EXT 0x87EA #define GL_INVARIANT_DATATYPE_EXT 0x87EB #define GL_LOCAL_CONSTANT_VALUE_EXT 0x87EC #define GL_LOCAL_CONSTANT_DATATYPE_EXT 0x87ED #endif #ifndef GL_ATI_vertex_streams #define GL_MAX_VERTEX_STREAMS_ATI 0x876B #define GL_VERTEX_STREAM0_ATI 0x876C #define GL_VERTEX_STREAM1_ATI 0x876D #define GL_VERTEX_STREAM2_ATI 0x876E #define GL_VERTEX_STREAM3_ATI 0x876F #define GL_VERTEX_STREAM4_ATI 0x8770 #define GL_VERTEX_STREAM5_ATI 0x8771 #define GL_VERTEX_STREAM6_ATI 0x8772 #define GL_VERTEX_STREAM7_ATI 0x8773 #define GL_VERTEX_SOURCE_ATI 0x8774 #endif #ifndef GL_ATI_element_array #define GL_ELEMENT_ARRAY_ATI 0x8768 #define GL_ELEMENT_ARRAY_TYPE_ATI 0x8769 #define GL_ELEMENT_ARRAY_POINTER_ATI 0x876A #endif #ifndef GL_SUN_mesh_array #define GL_QUAD_MESH_SUN 0x8614 #define GL_TRIANGLE_MESH_SUN 0x8615 #endif #ifndef GL_SUN_slice_accum #define GL_SLICE_ACCUM_SUN 0x85CC #endif #ifndef GL_NV_multisample_filter_hint #define GL_MULTISAMPLE_FILTER_HINT_NV 0x8534 #endif #ifndef GL_NV_depth_clamp #define GL_DEPTH_CLAMP_NV 0x864F #endif #ifndef GL_NV_occlusion_query #define GL_PIXEL_COUNTER_BITS_NV 0x8864 #define GL_CURRENT_OCCLUSION_QUERY_ID_NV 0x8865 #define GL_PIXEL_COUNT_NV 0x8866 #define GL_PIXEL_COUNT_AVAILABLE_NV 0x8867 #endif #ifndef GL_NV_point_sprite #define GL_POINT_SPRITE_NV 0x8861 #define GL_COORD_REPLACE_NV 0x8862 #define GL_POINT_SPRITE_R_MODE_NV 0x8863 #endif #ifndef GL_NV_texture_shader3 #define GL_OFFSET_PROJECTIVE_TEXTURE_2D_NV 0x8850 #define GL_OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV 0x8851 #define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8852 #define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV 0x8853 #define GL_OFFSET_HILO_TEXTURE_2D_NV 0x8854 #define GL_OFFSET_HILO_TEXTURE_RECTANGLE_NV 0x8855 #define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV 0x8856 #define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8857 #define GL_DEPENDENT_HILO_TEXTURE_2D_NV 0x8858 #define GL_DEPENDENT_RGB_TEXTURE_3D_NV 0x8859 #define GL_DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV 0x885A #define GL_DOT_PRODUCT_PASS_THROUGH_NV 0x885B #define GL_DOT_PRODUCT_TEXTURE_1D_NV 0x885C #define GL_DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV 0x885D #define GL_HILO8_NV 0x885E #define GL_SIGNED_HILO8_NV 0x885F #define GL_FORCE_BLUE_TO_ONE_NV 0x8860 #endif #ifndef GL_NV_vertex_program1_1 #endif /*************************************************************/ #ifndef GL_VERSION_1_2 #define GL_VERSION_1_2 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBlendColor (GLclampf, GLclampf, GLclampf, GLclampf); GLAPI void APIENTRY glBlendEquation (GLenum); GLAPI void APIENTRY glDrawRangeElements (GLenum, GLuint, GLuint, GLsizei, GLenum, const GLvoid *); GLAPI void APIENTRY glColorTable (GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid *); GLAPI void APIENTRY glColorTableParameterfv (GLenum, GLenum, const GLfloat *); GLAPI void APIENTRY glColorTableParameteriv (GLenum, GLenum, const GLint *); GLAPI void APIENTRY glCopyColorTable (GLenum, GLenum, GLint, GLint, GLsizei); GLAPI void APIENTRY glGetColorTable (GLenum, GLenum, GLenum, GLvoid *); GLAPI void APIENTRY glGetColorTableParameterfv (GLenum, GLenum, GLfloat *); GLAPI void APIENTRY glGetColorTableParameteriv (GLenum, GLenum, GLint *); GLAPI void APIENTRY glColorSubTable (GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *); GLAPI void APIENTRY glCopyColorSubTable (GLenum, GLsizei, GLint, GLint, GLsizei); GLAPI void APIENTRY glConvolutionFilter1D (GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid *); GLAPI void APIENTRY glConvolutionFilter2D (GLenum, GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *); GLAPI void APIENTRY glConvolutionParameterf (GLenum, GLenum, GLfloat); GLAPI void APIENTRY glConvolutionParameterfv (GLenum, GLenum, const GLfloat *); GLAPI void APIENTRY glConvolutionParameteri (GLenum, GLenum, GLint); GLAPI void APIENTRY glConvolutionParameteriv (GLenum, GLenum, const GLint *); GLAPI void APIENTRY glCopyConvolutionFilter1D (GLenum, GLenum, GLint, GLint, GLsizei); GLAPI void APIENTRY glCopyConvolutionFilter2D (GLenum, GLenum, GLint, GLint, GLsizei, GLsizei); GLAPI void APIENTRY glGetConvolutionFilter (GLenum, GLenum, GLenum, GLvoid *); GLAPI void APIENTRY glGetConvolutionParameterfv (GLenum, GLenum, GLfloat *); GLAPI void APIENTRY glGetConvolutionParameteriv (GLenum, GLenum, GLint *); GLAPI void APIENTRY glGetSeparableFilter (GLenum, GLenum, GLenum, GLvoid *, GLvoid *, GLvoid *); GLAPI void APIENTRY glSeparableFilter2D (GLenum, GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *, const GLvoid *); GLAPI void APIENTRY glGetHistogram (GLenum, GLboolean, GLenum, GLenum, GLvoid *); GLAPI void APIENTRY glGetHistogramParameterfv (GLenum, GLenum, GLfloat *); GLAPI void APIENTRY glGetHistogramParameteriv (GLenum, GLenum, GLint *); GLAPI void APIENTRY glGetMinmax (GLenum, GLboolean, GLenum, GLenum, GLvoid *); GLAPI void APIENTRY glGetMinmaxParameterfv (GLenum, GLenum, GLfloat *); GLAPI void APIENTRY glGetMinmaxParameteriv (GLenum, GLenum, GLint *); GLAPI void APIENTRY glHistogram (GLenum, GLsizei, GLenum, GLboolean); GLAPI void APIENTRY glMinmax (GLenum, GLenum, GLboolean); GLAPI void APIENTRY glResetHistogram (GLenum); GLAPI void APIENTRY glResetMinmax (GLenum); GLAPI void APIENTRY glTexImage3D (GLenum, GLint, GLint, GLsizei, GLsizei, GLsizei, GLint, GLenum, GLenum, const GLvoid *); GLAPI void APIENTRY glTexSubImage3D (GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *); GLAPI void APIENTRY glCopyTexSubImage3D (GLenum, GLint, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLBLENDCOLORPROC) (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); typedef void (APIENTRY * PFNGLBLENDEQUATIONPROC) (GLenum mode); typedef void (APIENTRY * PFNGLDRAWRANGEELEMENTSPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices); typedef void (APIENTRY * PFNGLCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table); typedef void (APIENTRY * PFNGLCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params); typedef void (APIENTRY * PFNGLCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params); typedef void (APIENTRY * PFNGLCOPYCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); typedef void (APIENTRY * PFNGLGETCOLORTABLEPROC) (GLenum target, GLenum format, GLenum type, GLvoid *table); typedef void (APIENTRY * PFNGLGETCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); typedef void (APIENTRY * PFNGLGETCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); typedef void (APIENTRY * PFNGLCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data); typedef void (APIENTRY * PFNGLCOPYCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); typedef void (APIENTRY * PFNGLCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image); typedef void (APIENTRY * PFNGLCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image); typedef void (APIENTRY * PFNGLCONVOLUTIONPARAMETERFPROC) (GLenum target, GLenum pname, GLfloat params); typedef void (APIENTRY * PFNGLCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params); typedef void (APIENTRY * PFNGLCONVOLUTIONPARAMETERIPROC) (GLenum target, GLenum pname, GLint params); typedef void (APIENTRY * PFNGLCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params); typedef void (APIENTRY * PFNGLCOPYCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); typedef void (APIENTRY * PFNGLCOPYCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); typedef void (APIENTRY * PFNGLGETCONVOLUTIONFILTERPROC) (GLenum target, GLenum format, GLenum type, GLvoid *image); typedef void (APIENTRY * PFNGLGETCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); typedef void (APIENTRY * PFNGLGETCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); typedef void (APIENTRY * PFNGLGETSEPARABLEFILTERPROC) (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span); typedef void (APIENTRY * PFNGLSEPARABLEFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column); typedef void (APIENTRY * PFNGLGETHISTOGRAMPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); typedef void (APIENTRY * PFNGLGETHISTOGRAMPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); typedef void (APIENTRY * PFNGLGETHISTOGRAMPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); typedef void (APIENTRY * PFNGLGETMINMAXPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); typedef void (APIENTRY * PFNGLGETMINMAXPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); typedef void (APIENTRY * PFNGLGETMINMAXPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); typedef void (APIENTRY * PFNGLHISTOGRAMPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); typedef void (APIENTRY * PFNGLMINMAXPROC) (GLenum target, GLenum internalformat, GLboolean sink); typedef void (APIENTRY * PFNGLRESETHISTOGRAMPROC) (GLenum target); typedef void (APIENTRY * PFNGLRESETMINMAXPROC) (GLenum target); typedef void (APIENTRY * PFNGLTEXIMAGE3DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); typedef void (APIENTRY * PFNGLTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); typedef void (APIENTRY * PFNGLCOPYTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); #endif #ifndef GL_VERSION_1_3 #define GL_VERSION_1_3 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glActiveTexture (GLenum); GLAPI void APIENTRY glClientActiveTexture (GLenum); GLAPI void APIENTRY glMultiTexCoord1d (GLenum, GLdouble); GLAPI void APIENTRY glMultiTexCoord1dv (GLenum, const GLdouble *); GLAPI void APIENTRY glMultiTexCoord1f (GLenum, GLfloat); GLAPI void APIENTRY glMultiTexCoord1fv (GLenum, const GLfloat *); GLAPI void APIENTRY glMultiTexCoord1i (GLenum, GLint); GLAPI void APIENTRY glMultiTexCoord1iv (GLenum, const GLint *); GLAPI void APIENTRY glMultiTexCoord1s (GLenum, GLshort); GLAPI void APIENTRY glMultiTexCoord1sv (GLenum, const GLshort *); GLAPI void APIENTRY glMultiTexCoord2d (GLenum, GLdouble, GLdouble); GLAPI void APIENTRY glMultiTexCoord2dv (GLenum, const GLdouble *); GLAPI void APIENTRY glMultiTexCoord2f (GLenum, GLfloat, GLfloat); GLAPI void APIENTRY glMultiTexCoord2fv (GLenum, const GLfloat *); GLAPI void APIENTRY glMultiTexCoord2i (GLenum, GLint, GLint); GLAPI void APIENTRY glMultiTexCoord2iv (GLenum, const GLint *); GLAPI void APIENTRY glMultiTexCoord2s (GLenum, GLshort, GLshort); GLAPI void APIENTRY glMultiTexCoord2sv (GLenum, const GLshort *); GLAPI void APIENTRY glMultiTexCoord3d (GLenum, GLdouble, GLdouble, GLdouble); GLAPI void APIENTRY glMultiTexCoord3dv (GLenum, const GLdouble *); GLAPI void APIENTRY glMultiTexCoord3f (GLenum, GLfloat, GLfloat, GLfloat); GLAPI void APIENTRY glMultiTexCoord3fv (GLenum, const GLfloat *); GLAPI void APIENTRY glMultiTexCoord3i (GLenum, GLint, GLint, GLint); GLAPI void APIENTRY glMultiTexCoord3iv (GLenum, const GLint *); GLAPI void APIENTRY glMultiTexCoord3s (GLenum, GLshort, GLshort, GLshort); GLAPI void APIENTRY glMultiTexCoord3sv (GLenum, const GLshort *); GLAPI void APIENTRY glMultiTexCoord4d (GLenum, GLdouble, GLdouble, GLdouble, GLdouble); GLAPI void APIENTRY glMultiTexCoord4dv (GLenum, const GLdouble *); GLAPI void APIENTRY glMultiTexCoord4f (GLenum, GLfloat, GLfloat, GLfloat, GLfloat); GLAPI void APIENTRY glMultiTexCoord4fv (GLenum, const GLfloat *); GLAPI void APIENTRY glMultiTexCoord4i (GLenum, GLint, GLint, GLint, GLint); GLAPI void APIENTRY glMultiTexCoord4iv (GLenum, const GLint *); GLAPI void APIENTRY glMultiTexCoord4s (GLenum, GLshort, GLshort, GLshort, GLshort); GLAPI void APIENTRY glMultiTexCoord4sv (GLenum, const GLshort *); GLAPI void APIENTRY glLoadTransposeMatrixf (const GLfloat *); GLAPI void APIENTRY glLoadTransposeMatrixd (const GLdouble *); GLAPI void APIENTRY glMultTransposeMatrixf (const GLfloat *); GLAPI void APIENTRY glMultTransposeMatrixd (const GLdouble *); GLAPI void APIENTRY glSampleCoverage (GLclampf, GLboolean); GLAPI void APIENTRY glCompressedTexImage3D (GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLsizei, const GLvoid *); GLAPI void APIENTRY glCompressedTexImage2D (GLenum, GLint, GLenum, GLsizei, GLsizei, GLint, GLsizei, const GLvoid *); GLAPI void APIENTRY glCompressedTexImage1D (GLenum, GLint, GLenum, GLsizei, GLint, GLsizei, const GLvoid *); GLAPI void APIENTRY glCompressedTexSubImage3D (GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLsizei, const GLvoid *); GLAPI void APIENTRY glCompressedTexSubImage2D (GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLsizei, const GLvoid *); GLAPI void APIENTRY glCompressedTexSubImage1D (GLenum, GLint, GLint, GLsizei, GLenum, GLsizei, const GLvoid *); GLAPI void APIENTRY glGetCompressedTexImage (GLenum, GLint, void *); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLACTIVETEXTUREPROC) (GLenum texture); typedef void (APIENTRY * PFNGLCLIENTACTIVETEXTUREPROC) (GLenum texture); typedef void (APIENTRY * PFNGLMULTITEXCOORD1DPROC) (GLenum target, GLdouble s); typedef void (APIENTRY * PFNGLMULTITEXCOORD1DVPROC) (GLenum target, const GLdouble *v); typedef void (APIENTRY * PFNGLMULTITEXCOORD1FPROC) (GLenum target, GLfloat s); typedef void (APIENTRY * PFNGLMULTITEXCOORD1FVPROC) (GLenum target, const GLfloat *v); typedef void (APIENTRY * PFNGLMULTITEXCOORD1IPROC) (GLenum target, GLint s); typedef void (APIENTRY * PFNGLMULTITEXCOORD1IVPROC) (GLenum target, const GLint *v); typedef void (APIENTRY * PFNGLMULTITEXCOORD1SPROC) (GLenum target, GLshort s); typedef void (APIENTRY * PFNGLMULTITEXCOORD1SVPROC) (GLenum target, const GLshort *v); typedef void (APIENTRY * PFNGLMULTITEXCOORD2DPROC) (GLenum target, GLdouble s, GLdouble t); typedef void (APIENTRY * PFNGLMULTITEXCOORD2DVPROC) (GLenum target, const GLdouble *v); typedef void (APIENTRY * PFNGLMULTITEXCOORD2FPROC) (GLenum target, GLfloat s, GLfloat t); typedef void (APIENTRY * PFNGLMULTITEXCOORD2FVPROC) (GLenum target, const GLfloat *v); typedef void (APIENTRY * PFNGLMULTITEXCOORD2IPROC) (GLenum target, GLint s, GLint t); typedef void (APIENTRY * PFNGLMULTITEXCOORD2IVPROC) (GLenum target, const GLint *v); typedef void (APIENTRY * PFNGLMULTITEXCOORD2SPROC) (GLenum target, GLshort s, GLshort t); typedef void (APIENTRY * PFNGLMULTITEXCOORD2SVPROC) (GLenum target, const GLshort *v); typedef void (APIENTRY * PFNGLMULTITEXCOORD3DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r); typedef void (APIENTRY * PFNGLMULTITEXCOORD3DVPROC) (GLenum target, const GLdouble *v); typedef void (APIENTRY * PFNGLMULTITEXCOORD3FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r); typedef void (APIENTRY * PFNGLMULTITEXCOORD3FVPROC) (GLenum target, const GLfloat *v); typedef void (APIENTRY * PFNGLMULTITEXCOORD3IPROC) (GLenum target, GLint s, GLint t, GLint r); typedef void (APIENTRY * PFNGLMULTITEXCOORD3IVPROC) (GLenum target, const GLint *v); typedef void (APIENTRY * PFNGLMULTITEXCOORD3SPROC) (GLenum target, GLshort s, GLshort t, GLshort r); typedef void (APIENTRY * PFNGLMULTITEXCOORD3SVPROC) (GLenum target, const GLshort *v); typedef void (APIENTRY * PFNGLMULTITEXCOORD4DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); typedef void (APIENTRY * PFNGLMULTITEXCOORD4DVPROC) (GLenum target, const GLdouble *v); typedef void (APIENTRY * PFNGLMULTITEXCOORD4FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); typedef void (APIENTRY * PFNGLMULTITEXCOORD4FVPROC) (GLenum target, const GLfloat *v); typedef void (APIENTRY * PFNGLMULTITEXCOORD4IPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q); typedef void (APIENTRY * PFNGLMULTITEXCOORD4IVPROC) (GLenum target, const GLint *v); typedef void (APIENTRY * PFNGLMULTITEXCOORD4SPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); typedef void (APIENTRY * PFNGLMULTITEXCOORD4SVPROC) (GLenum target, const GLshort *v); typedef void (APIENTRY * PFNGLLOADTRANSPOSEMATRIXFPROC) (const GLfloat *m); typedef void (APIENTRY * PFNGLLOADTRANSPOSEMATRIXDPROC) (const GLdouble *m); typedef void (APIENTRY * PFNGLMULTTRANSPOSEMATRIXFPROC) (const GLfloat *m); typedef void (APIENTRY * PFNGLMULTTRANSPOSEMATRIXDPROC) (const GLdouble *m); typedef void (APIENTRY * PFNGLSAMPLECOVERAGEPROC) (GLclampf value, GLboolean invert); typedef void (APIENTRY * PFNGLCOMPRESSEDTEXIMAGE3DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data); typedef void (APIENTRY * PFNGLCOMPRESSEDTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); typedef void (APIENTRY * PFNGLCOMPRESSEDTEXIMAGE1DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data); typedef void (APIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data); typedef void (APIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data); typedef void (APIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data); typedef void (APIENTRY * PFNGLGETCOMPRESSEDTEXIMAGEPROC) (GLenum target, GLint level, void *img); #endif #ifndef GL_ARB_multitexture #define GL_ARB_multitexture 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glActiveTextureARB (GLenum); GLAPI void APIENTRY glClientActiveTextureARB (GLenum); GLAPI void APIENTRY glMultiTexCoord1dARB (GLenum, GLdouble); GLAPI void APIENTRY glMultiTexCoord1dvARB (GLenum, const GLdouble *); GLAPI void APIENTRY glMultiTexCoord1fARB (GLenum, GLfloat); GLAPI void APIENTRY glMultiTexCoord1fvARB (GLenum, const GLfloat *); GLAPI void APIENTRY glMultiTexCoord1iARB (GLenum, GLint); GLAPI void APIENTRY glMultiTexCoord1ivARB (GLenum, const GLint *); GLAPI void APIENTRY glMultiTexCoord1sARB (GLenum, GLshort); GLAPI void APIENTRY glMultiTexCoord1svARB (GLenum, const GLshort *); GLAPI void APIENTRY glMultiTexCoord2dARB (GLenum, GLdouble, GLdouble); GLAPI void APIENTRY glMultiTexCoord2dvARB (GLenum, const GLdouble *); GLAPI void APIENTRY glMultiTexCoord2fARB (GLenum, GLfloat, GLfloat); GLAPI void APIENTRY glMultiTexCoord2fvARB (GLenum, const GLfloat *); GLAPI void APIENTRY glMultiTexCoord2iARB (GLenum, GLint, GLint); GLAPI void APIENTRY glMultiTexCoord2ivARB (GLenum, const GLint *); GLAPI void APIENTRY glMultiTexCoord2sARB (GLenum, GLshort, GLshort); GLAPI void APIENTRY glMultiTexCoord2svARB (GLenum, const GLshort *); GLAPI void APIENTRY glMultiTexCoord3dARB (GLenum, GLdouble, GLdouble, GLdouble); GLAPI void APIENTRY glMultiTexCoord3dvARB (GLenum, const GLdouble *); GLAPI void APIENTRY glMultiTexCoord3fARB (GLenum, GLfloat, GLfloat, GLfloat); GLAPI void APIENTRY glMultiTexCoord3fvARB (GLenum, const GLfloat *); GLAPI void APIENTRY glMultiTexCoord3iARB (GLenum, GLint, GLint, GLint); GLAPI void APIENTRY glMultiTexCoord3ivARB (GLenum, const GLint *); GLAPI void APIENTRY glMultiTexCoord3sARB (GLenum, GLshort, GLshort, GLshort); GLAPI void APIENTRY glMultiTexCoord3svARB (GLenum, const GLshort *); GLAPI void APIENTRY glMultiTexCoord4dARB (GLenum, GLdouble, GLdouble, GLdouble, GLdouble); GLAPI void APIENTRY glMultiTexCoord4dvARB (GLenum, const GLdouble *); GLAPI void APIENTRY glMultiTexCoord4fARB (GLenum, GLfloat, GLfloat, GLfloat, GLfloat); GLAPI void APIENTRY glMultiTexCoord4fvARB (GLenum, const GLfloat *); GLAPI void APIENTRY glMultiTexCoord4iARB (GLenum, GLint, GLint, GLint, GLint); GLAPI void APIENTRY glMultiTexCoord4ivARB (GLenum, const GLint *); GLAPI void APIENTRY glMultiTexCoord4sARB (GLenum, GLshort, GLshort, GLshort, GLshort); GLAPI void APIENTRY glMultiTexCoord4svARB (GLenum, const GLshort *); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLACTIVETEXTUREARBPROC) (GLenum texture); typedef void (APIENTRY * PFNGLCLIENTACTIVETEXTUREARBPROC) (GLenum texture); typedef void (APIENTRY * PFNGLMULTITEXCOORD1DARBPROC) (GLenum target, GLdouble s); typedef void (APIENTRY * PFNGLMULTITEXCOORD1DVARBPROC) (GLenum target, const GLdouble *v); typedef void (APIENTRY * PFNGLMULTITEXCOORD1FARBPROC) (GLenum target, GLfloat s); typedef void (APIENTRY * PFNGLMULTITEXCOORD1FVARBPROC) (GLenum target, const GLfloat *v); typedef void (APIENTRY * PFNGLMULTITEXCOORD1IARBPROC) (GLenum target, GLint s); typedef void (APIENTRY * PFNGLMULTITEXCOORD1IVARBPROC) (GLenum target, const GLint *v); typedef void (APIENTRY * PFNGLMULTITEXCOORD1SARBPROC) (GLenum target, GLshort s); typedef void (APIENTRY * PFNGLMULTITEXCOORD1SVARBPROC) (GLenum target, const GLshort *v); typedef void (APIENTRY * PFNGLMULTITEXCOORD2DARBPROC) (GLenum target, GLdouble s, GLdouble t); typedef void (APIENTRY * PFNGLMULTITEXCOORD2DVARBPROC) (GLenum target, const GLdouble *v); typedef void (APIENTRY * PFNGLMULTITEXCOORD2FARBPROC) (GLenum target, GLfloat s, GLfloat t); typedef void (APIENTRY * PFNGLMULTITEXCOORD2FVARBPROC) (GLenum target, const GLfloat *v); typedef void (APIENTRY * PFNGLMULTITEXCOORD2IARBPROC) (GLenum target, GLint s, GLint t); typedef void (APIENTRY * PFNGLMULTITEXCOORD2IVARBPROC) (GLenum target, const GLint *v); typedef void (APIENTRY * PFNGLMULTITEXCOORD2SARBPROC) (GLenum target, GLshort s, GLshort t); typedef void (APIENTRY * PFNGLMULTITEXCOORD2SVARBPROC) (GLenum target, const GLshort *v); typedef void (APIENTRY * PFNGLMULTITEXCOORD3DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r); typedef void (APIENTRY * PFNGLMULTITEXCOORD3DVARBPROC) (GLenum target, const GLdouble *v); typedef void (APIENTRY * PFNGLMULTITEXCOORD3FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r); typedef void (APIENTRY * PFNGLMULTITEXCOORD3FVARBPROC) (GLenum target, const GLfloat *v); typedef void (APIENTRY * PFNGLMULTITEXCOORD3IARBPROC) (GLenum target, GLint s, GLint t, GLint r); typedef void (APIENTRY * PFNGLMULTITEXCOORD3IVARBPROC) (GLenum target, const GLint *v); typedef void (APIENTRY * PFNGLMULTITEXCOORD3SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r); typedef void (APIENTRY * PFNGLMULTITEXCOORD3SVARBPROC) (GLenum target, const GLshort *v); typedef void (APIENTRY * PFNGLMULTITEXCOORD4DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); typedef void (APIENTRY * PFNGLMULTITEXCOORD4DVARBPROC) (GLenum target, const GLdouble *v); typedef void (APIENTRY * PFNGLMULTITEXCOORD4FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); typedef void (APIENTRY * PFNGLMULTITEXCOORD4FVARBPROC) (GLenum target, const GLfloat *v); typedef void (APIENTRY * PFNGLMULTITEXCOORD4IARBPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q); typedef void (APIENTRY * PFNGLMULTITEXCOORD4IVARBPROC) (GLenum target, const GLint *v); typedef void (APIENTRY * PFNGLMULTITEXCOORD4SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); typedef void (APIENTRY * PFNGLMULTITEXCOORD4SVARBPROC) (GLenum target, const GLshort *v); #endif #ifndef GL_ARB_transpose_matrix #define GL_ARB_transpose_matrix 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glLoadTransposeMatrixfARB (const GLfloat *); GLAPI void APIENTRY glLoadTransposeMatrixdARB (const GLdouble *); GLAPI void APIENTRY glMultTransposeMatrixfARB (const GLfloat *); GLAPI void APIENTRY glMultTransposeMatrixdARB (const GLdouble *); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLLOADTRANSPOSEMATRIXFARBPROC) (const GLfloat *m); typedef void (APIENTRY * PFNGLLOADTRANSPOSEMATRIXDARBPROC) (const GLdouble *m); typedef void (APIENTRY * PFNGLMULTTRANSPOSEMATRIXFARBPROC) (const GLfloat *m); typedef void (APIENTRY * PFNGLMULTTRANSPOSEMATRIXDARBPROC) (const GLdouble *m); #endif #ifndef GL_ARB_multisample #define GL_ARB_multisample 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glSampleCoverageARB (GLclampf, GLboolean); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLSAMPLECOVERAGEARBPROC) (GLclampf value, GLboolean invert); #endif #ifndef GL_ARB_texture_env_add #define GL_ARB_texture_env_add 1 #endif #ifndef GL_ARB_texture_cube_map #define GL_ARB_texture_cube_map 1 #endif #ifndef GL_ARB_texture_compression #define GL_ARB_texture_compression 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glCompressedTexImage3DARB (GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLsizei, const GLvoid *); GLAPI void APIENTRY glCompressedTexImage2DARB (GLenum, GLint, GLenum, GLsizei, GLsizei, GLint, GLsizei, const GLvoid *); GLAPI void APIENTRY glCompressedTexImage1DARB (GLenum, GLint, GLenum, GLsizei, GLint, GLsizei, const GLvoid *); GLAPI void APIENTRY glCompressedTexSubImage3DARB (GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLsizei, const GLvoid *); GLAPI void APIENTRY glCompressedTexSubImage2DARB (GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLsizei, const GLvoid *); GLAPI void APIENTRY glCompressedTexSubImage1DARB (GLenum, GLint, GLint, GLsizei, GLenum, GLsizei, const GLvoid *); GLAPI void APIENTRY glGetCompressedTexImageARB (GLenum, GLint, void *); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLCOMPRESSEDTEXIMAGE3DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data); typedef void (APIENTRY * PFNGLCOMPRESSEDTEXIMAGE2DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); typedef void (APIENTRY * PFNGLCOMPRESSEDTEXIMAGE1DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data); typedef void (APIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data); typedef void (APIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data); typedef void (APIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data); typedef void (APIENTRY * PFNGLGETCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GLint level, void *img); #endif #ifndef GL_ARB_texture_border_clamp #define GL_ARB_texture_border_clamp 1 #endif #ifndef GL_ARB_point_parameters #define GL_ARB_point_parameters 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glPointParameterfARB (GLenum, GLfloat); GLAPI void APIENTRY glPointParameterfvARB (GLenum, const GLfloat *); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLPOINTPARAMETERFARBPROC) (GLenum pname, GLfloat param); typedef void (APIENTRY * PFNGLPOINTPARAMETERFVARBPROC) (GLenum pname, const GLfloat *params); #endif #ifndef GL_ARB_vertex_blend #define GL_ARB_vertex_blend 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glWeightbvARB (GLint, const GLbyte *); GLAPI void APIENTRY glWeightsvARB (GLint, const GLshort *); GLAPI void APIENTRY glWeightivARB (GLint, const GLint *); GLAPI void APIENTRY glWeightfvARB (GLint, const GLfloat *); GLAPI void APIENTRY glWeightdvARB (GLint, const GLdouble *); GLAPI void APIENTRY glWeightubvARB (GLint, const GLubyte *); GLAPI void APIENTRY glWeightusvARB (GLint, const GLushort *); GLAPI void APIENTRY glWeightuivARB (GLint, const GLuint *); GLAPI void APIENTRY glWeightPointerARB (GLint, GLenum, GLsizei, const GLvoid *); GLAPI void APIENTRY glVertexBlendARB (GLint); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLWEIGHTBVARBPROC) (GLint size, const GLbyte *weights); typedef void (APIENTRY * PFNGLWEIGHTSVARBPROC) (GLint size, const GLshort *weights); typedef void (APIENTRY * PFNGLWEIGHTIVARBPROC) (GLint size, const GLint *weights); typedef void (APIENTRY * PFNGLWEIGHTFVARBPROC) (GLint size, const GLfloat *weights); typedef void (APIENTRY * PFNGLWEIGHTDVARBPROC) (GLint size, const GLdouble *weights); typedef void (APIENTRY * PFNGLWEIGHTUBVARBPROC) (GLint size, const GLubyte *weights); typedef void (APIENTRY * PFNGLWEIGHTUSVARBPROC) (GLint size, const GLushort *weights); typedef void (APIENTRY * PFNGLWEIGHTUIVARBPROC) (GLint size, const GLuint *weights); typedef void (APIENTRY * PFNGLWEIGHTPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); typedef void (APIENTRY * PFNGLVERTEXBLENDARBPROC) (GLint count); #endif #ifndef GL_ARB_matrix_palette #define GL_ARB_matrix_palette 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glCurrentPaletteMatrixARB (GLint); GLAPI void APIENTRY glMatrixIndexubvARB (GLint, const GLubyte *); GLAPI void APIENTRY glMatrixIndexusvARB (GLint, const GLushort *); GLAPI void APIENTRY glMatrixIndexuivARB (GLint, const GLuint *); GLAPI void APIENTRY glMatrixIndexPointerARB (GLint, GLenum, GLsizei, const GLvoid *); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLCURRENTPALETTEMATRIXARBPROC) (GLint index); typedef void (APIENTRY * PFNGLMATRIXINDEXUBVARBPROC) (GLint size, const GLubyte *indices); typedef void (APIENTRY * PFNGLMATRIXINDEXUSVARBPROC) (GLint size, const GLushort *indices); typedef void (APIENTRY * PFNGLMATRIXINDEXUIVARBPROC) (GLint size, const GLuint *indices); typedef void (APIENTRY * PFNGLMATRIXINDEXPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); #endif #ifndef GL_ARB_texture_env_combine #define GL_ARB_texture_env_combine 1 #endif #ifndef GL_ARB_texture_env_crossbar #define GL_ARB_texture_env_crossbar 1 #endif #ifndef GL_ARB_texture_env_dot3 #define GL_ARB_texture_env_dot3 1 #endif #ifndef GL_ARB_texture_mirror_repeat #define GL_ARB_texture_mirror_repeat 1 #endif #ifndef GL_ARB_depth_texture #define GL_ARB_depth_texture 1 #endif #ifndef GL_ARB_shadow #define GL_ARB_shadow 1 #endif #ifndef GL_ARB_shadow_ambient #define GL_ARB_shadow_ambient 1 #endif #ifndef GL_ARB_window_pos #define GL_ARB_window_pos 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glWindowPos2dARB (GLdouble, GLdouble); GLAPI void APIENTRY glWindowPos2dvARB (const GLdouble *); GLAPI void APIENTRY glWindowPos2fARB (GLfloat, GLfloat); GLAPI void APIENTRY glWindowPos2fvARB (const GLfloat *); GLAPI void APIENTRY glWindowPos2iARB (GLint, GLint); GLAPI void APIENTRY glWindowPos2ivARB (const GLint *); GLAPI void APIENTRY glWindowPos2sARB (GLshort, GLshort); GLAPI void APIENTRY glWindowPos2svARB (const GLshort *); GLAPI void APIENTRY glWindowPos3dARB (GLdouble, GLdouble, GLdouble); GLAPI void APIENTRY glWindowPos3dvARB (const GLdouble *); GLAPI void APIENTRY glWindowPos3fARB (GLfloat, GLfloat, GLfloat); GLAPI void APIENTRY glWindowPos3fvARB (const GLfloat *); GLAPI void APIENTRY glWindowPos3iARB (GLint, GLint, GLint); GLAPI void APIENTRY glWindowPos3ivARB (const GLint *); GLAPI void APIENTRY glWindowPos3sARB (GLshort, GLshort, GLshort); GLAPI void APIENTRY glWindowPos3svARB (const GLshort *); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLWINDOWPOS2DARBPROC) (GLdouble x, GLdouble y); typedef void (APIENTRY * PFNGLWINDOWPOS2DVARBPROC) (const GLdouble *v); typedef void (APIENTRY * PFNGLWINDOWPOS2FARBPROC) (GLfloat x, GLfloat y); typedef void (APIENTRY * PFNGLWINDOWPOS2FVARBPROC) (const GLfloat *v); typedef void (APIENTRY * PFNGLWINDOWPOS2IARBPROC) (GLint x, GLint y); typedef void (APIENTRY * PFNGLWINDOWPOS2IVARBPROC) (const GLint *v); typedef void (APIENTRY * PFNGLWINDOWPOS2SARBPROC) (GLshort x, GLshort y); typedef void (APIENTRY * PFNGLWINDOWPOS2SVARBPROC) (const GLshort *v); typedef void (APIENTRY * PFNGLWINDOWPOS3DARBPROC) (GLdouble x, GLdouble y, GLdouble z); typedef void (APIENTRY * PFNGLWINDOWPOS3DVARBPROC) (const GLdouble *v); typedef void (APIENTRY * PFNGLWINDOWPOS3FARBPROC) (GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRY * PFNGLWINDOWPOS3FVARBPROC) (const GLfloat *v); typedef void (APIENTRY * PFNGLWINDOWPOS3IARBPROC) (GLint x, GLint y, GLint z); typedef void (APIENTRY * PFNGLWINDOWPOS3IVARBPROC) (const GLint *v); typedef void (APIENTRY * PFNGLWINDOWPOS3SARBPROC) (GLshort x, GLshort y, GLshort z); typedef void (APIENTRY * PFNGLWINDOWPOS3SVARBPROC) (const GLshort *v); #endif #ifndef GL_EXT_abgr #define GL_EXT_abgr 1 #endif #ifndef GL_EXT_blend_color #define GL_EXT_blend_color 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBlendColorEXT (GLclampf, GLclampf, GLclampf, GLclampf); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLBLENDCOLOREXTPROC) (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); #endif #ifndef GL_EXT_polygon_offset #define GL_EXT_polygon_offset 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glPolygonOffsetEXT (GLfloat, GLfloat); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLPOLYGONOFFSETEXTPROC) (GLfloat factor, GLfloat bias); #endif #ifndef GL_EXT_texture #define GL_EXT_texture 1 #endif #ifndef GL_EXT_texture3D #define GL_EXT_texture3D 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glTexImage3DEXT (GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLenum, GLenum, const GLvoid *); GLAPI void APIENTRY glTexSubImage3DEXT (GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLTEXIMAGE3DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); typedef void (APIENTRY * PFNGLTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); #endif #ifndef GL_SGIS_texture_filter4 #define GL_SGIS_texture_filter4 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glGetTexFilterFuncSGIS (GLenum, GLenum, GLfloat *); GLAPI void APIENTRY glTexFilterFuncSGIS (GLenum, GLenum, GLsizei, const GLfloat *); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLGETTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLfloat *weights); typedef void (APIENTRY * PFNGLTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLsizei n, const GLfloat *weights); #endif #ifndef GL_EXT_subtexture #define GL_EXT_subtexture 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glTexSubImage1DEXT (GLenum, GLint, GLint, GLsizei, GLenum, GLenum, const GLvoid *); GLAPI void APIENTRY glTexSubImage2DEXT (GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels); typedef void (APIENTRY * PFNGLTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); #endif #ifndef GL_EXT_copy_texture #define GL_EXT_copy_texture 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glCopyTexImage1DEXT (GLenum, GLint, GLenum, GLint, GLint, GLsizei, GLint); GLAPI void APIENTRY glCopyTexImage2DEXT (GLenum, GLint, GLenum, GLint, GLint, GLsizei, GLsizei, GLint); GLAPI void APIENTRY glCopyTexSubImage1DEXT (GLenum, GLint, GLint, GLint, GLint, GLsizei); GLAPI void APIENTRY glCopyTexSubImage2DEXT (GLenum, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei); GLAPI void APIENTRY glCopyTexSubImage3DEXT (GLenum, GLint, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLCOPYTEXIMAGE1DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); typedef void (APIENTRY * PFNGLCOPYTEXIMAGE2DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); typedef void (APIENTRY * PFNGLCOPYTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); typedef void (APIENTRY * PFNGLCOPYTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); typedef void (APIENTRY * PFNGLCOPYTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); #endif #ifndef GL_EXT_histogram #define GL_EXT_histogram 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glGetHistogramEXT (GLenum, GLboolean, GLenum, GLenum, GLvoid *); GLAPI void APIENTRY glGetHistogramParameterfvEXT (GLenum, GLenum, GLfloat *); GLAPI void APIENTRY glGetHistogramParameterivEXT (GLenum, GLenum, GLint *); GLAPI void APIENTRY glGetMinmaxEXT (GLenum, GLboolean, GLenum, GLenum, GLvoid *); GLAPI void APIENTRY glGetMinmaxParameterfvEXT (GLenum, GLenum, GLfloat *); GLAPI void APIENTRY glGetMinmaxParameterivEXT (GLenum, GLenum, GLint *); GLAPI void APIENTRY glHistogramEXT (GLenum, GLsizei, GLenum, GLboolean); GLAPI void APIENTRY glMinmaxEXT (GLenum, GLenum, GLboolean); GLAPI void APIENTRY glResetHistogramEXT (GLenum); GLAPI void APIENTRY glResetMinmaxEXT (GLenum); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLGETHISTOGRAMEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); typedef void (APIENTRY * PFNGLGETHISTOGRAMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); typedef void (APIENTRY * PFNGLGETHISTOGRAMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); typedef void (APIENTRY * PFNGLGETMINMAXEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); typedef void (APIENTRY * PFNGLGETMINMAXPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); typedef void (APIENTRY * PFNGLGETMINMAXPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); typedef void (APIENTRY * PFNGLHISTOGRAMEXTPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); typedef void (APIENTRY * PFNGLMINMAXEXTPROC) (GLenum target, GLenum internalformat, GLboolean sink); typedef void (APIENTRY * PFNGLRESETHISTOGRAMEXTPROC) (GLenum target); typedef void (APIENTRY * PFNGLRESETMINMAXEXTPROC) (GLenum target); #endif #ifndef GL_EXT_convolution #define GL_EXT_convolution 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glConvolutionFilter1DEXT (GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid *); GLAPI void APIENTRY glConvolutionFilter2DEXT (GLenum, GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *); GLAPI void APIENTRY glConvolutionParameterfEXT (GLenum, GLenum, GLfloat); GLAPI void APIENTRY glConvolutionParameterfvEXT (GLenum, GLenum, const GLfloat *); GLAPI void APIENTRY glConvolutionParameteriEXT (GLenum, GLenum, GLint); GLAPI void APIENTRY glConvolutionParameterivEXT (GLenum, GLenum, const GLint *); GLAPI void APIENTRY glCopyConvolutionFilter1DEXT (GLenum, GLenum, GLint, GLint, GLsizei); GLAPI void APIENTRY glCopyConvolutionFilter2DEXT (GLenum, GLenum, GLint, GLint, GLsizei, GLsizei); GLAPI void APIENTRY glGetConvolutionFilterEXT (GLenum, GLenum, GLenum, GLvoid *); GLAPI void APIENTRY glGetConvolutionParameterfvEXT (GLenum, GLenum, GLfloat *); GLAPI void APIENTRY glGetConvolutionParameterivEXT (GLenum, GLenum, GLint *); GLAPI void APIENTRY glGetSeparableFilterEXT (GLenum, GLenum, GLenum, GLvoid *, GLvoid *, GLvoid *); GLAPI void APIENTRY glSeparableFilter2DEXT (GLenum, GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *, const GLvoid *); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image); typedef void (APIENTRY * PFNGLCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image); typedef void (APIENTRY * PFNGLCONVOLUTIONPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat params); typedef void (APIENTRY * PFNGLCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat *params); typedef void (APIENTRY * PFNGLCONVOLUTIONPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint params); typedef void (APIENTRY * PFNGLCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint *params); typedef void (APIENTRY * PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); typedef void (APIENTRY * PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); typedef void (APIENTRY * PFNGLGETCONVOLUTIONFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, GLvoid *image); typedef void (APIENTRY * PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); typedef void (APIENTRY * PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); typedef void (APIENTRY * PFNGLGETSEPARABLEFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span); typedef void (APIENTRY * PFNGLSEPARABLEFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column); #endif #ifndef GL_EXT_color_matrix #define GL_EXT_color_matrix 1 #endif #ifndef GL_SGI_color_table #define GL_SGI_color_table 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glColorTableSGI (GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid *); GLAPI void APIENTRY glColorTableParameterfvSGI (GLenum, GLenum, const GLfloat *); GLAPI void APIENTRY glColorTableParameterivSGI (GLenum, GLenum, const GLint *); GLAPI void APIENTRY glCopyColorTableSGI (GLenum, GLenum, GLint, GLint, GLsizei); GLAPI void APIENTRY glGetColorTableSGI (GLenum, GLenum, GLenum, GLvoid *); GLAPI void APIENTRY glGetColorTableParameterfvSGI (GLenum, GLenum, GLfloat *); GLAPI void APIENTRY glGetColorTableParameterivSGI (GLenum, GLenum, GLint *); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table); typedef void (APIENTRY * PFNGLCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, const GLfloat *params); typedef void (APIENTRY * PFNGLCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, const GLint *params); typedef void (APIENTRY * PFNGLCOPYCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); typedef void (APIENTRY * PFNGLGETCOLORTABLESGIPROC) (GLenum target, GLenum format, GLenum type, GLvoid *table); typedef void (APIENTRY * PFNGLGETCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, GLfloat *params); typedef void (APIENTRY * PFNGLGETCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, GLint *params); #endif #ifndef GL_SGIX_pixel_texture #define GL_SGIX_pixel_texture 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glPixelTexGenSGIX (GLenum); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLPIXELTEXGENSGIXPROC) (GLenum mode); #endif #ifndef GL_SGIS_pixel_texture #define GL_SGIS_pixel_texture 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glPixelTexGenParameteriSGIS (GLenum, GLint); GLAPI void APIENTRY glPixelTexGenParameterivSGIS (GLenum, const GLint *); GLAPI void APIENTRY glPixelTexGenParameterfSGIS (GLenum, GLfloat); GLAPI void APIENTRY glPixelTexGenParameterfvSGIS (GLenum, const GLfloat *); GLAPI void APIENTRY glGetPixelTexGenParameterivSGIS (GLenum, GLint *); GLAPI void APIENTRY glGetPixelTexGenParameterfvSGIS (GLenum, GLfloat *); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLPIXELTEXGENPARAMETERISGISPROC) (GLenum pname, GLint param); typedef void (APIENTRY * PFNGLPIXELTEXGENPARAMETERIVSGISPROC) (GLenum pname, const GLint *params); typedef void (APIENTRY * PFNGLPIXELTEXGENPARAMETERFSGISPROC) (GLenum pname, GLfloat param); typedef void (APIENTRY * PFNGLPIXELTEXGENPARAMETERFVSGISPROC) (GLenum pname, const GLfloat *params); typedef void (APIENTRY * PFNGLGETPIXELTEXGENPARAMETERIVSGISPROC) (GLenum pname, GLint *params); typedef void (APIENTRY * PFNGLGETPIXELTEXGENPARAMETERFVSGISPROC) (GLenum pname, GLfloat *params); #endif #ifndef GL_SGIS_texture4D #define GL_SGIS_texture4D 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glTexImage4DSGIS (GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLsizei, GLint, GLenum, GLenum, const GLvoid *); GLAPI void APIENTRY glTexSubImage4DSGIS (GLenum, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLTEXIMAGE4DSGISPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const GLvoid *pixels); typedef void (APIENTRY * PFNGLTEXSUBIMAGE4DSGISPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLenum format, GLenum type, const GLvoid *pixels); #endif #ifndef GL_SGI_texture_color_table #define GL_SGI_texture_color_table 1 #endif #ifndef GL_EXT_cmyka #define GL_EXT_cmyka 1 #endif #ifndef GL_EXT_texture_object #define GL_EXT_texture_object 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI GLboolean APIENTRY glAreTexturesResidentEXT (GLsizei, const GLuint *, GLboolean *); GLAPI void APIENTRY glBindTextureEXT (GLenum, GLuint); GLAPI void APIENTRY glDeleteTexturesEXT (GLsizei, const GLuint *); GLAPI void APIENTRY glGenTexturesEXT (GLsizei, GLuint *); GLAPI GLboolean APIENTRY glIsTextureEXT (GLuint); GLAPI void APIENTRY glPrioritizeTexturesEXT (GLsizei, const GLuint *, const GLclampf *); #endif /* GL_GLEXT_PROTOTYPES */ typedef GLboolean (APIENTRY * PFNGLARETEXTURESRESIDENTEXTPROC) (GLsizei n, const GLuint *textures, GLboolean *residences); typedef void (APIENTRY * PFNGLBINDTEXTUREEXTPROC) (GLenum target, GLuint texture); typedef void (APIENTRY * PFNGLDELETETEXTURESEXTPROC) (GLsizei n, const GLuint *textures); typedef void (APIENTRY * PFNGLGENTEXTURESEXTPROC) (GLsizei n, GLuint *textures); typedef GLboolean (APIENTRY * PFNGLISTEXTUREEXTPROC) (GLuint texture); typedef void (APIENTRY * PFNGLPRIORITIZETEXTURESEXTPROC) (GLsizei n, const GLuint *textures, const GLclampf *priorities); #endif #ifndef GL_SGIS_detail_texture #define GL_SGIS_detail_texture 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDetailTexFuncSGIS (GLenum, GLsizei, const GLfloat *); GLAPI void APIENTRY glGetDetailTexFuncSGIS (GLenum, GLfloat *); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLDETAILTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat *points); typedef void (APIENTRY * PFNGLGETDETAILTEXFUNCSGISPROC) (GLenum target, GLfloat *points); #endif #ifndef GL_SGIS_sharpen_texture #define GL_SGIS_sharpen_texture 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glSharpenTexFuncSGIS (GLenum, GLsizei, const GLfloat *); GLAPI void APIENTRY glGetSharpenTexFuncSGIS (GLenum, GLfloat *); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLSHARPENTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat *points); typedef void (APIENTRY * PFNGLGETSHARPENTEXFUNCSGISPROC) (GLenum target, GLfloat *points); #endif #ifndef GL_EXT_packed_pixels #define GL_EXT_packed_pixels 1 #endif #ifndef GL_SGIS_texture_lod #define GL_SGIS_texture_lod 1 #endif #ifndef GL_SGIS_multisample #define GL_SGIS_multisample 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glSampleMaskSGIS (GLclampf, GLboolean); GLAPI void APIENTRY glSamplePatternSGIS (GLenum); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLSAMPLEMASKSGISPROC) (GLclampf value, GLboolean invert); typedef void (APIENTRY * PFNGLSAMPLEPATTERNSGISPROC) (GLenum pattern); #endif #ifndef GL_EXT_rescale_normal #define GL_EXT_rescale_normal 1 #endif #ifndef GL_EXT_vertex_array #define GL_EXT_vertex_array 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glArrayElementEXT (GLint); GLAPI void APIENTRY glColorPointerEXT (GLint, GLenum, GLsizei, GLsizei, const GLvoid *); GLAPI void APIENTRY glDrawArraysEXT (GLenum, GLint, GLsizei); GLAPI void APIENTRY glEdgeFlagPointerEXT (GLsizei, GLsizei, const GLboolean *); GLAPI void APIENTRY glGetPointervEXT (GLenum, GLvoid* *); GLAPI void APIENTRY glIndexPointerEXT (GLenum, GLsizei, GLsizei, const GLvoid *); GLAPI void APIENTRY glNormalPointerEXT (GLenum, GLsizei, GLsizei, const GLvoid *); GLAPI void APIENTRY glTexCoordPointerEXT (GLint, GLenum, GLsizei, GLsizei, const GLvoid *); GLAPI void APIENTRY glVertexPointerEXT (GLint, GLenum, GLsizei, GLsizei, const GLvoid *); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLARRAYELEMENTEXTPROC) (GLint i); typedef void (APIENTRY * PFNGLCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); typedef void (APIENTRY * PFNGLDRAWARRAYSEXTPROC) (GLenum mode, GLint first, GLsizei count); typedef void (APIENTRY * PFNGLEDGEFLAGPOINTEREXTPROC) (GLsizei stride, GLsizei count, const GLboolean *pointer); typedef void (APIENTRY * PFNGLGETPOINTERVEXTPROC) (GLenum pname, GLvoid* *params); typedef void (APIENTRY * PFNGLINDEXPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); typedef void (APIENTRY * PFNGLNORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); typedef void (APIENTRY * PFNGLTEXCOORDPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); typedef void (APIENTRY * PFNGLVERTEXPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); #endif #ifndef GL_EXT_misc_attribute #define GL_EXT_misc_attribute 1 #endif #ifndef GL_SGIS_generate_mipmap #define GL_SGIS_generate_mipmap 1 #endif #ifndef GL_SGIX_clipmap #define GL_SGIX_clipmap 1 #endif #ifndef GL_SGIX_shadow #define GL_SGIX_shadow 1 #endif #ifndef GL_SGIS_texture_edge_clamp #define GL_SGIS_texture_edge_clamp 1 #endif #ifndef GL_SGIS_texture_border_clamp #define GL_SGIS_texture_border_clamp 1 #endif #ifndef GL_EXT_blend_minmax #define GL_EXT_blend_minmax 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBlendEquationEXT (GLenum); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLBLENDEQUATIONEXTPROC) (GLenum mode); #endif #ifndef GL_EXT_blend_subtract #define GL_EXT_blend_subtract 1 #endif #ifndef GL_EXT_blend_logic_op #define GL_EXT_blend_logic_op 1 #endif #ifndef GL_SGIX_interlace #define GL_SGIX_interlace 1 #endif #ifndef GL_SGIX_pixel_tiles #define GL_SGIX_pixel_tiles 1 #endif #ifndef GL_SGIX_texture_select #define GL_SGIX_texture_select 1 #endif #ifndef GL_SGIX_sprite #define GL_SGIX_sprite 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glSpriteParameterfSGIX (GLenum, GLfloat); GLAPI void APIENTRY glSpriteParameterfvSGIX (GLenum, const GLfloat *); GLAPI void APIENTRY glSpriteParameteriSGIX (GLenum, GLint); GLAPI void APIENTRY glSpriteParameterivSGIX (GLenum, const GLint *); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLSPRITEPARAMETERFSGIXPROC) (GLenum pname, GLfloat param); typedef void (APIENTRY * PFNGLSPRITEPARAMETERFVSGIXPROC) (GLenum pname, const GLfloat *params); typedef void (APIENTRY * PFNGLSPRITEPARAMETERISGIXPROC) (GLenum pname, GLint param); typedef void (APIENTRY * PFNGLSPRITEPARAMETERIVSGIXPROC) (GLenum pname, const GLint *params); #endif #ifndef GL_SGIX_texture_multi_buffer #define GL_SGIX_texture_multi_buffer 1 #endif #ifndef GL_EXT_point_parameters #define GL_EXT_point_parameters 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glPointParameterfEXT (GLenum, GLfloat); GLAPI void APIENTRY glPointParameterfvEXT (GLenum, const GLfloat *); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLPOINTPARAMETERFEXTPROC) (GLenum pname, GLfloat param); typedef void (APIENTRY * PFNGLPOINTPARAMETERFVEXTPROC) (GLenum pname, const GLfloat *params); #endif #ifndef GL_SGIS_point_parameters #define GL_SGIS_point_parameters 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glPointParameterfSGIS (GLenum, GLfloat); GLAPI void APIENTRY glPointParameterfvSGIS (GLenum, const GLfloat *); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLPOINTPARAMETERFSGISPROC) (GLenum pname, GLfloat param); typedef void (APIENTRY * PFNGLPOINTPARAMETERFVSGISPROC) (GLenum pname, const GLfloat *params); #endif #ifndef GL_SGIX_instruments #define GL_SGIX_instruments 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI GLint APIENTRY glGetInstrumentsSGIX (void); GLAPI void APIENTRY glInstrumentsBufferSGIX (GLsizei, GLint *); GLAPI GLint APIENTRY glPollInstrumentsSGIX (GLint *); GLAPI void APIENTRY glReadInstrumentsSGIX (GLint); GLAPI void APIENTRY glStartInstrumentsSGIX (void); GLAPI void APIENTRY glStopInstrumentsSGIX (GLint); #endif /* GL_GLEXT_PROTOTYPES */ typedef GLint (APIENTRY * PFNGLGETINSTRUMENTSSGIXPROC) (void); typedef void (APIENTRY * PFNGLINSTRUMENTSBUFFERSGIXPROC) (GLsizei size, GLint *buffer); typedef GLint (APIENTRY * PFNGLPOLLINSTRUMENTSSGIXPROC) (GLint *marker_p); typedef void (APIENTRY * PFNGLREADINSTRUMENTSSGIXPROC) (GLint marker); typedef void (APIENTRY * PFNGLSTARTINSTRUMENTSSGIXPROC) (void); typedef void (APIENTRY * PFNGLSTOPINSTRUMENTSSGIXPROC) (GLint marker); #endif #ifndef GL_SGIX_texture_scale_bias #define GL_SGIX_texture_scale_bias 1 #endif #ifndef GL_SGIX_framezoom #define GL_SGIX_framezoom 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glFrameZoomSGIX (GLint); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLFRAMEZOOMSGIXPROC) (GLint factor); #endif #ifndef GL_SGIX_tag_sample_buffer #define GL_SGIX_tag_sample_buffer 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glTagSampleBufferSGIX (void); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLTAGSAMPLEBUFFERSGIXPROC) (void); #endif #ifndef GL_SGIX_polynomial_ffd #define GL_SGIX_polynomial_ffd 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDeformationMap3dSGIX (GLenum, GLdouble, GLdouble, GLint, GLint, GLdouble, GLdouble, GLint, GLint, GLdouble, GLdouble, GLint, GLint, const GLdouble *); GLAPI void APIENTRY glDeformationMap3fSGIX (GLenum, GLfloat, GLfloat, GLint, GLint, GLfloat, GLfloat, GLint, GLint, GLfloat, GLfloat, GLint, GLint, const GLfloat *); GLAPI void APIENTRY glDeformSGIX (GLbitfield); GLAPI void APIENTRY glLoadIdentityDeformationMapSGIX (GLbitfield); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLDEFORMATIONMAP3DSGIXPROC) (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, GLdouble w1, GLdouble w2, GLint wstride, GLint worder, const GLdouble *points); typedef void (APIENTRY * PFNGLDEFORMATIONMAP3FSGIXPROC) (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, GLfloat w1, GLfloat w2, GLint wstride, GLint worder, const GLfloat *points); typedef void (APIENTRY * PFNGLDEFORMSGIXPROC) (GLbitfield mask); typedef void (APIENTRY * PFNGLLOADIDENTITYDEFORMATIONMAPSGIXPROC) (GLbitfield mask); #endif #ifndef GL_SGIX_reference_plane #define GL_SGIX_reference_plane 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glReferencePlaneSGIX (const GLdouble *); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLREFERENCEPLANESGIXPROC) (const GLdouble *equation); #endif #ifndef GL_SGIX_flush_raster #define GL_SGIX_flush_raster 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glFlushRasterSGIX (void); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLFLUSHRASTERSGIXPROC) (void); #endif #ifndef GL_SGIX_depth_texture #define GL_SGIX_depth_texture 1 #endif #ifndef GL_SGIS_fog_function #define GL_SGIS_fog_function 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glFogFuncSGIS (GLsizei, const GLfloat *); GLAPI void APIENTRY glGetFogFuncSGIS (GLfloat *); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLFOGFUNCSGISPROC) (GLsizei n, const GLfloat *points); typedef void (APIENTRY * PFNGLGETFOGFUNCSGISPROC) (GLfloat *points); #endif #ifndef GL_SGIX_fog_offset #define GL_SGIX_fog_offset 1 #endif #ifndef GL_HP_image_transform #define GL_HP_image_transform 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glImageTransformParameteriHP (GLenum, GLenum, GLint); GLAPI void APIENTRY glImageTransformParameterfHP (GLenum, GLenum, GLfloat); GLAPI void APIENTRY glImageTransformParameterivHP (GLenum, GLenum, const GLint *); GLAPI void APIENTRY glImageTransformParameterfvHP (GLenum, GLenum, const GLfloat *); GLAPI void APIENTRY glGetImageTransformParameterivHP (GLenum, GLenum, GLint *); GLAPI void APIENTRY glGetImageTransformParameterfvHP (GLenum, GLenum, GLfloat *); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLIMAGETRANSFORMPARAMETERIHPPROC) (GLenum target, GLenum pname, GLint param); typedef void (APIENTRY * PFNGLIMAGETRANSFORMPARAMETERFHPPROC) (GLenum target, GLenum pname, GLfloat param); typedef void (APIENTRY * PFNGLIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, const GLint *params); typedef void (APIENTRY * PFNGLIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, const GLfloat *params); typedef void (APIENTRY * PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, GLint *params); typedef void (APIENTRY * PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, GLfloat *params); #endif #ifndef GL_HP_convolution_border_modes #define GL_HP_convolution_border_modes 1 #endif #ifndef GL_SGIX_texture_add_env #define GL_SGIX_texture_add_env 1 #endif #ifndef GL_EXT_color_subtable #define GL_EXT_color_subtable 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glColorSubTableEXT (GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *); GLAPI void APIENTRY glCopyColorSubTableEXT (GLenum, GLsizei, GLint, GLint, GLsizei); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data); typedef void (APIENTRY * PFNGLCOPYCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); #endif #ifndef GL_PGI_vertex_hints #define GL_PGI_vertex_hints 1 #endif #ifndef GL_PGI_misc_hints #define GL_PGI_misc_hints 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glHintPGI (GLenum, GLint); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLHINTPGIPROC) (GLenum target, GLint mode); #endif #ifndef GL_EXT_paletted_texture #define GL_EXT_paletted_texture 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glColorTableEXT (GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid *); GLAPI void APIENTRY glGetColorTableEXT (GLenum, GLenum, GLenum, GLvoid *); GLAPI void APIENTRY glGetColorTableParameterivEXT (GLenum, GLenum, GLint *); GLAPI void APIENTRY glGetColorTableParameterfvEXT (GLenum, GLenum, GLfloat *); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLCOLORTABLEEXTPROC) (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const GLvoid *table); typedef void (APIENTRY * PFNGLGETCOLORTABLEEXTPROC) (GLenum target, GLenum format, GLenum type, GLvoid *data); typedef void (APIENTRY * PFNGLGETCOLORTABLEPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); typedef void (APIENTRY * PFNGLGETCOLORTABLEPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); #endif #ifndef GL_EXT_clip_volume_hint #define GL_EXT_clip_volume_hint 1 #endif #ifndef GL_SGIX_list_priority #define GL_SGIX_list_priority 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glGetListParameterfvSGIX (GLuint, GLenum, GLfloat *); GLAPI void APIENTRY glGetListParameterivSGIX (GLuint, GLenum, GLint *); GLAPI void APIENTRY glListParameterfSGIX (GLuint, GLenum, GLfloat); GLAPI void APIENTRY glListParameterfvSGIX (GLuint, GLenum, const GLfloat *); GLAPI void APIENTRY glListParameteriSGIX (GLuint, GLenum, GLint); GLAPI void APIENTRY glListParameterivSGIX (GLuint, GLenum, const GLint *); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLGETLISTPARAMETERFVSGIXPROC) (GLuint list, GLenum pname, GLfloat *params); typedef void (APIENTRY * PFNGLGETLISTPARAMETERIVSGIXPROC) (GLuint list, GLenum pname, GLint *params); typedef void (APIENTRY * PFNGLLISTPARAMETERFSGIXPROC) (GLuint list, GLenum pname, GLfloat param); typedef void (APIENTRY * PFNGLLISTPARAMETERFVSGIXPROC) (GLuint list, GLenum pname, const GLfloat *params); typedef void (APIENTRY * PFNGLLISTPARAMETERISGIXPROC) (GLuint list, GLenum pname, GLint param); typedef void (APIENTRY * PFNGLLISTPARAMETERIVSGIXPROC) (GLuint list, GLenum pname, const GLint *params); #endif #ifndef GL_SGIX_ir_instrument1 #define GL_SGIX_ir_instrument1 1 #endif #ifndef GL_SGIX_calligraphic_fragment #define GL_SGIX_calligraphic_fragment 1 #endif #ifndef GL_SGIX_texture_lod_bias #define GL_SGIX_texture_lod_bias 1 #endif #ifndef GL_SGIX_shadow_ambient #define GL_SGIX_shadow_ambient 1 #endif #ifndef GL_EXT_index_texture #define GL_EXT_index_texture 1 #endif #ifndef GL_EXT_index_material #define GL_EXT_index_material 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glIndexMaterialEXT (GLenum, GLenum); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLINDEXMATERIALEXTPROC) (GLenum face, GLenum mode); #endif #ifndef GL_EXT_index_func #define GL_EXT_index_func 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glIndexFuncEXT (GLenum, GLclampf); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLINDEXFUNCEXTPROC) (GLenum func, GLclampf ref); #endif #ifndef GL_EXT_index_array_formats #define GL_EXT_index_array_formats 1 #endif #ifndef GL_EXT_compiled_vertex_array #define GL_EXT_compiled_vertex_array 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glLockArraysEXT (GLint, GLsizei); GLAPI void APIENTRY glUnlockArraysEXT (void); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLLOCKARRAYSEXTPROC) (GLint first, GLsizei count); typedef void (APIENTRY * PFNGLUNLOCKARRAYSEXTPROC) (void); #endif #ifndef GL_EXT_cull_vertex #define GL_EXT_cull_vertex 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glCullParameterdvEXT (GLenum, GLdouble *); GLAPI void APIENTRY glCullParameterfvEXT (GLenum, GLfloat *); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLCULLPARAMETERDVEXTPROC) (GLenum pname, GLdouble *params); typedef void (APIENTRY * PFNGLCULLPARAMETERFVEXTPROC) (GLenum pname, GLfloat *params); #endif #ifndef GL_SGIX_ycrcb #define GL_SGIX_ycrcb 1 #endif #ifndef GL_SGIX_fragment_lighting #define GL_SGIX_fragment_lighting 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glFragmentColorMaterialSGIX (GLenum, GLenum); GLAPI void APIENTRY glFragmentLightfSGIX (GLenum, GLenum, GLfloat); GLAPI void APIENTRY glFragmentLightfvSGIX (GLenum, GLenum, const GLfloat *); GLAPI void APIENTRY glFragmentLightiSGIX (GLenum, GLenum, GLint); GLAPI void APIENTRY glFragmentLightivSGIX (GLenum, GLenum, const GLint *); GLAPI void APIENTRY glFragmentLightModelfSGIX (GLenum, GLfloat); GLAPI void APIENTRY glFragmentLightModelfvSGIX (GLenum, const GLfloat *); GLAPI void APIENTRY glFragmentLightModeliSGIX (GLenum, GLint); GLAPI void APIENTRY glFragmentLightModelivSGIX (GLenum, const GLint *); GLAPI void APIENTRY glFragmentMaterialfSGIX (GLenum, GLenum, GLfloat); GLAPI void APIENTRY glFragmentMaterialfvSGIX (GLenum, GLenum, const GLfloat *); GLAPI void APIENTRY glFragmentMaterialiSGIX (GLenum, GLenum, GLint); GLAPI void APIENTRY glFragmentMaterialivSGIX (GLenum, GLenum, const GLint *); GLAPI void APIENTRY glGetFragmentLightfvSGIX (GLenum, GLenum, GLfloat *); GLAPI void APIENTRY glGetFragmentLightivSGIX (GLenum, GLenum, GLint *); GLAPI void APIENTRY glGetFragmentMaterialfvSGIX (GLenum, GLenum, GLfloat *); GLAPI void APIENTRY glGetFragmentMaterialivSGIX (GLenum, GLenum, GLint *); GLAPI void APIENTRY glLightEnviSGIX (GLenum, GLint); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLFRAGMENTCOLORMATERIALSGIXPROC) (GLenum face, GLenum mode); typedef void (APIENTRY * PFNGLFRAGMENTLIGHTFSGIXPROC) (GLenum light, GLenum pname, GLfloat param); typedef void (APIENTRY * PFNGLFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, const GLfloat *params); typedef void (APIENTRY * PFNGLFRAGMENTLIGHTISGIXPROC) (GLenum light, GLenum pname, GLint param); typedef void (APIENTRY * PFNGLFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, const GLint *params); typedef void (APIENTRY * PFNGLFRAGMENTLIGHTMODELFSGIXPROC) (GLenum pname, GLfloat param); typedef void (APIENTRY * PFNGLFRAGMENTLIGHTMODELFVSGIXPROC) (GLenum pname, const GLfloat *params); typedef void (APIENTRY * PFNGLFRAGMENTLIGHTMODELISGIXPROC) (GLenum pname, GLint param); typedef void (APIENTRY * PFNGLFRAGMENTLIGHTMODELIVSGIXPROC) (GLenum pname, const GLint *params); typedef void (APIENTRY * PFNGLFRAGMENTMATERIALFSGIXPROC) (GLenum face, GLenum pname, GLfloat param); typedef void (APIENTRY * PFNGLFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, const GLfloat *params); typedef void (APIENTRY * PFNGLFRAGMENTMATERIALISGIXPROC) (GLenum face, GLenum pname, GLint param); typedef void (APIENTRY * PFNGLFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, const GLint *params); typedef void (APIENTRY * PFNGLGETFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, GLfloat *params); typedef void (APIENTRY * PFNGLGETFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, GLint *params); typedef void (APIENTRY * PFNGLGETFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, GLfloat *params); typedef void (APIENTRY * PFNGLGETFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, GLint *params); typedef void (APIENTRY * PFNGLLIGHTENVISGIXPROC) (GLenum pname, GLint param); #endif #ifndef GL_IBM_rasterpos_clip #define GL_IBM_rasterpos_clip 1 #endif #ifndef GL_HP_texture_lighting #define GL_HP_texture_lighting 1 #endif #ifndef GL_EXT_draw_range_elements #define GL_EXT_draw_range_elements 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDrawRangeElementsEXT (GLenum, GLuint, GLuint, GLsizei, GLenum, const GLvoid *); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLDRAWRANGEELEMENTSEXTPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices); #endif #ifndef GL_WIN_phong_shading #define GL_WIN_phong_shading 1 #endif #ifndef GL_WIN_specular_fog #define GL_WIN_specular_fog 1 #endif #ifndef GL_EXT_light_texture #define GL_EXT_light_texture 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glApplyTextureEXT (GLenum); GLAPI void APIENTRY glTextureLightEXT (GLenum); GLAPI void APIENTRY glTextureMaterialEXT (GLenum, GLenum); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLAPPLYTEXTUREEXTPROC) (GLenum mode); typedef void (APIENTRY * PFNGLTEXTURELIGHTEXTPROC) (GLenum pname); typedef void (APIENTRY * PFNGLTEXTUREMATERIALEXTPROC) (GLenum face, GLenum mode); #endif #ifndef GL_SGIX_blend_alpha_minmax #define GL_SGIX_blend_alpha_minmax 1 #endif #ifndef GL_EXT_bgra #define GL_EXT_bgra 1 #endif #ifndef GL_SGIX_async #define GL_SGIX_async 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glAsyncMarkerSGIX (GLuint); GLAPI GLint APIENTRY glFinishAsyncSGIX (GLuint *); GLAPI GLint APIENTRY glPollAsyncSGIX (GLuint *); GLAPI GLuint APIENTRY glGenAsyncMarkersSGIX (GLsizei); GLAPI void APIENTRY glDeleteAsyncMarkersSGIX (GLuint, GLsizei); GLAPI GLboolean APIENTRY glIsAsyncMarkerSGIX (GLuint); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLASYNCMARKERSGIXPROC) (GLuint marker); typedef GLint (APIENTRY * PFNGLFINISHASYNCSGIXPROC) (GLuint *markerp); typedef GLint (APIENTRY * PFNGLPOLLASYNCSGIXPROC) (GLuint *markerp); typedef GLuint (APIENTRY * PFNGLGENASYNCMARKERSSGIXPROC) (GLsizei range); typedef void (APIENTRY * PFNGLDELETEASYNCMARKERSSGIXPROC) (GLuint marker, GLsizei range); typedef GLboolean (APIENTRY * PFNGLISASYNCMARKERSGIXPROC) (GLuint marker); #endif #ifndef GL_SGIX_async_pixel #define GL_SGIX_async_pixel 1 #endif #ifndef GL_SGIX_async_histogram #define GL_SGIX_async_histogram 1 #endif #ifndef GL_INTEL_parallel_arrays #define GL_INTEL_parallel_arrays 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glVertexPointervINTEL (GLint, GLenum, const GLvoid* *); GLAPI void APIENTRY glNormalPointervINTEL (GLenum, const GLvoid* *); GLAPI void APIENTRY glColorPointervINTEL (GLint, GLenum, const GLvoid* *); GLAPI void APIENTRY glTexCoordPointervINTEL (GLint, GLenum, const GLvoid* *); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLVERTEXPOINTERVINTELPROC) (GLint size, GLenum type, const GLvoid* *pointer); typedef void (APIENTRY * PFNGLNORMALPOINTERVINTELPROC) (GLenum type, const GLvoid* *pointer); typedef void (APIENTRY * PFNGLCOLORPOINTERVINTELPROC) (GLint size, GLenum type, const GLvoid* *pointer); typedef void (APIENTRY * PFNGLTEXCOORDPOINTERVINTELPROC) (GLint size, GLenum type, const GLvoid* *pointer); #endif #ifndef GL_HP_occlusion_test #define GL_HP_occlusion_test 1 #endif #ifndef GL_EXT_pixel_transform #define GL_EXT_pixel_transform 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glPixelTransformParameteriEXT (GLenum, GLenum, GLint); GLAPI void APIENTRY glPixelTransformParameterfEXT (GLenum, GLenum, GLfloat); GLAPI void APIENTRY glPixelTransformParameterivEXT (GLenum, GLenum, const GLint *); GLAPI void APIENTRY glPixelTransformParameterfvEXT (GLenum, GLenum, const GLfloat *); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLPIXELTRANSFORMPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint param); typedef void (APIENTRY * PFNGLPIXELTRANSFORMPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat param); typedef void (APIENTRY * PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint *params); typedef void (APIENTRY * PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat *params); #endif #ifndef GL_EXT_pixel_transform_color_table #define GL_EXT_pixel_transform_color_table 1 #endif #ifndef GL_EXT_shared_texture_palette #define GL_EXT_shared_texture_palette 1 #endif #ifndef GL_EXT_separate_specular_color #define GL_EXT_separate_specular_color 1 #endif #ifndef GL_EXT_secondary_color #define GL_EXT_secondary_color 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glSecondaryColor3bEXT (GLbyte, GLbyte, GLbyte); GLAPI void APIENTRY glSecondaryColor3bvEXT (const GLbyte *); GLAPI void APIENTRY glSecondaryColor3dEXT (GLdouble, GLdouble, GLdouble); GLAPI void APIENTRY glSecondaryColor3dvEXT (const GLdouble *); GLAPI void APIENTRY glSecondaryColor3fEXT (GLfloat, GLfloat, GLfloat); GLAPI void APIENTRY glSecondaryColor3fvEXT (const GLfloat *); GLAPI void APIENTRY glSecondaryColor3iEXT (GLint, GLint, GLint); GLAPI void APIENTRY glSecondaryColor3ivEXT (const GLint *); GLAPI void APIENTRY glSecondaryColor3sEXT (GLshort, GLshort, GLshort); GLAPI void APIENTRY glSecondaryColor3svEXT (const GLshort *); GLAPI void APIENTRY glSecondaryColor3ubEXT (GLubyte, GLubyte, GLubyte); GLAPI void APIENTRY glSecondaryColor3ubvEXT (const GLubyte *); GLAPI void APIENTRY glSecondaryColor3uiEXT (GLuint, GLuint, GLuint); GLAPI void APIENTRY glSecondaryColor3uivEXT (const GLuint *); GLAPI void APIENTRY glSecondaryColor3usEXT (GLushort, GLushort, GLushort); GLAPI void APIENTRY glSecondaryColor3usvEXT (const GLushort *); GLAPI void APIENTRY glSecondaryColorPointerEXT (GLint, GLenum, GLsizei, const GLvoid *); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLSECONDARYCOLOR3BEXTPROC) (GLbyte red, GLbyte green, GLbyte blue); typedef void (APIENTRY * PFNGLSECONDARYCOLOR3BVEXTPROC) (const GLbyte *v); typedef void (APIENTRY * PFNGLSECONDARYCOLOR3DEXTPROC) (GLdouble red, GLdouble green, GLdouble blue); typedef void (APIENTRY * PFNGLSECONDARYCOLOR3DVEXTPROC) (const GLdouble *v); typedef void (APIENTRY * PFNGLSECONDARYCOLOR3FEXTPROC) (GLfloat red, GLfloat green, GLfloat blue); typedef void (APIENTRY * PFNGLSECONDARYCOLOR3FVEXTPROC) (const GLfloat *v); typedef void (APIENTRY * PFNGLSECONDARYCOLOR3IEXTPROC) (GLint red, GLint green, GLint blue); typedef void (APIENTRY * PFNGLSECONDARYCOLOR3IVEXTPROC) (const GLint *v); typedef void (APIENTRY * PFNGLSECONDARYCOLOR3SEXTPROC) (GLshort red, GLshort green, GLshort blue); typedef void (APIENTRY * PFNGLSECONDARYCOLOR3SVEXTPROC) (const GLshort *v); typedef void (APIENTRY * PFNGLSECONDARYCOLOR3UBEXTPROC) (GLubyte red, GLubyte green, GLubyte blue); typedef void (APIENTRY * PFNGLSECONDARYCOLOR3UBVEXTPROC) (const GLubyte *v); typedef void (APIENTRY * PFNGLSECONDARYCOLOR3UIEXTPROC) (GLuint red, GLuint green, GLuint blue); typedef void (APIENTRY * PFNGLSECONDARYCOLOR3UIVEXTPROC) (const GLuint *v); typedef void (APIENTRY * PFNGLSECONDARYCOLOR3USEXTPROC) (GLushort red, GLushort green, GLushort blue); typedef void (APIENTRY * PFNGLSECONDARYCOLOR3USVEXTPROC) (const GLushort *v); typedef void (APIENTRY * PFNGLSECONDARYCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); #endif #ifndef GL_EXT_texture_perturb_normal #define GL_EXT_texture_perturb_normal 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glTextureNormalEXT (GLenum); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLTEXTURENORMALEXTPROC) (GLenum mode); #endif #ifndef GL_EXT_multi_draw_arrays #define GL_EXT_multi_draw_arrays 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glMultiDrawArraysEXT (GLenum, GLint *, GLsizei *, GLsizei); GLAPI void APIENTRY glMultiDrawElementsEXT (GLenum, const GLsizei *, GLenum, const GLvoid* *, GLsizei); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLMULTIDRAWARRAYSEXTPROC) (GLenum mode, GLint *first, GLsizei *count, GLsizei primcount); typedef void (APIENTRY * PFNGLMULTIDRAWELEMENTSEXTPROC) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount); #endif #ifndef GL_EXT_fog_coord #define GL_EXT_fog_coord 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glFogCoordfEXT (GLfloat); GLAPI void APIENTRY glFogCoordfvEXT (const GLfloat *); GLAPI void APIENTRY glFogCoorddEXT (GLdouble); GLAPI void APIENTRY glFogCoorddvEXT (const GLdouble *); GLAPI void APIENTRY glFogCoordPointerEXT (GLenum, GLsizei, const GLvoid *); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLFOGCOORDFEXTPROC) (GLfloat coord); typedef void (APIENTRY * PFNGLFOGCOORDFVEXTPROC) (const GLfloat *coord); typedef void (APIENTRY * PFNGLFOGCOORDDEXTPROC) (GLdouble coord); typedef void (APIENTRY * PFNGLFOGCOORDDVEXTPROC) (const GLdouble *coord); typedef void (APIENTRY * PFNGLFOGCOORDPOINTEREXTPROC) (GLenum type, GLsizei stride, const GLvoid *pointer); #endif #ifndef GL_REND_screen_coordinates #define GL_REND_screen_coordinates 1 #endif #ifndef GL_EXT_coordinate_frame #define GL_EXT_coordinate_frame 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glTangent3bEXT (GLbyte, GLbyte, GLbyte); GLAPI void APIENTRY glTangent3bvEXT (const GLbyte *); GLAPI void APIENTRY glTangent3dEXT (GLdouble, GLdouble, GLdouble); GLAPI void APIENTRY glTangent3dvEXT (const GLdouble *); GLAPI void APIENTRY glTangent3fEXT (GLfloat, GLfloat, GLfloat); GLAPI void APIENTRY glTangent3fvEXT (const GLfloat *); GLAPI void APIENTRY glTangent3iEXT (GLint, GLint, GLint); GLAPI void APIENTRY glTangent3ivEXT (const GLint *); GLAPI void APIENTRY glTangent3sEXT (GLshort, GLshort, GLshort); GLAPI void APIENTRY glTangent3svEXT (const GLshort *); GLAPI void APIENTRY glBinormal3bEXT (GLbyte, GLbyte, GLbyte); GLAPI void APIENTRY glBinormal3bvEXT (const GLbyte *); GLAPI void APIENTRY glBinormal3dEXT (GLdouble, GLdouble, GLdouble); GLAPI void APIENTRY glBinormal3dvEXT (const GLdouble *); GLAPI void APIENTRY glBinormal3fEXT (GLfloat, GLfloat, GLfloat); GLAPI void APIENTRY glBinormal3fvEXT (const GLfloat *); GLAPI void APIENTRY glBinormal3iEXT (GLint, GLint, GLint); GLAPI void APIENTRY glBinormal3ivEXT (const GLint *); GLAPI void APIENTRY glBinormal3sEXT (GLshort, GLshort, GLshort); GLAPI void APIENTRY glBinormal3svEXT (const GLshort *); GLAPI void APIENTRY glTangentPointerEXT (GLenum, GLsizei, const GLvoid *); GLAPI void APIENTRY glBinormalPointerEXT (GLenum, GLsizei, const GLvoid *); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLTANGENT3BEXTPROC) (GLbyte tx, GLbyte ty, GLbyte tz); typedef void (APIENTRY * PFNGLTANGENT3BVEXTPROC) (const GLbyte *v); typedef void (APIENTRY * PFNGLTANGENT3DEXTPROC) (GLdouble tx, GLdouble ty, GLdouble tz); typedef void (APIENTRY * PFNGLTANGENT3DVEXTPROC) (const GLdouble *v); typedef void (APIENTRY * PFNGLTANGENT3FEXTPROC) (GLfloat tx, GLfloat ty, GLfloat tz); typedef void (APIENTRY * PFNGLTANGENT3FVEXTPROC) (const GLfloat *v); typedef void (APIENTRY * PFNGLTANGENT3IEXTPROC) (GLint tx, GLint ty, GLint tz); typedef void (APIENTRY * PFNGLTANGENT3IVEXTPROC) (const GLint *v); typedef void (APIENTRY * PFNGLTANGENT3SEXTPROC) (GLshort tx, GLshort ty, GLshort tz); typedef void (APIENTRY * PFNGLTANGENT3SVEXTPROC) (const GLshort *v); typedef void (APIENTRY * PFNGLBINORMAL3BEXTPROC) (GLbyte bx, GLbyte by, GLbyte bz); typedef void (APIENTRY * PFNGLBINORMAL3BVEXTPROC) (const GLbyte *v); typedef void (APIENTRY * PFNGLBINORMAL3DEXTPROC) (GLdouble bx, GLdouble by, GLdouble bz); typedef void (APIENTRY * PFNGLBINORMAL3DVEXTPROC) (const GLdouble *v); typedef void (APIENTRY * PFNGLBINORMAL3FEXTPROC) (GLfloat bx, GLfloat by, GLfloat bz); typedef void (APIENTRY * PFNGLBINORMAL3FVEXTPROC) (const GLfloat *v); typedef void (APIENTRY * PFNGLBINORMAL3IEXTPROC) (GLint bx, GLint by, GLint bz); typedef void (APIENTRY * PFNGLBINORMAL3IVEXTPROC) (const GLint *v); typedef void (APIENTRY * PFNGLBINORMAL3SEXTPROC) (GLshort bx, GLshort by, GLshort bz); typedef void (APIENTRY * PFNGLBINORMAL3SVEXTPROC) (const GLshort *v); typedef void (APIENTRY * PFNGLTANGENTPOINTEREXTPROC) (GLenum type, GLsizei stride, const GLvoid *pointer); typedef void (APIENTRY * PFNGLBINORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, const GLvoid *pointer); #endif #ifndef GL_EXT_texture_env_combine #define GL_EXT_texture_env_combine 1 #endif #ifndef GL_APPLE_specular_vector #define GL_APPLE_specular_vector 1 #endif #ifndef GL_APPLE_transform_hint #define GL_APPLE_transform_hint 1 #endif #ifndef GL_SGIX_fog_scale #define GL_SGIX_fog_scale 1 #endif #ifndef GL_SUNX_constant_data #define GL_SUNX_constant_data 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glFinishTextureSUNX (void); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLFINISHTEXTURESUNXPROC) (void); #endif #ifndef GL_SUN_global_alpha #define GL_SUN_global_alpha 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glGlobalAlphaFactorbSUN (GLbyte); GLAPI void APIENTRY glGlobalAlphaFactorsSUN (GLshort); GLAPI void APIENTRY glGlobalAlphaFactoriSUN (GLint); GLAPI void APIENTRY glGlobalAlphaFactorfSUN (GLfloat); GLAPI void APIENTRY glGlobalAlphaFactordSUN (GLdouble); GLAPI void APIENTRY glGlobalAlphaFactorubSUN (GLubyte); GLAPI void APIENTRY glGlobalAlphaFactorusSUN (GLushort); GLAPI void APIENTRY glGlobalAlphaFactoruiSUN (GLuint); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLGLOBALALPHAFACTORBSUNPROC) (GLbyte factor); typedef void (APIENTRY * PFNGLGLOBALALPHAFACTORSSUNPROC) (GLshort factor); typedef void (APIENTRY * PFNGLGLOBALALPHAFACTORISUNPROC) (GLint factor); typedef void (APIENTRY * PFNGLGLOBALALPHAFACTORFSUNPROC) (GLfloat factor); typedef void (APIENTRY * PFNGLGLOBALALPHAFACTORDSUNPROC) (GLdouble factor); typedef void (APIENTRY * PFNGLGLOBALALPHAFACTORUBSUNPROC) (GLubyte factor); typedef void (APIENTRY * PFNGLGLOBALALPHAFACTORUSSUNPROC) (GLushort factor); typedef void (APIENTRY * PFNGLGLOBALALPHAFACTORUISUNPROC) (GLuint factor); #endif #ifndef GL_SUN_triangle_list #define GL_SUN_triangle_list 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glReplacementCodeuiSUN (GLuint); GLAPI void APIENTRY glReplacementCodeusSUN (GLushort); GLAPI void APIENTRY glReplacementCodeubSUN (GLubyte); GLAPI void APIENTRY glReplacementCodeuivSUN (const GLuint *); GLAPI void APIENTRY glReplacementCodeusvSUN (const GLushort *); GLAPI void APIENTRY glReplacementCodeubvSUN (const GLubyte *); GLAPI void APIENTRY glReplacementCodePointerSUN (GLenum, GLsizei, const GLvoid* *); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLREPLACEMENTCODEUISUNPROC) (GLuint code); typedef void (APIENTRY * PFNGLREPLACEMENTCODEUSSUNPROC) (GLushort code); typedef void (APIENTRY * PFNGLREPLACEMENTCODEUBSUNPROC) (GLubyte code); typedef void (APIENTRY * PFNGLREPLACEMENTCODEUIVSUNPROC) (const GLuint *code); typedef void (APIENTRY * PFNGLREPLACEMENTCODEUSVSUNPROC) (const GLushort *code); typedef void (APIENTRY * PFNGLREPLACEMENTCODEUBVSUNPROC) (const GLubyte *code); typedef void (APIENTRY * PFNGLREPLACEMENTCODEPOINTERSUNPROC) (GLenum type, GLsizei stride, const GLvoid* *pointer); #endif #ifndef GL_SUN_vertex #define GL_SUN_vertex 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glColor4ubVertex2fSUN (GLubyte, GLubyte, GLubyte, GLubyte, GLfloat, GLfloat); GLAPI void APIENTRY glColor4ubVertex2fvSUN (const GLubyte *, const GLfloat *); GLAPI void APIENTRY glColor4ubVertex3fSUN (GLubyte, GLubyte, GLubyte, GLubyte, GLfloat, GLfloat, GLfloat); GLAPI void APIENTRY glColor4ubVertex3fvSUN (const GLubyte *, const GLfloat *); GLAPI void APIENTRY glColor3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); GLAPI void APIENTRY glColor3fVertex3fvSUN (const GLfloat *, const GLfloat *); GLAPI void APIENTRY glNormal3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); GLAPI void APIENTRY glNormal3fVertex3fvSUN (const GLfloat *, const GLfloat *); GLAPI void APIENTRY glColor4fNormal3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); GLAPI void APIENTRY glColor4fNormal3fVertex3fvSUN (const GLfloat *, const GLfloat *, const GLfloat *); GLAPI void APIENTRY glTexCoord2fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); GLAPI void APIENTRY glTexCoord2fVertex3fvSUN (const GLfloat *, const GLfloat *); GLAPI void APIENTRY glTexCoord4fVertex4fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); GLAPI void APIENTRY glTexCoord4fVertex4fvSUN (const GLfloat *, const GLfloat *); GLAPI void APIENTRY glTexCoord2fColor4ubVertex3fSUN (GLfloat, GLfloat, GLubyte, GLubyte, GLubyte, GLubyte, GLfloat, GLfloat, GLfloat); GLAPI void APIENTRY glTexCoord2fColor4ubVertex3fvSUN (const GLfloat *, const GLubyte *, const GLfloat *); GLAPI void APIENTRY glTexCoord2fColor3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); GLAPI void APIENTRY glTexCoord2fColor3fVertex3fvSUN (const GLfloat *, const GLfloat *, const GLfloat *); GLAPI void APIENTRY glTexCoord2fNormal3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); GLAPI void APIENTRY glTexCoord2fNormal3fVertex3fvSUN (const GLfloat *, const GLfloat *, const GLfloat *); GLAPI void APIENTRY glTexCoord2fColor4fNormal3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); GLAPI void APIENTRY glTexCoord2fColor4fNormal3fVertex3fvSUN (const GLfloat *, const GLfloat *, const GLfloat *, const GLfloat *); GLAPI void APIENTRY glTexCoord4fColor4fNormal3fVertex4fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); GLAPI void APIENTRY glTexCoord4fColor4fNormal3fVertex4fvSUN (const GLfloat *, const GLfloat *, const GLfloat *, const GLfloat *); GLAPI void APIENTRY glReplacementCodeuiVertex3fSUN (GLenum, GLfloat, GLfloat, GLfloat); GLAPI void APIENTRY glReplacementCodeuiVertex3fvSUN (const GLenum *, const GLfloat *); GLAPI void APIENTRY glReplacementCodeuiColor4ubVertex3fSUN (GLenum, GLubyte, GLubyte, GLubyte, GLubyte, GLfloat, GLfloat, GLfloat); GLAPI void APIENTRY glReplacementCodeuiColor4ubVertex3fvSUN (const GLenum *, const GLubyte *, const GLfloat *); GLAPI void APIENTRY glReplacementCodeuiColor3fVertex3fSUN (GLenum, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); GLAPI void APIENTRY glReplacementCodeuiColor3fVertex3fvSUN (const GLenum *, const GLfloat *, const GLfloat *); GLAPI void APIENTRY glReplacementCodeuiNormal3fVertex3fSUN (GLenum, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); GLAPI void APIENTRY glReplacementCodeuiNormal3fVertex3fvSUN (const GLenum *, const GLfloat *, const GLfloat *); GLAPI void APIENTRY glReplacementCodeuiColor4fNormal3fVertex3fSUN (GLenum, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); GLAPI void APIENTRY glReplacementCodeuiColor4fNormal3fVertex3fvSUN (const GLenum *, const GLfloat *, const GLfloat *, const GLfloat *); GLAPI void APIENTRY glReplacementCodeuiTexCoord2fVertex3fSUN (GLenum, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); GLAPI void APIENTRY glReplacementCodeuiTexCoord2fVertex3fvSUN (const GLenum *, const GLfloat *, const GLfloat *); GLAPI void APIENTRY glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN (GLenum, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); GLAPI void APIENTRY glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN (const GLenum *, const GLfloat *, const GLfloat *, const GLfloat *); GLAPI void APIENTRY glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN (GLenum, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); GLAPI void APIENTRY glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN (const GLenum *, const GLfloat *, const GLfloat *, const GLfloat *, const GLfloat *); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLCOLOR4UBVERTEX2FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y); typedef void (APIENTRY * PFNGLCOLOR4UBVERTEX2FVSUNPROC) (const GLubyte *c, const GLfloat *v); typedef void (APIENTRY * PFNGLCOLOR4UBVERTEX3FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRY * PFNGLCOLOR4UBVERTEX3FVSUNPROC) (const GLubyte *c, const GLfloat *v); typedef void (APIENTRY * PFNGLCOLOR3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRY * PFNGLCOLOR3FVERTEX3FVSUNPROC) (const GLfloat *c, const GLfloat *v); typedef void (APIENTRY * PFNGLNORMAL3FVERTEX3FSUNPROC) (GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRY * PFNGLNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *n, const GLfloat *v); typedef void (APIENTRY * PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRY * PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *c, const GLfloat *n, const GLfloat *v); typedef void (APIENTRY * PFNGLTEXCOORD2FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRY * PFNGLTEXCOORD2FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *v); typedef void (APIENTRY * PFNGLTEXCOORD4FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w); typedef void (APIENTRY * PFNGLTEXCOORD4FVERTEX4FVSUNPROC) (const GLfloat *tc, const GLfloat *v); typedef void (APIENTRY * PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRY * PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC) (const GLfloat *tc, const GLubyte *c, const GLfloat *v); typedef void (APIENTRY * PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRY * PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *v); typedef void (APIENTRY * PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRY * PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *n, const GLfloat *v); typedef void (APIENTRY * PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRY * PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); typedef void (APIENTRY * PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z, GLfloat w); typedef void (APIENTRY * PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); typedef void (APIENTRY * PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC) (GLenum rc, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRY * PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC) (const GLenum *rc, const GLfloat *v); typedef void (APIENTRY * PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC) (GLenum rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRY * PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC) (const GLenum *rc, const GLubyte *c, const GLfloat *v); typedef void (APIENTRY * PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC) (GLenum rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRY * PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC) (const GLenum *rc, const GLfloat *c, const GLfloat *v); typedef void (APIENTRY * PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC) (GLenum rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRY * PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC) (const GLenum *rc, const GLfloat *n, const GLfloat *v); typedef void (APIENTRY * PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLenum rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRY * PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLenum *rc, const GLfloat *c, const GLfloat *n, const GLfloat *v); typedef void (APIENTRY * PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC) (GLenum rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRY * PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC) (const GLenum *rc, const GLfloat *tc, const GLfloat *v); typedef void (APIENTRY * PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLenum rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRY * PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLenum *rc, const GLfloat *tc, const GLfloat *n, const GLfloat *v); typedef void (APIENTRY * PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLenum rc, GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRY * PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLenum *rc, const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); #endif #ifndef GL_EXT_blend_func_separate #define GL_EXT_blend_func_separate 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBlendFuncSeparateEXT (GLenum, GLenum, GLenum, GLenum); GLAPI void APIENTRY glBlendFuncSeparateINGR (GLenum, GLenum, GLenum, GLenum); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLBLENDFUNCSEPARATEEXTPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); typedef void (APIENTRY * PFNGLBLENDFUNCSEPARATEINGRPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); #endif #ifndef GL_INGR_color_clamp #define GL_INGR_color_clamp 1 #endif #ifndef GL_INGR_interlace_read #define GL_INGR_interlace_read 1 #endif #ifndef GL_EXT_stencil_wrap #define GL_EXT_stencil_wrap 1 #endif #ifndef GL_EXT_422_pixels #define GL_EXT_422_pixels 1 #endif #ifndef GL_NV_texgen_reflection #define GL_NV_texgen_reflection 1 #endif #ifndef GL_SUN_convolution_border_modes #define GL_SUN_convolution_border_modes 1 #endif #ifndef GL_EXT_texture_env_add #define GL_EXT_texture_env_add 1 #endif #ifndef GL_EXT_texture_lod_bias #define GL_EXT_texture_lod_bias 1 #endif #ifndef GL_EXT_texture_filter_anisotropic #define GL_EXT_texture_filter_anisotropic 1 #endif #ifndef GL_EXT_vertex_weighting #define GL_EXT_vertex_weighting 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glVertexWeightfEXT (GLfloat); GLAPI void APIENTRY glVertexWeightfvEXT (const GLfloat *); GLAPI void APIENTRY glVertexWeightPointerEXT (GLsizei, GLenum, GLsizei, const GLvoid *); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLVERTEXWEIGHTFEXTPROC) (GLfloat weight); typedef void (APIENTRY * PFNGLVERTEXWEIGHTFVEXTPROC) (const GLfloat *weight); typedef void (APIENTRY * PFNGLVERTEXWEIGHTPOINTEREXTPROC) (GLsizei size, GLenum type, GLsizei stride, const GLvoid *pointer); #endif #ifndef GL_NV_light_max_exponent #define GL_NV_light_max_exponent 1 #endif #ifndef GL_NV_vertex_array_range #define GL_NV_vertex_array_range 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glFlushVertexArrayRangeNV (void); GLAPI void APIENTRY glVertexArrayRangeNV (GLsizei, const GLvoid *); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLFLUSHVERTEXARRAYRANGENVPROC) (void); typedef void (APIENTRY * PFNGLVERTEXARRAYRANGENVPROC) (GLsizei length, const GLvoid *pointer); #endif #ifndef GL_NV_register_combiners #define GL_NV_register_combiners 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glCombinerParameterfvNV (GLenum, const GLfloat *); GLAPI void APIENTRY glCombinerParameterfNV (GLenum, GLfloat); GLAPI void APIENTRY glCombinerParameterivNV (GLenum, const GLint *); GLAPI void APIENTRY glCombinerParameteriNV (GLenum, GLint); GLAPI void APIENTRY glCombinerInputNV (GLenum, GLenum, GLenum, GLenum, GLenum, GLenum); GLAPI void APIENTRY glCombinerOutputNV (GLenum, GLenum, GLenum, GLenum, GLenum, GLenum, GLenum, GLboolean, GLboolean, GLboolean); GLAPI void APIENTRY glFinalCombinerInputNV (GLenum, GLenum, GLenum, GLenum); GLAPI void APIENTRY glGetCombinerInputParameterfvNV (GLenum, GLenum, GLenum, GLenum, GLfloat *); GLAPI void APIENTRY glGetCombinerInputParameterivNV (GLenum, GLenum, GLenum, GLenum, GLint *); GLAPI void APIENTRY glGetCombinerOutputParameterfvNV (GLenum, GLenum, GLenum, GLfloat *); GLAPI void APIENTRY glGetCombinerOutputParameterivNV (GLenum, GLenum, GLenum, GLint *); GLAPI void APIENTRY glGetFinalCombinerInputParameterfvNV (GLenum, GLenum, GLfloat *); GLAPI void APIENTRY glGetFinalCombinerInputParameterivNV (GLenum, GLenum, GLint *); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLCOMBINERPARAMETERFVNVPROC) (GLenum pname, const GLfloat *params); typedef void (APIENTRY * PFNGLCOMBINERPARAMETERFNVPROC) (GLenum pname, GLfloat param); typedef void (APIENTRY * PFNGLCOMBINERPARAMETERIVNVPROC) (GLenum pname, const GLint *params); typedef void (APIENTRY * PFNGLCOMBINERPARAMETERINVPROC) (GLenum pname, GLint param); typedef void (APIENTRY * PFNGLCOMBINERINPUTNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); typedef void (APIENTRY * PFNGLCOMBINEROUTPUTNVPROC) (GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum); typedef void (APIENTRY * PFNGLFINALCOMBINERINPUTNVPROC) (GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); typedef void (APIENTRY * PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat *params); typedef void (APIENTRY * PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint *params); typedef void (APIENTRY * PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLfloat *params); typedef void (APIENTRY * PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLint *params); typedef void (APIENTRY * PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC) (GLenum variable, GLenum pname, GLfloat *params); typedef void (APIENTRY * PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC) (GLenum variable, GLenum pname, GLint *params); #endif #ifndef GL_NV_fog_distance #define GL_NV_fog_distance 1 #endif #ifndef GL_NV_texgen_emboss #define GL_NV_texgen_emboss 1 #endif #ifndef GL_NV_blend_square #define GL_NV_blend_square 1 #endif #ifndef GL_NV_texture_env_combine4 #define GL_NV_texture_env_combine4 1 #endif #ifndef GL_MESA_resize_buffers #define GL_MESA_resize_buffers 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glResizeBuffersMESA (void); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLRESIZEBUFFERSMESAPROC) (void); #endif #ifndef GL_MESA_window_pos #define GL_MESA_window_pos 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glWindowPos2dMESA (GLdouble, GLdouble); GLAPI void APIENTRY glWindowPos2dvMESA (const GLdouble *); GLAPI void APIENTRY glWindowPos2fMESA (GLfloat, GLfloat); GLAPI void APIENTRY glWindowPos2fvMESA (const GLfloat *); GLAPI void APIENTRY glWindowPos2iMESA (GLint, GLint); GLAPI void APIENTRY glWindowPos2ivMESA (const GLint *); GLAPI void APIENTRY glWindowPos2sMESA (GLshort, GLshort); GLAPI void APIENTRY glWindowPos2svMESA (const GLshort *); GLAPI void APIENTRY glWindowPos3dMESA (GLdouble, GLdouble, GLdouble); GLAPI void APIENTRY glWindowPos3dvMESA (const GLdouble *); GLAPI void APIENTRY glWindowPos3fMESA (GLfloat, GLfloat, GLfloat); GLAPI void APIENTRY glWindowPos3fvMESA (const GLfloat *); GLAPI void APIENTRY glWindowPos3iMESA (GLint, GLint, GLint); GLAPI void APIENTRY glWindowPos3ivMESA (const GLint *); GLAPI void APIENTRY glWindowPos3sMESA (GLshort, GLshort, GLshort); GLAPI void APIENTRY glWindowPos3svMESA (const GLshort *); GLAPI void APIENTRY glWindowPos4dMESA (GLdouble, GLdouble, GLdouble, GLdouble); GLAPI void APIENTRY glWindowPos4dvMESA (const GLdouble *); GLAPI void APIENTRY glWindowPos4fMESA (GLfloat, GLfloat, GLfloat, GLfloat); GLAPI void APIENTRY glWindowPos4fvMESA (const GLfloat *); GLAPI void APIENTRY glWindowPos4iMESA (GLint, GLint, GLint, GLint); GLAPI void APIENTRY glWindowPos4ivMESA (const GLint *); GLAPI void APIENTRY glWindowPos4sMESA (GLshort, GLshort, GLshort, GLshort); GLAPI void APIENTRY glWindowPos4svMESA (const GLshort *); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLWINDOWPOS2DMESAPROC) (GLdouble x, GLdouble y); typedef void (APIENTRY * PFNGLWINDOWPOS2DVMESAPROC) (const GLdouble *v); typedef void (APIENTRY * PFNGLWINDOWPOS2FMESAPROC) (GLfloat x, GLfloat y); typedef void (APIENTRY * PFNGLWINDOWPOS2FVMESAPROC) (const GLfloat *v); typedef void (APIENTRY * PFNGLWINDOWPOS2IMESAPROC) (GLint x, GLint y); typedef void (APIENTRY * PFNGLWINDOWPOS2IVMESAPROC) (const GLint *v); typedef void (APIENTRY * PFNGLWINDOWPOS2SMESAPROC) (GLshort x, GLshort y); typedef void (APIENTRY * PFNGLWINDOWPOS2SVMESAPROC) (const GLshort *v); typedef void (APIENTRY * PFNGLWINDOWPOS3DMESAPROC) (GLdouble x, GLdouble y, GLdouble z); typedef void (APIENTRY * PFNGLWINDOWPOS3DVMESAPROC) (const GLdouble *v); typedef void (APIENTRY * PFNGLWINDOWPOS3FMESAPROC) (GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRY * PFNGLWINDOWPOS3FVMESAPROC) (const GLfloat *v); typedef void (APIENTRY * PFNGLWINDOWPOS3IMESAPROC) (GLint x, GLint y, GLint z); typedef void (APIENTRY * PFNGLWINDOWPOS3IVMESAPROC) (const GLint *v); typedef void (APIENTRY * PFNGLWINDOWPOS3SMESAPROC) (GLshort x, GLshort y, GLshort z); typedef void (APIENTRY * PFNGLWINDOWPOS3SVMESAPROC) (const GLshort *v); typedef void (APIENTRY * PFNGLWINDOWPOS4DMESAPROC) (GLdouble x, GLdouble y, GLdouble z, GLdouble w); typedef void (APIENTRY * PFNGLWINDOWPOS4DVMESAPROC) (const GLdouble *v); typedef void (APIENTRY * PFNGLWINDOWPOS4FMESAPROC) (GLfloat x, GLfloat y, GLfloat z, GLfloat w); typedef void (APIENTRY * PFNGLWINDOWPOS4FVMESAPROC) (const GLfloat *v); typedef void (APIENTRY * PFNGLWINDOWPOS4IMESAPROC) (GLint x, GLint y, GLint z, GLint w); typedef void (APIENTRY * PFNGLWINDOWPOS4IVMESAPROC) (const GLint *v); typedef void (APIENTRY * PFNGLWINDOWPOS4SMESAPROC) (GLshort x, GLshort y, GLshort z, GLshort w); typedef void (APIENTRY * PFNGLWINDOWPOS4SVMESAPROC) (const GLshort *v); #endif #ifndef GL_IBM_cull_vertex #define GL_IBM_cull_vertex 1 #endif #ifndef GL_IBM_multimode_draw_arrays #define GL_IBM_multimode_draw_arrays 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glMultiModeDrawArraysIBM (GLenum, const GLint *, const GLsizei *, GLsizei, GLint); GLAPI void APIENTRY glMultiModeDrawElementsIBM (const GLenum *, const GLsizei *, GLenum, const GLvoid* *, GLsizei, GLint); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLMULTIMODEDRAWARRAYSIBMPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount, GLint modestride); typedef void (APIENTRY * PFNGLMULTIMODEDRAWELEMENTSIBMPROC) (const GLenum *mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount, GLint modestride); #endif #ifndef GL_IBM_vertex_array_lists #define GL_IBM_vertex_array_lists 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glColorPointerListIBM (GLint, GLenum, GLint, const GLvoid* *, GLint); GLAPI void APIENTRY glSecondaryColorPointerListIBM (GLint, GLenum, GLint, const GLvoid* *, GLint); GLAPI void APIENTRY glEdgeFlagPointerListIBM (GLint, const GLboolean* *, GLint); GLAPI void APIENTRY glFogCoordPointerListIBM (GLenum, GLint, const GLvoid* *, GLint); GLAPI void APIENTRY glIndexPointerListIBM (GLenum, GLint, const GLvoid* *, GLint); GLAPI void APIENTRY glNormalPointerListIBM (GLenum, GLint, const GLvoid* *, GLint); GLAPI void APIENTRY glTexCoordPointerListIBM (GLint, GLenum, GLint, const GLvoid* *, GLint); GLAPI void APIENTRY glVertexPointerListIBM (GLint, GLenum, GLint, const GLvoid* *, GLint); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); typedef void (APIENTRY * PFNGLSECONDARYCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); typedef void (APIENTRY * PFNGLEDGEFLAGPOINTERLISTIBMPROC) (GLint stride, const GLboolean* *pointer, GLint ptrstride); typedef void (APIENTRY * PFNGLFOGCOORDPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); typedef void (APIENTRY * PFNGLINDEXPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); typedef void (APIENTRY * PFNGLNORMALPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); typedef void (APIENTRY * PFNGLTEXCOORDPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); typedef void (APIENTRY * PFNGLVERTEXPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); #endif #ifndef GL_SGIX_subsample #define GL_SGIX_subsample 1 #endif #ifndef GL_SGIX_ycrcba #define GL_SGIX_ycrcba 1 #endif #ifndef GL_SGIX_ycrcb_subsample #define GL_SGIX_ycrcb_subsample 1 #endif #ifndef GL_SGIX_depth_pass_instrument #define GL_SGIX_depth_pass_instrument 1 #endif #ifndef GL_3DFX_texture_compression_FXT1 #define GL_3DFX_texture_compression_FXT1 1 #endif #ifndef GL_3DFX_multisample #define GL_3DFX_multisample 1 #endif #ifndef GL_3DFX_tbuffer #define GL_3DFX_tbuffer 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glTbufferMask3DFX (GLuint); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLTBUFFERMASK3DFXPROC) (GLuint mask); #endif #ifndef GL_EXT_multisample #define GL_EXT_multisample 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glSampleMaskEXT (GLclampf, GLboolean); GLAPI void APIENTRY glSamplePatternEXT (GLenum); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLSAMPLEMASKEXTPROC) (GLclampf value, GLboolean invert); typedef void (APIENTRY * PFNGLSAMPLEPATTERNEXTPROC) (GLenum pattern); #endif #ifndef GL_SGIX_vertex_preclip #define GL_SGIX_vertex_preclip 1 #endif #ifndef GL_SGIX_convolution_accuracy #define GL_SGIX_convolution_accuracy 1 #endif #ifndef GL_SGIX_resample #define GL_SGIX_resample 1 #endif #ifndef GL_SGIS_point_line_texgen #define GL_SGIS_point_line_texgen 1 #endif #ifndef GL_SGIS_texture_color_mask #define GL_SGIS_texture_color_mask 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glTextureColorMaskSGIS (GLboolean, GLboolean, GLboolean, GLboolean); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLTEXTURECOLORMASKSGISPROC) (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); #endif #ifndef GL_SGIX_igloo_interface #define GL_SGIX_igloo_interface 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glIglooInterfaceSGIX (GLenum, const GLvoid *); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLIGLOOINTERFACESGIXPROC) (GLenum pname, const GLvoid *params); #endif #ifndef GL_NV_fence #define GL_NV_fence 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDeleteFencesNV (GLsizei, const GLuint *); GLAPI void APIENTRY glGenFencesNV (GLsizei, GLuint *); GLAPI GLboolean APIENTRY glIsFenceNV (GLuint); GLAPI GLboolean APIENTRY glTestFenceNV (GLuint); GLAPI void APIENTRY glGetFenceivNV (GLuint, GLenum, GLint *); GLAPI void APIENTRY glFinishFenceNV (GLuint); GLAPI void APIENTRY glSetFenceNV (GLuint, GLenum); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLDELETEFENCESNVPROC) (GLsizei n, const GLuint *fences); typedef void (APIENTRY * PFNGLGENFENCESNVPROC) (GLsizei n, GLuint *fences); typedef GLboolean (APIENTRY * PFNGLISFENCENVPROC) (GLuint fence); typedef GLboolean (APIENTRY * PFNGLTESTFENCENVPROC) (GLuint fence); typedef void (APIENTRY * PFNGLGETFENCEIVNVPROC) (GLuint fence, GLenum pname, GLint *params); typedef void (APIENTRY * PFNGLFINISHFENCENVPROC) (GLuint fence); typedef void (APIENTRY * PFNGLSETFENCENVPROC) (GLuint fence, GLenum condition); #endif #ifndef GL_NV_evaluators #define GL_NV_evaluators 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glMapControlPointsNV (GLenum, GLuint, GLenum, GLsizei, GLsizei, GLint, GLint, GLboolean, const GLvoid *); GLAPI void APIENTRY glMapParameterivNV (GLenum, GLenum, const GLint *); GLAPI void APIENTRY glMapParameterfvNV (GLenum, GLenum, const GLfloat *); GLAPI void APIENTRY glGetMapControlPointsNV (GLenum, GLuint, GLenum, GLsizei, GLsizei, GLboolean, GLvoid *); GLAPI void APIENTRY glGetMapParameterivNV (GLenum, GLenum, GLint *); GLAPI void APIENTRY glGetMapParameterfvNV (GLenum, GLenum, GLfloat *); GLAPI void APIENTRY glGetMapAttribParameterivNV (GLenum, GLuint, GLenum, GLint *); GLAPI void APIENTRY glGetMapAttribParameterfvNV (GLenum, GLuint, GLenum, GLfloat *); GLAPI void APIENTRY glEvalMapsNV (GLenum, GLenum); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const GLvoid *points); typedef void (APIENTRY * PFNGLMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, const GLint *params); typedef void (APIENTRY * PFNGLMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, const GLfloat *params); typedef void (APIENTRY * PFNGLGETMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, GLvoid *points); typedef void (APIENTRY * PFNGLGETMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, GLint *params); typedef void (APIENTRY * PFNGLGETMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, GLfloat *params); typedef void (APIENTRY * PFNGLGETMAPATTRIBPARAMETERIVNVPROC) (GLenum target, GLuint index, GLenum pname, GLint *params); typedef void (APIENTRY * PFNGLGETMAPATTRIBPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat *params); typedef void (APIENTRY * PFNGLEVALMAPSNVPROC) (GLenum target, GLenum mode); #endif #ifndef GL_NV_packed_depth_stencil #define GL_NV_packed_depth_stencil 1 #endif #ifndef GL_NV_register_combiners2 #define GL_NV_register_combiners2 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glCombinerStageParameterfvNV (GLenum, GLenum, const GLfloat *); GLAPI void APIENTRY glGetCombinerStageParameterfvNV (GLenum, GLenum, GLfloat *); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, const GLfloat *params); typedef void (APIENTRY * PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, GLfloat *params); #endif #ifndef GL_NV_texture_compression_vtc #define GL_NV_texture_compression_vtc 1 #endif #ifndef GL_NV_texture_rectangle #define GL_NV_texture_rectangle 1 #endif #ifndef GL_NV_texture_shader #define GL_NV_texture_shader 1 #endif #ifndef GL_NV_texture_shader2 #define GL_NV_texture_shader2 1 #endif #ifndef GL_NV_vertex_array_range2 #define GL_NV_vertex_array_range2 1 #endif #ifndef GL_NV_vertex_program #define GL_NV_vertex_program 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI GLboolean APIENTRY glAreProgramsResidentNV (GLsizei, const GLuint *, GLboolean *); GLAPI void APIENTRY glBindProgramNV (GLenum, GLuint); GLAPI void APIENTRY glDeleteProgramsNV (GLsizei, const GLuint *); GLAPI void APIENTRY glExecuteProgramNV (GLenum, GLuint, const GLfloat *); GLAPI void APIENTRY glGenProgramsNV (GLsizei, GLuint *); GLAPI void APIENTRY glGetProgramParameterdvNV (GLenum, GLuint, GLenum, GLdouble *); GLAPI void APIENTRY glGetProgramParameterfvNV (GLenum, GLuint, GLenum, GLfloat *); GLAPI void APIENTRY glGetProgramivNV (GLuint, GLenum, GLint *); GLAPI void APIENTRY glGetProgramStringNV (GLuint, GLenum, GLubyte *); GLAPI void APIENTRY glGetTrackMatrixivNV (GLenum, GLuint, GLenum, GLint *); GLAPI void APIENTRY glGetVertexAttribdvNV (GLuint, GLenum, GLdouble *); GLAPI void APIENTRY glGetVertexAttribfvNV (GLuint, GLenum, GLfloat *); GLAPI void APIENTRY glGetVertexAttribivNV (GLuint, GLenum, GLint *); GLAPI void APIENTRY glGetVertexAttribPointervNV (GLuint, GLenum, GLvoid* *); GLAPI GLboolean APIENTRY glIsProgramNV (GLuint); GLAPI void APIENTRY glLoadProgramNV (GLenum, GLuint, GLsizei, const GLubyte *); GLAPI void APIENTRY glProgramParameter4dNV (GLenum, GLuint, GLdouble, GLdouble, GLdouble, GLdouble); GLAPI void APIENTRY glProgramParameter4dvNV (GLenum, GLuint, const GLdouble *); GLAPI void APIENTRY glProgramParameter4fNV (GLenum, GLuint, GLfloat, GLfloat, GLfloat, GLfloat); GLAPI void APIENTRY glProgramParameter4fvNV (GLenum, GLuint, const GLfloat *); GLAPI void APIENTRY glProgramParameters4dvNV (GLenum, GLuint, GLuint, const GLdouble *); GLAPI void APIENTRY glProgramParameters4fvNV (GLenum, GLuint, GLuint, const GLfloat *); GLAPI void APIENTRY glRequestResidentProgramsNV (GLsizei, const GLuint *); GLAPI void APIENTRY glTrackMatrixNV (GLenum, GLuint, GLenum, GLenum); GLAPI void APIENTRY glVertexAttribPointerNV (GLuint, GLint, GLenum, GLsizei, const GLvoid *); GLAPI void APIENTRY glVertexAttrib1dNV (GLuint, GLdouble); GLAPI void APIENTRY glVertexAttrib1dvNV (GLuint, const GLdouble *); GLAPI void APIENTRY glVertexAttrib1fNV (GLuint, GLfloat); GLAPI void APIENTRY glVertexAttrib1fvNV (GLuint, const GLfloat *); GLAPI void APIENTRY glVertexAttrib1sNV (GLuint, GLshort); GLAPI void APIENTRY glVertexAttrib1svNV (GLuint, const GLshort *); GLAPI void APIENTRY glVertexAttrib2dNV (GLuint, GLdouble, GLdouble); GLAPI void APIENTRY glVertexAttrib2dvNV (GLuint, const GLdouble *); GLAPI void APIENTRY glVertexAttrib2fNV (GLuint, GLfloat, GLfloat); GLAPI void APIENTRY glVertexAttrib2fvNV (GLuint, const GLfloat *); GLAPI void APIENTRY glVertexAttrib2sNV (GLuint, GLshort, GLshort); GLAPI void APIENTRY glVertexAttrib2svNV (GLuint, const GLshort *); GLAPI void APIENTRY glVertexAttrib3dNV (GLuint, GLdouble, GLdouble, GLdouble); GLAPI void APIENTRY glVertexAttrib3dvNV (GLuint, const GLdouble *); GLAPI void APIENTRY glVertexAttrib3fNV (GLuint, GLfloat, GLfloat, GLfloat); GLAPI void APIENTRY glVertexAttrib3fvNV (GLuint, const GLfloat *); GLAPI void APIENTRY glVertexAttrib3sNV (GLuint, GLshort, GLshort, GLshort); GLAPI void APIENTRY glVertexAttrib3svNV (GLuint, const GLshort *); GLAPI void APIENTRY glVertexAttrib4dNV (GLuint, GLdouble, GLdouble, GLdouble, GLdouble); GLAPI void APIENTRY glVertexAttrib4dvNV (GLuint, const GLdouble *); GLAPI void APIENTRY glVertexAttrib4fNV (GLuint, GLfloat, GLfloat, GLfloat, GLfloat); GLAPI void APIENTRY glVertexAttrib4fvNV (GLuint, const GLfloat *); GLAPI void APIENTRY glVertexAttrib4sNV (GLuint, GLshort, GLshort, GLshort, GLshort); GLAPI void APIENTRY glVertexAttrib4svNV (GLuint, const GLshort *); GLAPI void APIENTRY glVertexAttrib4ubNV (GLuint, GLubyte, GLubyte, GLubyte, GLubyte); GLAPI void APIENTRY glVertexAttrib4ubvNV (GLuint, const GLubyte *); GLAPI void APIENTRY glVertexAttribs1dvNV (GLuint, GLsizei, const GLdouble *); GLAPI void APIENTRY glVertexAttribs1fvNV (GLuint, GLsizei, const GLfloat *); GLAPI void APIENTRY glVertexAttribs1svNV (GLuint, GLsizei, const GLshort *); GLAPI void APIENTRY glVertexAttribs2dvNV (GLuint, GLsizei, const GLdouble *); GLAPI void APIENTRY glVertexAttribs2fvNV (GLuint, GLsizei, const GLfloat *); GLAPI void APIENTRY glVertexAttribs2svNV (GLuint, GLsizei, const GLshort *); GLAPI void APIENTRY glVertexAttribs3dvNV (GLuint, GLsizei, const GLdouble *); GLAPI void APIENTRY glVertexAttribs3fvNV (GLuint, GLsizei, const GLfloat *); GLAPI void APIENTRY glVertexAttribs3svNV (GLuint, GLsizei, const GLshort *); GLAPI void APIENTRY glVertexAttribs4dvNV (GLuint, GLsizei, const GLdouble *); GLAPI void APIENTRY glVertexAttribs4fvNV (GLuint, GLsizei, const GLfloat *); GLAPI void APIENTRY glVertexAttribs4svNV (GLuint, GLsizei, const GLshort *); GLAPI void APIENTRY glVertexAttribs4ubvNV (GLuint, GLsizei, const GLubyte *); #endif /* GL_GLEXT_PROTOTYPES */ typedef GLboolean (APIENTRY * PFNGLAREPROGRAMSRESIDENTNVPROC) (GLsizei n, const GLuint *programs, GLboolean *residences); typedef void (APIENTRY * PFNGLBINDPROGRAMNVPROC) (GLenum target, GLuint id); typedef void (APIENTRY * PFNGLDELETEPROGRAMSNVPROC) (GLsizei n, const GLuint *programs); typedef void (APIENTRY * PFNGLEXECUTEPROGRAMNVPROC) (GLenum target, GLuint id, const GLfloat *params); typedef void (APIENTRY * PFNGLGENPROGRAMSNVPROC) (GLsizei n, GLuint *programs); typedef void (APIENTRY * PFNGLGETPROGRAMPARAMETERDVNVPROC) (GLenum target, GLuint index, GLenum pname, GLdouble *params); typedef void (APIENTRY * PFNGLGETPROGRAMPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat *params); typedef void (APIENTRY * PFNGLGETPROGRAMIVNVPROC) (GLuint id, GLenum pname, GLint *params); typedef void (APIENTRY * PFNGLGETPROGRAMSTRINGNVPROC) (GLuint id, GLenum pname, GLubyte *program); typedef void (APIENTRY * PFNGLGETTRACKMATRIXIVNVPROC) (GLenum target, GLuint address, GLenum pname, GLint *params); typedef void (APIENTRY * PFNGLGETVERTEXATTRIBDVNVPROC) (GLuint index, GLenum pname, GLdouble *params); typedef void (APIENTRY * PFNGLGETVERTEXATTRIBFVNVPROC) (GLuint index, GLenum pname, GLfloat *params); typedef void (APIENTRY * PFNGLGETVERTEXATTRIBIVNVPROC) (GLuint index, GLenum pname, GLint *params); typedef void (APIENTRY * PFNGLGETVERTEXATTRIBPOINTERVNVPROC) (GLuint index, GLenum pname, GLvoid* *pointer); typedef GLboolean (APIENTRY * PFNGLISPROGRAMNVPROC) (GLuint id); typedef void (APIENTRY * PFNGLLOADPROGRAMNVPROC) (GLenum target, GLuint id, GLsizei len, const GLubyte *program); typedef void (APIENTRY * PFNGLPROGRAMPARAMETER4DNVPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); typedef void (APIENTRY * PFNGLPROGRAMPARAMETER4DVNVPROC) (GLenum target, GLuint index, const GLdouble *v); typedef void (APIENTRY * PFNGLPROGRAMPARAMETER4FNVPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); typedef void (APIENTRY * PFNGLPROGRAMPARAMETER4FVNVPROC) (GLenum target, GLuint index, const GLfloat *v); typedef void (APIENTRY * PFNGLPROGRAMPARAMETERS4DVNVPROC) (GLenum target, GLuint index, GLuint count, const GLdouble *v); typedef void (APIENTRY * PFNGLPROGRAMPARAMETERS4FVNVPROC) (GLenum target, GLuint index, GLuint count, const GLfloat *v); typedef void (APIENTRY * PFNGLREQUESTRESIDENTPROGRAMSNVPROC) (GLsizei n, const GLuint *programs); typedef void (APIENTRY * PFNGLTRACKMATRIXNVPROC) (GLenum target, GLuint address, GLenum matrix, GLenum transform); typedef void (APIENTRY * PFNGLVERTEXATTRIBPOINTERNVPROC) (GLuint index, GLint fsize, GLenum type, GLsizei stride, const GLvoid *pointer); typedef void (APIENTRY * PFNGLVERTEXATTRIB1DNVPROC) (GLuint index, GLdouble x); typedef void (APIENTRY * PFNGLVERTEXATTRIB1DVNVPROC) (GLuint index, const GLdouble *v); typedef void (APIENTRY * PFNGLVERTEXATTRIB1FNVPROC) (GLuint index, GLfloat x); typedef void (APIENTRY * PFNGLVERTEXATTRIB1FVNVPROC) (GLuint index, const GLfloat *v); typedef void (APIENTRY * PFNGLVERTEXATTRIB1SNVPROC) (GLuint index, GLshort x); typedef void (APIENTRY * PFNGLVERTEXATTRIB1SVNVPROC) (GLuint index, const GLshort *v); typedef void (APIENTRY * PFNGLVERTEXATTRIB2DNVPROC) (GLuint index, GLdouble x, GLdouble y); typedef void (APIENTRY * PFNGLVERTEXATTRIB2DVNVPROC) (GLuint index, const GLdouble *v); typedef void (APIENTRY * PFNGLVERTEXATTRIB2FNVPROC) (GLuint index, GLfloat x, GLfloat y); typedef void (APIENTRY * PFNGLVERTEXATTRIB2FVNVPROC) (GLuint index, const GLfloat *v); typedef void (APIENTRY * PFNGLVERTEXATTRIB2SNVPROC) (GLuint index, GLshort x, GLshort y); typedef void (APIENTRY * PFNGLVERTEXATTRIB2SVNVPROC) (GLuint index, const GLshort *v); typedef void (APIENTRY * PFNGLVERTEXATTRIB3DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); typedef void (APIENTRY * PFNGLVERTEXATTRIB3DVNVPROC) (GLuint index, const GLdouble *v); typedef void (APIENTRY * PFNGLVERTEXATTRIB3FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRY * PFNGLVERTEXATTRIB3FVNVPROC) (GLuint index, const GLfloat *v); typedef void (APIENTRY * PFNGLVERTEXATTRIB3SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z); typedef void (APIENTRY * PFNGLVERTEXATTRIB3SVNVPROC) (GLuint index, const GLshort *v); typedef void (APIENTRY * PFNGLVERTEXATTRIB4DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); typedef void (APIENTRY * PFNGLVERTEXATTRIB4DVNVPROC) (GLuint index, const GLdouble *v); typedef void (APIENTRY * PFNGLVERTEXATTRIB4FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); typedef void (APIENTRY * PFNGLVERTEXATTRIB4FVNVPROC) (GLuint index, const GLfloat *v); typedef void (APIENTRY * PFNGLVERTEXATTRIB4SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); typedef void (APIENTRY * PFNGLVERTEXATTRIB4SVNVPROC) (GLuint index, const GLshort *v); typedef void (APIENTRY * PFNGLVERTEXATTRIB4UBNVPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); typedef void (APIENTRY * PFNGLVERTEXATTRIB4UBVNVPROC) (GLuint index, const GLubyte *v); typedef void (APIENTRY * PFNGLVERTEXATTRIBS1DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); typedef void (APIENTRY * PFNGLVERTEXATTRIBS1FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); typedef void (APIENTRY * PFNGLVERTEXATTRIBS1SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); typedef void (APIENTRY * PFNGLVERTEXATTRIBS2DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); typedef void (APIENTRY * PFNGLVERTEXATTRIBS2FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); typedef void (APIENTRY * PFNGLVERTEXATTRIBS2SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); typedef void (APIENTRY * PFNGLVERTEXATTRIBS3DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); typedef void (APIENTRY * PFNGLVERTEXATTRIBS3FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); typedef void (APIENTRY * PFNGLVERTEXATTRIBS3SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); typedef void (APIENTRY * PFNGLVERTEXATTRIBS4DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); typedef void (APIENTRY * PFNGLVERTEXATTRIBS4FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); typedef void (APIENTRY * PFNGLVERTEXATTRIBS4SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); typedef void (APIENTRY * PFNGLVERTEXATTRIBS4UBVNVPROC) (GLuint index, GLsizei count, const GLubyte *v); #endif #ifndef GL_SGIX_texture_coordinate_clamp #define GL_SGIX_texture_coordinate_clamp 1 #endif #ifndef GL_SGIX_scalebias_hint #define GL_SGIX_scalebias_hint 1 #endif #ifndef GL_OML_interlace #define GL_OML_interlace 1 #endif #ifndef GL_OML_subsample #define GL_OML_subsample 1 #endif #ifndef GL_OML_resample #define GL_OML_resample 1 #endif #ifndef GL_NV_copy_depth_to_color #define GL_NV_copy_depth_to_color 1 #endif #ifndef GL_ATI_envmap_bumpmap #define GL_ATI_envmap_bumpmap 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glTexBumpParameterivATI (GLenum, const GLint *); GLAPI void APIENTRY glTexBumpParameterfvATI (GLenum, const GLfloat *); GLAPI void APIENTRY glGetTexBumpParameterivATI (GLenum, GLint *); GLAPI void APIENTRY glGetTexBumpParameterfvATI (GLenum, GLfloat *); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLTEXBUMPPARAMETERIVATIPROC) (GLenum pname, const GLint *param); typedef void (APIENTRY * PFNGLTEXBUMPPARAMETERFVATIPROC) (GLenum pname, const GLfloat *param); typedef void (APIENTRY * PFNGLGETTEXBUMPPARAMETERIVATIPROC) (GLenum pname, GLint *param); typedef void (APIENTRY * PFNGLGETTEXBUMPPARAMETERFVATIPROC) (GLenum pname, GLfloat *param); #endif #ifndef GL_ATI_fragment_shader #define GL_ATI_fragment_shader 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI GLuint APIENTRY glGenFragmentShadersATI (GLuint); GLAPI void APIENTRY glBindFragmentShaderATI (GLuint); GLAPI void APIENTRY glDeleteFragmentShaderATI (GLuint); GLAPI void APIENTRY glBeginFragmentShaderATI (void); GLAPI void APIENTRY glEndFragmentShaderATI (void); GLAPI void APIENTRY glPassTexCoordATI (GLuint, GLuint, GLenum); GLAPI void APIENTRY glSampleMapATI (GLuint, GLuint, GLenum); GLAPI void APIENTRY glColorFragmentOp1ATI (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint); GLAPI void APIENTRY glColorFragmentOp2ATI (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint); GLAPI void APIENTRY glColorFragmentOp3ATI (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint); GLAPI void APIENTRY glAlphaFragmentOp1ATI (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint); GLAPI void APIENTRY glAlphaFragmentOp2ATI (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint); GLAPI void APIENTRY glAlphaFragmentOp3ATI (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint); GLAPI void APIENTRY glSetFragmentShaderConstantATI (GLuint, const GLfloat *); #endif /* GL_GLEXT_PROTOTYPES */ typedef GLuint (APIENTRY * PFNGLGENFRAGMENTSHADERSATIPROC) (GLuint range); typedef void (APIENTRY * PFNGLBINDFRAGMENTSHADERATIPROC) (GLuint id); typedef void (APIENTRY * PFNGLDELETEFRAGMENTSHADERATIPROC) (GLuint id); typedef void (APIENTRY * PFNGLBEGINFRAGMENTSHADERATIPROC) (void); typedef void (APIENTRY * PFNGLENDFRAGMENTSHADERATIPROC) (void); typedef void (APIENTRY * PFNGLPASSTEXCOORDATIPROC) (GLuint dst, GLuint coord, GLenum swizzle); typedef void (APIENTRY * PFNGLSAMPLEMAPATIPROC) (GLuint dst, GLuint interp, GLenum swizzle); typedef void (APIENTRY * PFNGLCOLORFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); typedef void (APIENTRY * PFNGLCOLORFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); typedef void (APIENTRY * PFNGLCOLORFRAGMENTOP3ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); typedef void (APIENTRY * PFNGLALPHAFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); typedef void (APIENTRY * PFNGLALPHAFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); typedef void (APIENTRY * PFNGLALPHAFRAGMENTOP3ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); typedef void (APIENTRY * PFNGLSETFRAGMENTSHADERCONSTANTATIPROC) (GLuint dst, const GLfloat *value); #endif #ifndef GL_ATI_pn_triangles #define GL_ATI_pn_triangles 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glPNTrianglesiATI (GLenum, GLint); GLAPI void APIENTRY glPNTrianglesfATI (GLenum, GLfloat); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLPNTRIANGLESIATIPROC) (GLenum pname, GLint param); typedef void (APIENTRY * PFNGLPNTRIANGLESFATIPROC) (GLenum pname, GLfloat param); #endif #ifndef GL_ATI_vertex_array_object #define GL_ATI_vertex_array_object 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI GLuint APIENTRY glNewObjectBufferATI (GLsizei, const GLvoid *, GLenum); GLAPI GLboolean APIENTRY glIsObjectBufferATI (GLuint); GLAPI void APIENTRY glUpdateObjectBufferATI (GLuint, GLuint, GLsizei, const GLvoid *, GLenum); GLAPI void APIENTRY glGetObjectBufferfvATI (GLuint, GLenum, GLfloat *); GLAPI void APIENTRY glGetObjectBufferivATI (GLuint, GLenum, GLint *); GLAPI void APIENTRY glDeleteObjectBufferATI (GLuint); GLAPI void APIENTRY glArrayObjectATI (GLenum, GLint, GLenum, GLsizei, GLuint, GLuint); GLAPI void APIENTRY glGetArrayObjectfvATI (GLenum, GLenum, GLfloat *); GLAPI void APIENTRY glGetArrayObjectivATI (GLenum, GLenum, GLint *); GLAPI void APIENTRY glVariantArrayObjectATI (GLuint, GLenum, GLsizei, GLuint, GLuint); GLAPI void APIENTRY glGetVariantArrayObjectfvATI (GLuint, GLenum, GLfloat *); GLAPI void APIENTRY glGetVariantArrayObjectivATI (GLuint, GLenum, GLint *); #endif /* GL_GLEXT_PROTOTYPES */ typedef GLuint (APIENTRY * PFNGLNEWOBJECTBUFFERATIPROC) (GLsizei size, const GLvoid *pointer, GLenum usage); typedef GLboolean (APIENTRY * PFNGLISOBJECTBUFFERATIPROC) (GLuint buffer); typedef void (APIENTRY * PFNGLUPDATEOBJECTBUFFERATIPROC) (GLuint buffer, GLuint offset, GLsizei size, const GLvoid *pointer, GLenum preserve); typedef void (APIENTRY * PFNGLGETOBJECTBUFFERFVATIPROC) (GLuint buffer, GLenum pname, GLfloat *params); typedef void (APIENTRY * PFNGLGETOBJECTBUFFERIVATIPROC) (GLuint buffer, GLenum pname, GLint *params); typedef void (APIENTRY * PFNGLDELETEOBJECTBUFFERATIPROC) (GLuint buffer); typedef void (APIENTRY * PFNGLARRAYOBJECTATIPROC) (GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); typedef void (APIENTRY * PFNGLGETARRAYOBJECTFVATIPROC) (GLenum array, GLenum pname, GLfloat *params); typedef void (APIENTRY * PFNGLGETARRAYOBJECTIVATIPROC) (GLenum array, GLenum pname, GLint *params); typedef void (APIENTRY * PFNGLVARIANTARRAYOBJECTATIPROC) (GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); typedef void (APIENTRY * PFNGLGETVARIANTARRAYOBJECTFVATIPROC) (GLuint id, GLenum pname, GLfloat *params); typedef void (APIENTRY * PFNGLGETVARIANTARRAYOBJECTIVATIPROC) (GLuint id, GLenum pname, GLint *params); #endif #ifndef GL_EXT_vertex_shader #define GL_EXT_vertex_shader 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBeginVertexShaderEXT (void); GLAPI void APIENTRY glEndVertexShaderEXT (void); GLAPI void APIENTRY glBindVertexShaderEXT (GLuint); GLAPI GLuint APIENTRY glGenVertexShadersEXT (GLuint); GLAPI void APIENTRY glDeleteVertexShaderEXT (GLuint); GLAPI void APIENTRY glShaderOp1EXT (GLenum, GLuint, GLuint); GLAPI void APIENTRY glShaderOp2EXT (GLenum, GLuint, GLuint, GLuint); GLAPI void APIENTRY glShaderOp3EXT (GLenum, GLuint, GLuint, GLuint, GLuint); GLAPI void APIENTRY glSwizzleEXT (GLuint, GLuint, GLenum, GLenum, GLenum, GLenum); GLAPI void APIENTRY glWriteMaskEXT (GLuint, GLuint, GLenum, GLenum, GLenum, GLenum); GLAPI void APIENTRY glInsertComponentEXT (GLuint, GLuint, GLuint); GLAPI void APIENTRY glExtractComponentEXT (GLuint, GLuint, GLuint); GLAPI GLuint APIENTRY glGenSymbolsEXT (GLenum, GLenum, GLenum, GLuint); GLAPI void APIENTRY glSetInvariantEXT (GLuint, GLenum, const void *); GLAPI void APIENTRY glSetLocalConstantEXT (GLuint, GLenum, const void *); GLAPI void APIENTRY glVariantbvEXT (GLuint, const GLbyte *); GLAPI void APIENTRY glVariantsvEXT (GLuint, const GLshort *); GLAPI void APIENTRY glVariantivEXT (GLuint, const GLint *); GLAPI void APIENTRY glVariantfvEXT (GLuint, const GLfloat *); GLAPI void APIENTRY glVariantdvEXT (GLuint, const GLdouble *); GLAPI void APIENTRY glVariantubvEXT (GLuint, const GLubyte *); GLAPI void APIENTRY glVariantusvEXT (GLuint, const GLushort *); GLAPI void APIENTRY glVariantuivEXT (GLuint, const GLuint *); GLAPI void APIENTRY glVariantPointerEXT (GLuint, GLenum, GLuint, const void *); GLAPI void APIENTRY glEnableVariantClientStateEXT (GLuint); GLAPI void APIENTRY glDisableVariantClientStateEXT (GLuint); GLAPI GLuint APIENTRY glBindLightParameterEXT (GLenum, GLenum); GLAPI GLuint APIENTRY glBindMaterialParameterEXT (GLenum, GLenum); GLAPI GLuint APIENTRY glBindTexGenParameterEXT (GLenum, GLenum, GLenum); GLAPI GLuint APIENTRY glBindTextureUnitParameterEXT (GLenum, GLenum); GLAPI GLuint APIENTRY glBindParameterEXT (GLenum); GLAPI GLboolean APIENTRY glIsVariantEnabledEXT (GLuint, GLenum); GLAPI void APIENTRY glGetVariantBooleanvEXT (GLuint, GLenum, GLboolean *); GLAPI void APIENTRY glGetVariantIntegervEXT (GLuint, GLenum, GLint *); GLAPI void APIENTRY glGetVariantFloatvEXT (GLuint, GLenum, GLfloat *); GLAPI void APIENTRY glGetVariantPointervEXT (GLuint, GLenum, GLvoid* *); GLAPI void APIENTRY glGetInvariantBooleanvEXT (GLuint, GLenum, GLboolean *); GLAPI void APIENTRY glGetInvariantIntegervEXT (GLuint, GLenum, GLint *); GLAPI void APIENTRY glGetInvariantFloatvEXT (GLuint, GLenum, GLfloat *); GLAPI void APIENTRY glGetLocalConstantBooleanvEXT (GLuint, GLenum, GLboolean *); GLAPI void APIENTRY glGetLocalConstantIntegervEXT (GLuint, GLenum, GLint *); GLAPI void APIENTRY glGetLocalConstantFloatvEXT (GLuint, GLenum, GLfloat *); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLBEGINVERTEXSHADEREXTPROC) (void); typedef void (APIENTRY * PFNGLENDVERTEXSHADEREXTPROC) (void); typedef void (APIENTRY * PFNGLBINDVERTEXSHADEREXTPROC) (GLuint id); typedef GLuint (APIENTRY * PFNGLGENVERTEXSHADERSEXTPROC) (GLuint range); typedef void (APIENTRY * PFNGLDELETEVERTEXSHADEREXTPROC) (GLuint id); typedef void (APIENTRY * PFNGLSHADEROP1EXTPROC) (GLenum op, GLuint res, GLuint arg1); typedef void (APIENTRY * PFNGLSHADEROP2EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2); typedef void (APIENTRY * PFNGLSHADEROP3EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3); typedef void (APIENTRY * PFNGLSWIZZLEEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); typedef void (APIENTRY * PFNGLWRITEMASKEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); typedef void (APIENTRY * PFNGLINSERTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num); typedef void (APIENTRY * PFNGLEXTRACTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num); typedef GLuint (APIENTRY * PFNGLGENSYMBOLSEXTPROC) (GLenum datatype, GLenum storagetype, GLenum range, GLuint components); typedef void (APIENTRY * PFNGLSETINVARIANTEXTPROC) (GLuint id, GLenum type, const void *addr); typedef void (APIENTRY * PFNGLSETLOCALCONSTANTEXTPROC) (GLuint id, GLenum type, const void *addr); typedef void (APIENTRY * PFNGLVARIANTBVEXTPROC) (GLuint id, const GLbyte *addr); typedef void (APIENTRY * PFNGLVARIANTSVEXTPROC) (GLuint id, const GLshort *addr); typedef void (APIENTRY * PFNGLVARIANTIVEXTPROC) (GLuint id, const GLint *addr); typedef void (APIENTRY * PFNGLVARIANTFVEXTPROC) (GLuint id, const GLfloat *addr); typedef void (APIENTRY * PFNGLVARIANTDVEXTPROC) (GLuint id, const GLdouble *addr); typedef void (APIENTRY * PFNGLVARIANTUBVEXTPROC) (GLuint id, const GLubyte *addr); typedef void (APIENTRY * PFNGLVARIANTUSVEXTPROC) (GLuint id, const GLushort *addr); typedef void (APIENTRY * PFNGLVARIANTUIVEXTPROC) (GLuint id, const GLuint *addr); typedef void (APIENTRY * PFNGLVARIANTPOINTEREXTPROC) (GLuint id, GLenum type, GLuint stride, const void *addr); typedef void (APIENTRY * PFNGLENABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id); typedef void (APIENTRY * PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id); typedef GLuint (APIENTRY * PFNGLBINDLIGHTPARAMETEREXTPROC) (GLenum light, GLenum value); typedef GLuint (APIENTRY * PFNGLBINDMATERIALPARAMETEREXTPROC) (GLenum face, GLenum value); typedef GLuint (APIENTRY * PFNGLBINDTEXGENPARAMETEREXTPROC) (GLenum unit, GLenum coord, GLenum value); typedef GLuint (APIENTRY * PFNGLBINDTEXTUREUNITPARAMETEREXTPROC) (GLenum unit, GLenum value); typedef GLuint (APIENTRY * PFNGLBINDPARAMETEREXTPROC) (GLenum value); typedef GLboolean (APIENTRY * PFNGLISVARIANTENABLEDEXTPROC) (GLuint id, GLenum cap); typedef void (APIENTRY * PFNGLGETVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); typedef void (APIENTRY * PFNGLGETVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); typedef void (APIENTRY * PFNGLGETVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); typedef void (APIENTRY * PFNGLGETVARIANTPOINTERVEXTPROC) (GLuint id, GLenum value, GLvoid* *data); typedef void (APIENTRY * PFNGLGETINVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); typedef void (APIENTRY * PFNGLGETINVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); typedef void (APIENTRY * PFNGLGETINVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); typedef void (APIENTRY * PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); typedef void (APIENTRY * PFNGLGETLOCALCONSTANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); typedef void (APIENTRY * PFNGLGETLOCALCONSTANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); #endif #ifndef GL_ATI_vertex_streams #define GL_ATI_vertex_streams 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glVertexStream1sATI (GLenum, GLshort); GLAPI void APIENTRY glVertexStream1svATI (GLenum, const GLshort *); GLAPI void APIENTRY glVertexStream1iATI (GLenum, GLint); GLAPI void APIENTRY glVertexStream1ivATI (GLenum, const GLint *); GLAPI void APIENTRY glVertexStream1fATI (GLenum, GLfloat); GLAPI void APIENTRY glVertexStream1fvATI (GLenum, const GLfloat *); GLAPI void APIENTRY glVertexStream1dATI (GLenum, GLdouble); GLAPI void APIENTRY glVertexStream1dvATI (GLenum, const GLdouble *); GLAPI void APIENTRY glVertexStream2sATI (GLenum, GLshort, GLshort); GLAPI void APIENTRY glVertexStream2svATI (GLenum, const GLshort *); GLAPI void APIENTRY glVertexStream2iATI (GLenum, GLint, GLint); GLAPI void APIENTRY glVertexStream2ivATI (GLenum, const GLint *); GLAPI void APIENTRY glVertexStream2fATI (GLenum, GLfloat, GLfloat); GLAPI void APIENTRY glVertexStream2fvATI (GLenum, const GLfloat *); GLAPI void APIENTRY glVertexStream2dATI (GLenum, GLdouble, GLdouble); GLAPI void APIENTRY glVertexStream2dvATI (GLenum, const GLdouble *); GLAPI void APIENTRY glVertexStream3sATI (GLenum, GLshort, GLshort, GLshort); GLAPI void APIENTRY glVertexStream3svATI (GLenum, const GLshort *); GLAPI void APIENTRY glVertexStream3iATI (GLenum, GLint, GLint, GLint); GLAPI void APIENTRY glVertexStream3ivATI (GLenum, const GLint *); GLAPI void APIENTRY glVertexStream3fATI (GLenum, GLfloat, GLfloat, GLfloat); GLAPI void APIENTRY glVertexStream3fvATI (GLenum, const GLfloat *); GLAPI void APIENTRY glVertexStream3dATI (GLenum, GLdouble, GLdouble, GLdouble); GLAPI void APIENTRY glVertexStream3dvATI (GLenum, const GLdouble *); GLAPI void APIENTRY glVertexStream4sATI (GLenum, GLshort, GLshort, GLshort, GLshort); GLAPI void APIENTRY glVertexStream4svATI (GLenum, const GLshort *); GLAPI void APIENTRY glVertexStream4iATI (GLenum, GLint, GLint, GLint, GLint); GLAPI void APIENTRY glVertexStream4ivATI (GLenum, const GLint *); GLAPI void APIENTRY glVertexStream4fATI (GLenum, GLfloat, GLfloat, GLfloat, GLfloat); GLAPI void APIENTRY glVertexStream4fvATI (GLenum, const GLfloat *); GLAPI void APIENTRY glVertexStream4dATI (GLenum, GLdouble, GLdouble, GLdouble, GLdouble); GLAPI void APIENTRY glVertexStream4dvATI (GLenum, const GLdouble *); GLAPI void APIENTRY glNormalStream3bATI (GLenum, GLbyte, GLbyte, GLbyte); GLAPI void APIENTRY glNormalStream3bvATI (GLenum, const GLbyte *); GLAPI void APIENTRY glNormalStream3sATI (GLenum, GLshort, GLshort, GLshort); GLAPI void APIENTRY glNormalStream3svATI (GLenum, const GLshort *); GLAPI void APIENTRY glNormalStream3iATI (GLenum, GLint, GLint, GLint); GLAPI void APIENTRY glNormalStream3ivATI (GLenum, const GLint *); GLAPI void APIENTRY glNormalStream3fATI (GLenum, GLfloat, GLfloat, GLfloat); GLAPI void APIENTRY glNormalStream3fvATI (GLenum, const GLfloat *); GLAPI void APIENTRY glNormalStream3dATI (GLenum, GLdouble, GLdouble, GLdouble); GLAPI void APIENTRY glNormalStream3dvATI (GLenum, const GLdouble *); GLAPI void APIENTRY glClientActiveVertexStreamATI (GLenum); GLAPI void APIENTRY glVertexBlendEnviATI (GLenum, GLint); GLAPI void APIENTRY glVertexBlendEnvfATI (GLenum, GLfloat); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLVERTEXSTREAM1SATIPROC) (GLenum stream, GLshort x); typedef void (APIENTRY * PFNGLVERTEXSTREAM1SVATIPROC) (GLenum stream, const GLshort *coords); typedef void (APIENTRY * PFNGLVERTEXSTREAM1IATIPROC) (GLenum stream, GLint x); typedef void (APIENTRY * PFNGLVERTEXSTREAM1IVATIPROC) (GLenum stream, const GLint *coords); typedef void (APIENTRY * PFNGLVERTEXSTREAM1FATIPROC) (GLenum stream, GLfloat x); typedef void (APIENTRY * PFNGLVERTEXSTREAM1FVATIPROC) (GLenum stream, const GLfloat *coords); typedef void (APIENTRY * PFNGLVERTEXSTREAM1DATIPROC) (GLenum stream, GLdouble x); typedef void (APIENTRY * PFNGLVERTEXSTREAM1DVATIPROC) (GLenum stream, const GLdouble *coords); typedef void (APIENTRY * PFNGLVERTEXSTREAM2SATIPROC) (GLenum stream, GLshort x, GLshort y); typedef void (APIENTRY * PFNGLVERTEXSTREAM2SVATIPROC) (GLenum stream, const GLshort *coords); typedef void (APIENTRY * PFNGLVERTEXSTREAM2IATIPROC) (GLenum stream, GLint x, GLint y); typedef void (APIENTRY * PFNGLVERTEXSTREAM2IVATIPROC) (GLenum stream, const GLint *coords); typedef void (APIENTRY * PFNGLVERTEXSTREAM2FATIPROC) (GLenum stream, GLfloat x, GLfloat y); typedef void (APIENTRY * PFNGLVERTEXSTREAM2FVATIPROC) (GLenum stream, const GLfloat *coords); typedef void (APIENTRY * PFNGLVERTEXSTREAM2DATIPROC) (GLenum stream, GLdouble x, GLdouble y); typedef void (APIENTRY * PFNGLVERTEXSTREAM2DVATIPROC) (GLenum stream, const GLdouble *coords); typedef void (APIENTRY * PFNGLVERTEXSTREAM3SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z); typedef void (APIENTRY * PFNGLVERTEXSTREAM3SVATIPROC) (GLenum stream, const GLshort *coords); typedef void (APIENTRY * PFNGLVERTEXSTREAM3IATIPROC) (GLenum stream, GLint x, GLint y, GLint z); typedef void (APIENTRY * PFNGLVERTEXSTREAM3IVATIPROC) (GLenum stream, const GLint *coords); typedef void (APIENTRY * PFNGLVERTEXSTREAM3FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRY * PFNGLVERTEXSTREAM3FVATIPROC) (GLenum stream, const GLfloat *coords); typedef void (APIENTRY * PFNGLVERTEXSTREAM3DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z); typedef void (APIENTRY * PFNGLVERTEXSTREAM3DVATIPROC) (GLenum stream, const GLdouble *coords); typedef void (APIENTRY * PFNGLVERTEXSTREAM4SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w); typedef void (APIENTRY * PFNGLVERTEXSTREAM4SVATIPROC) (GLenum stream, const GLshort *coords); typedef void (APIENTRY * PFNGLVERTEXSTREAM4IATIPROC) (GLenum stream, GLint x, GLint y, GLint z, GLint w); typedef void (APIENTRY * PFNGLVERTEXSTREAM4IVATIPROC) (GLenum stream, const GLint *coords); typedef void (APIENTRY * PFNGLVERTEXSTREAM4FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w); typedef void (APIENTRY * PFNGLVERTEXSTREAM4FVATIPROC) (GLenum stream, const GLfloat *coords); typedef void (APIENTRY * PFNGLVERTEXSTREAM4DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w); typedef void (APIENTRY * PFNGLVERTEXSTREAM4DVATIPROC) (GLenum stream, const GLdouble *coords); typedef void (APIENTRY * PFNGLNORMALSTREAM3BATIPROC) (GLenum stream, GLbyte nx, GLbyte ny, GLbyte nz); typedef void (APIENTRY * PFNGLNORMALSTREAM3BVATIPROC) (GLenum stream, const GLbyte *coords); typedef void (APIENTRY * PFNGLNORMALSTREAM3SATIPROC) (GLenum stream, GLshort nx, GLshort ny, GLshort nz); typedef void (APIENTRY * PFNGLNORMALSTREAM3SVATIPROC) (GLenum stream, const GLshort *coords); typedef void (APIENTRY * PFNGLNORMALSTREAM3IATIPROC) (GLenum stream, GLint nx, GLint ny, GLint nz); typedef void (APIENTRY * PFNGLNORMALSTREAM3IVATIPROC) (GLenum stream, const GLint *coords); typedef void (APIENTRY * PFNGLNORMALSTREAM3FATIPROC) (GLenum stream, GLfloat nx, GLfloat ny, GLfloat nz); typedef void (APIENTRY * PFNGLNORMALSTREAM3FVATIPROC) (GLenum stream, const GLfloat *coords); typedef void (APIENTRY * PFNGLNORMALSTREAM3DATIPROC) (GLenum stream, GLdouble nx, GLdouble ny, GLdouble nz); typedef void (APIENTRY * PFNGLNORMALSTREAM3DVATIPROC) (GLenum stream, const GLdouble *coords); typedef void (APIENTRY * PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC) (GLenum stream); typedef void (APIENTRY * PFNGLVERTEXBLENDENVIATIPROC) (GLenum pname, GLint param); typedef void (APIENTRY * PFNGLVERTEXBLENDENVFATIPROC) (GLenum pname, GLfloat param); #endif #ifndef GL_ATI_element_array #define GL_ATI_element_array 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glElementPointerATI (GLenum, const GLvoid *); GLAPI void APIENTRY glDrawElementArrayATI (GLenum, GLsizei); GLAPI void APIENTRY glDrawRangeElementArrayATI (GLenum, GLuint, GLuint, GLsizei); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLELEMENTPOINTERATIPROC) (GLenum type, const GLvoid *pointer); typedef void (APIENTRY * PFNGLDRAWELEMENTARRAYATIPROC) (GLenum mode, GLsizei count); typedef void (APIENTRY * PFNGLDRAWRANGEELEMENTARRAYATIPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count); #endif #ifndef GL_SUN_mesh_array #define GL_SUN_mesh_array 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDrawMeshArraysSUN (GLenum, GLint, GLsizei, GLsizei); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLDRAWMESHARRAYSSUNPROC) (GLenum mode, GLint first, GLsizei count, GLsizei width); #endif #ifndef GL_SUN_slice_accum #define GL_SUN_slice_accum 1 #endif #ifndef GL_NV_multisample_filter_hint #define GL_NV_multisample_filter_hint 1 #endif #ifndef GL_NV_depth_clamp #define GL_NV_depth_clamp 1 #endif #ifndef GL_NV_occlusion_query #define GL_NV_occlusion_query 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glGenOcclusionQueriesNV (GLsizei, GLuint *); GLAPI void APIENTRY glDeleteOcclusionQueriesNV (GLsizei, const GLuint *); GLAPI GLboolean APIENTRY glIsOcclusionQueryNV (GLuint); GLAPI void APIENTRY glBeginOcclusionQueryNV (GLuint); GLAPI void APIENTRY glEndOcclusionQueryNV (void); GLAPI void APIENTRY glGetOcclusionQueryivNV (GLuint, GLenum, GLint *); GLAPI void APIENTRY glGetOcclusionQueryuivNV (GLuint, GLenum, GLuint *); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLGENOCCLUSIONQUERIESNVPROC) (GLsizei n, GLuint *ids); typedef void (APIENTRY * PFNGLDELETEOCCLUSIONQUERIESNVPROC) (GLsizei n, const GLuint *ids); typedef GLboolean (APIENTRY * PFNGLISOCCLUSIONQUERYNVPROC) (GLuint id); typedef void (APIENTRY * PFNGLBEGINOCCLUSIONQUERYNVPROC) (GLuint id); typedef void (APIENTRY * PFNGLENDOCCLUSIONQUERYNVPROC) (void); typedef void (APIENTRY * PFNGLGETOCCLUSIONQUERYIVNVPROC) (GLuint id, GLenum pname, GLint *params); typedef void (APIENTRY * PFNGLGETOCCLUSIONQUERYUIVNVPROC) (GLuint id, GLenum pname, GLuint *params); #endif #ifndef GL_NV_point_sprite #define GL_NV_point_sprite 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glPointParameteriNV (GLenum, GLint); GLAPI void APIENTRY glPointParameterivNV (GLenum, const GLint *); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLPOINTPARAMETERINVPROC) (GLenum pname, GLint param); typedef void (APIENTRY * PFNGLPOINTPARAMETERIVNVPROC) (GLenum pname, const GLint *params); #endif #ifndef GL_NV_texture_shader3 #define GL_NV_texture_shader3 1 #endif #ifndef GL_NV_vertex_program1_1 #define GL_NV_vertex_program1_1 1 #endif #ifdef __cplusplus } #endif #endif ================================================ FILE: Include/glide.h ================================================ /* ** Copyright (c) 1995, 3Dfx Interactive, Inc. ** All Rights Reserved. ** ** This is UNPUBLISHED PROPRIETARY SOURCE CODE of 3Dfx Interactive, Inc.; ** the contents of this file may not be disclosed to third parties, copied or ** duplicated in any form, in whole or in part, without the prior written ** permission of 3Dfx Interactive, Inc. ** ** RESTRICTED RIGHTS LEGEND: ** Use, duplication or disclosure by the Government is subject to restrictions ** as set forth in subdivision (c)(1)(ii) of the Rights in Technical Data ** and Computer Software clause at DFARS 252.227-7013, and/or in similar or ** successor clauses in the FAR, DOD or NASA FAR Supplement. Unpublished - ** rights reserved under the Copyright Laws of the United States. */ /* ** GLIDE.H ** ** The following #defines are relevant when using Glide: ** ** One of the following "platform constants" must be defined during ** compilation: ** ** __DOS__ Defined for 32-bit DOS applications ** __WIN32__ Defined for 32-bit Windows applications ** __sparc__ Defined for Sun Solaris/SunOS ** __linux__ Defined for Linux applications ** __IRIX__ Defined for SGI Irix applications ** */ #ifndef __GLIDE_H__ #define __GLIDE_H__ #include <3dfx.h> #include #include #ifdef __cplusplus extern "C" { #endif /* ** ----------------------------------------------------------------------- ** TYPE DEFINITIONS ** ----------------------------------------------------------------------- */ typedef FxU32 GrColor_t; typedef FxU8 GrAlpha_t; typedef FxU32 GrMipMapId_t; typedef FxU8 GrFog_t; typedef FxU32 GrContext_t; typedef int (__stdcall *GrProc)(); /* ** ----------------------------------------------------------------------- ** CONSTANTS AND TYPES ** ----------------------------------------------------------------------- */ #define GR_NULL_MIPMAP_HANDLE ((GrMipMapId_t) -1) #define GR_MIPMAPLEVELMASK_EVEN FXBIT(0) #define GR_MIPMAPLEVELMASK_ODD FXBIT(1) #define GR_MIPMAPLEVELMASK_BOTH (GR_MIPMAPLEVELMASK_EVEN | GR_MIPMAPLEVELMASK_ODD ) #define GR_LODBIAS_BILINEAR 0.5 #define GR_LODBIAS_TRILINEAR 0.0 typedef FxI32 GrChipID_t; #define GR_TMU0 0x0 #define GR_TMU1 0x1 #define GR_TMU2 0x2 #define GR_FBI 0x0 typedef FxI32 GrCombineFunction_t; #define GR_COMBINE_FUNCTION_ZERO 0x0 #define GR_COMBINE_FUNCTION_NONE GR_COMBINE_FUNCTION_ZERO #define GR_COMBINE_FUNCTION_LOCAL 0x1 #define GR_COMBINE_FUNCTION_LOCAL_ALPHA 0x2 #define GR_COMBINE_FUNCTION_SCALE_OTHER 0x3 #define GR_COMBINE_FUNCTION_BLEND_OTHER GR_COMBINE_FUNCTION_SCALE_OTHER #define GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL 0x4 #define GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL_ALPHA 0x5 #define GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL 0x6 #define GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL 0x7 #define GR_COMBINE_FUNCTION_BLEND GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL #define GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL_ALPHA 0x8 #define GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL 0x9 #define GR_COMBINE_FUNCTION_BLEND_LOCAL GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL #define GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL_ALPHA 0x10 typedef FxI32 GrCombineFactor_t; #define GR_COMBINE_FACTOR_ZERO 0x0 #define GR_COMBINE_FACTOR_NONE GR_COMBINE_FACTOR_ZERO #define GR_COMBINE_FACTOR_LOCAL 0x1 #define GR_COMBINE_FACTOR_OTHER_ALPHA 0x2 #define GR_COMBINE_FACTOR_LOCAL_ALPHA 0x3 #define GR_COMBINE_FACTOR_TEXTURE_ALPHA 0x4 #define GR_COMBINE_FACTOR_TEXTURE_RGB 0x5 #define GR_COMBINE_FACTOR_DETAIL_FACTOR GR_COMBINE_FACTOR_TEXTURE_ALPHA #define GR_COMBINE_FACTOR_LOD_FRACTION 0x5 #define GR_COMBINE_FACTOR_ONE 0x8 #define GR_COMBINE_FACTOR_ONE_MINUS_LOCAL 0x9 #define GR_COMBINE_FACTOR_ONE_MINUS_OTHER_ALPHA 0xa #define GR_COMBINE_FACTOR_ONE_MINUS_LOCAL_ALPHA 0xb #define GR_COMBINE_FACTOR_ONE_MINUS_TEXTURE_ALPHA 0xc #define GR_COMBINE_FACTOR_ONE_MINUS_DETAIL_FACTOR GR_COMBINE_FACTOR_ONE_MINUS_TEXTURE_ALPHA #define GR_COMBINE_FACTOR_ONE_MINUS_LOD_FRACTION 0xd typedef FxI32 GrCombineLocal_t; #define GR_COMBINE_LOCAL_ITERATED 0x0 #define GR_COMBINE_LOCAL_CONSTANT 0x1 #define GR_COMBINE_LOCAL_NONE GR_COMBINE_LOCAL_CONSTANT #define GR_COMBINE_LOCAL_DEPTH 0x2 typedef FxI32 GrCombineOther_t; #define GR_COMBINE_OTHER_ITERATED 0x0 #define GR_COMBINE_OTHER_TEXTURE 0x1 #define GR_COMBINE_OTHER_CONSTANT 0x2 #define GR_COMBINE_OTHER_NONE GR_COMBINE_OTHER_CONSTANT typedef FxI32 GrAlphaSource_t; #define GR_ALPHASOURCE_CC_ALPHA 0x0 #define GR_ALPHASOURCE_ITERATED_ALPHA 0x1 #define GR_ALPHASOURCE_TEXTURE_ALPHA 0x2 #define GR_ALPHASOURCE_TEXTURE_ALPHA_TIMES_ITERATED_ALPHA 0x3 typedef FxI32 GrColorCombineFnc_t; #define GR_COLORCOMBINE_ZERO 0x0 #define GR_COLORCOMBINE_CCRGB 0x1 #define GR_COLORCOMBINE_ITRGB 0x2 #define GR_COLORCOMBINE_ITRGB_DELTA0 0x3 #define GR_COLORCOMBINE_DECAL_TEXTURE 0x4 #define GR_COLORCOMBINE_TEXTURE_TIMES_CCRGB 0x5 #define GR_COLORCOMBINE_TEXTURE_TIMES_ITRGB 0x6 #define GR_COLORCOMBINE_TEXTURE_TIMES_ITRGB_DELTA0 0x7 #define GR_COLORCOMBINE_TEXTURE_TIMES_ITRGB_ADD_ALPHA 0x8 #define GR_COLORCOMBINE_TEXTURE_TIMES_ALPHA 0x9 #define GR_COLORCOMBINE_TEXTURE_TIMES_ALPHA_ADD_ITRGB 0xa #define GR_COLORCOMBINE_TEXTURE_ADD_ITRGB 0xb #define GR_COLORCOMBINE_TEXTURE_SUB_ITRGB 0xc #define GR_COLORCOMBINE_CCRGB_BLEND_ITRGB_ON_TEXALPHA 0xd #define GR_COLORCOMBINE_DIFF_SPEC_A 0xe #define GR_COLORCOMBINE_DIFF_SPEC_B 0xf #define GR_COLORCOMBINE_ONE 0x10 typedef FxI32 GrAlphaBlendFnc_t; #define GR_BLEND_ZERO 0x0 #define GR_BLEND_SRC_ALPHA 0x1 #define GR_BLEND_SRC_COLOR 0x2 #define GR_BLEND_DST_COLOR GR_BLEND_SRC_COLOR #define GR_BLEND_DST_ALPHA 0x3 #define GR_BLEND_ONE 0x4 #define GR_BLEND_ONE_MINUS_SRC_ALPHA 0x5 #define GR_BLEND_ONE_MINUS_SRC_COLOR 0x6 #define GR_BLEND_ONE_MINUS_DST_COLOR GR_BLEND_ONE_MINUS_SRC_COLOR #define GR_BLEND_ONE_MINUS_DST_ALPHA 0x7 #define GR_BLEND_RESERVED_8 0x8 #define GR_BLEND_RESERVED_9 0x9 #define GR_BLEND_RESERVED_A 0xa #define GR_BLEND_RESERVED_B 0xb #define GR_BLEND_RESERVED_C 0xc #define GR_BLEND_RESERVED_D 0xd #define GR_BLEND_RESERVED_E 0xe #define GR_BLEND_ALPHA_SATURATE 0xf #define GR_BLEND_PREFOG_COLOR GR_BLEND_ALPHA_SATURATE typedef FxI32 GrAspectRatio_t; #define GR_ASPECT_LOG2_8x1 3 /* 8W x 1H */ #define GR_ASPECT_LOG2_4x1 2 /* 4W x 1H */ #define GR_ASPECT_LOG2_2x1 1 /* 2W x 1H */ #define GR_ASPECT_LOG2_1x1 0 /* 1W x 1H */ #define GR_ASPECT_LOG2_1x2 -1 /* 1W x 2H */ #define GR_ASPECT_LOG2_1x4 -2 /* 1W x 4H */ #define GR_ASPECT_LOG2_1x8 -3 /* 1W x 8H */ typedef FxI32 GrBuffer_t; #define GR_BUFFER_FRONTBUFFER 0x0 #define GR_BUFFER_BACKBUFFER 0x1 #define GR_BUFFER_AUXBUFFER 0x2 #define GR_BUFFER_DEPTHBUFFER 0x3 #define GR_BUFFER_ALPHABUFFER 0x4 #define GR_BUFFER_TRIPLEBUFFER 0x5 typedef FxI32 GrChromakeyMode_t; #define GR_CHROMAKEY_DISABLE 0x0 #define GR_CHROMAKEY_ENABLE 0x1 typedef FxI32 GrChromaRangeMode_t; #define GR_CHROMARANGE_RGB_ALL_EXT 0x0 #define GR_CHROMARANGE_DISABLE_EXT 0x00 #define GR_CHROMARANGE_ENABLE_EXT 0x01 typedef FxI32 GrTexChromakeyMode_t; #define GR_TEXCHROMA_DISABLE_EXT 0x0 #define GR_TEXCHROMA_ENABLE_EXT 0x1 #define GR_TEXCHROMARANGE_RGB_ALL_EXT 0x0 typedef FxI32 GrCmpFnc_t; #define GR_CMP_NEVER 0x0 #define GR_CMP_LESS 0x1 #define GR_CMP_EQUAL 0x2 #define GR_CMP_LEQUAL 0x3 #define GR_CMP_GREATER 0x4 #define GR_CMP_NOTEQUAL 0x5 #define GR_CMP_GEQUAL 0x6 #define GR_CMP_ALWAYS 0x7 typedef FxI32 GrColorFormat_t; #define GR_COLORFORMAT_ARGB 0x0 #define GR_COLORFORMAT_ABGR 0x1 #define GR_COLORFORMAT_RGBA 0x2 #define GR_COLORFORMAT_BGRA 0x3 typedef FxI32 GrCullMode_t; #define GR_CULL_DISABLE 0x0 #define GR_CULL_NEGATIVE 0x1 #define GR_CULL_POSITIVE 0x2 typedef FxI32 GrDepthBufferMode_t; #define GR_DEPTHBUFFER_DISABLE 0x0 #define GR_DEPTHBUFFER_ZBUFFER 0x1 #define GR_DEPTHBUFFER_WBUFFER 0x2 #define GR_DEPTHBUFFER_ZBUFFER_COMPARE_TO_BIAS 0x3 #define GR_DEPTHBUFFER_WBUFFER_COMPARE_TO_BIAS 0x4 typedef FxI32 GrDitherMode_t; #define GR_DITHER_DISABLE 0x0 #define GR_DITHER_2x2 0x1 #define GR_DITHER_4x4 0x2 typedef FxI32 GrFogMode_t; #define GR_FOG_DISABLE 0x0 #define GR_FOG_WITH_TABLE_ON_FOGCOORD_EXT 0x1 #define GR_FOG_WITH_TABLE_ON_Q 0x2 #define GR_FOG_WITH_TABLE_ON_W GR_FOG_WITH_TABLE_ON_Q #define GR_FOG_WITH_ITERATED_Z 0x3 #define GR_FOG_MULT2 0x100 #define GR_FOG_ADD2 0x200 typedef FxU32 GrLock_t; #define GR_LFB_READ_ONLY 0x00 #define GR_LFB_WRITE_ONLY 0x01 #define GR_LFB_IDLE 0x00 #define GR_LFB_NOIDLE 0x10 typedef FxI32 GrLfbBypassMode_t; #define GR_LFBBYPASS_DISABLE 0x0 #define GR_LFBBYPASS_ENABLE 0x1 typedef FxI32 GrLfbWriteMode_t; #define GR_LFBWRITEMODE_565 0x0 /* RGB:RGB */ #define GR_LFBWRITEMODE_555 0x1 /* RGB:RGB */ #define GR_LFBWRITEMODE_1555 0x2 /* ARGB:ARGB */ #define GR_LFBWRITEMODE_RESERVED1 0x3 #define GR_LFBWRITEMODE_888 0x4 /* RGB */ #define GR_LFBWRITEMODE_8888 0x5 /* ARGB */ #define GR_LFBWRITEMODE_RESERVED2 0x6 #define GR_LFBWRITEMODE_RESERVED3 0x7 #define GR_LFBWRITEMODE_RESERVED4 0x8 #define GR_LFBWRITEMODE_RESERVED5 0x9 #define GR_LFBWRITEMODE_RESERVED6 0xa #define GR_LFBWRITEMODE_RESERVED7 0xb #define GR_LFBWRITEMODE_565_DEPTH 0xc /* RGB:DEPTH */ #define GR_LFBWRITEMODE_555_DEPTH 0xd /* RGB:DEPTH */ #define GR_LFBWRITEMODE_1555_DEPTH 0xe /* ARGB:DEPTH */ #define GR_LFBWRITEMODE_ZA16 0xf /* DEPTH:DEPTH */ #define GR_LFBWRITEMODE_ANY 0xFF typedef FxI32 GrOriginLocation_t; #define GR_ORIGIN_UPPER_LEFT 0x0 #define GR_ORIGIN_LOWER_LEFT 0x1 #define GR_ORIGIN_ANY 0xFF typedef struct { int size; void *lfbPtr; FxU32 strideInBytes; GrLfbWriteMode_t writeMode; GrOriginLocation_t origin; } GrLfbInfo_t; typedef FxI32 GrLOD_t; #define GR_LOD_LOG2_256 0x8 #define GR_LOD_LOG2_128 0x7 #define GR_LOD_LOG2_64 0x6 #define GR_LOD_LOG2_32 0x5 #define GR_LOD_LOG2_16 0x4 #define GR_LOD_LOG2_8 0x3 #define GR_LOD_LOG2_4 0x2 #define GR_LOD_LOG2_2 0x1 #define GR_LOD_LOG2_1 0x0 typedef FxI32 GrMipMapMode_t; #define GR_MIPMAP_DISABLE 0x0 /* no mip mapping */ #define GR_MIPMAP_NEAREST 0x1 /* use nearest mipmap */ #define GR_MIPMAP_NEAREST_DITHER 0x2 /* GR_MIPMAP_NEAREST + LOD dith */ typedef FxI32 GrSmoothingMode_t; #define GR_SMOOTHING_DISABLE 0x0 #define GR_SMOOTHING_ENABLE 0x1 typedef FxI32 GrTextureClampMode_t; #define GR_TEXTURECLAMP_WRAP 0x0 #define GR_TEXTURECLAMP_CLAMP 0x1 #define GR_TEXTURECLAMP_MIRROR_EXT 0x2 typedef FxI32 GrTextureCombineFnc_t; #define GR_TEXTURECOMBINE_ZERO 0x0 /* texout = 0 */ #define GR_TEXTURECOMBINE_DECAL 0x1 /* texout = texthis */ #define GR_TEXTURECOMBINE_OTHER 0x2 /* this TMU in passthru mode */ #define GR_TEXTURECOMBINE_ADD 0x3 /* tout = tthis + t(this+1) */ #define GR_TEXTURECOMBINE_MULTIPLY 0x4 /* texout = tthis * t(this+1) */ #define GR_TEXTURECOMBINE_SUBTRACT 0x5 /* Sutract from upstream TMU */ #define GR_TEXTURECOMBINE_DETAIL 0x6 /* detail--detail on tthis */ #define GR_TEXTURECOMBINE_DETAIL_OTHER 0x7 /* detail--detail on tthis+1 */ #define GR_TEXTURECOMBINE_TRILINEAR_ODD 0x8 /* trilinear--odd levels tthis*/ #define GR_TEXTURECOMBINE_TRILINEAR_EVEN 0x9 /*trilinear--even levels tthis*/ #define GR_TEXTURECOMBINE_ONE 0xa /* texout = 0xFFFFFFFF */ typedef FxI32 GrTextureFilterMode_t; #define GR_TEXTUREFILTER_POINT_SAMPLED 0x0 #define GR_TEXTUREFILTER_BILINEAR 0x1 typedef FxI32 GrTextureFormat_t; #define GR_TEXFMT_8BIT 0x0 #define GR_TEXFMT_RGB_332 GR_TEXFMT_8BIT #define GR_TEXFMT_YIQ_422 0x1 #define GR_TEXFMT_ALPHA_8 0x2 /* (0..0xFF) alpha */ #define GR_TEXFMT_INTENSITY_8 0x3 /* (0..0xFF) intensity */ #define GR_TEXFMT_ALPHA_INTENSITY_44 0x4 #define GR_TEXFMT_P_8 0x5 /* 8-bit palette */ #define GR_TEXFMT_RSVD0 0x6 #define GR_TEXFMT_RSVD1 0x7 #define GR_TEXFMT_16BIT 0x8 #define GR_TEXFMT_ARGB_8332 GR_TEXFMT_16BIT #define GR_TEXFMT_AYIQ_8422 0x9 #define GR_TEXFMT_RGB_565 0xa #define GR_TEXFMT_ARGB_1555 0xb #define GR_TEXFMT_ARGB_4444 0xc #define GR_TEXFMT_ALPHA_INTENSITY_88 0xd #define GR_TEXFMT_AP_88 0xe /* 8-bit alpha 8-bit palette */ #define GR_TEXFMT_RSVD2 0xf typedef FxU32 GrTexTable_t; #define GR_TEXTABLE_NCC0 0x0 #define GR_TEXTABLE_NCC1 0x1 #define GR_TEXTABLE_PALETTE 0x2 #define GR_TEXTABLE_PALETTE_6666_EXT 0x3 typedef FxU32 GrNCCTable_t; #define GR_NCCTABLE_NCC0 0x0 #define GR_NCCTABLE_NCC1 0x1 typedef FxU32 GrTexBaseRange_t; #define GR_TEXBASE_256 0x3 #define GR_TEXBASE_128 0x2 #define GR_TEXBASE_64 0x1 #define GR_TEXBASE_32_TO_1 0x0 typedef FxU32 GrEnableMode_t; #define GR_MODE_DISABLE 0x0 #define GR_MODE_ENABLE 0x1 #define GR_AA_ORDERED 0x01 #define GR_ALLOW_MIPMAP_DITHER 0x02 #define GR_PASSTHRU 0x03 #define GR_SHAMELESS_PLUG 0x04 #define GR_VIDEO_SMOOTHING 0x05 typedef FxU32 GrCoordinateSpaceMode_t; #define GR_WINDOW_COORDS 0x00 #define GR_CLIP_COORDS 0x01 /* Types of data in strips */ #define GR_FLOAT 0 #define GR_U8 1 /* Parameters for strips */ #define GR_PARAM_XY 0x01 #define GR_PARAM_Z 0x02 #define GR_PARAM_W 0x03 #define GR_PARAM_Q 0x04 #define GR_PARAM_FOG_EXT 0x05 #define GR_PARAM_A 0x10 #define GR_PARAM_RGB 0x20 #define GR_PARAM_PARGB 0x30 #define GR_PARAM_ST0 0x40 #define GR_PARAM_ST1 GR_PARAM_ST0+1 #define GR_PARAM_ST2 GR_PARAM_ST0+2 #define GR_PARAM_Q0 0x50 #define GR_PARAM_Q1 GR_PARAM_Q0+1 #define GR_PARAM_Q2 GR_PARAM_Q0+2 #define GR_PARAM_DISABLE 0x00 #define GR_PARAM_ENABLE 0x01 /* ** grDrawVertexArray/grDrawVertexArrayContiguous primitive type */ #define GR_POINTS 0 #define GR_LINE_STRIP 1 #define GR_LINES 2 #define GR_POLYGON 3 #define GR_TRIANGLE_STRIP 4 #define GR_TRIANGLE_FAN 5 #define GR_TRIANGLES 6 #define GR_TRIANGLE_STRIP_CONTINUE 7 #define GR_TRIANGLE_FAN_CONTINUE 8 /* ** grGet/grReset types */ #define GR_BITS_DEPTH 0x01 #define GR_BITS_RGBA 0x02 #define GR_FIFO_FULLNESS 0x03 #define GR_FOG_TABLE_ENTRIES 0x04 #define GR_GAMMA_TABLE_ENTRIES 0x05 #define GR_GLIDE_STATE_SIZE 0x06 #define GR_GLIDE_VERTEXLAYOUT_SIZE 0x07 #define GR_IS_BUSY 0x08 #define GR_LFB_PIXEL_PIPE 0x09 #define GR_MAX_TEXTURE_SIZE 0x0a #define GR_MAX_TEXTURE_ASPECT_RATIO 0x0b #define GR_MEMORY_FB 0x0c #define GR_MEMORY_TMU 0x0d #define GR_MEMORY_UMA 0x0e #define GR_NUM_BOARDS 0x0f #define GR_NON_POWER_OF_TWO_TEXTURES 0x10 #define GR_NUM_FB 0x11 #define GR_NUM_SWAP_HISTORY_BUFFER 0x12 #define GR_NUM_TMU 0x13 #define GR_PENDING_BUFFERSWAPS 0x14 #define GR_REVISION_FB 0x15 #define GR_REVISION_TMU 0x16 #define GR_STATS_LINES 0x17 /* grGet/grReset */ #define GR_STATS_PIXELS_AFUNC_FAIL 0x18 #define GR_STATS_PIXELS_CHROMA_FAIL 0x19 #define GR_STATS_PIXELS_DEPTHFUNC_FAIL 0x1a #define GR_STATS_PIXELS_IN 0x1b #define GR_STATS_PIXELS_OUT 0x1c #define GR_STATS_PIXELS 0x1d /* grReset */ #define GR_STATS_POINTS 0x1e /* grGet/grReset */ #define GR_STATS_TRIANGLES_IN 0x1f #define GR_STATS_TRIANGLES_OUT 0x20 #define GR_STATS_TRIANGLES 0x21 /* grReset */ #define GR_SWAP_HISTORY 0x22 #define GR_SUPPORTS_PASSTHRU 0x23 #define GR_TEXTURE_ALIGN 0x24 #define GR_VIDEO_POSITION 0x25 #define GR_VIEWPORT 0x26 #define GR_WDEPTH_MIN_MAX 0x27 #define GR_ZDEPTH_MIN_MAX 0x28 #define GR_VERTEX_PARAMETER 0x29 #define GR_BITS_GAMMA 0x2a /* ** grGetString types */ #define GR_EXTENSION 0xa0 #define GR_HARDWARE 0xa1 #define GR_RENDERER 0xa2 #define GR_VENDOR 0xa3 #define GR_VERSION 0xa4 /* ** ----------------------------------------------------------------------- ** STRUCTURES ** ----------------------------------------------------------------------- */ typedef struct { GrLOD_t smallLodLog2; GrLOD_t largeLodLog2; GrAspectRatio_t aspectRatioLog2; GrTextureFormat_t format; void *data; } GrTexInfo; typedef struct GrSstPerfStats_s { FxU32 pixelsIn; /* # pixels processed (minus buffer clears) */ FxU32 chromaFail; /* # pixels not drawn due to chroma key */ FxU32 zFuncFail; /* # pixels not drawn due to Z comparison */ FxU32 aFuncFail; /* # pixels not drawn due to alpha comparison */ FxU32 pixelsOut; /* # pixels drawn (including buffer clears) */ } GrSstPerfStats_t; typedef struct { GrScreenResolution_t resolution; GrScreenRefresh_t refresh; int numColorBuffers; int numAuxBuffers; } GrResolution; typedef GrResolution GlideResolution; #define GR_QUERY_ANY ((FxU32)(~0)) typedef FxU32 GrLfbSrcFmt_t; #define GR_LFB_SRC_FMT_565 0x00 #define GR_LFB_SRC_FMT_555 0x01 #define GR_LFB_SRC_FMT_1555 0x02 #define GR_LFB_SRC_FMT_888 0x04 #define GR_LFB_SRC_FMT_8888 0x05 #define GR_LFB_SRC_FMT_565_DEPTH 0x0c #define GR_LFB_SRC_FMT_555_DEPTH 0x0d #define GR_LFB_SRC_FMT_1555_DEPTH 0x0e #define GR_LFB_SRC_FMT_ZA16 0x0f #define GR_LFB_SRC_FMT_RLE16 0x80 #ifdef H3D #define GR_HINT_H3DENABLE 4 #undef GR_HINTTYPE_MAX #define GR_HINTTYPE_MAX 4 #endif /* ** ----------------------------------------------------------------------- ** FUNCTION PROTOTYPES ** ----------------------------------------------------------------------- */ #ifndef FX_GLIDE_NO_FUNC_PROTO /* ** rendering functions */ FX_ENTRY void FX_CALL grDrawPoint( const void *pt ); FX_ENTRY void FX_CALL grDrawLine( const void *v1, const void *v2 ); FX_ENTRY void FX_CALL grDrawTriangle( const void *a, const void *b, const void *c ); FX_ENTRY void FX_CALL grVertexLayout(FxU32 param, FxI32 offset, FxU32 mode); FX_ENTRY void FX_CALL grDrawVertexArray(FxU32 mode, FxU32 Count, void *pointers); FX_ENTRY void FX_CALL grDrawVertexArrayContiguous(FxU32 mode, FxU32 Count, void *pointers, FxU32 stride); /* ** Antialiasing Functions */ FX_ENTRY void FX_CALL grAADrawTriangle( const void *a, const void *b, const void *c, FxBool ab_antialias, FxBool bc_antialias, FxBool ca_antialias ); /* ** buffer management */ FX_ENTRY void FX_CALL grBufferClear( GrColor_t color, GrAlpha_t alpha, FxU32 depth ); FX_ENTRY void FX_CALL grBufferSwap( FxU32 swap_interval ); FX_ENTRY void FX_CALL grRenderBuffer( GrBuffer_t buffer ); /* ** error management */ typedef void (*GrErrorCallbackFnc_t)( const char *string, FxBool fatal ); FX_ENTRY void FX_CALL grErrorSetCallback( GrErrorCallbackFnc_t fnc ); /* ** SST routines */ FX_ENTRY void FX_CALL grFinish(void); FX_ENTRY void FX_CALL grFlush(void); FX_ENTRY GrContext_t FX_CALL grSstWinOpen( FxU32 hWnd, GrScreenResolution_t screen_resolution, GrScreenRefresh_t refresh_rate, GrColorFormat_t color_format, GrOriginLocation_t origin_location, int nColBuffers, int nAuxBuffers); FX_ENTRY FxBool FX_CALL grSstWinClose( GrContext_t context ); FX_ENTRY FxBool FX_CALL grSelectContext( GrContext_t context ); FX_ENTRY void FX_CALL grSstOrigin(GrOriginLocation_t origin); FX_ENTRY void FX_CALL grSstSelect( int which_sst ); /* ** Glide configuration and special effect maintenance functions */ FX_ENTRY void FX_CALL grAlphaBlendFunction( GrAlphaBlendFnc_t rgb_sf, GrAlphaBlendFnc_t rgb_df, GrAlphaBlendFnc_t alpha_sf, GrAlphaBlendFnc_t alpha_df ); FX_ENTRY void FX_CALL grAlphaCombine( GrCombineFunction_t function, GrCombineFactor_t factor, GrCombineLocal_t local, GrCombineOther_t other, FxBool invert ); FX_ENTRY void FX_CALL grAlphaControlsITRGBLighting( FxBool enable ); FX_ENTRY void FX_CALL grAlphaTestFunction( GrCmpFnc_t function ); FX_ENTRY void FX_CALL grAlphaTestReferenceValue( GrAlpha_t value ); FX_ENTRY void FX_CALL grChromakeyMode( GrChromakeyMode_t mode ); FX_ENTRY void FX_CALL grChromakeyValue( GrColor_t value ); FX_ENTRY void FX_CALL grClipWindow( FxU32 minx, FxU32 miny, FxU32 maxx, FxU32 maxy ); FX_ENTRY void FX_CALL grColorCombine( GrCombineFunction_t function, GrCombineFactor_t factor, GrCombineLocal_t local, GrCombineOther_t other, FxBool invert ); FX_ENTRY void FX_CALL grColorMask( FxBool rgb, FxBool a ); FX_ENTRY void FX_CALL grCullMode( GrCullMode_t mode ); FX_ENTRY void FX_CALL grConstantColorValue( GrColor_t value ); FX_ENTRY void FX_CALL grDepthBiasLevel( FxI32 level ); FX_ENTRY void FX_CALL grDepthBufferFunction( GrCmpFnc_t function ); FX_ENTRY void FX_CALL grDepthBufferMode( GrDepthBufferMode_t mode ); FX_ENTRY void FX_CALL grDepthMask( FxBool mask ); FX_ENTRY void FX_CALL grDisableAllEffects( void ); FX_ENTRY void FX_CALL grDitherMode( GrDitherMode_t mode ); FX_ENTRY void FX_CALL grFogColorValue( GrColor_t fogcolor ); FX_ENTRY void FX_CALL grFogMode( GrFogMode_t mode ); FX_ENTRY void FX_CALL grFogTable( const GrFog_t ft[] ); FX_ENTRY void FX_CALL grLoadGammaTable( FxU32 nentries, FxU32 *red, FxU32 *green, FxU32 *blue); FX_ENTRY void FX_CALL grSplash(float x, float y, float width, float height, FxU32 frame); FX_ENTRY FxU32 FX_CALL grGet( FxU32 pname, FxU32 plength, FxI32 *params ); FX_ENTRY const char * FX_CALL grGetString( FxU32 pname ); FX_ENTRY FxI32 FX_CALL grQueryResolutions( const GrResolution *resTemplate, GrResolution *output ); FX_ENTRY FxBool FX_CALL grReset( FxU32 what ); FX_ENTRY GrProc FX_CALL grGetProcAddress( char *procName ); FX_ENTRY void FX_CALL grEnable( GrEnableMode_t mode ); FX_ENTRY void FX_CALL grDisable( GrEnableMode_t mode ); FX_ENTRY void FX_CALL grCoordinateSpace( GrCoordinateSpaceMode_t mode ); FX_ENTRY void FX_CALL grDepthRange( FxFloat n, FxFloat f ); FX_ENTRY void FX_CALL grViewport( FxI32 x, FxI32 y, FxI32 width, FxI32 height ); /* ** texture mapping control functions */ FX_ENTRY FxU32 FX_CALL grTexCalcMemRequired( GrLOD_t lodmin, GrLOD_t lodmax, GrAspectRatio_t aspect, GrTextureFormat_t fmt); FX_ENTRY FxU32 FX_CALL grTexTextureMemRequired( FxU32 evenOdd, GrTexInfo *info ); FX_ENTRY FxU32 FX_CALL grTexMinAddress( GrChipID_t tmu ); FX_ENTRY FxU32 FX_CALL grTexMaxAddress( GrChipID_t tmu ); FX_ENTRY void FX_CALL grTexNCCTable( GrNCCTable_t table ); FX_ENTRY void FX_CALL grTexSource( GrChipID_t tmu, FxU32 startAddress, FxU32 evenOdd, GrTexInfo *info ); FX_ENTRY void FX_CALL grTexClampMode( GrChipID_t tmu, GrTextureClampMode_t s_clampmode, GrTextureClampMode_t t_clampmode ); FX_ENTRY void FX_CALL grTexCombine( GrChipID_t tmu, GrCombineFunction_t rgb_function, GrCombineFactor_t rgb_factor, GrCombineFunction_t alpha_function, GrCombineFactor_t alpha_factor, FxBool rgb_invert, FxBool alpha_invert ); FX_ENTRY void FX_CALL grTexDetailControl( GrChipID_t tmu, int lod_bias, FxU8 detail_scale, float detail_max ); FX_ENTRY void FX_CALL grTexFilterMode( GrChipID_t tmu, GrTextureFilterMode_t minfilter_mode, GrTextureFilterMode_t magfilter_mode ); FX_ENTRY void FX_CALL grTexLodBiasValue(GrChipID_t tmu, float bias ); FX_ENTRY void FX_CALL grTexDownloadMipMap( GrChipID_t tmu, FxU32 startAddress, FxU32 evenOdd, GrTexInfo *info ); FX_ENTRY void FX_CALL grTexDownloadMipMapLevel( GrChipID_t tmu, FxU32 startAddress, GrLOD_t thisLod, GrLOD_t largeLod, GrAspectRatio_t aspectRatio, GrTextureFormat_t format, FxU32 evenOdd, void *data ); FX_ENTRY FxBool FX_CALL grTexDownloadMipMapLevelPartial( GrChipID_t tmu, FxU32 startAddress, GrLOD_t thisLod, GrLOD_t largeLod, GrAspectRatio_t aspectRatio, GrTextureFormat_t format, FxU32 evenOdd, void *data, int start, int end ); FX_ENTRY void FX_CALL grTexDownloadTable( GrTexTable_t type, void *data ); FX_ENTRY void FX_CALL grTexDownloadTablePartial( GrTexTable_t type, void *data, int start, int end ); FX_ENTRY void FX_CALL grTexMipMapMode( GrChipID_t tmu, GrMipMapMode_t mode, FxBool lodBlend ); FX_ENTRY void FX_CALL grTexMultibase( GrChipID_t tmu, FxBool enable ); FX_ENTRY void FX_CALL grTexMultibaseAddress( GrChipID_t tmu, GrTexBaseRange_t range, FxU32 startAddress, FxU32 evenOdd, GrTexInfo *info ); /* ** linear frame buffer functions */ FX_ENTRY FxBool FX_CALL grLfbLock( GrLock_t type, GrBuffer_t buffer, GrLfbWriteMode_t writeMode, GrOriginLocation_t origin, FxBool pixelPipeline, GrLfbInfo_t *info ); FX_ENTRY FxBool FX_CALL grLfbUnlock( GrLock_t type, GrBuffer_t buffer ); FX_ENTRY void FX_CALL grLfbConstantAlpha( GrAlpha_t alpha ); FX_ENTRY void FX_CALL grLfbConstantDepth( FxU32 depth ); FX_ENTRY void FX_CALL grLfbWriteColorSwizzle(FxBool swizzleBytes, FxBool swapWords); FX_ENTRY void FX_CALL grLfbWriteColorFormat(GrColorFormat_t colorFormat); FX_ENTRY FxBool FX_CALL grLfbWriteRegion( GrBuffer_t dst_buffer, FxU32 dst_x, FxU32 dst_y, GrLfbSrcFmt_t src_format, FxU32 src_width, FxU32 src_height, FxBool pixelPipeline, FxI32 src_stride, void *src_data ); FX_ENTRY FxBool FX_CALL grLfbReadRegion( GrBuffer_t src_buffer, FxU32 src_x, FxU32 src_y, FxU32 src_width, FxU32 src_height, FxU32 dst_stride, void *dst_data ); /* ** glide management functions */ FX_ENTRY void FX_CALL grGlideInit( void ); FX_ENTRY void FX_CALL grGlideShutdown( void ); FX_ENTRY void FX_CALL grGlideGetState( void *state ); FX_ENTRY void FX_CALL grGlideSetState( const void *state ); FX_ENTRY void FX_CALL grGlideGetVertexLayout( void *layout ); FX_ENTRY void FX_CALL grGlideSetVertexLayout( const void *layout ); #endif /* FX_GLIDE_NO_FUNC_PROTO */ #ifdef __cplusplus } #endif #include #endif /* __GLIDE_H__ */ ================================================ FILE: Include/glidesys.h ================================================ /* ** Copyright (c) 1995, 3Dfx Interactive, Inc. ** All Rights Reserved. ** ** This is UNPUBLISHED PROPRIETARY SOURCE CODE of 3Dfx Interactive, Inc.; ** the contents of this file may not be disclosed to third parties, copied or ** duplicated in any form, in whole or in part, without the prior written ** permission of 3Dfx Interactive, Inc. ** ** RESTRICTED RIGHTS LEGEND: ** Use, duplication or disclosure by the Government is subject to restrictions n** as set forth in subdivision (c)(1)(ii) of the Rights in Technical Data ** and Computer Software clause at DFARS 252.227-7013, and/or in similar or ** successor clauses in the FAR, DOD or NASA FAR Supplement. Unpublished - ** rights reserved under the Copyright Laws of the United States. ** ** $Header: /devel/cvg/glide3/src/glidesys.h 3 7/24/98 1:41p Hohn $ ** $Log: /devel/cvg/glide3/src/glidesys.h $ ** ** 3 7/24/98 1:41p Hohn ** ** 2 6/15/98 10:50a Peter ** made csim compile time option * * 1 1/16/98 4:29p Atai * create glide 3 src * * 10 12/09/97 12:20p Peter * mac glide port * * 9 11/04/97 4:00p Dow * Banshee Mods * * 8 8/18/97 3:52p Peter * pre-hw arrival fixes/cleanup * * 7 6/02/97 4:09p Peter * Compile w/ gcc for Dural * * 6 5/27/97 1:16p Peter * Basic cvg, w/o cmd fifo stuff. * * 5 5/21/97 6:05a Peter */ #ifndef __GLIDESYS_H__ #define __GLIDESYS_H__ /* n** ----------------------------------------------------------------------- ** COMPILER/ENVIRONMENT CONFIGURATION ** ----------------------------------------------------------------------- */ /* Endianness is stored in bits [30:31] */ #define GLIDE_ENDIAN_SHIFT 30 #define GLIDE_ENDIAN_LITTLE (0x1 << GLIDE_ENDIAN_SHIFT) #define GLIDE_ENDIAN_BIG (0x2 << GLIDE_ENDIAN_SHIFT) /* OS is stored in bits [0:6] */ #define GLIDE_OS_SHIFT 0 #define GLIDE_OS_UNIX 0x1 #define GLIDE_OS_DOS32 0x2 #define GLIDE_OS_WIN32 0x4 #define GLIDE_OS_MACOS 0x8 #define GLIDE_OS_OS2 0x10 #define GLIDE_OS_OTHER 0x40 /* For Proprietary Arcade HW */ /* Sim vs. Hardware is stored in bits [7:8] */ #define GLIDE_SST_SHIFT 7 #define GLIDE_SST_SIM (0x1 << GLIDE_SST_SHIFT) #define GLIDE_SST_HW (0x2 << GLIDE_SST_SHIFT) /* Hardware Type is stored in bits [9:13] */ #define GLIDE_HW_SHIFT 9 #define GLIDE_HW_SST1 (0x1 << GLIDE_HW_SHIFT) #define GLIDE_HW_SST96 (0x2 << GLIDE_HW_SHIFT) #define GLIDE_HW_H3 (0x4 << GLIDE_HW_SHIFT) #define GLIDE_HW_SST2 (0x8 << GLIDE_HW_SHIFT) #define GLIDE_HW_CVG (0x10 << GLIDE_HW_SHIFT) /* ** Make sure we handle all instances of WIN32 */ #ifndef __WIN32__ # if defined (_WIN32) || defined (WIN32) || defined(__NT__) # define __WIN32__ # endif #endif /* We need two checks on the OS: one for endian, the other for OS */ /* Check for endianness */ #if defined(__IRIX__) || defined(__sparc__) || defined(MACOS) # define GLIDE_ENDIAN GLIDE_ENDIAN_BIG #else # define GLIDE_ENDIAN GLIDE_ENDIAN_LITTLE #endif /* Check for OS */ #if defined(__IRIX__) || defined(__sparc__) || defined(__linux__) # define GLIDE_OS GLIDE_OS_UNIX #elif defined(__DOS__) # define GLIDE_OS GLIDE_OS_DOS32 #elif defined(__WIN32__) # define GLIDE_OS GLIDE_OS_WIN32 #elif defined(macintosh) # define GLIDE_OS GLIDE_OS_MACOS #else #error "Unknown OS" #endif /* Check for Simulator vs. Hardware */ #if HAL_CSIM || HWC_CSIM # define GLIDE_SST GLIDE_SST_SIM #else # define GLIDE_SST GLIDE_SST_HW #endif /* Check for type of hardware */ #ifdef SST96 # define GLIDE_HW GLIDE_HW_SST96 #elif defined(H3) # define GLIDE_HW GLIDE_HW_H3 #elif defined(SST2) # define GLIDE_HW GLIDE_HW_SST2 #elif defined(CVG) # define GLIDE_HW GLIDE_HW_CVG #else /* Default to SST1 */ # define GLIDE_HW GLIDE_HW_SST1 #endif #define GLIDE_PLATFORM (GLIDE_ENDIAN | GLIDE_OS | GLIDE_SST | GLIDE_HW) /* ** Control the number of TMUs */ #ifndef GLIDE_NUM_TMU # define GLIDE_NUM_TMU 2 #endif #if ((GLIDE_NUM_TMU < 0) && (GLIDE_NUM_TMU > 3)) # error "GLIDE_NUM_TMU set to an invalid value" #endif #endif /* __GLIDESYS_H__ */ ================================================ FILE: Include/glideutl.h ================================================ /* ** Copyright (c) 1995, 3Dfx Interactive, Inc. ** All Rights Reserved. ** ** This is UNPUBLISHED PROPRIETARY SOURCE CODE of 3Dfx Interactive, Inc.; ** the contents of this file may not be disclosed to third parties, copied or ** duplicated in any form, in whole or in part, without the prior written ** permission of 3Dfx Interactive, Inc. ** ** RESTRICTED RIGHTS LEGEND: ** Use, duplication or disclosure by the Government is subject to restrictions ** as set forth in subdivision (c)(1)(ii) of the Rights in Technical Data ** and Computer Software clause at DFARS 252.227-7013, and/or in similar or ** successor clauses in the FAR, DOD or NASA FAR Supplement. Unpublished - ** rights reserved under the Copyright Laws of the United States. ** ** $Header: /devel/cvg/glide3/src/glideutl.h 4 7/24/98 1:41p Hohn $ ** $Log: /devel/cvg/glide3/src/glideutl.h $ ** ** 4 7/24/98 1:41p Hohn ** ** 3 1/30/98 4:27p Atai ** gufog* prototype ** ** 1 1/29/98 4:00p Atai * * 1 1/16/98 4:29p Atai * create glide 3 src * * 11 1/07/98 11:18a Atai * remove GrMipMapInfo and GrGC.mm_table in glide3 * * 10 1/06/98 6:47p Atai * undo grSplash and remove gu routines * * 9 1/05/98 6:04p Atai * move 3df gu related data structure from glide.h to glideutl.h * * 8 12/18/97 2:13p Peter * fogTable cataclysm * * 7 12/15/97 5:52p Atai * disable obsolete glide2 api for glide3 * * 6 8/14/97 5:32p Pgj * remove dead code per GMT * * 5 6/12/97 5:19p Pgj * Fix bug 578 * * 4 3/05/97 9:36p Jdt * Removed guFbWriteRegion added guEncodeRLE16 * * 3 1/16/97 3:45p Dow * Embedded fn protos in ifndef FX_GLIDE_NO_FUNC_PROTO */ /* Glide Utility routines */ #ifndef __GLIDEUTL_H__ #define __GLIDEUTL_H__ #ifdef __cplusplus extern "C" { #endif /* ** 3DF texture file structs */ typedef struct { FxU32 width, height; int small_lod, large_lod; GrAspectRatio_t aspect_ratio; GrTextureFormat_t format; } Gu3dfHeader; typedef struct { FxU8 yRGB[16]; FxI16 iRGB[4][3]; FxI16 qRGB[4][3]; FxU32 packed_data[12]; } GuNccTable; typedef struct { FxU32 data[256]; } GuTexPalette; typedef union { GuNccTable nccTable; GuTexPalette palette; } GuTexTable; typedef struct { Gu3dfHeader header; GuTexTable table; void *data; FxU32 mem_required; /* memory required for mip map in bytes. */ } Gu3dfInfo; #ifndef FX_GLIDE_NO_FUNC_PROTO /* ** Gamma functions */ FX_ENTRY void FX_CALL guGammaCorrectionRGB( FxFloat red, FxFloat green, FxFloat blue ); /* ** fog stuff */ FX_ENTRY float FX_CALL guFogTableIndexToW( int i ); FX_ENTRY void FX_CALL guFogGenerateExp( GrFog_t *fogtable, float density ); FX_ENTRY void FX_CALL guFogGenerateExp2( GrFog_t *fogtable, float density ); FX_ENTRY void FX_CALL guFogGenerateLinear(GrFog_t *fogtable, float nearZ, float farZ ); /* ** hi-level texture manipulation tools. */ FX_ENTRY FxBool FX_CALL gu3dfGetInfo( const char *filename, Gu3dfInfo *info ); FX_ENTRY FxBool FX_CALL gu3dfLoad( const char *filename, Gu3dfInfo *data ); #endif /* FX_GLIDE_NO_FUNC_PROTO */ #ifdef __cplusplus } #endif #endif /* __GLIDEUTL_H__ */ ================================================ FILE: Include/glu.h ================================================ /* ** License Applicability. Except to the extent portions of this file are ** made subject to an alternative license as permitted in the SGI Free ** Software License B, Version 1.1 (the "License"), the contents of this ** file are subject only to the provisions of the License. You may not use ** this file except in compliance with the License. You may obtain a copy ** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600 ** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at: ** ** http://oss.sgi.com/projects/FreeB ** ** Note that, as provided in the License, the Software is distributed on an ** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS ** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND ** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A ** PARTICULAR PURPOSE, AND NON-INFRINGEMENT. ** ** Original Code. The Original Code is: OpenGL Sample Implementation, ** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics, ** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc. ** Copyright in any portions created by third parties is as indicated ** elsewhere herein. All Rights Reserved. ** ** Additional Notice Provisions: This software was created using the ** OpenGL(R) version 1.2.1 Sample Implementation published by SGI, but has ** not been independently verified as being compliant with the OpenGL(R) ** version 1.2.1 Specification. */ #ifndef __glu_h__ #define __glu_h__ #define _GLU_H #if __GNUC__ >= 3 #pragma GCC system_header #endif #include /* for wchar_t */ #include #ifdef __cplusplus extern "C" { #endif /*************************************************************/ /* Boolean */ #define GLU_FALSE 0 #define GLU_TRUE 1 /* Version */ #define GLU_VERSION_1_1 1 #define GLU_VERSION_1_2 1 /* StringName */ #define GLU_VERSION 100800 #define GLU_EXTENSIONS 100801 /* ErrorCode */ #define GLU_INVALID_ENUM 100900 #define GLU_INVALID_VALUE 100901 #define GLU_OUT_OF_MEMORY 100902 #define GLU_INVALID_OPERATION 100904 /* NurbsDisplay */ /* GLU_FILL */ #define GLU_OUTLINE_POLYGON 100240 #define GLU_OUTLINE_PATCH 100241 /* NurbsError */ #define GLU_NURBS_ERROR1 100251 #define GLU_NURBS_ERROR2 100252 #define GLU_NURBS_ERROR3 100253 #define GLU_NURBS_ERROR4 100254 #define GLU_NURBS_ERROR5 100255 #define GLU_NURBS_ERROR6 100256 #define GLU_NURBS_ERROR7 100257 #define GLU_NURBS_ERROR8 100258 #define GLU_NURBS_ERROR9 100259 #define GLU_NURBS_ERROR10 100260 #define GLU_NURBS_ERROR11 100261 #define GLU_NURBS_ERROR12 100262 #define GLU_NURBS_ERROR13 100263 #define GLU_NURBS_ERROR14 100264 #define GLU_NURBS_ERROR15 100265 #define GLU_NURBS_ERROR16 100266 #define GLU_NURBS_ERROR17 100267 #define GLU_NURBS_ERROR18 100268 #define GLU_NURBS_ERROR19 100269 #define GLU_NURBS_ERROR20 100270 #define GLU_NURBS_ERROR21 100271 #define GLU_NURBS_ERROR22 100272 #define GLU_NURBS_ERROR23 100273 #define GLU_NURBS_ERROR24 100274 #define GLU_NURBS_ERROR25 100275 #define GLU_NURBS_ERROR26 100276 #define GLU_NURBS_ERROR27 100277 #define GLU_NURBS_ERROR28 100278 #define GLU_NURBS_ERROR29 100279 #define GLU_NURBS_ERROR30 100280 #define GLU_NURBS_ERROR31 100281 #define GLU_NURBS_ERROR32 100282 #define GLU_NURBS_ERROR33 100283 #define GLU_NURBS_ERROR34 100284 #define GLU_NURBS_ERROR35 100285 #define GLU_NURBS_ERROR36 100286 #define GLU_NURBS_ERROR37 100287 /* NurbsProperty */ #define GLU_AUTO_LOAD_MATRIX 100200 #define GLU_CULLING 100201 #define GLU_SAMPLING_TOLERANCE 100203 #define GLU_DISPLAY_MODE 100204 #define GLU_PARAMETRIC_TOLERANCE 100202 #define GLU_SAMPLING_METHOD 100205 #define GLU_U_STEP 100206 #define GLU_V_STEP 100207 /* NurbsSampling */ #define GLU_PATH_LENGTH 100215 #define GLU_PARAMETRIC_ERROR 100216 #define GLU_DOMAIN_DISTANCE 100217 /* NurbsTrim */ #define GLU_MAP1_TRIM_2 100210 #define GLU_MAP1_TRIM_3 100211 /* QuadricDrawStyle */ #define GLU_POINT 100010 #define GLU_LINE 100011 #define GLU_FILL 100012 #define GLU_SILHOUETTE 100013 /* QuadricCallback */ #define GLU_ERROR 100103 /* QuadricNormal */ #define GLU_SMOOTH 100000 #define GLU_FLAT 100001 #define GLU_NONE 100002 /* QuadricOrientation */ #define GLU_OUTSIDE 100020 #define GLU_INSIDE 100021 /* TessCallback */ #define GLU_TESS_BEGIN 100100 #define GLU_BEGIN 100100 #define GLU_TESS_VERTEX 100101 #define GLU_VERTEX 100101 #define GLU_TESS_END 100102 #define GLU_END 100102 #define GLU_TESS_ERROR 100103 #define GLU_TESS_EDGE_FLAG 100104 #define GLU_EDGE_FLAG 100104 #define GLU_TESS_COMBINE 100105 #define GLU_TESS_BEGIN_DATA 100106 #define GLU_TESS_VERTEX_DATA 100107 #define GLU_TESS_END_DATA 100108 #define GLU_TESS_ERROR_DATA 100109 #define GLU_TESS_EDGE_FLAG_DATA 100110 #define GLU_TESS_COMBINE_DATA 100111 /* TessContour */ #define GLU_CW 100120 #define GLU_CCW 100121 #define GLU_INTERIOR 100122 #define GLU_EXTERIOR 100123 #define GLU_UNKNOWN 100124 /* TessProperty */ #define GLU_TESS_WINDING_RULE 100140 #define GLU_TESS_BOUNDARY_ONLY 100141 #define GLU_TESS_TOLERANCE 100142 /* TessError */ #define GLU_TESS_ERROR1 100151 #define GLU_TESS_ERROR2 100152 #define GLU_TESS_ERROR3 100153 #define GLU_TESS_ERROR4 100154 #define GLU_TESS_ERROR5 100155 #define GLU_TESS_ERROR6 100156 #define GLU_TESS_ERROR7 100157 #define GLU_TESS_ERROR8 100158 #define GLU_TESS_MISSING_BEGIN_POLYGON 100151 #define GLU_TESS_MISSING_BEGIN_CONTOUR 100152 #define GLU_TESS_MISSING_END_POLYGON 100153 #define GLU_TESS_MISSING_END_CONTOUR 100154 #define GLU_TESS_COORD_TOO_LARGE 100155 #define GLU_TESS_NEED_COMBINE_CALLBACK 100156 /* TessWinding */ #define GLU_TESS_WINDING_ODD 100130 #define GLU_TESS_WINDING_NONZERO 100131 #define GLU_TESS_WINDING_POSITIVE 100132 #define GLU_TESS_WINDING_NEGATIVE 100133 #define GLU_TESS_WINDING_ABS_GEQ_TWO 100134 /* Obsolete. For compatibility with previous Sun OpenGL versions */ #define GLU_INCOMPATIBLE_GL_VERSION 100903 /*************************************************************/ #ifdef __cplusplus class GLUnurbs; class GLUquadric; class GLUtesselator; #else typedef struct GLUnurbs GLUnurbs; typedef struct GLUquadric GLUquadric; typedef struct GLUtesselator GLUtesselator; #endif typedef GLUnurbs GLUnurbsObj; typedef GLUquadric GLUquadricObj; typedef GLUtesselator GLUtesselatorObj; typedef GLUtesselator GLUtriangulatorObj; #define GLU_TESS_MAX_COORD 1.0e150 /* Internal convenience typedefs */ typedef void (APIENTRY *_GLUfuncptr)(); GLAPI void APIENTRY gluBeginCurve (GLUnurbs* nurb); GLAPI void APIENTRY gluBeginPolygon (GLUtesselator* tess); GLAPI void APIENTRY gluBeginSurface (GLUnurbs* nurb); GLAPI void APIENTRY gluBeginTrim (GLUnurbs* nurb); GLAPI GLint APIENTRY gluBuild1DMipmaps (GLenum target, GLint internalFormat, GLsizei width, GLenum format, GLenum type, const void *data); GLAPI GLint APIENTRY gluBuild2DMipmaps (GLenum target, GLint internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *data); GLAPI void APIENTRY gluCylinder (GLUquadric* quad, GLdouble base, GLdouble top, GLdouble height, GLint slices, GLint stacks); GLAPI void APIENTRY gluDeleteNurbsRenderer (GLUnurbs* nurb); GLAPI void APIENTRY gluDeleteQuadric (GLUquadric* quad); GLAPI void APIENTRY gluDeleteTess (GLUtesselator* tess); GLAPI void APIENTRY gluDisk (GLUquadric* quad, GLdouble inner, GLdouble outer, GLint slices, GLint loops); GLAPI void APIENTRY gluEndCurve (GLUnurbs* nurb); GLAPI void APIENTRY gluEndPolygon (GLUtesselator* tess); GLAPI void APIENTRY gluEndSurface (GLUnurbs* nurb); GLAPI void APIENTRY gluEndTrim (GLUnurbs* nurb); GLAPI const GLubyte * APIENTRY gluErrorString (GLenum error); GLAPI const wchar_t * APIENTRY gluErrorUnicodeStringEXT (GLenum error); GLAPI void APIENTRY gluGetNurbsProperty (GLUnurbs* nurb, GLenum property, GLfloat* data); GLAPI const GLubyte * APIENTRY gluGetString (GLenum name); GLAPI void APIENTRY gluGetTessProperty (GLUtesselator* tess, GLenum which, GLdouble* data); GLAPI void APIENTRY gluLoadSamplingMatrices (GLUnurbs* nurb, const GLfloat *model, const GLfloat *perspective, const GLint *view); GLAPI void APIENTRY gluLookAt (GLdouble eyeX, GLdouble eyeY, GLdouble eyeZ, GLdouble centerX, GLdouble centerY, GLdouble centerZ, GLdouble upX, GLdouble upY, GLdouble upZ); GLAPI GLUnurbs* APIENTRY gluNewNurbsRenderer (void); GLAPI GLUquadric* APIENTRY gluNewQuadric (void); GLAPI GLUtesselator* APIENTRY gluNewTess (void); GLAPI void APIENTRY gluNextContour (GLUtesselator* tess, GLenum type); GLAPI void APIENTRY gluNurbsCallback (GLUnurbs* nurb, GLenum which, _GLUfuncptr CallBackFunc); GLAPI void APIENTRY gluNurbsCurve (GLUnurbs* nurb, GLint knotCount, GLfloat *knots, GLint stride, GLfloat *control, GLint order, GLenum type); GLAPI void APIENTRY gluNurbsProperty (GLUnurbs* nurb, GLenum property, GLfloat value); GLAPI void APIENTRY gluNurbsSurface (GLUnurbs* nurb, GLint sKnotCount, GLfloat* sKnots, GLint tKnotCount, GLfloat* tKnots, GLint sStride, GLint tStride, GLfloat* control, GLint sOrder, GLint tOrder, GLenum type); GLAPI void APIENTRY gluOrtho2D (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top); GLAPI void APIENTRY gluPartialDisk (GLUquadric* quad, GLdouble inner, GLdouble outer, GLint slices, GLint loops, GLdouble start, GLdouble sweep); GLAPI void APIENTRY gluPerspective (GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar); GLAPI void APIENTRY gluPickMatrix (GLdouble x, GLdouble y, GLdouble delX, GLdouble delY, GLint *viewport); GLAPI GLint APIENTRY gluProject (GLdouble objX, GLdouble objY, GLdouble objZ, const GLdouble *model, const GLdouble *proj, const GLint *view, GLdouble* winX, GLdouble* winY, GLdouble* winZ); GLAPI void APIENTRY gluPwlCurve (GLUnurbs* nurb, GLint count, GLfloat* data, GLint stride, GLenum type); GLAPI void APIENTRY gluQuadricCallback (GLUquadric* quad, GLenum which, _GLUfuncptr CallBackFunc); GLAPI void APIENTRY gluQuadricDrawStyle (GLUquadric* quad, GLenum draw); GLAPI void APIENTRY gluQuadricNormals (GLUquadric* quad, GLenum normal); GLAPI void APIENTRY gluQuadricOrientation (GLUquadric* quad, GLenum orientation); GLAPI void APIENTRY gluQuadricTexture (GLUquadric* quad, GLboolean texture); GLAPI GLint APIENTRY gluScaleImage (GLenum format, GLsizei wIn, GLsizei hIn, GLenum typeIn, const void *dataIn, GLsizei wOut, GLsizei hOut, GLenum typeOut, GLvoid* dataOut); GLAPI void APIENTRY gluSphere (GLUquadric* quad, GLdouble radius, GLint slices, GLint stacks); GLAPI void APIENTRY gluTessBeginContour (GLUtesselator* tess); GLAPI void APIENTRY gluTessBeginPolygon (GLUtesselator* tess, GLvoid* data); GLAPI void APIENTRY gluTessCallback (GLUtesselator* tess, GLenum which, _GLUfuncptr CallBackFunc); GLAPI void APIENTRY gluTessEndContour (GLUtesselator* tess); GLAPI void APIENTRY gluTessEndPolygon (GLUtesselator* tess); GLAPI void APIENTRY gluTessNormal (GLUtesselator* tess, GLdouble valueX, GLdouble valueY, GLdouble valueZ); GLAPI void APIENTRY gluTessProperty (GLUtesselator* tess, GLenum which, GLdouble data); GLAPI void APIENTRY gluTessVertex (GLUtesselator* tess, GLdouble *location, GLvoid* data); GLAPI GLint APIENTRY gluUnProject (GLdouble winX, GLdouble winY, GLdouble winZ, const GLdouble *model, const GLdouble *proj, const GLint *view, GLdouble* objX, GLdouble* objY, GLdouble* objZ); GLAPI GLint APIENTRY gluUnProject4 (GLdouble winX, GLdouble winY, GLdouble winZ, GLdouble clipW, const GLdouble *model, const GLdouble *proj, const GLint *view, GLdouble nearVal, GLdouble farVal, GLdouble* objX, GLdouble* objY, GLdouble* objZ, GLdouble* objW); #ifdef UNICODE #define gluErrorStringWIN gluErrorUnicodeStringEXT #else #define gluErrorStringWIN gluErrorString #endif #ifdef __cplusplus } #endif #endif /* __glu_h__ */ ================================================ FILE: Include/qmixer.h ================================================ // // QMixer for Windows and Macintosh. // Copyright (c) 1995-1998 QSound Labs, Inc. All Rights Reserved. // Version 4.13, July 26, 1998. // // Based on Microsoft's WaveMix API. // Copyright (c) 1993, 1994 Microsoft Corporation. All Rights Reserved. // #ifndef QMIXER_H #define QMIXER_H #if !defined(_QMIXIMP) #define _QMIXIMP __declspec(dllimport) #endif DECLARE_HANDLE(HQMIXER); // // Constants for qprocessing // #define Q_PAN_MIN 0 #define Q_PAN_MAX 60 #define Q_PAN_DEFAULT 15 #define Q_VOLUME_DEFAULT 10000 // // Flags for channel functions. // #define QMIX_ALL 0x0001 // apply to all channels #define QMIX_NOREMIX 0x0002 // don't remix #define QMIX_CONTROL_NOREMIX 0x0004 // don't remix typedef struct QSVECTOR { float x; // meters float y; // meters float z; // meters } QSVECTOR, *LPQSVECTOR; typedef struct QSPOLAR { float azimuth; // degrees float range; // meters float elevation; // degrees } QSPOLAR, *LPQSPOLAR; #ifdef __cplusplus extern "C" { #endif typedef struct QMIXINFO { DWORD dwSize; DWORD dwMajorVersion; DWORD dwMinorVersion; DWORD dwBuildNumber; } QMIXINFO, FAR* LPQMIXINFO; _QMIXIMP DWORD WINAPI QSWaveMixGetInfoEx( LPQMIXINFO lpInfo ); // // Error handling functions. // typedef UINT QMIX_RESULT; _QMIXIMP QMIX_RESULT WINAPI QSWaveMixGetLastError( void ); _QMIXIMP MMRESULT WINAPI QSWaveMixGetErrorText( QMIX_RESULT qmrError, LPSTR pszText, UINT cchText ); // // Initialization functions. // _QMIXIMP HQMIXER WINAPI QSWaveMixInit( void ); #define QMIX_CONFIG_USEPRIMARY 0x0001 #define QMIX_CONFIG_NOTHREAD 0x0002 #define QMIX_CONFIG_PLAYSILENCE 0x0004 #define QMIX_CONFIG_LEFTCOORDS 0x0008 #define QMIX_CONFIG_RIGHTCOORDS 0x0000 #define QMIX_CONFIG_GLOBALROLLOFF 0x0010 #define QMIX_CONFIG_OUTPUT_DETECT 0 #define QMIX_CONFIG_OUTPUT_WAVEOUT 1 #define QMIX_CONFIG_OUTPUT_DIRECTSOUND 2 #define QMIX_CONFIG_MATH_DETECT 0 #define QMIX_CONFIG_MATH_INTEGER 1 #define QMIX_CONFIG_MATH_FLOAT 2 #define QMIX_CONFIG_MATH_MMX 3 typedef struct QMIXCONFIG { DWORD dwSize; DWORD dwFlags; DWORD dwSamplingRate; // 11025, 22050, or 44100 Hz; if 0 uses 22050 LPVOID lpIDirectSound; const GUID FAR* lpGuid; int iChannels; // if 0, uses default of 8 int iOutput; // if 0, uses best output device int iLatency; // (in ms) if 0, uses default for output device int iMath; // style of math HWND hwnd; // handle used when initializing DirectSound // (if 0, QMixer will find main window) int iChannels3dHw; // number of 3d hardware channels int iChannels3dQS; // number of 3d QSound software channels int iChannels3dSw; // number of 3d software channels int iChannels2dHw; // number of 2d hardware channels int iChannels2dQS; // number of 2d QSound software channels int iChannels2dSw; // number of 2d software channels } QMIXCONFIG, FAR* LPQMIXCONFIG; _QMIXIMP HQMIXER WINAPI QSWaveMixInitEx( LPQMIXCONFIG lpConfig ); // // Choose between speakers or headphones. // #define QMIX_SPEAKERS_STEREO 0 #define QMIX_SPEAKERS_HEADPHONES 1 #define QMIX_SPEAKERS_MONO 2 #define QMIX_SPEAKERS_QUAD 3 _QMIXIMP MMRESULT WINAPI QSWaveMixSetSpeakerPlacement( HQMIXER hQMixer, int placement ); _QMIXIMP MMRESULT WINAPI QSWaveMixGetSpeakerPlacement( HQMIXER hQMixer, LPDWORD lpdwPlacement ); // // The following function turns on and off various options // in the mixer. Turning off features can save CPU cycles. // #define QMIX_OPTIONS_REAR 1 // improved rear effect #define QMIX_OPTIONS_CROSSOVER 2 // improved frequency response #define QMIX_OPTIONS_FLIPOUTPUT 4 // flip output channels #define QMIX_OPTIONS_DOPPLER 8 // calculate listener velocity using position updates #define QMIX_OPTIONS_ALL 0xffffffff _QMIXIMP MMRESULT WINAPI QSWaveMixSetOptions( HQMIXER hQMixer, DWORD dwFlags, DWORD dwMask ); _QMIXIMP MMRESULT WINAPI QSWaveMixGetOptions( HQMIXER hQMixer, LPDWORD lpdwFlags ); _QMIXIMP MMRESULT WINAPI QSWaveMixSetMixerOption( HQMIXER hQMixer, DWORD dwFlags, LPVOID lpvOptions ); // // QSWaveMixOpenChannel flags // #define QMIX_OPENSINGLE 0 // open the single channel specified by iChannel #define QMIX_OPENALL 1 // opens all the channels, iChannel ignored #define QMIX_OPENCOUNT 2 // open iChannel Channels (eg. if iChannel = 4 will create channels 0-3) #define QMIX_OPENAVAILABLE 3 // open the first unopened channel, and return channel number _QMIXIMP MMRESULT WINAPI QSWaveMixOpenChannel( HQMIXER hQMixer, int iChannel, DWORD dwFlags ); // // Comprehensive channel parameters. Used in the functions // - QSWaveMixGetChannelParams // - QSWaveMixSetChannelParams // - QSWaveMixCalculateChannelParams // - QSWaveMixFindChannel // - QSWaveMixPlayEx // // The first set of parameters shouldn't be modified, the second set // can be altered for QSWaveMixSetChannelParams, and the third set // are calculated by QMixer. // typedef struct QMIX_CHANNEL_PARAMS { DWORD dwSize; // size of this structure DWORD dwChannelType; // combination of QMIX_CHANNELTYPE_ flags LPWAVEFORMATEX lpwfxFormat; // channel format (overrides default mixer output) DWORD dwMixerFlags; // reserved QSVECTOR vPosition; // 3d position (Cartesian coordinates) QSVECTOR vVelocity; // 3d velocity (Cartesian coordinates) QSVECTOR vOrientation; // 3d orientation (Cartesian coordinates) float flInnerConeAngle; // inner cone angle (degrees) float flOuterConeAngle; // outer cone angle (degrees) float flOuterConeAtten; // attenuation outside cone (db) float flMinDistance; // minimum distance (m) float flMaxDistance; // maximum distance (m) float flRolloff; // rolloff factor (0..10, default=1.0) float flVolume; // scale LONG lFrequency; // playback frequency LONG lPanRate; // time in which a change is completed (ms) LONG lPriority; // user-defined priority DWORD dwModes; // combination of QSWaveMixEnableChannel flags long unused[16]; // reserved for future expansion (set to zero) LONG lTimePlaying; // current time playing current sound (ms) LONG lTimeRemaining; // current time left to play (ms) float flDistance; // current distance to listener (m) float flAzimuth; // current azimuth (degrees) float flElevation; // current elevation (degrees) float flConeScale; // amount that volume is scaled for cone effect float flRolloffScale; // amount that volume is scaled for rolloff effect float flAppliedVolume; // volume applied to sound, including rolloff & cone effects (scale) float flDopplerSpeedup; // speedup due to Doppler shift QSVECTOR vHeadPosition; // position relative to listener (left-handed coordinates) QSVECTOR vHeadVelocity; // velocity relative to listener (left-handed coordinates) } QMIX_CHANNEL_PARAMS; _QMIXIMP MMRESULT WINAPI QSWaveMixGetChannelParams( HQMIXER hQMixer, int iChannel, QMIX_CHANNEL_PARAMS* params ); _QMIXIMP MMRESULT WINAPI QSWaveMixSetChannelParams( HQMIXER hQMixer, int iChannel, DWORD dwFlags, const QMIX_CHANNEL_PARAMS* params ); _QMIXIMP MMRESULT WINAPI QSWaveMixCalculateChannelParams( HQMIXER hQMixer, QMIX_CHANNEL_PARAMS* params, DWORD dwFlags ); // // Channel types. These flags are used in: // QSWaveMixConfigureChannel, // QSWaveMixFindChannel. // They also appear in the dwChannelType field in QMIX_CHANNEL_PARAMS. // #define QMIX_CHANNELTYPE_QSOUND 0x00010000 // uses QSound software mixer #define QMIX_CHANNELTYPE_STREAMING 0x00020000 // uses hardware streaming DirectSoundBuffer #define QMIX_CHANNELTYPE_STATIC 0x00040000 // uses hardware static DirectSoundBuffer #define QMIX_CHANNELTYPE_SOFTWARE 0x00080000 // uses software DirectSoundBuffer #define QMIX_CHANNELTYPE_DSOUND \ (QMIX_CHANNELTYPE_STREAMING|QMIX_CHANNELTYPE_STATIC|QMIX_CHANNELTYPE_SOFTWARE) #define QMIX_CHANNELTYPE_ANYMIXER 0x00ff0000 #define QMIX_CHANNELTYPE_2D 0x01000000 // stereo only #define QMIX_CHANNELTYPE_3D 0x02000000 // supports full 3d features #define QMIX_CHANNELTYPE_ANYFEATURE 0x7f000000 #define QMIX_CHANNELTYPE_ALL (QMIX_CHANNELTYPE_ANYMIXER|QMIX_CHANNELTYPE_ANYFEATURE) _QMIXIMP MMRESULT WINAPI QSWaveMixConfigureChannel( HQMIXER hQMixer, int iChannel, DWORD dwFlags, // type of channel LPCWAVEFORMATEX format, // format of channel (optional) LPVOID lpvOptions // options (reserved, set to zero) ); // // Find a channel using one of the QMIX_FINDCHANNEL_ priority schemes. // // The type of channel can be restricted to one of the types given by // a combination of the QMIX_CHANNELTYPE_ flags. // // Normally the channel will be excluded from subsequent calls to // QSWaveMixFindChannel until a sound is played on the channel. This is // to allow the setting up of several sounds to be played at the same // instant. This reservation can be disabled by setting the // QMIX_FINDCHANNEL_NORESERVE flag. // #define QMIX_FINDCHANNEL_SORTMETHOD 0x0000000f // mask for sort method #define QMIX_FINDCHANNEL_BEGINTIME 0x00000000 // sort by time from beginning (least-recently used) #define QMIX_FINDCHANNEL_ENDTIME 0x00000001 // sort by time to end (most-recently available) #define QMIX_FINDCHANNEL_VOLUME 0x00000002 // sort by applied volume #define QMIX_FINDCHANNEL_DISTANCE 0x00000003 // sort by distance from listener #define QMIX_FINDCHANNEL_PRIORITY 0x00000004 // sort by user priority #define QMIX_FINDCHANNEL_TOPLAY 0x00000000 // pick a playing or ready (idle) channel for playing another #define QMIX_FINDCHANNEL_TOPAUSE 0x00000010 // pick a playing channel for pausing #define QMIX_FINDCHANNEL_TORESTART 0x00000020 // pick a paused channel for restarting #define QMIX_FINDCHANNEL_FORMAT 0x00000080 // channel must match lpParams->lpwfxFormat #define QMIX_FINDCHANNEL_NORESERVE 0x80000000 // don't exclude from subsequent searches #define QMIX_FINDCHANNEL_LRU QMIX_FINDCHANNEL_BEGINTIME #define QMIX_FINDCHANNEL_MRA QMIX_FINDCHANNEL_ENDTIME _QMIXIMP int WINAPI QSWaveMixFindChannel( HQMIXER hQMixer, DWORD dwFlags, const QMIX_CHANNEL_PARAMS* lpParams // compare with these parameters ); // // Turn on QMixer's dynamic scheduling. The lpChannelTypes array gives the // channel type (one of QMIX_CHANNELTYPE_ANYMIXER and one of // QMIX_CHANNELTYPE_ANYFEATURE) and the maximum number of desired channels of // that type that should play at any time. A count of -1 channels specifies // that as many channels as possible should be played. An entry with // dwChannelType ends the list. If lpChannelTypes is null, the current type // settings are used. If QMIX_PRIORITIZE_NONE is used, scheduling is turned // off. // typedef struct QMIX_CHANNELTYPES { DWORD dwChannelType; // type of channel int iMaxChannels; // maximum number of channels of that type to play } QMIX_CHANNELTYPES, *LPQMIX_CHANNELTYPES; #define QMIX_PRIORITIZE_NONE 0x0000000f _QMIXIMP MMRESULT WINAPI QSWaveMixPrioritizeChannels( HQMIXER hQMixer, LPQMIX_CHANNELTYPES lpChannelTypes, DWORD dwFlags, LPVOID lpvParams ); // // Structure describing wave data; returned by QSWaveMixOpenWave and // QSWaveMixOpenWaveEx. // #define MAXFILENAME 15 typedef struct MIXWAVE { PCMWAVEFORMAT pcm; // data format WAVEHDR wh; // location and length of data char szWaveFilename[MAXFILENAME+1]; // truncated version of name LPWAVEFORMATEX pwf; // data format; needed for MSACM wave files #if defined(MACINTOSH) CmpSoundHeader format; // Mac version of sound info #endif } MIXWAVE, FAR* LPMIXWAVE; typedef const MIXWAVE FAR* LPCMIXWAVE; // Input streaming callback function. Return TRUE to continue to play, return // FALSE to stop playing. typedef BOOL (CALLBACK *LPQMIXINPUTCALLBACK)(void* buffer, DWORD bytes, void* user); // // QSWaveMixOpenWave and QSWaveMixOpenWaveEx flags. // #define QMIX_FILE 0x0001 // load from file #define QMIX_RESOURCE 0x0002 // load from resource #define QMIX_MEMORY 0x0004 // load using MMIOINFO supplied by user #define QMIX_RESIDENT 0x0008 // use memory-resident data #define QMIX_FILESTREAM 0x0010 // stream from file #define QMIX_INPUTSTREAM 0x0011 // stream from input buffer #define QMIX_FILESPEC 0x0012 // Macintosh file specification typedef union { const char* FileName; // Name of RIFF file (e.g. "*.wav") with wave. struct { // Wave stored in resource. const char* Name; // Name of resource. HINSTANCE hInstance; // Handle of module where resource is located. } Resource; LPMMIOINFO lpMmioInfo; // Read from file already opened by mmioOpen. struct { // Memory resident wave. LPCWAVEFORMATEX Format; // Format of wave; can be compressed. HPSTR Data; // Pointer to memory resident audio samples. DWORD Bytes; // Length of Data, in bytes. DWORD Samples; // Number of wave samples; needed if compressed. DWORD Tag; // User-defined id. } Resident; struct { // Input streaming using user callback. LPCWAVEFORMATEX Format; // Format of data (must be uncompressed). DWORD BlockBytes; // Preferred length of block. LPQMIXINPUTCALLBACK Callback; // User-defined callback function. LPVOID User; // Data to be provided to callback. DWORD Tag; // User-defined id. } Stream; #if defined(MACINTOSH) FSSpec* FileSpec; // Macintosh file specifier. #endif } QMIXWAVEPARAMS, *LPQMIXWAVEPARAMS; _QMIXIMP LPMIXWAVE WINAPI QSWaveMixOpenWaveEx( HQMIXER hQMixer, LPQMIXWAVEPARAMS lpWaveParams, DWORD dwFlags ); _QMIXIMP MMRESULT WINAPI QSWaveMixActivate( HQMIXER hQMixer, BOOL fActivate ); // // Options for dwFlags parameter in QSWaveMixPlayEx. // // Note: the QMIX_USELRUCHANNEL flag has two functions. When QMIX_CLEARQUEUE // is also set, the channel that has been playing the longest (least-recently- // used) is cleared and the buffer played. When QMIX_QUEUEWAVE is set, the // channel that will first finish playing will be selected and the buffer // queued to play. Of course, if an unused channel is found, it will be // selected instead. If QMIX_WAIT has not been specified, then the channel // number will be returned in the iChannel field. // #define QMIX_QUEUEWAVE 0x0000 // queue on channel #define QMIX_CLEARQUEUE 0x0001 // clear queue on channel #define QMIX_USELRUCHANNEL 0x0002 // see note above #define QMIX_HIPRIORITY 0x0004 #define QMIX_HIGHPRIORITY QMIX_HIPRIORITY #define QMIX_WAIT 0x0008 // queue to be played with other sounds #define QMIX_IMMEDIATE 0x0020 // apply volume/pan changes without interpolation #define QMIX_PLAY_SETEVENT 0x0100 // call SetEvent((HANDLE)callback) on completion #define QMIX_PLAY_PULSEEVENT 0x0200 // call PulseEvent((HANDLE)callback) on completion #define QMIX_PLAY_NOTIFYSTOP 0x0400 // do callback even when stopping or flushing sound typedef void (CALLBACK *LPQMIXDONECALLBACK)(int iChannel, LPMIXWAVE lpWave, DWORD dwUser); typedef struct QMIXPLAYPARAMS { DWORD dwSize; // this must be set LPMIXWAVE lpImage; // additional preprocessed audio for high performance HWND hwndNotify; // if set, WOM_OPEN and WOM_DONE notification messages sent here LPQMIXDONECALLBACK callback; DWORD dwUser; // user data accompanying callback LONG lStart; LONG lStartLoop; LONG lEndLoop; LONG lEnd; const QMIX_CHANNEL_PARAMS* lpChannelParams; // initialize with these parameters } QMIXPLAYPARAMS, *LPQMIXPLAYPARAMS; _QMIXIMP MMRESULT WINAPI QSWaveMixPlayEx( HQMIXER hQMixer, // the mixer handle int iChannel, // channel number to be played on DWORD dwFlags, LPMIXWAVE lpMixWave, // sound to be played int iLoops, // number of loops to be played (-1 = forever) LPQMIXPLAYPARAMS lpParams // if NULL, defaults will be used ); // // Functions for controlling channels. // // The flag QMIX_WAIT can be used in the dwFlags argument of the // channel parameter functions to defer the use of the new parameter // until the next sound is played with QSWaveMixPlayEx. This allows // us synchronize the changing of channel parameters with the beginning // of a sound. // // The flag QMIX_USEONCE can be used to use the parameter only for the // remainder of the current sound; afterwards the parameter reverts // back to the channel's defaults. If no sound is playing, the // parameter is used for the entire duration of the next sound. // If both QMIX_USEONCE and QMIX_WAIT are used, then the property takes // effect for the entire duration of the following sound. // // These flags can be used with the following functions: // - QSWaveMixEnableChannel // - QSWaveMixSetChannelParams // - QSWaveMixSetChannelPriority // - QSWaveMixSetDistanceMapping // - QSWaveMixSetFrequency // - QSWaveMixSetPan // - QSWaveMixSetPanRate // - QSWaveMixSetPolarPosition // - QSWaveMixSetPosition // - QSWaveMixSetSourceCone // - QSWaveMixSetSourceCone2 // - QSWaveMixSetSourcePosition // - QSWaveMixSetSourceVelocity // - QSWaveMixSetVolume // #define QMIX_USEONCE 0x10 // settings are temporary // // Set the amount of time, in milliseconds, to effect a change in // a channel property (e.g. volume, position). Non-zero values smooth // out changes. // // Use QSWaveMixSetPanRate(hQMixer, iChannel, QMIX_WAIT|QMIX_USEONCE, 0) // to implement sudden changes for the next sound without losing the // smoothing function. Using QMIX_IMMEDIATE with QSWaveMixPlayEx also // causes immediate changes while preserving subsequent pan interpolations. // _QMIXIMP MMRESULT WINAPI QSWaveMixSetPanRate( HQMIXER hQMixer, int iChannel, DWORD dwFlags, DWORD dwRate ); // // The pan value can be set to values from 0 to 60: // 0 = full left, // 15 = straight ahead (mono), // 30 = full right, // 45 = behind. // _QMIXIMP MMRESULT WINAPI QSWaveMixSetPan( HQMIXER hQMixer, int iChannel, DWORD dwFlags, int pan ); _QMIXIMP MMRESULT WINAPI QSWaveMixSetVolume( HQMIXER hQMixer, int iChannel, DWORD dwFlags, int volume ); _QMIXIMP MMRESULT WINAPI QSWaveMixSetPolarPosition( HQMIXER hQMixer, int iChannel, DWORD dwFlags, const QSPOLAR* lpQPosition ); _QMIXIMP MMRESULT WINAPI QSWaveMixSetFrequency( HQMIXER hQMixer, int iChannel, DWORD dwFlags, DWORD dwFrequency ); _QMIXIMP MMRESULT WINAPI QSWaveMixPauseChannel( HQMIXER hQMixer, int iChannel, DWORD dwFlags ); _QMIXIMP MMRESULT WINAPI QSWaveMixRestartChannel( HQMIXER hQMixer, int iChannel, DWORD dwFlags ); #define QMIX_STOP_FINISHLASTLOOP 0x1000 _QMIXIMP MMRESULT WINAPI QSWaveMixStopChannel( HQMIXER hQMixer, int iChannel, DWORD dwFlags ); // // QSWaveMixEnableChannel: if mode==0, use conventional, high-performance // stereo mixer. Non-zero modes imply some form of additional processing. // #define QMIX_CHANNEL_STEREO 0x0000 // perform stereo mixing #define QMIX_CHANNEL_QSOUND 0x0001 // perform QSound localization (default) #define QMIX_CHANNEL_DOPPLER 0x0002 // calculate velocity using position updates #define QMIX_CHANNEL_RANGE 0x0004 // do range effects #define QMIX_CHANNEL_ELEVATION 0x0008 // do elevation effects #define QMIX_CHANNEL_NODOPPLERPITCH 0x0010 // disable Doppler pitch shift for this channel #define QMIX_CHANNEL_PITCH_COPY 0x0000 // pitch shifting using copying (fastest) #define QMIX_CHANNEL_PITCH_LINEAR 0x0100 // pitch shifting using linear interpolation (better but slower) #define QMIX_CHANNEL_PITCH_SPLINE 0x0200 // pitch shifting using spline interpolation (better yet, but much slower) #define QMIX_CHANNEL_PITCH_FILTER 0x0300 // pitch shifting using FIR filter (best, but slowest) #define QMIX_CHANNEL_PITCH_MASK 0x0700 // bits reserved for pitch types _QMIXIMP MMRESULT WINAPI QSWaveMixEnableChannel( HQMIXER hQMixer, int iChannel, DWORD dwFlags, int mode ); // // QSWaveMixEnable is equivalent to // QSWaveMixEnableChannel(hQMixer, 0, QMIX_ALL, mode). // _QMIXIMP MMRESULT WINAPI QSWaveMixEnable( HQMIXER hQMixer, int mode ); _QMIXIMP MMRESULT WINAPI QSWaveMixSetChannelPriority( HQMIXER hQMixer, int iChannel, LONG lPriority, DWORD dwFlags ); // // Status functions. // // // Return a pointer to the internal DirectSound object. Handy for creating // additional secondary buffers (but only if QMIX_CONFIG_USEPRIMARY was not // set in QSWaveMixConfigureInit). // _QMIXIMP MMRESULT WINAPI QSWaveMixGetDirectSound( HQMIXER hQMixer, LPVOID FAR* lplpIDirectSound ); // // Return a pointer to the internal DirectSoundBuffer object. // _QMIXIMP MMRESULT WINAPI QSWaveMixGetDirectSoundBuffer( HQMIXER hQMixer, int iChannel, LPVOID FAR* lplpIDirectSoundBuffer ); // // Return TRUE if there are no more buffers playing or queued on the channel. // This is an alternative to waiting for a WOM_DONE message to be sent to a // window. // _QMIXIMP BOOL WINAPI QSWaveMixIsChannelDone( HQMIXER hQMixer, int iChannel ); #define QMIX_CHANNELSTATUS_OPEN 0x01 // channel is open #define QMIX_CHANNELSTATUS_QUEUED 0x02 // channel has a play request queued on it #define QMIX_CHANNELSTATUS_PAUSED 0x04 // channel is paused #define QMIX_CHANNELSTATUS_PLAYING 0x08 // channel is playing a sound #define QMIX_CHANNELSTATUS_RESERVED 0x10 // channel is reserved from FindChannel for playing _QMIXIMP DWORD WINAPI QSWaveMixGetChannelStatus( HQMIXER hQMixer, int iChannel ); #define QMIX_POSITION_BYTES 0 #define QMIX_POSITION_SAMPLES 1 #define QMIX_POSITION_MS 2 _QMIXIMP MMRESULT WINAPI QSWaveMixGetPlayPosition( HQMIXER hQMixer, int iChannel, LPMIXWAVE* lplpWave, LPDWORD lpdwPosition, DWORD dwFlags ); _QMIXIMP MMRESULT WINAPI QSWaveMixGetPan( HQMIXER hQMixer, int iChannel, LPDWORD lpdwPan ); _QMIXIMP MMRESULT WINAPI QSWaveMixGetVolume( HQMIXER hQMixer, int iChannel, LPDWORD lpdwVolume ); _QMIXIMP MMRESULT WINAPI QSWaveMixGetPanRate( HQMIXER hQMixer, int iChannel, LPDWORD lpdwRate ); _QMIXIMP MMRESULT WINAPI QSWaveMixGetFrequency( HQMIXER hQMixer, int iChannel, LPDWORD lpdwFrequency ); _QMIXIMP MMRESULT WINAPI QSWaveMixGetPolarPosition( HQMIXER hQMixer, int iChannel, QSPOLAR* lpQPosition ); //********************************************************************** // Interface for 3d Cartesian Coordinate system. // // All measurements are in S.I. units, e.g. coordinates and room size are // meters, velocity and speed of sound in m/s. // _QMIXIMP MMRESULT WINAPI QSWaveMixSetRoomSize( HQMIXER hQMixer, float roomSize, DWORD dwFlags ); _QMIXIMP MMRESULT WINAPI QSWaveMixSetSpeedOfSound( HQMIXER hQMixer, float speed, DWORD dwFlags ); typedef struct QMIX_DISTANCES { UINT cbSize; // size of structure (needed for future versions) float minDistance; // sounds are at full volume if closer than this float maxDistance; // sounds are muted if further away than this float scale; // relative amount to adjust rolloff by } QMIX_DISTANCES, *LPQMIX_DISTANCES; _QMIXIMP MMRESULT WINAPI QSWaveMixSetDistanceMapping( HQMIXER hQMixer, int iChannel, DWORD dwFlags, const LPQMIX_DISTANCES lpDistances ); _QMIXIMP MMRESULT WINAPI QSWaveMixGetRoomSize( HQMIXER hQMixer, float* pfRoomSize ); _QMIXIMP MMRESULT WINAPI QSWaveMixGetSpeedOfSound( HQMIXER hQMixer, float* pfSpeed ); _QMIXIMP MMRESULT WINAPI QSWaveMixGetDistanceMapping( HQMIXER hQMixer, int iChannel, LPQMIX_DISTANCES lpDistances ); // // Listener parameters. // _QMIXIMP MMRESULT WINAPI QSWaveMixSetListenerPosition( HQMIXER hQMixer, const QSVECTOR* position, DWORD dwFlags ); _QMIXIMP MMRESULT WINAPI QSWaveMixSetListenerOrientation( HQMIXER hQMixer, const QSVECTOR* direction, const QSVECTOR* up, DWORD dwFlags ); // // Velocity is used solely to set Doppler shift. // _QMIXIMP MMRESULT WINAPI QSWaveMixSetListenerVelocity( HQMIXER hQMixer, const QSVECTOR* velocity, DWORD dwFlags ); _QMIXIMP MMRESULT WINAPI QSWaveMixSetListenerRolloff( HQMIXER hQMixer, float rolloff, DWORD dwFlags ); _QMIXIMP MMRESULT WINAPI QSWaveMixGetListenerPosition( HQMIXER hQMixer, QSVECTOR* position ); _QMIXIMP MMRESULT WINAPI QSWaveMixGetListenerOrientation( HQMIXER hQMixer, QSVECTOR* direction, QSVECTOR* up ); _QMIXIMP MMRESULT WINAPI QSWaveMixGetListenerVelocity( HQMIXER hQMixer, QSVECTOR* velocity ); _QMIXIMP MMRESULT WINAPI QSWaveMixSetSourcePosition( HQMIXER hQMixer, int iChannel, DWORD dwFlags, const QSVECTOR* position ); _QMIXIMP MMRESULT WINAPI QSWaveMixSetSourceVelocity( HQMIXER hQMixer, int iChannel, DWORD dwFlags, const QSVECTOR* velocity ); // // Listener will hear full volume if inside source's cone, given by // orientation and angle. If outside, source will be attenuated by // additional attenuation. // _QMIXIMP MMRESULT WINAPI QSWaveMixSetSourceCone( HQMIXER hQMixer, int iChannel, DWORD dwFlags, const QSVECTOR* orientation, float coneAngle, float ambient_db ); _QMIXIMP MMRESULT WINAPI QSWaveMixSetSourceCone2( HQMIXER hQMixer, int iChannel, DWORD dwFlags, const QSVECTOR* orientation, float innerConeAngle, float outerConeAngle, float ambient_db ); _QMIXIMP MMRESULT WINAPI QSWaveMixGetSourcePosition( HQMIXER hQMixer, int iChannel, QSVECTOR* position ); _QMIXIMP MMRESULT WINAPI QSWaveMixGetSourceVelocity( HQMIXER hQMixer, int iChannel, QSVECTOR* velocity ); _QMIXIMP MMRESULT WINAPI QSWaveMixGetSourceCone( HQMIXER hQMixer, int iChannel, QSVECTOR* orientation, float* pfAngle, float* ambient_db ); _QMIXIMP MMRESULT WINAPI QSWaveMixGetSourceCone2( HQMIXER hQMixer, int iChannel, QSVECTOR* orientation, float* pfInnerAngle, float* pfOuterAngle, float* ambient_db ); //********************************************************************** // Profiling functions. // typedef struct QMIX_PROFILE { DWORD dwCalls; // number of times mixer thread was called DWORD dwMixing; // time spent mixing DWORD dwAudioDriver; // time spent calling audio driver (e.g. DirectSound) DWORD dwTotal; // total time in mixer thread DWORD dwDuration; // time during test } QMIX_PROFILE, *LPQMIX_PROFILE; _QMIXIMP MMRESULT WINAPI QSWaveMixStartProfile( HQMIXER hQMixer ); _QMIXIMP MMRESULT WINAPI QSWaveMixStopProfile( HQMIXER hQMixer, LPQMIX_PROFILE lpProfile, UINT cbProfile ); //********************************************************************** // Call QSWaveMixPump to force more mixing. Essential if mixer was // configured with QMIX_CONFIG_NOTHREAD. // _QMIXIMP void WINAPI QSWaveMixPump( void); //********************************************************************** // Functions to shut down mixer. // // Note that, in versions 2.10 and later, that QSWaveMixFreeWave can be // called with a null hQMixer if QSWaveMixCloseSession has been called. // _QMIXIMP MMRESULT WINAPI QSWaveMixFlushChannel( HQMIXER hQMixer, int iChannel, DWORD dwFlags ); _QMIXIMP MMRESULT WINAPI QSWaveMixCloseChannel( HQMIXER hQMixer, int iChannel, DWORD dwFlags ); _QMIXIMP MMRESULT WINAPI QSWaveMixFreeWave( HQMIXER hQMixer, LPMIXWAVE lpMixWave ); _QMIXIMP MMRESULT WINAPI QSWaveMixCloseSession( HQMIXER hQMixer ); // // Diagnostic codes available from QSWaveMixGetLastError. Equivalent strings // can be recalled using QSWaveMixGetErrorText. // #define ERROR_QMIX_OK 0 // OK, no error. #define ERROR_QMIX_CONFIGMISSING 1 // Can't find configuration (.ini) file. #define ERROR_QMIX_MIXERHANDLE 2 // Mixer handle is null or invalid. #define ERROR_QMIX_RESULTUNKNOWN 3 // Unknown error code. #define ERROR_QMIX_MEMORY 4 // Out of memory. #define ERROR_QMIX_EXCEPTIONUNKNOWN 5 // Unknown error. #define ERROR_QMIX_WAVEOUTNONE 6 // No wave output devices. #define ERROR_QMIX_DLLNAME 7 // Name of QMixer library is unavailable or invalid. #define ERROR_QMIX_WAVEOUTINCOMPATIBLE 8 // The wave output device is incompatible with QMixer. #define ERROR_QMIX_ACTIVATED 9 // Can't activate two QMixer sessions. #define ERROR_QMIX_CHANNELINVALID 10 // Channel number is invalid. #define ERROR_QMIX_OPENCHANNELFLAG 11 // Invalid flag for opening channel. #define ERROR_QMIX_PANINVALID 12 // Invalid pan value. #define ERROR_QMIX_NOTACTIVATED 13 // Mixer has not been activated. #define ERROR_QMIX_CHANNELUNAVAILABLE 14 // No channels are available for playing this sound. #define ERROR_QMIX_WAVERESOURCE 15 // Couldn't find or load resource containing wave data. #define ERROR_QMIX_WAVEOPEN 16 // Couldn't open wave file. #define ERROR_QMIX_WAVEFORMAT 17 // Format of wave data is corrupted. #define ERROR_QMIX_ACMINVALID 18 // The ACM wave format couldn't be translated. #define ERROR_QMIX_DSOUNDMISSING 19 // The DirectSound library dsound.dll could not be found. #define ERROR_QMIX_DSOUNDCREATEADDR 20 // Could not find DirectSoundCreate function in dsound.dll. #define ERROR_QMIX_DSOUNDCREATE 21 // Couldn't create DirectSound object. #define ERROR_QMIX_DSOUNDCOOPERATIVE 22 // The cooperative level for DirectSound could not be set. #define ERROR_QMIX_DSOUNDCAPS 23 // Couldn't determine DirectSound capabilities. #define ERROR_QMIX_DSOUNDPRIMARY 24 // Couldn't create DirectSound primary buffer. #define ERROR_QMIX_DSOUNDPRIMARYCAPS 25 // Couldn't determine DirectSound primary buffer capabilities. #define ERROR_QMIX_DSOUNDFORMAT 26 // Couldn't set format of DirectSound output. #define ERROR_QMIX_DSOUNDSECONDARY 27 // Couldn't create DirectSound secondary buffer. #define ERROR_QMIX_DSOUNDPLAY 28 // Couldn't play DirectSound buffer. #define ERROR_QMIX_WAVEOUTOPEN 29 // Wave output error while opening device. #define ERROR_QMIX_WAVEOUTWRITE 30 // Wave output error while writing to device. #define ERROR_QMIX_WAVEOUTCLOSE 31 // Wave output error while closing device. #define ERROR_QMIX_PARAMPTR 32 // Parameter points to invalid location. #define ERROR_QMIX_NOTIMPLEMENTED 33 // Feature is not implemented. #define ERROR_QMIX_DSOUNDNODRIVER 34 // No DirectSound driver is available for use. #define ERROR_QMIX_SMALLPRIMARY 35 // DirectSound primary buffer is too small. #define ERROR_QMIX_UNKNOWNFORMAT 36 // Unknown sound file format. #define ERROR_QMIX_DRIVENOTREADY 37 // Drive is not ready. #define ERROR_QMIX_READERROR 38 // Error reading sound file. #define ERROR_QMIX_UNKNOWNAIFC 39 // Unknown format of AIFF-C file. #define ERROR_QMIX_MACRESOURCE 40 // Unable to obtain sampled sound data from resource. #define ERROR_QMIX_SCINVALID 41 // The sound data format couldn't be translated. #define ERROR_QMIX_MACSOUNDCAPS 42 // Couldn't retrieve Macintosh sound output capabilities. #define ERROR_QMIX_MACCHANNEL 43 // Couldn't create sound channel. #define ERROR_QMIX_MACCLEAR 44 // Couldn't clear sound channel. #define ERROR_QMIX_MACPAUSE 45 // Couldn't pause sound channel. #define ERROR_QMIX_MACQUEUE 46 // Couldn't queue data on sound channel. #define ERROR_QMIX_MACRESUME 47 // Couldn't resume paused sound channel. #define ERROR_QMIX_CATCH 48 // Caught unknown error. #define ERROR_QMIX_HOLD 49 // Unable to prevent virtual memory from being paged. #define ERROR_QMIX_INVALIDPARAM 50 // Invalid parameter. #define ERROR_QMIX_DSB_STATUS 51 // Couldn't get DirectSound buffer status. #define ERROR_QMIX_DSB_POSITION 52 // Couldn't get DirectSound buffer position. #define ERROR_QMIX_DSOUNDMIXPRIMARY 53 // Can't mix into primary buffer (DirectSound driver is probably emulated). /* set to byte packing so Win16 and Win32 structures will be the same */ #pragma pack(1) typedef struct WAVEMIXINFO { WORD wSize; BYTE bVersionMajor; BYTE bVersionMinor; char szDate[12]; /* Mmm dd yyyy */ DWORD dwFormats; /* see waveOutGetDevCaps (wavemix requires synchronous device) */ } WAVEMIXINFO, *PWAVEMIXINFO, FAR * LPWAVEMIXINFO; _QMIXIMP WORD WINAPI QSWaveMixGetInfo( LPWAVEMIXINFO lpWaveMixInfo ); // // Constants, structure, and declaration for obsolete configuration function. // #define WMIX_CONFIG_CHANNELS 0x0001 #define WMIX_CONFIG_SAMPLINGRATE 0x0002 #define WMIX_CONFIG_DIRECTSOUND 0x0004 #define WMIX_CONFIG_USEPRIMARY 0x0008 #define WMIX_CONFIG_INPUTCHANNELS 0x0010 #define WMIX_CONFIG_OUTPUT 0x0020 #define WMIX_CONFIG_LATENCY 0x0040 #define WMIX_CONFIG_NOTHREAD 0x0080 #define WMIX_OUTPUT_WAVEOUT 0 #define WMIX_OUTPUT_DIRECTSOUND 1 #define WMIX_OUTPUT_NATIVEAUDIO 2 // not implemented typedef struct MIXCONFIG { WORD wSize; DWORD dwFlags; WORD wChannels; // 1=MONO, 2=STEREO WORD wSamplingRate; // 11=11025, 22=22050, 44=44100 Hz LPVOID lpIDirectSound; WORD wInputChannels; WORD wOutput; WORD wLatency; } MIXCONFIG, *PMIXCONFIG, FAR * LPMIXCONFIG; _QMIXIMP HQMIXER WINAPI QSWaveMixConfigureInit( LPMIXCONFIG lpConfig ); // // Obsolete wave opening function. // // // Structure for opening waves that are already residing in memory. // Note that the dwSamples parameter is a new field needed for using // compressed data. To keep backwards compatibility, it is only used // when QSWaveMixOpenWave is used with the QMIX_RESIDENT_COMPRESSED // parameter. // #define QMIX_RESIDENT_COMPRESSED 0x0009 // QMIX_RESIDENT with valid dwSample parameter typedef struct QMEMRESIDENT { PCMWAVEFORMAT* pcm; // format; LPWAVEFORMATEX works here too HPSTR lpData; // pointer to memory resident audio samples DWORD dwDataSize; // length of data, in bytes WORD tag; // user-defined id (used in MIXWAVE.szWaveFilename) DWORD dwSamples; // number of samples in compressed wave } QMEMRESIDENT, * PQMEMRESIDENT, FAR * LPQMEMRESIDENT; // // Structure for a wave that will get audio from user callback function. // #if defined(_WIN32) typedef void (__cdecl* LPQMIXSTREAMCALLBACK)(void* buffer, DWORD bytes, void* user); #endif #if defined(MACINTOSH) typedef void (* LPQMIXSTREAMCALLBACK)(void* buffer, DWORD bytes, void* user); #endif typedef struct QINPUTSTREAM { PCMWAVEFORMAT* pcm; // format of input data: must be in PCM DWORD dwBlockLength; // preferred block length (bytes) LPQMIXSTREAMCALLBACK callback; // callback called when more data needed void *user; // user data sent to callback WORD tag; } QINPUTSTREAM, *PQINPUTSTREAM, FAR* LPQINPUTSTREAM; // // Open wave file. The szWaveFilename parameter is one of the // following: // - name of file (QMIX_FILE and QMIX_FILESTREAM flags), // - name of resource (also need to set hInst) (QMIX_RESOURCE flag), // - LPQMEMRESIDENT pointer cast to LPSTR (QMIX_RESIDENT flag), // - LPQINPUTSTREAM pointer cast to LPSTR (QMIX_INPUTSTREAM flag), // - LPMMIOINFO pointer cast to LPSTR (QMIX_MEMORY flag), // - FSSpec* pointer cast to LPSTR (on Macintosh) (QMIX_FILESPEC flag), // _QMIXIMP LPMIXWAVE WINAPI QSWaveMixOpenWave( HQMIXER hQMixer, LPSTR szWaveFilename, // see notes above HINSTANCE hInst, // only required when QMIX_RESOURCE flag set DWORD dwFlags ); typedef struct QPOSITION { int azimuth; // degrees; 0 is straight ahead, 90 is to the right int range; // 0 to 32767; 0 is closest int elevation; // -90 to 90 degrees } QPOSITION, FAR* LPQPOSITION; _QMIXIMP MMRESULT WINAPI QSWaveMixSetPosition( HQMIXER hQMixer, int iChannel, DWORD dwFlags, const QPOSITION* lpQPosition ); _QMIXIMP MMRESULT WINAPI QSWaveMixGetPosition( HQMIXER hQMixer, int iChannel, LPQPOSITION lpQPosition ); // // Obsolete play function. // #define QMIX_USEPOSITION 0x10 // use the MIXPLAYPARAMS.position field typedef struct MIXPLAYPARAMS { WORD wSize; // this must be set HQMIXER hMixSession; // value returned by QSWaveMixInit or QSWaveMixConfigureInit int iChannel; // channel number LPMIXWAVE lpMixWave; // pointer returned by QSWaveMixOpenWave HWND hWndNotify; // if set, WOM_OPEN and WOM_DONE notification messages sent here DWORD dwFlags; WORD wLoops; // 0xFFFF means loop forever int qVolume; // initial volume; set to -1 to use default int qPanPos; // initial pan position; set to -1 to use default LPMIXWAVE lpImage; // set to preprocessed data for high performance QPOSITION position; // initial position (used only if QMIX_USEPOSITION set) } MIXPLAYPARAMS, * PMIXPLAYPARAM, FAR* LPMIXPLAYPARAMS; _QMIXIMP MMRESULT WINAPI QSWaveMixPlay( LPMIXPLAYPARAMS lpMixPlayParams ); /* return to default packing */ #pragma pack() // // Obsolete constants. // #define WMIX_ALL QMIX_ALL #define WMIX_NOREMIX QMIX_NOREMIX #define WMIX_CONTROL_NOREMIX QMIX_CONTROL_NOREMIX #define WMIX_OPENSINGLE QMIX_OPENSINGLE #define WMIX_OPENALL QMIX_OPENALL #define WMIX_OPENCOUNT QMIX_OPENCOUNT #define WMIX_OPENAVAILABLE QMIX_OPENAVAILABLE #define WMIX_FILE QMIX_FILE #define WMIX_RESOURCE QMIX_RESOURCE #define WMIX_MEMORY QMIX_MEMORY #define WMIX_RESIDENT QMIX_RESIDENT #define WMIX_FILESTREAM QMIX_FILESTREAM #define WMIX_INPUTSTREAM QMIX_INPUTSTREAM #define WMIX_QUEUEWAVE QMIX_QUEUEWAVE #define WMIX_CLEARQUEUE QMIX_CLEARQUEUE #define WMIX_USELRUCHANNEL QMIX_USELRUCHANNEL #define WMIX_HIPRIORITY QMIX_HIPRIORITY #define WMIX_HIGHPRIORITY QMIX_HIGHPRIORITY #define WMIX_WAIT QMIX_WAIT #define WMIX_USEPOSITION QMIX_USEPOSITION #ifdef __cplusplus } #endif #endif ================================================ FILE: Include/sst1init.h ================================================ /*-*-c++-*-*/ /* ** Copyright (c) 1997, 3Dfx Interactive, Inc. ** All Rights Reserved. ** ** This is UNPUBLISHED PROPRIETARY SOURCE CODE of 3Dfx Interactive, Inc.; ** the contents of this file may not be disclosed to third parties, copied or ** duplicated in any form, in whole or in part, without the prior written ** permission of 3Dfx Interactive, Inc. ** ** RESTRICTED RIGHTS LEGEND: ** Use, duplication or disclosure by the Government is subject to restrictions ** as set forth in subdivision (c)(1)(ii) of the Rights in Technical Data ** and Computer Software clause at DFARS 252.227-7013, and/or in similar or ** successor clauses in the FAR, DOD or NASA FAR Supplement. Unpublished - ** rights reserved under the Copyright Laws of the United States. ** ** ** $Revision: 62 $ ** $Date: 7/24/98 1:38p $ ** */ #ifndef __SST1INIT_H__ #define __SST1INIT_H__ /* ** Copyright (c) 1996, 3Dfx Interactive, Inc. ** All Rights Reserved. ** ** This is UNPUBLISHED PROPRIETARY SOURCE CODE of 3Dfx Interactive, Inc.; ** the contents of this file may not be disclosed to third parties, copied or ** duplicated in any form, in whole or in part, without the prior written ** permission of 3Dfx Interactive, Inc. ** ** RESTRICTED RIGHTS LEGEND: ** Use, duplication or disclosure by the Government is subject to restrictions ** as set forth in subdivision (c)(1)(ii) of the Rights in Technical Data ** and Computer Software clause at DFARS 252.227-7013, and/or in similar or ** successor clauses in the FAR, DOD or NASA FAR Supplement. Unpublished - ** rights reserved under the Copyright Laws of the United States. ** ** $Revision: 62 $ ** $Date: 7/24/98 1:38p $ ** ** SST-1 Initialization routine protypes ** ** If all initialization routines are called, it is assumed they are called ** in the following order: ** 1. sst1InitMapBoard(); ** 2. sst1InitRegisters(); ** 3. sst1InitGamma(); ** 4. sst1InitVideoBuffers(); ** 5. sst1InitSli(); [Optional] ** 6. sst1InitCmdFifo(); ** ** sst1InitShutdown() is called at the end of an application to turn off ** the SST-1 graphics subsystem ** */ /* sst1init.h assumes "glide.h" and "sst.h" are already included */ /* Init code debug print routine */ #ifdef INIT_DOS /* Glide version... */ #define INIT_OUTPUT #define INIT_PRINTF(a) sst1InitPrintf a #define INIT_INFO(A) #endif #ifndef DIRECTX #undef GETENV #undef ATOI #undef ATOF #undef SSCANF #undef POW #define GETENV(A) sst1InitGetenv(A) #define ATOI(A) atoi(A) #define ATOF(A) atof(A) #define SSCANF( A, B, C ) sscanf( A, B, C ) #define POW( A, B ) pow( A, B ) #define FTOL( X ) ((FxU32)(X)) // Video resolution declarations #include "sst1vid.h" // Info Structure declaration #include "cvginfo.h" #else /* DIRECTX */ #include "ddglobal.h" #pragma optimize ("",off) /* ddglobal.h tuns this on for retail builds */ #undef INIT_PRINTF #undef INIT_INFO #undef GETENV #undef ATOI #undef ATOF #undef FTOL #undef ITOF_INV #undef SSCANF #undef POW /* #define INIT_PRINTF(a) */ #ifdef FXTRACE #define INIT_PRINTF DDPRINTF #else #define INIT_PRINTF 1 ? (void) 0 : (void) #endif #define INIT_INFO(A) #define GETENV(A) ddgetenv(A) #define ATOI(A) ddatoi(A) #define ATOF(A) ddatof(A) #define FTOL(A) ddftol(A) #define ITOF_INV(A) dd_itof_inv(A) #define SSCANF( A, B, C ) ddsscanf( A, B, C ) #define POW( A, B ) ddpow( A, B ) #endif /* DIRECTX */ /* Defines to writing to/reading from SST-1 */ #if 0 #define IGET(A) A #define ISET(A,D) A = (D) #else #define IGET(A) sst1InitRead32((FxU32 *) &(A)) #define ISET(A,D) sst1InitWrite32((FxU32 *) &(A), D) #endif /* ** P6 Fence ** ** Here's the stuff to do P6 Fencing. This is required for the ** certain things on the P6 */ #ifdef __cplusplus extern "C" { #endif #ifdef SST1INIT_ALLOCATE FxU32 p6FenceVar; #else extern FxU32 p6FenceVar; #endif #if defined(__WATCOMC__) void p6Fence(void); # pragma aux p6Fence = \ "xchg eax, p6FenceVar" \ modify [eax]; # define P6FENCE p6Fence() #elif defined(__MSC__) # define P6FENCE {_asm xchg eax, p6FenceVar} #elif defined(macintosh) && __POWERPC__ && defined(__MWERKS__) # define P6FENCE __eieio() #else # error "P6 Fencing in-line assembler code needs to be added for this compiler" #endif #ifdef __cplusplus } #endif #ifndef _FXPCI_H_ #include #endif #include /*--------------------------------------------------------*/ /* Following defines need to go in "cvgdefs.h" eventually */ #define SST_CMDFIFO_ADDR BIT(21) /*--------- SST PCI Configuration Command bits --------------*/ #define SST_PCIMEM_ACCESS_EN BIT(1) /*------- SST PCI Configuration Register defaults -----------*/ #define SST_PCI_INIT_ENABLE_DEFAULT 0x0 #define SST_PCI_BUS_SNOOP_DEFAULT 0x0 /*--- SST PCI Init Enable Configuration Register defaults ---*/ #define SST_SLI_OWNPCI SST_SCANLINE_SLV_OWNPCI #define SST_SLI_MASTER_OWNPCI 0x0 #define SST_SLI_SLAVE_OWNPCI SST_SCANLINE_SLV_OWNPCI #define SST_CHUCK_REVISION_ID_SHIFT 12 #define SST_CHUCK_REVISION_ID (0xF< #endif #ifdef __cplusplus extern "C" { #endif #ifdef SST1INIT_ALLOCATE FILE *sst1InitMsgFile = stdout; #else extern FILE *sst1InitMsgFile; #endif #ifdef __cplusplus } #endif #endif /* Maximum number of SST-1 boards supported in system */ #define SST1INIT_MAX_BOARDS 16 /* Maximum number of read pushes in "voodoo.ini" file */ #define DACRDWR_MAX_PUSH 16 #ifdef __cplusplus extern "C" { #endif #ifdef SST1INIT_ALLOCATE static char headersIdent[] = "@#%Voodoo2 InitHeaders $Revision: 62 $"; FxBool sst1InitUseVoodooFile = FXFALSE; sst1InitEnvVarStruct *envVarsBase = (sst1InitEnvVarStruct *) NULL; sst1InitDacStruct *dacStructBase = (sst1InitDacStruct *) NULL; sst1InitDacStruct *iniDac = (sst1InitDacStruct *) NULL; sst1InitDacSetVideoStruct *iniVideo = (sst1InitDacSetVideoStruct *) NULL; sst1InitDacSetMemClkStruct *iniMemClk = (sst1InitDacSetMemClkStruct *) NULL; FxU32 iniStack[DACRDWR_MAX_PUSH]; int iniStackPtr = 0; sst1DeviceInfoStruct *sst1CurrentBoard; FxU32 sst1InitDeviceNumber; sst1DeviceInfoStruct sst1BoardInfo[SST1INIT_MAX_BOARDS]; FxU32 boardsInSystem; FxU32 boardsInSystemReally; FxU32 initIdleEnabled = 1; const PciRegister SST1_PCI_CFG_SCRATCH = { 0x50, 4, READ_WRITE }; const PciRegister SST1_PCI_SIPROCESS = { 0x54, 4, READ_WRITE }; #else extern FxBool sst1InitUseVoodooFile; extern sst1InitEnvVarStruct *envVarsBase; extern sst1InitDacStruct *dacStructBase; extern sst1InitDacStruct *iniDac; extern sst1InitDacSetVideoStruct *iniVideo; extern sst1InitDacSetMemClkStruct *iniMemClk; extern FxU32 iniStack[]; extern int iniStackPtr; extern sst1DeviceInfoStruct *sst1CurrentBoard; extern FxU32 sst1InitDeviceNumber; extern sst1DeviceInfoStruct sst1BoardInfo[SST1INIT_MAX_BOARDS]; extern FxU32 boardsInSystem; extern FxU32 boardsInSystemReally; extern FxU32 initIdleEnabled; extern PciRegister SST1_PCI_CFG_SCRATCH; extern PciRegister SST1_PCI_SIPROCESS; #endif /* SST1INIT_ALLOCATE */ #ifdef __3Dfx_PCI_CFG__ /* This is really ugly, but it makes us happy w/ the top of the tree * pci library which is happier than Gary's library. */ #define SST1_PCI_INIT_ENABLE PCI_SST1_INIT_ENABLE #define SST1_PCI_BUS_SNOOP0 PCI_SST1_BUS_SNOOP_0 #define SST1_PCI_BUS_SNOOP1 PCI_SST1_BUS_SNOOP_1 #define SST1_PCI_CFG_STATUS PCI_SST1_CFG_STATUS #else /* !__3Dfx_PCI_CFG__ */ #define SST1_PCI_BUS_SNOOP0 SST1_PCI_BUS_SNOOP_0 #define SST1_PCI_BUS_SNOOP1 SST1_PCI_BUS_SNOOP_1 #endif /* !__3Dfx_PCI_CFG__ */ #ifdef __cplusplus } #endif #ifdef SST1INIT_VIDEO_ALLOCATE /* SST1INIT_VIDEO_ALLOCATE is only #defined in video.c Define useful clock and video timings Clocks generated are follows: Clock Freq. (MHz) = [14.318 * (clkTiming_M+2)] / [(clkTiming_N+2) * (2^clkTiming_P)] Solving for clkTiming_M yields: clkTiming_M = [ [(Clock Freq (Mhz)) * (clkTiming_N+2) * (2^clkTiming_P)] / 14.318 ] - 2 NOTE: [14.318 * (clkTiming_M+2)] / (clkTiming_N+2) should be between 120 and 240 NOTE: Max. M is 127 NOTE: Max. N is 31 NOTE: Max. P is 3 NOTE: Max. L is 15 NOTE: Max. IB is 15 */ /* H3D video timing structures */ #ifdef H3D /* This guy's not used anywhere */ sst1VideoTimingStruct SST_VREZ_640X502_60 = { 96, /* hSyncOn */ 704, /* hSyncOff */ 2, /* vSyncOn */ 523, /* vSyncOff */ 38, /* hBackPorch */ 15, /* vBackPorch */ 640, /* xDimension */ 502, /* yDimension */ 60, /* refreshRate */ 0, /* miscCtrl */ 160, /* memOffset */ 20, /* tilesInX */ 25, /* vFifoThreshold */ FXTRUE, /* video16BPPIsOK */ FXTRUE, /* video24BPPIsOK */ 25.175F, /* clkFreq16bpp */ 50.350F /* clkFreq24bpp */ }; /* Line doubled 640x480...line doubling done externally */ sst1VideoTimingStruct SST_VREZ_640X960LD_60 = { 45, /* hSyncOn */ 785, /* hSyncOff */ 3, /* vSyncOn */ 1044, /* vSyncOff */ 100, /* hBackPorch */ 18, /* vBackPorch */ 640, /* xDimension */ 502, /* yDimension */ 60, /* refreshRate */ 0, /* miscCtrl */ 160, /* memOffset */ 20, /* tilesInX */ 23, /* vFifoThreshold */ FXTRUE, /* video16BPPIsOK */ FXTRUE, /* video24BPPIsOK */ 50.82F, /* clkFreq16bpp */ 101.64F /* clkFreq24bpp */ }; /* Full resolution 640x480... */ sst1VideoTimingStruct SST_VREZ_640X960_60 = { 45, /* hSyncOn */ 785, /* hSyncOff */ 3, /* vSyncOn */ 1044, /* vSyncOff */ 100, /* hBackPorch */ 18, /* vBackPorch */ 640, /* xDimension */ 1004, /* yDimension */ 60, /* refreshRate */ 0, /* miscCtrl */ 320, /* memOffset */ 20, /* tilesInX */ 23, /* vFifoThreshold */ FXTRUE, /* video16BPPIsOK */ FXTRUE, /* video24BPPIsOK */ 50.82F, /* clkFreq16bpp */ 101.64F /* clkFreq24bpp */ }; /* Line doubled 800x600...line doubling done externally */ sst1VideoTimingStruct SST_VREZ_800X1200LD_45 = { 63, /* hSyncOn */ 983, /* hSyncOff */ 3, /* vSyncOn */ 1242, /* vSyncOff */ 150, /* hBackPorch */ 27, /* vBackPorch */ 800, /* xDimension */ 608, /* yDimension */ 42, /* refreshRate */ 0, /* miscCtrl */ 247, /* memOffset */ 26, /* tilesInX */ 19, /* vFifoThreshold */ FXTRUE, /* video16BPPIsOK */ FXTRUE, /* video24BPPIsOK */ 56.25F, /* clkFreq16bpp */ 112.5F /* clkFreq24bpp */ }; sst1VideoTimingStruct SST_VREZ_800X630_60 = { 127, /* hSyncOn */ 927, /* hSyncOff */ 4, /* vSyncOn */ 656, /* vSyncOff */ 86, /* hBackPorch */ 23, /* vBackPorch */ 800, /* xDimension */ 630, /* yDimension */ 60, /* refreshRate */ 0, /* miscCtrl */ 260, /* memOffset */ 26, /* tilesInX */ 23, /* vFifoThreshold */ FXTRUE, /* video16BPPIsOK */ FXTRUE, /* video24BPPIsOK */ 40.0F, /* clkFreq16bpp */ 80.0F /* clkFreq24bpp */ }; /* Full res 800x600...so far, ain't nobody got enough memory */ sst1VideoTimingStruct SST_VREZ_800X1200_45 = { 63, /* hSyncOn */ 983, /* hSyncOff */ 3, /* vSyncOn */ 1244, /* vSyncOff */ 150, /* hBackPorch */ 27, /* vBackPorch */ 800, /* xDimension */ 1216, /* yDimension */ 42, /* refreshRate */ 0, /* miscCtrl */ 494, /* memOffset */ 26, /* tilesInX */ 19, /* vFifoThreshold */ FXTRUE, /* video16BPPIsOK */ FXTRUE, /* video24BPPIsOK */ 56.25F, /* clkFreq16bpp */ 112.5F /* clkFreq24bpp */ }; sst1VideoTimingStruct SST_VREZ_960X742_60 = { 103, /* hSyncOn */ 1151, /* hSyncOff */ 3, /* vSyncOn */ 765, /* vSyncOff */ 142, /* hBackPorch */ 22, /* vBackPorch */ 960, /* xDimension */ 742, /* yDimension */ 60, /* refreshRate */ 0, /* miscCtrl */ 360, /* memOffset */ 30, /* tilesInX */ 19, /* vFifoThreshold */ FXTRUE, /* video16BPPIsOK */ FXTRUE, /* video24BPPIsOK */ 56.219F, /* clkFreq16bpp */ 112.437F /* clkFreq24bpp */ }; #endif sst1VideoTimingStruct SST_VREZ_320X200_70 = { 96, /* hSyncOn */ 704, /* hSyncOff */ 2, /* vSyncOn */ 447, /* vSyncOff */ 48, /* hBackPorch */ 35, /* vBackPorch */ 320, /* xDimension */ 200, /* yDimension */ 70, /* refreshRate */ 0x3, /* miscCtrl */ 35, /* memOffset */ 10, /* tilesInX */ 25, /* vFifoThreshold */ FXTRUE, /* video16BPPIsOK */ FXTRUE, /* video24BPPIsOK */ 25.175F, /* clkFreq16bpp */ 50.350F /* clkFreq24bpp */ }; sst1VideoTimingStruct SST_VREZ_320X200_75 = { 99, /* hSyncOn */ 733, /* hSyncOff */ 3, /* vSyncOn */ 429, /* vSyncOff */ 52, /* hBackPorch */ 25, /* vBackPorch */ 320, /* xDimension */ 200, /* yDimension */ 75, /* refreshRate */ 0x3, /* miscCtrl */ 35, /* memOffset */ 10, /* tilesInX */ 25, /* vFifoThreshold */ FXTRUE, /* video16BPPIsOK */ FXTRUE, /* video24BPPIsOK */ 27.0F, /* clkFreq16bpp */ 54.0F /* clkFreq24bpp */ }; sst1VideoTimingStruct SST_VREZ_320X200_85 = { 63, /* hSyncOn */ 767, /* hSyncOff */ 3, /* vSyncOn */ 442, /* vSyncOff */ 94, /* hBackPorch */ 41, /* vBackPorch */ 320, /* xDimension */ 200, /* yDimension */ 85, /* refreshRate */ 0x3, /* miscCtrl */ 35, /* memOffset */ 10, /* tilesInX */ 23, /* vFifoThreshold */ FXTRUE, /* video16BPPIsOK */ FXTRUE, /* video24BPPIsOK */ 31.5F, /* clkFreq16bpp */ 63.0F /* clkFreq24bpp */ }; sst1VideoTimingStruct SST_VREZ_320X200_120 = { 67, /* hSyncOn */ 798, /* hSyncOff */ 3, /* vSyncOn */ 424, /* vSyncOff */ 94, /* hBackPorch */ 16, /* vBackPorch */ 320, /* xDimension */ 200, /* yDimension */ 120, /* refreshRate */ 0x3, /* miscCtrl */ 35, /* memOffset */ 10, /* tilesInX */ 23, /* vFifoThreshold */ FXTRUE, /* video16BPPIsOK */ FXTRUE, /* video24BPPIsOK */ 44.47F, /* clkFreq16bpp */ 88.94F /* clkFreq24bpp */ }; sst1VideoTimingStruct SST_VREZ_320X240_60 = { 96, /* hSyncOn */ 704, /* hSyncOff */ 2, /* vSyncOn */ 523, /* vSyncOff */ 38, /* hBackPorch */ 25, /* vBackPorch */ 320, /* xDimension */ 240, /* yDimension */ 60, /* refreshRate */ 0x3, /* miscCtrl */ 40, /* memOffset */ 10, /* tilesInX */ 25, /* vFifoThreshold */ FXTRUE, /* video16BPPIsOK */ FXTRUE, /* video24BPPIsOK */ 25.175F, /* clkFreq16bpp */ 50.350F /* clkFreq24bpp */ }; sst1VideoTimingStruct SST_VREZ_320X240_75 = { 63, /* hSyncOn */ 775, /* hSyncOff */ 3, /* vSyncOn */ 497, /* vSyncOff */ 118, /* hBackPorch */ 16, /* vBackPorch */ 320, /* xDimension */ 240, /* yDimension */ 75, /* refreshRate */ 0x3, /* miscCtrl */ 40, /* memOffset */ 10, /* tilesInX */ 25, /* vFifoThreshold */ FXTRUE, /* video16BPPIsOK */ FXTRUE, /* video24BPPIsOK */ 31.5F, /* clkFreq16bpp */ 63.0F /* clkFreq24bpp */ }; sst1VideoTimingStruct SST_VREZ_320X240_85 = { 55, /* hSyncOn */ 776, /* hSyncOff */ 3, /* vSyncOn */ 506, /* vSyncOff */ 78, /* hBackPorch */ 25, /* vBackPorch */ 320, /* xDimension */ 240, /* yDimension */ 85, /* refreshRate */ 0x3, /* miscCtrl */ 40, /* memOffset */ 10, /* tilesInX */ 23, /* vFifoThreshold */ FXTRUE, /* video16BPPIsOK */ FXTRUE, /* video24BPPIsOK */ 36.0F, /* clkFreq16bpp */ 72.0F /* clkFreq24bpp */ }; sst1VideoTimingStruct SST_VREZ_320X240_120 = { 45, /* hSyncOn */ 785, /* hSyncOff */ 3, /* vSyncOn */ 506, /* vSyncOff */ 100, /* hBackPorch */ 18, /* vBackPorch */ 320, /* xDimension */ 240, /* yDimension */ 120, /* refreshRate */ 0x3, /* miscCtrl */ 40, /* memOffset */ 10, /* tilesInX */ 23, /* vFifoThreshold */ FXTRUE, /* video16BPPIsOK */ FXTRUE, /* video24BPPIsOK */ 50.82F, /* clkFreq16bpp */ 101.64F /* clkFreq24bpp */ }; sst1VideoTimingStruct SST_VREZ_400X300_60 = { 39, /* hSyncOn */ 471, /* hSyncOff */ 3, /* vSyncOn */ 619, /* vSyncOff */ 54, /* hBackPorch */ 18, /* vBackPorch */ 400, /* xDimension */ 300, /* yDimension */ 60, /* refreshRate */ 0x2, /* miscCtrl */ 70, /* memOffset */ 14, /* tilesInX */ 23, /* vFifoThreshold */ FXTRUE, /* video16BPPIsOK */ FXTRUE, /* video24BPPIsOK */ 19.108F, /* clkFreq16bpp */ 38.216F /* clkFreq24bpp */ }; sst1VideoTimingStruct SST_VREZ_400X300_75 = { 39, /* hSyncOn */ 487, /* hSyncOff */ 3, /* vSyncOn */ 624, /* vSyncOff */ 62, /* hBackPorch */ 23, /* vBackPorch */ 400, /* xDimension */ 300, /* yDimension */ 75, /* refreshRate */ 0x2, /* miscCtrl */ 70, /* memOffset */ 14, /* tilesInX */ 23, /* vFifoThreshold */ FXTRUE, /* video16BPPIsOK */ FXTRUE, /* video24BPPIsOK */ 24.829F, /* clkFreq16bpp */ 49.658F /* clkFreq24bpp */ }; sst1VideoTimingStruct SST_VREZ_400X300_85 = { 39, /* hSyncOn */ 487, /* hSyncOff */ 3, /* vSyncOn */ 627, /* vSyncOff */ 62, /* hBackPorch */ 26, /* vBackPorch */ 400, /* xDimension */ 300, /* yDimension */ 85, /* refreshRate */ 0x2, /* miscCtrl */ 70, /* memOffset */ 14, /* tilesInX */ 23, /* vFifoThreshold */ FXTRUE, /* video16BPPIsOK */ FXTRUE, /* video24BPPIsOK */ 28.274F, /* clkFreq16bpp */ 56.548F /* clkFreq24bpp */ }; sst1VideoTimingStruct SST_VREZ_400X300_120 = { 39, /* hSyncOn */ 503, /* hSyncOff */ 3, /* vSyncOn */ 640, /* vSyncOff */ 70, /* hBackPorch */ 39, /* vBackPorch */ 400, /* xDimension */ 300, /* yDimension */ 120, /* refreshRate */ 0x2, /* miscCtrl */ 70, /* memOffset */ 14, /* tilesInX */ 23, /* vFifoThreshold */ FXTRUE, /* video16BPPIsOK */ FXTRUE, /* video24BPPIsOK */ 41.975F, /* clkFreq16bpp */ 83.950F /* clkFreq24bpp */ }; /* 512x256@60 only syncs to Arcade-style monitors */ sst1VideoTimingStruct SST_VREZ_512X256_60 = { 41, /* hSyncOn */ 626, /* hSyncOff */ 4, /* vSyncOn */ 286, /* vSyncOff */ 65, /* hBackPorch */ 24, /* vBackPorch */ 512, /* xDimension */ 256, /* yDimension */ 60, /* refreshRate */ 0, /* miscCtrl */ 64, /* memOffset */ 16, /* tilesInX */ 25, /* vFifoThreshold */ FXFALSE, /* video16BPPIsOK */ FXTRUE, /* video24BPPIsOK */ 23.334F, /* clkFreq16bpp */ 23.334F /* clkFreq24bpp */ }; #if 0 // For Arcade monitors... sst1VideoTimingStruct SST_VREZ_512X384_60 = { 23, /* hSyncOn */ 640, /* hSyncOff */ 3, /* vSyncOn */ 411, /* vSyncOff */ 90, /* hBackPorch */ 24, /* vBackPorch */ 512, /* xDimension */ 384, /* yDimension */ 60, /* refreshRate */ 0, /* miscCtrl */ 96, /* memOffset */ 16, /* tilesInX */ 23, /* vFifoThreshold */ FXFALSE, /* video16BPPIsOK */ FXTRUE, /* video24BPPIsOK */ 33.0F, /* clkFreq16bpp */ 33.0F /* clkFreq24bpp */ }; #else // For PC monitors... sst1VideoTimingStruct SST_VREZ_512X384_60 = { 55, /* hSyncOn */ 615, /* hSyncOff */ 3, /* vSyncOn */ 792, /* vSyncOff */ 78, /* hBackPorch */ 23, /* vBackPorch */ 512, /* xDimension */ 384, /* yDimension */ 60, /* refreshRate */ 0x2, /* miscCtrl */ 96, /* memOffset */ 16, /* tilesInX */ 23, /* vFifoThreshold */ FXTRUE, /* video16BPPIsOK */ FXTRUE, /* video24BPPIsOK */ 32.054F, /* clkFreq16bpp */ 64.108F /* clkFreq24bpp */ }; #endif sst1VideoTimingStruct SST_VREZ_512X384_72 = { 51, /* hSyncOn */ 591, /* hSyncOff */ 3, /* vSyncOn */ 430, /* vSyncOff */ 55, /* hBackPorch */ 25, /* vBackPorch */ 512, /* xDimension */ 384, /* yDimension */ 72, /* refreshRate */ 0, /* miscCtrl */ 96, /* memOffset */ 16, /* tilesInX */ 23, /* vFifoThreshold */ FXTRUE, /* video16BPPIsOK */ FXTRUE, /* video24BPPIsOK */ 20.093F, /* clkFreq16bpp */ 40.186F /* clkFreq24bpp */ }; sst1VideoTimingStruct SST_VREZ_512X384_75 = { 55, /* hSyncOn */ 631, /* hSyncOff */ 3, /* vSyncOn */ 799, /* vSyncOff */ 86, /* hBackPorch */ 30, /* vBackPorch */ 512, /* xDimension */ 384, /* yDimension */ 75, /* refreshRate */ 0x2, /* miscCtrl */ 96, /* memOffset */ 16, /* tilesInX */ 23, /* vFifoThreshold */ FXTRUE, /* video16BPPIsOK */ FXTRUE, /* video24BPPIsOK */ 41.383F, /* clkFreq16bpp */ 82.766F /* clkFreq24bpp */ }; sst1VideoTimingStruct SST_VREZ_512X384_75_NOSCANDOUBLE = { 47, /* hSyncOn */ 591, /* hSyncOff */ 3, /* vSyncOn */ 399, /* vSyncOff */ 62, /* hBackPorch */ 14, /* vBackPorch */ 512, /* xDimension */ 384, /* yDimension */ 75, /* refreshRate */ 0, /* miscCtrl */ 96, /* memOffset */ 16, /* tilesInX */ 23, /* vFifoThreshold */ FXTRUE, /* video16BPPIsOK */ FXTRUE, /* video24BPPIsOK */ 19.296F, /* clkFreq16bpp */ 38.592F /* clkFreq24bpp */ }; sst1VideoTimingStruct SST_VREZ_512X384_85 = { 55, /* hSyncOn */ 631, /* hSyncOff */ 3, /* vSyncOn */ 804, /* vSyncOff */ 86, /* hBackPorch */ 35, /* vBackPorch */ 512, /* xDimension */ 384, /* yDimension */ 85, /* refreshRate */ 0x2, /* miscCtrl */ 96, /* memOffset */ 16, /* tilesInX */ 23, /* vFifoThreshold */ FXTRUE, /* video16BPPIsOK */ FXTRUE, /* video24BPPIsOK */ 47.193F, /* clkFreq16bpp */ 94.386F /* clkFreq24bpp */ }; sst1VideoTimingStruct SST_VREZ_512X384_85_NOSCANDOUBLE = { 55, /* hSyncOn */ 599, /* hSyncOff */ 3, /* vSyncOn */ 401, /* vSyncOff */ 70, /* hBackPorch */ 16, /* vBackPorch */ 512, /* xDimension */ 384, /* yDimension */ 85, /* refreshRate */ 0, /* miscCtrl */ 96, /* memOffset */ 16, /* tilesInX */ 23, /* vFifoThreshold */ FXTRUE, /* video16BPPIsOK */ FXTRUE, /* video24BPPIsOK */ 22.527F, /* clkFreq16bpp */ 45.054F /* clkFreq24bpp */ }; sst1VideoTimingStruct SST_VREZ_512X384_120 = { 25, /* hSyncOn */ 650, /* hSyncOff */ 3, /* vSyncOn */ 409, /* vSyncOff */ 110, /* hBackPorch */ 25, /* vBackPorch */ 512, /* xDimension */ 384, /* yDimension */ 120, /* refreshRate */ 0, /* miscCtrl */ 96, /* memOffset */ 16, /* tilesInX */ 25, /* vFifoThreshold */ FXTRUE, /* video16BPPIsOK */ FXTRUE, /* video24BPPIsOK */ 33.5F, /* clkFreq16bpp */ 67.0F /* clkFreq24bpp */ }; /* Verified 10/21/96 */ sst1VideoTimingStruct SST_VREZ_640X400_70 = { 96, /* hSyncOn */ 704, /* hSyncOff */ 2, /* vSyncOn */ 447, /* vSyncOff */ 48, /* hBackPorch */ 35, /* vBackPorch */ 640, /* xDimension */ 400, /* yDimension */ 70, /* refreshRate */ 0, /* miscCtrl */ 130, /* memOffset */ 20, /* tilesInX */ 25, /* vFifoThreshold */ FXTRUE, /* video16BPPIsOK */ FXTRUE, /* video24BPPIsOK */ 25.175F, /* clkFreq16bpp */ 50.350F /* clkFreq24bpp */ }; /* Verified 10/21/96 */ sst1VideoTimingStruct SST_VREZ_640X400_75 = { 99, /* hSyncOn */ 733, /* hSyncOff */ 3, /* vSyncOn */ 429, /* vSyncOff */ 52, /* hBackPorch */ 25, /* vBackPorch */ 640, /* xDimension */ 400, /* yDimension */ 75, /* refreshRate */ 0, /* miscCtrl */ 130, /* memOffset */ 20, /* tilesInX */ 25, /* vFifoThreshold */ FXTRUE, /* video16BPPIsOK */ FXTRUE, /* video24BPPIsOK */ 27.0F, /* clkFreq16bpp */ 54.0F /* clkFreq24bpp */ }; /* VESA Standard */ /* Verified 10/21/96 */ sst1VideoTimingStruct SST_VREZ_640X400_85 = { 63, /* hSyncOn */ 767, /* hSyncOff */ 3, /* vSyncOn */ 442, /* vSyncOff */ 94, /* hBackPorch */ 41, /* vBackPorch */ 640, /* xDimension */ 400, /* yDimension */ 85, /* refreshRate */ 0, /* miscCtrl */ 130, /* memOffset */ 20, /* tilesInX */ 23, /* vFifoThreshold */ FXTRUE, /* video16BPPIsOK */ FXTRUE, /* video24BPPIsOK */ 31.5F, /* clkFreq16bpp */ 63.0F /* clkFreq24bpp */ }; /* Verified 10/21/96 */ sst1VideoTimingStruct SST_VREZ_640X400_120 = { 67, /* hSyncOn */ 798, /* hSyncOff */ 3, /* vSyncOn */ 424, /* vSyncOff */ 94, /* hBackPorch */ 16, /* vBackPorch */ 640, /* xDimension */ 400, /* yDimension */ 120, /* refreshRate */ 0, /* miscCtrl */ 130, /* memOffset */ 20, /* tilesInX */ 23, /* vFifoThreshold */ FXTRUE, /* video16BPPIsOK */ FXTRUE, /* video24BPPIsOK */ 44.47F, /* clkFreq16bpp */ 88.94F /* clkFreq24bpp */ }; /* VESA Standard */ /* Verified 10/21/96 */ sst1VideoTimingStruct SST_VREZ_640X480_60 = { 96, /* hSyncOn */ 704, /* hSyncOff */ 2, /* vSyncOn */ 523, /* vSyncOff */ 38, /* hBackPorch */ 25, /* vBackPorch */ 640, /* xDimension */ 480, /* yDimension */ 60, /* refreshRate */ 0, /* miscCtrl */ 150, /* memOffset */ 20, /* tilesInX */ 25, /* vFifoThreshold */ FXTRUE, /* video16BPPIsOK */ FXTRUE, /* video24BPPIsOK */ 25.175F, /* clkFreq16bpp */ 50.350F /* clkFreq24bpp */ }; /* VESA Standard */ /* Verified 10/21/96 */ sst1VideoTimingStruct SST_VREZ_640X480_75 = { 63, /* hSyncOn */ 775, /* hSyncOff */ 3, /* vSyncOn */ 497, /* vSyncOff */ 118, /* hBackPorch */ 16, /* vBackPorch */ 640, /* xDimension */ 480, /* yDimension */ 75, /* refreshRate */ 0, /* miscCtrl */ 150, /* memOffset */ 20, /* tilesInX */ 25, /* vFifoThreshold */ FXTRUE, /* video16BPPIsOK */ FXTRUE, /* video24BPPIsOK */ 31.5F, /* clkFreq16bpp */ 63.0F /* clkFreq24bpp */ }; /* VESA Standard */ /* Verified 10/21/96 */ sst1VideoTimingStruct SST_VREZ_640X480_85 = { 55, /* hSyncOn */ 776, /* hSyncOff */ 3, /* vSyncOn */ 506, /* vSyncOff */ 78, /* hBackPorch */ 25, /* vBackPorch */ 640, /* xDimension */ 480, /* yDimension */ 85, /* refreshRate */ 0, /* miscCtrl */ 150, /* memOffset */ 20, /* tilesInX */ 23, /* vFifoThreshold */ FXTRUE, /* video16BPPIsOK */ FXTRUE, /* video24BPPIsOK */ 36.0F, /* clkFreq16bpp */ 72.0F /* clkFreq24bpp */ }; /* Verified 10/21/96 */ sst1VideoTimingStruct SST_VREZ_640X480_120 = { 45, /* hSyncOn */ 785, /* hSyncOff */ 3, /* vSyncOn */ 506, /* vSyncOff */ 100, /* hBackPorch */ 18, /* vBackPorch */ 640, /* xDimension */ 480, /* yDimension */ 120, /* refreshRate */ 0, /* miscCtrl */ 150, /* memOffset */ 20, /* tilesInX */ 23, /* vFifoThreshold */ FXTRUE, /* video16BPPIsOK */ FXTRUE, /* video24BPPIsOK */ 50.82F, /* clkFreq16bpp */ 101.64F /* clkFreq24bpp */ }; /* VESA Standard */ /* Verified 10/21/96 */ // 800x600 requires 832x608 amount of memory usage... sst1VideoTimingStruct SST_VREZ_800X600_60 = { 127, /* hSyncOn */ 927, /* hSyncOff */ 4, /* vSyncOn */ 624, /* vSyncOff */ 86, /* hBackPorch */ 23, /* vBackPorch */ 800, /* xDimension */ 600, /* yDimension */ 60, /* refreshRate */ 0, /* miscCtrl */ 247, /* memOffset */ 26, /* tilesInX */ 23, /* vFifoThreshold */ FXTRUE, /* video16BPPIsOK */ FXTRUE, /* video24BPPIsOK */ 40.0F, /* clkFreq16bpp */ 80.0F /* clkFreq24bpp */ }; /* VESA Standard */ /* Verified 10/21/96 */ sst1VideoTimingStruct SST_VREZ_800X600_75 = { 79, /* hSyncOn */ 975, /* hSyncOff */ 3, /* vSyncOn */ 622, /* vSyncOff */ 158, /* hBackPorch */ 21, /* vBackPorch */ 800, /* xDimension */ 600, /* yDimension */ 75, /* refreshRate */ 0, /* miscCtrl */ 247, /* memOffset */ 26, /* tilesInX */ 21, /* vFifoThreshold */ FXTRUE, /* video16BPPIsOK */ FXTRUE, /* video24BPPIsOK */ 49.5F, /* clkFreq16bpp */ 99.0F /* clkFreq24bpp */ }; /* VESA Standard */ /* Verified 10/21/96 */ sst1VideoTimingStruct SST_VREZ_800X600_85 = { 63, /* hSyncOn */ 983, /* hSyncOff */ 3, /* vSyncOn */ 628, /* vSyncOff */ 150, /* hBackPorch */ 27, /* vBackPorch */ 800, /* xDimension */ 600, /* yDimension */ 85, /* refreshRate */ 0, /* miscCtrl */ 247, /* memOffset */ 26, /* tilesInX */ 19, /* vFifoThreshold */ FXTRUE, /* video16BPPIsOK */ FXTRUE, /* video24BPPIsOK */ 56.25F, /* clkFreq16bpp */ 112.5F /* clkFreq24bpp */ }; sst1VideoTimingStruct SST_VREZ_800X600_120 = { 87, /* hSyncOn */ 999, /* hSyncOff */ 3, /* vSyncOn */ 640, /* vSyncOff */ 142, /* hBackPorch */ 39, /* vBackPorch */ 800, /* xDimension */ 600, /* yDimension */ 120, /* refreshRate */ 0, /* miscCtrl */ 247, /* memOffset */ 26, /* tilesInX */ 17, /* vFifoThreshold */ FXTRUE, /* video16BPPIsOK */ FXFALSE, /* video24BPPIsOK */ 83.950F, /* clkFreq16bpp */ 83.950F /* clkFreq24bpp -- unsupported */ }; // 856x480 requires 896x480 amount of memory usage... sst1VideoTimingStruct SST_VREZ_856X480_60 = { 136, /* hSyncOn */ 1008, /* hSyncOff */ 2, /* vSyncOn */ 523, /* vSyncOff */ 100, /* hBackPorch */ 23, /* vBackPorch */ 856, /* xDimension */ 480, /* yDimension */ 60, /* refreshRate */ 0, /* miscCtrl */ 210, /* memOffset */ 28, /* tilesInX */ 16, /* vFifoThreshold */ FXTRUE, /* video16BPPIsOK */ FXTRUE, /* video24BPPIsOK */ 36.0F, /* clkFreq16bpp */ 72.0F /* clkFreq24bpp */ }; // 960x720 requires 960x736 amount of memory usage... sst1VideoTimingStruct SST_VREZ_960X720_60 = { 103, /* hSyncOn */ 1151, /* hSyncOff */ 3, /* vSyncOn */ 743, /* vSyncOff */ 142, /* hBackPorch */ 22, /* vBackPorch */ 960, /* xDimension */ 720, /* yDimension */ 60, /* refreshRate */ 0, /* miscCtrl */ 345, /* memOffset */ 30, /* tilesInX */ 19, /* vFifoThreshold */ FXTRUE, /* video16BPPIsOK */ FXTRUE, /* video24BPPIsOK */ 56.219F, /* clkFreq16bpp */ 112.437F /* clkFreq24bpp */ }; sst1VideoTimingStruct SST_VREZ_960X720_75 = { 103, /* hSyncOn */ 1183, /* hSyncOff */ 3, /* vSyncOn */ 749, /* vSyncOff */ 158, /* hBackPorch */ 28, /* vBackPorch */ 960, /* xDimension */ 720, /* yDimension */ 75, /* refreshRate */ 0, /* miscCtrl */ 345, /* memOffset */ 30, /* tilesInX */ 19, /* vFifoThreshold */ FXTRUE, /* video16BPPIsOK */ FXFALSE, /* video24BPPIsOK */ 72.643F, /* clkFreq16bpp */ 72.643F /* clkFreq24bpp -- unsupported */ }; sst1VideoTimingStruct SST_VREZ_960X720_85 = { 103, /* hSyncOn */ 1199, /* hSyncOff */ 3, /* vSyncOn */ 753, /* vSyncOff */ 166, /* hBackPorch */ 32, /* vBackPorch */ 960, /* xDimension */ 720, /* yDimension */ 85, /* refreshRate */ 0, /* miscCtrl */ 345, /* memOffset */ 30, /* tilesInX */ 19, /* vFifoThreshold */ FXTRUE, /* video16BPPIsOK */ FXFALSE, /* video24BPPIsOK */ 83.795F, /* clkFreq16bpp */ 83.795F /* clkFreq24bpp -- unsupported */ }; sst1VideoTimingStruct SST_VREZ_1024X768_60 = { 136, /* hSyncOn */ 1208, /* hSyncOff */ 6, /* vSyncOn */ 800, /* vSyncOff */ 160, /* hBackPorch */ 29, /* vBackPorch */ 1024, /* xDimension */ 768, /* yDimension */ 60, /* refreshRate */ 0, /* miscCtrl */ 384, /* memOffset */ 32, /* tilesInX */ 16, /* vFifoThreshold */ FXTRUE, /* video16BPPIsOK */ FXFALSE, /* video24BPPIsOK */ 65.0F, /* clkFreq16bpp */ 130.0F /* clkFreq24bpp */ }; sst1VideoTimingStruct SST_VREZ_1024X768_75 = { 96, /* hSyncOn */ 1216, /* hSyncOff */ 3, /* vSyncOn */ 797, /* vSyncOff */ 176, /* hBackPorch */ 28, /* vBackPorch */ 1024, /* xDimension */ 768, /* yDimension */ 75, /* refreshRate */ 0, /* miscCtrl */ 384, /* memOffset */ 32, /* tilesInX */ 16, /* vFifoThreshold */ FXTRUE, /* video16BPPIsOK */ FXFALSE, /* video24BPPIsOK */ 78.75F, /* clkFreq16bpp */ 78.75F /* clkFreq24bpp -- unsupported */ }; sst1VideoTimingStruct SST_VREZ_1024X768_85 = { 96, /* hSyncOn */ 1280, /* hSyncOff */ 3, /* vSyncOn */ 805, /* vSyncOff */ 208, /* hBackPorch */ 36, /* vBackPorch */ 1024, /* xDimension */ 768, /* yDimension */ 85, /* refreshRate */ 0, /* miscCtrl */ 384, /* memOffset */ 32, /* tilesInX */ 16, /* vFifoThreshold */ FXTRUE, /* video16BPPIsOK */ FXFALSE, /* video24BPPIsOK */ 94.5F, /* clkFreq16bpp */ 94.5F /* clkFreq24bpp -- unsupported */ }; #else /* SST1INIT_VIDEO_ALLOCATE */ #ifdef __cplusplus extern "C" { #endif extern sst1VideoTimingStruct SST_VREZ_640X480_60; extern sst1VideoTimingStruct SST_VREZ_800X600_60; #ifdef __cplusplus } #endif #endif /* SST1INIT_VIDEO_ALLOCATE */ #endif /* !__SST1INIT_H__ */ ================================================ FILE: README.md ================================================ Features - Run fullscreen programs in window - Perform time stretching to slow down or speed up actions - Add several compatibility options to support legacy programs - Log operations, show program status and palette release notes - November 7th, 2016 DxWnd is a project still in development, so new releases are not always fully compatible with previous ones. Compatibility issues may easily happen while trying to use old configurations (the dxwnd.ini file) or exported files (*.dxw files located in the export folder) with new releases of the program. In particular, dxw exported files are not always checked and updated before releasing new versions of the program, since that activity would steal precious time for the program enhancements, so I apologize but this is the current scenario. This file will try to provide a quick guide to the resolution of the most common portability problems, listing the known cases that can be easily fixed. ---------------------------------------------------------------------------------------------- DxWnd does nothing! If it seems that DxWnd is perfectly useless, the programs starting in fullscreen mode exactly as if DxWnd was not running, you could likely have a capability problem caused either from lack of permissions or some compatibility setting. You can try these two simple steps: 1. Assign to DxWnd.exe administrator privileges (right-click on DxWnd.exe, Properties->Compatibility->check "run this program as administrator" or whatever is your locale translated interface). I always try to set this flag in the DxWnd distribution, but a simple file copy can clear the privilege. 2. Clear compatibility settings on the target program (again, "Properties"->"Compatibility"->uncheck all compatibility flags). Maybe you'd better use the dedicated DxWnd command ("Tools"->"Clear compatibility flags", apparently this one goes a little deeper and clears some possibly hidden flags). If you clear compatibility flags it is likely that the game will no longer run in fullscreen without DxWnd, so maybe you can perform the operation on a copy of the executable file. ---------------------------------------------------------------------------------------------- Window size & position: Old DxWnd releases had a different setting for locking the window size and position. If the game jumps in some unexpected position of the screen or changes its window size, head to the Video / Window size & position panel and try some option different from "Free". ---------------------------------------------------------------------------------------------- Flip emulation: the DirectX/"Flip emulation" flag is required for most of DirectDraw games and is now set by default, but old exported files may not have this flag set. The sympthom generally is an error in DirectDraw calls or a black screen. In case the flag is not checked, just check it. ---------------------------------------------------------------------------------------------- Optimize for AERO mode: same as above, the flag is set by default, but some old exported files may not have it. The flag activated a blitting schema that is more compatible with AERO and desktop composition that is now mandatory on recent OS (Win8 and above). Better check it in case of problems. ---------------------------------------------------------------------------------------------- Force clipper: Setting a clipper on the primary surface is something that sometimes is good, sometimes is bad. For this reason, so far the "DirectX" / "Force clipper" is unchecked by default. But a side effect of the lack of a clipping region is the rupture of the desktop composition! So, if that happens (the desktop blinks and the AERO transparency effects disappear) you can try to set the flag and see if there are changes for the better. ---------------------------------------------------------------------------------------------- Final note: If all else fails do not despair! Defaulted values are pretty good in most cases, so better start from scratch without using an old .dxw export file. Or, even better, create a new defauled entry, import the old .dxw file and start comparing the two configurations: it is a hell of a job, but likely you can pick something good from the old file that will make the new entry working. Finally, share your success with the community! Please, post on the SF board any working and non trivial configuration to share it with other users, and notify residual problems that I could work about. Please, consider this as being part of the fun! yours faithfully GHO ================================================ FILE: build/README.FIRST.txt ================================================ Readme First release notes - November 7th, 2016 DxWnd is a project still in development, so new releases are not always fully compatible with previous ones. Compatibility issues may easily happen while trying to use old configurations (the dxwnd.ini file) or exported files (*.dxw files located in the export folder) with new releases of the program. In particular, dxw exported files are not always checked and updated before releasing new versions of the program, since that activity would steal precious time for the program enhancements, so I apologize but this is the current scenario. This file will try to provide a quick guide to the resolution of the most common portability problems, listing the known cases that can be easily fixed. ============================================================================================== DxWnd does nothing! If it seems that DxWnd is perfectly useless, the programs starting in fullscreen mode exactly as if DxWnd was not running, you could likely have a capability problem caused either from lack of permissions or some compatibility setting. You can try these two simple steps: 1) Assign to DxWnd.exe administrator privileges (right-click on DxWnd.exe, Properties->Compatibility->check "run this program as administrator" or whatever is your locale translated interface). I always try to set this flag in the DxWnd distribution, but a simple file copy can clear the privilege. 2) Clear compatibility settings on the target program (again, "Properties"->"Compatibility"->uncheck all compatibility flags). Maybe you'd better use the dedicated DxWnd command ("Tools"->"Clear compatibility flags", apparently this one goes a little deeper and clears some possibly hidden flags). If you clear compatibility flags it is likely that the game will no longer run in fullscreen without DxWnd, so maybe you can perform the operation on a copy of the executable file. ============================================================================================== Window size & position: Old DxWnd releases had a different setting for locking the window size and position. If the game jumps in some unexpected position of the screen or changes its window size, head to the Video / Window size & position panel and try some option different from "Free". ============================================================================================== Flip emulation: the DirectX/"Flip emulation" flag is required for most of DirectDraw games and is now set by default, but old exported files may not have this flag set. The sympthom generally is an error in DirectDraw calls or a black screen. In case the flag is not checked, just check it. ============================================================================================== Optimize for AERO mode: same as above, the flag is set by default, but some old exported files may not have it. The flag activated a blitting schema that is more compatible with AERO and desktop composition that is now mandatory on recent OS (Win8 and above). Better check it in case of problems. ============================================================================================== Force clipper: Setting a clipper on the primary surface is something that sometimes is good, sometimes is bad. For this reason, so far the "DirectX" / "Force clipper" is unchecked by default. But a side effect of the lack of a clipping region is the rupture of the desktop composition! So, if that happens (the desktop blinks and the AERO transparency effects disappear) you can try to set the flag and see if there are changes for the better. ============================================================================================ Final note: If all else fails do not despair! Defaulted values are pretty good in most cases, so better start from scratch without using an old .dxw export file. Or, even better, create a new defauled entry, import the old .dxw file and start comparing the two configurations: it is a hell of a job, but likely you can pick something good from the old file that will make the new entry working. Finally, share your success with the community! Please, post on the SF board any working and non trivial configuration to share it with other users, and notify residual problems that I could work about. Please, consider this as being part of the fun! yours faithfully GHO ================================================ FILE: build/exports/007 NightFire.dxw ================================================ [target] title0=007 NightFire path0=D:\Games\007_NightFire\Bond.exe module0= opengllib0= ver0=0 coord0=0 flag0=134234150 flagg0=1207959552 flagh0=20 flagi0=4194308 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 launchpath0= flagj0=128 winver0=0 maxres0=0 ================================================ FILE: build/exports/101 The Airborne Invasion of Normandy.dxw ================================================ [target] title0=101 The Airborne Invasion of Normandy path0=D:\Games\101air\101.exe module0= opengllib0= ver0=0 coord0=0 flag0=134234146 flagg0=1207959552 flagh0=20 flagi0=4194304 tflag0=192 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 launchpath0= flagj0=128 winver0=0 maxres0=0 ================================================ FILE: build/exports/11th Hour, the.dxw ================================================ [target] title0=11th Hour, the path0=D:\Games\11thHour\v32win.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=137363491 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=335549568 flagk0=327680 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 flagl0=0 flagm0=0 maxddinterface0=7 ================================================ FILE: build/exports/25 to Life.dxw ================================================ [target] title0=25 to Life path0=D:\Games\25 to life\game\25 TO LIFE.exe module0= opengllib0= ver0=0 coord0=0 flag0=134234624 flagg0=2013265920 flagh0=20 flagi0=4 tflag0=6147 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/3D Cube Hopper.dxw ================================================ [target] title0=3D Cube Hopper path0=D:\Games\3D_Cube_Hopper_RUS\3DCUBE.EXE startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=673185826 flagg0=1212153856 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=32768 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/3D Frog Man.dxw ================================================ [target] title0=3D Frog Man path0=D:\Games\3D Frog Man\FROGMAN.EXE startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=673185826 flagg0=1212153856 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=32768 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/4x4 Evolution.dxw ================================================ [target] title0=4x4 Evolution path0=D:\Games\4x4 Evolution\4x4.exe launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=136314914 flagg0=1476395008 flagh0=28 flagi0=138412324 flagj0=4224 flagk0=0 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/688(I) Hunter Killer.dxw ================================================ [target] title0=688(I) Hunter Killer path0=D:\Games\688\688I_HK.EXE launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=-2011168734 flagg0=1209008128 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=344064 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/7th Guest (window port).dxw ================================================ [target] title0=7th Guest (window port) path0=D:\Games\7thguest\v32tng.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=327680 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/8th Wonder.dxw ================================================ [target] title0=8th Wonder path0=D:\Games\8th wonder\Game.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=134217732 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/A10 Cuba.dxw ================================================ [target] title0=A10 Cuba path0=D:\Games\A10\A10Cuba.exe module0= opengllib0= ver0=0 coord0=0 flag0=671096866 flagg0=1207959568 flagh0=20 flagi0=4194308 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 launchpath0= notes0= flagj0=128 winver0=0 maxres0=0 registry0= flagk0=65536 flagl0=0 flagm0=0 dflag0=0 swapeffect0=0 maxddinterface0=7 ================================================ FILE: build/exports/Abomination.dxw ================================================ [target] title0=Abomination path0=D:\Games\Abomination\Abomb.exe module0= opengllib0= ver0=0 coord0=0 flag0=134217762 flagg0=1207959552 flagh0=20 flagi0=4194308 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 launchpath0= notes0= flagj0=128 flagk0=0 swapeffect0=0 ================================================ FILE: build/exports/Abuse.dxw ================================================ [target] title0=Abuse path0=D:\Games\Abuse\Abuse32.EXE startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 monitorid0=-1 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Abyss Incident at Europa.dxw ================================================ [target] title0=Abyss Incident at Europa path0=D:\Games\Abyss Incident at Europa\abyss.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=134217732 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Actua Ice Hockey.dxw ================================================ [target] title0=Actua Ice Hockey path0=D:\Games\ahockey\HOCKEY.EXE launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=671088674 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Actua Soccer 3.dxw ================================================ [target] title0=Actua Soccer 3 path0=D:\Games\ActuaSoccer3\SOCCER3D.EXE module0= opengllib0= ver0=0 coord0=0 flag0=939524146 flagg0=1207959552 flagh0=16 flagi0=138412036 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 launchpath0= winver0=0 maxres0=0 flagj0=128 notes0= registry0= flagk0=65536 flagl0=0 flagm0=0 swapeffect0=0 maxddinterface0=7 ================================================ FILE: build/exports/Adrenix 3D.dxw ================================================ [target] title0=Adrenix 3D path0=D:\Games\Adrenix\AdrenixD.exe launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=134234150 flagg0=1208025088 flagh0=20 flagi0=138412036 flagj0=5248 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 flagk0=65536 swapeffect0=0 registry0= flagl0=0 flagm0=0 dflag0=0 maxddinterface0=7 ================================================ FILE: build/exports/Adrenix.dxw ================================================ [target] title0=Adrenix path0=D:\Games\Adrenix\Adrenix.exe launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=136314918 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=0 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/AeroStyle.dxw ================================================ [target] title0=AeroStyle path0=F:\Games\AeroStyle\AeroStyle.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314886 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 monitorid0=-1 initresw0=800 initresh0=600 ================================================ FILE: build/exports/Affari Tuoi.dxw ================================================ [target] title0=Affari Tuoi path0=D:\Games\affari tuoi\Affari Tuoi\DOND.exe module0= opengllib0= ver0=9 coord0=0 flag0=536870914 flagg0=1207959568 flagh0=16 flagi0=71303172 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=4 launchpath0= notes0= flagj0=0 flagk0=0 swapeffect0=0 ================================================ FILE: build/exports/Agassi Tennis Generation.dxw ================================================ [target] title0=Agassi Tennis Generation path0=D:\Games\Agassi Tennis Generation\AGASSI.exe module0= opengllib0= ver0=0 coord0=0 flag0=671096866 flagg0=1207959552 flagh0=65556 flagi0=4 tflag0=6147 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Age of Empires Expansion Trial.dxw ================================================ [target] title0=Age of Empires Expansion Trial path0=D:\Games\Age of Empires Expansion Trial\empiresx.exe module0= opengllib0= ver0=0 coord0=0 flag0=134218272 flagg0=1207959552 flagh0=20 flagi0=4194308 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Age of Empires II.dxw ================================================ [target] title0=Age of Empires II path0=D:\Games\Age of Empires 2\empires2.exe launchpath0= module0= opengllib0= ver0=0 coord0=0 flag0=134217762 flagg0=1207959552 flagh0=20 flagi0=4194308 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 notes0= flagj0=128 flagk0=0 swapeffect0=0 ================================================ FILE: build/exports/Age of Empires III.dxw ================================================ [target] title0=Age of Empires III path0=D:\Games\Age of Empires III\age3.exe module0= opengllib0= ver0=0 coord0=0 flag0=-394124766 flagg0=134217728 flagh0=20 flagi0=4194304 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 launchpath0= notes0= registry0= flagj0=0 flagk0=0 flagl0=0 flagm0=0 winver0=0 maxres0=0 swapeffect0=0 maxddinterface0=7 ================================================ FILE: build/exports/Age of Empires.dxw ================================================ [target] title0=Age of Empires path0=D:\Games\Age of Empires\Empires.exe launchpath0= module0= opengllib0= ver0=0 coord0=0 flag0=134218274 flagg0=1207959552 flagh0=20 flagi0=4194308 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 flagj0=128 notes0= registry0= flagk0=0 swapeffect0=0 ================================================ FILE: build/exports/Age of Wanderer.dxw ================================================ [target] title0=Age of Wanderer path0=D:\Games\Age of Wanderer\Yain.exe launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=134217762 flagg0=1207959552 flagh0=20 flagi0=134217732 flagj0=4224 flagk0=0 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Age of Wonders II.dxw ================================================ [target] title0=Age of Wonders II path0=D:\Games\Age of Wonders II\AoW2.exe launchpath0= module0= opengllib0= ver0=7 coord0=0 flag0=142606624 flagg0=1207959552 flagh0=20 flagi0=138412036 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Age of Wonders.dxw ================================================ [target] title0=Age of Wonders path0=D:\Games\Age of Wonders\AoW.exe launchpath0= module0= opengllib0= ver0=0 coord0=0 flag0=679477794 flagg0=1207959552 flagh0=20 flagi0=205520900 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 flagj0=128 notes0= registry0= flagk0=65536 flagl0=0 flagm0=0 swapeffect0=0 maxddinterface0=7 ================================================ FILE: build/exports/Agile Warrior F111X.dxw ================================================ [target] title0=Agile Warrior F111X path0=F:\Games\Agile Warrior F 111X\AW.BIN startfolder0= launchpath0=F:\Games\Agile Warrior F 111X\AW.EXE module0= opengllib0= notes0=So far, only 3D mode is working. registry0=\n[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft]\n[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows]\n[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows]\n[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion]\n[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths]\n[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\aw.exe]\n"Path"=".\\aw"\n@=".\\aw.exe"\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Direct3D]\n"DrawPrimFlags"=dword:0 ver0=1 monitorid0=-1 coord0=0 flag0=673185826 flagg0=1207959552 flagh0=1044 flagi0=1212153860 flagj0=4224 flagk0=134807552 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=0 swapeffect0=0 maxddinterface0=7 slowratio0=2 scanline0=0 initresw0=800 initresh0=600 ================================================ FILE: build/exports/AirXonix.dxw ================================================ [target] title0=AirXonix path0=D:\Games\AirXonix\program.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314914 flagg0=1744830464 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Airfix Dogfighter.dxw ================================================ [target] title0=Airfix Dogfighter path0=D:\Games\Airfix Dogfighter\Dogfighter.exe launchpath0= module0= opengllib0= notes0=Tested with Airfix Dogfighter patch v1.2\nUnpatched release does notwork! registry0= ver0=0 coord0=0 flag0=2113590 flagg0=1275068416 flagh0=65556 flagi0=138412036 flagj0=-2147479424 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Akuma Demon Spawn - Lamentation Sword.dxw ================================================ [target] title0=Akuma Demon Spawn - Lamentation Sword path0=D:\Games\Akuma Demon Spawn - Lamentation Sword (1999)\Akuma\Akuma.EXE module0= opengllib0= ver0=0 coord0=0 flag0=134234146 flagg0=134217728 flagh0=20 flagi0=0 tflag0=64 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 ================================================ FILE: build/exports/Al Unser Arcade Racing (original EXE).dxw ================================================ [target] title0=Al Unser Arcade Racing (original EXE) path0=D:\Games\Al Unser Jr Arcade Racing\ALUNSER.orig.EXE startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 monitorid0=-1 coord0=0 flag0=673185826 flagg0=1745883232 flagh0=65556 flagi0=138412036 flagj0=4226 flagk0=65536 flagl0=276824064 flagm0=24576 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=5 initts0=0 winver0=0 maxres0=0 swapeffect0=0 maxddinterface0=7 slowratio0=2 scanline0=0 initresw0=640 initresh0=480 ================================================ FILE: build/exports/Al Unser Arcade Racing.dxw ================================================ [target] title0=Al Unser Arcade Racing path0=D:\Games\Al Unser Jr Arcade Racing\ALUNSER.EXE startfolder0= launchpath0= module0=wing32.dll opengllib0= notes0= registry0= ver0=0 monitorid0=-1 coord0=0 flag0=673185826 flagg0=1209008224 flagh0=65556 flagi0=138412036 flagj0=4226 flagk0=65536 flagl0=276856832 flagm0=8192 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=0 swapeffect0=0 maxddinterface0=7 slowratio0=2 scanline0=0 initresw0=640 initresh0=480 ================================================ FILE: build/exports/Alien Ambush.dxw ================================================ [target] title0=Alien Ambush path0=D:\Games\Alien Ambush\Alien Ambush.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=134217732 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Alien Nations (GOG).dxw ================================================ [target] title0=Alien Nations (GOG) path0=D:\Games\Alien Nations (GOG)\Bin\AN.exe launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=134217762 flagg0=1207959552 flagh0=20 flagi0=134217732 flagj0=4224 flagk0=0 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Alien Nations.dxw ================================================ [target] title0=Alien Nations path0=D:\Games\Alien Nations\Bin\AN.exe launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=134217762 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=32768 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 registry0= flagl0=0 flagm0=0 maxddinterface0=7 ================================================ FILE: build/exports/Alien Swarm (Steam).dxw ================================================ [target] title0=Alien Swarm (Steam) path0=D:\Program Files (x86)\Steam\SteamApps\common\Alien Swarm\swarm.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314914 flagg0=1744830464 flagh0=20 flagi0=138412038 flagj0=4224 flagk0=65536 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=5 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Alien vs. Predator Gold.dxw ================================================ [target] title0=Alien vs. Predator Gold path0=F:\Games\Avp Gold\avp.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 monitorid0=-1 coord0=0 flag0=673185826 flagg0=1207959552 flagh0=20 flagi0=134217732 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=0 swapeffect0=0 maxddinterface0=7 slowratio0=2 scanline0=0 initresw0=800 initresh0=600 ================================================ FILE: build/exports/Alone in the Dark the New Nightmare.dxw ================================================ [target] title0=Alone in the Dark the New Nightmare path0=D:\Games\Alone in the Dark\alone4.exe launchpath0=D:\Games\Alone in the Dark\launch.exe module0= opengllib0= notes0= ver0=0 coord0=0 flag0=679477282 flagg0=1207959568 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=0 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=1200 sizy0=900 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Alphanatix.dxw ================================================ [target] title0=Alphanatix path0=D:\Games\Alphan\AlphaNatix.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=681582626 flagg0=1207959552 flagh0=65556 flagi0=138412036 flagj0=4224 flagk0=327680 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=150 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/American McGee's Alice.dxw ================================================ [target] title0=American McGee's Alice path0=D:\Games\American McGee's Alice\alice.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=673194038 flagg0=1208090624 flagh0=21 flagi0=136314884 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Amerzone.dxw ================================================ [target] title0=Amerzone path0=D:\Games\Amerzone\amerzone.exe module0= opengllib0= ver0=0 coord0=0 flag0=134234114 flagg0=1207959568 flagh0=20 flagi0=4194308 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 launchpath0= notes0= flagj0=128 winver0=0 maxres0=0 ================================================ FILE: build/exports/Ancient Evil demo.dxw ================================================ [target] title0=Ancient Evil demo path0=D:\Games\AECSC\aecsc-demo.exe module0= opengllib0= ver0=0 coord0=0 flag0=136331298 flagg0=1207959552 flagh0=20 flagi0=4194304 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 launchpath0= notes0= flagj0=128 flagk0=65536 winver0=0 maxres0=0 swapeffect0=0 registry0= flagl0=0 flagm0=0 maxddinterface0=7 ================================================ FILE: build/exports/Apache for Win95.dxw ================================================ [target] title0=Apache for Win95 path0=D:\Games\APACHE\APACHE95.EXE startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 monitorid0=-1 coord0=0 flag0=681574434 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Arcade Pool 2.dxw ================================================ [target] title0=Arcade Pool 2 path0=D:\Games\Arcade Pool 2\Arcade Pool II.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=138543108 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Area 51.dxw ================================================ [target] title0=Area 51 path0=D:\Games\Area 51\area51.exe launchpath0= module0= opengllib0= ver0=0 coord0=0 flag0=134217763 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=8320 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Armor Command.dxw ================================================ [target] title0=Armor Command path0=D:\Games\Armor Command\armrcmd.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=681574434 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Armored Fist 3.dxw ================================================ [target] title0=Armored Fist 3 path0=D:\Games\Armored Fist 3\Af3.exe module0= opengllib0= ver0=0 coord0=0 flag0=134217762 flagg0=1207959552 flagh0=20 flagi0=4194310 tflag0=64 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 launchpath0= notes0= flagj0=128 flagk0=0 swapeffect0=0 ================================================ FILE: build/exports/Army Men RTS.dxw ================================================ [target] title0=Army Men RTS path0=D:\Games\Army Men RTS\amrts.exe module0= opengllib0= ver0=0 coord0=0 flag0=671088678 flagg0=1207959552 flagh0=20 flagi0=4194304 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 launchpath0= notes0= flagj0=128 flagk0=65536 winver0=0 maxres0=0 swapeffect0=0 registry0= flagl0=0 flagm0=0 maxddinterface0=7 ================================================ FILE: build/exports/Art is Dead.dxw ================================================ [target] title0=Art is Dead path0=D:\Games\Art is Dead\gungallery.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=134217732 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Arthur's Quest.dxw ================================================ [target] title0=Arthur's Quest path0=D:\Games\Arthur's Quest\lithtech.exe startfolder0= launchpath0=D:\Games\Arthur's Quest\ArthursQuest.exe module0= opengllib0= notes0= registry0= ver0=0 monitorid0=-1 coord0=0 flag0=673185826 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 flagn0=0 flago0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=0 swapeffect0=0 maxddinterface0=7 slowratio0=2 scanline0=0 initresw0=800 initresh0=600 [stamp] version=2.04.21.a4 time=Sat Mar 18 15:43:50 2017 ================================================ FILE: build/exports/Arx Fatalis.dxw ================================================ [target] title0=Arx Fatalis path0=D:\Games\Arx Fatalis\arx.exe launchpath0= module0=Athena opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136331302 flagg0=1207959552 flagh0=65552 flagi0=138936320 flagj0=4224 flagk0=65536 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=150 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 flagl0=0 flagm0=0 maxddinterface0=7 ================================================ FILE: build/exports/Ashes to Ashes.dxw ================================================ [target] title0=Ashes to Ashes path0=D:\Games\Ashes to Ashes\ASHES.EXE startfolder0= launchpath0= module0= opengllib0= notes0=Installer doesn't work, but just copy files from CD to HD.\nNeeds xp fix patch to work. registry0= ver0=0 monitorid0=-1 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Atlantis - The Lost Tales.dxw ================================================ [target] title0=Atlantis - The Lost Tales path0=D:\Games\Atlantis - The Lost Tales\Atlantis.exe launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=134217762 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=32768 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 registry0= flagl0=0 flagm0=0 maxddinterface0=7 ================================================ FILE: build/exports/Attack of the Saucerman.dxw ================================================ [target] title0=Attack of the Saucerman path0=D:\Games\Attack of the Saucerman\attack of the saucerman.exe module0= opengllib0= ver0=0 coord0=0 flag0=134217730 flagg0=134217728 flagh0=20 flagi0=0 tflag0=192 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 ================================================ FILE: build/exports/Aura 2 The Sacred Rings.dxw ================================================ [target] title0=Aura 2 The Sacred Rings path0=D:\Games\Aura 2 The Sacred Rings\TSR.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=134217732 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Avadon 2 The Corruption (Steam).dxw ================================================ [target] title0=Avadon 2: The Corruption (Steam) path0=D:\Program Files (x86)\Steam\SteamApps\common\Avadon 2\Avadon 2.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=12 coord0=0 flag0=136314918 flagg0=1208090624 flagh0=20 flagi0=138412038 flagj0=4224 flagk0=65536 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Avadon the Black Fortress (Steam).dxw ================================================ [target] title0=Avadon the Black Fortress (Steam) path0=D:\Program Files (x86)\Steam\SteamApps\common\Avadon The Black Fortress\Avadon.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=12 coord0=0 flag0=136314918 flagg0=1208090624 flagh0=20 flagi0=138412038 flagj0=4224 flagk0=65536 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Avernum 2 Crystal Souls (Steam).dxw ================================================ [target] title0=Avernum 2: Crystal Souls (Steam) path0=D:\Program Files (x86)\Steam\SteamApps\common\Avernum 2 Crystal Souls\Avernum 2.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=12 coord0=0 flag0=136314918 flagg0=1208090624 flagh0=20 flagi0=138412038 flagj0=4224 flagk0=65536 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Avernum 4 (Steam).dxw ================================================ [target] title0=Avernum 4 (Steam) path0=D:\Program Files (x86)\Steam\SteamApps\common\Avernum 4\Avernum 4.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314934 flagg0=1208090624 flagh0=20 flagi0=138412038 flagj0=4224 flagk0=-2147418112 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Avernum 5 (Steam).dxw ================================================ [target] title0=Avernum 5 (Steam) path0=D:\Program Files (x86)\Steam\SteamApps\common\Avernum 5\Avernum 5.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314934 flagg0=1208090624 flagh0=20 flagi0=138412038 flagj0=4224 flagk0=-2147418112 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Avernum 6 (Steam).dxw ================================================ [target] title0=Avernum 6 (Steam) path0=D:\Program Files (x86)\Steam\SteamApps\common\Avernum 6\Avernum 6.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314934 flagg0=1208090624 flagh0=20 flagi0=138412038 flagj0=4224 flagk0=-2147418112 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Avernum Escape From the Pit (Steam).dxw ================================================ [target] title0=Avernum: Escape From the Pit (Steam) path0=D:\Program Files (x86)\Steam\SteamApps\common\Avernum Escape From the Pit\Avernum.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=12 coord0=0 flag0=136314918 flagg0=1208090624 flagh0=20 flagi0=138412038 flagj0=4224 flagk0=65536 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Avernum demo.dxw ================================================ [target] title0=Avernum demo path0=D:\Games\Avernum Demo\Avernum.exe launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=136314914 flagg0=1745879040 flagh0=16 flagi0=138412036 flagj0=4224 flagk0=0 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=1200 sizy0=900 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Axis & Allies Iron Blitz Edition.dxw ================================================ [target] title0=Axis & Allies Iron Blitz Edition path0=D:\Games\Axis & Allies Iron Blitz Edition\Axis & Allies\AxisAllies.exe launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=-2013265822 flagg0=1207959552 flagh0=20 flagi0=138412037 flagj0=128 tflag0=6402 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Aztec Wars.dxw ================================================ [target] title0=Aztec Wars path0=F:\Games\Aztec Wars\The Aztec\Aztec.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 monitorid0=-1 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=67113088 flagk0=65536 flagl0=65536 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 initresw0=800 initresh0=600 ================================================ FILE: build/exports/Baldur's Gate.dxw ================================================ [target] title0=Baldur's Gate path0=D:\Games\Baldurs Gate\BGMain2.exe launchpath0=D:\Games\Baldurs Gate\baldur.exe module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=138547204 flagj0=21632 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=3 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Banzai Bug.dxw ================================================ [target] title0=Banzai Bug path0=D:\Games\Banzai Bug\EXE\RELEASE.EXE launchpath0= module0= opengllib0= notes0= ver0=1 coord0=0 flag0=685899810 flagg0=1207959680 flagh0=8212 flagi0=138412036 flagj0=4224 flagk0=131072 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 startfolder0= registry0= monitorid0=0 flagl0=0 flagm0=0 dflag0=0 maxddinterface0=7 slowratio0=1 scanline0=1 initresw0=0 initresh0=0 ================================================ FILE: build/exports/Barbie Riding Club.dxw ================================================ [target] title0=Barbie Riding Club path0=D:\Games\Barbie Riding Club\Program\Barbie Riding Club.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=673185826 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=98304 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Bard's Tale, the.dxw ================================================ [target] title0=Bard's Tale, the path0=D:\Games\The Bard's Tale\The Bard's Tale.exe launchpath0= module0= opengllib0= ver0=9 coord0=0 flag0=134218272 flagg0=1207959552 flagh0=16 flagi0=138412036 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Batman Vengeance.dxw ================================================ [target] title0=Batman Vengeance path0=D:\Games\Batman Vengeance\Batman\Batman.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=327680 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Battery Check.dxw ================================================ [target] title0=Battery Check path0=D:\Games\Battery Check\Battery.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=134217732 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Battle Isle - the Andosia War.dxw ================================================ [target] title0=Battle Isle - the Andosia War path0=D:\Games\Battle Isle - the Andosia War\BITAW.exe launchpath0= module0= opengllib0= notes0= ver0=7 coord0=0 flag0=679477280 flagg0=1207959552 flagh0=20 flagi0=136314884 flagj0=134221952 flagk0=0 tflag0=6402 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Battle Realms.dxw ================================================ [target] title0=Battle Realms path0=D:\Games\Battle Realms\Battle_Realms_F.exe launchpath0= module0= opengllib0= ver0=0 coord0=0 flag0=134234150 flagg0=1207959552 flagh0=20 flagi0=138412036 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 notes0= flagj0=128 flagk0=0 swapeffect0=0 ================================================ FILE: build/exports/Battlezone (1998).dxw ================================================ [target] title0=Battlezone (1998) path0=D:\Games\Battlezone\bzone.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=-1608515533 flagg0=1241513984 flagh0=98320 flagi0=138412036 flagj0=4224 flagk0=0 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=150 posy0=150 sizx0=880 sizy0=660 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Beavis & Butthead Do U..dxw ================================================ [target] title0=Beavis & Butthead Do U. path0=D:\Games\B_b\BEAVIS.EXE module0= opengllib0= ver0=0 coord0=0 flag0=673187874 flagg0=1207959552 flagh0=32788 flagi0=4194304 tflag0=3 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 launchpath0= flagj0=128 winver0=0 maxres0=0 ================================================ FILE: build/exports/Beetle Crazy Cup.dxw ================================================ [target] title0=Beetle Crazy Cup path0=D:\Games\Beetle Crazy Cup\beetle.exe launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=327680 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Betrayal in Antara.dxw ================================================ [target] title0=Betrayal in Antara path0=D:\Games\Betrayal in Antara\ANTARAR.EXE launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=681574434 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 ================================================ FILE: build/exports/Beyond Divinity.dxw ================================================ [target] title0=Beyond Divinity path0=D:\Games\Beyond Divinity\Div.exe module0= opengllib0= ver0=1 coord0=0 flag0=134234146 flagg0=1207959552 flagh0=61 flagi0=4194304 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 launchpath0= notes0= flagj0=128 winver0=0 maxres0=0 ================================================ FILE: build/exports/Big BumpZ.dxw ================================================ [target] title0=Big BumpZ path0=D:\Games\bumpz\Big BumpZ.EXE launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=673185826 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Black & White.dxw ================================================ [target] title0=Black & White path0=D:\Games\Black & White\runblack.exe module0= opengllib0= ver0=0 coord0=0 flag0=679477282 flagg0=1207959568 flagh0=20 flagi0=4194308 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=0 launchpath0= notes0= flagj0=128 registry0= flagk0=65536 flagl0=0 flagm0=0 dflag0=0 swapeffect0=0 maxddinterface0=7 ================================================ FILE: build/exports/Black Moon Chronicles.dxw ================================================ [target] title0=Black Moon Chronicles path0=D:\Games\Black Moon Chronicles\Lune noire\Engine.exe module0= opengllib0= ver0=0 coord0=0 flag0=134234146 flagg0=1207959568 flagh0=32788 flagi0=4194308 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 launchpath0= notes0= flagj0=128 flagk0=0 swapeffect0=0 ================================================ FILE: build/exports/Black Thorn.dxw ================================================ [target] title0=Black Thorn path0=D:\Games\Black Thorn\BlackThorn.exe launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=671105062 flagg0=1207959552 flagh0=20 flagi0=4325380 flagj0=128 flagk0=65536 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 registry0= flagl0=0 flagm0=0 maxddinterface0=7 ================================================ FILE: build/exports/Blade Runner (4CD version).dxw ================================================ [target] title0=Blade Runner (4CD version) path0=D:\Blade\BLADE.EXE startfolder0= launchpath0= module0= opengllib0= notes0=Courtesy of Riitaoja:\n\nInstalling Blade Runner on 64bit Windows (4CD version):\n\n- Copy the "BASE" folder from CD1 to your hard drive and rename it to "BLADE".\n- Copy "CDFRAMES.DAT" file from \CD1 -forder of the optical drive to the "BLADE"\ndirectory on your hard drive and rename the file to "HDFRAMES.DAT".\n\n- Timing -> Frames per Second - Limit delay 40 msec (25 FPS)\nFixes the shooting range by limiting FPS. registry0= ver0=0 monitorid0=-1 coord0=0 flag0=136331298 flagg0=1207963648 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=40 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 initresw0=800 initresh0=600 ================================================ FILE: build/exports/Blade Runner (Win7).dxw ================================================ [target] title0=Blade Runner (Win7) path0=F:\Games\Blade Runner\Blade7.EXE startfolder0= launchpath0= module0= opengllib0= notes0=From DVD version V2, with patched exe for WinXP and Win7\n\nBlade7.exe working ok also on Win10 registry0= ver0=0 monitorid0=-1 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 initresw0=800 initresh0=600 ================================================ FILE: build/exports/Blade Runner.dxw ================================================ [target] title0=Blade Runner path0=F:\Games\blade runner\BLADE.EXE startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 monitorid0=0 coord0=0 flag0=134234210 flagg0=1480589312 flagh0=2580 flagi0=4194308 flagj0=128 flagk0=2048 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=1 initresw0=0 initresh0=0 ================================================ FILE: build/exports/Blair Witch Volume One - Rustin Parr.dxw ================================================ [target] title0=Blair Witch Volume One - Rustin Parr path0=D:\Games\Blair Witch Volume One - Rustin Parr\NOCTURNE.EXE launchpath0= module0= opengllib0= ver0=0 coord0=0 flag0=134218272 flagg0=1207959552 flagh0=20 flagi0=134217732 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Blair Witch Volume Three - Elly Kedward.dxw ================================================ [target] title0=Blair Witch Volume Three - Elly Kedward path0=D:\Games\Blair Witch Volume Three - Elly Kedward\bw3.exe launchpath0= module0= opengllib0= notes0="Limit available resources" to bypass the resource cheks, though not fully necessary: \ntyping the enter key the game starts anyway.\n ver0=0 coord0=0 flag0=136314914 flagg0=1476395008 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=0 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Blair Witch Volume Two.dxw ================================================ [target] title0=Blair Witch Volume Two path0=D:\Games\Blair Witch II\blairwitch2.exe launchpath0= module0= opengllib0= notes0="Limit available resources" to bypass the resource cheks, though not fully necessary: \ntyping the enter key the game starts anyway.\n ver0=0 coord0=0 flag0=136314914 flagg0=1476395008 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=0 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Blaze and Blade.dxw ================================================ [target] title0=Blaze and Blade path0=D:\Games\Blaze and Blade\Blaze.exe launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=671088674 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Blood 2 the Chosen.dxw ================================================ [target] title0=Blood 2 the Chosen path0=D:\Games\Blood2\CLIENT.EXE launchpath0=D:\Games\Blood2\BLOOD2.EXE module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136315042 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 posx0=50 posy0=50 sizx0=1200 sizy0=900 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 ================================================ FILE: build/exports/Bomberbabe.dxw ================================================ [target] title0=Bomberbabe path0=D:\Games\Ludonic\Bomberbabe.exe module0= opengllib0= ver0=0 coord0=0 flag0=673185826 flagg0=1207959552 flagh0=20 flagi0=138412036 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 startfolder0= launchpath0= notes0= registry0= monitorid0=-1 flagj0=4224 flagk0=65536 flagl0=276824064 flagm0=1073741824 dflag0=0 winver0=0 maxres0=0 swapeffect0=0 maxddinterface0=7 slowratio0=2 scanline0=0 initresw0=800 initresh0=600 ================================================ FILE: build/exports/Breath of Fire IV.dxw ================================================ [target] title0=Breath of Fire IV path0=D:\Games\Breath of Fire 4\BOF4.exe launchpath0= module0= opengllib0= ver0=0 coord0=0 flag0=134217762 flagg0=1476395008 flagh0=20 flagi0=138412036 flagj0=4224 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 notes0= registry0= flagk0=65536 swapeffect0=0 ================================================ FILE: build/exports/Bugdom.dxw ================================================ [target] title0=Bugdom path0=D:\Games\Bugdom\Bugdom.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=681582626 flagg0=1208090880 flagh0=65564 flagi0=138412084 flagj0=4226 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=640 sizy0=480 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Bugriders the Race of Kings.dxw ================================================ [target] title0=Bugriders the Race of Kings path0=D:\Games\RIDERS\BIN\RIDERS.EXE startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Bugs Bunny Lost In Time.dxw ================================================ [target] title0=Bugs Bunny Lost In Time path0=D:\Games\Bugs.Bunny.Lost.In.Time\bin\bugs.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=7 coord0=0 flag0=681574434 flagg0=1209139200 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=98304 flagl0=0 flagm0=0 tflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 ================================================ FILE: build/exports/Bunnies must die.dxw ================================================ [target] title0=Bunnies must die path0=D:\Games\Bunnies must die\bmd.exe launchpath0= module0= opengllib0= ver0=1 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=205520900 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 notes0= registry0= flagj0=128 flagk0=0 swapeffect0=0 ================================================ FILE: build/exports/Bust A Move 3DX.dxw ================================================ [target] title0=Bust A Move 3DX path0=D:\Games\Bust A Move 3DX\PB3.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=681574434 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/C&C Generals.dxw ================================================ [target] title0=C&C Generals path0=D:\Games\Command & Conquer(tm) Generals Zero Hour\game.dat launchpath0=D:\Games\Command & Conquer(tm) Generals Zero Hour\generals.exe module0= opengllib0= notes0= ver0=0 coord0=0 flag0=134217763 flagg0=1744830464 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=0 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/C&C Red Alert 2 Yuri's Revenge.dxw ================================================ [target] title0=C&C Red Alert 2 Yuri's Revenge path0=D:\Games\Red Alert 2 Yuri's Revenge\gamemd.exe launchpath0=D:\Games\Red Alert 2 Yuri's Revenge\RA2MD.exe module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=67584 flagl0=0 flagm0=0 tflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 ================================================ FILE: build/exports/Call Of Cthulhu DCotE.dxw ================================================ [target] title0=Call Of Cthulhu DCotE path0=D:\Games\Call Of Cthulhu\Engine\CoCMainWin32.exe launchpath0= module0= opengllib0= ver0=0 coord0=0 flag0=134218272 flagg0=134217728 flagh0=20 flagi0=4194304 tflag0=6402 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=-5 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Call To Power 2.dxw ================================================ [target] title0=Call To Power 2 path0=D:\Games\Call To Power 2\ctp2_program\ctp\ctp2.exe module0= opengllib0= ver0=0 coord0=0 flag0=134234657 flagg0=1207959552 flagh0=32788 flagi0=4 tflag0=64 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Carmageddon (gore).dxw ================================================ [target] title0=Carmageddon (gore) path0=D:\Games\carsplat\CARMA95.exe launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=134217762 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 registry0= flagk0=32768 flagl0=0 flagm0=0 swapeffect0=0 maxddinterface0=7 ================================================ FILE: build/exports/Carmageddon (no gore).dxw ================================================ [target] title0=Carmageddon (no gore) path0=D:\Games\carsplat\CARM95G.EXE launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=134217762 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 registry0= flagk0=32768 flagl0=0 flagm0=0 swapeffect0=0 maxddinterface0=7 ================================================ FILE: build/exports/Carmageddon 2 (GLIDE).dxw ================================================ [target] title0=Carmageddon 2 (GLIDE) path0=D:\Games\Carmageddon_2\carma2_HW.exe module0= opengllib0= ver0=0 coord0=0 flag0=-2013265866 flagg0=1207959552 flagh0=20 flagi0=4194308 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 launchpath0= notes0= registry0= flagj0=0 flagk0=32768 flagl0=0 flagm0=0 winver0=0 maxres0=0 swapeffect0=0 maxddinterface0=7 ================================================ FILE: build/exports/Carmageddon 2 (SW).dxw ================================================ [target] title0=Carmageddon 2 (SW) path0=D:\Games\Carmageddon_2\carma2_SW.exe module0= opengllib0= ver0=0 coord0=0 flag0=671088694 flagg0=1207959552 flagh0=33562644 flagi0=4194308 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 launchpath0= notes0= registry0= flagj0=0 flagk0=32768 flagl0=0 flagm0=0 winver0=0 maxres0=0 swapeffect0=0 maxddinterface0=7 ================================================ FILE: build/exports/Carnivores 3DFX.dxw ================================================ [target] title0=Carnivores 3DFX path0=D:\Games\Carnivores\HUNT3DFX.EXE module0= opengllib0= ver0=0 coord0=0 flag0=671089184 flagg0=1207959552 flagh0=20 flagi0=4 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Carnivores.dxw ================================================ [target] title0=Carnivores path0=D:\Games\Carnivores\HUNTSOFT.EXE module0= opengllib0= ver0=0 coord0=0 flag0=939524130 flagg0=1209008128 flagh0=20 flagi0=4194308 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 launchpath0= notes0= registry0= flagj0=128 flagk0=0 swapeffect0=0 ================================================ FILE: build/exports/Catechumen (3DFX).dxw ================================================ [target] title0=Catechumen (3DFX) path0=D:\Games\Catechumen\game\Catechumen.exe module0= opengllib0= ver0=9 coord0=0 flag0=402653218 flagg0=1207959552 flagh0=65556 flagi0=16388 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Cave Story.dxw ================================================ [target] title0=Cave Story path0=D:\Games\Cave Story\Doukutsu.exe module0= opengllib0= ver0=0 coord0=0 flag0=134217762 flagg0=1207959552 flagh0=20 flagi0=4194308 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 launchpath0= notes0= flagj0=128 flagk0=0 winver0=0 maxres0=0 swapeffect0=0 ================================================ FILE: build/exports/Celtic Kings Rage of War.dxw ================================================ [target] title0=Celtic Kings Rage of War path0=D:\Games\Celtic Kings RoW\Celtic kings.exe launchpath0= module0= opengllib0= ver0=0 coord0=0 flag0=673185826 flagg0=1744830466 flagh0=65556 flagi0=138412036 flagj0=128 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 notes0= flagk0=0 swapeffect0=0 ================================================ FILE: build/exports/Championship Manager 03 04.dxw ================================================ [target] title0=Championship Manager 03 04 path0=D:\Games\CM 03-04\cm0304.exe launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=681582627 flagg0=1744830464 flagh0=2129936 flagi0=138412036 flagj0=4224 flagk0=2048 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Chaos Island (rip).dxw ================================================ [target] title0=Chaos Island (RIP) path0=D:\Games\Chaos Island\CIsland.exe launchpath0= module0= opengllib0= notes0=Needs proper registry emulation file registry0=[HKEY_LOCAL_MACHINE\SOFTWARE]\n[HKEY_LOCAL_MACHINE\SOFTWARE\DreamWorks Interactive]\n[HKEY_LOCAL_MACHINE\SOFTWARE\DreamWorks Interactive\ChaosIsland]\n"Data Drive"=".\\"\n"PID"="71239-442-3367621-91206"\n"Installed Directory"=".\\"\n"Run File"=".\\"\n"InstallType"=dword:00000001\n"KBPS_OTHER"=dword:00000000\n"KBPS"=dword:00000000\n"Installed"=dword:00000001\n"NextTip"=dword:00000001\n"StartupTips"=dword:00000001\n"FPS"=dword:00000003\n\n ver0=0 coord0=0 flag0=134217762 flagg0=1744830464 flagh0=1044 flagi0=1212153860 flagj0=4224 flagk0=0 flagl0=0 flagm0=0 tflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 ================================================ FILE: build/exports/Chaos Island.dxw ================================================ [target] title0=Chaos Island path0=D:\Games\Chaos Island\CIsland.exe launchpath0= module0= opengllib0= notes0=Needs proper registry emulation file ver0=0 coord0=0 flag0=134217762 flagg0=1744830464 flagh0=1044 flagi0=1212153860 flagj0=4224 flagk0=0 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Chaos Overlords.dxw ================================================ [target] title0=Chaos Overlords path0=D:\Games\Chaos Overlords\Chaos Overlords.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=327680 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Chariots of War.dxw ================================================ [target] title0=Chariots of War path0=D:\Games\Chariots of War\CoW.exe module0= opengllib0= ver0=0 coord0=0 flag0=134217762 flagg0=1744830464 flagh0=20 flagi0=2 tflag0=3 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 ================================================ FILE: build/exports/Chicago 1930.dxw ================================================ [target] title0=Chicago 1930 path0=D:\Games\Chicago 1930\Chicago 1930.exe module0= opengllib0= ver0=0 coord0=0 flag0=134234150 flagg0=1207959552 flagh0=20 flagi0=4325380 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 launchpath0= notes0= flagj0=128 flagk0=65536 swapeffect0=0 registry0= flagl0=0 flagm0=0 maxddinterface0=7 ================================================ FILE: build/exports/Chicken Invaders 2.dxw ================================================ [target] title0=Chicken Invaders 2 path0=F:\Games\Chicken Invaders 2\ChickenInvaders2.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 monitorid0=-1 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=65536 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 initresw0=800 initresh0=600 ================================================ FILE: build/exports/Circus Fighters.dxw ================================================ [target] title0=Circus Fighters path0=D:\Games\Circus Fighters\CIRCUS.EXE startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=681574434 flagg0=1209008128 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=32768 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Close Combat 2 a bridge too far.dxw ================================================ [target] title0=Close Combat 2: a bridge too far path0=D:\Games\Close Combat 2\CC2.EXE launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=134225954 flagg0=1744830464 flagh0=1044 flagi0=1212153860 flagj0=4224 flagk0=0 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=0 sizy0=0 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 registry0=[HKEY_LOCAL_MACHINE\SOFTWARE]\n[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft]\n[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft Games]\n[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft Games\Close Combat]\n[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft Games\Close Combat\2.00]\n"PID"="00000-000-0000000-00000"\n"InstalledTo"="C:\\GAMES\\CC2"\n"ScreenX"="800"\n"ScreenY"="600"\n"Version"="2.0"\n"IType"=hex:01,00,00,00\n"GameSpeed"=hex:01,00,00,00\n"ShowDSAlert"=hex:01,00,00,00\n"ShowQuickHelp"=hex:01,00,00,00\n"PlaySounds"=hex:01,00,00,00\n"PlayMusic"=hex:01,00,00,00\n"PlayVideos"=hex:00,00,00,00\n"FCopy"=hex:00,00,00,00\n"SMethod"=hex:00,00,00,00\n"Save"=hex:00,00,00,00\n"ShowTrees"=hex:01,00,00,00\n"StaticFPS"=hex:0a,00,00,00\n"InstalledFrom"=".\\"\n"Launched"="1"\n"VersionType"="RetailVersion"\n\n[HKEY_LOCAL_MACHINE\SOFTWARE]\n[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft]\n[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Microsoft Games]\n[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Microsoft Games\Close Combat]\n[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Microsoft Games\Close Combat\2.00]\n"PID"="00000-000-0000000-00000"\n"InstalledTo"="C:\\GAMES\\CC2"\n"ScreenX"="800"\n"ScreenY"="600"\n"Version"="2.0"\n"IType"=hex:01,00,00,00\n"GameSpeed"=hex:01,00,00,00\n"ShowDSAlert"=hex:01,00,00,00\n"ShowQuickHelp"=hex:01,00,00,00\n"PlaySounds"=hex:01,00,00,00\n"PlayMusic"=hex:01,00,00,00\n"PlayVideos"=hex:00,00,00,00\n"FCopy"=hex:00,00,00,00\n"SMethod"=hex:00,00,00,00\n"Save"=hex:00,00,00,00\n"ShowTrees"=hex:01,00,00,00\n"StaticFPS"=hex:0a,00,00,00\n"InstalledFrom"=".\\"\n"Launched"="1"\n"VersionType"="RetailVersion"\n\n flagl0=0 flagm0=0 maxddinterface0=7 ================================================ FILE: build/exports/Close Combat 5 Invasion Normandy.dxw ================================================ [target] title0=Close Combat 5 Invasion Normandy path0=D:\Games\Close Combat 5\CC5.exe module0= opengllib0= ver0=0 coord0=0 flag0=134218274 flagg0=1744830464 flagh0=20 flagi0=4194308 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 launchpath0= notes0= flagj0=128 registry0= flagk0=65536 flagl0=0 flagm0=0 swapeffect0=0 maxddinterface0=7 ================================================ FILE: build/exports/Codename Tenka.dxw ================================================ [target] title0=Codename Tenka path0=D:\Games\codetenka\tenka.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Colin McRae Rally 2.0.dxw ================================================ [target] title0=Colin McRae Rally 2.0 path0=D:\Games\MVM 2004 - Colin McRae Rally 2.0\CMR2.exe launchpath0= module0= opengllib0= ver0=0 coord0=0 flag0=134217762 flagg0=1207959552 flagh0=20 flagi0=138412036 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 notes0= flagj0=4224 flagk0=65536 swapeffect0=0 registry0= ================================================ FILE: build/exports/Command & Conquer - Red Alert The Aftermath.dxw ================================================ [target] title0=Command & Conquer - Red Alert The Aftermath path0=D:\Games\C&C - Red Alert The Aftermath\RA95.EXE launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136331362 flagg0=1207959552 flagh0=532 flagi0=138412036 flagj0=4224 flagk0=262144 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Command & Conquer Red Alert 2.dxw ================================================ [target] title0=Command & Conquer Red Alert 2 path0=D:\Games\Red Alert 2 Yuri's Revenge\game.exe launchpath0=D:\Games\Red Alert 2 Yuri's Revenge\Ra2.exe module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=67584 flagl0=0 flagm0=0 tflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 ================================================ FILE: build/exports/Conflict Zone.dxw ================================================ [target] title0=Conflict Zone path0=D:\Games\Conflict Zone\Conflict zone.exe launchpath0= module0= opengllib0= ver0=0 coord0=0 flag0=134217760 flagg0=1207959552 flagh0=20 flagi0=4194308 tflag0=64 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Contrast.dxw ================================================ [target] title0=Contrast path0=D:\Games\Contrast\Binaries\Win32\ContrastGame.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=9 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=134217732 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Cool Pool Eightball Demo.dxw ================================================ [target] title0=Cool Pool Eightball Demo path0=D:\Games\CoolPoolEightballDemo\CoolPool.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=134217732 flagj0=4224 flagk0=327680 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Corsairs Gold (GOG).dxw ================================================ [target] title0=Corsairs Gold path0=D:\Games\Corsairs Gold\corsairs.patched.exe launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=134221858 flagg0=1207959552 flagh0=20 flagi0=205520900 flagj0=67108992 flagk0=0 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Corsairs.dxw ================================================ [target] title0=Corsairs path0=D:\Games\CORSAIRS\corsairs.exe launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=134217732 flagj0=4224 flagk0=0 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Cossacks II.dxw ================================================ [target] title0=Cossacks II path0=D:\Games\GSC Game World\Cossacks II\Data\engine.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314914 flagg0=1744961536 flagh0=21 flagi0=138412036 flagj0=4224 flagk0=4259840 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Crimson Skies (DEMO).dxw ================================================ [target] title0=Crimson Skies (DEMO) path0=D:\Games\Crimson Skies\crimson.exe module0= opengllib0= ver0=0 coord0=0 flag0=155205636 flagg0=1210056720 flagh0=20 flagi0=260 tflag0=3 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 ================================================ FILE: build/exports/Crimson Skies.dxw ================================================ [target] title0=Crimson Skies path0=F:\Games\Crimson Skies\crimson.exe module0= opengllib0= ver0=7 coord0=0 flag0=677396518 flagg0=1207959568 flagh0=20 flagi0=4194596 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 launchpath0= flagj0=128 winver0=0 maxres0=0 notes0= flagk0=65536 swapeffect0=0 registry0= startfolder0= monitorid0=0 flagl0=512 flagm0=0 dflag0=0 maxddinterface0=7 slowratio0=1 scanline0=1 initresw0=0 initresh0=0 ================================================ FILE: build/exports/Croc - Legend of the Gobbos.dxw ================================================ [target] title0=Croc - Legend of the Gobbos path0=D:\Games\Croc\croc.exe launchpath0= module0= opengllib0= ver0=0 coord0=0 flag0=134217762 flagg0=1207959552 flagh0=20 flagi0=138412036 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 notes0= flagj0=128 registry0= flagk0=65536 swapeffect0=0 ================================================ FILE: build/exports/Croc 2.dxw ================================================ [target] title0=Croc 2 path0=D:\Games\Croc 2\Croc2.exe launchpath0= module0= opengllib0= ver0=0 coord0=0 flag0=134218274 flagg0=1207959552 flagh0=20 flagi0=138412036 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 notes0= flagj0=128 registry0= flagk0=65536 swapeffect0=0 ================================================ FILE: build/exports/Crusaders of Might and Magic (GOG).dxw ================================================ [target] title0=Crusaders of Might and Magic (GOG) path0=D:\Games\Crusaders of Might and Magic (GOG)\crusaders.exe launchpath0= module0=gfx_d3d gfx_sw opengllib0= notes0= ver0=0 coord0=0 flag0=-1467989966 flagg0=1209008640 flagh0=65556 flagi0=136314884 flagj0=4224 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 flagk0=65538 swapeffect0=0 registry0= ================================================ FILE: build/exports/Crusaders of Might and Magic Demo.dxw ================================================ [target] title0=Crusaders of Might and Magic Demo path0=D:\Games\Crusaders of Might and Magic Demo\crusaders demo.exe launchpath0= module0=gfx_d3d gfx_sw opengllib0= notes0= ver0=0 coord0=0 flag0=-1467989966 flagg0=1207959552 flagh0=1044 flagi0=1212153860 flagj0=4224 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 flagk0=65538 swapeffect0=0 registry0= ================================================ FILE: build/exports/Cyber Gladiators (3dfx).dxw ================================================ [target] title0=Cyber Gladiators (3dfx) path0=D:\Games\Cyber Gladiators\cyber.exe launchpath0= module0= opengllib0= ver0=0 coord0=0 flag0=671088802 flagg0=1744896000 flagh0=20 flagi0=-2009071612 flagj0=4224 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Cydonia.dxw ================================================ [target] title0=Cydonia path0=D:\Games\Cydonia\cydonia.exe launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=138543108 flagj0=4224 flagk0=268500992 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 registry0= flagl0=0 flagm0=0 maxddinterface0=7 ================================================ FILE: build/exports/D.O.G. - Fight for Your Life.dxw ================================================ [target] title0=D.O.G. - Fight for Your Life path0=D:\Games\D.O.G. - Fight for Your Life\DOG.EXE startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/DOSBox-0.74.dxw ================================================ [target] title0=DOSBox-0.74 path0=C:\Program Files (x86)\DOSBox-0.74\DOSBox.exe startfolder0= launchpath0= module0=sdl.dll opengllib0= notes0= registry0= ver0=0 monitorid0=-1 coord0=0 flag0=136314914 flagg0=1208090624 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=4259840 flagl0=4489216 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 scanline0=0 initresw0=800 initresh0=600 ================================================ FILE: build/exports/DX-Ball2.dxw ================================================ [target] title0=DX-Ball2 path0=D:\Games\DX-Ball2\DXBall2.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=134217732 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Daemonstar.dxw ================================================ [target] title0=Daemonstar path0=D:\Games\dmnstar\DS.EXE launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=134217762 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Daikatana.dxw ================================================ [target] title0=Daikatana path0=D:\Games\Daikatana\daikatana.exe module0= opengllib0= ver0=12 coord0=0 flag0=269492772 flagg0=671220225 flagh0=20 flagi0=4194304 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 launchpath0= winver0=0 maxres0=0 notes0= flagj0=0 ================================================ FILE: build/exports/Damage Incorporated.dxw ================================================ [target] title0=Damage Incorporated path0=D:\Games\Damage inc\damage.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Dangerous Waters.dxw ================================================ [target] title0=Dangerous Waters path0=F:\Games\Dangerous Waters\dangerouswaters.noshims.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 monitorid0=-1 coord0=0 flag0=673185832 flagg0=1207959680 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65537 flagl0=32768 flagm0=32768 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=0 swapeffect0=0 maxddinterface0=7 slowratio0=2 scanline0=0 initresw0=640 initresh0=480 ================================================ FILE: build/exports/Darius Gaiden.dxw ================================================ [target] title0=Darius Gaiden path0=D:\Games\Darius_gaiden\DARIUS.EXE module0= opengllib0= ver0=0 coord0=0 flag0=671088674 flagg0=1207959552 flagh0=20 flagi0=4194308 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=2 winver0=0 maxres0=-1 launchpath0= notes0= flagj0=128 flagk0=0 swapeffect0=0 ================================================ FILE: build/exports/Dark Angael.dxw ================================================ [target] title0=Dark Angael path0=D:\Games\Dark Angael\GAME.EXE startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Dark Colony (16 bit).dxw ================================================ [target] title0=Dark Colony (16 bit) path0=D:\Games\DarkColony\DCOLONY\DC16.EXE launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=134234166 flagg0=1207959552 flagh0=20 flagi0=4194308 flagj0=67108992 flagk0=0 flagl0=0 flagm0=0 tflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 ================================================ FILE: build/exports/Dark Colony.dxw ================================================ [target] title0=Dark Colony path0=D:\Games\DarkColony\DCOLONY\DC.EXE module0= opengllib0= ver0=0 coord0=0 flag0=134234166 flagg0=1207959552 flagh0=20 flagi0=4194308 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 launchpath0= flagj0=128 notes0= registry0= flagk0=0 swapeffect0=0 flagl0=0 flagm0=0 maxddinterface0=7 ================================================ FILE: build/exports/Dark Disciples 1.dxw ================================================ [target] title0=Dark Disciples 1 path0=D:\Games\Dark Disciples 1\DarkDisciples.exe launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=134217732 flagj0=4224 flagk0=0 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Dark Disciples 2.dxw ================================================ [target] title0=Dark Disciples 2 path0=D:\Games\Dark Disciples 2\DarkDisciples2.exe launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=134217732 flagj0=4224 flagk0=0 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Dark Earth.dxw ================================================ [target] title0=Dark Earth path0=D:\Games\Dark Earth\dkev.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=673210466 flagg0=1476395008 flagh0=20 flagi0=138936324 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 startfolder0= monitorid0=0 dflag0=0 slowratio0=1 scanline0=1 initresw0=0 initresh0=0 ================================================ FILE: build/exports/Dark Fall - The Journal (GOG 2.0.0.6).dxw ================================================ [target] title0=Dark Fall - The Journal (GOG 2.0.0.6) path0=D:\Games\Dark Fall - The Journal 2_0_0_6\DarkFall.exe launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=713031682 flagg0=1242562560 flagh0=20 flagi0=205520900 flagj0=4224 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=640 sizy0=480 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Dark Planet Battle for Natrolis.dxw ================================================ [target] title0=Dark Planet: Battle for Natrolis path0=D:\Games\DarkPlanet\Dark.exe module0= opengllib0= ver0=0 coord0=0 flag0=671088675 flagg0=1207959552 flagh0=20 flagi0=4194308 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 launchpath0= notes0= flagj0=128 flagk0=65536 swapeffect0=0 registry0= ================================================ FILE: build/exports/Dark Reign.dxw ================================================ [target] title0=Dark Reign path0=D:\Games\Dark Reign\dkreign.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Dark Vengeance.dxw ================================================ [target] title0=Dark Vengeance path0=D:\Games\dark_vengeance\dv.exe module0= opengllib0= ver0=0 coord0=0 flag0=134217763 flagg0=1476395008 flagh0=65556 flagi0=4194308 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 launchpath0= flagj0=128 notes0= registry0= flagk0=65536 swapeffect0=0 ================================================ FILE: build/exports/Darkened Skye.dxw ================================================ [target] title0=Darkened Skye path0=D:\Games\Darkened Skye\Skye.exe module0= opengllib0= ver0=0 coord0=0 flag0=679493682 flagg0=1207959552 flagh0=65556 flagi0=69206020 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=800 maxy0=600 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 launchpath0= notes0= flagj0=128 flagk0=65536 swapeffect0=0 registry0= ================================================ FILE: build/exports/Daytona USA Deluxe Edition.dxw ================================================ [target] title0=Daytona USA Deluxe Edition path0=D:\Games\Daytona USA Deluxe Edition\DAYTONA USA Deluxe.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 monitorid0=-1 coord0=0 flag0=673185826 flagg0=1207959552 flagh0=20 flagi0=134217732 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=0 swapeffect0=0 maxddinterface0=7 slowratio0=2 scanline0=0 initresw0=800 initresh0=600 ================================================ FILE: build/exports/Daytona USA Deluxe.dxw ================================================ [target] title0=Daytona USA Deluxe path0=F:\Games\Daytona USA Deluxe\DAYTONA USA Deluxe.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 monitorid0=-1 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=134217732 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 initresw0=800 initresh0=600 ================================================ FILE: build/exports/Dead Rising 2 Off The Record.dxw ================================================ [target] title0=Dead Rising 2 Off The Record path0=C:\Program Files (x86)\Capcom\Dead Rising 2 Off The Record\deadrising2otr.exe module0= opengllib0= ver0=0 coord0=0 flag0=0 flagg0=134217728 flagh0=16 flagi0=0 tflag0=3 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=0 ================================================ FILE: build/exports/Deadlock II.dxw ================================================ [target] title0=Deadlock II path0=D:\Games\deadlock II\DEADLOCK.EXE launchpath0= module0= opengllib0= ver0=7 coord0=0 flag0=-2013249502 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=128 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 notes0= registry0= flagk0=327680 flagl0=0 flagm0=0 swapeffect0=0 maxddinterface0=7 ================================================ FILE: build/exports/DeathSpank The Baconing.dxw ================================================ [target] title0=DeathSpank: The Baconing path0=D:\Games\The Baconing\TheBaconing.exe module0= opengllib0= ver0=9 coord0=0 flag0=-2013265376 flagg0=1207959552 flagh0=20 flagi0=4194308 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 launchpath0= notes0= registry0= flagj0=0 flagk0=0 swapeffect0=0 ================================================ FILE: build/exports/Deathtrap Dungeon.dxw ================================================ [target] title0=Deathtrap Dungeon path0=F:\ASYLUM\DD_CD.EXE launchpath0=D:\Games\Deathtrap Dungeon\DDSTART.EXE module0= opengllib0= notes0=Note:\ninstalled from CD, the game need to be configured with the launcher from the HD \nand the actual game exe from the CD!\n\nNote: \nThe intro movies are interlaced and can be deinterlaced. \nAlso, the game can be rendered with bilinear filtering. registry0= ver0=1 coord0=0 flag0=681574434 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=268439680 flagk0=327680 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Deer Hunter.dxw ================================================ [target] title0=Deer Hunter path0=F:\Games\Deer Hunter\DEERHUNT.EXE startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314914 flagg0=1207959568 flagh0=16404 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Defiance (D3D).dxw ================================================ [target] title0=Defiance (D3D) path0=D:\Games\Defiance\D3D.EXE startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=2097154 flagg0=1224736768 flagh0=32788 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=0 flagm0=4 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 monitorid0=0 flagn0=0 flago0=0 scanline0=1 initresw0=0 initresh0=0 [stamp] version=2.04.21.a2 time=Wed Mar 15 22:49:07 2017 ================================================ FILE: build/exports/Defiance.dxw ================================================ [target] title0=Defiance path0=D:\Games\Defiance\DEFIANCE.EXE startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=3145730 flagg0=1208483840 flagh0=20 flagi0=155189252 flagj0=4224 flagk0=327680 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=-950 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Deo Gratias.dxw ================================================ [target] title0=Deo Gratias path0=D:\Games\Deo Gratias\WinKhaos.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314914 flagg0=1209008128 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Dethkarz.dxw ================================================ [target] title0=Dethkarz path0=D:\Games\dethkarz\Dethkarz.exe launchpath0= module0=Vertigo Direct3D opengllib0= notes0=Beware! This game REQUIRES initial resolution set as 640x480 as needed by the \nintro movie, otherwise the game won't start and will show an error message\ndialog box.\nNeeds also bypass MCI calls if no CD is present.\nTested OK with D3D renderer, 16 & 32 bpp. registry0= ver0=0 coord0=0 flag0=681574434 flagg0=1207959552 flagh0=20 flagi0=205520902 flagj0=4224 flagk0=35717120 flagl0=8389120 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 startfolder0= monitorid0=-1 initresw0=640 initresh0=480 ================================================ FILE: build/exports/Devastation.dxw ================================================ [target] title0=Devastation path0=D:\Games\Devastation\System\Devastation.exe module0= opengllib0= ver0=0 coord0=0 flag0=134217766 flagg0=1207959552 flagh0=65556 flagi0=4194304 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 launchpath0= notes0= flagj0=128 flagk0=65536 winver0=0 maxres0=0 swapeffect0=0 registry0= ================================================ FILE: build/exports/Devil Inside, the.dxw ================================================ [target] title0=Devil Inside, the path0=D:\Games\Devil Inside\Devil.exe launchpath0= module0= opengllib0= ver0=0 coord0=0 flag0=671105074 flagg0=1207959552 flagh0=16 flagi0=-2009071612 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=800 maxy0=600 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=-4 winver0=0 maxres0=-1 notes0= flagj0=128 flagk0=65536 swapeffect0=0 registry0= ================================================ FILE: build/exports/Diablo MP demo.dxw ================================================ [target] title0=Diablo MP demo path0=D:\Games\Diablo MP demo\diablo_s.exe launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=136331298 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4225 flagk0=0 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Diablo.dxw ================================================ [target] title0=Diablo path0=D:\Games\Diablo\Diablo.exe module0= opengllib0= ver0=1 coord0=0 flag0=138428450 flagg0=1241514000 flagh0=8212 flagi0=4194304 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 launchpath0= winver0=0 maxres0=0 notes0= flagj0=129 registry0= flagk0=262144 flagl0=0 flagm0=0 swapeffect0=0 maxddinterface0=7 startfolder0= monitorid0=0 dflag0=0 slowratio0=1 scanline0=1 initresw0=0 initresh0=0 ================================================ FILE: build/exports/Die Hard Nakatomi Plaza.dxw ================================================ [target] title0=Die Hard Nakatomi Plaza path0=D:\Games\die hard nakatomi plaza\Lithtech.exe launchpath0=D:\Games\die hard nakatomi plaza\Nakatomi.exe module0= opengllib0= ver0=0 coord0=0 flag0=673194018 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=128 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 notes0= flagk0=0 swapeffect0=0 ================================================ FILE: build/exports/Die Hard Trilogy (Game 1).dxw ================================================ [target] title0=Die Hard Trilogy (Game 1) path0=C:\My Games\diehard3\DIEHARD\GAME\DIEHARD1.EXE startfolder0=C:\My Games\diehard3 launchpath0= module0= opengllib0= notes0= registry0=\n[HKEY_LOCAL_MACHINE\SOFTWARE]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard]\n"Install Directory"=".\\diehard"\n"FMV Installed"=dword:00000000\n"Data Installed"=dword:00000001\n"Abnormal Termination"=dword:00000000\n"StartupFolder"="Fox Interactive"\n"Version"="1.00"\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\Configuration]\n"complexity"=dword:3f800000\n"cutoff"=dword:3eeeeef0\n"perspective"=dword:3eeeeef0\n"Quality"=dword:00000000\n"Use Hardware"=dword:00000000\n"Preferred Height"=dword:00000258\n"Preferred Width"=dword:00000320\n"lighting"=dword:00000001\n"texture quality"=dword:00000001\n"Language"=dword:00000000\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d1]\n"Input"=dword:00000000\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d1\Joystick]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d1\Joystick\speed]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d1\Keyboard]\n"keyboard"=hex:39,00,00,00,22,00,00,00,21,00,00,00,02,00,00,00,00,00,00,00,1e,\\n 00,00,00,2d,00,00,00,1f,00,00,00,c8,00,00,00,cb,00,00,00,d0,00,00,00,cd,00,\\n 00,00,2c,00,00,00,6f,61,72,64,00,00,00,00\n"speed"=hex:00,00,00,00\n"sensitivity"=hex:00,00,00,00\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d1\Keyboard\sensitivity]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d1\Keyboard\speed]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d1\Mouse]\n"speed"=hex:00,00,00,00\n"sensitivity"=hex:00,00,00,00\n"mouse8"=hex:2c,00,00,00,39,00,00,00,03,01,00,00,2e,00,00,00,2f,00,00,00,30,00,\\n 00,00,31,00,00,00,02,01,00,00,06,01,00,00,04,01,00,00,07,01,00,00,05,01,00,\\n 00,1c,00,00,00,01,00,00,00,36,00,00,00\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d1\Mouse\sensitivity]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d1\Mouse\speed]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d2]\n"Input"=dword:00000000\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d2\Joystick]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d2\Joystick\sensitivity]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d2\Joystick\speed]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d2\Keyboard]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d2\Keyboard\sensitivity]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d2\Keyboard\speed]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d2\Mouse]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d2\Mouse\sensitivity]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d2\Mouse\speed]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d3]\n"Input"=dword:00000000\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d3\Joystick]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d3\Joystick\sensitivity]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d3\Joystick\speed]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d3\Keyboard]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d3\Keyboard\sensitivity]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d3\Keyboard\speed]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d3\Mouse]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d3\Mouse\sensitivity]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d3\Mouse\speed]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\Sound]\n"Music Volume"=dword:000000ff\n"Music Mute"=dword:00000000\n"SFX Volume"=dword:0000008f\n"SFX Mute"=dword:00000000\n\n\n ver0=0 coord0=0 flag0=685768822 flagg0=1212153856 flagh0=1044 flagi0=1212153860 flagj0=1069184 flagk0=270532608 flagl0=229384 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Die Hard Trilogy (Game 2).dxw ================================================ [target] title0=Die Hard Trilogy (Game 2) path0=C:\My Games\diehard3\DIEHARD\GAME\DIEHARD2.EXE startfolder0=C:\My Games\diehard3 launchpath0= module0= opengllib0= notes0= registry0=\n[HKEY_LOCAL_MACHINE\SOFTWARE]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard]\n"Install Directory"=".\\diehard"\n"FMV Installed"=dword:00000000\n"Data Installed"=dword:00000001\n"Abnormal Termination"=dword:00000000\n"StartupFolder"="Fox Interactive"\n"Version"="1.00"\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\Configuration]\n"complexity"=dword:3f800000\n"cutoff"=dword:3eeeeef0\n"perspective"=dword:3eeeeef0\n"Quality"=dword:00000000\n"Use Hardware"=dword:00000000\n"Preferred Height"=dword:00000258\n"Preferred Width"=dword:00000320\n"lighting"=dword:00000001\n"texture quality"=dword:00000001\n"Language"=dword:00000000\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d1]\n"Input"=dword:00000000\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d1\Joystick]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d1\Joystick\speed]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d1\Keyboard]\n"keyboard"=hex:39,00,00,00,22,00,00,00,21,00,00,00,02,00,00,00,00,00,00,00,1e,\\n 00,00,00,2d,00,00,00,1f,00,00,00,c8,00,00,00,cb,00,00,00,d0,00,00,00,cd,00,\\n 00,00,2c,00,00,00,6f,61,72,64,00,00,00,00\n"speed"=hex:00,00,00,00\n"sensitivity"=hex:00,00,00,00\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d1\Keyboard\sensitivity]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d1\Keyboard\speed]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d1\Mouse]\n"speed"=hex:00,00,00,00\n"sensitivity"=hex:00,00,00,00\n"mouse8"=hex:2c,00,00,00,39,00,00,00,03,01,00,00,2e,00,00,00,2f,00,00,00,30,00,\\n 00,00,31,00,00,00,02,01,00,00,06,01,00,00,04,01,00,00,07,01,00,00,05,01,00,\\n 00,1c,00,00,00,01,00,00,00,36,00,00,00\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d1\Mouse\sensitivity]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d1\Mouse\speed]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d2]\n"Input"=dword:00000000\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d2\Joystick]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d2\Joystick\sensitivity]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d2\Joystick\speed]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d2\Keyboard]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d2\Keyboard\sensitivity]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d2\Keyboard\speed]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d2\Mouse]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d2\Mouse\sensitivity]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d2\Mouse\speed]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d3]\n"Input"=dword:00000000\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d3\Joystick]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d3\Joystick\sensitivity]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d3\Joystick\speed]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d3\Keyboard]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d3\Keyboard\sensitivity]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d3\Keyboard\speed]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d3\Mouse]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d3\Mouse\sensitivity]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d3\Mouse\speed]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\Sound]\n"Music Volume"=dword:000000ff\n"Music Mute"=dword:00000000\n"SFX Volume"=dword:0000008f\n"SFX Mute"=dword:00000000\n\n\n ver0=0 coord0=0 flag0=685768818 flagg0=1212153856 flagh0=1044 flagi0=1212153860 flagj0=1052800 flagk0=143368 flagl0=229376 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Die Hard Trilogy (Game 3).dxw ================================================ [target] title0=Die Hard Trilogy (Game 3) path0=C:\My Games\diehard3\DIEHARD\GAME\DIEHARD3.EXE startfolder0=C:\My Games\diehard3 launchpath0= module0= opengllib0= notes0= registry0=\n[HKEY_LOCAL_MACHINE\SOFTWARE]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard]\n"Install Directory"=".\\diehard"\n"FMV Installed"=dword:00000000\n"Data Installed"=dword:00000001\n"Abnormal Termination"=dword:00000000\n"StartupFolder"="Fox Interactive"\n"Version"="1.00"\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\Configuration]\n"complexity"=dword:3f800000\n"cutoff"=dword:3eeeeef0\n"perspective"=dword:3eeeeef0\n"Quality"=dword:00000000\n"Use Hardware"=dword:00000000\n"Preferred Height"=dword:00000258\n"Preferred Width"=dword:00000320\n"lighting"=dword:00000001\n"texture quality"=dword:00000001\n"Language"=dword:00000000\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d1]\n"Input"=dword:00000000\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d1\Joystick]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d1\Joystick\speed]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d1\Keyboard]\n"keyboard"=hex:39,00,00,00,22,00,00,00,21,00,00,00,02,00,00,00,00,00,00,00,1e,\\n 00,00,00,2d,00,00,00,1f,00,00,00,c8,00,00,00,cb,00,00,00,d0,00,00,00,cd,00,\\n 00,00,2c,00,00,00,6f,61,72,64,00,00,00,00\n"speed"=hex:00,00,00,00\n"sensitivity"=hex:00,00,00,00\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d1\Keyboard\sensitivity]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d1\Keyboard\speed]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d1\Mouse]\n"speed"=hex:00,00,00,00\n"sensitivity"=hex:00,00,00,00\n"mouse8"=hex:2c,00,00,00,39,00,00,00,03,01,00,00,2e,00,00,00,2f,00,00,00,30,00,\\n 00,00,31,00,00,00,02,01,00,00,06,01,00,00,04,01,00,00,07,01,00,00,05,01,00,\\n 00,1c,00,00,00,01,00,00,00,36,00,00,00\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d1\Mouse\sensitivity]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d1\Mouse\speed]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d2]\n"Input"=dword:00000000\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d2\Joystick]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d2\Joystick\sensitivity]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d2\Joystick\speed]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d2\Keyboard]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d2\Keyboard\sensitivity]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d2\Keyboard\speed]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d2\Mouse]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d2\Mouse\sensitivity]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d2\Mouse\speed]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d3]\n"Input"=dword:00000000\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d3\Joystick]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d3\Joystick\sensitivity]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d3\Joystick\speed]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d3\Keyboard]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d3\Keyboard\sensitivity]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d3\Keyboard\speed]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d3\Mouse]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d3\Mouse\sensitivity]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d3\Mouse\speed]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\Sound]\n"Music Volume"=dword:000000ff\n"Music Mute"=dword:00000000\n"SFX Volume"=dword:0000008f\n"SFX Mute"=dword:00000000\n\n\n ver0=0 coord0=0 flag0=681574450 flagg0=1212153856 flagh0=1049620 flagi0=1212153860 flagj0=1052800 flagk0=0 flagl0=229376 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Die Hard Trilogy (launcher).dxw ================================================ [target] title0=Die Hard Trilogy (launcher) path0=C:\My Games\diehard3\DIEHARD\GAME\DIEHARD.EXE startfolder0=C:\My Games\diehard3\ launchpath0= module0= opengllib0= notes0= registry0=\n[HKEY_LOCAL_MACHINE\SOFTWARE]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard]\n"Install Directory"=".\\diehard"\n"FMV Installed"=dword:00000000\n"Data Installed"=dword:00000001\n"Abnormal Termination"=dword:00000000\n"StartupFolder"="Fox Interactive"\n"Version"="1.00"\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\Configuration]\n"complexity"=dword:3f800000\n"cutoff"=dword:3eeeeef0\n"perspective"=dword:3eeeeef0\n"Quality"=dword:00000000\n"Use Hardware"=dword:00000000\n"Preferred Height"=dword:00000258\n"Preferred Width"=dword:00000320\n"lighting"=dword:00000001\n"texture quality"=dword:00000001\n"Language"=dword:00000000\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d1]\n"Input"=dword:00000000\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d1\Joystick]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d1\Joystick\speed]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d1\Keyboard]\n"keyboard"=hex:39,00,00,00,22,00,00,00,21,00,00,00,02,00,00,00,00,00,00,00,1e,\\n 00,00,00,2d,00,00,00,1f,00,00,00,c8,00,00,00,cb,00,00,00,d0,00,00,00,cd,00,\\n 00,00,2c,00,00,00,6f,61,72,64,00,00,00,00\n"speed"=hex:00,00,00,00\n"sensitivity"=hex:00,00,00,00\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d1\Keyboard\sensitivity]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d1\Keyboard\speed]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d1\Mouse]\n"speed"=hex:00,00,00,00\n"sensitivity"=hex:00,00,00,00\n"mouse8"=hex:2c,00,00,00,39,00,00,00,03,01,00,00,2e,00,00,00,2f,00,00,00,30,00,\\n 00,00,31,00,00,00,02,01,00,00,06,01,00,00,04,01,00,00,07,01,00,00,05,01,00,\\n 00,1c,00,00,00,01,00,00,00,36,00,00,00\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d1\Mouse\sensitivity]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d1\Mouse\speed]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d2]\n"Input"=dword:00000000\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d2\Joystick]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d2\Joystick\sensitivity]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d2\Joystick\speed]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d2\Keyboard]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d2\Keyboard\sensitivity]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d2\Keyboard\speed]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d2\Mouse]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d2\Mouse\sensitivity]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d2\Mouse\speed]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d3]\n"Input"=dword:00000000\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d3\Joystick]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d3\Joystick\sensitivity]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d3\Joystick\speed]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d3\Keyboard]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d3\Keyboard\sensitivity]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d3\Keyboard\speed]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d3\Mouse]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d3\Mouse\sensitivity]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\d3\Mouse\speed]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Die Hard\Sound]\n"Music Volume"=dword:000000ff\n"Music Mute"=dword:00000000\n"SFX Volume"=dword:0000008f\n"SFX Mute"=dword:00000000\n\n\n ver0=0 coord0=0 flag0=685768738 flagg0=1212153856 flagh0=1049620 flagi0=1212153860 flagj0=1053824 flagk0=0 flagl0=32768 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Digger XP.dxw ================================================ [target] title0=Digger XP path0=D:\Games\Digger XP\Digger XP.exe launchpath0= module0= opengllib0= notes0=a.k.a. Digger Remastered registry0= ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=134217732 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Dink Smallwood.dxw ================================================ [target] title0=Dink Smallwood path0=D:\Games\Dink Smallwood\dink.exe launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=134217762 flagg0=1207959552 flagh0=20 flagi0=138412038 flagj0=4224 tflag0=536870912 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Dinosaur Resurrection.dxw ================================================ [target] title0=Dinosaur Resurrection path0=F:\Games\Dinosaur Resurrection\FALCOM\DIN\DIN_Win.EXE startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 monitorid0=-1 coord0=0 flag0=673185826 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=8388608 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 initresw0=640 initresh0=480 ================================================ FILE: build/exports/Dirt Track Racing 2 Demo.dxw ================================================ [target] title0=Dirt Track Racing 2 Demo path0=F:\Games\Dirt Track Racing 2 Demo\DTR2Demo.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 monitorid0=-1 coord0=0 flag0=673185826 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4226 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=0 swapeffect0=0 maxddinterface0=7 slowratio0=2 scanline0=0 initresw0=800 initresh0=600 ================================================ FILE: build/exports/Dirt Track Racing 2.dxw ================================================ [target] title0=Dirt Track Racing 2 path0=F:\Games\Dirt Track Racing 2\DTR2.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 monitorid0=-1 coord0=0 flag0=673185826 flagg0=1207959560 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=0 swapeffect0=0 maxddinterface0=7 slowratio0=2 scanline0=0 initresw0=800 initresh0=600 ================================================ FILE: build/exports/Dirt Track Racing.dxw ================================================ [target] title0=Dirt Track Racing path0=F:\Games\Dirt Track Racing\DTR.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 monitorid0=-1 coord0=0 flag0=673185826 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=0 swapeffect0=0 maxddinterface0=7 slowratio0=2 scanline0=0 initresw0=800 initresh0=600 ================================================ FILE: build/exports/Disciples II - Dark Prophecy.dxw ================================================ [target] title0=Disciples II - Dark Prophecy path0=D:\Games\Disciples II - Dark Prophecy\Discipl2.exe launchpath0= module0= opengllib0= ver0=1 coord0=0 flag0=134234144 flagg0=1207959552 flagh0=16 flagi0=138412036 tflag0=6147 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Disney Groove It.dxw ================================================ [target] title0=Disney Groove It path0=D:\Games\groove it\groove.exe module0= opengllib0= ver0=0 coord0=0 flag0=134217728 flagg0=1207959808 flagh0=20 flagi0=4 tflag0=6211 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Divide, the.dxw ================================================ [target] title0=Divide, the path0=D:\Games\divide\DIVIDE.EXE launchpath0= module0= opengllib0= notes0=RIP game needs "dxwnd.the Divide" registry definition ver0=0 coord0=0 flag0=134217762 flagg0=1212153856 flagh0=1044 flagi0=1212153860 flagj0=4224 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Divine Divinity (GOG).dxw ================================================ [target] title0=Divine Divinity (GOG) path0=D:\Games\Divine Divinity (GOG)\div.exe launchpath0= module0= opengllib0= notes0= ver0=1 coord0=0 flag0=683687978 flagg0=2013265920 flagh0=20 flagi0=138412036 flagj0=4224 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 registry0= flagk0=65536 swapeffect0=0 flagl0=0 flagm0=0 maxddinterface0=7 ================================================ FILE: build/exports/Divine Divinity.dxw ================================================ [target] title0=Divine Divinity path0=D:\Games\Divine Divinity\Run\div.exe launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=136331298 flagg0=1761607680 flagh0=20 flagi0=138412036 flagj0=4224 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 registry0= flagk0=65536 swapeffect0=0 ================================================ FILE: build/exports/Dominant Species.dxw ================================================ [target] title0=Dominant Species path0=F:\Games\Dominant Species\DominantSpecies.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 monitorid0=-1 coord0=0 flag0=673185826 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=0 flagm0=4194304 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=0 swapeffect0=0 maxddinterface0=7 slowratio0=2 scanline0=0 initresw0=800 initresh0=600 ================================================ FILE: build/exports/Doom 3.dxw ================================================ [target] title0=Doom 3 path0=D:\Games\Doom 3\Doom3.exe launchpath0= module0= opengllib0=OpenGL32.dll ver0=9 coord0=0 flag0=134217760 flagg0=1207959552 flagh0=65557 flagi0=69206020 tflag0=64 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 notes0= flagj0=0 ================================================ FILE: build/exports/Doom Shareware for Windows 95.dxw ================================================ [target] title0=Doom Shareware for Windows 95 path0=D:\Games\Doom Shareware for Windows 95\Doom95.exe module0= opengllib0= ver0=0 coord0=0 flag0=134217762 flagg0=1207959552 flagh0=20 flagi0=4194304 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 launchpath0= flagj0=128 winver0=0 maxres0=2 ================================================ FILE: build/exports/Doom95.dxw ================================================ [target] title0=Doom95 path0=D:\Games\Doom95\DOOM95.EXE launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=12416 flagk0=262144 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Dracula - The Resurrection (GOG).dxw ================================================ [target] title0=Dracula - The Resurrection (GOG) path0=D:\Games\Dracula Trilogy\Dracula - The Resurrection\Dracula.exe startfolder0= launchpath0= module0= opengllib0= notes0=Works only after replaced the GOG dhook.dll with a dummy ddraw proxy\nDxWnd ddraw.dll proxy is fine, apoart form an initial warning dialog box. registry0= ver0=0 monitorid0=-1 coord0=0 flag0=673185826 flagg0=1207959552 flagh0=20 flagi0=205520900 flagj0=4224 flagk0=65536 flagl0=0 flagm0=8192 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=0 swapeffect0=0 maxddinterface0=7 slowratio0=2 scanline0=0 initresw0=800 initresh0=600 ================================================ FILE: build/exports/Dracula Twins.dxw ================================================ [target] title0=Dracula Twins path0=D:\Games\Dracula Twins\DraculaTwins.exe module0= opengllib0= ver0=0 coord0=0 flag0=134217762 flagg0=1207959552 flagh0=20 flagi0=4194308 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 launchpath0= notes0= registry0= flagj0=128 flagk0=0 winver0=0 maxres0=0 swapeffect0=0 ================================================ FILE: build/exports/Dragon Dice.dxw ================================================ [target] title0=Dragon Dice path0=D:\Games\ddice\dd.exe startfolder0= launchpath0= module0= opengllib0= notes0=Game path must be set in registry registry0=\n[HKEY_LOCAL_MACHINE\SOFTWARE\Interplay]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Interplay\Dragon Dice]\n"ApplicationPath"="d:\\games\\ddice\\"\n"StarfleetDemo"=dword:00000001\n"GameInstalled"=dword:00000001\n"ZoomLevel"=dword:00000000\n"DieSortType"=dword:00000001\n"DisplayDieFaceType"=dword:00000000\n"DisplayRoll"=dword:00000001\n"DisplayBattle"=dword:00000001\n"DisplayDragonVsDragon"=dword:00000001\n"PlaySounds"=dword:00000001\n"PlayMusic"=dword:00000001\n"DemoMode"=dword:00000001\n"DisplayGameMessages"=dword:00000001\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Interplay\Dragon Dice\1.0]\n ver0=0 monitorid0=-1 coord0=0 flag0=136314882 flagg0=1207959552 flagh0=1044 flagi0=1212153860 flagj0=4224 flagk0=65536 flagl0=32768 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 initresw0=800 initresh0=600 ================================================ FILE: build/exports/Dragon Heart.dxw ================================================ [target] title0=Dragon Heart path0=D:\Games\DRAGONH\DRAGON.EXE startfolder0= launchpath0= module0= opengllib0= notes0=Set game video mode to fullscreen for DxWnd intervention registry0= ver0=0 coord0=0 flag0=681574434 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Drakan Order of the Flame (10th anniversary).dxw ================================================ [target] title0=Drakan Order of the Flame (10th anniversary) path0=D:\Games\drakan\drakan.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=740311126 flagg0=1476395008 flagh0=20 flagi0=203423748 flagj0=4224 flagk0=268500994 flagl0=0 flagm0=0 tflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 ================================================ FILE: build/exports/Drome Racers.dxw ================================================ [target] title0=Drome Racers path0=D:\Games\LEGO Interactive\Drome Racers\Drome Racers.exe launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=144711714 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=0 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Duckman.dxw ================================================ [target] title0=Duckman path0=D:\Games\Duckman\DUCKMAN.EXE module0= opengllib0= ver0=0 coord0=0 flag0=134218272 flagg0=1207959552 flagh0=20 flagi0=4 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Duke Nukem - Manhattan Project (D3D8).dxw ================================================ [target] title0=Duke Nukem - Manhattan Project (D3D8) path0=D:\Games\Duke Nukem - Manhattan Project\prism3d.exe module0=p3shared opengllib0= ver0=8 coord0=0 flag0=134217770 flagg0=1207959552 flagh0=20 flagi0=4194308 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 launchpath0= notes0= registry0= flagj0=0 flagk0=0 flagl0=0 flagm0=0 dflag0=0 swapeffect0=0 maxddinterface0=7 slowratio0=1 ================================================ FILE: build/exports/Duke Nukem Forever.dxw ================================================ [target] title0=Duke Nukem Forever path0=D:\Games\Duke Nukem Forever\System\DukeForever.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 ================================================ FILE: build/exports/Dune 2000.dxw ================================================ [target] title0=Dune 2000 path0=D:\Games\Dune 2000\DUNE2000.DAT launchpath0=D:\Games\Dune 2000\DUNE2000.EXE module0= opengllib0= notes0= ver0=0 coord0=0 flag0=671105058 flagg0=1207959568 flagh0=20 flagi0=4194308 flagj0=128 flagk0=32768 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 registry0= ================================================ FILE: build/exports/Dungeon Keeper II.dxw ================================================ [target] title0=Dungeon Keeper II path0=D:\Games\Dungeon Keeper 2\DKII.exe module0= opengllib0= ver0=0 coord0=0 flag0=134234146 flagg0=1782579200 flagh0=20 flagi0=4194304 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=150 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 launchpath0= winver0=0 maxres0=0 flagj0=128 ================================================ FILE: build/exports/Dungeon Lords MMXII.dxw ================================================ [target] title0=Dungeon Lords MMXII path0=D:\Games\Dungeon Lords MMXII\dlords2012.exe module0= opengllib0= ver0=0 coord0=2 flag0=-2013265886 flagg0=1207959552 flagh0=20 flagi0=0 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 ================================================ FILE: build/exports/Dungeon Odyssey (Demo).dxw ================================================ [target] title0=Dungeon Odyssey (Demo) path0=D:\Games\Dungeon Odyssey Demo\DungOdy.exe module0= opengllib0= ver0=7 coord0=0 flag0=134234146 flagg0=1207959568 flagh0=20 flagi0=4 tflag0=64 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=4 ================================================ FILE: build/exports/Dweep Gold.dxw ================================================ [target] title0=Dweep Gold path0=D:\Games\DweepGol\Dweep.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=134217732 flagj0=4224 flagk0=327680 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Dylan Dog Horror at Luna Park.dxw ================================================ [target] title0=Dylan Dog Horror at Luna Park path0=D:\Games\DylanDog\hlp.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314914 flagg0=1744830464 flagh0=1048596 flagi0=138412038 flagj0=5248 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 ================================================ FILE: build/exports/Earth 2150.dxw ================================================ [target] title0=Earth 2150 path0=D:\Games\Earth 2150\Earth2150.exe launchpath0= module0= opengllib0= ver0=0 coord0=0 flag0=136331298 flagg0=1207959552 flagh0=20 flagi0=138412452 flagj0=8322 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Earthworm Jim 3D.dxw ================================================ [target] title0=Earthworm Jim 3D path0=D:\Games\Earthworm Jim 3D\EarthwormJim3D.exe module0= opengllib0= ver0=0 coord0=0 flag0=134217762 flagg0=1213202432 flagh0=65556 flagi0=4194308 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=1 maxres0=-1 launchpath0= notes0= flagj0=128 flagk0=65536 swapeffect0=0 registry0= ================================================ FILE: build/exports/Eat my Dust.dxw ================================================ [target] title0=Eat my Dust path0=D:\Games\eat_my_dust\EATMYDUS.EXE startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=681574434 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=32768 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Echelon.dxw ================================================ [target] title0=Echelon path0=D:\Games\echelon\Game.exe module0= opengllib0= ver0=7 coord0=0 flag0=134234114 flagg0=1207959552 flagh0=20 flagi0=4194308 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 launchpath0= notes0= flagj0=128 flagk0=65536 swapeffect0=0 registry0= ================================================ FILE: build/exports/Ed Hunter.dxw ================================================ [target] title0=Ed Hunter path0=D:\Games\Ed Hunter\EDHUNTER.EXE module0= opengllib0= ver0=0 coord0=0 flag0=134217762 flagg0=1208025088 flagh0=20 flagi0=4194308 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=2 winver0=0 maxres0=-1 launchpath0= notes0= flagj0=128 flagk0=98304 swapeffect0=0 registry0= ================================================ FILE: build/exports/Empire Earth.dxw ================================================ [target] title0=Empire Earth path0=D:\Games\Empire Earth\Empire Earth.exe module0= opengllib0= ver0=0 coord0=0 flag0=671088675 flagg0=1207959552 flagh0=20 flagi0=4325380 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 launchpath0= notes0= flagj0=128 flagk0=65536 swapeffect0=0 registry0= ================================================ FILE: build/exports/Empire of the Ants (ITA).dxw ================================================ [target] title0=Empire of the Ants (ITA) path0=D:\Games\Empire of the Ants\Formiche.exe module0= opengllib0= ver0=0 coord0=0 flag0=151011364 flagg0=134217728 flagh0=20 flagi0=4 tflag0=6467 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Empire of the Ants.dxw ================================================ [target] title0=Empire of the Ants path0=D:\Games\Empire of the Ants\Game.exe module0= opengllib0= ver0=0 coord0=0 flag0=402669606 flagg0=1207959552 flagh0=20 flagi0=4194308 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 launchpath0= notes0= flagj0=128 flagk0=65536 swapeffect0=0 ================================================ FILE: build/exports/End of Twilight.dxw ================================================ [target] title0=End of Twilight path0=D:\Games\End of Twilight\bin\mol.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314914 flagg0=1744830464 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=327680 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Enemy Zero.dxw ================================================ [target] title0=Enemy Zero path0=F:\EZERO\EZERO.EXE launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=681574434 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Esoteria.dxw ================================================ [target] title0=Esoteria path0=D:\Games\esoteria\ESOTERIA.EXE startfolder0= launchpath0= module0= opengllib0= notes0= registry0=[HKEY_CLASSES_ROOT\Filter]\n[HKEY_CLASSES_ROOT\Filter\{865608F0-85BE-11d0-B4EC-0000C04FFDC7}]\n""="DDAMFilter"\n[HKEY_CLASSES_ROOT\CLSID]\n[HKEY_CLASSES_ROOT\CLSID\{865608F0-85BE-11d0-B4EC-0000C04FFDC7}]\n""="DDAMFilter"\n"Merit"=dword:00200000\n[HKEY_CLASSES_ROOT\CLSID\{865608F0-85BE-11d0-B4EC-0000C04FFDC7}\InprocServer32]\n""="ddamf.ax"\n"ThreadingModel"="Both"\n\n[HKEY_CLASSES_ROOT\CLSID\{865608F0-85BE-11d0-B4EC-0000C04FFDC7}\Pins]\n[HKEY_CLASSES_ROOT\CLSID\{865608F0-85BE-11d0-B4EC-0000C04FFDC7}\Pins\Input]\n"AllowedMany"=dword:00000000\n"AllowedZero"=dword:00000000\n"Direction"=dword:00000000\n"IsRendered"=dword:00000001\n[HKEY_CLASSES_ROOT\CLSID\{865608F0-85BE-11d0-B4EC-0000C04FFDC7}\Pins\Input\Types]\n[HKEY_CLASSES_ROOT\CLSID\{865608F0-85BE-11d0-B4EC-0000C04FFDC7}\Pins\Input\Types\{73646976-0000-0010-8000-00AA00389B71}]\n[HKEY_CLASSES_ROOT\CLSID\{865608F0-85BE-11d0-B4EC-0000C04FFDC7}\Pins\Input\Types\{73646976-0000-0010-8000-00AA00389B71}\{00000000-0000-0000-0000-000000000000}]\n\n ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=1044 flagi0=1212153860 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/European Air War.dxw ================================================ [target] title0=European Air War path0=D:\Games\European Air War\eaw.exe launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=0 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 registry0= flagl0=0 flagm0=0 maxddinterface0=7 ================================================ FILE: build/exports/Evil Dead Hail to the King.dxw ================================================ [target] title0=Evil Dead Hail to the King path0=D:\Games\Evil Dead\EvilDead.exe launchpath0= module0= opengllib0= ver0=0 coord0=0 flag0=134217762 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=128 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 notes0= flagk0=0 swapeffect0=0 ================================================ FILE: build/exports/Evil Islands.dxw ================================================ [target] title0=Evil Islands path0=D:\Games\Evil Islands\Game.exe launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=134217732 flagj0=4224 flagk0=0 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Evolva.dxw ================================================ [target] title0=Evolva path0=D:\Games\Evolva\Evolva.exe module0= opengllib0= ver0=0 coord0=0 flag0=134217762 flagg0=1207959552 flagh0=20 flagi0=4194308 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 launchpath0= notes0= flagj0=128 registry0= flagk0=65536 swapeffect0=0 ================================================ FILE: build/exports/Excalibur.dxw ================================================ [target] title0=Excalibur path0=D:\Games\Excalibur\_FISH.EXE startfolder0= launchpath0=D:\Games\Excalibur\EXCAL.EXE module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Extreme-G_2.dxw ================================================ [target] title0=Extreme-G_2 path0=D:\Games\Extreme-G_2\xg2pc.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0=[HKEY_LOCAL_MACHINE\SOFTWARE\ACCLAIM]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\ACCLAIM\Extreme-G 2]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\ACCLAIM\Extreme-G 2\1.00.000]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Acclaim Entertainment]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Acclaim Entertainment\XGII]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Acclaim Entertainment\XGII\1.00]\n"cont1digital"=hex:00,80,00,00,22,00,00,04,00,40,00,00,25,00,00,04,20,00,00,00,\\n 31,00,00,04,10,00,00,00,23,00,00,04,00,20,00,00,24,00,00,04,00,10,00,00,01,\\n 00,00,04,00,08,00,00,17,00,00,04,00,02,00,00,00,00,00,00,00,01,00,00,00,00,\\n 00,00,00,04,00,00,18,00,00,04,08,00,00,00,32,00,00,04,02,00,00,00,20,00,00,\\n 04,01,00,00,00,21,00,00,04,04,00,00,00,39,00,00,04\n"cont1analogue"=hex:cb,00,00,04,cd,00,80,4c,d0,00,00,4d,c8,00,00,04\n"cont2digital"=hex:00,80,00,00,00,00,00,00,00,40,00,00,00,00,00,00,20,00,00,00,\\n 00,00,00,00,10,00,00,00,00,00,00,00,00,20,00,00,00,00,00,00,00,10,00,00,00,\\n 00,00,00,00,08,00,00,00,00,00,00,00,02,00,00,00,00,00,00,00,01,00,00,00,00,\\n 00,00,00,04,00,00,00,00,00,00,08,00,00,00,00,00,00,00,02,00,00,00,00,00,00,\\n 00,01,00,00,00,00,00,00,00,04,00,00,00,00,00,00,00\n"cont2analogue"=hex:00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\n"cont3digital"=hex:00,80,00,00,00,00,00,00,00,40,00,00,00,00,00,00,20,00,00,00,\\n 00,00,00,00,10,00,00,00,00,00,00,00,00,20,00,00,00,00,00,00,00,10,00,00,00,\\n 00,00,00,00,08,00,00,00,00,00,00,00,02,00,00,00,00,00,00,00,01,00,00,00,00,\\n 00,00,00,04,00,00,00,00,00,00,08,00,00,00,00,00,00,00,02,00,00,00,00,00,00,\\n 00,01,00,00,00,00,00,00,00,04,00,00,00,00,00,00,00\n"cont3analogue"=hex:00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\n"cont4digital"=hex:00,80,00,00,00,00,00,00,00,40,00,00,00,00,00,00,20,00,00,00,\\n 00,00,00,00,10,00,00,00,00,00,00,00,00,20,00,00,00,00,00,00,00,10,00,00,00,\\n 00,00,00,00,08,00,00,00,00,00,00,00,02,00,00,00,00,00,00,00,01,00,00,00,00,\\n 00,00,00,04,00,00,00,00,00,00,08,00,00,00,00,00,00,00,02,00,00,00,00,00,00,\\n 00,01,00,00,00,00,00,00,00,04,00,00,00,00,00,00,00\n"cont4analogue"=hex:00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\n ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=136314880 flagj0=4224 flagk0=65536 flagl0=8192 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/F-16 Agressor.dxw ================================================ [target] title0=F-16 Agressor path0=D:\Games\F16_Agressor\f-16.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0=[HKEY_CURRENT_USER\Software\GSI]\n[HKEY_CURRENT_USER\Software\GSI\F-16: Aggressor]\n[HKEY_CURRENT_USER\Software\GSI\F-16: Aggressor\1.00.000]\n"LastPlayerSaved"=""\n\n ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=1044 flagi0=1212153860 flagj0=4224 flagk0=2162696 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/F-16 Fighting Falcon.dxw ================================================ [target] title0=F-16 Fighting Falcon path0=D:\Games\F16\f1695.exe module0= opengllib0= ver0=0 coord0=0 flag0=134217826 flagg0=1209008128 flagh0=20 flagi0=4 tflag0=259 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 ================================================ FILE: build/exports/F-16 Multirole Fighter.dxw ================================================ [target] title0=F-16 Multirole Fighter path0=D:\Games\F-16\F16.EXE startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/F1 Manager 2000.dxw ================================================ [target] title0=F1 Manager 2000 path0=D:\Games\F1 Manager\F1 Manager.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=681590818 flagg0=1207959552 flagh0=20 flagi0=138420228 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/FIFA 2000.dxw ================================================ [target] title0=FIFA 2000 path0=F:\Games\FIFA2000\fifa2000.exe startfolder0= launchpath0= module0= opengllib0= notes0=Securdrive protected - needs crack registry0= ver0=0 monitorid0=-1 coord0=0 flag0=752877602 flagg0=1216348160 flagh0=20 flagi0=205520900 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 initresw0=800 initresh0=600 ================================================ FILE: build/exports/Fallout.dxw ================================================ [target] title0=Fallout path0=D:\Games\Fallout\FALLOUTW.EXE module0= opengllib0= ver0=1 coord0=0 flag0=134217762 flagg0=1207959552 flagh0=20 flagi0=71303172 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 launchpath0= notes0=On Win10 it was necessary to activate Hook DLL flag and clean system shims. flagj0=128 flagk0=0 swapeffect0=0 registry0= flagl0=0 flagm0=0 maxddinterface0=7 ================================================ FILE: build/exports/Fatal Abyss.dxw ================================================ [target] title0=Fatal Abyss path0=D:\Games\Fatal Abyss\FABYSS.EXE startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=681574434 flagg0=1208090752 flagh0=20 flagi0=138543108 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Fate.dxw ================================================ [target] title0=Fate path0=D:\Games\Fate\Fate.exe module0= opengllib0= ver0=0 coord0=0 flag0=134217762 flagg0=1207959552 flagh0=20 flagi0=4 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 ================================================ FILE: build/exports/Faust the seven games of the soul.dxw ================================================ [target] title0=Faust the seven games of the soul path0=D:\Games\Faust\Faust.exe launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=134217762 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=67113088 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Fifa 99 (Direct3D).dxw ================================================ [target] title0=Fifa 99 (Direct3D) path0=D:\Games\Fifa 99\fifa99.exe launchpath0= module0= opengllib0= ver0=0 coord0=0 flag0=671105058 flagg0=1207959552 flagh0=20 flagi0=205520900 flagj0=128 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 notes0= flagk0=65536 swapeffect0=0 registry0= flagl0=0 flagm0=0 maxddinterface0=7 ================================================ FILE: build/exports/Fifa 99 (sw renderer).dxw ================================================ [target] title0=Fifa 99 (sw renderer) path0=D:\Games\Fifa 99\fifa99.exe launchpath0= module0= opengllib0= ver0=1 coord0=0 flag0=134234146 flagg0=1210073088 flagh0=65556 flagi0=205520900 flagj0=128 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Fighting Force.dxw ================================================ [target] title0=Fighting Force path0=D:\Games\Fighting Force\fforce.exe launchpath0= module0= opengllib0= ver0=0 coord0=0 flag0=134218274 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=67108992 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 notes0= registry0= flagk0=65536 flagl0=0 flagm0=0 swapeffect0=0 maxddinterface0=7 ================================================ FILE: build/exports/Fin-Fin.dxw ================================================ [target] title0=Fin-Fin path0=D:\Games\Fin-Fin\v90seger\teoboot.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=327680 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Final Odyssey.dxw ================================================ [target] title0=Final Odyssey path0=D:\Games\Final odyssey\FinalOdy.exe module0= opengllib0= ver0=0 coord0=0 flag0=134266915 flagg0=1207959552 flagh0=20 flagi0=4194308 tflag0=6146 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 launchpath0= notes0= flagj0=128 flagk0=0 swapeffect0=0 ================================================ FILE: build/exports/FireCrow.dxw ================================================ [target] title0=FireCrow path0=D:\Games\Firecrow\Firecrow.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 monitorid0=-1 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Flying Heroes.dxw ================================================ [target] title0=Flying Heroes path0=D:\Games\Flying_Heroes\fh.exe module0= opengllib0= ver0=0 coord0=0 flag0=134234150 flagg0=1207959552 flagh0=20 flagi0=4194436 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 launchpath0= flagj0=128 notes0= registry0= flagk0=65536 swapeffect0=0 ================================================ FILE: build/exports/Flying Saucer.dxw ================================================ [target] title0=Flying Saucer path0=D:\Games\FLYSAUCR\fs.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314978 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Force 21.dxw ================================================ [target] title0=Force 21 path0=D:\Games\Force 21\Force21.exe launchpath0= module0= opengllib0= ver0=0 coord0=0 flag0=136331298 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=128 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 notes0= flagk0=65536 swapeffect0=0 ================================================ FILE: build/exports/Forsaken (HW).dxw ================================================ [target] title0=Forsaken (HW) path0=D:\Games\Forsaken\ForsakenHW.exe module0= opengllib0= ver0=0 coord0=0 flag0=950026274 flagg0=1207959812 flagh0=20 flagi0=4194308 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 launchpath0= notes0= flagj0=130 flagk0=65536 swapeffect0=0 startfolder0= registry0= monitorid0=0 flagl0=0 flagm0=0 flagn0=0 flago0=0 dflag0=0 maxddinterface0=7 slowratio0=1 scanline0=1 initresw0=0 initresh0=0 [stamp] version=2.04.21.a2 time=Wed Mar 15 22:14:01 2017 ================================================ FILE: build/exports/Future Cop L.A.P.D..dxw ================================================ [target] title0=Future Cop L.A.P.D. path0=D:\Games\Futurcop\FCopLAPD.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=673185826 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 monitorid0=0 scanline0=1 initresw0=0 initresh0=0 [stamp] version=2.04.20.a0 time=Fri Mar 10 11:58:41 2017 ================================================ FILE: build/exports/G-Darius.dxw ================================================ [target] title0=G-Darius path0=D:\Games\G-Darius\G_Darius.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 monitorid0=0 coord0=0 flag0=673185826 flagg0=1207959552 flagh0=262164 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=268435456 flagm0=0 flagn0=0 flago0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=0 swapeffect0=0 maxddinterface0=7 slowratio0=2 scanline0=50 initresw0=800 initresh0=600 [stamp] version=2.04.21.a4 time=Mon Mar 20 14:42:23 2017 ================================================ FILE: build/exports/G-Nome.dxw ================================================ [target] title0=G-Nome path0=D:\Games\G-Nome\G-NOME.EXE module0= opengllib0= ver0=0 coord0=0 flag0=671088674 flagg0=1207959552 flagh0=32788 flagi0=4 tflag0=64 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/GP 500 (win2k obfuscated).dxw ================================================ [target] title0=GP 500 (win2k obfuscated) path0=D:\Games\gp500\gp500_win2k.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 monitorid0=-1 coord0=0 flag0=673185826 flagg0=1207959552 flagh0=20 flagi0=205520900 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=0 swapeffect0=0 maxddinterface0=7 slowratio0=2 scanline0=0 initresw0=800 initresh0=600 ================================================ FILE: build/exports/GP 500.dxw ================================================ [target] title0=GP 500 path0=D:\Games\gp500\gp500_win2k.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=681590834 flagg0=1744830464 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=-2147418110 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/GTA 3.dxw ================================================ [target] title0=GTA 3 path0=D:\Games\GTA3\gta3.exe module0= opengllib0= ver0=0 coord0=0 flag0=134234150 flagg0=1207975952 flagh0=144 flagi0=4194304 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 startfolder0= launchpath0= notes0= registry0= flagj0=0 flagk0=1048576 flagl0=0 flagm0=0 dflag0=0 winver0=0 maxres0=0 swapeffect0=0 maxddinterface0=7 slowratio0=1 ================================================ FILE: build/exports/GTA window.dxw ================================================ [target] title0=GTA window path0=D:\Games\gta1\gtawin\gtawin.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0=\n[HKEY_LOCAL_MACHINE\SOFTWARE\DMA Design]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\DMA Design\Grand Theft Auto]\n"Language"=dword:00000000\n"Path"="."\n"Installed"=dword:00000001\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\DMA Design\Grand Theft Auto\1.00.000]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\DMA Design\Grand Theft Auto\Controls]\n"Control 0"=dword:000000cb\n"Control 1"=dword:000000cd\n"Control 2"=dword:000000c8\n"Control 3"=dword:000000d0\n"Control 4"=dword:00000039\n"Control 5"=dword:0000001c\n"Control 6"=dword:0000001d\n"Control 7"=dword:0000002d\n"Control 8"=dword:0000002c\n"Control 9"=dword:0000000f\n\n ver0=0 monitorid0=-1 coord0=0 flag0=673185826 flagg0=1207959552 flagh0=9236 flagi0=1212153860 flagj0=4224 flagk0=65536 flagl0=32768 flagm0=5 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=0 swapeffect0=0 maxddinterface0=7 slowratio0=2 scanline0=0 initresw0=800 initresh0=600 ================================================ FILE: build/exports/GTA2.dxw ================================================ [target] title0=GTA2 path0=D:\Games\gta2\gta2.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 monitorid0=-1 coord0=0 flag0=673194018 flagg0=1208221696 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=0 swapeffect0=0 maxddinterface0=7 slowratio0=2 scanline0=0 initresw0=800 initresh0=600 ================================================ FILE: build/exports/Galapagos demo.dxw ================================================ [target] title0=Galapagos demo path0=D:\Games\Galapagos Demo\Galapagos Demo.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 monitorid0=-1 coord0=0 flag0=674250814 flagg0=1208221696 flagh0=33300 flagi0=138412036 flagj0=469766272 flagk0=67616 flagl0=92340240 flagm0=0 flagn0=0 flago0=0 tflag0=0 dflag0=0 posx0=150 posy0=150 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 scanline0=1 initresw0=640 initresh0=480 [stamp] version=2.04.20.a2 time=Mon Mar 13 13:51:23 2017 ================================================ FILE: build/exports/Galapagos.dxw ================================================ [target] title0=Galapagos path0=F:\Games\Galapagos\GALA.EXE startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 monitorid0=-1 coord0=0 flag0=137379902 flagg0=1207959552 flagh0=33300 flagi0=138412036 flagj0=469766272 flagk0=67584 flagl0=92340240 flagm0=0 tflag0=0 dflag0=0 posx0=150 posy0=150 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 initresw0=640 initresh0=480 ================================================ FILE: build/exports/Garfield - Caught in the Act.dxw ================================================ [target] title0=Garfield - Caught in the Act path0=F:\Games\Garfield\GARFIELD.NOSHIM.EXE startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 monitorid0=-1 coord0=0 flag0=673185826 flagg0=1208221696 flagh0=65556 flagi0=138412036 flagj0=4226 flagk0=327680 flagl0=8421376 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=0 swapeffect0=0 maxddinterface0=7 slowratio0=2 scanline0=0 initresw0=320 initresh0=224 ================================================ FILE: build/exports/Geneforge (Steam).dxw ================================================ [target] title0=Geneforge (Steam) path0=D:\Program Files (x86)\Steam\SteamApps\common\Geneforge\Geneforge.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314918 flagg0=1207959552 flagh0=20 flagi0=134217732 flagj0=4224 flagk0=65536 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Geneforge 2 (Steam).dxw ================================================ [target] title0=Geneforge 2 (Steam) path0=D:\Program Files (x86)\Steam\SteamApps\common\Geneforge 2\Geneforge 2.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314918 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=67584 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Geneforge 3 (Steam).dxw ================================================ [target] title0=Geneforge 3 (Steam) path0=D:\Program Files (x86)\Steam\SteamApps\common\Geneforge 3\Geneforge 3.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314918 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Geneforge 4 (Steam).dxw ================================================ [target] title0=Geneforge 4 (Steam) path0=D:\Program Files (x86)\Steam\SteamApps\common\Geneforge 4\Geneforge 4.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314918 flagg0=1207959552 flagh0=20 flagi0=134217732 flagj0=4224 flagk0=65536 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Geneforge.dxw ================================================ [target] title0=Geneforge path0=d:\games\Geneforge\Geneforge.exe module0= opengllib0= ver0=0 coord0=0 flag0=134234628 flagg0=1207959808 flagh0=20 flagi0=4 tflag0=64 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Genocide (ORIGINAL).dxw ================================================ [target] title0=Genocide (ORIGINAL) path0=D:\Games\genocide\original vanilla (1998)\Genocide\genocide.exe module0= opengllib0= ver0=0 coord0=0 flag0=134218274 flagg0=1207959552 flagh0=20 flagi0=4194308 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 launchpath0= notes0= flagj0=128 flagk0=65536 swapeffect0=0 registry0= flagl0=0 flagm0=0 maxddinterface0=7 ================================================ FILE: build/exports/Genocide (REMIXED VERSION).dxw ================================================ [target] title0=Genocide (REMIXED VERSION) path0=D:\Games\genocide\remixed version (1999)\genocide\genocide.exe module0= opengllib0= ver0=0 coord0=0 flag0=134217762 flagg0=1207959552 flagh0=20 flagi0=4194308 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 launchpath0= notes0= flagj0=128 flagk0=65536 swapeffect0=0 registry0= flagl0=0 flagm0=0 maxddinterface0=7 ================================================ FILE: build/exports/Gooka The Mystery of Janatris.dxw ================================================ [target] title0=Gooka The Mystery of Janatris path0=D:\Games\Gooka The Mystery of Janatris\Gooka\Gooka2.exe launchpath0= module0= opengllib0= notes0=Starforce protected: is working only with proper crack.\nThe game has a native windowed mode.\nTo use DxWnd configure it in fullscreen mode.\nSetting audio in 3D mode (in advanced game settings" may cause a game error \nafter the main menu at game starting! registry0= ver0=0 coord0=0 flag0=136315402 flagg0=1207959552 flagh0=20 flagi0=4194308 flagj0=4224 flagk0=268500992 flagl0=8 flagm0=0 tflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 ================================================ FILE: build/exports/Gorky 17.dxw ================================================ [target] title0=Gorky 17 path0=F:\Games\Gorky 17\gorky17.exe launchpath0= module0= opengllib0= notes0=Note: a ddraw error in the initial stage pops out a misleading "missing CD" dialog. ver0=0 coord0=0 flag0=134217762 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 startfolder0= registry0= monitorid0=0 flagl0=0 flagm0=0 dflag0=0 maxddinterface0=7 slowratio0=1 scanline0=1 initresw0=0 initresh0=0 ================================================ FILE: build/exports/Grand Prix Legends.dxw ================================================ [target] title0=Grand Prix Legends path0=D:\Games\gpl\gpl.exe module0= opengllib0= ver0=0 coord0=0 flag0=679485472 flagg0=1207959552 flagh0=20 flagi0=4 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=0 ================================================ FILE: build/exports/Grand Prix World.dxw ================================================ [target] title0=Grand Prix World path0=D:\Games\Grand Prix World\gpwxp2.exe module0= opengllib0= ver0=0 coord0=0 flag0=134283430 flagg0=1207959680 flagh0=29 flagi0=4194308 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 launchpath0= winver0=0 maxres0=0 notes0= flagj0=128 flagk0=65536 swapeffect0=0 ================================================ FILE: build/exports/Grand Theft Auto 3 Vice City.dxw ================================================ [target] title0=Grand Theft Auto 3: Vice City path0=D:\Games\GTA3ViceCity\gta-vc.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=-2011168218 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 ================================================ FILE: build/exports/Ground Control (sw renderer).dxw ================================================ [target] title0=Ground Control (sw renderer) path0=D:\Games\GC\gc.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 monitorid0=-1 coord0=0 flag0=681574442 flagg0=1208090624 flagh0=8212 flagi0=138412036 flagj0=4224 flagk0=0 flagl0=67141648 flagm0=0 flagn0=0 flago0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=1 scanline0=1 initresw0=0 initresh0=0 [stamp] version=2.04.21.a6 time=Wed Mar 22 12:11:46 2017 ================================================ FILE: build/exports/Ground Control.dxw ================================================ [target] title0=Ground Control path0=D:\Games\GC\gc.exe launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=681574434 flagg0=1744830464 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=0 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Gruntz.dxw ================================================ [target] title0=Gruntz path0=D:\Games\gruntz\GRUNTZ.EXE module0= opengllib0= ver0=0 coord0=0 flag0=134234146 flagg0=1207959552 flagh0=67108884 flagi0=4325380 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 launchpath0= notes0= flagj0=128 flagk0=65536 swapeffect0=0 ================================================ FILE: build/exports/Gunbound (fullscreen).dxw ================================================ [target] title0=Gunbound (fullscreen) path0=F:\Games\GunboundGitzWC\gitzgame.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 monitorid0=0 coord0=1 flag0=681582626 flagg0=1073741840 flagh0=20 flagi0=136314884 flagj0=4224 flagk0=67584 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=0 sizy0=0 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 initresw0=0 initresh0=0 ================================================ FILE: build/exports/Gunbound.dxw ================================================ [target] title0=Gunbound path0=D:\Games\GunBound\GunGame.gme launchpath0=D:\Games\GunBound\Launcher.exe module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314922 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 ================================================ FILE: build/exports/H.E.D.Z..dxw ================================================ [target] title0=H.E.D.Z. path0=D:\Games\HEDZ\HEDZ.EXE launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=681574434 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=134221952 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 flagk0=65536 swapeffect0=0 ================================================ FILE: build/exports/Hamsterball.dxw ================================================ [target] title0=Hamsterball path0=D:\Games\Hamsterball\Hamsterball.exe module0= opengllib0= ver0=8 coord0=0 flag0=134217762 flagg0=1207959552 flagh0=20 flagi0=4194304 tflag0=64 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 launchpath0= notes0= flagj0=0 flagk0=0 winver0=0 maxres0=0 swapeffect0=0 ================================================ FILE: build/exports/Heart of Darkness.dxw ================================================ [target] title0=Heart of Darkness path0=D:\Games\Heart of Darkness\HODWin32.exe module0= opengllib0= ver0=0 coord0=0 flag0=134217762 flagg0=1207959552 flagh0=2068 flagi0=4 tflag0=64 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Hearts of Iron III.dxw ================================================ [target] title0=Hearts of Iron III path0=D:\Games\Hearts of Iron III\hoi3game.exe launchpath0= module0= opengllib0= ver0=0 coord0=0 flag0=704774688 flagg0=1207959568 flagh0=20 flagi0=138412036 flagj0=128 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Heavy Gear.dxw ================================================ [target] title0=Heavy Gear path0=D:\Games\Heavy Gear\hg.exe startfolder0= launchpath0= module0= opengllib0= notes0=Game needs CD on first CD-Rom drive. \nIf multiple ones are present, need setting "hide empty CD-Rom drivers" \nand unmount others CD.\nGame patched with patch v1.2 requires "fix FreeLibrary" flag\n3DFX & Glide support is still under development registry0= ver0=0 monitorid0=-1 coord0=0 flag0=681574434 flagg0=1207959552 flagh0=20 flagi0=-2009071612 flagj0=4224 flagk0=65536 flagl0=134217728 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 initresw0=800 initresh0=600 ================================================ FILE: build/exports/Hercules.dxw ================================================ [target] title0=Hercules path0=D:\Games\HERC\HERCULES.EXE launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=134217762 flagg0=1744830464 flagh0=1044 flagi0=1212153862 flagj0=4224 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 registry0=\n[HKEY_LOCAL_MACHINE\SOFTWARE]\n[HKEY_LOCAL_MACHINE\SOFTWARE\Disney Interactive]\n[HKEY_LOCAL_MACHINE\SOFTWARE\Disney Interactive\Hercules]\n[HKEY_LOCAL_MACHINE\SOFTWARE\Disney Interactive\Hercules\1.00]\n"DATA"="DATA\\"\n"User Path"=".\\"\n"BitVersion"="32 Bit"\n"PATH"=".\\"\n"EntryPoint"=".\\Hercules.exe"\n"Help"=".\\hercules.hlp"\n"Uninstall"="C:\\WINDOWS\\uninst.exe -fC:\\Hercules\\DeIsL1.isu"\n"Config"=hex:05,ca,ab,07,01,01,01,00,03,01,01,00,01,01,01,00,ff,3f,00,00,01,00,ff,ff,03,00,00,00,26,00,28,00,25,00,27,00,58,00,5a,00,43,00,44,00,53,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 flagk0=0 swapeffect0=0 ================================================ FILE: build/exports/Heroes of Might and Magic 4 Complete.dxw ================================================ [target] title0=Heroes of Might and Magic 4 Complete path0=D:\Games\Heroes of Might and Magic 4 Complete\heroes4.exe module0= opengllib0= ver0=0 coord0=0 flag0=671350818 flagg0=1207959552 flagh0=65556 flagi0=5 tflag0=64 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Heroes of Might and Magic IV.dxw ================================================ [target] title0=Heroes of Might and Magic IV path0=D:\Games\Heroes of Might and Magic IV\heroes4i.exe module0= opengllib0= ver0=0 coord0=0 flag0=136314914 flagg0=1276117072 flagh0=65556 flagi0=4194304 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 launchpath0= notes0=According to BigManJapan, the game may require also "Use DLL Injection" and "GDI Mode". flagj0=128 flagk0=0 winver0=0 maxres0=0 swapeffect0=0 ================================================ FILE: build/exports/Hesperian Wars.dxw ================================================ [target] title0=Hesperian Wars path0=D:\Games\Hesperian_Wars\HW.EXE module0= opengllib0= ver0=0 coord0=0 flag0=134217762 flagg0=1207959552 flagh0=-2147483628 flagi0=4194308 tflag0=64 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 launchpath0= flagj0=128 ================================================ FILE: build/exports/Hexen II (GDI).dxw ================================================ [target] title0=Hexen II (GDI) path0=D:\Games\Hexen II - RIP\h2.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 monitorid0=-1 coord0=0 flag0=673185827 flagg0=1209401344 flagh0=65556 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=0 swapeffect0=0 maxddinterface0=7 slowratio0=2 scanline0=0 initresw0=800 initresh0=600 ================================================ FILE: build/exports/Hexen II (OpenGl).dxw ================================================ [target] title0=Hexen II (OpenGl) path0=D:\Games\Hexen II - RIP\glh2.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 monitorid0=-1 coord0=0 flag0=673185827 flagg0=1209401344 flagh0=65556 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=0 swapeffect0=0 maxddinterface0=7 slowratio0=2 scanline0=0 initresw0=800 initresh0=600 ================================================ FILE: build/exports/Hexen95.dxw ================================================ [target] title0=Hexen95 path0=D:\Games\HEXEN95\HEXEN95.EXE launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=671088674 flagg0=1207959552 flagh0=65556 flagi0=138412036 flagj0=4224 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Hexplore.dxw ================================================ [target] title0=Hexplore path0=D:\Games\Hexplore\hexplore.exe launchpath0= module0= opengllib0= ver0=0 coord0=0 flag0=134236194 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 notes0= registry0= flagk0=65536 swapeffect0=0 ================================================ FILE: build/exports/Hitchcock the Final Cut.dxw ================================================ [target] title0=Hitchcock the Final Cut path0=D:\Games\Hitchcock\Hitchcock_Kyro.exe launchpath0= module0= opengllib0= notes0= ver0=1 coord0=0 flag0=134217762 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=67113088 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Hitman - Codename 47.dxw ================================================ [target] title0=Hitman - Codename 47 path0=D:\Games\Hitman - Codename 47\Hitman.Exe module0= opengllib0= ver0=1 coord0=0 flag0=134234144 flagg0=1207959808 flagh0=20 flagi0=4 tflag0=3 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 ================================================ FILE: build/exports/Hitman 2 Silent Assassin.dxw ================================================ [target] title0=Hitman 2 Silent Assassin path0=D:\Games\Hitman 2 Silent Assassin\hitman2.exe module0= opengllib0= ver0=0 coord0=2 flag0=134234150 flagg0=1207959568 flagh0=20 flagi0=4 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 ================================================ FILE: build/exports/Hollywood Monsters.dxw ================================================ [target] title0=Hollywood Monsters path0=D:\Games\Hollywood Monsters\monsters.exe module0= opengllib0= ver0=0 coord0=0 flag0=134217762 flagg0=1209008384 flagh0=20 flagi0=4194308 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 launchpath0= notes0= flagj0=128 ================================================ FILE: build/exports/Homeworld 2.dxw ================================================ [target] title0=Homeworld 2 path0=D:\Games\Homeworld2\Bin\Release\Homeworld2.exe module0= opengllib0= ver0=0 coord0=0 flag0=671154178 flagg0=134217728 flagh0=285 flagi0=0 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 ================================================ FILE: build/exports/Homeworld.dxw ================================================ [target] title0=Homeworld path0=D:\Games\Homeworld\Homeworld.exe module0= opengllib0= ver0=0 coord0=0 flag0=704667682 flagg0=1208090896 flagh0=20 flagi0=4194308 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 launchpath0= notes0= flagj0=128 flagk0=65536 swapeffect0=0 ================================================ FILE: build/exports/Hoppop'n.dxw ================================================ [target] title0=Hoppop'n path0=D:\Games\Hoppop'n\hoppopn.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=2162688 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Horde 2 the Citadel.dxw ================================================ [target] title0=Horde 2 the Citadel path0=D:\Games\Horde2\HORDE\horde2.exe module0= opengllib0= ver0=0 coord0=0 flag0=136314918 flagg0=1207959552 flagh0=20 flagi0=4194308 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 launchpath0= notes0= flagj0=128 flagk0=0 swapeffect0=0 ================================================ FILE: build/exports/Horde.dxw ================================================ [target] title0=Horde path0=D:\Games\HORDE\horde.exe module0= opengllib0= ver0=0 coord0=0 flag0=134217766 flagg0=1207959552 flagh0=20 flagi0=4194308 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 launchpath0= notes0= flagj0=128 ================================================ FILE: build/exports/Hot Chix 'n' Gear Stix (demo).dxw ================================================ [target] title0=Hot Chix 'n' Gear Stix (demo) path0=D:\Games\Hot Chix 'n' Gear Stix\HotChix.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314914 flagg0=1749024768 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/House of the Dead 2.dxw ================================================ [target] title0=House of the Dead 2 path0=D:\Games\HOD2\Hod2.exe module0= opengllib0= ver0=0 coord0=0 flag0=738197538 flagg0=1744830464 flagh0=20 flagi0=4194308 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 launchpath0= notes0= flagj0=128 flagk0=65536 swapeffect0=0 registry0= ================================================ FILE: build/exports/Hoyle Casino 2001.dxw ================================================ [target] title0=Hoyle Casino 2001 path0=D:\Games\Hoyle Casino 2001\Hoyle Casino.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 monitorid0=-1 coord0=0 flag0=136314882 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Hoyle Casino Empire (GDI emulation).dxw ================================================ [target] title0=Hoyle Casino Empire (GDI emulation) path0=D:\Games\Hoyle Casino Empire\CasinoEmpire.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=142606368 flagg0=1242562560 flagh0=20 flagi0=205520900 flagj0=8392832 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 ================================================ FILE: build/exports/Hoyle Casino Empire (fullscreen).dxw ================================================ [target] title0=Hoyle Casino Empire (fullscreen) path0=D:\Games\Hoyle Casino Empire\CasinoEmpire.exe launchpath0= module0= opengllib0= ver0=0 coord0=0 flag0=134217762 flagg0=1073741824 flagh0=20 flagi0=138412036 flagj0=4224 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Hoyle Casino Empire.dxw ================================================ [target] title0=Hoyle Casino Empire path0=D:\Games\Hoyle Casino Empire\CasinoEmpire.exe launchpath0= module0= opengllib0= ver0=0 coord0=0 flag0=142606370 flagg0=1242562560 flagh0=20 flagi0=205520900 flagj0=4224 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 notes0= flagk0=0 swapeffect0=0 ================================================ FILE: build/exports/Hundred Swords.dxw ================================================ [target] title0=Hundred Swords path0=D:\Games\Hundred Swords\H_SWORDS.exe module0= opengllib0= ver0=1 coord0=0 flag0=402653472 flagg0=1212153856 flagh0=20 flagi0=4 tflag0=6210 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=4 maxres0=-1 ================================================ FILE: build/exports/Hydro Thunder.dxw ================================================ [target] title0=Hydro Thunder path0=D:\Games\Hydro Thunder\hydro.exe module0= opengllib0= ver0=0 coord0=0 flag0=706740258 flagg0=1207959552 flagh0=20 flagi0=4194308 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 launchpath0= notes0= flagj0=128 flagk0=65536 swapeffect0=0 registry0= ================================================ FILE: build/exports/Hyper Crazy Climber.dxw ================================================ [target] title0=Hyper Crazy Climber path0=D:\Games\Hyper Crazy Climber\CRAZY.EXE launchpath0= module0= opengllib0= notes0= registry0= ver0=1 coord0=0 flag0=681574434 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=196608 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/HyperBlade.dxw ================================================ [target] title0=HyperBlade path0=D:\Games\HyperBlade\HYPERX.EXE startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 monitorid0=-1 coord0=0 flag0=673185826 flagg0=1209008128 flagh0=8212 flagi0=138412036 flagj0=4224 flagk0=67174400 flagl0=268435456 flagm0=5 flagn0=0 flago0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=0 swapeffect0=0 maxddinterface0=7 slowratio0=2 scanline0=0 initresw0=800 initresh0=600 [stamp] version=2.04.20.a2 time=Mon Mar 13 13:54:22 2017 ================================================ FILE: build/exports/I-War.dxw ================================================ [target] title0=I-War path0=D:\Games\iwar\IWar.exe launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=134217762 flagg0=1476395008 flagh0=20 flagi0=138412036 flagj0=536875136 tflag0=512 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Icewind Dale 2.dxw ================================================ [target] title0=Icewind Dale 2 path0=D:\Games\Icewind Dale 2\IWD2.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=278 flagi0=138543108 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Icewind Dale II.dxw ================================================ [target] title0=Icewind Dale II path0=D:\Games\DnDMC\Icewind Dale II\IWD2.exe launchpath0= module0= opengllib0= ver0=0 coord0=0 flag0=134217762 flagg0=1207959552 flagh0=20 flagi0=138543108 flagj0=8320 tflag0=129 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Icewind Dale.dxw ================================================ [target] title0=Icewind Dale path0=D:\Games\DnDMC\Icewind Dale\IDMain.exe launchpath0= module0= opengllib0= ver0=0 coord0=0 flag0=134217762 flagg0=1207959552 flagh0=20 flagi0=138543108 flagj0=8320 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Imperialism II.dxw ================================================ [target] title0=Imperialism II path0=D:\Games\Imperialism 2\imperialism II.exe module0= opengllib0= ver0=0 coord0=0 flag0=679485474 flagg0=1209008128 flagh0=20 flagi0=4194308 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=0 launchpath0= notes0= registry0= flagj0=0 flagk0=32768 swapeffect0=0 flagl0=4 flagm0=0 maxddinterface0=7 ================================================ FILE: build/exports/Imperialism.dxw ================================================ [target] title0=Imperialism path0=D:\Games\Imperialism\Imperialism.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=681582627 flagg0=1209008128 flagh0=20 flagi0=4194308 flagj0=128 flagk0=0 flagl0=268435456 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=1 monitorid0=0 scanline0=1 initresw0=0 initresh0=0 ================================================ FILE: build/exports/In the Hunt.dxw ================================================ [target] title0=In the Hunt path0=D:\Games\HUNT\E8.EXE startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Incoming (GOG).dxw ================================================ [target] title0=Incoming (GOG) path0=D:\Games\Incoming and Incoming Forces\Incoming\incoming.exe module0= opengllib0= ver0=7 coord0=0 flag0=134217762 flagg0=1207959552 flagh0=20 flagi0=4194308 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 launchpath0= flagj0=128 notes0= flagk0=65536 swapeffect0=0 ================================================ FILE: build/exports/Incoming Forces (GOG).dxw ================================================ [target] title0=Incoming Forces (GOG) path0=D:\Games\Incoming and Incoming Forces\Incoming Forces\forces.exe module0= opengllib0= ver0=0 coord0=0 flag0=134218272 flagg0=1207959552 flagh0=20 flagi0=4 tflag0=1024 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Indiana Jones and the Infernal Machine.dxw ================================================ [target] title0=Indiana Jones and the Infernal Machine path0=D:\Games\Indiana Jones Infernal Machine\Resource\Indy3D.exe launchpath0= module0= opengllib0= notes0=Beware!\nThe game on nowadays computers works only using a no-cd crack \nand a dedicated installer for 64 bit platforms! registry0= ver0=0 coord0=0 flag0=673185826 flagg0=1207959552 flagh0=20 flagi0=-2009071610 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 ================================================ FILE: build/exports/IndyCar Series.dxw ================================================ [target] title0=IndyCar Series path0=D:\Games\IndyCar Series\IndyCarSeries.exe launchpath0= module0= opengllib0= ver0=8 coord0=0 flag0=134234656 flagg0=1207959552 flagh0=20 flagi0=138412036 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Inquisition.dxw ================================================ [target] title0=Inquisition path0=D:\Games\Inquisition\inq.tmp.exe startfolder0= launchpath0= module0= opengllib0= notes0=Note:\nthe file Inquisition.exe copies part of itself to a temporary directory, runs this\nexecutable and delete it in the end.\nTo hook the game properly you have to:\n1) run the game normally\n2) Alt-tab and start the task manager\n3) locate the inquisition running process, possibly _inq.tmp\n4) copy the temp file to a safe place and rename it (es. inq.tmp.exe)\n5) kill the fullscreen inquisition and run DxWnd with this configuration registry0= ver0=0 monitorid0=-1 coord0=0 flag0=673185826 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=268435456 flagm0=0 flagn0=0 flago0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=0 swapeffect0=0 maxddinterface0=7 slowratio0=2 scanline0=0 initresw0=800 initresh0=600 [stamp] version=2.04.21.a4 time=Sat Mar 18 22:20:11 2017 ================================================ FILE: build/exports/Insane.dxw ================================================ [target] title0=Insane path0=D:\Games\Insane\Game.exe launchpath0= module0= opengllib0= ver0=7 coord0=0 flag0=134217760 flagg0=1207959553 flagh0=20 flagi0=4194308 tflag0=6146 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Intensity XS.dxw ================================================ [target] title0=Intensity XS path0=D:\Games\Intensity_XS\Intensity.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=134217732 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/International Football 2000.dxw ================================================ [target] title0=International Football 2000 path0=D:\Games\International Football 2000\MSIF2000.ICD module0= opengllib0= ver0=0 coord0=0 flag0=150994976 flagg0=1207959552 flagh0=20 flagi0=4194308 tflag0=259 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 launchpath0=D:\Games\International Football 2000\MSIF2000.EXE winver0=0 maxres0=0 ================================================ FILE: build/exports/Interstate 76 Nitro Pack.dxw ================================================ [target] title0=Interstate 76 Nitro Pack path0=F:\Games\Interstate 76 Nitro Pack\nitro.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 monitorid0=0 coord0=0 flag0=134217762 flagg0=2013265920 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=1 scanline0=1 initresw0=0 initresh0=0 ================================================ FILE: build/exports/Interstate 76.dxw ================================================ [target] title0=Interstate 76 path0=D:\Games\I76\I76.EXE launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=134217762 flagg0=2013265920 flagh0=20 flagi0=138412036 flagj0=4224 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Jagged Alliance 2 Gold.dxw ================================================ [target] title0=Jagged Alliance 2 Gold path0=F:\Games\Jagged Alliance 2 Gold\ja2.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 monitorid0=-1 coord0=0 flag0=-1474297694 flagg0=1744832768 flagh0=8212 flagi0=138412036 flagj0=5248 flagk0=2162696 flagl0=16 flagm0=2305 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 scanline0=0 initresw0=800 initresh0=600 ================================================ FILE: build/exports/Janes FA18.dxw ================================================ [target] title0=Janes FA18 path0=D:\Games\Janes FA18\F18.exe startfolder0= launchpath0= module0=MFC42.DLL opengllib0= notes0= registry0= ver0=0 monitorid0=-1 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Jazz Jackrabbit 2.dxw ================================================ [target] title0=Jazz Jackrabbit 2 path0=D:\Games\Jazz Jackrabbit 2\JAZZ2.EXE module0= opengllib0= ver0=0 coord0=0 flag0=671097378 flagg0=1207959552 flagh0=20 flagi0=4194308 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 launchpath0= notes0= registry0= flagj0=0 flagk0=0 swapeffect0=0 ================================================ FILE: build/exports/Jeff Gordon XS Racing demo.dxw ================================================ [target] title0=Jeff Gordon XS Racing demo path0=D:\Games\Jeff Gordon XS Racing demo\jgxsr711.exe launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=740294690 flagg0=1476395008 flagh0=20 flagi0=138412036 flagj0=4224 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 registry0= flagk0=65536 swapeffect0=0 ================================================ FILE: build/exports/Jeff Wayne's - The War of the Worlds.dxw ================================================ [target] title0=Jeff Wayne's - The War of the Worlds path0=F:\Games\Jeff Wayne's - The War of the Worlds\Wow.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 monitorid0=-1 coord0=0 flag0=681574434 flagg0=1207959552 flagh0=20 flagi0=-2009071612 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Jet Moto.dxw ================================================ [target] title0=Jet Moto path0=D:\Games\Jet_Moto\JETMOTO.EXE module0= opengllib0= ver0=0 coord0=0 flag0=671088674 flagg0=1207959568 flagh0=20 flagi0=0 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 ================================================ FILE: build/exports/JetMoto.dxw ================================================ [target] title0=JetMoto path0=D:\Games\Jet_Moto\JETMOTO.EXE module0= opengllib0= ver0=0 coord0=0 flag0=671088674 flagg0=1207959552 flagh0=20 flagi0=0 tflag0=64 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 ================================================ FILE: build/exports/Jolly Rover.dxw ================================================ [target] title0=Jolly Rover path0=D:\Games\Jolly Rover\rover.exe module0= opengllib0= ver0=0 coord0=0 flag0=134218240 flagg0=1207959552 flagh0=20 flagi0=4 tflag0=64 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Jumpgate Classic.dxw ================================================ [target] title0=Jumpgate Classic path0=D:\Games\Jumpgate\Jumpgate\jumpgate.exe module0= opengllib0= ver0=0 coord0=0 flag0=134234656 flagg0=1207959568 flagh0=84 flagi0=2 tflag0=6146 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/KA52 Team Alligator.dxw ================================================ [target] title0=KA52 Team Alligator path0=D:\Games\Team Alligator\Team2.exe launchpath0= module0= opengllib0= ver0=0 coord0=0 flag0=687865888 flagg0=1207959552 flagh0=20 flagi0=138412036 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/KKND Xtreme.dxw ================================================ [target] title0=KKND Xtreme path0=D:\Games\KKNDXtreme\KKND.exe module0= opengllib0= ver0=0 coord0=0 flag0=402669602 flagg0=1207959552 flagh0=20 flagi0=4194308 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 launchpath0= notes0= flagj0=128 registry0= flagk0=65536 swapeffect0=0 ================================================ FILE: build/exports/Kasbrik 3D.dxw ================================================ [target] title0=Kasbrik 3D path0=D:\Games\Kasbrik\Kasbrik.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=8 coord0=0 flag0=136315426 flagg0=1275068416 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=268763136 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=800 maxy0=600 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Killing Time.dxw ================================================ [target] title0=Killing Time path0=D:\Games\killingtime\KILLTIME.EXE launchpath0= module0= opengllib0= notes0=Movies not rendered correctly ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=0 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Kingpin Life Of Crime (intro).dxw ================================================ [target] title0=Kingpin Life Of Crime (intro) path0=D:\Games\Kingpin Life Of Crime\kpintro.exe launchpath0= module0= opengllib0= ver0=0 coord0=0 flag0=134217762 flagg0=1207959552 flagh0=20 flagi0=134218756 flagj0=128 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Kingpin Life Of Crime.dxw ================================================ [target] title0=Kingpin Life Of Crime path0=D:\Games\Kingpin Life Of Crime\kingpin.exe launchpath0= module0= opengllib0=3dfxgl.dll ver0=9 coord0=0 flag0=134234146 flagg0=1744830464 flagh0=21 flagi0=-2009071610 flagj0=128 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 notes0= ================================================ FILE: build/exports/Kiss Psycho Circus.dxw ================================================ [target] title0=Kiss Psycho Circus path0=D:\Games\Kiss\client.exe module0= opengllib0= ver0=0 coord0=0 flag0=134234148 flagg0=1207959808 flagh0=20 flagi0=0 tflag0=3 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 ================================================ FILE: build/exports/Knight Moves.dxw ================================================ [target] title0=Knight Moves path0=D:\Games\Knight Moves\KNIGHT.EXE startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 monitorid0=-1 coord0=0 flag0=681574434 flagg0=1212153856 flagh0=65556 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=32768 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/KnightShift.dxw ================================================ [target] title0=KnightShift path0=D:\Games\knightshift\KnightShift.ex1 module0= opengllib0= ver0=8 coord0=0 flag0=134217760 flagg0=1207959552 flagh0=20 flagi0=4 tflag0=3 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 ================================================ FILE: build/exports/Knights Of Honor.dxw ================================================ [target] title0=Knights Of Honor path0=D:\Games\Knights Of Honor\KoH.exe module0= opengllib0= ver0=0 coord0=0 flag0=-402382814 flagg0=1207959552 flagh0=65556 flagi0=4 tflag0=6431 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 ================================================ FILE: build/exports/Knights_And_Merchants (1024).dxw ================================================ [target] title0=Knights_And_Merchants (1024) path0=D:\Games\Knights_And_Merchants_-_The_Shattered_Kingdom\KaM_1024.exe launchpath0= module0= opengllib0= ver0=0 coord0=0 flag0=134217762 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=128 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Knights_And_Merchants (800).dxw ================================================ [target] title0=Knights_And_Merchants (800) path0=D:\Games\Knights_And_Merchants_-_The_Shattered_Kingdom\KaM_800.exe launchpath0= module0= opengllib0= ver0=0 coord0=0 flag0=134217762 flagg0=1207959552 flagh0=20 flagi0=134217732 flagj0=128 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Kohan II Kings of War.dxw ================================================ [target] title0=Kohan II Kings of War path0=D:\Games\Kohan II Kings of War\k2.exe module0= opengllib0= ver0=9 coord0=0 flag0=134217762 flagg0=1207959552 flagh0=20 flagi0=4194308 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 launchpath0= winver0=0 maxres0=0 ================================================ FILE: build/exports/L'Elefante a Strisce.dxw ================================================ [target] title0=L'Elefante a Strisce path0=D:\Games\L'Elefante a Strisce\Pilots1I.EXE module0= opengllib0= ver0=0 coord0=0 flag0=134217762 flagg0=134217728 flagh0=20 flagi0=0 tflag0=64 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 ================================================ FILE: build/exports/LEGO Pirates.dxw ================================================ [target] title0=LEGO Pirates path0=d:\Games\Disney Interactive Studios\LEGO Pirates\LEGOPirates.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=9 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/LEGO Star Wars - The Complete Saga.dxw ================================================ [target] title0=LEGO Star Wars - The Complete Saga path0=D:\Games\LEGO Star Wars - The Complete Saga\LEGOStarWarsSaga.exe launchpath0= module0= opengllib0= ver0=0 coord0=0 flag0=134218272 flagg0=1207959552 flagh0=20 flagi0=138412036 tflag0=6402 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/LEGO Star Wars.dxw ================================================ [target] title0=LEGO Star Wars path0=D:\Games\LEGO Star Wars Game\LegoStarwars.crack.exe module0= opengllib0= ver0=0 coord0=0 flag0=134217760 flagg0=134217728 flagh0=20 flagi0=541065216 tflag0=64 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 launchpath0= ================================================ FILE: build/exports/LEGO Stunt Rally.dxw ================================================ [target] title0=LEGO Stunt Rally path0=D:\Games\LEGO Stunt Rally\_msr.exe launchpath0=D:\Games\LEGO Stunt Rally\StuntRally.exe module0= opengllib0= ver0=0 coord0=0 flag0=134217760 flagg0=1207959552 flagh0=20 flagi0=4325380 tflag0=6210 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Land of the Dead.dxw ================================================ [target] title0=Land of the Dead path0=D:\Games\Land of the Dead\System\LOTD.exe module0= opengllib0= ver0=0 coord0=0 flag0=134217766 flagg0=1207959552 flagh0=20 flagi0=0 tflag0=64 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 ================================================ FILE: build/exports/Lander.dxw ================================================ [target] title0=Lander path0=D:\Games\Lander\lndrd3dr\lander.EXE launchpath0= module0= opengllib0= ver0=0 coord0=0 flag0=956317728 flagg0=1207959552 flagh0=20 flagi0=136314884 flagj0=0 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Largo Winch.dxw ================================================ [target] title0=Largo Winch path0=D:\Games\Largo Winch\LargoWinch.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 monitorid0=-1 coord0=0 flag0=673185826 flagg0=1207959552 flagh0=20 flagi0=134217732 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 flagn0=0 flago0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=0 swapeffect0=0 maxddinterface0=7 slowratio0=2 scanline0=0 initresw0=800 initresh0=600 [stamp] version=2.04.21.a4 time=Sun Mar 19 16:02:06 2017 ================================================ FILE: build/exports/Last Bronx.dxw ================================================ [target] title0=Last Bronx path0=D:\Games\Last_Bronx\LB.EXE module0= opengllib0= ver0=0 coord0=0 flag0=134217762 flagg0=1207959552 flagh0=20 flagi0=0 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 ================================================ FILE: build/exports/Last Half od Darkness.dxw ================================================ [target] title0=Last Half od Darkness path0=G:\LastHalfWin.exe launchpath0= module0= opengllib0= ver0=0 coord0=0 flag0=134234656 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=0 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Layer Section.dxw ================================================ [target] title0=Layer Section path0=D:\Games\LS\LS.EXE startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Legacy of Kain Soul Reaver (GOG).dxw ================================================ [target] title0=Legacy of Kain Soul Reaver (GOG) path0=D:\Games\Legacy of Kain Soul Reaver\kain2.exe module0= opengllib0= ver0=7 coord0=0 flag0=671088674 flagg0=1207959552 flagh0=20 flagi0=4194308 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 launchpath0= notes0= flagj0=128 flagk0=65536 swapeffect0=0 ================================================ FILE: build/exports/Legacy of Kain Soul Reaver 2.dxw ================================================ [target] title0=Legacy of Kain Soul Reaver 2 path0=D:\Games\Legacy of Kain Soul Reaver 2\sr2.exe launchpath0= module0= opengllib0= ver0=8 coord0=0 flag0=134218288 flagg0=1207959552 flagh0=20 flagi0=138412036 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Legend of the Prophet & Assassin, the.dxw ================================================ [target] title0=Legend of the Prophet & Assassin, the path0=D:\Games\La leggenda\Legend.exe launchpath0= module0= opengllib0= notes0= ver0=1 coord0=0 flag0=134217762 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=67113088 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Les adventures de Robby le Robot - Mission Code de la route.dxw ================================================ [target] title0=Les adventures de Robby le Robot - Mission Code de la route path0=D:\Games\Robby Robot\VISION.EXE launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=327680 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Little Big Adventure 2 (Windows patch).dxw ================================================ [target] title0=Little Big Adventure 2 (Windows patch) path0=C:\LBA2\TWINSEN.EXE launchpath0= module0= opengllib0= ver0=0 coord0=0 flag0=134218336 flagg0=1480654848 flagh0=84 flagi0=4718592 tflag0=6211 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=1 maxres0=-1 ================================================ FILE: build/exports/Lode Runner 2.dxw ================================================ [target] title0=Lode Runner 2 path0=D:\Games\Lode Runner 2\LR2.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136319010 flagg0=1744830592 flagh0=20 flagi0=138416132 flagj0=4224 flagk0=327680 flagl0=4 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=3 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Loonyland 2 CE.dxw ================================================ [target] title0=Loonyland 2 CE path0=D:\Games\Loonyland2CE\loonyland.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 monitorid0=-1 coord0=0 flag0=673194018 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=268435456 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=0 swapeffect0=0 maxddinterface0=7 slowratio0=2 scanline0=0 initresw0=800 initresh0=600 ================================================ FILE: build/exports/Lords of Magic Special Edition.dxw ================================================ [target] title0=Lords of Magic Special Edition path0=D:\Games\LoM\SIERRA\LOMSE\lomse.exe module0= opengllib0= ver0=0 coord0=0 flag0=402669603 flagg0=1207959552 flagh0=6291476 flagi0=4194304 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 launchpath0= flagj0=128 winver0=0 maxres0=0 notes0= flagk0=65536 swapeffect0=0 ================================================ FILE: build/exports/Lose Your Marbles.dxw ================================================ [target] title0=Lose Your Marbles path0=D:\Games\MARBLES\MARBLES.EXE startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Lost Valley.dxw ================================================ [target] title0=Lost Valley path0=D:\Games\Lost Valley\lost valley\lost valley data.exe module0= opengllib0= ver0=0 coord0=0 flag0=142614562 flagg0=1207959552 flagh0=-2071986156 flagi0=0 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 ================================================ FILE: build/exports/LuXiaoFeng.dxw ================================================ [target] title0=LuXiaoFeng path0=F:\Games\lxf\core.dat startfolder0= launchpath0=F:\Games\lxf\Lxf.exe module0= opengllib0= notes0= registry0= ver0=0 monitorid0=-1 coord0=0 flag0=673185826 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=8704 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=0 swapeffect0=0 maxddinterface0=7 slowratio0=2 scanline0=0 initresw0=800 initresh0=600 ================================================ FILE: build/exports/M1 Tank Platoon 2.dxw ================================================ [target] title0=M1 Tank Platoon 2 path0=D:\Games\M1 Tank Platoon 2\M1TP2.exe launchpath0= module0= opengllib0= ver0=0 coord0=0 flag0=134238242 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=268439680 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=8 winver0=0 maxres0=-1 notes0= registry0= flagk0=0 flagl0=0 flagm0=0 swapeffect0=0 maxddinterface0=7 ================================================ FILE: build/exports/MDK2.dxw ================================================ [target] title0=MDK2 path0=D:\Games\MDK2\mdk2Main.exe module0= opengllib0= ver0=0 coord0=0 flag0=134234146 flagg0=1744961536 flagh0=65556 flagi0=4194308 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 launchpath0= notes0= flagj0=4096 ================================================ FILE: build/exports/Machine Hunter.dxw ================================================ [target] title0=Machine Hunter path0=D:\Games\Machine Hunter\MACHHUNT.EXE startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Madden NFL 08.dxw ================================================ [target] title0=Madden NFL 08 path0=D:\Games\Madden NFL 08\mainapp.exe launchpath0= module0= opengllib0= ver0=9 coord0=0 flag0=134218272 flagg0=1207959808 flagh0=20 flagi0=205520900 flagj0=0 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Mageslayer.dxw ================================================ [target] title0=MageSlayer path0=D:\Games\MAGE\MAGESLAY.EXE module0= opengllib0= ver0=0 coord0=0 flag0=134234146 flagg0=1476395040 flagh0=20 flagi0=4194305 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 launchpath0= notes0=May require "by default set no ALPHACHENNAL" if monitor doesn't support mode flagj0=128 winver0=0 maxres0=0 registry0= flagk0=65536 flagl0=0 flagm0=0 dflag0=0 swapeffect0=0 maxddinterface0=7 ================================================ FILE: build/exports/Magic & Mayhem.dxw ================================================ [target] title0=Magic & Mayhem path0=D:\Games\Magic_&_Mayhem\Chaos.exe module0= opengllib0= ver0=1 coord0=0 flag0=683687978 flagg0=1275068416 flagh0=20 flagi0=4194304 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 launchpath0= winver0=0 maxres0=0 notes0= flagj0=128 flagk0=0 swapeffect0=0 registry0= flagl0=0 flagm0=0 dflag0=0 maxddinterface0=4 ================================================ FILE: build/exports/Mall Tycoon 3.dxw ================================================ [target] title0=Mall Tycoon 3 path0=D:\Games\Mall Tycoon 3\Mall3Game.exe module0= opengllib0= ver0=0 coord0=0 flag0=671089184 flagg0=1207959552 flagh0=20 flagi0=4194308 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Mall Tycoon.dxw ================================================ [target] title0=Mall Tycoon path0=D:\Games\Mall.Tycoon\mall.exe launchpath0= module0= opengllib0= ver0=0 coord0=0 flag0=150994976 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=0 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Man TT Super Bike (fake fullscreen).dxw ================================================ [target] title0=Man TT Super Bike path0=D:\Games\ManTT\MANXTT.EXE startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 monitorid0=-1 coord0=2 flag0=673185827 flagg0=1241514008 flagh0=65556 flagi0=138444804 flagj0=1073747072 flagk0=327680 flagl0=25165824 flagm0=1024 tflag0=0 dflag0=0 posx0=150 posy0=150 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=0 swapeffect0=0 maxddinterface0=7 slowratio0=2 scanline0=0 initresw0=640 initresh0=480 ================================================ FILE: build/exports/Man TT Super Bike.dxw ================================================ [target] title0=Man TT Super Bike path0=D:\Games\ManTT\MANXTT.EXE startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 monitorid0=-1 coord0=0 flag0=673185827 flagg0=1241513984 flagh0=65556 flagi0=138412036 flagj0=4224 flagk0=327680 flagl0=0 flagm0=1024 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=0 swapeffect0=0 maxddinterface0=7 slowratio0=2 scanline0=0 initresw0=640 initresh0=480 ================================================ FILE: build/exports/Marbles.dxw ================================================ [target] title0=Marbles path0=D:\Games\MARBLES\MARBLES.EXE startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 monitorid0=-1 coord0=0 flag0=673185826 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=0 swapeffect0=0 maxddinterface0=7 slowratio0=2 scanline0=0 initresw0=800 initresh0=600 [stamp] version=2.04.20.a0 time=Fri Mar 10 13:34:32 2017 ================================================ FILE: build/exports/Martian Gothic Unification.dxw ================================================ [target] title0=Martian Gothic Unification path0=D:\Games\Martian Gothic\martian gothic.exe module0= opengllib0= ver0=0 coord0=0 flag0=134217762 flagg0=1275068416 flagh0=20 flagi0=4194308 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 launchpath0= notes0= registry0= flagj0=0 flagk0=98304 flagl0=0 flagm0=0 dflag0=0 winver0=0 maxres0=0 swapeffect0=0 maxddinterface0=7 startfolder0= monitorid0=0 slowratio0=1 scanline0=1 initresw0=0 initresh0=0 ================================================ FILE: build/exports/Mechcommander Gold.dxw ================================================ [target] title0=Mechcommander Gold path0=D:\Games\Mechcommander Gold RIP\Mechcommander\MCX.EXE launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=681590818 flagg0=1207959552 flagh0=20 flagi0=138412038 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 ================================================ FILE: build/exports/Mechwarrior 3 (high res).dxw ================================================ [target] title0=Mechwarrior 3 (high res) path0=D:\Games\Mechwarrior 3 - RIP\Mech3.exe launchpath0= module0= opengllib0= notes0= registry0=\n[HKEY_LOCAL_MACHINE\Software]\n[HKEY_LOCAL_MACHINE\Software\MicroProse]\n[HKEY_LOCAL_MACHINE\Software\MicroProse\MechWarrior 3 EP1]\n[HKEY_LOCAL_MACHINE\Software\MicroProse\MechWarrior 3 EP1\1.0]\n"Program"="..\\"\n"Version"="1.0"\n"InstallOptions"=dword:00050707\n\n[HKEY_LOCAL_MACHINE\Software\Microsoft]\n[HKEY_LOCAL_MACHINE\Software\Microsoft\DirectPlay]\n[HKEY_LOCAL_MACHINE\Software\Microsoft\DirectPlay\Applications]\n[HKEY_LOCAL_MACHINE\Software\Microsoft\DirectPlay\Applications\MechWarrior 3 EP1]\n"Guid"="{FA96C421-18DD-11D3-95AF-0060089877F0}"\n"File"="Mech3.exe"\n"CommandLine"="\n"Path"=".\\"\n"CurrentDirectory"=".\\"\n\n[HKEY_CURRENT_USER\Software]\n[HKEY_CURRENT_USER\Software\MicroProse]\n[HKEY_CURRENT_USER\Software\MicroProse\MechWarrior 3]\n[HKEY_CURRENT_USER\Software\MicroProse\MechWarrior 3\1.0]\n"InGameVMode"=dword:0000000a\n ver0=0 coord0=0 flag0=136331398 flagg0=1207959552 flagh0=9236 flagi0=1277165574 flagj0=4224 flagk0=65600 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=1 ================================================ FILE: build/exports/Mechwarrior 3.dxw ================================================ [target] title0=Mechwarrior 3 path0=D:\Games\Mechwarrior 3 (full)\Mech3.exe launchpath0= module0= opengllib0= notes0= registry0=\n[HKEY_LOCAL_MACHINE\Software]\n[HKEY_LOCAL_MACHINE\Software\MicroProse]\n[HKEY_LOCAL_MACHINE\Software\MicroProse\MechWarrior 3 EP1]\n[HKEY_LOCAL_MACHINE\Software\MicroProse\MechWarrior 3 EP1\1.0]\n"Program"="..\\"\n"Version"="1.0"\n"InstallOptions"=dword:00050707\n\n[HKEY_LOCAL_MACHINE\Software\Microsoft]\n[HKEY_LOCAL_MACHINE\Software\Microsoft\DirectPlay]\n[HKEY_LOCAL_MACHINE\Software\Microsoft\DirectPlay\Applications]\n[HKEY_LOCAL_MACHINE\Software\Microsoft\DirectPlay\Applications\MechWarrior 3 EP1]\n"Guid"="{FA96C421-18DD-11D3-95AF-0060089877F0}"\n"File"="Mech3.exe"\n"CommandLine"="\n"Path"=".\\"\n"CurrentDirectory"=".\\"\n\n ver0=0 coord0=0 flag0=136331398 flagg0=1207959552 flagh0=9236 flagi0=1277165574 flagj0=4224 flagk0=65600 flagl0=0 flagm0=0 tflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 ================================================ FILE: build/exports/Medford Asylum.dxw ================================================ [target] title0=Medford Asylum path0=F:\Games\Medford Asylum\MedfordAsylum.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 monitorid0=-1 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=675282948 flagj0=4224 flagk0=65536 flagl0=25165824 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 initresw0=800 initresh0=600 ================================================ FILE: build/exports/Men in Black.dxw ================================================ [target] title0=Men in Black path0=D:\Games\Men in Black\MiBd.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=67436544 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Mephisto Chess.dxw ================================================ [target] title0=Mephisto Chess path0=D:\Games\mephisto\mephisto.exe launchpath0= module0= opengllib0= notes0=Run in window, but needs "Limit available resources" flag to run ver0=0 coord0=0 flag0=536870946 flagg0=1476395008 flagh0=20 flagi0=138412038 flagj0=4224 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Metal Gear Solid VR.dxw ================================================ [target] title0=Metal Gear Solid VR path0=D:\Games\Metal Gear Solid\mgsvr.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=1 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=16 flagi0=138412036 flagj0=4224 flagk0=327680 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Metal Gear Solid.dxw ================================================ [target] title0=Metal Gear Solid path0=D:\Games\Metal Gear Solid\mgsi.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=1 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=327680 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Metal Knight.dxw ================================================ [target] title0=Metal Knight RIP path0=D:\Games\Metal Knight RIP\mk.exe module0= opengllib0= ver0=0 coord0=0 flag0=134217762 flagg0=134217728 flagh0=20 flagi0=4 tflag0=64 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Microsoft Golf '98 trial (win).dxw ================================================ [target] title0=Microsoft Golf '98 trial (win) path0=D:\Games\MSGolf98\MSGOLF98\GAME.EXE launchpath0= module0= opengllib0= notes0= registry0=[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft]\n[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft Games]\n[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft Games\Golf '98]\n[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft Games\Golf '98\Version 1.0 Demo]\n"AppPath"="D:\\Games\\MSGolf98\\MSGOLF98"\n"InstallType"="1"\n"InstallPath"="D:\\Games\\MSGolf98\\MSGOLF98\\"\n"CDPath"="D:\\Games\\MSGolf98\\MSGOLF98"\n"Launched"="1"\n"PID"=""\n"Path"="D:\\Games\\MSGolf98\\MSGOLF98"\n"VersionType"="TrialVersion"\n"InstalledGroup"="1"\n"LangID"=dword:00000009\n ver0=0 coord0=0 flag0=136314914 flagg0=-671088640 flagh0=1302 flagi0=1212547076 flagj0=4224 flagk0=67436544 flagl0=4 flagm0=0 tflag0=0 posx0=50 posy0=50 sizx0=0 sizy0=0 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 ================================================ FILE: build/exports/Microsoft Golf '98 trial.dxw ================================================ [target] title0=Microsoft Golf '98 trial (win) path0=D:\Games\MSGolf98\MSGOLF98\GAME.EXE launchpath0= module0= opengllib0= notes0= registry0=[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft]\n[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft Games]\n[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft Games\Golf '98]\n[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft Games\Golf '98\Version 1.0 Demo]\n"AppPath"="D:\\Games\\MSGolf98\\MSGOLF98"\n"InstallType"="1"\n"InstallPath"="D:\\Games\\MSGolf98\\MSGOLF98\\"\n"CDPath"="D:\\Games\\MSGolf98\\MSGOLF98"\n"Launched"="1"\n"PID"=""\n"Path"="D:\\Games\\MSGolf98\\MSGOLF98"\n"VersionType"="TrialVersion"\n"InstalledGroup"="1"\n"LangID"=dword:00000009\n ver0=0 coord0=0 flag0=136314914 flagg0=-671088640 flagh0=1302 flagi0=1212547076 flagj0=4224 flagk0=67436544 flagl0=4 flagm0=0 tflag0=0 posx0=50 posy0=50 sizx0=0 sizy0=0 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 ================================================ FILE: build/exports/Microsoft Golf 1998 Edition.dxw ================================================ [target] title0=Microsoft Golf 1998 Edition path0=D:\Games\Microsoft Golf 1998 Edition\game.exe launchpath0= module0= opengllib0= notes0= registry0=[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft]\n[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft Games]\n[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft Games\Golf '98]\n[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft Games\Golf '98\Version 1.0 Demo]\n"AppPath"="D:\\Games\\MSGolf98\\MSGOLF98"\n"InstallType"="1"\n"InstallPath"="D:\\Games\\MSGolf98\\MSGOLF98\\"\n"CDPath"="D:\\Games\\MSGolf98\\MSGOLF98"\n"Launched"="1"\n"PID"=""\n"Path"="D:\\Games\\MSGolf98\\MSGOLF98"\n"VersionType"="TrialVersion"\n"InstalledGroup"="1"\n"LangID"=dword:00000009\n ver0=0 coord0=0 flag0=136314914 flagg0=-671088640 flagh0=1302 flagi0=1212547076 flagj0=4224 flagk0=327680 flagl0=260 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=0 sizy0=0 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=1 ================================================ FILE: build/exports/Microsoft Golf 1999 Edition.dxw ================================================ [target] title0=Microsoft Golf 1999 Edition path0=D:\Games\Microsoft Golf 1999 Edition\game.exe launchpath0= module0= opengllib0= notes0=Install instructions for Win7:\nRun setup from the cd with Win95 compatibility\nIf the setup copies 100% files but fails the final setting phase, \nedit the virtual registry settings.\nRemember to delete / rename the odious Backfill.exe before it requires you to \nrestart the pc....\n registry0=[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft]\n[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft Games]\n[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft Games\Golf '99]\n[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft Games\Golf '99\Version 1.0]\n"InstalledPATH"="D:\\Games\\Microsoft Golf 1999 Edition"\n"CDPath"="E:\\"\n"InstalledGroup"="1"\n ver0=0 coord0=0 flag0=136314914 flagg0=-134217728 flagh0=1302 flagi0=1212547076 flagj0=4224 flagk0=327680 flagl0=260 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=0 sizy0=0 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=1 ================================================ FILE: build/exports/Microsoft Golf 2001.dxw ================================================ [target] title0=Microsoft Golf 2001 path0=D:\Games\msgolf2001\golf2001.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=-2011148254 flagg0=1207960576 flagh0=20 flagi0=138412036 flagj0=69210240 flagk0=327680 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 ================================================ FILE: build/exports/Microsoft Midtown Madness.dxw ================================================ [target] title0=Microsoft Midtown Madness path0=D:\Games\Midtown Madness\midtown.exe launchpath0= module0= opengllib0= notes0= ver0=7 coord0=0 flag0=-1474297822 flagg0=1207959552 flagh0=33554448 flagi0=205520900 flagj0=4224 flagk0=66048 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 registry0= ================================================ FILE: build/exports/Microsoft Motocross Madness 2 (emu).dxw ================================================ [target] title0=Microsoft Motocross Madness 2 (emu) path0=D:\Games\Motocross Madness 2\mcm2.exe launchpath0= module0= opengllib0= notes0=Run the game in emulation mode\nDoesn't work on all video cards, and works only chosing the accelerated video card, \nnot the software mode.\nIn case of troubles, it may be necessary to delete the registry entries to force a \nnew clean configuration. ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=8192 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Microsoft Motocross Madness 2 trial.dxw ================================================ [target] title0=Microsoft Motocross Madness 2 trial path0=D:\Games\Motocross Madness 2 trial\mcm2.exe startfolder0= launchpath0= module0= opengllib0= notes0=Runs better with accelerated video card, \nthe software mode is very slow and foggy.\nIn case of troubles, it may be necessary to delete the registry entries to force a \nnew clean configuration. registry0= ver0=0 monitorid0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 flagn0=0 flago0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=1 scanline0=1 initresw0=0 initresh0=0 [stamp] version=2.04.21.a2 time=Thu Mar 16 13:33:34 2017 ================================================ FILE: build/exports/Microsoft Motocross Madness.dxw ================================================ [target] title0=Microsoft Motocross Madness path0=F:\Games\Motocross Madness\mcm.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 monitorid0=-1 coord0=0 flag0=136314914 flagg0=134219776 flagh0=20 flagi0=4194308 flagj0=0 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=1 ================================================ FILE: build/exports/Microsoft Pandora's Box.dxw ================================================ [target] title0=Microsoft Pandora's Box path0=D:\Games\Microsoft Pandora's Box\pandora.exe launchpath0= module0= opengllib0= notes0= registry0=; Pandora's Box\n\n[HKEY_CURRENT_USER\Software]\n[HKEY_CURRENT_USER\Software\Microsoft]\n[HKEY_CURRENT_USER\Software\Microsoft\Microsoft Games\Pandora's Box]\n[HKEY_CURRENT_USER\Software\Microsoft\Microsoft Games\Pandora's Box\1.0]\n"Music"=hex:31\n"PlayerName"="Gho"\n"Sound"=hex:31\n"Timer"=hex:31\n ver0=0 coord0=0 flag0=673185827 flagg0=1209008128 flagh0=20 flagi0=138420228 flagj0=128 flagk0=0 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Microsotf Motocross Madness 2.dxw ================================================ [target] title0=Microsotf Motocross Madness 2 path0=D:\Games\motocross madness 2\mcm2.exe module0= opengllib0= ver0=0 coord0=0 flag0=134234144 flagg0=1207959808 flagh0=20 flagi0=4194308 tflag0=64 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Midnight GT Primary Racer.dxw ================================================ [target] title0=Midnight GT Primary Racer path0=D:\Games\Midnight GT Primary Racer\game.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=673185826 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4226 flagk0=65552 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 startfolder0= monitorid0=0 scanline0=1 initresw0=0 initresh0=0 ================================================ FILE: build/exports/Mig 29 Fulcrum.dxw ================================================ [target] title0=Mig 29 Fulcrum path0=D:\Games\Mig 29 Fulcrum\M29.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 monitorid0=-1 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Millennium Racer Y2K fighters.dxw ================================================ [target] title0=Millennium Racer Y2K fighters path0=D:\Games\Millennium Racer\MRacer.exe module0= opengllib0= ver0=0 coord0=0 flag0=671105056 flagg0=1476395024 flagh0=20 flagi0=4 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Minigolf Master Miniverse (demo).dxw ================================================ [target] title0=Minigolf Master Miniverse (demo) path0=D:\Games\MiniGolf Master Demo\mvdemo.exe startfolder0= launchpath0= module0= opengllib0= notes0=Playable only after unsetting the game / setup / "use fullscreen interface" checkbox!\nOtherwise the game start menu will be invisible. registry0= ver0=0 coord0=0 flag0=681574438 flagg0=1209008128 flagh0=278 flagi0=138412036 flagj0=4224 flagk0=33669120 flagl0=32768 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Mirror's Edge.dxw ================================================ [target] title0=Mirror's Edge path0=D:\Games\Mirror's Edge\Binaries\MirrorsEdge.exe module0= opengllib0= ver0=0 coord0=0 flag0=-2013265882 flagg0=1207959552 flagh0=2097172 flagi0=0 tflag0=15 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=6 ================================================ FILE: build/exports/Moon Tycoon.dxw ================================================ Wikisend: free file sharing service
Upload
Download
Moon Tycoon.dxw
  • File ID: 271650
  • File size: 512 B
  • Time to live: 28 days

Why our site?

Simple & Free

Upload and download lots of  files, big files, small files, data files, media files, archives or backups - any files. With Wikisend it`s simple and free.

Share with Friends

Share files with your friends using E-mail, MySpace page, your blog, forums and so on. With Wikisend sharing files, photos, videos or documents is easy, fast, and reliable.

Start now

No need to register, activate, install or read manuals - use our uploading form, you`re ready to go.
================================================ FILE: build/exports/MoonBase Commander (640x480).dxw ================================================ [target] title0=MoonBase Commander path0=D:\Games\MoonBase Commander\Moonbase.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=-2011168734 flagg0=1744830464 flagh0=20 flagi0=138416132 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=640 sizy0=480 maxfps0=0 initts0=0 winver0=0 maxres0=3 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/More Aggressive.dxw ================================================ [target] title0=More Aggressive path0=D:\Games\More Aggressive\Aggres\start.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 monitorid0=-1 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Moto Racer 2 (GOG sw mode).dxw ================================================ [target] title0=Moto Racer 2 (GOG) path0=D:\Games\Moto Racer 2 (GOG)\moto.exe launchpath0=D:\Games\Moto Racer 2 (GOG)\moto.exe -noD3D module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=681574434 flagg0=1207959680 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=327680 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 ================================================ FILE: build/exports/Moto Racer demo.dxw ================================================ [target] title0=Moto Racer demo path0=D:\Games\Moto.Racer.demo\PlayDemo.exe launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=134217762 flagg0=1207959680 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=0 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Motocross Madness (RIP).dxw ================================================ [target] title0=Motocross Madness (RIP) path0=D:\Games\Motocross_Madness\mcm.exe launchpath0= module0= opengllib0= notes0= registry0=[HKEY_LOCAL_MACHINE\Software\Microsoft]\n[HKEY_LOCAL_MACHINE\Software\Microsoft\Microsoft Games]\n[HKEY_LOCAL_MACHINE\Software\Microsoft\Microsoft Games\Motocross Madness]\n"1.0"=".\\"\n\n[HKEY_LOCAL_MACHINE\Software\Microsoft\Microsoft Games\Motocross Madness\1.0]\n"InstalledFrom"=".\\"\n"HardDriveRootPath"=".\\"\n"InstallType"="Full"\n"version"="1.0"\n"Launched"="1"\n"PID"="87799-442-0210567-79960"\n"Path"=".\\"\n"VersionType"="RetailVersion"\n"InstalledGroup"="15"\n"LangID"=dword:00000009\n"OmitDriverCheck"=dword:00000000\n"LocalDriverInfo"=hex:4e,56,33,44,44,33,32,2e,44,4c,4c,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,34,2e,31,30,2e,30,2e,31,37,31,33,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,44,69,61,6d,6f,6e,64,20,56,69,70,65,72,20,\\n 56,33,33,30,20,28,4e,76,69,64,69,61,20,52,69,76,61,20,31,32,38,29,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,44,69,61,6d,\\n 6f,6e,64,20,56,69,70,65,72,20,56,33,33,30,20,28,4e,76,69,64,69,61,20,52,69,\\n 76,61,20,31,32,38,29,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,44,69,61,6d,6f,6e,64,20,4d,75,6c,74,69,6d,65,64,69,61,20,\\n 53,79,73,74,65,6d,73,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,08,6d,6d,33,64,66,78,33,32,2e,64,6c,6c,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,34,2e,31,\\n 30,2e,30,2e,31,35,39,38,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,33,44,66,78,20,56,6f,6f,64,6f,6f,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,33,44,66,78,20,56,6f,6f,\\n 64,6f,6f,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,33,44,66,78,20,49,6e,74,65,72,61,63,74,69,76,65,2c,20,49,6e,63,2e,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,08\n\n[HKEY_LOCAL_MACHINE\Software\Microsoft]\n[HKEY_LOCAL_MACHINE\Software\Microsoft\Microsoft Games]\n[HKEY_LOCAL_MACHINE\Software\Microsoft\Microsoft Games\Motocross Madness]\n[HKEY_LOCAL_MACHINE\Software\Microsoft\Microsoft Games\Motocross Madness\1.0]\n[HKEY_LOCAL_MACHINE\Software\Microsoft\Microsoft Games\Motocross Madness\1.0\DriverInfo]\n\n[HKEY_LOCAL_MACHINE\Software\Microsoft\Microsoft Games\Motocross Madness\1.0\DriverInfo\{00000000-0000-0000-0000-000000000000}]\n"Driver"="NV3DD32.DLL"\n"Version"="4.10.0.1713"\n"Description"="Diamond Viper V330 (Nvidia Riva 128)"\n"DeviceID"="PCI\\VEN_12D2&DEV_0018&SUBSYS_10921092&REV_10\\000800"\n"NumberOfModes"=dword:00000025\n"Modes"=hex:40,01,00,00,c8,00,00,00,08,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,40,01,00,00,f0,00,00,00,08,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,90,01,00,00,2c,01,00,00,08,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,e0,01,00,00,68,01,00,00,08,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,02,00,00,80,01,00,00,08,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,80,02,00,00,90,01,00,\\n 00,08,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,80,02,00,00,\\n e0,01,00,00,08,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,20,\\n 03,00,00,58,02,00,00,08,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,c0,03,00,00,d0,02,00,00,08,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,04,00,00,00,03,00,00,08,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,80,04,00,00,60,03,00,00,08,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,05,00,00,00,04,00,00,08,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,40,06,00,00,b0,04,00,00,08,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,40,01,00,00,c8,00,00,00,\\n 10,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,40,01,00,00,f0,\\n 00,00,00,10,00,00,00,00,00,00,00,01,00,00,00,00,00,00,00,e0,fd,ff,01,90,01,\\n 00,00,2c,01,00,00,10,00,00,00,00,00,00,00,01,00,00,00,00,00,00,00,e0,fd,ff,\\n 01,e0,01,00,00,68,01,00,00,10,00,00,00,00,00,00,00,01,00,00,00,00,00,00,00,\\n e0,fd,ff,01,00,02,00,00,80,01,00,00,10,00,00,00,00,00,00,00,01,00,00,00,00,\\n 00,00,00,e0,fd,ff,01,80,02,00,00,90,01,00,00,10,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,80,02,00,00,e0,01,00,00,10,00,00,00,00,00,00,\\n 00,01,00,00,00,00,00,00,00,e0,fd,ff,01,20,03,00,00,58,02,00,00,10,00,00,00,\\n 00,00,00,00,01,00,00,00,00,00,00,00,e0,fd,ff,01,c0,03,00,00,d0,02,00,00,10,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,04,00,00,00,03,\\n 00,00,10,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,80,04,00,\\n 00,60,03,00,00,10,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,05,00,00,00,04,00,00,10,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,40,06,00,00,b0,04,00,00,10,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,40,01,00,00,c8,00,00,00,20,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,40,01,00,00,f0,00,00,00,20,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,90,01,00,00,2c,01,00,00,20,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,e0,01,00,00,68,01,00,00,20,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,02,00,00,80,01,00,\\n 00,20,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,80,02,00,00,\\n 90,01,00,00,20,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,80,\\n 02,00,00,e0,01,00,00,20,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,20,03,00,00,58,02,00,00,20,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,c0,03,00,00,d0,02,00,00,20,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,04,00,00,00,03,00,00,20,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,80,04,00,00,60,03,00,00,20,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00\n"TextureSizes"=hex:00,00,02,00,aa,aa,02,00,00,80,00,00,aa,aa,00,00,00,20,00,00,\\n aa,2a,00,00,00,08,00,00,a0,0d,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\n 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\n\n[HKEY_LOCAL_MACHINE\Software\Microsoft\Microsoft Games\Motocross Madness\1.0\DriverInfo\{3A0CFD01-9320-11CF-ACA1-00A02413C2E2}]\n"Driver"="mm3dfx32.dll"\n"Version"="4.10.0.1598"\n"Description"="3Dfx Voodoo"\n"DeviceID"="PCI\\VEN_121A&DEV_0001&SUBSYS_00000000&REV_02\\BUS_00&DEV_0E&FUNC_00"\n"NumberOfModes"=dword:00000004\n"Modes"=hex:00,02,00,00,80,01,00,00,10,00,00,00,00,00,00,00,01,00,00,00,01,00,\\n 00,00,00,00,40,00,80,02,00,00,90,01,00,00,10,00,00,00,00,00,00,00,00,00,00,\\n 00,01,00,00,00,00,00,00,00,80,02,00,00,e0,01,00,00,10,00,00,00,00,00,00,00,\\n 01,00,00,00,01,00,00,00,00,00,40,00,20,03,00,00,58,02,00,00,10,00,00,00,00,\\n 00,00,00,01,00,00,00,00,00,00,00,00,00,40,00\n"TextureSizes"=hex:00,00,02,00,33,ab,02,00,00,80,00,00,33,ab,00,00,00,20,00,00,\\n 33,2b,00,00,00,08,00,00,33,0b,00,00,00,04,01,00,55,59,01,00,00,44,00,00,55,\\n 59,00,00,00,14,00,00,55,19,00,00,00,08,00,00,55,09,00,00\n\n ver0=0 coord0=0 flag0=136314882 flagg0=1207959552 flagh0=1044 flagi0=1212153860 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Motocross Madness Trial.dxw ================================================ [target] title0=Motocross Madness Trial path0=D:\Games\Motocross Madness Trial\mcm.exe module0= opengllib0= ver0=0 coord0=0 flag0=169885728 flagg0=134219776 flagh0=20 flagi0=2097156 tflag0=6415 initx0=0 inity0=0 minx0=50 miny0=50 maxx0=800 maxy0=600 posx0=0 posy0=0 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Motocross Madness.dxw ================================================ [target] title0=Motocross Madness path0=D:\Games\motocross madness\mcm.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=169885728 flagg0=134219776 flagh0=20 flagi0=2097156 flagj0=0 flagk0=0 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=1 ================================================ FILE: build/exports/Mr. Driller.dxw ================================================ [target] title0=Mr. Driller path0=D:\Games\driller\driller.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Myth III - The Wolf Age.dxw ================================================ [target] title0=Myth III - The Wolf Age path0=D:\Games\Myth III - The Wolf Age\Myth3.exe launchpath0= module0= opengllib0= ver0=0 coord0=0 flag0=134218272 flagg0=1744830464 flagh0=20 flagi0=205520900 tflag0=6147 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Myth the Fallen Lords.dxw ================================================ [target] title0=Myth the Fallen Lords path0=D:\Games\myth\MYTH_TFL.EXE launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=134217762 flagg0=2013265920 flagh0=20 flagi0=138412036 flagj0=4224 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/NASCAR 2000.dxw ================================================ [target] title0=NASCAR 2000 path0=F:\Games\Nascar 2000\NASCAR 2000.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 monitorid0=-1 coord0=0 flag0=673202210 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=0 swapeffect0=0 maxddinterface0=7 slowratio0=2 scanline0=0 initresw0=800 initresh0=600 ================================================ FILE: build/exports/NHL 2002.dxw ================================================ [target] title0=NHL 2002 path0=D:\Games\NHL 2002\nhl2002.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=7 coord0=0 flag0=681574499 flagg0=1476395008 flagh0=528 flagi0=136314884 flagj0=1073746048 flagk0=327680 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 ================================================ FILE: build/exports/NHL 99.dxw ================================================ [target] title0=NHL 99 path0=D:\Games\NHL99_RIP\nhl99.exe launchpath0= module0= opengllib0= ver0=1 coord0=0 flag0=134234656 flagg0=1207959808 flagh0=20 flagi0=138412036 flagj0=1 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Nascar Pinball.dxw ================================================ [target] title0=Nascar Pinball path0=D:\Games\NASCAR Pinball\Pinball.exe launchpath0= module0= opengllib0= notes0=Some glitches while moving cursor close to borders ver0=0 coord0=0 flag0=134217762 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Nascar Racing 3 (3DFX).dxw ================================================ [target] title0=Nascar Racing 3 (3DFX) path0=D:\Games\Nascar Racing 3\NASCAR Racing 3.exe module0= opengllib0= ver0=9 coord0=0 flag0=671105056 flagg0=1207959552 flagh0=20 flagi0=4 tflag0=6162 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=0 ================================================ FILE: build/exports/Nascar Racing 3.dxw ================================================ [target] title0=NASCAR Racing 3 path0=G:\Games\Nascar Racing 3\NASCAR Racing 3.exe module0= opengllib0= ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=134217732 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 startfolder0= launchpath0= notes0= registry0= monitorid0=-1 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 dflag0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 initresw0=800 initresh0=600 ================================================ FILE: build/exports/Nebula Fighter.dxw ================================================ [target] title0=Nebula Fighter path0=D:\Games\Nebula Fighter\Nebula Fighter.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=5248 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 ================================================ FILE: build/exports/Need 4 Speed IV High Stakes.dxw ================================================ [target] title0=Need 4 Speed IV High Stakes path0=D:\Games\Need 4 Speed IV High Stakes\nfshs.exe launchpath0=D:\Games\Need 4 Speed IV High Stakes\nfshs.exe -PatchRestart module0= opengllib0= notes0= registry0=[HKEY_LOCAL_MACHINE\SOFTWARE\Electronic Arts]\n[HKEY_LOCAL_MACHINE\SOFTWARE\Electronic Arts\Need For Speed High Stakes]\n"Version"="4.00"\n"InstallPath"=".\\"\n"3D Device Description"="Software Renderer"\n"3D Card"="[Direct 3D]"\n"Thrash Driver"="d3d"\n"Group"="D3D"\n"D3D Device"=dword:00000000\n"Triple Buffer"=dword:00000000\n"Hardware Acceleration"=dword:00000001\n"Thrash Resolution"="1600x1200"\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Electronic Arts]\n[HKEY_LOCAL_MACHINE\SOFTWARE\Electronic Arts\Need For Speed High Stakes]\n[HKEY_LOCAL_MACHINE\SOFTWARE\Electronic Arts\Need For Speed High Stakes\1.0]\n"Language"=dword:00000001\n"Variant"=dword:00000000\n"Night"=dword:00000000\n"InstLev"=dword:00000002\n"SrcDrive"=".\\"\n ver0=0 coord0=0 flag0=136314914 flagg0=1476395008 flagh0=1044 flagi0=1212153860 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Need For Speed 3.dxw ================================================ [target] title0=Need For Speed 3 path0=D:\Games\Need For Speed III\NFS3.EXE launchpath0= module0= opengllib0= notes0=To install the game on x64 systems copy the following folders and files from\nthe CD to a NFS3 directory on the hard drive:\nFEDATA\\nGAMEDATA\\nd3da.dll\neacsnd.dll\nnfs3.exe\nsofttria.dll\n\nThen copy paste the text below to notepad and save it to your NFS3 directory\nas "INSTALL.WIN". (Remember to set file type to "All Files" when saving.)\n\nenglish\nlocal\n.\GameData\\n.\GameData\Tracks\\n.\GameData\Tracks\Tutor\\n.\GameData\CarModel\\n.\GameData\Render\pc\\n.\GameData\DashHud\\n.\GameData\Audio\pc\\n.\GameData\Audio\SFX\\n.\GameData\Audio\Speech\English\\n.\GameData\Audio\Speech\German\\n.\GameData\Audio\Speech\French\\n.\GameData\Audio\Speech\Spanish\\n.\GameData\Audio\Speech\Italian\\n.\FeData\art\\n.\FeData\text\\n.\FeData\text\\n.\FeData\save\\n.\FeData\stats\\n.\FeData\config\\n.\FeData\audio\\n.\FeData\Art\Slides\\n.\FeData\Art\Track\\n.\FeData\Art\Showcase\\n.\FeData\movies\\n.\FeData\stats\prh\\n registry0=[HKEY_LOCAL_MACHINE\SOFTWARE\Electronic Arts\Need For Speed III]\n"3D Card"="[Direct 3D]"\n"Thrash Driver"="d3d"\n"Group"="D3D"\n"Hardware Acceleration"=dword:00000001\n\n# These values set up NFS3 to run in Direct3D mode. If you want to run the\n# game in software rendering mode turn off the Compat. tab option\n# "Emulate Registry".\n ver0=0 coord0=0 flag0=136314914 flagg0=1744830464 flagh0=1556 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Need For Speed SE.dxw ================================================ [target] title0=Need For Speed SE path0=C:\NFSSE\NFS.EXE launchpath0= module0= opengllib0= notes0=Need For Speed Special Edition installation Notes:\n(tested on Win7 64-bit)\n\nYou can install the game using DOSBOX. Just make sure that the \nmounted CD drive in DOSBOX is using the same letter as your real CD\DVD drive.\ne.g. if your real CD/DVD drive letter is F:\nuse "mount f f:\ -t cdrom -ioctl"\ninstead off "mount d f:\ -t cdrom -ioctl"\n(the game will not start if it can not find the correct CD drive letter that is \nwritten to "C:\NFSSE\GAMEDATA\CONFIG\PATHS.DAT" by the installer)\n\nInstall using the Custom Install option and select all the checkboxes.\n(otherwise the game may have framerate issues streaming files from the CD)\n\nCopy NFS_WIN.EXE and IFORCE.DLL from the CD to your C:\NFSSE directory \nand rename NFS_WIN.EXE to NFS.EXE.\n\nThen you need to copy dplayx.dll to the C:\NFSSE directory from \n"C:\Windows\SysWOW64\dplayx.dll". Then rename this copy to dplay.dll.\n\nUsing Notepad make sure NFS.CFG reads:\nYESSOUND VIDEO ENGLISH NOREMOTE \n\nThe game should then run with this .dxw setup.\n registry0= ver0=0 coord0=1 flag0=136331362 flagg0=1543503872 flagh0=532 flagi0=138413060 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Need for Speed 5 Porsche Unleashed.dxw ================================================ [target] title0=Need for Speed 5 Porsche Unleashed path0=F:\Games\Need for Speed 5\Porsche.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 monitorid0=-1 coord0=0 flag0=136314922 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=32768 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 initresw0=800 initresh0=600 scanline0=1 ================================================ FILE: build/exports/Need for Speed Underground 2.dxw ================================================ [target] title0=Need for Speed Underground 2 path0=D:\Games\Need for Speed Underground 2\SPEED2.EXE startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 monitorid0=-1 coord0=0 flag0=673185826 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=1081344 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=0 swapeffect0=0 maxddinterface0=7 slowratio0=2 scanline0=0 initresw0=800 initresh0=600 ================================================ FILE: build/exports/Neophyte Koplio's Story.dxw ================================================ [target] title0=Neophyte Koplio's Story path0=D:\Games\Neophyte Koplio's Story\KOPLIO.exe module0= opengllib0= ver0=1 coord0=0 flag0=134234146 flagg0=1207959552 flagh0=20 flagi0=4 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 ================================================ FILE: build/exports/NetStorm - Islands at War.dxw ================================================ [target] title0=NetStorm - Islands at War path0=D:\Games\NetStorm - Islands at War\Netstorm.exe module0= opengllib0= ver0=0 coord0=0 flag0=679608354 flagg0=1209008384 flagh0=20 flagi0=4194308 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 launchpath0= notes0= flagj0=128 flagk0=0 winver0=0 maxres0=0 swapeffect0=0 ================================================ FILE: build/exports/New York Race.dxw ================================================ [target] title0=New York Race path0=D:\Games\New York Race\NYR.exe module0= opengllib0= ver0=8 coord0=0 flag0=687867937 flagg0=1207959568 flagh0=65556 flagi0=4 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Nightmare Creatures demo (sw mode).dxw ================================================ [target] title0=Nightmare Creatures demo (sw mode) path0=D:\Games\nc_demo\nc.exe startfolder0= launchpath0=D:\Games\nc_demo\nc.exe -pc module0= opengllib0= notes0= registry0= ver0=0 monitorid0=-1 coord0=0 flag0=673185826 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=5248 flagk0=65536 flagl0=0 flagm0=268435456 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=0 swapeffect0=0 maxddinterface0=7 slowratio0=2 scanline0=0 initresw0=800 initresh0=600 ================================================ FILE: build/exports/Nightmare Creatures demo.dxw ================================================ [target] title0=Nightmare Creatures demo path0=f:\Games\nightmare creatures demo\nc.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 monitorid0=-1 coord0=0 flag0=673194018 flagg0=1207959616 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=0 flagm0=301989888 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=0 swapeffect0=0 maxddinterface0=7 slowratio0=2 scanline0=0 initresw0=800 initresh0=600 ================================================ FILE: build/exports/No Respect (1.1).dxw ================================================ [target] title0=No Respect (1.1) path0=D:\Games\No Respect\nr11.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=681574434 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=327680 flagl0=0 flagm0=0 tflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 ================================================ FILE: build/exports/No Respect.dxw ================================================ [target] title0=No Respect path0=D:\Games\No Respect\NR.EXE launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=327680 flagl0=0 flagm0=0 tflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 ================================================ FILE: build/exports/Nocturne.dxw ================================================ [target] title0=Nocturne path0=D:\Games\nocturne\nocturne.exe launchpath0= module0= opengllib0= ver0=0 coord0=0 flag0=134217762 flagg0=1476395008 flagh0=20 flagi0=138412036 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 notes0= flagj0=128 flagk0=0 swapeffect0=0 ================================================ FILE: build/exports/Nox (GOG).dxw ================================================ [target] title0=Nox (GOG) path0=D:\Games\Nox GOG\Game.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=681574434 flagg0=1207959552 flagh0=20 flagi0=134217732 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Nox (RIP).dxw ================================================ [target] title0=Nox (RIP) path0=D:\Games\Nox RIP\GAME.EXE launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=2 flag0=681574434 flagg0=1207959568 flagh0=20 flagi0=138412036 flagj0=5248 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Nuclear Strike (3dfx).dxw ================================================ [target] title0=Nuclear Strike (3dfx) path0=D:\Games\nuclear_strike\NUKEPC.EXE launchpath0= module0= opengllib0= notes0=Use glide wrapper on D3D9 ver0=9 coord0=0 flag0=134217762 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 tflag0=1073741824 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/O.D.T. Escape Or Die Trying (SW 640X480).dxw ================================================ [target] title0=O.D.T. Escape Or Die Trying (SW 640X480) path0=F:\Games\ODT\ODT.exe startfolder0= launchpath0=F:\Games\ODT\ODT.exe 640 480 FALSE DISPLAY (SW) module0= opengllib0= notes0= registry0= ver0=0 monitorid0=0 coord0=0 flag0=134217826 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=128 flagk0=0 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=1 initresw0=0 initresh0=0 ================================================ FILE: build/exports/O.D.T. Escape Or Die Trying (HW 640X480).dxw ================================================ [target] title0=O.D.T. Escape Or Die Trying (HW 640X480) path0=F:\Games\ODT\ODT.exe startfolder0= launchpath0=F:\Games\ODT\ODT.exe 640 480 TRUE DISPLAY (HW) module0= opengllib0= notes0= registry0=&G ver0=0 monitorid0=0 coord0=0 flag0=134217826 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=128 flagk0=0 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=1 initresw0=0 initresh0=0 ================================================ FILE: build/exports/O.D.T. Escape Or Die Trying.dxw ================================================ [target] title0=O.D.T. Escape Or Die Trying path0=D:\Games\ODT\ODT.exe launchpath0= module0= opengllib0= ver0=0 coord0=0 flag0=1207959650 flagg0=1207959552 flagh0=20 flagi0=205520900 tflag0=6147 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 notes0= flagj0=128 flagk0=0 swapeffect0=0 ================================================ FILE: build/exports/O.R.B. Offword Rescue Base.dxw ================================================ [target] title0=O.R.B. Offword Rescue Base path0=D:\Games\O.R.B\orb.exe module0= opengllib0= ver0=0 coord0=0 flag0=134234146 flagg0=1207959552 flagh0=20 flagi0=4194308 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 launchpath0= notes0= flagj0=128 flagk0=65536 swapeffect0=0 registry0= ================================================ FILE: build/exports/Of Light and Darkness.dxw ================================================ [target] title0=Of Light and Darkness path0=D:\Games\Of Light and Darkness\3di.exe launchpath0= module0= opengllib0= ver0=0 coord0=0 flag0=134234150 flagg0=1207959552 flagh0=20 flagi0=138412036 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 notes0= flagj0=128 flagk0=0 swapeffect0=0 ================================================ FILE: build/exports/Ominous Horizons.dxw ================================================ [target] title0=Ominous Horizons path0=D:\Games\Ominous_Horizons\bin\ominous.exe launchpath0= module0= opengllib0= ver0=9 coord0=0 flag0=134218272 flagg0=1207959552 flagh0=20 flagi0=138412036 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/One Must Fall - Battlegrounds.dxw ================================================ [target] title0=One Must Fall - Battlegrounds path0=D:\Games\One Must Fall - Battlegrounds\Engine\OMFBG.exe launchpath0= module0=core_module.dll opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314915 flagg0=1275068416 flagh0=20 flagi0=138412036 flagj0=4736 flagk0=327680 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Open Ice 2 on 2 Challenge.dxw ================================================ [target] title0=Open Ice 2 on 2 Challenge path0=D:\Games\OPENICE\OPENICE.EXE launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=134217762 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 tflag0=512 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Outcast 1999 CD Retail release.dxw ================================================ [target] title0=Outcast 1999 CD Retail release path0=C:\Outcast\oc\Oc3.exe launchpath0=C:\Outcast\Outcast.exe module0= opengllib0= notes0=This .dxw setup is meant for the Outcast 1999 CD Retail release of the game.\nIt is not tested with the DVD release or later versions / unofficial patches.\n\nThe official Patch 3 is recommended since without it the game may not start\nwith the message "Wrong Disc inserted".\n\n\nThe slow rice paddy movement and Twon-Ha riding bug and Lighthouse jump bug\nare caused by the game running too fast on modern cpu's. This is fixed with the \noptions in the Dxwnd Timing tab.\n\nAdditionaly Dxwnd needs to be run with admin rights or the game won't start.\n registry0= ver0=0 coord0=1 flag0=136314926 flagg0=1207963664 flagh0=20 flagi0=138412036 flagj0=5248 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=60 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Outcast.dxw ================================================ [target] title0=Outcast path0=D:\Games\Outcast\oc\Oc3.exe launchpath0=D:\Games\Outcast\oc\loader.exe module0= opengllib0= ver0=0 coord0=0 flag0=153092128 flagg0=1209008128 flagh0=20 flagi0=205520900 flagj0=0 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Outlaws.dxw ================================================ [target] title0=Outlaws path0=D:\Games\Outlaws\OUTLAWS.EXE launchpath0= module0= opengllib0= ver0=0 coord0=0 flag0=671105058 flagg0=1207959552 flagh0=20 flagi0=138412036 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 notes0= flagj0=128 flagk0=0 swapeffect0=0 ================================================ FILE: build/exports/Outwars.dxw ================================================ [target] title0=Outwars path0=D:\Games\OUTWARS\outwars.exe launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=671088678 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=0 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/PBA Bowling 2 Demo.dxw ================================================ [target] title0=PBA Bowling 2 Demo path0=D:\Games\PBA Bowling 2 Demo\BowlingR.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=673185858 flagg0=1207959552 flagh0=20 flagi0=205520900 flagj0=4232 flagk0=65536 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=0 swapeffect0=0 startfolder0= monitorid0=-1 flagl0=0 flagm0=0 dflag0=0 maxddinterface0=7 slowratio0=2 scanline0=0 initresw0=800 initresh0=600 ================================================ FILE: build/exports/PC Ciclismo 2001 (HAL).dxw ================================================ [target] title0=PC Ciclismo 2001 path0=D:\Games\PC Ciclismo 2001\PcCiclismo.exe module0= opengllib0= ver0=0 coord0=0 flag0=1207959840 flagg0=1207959552 flagh0=98324 flagi0=4 tflag0=6211 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/PC Ciclismo 2001 (through RGB sw emulation).dxw ================================================ [target] title0=PC Ciclismo 2001 path0=D:\Games\PC Ciclismo 2001\PcCiclismo.exe module0= opengllib0= ver0=0 coord0=0 flag0=1207959586 flagg0=1207959552 flagh0=98324 flagi0=4 tflag0=6211 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/POD Gold (D3D).dxw ================================================ [target] title0=POD Gold (D3D) path0=E:\PODD3DX.EXE launchpath0= module0= opengllib0= ver0=0 coord0=0 flag0=134217760 flagg0=1744830592 flagh0=20 flagi0=138543108 flagj0=0 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Paladin 3 RIP.dxw ================================================ [target] title0=Paladin 3 RIP path0=D:\Games\QGPAL3\rungame.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=205520900 flagj0=4224 flagk0=65536 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Pandemonium 2 (GLIDE).dxw ================================================ [target] title0=Pandemonium 2 (GLIDE) path0=D:\Games\Pandemonium 2\pandy.exe module0= opengllib0= ver0=0 coord0=0 flag0=134217762 flagg0=1207959552 flagh0=20 flagi0=4 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 ================================================ FILE: build/exports/Panzer Commander.dxw ================================================ [target] title0=Panzer Commander path0=D:\Games\Panzer_Commander\Panzer.exe launchpath0= module0= opengllib0= ver0=0 coord0=0 flag0=136314978 flagg0=1207959552 flagh0=20 flagi0=138412036 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 notes0= flagj0=128 flagk0=0 swapeffect0=0 ================================================ FILE: build/exports/Panzer Dragoon.dxw ================================================ [target] title0=Panzer Dragoon path0=D:\Games\Panzer Dragoon\game\PANZERDG.EXE module0= opengllib0= ver0=0 coord0=0 flag0=681574435 flagg0=1744830464 flagh0=20 flagi0=138412036 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 launchpath0= notes0= flagj0=4224 flagk0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Panzer General 3 Scorched Earth.dxw ================================================ [target] title0=Panzer General 3 Scorched Earth path0=D:\Games\Panzer_General_3\PG3.exe launchpath0= module0= opengllib0= ver0=0 coord0=0 flag0=671088674 flagg0=1207975936 flagh0=2097172 flagi0=138412036 flagj0=8320 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 notes0= flagk0=65536 swapeffect0=0 registry0= ================================================ FILE: build/exports/Panzer General 3D Assault (GOG).dxw ================================================ [target] title0=Panzer General 3D Assault (GOG) path0=D:\Games\Panzer General 3D (GOG)\PG3.exe launchpath0=D:\Games\Panzer General 3D (GOG)\Launcher.exe module0=PG3Draw opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=679477282 flagg0=1207959568 flagh0=65556 flagi0=71303172 flagj0=128 flagk0=4096 flagl0=0 flagm0=0 tflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 ================================================ FILE: build/exports/Panzer General 3D Assault.dxw ================================================ [target] title0=Panzer General 3D Assault path0=D:\Games\Panzer General 3D\PG3.icd module0=PG3Draw opengllib0= ver0=0 coord0=0 flag0=679477282 flagg0=1207959568 flagh0=65556 flagi0=4194308 tflag0=-2147477245 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 launchpath0=D:\Games\Panzer General 3D\PG3.EXE notes0= flagj0=128 flagk0=0 swapeffect0=0 ================================================ FILE: build/exports/Paradise Cracked.dxw ================================================ [target] title0=Paradise Cracked path0=D:\Games\Paradise Cracked\game.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 monitorid0=-1 coord0=0 flag0=673185826 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=2 flagm0=0 flagn0=0 flago0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=0 swapeffect0=0 maxddinterface0=7 slowratio0=2 scanline0=0 initresw0=800 initresh0=600 [stamp] version=2.04.21.a4 time=Sun Mar 19 00:31:00 2017 ================================================ FILE: build/exports/Patrician III.dxw ================================================ [target] title0=Patrician III path0=D:\Games\Patrician III - Impero dei Mari\Patrician3.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=681574434 flagg0=1744830464 flagh0=20 flagi0=136314886 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Pax Corpus.dxw ================================================ [target] title0=Pax Corpus path0=D:\Games\Pax Corpus\Pax.exe launchpath0= module0= opengllib0= ver0=0 coord0=1 flag0=673185826 flagg0=1275068416 flagh0=20 flagi0=138412036 flagj0=0 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Phantasmagoria 2.dxw ================================================ [target] title0=Phantasmagoria 2 path0=D:\Games\Phantasmagoria 2\SIERRAW.EXE launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=681574434 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 ================================================ FILE: build/exports/Planet of the Apes.dxw ================================================ [target] title0=Planet of the Apes path0=D:\Games\Planet of the Apes\pota.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=203423794 flagg0=1207959552 flagh0=524308 flagi0=138936320 flagj0=67113088 flagk0=-1878982656 flagl0=1048576 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 monitorid0=0 flagn0=0 flago0=0 scanline0=1 initresw0=0 initresh0=0 [stamp] version=2.04.20 time=Thu Mar 16 13:13:41 2017 ================================================ FILE: build/exports/Populous 3 (GOG - D3D).dxw ================================================ [target] title0=Populous 3 (GOG - D3D) path0=D:\Games\Populous 3 (GOG)\D3DPopTB.exe module0= opengllib0= ver0=0 coord0=0 flag0=671105062 flagg0=1207959568 flagh0=65556 flagi0=4194308 tflag0=6146 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 launchpath0= notes0= flagj0=128 flagk0=0 swapeffect0=0 ================================================ FILE: build/exports/Populous 3 (GOG).dxw ================================================ [target] title0=Populous 3 (GOG) path0=D:\Games\Populous 3 (GOG)\popTB.exe module0= opengllib0= ver0=0 coord0=0 flag0=671105062 flagg0=1207959568 flagh0=20 flagi0=4194308 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 launchpath0= notes0= registry0= flagj0=128 flagk0=0 swapeffect0=0 ================================================ FILE: build/exports/Port Royale 2.dxw ================================================ [target] title0=Port Royale 2 path0=D:\Games\Port Royale 2\PR2.exe module0= opengllib0= ver0=8 coord0=0 flag0=671096866 flagg0=1207959552 flagh0=65556 flagi0=4 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Portugal 1111.dxw ================================================ [target] title0=Portugal 1111 path0=D:\Games\Portugal 1111\Port1111.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=7 coord0=0 flag0=136331314 flagg0=1207961600 flagh0=20 flagi0=-2009071612 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Post Mortem (CD version).dxw ================================================ [target] title0=Post Mortem (CD version) path0=D:\Games\Post Mortem\Game.exe startfolder0= launchpath0= module0= opengllib0= notes0=Note:\n\nThe CD version is copy protected and needs a crack to run properly\n\ndepending on the platform (OS? / video card?) the game may require the \n"No primary SYSTEMMEMORY" flag in order to run. \nUnfortunately, in that case it is likely to become very choppy. registry0= ver0=0 monitorid0=-1 coord0=0 flag0=673341475 flagg0=1241513984 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=67108880 flagm0=0 flagn0=0 flago0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=0 swapeffect0=0 maxddinterface0=7 slowratio0=2 scanline0=0 initresw0=800 initresh0=600 [stamp] version=2.04.21.a6 time=Wed Mar 22 15:25:29 2017 ================================================ FILE: build/exports/Postal.dxw ================================================ [target] title0=Postal path0=D:\Games\Postal\POSTAL.EXE launchpath0= module0= opengllib0= ver0=1 coord0=3 flag0=536887330 flagg0=1249902592 flagh0=2097168 flagi0=138413060 flagj0=4 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Powerslide.dxw ================================================ [target] title0=Powerslide path0=D:\Games\Powerslide\powerslide.exe launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=679477282 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 flagk0=0 swapeffect0=0 ================================================ FILE: build/exports/Praetorians.dxw ================================================ [target] title0=Praetorians path0=D:\Games\Praetorians\Praetorians.exe module0= opengllib0= ver0=0 coord0=0 flag0=134217762 flagg0=1207959552 flagh0=20 flagi0=4194304 tflag0=259 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 launchpath0= notes0= flagj0=128 flagk0=0 winver0=0 maxres0=0 swapeffect0=0 ================================================ FILE: build/exports/Premier Manager 98.dxw ================================================ [target] title0=Premier Manager 98 path0=D:\Games\Premier Manager 98\MANAGER.EXE module0= opengllib0= ver0=0 coord0=0 flag0=671088674 flagg0=1207959552 flagh0=16 flagi0=0 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 ================================================ FILE: build/exports/Prey.dxw ================================================ [target] title0=Prey path0=D:\Games\Prey\prey.exe module0= opengllib0= ver0=0 coord0=0 flag0=134217762 flagg0=1208090624 flagh0=20 flagi0=4 tflag0=64 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Primitive Wars.dxw ================================================ [target] title0=Primitive Wars path0=D:\Games\Primitive Wars\Pw.exe module0= opengllib0= ver0=0 coord0=0 flag0=402653218 flagg0=1207959552 flagh0=20 flagi0=0 tflag0=64 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 ================================================ FILE: build/exports/Prince of Persia - Warrior Within (GOG).dxw ================================================ [target] title0=Prince of Persia - Warrior Within (GOG) path0=D:\Games\Prince of Persia - Warrior Within\pop2.exe launchpath0=D:\Games\Prince of Persia - Warrior Within\PrinceOfPersia.exe module0= opengllib0= notes0= registry0= ver0=9 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=138412038 flagj0=4224 flagk0=65536 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Prince of Persia 3D Demo.dxw ================================================ [target] title0=Prince of Persia 3D Demo path0=D:\Games\Prince of Persia 3D Demo\PoP3DDemo.exe launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=136331298 flagg0=1207959552 flagh0=20 flagi0=136314885 flagj0=4224 flagk0=0 tflag0=-2147477245 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Prince of Persia 3D.dxw ================================================ [target] title0=Prince of Persia 3D path0=D:\Games\Prince_of_Persia_3D\POP3D.exe launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=671105058 flagg0=1209008128 flagh0=20 flagi0=136314885 flagj0=128 flagk0=4 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Prince of Persia The Two Thrones (GOG).dxw ================================================ [target] title0=Prince of Persia The Two Thrones (GOG) path0=D:\Games\Prince of Persia The Two Thrones\pop3.exe startfolder0= launchpath0=D:\Games\Prince of Persia The Two Thrones\PrinceOfPersia.exe module0= opengllib0= notes0= registry0= ver0=9 monitorid0=-1 coord0=0 flag0=673202214 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=67108880 flagm0=0 flagn0=0 flago0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=0 swapeffect0=0 maxddinterface0=7 slowratio0=2 scanline0=0 initresw0=800 initresh0=600 [stamp] version=2.04.21.a4 time=Sun Mar 19 11:59:24 2017 ================================================ FILE: build/exports/Prison Tycoon.dxw ================================================ [target] title0=Prison Tycoon path0=D:\Games\Prison.Tycoon\Prison Tycoon.exe launchpath0= module0= opengllib0= ver0=9 coord0=0 flag0=134234656 flagg0=1207959808 flagh0=48 flagi0=138412036 flagj0=0 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Prisoner of War.dxw ================================================ [target] title0=Prisoner of War path0=D:\Games\Prisoner of War\Colditz.EXE startfolder0= launchpath0= module0= opengllib0= notes0=cracked exe registry0= ver0=0 monitorid0=-1 coord0=0 flag0=673185826 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=1114112 flagl0=0 flagm0=0 flagn0=0 flago0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=0 swapeffect0=0 maxddinterface0=7 slowratio0=2 scanline0=0 initresw0=800 initresh0=600 [stamp] version=2.04.21.a2 time=Fri Mar 17 00:17:24 2017 ================================================ FILE: build/exports/Project Eden.dxw ================================================ [target] title0=Project Eden path0=D:\Games\Project Eden\Eden.exe module0= opengllib0= ver0=0 coord0=0 flag0=134217763 flagg0=1207959552 flagh0=20 flagi0=4194308 tflag0=64 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 launchpath0= notes0= flagj0=128 flagk0=0 swapeffect0=0 ================================================ FILE: build/exports/Project IGI.dxw ================================================ [target] title0=Project IGI path0=D:\Games\Project IGI\PC\IGI.exe module0= opengllib0= ver0=0 coord0=0 flag0=671105060 flagg0=1207959552 flagh0=20 flagi0=4194308 tflag0=64 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 launchpath0= winver0=0 maxres0=0 ================================================ FILE: build/exports/Psychoballs.dxw ================================================ [target] title0=Psychoballs path0=D:\Games\Psychoballs\PsychoBalls.exe launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=134217732 flagj0=4224 flagk0=0 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Puma World Football.dxw ================================================ [target] title0=Puma World Football path0=D:\Games\pumawf98\WF.EXE launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=134217762 flagg0=1207963648 flagh0=20 flagi0=138412036 flagj0=4224 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=16 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Puyo Puyo Sun.dxw ================================================ [target] title0=Puyo Puyo Sun path0=D:\Games\Puyo Puyo Sun\puyo3.exe launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=134217762 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=0 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=80 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Puzzle Agent Nelson Tethers.dxw ================================================ [target] title0=Puzzle Agent Nelson Tethers path0=D:\Games\Puzzle Agent\Grickle101.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 monitorid0=-1 coord0=0 flag0=673185826 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=0 swapeffect0=0 maxddinterface0=7 slowratio0=2 scanline0=0 initresw0=800 initresh0=600 ================================================ FILE: build/exports/Quake (OpenGL 3DFX).dxw ================================================ [target] title0=Quake (OpenGL 3DFX) path0=D:\Games\Quake\GLQUAKE.EXE launchpath0= module0= opengllib0= ver0=9 coord0=0 flag0=134234656 flagg0=1208090624 flagh0=20 flagi0=138412036 flagj0=1 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Quake (win).dxw ================================================ [target] title0=Quake (win) path0=D:\Games\Quake\WINQUAKE.EXE launchpath0= module0= opengllib0= ver0=0 coord0=0 flag0=134234146 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=129 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 notes0= registry0= flagk0=65536 swapeffect0=0 ================================================ FILE: build/exports/Queen of Heart 98.dxw ================================================ [target] title0=Queen of Heart 98 path0=D:\Games\qoh98\Qoh98.exe launchpath0= module0= opengllib0= ver0=0 coord0=0 flag0=134217762 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=1 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 notes0= registry0= flagk0=0 swapeffect0=0 ================================================ FILE: build/exports/RHEM.dxw ================================================ [target] title0=RHEM path0=F:\RhemE\RhemE\RHEM.noshim.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 monitorid0=-1 coord0=0 flag0=681574434 flagg0=1207959552 flagh0=20 flagi0=205520900 flagj0=4224 flagk0=98304 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=640 sizy0=480 maxfps0=0 initts0=0 winver0=0 maxres0=0 swapeffect0=0 maxddinterface0=7 slowratio0=2 scanline0=0 initresw0=800 initresh0=600 ================================================ FILE: build/exports/Railroad Tycoon II.dxw ================================================ [target] title0=Railroad Tycoon II path0=D:\Games\Railroad.Tycoon.II\RT2.EXE module0= opengllib0= ver0=0 coord0=0 flag0=134219810 flagg0=1209008128 flagh0=16 flagi0=4194304 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 launchpath0= winver0=0 maxres0=0 notes0= registry0= flagj0=128 flagk0=0 swapeffect0=0 ================================================ FILE: build/exports/Rapanui.dxw ================================================ [target] title0=Rapanui path0=D:\Games\Rapanui\Rapanui.exe launchpath0= module0= opengllib0= ver0=0 coord0=0 flag0=134218272 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=0 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Rayman 2 (GOG).dxw ================================================ [target] title0=Rayman 2 (GOG) path0=D:\Games\GOG.com\Rayman 2\Rayman2.exe module0= opengllib0= ver0=1 coord0=0 flag0=402653235 flagg0=1208025104 flagh0=20 flagi0=4194304 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 launchpath0= notes0= registry0= flagj0=128 flagk0=268500992 winver0=0 maxres0=0 swapeffect0=0 startfolder0= monitorid0=0 flagl0=0 flagm0=0 dflag0=0 maxddinterface0=7 slowratio0=1 scanline0=1 initresw0=0 initresh0=0 ================================================ FILE: build/exports/Rayman 2 Demo.dxw ================================================ [target] title0=Rayman 2 Demo path0=D:\Games\Rayman2Demo\Rayman2Demo.exe module0= opengllib0= ver0=1 coord0=0 flag0=402653219 flagg0=1208025088 flagh0=20 flagi0=4194304 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 launchpath0= notes0= registry0= flagj0=128 flagk0=65536 winver0=0 maxres0=0 swapeffect0=0 ================================================ FILE: build/exports/Re-Volt.dxw ================================================ [target] title0=Re-Volt path0=D:\Games\Re-Volt\REVOLT.EXE module0= opengllib0= ver0=0 coord0=0 flag0=134217760 flagg0=1208025088 flagh0=20 flagi0=12 tflag0=64 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Reah.dxw ================================================ [target] title0=Reah path0=D:\Games\Reah\Reah.exe launchpath0=F:\Autorun.exe module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=-1465778141 flagg0=1209010176 flagh0=20 flagi0=138412036 flagj0=1073746048 flagk0=98304 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Real War Air Land Sea.dxw ================================================ [target] title0=Real War Air Land Sea path0=D:\Games\Real War\REALWAR.EXE launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=134234146 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=0 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Reap, the.dxw ================================================ [target] title0=Reap, the path0=D:\Games\theReap\thereap.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=681574434 flagg0=1744830464 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=327680 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Recoil.dxw ================================================ [target] title0=Recoil path0=D:\Games\Recoil\Recoil.exe launchpath0= module0= opengllib0= ver0=0 coord0=0 flag0=134217760 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=0 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Requiem Avenging Angel (D3D).dxw ================================================ [target] title0=Requiem Avenging Angel (D3D) path0=D:\Games\Requiem Avenging Angel\D3D.by Matt.exe launchpath0= module0= opengllib0= ver0=0 coord0=0 flag0=-1468006366 flagg0=1207959552 flagh0=1044 flagi0=1212153860 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 flagj0=128 notes0= registry0=# Requiem Avenging Angel: DirectX version patch\n\n[HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\DirectX]\n"Version"="4.07.00.0704"\n\n[HKEY_LOCAL_MACHINE\Software\Microsoft\DirectX]\n"Version"="4.07.00.0704"\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\DirectX]\n"Version"="4.07.00.0704"\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DirectX]\n"Version"="4.07.00.0704"\n flagk0=67174400 swapeffect0=0 ================================================ FILE: build/exports/Requiem Avenging Angel (software).dxw ================================================ [target] title0=Requiem Avenging Angel (software) path0=D:\Games\Requiem Avenging Angel\Software.exe launchpath0= module0= opengllib0= ver0=0 coord0=0 flag0=-1199570906 flagg0=1207959552 flagh0=1044 flagi0=1212153860 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 notes0= registry0=# Requiem Avenging Angel: DirectX version patch\n\n[HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\DirectX]\n"Version"="4.07.00.0704"\n\n[HKEY_LOCAL_MACHINE\Software\Microsoft\DirectX]\n"Version"="4.07.00.0704"\n flagj0=128 flagk0=67174400 swapeffect0=0 ================================================ FILE: build/exports/Resident Evil (sw mode).dxw ================================================ [target] title0=Resident Evil (sw mode) path0=D:\Games\resevil\residentevil.exe launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=134217826 flagg0=1744830592 flagh0=20 flagi0=138412036 flagj0=4224 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 registry0= flagk0=65536 flagl0=0 flagm0=0 swapeffect0=0 maxddinterface0=7 ================================================ FILE: build/exports/Restricted Area.dxw ================================================ [target] title0=Restricted Area path0=D:\Games\Restricted Area\Ra.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=681574440 flagg0=1744830464 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 ================================================ FILE: build/exports/Return Fire 2 (OpenGL).dxw ================================================ [target] title0=Return Fire 2 (OpenGL) path0=F:\Games\Return Fire 2\RFireII.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0=HKEY_CURRENT_USER\Software\Prolific]\n\n[HKEY_CURRENT_USER\Software\Prolific\RFireII]\n\n[HKEY_CURRENT_USER\Software\Prolific\RFireII\1.0]\n;"GfxDLL"="SC_3dfx"\n"GfxDLL"="SC_OGL"\n;"GfxDLL"="36D_S3D"\n"ID"="{E6E7C9E0-41B2-11D2-9C0B-006097B4D5BF}"\n"NAME1"="JOHN"\n"name2"=""\n"name3"=""\n"name4"=""\n"LASTRFIREIIGAME"="JOHN.UI"\n\n[HKEY_LOCAL_MACHINE\Software\Prolific Publishing, Inc.]\n\n[HKEY_LOCAL_MACHINE\Software\Prolific Publishing, Inc.\Return Fire II]\n"Path"=".\\"\n\n[HKEY_LOCAL_MACHINE\Software\Prolific Publishing, Inc.\Return Fire II\1.00.000]\n\n ver0=0 monitorid0=-1 coord0=0 flag0=681574434 flagg0=1208090624 flagh0=3093 flagi0=1212153860 flagj0=4224 flagk0=327680 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 initresw0=800 initresh0=600 ================================================ FILE: build/exports/Return Fire 2 (SW).dxw ================================================ [target] title0=Return Fire 2 (SW) path0=F:\Games\Return Fire 2\RFireII.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0=HKEY_CURRENT_USER\Software\Prolific]\n\n[HKEY_CURRENT_USER\Software\Prolific\RFireII]\n\n[HKEY_CURRENT_USER\Software\Prolific\RFireII\1.0]\n;"GfxDLL"="SC_3dfx"\n"GfxDLL"="SC_OGL"\n;"GfxDLL"="36D_S3D"\n"ID"="{E6E7C9E0-41B2-11D2-9C0B-006097B4D5BF}"\n"NAME1"="JOHN"\n"name2"=""\n"name3"=""\n"name4"=""\n"LASTRFIREIIGAME"="JOHN.UI"\n\n[HKEY_LOCAL_MACHINE\Software\Prolific Publishing, Inc.]\n\n[HKEY_LOCAL_MACHINE\Software\Prolific Publishing, Inc.\Return Fire II]\n"Path"=".\\"\n\n[HKEY_LOCAL_MACHINE\Software\Prolific Publishing, Inc.\Return Fire II\1.00.000]\n\n ver0=0 monitorid0=-1 coord0=0 flag0=681574434 flagg0=1207959552 flagh0=1044 flagi0=1212153860 flagj0=4224 flagk0=327680 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 initresw0=800 initresh0=600 ================================================ FILE: build/exports/Return to Castle Wolfenstein.dxw ================================================ [target] title0=Return to Castle Wolfenstein path0=D:\Games\Return to Castle Wolfenstein\WolfSP.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=673194498 flagg0=1208090624 flagh0=65556 flagi0=138412038 flagj0=4224 flagk0=-2147418112 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=1 ================================================ FILE: build/exports/Rift Space.dxw ================================================ [target] title0=Rift Space path0=D:\Games\RiftSpace\RiftSpace.EXE launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=671105062 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=0 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Risk II (Hasbro).dxw ================================================ [target] title0=Risk II (Hasbro) path0=D:\Games\Risk 2\RISKII.EXE launchpath0= module0= opengllib0= ver0=0 coord0=0 flag0=134217762 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=128 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Rites of War Demo.dxw ================================================ [target] title0=Rites of War Demo path0=D:\Games\Rites of War Demo\RoWDemo.exe module0= opengllib0= ver0=0 coord0=0 flag0=134234656 flagg0=1207959680 flagh0=20 flagi0=4 tflag0=64 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Road Rash.dxw ================================================ [target] title0=Road Rash path0=D:\Games\roadrash\ROADRASH.EXE launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=134217770 flagg0=1744830464 flagh0=1040 flagi0=1212153860 flagj0=4224 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 flagk0=0 swapeffect0=0 registry0=[HKEY_LOCAL_MACHINE\SOFTWARE]\n\n; Road Rash\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Electronic Arts]\n[HKEY_LOCAL_MACHINE\SOFTWARE\Electronic Arts\RoadRash 95]\n""=""\n"Path"="."\n"CheckDialup"=hex:00\n"ChatState"=hex:02\n"MiniDash"=hex:00\n"OpponentList"=hex:01\n flagl0=0 flagm0=0 dflag0=0 maxddinterface0=7 ================================================ FILE: build/exports/Robin Hood - The Legend of Sherwood (GOG).dxw ================================================ [target] title0=Robin Hood - The Legend of Sherwood (GOG) path0=D:\Games\Robin Hood - The Legend of Sherwood (GOG)\Robin Hood\Game.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=681574434 flagg0=1744830464 flagh0=20 flagi0=138543108 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 ================================================ FILE: build/exports/RoboRumble (dx5).dxw ================================================ [target] title0=RoboRumble (dx5) path0=F:\Games\RoboRumble\DATA\rr_dx5.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0=\n[HKEY_LOCAL_MACHINE\SOFTWARE\Metropolis]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Metropolis\RoboRumble]\n"Directory"=".\\"\n\n ver0=1 monitorid0=-1 coord0=0 flag0=681574442 flagg0=1208221696 flagh0=1044 flagi0=1212153860 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 initresw0=800 initresh0=600 ================================================ FILE: build/exports/RoboRumble (sw).dxw ================================================ [target] title0=RoboRumble (sw) path0=F:\Games\RoboRumble\DATA\rr_soft.exe startfolder0= launchpath0=F:\Games\RoboRumble\rrumble.exe module0= opengllib0= notes0= registry0=\n[HKEY_LOCAL_MACHINE\SOFTWARE\Metropolis]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Metropolis\RoboRumble]\n"Directory"=".\\"\n\n ver0=1 monitorid0=-1 coord0=0 flag0=681574442 flagg0=1207959552 flagh0=1044 flagi0=1212153860 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 initresw0=800 initresh0=600 ================================================ FILE: build/exports/Robocop 2D 2.dxw ================================================ [target] title0=Robocop 2D 2 path0=D:\Games\Robocop2D2\Robocop2D2.exe launchpath0= module0= opengllib0= notes0=It seems necessary to click on the small white client area in the tiny window \nin the upper left corner of the desktop to bring everything to normality! registry0= ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Robocop 2D.dxw ================================================ [target] title0=Robocop 2D path0=D:\Games\Robocop2Dv1_2\Robocop2Dv1_2.exe launchpath0= module0= opengllib0= notes0=It seems necessary to click on the small white client area in the tiny window \nin the upper left corner of the desktop to bring everything to normality! registry0= ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=65556 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Robocop.dxw ================================================ [target] title0=Robocop path0=D:\Games\Robocop\Robocop.exe launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=0 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Rollcage (3DFX).dxw ================================================ [target] title0=Rollcage (3DFX) path0=D:\Games\Rollcage\Glide\ROLLCAGE.EXE launchpath0=D:\Games\Rollcage\RollCage.exe module0= opengllib0= ver0=0 coord0=0 flag0=150994976 flagg0=1207959552 flagh0=20 flagi0=136314884 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Rollcage (D3D).dxw ================================================ [target] title0=Rollcage (D3D) path0=D:\Games\Rollcage\Direct3D\Rollcage.exe launchpath0=D:\Games\Rollcage\RollCage.exe module0= opengllib0= ver0=0 coord0=0 flag0=134217762 flagg0=1207959552 flagh0=20 flagi0=136314884 tflag0=6147 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 notes0= flagj0=128 flagk0=0 swapeffect0=0 ================================================ FILE: build/exports/Rollcage 2 (D3D).dxw ================================================ [target] title0=Rollcage 2 (D3D) path0=D:\Games\Rollcage 2\BIN\Rollcage D3D.exe launchpath0=D:\Games\Rollcage 2\Rollcage.exe module0= opengllib0= ver0=0 coord0=0 flag0=134217762 flagg0=1207959552 flagh0=20 flagi0=138412036 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 notes0= flagj0=128 flagk0=0 swapeffect0=0 ================================================ FILE: build/exports/RollerCoaster Tycoon 2 demo.dxw ================================================ [target] title0=RollerCoaster Tycoon 2 demo path0=D:\Games\RollerCoaster Tycoon 2 demo\rct2.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=1 coord0=0 flag0=671088674 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=128 flagk0=0 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/RollerCoaster Tycoon 2.dxw ================================================ [target] title0=RollerCoaster Tycoon 2 path0=D:\Games\Rollercoaster Tycoon 2\Rct2.exe launchpath0= module0= opengllib0= ver0=0 coord0=0 flag0=671089184 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=0 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/RollerCoaster Tycoon 3.dxw ================================================ [target] title0=RollerCoaster Tycoon 3 path0=D:\Games\RollerCoaster Tycoon 3\RCT3.exe launchpath0= module0= opengllib0= ver0=0 coord0=0 flag0=671089184 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=0 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/RollerCoaster Tycoon Deluxe.dxw ================================================ [target] title0=RollerCoaster Tycoon Deluxe path0=D:\Games\rollercoaster tycoon deluxe\rct.exe launchpath0= module0= opengllib0= ver0=1 coord0=0 flag0=671088674 flagg0=1241514000 flagh0=65552 flagi0=138413060 flagj0=4 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=640 sizy0=480 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/RollerCoaster Tycoon.dxw ================================================ [target] title0=RollerCoaster Tycoon path0=D:\Games\rollercoaster tycoon\rct.exe launchpath0= module0= opengllib0= ver0=1 coord0=0 flag0=671088674 flagg0=1207959552 flagh0=2097172 flagi0=138412036 flagj0=0 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Runaway.dxw ================================================ [target] title0=Runaway path0=D:\Games\MVM 2004 - Runaway\Runaway.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136331296 flagg0=1207959552 flagh0=262164 flagi0=138412038 flagj0=266368 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 ================================================ FILE: build/exports/Rune War.dxw ================================================ [target] title0=Rune War path0=D:\Games\RuneWar\RUNEWAR.EXE launchpath0= module0= opengllib0= ver0=0 coord0=0 flag0=134218272 flagg0=1207959552 flagh0=20 flagi0=134217732 flagj0=0 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Rune.dxw ================================================ [target] title0=Rune path0=D:\Games\Rune\System\Rune.exe module0= opengllib0= ver0=0 coord0=0 flag0=402669601 flagg0=1207959552 flagh0=20 flagi0=4 tflag0=6211 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/SPWaW 2016.dxw ================================================ [target] title0=SPWaW 2016 path0=D:\Games\The Depot\SPWaW 2016\mech.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=1 flag0=49186 flagg0=1207992338 flagh0=532 flagi0=18907136 flagj0=1152 flagk0=0 flagl0=0 flagm0=0 tflag0=0 posx0=50 posy0=50 sizx0=1340 sizy0=1000 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 ================================================ FILE: build/exports/STCC Swedish TouringCar Championship.dxw ================================================ [target] title0=STCC Swedish TouringCar Championship path0=D:\Games\STCC\STCC.exe launchpath0= module0= opengllib0= notes0=Still slow and choppy in emulation mode ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4256 flagk0=0 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Scrapland.dxw ================================================ [target] title0=Scrapland path0=D:\Games\Scrapland\Bin\Scrap.exe launchpath0= module0= opengllib0= ver0=0 coord0=0 flag0=134217762 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Settlers 3, the.dxw ================================================ [target] title0=Settlers 3, the path0=D:\Games\Settlers3\S3.EXE module0= opengllib0= ver0=0 coord0=0 flag0=-1476394974 flagg0=1207959618 flagh0=20 flagi0=4194308 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 launchpath0= flagj0=128 notes0= registry0= flagk0=0 flagl0=0 flagm0=0 swapeffect0=0 maxddinterface0=7 ================================================ FILE: build/exports/Settlers 4, the, with NVIDIA or VirtualBox.dxw ================================================ ; by Adrian Kalla, Oct. 18th 2015 [target] title0=Settlers 4, the, with NVIDIA or VirtualBox path0=C:\GOG Games\The Settlers IV GOLD\Exe\S4_Main.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=1 flag0=212926496 flagg0=1073776771 flagh0=33554516 flagi0=136314884 flagj0=1082135680 flagk0=262144 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=1280 sizy0=1024 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Shadow Watch.dxw ================================================ [target] title0=Shadow Watch path0=D:\Games\Shadow Watch\sw.exe launchpath0=D:\Games\Shadow Watch\ShadowWatch.exe module0=dx.dll opengllib0= ver0=0 coord0=0 flag0=-2013265869 flagg0=1241513984 flagh0=4202512 flagi0=203423748 flagj0=128 tflag0=0 initx0=200 inity0=290 minx0=0 miny0=0 maxx0=800 maxy0=600 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 startfolder0= notes0= registry0= monitorid0=0 flagk0=65536 flagl0=0 flagm0=0 flagn0=0 flago0=0 dflag0=0 swapeffect0=0 maxddinterface0=7 slowratio0=1 scanline0=1 initresw0=0 initresh0=0 [stamp] version=2.04.21.a1 time=Wed Mar 15 00:06:35 2017 ================================================ FILE: build/exports/Sheep Dog'n Wolf.dxw ================================================ [target] title0=Sheep Dog'n Wolf path0=D:\Games\Sheep & Wolf\SheepD3D.exe launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=0 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Sherlock Holmes - Mistery of the Mummy (steam).dxw ================================================ [target] title0=Sherlock Holmes - Mystery of the Mummy (steam) path0=D:\Games\Sherlock Holmes - Mystery of the Mummy\game.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314914 flagg0=1073741824 flagh0=65556 flagi0=134217732 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Sherlock Holmes The Mystery of The Mummy demo.dxw ================================================ [target] title0=Sherlock Holmes The Mystery of The Mummy demo path0=D:\Games\Sherlock Holmes demo\Sherlock Holmes- Level-1- Hall\game.exe launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=673202210 flagg0=1208221696 flagh0=8212 flagi0=138412036 flagj0=4224 flagk0=0 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 startfolder0= registry0= monitorid0=0 flagl0=0 flagm0=5 dflag0=0 maxddinterface0=7 slowratio0=1 scanline0=1 initresw0=0 initresh0=0 ================================================ FILE: build/exports/ShipWreckers demo.dxw ================================================ [target] title0=ShipWreckers demo path0=F:\Games\ShipWreckers demo\SW.EXE startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 monitorid0=-1 coord0=0 flag0=673185826 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=1048576 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=0 swapeffect0=0 maxddinterface0=7 slowratio0=2 scanline0=0 initresw0=800 initresh0=600 ================================================ FILE: build/exports/Shogo Mobile Armor Division.dxw ================================================ [target] title0=Shogo Mobile Armor Division path0=D:\Games\Shogo\Client.exe launchpath0=D:\Games\Shogo\Shogo.exe module0= opengllib0= ver0=0 coord0=0 flag0=151011328 flagg0=1207959552 flagh0=20 flagi0=4194308 tflag0=64 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Sid Meier's Alpha Centauri (GOG).dxw ================================================ [target] title0=Sid Meier's Alpha Centauri (GOG) path0=D:\Games\Sid Meier's Alpha Centauri\terran.exe launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=134217762 flagg0=1744830464 flagh0=20 flagi0=138412036 flagj0=4224 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Sid Meier's Civilization III Complete.dxw ================================================ [target] title0=Sid Meier's Civilization III Complete path0=D:\Games\Sid Meier's Civilization III Complete\Conquests\Civ3Conquests.exe module0=jgl opengllib0= ver0=0 coord0=0 flag0=973352994 flagg0=136462360 flagh0=2162708 flagi0=4100 tflag0=64 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=6 winver0=0 maxres0=5 ================================================ FILE: build/exports/Sid Meiers SimGolf CLASS.dxw ================================================ [target] title0=Sid Meiers SimGolf CLASS path0=D:\Games\Sid.Meiers.SimGolf-CLASS\golf.exe module0= opengllib0= ver0=0 coord0=0 flag0=402653218 flagg0=1745879040 flagh0=65556 flagi0=0 tflag0=3 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 ================================================ FILE: build/exports/Sid Meyer's Gettysburg Demo.dxw ================================================ [target] title0=Sid Meyer's Gettysburg Demo path0=D:\Games\Sid Meyer's Gettysburg Demo\lee.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=673185826 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=67113088 flagk0=327680 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Silent Hill 2 Director's Cut.dxw ================================================ [target] title0=Silent Hill 2 Director's Cut path0=D:\Games\Silent Hill 2\sh2pc.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136315394 flagg0=1207959552 flagh0=20 flagi0=155189252 flagj0=4224 flagk0=268500992 flagl0=0 flagm0=0 tflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 ================================================ FILE: build/exports/Silent Hunter III.dxw ================================================ [target] title0=Silent Hunter III path0=D:\Games\Ubisoft\SilentHunterIII\SH3.EXE launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=679493666 flagg0=1757413392 flagh0=33554452 flagi0=673185796 flagj0=4224 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=3 maxres0=3 ================================================ FILE: build/exports/Silver.dxw ================================================ [target] title0=Silver path0=D:\Games\Silver\silver.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=137363494 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=0 flagl0=0 flagm0=0 tflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 ================================================ FILE: build/exports/SimCity 3000.dxw ================================================ [target] title0=SimCity 3000 path0=D:\Games\SimCity 3000\Game\Sc3.exe launchpath0= module0=SIMCITY.DLL opengllib0= ver0=1 coord0=0 flag0=1746935842 flagg0=1811939328 flagh0=131092 flagi0=136314884 flagj0=8320 tflag0=6403 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Slam Tilt.dxw ================================================ [target] title0=Slam Tilt path0=D:\Games\SlamTilt\slamtilt.exe module0= opengllib0= ver0=0 coord0=0 flag0=671088674 flagg0=1207959554 flagh0=20 flagi0=4194304 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 launchpath0= notes0= flagj0=128 flagk0=0 winver0=0 maxres0=0 swapeffect0=0 ================================================ FILE: build/exports/Slave Zero.dxw ================================================ [target] title0=Slave Zero path0=D:\Games\Slave Zero\SlaveZero.exe launchpath0= module0= opengllib0= ver0=0 coord0=0 flag0=671105120 flagg0=1207959552 flagh0=20 flagi0=2097156 tflag0=6210 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Snowboard Racer.dxw ================================================ [target] title0=Snowboard Racer path0=D:\Games\Snowboard Racer\snowboard\SnowBoard.exe launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=33554452 flagi0=138412036 flagj0=4224 flagk0=256 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Snowmobile Racing.dxw ================================================ [target] title0=Snowmobile Racing path0=D:\Games\Snowmobile Racing\snow.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=681574434 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=327680 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Space Hulk.dxw ================================================ [target] title0=Space Hulk path0=D:\Games\Space Hulk\HULKDATA\BIN\HULKW95.EXE launchpath0= module0= opengllib0= notes0=Beware: this game requirestheat the executable HULKW95.EXE, \nlocated in the HULKDATA\BIN subfolder, is run from the root directory.\nTo do so, it is necessary to create a task shortcut and ru the game from there,\nrunning the game from DxWnd is not working. registry0= ver0=0 coord0=0 flag0=140509218 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=5248 flagk0=327680 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Space Rangers.dxw ================================================ [target] title0=Space Rangers path0=D:\Games\Space Rangers\Rangers.exe module0= opengllib0= ver0=1 coord0=0 flag0=134234146 flagg0=1207959552 flagh0=20 flagi0=4194304 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 launchpath0= notes0= flagj0=128 flagk0=8 winver0=0 maxres0=0 swapeffect0=0 ================================================ FILE: build/exports/Spearhead.dxw ================================================ [target] title0=Spearhead path0=D:\Games\Spearhead\Spearhead.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 monitorid0=-1 coord0=0 flag0=744488994 flagg0=1216348288 flagh0=8212 flagi0=138412036 flagj0=4224 flagk0=1114112 flagl0=32784 flagm0=64 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=0 swapeffect0=0 maxddinterface0=7 slowratio0=2 scanline0=0 initresw0=640 initresh0=480 ================================================ FILE: build/exports/SpellForce GOLD Edition.dxw ================================================ [target] title0=SpellForce GOLD Edition path0=D:\Games\SpellForce\SpellForce.exe launchpath0= module0= opengllib0= ver0=9 coord0=0 flag0=134218272 flagg0=1207959552 flagh0=20 flagi0=4194308 tflag0=64 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Spike the Hedgehog.dxw ================================================ [target] title0=Spike the Hedgehog path0=D:\Games\Spike\spike2.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 monitorid0=-1 coord0=0 flag0=673185826 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=268435456 flagm0=0 flagn0=0 flago0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=0 swapeffect0=0 maxddinterface0=7 slowratio0=2 scanline0=0 initresw0=800 initresh0=600 [stamp] version=2.04.21.a4 time=Sat Mar 18 15:50:14 2017 ================================================ FILE: build/exports/Spirit Warrior.dxw ================================================ [target] title0=Spirit Warrior path0=D:\Games\spirit\SPIRIT.EXE launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=134217762 flagg0=1744830464 flagh0=1044 flagi0=1212153862 flagj0=4224 tflag0=513 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Sports Car GT Demo.dxw ================================================ [target] title0=Sports Car GT Demo path0=D:\Games\Sports Car GT Demo\Spcar.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136331298 flagg0=1207959552 flagh0=20 flagi0=136445956 flagj0=2101376 flagk0=65536 flagl0=0 flagm0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 ================================================ FILE: build/exports/Sports Car GT.dxw ================================================ [target] title0=Sports Car GT path0=D:\Games\Sports Car GT\Spcar.exe launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=134234146 flagg0=1207959552 flagh0=20 flagi0=138543108 flagj0=20608 flagk0=0 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/St. Row the Third (DX11).dxw ================================================ [target] title0=St. Row the Third (DX11) path0=D:\Games\St. Row the Third\Saints Row The Third\saintsrowthethird_dx11.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=11 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=138416132 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=4 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/St. Row the Third (DX9).dxw ================================================ [target] title0=St. Row the Third (DX9) path0=D:\Games\St. Row the Third\Saints Row The Third\SaintsRowTheThird.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=9 coord0=0 flag0=136314914 flagg0=1744830464 flagh0=20 flagi0=136314884 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=1024 sizy0=768 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Stahlfabrik.dxw ================================================ [target] title0=Stahlfabrik path0=D:\Games\Stahl\Stahl.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Star Defender 1.dxw ================================================ [target] title0=Star Defender 1 path0=D:\Games\Star Defender 123Special\sd1\StarDefender.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=1 coord0=0 flag0=136314922 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=329728 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Star Defender 2.dxw ================================================ [target] title0=Star Defender 2 path0=D:\Games\Star Defender 123Special\sd2\game.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=8 coord0=0 flag0=136315434 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=329728 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Star Trek Armada.dxw ================================================ [target] title0=Star Trek Armada path0=D:\Games\Star Trek Armada\Armada.exe launchpath0= module0= opengllib0= notes0=Side effect (to be known):\nDo not notify on task switch: inhibits the game cursor registry0= ver0=0 coord0=0 flag0=-1474297822 flagg0=1476395008 flagh0=8208 flagi0=138412036 flagj0=128 flagk0=327680 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 startfolder0= monitorid0=0 flagl0=0 flagm0=536870912 dflag0=0 maxddinterface0=7 slowratio0=1 scanline0=1 initresw0=0 initresh0=0 ================================================ FILE: build/exports/Star Trek Birth of the Federation.dxw ================================================ [target] title0=Star Trek Birth of the Federation path0=D:\Games\Star Trek Birth of the Federation\trek.exe launchpath0= module0= opengllib0= ver0=9 coord0=0 flag0=136331298 flagg0=1207959552 flagh0=20 flagi0=138412036 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 notes0= flagj0=128 flagk0=0 swapeffect0=0 ================================================ FILE: build/exports/Star Trek Generations.dxw ================================================ [target] title0=Star Trek Generations path0=D:\Games\stgen\sgens.exe launchpath0= module0= opengllib0= notes0= registry0=[HKEY_LOCAL_MACHINE\SOFTWARE\MicroProse]\n[HKEY_LOCAL_MACHINE\SOFTWARE\MicroProse\Star Trek Generations]\n[HKEY_LOCAL_MACHINE\SOFTWARE\MicroProse\Star Trek Generations\1.0]\n"Path"="D:\\GAMES\\STGEN"\n"CDPath"="F:\\GENS"\n"InstallSet"="MED"\n ver0=1 coord0=0 flag0=136314978 flagg0=1744830464 flagh0=1044 flagi0=1212153860 flagj0=4224 flagk0=0 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Star Trek Hidden Evil.dxw ================================================ [target] title0=Star Trek Hidden Evil path0=D:\Games\Star Trek Hidden Evil\Bin\HiddenEvil.cracked.exe launchpath0= module0=Render.dll opengllib0= notes0= registry0= ver0=7 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=16 flagi0=138412036 flagj0=4224 flagk0=65540 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=0 swapeffect0=0 ================================================ FILE: build/exports/Star Trek Klingon Academy.dxw ================================================ [target] title0=Star Trek Klingon Academy path0=D:\Games\Klingon Academy\ka.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=-2011168718 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=327680 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=800 maxy0=600 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Star Trek Starfleet Command.dxw ================================================ [target] title0=Star Trek Starfleet Command path0=D:\Games\Star Trek Starfleet Command\StarFleet.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314914 flagg0=1209008128 flagh0=20 flagi0=138412036 flagj0=67113088 flagk0=65536 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Star Wars Episode I Racer (emulated).dxw ================================================ [target] title0=Star Wars Episode I Racer (emulated) path0=D:\Games\Star Wars Episode 1 racer\SWEP1RCR.EXE launchpath0= module0= opengllib0= ver0=0 coord0=0 flag0=679493671 flagg0=1210056720 flagh0=20 flagi0=2097172 flagj0=128 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=0 notes0= flagk0=0 swapeffect0=0 ================================================ FILE: build/exports/Star Wars Episode I Racer.dxw ================================================ [target] title0=Star Wars Episode I Racer path0=D:\Games\Star Wars Episode 1 racer\SWEP1RCR.EXE module0= opengllib0= ver0=0 coord0=0 flag0=679493671 flagg0=1207959568 flagh0=20 flagi0=2097172 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=0 launchpath0= notes0= flagj0=128 flagk0=65536 swapeffect0=0 registry0= flagl0=0 flagm0=0 maxddinterface0=7 ================================================ FILE: build/exports/Star Wars Jedi Knight II (multiplayer).dxw ================================================ [target] title0=Star Wars Jedi Knight II (multiplayer) path0=D:\Games\Star Wars Jedi Knight II\GameData\jk2mp.exe startfolder0= launchpath0=D:\Games\Star Wars Jedi Knight II\JediOutcast.exe module0= opengllib0= notes0= registry0= ver0=0 monitorid0=-1 coord0=0 flag0=706740258 flagg0=1208091136 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=268435456 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=0 swapeffect0=0 maxddinterface0=7 slowratio0=2 scanline0=0 initresw0=800 initresh0=600 ================================================ FILE: build/exports/Star Wars Jedi Knight II (singleplayer).dxw ================================================ [target] title0=Star Wars Jedi Knight II (singleplayer) path0=D:\Games\Star Wars Jedi Knight II\GameData\jk2sp.exe startfolder0= launchpath0=D:\Games\Star Wars Jedi Knight II\JediOutcast.exe module0= opengllib0= notes0= registry0= ver0=0 monitorid0=-1 coord0=0 flag0=706740258 flagg0=1208091136 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=268435456 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=0 swapeffect0=0 maxddinterface0=7 slowratio0=2 scanline0=0 initresw0=800 initresh0=600 ================================================ FILE: build/exports/Star Wars Phantom Menace.dxw ================================================ [target] title0=Star Wars Phantom Menace path0=D:\Games\Star Wars Phantom Menace\WMAIN.EXE module0= opengllib0= ver0=0 coord0=0 flag0=939524131 flagg0=1207959552 flagh0=20 flagi0=4194304 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 launchpath0= notes0= flagj0=128 flagk0=0 winver0=0 maxres0=0 swapeffect0=0 ================================================ FILE: build/exports/Star Wars Rogue Squadron 3D.dxw ================================================ [target] title0=Star Wars Rogue Squadron 3D path0=D:\Games\rogue\Rogue Squadron.EXE launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314918 flagg0=1207959552 flagh0=20 flagi0=138412038 flagj0=4224 flagk0=134283264 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Star Wars Shadow of the Empire (DEMO).dxw ================================================ [target] title0=Star Wars Shadow of the Empire (DEMO) path0=D:\Games\shadowsdemo\shadows.exe module0= opengllib0= ver0=0 coord0=0 flag0=134217762 flagg0=1208483844 flagh0=25165844 flagi0=4194304 tflag0=275 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 launchpath0= notes0= flagj0=128 flagk0=0 winver0=0 maxres0=0 swapeffect0=0 ================================================ FILE: build/exports/Star Wars Shadow of the Empire.dxw ================================================ [target] title0=Star Wars Shadow of the Empire path0=D:\Games\Star Wars Shadow of the Empire\game\SDATA\SHADOWS.EXE module0= opengllib0= ver0=0 coord0=0 flag0=134217762 flagg0=1476919296 flagh0=25166364 flagi0=0 tflag0=274 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 ================================================ FILE: build/exports/Star Wars Tie Fighter (virtual joystick).dxw ================================================ [target] title0=Star Wars Tie Fighter (virtual joystick) path0=D:\Games\TIE95\TIE95.EXE startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 monitorid0=0 coord0=0 flag0=134217846 flagg0=1207959568 flagh0=16 flagi0=4261892 flagj0=0 flagk0=402655232 flagl0=1081344 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=6 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=1 scanline0=1 initresw0=0 initresh0=0 ================================================ FILE: build/exports/Star Wars Tie Fighter.dxw ================================================ [target] title0=Star Wars Tie Fighter path0=D:\Games\TIE95\TIE95.EXE module0= opengllib0= ver0=0 coord0=0 flag0=134217843 flagg0=1207959568 flagh0=20 flagi0=4261892 tflag0=6466 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=6 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Star Wars X-Wing Alliance (GOG).dxw ================================================ [target] title0=Star Wars X-Wing Alliance (GOG) path0=D:\Games\Star Wars - X-Wing Alliance (GOG)\XWINGALLIANCE.EXE launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314930 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=1476722688 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=800 maxy0=600 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Star Wars X-Wing Alliance.dxw ================================================ [target] title0=Star Wars X-Wing Alliance path0=D:\Games\Star Wars X-Wing Alliance\XWINGALLIANCE.EXE launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314930 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=1074794624 flagk0=402980864 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=800 maxy0=600 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Star Wars X-Wing vs. Tie-Fighter (GOG).dxw ================================================ [target] title0=Star Wars X-Wing vs. Tie-Fighter (GOG) path0=D:\Games\Star Wars - XvT\Z_XVT__.EXE launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314930 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=67113088 flagk0=939589632 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=800 maxy0=600 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/StarCraft.dxw ================================================ [target] title0=StarCraft path0=D:\Games\Starcraft\StarCraft.exe module0= opengllib0= ver0=0 coord0=0 flag0=134217762 flagg0=1207959552 flagh0=20 flagi0=4194304 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 launchpath0= notes0= flagj0=128 winver0=0 maxres0=0 registry0= flagk0=65536 flagl0=0 flagm0=0 swapeffect0=0 maxddinterface0=7 ================================================ FILE: build/exports/Starfleet Academy (d3d).dxw ================================================ [target] title0=Starfleet Academy (d3d) path0=D:\Games\SFA\SFAD3D.EXE launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=134217762 flagg0=1207959552 flagh0=20 flagi0=138412038 flagj0=4224 tflag0=536870912 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Starfleet Academy (sw).dxw ================================================ [target] title0=Starfleet Academy (sw) path0=D:\Games\SFA\SFA.EXE launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=134217762 flagg0=1207959552 flagh0=20 flagi0=134217734 flagj0=4224 tflag0=536870912 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Starsiege - Tribes.dxw ================================================ [target] title0=Starsiege - Tribes path0=D:\Games\Starsiege - Tribes\Tribes.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 monitorid0=-1 coord0=0 flag0=681574442 flagg0=1209403392 flagh0=8212 flagi0=138412036 flagj0=-2147479424 flagk0=33619968 flagl0=67141648 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=0 swapeffect0=0 maxddinterface0=7 slowratio0=2 scanline0=0 initresw0=800 initresh0=600 ================================================ FILE: build/exports/State of Emergency.dxw ================================================ [target] title0=State of Emergency path0=D:\Games\State of Emergency\KaosPC.exe module0= opengllib0= ver0=8 coord0=0 flag0=671088676 flagg0=1207959552 flagh0=20 flagi0=4 tflag0=7315 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 ================================================ FILE: build/exports/State of War Warmonger.dxw ================================================ [target] title0=State of War Warmonger path0=D:\Games\State of War Warmonger\State of War - Warmonger.exe module0= opengllib0= ver0=0 coord0=0 flag0=134234210 flagg0=134217728 flagh0=532 flagi0=4 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Steel Saviour demo (T-Zwei).dxw ================================================ [target] title0=Steel Saviour demo (T-Zwei) path0=D:\Games\T-Zwei\TZwei.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=8 coord0=0 flag0=136314914 flagg0=1744961536 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Steel Saviour.dxw ================================================ [target] title0=Steel Saviour path0=D:\Games\Steel Saviour\SteelSaviour.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=8 coord0=0 flag0=136314922 flagg0=1744961536 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Still Life (GOG).dxw ================================================ [target] title0=Still Life (GOG) path0=D:\Games\Still Life (GOG)\StillLife.exe module0= opengllib0= ver0=0 coord0=0 flag0=671105058 flagg0=1207959568 flagh0=20 flagi0=4 tflag0=1088 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Stratego.dxw ================================================ [target] title0=Stratego path0=D:\Games\Stratego\Stratego.exe module0= opengllib0= ver0=0 coord0=0 flag0=134234146 flagg0=1209008128 flagh0=131092 flagi0=4 tflag0=64 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Street Fighters Zero.dxw ================================================ [target] title0=Street Fighters Zero path0=D:\Games\sfzero\relbin\ZERO_A95.EXE launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=134217762 flagg0=1744830464 flagh0=1044 flagi0=1212153860 flagj0=4224 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 flagk0=65536 swapeffect0=0 registry0=\n[HKEY_LOCAL_MACHINE\SOFTWARE\CAPCOM]\n[HKEY_LOCAL_MACHINE\SOFTWARE\CAPCOM\STREETFIGHTERZERO]\n""="..\\bin"\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\CAPCOM\STREETFIGHTERZERO\1.0]\n ================================================ FILE: build/exports/Street Wars.dxw ================================================ [target] title0=Street Wars path0=D:\Games\Street_Wars\Sw.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=134217734 flagj0=4224 flagk0=327680 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Streets of Sim City (2000 re-release, 3DFX).dxw ================================================ [target] title0=Streets of Sim City path0=D:\Games\Streets of Sim City\STREETS.EXE launchpath0= module0= opengllib0= ver0=1 coord0=0 flag0=671088674 flagg0=1224736768 flagh0=20 flagi0=138412036 flagj0=4224 tflag0=6403 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Strength & Honour.dxw ================================================ [target] title0=Strength & Honour path0=D:\Program Files (x86)\Magitech\SNH\Strength & Honour.exe launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=681574434 flagg0=1744961536 flagh0=65554 flagi0=138412036 flagj0=528576 flagk0=0 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=0 sizy0=0 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Stronghold Crusader HD.dxw ================================================ [target] title0=Stronghold Crusader HD path0=d:\Games\Stronghold Crusader.exe launchpath0=d:\Games\Stronghold Crusader.exe module0= opengllib0= ver0=0 coord0=3 flag0=134218400 flagg0=1275068432 flagh0=1048596 flagi0=136314884 flagj0=128 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=1280 sizy0=1024 maxfps0=0 initts0=0 winver0=1 maxres0=-1 ================================================ FILE: build/exports/Stronghold Crusader.dxw ================================================ [target] title0=Stronghold Crusader path0=F:\Games\Stronghold Crusader\Stronghold Crusader.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 monitorid0=-1 coord0=0 flag0=673185830 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=0 swapeffect0=0 maxddinterface0=7 slowratio0=2 scanline0=0 initresw0=800 initresh0=600 ================================================ FILE: build/exports/Sub Command.dxw ================================================ [target] title0=Sub Command path0=D:\Games\Sub Command\subcommand.exe launchpath0= module0= opengllib0= ver0=8 coord0=0 flag0=1610613345 flagg0=1207959552 flagh0=20 flagi0=37748740 tflag0=64 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=1200 sizy0=900 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/SubCulture (3DFX).dxw ================================================ [target] title0=SubCulture (3DFX) path0=D:\Games\subcult\SC3DFX.EXE launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=671088674 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 tflag0=512 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/SubCulture (D3D).dxw ================================================ [target] title0=SubCulture (D3D) path0=D:\Games\subcult\SCD3D.EXE launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=671088690 flagg0=1207959552 flagh0=20 flagi0=138416132 flagj0=4224 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=800 maxy0=600 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=4 ================================================ FILE: build/exports/SubCulture (sw).dxw ================================================ [target] title0=SubCulture (sw) path0=D:\Games\subcult\SC.EXE launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=671088674 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Subspace the Captain's Chair.dxw ================================================ [target] title0=Subspace the Captain's Chair path0=D:\Games\SUBTCC\Subspace.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Summoner, the.dxw ================================================ [target] title0=Summoner, the path0=D:\Games\Summoner\Sum.exe launchpath0=D:\Games\Summoner\Summoner.exe module0= opengllib0= ver0=0 coord0=0 flag0=134217762 flagg0=1207959552 flagh0=20 flagi0=138412036 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 flagj0=128 ================================================ FILE: build/exports/Super Puzzle Fighter 2 Turbo.dxw ================================================ [target] title0=Super Puzzle Fighter 2 Turbo path0=D:\Games\Super Puzzle Fighter 2 Turbo (1997)\W_Spf2x.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0=[HKEY_LOCAL_MACHINE\SOFTWARE\Capcom]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Capcom\w_spf2x]\n"SAVEDIR"=".\\"\n"SC_MODE"="SCREEN_MODE_640*480_8BIT_DIRECTX"\n"CD_ROM"=".\\"\n"SETUPCEHCK"="SETUP_ALL_OK"\n"NET_USER"=""\n\n ver0=0 monitorid0=-1 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=1044 flagi0=1212153860 flagj0=5248 flagk0=67584 flagl0=32768 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Super Real Mahjong P7.dxw ================================================ [target] title0=Super Real Mahjong P7 path0=D:\Games\Super Real Mahjong P7\P7\p7.exe launchpath0=D:\Games\Super Real Mahjong P7\P7\p7.exe -f module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=681574434 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=5248 flagk0=67436544 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/SuperBike 2000.dxw ================================================ [target] title0=SuperBike 2000 path0=F:\Games\SBK2000\SBK2000.exe startfolder0= launchpath0= module0= opengllib0= notes0=N.b.\nCD rom in\nHKEY_LOCAL_MACHINE/SOFTWARE/EA SPORTS/Superbike 2000/CD\nor \nHKEY_LOCAL_MACHINE/SOFTWARE/Wow6432Node/EA SPORTS/Superbike 2000/CD registry0= ver0=0 monitorid0=-1 coord0=0 flag0=673202210 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=524288 flagm0=1312 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=0 swapeffect0=0 maxddinterface0=7 slowratio0=2 scanline0=0 initresw0=800 initresh0=600 ================================================ FILE: build/exports/SuperChix'76 (demo).dxw ================================================ [target] title0=SuperChix'76 (demo) path0=*\HotChix2.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=203423778 flagg0=1207959552 flagh0=532 flagi0=138412036 flagj0=134221952 flagk0=65536 flagl0=8 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=4 ================================================ FILE: build/exports/Swat 3 (GOG).dxw ================================================ [target] title0=Swat 3 (GOG) path0=D:\Games\SWAT 3 (GOG)\game\swat.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=1 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Swat 3.dxw ================================================ [target] title0=Swat 3 path0=D:\Games\SWAT3\SWAT.EXE launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314914 flagg0=1209008128 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Syberia 2.dxw ================================================ [target] title0=Syberia 2 path0=D:\Games\Syberia 2\Syberia2.exe module0= opengllib0= ver0=0 coord0=0 flag0=134234147 flagg0=1207959552 flagh0=20 flagi0=4194308 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 launchpath0= notes0= flagj0=0 flagk0=0 swapeffect0=0 ================================================ FILE: build/exports/Syberia.dxw ================================================ [target] title0=Syberia path0=D:\Games\Syberia\Syberia.exe module0= opengllib0= ver0=0 coord0=0 flag0=1610694675 flagg0=1207959552 flagh0=20 flagi0=4194308 tflag0=0 initx0=300 inity0=300 minx0=0 miny0=0 maxx0=800 maxy0=600 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 launchpath0= notes0= flagj0=128 flagk0=4096 swapeffect0=0 ================================================ FILE: build/exports/TOCA Touring Car Championship.dxw ================================================ [target] title0=TOCA Touring Car Championship path0=F:\Games\tourcar\tourcars.exe startfolder0= launchpath0=F:\Games\tourcar\setup.exe module0= opengllib0= notes0= registry0=\n[HKEY_LOCAL_MACHINE\SOFTWARE\Codemasters]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Codemasters\Touring Car]\n"GameDirectory"="F:\\Games\\tourcar\\"\n"CD_Drive"="."\n"Install_Drive"="F:"\n"CardHintIndex"=dword:00000000\n"ShowRunInfo"=dword:00000000\n"S3RunInfo"=dword:00000000\n\n ver0=0 monitorid0=-1 coord0=0 flag0=673185834 flagg0=1207959552 flagh0=528 flagi0=138412032 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=0 swapeffect0=0 maxddinterface0=7 slowratio0=2 scanline0=0 initresw0=800 initresh0=600 ================================================ FILE: build/exports/Tails Gear.dxw ================================================ [target] title0=Tails Gear path0=D:\Games\TailsGear078\DT_MAIN.exe launchpath0= module0= opengllib0= ver0=0 coord0=0 flag0=134217760 flagg0=1207959552 flagh0=20 flagi0=4194308 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Taito Legends 2.dxw ================================================ [target] title0=Taito Legends 2 path0=D:\Games\Taito Legends 2\Taito.exe launchpath0= module0= opengllib0= ver0=0 coord0=0 flag0=134217762 flagg0=1207959552 flagh0=20 flagi0=205520900 flagj0=4224 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Take no Prisoners.dxw ================================================ [target] title0=Take no Prisoners path0=D:\Games\Take no Prisoners\TNP.EXE module0= opengllib0= ver0=0 coord0=0 flag0=134234146 flagg0=1476395140 flagh0=20 flagi0=4194304 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 launchpath0= notes0= flagj0=128 winver0=0 maxres0=0 registry0= flagk0=65536 swapeffect0=0 ================================================ FILE: build/exports/Talis Gear.dxw ================================================ [target] title0=Talis Gear path0=D:\Games\TailsGear078\DT_MAIN.exe module0= opengllib0= ver0=0 coord0=0 flag0=134217762 flagg0=1207959552 flagh0=20 flagi0=4194304 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 launchpath0= notes0= flagj0=128 flagk0=0 winver0=0 maxres0=0 swapeffect0=0 ================================================ FILE: build/exports/Tanktics.dxw ================================================ [target] title0=Tanktics path0=D:\Games\tanktics\tanktics.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=748683298 flagg0=1744830464 flagh0=20 flagi0=-2008543232 flagj0=4224 flagk0=65536 flagl0=513 flagm0=0 tflag0=0 dflag0=0 posx0=-9550 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=3 swapeffect0=0 maxddinterface0=6 slowratio0=2 ================================================ FILE: build/exports/Tarzan Action Game.dxw ================================================ [target] title0=Tarzan Action Game path0=D:\Games\TARZAN\tarzan.exe launchpath0= module0= opengllib0= ver0=0 coord0=0 flag0=671219747 flagg0=1207959552 flagh0=20 flagi0=138413060 flagj0=0 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Taz Wanted.dxw ================================================ [target] title0=Taz Wanted path0=D:\Games\Taz Wanted\Taz.exe launchpath0=D:\Games\Taz Wanted\TazLauncher.exe module0= opengllib0= notes0= registry0= ver0=8 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 startfolder0= monitorid0=0 flagn0=0 flago0=0 scanline0=1 initresw0=0 initresh0=0 [stamp] version=2.04.21.a6 time=Tue Mar 21 19:49:05 2017 ================================================ FILE: build/exports/Tenka.dxw ================================================ [target] title0=Tenka path0=D:\Games\tenka\tenka.exe launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=134217762 flagg0=1207959552 flagh0=20 flagi0=134217732 flagj0=4224 tflag0=512 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Tetris Worlds.dxw ================================================ [target] title0=Tetris Worlds path0=D:\Games\Tetris Worlds\TetrisWorlds.exe launchpath0= module0= opengllib0= ver0=1 coord0=0 flag0=134217762 flagg0=1207959556 flagh0=16 flagi0=136314884 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=4 winver0=0 maxres0=-1 notes0= flagj0=128 flagk0=16 swapeffect0=0 ================================================ FILE: build/exports/The Creed (SW DEMO).dxw ================================================ [target] title0=The Creed (SW DEMO) path0=D:\Games\The Creed (SW DEMO)\DemoCreed.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=201330816 flagk0=98304 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/The Creed.dxw ================================================ [target] title0=The Creed path0=D:\Games\The Creed\Creed.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0=\n[HKEY_CLASSES_ROOT\The Creed]\n"Scene16"=".\\data\\scene16.cus"\n"InstallType"="MAXIMUM"\n"InstallDir"="."\n"Password"="CREED"\n"LockCode"=dword:04fcf000\n"Version"=dword:00000096\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Insomnia Entertainment]\n[HKEY_LOCAL_MACHINE\SOFTWARE\Insomnia Entertainment\The Creed]\n[HKEY_LOCAL_MACHINE\SOFTWARE\Insomnia Entertainment\The Creed\1.00.000]\n ver0=0 coord0=0 flag0=136314994 flagg0=1207959680 flagh0=1044 flagi0=1212153860 flagj0=201347200 flagk0=2195456 flagl0=65536 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/The Hobbit(TM) Demo.dxw ================================================ [target] title0=The Hobbit(TM) Demo path0=D:\Games\The Hobbit(TM) Demo\MeridianDemo.exe launchpath0= module0= opengllib0= notes0= ver0=8 coord0=0 flag0=134217762 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=0 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/The Hobbit(TM).dxw ================================================ [target] title0=The Hobbit(tm) path0=d:\Games\The Hobbit(TM)\Meridian.exe launchpath0= module0= opengllib0= notes0=1 - If you want to set screen mode other than the default included (800x600) \nyou should run the game without the hook, set the preferred screenmode in-game, \nthen change it in DxDwnd before else you'll reset back to the initial mode set.\n\n2 - To get the game working it took some checking/unchecking for a bit. \nAll that's needed is to activated "Fix Parent Window" which this game seems \nto use the invisible window for it's execution (per DxWnd manual even though \nexperimental... it works) and set the direct x version to 8. ver0=8 coord0=0 flag0=704643110 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 flagk0=0 swapeffect0=0 ================================================ FILE: build/exports/The Hulk Demo.dxw ================================================ [target] title0=The Hulk Demo path0=D:\Games\The Hulk Demo\hulk_demo.exe launchpath0= module0= opengllib0= notes0= ver0=8 coord0=0 flag0=679493670 flagg0=1209008128 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=0 tflag0=-2147477241 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/The Mummy.dxw ================================================ [target] title0=The Mummy path0=D:\Games\The Mummy\MummyPC.exe launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=134217762 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/The Sting!.dxw ================================================ [target] title0=The Sting! path0=D:\Games\The Sting!\Sting.exe launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=136314914 flagg0=1476395008 flagh0=16 flagi0=138412036 flagj0=4224 flagk0=65536 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 startfolder0= registry0= monitorid0=0 flagl0=0 flagm0=0 dflag0=0 maxddinterface0=7 slowratio0=1 scanline0=1 initresw0=0 initresh0=0 flagn0=0 flago0=0 [stamp] version=2.04.21.a2 time=Thu Mar 16 09:25:20 2017 ================================================ FILE: build/exports/The Thing.dxw ================================================ [target] title0=The Thing path0=D:\Games\The Thing\bin\thething.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=65556 flagi0=138412036 flagj0=4224 flagk0=1310720 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=1200 sizy0=900 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/The Watchmaker.dxw ================================================ [target] title0=The Watchmaker path0=D:\Games\The Watchmaker\Wm.exe launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=134217732 flagj0=4224 flagk0=0 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/The Westerner.dxw ================================================ [target] title0=The Westerner path0=D:\Games\The Westerner\PICTuRE.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136315426 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=268500992 flagl0=0 flagm0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 ================================================ FILE: build/exports/The Wonderful End of the World (Steam demo).dxw ================================================ [target] title0=The Wonderful End of the World (Steam demo) path0=D:\Program Files (x86)\Steam\SteamApps\common\The Wonderful End of the World Demo\main.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=681714210 flagg0=1209008144 flagh0=20 flagi0=136314884 flagj0=4224 flagk0=268500992 flagl0=0 flagm0=0 tflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=1 maxddinterface0=7 ================================================ FILE: build/exports/The Wonderful End of the World.dxw ================================================ [target] title0=The Wonderful End of the World path0=D:\Games\The Wonderful End of the World\game.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=681714210 flagg0=1209008144 flagh0=20 flagi0=136314884 flagj0=4224 flagk0=268500992 flagl0=0 flagm0=0 tflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=1 maxddinterface0=7 ================================================ FILE: build/exports/Theme Hospital.dxw ================================================ [target] title0=Theme Hospital path0=D:\Games\Theme Hospital\HOSPITAL_win.EXE launchpath0= module0= opengllib0= ver0=0 coord0=0 flag0=134283780 flagg0=1207959552 flagh0=20 flagi0=138412036 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 notes0= flagj0=128 ================================================ FILE: build/exports/Theme Park World.dxw ================================================ [target] title0=Theme Park World path0=D:\Games\Theme Park World\tp.exe launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=681590839 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=0 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Theocracy.dxw ================================================ [target] title0=Theocracy path0=D:\Games\Theocracy\Theocracy\theocracy-0.6.85.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=1 monitorid0=-1 coord0=0 flag0=681574438 flagg0=1207959552 flagh0=20 flagi0=138936320 flagj0=128 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Theseus.dxw ================================================ [target] title0=Theseus path0=D:\Games\theseus\Theseus.exe module0= opengllib0= ver0=8 coord0=0 flag0=134217730 flagg0=1207959552 flagh0=20 flagi0=0 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 ================================================ FILE: build/exports/Thief the Dark Project GOLD (GOG).dxw ================================================ [target] title0=Thief the Dark Project GOLD (GOG) path0=D:\Games\Thief Gold (GOG)\THIEF.EXE module0= opengllib0= ver0=0 coord0=0 flag0=2 flagg0=1207959568 flagh0=20 flagi0=4194308 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 launchpath0= notes0= flagj0=128 ================================================ FILE: build/exports/Thief the Dark Project GOLD.dxw ================================================ [target] title0=Thief the Dark Project GOLD path0=D:\Games\Thief Gold\THIEF.EXE module0= opengllib0= ver0=7 coord0=0 flag0=18 flagg0=1514143760 flagh0=131612 flagi0=4194308 tflag0=9 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=1 maxres0=-1 launchpath0= notes0= flagj0=128 ================================================ FILE: build/exports/Thorgal.dxw ================================================ [target] title0=Thorgal path0=D:\Games\Thorgal\THORGAL.exe launchpath0= module0= opengllib0= ver0=0 coord0=0 flag0=136314915 flagg0=1242038528 flagh0=65552 flagi0=136314885 flagj0=128 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 notes0= flagk0=2048 swapeffect0=0 ================================================ FILE: build/exports/TieFighter 95.dxw ================================================ [target] title0=TieFighter 95 path0=D:\Games\TIE95\TIE95.EXE launchpath0= module0= opengllib0= notes0=The game can be played also with no joystick using the DxWnd virtual one.\nIf you have a real joystick, the "Use DLL injection" flag is not necessary.\nUse "Unlock Z order" to avoid losing control of the window. registry0= ver0=1 coord0=0 flag0=681574514 flagg0=1744830464 flagh0=20 flagi0=138412036 flagj0=1073746048 flagk0=136642560 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=800 maxy0=600 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Tiger Woods PGA TOUR 08 Demo.dxw ================================================ [target] title0=Tiger Woods PGA TOUR 08 Demo path0=D:\Games\Tiger Woods PGA TOUR 08 Demo\bin\TW2008Demo.exe launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=134217762 flagg0=1476395008 flagh0=65556 flagi0=138412036 flagj0=4224 tflag0=6403 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Titanic.dxw ================================================ [target] title0=Titanic path0=F:\Games\Titanic\TI.noshim.EXE startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 monitorid0=-1 coord0=0 flag0=-1474297814 flagg0=1745879072 flagh0=540692 flagi0=138412036 flagj0=4224 flagk0=67584 flagl0=269484032 flagm0=9216 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 scanline0=0 initresw0=800 initresh0=600 ================================================ FILE: build/exports/Tlon - a misty story.dxw ================================================ [target] title0=Tlon - a misty story path0=D:\Games\Tlon\Tlon.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=681574434 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=67113088 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Tomb Raider - Anniversary Demo.dxw ================================================ [target] title0=Tomb Raider - Anniversary Demo path0=D:\Games\Tomb Raider - Anniversary Demo\tra.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=134217732 flagj0=4232 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 ================================================ FILE: build/exports/Tomb Raider - Underworld.dxw ================================================ [target] title0=Tomb Raider - Underworld path0=D:\Games\Tomb Raider - Underworld\tru.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=-1468006366 flagg0=1207959552 flagh0=65556 flagi0=205520900 flagj0=0 flagk0=0 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=800 maxy0=600 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Tomb Raider III (HW acceleration).dxw ================================================ [target] title0=Tomb Raider III (HW acceleration) path0=D:\Games\Tomb Raider III\tomb3.exe module0= opengllib0= ver0=0 coord0=0 flag0=134217762 flagg0=1241513984 flagh0=25165844 flagi0=4194304 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 startfolder0= launchpath0= notes0= registry0= monitorid0=0 flagj0=128 flagk0=65536 flagl0=0 flagm0=0 dflag0=0 winver0=0 maxres0=0 swapeffect0=0 maxddinterface0=7 slowratio0=1 scanline0=1 initresw0=0 initresh0=0 ; remember to set HW accelerated mode and turn ZBUFFER option off in game setup panel ================================================ FILE: build/exports/Tomb Raider III (SW emulation).dxw ================================================ [target] title0=Tomb Raider III (SW emulation) path0=D:\Games\Tomb Raider III\tomb3.exe module0= opengllib0= ver0=0 coord0=0 flag0=134217762 flagg0=1241513984 flagh0=20 flagi0=4194304 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 launchpath0= notes0= flagj0=0 winver0=0 maxres0=0 ; remember to set SW emulated mode in game setup panel ================================================ FILE: build/exports/Tomb Raider III.dxw ================================================ [target] title0=Tomb Raider III path0=D:\Games\Tomb Raider III\tomb3.exe launchpath0= module0= opengllib0= notes0=Working either with or without flip emulation\nDeinterlace movies increases the movie quality ver0=0 coord0=0 flag0=134217762 flagg0=1241513984 flagh0=20 flagi0=4194304 flagj0=268435584 flagk0=0 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=0 swapeffect0=0 startfolder0= registry0= monitorid0=0 flagl0=0 flagm0=0 dflag0=0 maxddinterface0=7 slowratio0=1 scanline0=1 initresw0=0 initresh0=0 ================================================ FILE: build/exports/Tomb Raider Underworld.dxw ================================================ [target] title0=Tomb Raider - Underworld path0=D:\Games\Tomb Raider - Underworld\tru.exe launchpath0= module0= opengllib0= ver0=0 coord0=1 flag0=142606848 flagg0=1207959808 flagh0=20 flagi0=138412036 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=800 maxy0=600 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Tone Rebellion Leviathan.dxw ================================================ [target] title0=Tone Rebellion Leviathan path0=D:\Games\Tone Rebellion Leviatahn\FLOAT.EXE launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=-2011168734 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 startfolder0= monitorid0=0 flagn0=0 flago0=0 scanline0=1 initresw0=0 initresh0=0 [stamp] version=2.04.21.a6 time=Wed Mar 22 10:13:22 2017 ================================================ FILE: build/exports/Tonic Trouble.dxw ================================================ [target] title0=Tonic Trouble path0=F:\Games\Tonic Trouble\TonicTrouble.exe startfolder0= launchpath0=F:\Games\Tonic Trouble\TonicTrouble.exe -cdrom:I module0= opengllib0= notes0= registry0= ver0=0 monitorid0=-1 coord0=0 flag0=673185830 flagg0=1207959552 flagh0=65556 flagi0=138412068 flagj0=4224 flagk0=65536 flagl0=536870912 flagm0=131108 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=0 swapeffect0=0 maxddinterface0=7 slowratio0=2 scanline0=0 initresw0=800 initresh0=600 ================================================ FILE: build/exports/Tony Hawk's Pro Skater 3.dxw ================================================ [target] title0=Tony Hawk's Pro Skater 3 path0=F:\Games\Tony Hawk's Pro Skater 3\Skate3.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 monitorid0=-1 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=134217732 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 initresw0=800 initresh0=600 ================================================ FILE: build/exports/Total Annihilation Kingdoms.dxw ================================================ [target] title0=Total Annihilation Kingdoms path0=D:\Games\Total Annihilation Kingdoms\Kingdoms.exe module0= opengllib0= ver0=0 coord0=0 flag0=671105058 flagg0=1207959568 flagh0=16 flagi0=4194304 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 launchpath0= winver0=0 maxres0=0 notes0= flagj0=128 flagk0=0 swapeffect0=0 registry0=[HKEY_LOCAL_MACHINE\Software]\n[HKEY_LOCAL_MACHINE\Software\Cavedog Entertainment]\n[HKEY_LOCAL_MACHINE\Software\Cavedog Entertainment\Total Annihilation: Kingdoms]\n[HKEY_LOCAL_MACHINE\Software\Cavedog Entertainment\Total Annihilation: Kingdoms\1.00.000]\n\n[HKEY_CURRENT_USER\Software\Cavedog Entertainment]\n[HKEY_CURRENT_USER\Software\Cavedog Entertainment\Kingdoms]\n"InstallDirectX"=dword:00000001\n\n[HKEY_CURRENT_USER\Software\Cavedog Entertainment\Kingdoms\InterfaceOptions]\n"Language"="ENGLISH"\n\n[HKEY_CURRENT_USER\Software\Cavedog Entertainment\Cartographer]\n ================================================ FILE: build/exports/Total Annihilation.dxw ================================================ [target] title0=Total Annihilation path0=D:\Games\TOTA\totala.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=1 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=0 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Total Immersion Racing.dxw ================================================ [target] title0=Total Immersion Racing path0=D:\Games\TIR\game\Tir.exe module0= opengllib0= ver0=8 coord0=0 flag0=134217762 flagg0=1207959552 flagh0=20 flagi0=1028 tflag0=6147 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Total Soccer 2000 (3DFX).dxw ================================================ [target] title0=Total Soccer 2000 (3DFX) path0=D:\Games\Total Soccer 2000\soccer3dfx.exe module0= opengllib0= ver0=9 coord0=0 flag0=134234657 flagg0=1208025344 flagh0=20 flagi0=67596 tflag0=5121 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=2 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Total Soccer 2000 (DirectX).dxw ================================================ [target] title0=Total Soccer 2000 (DirectX) path0=D:\Games\Total Soccer 2000\SOCCERDX.EXE module0= opengllib0= ver0=1 coord0=0 flag0=134234274 flagg0=1207959808 flagh0=20 flagi0=4194308 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=2 winver0=0 maxres0=-1 launchpath0= notes0= flagj0=128 flagk0=0 swapeffect0=0 ================================================ FILE: build/exports/Totò Sapore e il magico sapore della pizza.dxw ================================================ [target] title0=Tot Sapore e il magico sapore della pizza path0=D:\Program Files (x86)\Tot Sapore\Artematica.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=134217732 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Toy Factory.dxw ================================================ [target] title0=Toy Factory path0=D:\Games\Toy Factory\ToyFactory.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 startfolder0= monitorid0=0 flagn0=0 flago0=0 scanline0=1 initresw0=0 initresh0=0 [stamp] version=2.04.21.a6 time=Wed Mar 22 09:51:41 2017 ================================================ FILE: build/exports/Trials2 - Second Edition.dxw ================================================ [target] title0=Trials2 - Second Edition path0=F:\Games\Trials2 - Second Edition\trials2.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=134217732 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/TrickStyle (D3D).dxw ================================================ [target] title0=TrickStyle (D3D) path0=D:\Games\TrickStyle\TS_D3D.exe launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=136331298 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=67113088 flagk0=0 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Tropico Paradise Island.dxw ================================================ [target] title0=Tropico Paradise Island path0=D:\Games\Tropico Paradise Island\Tropico.exe module0= opengllib0= ver0=0 coord0=0 flag0=134218272 flagg0=1207959552 flagh0=20 flagi0=4 tflag0=1024 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Tungusskiy Meteorit.dxw ================================================ [target] title0=Tungusskiy Meteorit path0=D:\Games\Tungusskiy Meteorit\Tungusskiy Meteorit.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=681574434 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Typing of the Dead, the.dxw ================================================ [target] title0=Typing of the Dead, the path0=D:\Games\Typing of the dead\Tod_e.exe launchpath0= module0= opengllib0= ver0=0 coord0=0 flag0=671088674 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 notes0= registry0= flagk0=65536 swapeffect0=0 ================================================ FILE: build/exports/Ultim@te Race Pro.dxw ================================================ [target] title0=Ultim@te Race Pro path0=D:\Games\Ultim@te Race Pro\ULTIM@TE RACE PRO.EXE launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=681574434 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4736 flagk0=327680 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Ultimate Soccer Manager 98.dxw ================================================ [target] title0=Ultimate Soccer Manager 98 path0=D:\Games\USM98\USM98.EXE launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=134217760 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=266368 tflag0=-2147477245 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Ultimate Spiderman.dxw ================================================ [target] title0=Ultimate Spiderman path0=F:\Games\Ultimate Spiderman\USM.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 monitorid0=-1 coord0=0 flag0=673202214 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=1073746048 flagk0=65536 flagl0=1048576 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 scanline0=0 initresw0=800 initresh0=600 ================================================ FILE: build/exports/Unreal Tournament.dxw ================================================ [target] title0=Unreal Tournament path0=D:\Games\Unreal Tournament\System\UnrealTournament.exe module0= opengllib0= ver0=0 coord0=0 flag0=-2013265886 flagg0=1209073680 flagh0=20 flagi0=4196356 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=1200 sizy0=900 maxfps0=0 initts0=0 launchpath0= notes0= flagj0=128 winver0=0 maxres0=0 registry0= flagk0=65536 swapeffect0=0 ================================================ FILE: build/exports/Unreal.dxw ================================================ [target] title0=Unreal path0=D:\Games\Unreal\System\Unreal.exe launchpath0= module0= opengllib0= ver0=0 coord0=0 flag0=134218272 flagg0=1207959552 flagh0=20 flagi0=138412036 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=4 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Urban Chaos.dxw ================================================ [target] title0=Urban Chaos path0=D:\Games\Urban Chaos\fallen.exe launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=0 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/V-Rally 2 Expert Edition.dxw ================================================ [target] title0=V-Rally 2 Expert Edition path0=F:\Games\V-Rally 2 Expert Edition\V-Rally2 Expert Edition\Vrally2.exe startfolder0= launchpath0= module0= opengllib0= notes0=Note: the game detects Alt-tabs and terminates. \nThen the "do not notify on task switch" is mandatory, but also minimizing is not supported. registry0= ver0=0 monitorid0=-1 coord0=0 flag0=136314931 flagg0=1207959808 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=1048576 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 initresw0=800 initresh0=600 ================================================ FILE: build/exports/V-Rally 3.dxw ================================================ [target] title0=V-Rally 3 path0=F:\Games\V-Rally 3\Vrally3.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 monitorid0=-1 coord0=0 flag0=673185826 flagg0=1207959552 flagh0=65556 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=0 swapeffect0=0 maxddinterface0=7 slowratio0=2 scanline0=0 initresw0=800 initresh0=600 ================================================ FILE: build/exports/V2000.dxw ================================================ [target] title0=V2000 path0=D:\Games\V2000\V2000.exe launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=671088690 flagg0=1207959680 flagh0=65556 flagi0=-2011168764 flagj0=134221952 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=800 maxy0=600 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 registry0= flagk0=65536 swapeffect0=0 ================================================ FILE: build/exports/Vangers.dxw ================================================ [target] title0=Vangers path0=D:\Games\Vangers\road.exe module0= opengllib0= ver0=1 coord0=0 flag0=136315426 flagg0=1207959552 flagh0=8212 flagi0=4726784 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 launchpath0= notes0= registry0= flagj0=0 flagk0=0 swapeffect0=0 ================================================ FILE: build/exports/Viper Racing.dxw ================================================ [target] title0=Viper Racing path0=D:\Games\Viper Racing\SIERRA\Viper Racing\Data\race.bin launchpath0=D:\Games\Viper Racing\SIERRA\Viper Racing\Viper Racing.exe module0= opengllib0= notes0= ver0=1 coord0=0 flag0=134217762 flagg0=1207959552 flagh0=20 flagi0=-2009071612 flagj0=4224 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Virtua Cop 2.dxw ================================================ [target] title0=Virtua Cop 2 path0=D:\Games\VCop2\VCop2.exe launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=134217762 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 registry0= flagk0=262144 swapeffect0=0 ================================================ FILE: build/exports/Virtua Cop.dxw ================================================ [target] title0=Virtua Cop path0=D:\Games\Virtua Cop\VCOP.EXE launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=134234150 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 registry0= flagk0=262144 swapeffect0=0 ================================================ FILE: build/exports/Virtua Fighter 2.dxw ================================================ [target] title0=Virtua Fighter 2 path0=D:\Games\VF2\VF2.EXE launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=671088674 flagg0=1744830592 flagh0=20 flagi0=138412038 flagj0=4224 tflag0=536870912 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Virtua Fighter PC.dxw ================================================ [target] title0=Virtua Fighter PC path0=D:\Games\Virtua Fighter\VFPC.EXE module0= opengllib0= ver0=0 coord0=0 flag0=134218272 flagg0=134217744 flagh0=20 flagi0=4 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Virtua Fighter.dxw ================================================ [target] title0=Virtua Fighter path0=D:\Games\Virtua Fighter\VFPC.EXE launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=134217732 flagj0=4224 flagk0=327680 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Vital Device.dxw ================================================ [target] title0=Vital Device path0=D:\Games\Vital Device\vitaldevice.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 monitorid0=-1 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=134222976 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Wacky Races.dxw ================================================ [target] title0=Wacky Races path0=D:\Games\Wacky Races\WPC.EXE launchpath0= module0= opengllib0= ver0=0 coord0=0 flag0=134217760 flagg0=134217728 flagh0=20 flagi0=4194308 tflag0=64 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/WarWind.dxw ================================================ [target] title0=WarWind path0=D:\Games\WarWind\WW.EXE module0= opengllib0= ver0=0 coord0=0 flag0=134234146 flagg0=1207959552 flagh0=20 flagi0=4194308 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 launchpath0= notes0= flagj0=128 flagk0=0 swapeffect0=0 ================================================ FILE: build/exports/Warcraft 2 Battlenet Ed.dxw ================================================ [target] title0=Warcraft 2 Battlenet Ed path0=D:\Games\Warcraft 2 Battlenet Ed\Warcraft II BNE.exe module0= opengllib0= ver0=0 coord0=0 flag0=134217890 flagg0=1207959552 flagh0=20 flagi0=138412036 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=0 launchpath0= notes0= flagj0=128 registry0= flagk0=0 swapeffect0=0 ================================================ FILE: build/exports/Warcraft Adventures - Lord Of The Clans.dxw ================================================ [target] title0=Warcraft Adventures - Lord Of The Clans path0=F:\Games\Warcraft Adventures - Lord Of The Clans\PlayWin.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 monitorid0=-1 coord0=0 flag0=673185826 flagg0=1207959552 flagh0=20 flagi0=134217732 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=0 swapeffect0=0 maxddinterface0=7 slowratio0=2 scanline0=0 initresw0=800 initresh0=600 ================================================ FILE: build/exports/Wargames.dxw ================================================ [target] title0=Wargames (demo) path0=D:\Games\Wargames\wargames.exe module0= opengllib0= ver0=0 coord0=0 flag0=268435618 flagg0=1207959552 flagh0=20 flagi0=0 tflag0=3 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 ================================================ FILE: build/exports/Wargasm.dxw ================================================ [target] title0=Wargasm path0=D:\Games\Wargasm\tank.exe launchpath0= module0= opengllib0= notes0=Must set HOVAPPDATA=. environment variable ver0=0 coord0=0 flag0=681574434 flagg0=1207959552 flagh0=1044 flagi0=1212153860 flagj0=4224 flagk0=0 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 registry0=[HKEY_LOCAL_MACHINE\SOFTWARE\Digital Image Design]\n[HKEY_LOCAL_MACHINE\SOFTWARE\Digital Image Design\Default Config]\n"Configurable"=dword:00000000\n"Bilinear Filter"=dword:00000001\n"Fog"=dword:00000001\n"Windowed"=dword:00000000\n"Preferred Width"=dword:00000280\n"Preferred Height"=dword:000001e0\n\n ================================================ FILE: build/exports/Warhammer - Shadow of the Horned Rat (x2).dxw ================================================ [target] title0=Warhammer - Shadow of the Horned Rat (x2) path0=D:\Games\Warhammer - Shadow of the Horned Rat\WHSHR.EXE startfolder0= launchpath0= module0=GAMEF.DLL opengllib0= notes0=Game setup:\n\n1) unzip packed game RIP\n2) copy RLDDF.DLL from SYSTEM32 subfolder to game dir\n3) copy DxWnd wing32.dll to game dir\n4) turn digital audio OFF or add sound WAV file (it is hardcoded in virtual registry!)\nor copy wav files in \Remote\Binary\GLUE\SPEECH folder\n registry0=\n[HKEY_LOCAL_MACHINE\SOFTWARE]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Mindscape]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Mindscape\WarHammerFB]\n;"Options"="3,1,1,2,1,1,0,0" // High Quality, digital audio off\n"Options"="3,1,1,2,1,1,1,1" // High Quality, digital audio on\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Mindscape\WarHammerFB\InstallDir]\n@="\{path}"\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Mindscape\WarHammerFB\InstallOption]\n@="Maximum"\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Mindscape\WarHammerFB\Language]\n@="ENG"\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Mindscape\WarHammerFB\LocalDir]\n@="\{path}\\FILE"\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Mindscape\WarHammerFB\RemoteDir]\n@="\{path}\\REMOTE"\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Mindscape\WarHammerFB\SaveDir]\n@="\{path}\\TEMP"\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Mindscape\WarHammerFB\UpdateDir]\n@="C:\\GAMES\\WARFB\\Update"\n\n[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\SharedDLLs]\n"C:\\WINDOWS\\SYSTEM32\\WING.DLL"=hex:01,00,00,00\n"C:\\WINDOWS\\SYSTEM32\\WING32.DLL"=hex:01,00,00,00\n"C:\\WINDOWS\\SYSTEM32\\WINGDE.DLL"=hex:01,00,00,00\n"C:\\WINDOWS\\SYSTEM32\\WINGDIB.DRV"=hex:01,00,00,00\n"C:\\WINDOWS\\SYSTEM32\\WINGPAL.WND"=hex:01,00,00,00\n"C:\\WINDOWS\\SYSTEM32\\RLDDF.DLL"=hex:01,00,00,00\n"C:\\WINDOWS\\SYSTEM32\\RLDDI.DLL"=hex:01,00,00,00\n"C:\\WINDOWS\\SYSTEM32\\RL\\SOFTF.DLL"=hex:01,00,00,00\n"C:\\WINDOWS\\SYSTEM32\\RL\\SOFTI.DLL"=hex:01,00,00,00\n"C:\\WINDOWS\\SYSTEM32\\RL\\SOFT\\RLFRG16M.DLL"=hex:01,00,00,00\n"C:\\WINDOWS\\SYSTEM32\\RL\\SOFT\\RLFRG256.DLL"=hex:01,00,00,00\n"C:\\WINDOWS\\SYSTEM32\\RL\\SOFT\\RLFRG64K.DLL"=hex:01,00,00,00\n"C:\\WINDOWS\\SYSTEM32\\RL\\SOFT\\RLFRM16M.DLL"=hex:01,00,00,00\n"C:\\WINDOWS\\SYSTEM32\\RL\\SOFT\\RLFRM256.DLL"=hex:01,00,00,00\n"C:\\WINDOWS\\SYSTEM32\\RL\\SOFT\\RLFRM64K.DLL"=hex:01,00,00,00\n"C:\\WINDOWS\\SYSTEM32\\RL\\SOFT\\RLIRG16M.DLL"=hex:01,00,00,00\n"C:\\WINDOWS\\SYSTEM32\\RL\\SOFT\\RLIRG256.DLL"=hex:01,00,00,00\n"C:\\WINDOWS\\SYSTEM32\\RL\\SOFT\\RLIRG64K.DLL"=hex:01,00,00,00\n"C:\\WINDOWS\\SYSTEM32\\RL\\SOFT\\RLIRM16M.DLL"=hex:01,00,00,00\n"C:\\WINDOWS\\SYSTEM32\\RL\\SOFT\\RLIRM256.DLL"=hex:01,00,00,00\n"C:\\WINDOWS\\SYSTEM32\\RL\\SOFT\\RLIRM64K.DLL"=hex:01,00,00,00 ver0=0 monitorid0=-1 coord0=1 flag0=-1473609686 flagg0=1209270312 flagh0=2163732 flagi0=1212153860 flagj0=5248 flagk0=2195456 flagl0=67141648 flagm0=2105344 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=1280 sizy0=960 maxfps0=0 initts0=0 winver0=0 maxres0=0 swapeffect0=0 maxddinterface0=7 slowratio0=2 scanline0=0 initresw0=800 initresh0=600 ================================================ FILE: build/exports/Warhammer - Shadow of the Horned Rat.dxw ================================================ [target] title0=Warhammer - Shadow of the Horned Rat path0=F:\Games\Warhammer - Shadow of the Horned Rat\WHSHR.EXE startfolder0= launchpath0= module0=GAMEF.DLL opengllib0= notes0=Game setup:\n\n1) unzip packed game RIP\n2) copy RLDDF.DLL from SYSTEM32 subfolder to game dir\n3) copy DxWnd wing32.dll to game dir\n4) turn digital audio OFF or add sound WAV file (it is hardcoded in virtual registry!)\nor copy wav files in \Remote\Binary\GLUE\SPEECH folder\n registry0=\n[HKEY_LOCAL_MACHINE\SOFTWARE]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Mindscape]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Mindscape\WarHammerFB]\n;"Options"="3,1,1,2,1,1,0,0" // High Quality, digital audio off\n"Options"="3,1,1,2,1,1,1,1" // High Quality, digital audio on\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Mindscape\WarHammerFB\InstallDir]\n@="\{path}"\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Mindscape\WarHammerFB\InstallOption]\n@="Maximum"\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Mindscape\WarHammerFB\Language]\n@="ENG"\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Mindscape\WarHammerFB\LocalDir]\n@="\{path}\\FILE"\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Mindscape\WarHammerFB\RemoteDir]\n@="\{path}\\REMOTE"\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Mindscape\WarHammerFB\SaveDir]\n@="\{path}\\TEMP"\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Mindscape\WarHammerFB\UpdateDir]\n@="C:\\GAMES\\WARFB\\Update"\n\n[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\SharedDLLs]\n"C:\\WINDOWS\\SYSTEM32\\WING.DLL"=hex:01,00,00,00\n"C:\\WINDOWS\\SYSTEM32\\WING32.DLL"=hex:01,00,00,00\n"C:\\WINDOWS\\SYSTEM32\\WINGDE.DLL"=hex:01,00,00,00\n"C:\\WINDOWS\\SYSTEM32\\WINGDIB.DRV"=hex:01,00,00,00\n"C:\\WINDOWS\\SYSTEM32\\WINGPAL.WND"=hex:01,00,00,00\n"C:\\WINDOWS\\SYSTEM32\\RLDDF.DLL"=hex:01,00,00,00\n"C:\\WINDOWS\\SYSTEM32\\RLDDI.DLL"=hex:01,00,00,00\n"C:\\WINDOWS\\SYSTEM32\\RL\\SOFTF.DLL"=hex:01,00,00,00\n"C:\\WINDOWS\\SYSTEM32\\RL\\SOFTI.DLL"=hex:01,00,00,00\n"C:\\WINDOWS\\SYSTEM32\\RL\\SOFT\\RLFRG16M.DLL"=hex:01,00,00,00\n"C:\\WINDOWS\\SYSTEM32\\RL\\SOFT\\RLFRG256.DLL"=hex:01,00,00,00\n"C:\\WINDOWS\\SYSTEM32\\RL\\SOFT\\RLFRG64K.DLL"=hex:01,00,00,00\n"C:\\WINDOWS\\SYSTEM32\\RL\\SOFT\\RLFRM16M.DLL"=hex:01,00,00,00\n"C:\\WINDOWS\\SYSTEM32\\RL\\SOFT\\RLFRM256.DLL"=hex:01,00,00,00\n"C:\\WINDOWS\\SYSTEM32\\RL\\SOFT\\RLFRM64K.DLL"=hex:01,00,00,00\n"C:\\WINDOWS\\SYSTEM32\\RL\\SOFT\\RLIRG16M.DLL"=hex:01,00,00,00\n"C:\\WINDOWS\\SYSTEM32\\RL\\SOFT\\RLIRG256.DLL"=hex:01,00,00,00\n"C:\\WINDOWS\\SYSTEM32\\RL\\SOFT\\RLIRG64K.DLL"=hex:01,00,00,00\n"C:\\WINDOWS\\SYSTEM32\\RL\\SOFT\\RLIRM16M.DLL"=hex:01,00,00,00\n"C:\\WINDOWS\\SYSTEM32\\RL\\SOFT\\RLIRM256.DLL"=hex:01,00,00,00\n"C:\\WINDOWS\\SYSTEM32\\RL\\SOFT\\RLIRM64K.DLL"=hex:01,00,00,00 ver0=0 monitorid0=-1 coord0=0 flag0=-1473609686 flagg0=1209270312 flagh0=2163732 flagi0=1212153860 flagj0=4224 flagk0=2195456 flagl0=67141648 flagm0=2105344 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=0 swapeffect0=0 maxddinterface0=7 slowratio0=2 scanline0=0 initresw0=800 initresh0=600 ================================================ FILE: build/exports/Warhammer 40K Chaos Gate.dxw ================================================ [target] title0=Warhammer 40K Chaos Gate path0=D:\Games\Warhammer 40K Chaos Gate\game\WH40K.exe module0= opengllib0= ver0=0 coord0=0 flag0=679494178 flagg0=1207959552 flagh0=20 flagi0=4194308 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 launchpath0= notes0= registry0= flagj0=128 flagk0=65536 flagl0=0 flagm0=0 swapeffect0=0 maxddinterface0=7 ================================================ FILE: build/exports/Warhammer 40K Final Liberation.dxw ================================================ [target] title0=Warhammer 40K Final Liberation path0=D:\Games\Warhammer 40K Final Liberation\EPIC40K.EXE module0= opengllib0= ver0=0 coord0=0 flag0=134217762 flagg0=1209008144 flagh0=65556 flagi0=4194308 tflag0=6147 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=640 sizy0=480 maxfps0=0 initts0=0 winver0=0 maxres0=-1 launchpath0= notes0= flagj0=128 flagk0=0 swapeffect0=0 ================================================ FILE: build/exports/Warhammer 40K Rites of War.dxw ================================================ [target] title0=Warhammer 40K Rites of War path0=F:\Games\Warhammer 40K Rites Of War\RoW.exe launchpath0= module0= opengllib0= notes0=Courtesy of Riitaoja:\n\nAfter installing the game copy the "Map" -folder from the CD to the \nRites of War\ directory on your hard drive.\n\nThis will fix the issue where the game crashes when starting a campaign.\n\nSetting Time limit to 1mSec together with "Updates bigger than 1/4 screen size" \nslows down the battle scrolling without affecting the mouse or animations speed,\nnor reducing the FPS rate.\nVery adviseable. registry0= ver0=0 coord0=0 flag0=136335394 flagg0=1207963776 flagh0=20 flagi0=138412036 flagj0=4480 flagk0=65536 flagl0=1073741824 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=1 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 startfolder0= monitorid0=-1 initresw0=800 initresh0=600 ================================================ FILE: build/exports/Warhammer Dark Omen.dxw ================================================ [target] title0=Warhammer Dark Omen path0=D:\Dark Omen\PRG_ENG\EngRel.exe startfolder0= launchpath0= module0= opengllib0= notes0=Courtesy of Riitaoja:\n\nDark Omen needs a d3drm.dll file to run:\n- This file can be located in the CD's \DIRECTX -folder.\n- Copy the file into the "Dark Omen\PRG_ENG" directory.\n\nSound issues:\nDark Omen can sometimes produce a burst of white noise from the speakers.\nUsing the Timing option "CPU slow down" may fix this issue. registry0=[HKEY_LOCAL_MACHINE\SOFTWARE\Electronic Arts\Dark Omen\1.0\Options\Options]\n"Selected"="4"\n"HardwareSelected"="252"\n"SoftwareSelected"="228"\n"MMXSelected"="256"\n"ToolTips"="1"\n"MusicVolume"="408"\n"SFXVolume"="816"\n"SoftwareSoundQuality"="2"\n"SoftwareParticleQuality"="2"\n"MMXSoundQuality"="2"\n"MMXParticaleQuality"="1"\n"HardwareSoundQuality"="2"\n"HardwareParticleQuality"="2"\n"InformationNum"="11"\n ver0=0 monitorid0=-1 coord0=0 flag0=136314920 flagg0=1207959552 flagh0=1044 flagi0=1212153860 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 initresw0=800 initresh0=600 ================================================ FILE: build/exports/Warlords 3.dxw ================================================ [target] title0=Warlords 3 path0=D:\Games\WARLORDS3\Darklord.exe module0= opengllib0= ver0=0 coord0=0 flag0=-2147483614 flagg0=1477443616 flagh0=532 flagi0=4194304 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=0 sizy0=0 maxfps0=0 initts0=0 launchpath0= notes0= registry0= flagj0=67108992 flagk0=65536 winver0=0 maxres0=0 swapeffect0=0 ================================================ FILE: build/exports/Warlords Battlecry 2.dxw ================================================ [target] title0=Warlords Battlecry 2 path0=D:\Games\Warlords Battlecry 2\Battlecry II.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 monitorid0=-1 coord0=0 flag0=673185826 flagg0=1207959552 flagh0=20 flagi0=134217732 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=0 swapeffect0=0 maxddinterface0=7 slowratio0=2 scanline0=0 initresw0=800 initresh0=600 ================================================ FILE: build/exports/Warlords Battlecry 3 (GOG).dxw ================================================ [target] title0=Warlords Battlecry 3 (GOG) path0=D:\Games\Warlords Battlecry 3 (GOG)\Battlecry III.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=134217732 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Warlords Battlecry III.dxw ================================================ [target] title0=Warlords Battlecry III path0=D:\Games\Warlords Battlecry III\Battlecry III.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=3 flag0=136314914 flagg0=1207959568 flagh0=20 flagi0=-2009071612 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 ================================================ FILE: build/exports/Warpath.dxw ================================================ [target] title0=Warpath path0=D:\Games\Warpath\System\Warpath.exe module0= opengllib0= ver0=0 coord0=0 flag0=134218272 flagg0=1207959552 flagh0=20 flagi0=4 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Warrior Kings.dxw ================================================ [target] title0=Warrior Kings path0=D:\Games\Warrior Kings\warrior_kings.exe module0= opengllib0= ver0=0 coord0=0 flag0=671236130 flagg0=1207959569 flagh0=65556 flagi0=4 tflag0=64 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Wars & Warriors Joan of Arc.dxw ================================================ [target] title0=Wars & Warriors: Joan of Arc path0=D:\Games\Wars & Warriors Johan of Arc\joan.exe launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=134217746 flagg0=1207959552 flagh0=20 flagi0=205520900 flagj0=4224 flagk0=0 tflag0=-2147477501 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=800 maxy0=600 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Warwind 2.dxw ================================================ [target] title0=Warwind 2 path0=D:\Games\Warwind 2\WARWIND2.EXE module0= opengllib0= ver0=0 coord0=0 flag0=134234146 flagg0=1207959552 flagh0=20 flagi0=4194308 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 launchpath0= notes0= flagj0=128 flagk0=0 swapeffect0=0 ================================================ FILE: build/exports/Weird War.dxw ================================================ [target] title0=Weird War path0=D:\Games\Weird War\WeirdWar.exe launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=136331298 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=0 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/Wetrix.dxw ================================================ [target] title0=Wetrix path0=D:\Games\Wetrix\wetrix.exe startfolder0= launchpath0= module0= opengllib0= notes0=DxWnd useful only when setting the game fullscreen mode registry0= ver0=0 coord0=0 flag0=681574434 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Whiteout.dxw ================================================ [target] title0=Whiteout path0=D:\Games\Whiteout\Whiteout.exe module0= opengllib0= ver0=7 coord0=0 flag0=402653218 flagg0=1207959552 flagh0=20 flagi0=4194304 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 launchpath0= notes0= registry0= flagj0=0 flagk0=0 flagl0=0 flagm0=0 dflag0=0 winver0=0 maxres0=0 swapeffect0=0 maxddinterface0=7 slowratio0=1 ================================================ FILE: build/exports/Wildfire.dxw ================================================ [target] title0=Wildfire path0=D:\Games\Wildfire\Wildfire.exe module0= opengllib0= ver0=0 coord0=0 flag0=-1476392958 flagg0=1207959552 flagh0=20 flagi0=4 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 ================================================ FILE: build/exports/Wind Fantasy SP.dxw ================================================ [target] title0=Wind Fantasy SP path0=D:\Games\Wind Fantasy SP\WF_SP.exe launchpath0= module0= opengllib0= ver0=0 coord0=0 flag0=134218274 flagg0=1207959552 flagh0=20 flagi0=4194308 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 flagj0=4224 notes0= registry0= flagk0=0 flagl0=0 flagm0=0 swapeffect0=0 maxddinterface0=7 ================================================ FILE: build/exports/Wizardry 8 (3DfX).dxw ================================================ [target] title0=Wizardry 8 (3DfX) path0=D:\Games\Wizardry 8\Wiz8.exe launchpath0= module0= opengllib0= ver0=9 coord0=0 flag0=134217730 flagg0=1207959552 flagh0=20 flagi0=205520900 flagj0=4224 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Wizardry Chronicles V0984b - English.exe.dxw ================================================ [target] title0=Wizardry Chronicles V0984b - English.exe path0=D:\Games\Wizardry Chronicle\Wizardry Chronicles V0984b - English.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 monitorid0=-1 coord0=0 flag0=673185826 flagg0=1207959552 flagh0=20 flagi0=205520900 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=0 swapeffect0=0 maxddinterface0=7 slowratio0=2 scanline0=0 initresw0=800 initresh0=600 ================================================ FILE: build/exports/Wizardry Chronicles.dxw ================================================ [target] title0=Wizardry Chronicles.exe path0=F:\Games\Wizardry Chronicle\Wizardry Chronicles.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 monitorid0=-1 coord0=0 flag0=673185826 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=0 swapeffect0=0 maxddinterface0=7 slowratio0=2 scanline0=0 initresw0=800 initresh0=600 ================================================ FILE: build/exports/World Racing (Demo) MX.dxw ================================================ [target] title0=World Racing (Demo) MX path0=D:\Games\World Racing Demo\mbwr_pc_MX.exe module0= opengllib0= ver0=0 coord0=0 flag0=134234146 flagg0=1207959552 flagh0=20 flagi0=4 tflag0=64 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=2 winver0=0 maxres0=-1 ================================================ FILE: build/exports/World Racing (Demo).dxw ================================================ [target] title0=World Racing (Demo) path0=D:\Games\World Racing Demo\mbwr_pc.exe module0= opengllib0= ver0=0 coord0=0 flag0=134234146 flagg0=1207959552 flagh0=20 flagi0=4 tflag0=64 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Worms 2 (GOG).dxw ================================================ [target] title0=Worms 2 (GOG) path0=D:\Games\Worms 2\worms2.exe launchpath0= module0= opengllib0= ver0=0 coord0=0 flag0=134218272 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=128 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Worms 2.dxw ================================================ [target] title0=Worms 2 path0=D:\Games\worms2\worms2.exe launchpath0= module0= opengllib0= notes0=Working pretty well on TWILIGHT game rip.\nUntested on CD version.\nIt shows problems with the background: \nin emulated mode the colors are limited, in GDI mode it's all black.\n ver0=0 coord0=0 flag0=134234146 flagg0=1207959552 flagh0=20 flagi0=138412038 flagj0=5248 tflag0=536870912 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Worms Pinball.dxw ================================================ [target] title0=Worms Pinball path0=D:\Games\Worms Pinball\WPIB.exe module0= opengllib0= ver0=1 coord0=0 flag0=134217762 flagg0=1207959568 flagh0=20 flagi0=4 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 ================================================ FILE: build/exports/Wrestling MPire Remix.dxw ================================================ [target] title0=Wrestling MPire Remix path0=F:\Games\Wrestling MPire Remix (Career)\Wrestling MPire Remix (Fullscreen).exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 monitorid0=-1 coord0=0 flag0=673185826 flagg0=1207959552 flagh0=65556 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=268435456 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=0 swapeffect0=0 maxddinterface0=7 slowratio0=2 scanline0=0 initresw0=800 initresh0=600 ================================================ FILE: build/exports/X - Beyond the Frontier (dx6).dxw ================================================ [target] title0=X - Beyond the Frontier (DX6) path0=D:\Games\X - Beyond the Frontier\Xdx6.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=98304 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/X - Beyond the Frontier.dxw ================================================ [target] title0=X - Beyond the Frontier path0=D:\Games\X - Beyond the Frontier\X.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=98304 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/X-COM Interceptor.dxw ================================================ [target] title0=X-COM Interceptor path0=D:\Games\X-COM Interceptor\Interceptor.exe launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=134217762 flagg0=1207959552 flagh0=20 flagi0=138543110 flagj0=4224 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 registry0= flagk0=65536 swapeffect0=0 ================================================ FILE: build/exports/X-Files, the.dxw ================================================ [target] title0=X-Files, the path0=D:\Games\X-Files\XFiles.exe launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=-2011168733 flagg0=1209008128 flagh0=16 flagi0=138412036 flagj0=67113088 flagk0=65536 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 ================================================ FILE: build/exports/XENIC.dxw ================================================ [target] title0=XENIC path0=D:\Games\Xenic\XENIC.EXE startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=134217732 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/XIII.dxw ================================================ [target] title0=XIII path0=D:\Games\Ubisoft\XIII\system\XIII.exe launchpath0= module0= opengllib0= ver0=0 coord0=0 flag0=671105540 flagg0=1207959552 flagh0=20 flagi0=138412036 tflag0=6146 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Xwing vs. Tie-Fighter demo.dxw ================================================ [target] title0=Xwing vs. Tie-Fighter demo path0=D:\Games\XwingTie Demo\z_xvt__.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 monitorid0=-1 coord0=0 flag0=673185846 flagg0=1207959552 flagh0=8212 flagi0=138412036 flagj0=1073746048 flagk0=134283264 flagl0=512 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=0 swapeffect0=0 maxddinterface0=7 slowratio0=2 scanline0=0 initresw0=800 initresh0=600 ================================================ FILE: build/exports/Yu No (english patch).dxw ================================================ [target] title0=Yu No (english patch) path0=D:\Games\Yu no\Classics\YUNO\AI5ENG.EXE launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=681574432 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=8392832 flagk0=67436544 flagl0=4 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/ZPC Zero Population Count.dxw ================================================ [target] title0=ZPC Zero Population Count path0=D:\Games\ZPC\ZPC.EXE module0= opengllib0= ver0=0 coord0=0 flag0=134217762 flagg0=1207959552 flagh0=20 flagi0=4194308 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 launchpath0= notes0= flagj0=128 flagk0=65536 winver0=0 maxres0=0 swapeffect0=0 registry0= ================================================ FILE: build/exports/Zanzarah The Hidden Portal.dxw ================================================ [target] title0=Zanzarah The Hidden Portal path0=D:\Games\Zanzarah The Hidden Portal\System\zanthp.exe launchpath0=D:\Games\Zanzarah The Hidden Portal\System\Zanzarah.exe module0= opengllib0= ver0=0 coord0=0 flag0=134217760 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=0 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Zenfar.dxw ================================================ [target] title0=Zenfar path0=D:\Games\Zenfar\Zenfar.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314914 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Zero Critical.dxw ================================================ [target] title0=Zero Critical path0=D:\Games\zero_critical_-_satin_rift\ZEROCR.EXE launchpath0= module0= opengllib0= notes0= ver0=0 coord0=0 flag0=671088674 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=4224 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Zero Divide.dxw ================================================ [target] title0=Zero Divide path0=D:\Games\Zerodiv\ZD.EXE startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=681582626 flagg0=1212153864 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=327680 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Zero Zone.dxw ================================================ [target] title0=Zero Zone path0=G:\ZEROZONE.EXE launchpath0= module0= opengllib0= ver0=0 coord0=0 flag0=134218272 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=0 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/Zoo Tycoon.dxw ================================================ [target] title0=Zoo Tycoon path0=D:\Games\Zoo Tycoon\zoo.exe launchpath0= module0= opengllib0= ver0=0 coord0=0 flag0=1207960096 flagg0=1207959552 flagh0=20 flagi0=136315172 flagj0=0 tflag0=6403 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/ZugyA.dxw ================================================ [target] title0=ZugyA path0=D:\Games\ZugyA\zugya.exe startfolder0= launchpath0= module0= opengllib0= notes0= registry0= ver0=0 coord0=0 flag0=136314914 flagg0=1209008128 flagh0=20 flagi0=138412036 flagj0=4224 flagk0=65536 flagl0=0 flagm0=0 tflag0=0 dflag0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 slowratio0=2 ================================================ FILE: build/exports/Zulu Assault.dxw ================================================ [target] title0=Zulu Assault path0=D:\Games\Zulu Assault\ASSAULT.EXE launchpath0= module0= opengllib0= ver0=0 coord0=0 flag0=134218272 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=0 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/exports/eXpendable.dxw ================================================ [target] title0=eXpendable path0=D:\Games\eXpendable\go.exe launchpath0=D:\Games\eXpendable\Expendable.exe module0= opengllib0= ver0=0 coord0=0 flag0=134217762 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=128 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 notes0= flagk0=65536 swapeffect0=0 registry0= ================================================ FILE: build/exports/mdk 95.dxw ================================================ [target] title0=mdk 95 path0=D:\Games\MDK\MDK95.EXE launchpath0= module0= opengllib0= notes0=Must manually set MDK.CFG hddata field with install game directory ver0=0 coord0=0 flag0=134217762 flagg0=1207959552 flagh0=20 flagi0=138412036 flagj0=12416 tflag0=0 initx0=0 inity0=0 minx0=0 miny0=0 maxx0=0 maxy0=0 posx0=50 posy0=50 sizx0=800 sizy0=600 maxfps0=0 initts0=0 winver0=0 maxres0=-1 ================================================ FILE: build/help/placeholder.txt ================================================ no help files here until updated. grab files from release v2.04.10. ================================================ FILE: build/readme-relnotes.txt ================================================ v2.2.00/01 major code rewriting - introduced dxwCore class preliminary FPS handling: Limit, Skip & Count with configurable delay Hide Multi Monitor configuration flag - used for "Dream Acquarium" on multimonitor PC. v2.2.02 preliminary time stretching: so far applies to GetTickCount() only, and is controlled by Alt-F5 / F6 keys. Fixed bug in GDI BitBlt call: stretching must be made on screen DC only, or it's made twice. v2.02.03/04: code cleanup - see syslib calls hooking new configuration flags: Hook GDI and Hook OpenGL OpenGL custom library field API hooking fix with module specification Time stretching by keyboard control (Alt F5/F6) and/or Time Slider dialog v2.02.05: hooked winmm timeGetTime() API: makes time stretching work for Age of Empires series changed time stretching grain: now it's not the coarse grained 2x, 4x,... series in 9 possible values but the fine grained series 1.5x, 2x, 3x,.... in 17 possible values added status and time stretching view panels to tray icon menu v2.02.06: preliminary FPS counter overlapped on game screen, Alt-F7 to toggle display on/off. fixed buf on time stretch logging (and possible game crash). revised GetDC handling with 8BPP paletized surfaces: avoided need to emulate reverse-blitting and got an impressive speed improvement for games such as Age of Empires I & II and Hyperblade. v2.02.07: many fixes on the FPS and time control features. v2.02.08: fixed some errors in the main directdraw palette descriptor. That gives better compatibility and less complicated source code. added Fake Version feature: now Dungeon Keeper II (original version, not GOG hack) can detect a fake Win2000 / WinXP environment on Win7 and newer. Tested and working on Win7. Many thanks to Maxim for pushing me hard to win my lazyness and implement this new feature. v2.02.09: Fixed some x,y window coordinates bugs Fixed some proxy log messages (missing \n line terminator) Fixed Trace "DirectX" flag. improved GetDC handling in 8BPP palette mode: AddPalette called on demand, and on any surface (including backbuffers): makes Emergency work with no "Handle DC" flag set. Beware: this may affect the "Map GDI HDC on Primary DC" flag causing surface locks. Fixed limit FPS timing issues: now the max possible FPS is 1000/delay. Fixed EndPaint bug causing HDC lock in "Map GDI HDC to Primary DC" mode. v2.02.10: Added "Full RECT Blit" mode: may be useful to handle problematic situations (e.g. "Urban Assault" intro movies) Fixed ClientToScreen and ScreenToClient hookers to properly handle scaled windows. This makes "Postal" working. Fixed global palette reference count (??) in DirectDraw::Release hook Fixed Window messages handling for SWP_NOMOVE, SWP_NOSIZE modes. v2.02.11: Added debug messages for GetSystemMetrics() modes, MapWindowPoints() points, DirectDrawEnumerate/Ex() devices. ompiled with #define _WIN32_WINNT 0x0600 -> handles Vista modes Added NOPALETTEUPDATE ("Palette update don't Blit" flag) to eliminate flickering when ddraw and GDI methods conflict Hooked all LoadLibraryA/W and LoadLibraryExA/W calls Hooked extDirectDrawEnumerate/Ex ddraw calls to handle Hide multi-monitor option. Detected directshow activation through CoCreateInstance and hooked quartz.dll segment: now Urban Assault movies don't require "Full RECT Blit" option to be set. Updated DDSurface::Release hook v2.02.12 GUI: Tabbed setup panel. More space for more future options. DLL: (optional) splash screen probably, some regression bugs.... v2.02.13 Added decoding of WINDOWPOS.flags field in trace log revised whole hooking procedures to use HMODULE handle instead of module name Added WM_GETMINMAXINFO and WM_NCCALCSIZE handling in WinProcess hook Attempt to handle double buffering through surface attach to backbuffer (???) Fixed CHILD window positioning for BIG windows in CreateWindowExA hook Added GlobalMemoryStatus hook to fix huge values when value exceeds DWORD range. Fixes Nocturne intro warning message. V2.02.14 Started dll injection to handle startup code Fixed directx CreateSurface hook to fix "Wargames" error in emulated mode Fixed directx SetClipper hook to properly handle backbuffer clipping and fix "Wargames" clipping problems v2.02.15 Fixed clipping handling of primary/backbuffer surfaces Added option to set AERO compatibility for Vista/Win7/Win8 platforms. Need to call a undocumented ddraw API. Thanks to Vovchik that discovered it. Use at your own risk! v2.02.16 DLL injection finally working! Quake 2 is supported. Added Wireframe option for OpenGL games Improved fix for clipper handling of primary/backbuffer surfaces v2.02.18 Improved LoadLibrary family hook and other improvements to let DxWnd better retrieve OpenGL libs: now Homeworld 2 is working Fixed a bug in backbuffer ZBUFFER attach emulation. Now Dungeon Keeper 2 crashes no more. Moved "Remap client rect" option from directx tab to main program tab Added the "Force Hook" in the OpenGL tab. Useless for now. Preliminary work for d3d10/d3d11 wrapping. Unfinished and not working so far. Added LoadLibraryEx flags explaination in log Added support for mouse X,Y coordinates display in status window OpenGL hooking: fixed bug to prevent hooking same call twice OpenGL hooking: added hook for wglMakeCurrent call to keep track of rendered window OpenGL hooking: fixed glViewport and extglScissor hook coordinates handling D3D hooking: Added Wireframe option for D3D games Added hooking of CLSID_DxDiagProvider through CoCreateInstance Fixed (further simplified) clipping handling of primary/backbuffer surfaces ChangeDisplaySettings hook: fixed x,y coordinate inversion in log message v2.02.19 Saves GUI coordinates Fixed "Remap client rect" option for Diablo's windows and Premier Manager 98 mouse movements Added "Highlight blit to primary" option to draw a yellow bounding box around blits to primary surface Fixed some exception conditions when closing the programs Fixed CreateSurface handling to allow Premier Manager 98 start in emulated mode Fixed ONEPIXELFIX handling Fixed BIG WIN handling for Diablo's windows Fixed FillRect hook to prevent filling outside virtual desktop Disabled hooking of system libraries Fixed a nasty bug that caused your desktop to freeze until shutdown !!! Fixed GetWindowRect handling for windows not created by the task: Diablo queries the explorer window size! Now the retrieved RECT can't be larger than the virtual desktop v2.02.20 Fixed an error in D3D10/11 preliminary code: AoE III working again Added "Hook all DLLs" option to simplify congiguration: see new Diablo setup Added screen coordinates to log Some code rearrangement v2.02.21 it's a w.i.p. release, wait 'till finished.... v2.02.22 Major code rearrangement in API hooking. Expect some troubles... Added desktop workarea and centered coordinate settings Fixed imelib hooking Added HOOKENABLED flag Fixed ChangeDisplaySettings GUI: added ListView icons GUI: added pause command GUI: updated commands layout v2.02.23/24 Fixed "disable setting gamma ramp" flag to intercept both GDI and D3D calls Fixed client workarea setting to occupy the whole client area even when preserving aspect ratio (it draws black rectangles to the left/right or top/bottom side) Added DisableThreadLibraryCalls optimization Added B&W screen simulation (for primary emulation only) Improved the primary emulation capacity to handle 3D games Added the "preserve surface capabilities" flag Fixed an hooking bug for user32.dll v2.02.25 CORE: Added 'Single CPU Process Affinity' flag to let old games run on a single CPU core. Fixed bug causing possible crash using 'preserve surface caps' flag Switched lpDDSBack reference when backbuffer is upgraded through QueryInterface Eliminated lpDDSBack clearing when refcount is zero - why is this working better? Needs further investigation Added DDSCAPS_3DDEVICE capability when in EMULATED mode GUI: Added Kill process by name functionality (right click menu on program's list) Fixed GUI initial position: now checks for desktop size to fit GUI within visible borders Added single cpu process affinity checkbox in compatibility tab v2.02.26 CORE: Fixed Black&White mode for 16BPP color depth Revised hooking code, now more compact and clear.... Fixed DxWnd splash screen, for those who love it Increased child win table - now 688 hunter killer works perfectly GUI: Added /debug flag to enable debugging options Revised hooking code, now more compact and clear.... Restored Hook child win option v2.02.27 CORE: fixed GetDC/ReleaseDC ddraw implementation to refresh GDI operation on primary surface. Warlords 3 text is now visible. preliminary implementation of MapWindowPoints - to be tested GUI: Fixed log flags wrong initialization v2.02.28 CORE: eliminated experimental ICSendMessage and ICOpen hooks, preventing some games (Alien Nations) to work added mciSendCommand hook to fix video playback fixed MoveWindow bug - still, it's unknown the reason why some programs (Emergency) tries to MoveWindow upon the hWnd=0 desktop! fixed MapWindowPoints hook (Alien Nations) fixed desktop detections in some places, now correctly using dxw.IsDesktop() method Now "Alien Nations" and "Emergency" working (almost) perfectly. fixed d3d8/9 hook to Get/SetGammaRamp. This should make a great number of recent games playable again. v2.02.29 CORE: hooked DirectDrawSurface::Lock method to center primary surface memory updates centered into the window (in no emulated mode) v2.02.30 CORE: Some ddraw::GetDC log message fixes added preliminary registry emulation - tested ok with "duckman" added separate flag for preliminary registry operation trace added CDROM drive type emulation - tested ok with "Fighting Forces" RIP fixed FixCursorPos routine: cursor x,y compensation must always use pseudo-fullscreen window parameters - fixes Imperialism II mouse problems fixed Desktop Workarea position mode for ddraw games added CoCreateInstanceEx hook - "Final Fighter" seems to be using it, but who knows why...? added "Don't move D3D Rendering Window" window option to make "Fable Lost Chapters" working GUI: updated default values on new entry creation to map most-likely-to-work parameters v2.02.31 CORE: disabled annoying compilation security warnings improved advapi32.dll hooking and logging handling of complex primary surfaces with backbuffer surface inherited from one directdraw session to the following and with different interfaces fixed SetCooperativeLevel handling in case of WINDOWED mode against desktop hwnd==NULL fixed GetGDISurface in EMULATED mode hooked gdi32 API set for Imperialism I & II and 688 Hunter Killer:GetClipBox, Polyline, PolyBezierTo, PolylineTo, PolyDraw, MoveToEx, ArcTo, LineTo, StretchDIBits, SetDIBitsToDevice, SetPixel, Ellipse, Polygon, Arc, CreateEllipticRgn, CreateEllipticRgnIndirect, CreateRectRgn, CreateRectRgnIndirect, CreatePolygonRgn, DrawTextA, DrawTextExA. fixed gdi32.dll hooking for TextOutA, TabbedTextOutA, Rectangle, BitBlt, PatBlt, StretchBlt, CreateFont, CreateFontIndirect improved ddraw proxy logging added / fixed user32.dll API FrameRect, TabbedTextOutA, CloseWindow, DestroyWindow, SendMessageW opengl: fixed glCreateContext, wglMakeCurrent to make Descent III playable in opengl video mode. fixed DeferWindowPos hook to make Imperialism II working fixed SM_CXVIRTUALSCREEN, SM_CYVIRTUALSCREEN properties fixed window class logging causing program crash GUI: added "GDI/Scale font parameters" & "DirectX/Disable HAL support" options v2.02.32 CORE: added new GDI handling mode, "Emulated devce context". Currently tested successfully on "G-Nome" only. fixed "Prevent maximize" windows handling avoiding to disable topmost style for child windows fixed handling of DDSCAPS_3DDEVICE surfaces in emulated mode: "Nightmare Ned" is working ok, "The Sims" works better (still crashing..) fixed banner handling in case of device context remmapped coordinates fixed memory leakage in SetDIBitsToDevice hooker GUI added radiobutton group to set the preferred GDI emulation mode v2.02.33 CORE: experimental attempt to emulate the ZBUFFER attach to the BACKBUFFER surface improved log to detail all ddraw object properties experimental emulation of RGB to YUV conversion to investigate "duckman" problems on Win7 improved grayscale algorythm fixed missing DDPF_ALPHAPIXELS property causing several blit incompabilities fixed surface handling for "Submarine Titans" fixed mousewheel handling fixed hooking bug causing several problems (i.e. Age of Empires III) Added FULLSCREENONLY option: fixes "Submarine Titans" intro movies Added "Bypass font unsupported api" compatibility flag: makes "Stratego" working fixed several d3d8/9 hooking problems GUI added controls for new core features defaulted ddraw emulation mode to surface emulation v2.02.34 CORE: Much better surface description in log Completely revised CreateSurface hook: emulated and direct code are merged as much as possible, and reference counter are kept accurate. Now most games can work both in emulated and direct mode. Fixed surface capabilities for "Vangers", "The Sims" (now working in emulated mode again) Updated "Fixed aspect ratio" option: now uses the x,y size declared in the configuration instead of the fixed 800 x 600 standard one. Added virtual fullscreen "Desktop" mode. Completely revised the Peek/GetMessage handling: now it uses the standard SetWindowHook API instead of the address redirection, making the handling more reliable and accurate: now "Age of Empires III" works at last! GUI: Added virtual fullscreen "Desktop" mode. Added "Fix buffered IO after Win98" flag: this is meant to fix an incompatibility in the ReadFile kernel32 API that must read from block boundaries, where a block was smaller up to Win98 and bigger after it. As a result, games like "Dylan Dog Horror Luna Park" show IO errors while reading data from the CD. Unfortunately, this is not the only problem of this game, so Dylan Dog fans will have to wait further. Maybe some other programs suffer of this problem, and I will strongly appreciate if anyone finds some. v2.02.35 fixed BACKBUFFER surface attributes in direct (not emulated) mode: Rayman 2 playable again added FILTERMESSAGES flag ("filter offending messages") to eliminate some problems to games not developed to work windowized (Rayman 2, Mirror's Edge ...) fixed bug crashing the program when "keep aspect ratio" is selected with window size set to 0 v2.02.36 hooked GetAttachedSurface to non-PRIMARY surface to track ZBUFFER attach to BACKBUFFER. Useless, so far... revised capability handling in CreateSurface hook trace is now activated from a separate log flag to reduce debug log size added "Peek all messages in queue" to avoid queue saturation and automatic task kill in Win7 (thank to P K help) fixed message handling in the case messages are passed to a routine handle v2.02.37 code reorganization GUI: removed useless flags and moved debug options in a hidden tab v2.02.38-40 Fixed coordinate calculation for blit operations when keeping aspect ratio. Fixed window coordinate placement in desktop / client area mode for programs with a visible menu bar. Changed "Lock win coordinates" flag: now it allows window movement / resizing when driven by mouse input. Fixed a bug in GDI "Map DC to primary surface"mode. Added palette display window to GUI v2.02.41 Added "suppress child process creation"flag. This flag is introduced to manage games such as "Heart of Iron 2" that start intro movie by means of a separate process. HoI2 is starting the binkplay.exe program in the game's avi subfolder. This way you don't get a windowed movie, but completely suppress it. v2.02.42 added hook to kernel32.dll QueryPerformanceCounter API to enable time stretching to Rayman 2 handled GetAttachedSurface emulation for FLIP capability on primary surface - that makes the intro movies of Empire Earth visible. Some code cleaning Cleared invisible debug flags ... v2.02.43 Several changes for Empire Earth: fix: restore 16BPP color mode after directdraw session termination fix: recovered window destruction fix: proper handling of MIPMAP and LOCALVIDMEM surfaces fix: color depth handling - now when the program terminates the desktop is brought to the original color depth v2.02.44 Improved debug logging for all palette operations fixed a bugged log causing the crash of Empire Earth in debug mode added show time stretching flag - preliminary version. Some code cleaning as well. change in automatic screen refresh - should make the "palette update don't blit" flag obsolete..... added a static definition for the default system palette added interception for CoCreateInstance following cases: case 0xe436ebb3: Module="quartz"; Class="CLSID_FilterGraph"; case 0x4fd2a832: Module="ddrawex"; Class="CLSID_DirectDrawEx"; case 0x49c47ce5: Module="amstream"; Class="CLSID_AMMultiMediaStream"; preliminary (proxed) interception for "GetActiveWindow" and "GetForegroundWindow" v2.02.45 A small fix for ddraw 7 games that makes Praetorians playable, though with some problems! v2.02.46 Fixed handling of user32 CreateDialogIndirectParam call to avoid processing in non fullscreen mode - fix necessary to start "Crimson Skies". v2.02.47 GUI: Configuration tabs reorganization: now some tabs have merged making it easier to reach all options core: improved d3d wrapping and sdded ZBUFFER cleanup flags to fix some d3d games. In particular: Clean ZBUFFER @1.0 fix: to fix "Star Wars Episode I Racer" Clean ZBUFFER @0.0 fix: to fix "Crimson Skies" black blocks bug on ATI cards v2.02.48 New options: "Disable fogging", "Textures not power of 2 fix" A few fix to prevent game crashes v2.02.49 Separated ddraw, d3d and dxwnd log messages Hooked GetAvailableVidMem method to limit memory values Hooked ChangeDisplaySettings call in both versions ANSI and WIDECHAR, to prevent messing up with the screen Added HookWindowProc() subroutine, called at dxhook.c@1534 Added "Add proxy libs" flag - so far to copy a d3d9.dll proxy lib to fix d3d9 games Hooked d3d8/9 SetCursorPosition method Hooked d3d8/9 AddRef / release methods (for logging) Fixed D3DDevice8/9 hooking Hooked QueryPerformanceFrequency Fixed a bug in d3d7 hooking GUI: added desktop color setting v2.02.50 Added "Intercept RDTSC" option: so far, tested on Unreal Tournament only. To implement RDTSC detection, I owe a big thank you to Olly who shared the disasm lib used to browse the assembly code. v2.02.51/52 Hooked window timers: now "Ed Hunter" can be time stretched added NOFILLRECT debug option fixed WM_DISPLAYCHANGE handling (x,y swapped coordinates?) fixed int64 arithmetic for performance counters Added (untested !!!) handling for RDTSCP opcode with "Intercept RDTSC" option Added "Limit screen resolution" option: seems necessary for "Sid Meyer's Civilization III" to work Improved initial window coordinate & style handling fixed virtual screen size showing into status panel hooked SetPixelFormat, GetPixelFormat, ChoosePixelFormat and DescribePixelFormat to redirect desktop hwnd and make wglCreateContext work (needed for Civ III) fixed log message for TextOut parameters hooked DisableD3DSpy (invoked by The Bard's Tale) fixed extglViewport coordinate remapping when invoked with CW_USEDEFAULT values (Civ III) fixed bug in DirectDarawCreate/Ex hooking with wrong module handle v2.02.53 Handling of ddraw screen color depth 15BPP - in "Hesperian Wars" fixed IAT scanning: now function addresses for remapping are searched in possibly multiple instances of dll text segment - in "Aaron Hall's Dungeon Odissey" hooked SystemParametersInfo call fixed window size logic to check for window menu bar, considering also the WS_CHILD case. fixed window move/resize when message processing is enabled: coordinates outside the child area or within ENTER/EXITSIZEMOVE must NOT be altered. expanded timer processing to include user32 Set/KillTimer - in "Aaron Hall's Dungeon Odissey" fixed possible recursion while hooking child window procedure identical to parent's one fixed gdi emulation on top of ddraw surface, enough to play "Sid Meyer's Civilization III". v2.02.54 fixed a bug in d3d GetAvailableVidMem that was causing too many troubles... fixed a bug in Suppress IME option fixed a bug in handled library list, possibly affecting d3d/d3d7 games avoid fixing window style for non-desktop windows (fixed a Port Royale 2 bug) eliminated "Disable HAL support", no longer necessary some incomplete work on gdi game handling added preliminary, incomplete (not working) glide handling v2.02.55 added "Hide desktop background" video option v2.02.56 hooked RegisterClassA API (useless so far...) fixed bug in SendMessageW hooking: caused truncated text in window titles and form captions fixed several d3d1-7 hooks: prevented some d3d games to properly work, i.e. "Thief the Dark Project" fixed d3d GetDisplayMode to return virtual desktop size - fixed "Affari Tuoi", an italian game. fixed some log messages v2.02.57 fixed WS_NCCALCSIZE & WM_NCPAINT messages to ensure a proper window's border and size - fixed Black Thorn window problems fixed "Hide desktop background" flag v2.02.58 Added Automatic DirectX mode: not workink always, but should make it much easier to guess a proper surface setting. Automatic mode allows dynamic mode change depending on the situation: it is necessary for Populous 3 D3D version. fixed BltFast operation with SRC color key (often used to draw cursor from texures) directly to primary surface: this makes the cursor visible in Populous 3. minor fixes on logging v2.02.59 fixed IDIrectDraw reference counter for ddraw release 1 session: fixes "Warhammer 40K Rites Of War" first screen fixed QueryPerformanceCounter handling: fixes "New York Racer" time stretching problems v2.02.60 fixed time stretching to handle Total Soccer 2000 fixed ZBUFFER surface creation to handle GOG Incoming troubles on some cards fixed handling of special effects (wireframe, no fogging, zbuffer always) to be valid on all d3d versions v2.02.61 added directx "Compensate Flip emulation" flag: used primarily to get rid of mouse artifacts due to emulated Flip rpocedure in windowed mode. Fixes Gruntz issues and some other games... v2.02.62 fixed d3d7 CreateDevice hook and d3d7 rendering options (wireframe, disablefogging, zbufferalways) fixed doublebuffer emulation - avoid returning the backbuffer when zbuffer is requested. Fixes rendering problems of many games! v2.02.63 fixed d3d hooking for Reset and GetDirect3D methods: now Jumpgate works at any available resolution, and the "Add proxy libs" option is no longer necessary fixed "Compensate Flip emulation" option for non emulated surface mode: fixes mouse artifacts for "Rogue Spear Black Thorn" added preliminary handling for "Disable Textures" option v2.02.64 GUI: implemented multiple file import DLL: fixed a ddraw session reference count error that prevented "Jet Moto" to start fixed "Compensate Flip emulation" for ddraw7 games: now "Empire Earth" supports this flag. fixed CloseWindow hook: now games that minimize/restore the main window on task switch can possibly recover (e.g. Hundred Swords) fixed process hook: now it should be a little more robust and efficient. Hopefully should fix some Macromedia Flash problems. fixed IDDrawSurface::Lock() prototype. Not gameplay improvements, though... added DirectX "Return 0 ref counter" option as quick & dirty solution to many reference counter problems! fixed DirectDrawCreateEx failing to register the main ddraw session handle fixed palette problem in emulated mode: palette must be applied to backbuffer surface as well. Now "Duckman" and "Total Soccer 2000" show perfect colors. v2.02.65 added "Fine time adjust" flag to finely set timeslider by 10% steps ranging from about :2 to x2 fixed a bug in DWORD timers introduced in v2.02.60: now "Warcraft 2" timing works again revised logit to calculate delays to emulate VSync timing - now should be more accurate and depending on actual screen refresh rate v2.02.66 fixed palette bug: "Virtua Fighter PC" now shows correct colors. v2.02.67 fixed log for D3D CreateDevice method, missing in some D3D interface versions added wildcarded program path: now you needn't set the full pathname, but it is sufficient to specify the rightmost part, e.g. the executable filename. added emulated mode color conversion from 32BPP to 16BPP. Despite the fact that the best way to run a 32BPP game is against a 32BPP desktop, now it is possible to downgrade 32BPP colors to 16BPP. This fixed the fact that 32BPP games run on a 16BPP desktop showed simply black screens (e.g. Baldur's Gate II) fixed logic for EnumDisplayModes implementation: now screen resolutions and, for emulated mode only, also color depth, are generated by DxWnd and not derived directly from the real ones. This make it possible to fake support for very low screen resolutions (e.g. 320x200) on modern screens that support them no longer. This make "Genocide" running on both supported resolutions 320x200 and 320x240. v2.02.68 added screen resolution choice: either a set of SVGA resolutions (mostly for 3:4 monitors), HDTV resolutions (mostly for 16:9 monitors) or the native set of resolutions offered by your monitor / video card. v2.02.69 improved exception catching to intercept memory violation exceptions and to neutralize offending code. Thank again to olly didasm lib, now the assembly instruction length is automatically determined so that the opcode can be replaced by the correct number of NOP instructions. If this doesn't mean much for you, just consider that this makes playable the Win95 (patched) release of "Star Wars Tie Fighter". fixed FillRect user32 call - brings some improvements to Imperialism (still far from being acceptable). v2.02.70 GUI: fixed saving wrong coordinates when dxwnd is terminated while minimized added check for adminstrative capabilities on startup DLL: fix: moved DrawText/Ex api hooks into right library fix: corrected child window procedure handling - fixes "Imperialism" child window closing fixed FillRect coordinate handling - fixes "Imperialism" menus fixed SetWindowPlacement handling v2.02.71 fix: Set/GetWindowLongA/W are always hooked. fix: added user32 GetDCEx hook for GDI Emulation & Directraw mode fix: hooked "FrameRect", "TabbedTextOutA", "DrawTextA", "DrawTextExA", "FillRect" in scaled mode only fix: FIXNCHITTEST mode fix: when main win is closed, blit area is made null to avoid messing with a wrong screen area added "Release mouse outside window" option. This option causes the get cursor position to detect a centered mouse position when the cursor is moved outside the window, allowing interaction with other windows without scrolling ot the windowed program. Mainly, this option is meant to help people with a physical disability to use other programs (e. g. the virtual keyboard) to play games. added "Launch" field (optional) to start the program with arguments or a separate task v2.02.72 fix: fixed Launch field used with "Use DLL injection" flag fix: somehow improved "Use DLL injection" to avoid blocked tasks and allow exception handling v2.02.73 Add: preliminary support for (unchecked) "Run in window" flag. Now if the flag is unchecked, DxWnd does NOT force the program to run in a window. Still, some rendering modes are not working perfectly. add: support for Unicode DefWindowProcW API call fixed some differences in D3D CreateDevice vs. CreateDeviceEx handling added "Window frame compensation" input flag to set the cursor position properly in "Sub Commando" fix: properly handled the case of NULL WindowProc routine in CreateDialog/Indirect API calls. Makes "LEGO Stunt Rally" working. added support for Unicode SystemParametersInfoW API call v2.02.74 Add: API hot patching, thank to aqrit precious support. Now Doom 3 is played in window. hooked GetCursorInfo call fix: recalculate vsync timers in case of time stretching fix: log failure for CreateWindowExW wchar api Add: configurable keyboard commands Add: timestretch toggle command Add: "Enable hotkeys" flag to enable/disable hotkeys fix: eliminated dialogs with timer warning messages (to be investigated...) fix: moved "no banner" flag to main tab again fix: potential string violation, possible cause for flash crash? v2.02.75 Hooked D3DDevice::ShowCursor method to apply force show/hide cursor (preliminary...) fix: dynamic allocation for WndProc stack to eliminate predefined limit of 256 entries. Star Wars Rebellion uses more than 256. added: "Suppress D3D8/9 Reset" flag fix: improved show FPS and Time Stretch overlay so that the two overlays won't overlap each other fix: bug in ddraw "Locked surface" mode preventing output on screen fix: fixed bug in critical common portion of the code that was crashing even unhooked programs (namely, Flash Player, ...) v2.02.76 fixed and enhanced several features about registry emulation: added flags "Emulate registry" (to add missing entries) and "Override registry" (to fake existing entries with different values). Fixed "Requiem Avenging Angel" DirectX bogus check bug. fixed bug in emulate surface palette handling affecting "Requiem Avenging Angel" colors v2.02.77 GUI: added program icon display fix: some log messages fix: handling of GetProcAddress D3D9 api fix: handling of EMULATEBUFFER option - fixes "Star Trek Birth of the Federation" fix: expanded hot patching scope - now can handle QueryPerformanceCounter and fix time stretching on obfuscated version of "Wind Fantasy SP" added logging in D3DDevice9::GetAdapterIdentifier v2.02.78 fix: hooked D3D8/9Device::BeginStateBlock ddraw API hot swappable log: helper for ChangeDisplaySettings() flags fix: hot patch handling of loaded modules log: fixed some messages with no line ending for GetObjectType() d3d begin of code reorganization and cleaning ole32, user32 API hot patched handling of DWL_DLGPROC message v2.02.79 fix: recovered capability to "pin" ddraw and d3d calls v2.02.80 Preliminary multilanguage release, english and chinese, many thanks to gsky916 support fixed Sleep bug for small delays and accelerated timeshift: fixes "Wind Fantasy SP" reported bug added log for DirectInput::SetCooperativeLevel flags fixed flip emulation mode when backbuffer is lost: fixes cursor problems in "HellCopter" fixed Pitch setting in DirectDraw::EnumDisplayModes when in SVGA emulation mode. Let "Outlive" use this setting v2.02.81 fix: hooked GetMonitorInfoA/W that is a possible way to get the screen resolution. The hooker sets the virtual screen size updating both rcWork & rcMonitor rects in the MONITORINFO structure. This fixes the mouse control in "Tomb Raider Underworld" and likely in other games with a similar engine. v2.02.82 fix: completed chinese translation and language selection through dxwnd.ini file. added very preliminary (and incomplete) italian translation for debugging. v2.02.83 fix: small error in one coordinate scaling procedure fix: completed translation in italian (just for testing....) fix: added palette window activation in icon tray menu fix: supppressed BackBuffer release within D3D7:CreateDevice: this makes "Tetris Worlds" fully playable add: build-in check for compatibility modes set! v2.02.84 fix: removed extra reference to ddraw session causing window movements on fullscreen game exit: fixes another "Wind Fantasy SP" reported bug v2.02.85 fix: revised handling of d3d D3DFORMAT field: fixes "Call of Cthulhu DCotE" color problems fix: added recovery for rounded child win coordinates: fixes blitting problems in Diablo when win size is not an exact multiple of native resolution. v2.02.86 fix: thank to aqrit's research, hooked and hanlded user32.dll GetUpdateRgn API. This fixes refresh and crash problems in Diablo & Hellfire. added bilinear filtering to directdraw palettized 8BPP emulated mode (where it is mostly needed!). A must try is "Genocide" ! v2.02.87 attempt to fix Win8 missing support for earlier ddraw releases (Croc legend of the Gobbos, Project I.G.I., ...) fix: optimized bilinear filtering with no horizontal / vertical sawtooth artifacts added support for 16BPP and 32BPP desktop bilinear filtering suppressed compatibility checking fix: doubled default window size when bilinear filtering is active added repositioning of control parent window when main win is moved added debug messages about hooked window class and name fix: ignore IME window when hooking main win, destroy it when requested fix: ignore HWND_MESSAGE type windows added "Diablo tweak" compatibility flag for Diablo proper screen update handling. It is a temporary tweak waiting to understand better how to properly manage it. v2.02.88 fix: DIABLOTWEAK flag defaulted to FALSE add: CLEARTARGET flag - forces a Clear CLEAR_TARGET operation on D3D BeginPaint: useful in combination with wireframe mode. updated "Optimize CPU" behavior: now it emulates a VSync wait also on D3D8/D3D9. Fixes some "swimming" problem in "Soul Reaver 2", and saves CPU time by limiting the FPS to the refresh rate. fixed positioning of FPS and time stretching indication on screen overlay cleaned up GUI project: no more japanese and localized resources, no more unreferenced resources. GUI: added Desktop status window GUI: added pixel format descriptor to DxWnd status v2.02.89 fix: added SVGA 512x384 video mode. Necessary for "Outcast" loading screen. fix: using WINNLSEnableIME call to suppress IME window. fix: improved some logging v2.02.90 added: "Filter winposchange messages" flag - needed for "RollerCoaster Tycoon / Deluxe / II" games fix: correct handling of texture surfaces for "Zoo Tycoon" in surface emulation mode. fix: handling of GDI32.dll calls in GetProcAddress fix: improved logging fix: GetRgnBox hooking moved to normal window processing, to handle RollerCoaster Tycoon series. added: GetTempFileName fix to handle Win95 differences. This makes "Powerslide" playable. v2.02.91 fix: bug in bilinear filtering mode causing possible game crashes when blitting partial rectangles (es. Age of Empires II cursor) added: AERO friendly mode - brings AERO compatibility and incredible performance boost for ddraw games in surface emulation mode v2.02.92 fix: "Keep aspect ratio" fixed for AERO environment fix: improved "Oprtimized for AERO mode" compatibility, both when set / unset. fix: Skip / Limit FPS now acting on full scren blits only. For instance, they no longer slow cursor sprite. v2.02.93 fix: handling of primary / backbuffer surfaces when DDSCAPS_3DDEVICE is set (es. Fifa 99 in Direct3D mode) v2.02.94 fix: handling of "Keep aspect ratio" for aspect ratios different from 4:3 fix: missing resolution 400x300 in "Limit resolution" handling fix: surface handling switch in automatic mode. added two flags for DDSCAPS_SYSTEMMEMORY handling on different contexts. Added extra performances and compatibility with D3D in emulated mode. added "Updated bigger than 1/4 screen size" flag, to perform FPS counting or limitations upon substantial screen updated (heuristic: bigger than 1/4 of the total size...) added true bilinear filter. Previous one was renamed as fast 2x filter (BILINEAR2XFILTER). fix: when the window was minimized & the "do not notify on task switch" flag was on, the game crashed. Now the blitting operations to invalid rect coordinates are suppressed. fix: debug option "highlight blit to primary" was causing game crashes when the updated rect was too little. fix: trapped sporadic CloseHandle(hMenu) crashes in a try/catch clause. fix: attempt to fix FIXD3DFRAME option fix: added SetStretchBltMode(hdc,HALFTONE) to SetDIBitsToDevice hooker to improve stretching: fixes "Celtic Kings Rage of War" v2.02.95 fix: handling of limit resolution field fix: FPS handling to screen updated made by SetDIBitsToDevice fix: PeekMessage implementation with "Peek all message in queue": fixes "Shadow Watch" fix: missing hook to CreateProcess - needed for "Suppress child process creation". fix: exception for bilinear filtering applied to certain games (e.g. "Shadow Watch") v2.02.96 fix: FPS inticator on window title was causing the program to become irresponsive (partial fix) fix: proper setting of ddraw surface capabilities will allow primary surface emulation for most D3D1-7 games fix: missing initialization of variables in screen size limit handling fix: processing of mouse messages fix: GetSystemMetrics and LoadLibrary* calls hooked by hot patching to fix "Wind Fantasy SP" movie problems fix: completed winmm multimedia api hooking to fix "Wind Fantasy SP" movie problems, and not only.... fix: revised FPS control to assure more stable fps when a FPS limit delay is set v2.02.97 fix: mouse black trails in "Deadlock II" fix: missing default value for filter mode v2.02.98 fix: better ddraw surface handling - now "Darkened Skye" runs in emulated surface mode with perfect colors fix: fixed RDTSC opcode search loop - fixed time stretching for "Ubik" add: added "Peplace privileged opcodes" flag - makes unpatched "Ubik" run fix: revised ddsurface capabilities policy to allow D3D1-7 games to run in emulated mode and bilinear filtering v2.02.99 fix: completed bilinear filtering for 16bpp desktop color depth fix: fixed surface handling, Suppress SYSTEMMEMORY options now moved to debug flags (maybe unnecessary) fix: AERO compatibility is now declared just once fix: fast bilinear blitting in the 32 -> 32 BPP case add: texture hooking add: texture management add: Direct3D dedicated configuration tab v2.03.01 fix: fixed some bitmap handling while processing textures add: texture management dump to texture.out folder and hack from texture.in folder fix: AERO optimized mode with ddraw7 only surfaces: "Hoyle Casino Empire" works at least in fullscreen mode. fix: bilinear filters compiled with optimized and openmp flags - big speed improvement. fix: reduced the maximum amount of visible video card with "Limit available resources" flag: now "Breath of Fire IV" works. v2.03.02 fix: when creating an IID_IDirectDrawGammaControl object through lpdds->QueryInterface redirect fake primary surface to real one to make the object working. Fixes "Might & Magic 7" fix: fixed logging of ddraw Set/GetGammaRamp methods. Added SUPPRESSDXERRORS error suppression add: texture extraction parameters (min & max x,y size) in dxwnd.ini config file add: texture extraction / hack made in DxWnd install folder, to allow usage also for games running from unwritable (CDRom) directory fix: in "prevent maximize" mode, set the main window in maximized state. Allow "Hoyle Casino Empire" to continue after the intro movie is terminated add: Process kill command now warns you about existence of task fix: DxWnd window position save now works on multiscreen desktop v2.03.04 fix: changed surface capability policy so that "Risk II" works with identical surface pitches v2.03.05 add: texture dump for d3d8 & d3d9. Note: highlight & hack yet to be implemented. d3d10 & d3d11 yet to be implemented. Texture types not complete. fix: handling of d3d10 (Assassin's Creed) v2.03.06 fix: do not try to set vsync delays on ddraw surface when not created yet fix: catched several sporadic errors before they could crash the application fix: GetAttachedSurface() now retrieves a backbuffer from the list, instead of referencing the last one - this fixes "Tomb Raider III" GOG release in non emulated mode. add: "Normalize performance counter" flag to fix an improper use of QueryPerformanceCounter() made by "Cyber Gladiators" add: "GDI Color conversion" debug flag v2.03.07 fix: key matching for virtual registry now made case insensitive (needed for "Die Hard Trilogy") fix: handling of null values passed to extRegQueryValueEx as lpType and lpData arguments (needed for "Die Hard Trilogy") fix: DirectDrawSurface::GetPalette returns the virtual palette when applied to virtual primary / backup surfaces (needed for "Die Hard Trilogy") fix: fixed dump for 8BPP palettized textures (needed for "Die Hard Trilogy") fix: handling (with no operation) of D3DFMT_Q8W8V8U8 texture type and other bumpmap formats (used by "Tiger Woods PGA Tour 08") fix: handling of LIMITRESOURCES flag for DirectDraw::GetCaps method when memory exceeds 0x70000000 bytes fix: handling of LIMITRESOURCES flag for Direct3DDevice::GetAvailableTextureMem method when memory exceeds 1GB fix: don't change screen resolution in SetDisplayMode when wrong (negative) values are passed. Fixes a problem in binkplayer.exe fix: fixed OutTrace to avoid possible infinite recursion when loading C runtime libraries and logging LoadLibrary activity fix: eliminated critical races when using DLL injection, thank to Luigi Auriemma's suggestion (inject an endless loop in the main thread and remove it at the end of injection) fix: implemented DLL injection according to Luigi Auriemma's schema in CreateProcess hooking routine (needed for "Die Hard Trilogy") fix: using MinHook library to acquire compatibility with all APIs fix: hooked GetExitCodeProcess to handle "SUPPRESSCHILD" special case fix: using hot patching for SystemParametersInfo APIs fix: in SystemParametersInfo suppressed invalid operations in window mode: SPI_SETKEYBOARDDELAY SPI_SETKEYBOARDSPEED add: son process handling with 4 different cases: 2 old cases (default case and "SUPPRESSCHILD") plus "INJECTSON" and "ENABLESONHOOK" to hook the son process without/with DLL injection add: debug color conversion mode through GDI routines add: multi-hooking for multiple processes contemporarily, adding the line "multiprocesshook=1" in [window] section of dxwnd.ini. Use at your own risk! add: partial logging of Direct3DDevice::GetDeviceCaps output (to be completed) add: handling of notes in the DxWnd GUI (configuration notes tab) mod: when log is not possible on program's folder, it is no longer written in %TEMP% dir, is now written in DxWnd local dir. v2.03.08 add: "GDI mode" ddraw surface handling mode add: "center to window" option add: "message pump" input flag - fixes Arxel Tribe games (Faust, Legend of the prophet & assassin, ...) fix: "Viper Racing" crash fix: "limit resources" option for "Tiger Woods PGA World Tour 08" fix: "limit resources" option for "Jeff Gordon XS Racing demo" add: debug "stress resources" option fix: added a couple of directinput diagnostic logs add: debug option "freeze injected son" add: made check for admin rights configurable in dxwnd.ini add: "portable" capability to configure relative pathnames fix: small bug in game menu string width - now game titles should not be trunked any longer. v2.03.09 code reorganization & reuse add: "Set texture pixel format" flag, makes "Jeff Gordon XS Racing" working on emulated mode and 32BPP desktop add: "GDI mode" emulation uses HALFTONE to activate GDI bilinear stretching when "Full Bilinear" filter is activated: slower, but better quality add: preliminary hooking for EnumZBufferFormats ddraw7 method fix: eliminated some handle leakage when injecting launched processes v2.03.10 add: real time logging through OutputDebugString add: menu command to launch DbgView.exe add: support for timestamped logs add: "Erase trace file" flag fix: handle leakage for primary hdc, causing rapid performance downgrade fix: log message reorganization add: SetStretchBltMode HALFTONE in GDI mode to provide bilinear filtered GDI stretching fix: some GDI mode optimization - should bring performances similar to D3DWindower, with similar configuration fix: GDI mode bug, crashing when blitting from NULL surface (to do a color fill operation) v2.03.11 fix: added DDSCAPS_FLIP capability to emulated backbuffer surface. Fixes "Injection" missing flips fix: added high order bit set to kernel32.dll GetVersion() wrapper in case of Win95/98 emulation. Fixes "Warhead" frontend program fix: coordinates returned by user32.dll GetClipCursor() must be scaled accordingly with virtual desktop size. Fixes "SubCulture" mouse control problems v2.03.12 fix: several issues in fake registry hooks add: continue char '\' in fake registry configuration for hex values add: GetClipList ddraw hooker: fixes "Full Pipe" blitting coordinates fix: proper handling of palette reserved entries fix: dinput GetDeviceData add: implemented "Release mouse outside window" functionality in dinput calls fix: now "Release mouse outside window" leaves the mouse close to where it left the window fix: in GUI, keeps memory of last used paths fix: several log messages v2.03.13 add: integrated printscreen facility with 8BPP paletized dump, activated by "printscreen" special key (default Alt-F12) fix: recovery for lost surfaces (i.e. after a Ctrl+Alt+Del command) fix: palette display form showing active entries fix: EnumDisplayModes hook in emulate surface mode fix: several log improvements v2.03.14 add: window commands Minimize, Restore & Close add: made palette behaviour configurable (until better understood...) add: "updatepaths" tag in dxwnd.ini v2.03.15 fix: keep aspect ratio calculations fix: d3d Present method, to properly scale to window size (fixes "Silent Hunter III" rendering) fix: GetMonitorInfo hooker: in windowed mode the call may fail, a virtual size and ok retcode should be returned fix: Blt method recovering errors when D3D CreateAdditionalSwapChain method fails: allow to see the intro movies of "Silent Hunter III". fix: added some missing D3D errorcode labels in log file v2.03.16 fix: MapWindowPoints hook - added coordinate scaling (fixes "NBA Live 99" components size and position) fix: using "Suppress D3D8/9 reset" sets the backbuffer area as large as the whole desktop to avoid clipping add: added "Unlock Z-order" flag to avoid window to stay locked on top of z-order (useful for "NBA Live 99") add: added "EA Sprots hack" flag to suppress some interfering hooks set by EA games internally (useful for "NBA Live 99") v2.03.18: fix: eliminated direct output to primary surface, causing more troubles than goods ("Divine Divinity" flickering...) fix: handled CoCreateInstance calling CoCreateInstanceEx in hot patch mode. fix: eliminated InvalidateRect calls in ddrow Unlock hooker: this is not the right way to fix "Deadlock II", sorry. fix: DirectDrawEnumerateEx log fix: cursor is hidden in fullscreen mode only fix: CoCreateInstance & CoCreateInstanceEx wrappers. Now "Crusaders of Might & Magic" is playable in window v2.03.19: fix: scaling of movie coordinates rendered through MciSendString fix: doubled rendering to screen with fast 2x bilinear filtering fix: crash when setting "showFPS overlay" with DirectX "hybrid mode" fix: "keep aspect ratio" with DirectX "GDI mode" fix: when ddraw hook is set to "none", no hook operations are performed on ddraw add: possibility to control the D3D8/9 SwapEffect field with the "force swap effect" flag fix: revised handling of GDI device context shared with DirectDraw primary surface, improved behaviour of "Star trek Armada" v2.03.20: fix: revised hookers for kernel32 GetVersionExA/W api, adding support for dwPlatformId field fix: texture handling for texture dump/hack/highlight add: "Reserve legacy memory segments" compatibility flag, needed for "Crusaders of Might & Magic" add: preliminary support for ddraw7 DirectDrawCreateClipper api add: "Suppress main window destruction" flag, to make "Prince of Persia 3D" playable fix: fully revised ddraw surface handling in d3d1-7 versions. Now "Might & Magic IX" is supported v2.03.21: fix: full re-design of ddraw "special" surface management (primary & backbuffer): greater compatibility for emulation mode fix: GDI edit window positioning for "Imperialism" city name selection v2.03.22: more code reorganization and cleanup eliminated GDI over directdraw emulation (MAPGDITOPRIMARY flag) add: support for texture D3DFMT_L8 dump ("Turok") fix: eliminate a possible divide by zero error fix: avoid intercepting WindowProc routines when set to special values 0xFFFFxxxx - makes "The Hulk" demo working v2.03.23: fix: implemented the correct interface of registry query calls that can be used to know the key data length fix: hexdump routine with NULL input used in registry operation log was causing crash add: preliminary hooking for user32.dll desktop routines, like CreateDesktop() - makes "STCC Swedish TouringCar Championship" working v2.03.24: fix: added missing log for RegSetValueEx key value when type is REG_SZ (string) fix: handling of DDERR_SURFACEBUSY error in blit operations, recovers "Virtua Cop" fix: several changes in palette handling, improve (but don't fix!) "Man in Black" palette rendering fix: EnumDisplayMode hooker, passing wrong vodeo modes to the callback routine. Fixes "Total Annihilation Kingdoms" crash fix: DxWnd GUI build with very large width, causing slow interface responsiveness. add: added the "Suppress Release on backbuffer" that makes "Tetris Worlds" working, avoiding to release the backbuffer surface too many times. v2.03.25: fix: CoCreateInstance hooking for IDirectDraw interface: fixes "Darius Gaiden" fix: BackBufferCaps value for NOSYSTEMEMULATED option. Fixes "Forsaken" crashes in AERO mode. fix: GDI GetDC and GetWindowDC must not redirect the zero hWnd to the current main window if not in fullscreen mode. v2.03.26: add: Added "Set KEY_WOW64_64KEY flag" flag to registry operations. It could prove useful for old programs on recent W64 platforms. add: Added "fix movies color depth" flag. It fixes some problems when windows multimedia functions detect and process the actual video color mode and they should rather consider the virtual value. Fixes "Killing Time" intro movies decoding. fix: suppressed hooking for comdlg32.dll module. Common dialogues never need to be altered. Fixes "Road Rash" save/load game dialog problems. v2.03.27: add: dxwnd proxyes to get standalone windowed mode (ask for instructions) fix: added SetAppCompatData(1, 0) to AERO compatibility for lock operations - improves AERO compatibility, e.g. "Age of Empires" intro movie add: added "Disable max window mode" flag for better compatibility with Win8/8.1 fix: cleaned up some opengl hooking code. Mind possible regressions .... v2.03.28: add: added "Lock / Unlock pitch fix" flag to compensate for pitch change in emulation mode. Fixes "Snowboard racer" slanted graphic add: added "Width not power of 2 fix" flag to compensate for pitch change in emulation mode. Fixes "Microsoft Midtown Madness" slanted graphic add: debug flag "Highlight Locked surfaces" to highlight service surfaces that are Lock-ed and Unlock-ed. v2.03.29: fix: wrong d3d7 hook, now "Echelon" works again. add: "hide taskbar" option. A little experimental, so far. If the game crashes, the taskbar may not be reactivated: use menu commands to recover. v2.03.30: fix: reset for flipped DC retrieved from ddraw interface after ddraw creation. Fixes "Powerslide". add: added "Send WM_ACTIVATEAPP message" flag: fixes "Championship Manager 03 04" mouse and "Thorgal" lock fix: FillRect hooker. Good for "Premier Manager 98" and "Premier Manager 97". fix: revised the DDSCAPS_SYSTEMMEMORY suppression, now separated for primary & backbuffer surfaces v2.03.31: fix: handling of "No SYSTEMMEMORY on BackBuffer" flag for no-emulation mode: necessary to run "Microsoft Motocross Madness 2" in this mode. fix: allowing hot patching to GetCursorPos() user32.dll call. This allows correct mouse control with obfuscated exes, like the chinese RPG "Paladin 3". v2.03.32: add: flags "Ask confirmation on window close" and "Terminate on window close" fix: implemented surface stack cleanup on overflow: this should allow "European Air War" to run through several seasons. debug: added a few diagnostic messages to trap possible errors in DLL injection functions fix: recovered the menu Edit->Add command that went disabled v2.03.33: add: new surface handling, more similar to D3DWindower. The previous mode can be activated by setting the "Flip emulation" flag. The new mode can successfully manage "Microsoft Motocross Madness 2". fix: Reelease operation for primary surface when used for GDI GetDC operation fix: protections for GDI ReleaseDC operations against null window or DC v2.03.34: fix: handling of real primary/backbuffer surfaces in non-emulated modes and WinXP: now uses system memory if possible, video memory otherwise. fix: simulation of backbuffer attach in non emulated modes. fix: mciSendString hooker, was losing a final command line argument v2.03.35: add: added "Set ZBufferBitDepths capability" flag to set a no longer supported fields in the capability structure. This makes ""Banzai Bug" bypass the capability checks. fix: better handling of surface capabilities in flippable mode fix: fixed bug in primary surface handling when already created ... add: added ""Share ddraw and GDI DC" flag: sharing was introduced in release v2.03.19, but proved to be incompatible in many situations. Now it is off by default and enabled when necessary. fix: the flags for disabling DDSCAPS_SYSTEMMEMORY capability are now used also in non-emulated flipping emulation mode. Depending on the video card, it may help getting compatibility. fix: handling of NULL DC in non emulated modes: the NULL DC (corresponding to the whole desktop) is replaced by the window DC. This reduces problems like clearing the whole desktop. fix: EnumDisplayModes was returning wrong modes list in SVGA mode. fix: applied the error suppression to the DeleteAttachedSurface hooker. fix: hooked User32 CreateRectRegion/Indirect calls. v2.03.36: fix: fixed "fix movies color depth" flag for color depths greater than 8BPP. Fixes the "Horde 2 the Citadel" intro movie. add: added the "Set KEY_WOW64_32KEY flag" flag to prevent registry redirection for win32 applications add: virtual registry configuration integrated in DxWnd configuration and exported files add: hooking of RegEnumValue() call. Useful for "Star trek Generations" fix: fixed mouse handling through "Message processing" option for child windows. Fixes "Star Trek Armada" mouse problems fix: fixed GetDC hooker for child windows. Fixes some "Star Trek Armada" graphic problems fix: CreateCompatibleDC hooker printing wrong error messages in normal conditions fix: fixed DrawText, DrawTextEx hookers returning wrong RECT structure. Fixes "Star Trek Armada" text placement problems add: completed log messages for DrawTextEx, CreateDialogParam, DialogBoxParam and CreateDialogIndirectParam v2.03.37: add: handling of RegEnumValue advapi call in virtual registry. Useful for "Star trek Generations" add: virtual registry now integrated in dxwnd.ini configuration and activated automatically. No more handling of dxwnd.reg file fix: virtual registry optimization, code reorganization, bug fixing .... add: "Stretch ActiveMovie window" flag. Fixes "The Thing" intro movies. fix: apply "Blit from backbuffer" option to both surface emulated and non emulated cases. Should help fixing "Galapagos" screen locks. fix: apply "Limit screen resolution" to the list of detected video modes in VGA emulated case fix: eliminated "Automatic" surface emulation mode, no longer supported fix: fixed InvalidateRect rectangle: avoids flickering in "Microsoft Pandora's Box" add: added "Bypass MCI calls" flag. v2.03.38 fix: handling of WM_ACTIVATE and WM_NCACTIVATE messages, should bring the window to HWND_NOTOPMOST z-order position only when activation is on, not off! fix: in "Share GDI and draw DC" mode, check if the primary surface really has a DC and switch to another one if the DC is missing. fix: eliminated some redundant code in GDI ReleaseDC in DC emulated mode v2.03.39 add: "Fix glPixelZoom args" flag to scale images rendered by OpenGL through GDI. It is needed for "Strength and Honor". add: "Reuse emulated DC" flag to optimize GDI emulation. experimental. v2.03.40 fix: detecting main window when setting FULLSCREEN mode against it. Helps handling "Reah" add: option to de-interlace videos on 16BPP to 32BPP color transformation. Required for deinterlacing "11th Hour" movies add: cornerized mode, could help handling Battlenet GDI menus add: preliminary implementation of virtual desktop window. Useless so far. fix: hooked more GDI calls: CreateICA, GetViewportExtEx, IntersectClipRect, SetRectRgn fix: ChangeDisplaySettings no longer take note of video mode when called with CDS_TEST flag fix: merged user32 FillRect and FrameRect handling fix: fixed bug that was leaving a copy of dxwnd.ini on last visited directory on window close v2.03.41 fix: filtering of mouse messages in "Message pump" option. Makes games more responsive to mouse clicks. Improves "X-files". fix: exclusion of DDSCL_SETDEVICEWINDOW, DDSCL_CREATEDEVICEWINDOW and DDSCL_SETFOCUSWINDOW flags in ddraw SetCooperativeLevel windowed mode fix: guess PRIMARY surface in ddraw1 when no flags (but BACKBUFFERCOUNT) are set. Necessary for "Star Force Deluxe" delete: suppressed frame compensation option FRAMECOMPENSATION (unused). add: added debug flag NOWINDOWHOOKS to avoid WindowProc hook. fix: GetPaletteEntries hook returns 256 value against hpal=NULL. Let "M.I.B." run, though palette is still not ok. fix: StretchDIBits hook no longer can return an unassigned value fix: anti-recursion check in DialogBox WindowProc call v2.03.42 add: option "Syncronize GDI and DDRAW palette" - fixes "Man in Black" palette problems add: apply "Remap MCI coordinates" options also to movies rendered through MCIWndCreate: fixes "Man in Black" movie problems fix: fixed InvalidateRect hooker logic - fixes "Imperialism" graphic. v2.03.43 fix: eliminated SYSTEMMEMORY usage on DDSCAPS_3DDEVICE surfaces. Needed for "Arx Fatalis" fix: deleted emulation of ZBUFFER attach. Needed for "Arx Fatalis" fix: added emulation of PixelFormat in getPixelFormat hooker. Needed for "Arx Fatalis" add: added virtual joystick feature. Required to play "Tie Fighter 95" with no real joystick v2.03.43.fix1 fix: recovered virtual joystick buttons v2.03.44 fix: GetSystemPaletteUse error message fix: transparent virtual joystick icons fix: RealizePalette hooker crash in "Super Real Mahjong P7" fix: complete recoding of GDI BitBlt, StretchBlt and PatBlt hookers: it fixes "Reah" problems fix: changes in USER32 BeginPaint hooker to support DC sharing with ddraw fix: increased configuration panels heigth do avoid clipping when desktop font size is set to 125% v2.03.45 add: virtual joystick center-lock feature, helps using the mouse as mouse leaving the joystick locked. fix: revised dinput hooking. dinput8 still to be completed. add: option "Unacquire input devices on focus lost". Needed for Star wars "Tie Fighter 95". fix: set dinput SetCooperativeLevel flags to DISCL_NONEXCLUSIVE | DISCL_FOREGROUND fix: fixed CreateIC hooker call method (WINAPI) fix: emulated Unacquire on virtual joystick. Needed for Star wars "Tie Fighter 95". v2.03.46 add: added compatibility options "Hook GOG libs" and "Byass GOG libs" to manage GOG games add: added "Enable Time Freeze" timing option and the virtual key "freezetime" add: command line option /E to terminate exixting DxWnd session fix: relocation of WS_POPUP windows. Fixes "Riven" menu window. v2.03.47 add: added handling of DirectInput8 dinput8.dll fix: completely revised directinput hooking to manage multiple devices acquire/unacquire fix: added some dinput error codes to log messages fix: increased time freeze toggle key hysteresis time to 1 sec to avoid multiple activations v2.03.48 fix: set proper surface capabilities for 3DDEVICE surfaces, according to VIDEOMEMORY capability. add: "force clipper" flag to redirect clipper definition to main window and primary surface fix: better handling of surfaces on minimize / restore events, mainly on WinXP fix: proper default values for"Share ddraw and GDI DC" and "Lock/Unlock Pitch Fix" flags v2.03.49 fix: a few improvements in handling NULL lpDDSSource in Blit/Flip operations add: option to print relative timing to log fix: avoid handling textures at level greater than 0 since this seems to cause application crash fix: restore cursor clipping through WM_SETFOCUS and DefWindowProc when focus is gained fix: "One Must Fall Battlegrounds" keyboard fix - can't SetWindowsHookEx with WH_KEYBOARD and NULL thread v2.03.50 fix: check for errors that could cause random GDI cursor clipping regions fix: more accurate hooking of ddraw pointers - fixes several DD_GENERIC_ERROR in Win8/10 platforms, makes "SWAT 3" working fix: improvements (not finished) in dinput handling add: the OS version info is traced in the log file fix: added cursor clipping when requested on new main window creation fix: handling of cursor clipping when the window gain/lose focus threough DefWindowProc message handling v2.03.51 fix: WinXP select file dialog bug, not appearing if pointing to nonexistent directory fix: export file bug - now forces the file to have a .dxw extension fix: eliminated 6 useless fields in dinput handling, now their value is calculated automatically and at runtime add: DirectInput / "Emulate mouse relative movement". Eliminates the fake clipped regions inside the window (fix Geneforge series) fix: directinput mouse mode (absolute vs. relative) now correctly checked using the mouse device fix: attempt to fix FIXMOVIESCOLOR flag for 32BPP target color depth, but it doesn't still work on Win10 fix: directinput RELEASEMOUSE flag applied to mouse device only v2.03.52 add: added Win NT 4.0 to the list of detected OS fix: DirectInput SetCooperativeLevel: should not change window handle - fix startup error in "Storm Angel" fix: fixed GetWindowRect to replace real desktop with virtual one - fix startup error in "Storm Angel" fix: ddraw hookers keep different original pointers for each interface: fixes several ddraw UNKNOWN_ERROR fix: eliminated the ddraw full log functionality, because of the increased complexity add: added several supported fake screen resolutions - needed for "Last resort" SWAT3 mod fix: used fake resolutions also in USER32 EnumDisplaySettings fix: avoid hooking directinput dlls if not requested when loaded dynamically fix: added recovery of lost device in DirectInput GetDeviceData method fix: changed SetHook so that it can get function pointers without necessarily replacing them add: option "Limit ddraw interface" to exclude support for IDirectDrawInterface greater than limit (range 1-7) v2.03.53(skipped) v2.03.54 (fix1+2) add: syslib shared dc mode preliminary implementation, thank to Narzoul's ideas. Works for "MS Golf 98" and "Deadlock II rel. 1.2" fix: handling of cursor hide/show for programs that don't go through the message window ("Deadlock II rel. 1.2") add: /R:n command line option to automatically start DxWnd in icon tray, run the n-th program in configuration and terminate. add: option to disable the disabling of Alt-Tab key through SetWindowHooks through WH_KEYBOARD_LL event. Make it posssible to use Alt-Tab key on "Dungeon Kepper II". fix: palette object reference count decremented from extra references and zeroed by the "Return 0 refcount" flag: make it possible to run "Dark Earth" that makes a check on the palette reerence counter before starting the game. v2.03.55 fix: differentiated handling of blitting from memory to DC vs. from DC vs. memory. The second case is less frequent, but altered the correct rendering of "Battlezone 1998 edition", now working both in scaled, emulated DC shared DC and shared ddraw and GDI DC. The fix impacts both BitBlt and ScaledBlt GDI calls. fix: prevented InvalidateRect to return giving a scaled rect. Fixes "Deadlock 2"partial screen updates. v2.03.56/fix1 add: capability to hook calls referenced by ordinal number add: "Acquire admin caps" flag to self elevate DxWnd if configured as necessary add: added third mode to handle potentially offending messages, that is process them by the Window default process routine WinDefaultProc. Good for "Red Alert 2". add: "fix clipper area in shared DC", temporary solution to adapt the shared DC mode to the different situations (yet to finish). fix: fully integrated the patch for "Silver" game: returning backbuffer as a doublebuffer also when requested with DDSCAPS_VIDEOMEMORY caps. add: FunkyFr3sh addition to process WM_SYSCOMMAND SC_CLOSE and force program termination when requested by "Terminate on window close" option. v2.03.57 fix: improved handling of clipping regions in shared dc mode add: added DWM status to log file add: flags for preliminary hook of DirectSound and Smack libraries fix: changed icon colors (yellow for red, doesn't suggest the idea of error or danger) add: menu commands for entry movement (top, bottom, up, down) or duplication v2.03/58 add: added program manifest stating Win10/8/7/Vista compatibility add: "Clear compatbility flag" tool add: "Recover screen mode" tool add: "Set path" tool fix: reorganized menu commands fix: proper handling of DEFAULT win size on CreateWindowEx - fixes "Imperialism" problem fix: fixed stretced blit operation because Blt behaves differently from StretchBlt. Fixes "3D Minigolf" partial background fix: GetPixel logging v2.03.59 fix: added extra ref to surface for ddraw version 2: fixes "Warhammer Chaos Gate" add: view shims menu command, to analyze Win7/Win10 compatibility patches GUI: added the hook tab to move hooking flags in a single tab page v2.03.60 too many things, sorry, I'll fix it later. v2.03.61 fix: set hook to ddraw SetPalette for all surface types (Drakan Order of the Flame) add: preliminary support for windowed / fullscreen switching fix: preliminary d3d7 function pointers separation for different interfaces add: block process priority class add: autohide DxWnd feature fix: GUI kill process now kills the whole process tree to avoid leaving live processes around. Happens for instance in Win7 with rundll32.exe for compatibility in 64 bit environment, and that one uses a full core CPU! fix: added CDS_UPDATEREGISTRY to the ChangeDisplaySettings modes to be neutralized. Needed in "Severance: Blade of Darkness". v2.03.62 fix: flag "Intercept Alt-F4 key" now working also alone with no need to set "Enable hot keys" fix: file open dialogs initialization on WinXP platform fix: hooked ANSI & WIDECHAR version of DirectInput8CreateDevice: makes "Gooka the Mystery of Janatris" working. fix: rebuild up-to-date dxwnd proxies v2.03.63 fix: saved config changes in case DxWnd is restarted for acquiring admin caps fix: duplicated several function pointers in D3D8/9 wrappers: fix some GTA3 crashes and reduce the need to suppress Reset operation add: flag "Widechar program vs. ANSI" to replace default ansi calls with widechar equivalents: fixes "Tomb Raider Anniversary" mouse problems v2.03.64 fix: completed the hook pointers separation per COM interface version: this is of growing importance on Win10 because of the system updates (shims?) fix: fixed incoherences in task refences of the GUI fix: recovered task kill on WinXP fix: updated RedrawWindow, now allows better handling of "Galapagos" pause screen v2.03.65 fix: handling of fullscreen switching on closest monitor (in multimonitor systems) fix: X,Y starting win position can now be negative integer (in multimonitor systems) v2.03.66 fix: terminated the separation between ddraw method interfaces fix: force clipper now builds a clipper for the real primary surface (useful when desktop composition is disabled and on XP) v2.03.67 fix: D3D7 hooks to make NBA2002 working fix: better virtual color depth settings to allow "Moto Racer 2" believe it is running on a fake 16bpp desktop fix: GUI placement coordinates are not saved when terminating in minimized or maximized state v2.03.68 add: options to limit the cpu usage of program threads, either inconditionally ("CPU slow down") or only for CPU consuming threads ("CPU max usage"). fix: some logging details v2.03.69 fix: fixed "CPU max usage" option fix: WindowFromPoint & WindowFromPointEx hooks fix: recovered partilly working implementation of "shared dc" mode add: "Suppress Win errors" option, needed to skip a blocking error and make "Migrosoft Golf '98" starting v2.03.70 add: ddraw Overlay tracing (waiting to implement an emulation strategy) add: SetWindowsHookExA logging, SetWindowsHookExW hooking fix: MessageHook logging GUI: some rearrangements / rationalizations to the interface add: INIT24BPP and INIT32BPP flags v2.03.71 fix: no need to save configuration before running with fake registry add: icons to notify for non-empty registry and notes tabs fix: hooked ddrawex.dll DirectDrawEx methods - fixes "Whiteout", what else? v2.03.72 fix: inserted bypass for DirectDraw::Compact method, that is unimplemented but can return errors. Fixes "Crazy Climber" error detection. fix: error in d3d9::CrerateDeviceEx method preventing it to work when moving fullscreen devices to window mode, as tipically happens using DxWnd. Fixes d3d9 version of "Saint's Row the Third" fix: accurate determination of ".text" or "CODE" segments where to apply the REPLACERTSC and REPLACEPRIVOPS flags. fix: error in logic to add extra reference to backbuffer surface: fixes "Warhammer 40k Rites of War". v2.03.73 fix: address hooking for GDI SetPixelFormat(): avoids resolution changes in "T-Zwey" configured for D3D8 rendering engine. fix: logic for restering last window position on multimonitor configurations add: "Help -> View Help" to show help page add: "Fix GlobalUnlock" flag to fix GlobalUnlock bad errorcodes in "Grand Prix World" and possibly other games. add: revised log configuration, added "Separate" mode to make each process to write on a dedicated file. v2.03.74 fix: logging of dwFOURCC field text value fix: Injection routine: avoid closing a few handles that should not be closed, simplified logic. add: GUI global configuration panel v2.03.75/fix1 fix: handling of restore previous screen mode when a primary fullscreen window is terminated. Fixes "Dethkarz" initialization error after 8BPP intro movie termination. fix: SystemParameterInfo for SPI_SETSCREENSAVERRUNNING does not return an error fix: added default pixel format specification to backbuffer: improves the possibility of ZBUFFER attach fix: recovery of DDERR_SURFACELOST error on primary surface in PrimaryStretchBlt routine. fix: possible palette handle leakage fix: DC leakage caused by CreateCompatibleDC. Fix "Mechwarrior 3" repeated play sessions. add: GUI drag & drop of game executables fix: RegQueryValueEx bad retcode when Data ptr is NULL fix: recovered support for Windows XP fix: fake registry did not read last registry line! Fixed. v2.03.76 fix: DC handle leakage in several places, this also fixed GDI "emulated devie context" mode. fix: FillRect wrapper, fixed coordinate remapping with wrong values. Fixes "Imperialism" menu and detailed view. fix: suppressed "reuse emulated DC" flag: it was no longer referenced in the code. fix: workaround for occasional DDERR_INVALIDPARAMS error in service GetDisplayMode to detect current video mode. fix: code cleanup: eliminated CREATEDESKTOP handling, experimental and no longer supported fix: vdxcore::IsToRemap now detects the NULL dc handle as remappable DC fix: some logging imperfections fix: palette log message crashing the program v2.03.77 fix: SetCooperativeLevel with 0 HDC should not alter fullscreen status (fixes Portugal 1111 scrolling problem) add: preliminary "Show hints" flag and feature GUI: multi-line tab control GUI: clicking on notes and registry icons the GUI goes straight to the relative tab pages. GUI: The DirectX tab is now splitted in two, so that there no longer are DirectX switches into the Direct3D tab. v2.03.78 fix: DirectDrawSurface::GetCaps now returning VIDEOMEMORY+LOCALVIDMEM type for 3DDEVICES in system memory. Fixes "Gothic 2" controls. add: Added SKIPDEVTYPEHID to avoid passing HID input devices to DirectInput::EnumDevices callback. Fixes "Jetboat Superchamps 2" crash. add: hint for OS version compatibility flag add: hint for obfuscated IAT detection add: hint for safedisk and securom game protection add: hint to show safedisc version fix: centralized handling of window styles v2.03.79 fix: proper handling of DirectInputCreateEx function - fixes "Gothik 2" mouse and window control fix: avoids setting the pixel format of a window more than once through GDI SetPixelFormat call. Fixes "Bugdom" OpenGL rendering fix: improved bilinear filtering speed through gsky916 loop optimization fix: added delay handling to several gdi32 amnd user32 routines blitting to screen v2.03.80 add: "Suppress DI common errors" flag, fixes initial failures of Acquire method. fix: in centered window option, trims the window coordinates if they exceeds the screen size and risk getting negative values. fix: fixed injection logic to avoid hooking task when the "Hook enabled" flag is off fix: avoid calling GDI SetPixelFormat more than one upon a window since this is not supported. Fixes "bugdom" OpenGL problems. fix: scales glGetIntegerv(GL_VIEWPORT) returned values. Fixes "bugdom" rendering problems. add: added GUI logging when debug mode is on. add: added a third injection mode "Inject suspended process". Modified the GUI to select the injection mode through radio buttons. Improves injection compatibility, working mode for "T-ZWei" on WinXP. v2.03.81 fix: hook AVIFileRelease to avoid call when avi file is NULL. Fixes a crash in "Die hard trilogy" fix: in DirectDrawSurface::QueryInterface added handling of Direct3DDevice objects: Needed for "Die hard trilogy" fix: hooking of DirectDrawSurface GetPalette / SetPalette methods add: added "Suppress DI common errors" for Acquire / Unacquire methods: Needed for "Die hard trilogy" add: some DirectSound methods for logging add: some Direct3D error codes for logging fix: fixed some Direct3D methods hooking fix: Direct3DDevice::AddViewport hooker now delete a viewport that is still linked to a previous device. Needed for "Die hard trilogy" fix: fixed CreateProcess hooker for "Extend injection" mode: Needed for "Die hard trilogy" v2.03.82 fix: fixed situations where the virtual desktop window was not fully blackened during initialization fix: added FlushInstructionCache call to "suspended process" injection type to make it more reliable fix: suppressed more capabilities when setting "Suppress overlay capability" flag fix: fixed logic for ZBUFFER capabilities: "The Creed" seems to have two, one in SYSTEMMEMORY and one in VIDEOMEMORY... fix: avoid setting cursor clipping when client area is returned with zero size. fix: fixed CreateProcessA hooker for "suspended process" injection type to forward all parameters to the system call add: added "Fix glBindTexture texture" flag to compensate for the missing glActiveTexture call. Fixes "bugdom" 2D panels. v2.03.83 fix: cleared surface list on primary surface creation: "Daytona USA" keeps creating new primary surfaces, so it saturated the surface list. fix: calling the proper GetGDISurface pointer in Lock wrapper fix: HookProc routine causing crash with GTA3, fixed for Win7 and Win10 fix: LoadLibrayA/W after a SetWorkingDir invocation didn't load the local modules. Fixes "The Rage". v2.03.84 add: new flag "No hook update" (HOOKNOUPDATE) to disable update of original call address in case of change add: hint message for "No hook update" condition add: hint message for memory signed integer overflow add: GUI flag "Name by Folder" to default the program name field with the program folder instead of program filename add: new flag "Set keyboard shared coop. level" (SHAREDKEYBOARD) to change directinput keyboard cooperative level mode add: new flag Direct3D / "Enumerate 16bit modes" (ENUM16BITMODES) to force enumeration of 16 bit video modes on Win10 desktop when not listed fix: GUI randomic value for Injection mode selector when adding new entry v2.03.85 add: added control to avoid hide of tray window. Useful for "Planet of the Apes" fix: fixed BIG window coordinates. Fixes "Deer Hunter" window positioning problems. fix: mciSendCommand wrapper for BYPASSMCI flag v2.03.86 fix: completely revised the "Keep aspect ratio" flag, now should work with multi-windowed games too. add: multi-monitor handling with dynamic detection and monitor selection fix: basic class reorganization - now it is a little more neat and simple add: added 1280x1024 resolution limit add: mult hooks option now available in global settings panel add: viewfinder to grab coordinates from a window on screen v2.03.87 fix: possibility to use @ token instead of "" in fake registry fix: independent hooking of DirectDraw3 objects, needed for "Theocracy" fix: eliminated shared hooking of "Compact" ddraw methods add: improved caps masking in debug mode, now can change any flags fix: added missing hook for DirectDraw3 in QueryInterface fix: fixed wrong hook for GetGDISurface in DirectDraw3 interface fix: eliminated dialog box when hooking ddrawex fix: eliminated experimental hook to auxGetNumDevs returning 1 available device always. Fixes problems with "Imperialism II" v2.03.88 fix: revised (simpler) window handling, hopefully more reliable (Diablo no longer crashes on fake-fullscreen modes?) fix: eliminated hook of smackw32.dll to reach GDI32/user32 calls beneath fix: added ddraw hooking in ddrawex/CreateDirectDraw() call: now "Theocracy" works with default "Automatic" ddraw hooking fix: added hook for EnumDisplayDevicesW used by "Battleground Europe" fix: added "Hide multi monitors" logic to EnumDisplayDevicesA/W v2.03.89 fix: replaced hooked LoadLibrary with original call (*pLoadLibraryA), this seems to avoid the hook address replacements and the need for the "No hook update" flag. To be tested. fix: added some missing IID_DirectDraw3 case in DirectDraw hooking fix: fixed the logic for centering the main window for desktop with non-zero offset fix: improved logic for window placement in CreateWindowEx call fix: added wrapper for winmm/GetJoyPos() virtual joystick referenced in "Jane's FA18" v2.03.90 add: added flags/fields to define initial/maximum screen resolution add: "Lock color depth" ddraw flag. Fixes "Ahlgrens Bilspelet" color problems add: preliminary opengl/glut32 hook fix: ZBUFFER capabilities - allow "Galapagos" to run in hw accelerated mode fix: separated D3D FindDevice hookers for D3D version 1/2/3 fix: some unused code cleanup v2.03.91 fix: lowered priority level for dinput/GetDeviceState log message to debug fix: added unlock of source surface in EmuBlt* routines add: reintroduced SmackW32.dll hooking - necessary for "Galapagos" intro movie fix: fixed GDI32 CreateDCA/W, hookers (pretty much reverted to previous working code...) add: preliminary hook for OpenGL glCopyTexImage2D add: OpenGL better logging fix: defaulting process all textures for limit = 0,0 fix: manages the possibility or ValidateRect receiving a NULL RECT pointer - fix "Galapagos" crash in GDI scaled mode add: auto-blit mode in SmakW32 frame loop - shows "Galapagos" company logo intro movie fix: force stop blitting on window minimize event - fixes "Galapagos" and many others .... v2.03.91.fx1-5: fix: eliminated LOC causing bad window sizing fix: better desktop hider management fix: DC emulation object leakage - fixes "Yu No" leakage fix: USER32 EndPaint DC leakage - fixes "Yu No" leakage fix: window position problems fix: GUI auto hide mode enabled and disabled without need of GUI restart fix: ddraw surface stack policy. Recovers "Warhammer 40K Rites of War" after v2.03.83 fix. add: /q quiet mode, no message dialogs on screen v2.03.92.fx1-2: add: option "Fix FreeLibrary" to emulate the Win9X behaviour returning errorcode upon attempts to free a deallocated module. Fixes "Heavy Gear" patch 1.2 endless loop problem. fix: added reference to Palette object to allow final Release() without crash - fixes "Heavy Gear" crash at end of mission fix: fix RECT structure passed to ddraw::Unlock method in case it points to bad coordinates. Fixes FIFA2000 in D3D mode fix: wrapped all OpenGL GetString methods and inserted proper logging. For diagnostic purposes. fix: fix ddraw::SetPalette wrapper in case lppd is NULL. Fixes Adrenix sw mode crash. fix: better way to manage extra modules to be hooked (Glide ddls, SmackW32) v2.03.93: add: GUI game icon extracted also form separated *.ico icon file add: GUI definition of default values for window position fix: ddrawsurface::Unlock lprect usage: doesn't use the input value but refers to rect passed in Lock operation. Fixes "fifa 2000" crash. fix: avoid issuing a GetPalette method against a deallocated object fix: automatic creation of Clipper object if needed for emulated ddraw blit to primary surface - fixes the well known black blitting problem fix: proper handling of dinput DirectInputDevice::GetDeviceData() DI_BUFFEROVERFLOW error condition fix: user32 GetCursorPos() wrapper fix: user32 mouse_event() wrapper v2.03.94.fx1-3: fix: aligned Lock cheats in Direct/Indirect mode ...... fix: no window interventions in non windowed mode. Fix "Gunbound" in fullscreen mode fix: avoid multiple injection for early-hooked programs. Fix "Gunbound" regression. fix: Restore of all lost surfaces upon D3D BeginScene DDERR_LOSTSURFACE error. Fix "Gunbound" lost textures in fullscreen mode. add: more logging in mciSendCommand - possibly some regression problem... fix: corrected clipping bug introduced in v2.03.93. fix: SetWindowLog hooker preventing to set DxWnd windowproc when not in fullscreen mode. Fixes "Nascar Racing 3" recursion and crash. fix: eliminated useless filter to suppress high resolutions detection in PREVENTMAXIMAZE mode fix: fixed mciSendCommand wrapper log messages that could crash the program v2.03.95: fix: fixed prototype for ICDrawBegin wrapper add: extended logging for mci multimedia API add: window position selector & "locked size" + "anchored" modes fix: transient mode when system tray is not available fix: recursion problem in kernel32 LoadLibrary* wrappers. Allows "Hot patch" on WinXP. fix: initial position problem. v2.03.96: preliminary handling of hidden window fix: handling of non-windowed mode. Fixes "Warhammer 40.000 Rites of War" in non-windowed mode add: NODDEXCLUSIVEMODE flag. Forces non exclusive ddraw coop level in non-windowed mode. Fixes "Warhammer 40.000 Rites of War" in non-windowed mode add: CLEARTEXTUREFOURCC flag. Suppresses FOURCC capability and handling. Should help to process compressed textures. fix: CreateDIBSection wrapper log messages fix: PREVENTMAXIMIZE window size checks: should avoid size bigger than initial size, bugged coding inhibited any growth. fix: GUI setting of execution folder when running "Launcher" task. v2.03.97.rc1/fx1-3: fix: emulation of proper ddraw surface capabilities in GetSurfaceDesc() and GetCaps() methods. Seems to cope with needs of most (all?) games. fix: recovered handling of WM_ERASEBKGND message. Fixes missing backgrounds in "Adrenix" and "Adrenix 3D" games. fix: cleaned up and unified capability handling in DirectDrawSurface GetCaps and GetSurfaceDesc methods add: warning message and update when running a program with non updated virtual registry settings.fix: LoadLibrary wrappers failed to clear the recursion flag, stopping the hook of new modules after a recursion case. add: warning messages when closing DxWnd and possibility to cancel the operation v2.03.98/fx1 add: fine tuning for vsync options: three modes (default: game native, force on, force off) three algorythms (ddraw WaitForVerticalBlank, loop controlled by GetScanLine, loop controlled by time delay) add: fine tuning for WAIT options in ddraw Flip() and Blt() methods: three modes (default: game native, force on, force off) fix: better support for non windowed + no emulation mode, surfaces and blit operations are left (almost) in original state, surface capabilities are left inaltered fix: added missing recovery on surface lost fix: some missing or wrong logs fix: suppression of WS_EX_TOPMOST flag in all conditions for UNLOCKZORDER mode fix: SUPPRESSOVERLAY flag applied also to D3D capabilities from D3D GetDeviceCaps() method add: added more API hookers in IMAGEHLP.DLL bypass fix: fixed logic to hook WindowProc routines for main window, childs and dialogs. fix: more frequent updates of window coordinates to avoid scaling errors fix: fixed CreateDialogIndirectParam and CreateDialogParam wrappers to make inner windows properly scaled (fixes red Alert 2) fix: recovered DEFAULTMESSAGES option fix: normalized output for ddraw GetScanLine() method fix: fixed the policy for redrecting the WindowProc routine. Fixes "Ultimate Spiderman" clipping problems, and possibly much more v2.03.99 fix: unwanted hook to directsound when passing by CoCreateInstance() fix: transient mode, now checks for both the target and the launcher to be dead before terminating add: Direct3D TRIMTEXTUREFORMAT flag, to mimic MS "DirectXTrimTextureFormat" shim. Fixes problems in "Heavy Gear 2" and "Star Wars: Rogue Squardon 3D". add: D3DDevice GetCaps hooking and full dump of D3DDevice capabilities add: "No HAL Device" flag, making it unavailable the IID_Direct3DHALDevice device. Fixes "Grand Prix World" when the 3D car models are invisible. add: reorganization of mouse clipper fields, with the addition of LOCK mode (useful for Tribal Rage) v2.04.00/fx1 add: texture management for D3D textures: XCTn compressed textures, raw mode, texture highlight and hack add: Input / "fix MOUSEHOOK callback" option, fixes "Jagged Alliance 2" mouse problems add: GDI / "Pretend Win visible & on top" option: experimental, let the program believe that the main window is visible and on top of z-order as usually happens to full screen applications add: GDI / "Win insulation" flag: avoid enumerating windows so that the program can't interfere with them. Fixes "Tribal Rage" damages to desktop. add: hook to ddraw DuplicateSurface() method, so far for logging only. fix: eliminated possible divide by 0 exception when minimizing windows fix: mouse clipping now selected by radio buttons (default, off, on, locked) fix: bug in D3D device enumeration log fix: bug in Hybrid and GDI ddraw surface rendering fix: missing "No HAL Device" flag default to disabled fix: improvements in texture handling, dds format support for DirectDraw textures v2.04.01/fx5 add: preliminary WinG32 handling add: minimal WinG32 replacement, thank to Wine source code add: DirectX(2)/"Create a Desktop Win" option. Fixes "Man TT Super Bike" add: new hooking schema for IAT organized like original "Al Unser Jr. Arcade Racing" fix: in virtual registry fix to handle the '@' void label case properly fix: added hook for RegQueryValueA, used by "Warhammer 40.000 Shadow of the Horned Rat" fix: virtual registry logging add: added SmackW32 hooking to bypass SmackColorRemapWithTrans and SmackColorRemap: SmackColorRemap seems involved in changing screen resolution in "Civil War Generals 2" fix: some log messages fix: SetWindowLong hooker: eliminated a unassigned variable condition fix: added hooker for GDI32/SetROP2 call to insert a InvalidateRect as in older OS. Makes "Titanic" working. fix: added hooker for Smack32/SmackSetSystemRes call to prevent resolution change and set proper virtual screen size: see "Spearhead" fix: fixed virtual screen size initialization so that it doesn't override settings defined before first window creation: see "Spearhead" fix: fixed error condition when DirectDraw::GetCaps is invoked with wrong length - fix "Spearhead" bug fix?: ZBUFFER original capabilities passed to new surface created by QueryInterface - so far, useless v2.04.02 fix: avoid crashing on View Shims command on WinXP fix: bilinear 2X crash fix: handling of 16 to 32 bpp color conversion in D3D8 IDirect3DDevice8 Copyrects and GetFrontBuffer methods. Fixes "Dirt track Racing 2" missing panels. fix: more / better logging fix: in USER32/CreateWindow* calls, handles the case where a to-be main window is moved/resized before being declared as main window. Fixes uncontrolled position changes in "Civil Wars 2 Generals". add: preliminary hooks for message loop APIs USER32/PeekMessage, GetMessage, PostMessage. Now PeekMessage includes SLOWDOW flag processing, reduces CPU time in "Civil Wars 2 Generals". v2.04.03-fx1 add: D3D8 16bpp backbuffer emulation on 32bpp color depth. Fixes "Dangerous Waters" on 32bpp Win8-10 add: more OpenGL wgl* hooks, used by "StarSiege 2014". fix: using correct version method pointers in bilinear blit, avoids crash in "Daytona USA" using bilinear filtering fix: do not try to CloseHandle the handle returned by GetMenu, avoids debugger exceptions. v2.04.04 GUI: add: run unhooked command fix: improved logic to propose config save only when virtual registry string is potentially updated fix: when hooking is disabled, STARTDEBUG and INJECTSUSPENDED processing don't take place DLL: fix: crashing condition on "hide desktop background" option - fixes M&MVI crash fix: mouse loop coordinate fix when main window is not set fix: eliminated log of dmDeviceName field in ChangeDisplaySettings* calls because the field may be not initialized fix: NOMOVIES option now stops also SmackW32 movies (making movie length only 1 photogram). v2.04.05 GUI: add: preliminary implementation of Dummy/Expert GUI modes fix: "Explore" command implementation for WinXP DLL: add: preliminary implementation of virtual registry tokens to make configuration relocable fix: capability fix on surface creation. DDSCAPS_TEXTURE is replaced by DDSCAPS_OFFSCREENPLAIN. Fixes "Dominant Species" on certain situations where the surface creatuion returns DDERR_UNSUPPORTED code. add: preliminary hook for GDI32 RemoveFontResources and EnumFonts fix: CreateRectRgnIndirect wrapper altered input RECT* coordinates fix: separated D3D QueryInterface pointers and wrappers, added wrapping for QueryInterface D3D v7 fix: log cleanup add: "Dynamic ZBUFFER fix" flag (DYNAMICZCLEAN): needed to fix some of "Tonic Trouble" rendering problems. add: OpenGL dedicated logging add: WinG32 dedicated logging fix?: bypass for WM_FONTCHANGE: avoids "Warhammer: Shadow of the Horned Rat" crash when entering battle add: WinG32 debug highlighting of blitted rects on screen add: GDI32 debug highlighting of blitted rects on screen add: hooks for GDI32 GetTextExtentPointA and GetTextExtentPoint32A: needed for proper string rendering on "Warhammer: Shadow of the Horned Rat" add: hook for GDI32 GdiAlphaBlend, very rare call that appeared in "RHEM" during savegame load. v2.04.06/fx3 GUI: add: Expert mode add: experimental dump od DIB sections and blitted dc for debugging purposes DLL: fix: corrected condition to print two virtual registry log messages fix: improved logic to recover surfaces with DDSCAPS_TEXTURE capability - ref. "Dominant Species" fix: fixed cursor clipping state and toggle key to make it work in all conditions fix: D3D objects hooking with QueryInterface method. Fixes "Wizardry Chronicle" fix: add hook for GDI32 GdiGradientFill and GdiTransparentBlt, present in "RHEM" fix: log messages for CloseHandle wrapper fix: log messages for GetPixel wrapper fix: window position in MoveWindow for ANCHORED mode and big windows fix: DialogBoxParamA wrapper v2.04.07 fix: QueryInterface wrapper for ddraw classes unified in a single procedure. fix: D3D2 SwapTextureHandles hook fix - fixes "Wizardry Chronicle" texture problems fix: string overflow in TextureHack procedure for D3D1-7 textures v2.04.08/fx1 fix: improved DIB dumping & logging: fixed BMP header with negative size, dump only when DIB has attached image fix: safe CreateWindow mode, preserves original size & position within win creation. Fixes "Warhammer SotHR" blitting problems fix: virtual registry file created by GUI and not extracted by the dll. Ths avoids getting the first matching entry. fix: "Scale font parameters" fully revised, also renamed to "Scale font size" add: "High quality fonts" flag to force antialiasing font style fix: ddraw surface capability regression for emulated backbuffer: fixes "Dominant Species" textures in SW mode fix: ddraw surface capability regression for direct primary/backbuffer: should fix "Tomb raider 3" in HW mode fix: ddraw surface capability regression for zbuffer: fixes "Toca Touring Car" in SW mode fix: in fx1, bug crashing app when querying unknown interfaces! v2.04.09 add: hook USER32 AdjustWindowRect/Ex calls: fix window position problems for "Man TT Superbike" add: hook for USER32 GetActiveWindow() tracing. fix: version hooking for IDIrectDraw methods called by IDIrectDrawSurface methods: fixes many crashes on ddraw games fix: capability registration passed in IDIrectDrawSurface::QueryInterface() calls: fixes settings for ZBUFFER surfaces fix: capsdb logging (developer's use only) fix: handling of WM_NCCALCSIZE & WM_NCPAINT messages in winproc hooker to align behaviour to comment. To be tested ... v2.04.10 GUI: add: view flags window (expert mode only) DLL: fix: prevent InvalidateRect on desktop, eliminates some flickering fix: ZBUFFER capability management - fixes "Galapagos" in HW mode (but it may crash because of the intro movie...) fix: logging of log flags fix: D3D8/9 QueryInterface fully revisited add: (very) preliminary texture transparency hack v2.04.11 GUI: add: "Kill all" menu command on expert mode add: "Lower background priority" flag add: "Include menu in clipper area" flag DLL: fix: decrement virtual reference counter in case of 3D surfaces with ZBuffer (experimental): fixes "Microsoft International Soccer 2000". add: more message types in window message logging fix: fixed mouse clipper logic and moved code in dxwCore class fix: fixed GDI palette syncronization with ddraw: recovers "Hyperblade" black screen in gameplay fix: unhooked USER32 GetParent() call, causing recursion in hot patch mode, blanked dialogs ("Galapagos") and in general more problems than benefits fix: fixed AdjustWindowRect/Ex() wrapper to always neutralize window changes (good for "Man TT Superbike") fix: fixed message processing for FORCEWINRESIZE: now "Man TT Superbike" can be moved and resized (at least on Win10). add: added BACKGROUNDPRIORITY handling add: added CLIPMENU handling v2.04.12 GUI: add: "Support offscreen 3D" flag (OFFSCREENZBUFFER) DLL: fix: recursion bug in CreateWindowExA hooker add: OFFSCREENZBUFFER flag v2.04.13 fix: moved USER32/InvalidateRect hooker to always activate it and further reduce desktop flickering fix: fixed virtual registry tags that introduced extra characters in key string expansion add: hooked SelectClipRgn - preliminary to attempt fixing "Sid Meier's Alpha Centauri" fix: fixed unsupported call to SetWindowsHook(WH_CBT, NULL). Fixes "Starsiege" deaf mouse control. fix: completed and rebuilt proxy dlls to be aligned with current DxWnd structure v2.04.14 fix: virtual registry parser, token names now case insensitive (es. "path" = "Path") fix: virtual registry crash when replacing tokens and lplpData is NULL fix: virtual registry return code, must not return ERROR_MORE_DATA when lpData is NULL (fixes "Rollcage II") fix: eliminated error message in virtual palette processing when color depth is 8 bits fix: improved logging in EnumDisplayModes wrapper fix: EnumDisplayModes wrapper for nonemulated nonwindowed mode fix: deleted improper input clipper destruction after primary surface destruction. Fixes "Settlers III" clipper problems add: virtual heap (makes some "Wing Commander" games work) fix: freak help->about... add: GUI "Tools->Recover system colors" utility v2.04.15 fix: suppress DDERR_EXCLUSIVEMODEALREADYSET error in ddraw::SetCooperativeLevel(). Fixes program termination in "Sid Meier's Alpha centauri". fix: exception caught on DirectDrawSurface::Release(): it may fix problems when using ddraw proxies fix: added clipper object to ddraw QueryInterface management fix: added IID_UNKNOWN object to ddraw QueryInterface management fix: better implementation of LIMITRESOURCES flag: now HD virtual space is 100MB free in a 120MB disk. fix: SLOWDOWN flag in PeekMessage now uses dxw.DoSlow(1) instead of *pSleep(1), preserves more messages add: more cases in mciSendCommand wrapper for BYPASSMCI flag fix: in mciSendCommand using ANSI MCI_OVLY_WINDOW_PARMS instead of WIDECHAR version fix: DirectDraw:GetCaps wrapper crash when setting SUPPRESSOVERLAY and the hw or sw caps pointer is NULL fix: exception when trying to use ddraw SetAppCompatData and LoadLibrary failed fix: error messages on LoadLibrary errors v2.04.16 add: improved virtual joystick with configuration and monitoring panel, invert axis options, show crossfire. fix: GetAttachedSurface now simulates also the primary surface as attach to backbuffer. Fixes GTA first episode windows version. v2.04.17 add: 2 more DWORD flags, unused for now add: virtual joystick sensivity control fix: check on ZBUFFER capability attribution in case the capsdb holds a wrong capability belonging to a different surface that was deleted add: "Fix LoadLibrary error" flag (LOADLIBRARYERR) to return ERROR_DLL_NOT_FOUND instead of ERROR_MOD_NOT_FOUND error code. Fixes "Nightmare Creatures". add: "Hybrid" flag for "Shared ddraw & GDI DC" mode - reduces "Star Treck: Armada" problems. v2.04.18 add: "Fix AdjustWindowRect" flag (FIXADJUSTWINDOWRECT) to selectively turn the AdjustWindowRect coordinate patching. The flag must be checked for "Man TT Super Bike" and unckecked for "Imperialism II". add: "Hook child WindowProc" and "Hook dialog WindowProc" flags for better control over these risky operations. fix: bad GetParent hook: caused crash when checking "Hook child WindowProc" flag. fix: improvements in "Hybrid" emulation mode v2.04.19/fx1 fix: major code reorganization: caps database & surface stack merged into a single object class, including ZBUFFER surfaces fix: eliminated arbitrary surface properties settings fix: joystick api promoted to hot patching to get a more powerful hooking add: hooking of WM_STYLECHANGING/STYLECHANGED messages to allow D3D rendering within the window borders instead of over the whole window area - fixes "Nightmare Creatures" and others. fix: fixed "Need fos Speed 5" peculiarity: QueryInterface of an object on top of itself. v2.04.20 GUI: add: two more 32bit words for additional flags add: timestamp and dxwnd version added to exported files fix: window style selector through radio buttons fix: implementation of View->Shims DLL: add: management of 3DREF surfaces to handle D3D CreateDevice with offscreen surface add: FIXTHINFRAME option to get overlapped window with thin border fix: revised implementation for DirectDrawSurface getCaps and GetSurfaceDesc wrappers add: hooker for SetWindowsHookEx WH_MOUSE_LL events - used by "Royal Tramp 2" fix: added WM_NCMOUSELEAVE to the list of potentially offending messages v2.04.21 fix: proxed calls to SetCooperativeLevel with no specification for screen mode changes fix: locked rect fix applied only in case of not NULL rect specification. Fixes "Shadow Watch" font blitting problems. fix: DirectDrawEnumerate/Ex wrappers now filter video devices properly when a given monitor is selected. Partially fixes "The Sting!" behaviour on multi-monitor environment. fix: aligned primary surface capabilities for flipped native and emulated modes add: wrappers for ddraw7 StartModeTest and EvaluateMode methods only for logging fix: wrapper for SetCooperativeLevel proxy the call when flags is DDSCL_FPUPRESERVE or DDSCL_FPUSETUP only. Seen in "G-Darius" add: separated logging flag for structures hexdump fix: eliminated initial logging for undefined virtual keys (useless) fix: fixed unconditional logging for USER32:PolyLine add: diagniostic DC dump in GDI32:SetDIBitsToDevice wrapper fix: GDI32:SetViewportOrgEx wrapper when ddraw surface is still missing add: in ddraw::QueryInterface, logging for detection of Clipper or Palette objects fix: fix for /c:path argument of DxWnd command line usage, now can accept full file paths fix: log=none as default value for new dxwnd program entries ================================================ FILE: dll/Inject.cpp ================================================ #define _CRT_SECURE_NO_WARNINGS #include #include #include #include #include #define WIN32_LEAN_AND_MEAN #define true 1 #define false 0 #include "Winternl.h" BOOL Inject(DWORD pID, const char * DLL_NAME) { HANDLE hProc, hThread; HMODULE hLib; char buf[50] = {0}; LPVOID RemoteString, LoadLibAddy; if(!pID) return false; //hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pID); // not working on Win XP hProc = OpenProcess(PROCESS_CREATE_THREAD|PROCESS_QUERY_INFORMATION|PROCESS_VM_OPERATION|PROCESS_VM_READ|PROCESS_VM_WRITE, FALSE, pID); if(!hProc){ sprintf(buf, "OpenProcess() failed: pid=%x err=%d", pID, GetLastError()); MessageBox(NULL, buf, "Loader", MB_OK); return false; } hLib=GetModuleHandle("kernel32.dll"); if(!hLib){ sprintf(buf, "GetModuleHandle(\"kernel32.dll\") failed: err=%d", pID, GetLastError()); MessageBox(NULL, buf, "Loader", MB_OK); return false; } LoadLibAddy = (LPVOID)GetProcAddress(hLib, "LoadLibraryA"); if(!LoadLibAddy){ sprintf(buf, "GetProcAddress(\"LoadLibraryA\") failed: err=%d", pID, GetLastError()); MessageBox(NULL, buf, "Loader", MB_OK); return false; } // Allocate space in the process for the DLL RemoteString = (LPVOID)VirtualAllocEx(hProc, NULL, strlen(DLL_NAME), MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE); // Write the string name of the DLL in the memory allocated if(!WriteProcessMemory(hProc, (LPVOID)RemoteString, DLL_NAME, strlen(DLL_NAME), NULL)){ sprintf(buf, "WriteProcessMemory() failed: err=%d", pID, GetLastError()); MessageBox(NULL, buf, "Loader", MB_OK); return false; } // Load the DLL hThread=CreateRemoteThread(hProc, NULL, 0, (LPTHREAD_START_ROUTINE)LoadLibAddy, (LPVOID)RemoteString, 0, NULL); // Free/Release/Close everything VirtualFreeEx(hProc, RemoteString, strlen(DLL_NAME), MEM_RELEASE); if(!hThread){ sprintf(buf, "CreateRemoteThread() failed: pid=%x err=%d", pID, GetLastError()); MessageBox(NULL, buf, "Loader", MB_OK); CloseHandle(hProc); return false; } if(!SetThreadPriority(hThread, THREAD_PRIORITY_TIME_CRITICAL)){ sprintf(buf, "SetThreadPriority() failed: err=%d", GetLastError()); MessageBox(NULL, buf, "Loader", MB_OK); } CloseHandle(hThread); CloseHandle(hProc); //CloseHandle(hLib); return true; } #define STATUS_SUCCESS ((NTSTATUS)0x000 00000L) #define ThreadQuerySetWin32StartAddress 9 LPVOID GetThreadStartAddress(HANDLE hThread) { NTSTATUS ntStatus; HANDLE hDupHandle; HMODULE hLibNTHandle; LPVOID dwStartAddress; typedef NTSTATUS (WINAPI *NtQueryInformationThread_Type)(HANDLE, THREADINFOCLASS, PVOID, ULONG, PULONG); hLibNTHandle = GetModuleHandle("ntdll.dll"); if(!hLibNTHandle) return 0; NtQueryInformationThread_Type NtQueryInformationThread = (NtQueryInformationThread_Type)GetProcAddress(hLibNTHandle, "NtQueryInformationThread"); if(NtQueryInformationThread == NULL) return 0; HANDLE hCurrentProcess = GetCurrentProcess(); if(!DuplicateHandle(hCurrentProcess, hThread, hCurrentProcess, &hDupHandle, THREAD_QUERY_INFORMATION, FALSE, 0)){ SetLastError(ERROR_ACCESS_DENIED); return 0; } ntStatus = NtQueryInformationThread(hDupHandle, (THREADINFOCLASS)ThreadQuerySetWin32StartAddress, &dwStartAddress, sizeof(DWORD), NULL); CloseHandle(hDupHandle); CloseHandle(hLibNTHandle); //if(ntStatus != STATUS_SUCCESS) return 0; return dwStartAddress; } ================================================ FILE: dll/advapi.cpp ================================================ #define _CRT_SECURE_NO_WARNINGS #include #include "dxwnd.h" #include "dxwcore.hpp" #include "syslibs.h" #include "dxhook.h" #include "dxhelper.h" typedef LONG (WINAPI *RegFlushKey_Type)(HKEY); LONG WINAPI extRegFlushKey(HKEY); RegFlushKey_Type pRegFlushKey = NULL; typedef LONG (WINAPI *RegEnumValueA_Type)(HKEY, DWORD, LPTSTR, LPDWORD, LPDWORD, LPDWORD, LPBYTE, LPDWORD); LONG WINAPI extRegEnumValueA(HKEY, DWORD, LPTSTR, LPDWORD, LPDWORD, LPDWORD, LPBYTE, LPDWORD); RegEnumValueA_Type pRegEnumValueA = NULL; static HookEntryEx_Type Hooks[]={ {HOOK_IAT_CANDIDATE, 0, "RegOpenKeyExA", NULL, (FARPROC *)&pRegOpenKeyEx, (FARPROC)extRegOpenKeyEx}, {HOOK_IAT_CANDIDATE, 0, "RegCloseKey", NULL, (FARPROC *)&pRegCloseKey, (FARPROC)extRegCloseKey}, {HOOK_IAT_CANDIDATE, 0, "RegQueryValueA", NULL, (FARPROC *)&pRegQueryValue, (FARPROC)extRegQueryValue}, {HOOK_IAT_CANDIDATE, 0, "RegQueryValueExA", NULL, (FARPROC *)&pRegQueryValueEx, (FARPROC)extRegQueryValueEx}, {HOOK_IAT_CANDIDATE, 0, "RegCreateKeyA", NULL, (FARPROC *)&pRegCreateKey, (FARPROC)extRegCreateKey}, {HOOK_IAT_CANDIDATE, 0, "RegCreateKeyExA", NULL, (FARPROC *)&pRegCreateKeyEx, (FARPROC)extRegCreateKeyEx}, {HOOK_IAT_CANDIDATE, 0, "RegSetValueExA", NULL, (FARPROC *)&pRegSetValueEx, (FARPROC)extRegSetValueEx}, {HOOK_IAT_CANDIDATE, 0, "RegFlushKey", NULL, (FARPROC *)&pRegFlushKey, (FARPROC)extRegFlushKey}, // v2.3.36 {HOOK_IAT_CANDIDATE, 0, "RegEnumValueA", NULL, (FARPROC *)&pRegEnumValueA, (FARPROC)extRegEnumValueA}, {HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator }; void HookAdvApi32(HMODULE module) { if( (dxw.dwFlags3 & EMULATEREGISTRY) || (dxw.dwFlags4 & OVERRIDEREGISTRY) || (dxw.dwFlags6 & (WOW32REGISTRY|WOW64REGISTRY)) || (dxw.dwTFlags & OUTREGISTRY)) HookLibraryEx(module, Hooks, "ADVAPI32.dll"); } FARPROC Remap_AdvApi32_ProcAddress(LPCSTR proc, HMODULE hModule) { FARPROC addr; if(!(dxw.dwFlags3 & EMULATEREGISTRY) || (dxw.dwFlags4 & OVERRIDEREGISTRY) || (dxw.dwFlags6 & (WOW32REGISTRY|WOW64REGISTRY)) || (dxw.dwTFlags & OUTREGISTRY)) return NULL; if (addr=RemapLibraryEx(proc, hModule, Hooks)) return addr; return NULL; } #define HKEY_FAKE ((HKEY)0x7FFFFFFF) #define HKEY_MASK 0x7FFFFF00 #define IsFake(hKey) (((DWORD)hKey & HKEY_MASK) == HKEY_MASK) static FILE *OpenFakeRegistry(); static char *hKey2String(HKEY); static LONG myRegOpenKeyEx(HKEY, LPCTSTR, PHKEY); // int ReplaceVar(pData, lplpData, lpcbData): // extract the token name from pData beginning up to '}' delimiter // calculates the value of the token. If the token is unknown, the value is null string. // if *lplpData, copies the token value string to *lplpData and increments *lplpData // if lpcbData, increments the key length of the token value length // returns the length of token label to advance the parsing loop typedef enum { LABEL_PATH = 0, LABEL_WORKDIR, LABEL_VOID, LABEL_END }; static char *sTokenLabels[LABEL_END+1]={ "path}", "work}", "}", NULL }; static int ReplaceVar(char *pData, LPBYTE *lplpData, LPDWORD lpcbData) { int iTokenLength; int iLabelLength; int iTokenIndex; char sTokenValue[MAX_PATH]; // search for a matching token for(iTokenIndex=0; sTokenLabels[iTokenIndex]; iTokenIndex++){ if(!_strnicmp(pData, sTokenLabels[iTokenIndex], strlen(sTokenLabels[iTokenIndex]))) break; } // set token label length iLabelLength = strlen(sTokenLabels[iTokenIndex]); // do replacement switch(iTokenIndex){ case LABEL_PATH: case LABEL_WORKDIR: GetCurrentDirectory(MAX_PATH, sTokenValue); break; case LABEL_VOID: case LABEL_END: strcpy(sTokenValue, ""); break; } // set output vars if not NULL iTokenLength = strlen(sTokenValue); OutTraceR("REPLACED token=%d val=\"%s\" len=%d\n", iTokenIndex, sTokenValue, iTokenLength); if(*lplpData) { strcpy((char *)*lplpData, sTokenValue); *lplpData += iTokenLength; } if(lpcbData) *lpcbData += iTokenLength; // return label length to advance parsing return iLabelLength; } static char *hKey2String(HKEY hKey) { char *skey; static char sKey[MAX_PATH+1]; static char skeybuf[10]; if(IsFake(hKey)) { FILE *regf; char RegBuf[MAX_PATH+1]; regf=OpenFakeRegistry(); if(regf!=NULL){ HKEY hLocalKey=HKEY_FAKE; fgets(RegBuf, 256, regf); while (!feof(regf)){ if(RegBuf[0]=='['){ if(hLocalKey == hKey){ //OutTrace("building fake Key=\"%s\" hKey=%x\n", sKey, hKey); fclose(regf); strcpy(sKey, &RegBuf[1]); //sKey[strlen(sKey)-2]=0; // get rid of "]" for(int i=strlen(sKey)-1; i; i--){ if(sKey[i]==']'){ sKey[i]=0; break; } } return sKey; } else { hLocalKey--; } } fgets(RegBuf, 256, regf); } fclose(regf); } return "HKEY_NOT_FOUND"; } switch((ULONG)hKey){ case HKEY_CLASSES_ROOT: skey="HKEY_CLASSES_ROOT"; break; case HKEY_CURRENT_CONFIG: skey="HKEY_CURRENT_CONFIG"; break; case HKEY_CURRENT_USER: skey="HKEY_CURRENT_USER"; break; case HKEY_LOCAL_MACHINE: skey="HKEY_LOCAL_MACHINE"; break; case HKEY_USERS: skey="HKEY_USERS"; break; default: sprintf(skeybuf, "0x%x", hKey); skey=skeybuf; break; } return skey; } static char *Unescape(char *s, char **dest) { if(!*dest) *dest=(char *)malloc(strlen(s)+100); else *dest=(char *)realloc(*dest, strlen(s)+100); char *t = *dest; for(; *s; s++){ if((*s=='\\') && (*(s+1)=='n')){ *t++ = '\n'; s++; } else{ *t++ = *s; } } *t=0; return *dest; } static FILE *OpenFakeRegistry() { DWORD dwAttrib; char sSourcePath[MAX_PATH+1]; char *p; dwAttrib = GetFileAttributes("dxwnd.dll"); if (dwAttrib != INVALID_FILE_ATTRIBUTES && !(dwAttrib & FILE_ATTRIBUTE_DIRECTORY)) return NULL; GetModuleFileName(GetModuleHandle("dxwnd"), sSourcePath, MAX_PATH); p=&sSourcePath[strlen(sSourcePath)-strlen("dxwnd.dll")]; strcpy(p, "dxwnd.reg"); return fopen(sSourcePath,"r"); } static LONG SeekFakeKey(FILE *regf, HKEY hKey) { LONG res; res = ERROR_FILE_NOT_FOUND; char RegBuf[MAX_PATH+1]; HKEY hCurKey=HKEY_FAKE+1; fgets(RegBuf, 256, regf); while (!feof(regf)){ if(RegBuf[0]=='['){ hCurKey--; } if(hCurKey==hKey) { //OutTraceB("DEBUG: SeekFakeKey fount key at line=%s\n", RegBuf); res = ERROR_SUCCESS; break; } fgets(RegBuf, 256, regf); } return res; } static LONG SeekValueName(FILE *regf, LPCTSTR lpValueName) { LONG res; char RegBuf[MAX_PATH+1]; long KeySeekPtr; res = ERROR_FILE_NOT_FOUND; // v2.04.01: fix to handle the '@' case properly if(lpValueName) if(!lpValueName[0]) lpValueName=NULL; KeySeekPtr = ftell(regf); fgets(RegBuf, 256, regf); while (!feof(regf)){ if((RegBuf[0]=='"') && !_strnicmp(lpValueName, &RegBuf[1], strlen(lpValueName)) && (RegBuf[strlen(lpValueName)+1]=='"') && (RegBuf[strlen(lpValueName)+2]=='=')) { fseek(regf, KeySeekPtr, SEEK_SET); return ERROR_SUCCESS; } if(!lpValueName && (RegBuf[0]=='@')){ fseek(regf, KeySeekPtr, SEEK_SET); return ERROR_SUCCESS; } if(RegBuf[0]=='[') return res; KeySeekPtr = ftell(regf); fgets(RegBuf, 256, regf); } return res; } static LONG SeekValueIndex(FILE *regf, DWORD dwIndex, LPCTSTR lpValueName, LPDWORD lpcchValueName) { LONG res; char RegBuf[MAX_PATH+1]; long KeySeekPtr; res = ERROR_NO_MORE_ITEMS; KeySeekPtr = ftell(regf); fgets(RegBuf, 256, regf); dwIndex++; while (!feof(regf) && dwIndex){ if(RegBuf[0]=='"') dwIndex--; if(dwIndex == 0){ fseek(regf, KeySeekPtr, SEEK_SET); //sscanf(RegBuf, "\"%s\"=", lpValueName); strncpy((char *)lpValueName, strtok(&RegBuf[1], "\""), *lpcchValueName); *lpcchValueName = strlen(lpValueName); //OutTrace("DEBUG: lpValueName=%s len=%d\n", lpValueName, *lpcchValueName); return ERROR_SUCCESS; } if(RegBuf[0]=='[') return res; KeySeekPtr = ftell(regf); fgets(RegBuf, 256, regf); } return res; } static DWORD GetKeyValue( FILE *regf, char *ApiName, LPCTSTR lpValueName, LPDWORD lpType, // beware: could be NULL LPBYTE lpData, // beware: could be NULL LPDWORD lpcbData) { LONG res; LPBYTE lpb; char *pData; char RegBuf[MAX_PATH+1]; DWORD cbData=0; //OutTrace("GetKeyValue: ValueName=%s\n", lpValueName); fgets(RegBuf, 256, regf); if(RegBuf[0]=='@') pData=&RegBuf[2]; else pData=&RegBuf[strlen(lpValueName)+3]; lpb = lpData; if(lpcbData) { cbData = *lpcbData; *lpcbData=0; } do { if(*pData=='"'){ // string value if(lpType) *lpType=REG_SZ; pData++; while(*pData && (*pData != '"')){ if(*pData=='\\') { pData++; switch(*pData){ case '{':{ pData++; // skip '{' pData += ReplaceVar(pData, &lpb, lpcbData); continue; // v2.04.13 fix } break; default: break; // skip first '\' } } if(lpData && lpcbData) if(*lpcbData < cbData) *lpb++=*pData; pData++; if(lpcbData) (*lpcbData)++; } if(lpcbData) (*lpcbData)++; // extra space for string terminator ? if(lpData && lpcbData) if(*lpcbData < cbData) *lpb = 0; // string terminator OutTraceR("%s: type=REG_SZ cbData=%d Data=\"%s\"\n", ApiName, lpcbData ? *lpcbData : 0, lpData ? (char *)lpData : "(NULL)"); // v2.04.14 fix: ERROR_MORE_DATA should be returned only in case lpData is not NULL res=ERROR_SUCCESS; if(lpData && lpcbData) if (*lpcbData > cbData) res = ERROR_MORE_DATA; break; } if(!strncmp(pData,"dword:",strlen("dword:"))){ //dword value DWORD val; if(lpType) *lpType=REG_DWORD; pData+=strlen("dword:"); sscanf(pData, "%x", &val); if(lpData) { if (cbData >= sizeof(DWORD)) { memcpy(lpData, &val, sizeof(DWORD)); res=ERROR_SUCCESS; } else res=ERROR_MORE_DATA; } else res=ERROR_SUCCESS; // data not needed if (lpcbData) *lpcbData=sizeof(DWORD); OutTraceR("%s: type=REG_DWORD cbData=%x Data=0x%x\n", ApiName, lpcbData ? *lpcbData : 0, val); break; } if(!strncmp(pData,"hex:",strlen("hex:"))){ //hex value BYTE *p; if(lpType) *lpType=REG_BINARY; p = (BYTE *)pData; p+=strlen("hex:"); while(TRUE){ p[strlen((char *)p)-1]=0; // eliminates \n at the end of line while(strlen((char *)p)>1){ if((*lpcbData < cbData) && lpData){ sscanf((char *)p, "%x,", (char *)lpb); lpb++; } p+=3; if(lpcbData) (*lpcbData)++; } if(p[strlen((char *)p)-1]=='\\'){ fgets(RegBuf, 256, regf); pData = RegBuf; p = (BYTE *)pData; } else break; } OutTraceR("%s: type=REG_BINARY cbData=%d Data=%s\n", ApiName, lpcbData ? *lpcbData : 0, lpData ? "(NULL)" : hexdump(lpData, *lpcbData)); res=(*lpcbData > cbData) ? ERROR_MORE_DATA : ERROR_SUCCESS; break; } } while(FALSE); return res; } static void LogKeyValue(char *ApiName, LONG res, LPDWORD lpType, LPBYTE lpData, LPDWORD lpcbData) { char sInfo[1024]; if(res) { OutTrace("%s: ERROR res=%d\n", ApiName, res); return; } sprintf(sInfo, "%s: res=ERROR_SUCCESS size=%d type=%x(%s)", ApiName, lpcbData?*lpcbData:0, lpType?*lpType:0, lpType?ExplainRegType(*lpType):"none"); if(lpType && lpData && lpcbData) { DWORD cbData = *lpcbData; switch(*lpType){ case REG_SZ: sprintf(sInfo, "%s Data=\"%*.*s\"\n", sInfo, cbData-1, cbData-1, lpData); break; case REG_DWORD: sprintf(sInfo, "%s Data=0x%x\n", sInfo, *(DWORD *)lpData); break; case REG_BINARY: sprintf(sInfo, "%s Data=%s\n", sInfo, hexdump((BYTE *)lpData, cbData)); break; case REG_NONE: sprintf(sInfo, "%s Data=\"%s\"\n", sInfo, lpData); break; default: sprintf(sInfo, "%s Data=???\n", sInfo); break; } } else sprintf(sInfo, "%s\n", sInfo); OutTrace(sInfo); } static LONG myRegOpenKeyEx( LPCSTR label, HKEY hKey, LPCTSTR lpSubKey, PHKEY phkResult) { FILE *regf; char sKey[MAX_PATH+1]; char RegBuf[MAX_PATH+1]; sprintf(sKey,"%s\\%s", hKey2String(hKey), lpSubKey); OutTraceR("%s: searching for key=\"%s\"\n", label, sKey); regf=OpenFakeRegistry(); if(regf!=NULL){ if(phkResult) *phkResult=HKEY_FAKE; fgets(RegBuf, 256, regf); while (!feof(regf)){ if(RegBuf[0]=='['){ // beware: registry keys are case insensitive. Must use _strnicmp instead of strncmp if((!_strnicmp(&RegBuf[1],sKey,strlen(sKey))) && (RegBuf[strlen(sKey)+1]==']')){ OutTraceR("%s: found fake Key=\"%s\" hkResult=%x\n", label, sKey, phkResult ? *phkResult : 0); fclose(regf); return ERROR_SUCCESS; } else { if(phkResult) (*phkResult)--; } } fgets(RegBuf, 256, regf); } fclose(regf); } return ERROR_FILE_NOT_FOUND; } // --------------------------------------------------------------------------------- LONG WINAPI extRegOpenKeyEx( HKEY hKey, LPCTSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult) { LONG res; OutTraceR("RegOpenKeyEx: hKey=%x(%s) SubKey=\"%s\" Options=%x\n", hKey, hKey2String(hKey), lpSubKey, ulOptions); if(dxw.dwFlags4 & OVERRIDEREGISTRY){ res = myRegOpenKeyEx("RegOpenKeyEx", hKey, lpSubKey, phkResult); if(res == ERROR_SUCCESS) return res; } if(dxw.dwFlags6 & WOW64REGISTRY){ ulOptions &= ~KEY_WOW64_32KEY; ulOptions |= KEY_WOW64_64KEY; } if(dxw.dwFlags6 & WOW32REGISTRY){ ulOptions &= ~KEY_WOW64_64KEY; ulOptions |= KEY_WOW64_32KEY; } res=(*pRegOpenKeyEx)(hKey, lpSubKey, ulOptions, samDesired, phkResult); OutTraceR("RegOpenKeyEx: res=%x phkResult=%x\n", res, phkResult ? *phkResult : 0); if((res==ERROR_SUCCESS) || !(dxw.dwFlags3 & EMULATEREGISTRY) || (dxw.dwFlags4 & OVERRIDEREGISTRY)) return res; return myRegOpenKeyEx("RegOpenKeyEx", hKey, lpSubKey, phkResult); } // extRegQueryValue: legacy API, almost always replaced by extRegQueryValueEx but referenced // in "Warhammer 40.000 Shadow of the Horned Rat" LONG WINAPI extRegQueryValue( HKEY hKey, LPCTSTR lpSubKey, LPTSTR lpValue, PLONG lpcbValue) { LONG res; FILE *regf; OutTraceR("RegQueryValue: hKey=%x(%s) SubKey=\"%s\"\n", hKey, hKey2String(hKey), lpSubKey); if (!IsFake(hKey)){ res=(*pRegQueryValue)(hKey, lpSubKey, lpValue, lpcbValue); if(IsTraceR) LogKeyValue("RegQueryValue", res, 0, (LPBYTE)lpValue, (LPDWORD)lpcbValue); return res; } regf=OpenFakeRegistry(); if(regf==NULL) { OutTraceR("RegQueryValue: error in OpenFakeRegistry err=%s\n", GetLastError()); return ERROR_FILE_NOT_FOUND; } res = SeekFakeKey(regf, hKey); if(res != ERROR_SUCCESS) { OutTraceR("RegQueryValue: error in SeekFakeKey res=%x hKey=%x\n", res, hKey); return res; } res = SeekValueName(regf, lpSubKey); if(res != ERROR_SUCCESS) { OutTraceR("RegQueryValue: error in SeekValueName res=%x ValueName=%s\n", res, lpSubKey); return res; } res = GetKeyValue(regf, "RegQueryValue", lpSubKey, NULL, (LPBYTE)lpValue, (LPDWORD)lpcbValue); if(IsTraceR) LogKeyValue("RegQueryValue", res, NULL, (LPBYTE)lpValue, (LPDWORD)lpcbValue); fclose(regf); return res; } LONG WINAPI extRegQueryValueEx( HKEY hKey, LPCTSTR lpValueName, LPDWORD lpReserved, LPDWORD lpType, // beware: could be NULL LPBYTE lpData, // beware: could be NULL LPDWORD lpcbData) { LONG res; FILE *regf; DWORD cbData=0; OutTraceR("RegQueryValueEx: hKey=%x(\"%s\") ValueName=\"%s\" Reserved=%x lpType=%x lpData=%x lpcbData=%x\n", hKey, hKey2String(hKey), lpValueName, lpReserved, lpType, lpData, lpcbData); if (!IsFake(hKey)){ res=(*pRegQueryValueEx)(hKey, lpValueName, lpReserved, lpType, lpData, lpcbData); if(IsTraceR) LogKeyValue("RegQueryValueEx", res, lpType, lpData, lpcbData); return res; } regf=OpenFakeRegistry(); if(regf==NULL) { OutTraceR("RegQueryValueEx: error in OpenFakeRegistry err=%s\n", GetLastError()); return ERROR_FILE_NOT_FOUND; } res = SeekFakeKey(regf, hKey); if(res != ERROR_SUCCESS) { OutTraceR("RegQueryValueEx: error in SeekFakeKey res=%x hKey=%x\n", res, hKey); return res; } res = SeekValueName(regf, lpValueName); if(res != ERROR_SUCCESS) { OutTraceR("RegQueryValueEx: error in SeekValueName res=%x ValueName=%s\n", res, lpValueName); return res; } res = GetKeyValue(regf, "RegQueryValueEx", lpValueName, lpType, lpData, lpcbData); if(IsTraceR) LogKeyValue("RegQueryValueEx", res, lpType, lpData, lpcbData); fclose(regf); return res; } LONG WINAPI extRegCloseKey(HKEY hKey) { OutTraceR("RegCloseKey: hKey=%x\n", hKey); if (IsFake(hKey)) return ERROR_SUCCESS; return (*pRegCloseKey)(hKey); } LONG WINAPI extRegFlushKey(HKEY hKey) { OutTraceR("RegFlushKey: hKey=%x\n", hKey); if (IsFake(hKey)) return ERROR_SUCCESS; return (*pRegFlushKey)(hKey); } LONG WINAPI extRegSetValueEx(HKEY hKey, LPCTSTR lpValueName, DWORD Reserved, DWORD dwType, const BYTE *lpData, DWORD cbData) { if (IsTraceR){ char sInfo[1024]; sprintf(sInfo, "RegSetValueEx: hKey=%x ValueName=\"%s\" Type=%x(%s) cbData=%d", hKey, lpValueName, dwType, ExplainRegType(dwType), cbData); switch(dwType){ case REG_DWORD: OutTrace("%s Data=%x\n", sInfo, *(DWORD *)lpData); break; case REG_NONE: OutTrace("%s Data=\"%s\"\n", sInfo, lpData); break; case REG_BINARY: OutTrace("%s Data=%s\n", sInfo, hexdump((BYTE *)lpData, cbData)); break; case REG_SZ: OutTrace("%s Data=\"%*.*s\"\n", sInfo, cbData-1, cbData-1, lpData); break; default: OutTrace("%s\n", sInfo); } } if(IsFake(hKey) && (dxw.dwFlags3 & EMULATEREGISTRY)) { OutTraceR("RegSetValueEx: SUPPRESS registry key set\n"); return ERROR_SUCCESS; } return (*pRegSetValueEx)(hKey, lpValueName, Reserved, dwType, lpData, cbData); } LONG WINAPI extRegCreateKeyEx(HKEY hKey, LPCTSTR lpSubKey, DWORD Reserved, LPTSTR lpClass, DWORD dwOptions, REGSAM samDesired, LPSECURITY_ATTRIBUTES lpSecurityAttributes, PHKEY phkResult, LPDWORD lpdwDisposition) { OutTraceR("RegCreateKeyEx: hKey=%x(%s) SubKey=\"%s\" Class=%x\n", hKey, hKey2String(hKey), lpSubKey, lpClass); if (dxw.dwFlags3 & EMULATEREGISTRY){ *phkResult = HKEY_FAKE; // V2.3.12: return existing fake key if any .... if(dxw.dwFlags4 & OVERRIDEREGISTRY) myRegOpenKeyEx("RegCreateKeyEx", hKey, lpSubKey, phkResult); if(lpdwDisposition) *lpdwDisposition=REG_OPENED_EXISTING_KEY; return ERROR_SUCCESS; } else return (*pRegCreateKeyEx)(hKey, lpSubKey, Reserved, lpClass, dwOptions, samDesired, lpSecurityAttributes, phkResult, lpdwDisposition); } LONG WINAPI extRegCreateKey(HKEY hKey, LPCTSTR lpSubKey, PHKEY phkResult) { OutTraceR("RegCreateKey: hKey=%x(%s) SubKey=\"%s\"\n", hKey, hKey2String(hKey), lpSubKey); if (dxw.dwFlags3 & EMULATEREGISTRY){ *phkResult = HKEY_FAKE; // V2.3.12: return existing fake key if any .... if(dxw.dwFlags4 & OVERRIDEREGISTRY) myRegOpenKeyEx("RegCreateKey", hKey, lpSubKey, phkResult); return ERROR_SUCCESS; } else return (*pRegCreateKey)(hKey, lpSubKey, phkResult); } LONG WINAPI extRegEnumValueA(HKEY hKey, DWORD dwIndex, LPTSTR lpValueName, LPDWORD lpcchValueName, LPDWORD lpReserved, LPDWORD lpType, LPBYTE lpData, LPDWORD lpcbData) { LONG res; OutTraceR("RegEnumValue: hKey=%x(\"%s\") index=%d cchValueName=%d Reserved=%x lpType=%x lpData=%x lpcbData=%x\n", hKey, hKey2String(hKey), dwIndex, *lpcchValueName, lpReserved, lpType, lpData, lpcbData); if (!IsFake(hKey)){ res=(*pRegEnumValueA)(hKey, dwIndex, lpValueName, lpcchValueName, lpReserved, lpType, lpData, lpcbData); if(IsTraceR) LogKeyValue("RegQueryValueEx", res, lpType, lpData, lpcbData); return res; } // try emulated registry FILE *regf; regf=OpenFakeRegistry(); if(regf==NULL) return ERROR_FILE_NOT_FOUND; res = SeekFakeKey(regf, hKey); if(res != ERROR_SUCCESS) return res; res = SeekValueIndex(regf, dwIndex, lpValueName, lpcchValueName); if(res != ERROR_SUCCESS) return res; res = GetKeyValue(regf, "RegEnumValue", lpValueName, lpType, lpData, lpcbData); if(IsTraceR) LogKeyValue("RegEnumValue", res, lpType, lpData, lpcbData); fclose(regf); return res; } #ifdef TOBEDONE LONG WINAPI RegQueryInfoKey( _In_ HKEY hKey, _Out_opt_ LPTSTR lpClass, _Inout_opt_ LPDWORD lpcClass, _Reserved_ LPDWORD lpReserved, _Out_opt_ LPDWORD lpcSubKeys, _Out_opt_ LPDWORD lpcMaxSubKeyLen, _Out_opt_ LPDWORD lpcMaxClassLen, _Out_opt_ LPDWORD lpcValues, _Out_opt_ LPDWORD lpcMaxValueNameLen, _Out_opt_ LPDWORD lpcMaxValueLen, _Out_opt_ LPDWORD lpcbSecurityDescriptor, _Out_opt_ PFILETIME lpftLastWriteTime ); #endif ================================================ FILE: dll/avifile.cpp ================================================ #define _CRT_SECURE_NO_WARNINGS #include #include "dxwnd.h" #include "dxwcore.hpp" //#include "syslibs.h" #include "dxhook.h" #include "dxhelper.h" #include typedef VOID (WINAPI *AVIFileInit_Type)(void); typedef LONG (WINAPI *AVIFileRelease_Type)(PAVIFILE); typedef LONG (WINAPI *AVIStreamRelease_Type)(PAVISTREAM); typedef PGETFRAME (WINAPI *AVIStreamGetFrameOpen_Type)(PAVISTREAM, LPBITMAPINFOHEADER); typedef HRESULT (WINAPI *AVIFileOpenA_Type)(PAVIFILE *, LPCTSTR, UINT, LPCLSID); typedef HRESULT (WINAPI *AVIFileOpenW_Type)(PAVIFILE *, LPCWSTR, UINT, LPCLSID); typedef HRESULT (WINAPI *AVIFileGetStream_Type)(PAVIFILE, PAVISTREAM *, DWORD, LONG); AVIFileInit_Type pAVIFileInit = NULL; AVIFileRelease_Type pAVIFileRelease = NULL; AVIStreamRelease_Type pAVIStreamRelease = NULL; AVIStreamGetFrameOpen_Type pAVIStreamGetFrameOpen = NULL; AVIFileOpenA_Type pAVIFileOpenA = NULL; AVIFileOpenW_Type pAVIFileOpenW = NULL; AVIFileGetStream_Type pAVIFileGetStream = NULL; VOID WINAPI extAVIFileInit(void); LONG WINAPI extAVIFileRelease(PAVIFILE); LONG WINAPI extAVIStreamRelease(PAVISTREAM); PGETFRAME WINAPI extAVIStreamGetFrameOpen(PAVISTREAM, LPBITMAPINFOHEADER); HRESULT extAVIFileOpenA(PAVIFILE *, LPCTSTR, UINT, LPCLSID); HRESULT extAVIFileOpenW(PAVIFILE *, LPCWSTR, UINT, LPCLSID); HRESULT WINAPI extAVIFileGetStream(PAVIFILE, PAVISTREAM *, DWORD, LONG); static HookEntryEx_Type Hooks[]={ //{HOOK_IAT_CANDIDATE, 0, "AVIFileClose", NULL, (FARPROC *)&pAVIFileClose, (FARPROC)extAVIFileClose}, {HOOK_IAT_CANDIDATE, 0, "AVIFileInit", NULL, (FARPROC *)&pAVIFileInit, (FARPROC)extAVIFileInit}, // hooking AVIFileOpenA makes "Die Hard Trilogy" DIEHARD.EXE crash! //{HOOK_IAT_CANDIDATE, 0, "AVIFileOpenA", NULL, (FARPROC *)&pAVIFileOpenA, (FARPROC)extAVIFileOpenA}, //{HOOK_IAT_CANDIDATE, 0, "AVIFileOpenW", NULL, (FARPROC *)&pAVIFileOpenW, (FARPROC)extAVIFileOpenW}, {HOOK_IAT_CANDIDATE, 0, "AVIFileRelease", NULL, (FARPROC *)&pAVIFileRelease, (FARPROC)extAVIFileRelease}, {HOOK_IAT_CANDIDATE, 0, "AVIStreamRelease", NULL, (FARPROC *)&pAVIStreamRelease, (FARPROC)extAVIStreamRelease}, {HOOK_IAT_CANDIDATE, 0, "AVIStreamGetFrameOpen", NULL, (FARPROC *)&pAVIStreamGetFrameOpen, (FARPROC)extAVIStreamGetFrameOpen}, {HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator }; void HookAVIFil32(HMODULE module) { HookLibraryEx(module, Hooks, "AVIFIL32.dll"); } FARPROC Remap_AVIFil32_ProcAddress(LPCSTR proc, HMODULE hModule) { FARPROC addr; if (addr=RemapLibraryEx(proc, hModule, Hooks)) return addr; return NULL; } static char *AviErr(HRESULT res) { char *s; switch (res){ case AVIERR_BADFORMAT: s="AVIERR_BADFORMAT"; break; case AVIERR_MEMORY: s="AVIERR_MEMORY"; break; case AVIERR_FILEREAD: s="AVIERR_FILEREAD"; break; case AVIERR_FILEOPEN: s="AVIERR_FILEOPEN"; break; case REGDB_E_CLASSNOTREG: s="REGDB_E_CLASSNOTREG"; break; case AVIERR_NODATA: s="AVIERR_NODATA"; break; case AVIERR_BUFFERTOOSMALL: s="AVIERR_BUFFERTOOSMALL"; break; default: s="unknown"; break; } return s; } // OF_CREATE Creates a new file. If the file already exists, it is truncated to zero length. // OF_PARSE Skips time-consuming operations, such as building an index. Set this flag if you want the function to return as quickly as possiblefor example, if you are going to query the file properties but not read the file. // OF_READ Opens the file for reading. // OF_READWRITE Opens the file for reading and writing. // OF_SHARE_DENY_NONE Opens the file nonexclusively. Other processes can open the file with read or write access. AVIFileOpen fails if another process has opened the file in compatibility mode. // OF_SHARE_DENY_READ Opens the file nonexclusively. Other processes can open the file with write access. AVIFileOpen fails if another process has opened the file in compatibility mode or has read access to it. // OF_SHARE_DENY_WRITE Opens the file nonexclusively. Other processes can open the file with read access. AVIFileOpen fails if another process has opened the file in compatibility mode or has write access to it. // OF_SHARE_EXCLUSIVE Opens the file and denies other processes any access to it. AVIFileOpen fails if any other process has opened the file. // OF_WRITE Opens the file for writing. static char *AviMode(UINT c) { static char eb[256]; unsigned int l; strcpy(eb,"OF_"); if (c & OF_CREATE) strcat(eb, "CREATE+"); if (c & OF_PARSE) strcat(eb, "PARSE+"); if (c & OF_READ) strcat(eb, "READ+"); if (c & OF_READWRITE) strcat(eb, "READWRITE+"); if (c & OF_SHARE_DENY_NONE) strcat(eb, "SHARE_DENY_NONE+"); if ((c & OF_SHARE_DENY_READ) == OF_SHARE_DENY_READ) strcat(eb, "SHARE_DENY_READ+"); // 0x30, there are two bits .... if (c & OF_SHARE_DENY_WRITE) strcat(eb, "SHARE_DENY_WRITE+"); if (c & OF_SHARE_EXCLUSIVE) strcat(eb, "SHARE_EXCLUSIVE+"); if (c & OF_WRITE) strcat(eb, "WRITE+"); l=strlen(eb); if (l>strlen("OF_")) eb[l-1]=0; // delete last '+' if any else eb[0]=0; return(eb); } VOID WINAPI extAVIFileInit(void) { OutTraceDW("AVIFileInit\n"); (*pAVIFileInit)(); } HRESULT extAVIFileOpenA(PAVIFILE *ppfile, LPCSTR szFile, UINT mode, LPCLSID pclsid) { HRESULT res; if(IsTraceDW){ char sClassId[80]; if(pclsid) sprintf_s(sClassId, 80, "%x.%x.%x.%x", pclsid->Data1, pclsid->Data2, pclsid->Data3, pclsid->Data4); else strcpy(sClassId, "(null)"); OutTrace("AVIFileOpenA: file=\"%s\" mode=%x(%s) clsid=%s\n", szFile, mode, AviMode(mode), sClassId); } res = (*pAVIFileOpenA)(ppfile, szFile, mode, pclsid); if(res) { OutTraceDW("AVIFileOpenA ERROR: res=%x(%s)\n", res, AviErr(res)); } else { OutTraceE("AVIFileOpenA: pfile=%x\n", *ppfile); } return res; } HRESULT extAVIFileOpenW(PAVIFILE *ppfile, LPCWSTR szFile, UINT mode, LPCLSID pclsid) { HRESULT res; if(IsTraceDW){ char sClassId[80]; if(pclsid) sprintf_s(sClassId, 80, "%x.%x.%x.%x", pclsid->Data1, pclsid->Data2, pclsid->Data3, pclsid->Data4); else strcpy(sClassId, "(null)"); OutTrace("AVIFileOpenW: file=\"%ls\" mode=%x(%s) clsid=%s\n", szFile, mode, AviMode(mode), sClassId); } return (*pAVIFileOpenW)(ppfile, szFile, mode, pclsid); res = (*pAVIFileOpenW)(ppfile, szFile, mode, pclsid); if(res) { OutTraceDW("AVIFileOpenW ERROR: res=%x(%s)\n", res, AviErr(res)); } else { OutTraceE("AVIFileOpenW: pfile=%x\n", *ppfile); } return res; } HRESULT WINAPI extAVIFileGetStream(PAVIFILE pfile, PAVISTREAM *ppavi, DWORD fccType, LONG lParam) { HRESULT res; OutTraceDW("AVIFileGetStream: pfile=%x fcctype=%x lparam=%x\n", pfile, fccType, lParam); res = (*pAVIFileGetStream)(pfile, ppavi, fccType, lParam); if(res) { OutTraceDW("AVIFileGetStream ERROR: res=%x(%s)\n", res, AviErr(res)); } else { OutTraceE("AVIFileGetStream: pavi=%x\n", *ppavi); } return res; } LONG WINAPI extAVIFileRelease(PAVIFILE pavi) { OutTraceDW("AVIFileRelease: pavi=%x\n", pavi); if(pavi==NULL) { // intercepting AVIFileRelease(NULL) avoids an exception in "Die Hard Trilogy" !!! OutTraceE("AVIFileRelease: pavi=NULL condition - returns OK\n"); return 0; } return (*pAVIFileRelease)(pavi); } LONG WINAPI extAVIStreamRelease(PAVISTREAM pavi) { OutTraceDW("AVIStreamRelease: pavi=%x\n", pavi); if(pavi==NULL) { OutTraceE("AVIFileRelease: pavi=NULL condition - returns OK\n"); return 0; } return (*pAVIStreamRelease)(pavi); } PGETFRAME WINAPI extAVIStreamGetFrameOpen(PAVISTREAM pavi, LPBITMAPINFOHEADER lpbiWanted) { if(IsTraceDW){ char sColor[12]; switch ((DWORD)lpbiWanted){ case 0: strcpy(sColor, "DEFAULT"); break; case AVIGETFRAMEF_BESTDISPLAYFMT: strcpy(sColor, "BEST"); break; default: sprintf(sColor,"%d", lpbiWanted->biBitCount); } OutTrace("AVIStreamGetFrameOpen: pavi=%x lpbiwanted=%x bitcount=%s\n", pavi, lpbiWanted, sColor); } if((dxw.dwFlags6 & FIXMOVIESCOLOR) && (((DWORD)lpbiWanted == 0) || ((DWORD)lpbiWanted == AVIGETFRAMEF_BESTDISPLAYFMT))){ BITMAPINFOHEADER biWanted; memset(&biWanted, 0, sizeof(BITMAPINFOHEADER)); biWanted.biSize = sizeof(BITMAPINFOHEADER); biWanted.biBitCount = (WORD)dxw.VirtualPixelFormat.dwRGBBitCount; biWanted.biPlanes = 1; if(biWanted.biBitCount < 32) biWanted.biClrUsed = (0x1 << biWanted.biBitCount); // 8 -> 256; else biWanted.biClrUsed = 0; biWanted.biClrImportant = biWanted.biClrUsed; return (*pAVIStreamGetFrameOpen)(pavi, &biWanted); } return (*pAVIStreamGetFrameOpen)(pavi, lpbiWanted); } ================================================ FILE: dll/comctl32.cpp ================================================ #define _CRT_SECURE_NO_WARNINGS #include #include "dxwnd.h" #include "dxwcore.hpp" #include "syslibs.h" #include "dxhook.h" #include "dxhelper.h" typedef BOOL (WINAPI *InitializeFlatSB_Type)(HWND); InitializeFlatSB_Type pInitializeFlatSB = NULL; BOOL WINAPI extInitializeFlatSB(HWND); typedef BOOL (WINAPI *UninitializeFlatSB_Type)(HWND); InitializeFlatSB_Type pUninitializeFlatSB = NULL; BOOL WINAPI extUninitializeFlatSB(HWND); static HookEntryEx_Type Hooks[]={ {HOOK_IAT_CANDIDATE, 0, "InitializeFlatSB", NULL, (FARPROC *)&pInitializeFlatSB, (FARPROC)extInitializeFlatSB}, {HOOK_IAT_CANDIDATE, 0, "UninitializeFlatSB", NULL, (FARPROC *)&pUninitializeFlatSB, (FARPROC)extUninitializeFlatSB}, {HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator }; void HookComCtl32(HMODULE module) { HookLibraryEx(module, Hooks, "comctl32.dll"); } FARPROC Remap_ComCtl32_ProcAddress(LPCSTR proc, HMODULE hModule) { FARPROC addr; if (addr=RemapLibraryEx(proc, hModule, Hooks)) return addr; return NULL; } BOOL WINAPI extInitializeFlatSB(HWND hwnd) { BOOL ret; OutTraceDW("InitializeFlatSB: hwnd=%x\n", hwnd); if(dxw.IsFullScreen() && dxw.IsRealDesktop(hwnd)) { OutTraceDW("InitializeFlatSB: hwnd=%x->%x\n", hwnd, dxw.GethWnd()); hwnd = dxw.GethWnd(); } ret = (*pInitializeFlatSB)(hwnd); if(!ret)OutTraceDW("InitializeFlatSB: ret=%x\n", ret); return ret; } BOOL WINAPI extUninitializeFlatSB(HWND hwnd) { BOOL ret; OutTraceDW("InitializeFlatSB: hwnd=%x\n", hwnd); if(dxw.IsFullScreen() && dxw.IsRealDesktop(hwnd)) { OutTraceDW("UninitializeFlatSB: hwnd=%x->%x\n", hwnd, dxw.GethWnd()); hwnd = dxw.GethWnd(); } ret = (*pUninitializeFlatSB)(hwnd); if(!ret)OutTraceDW("UninitializeFlatSB: ret=%x\n", ret); return ret; } ================================================ FILE: dll/comdlg32.cpp ================================================ #define _CRT_SECURE_NO_WARNINGS #include #include "dxwnd.h" #include "dxwcore.hpp" #include "syslibs.h" #include "dxhook.h" #include "dxhelper.h" typedef BOOL (WINAPI *GetFileNameA_Type)(LPOPENFILENAMEA); typedef BOOL (WINAPI *GetFileNameW_Type)(LPOPENFILENAMEW); GetFileNameA_Type pGetOpenFileNameA = NULL; GetFileNameA_Type pGetSaveFileNameA = NULL; GetFileNameW_Type pGetOpenFileNameW = NULL; GetFileNameW_Type pGetSaveFileNameW = NULL; BOOL WINAPI extGetSaveFileNameA(LPOPENFILENAMEA); BOOL WINAPI extGetOpenFileNameA(LPOPENFILENAMEA); BOOL WINAPI extGetSaveFileNameW(LPOPENFILENAMEW); BOOL WINAPI extGetOpenFileNameW(LPOPENFILENAMEW); static HookEntryEx_Type Hooks[]={ {HOOK_IAT_CANDIDATE, 0, "GetSaveFileNameA", NULL, (FARPROC *)&pGetSaveFileNameA, (FARPROC)extGetSaveFileNameA}, {HOOK_IAT_CANDIDATE, 0, "GetOpenFileNameA", NULL, (FARPROC *)&pGetOpenFileNameA, (FARPROC)extGetOpenFileNameA}, {HOOK_IAT_CANDIDATE, 0, "GetSaveFileNameW", NULL, (FARPROC *)&pGetSaveFileNameW, (FARPROC)extGetSaveFileNameW}, {HOOK_IAT_CANDIDATE, 0, "GetOpenFileNameW", NULL, (FARPROC *)&pGetOpenFileNameW, (FARPROC)extGetOpenFileNameW}, {HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator }; void HookComDlg32(HMODULE module) { HookLibraryEx(module, Hooks, "comdlg32.dll"); } FARPROC Remap_ComDlg32_ProcAddress(LPCSTR proc, HMODULE hModule) { FARPROC addr; if (addr=RemapLibraryEx(proc, hModule, Hooks)) return addr; return NULL; } BOOL WINAPI extGetSaveFileNameA(LPOPENFILENAMEA lpofn) { BOOL ret, FullScreen; FullScreen = dxw.IsFullScreen(); OutTraceDW("GetSaveFileNameA: FullScreen=%x\n", FullScreen); dxw.SetFullScreen(FALSE); ret = (*pGetSaveFileNameA)(lpofn); dxw.SetFullScreen(FullScreen); OutTraceDW("GetSaveFileNameA: ret=%x\n", ret); return ret; } BOOL WINAPI extGetOpenFileNameA(LPOPENFILENAMEA lpofn) { BOOL ret, FullScreen; FullScreen = dxw.IsFullScreen(); OutTraceDW("GetOpenFileNameA: FullScreen=%x\n", FullScreen); dxw.SetFullScreen(FALSE); ret = (*pGetOpenFileNameA)(lpofn); dxw.SetFullScreen(FullScreen); OutTraceDW("GetOpenFileNameA: ret=%x\n", ret); return ret; } BOOL WINAPI extGetSaveFileNameW(LPOPENFILENAMEW lpofn) { BOOL ret, FullScreen; FullScreen = dxw.IsFullScreen(); OutTraceDW("GetSaveFileNameW: FullScreen=%x\n", FullScreen); dxw.SetFullScreen(FALSE); ret = (*pGetSaveFileNameW)(lpofn); dxw.SetFullScreen(FullScreen); OutTraceDW("GetSaveFileNameW: ret=%x\n", ret); return ret; } BOOL WINAPI extGetOpenFileNameW(LPOPENFILENAMEW lpofn) { BOOL ret, FullScreen; FullScreen = dxw.IsFullScreen(); OutTraceDW("GetOpenFileNameW: FullScreen=%x\n", FullScreen); dxw.SetFullScreen(FALSE); ret = (*pGetOpenFileNameW)(lpofn); dxw.SetFullScreen(FullScreen); OutTraceDW("GetOpenFileNameW: ret=%x\n", ret); return ret; } ================================================ FILE: dll/cpulimit.cpp ================================================ #include #include #include #include "dxwnd.h" #include "dxwcore.hpp" #define MAX_THREAD_ARRAY 40 // forward declarations BOOL SlowCpuSpeed(DWORD, DWORD, int); BOOL LimitCpuUsage(DWORD, DWORD, int); DWORD WINAPI CpuSlow(LPVOID lpThreadParameter) { int iSlowDownRatio = dxw.SlowRatio; DWORD dwOwnerPID = GetCurrentProcessId(); DWORD dwOwnerThread = GetCurrentThreadId(); OutTrace("starting CPUSlow dwOwnerPID=%x Ratio=1:%d\n", dwOwnerPID, iSlowDownRatio); if(!dwOwnerPID) return FALSE; if(iSlowDownRatio < 1) return FALSE; Sleep(100); while(TRUE) SlowCpuSpeed(dwOwnerPID, dwOwnerThread, iSlowDownRatio); return TRUE; } DWORD WINAPI CpuLimit(LPVOID lpThreadParameter) { int iSlowDownRatio = dxw.SlowRatio; DWORD dwOwnerPID = GetCurrentProcessId(); DWORD dwOwnerThread = GetCurrentThreadId(); OutTrace("starting CPULimit dwOwnerPID=%x Ratio=1:%d\n", dwOwnerPID, iSlowDownRatio); if(!dwOwnerPID) return FALSE; if(iSlowDownRatio < 1) return FALSE; return LimitCpuUsage(dwOwnerPID, dwOwnerThread, iSlowDownRatio); } BOOL SlowCpuSpeed(DWORD dwOwnerPID, DWORD dwOwnerThread, int iSlowDownRatio) { HANDLE hThreadSnap = INVALID_HANDLE_VALUE; THREADENTRY32 te32; HANDLE SuspThreads[MAX_THREAD_ARRAY]; int iThreadIndex, iNumThreads; // Take a snapshot of all running threads hThreadSnap = CreateToolhelp32Snapshot( TH32CS_SNAPTHREAD, 0 ); if(hThreadSnap == INVALID_HANDLE_VALUE) { OutTrace("LimitCpuUsage: CreateToolhelp32Snapshot ERROR err=%d\n", GetLastError()); return FALSE; } // Fill in the size of the structure before using it. te32.dwSize = sizeof(THREADENTRY32); // Retrieve information about the first thread, and exit if unsuccessful if(!Thread32First(hThreadSnap, &te32)){ OutTrace("Thread32First ERROR: err=%d\n", GetLastError()); // Show cause of failure CloseHandle(hThreadSnap); // Must clean up the snapshot object! return FALSE; } // Now walk the thread list of the system, // and stop each low-priority thread iThreadIndex = 0; do { if( (te32.th32OwnerProcessID == dwOwnerPID) && (te32.th32ThreadID != dwOwnerThread) && (te32.tpBasePri < THREAD_PRIORITY_TIME_CRITICAL)) { HANDLE hThread = OpenThread(THREAD_SUSPEND_RESUME, FALSE, te32.th32ThreadID); SuspendThread(hThread); SuspThreads[iThreadIndex++] = hThread; } } while(Thread32Next(hThreadSnap, &te32) && (iThreadIndex *iNumThreads) *iNumThreads = iThreadIndex; } } } while(Thread32Next(hThreadSnap, &te32) && (*iNumThreads 100) cycle=0; // every 100 cyces forces a thread list refresh for(iThreadIndex=0; iThreadIndexDeltaUsed > (signed long)iTimeLimit) { #ifdef DEBUGTRACE OutTrace("Tid[%d]:%x delta=%d stopped at %d\n", iThreadIndex, t->tid, t->DeltaUsed, __LINE__); #endif if ((iResumeCount=SuspendThread(t->hThread))== -1) { t->tid = NULL; CloseHandle(t->hThread); continue; } t->Suspended = TRUE; t->DeltaUsed -= iTimeSlot; } } Sleep(iSlowDownRatio); for(iThreadIndex=0; iThreadIndextid == NULL) continue; // skip terminated ones if (t->Suspended) { #ifdef DEBUGTRACE OutTrace("Tid[%d]=%x delta=%d started at %d\n", iThreadIndex, t->tid, t->DeltaUsed, __LINE__); #endif if ((iResumeCount=ResumeThread(t->hThread))== -1) { t->tid = NULL; CloseHandle(t->hThread); continue; } t->Suspended = FALSE; t->DeltaUsed -= iTimeSlot; } else { if(!GetThreadTimes(t->hThread, &CreationTime, &ExitTime, &KernelTime, &UserTime)) { t->tid = NULL; CloseHandle(t->hThread); continue; } FILETIME tmp = t->LastUsed; t->LastUsed = FTFTSUM(UserTime, KernelTime); t->DeltaUsed = t->DeltaUsed + DWDIFF(t->LastUsed, tmp); #ifdef DEBUGTRACE OutTrace("Tid[%d]:%x delta=%d measured at %d\n", iThreadIndex, t->tid, t->DeltaUsed, __LINE__); #endif } } Sleep(1); } // should never go here, but in case, awake all suspended threads for(iThreadIndex=0; iThreadIndextid && t->Suspended) { ResumeThread(t->hThread); } } return TRUE; } ================================================ FILE: dll/d3d10.cpp ================================================ D3D10CreateDevice D3D10CreateDeviceAndSwapChain ================================================ FILE: dll/d3dtexture.cpp ================================================ #define _CRT_SECURE_NO_WARNINGS #include #include "dxwnd.h" #include "dxwcore.hpp" #include "dxhook.h" #include "dxhelper.h" #include "syslibs.h" #include "stdio.h" #include "dxdds.h" #define STB_DXT_IMPLEMENTATION #include "stb_dxt.h" //#define SOLIDCOLOR extern unsigned int HashSurface(BYTE *, int, int, int); extern char *GetDxWndPath(); typedef enum { FORMAT_BMP = 0, FORMAT_RAW, FORMAT_DDS }; static unsigned int HashBuffer(BYTE *buf, int len) { unsigned int b = 378551; unsigned int a = 63689; DWORD hash = 0; for(int i = 0; i < len; i++){ hash = (hash * a) + (*buf++); a = a * b; } return hash; } static WORD Melt_123(WORD c1, WORD c2) { WORD r1, r2, g1, g2, b1, b2; WORD r, g, b; r1 = (c1 & 0xF800) >> 11; r2 = (c2 & 0xF800) >> 11; g1 = (c1 & 0x07E0) >> 5; g2 = (c2 & 0x07E0) >> 5; b1 = (c1 & 0x001F) >> 0; b2 = (c2 & 0x001F) >> 0; r = (((r2 * 2) + r1) / 3) & 0x1F; g = (((g2 * 2) + g1) / 3) & 0x3F; b = (((b2 * 2) + b1) / 3) & 0x1F; return (r << 11) | (g << 5) | (b << 0); } static DWORD Melt32_123(WORD c1, WORD c2) { WORD r1, r2, g1, g2, b1, b2; DWORD r, g, b; r1 = (c1 & 0xF800) >> 11; r2 = (c2 & 0xF800) >> 11; g1 = (c1 & 0x07E0) >> 5; g2 = (c2 & 0x07E0) >> 5; b1 = (c1 & 0x001F) >> 0; b2 = (c2 & 0x001F) >> 0; r = (((r2 * 2) + r1) / 3) & 0x1F; g = (((g2 * 2) + g1) / 3) & 0x3F; b = (((b2 * 2) + b1) / 3) & 0x1F; return (r << (16+3)) | (g << (8+2)) | (b << (0+3)); } static DWORD Conv32(WORD c) { DWORD r, g, b; r = ((c & 0xF800) >> 11) & 0x1F; g = ((c & 0x07E0) >> 5) & 0x3F; b = ((c & 0x001F) >> 0) & 0x1F; return (r << (16+3)) | (g << (8+2)) | (b << (0+3)); } char *ExplainD3DSurfaceFormat(DWORD dwFormat) { char *s; switch(dwFormat){ case D3DFMT_UNKNOWN: s = "UNKNOWN"; break; case D3DFMT_R8G8B8: s = "R8G8B8"; break; case D3DFMT_A8R8G8B8: s = "A8R8G8B8"; break; case D3DFMT_X8R8G8B8: s = "X8R8G8B8"; break; case D3DFMT_R5G6B5: s = "R5G6B5"; break; case D3DFMT_X1R5G5B5: s = "X1R5G5B5"; break; case D3DFMT_A1R5G5B5: s = "A1R5G5B5"; break; case D3DFMT_A4R4G4B4: s = "A4R4G4B4"; break; case D3DFMT_R3G3B2: s = "R3G3B2"; break; case D3DFMT_A8: s = "A8"; break; case D3DFMT_A8R3G3B2: s = "A8R3G3B2"; break; case D3DFMT_X4R4G4B4: s = "X4R4G4B4"; break; case D3DFMT_A2B10G10R10: s = "A2B10G10R10"; break; case D3DFMT_A8B8G8R8: s = "A8B8G8R8"; break; case D3DFMT_X8B8G8R8: s = "X8B8G8R8"; break; case D3DFMT_G16R16: s = "G16R16"; break; case D3DFMT_A2R10G10B10: s = "A2R10G10B10"; break; case D3DFMT_A16B16G16R16: s = "A16B16G16R16"; break; case D3DFMT_A8P8: s = "A8P8"; break; case D3DFMT_P8: s = "P8"; break; case D3DFMT_L8: s = "L8"; break; case D3DFMT_A8L8: s = "A8L8"; break; case D3DFMT_A4L4: s = "A4L4"; break; case D3DFMT_V8U8: s = "V8U8"; break; case D3DFMT_L6V5U5: s = "L6V5U5"; break; case D3DFMT_X8L8V8U8: s = "X8L8V8U8"; break; case D3DFMT_Q8W8V8U8: s = "Q8W8V8U8"; break; case D3DFMT_V16U16: s = "V16U16"; break; case D3DFMT_A2W10V10U10: s = "A2W10V10U10"; break; case D3DFMT_UYVY: s = "UYVY"; break; case D3DFMT_R8G8_B8G8: s = "R8G8_B8G8"; break; case D3DFMT_YUY2: s = "YUY2"; break; case D3DFMT_G8R8_G8B8: s = "G8R8_G8B8"; break; case D3DFMT_DXT1: s = "DXT1"; break; case D3DFMT_DXT2: s = "DXT2"; break; case D3DFMT_DXT3: s = "DXT3"; break; case D3DFMT_DXT4: s = "DXT4"; break; case D3DFMT_DXT5: s = "DXT5"; break; case D3DFMT_D16_LOCKABLE: s = "D16_LOCKABLE"; break; case D3DFMT_D32: s = "D32"; break; case D3DFMT_D15S1: s = "D15S1"; break; case D3DFMT_D24S8: s = "D24S8"; break; case D3DFMT_D24X8: s = "D24X8"; break; case D3DFMT_D24X4S4: s = "D24X4S4"; break; case D3DFMT_D16: s = "D16"; break; case D3DFMT_D32F_LOCKABLE: s = "D32F_LOCKABLE"; break; case D3DFMT_D24FS8: s = "D24FS8"; break; case D3DFMT_D32_LOCKABLE: s = "D32_LOCKABLE"; break; case D3DFMT_S8_LOCKABLE: s = "S8_LOCKABLE"; break; case D3DFMT_L16: s = "L16"; break; case D3DFMT_VERTEXDATA: s = "VERTEXDATA"; break; case D3DFMT_INDEX16: s = "INDEX16"; break; case D3DFMT_INDEX32: s = "INDEX32"; break; case D3DFMT_Q16W16V16U16: s = "Q16W16V16U16"; break; case D3DFMT_MULTI2_ARGB8: s = "MULTI2_ARGB8"; break; case D3DFMT_R16F: s = "R16F"; break; case D3DFMT_G16R16F: s = "G16R16F"; break; case D3DFMT_A16B16G16R16F: s = "A16B16G16R16F"; break; case D3DFMT_R32F: s = "R32F"; break; case D3DFMT_G32R32F: s = "G32R32F"; break; case D3DFMT_A32B32G32R32F: s = "A32B32G32R32F"; break; case D3DFMT_A1: s = "A1"; break; case D3DFMT_A2B10G10R10_XR_BIAS: s = "A2B10G10R10_XR_BIAS"; break; case D3DFMT_BINARYBUFFER: s = "BINARYBUFFER"; break; default: s = "Unknown"; break; } return s; } static int FormatColorDepth(D3DFORMAT Format) { int iColorDepth = 0; switch (Format){ case D3DFMT_X8R8G8B8: case D3DFMT_A8R8G8B8: case D3DFMT_DXT2: case D3DFMT_DXT3: case D3DFMT_DXT4: case D3DFMT_DXT5: case D3DFMT_A8: case D3DFMT_L8: iColorDepth = 32; break; case D3DFMT_DXT1: case D3DFMT_A4R4G4B4: // AoE III case D3DFMT_X4R4G4B4: case D3DFMT_A1R5G5B5: // AoE III case D3DFMT_X1R5G5B5: case D3DFMT_R5G6B5: iColorDepth = 16; break; } return iColorDepth; } static DWORD DDSTextureType(D3DFORMAT Format) { int dwFlag = 0; switch (Format){ case D3DFMT_X8R8G8B8: case D3DFMT_X4R4G4B4: case D3DFMT_X1R5G5B5: case D3DFMT_R5G6B5: dwFlag = DDPF_RGB; break; case D3DFMT_A8R8G8B8: case D3DFMT_A4R4G4B4: // AoE III case D3DFMT_A1R5G5B5: // AoE III dwFlag = DDPF_RGB|DDPF_ALPHAPIXELS; break; case D3DFMT_DXT1: case D3DFMT_DXT2: case D3DFMT_DXT3: case D3DFMT_DXT4: case D3DFMT_DXT5: dwFlag = DDPF_FOURCC; break; case D3DFMT_A8: case D3DFMT_L8: break; } return dwFlag; } // FormatColorBytes macro gives color depth in bytes by dividing by 8 (=> lshift 3) #define FormatColorBytes(Format) (FormatColorDepth(Format) >> 3) static DWORD TextureSize(D3DSURFACE_DESC Desc, D3DLOCKED_RECT LockedRect) { DWORD dwSize; // calculate the texture size switch (Desc.Format){ case D3DFMT_A4R4G4B4: case D3DFMT_X4R4G4B4: case D3DFMT_X1R5G5B5: case D3DFMT_A1R5G5B5: case D3DFMT_R5G6B5: case D3DFMT_X8R8G8B8: case D3DFMT_A8R8G8B8: //case D3DFMT_A8: //case D3DFMT_L8: dwSize = Desc.Width * Desc.Height * FormatColorBytes(Desc.Format); break; case D3DFMT_DXT1: case D3DFMT_DXT2: case D3DFMT_DXT3: case D3DFMT_DXT4: case D3DFMT_DXT5: dwSize = (Desc.Width * Desc.Height * FormatColorBytes(Desc.Format)) / 4; break; default: dwSize = 0; // 0 = unknown or not interesting break; } return dwSize; } static void SetDDSPixelFormat(D3DFORMAT Format, DDS_PIXELFORMAT *pf) { switch (Format){ case D3DFMT_X8R8G8B8: case D3DFMT_A8R8G8B8: case D3DFMT_DXT2: case D3DFMT_DXT3: case D3DFMT_DXT4: case D3DFMT_DXT5: case D3DFMT_A8: case D3DFMT_L8: pf->dwRGBBitCount = 32; pf->dwRBitMask = 0x00FF0000; pf->dwGBitMask = 0x0000FF00; pf->dwBBitMask = 0x000000FF; pf->dwABitMask = 0xFF000000; break; case D3DFMT_DXT1: pf->dwRGBBitCount = 16; pf->dwRBitMask = 0xF800; pf->dwGBitMask = 0x07E0; pf->dwBBitMask = 0x001F; pf->dwABitMask = 0x0000; break; case D3DFMT_A4R4G4B4: // AoE III case D3DFMT_X4R4G4B4: pf->dwRGBBitCount = 16; pf->dwRBitMask = 0x0F00; pf->dwGBitMask = 0x00F0; pf->dwBBitMask = 0x000F; pf->dwABitMask = 0xF000; break; case D3DFMT_A1R5G5B5: // AoE III case D3DFMT_X1R5G5B5: pf->dwRGBBitCount = 16; pf->dwRBitMask = 0x7C00; pf->dwGBitMask = 0x03E0; pf->dwBBitMask = 0x001F; pf->dwABitMask = 0x8000; break; case D3DFMT_R5G6B5: pf->dwRGBBitCount = 16; pf->dwRBitMask = 0x7C00; pf->dwGBitMask = 0x03E0; pf->dwBBitMask = 0x001F; pf->dwABitMask = 0x0000; break; } } static DWORD D3DHash(D3DSURFACE_DESC Desc, D3DLOCKED_RECT LockedRect) { DWORD hash; static BOOL DoOnce = TRUE; // calculate the bitmap hash hash = 0; switch (Desc.Format){ // hash for uncompressed bmp-like formats with possible empty area at end of pitch size case D3DFMT_A4R4G4B4: case D3DFMT_X4R4G4B4: case D3DFMT_X8R8G8B8: case D3DFMT_A8R8G8B8: case D3DFMT_R5G6B5: case D3DFMT_X1R5G5B5: case D3DFMT_A1R5G5B5: case D3DFMT_A8: case D3DFMT_L8: hash = HashSurface((BYTE *)LockedRect.pBits, LockedRect.Pitch, Desc.Width, Desc.Height); break; // hash for fixed ratio compressed formats case D3DFMT_DXT1: case D3DFMT_DXT2: case D3DFMT_DXT3: case D3DFMT_DXT4: case D3DFMT_DXT5: hash = HashBuffer((BYTE *)LockedRect.pBits, TextureSize(Desc, LockedRect)); break; case D3DFMT_V8U8: case D3DFMT_Q8W8V8U8: // Tiger Woods PGA Tour 08 case D3DFMT_V16U16: case D3DFMT_Q16W16V16U16: case D3DFMT_CxV8U8: case D3DFMT_L6V5U5: case D3DFMT_X8L8V8U8: case D3DFMT_A2W10V10U10: // Bumpmap surfaces, dump is meaningless ..... break; default: char sMsg[80+1]; if(DoOnce){ sprintf_s(sMsg, 80, "Unhandled texture type=%d(%s)", Desc.Format, ExplainD3DSurfaceFormat(Desc.Format)); MessageBox(0, sMsg, "WARN", MB_OK | MB_ICONEXCLAMATION); DoOnce = FALSE; } break; } return hash; } BOOL SetBMPStruct(LPBITMAPV4HEADER lpBV4Hdr, LPBITMAPFILEHEADER lpBFHdr, D3DSURFACE_DESC Desc) { // set bmp invariant parameters memset((void *)lpBV4Hdr, 0, sizeof(BITMAPV4HEADER)); lpBV4Hdr->bV4Size = sizeof(BITMAPV4HEADER); lpBV4Hdr->bV4Width = Desc.Width; lpBV4Hdr->bV4Height = Desc.Height; lpBV4Hdr->bV4Planes = 1; lpBV4Hdr->bV4V4Compression = BI_BITFIELDS; lpBV4Hdr->bV4XPelsPerMeter = 1; lpBV4Hdr->bV4YPelsPerMeter = 1; lpBV4Hdr->bV4ClrUsed = 0; lpBV4Hdr->bV4ClrImportant = 0; lpBV4Hdr->bV4CSType = LCS_CALIBRATED_RGB; lpBFHdr->bfType = 0x4d42; // 0x42 = "B" 0x4d = "M" lpBFHdr->bfReserved1 = 0; lpBFHdr->bfReserved2 = 0; switch (Desc.Format){ case D3DFMT_X8R8G8B8: case D3DFMT_A8R8G8B8: case D3DFMT_DXT2: case D3DFMT_DXT3: case D3DFMT_DXT4: case D3DFMT_DXT5: case D3DFMT_A8: case D3DFMT_L8: lpBV4Hdr->bV4BitCount = 32; lpBV4Hdr->bV4RedMask = 0x00FF0000; lpBV4Hdr->bV4GreenMask = 0x0000FF00; lpBV4Hdr->bV4BlueMask = 0x000000FF; lpBV4Hdr->bV4AlphaMask = 0xFF000000; break; case D3DFMT_DXT1: lpBV4Hdr->bV4BitCount = 16; lpBV4Hdr->bV4RedMask = 0xF800; lpBV4Hdr->bV4GreenMask = 0x07E0; lpBV4Hdr->bV4BlueMask = 0x001F; lpBV4Hdr->bV4AlphaMask = 0x0000; break; case D3DFMT_A4R4G4B4: // AoE III case D3DFMT_X4R4G4B4: lpBV4Hdr->bV4BitCount = 16; lpBV4Hdr->bV4RedMask = 0x0F00; lpBV4Hdr->bV4GreenMask = 0x00F0; lpBV4Hdr->bV4BlueMask = 0x000F; lpBV4Hdr->bV4AlphaMask = 0xF000; break; case D3DFMT_A1R5G5B5: // AoE III case D3DFMT_X1R5G5B5: lpBV4Hdr->bV4BitCount = 16; lpBV4Hdr->bV4RedMask = 0x7C00; lpBV4Hdr->bV4GreenMask = 0x03E0; lpBV4Hdr->bV4BlueMask = 0x001F; lpBV4Hdr->bV4AlphaMask = 0x8000; break; case D3DFMT_R5G6B5: lpBV4Hdr->bV4BitCount = 16; lpBV4Hdr->bV4RedMask = 0x7C00; lpBV4Hdr->bV4GreenMask = 0x03E0; lpBV4Hdr->bV4BlueMask = 0x001F; lpBV4Hdr->bV4AlphaMask = 0x0000; break; } lpBV4Hdr->bV4SizeImage = ((lpBV4Hdr->bV4Width * lpBV4Hdr->bV4BitCount + 0x1F) & ~0x1F)/8 * lpBV4Hdr->bV4Height; lpBV4Hdr->bV4Height = - lpBV4Hdr->bV4Height; // Compute the size of the entire file. lpBFHdr->bfSize = (DWORD) (sizeof(BITMAPFILEHEADER) + lpBV4Hdr->bV4Size + lpBV4Hdr->bV4ClrUsed * sizeof(RGBQUAD) + lpBV4Hdr->bV4SizeImage); // Compute the offset to the array of color indices. lpBFHdr->bfOffBits = (DWORD) sizeof(BITMAPFILEHEADER) + lpBV4Hdr->bV4Size + lpBV4Hdr->bV4ClrUsed * sizeof (RGBQUAD); return 0; } void D3DTextureDump(D3DSURFACE_DESC Desc, D3DLOCKED_RECT LockedRect) { static BOOL DoOnce = TRUE; static int MinTexX, MinTexY, MaxTexX, MaxTexY; FILE *hf; BITMAPFILEHEADER hdr; // bitmap file-header BITMAPV4HEADER pbi; // bitmap info-header int w, h; int iSurfaceSize, iScanLineSize; char pszFile[MAX_PATH]; char *sExt; DWORD hash; static int iTextureFileFormat; if(DoOnce){ char sProfilePath[MAX_PATH]; sprintf(sProfilePath, "%s\\dxwnd.ini", GetDxWndPath()); MinTexX=GetPrivateProfileInt("Texture", "MinTexX", 0, sProfilePath); MaxTexX=GetPrivateProfileInt("Texture", "MaxTexX", 0, sProfilePath); MinTexY=GetPrivateProfileInt("Texture", "MinTexY", 0, sProfilePath); MaxTexY=GetPrivateProfileInt("Texture", "MaxTexY", 0, sProfilePath); sprintf_s(pszFile, MAX_PATH, "%s\\texture.out", GetDxWndPath()); CreateDirectory(pszFile, NULL); iTextureFileFormat = FORMAT_BMP; if(dxw.dwFlags8 & RAWFORMAT) iTextureFileFormat = FORMAT_RAW; if(dxw.dwFlags8 & DDSFORMAT) iTextureFileFormat = FORMAT_DDS; OutTrace("TextureDump: size min=(%dx%d) max=(%dx%d) format=%d\n", MinTexX, MinTexY, MaxTexX, MaxTexY, iTextureFileFormat); DoOnce = FALSE; } while (TRUE){ // fake loop 1 w = Desc.Width; h = Desc.Height; if((MinTexX && (wMaxTexX)) || (MaxTexY && (h>MaxTexY))) { OutTrace("TextureDump: SKIP big texture\n"); break; } iSurfaceSize = Desc.Height * LockedRect.Pitch; // skip unsupported raw compressions if(!TextureSize(Desc, LockedRect)){ OutTrace("TextureDump: UNSUPPORTED\n"); break; } // calculate the bitmap hash hash = D3DHash(Desc, LockedRect); if(!hash) { OutTrace("TextureDump: hash=NULL\n"); break; // almost certainly, an empty black surface! } // Create the file. switch (iTextureFileFormat){ case FORMAT_BMP: sExt = "bmp"; break; case FORMAT_RAW: sExt = "raw"; break; case FORMAT_DDS: sExt = "dds"; break; } sprintf_s(pszFile, MAX_PATH, "%s\\texture.out\\texture.%03d.%03d.%s.%08X.%s", GetDxWndPath(), Desc.Width, Desc.Height, ExplainD3DSurfaceFormat(Desc.Format), hash, sExt); hf = fopen(pszFile, "wb"); if(!hf) break; switch(iTextureFileFormat){ case FORMAT_RAW: if(fwrite((BYTE *)LockedRect.pBits, TextureSize(Desc, LockedRect), 1, hf)!=1) OutTraceE("TextureHack: fwrite ERROR err=%d\n", GetLastError()); fclose(hf); break; case FORMAT_DDS: { DDS_HEADER ddsh; if(fwrite("DDS ", 4, 1, hf)!=1) OutTraceE("TextureHack: fwrite ERROR err=%d\n", GetLastError()); memset(&ddsh, 0, sizeof(ddsh)); ddsh.dwSize = sizeof(ddsh); ddsh.dwFlags = DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH|DDSD_PIXELFORMAT; ddsh.dwHeight = Desc.Height; ddsh.dwWidth = Desc.Width; ddsh.ddspf.dwSize = sizeof(DDS_PIXELFORMAT); ddsh.ddspf.dwFlags = DDSTextureType(Desc.Format); // compressed formats must have 0 pitch if(ddsh.ddspf.dwFlags & DDPF_RGB) { ddsh.dwPitchOrLinearSize = LockedRect.Pitch; ddsh.dwFlags |= DDSD_PITCH; } if(ddsh.ddspf.dwFlags & DDPF_FOURCC) ddsh.ddspf.dwFourCC = Desc.Format; SetDDSPixelFormat(Desc.Format, &ddsh.ddspf); if(fwrite((BYTE *)&ddsh, sizeof(ddsh), 1, hf)!=1) OutTraceE("TextureHack: fwrite ERROR err=%d\n", GetLastError()); if(fwrite((BYTE *)LockedRect.pBits, TextureSize(Desc, LockedRect), 1, hf)!=1) OutTraceE("TextureHack: fwrite ERROR err=%d\n", GetLastError()); } break; case FORMAT_BMP: // set bmp invariant parameters if (SetBMPStruct(&pbi, &hdr, Desc)) break; iScanLineSize = ((pbi.bV4Width * pbi.bV4BitCount + 0x1F) & ~0x1F)/8; // Copy the BITMAPFILEHEADER into the .BMP file. fwrite((LPVOID)&hdr, sizeof(BITMAPFILEHEADER), 1, hf); // Copy the BITMAPINFOHEADER and RGBQUAD array into the file. fwrite((LPVOID)&pbi, sizeof(BITMAPV4HEADER) + pbi.bV4ClrUsed * sizeof (RGBQUAD), 1, hf); switch (Desc.Format){ case D3DFMT_X8R8G8B8: case D3DFMT_A8R8G8B8: case D3DFMT_A4R4G4B4: case D3DFMT_X4R4G4B4: case D3DFMT_A1R5G5B5: // AoE III case D3DFMT_R5G6B5: // AoE III case D3DFMT_X1R5G5B5: { // Copy the array of color indices into the .BMP file. for(int y=0; y<(int)Desc.Height; y++) fwrite((BYTE *)LockedRect.pBits + (y*LockedRect.Pitch), iScanLineSize, 1, hf); } break; case D3DFMT_A8: case D3DFMT_L8: { // Copy the array of color indices into the .BMP file. BYTE *p = (BYTE *)LockedRect.pBits; for(int y=0; y<(int)Desc.Height; y++) for(int x=0; x<(int)Desc.Width; x++){ DWORD pixel; pixel = 0xFF000000 | *p | (*p << 8) | (*p << 16); // gray color fwrite((BYTE *)&pixel, sizeof(DWORD), 1, hf); p++; } } break; case D3DFMT_DXT1: { // Copy the array of color indices into the .BMP file. WORD *bm; WORD *c; int bmsize; c = (WORD *)LockedRect.pBits; bmsize = Desc.Width * Desc.Height * sizeof(WORD); bm = (WORD *)malloc(bmsize); for(int y=0; y<(int)Desc.Height; y+=4){ for(int x=0; x<(int)Desc.Width; x+=4){ WORD color_0, color_1, color_2, color_3; color_0 = *c++; color_1 = *c++; color_2 = Melt_123(color_1, color_0); color_3 = Melt_123(color_0, color_1); for(int n=0; n<2; n++){ int dy; WORD color_indexes = *c++; WORD color; for (int m=0; m<8; m++){ switch (color_indexes & 0x3){ case 0x00: color = color_0; break; case 0x01: color = color_1; break; case 0x02: color = color_2; break; case 0x03: color = color_3; break; } dy = (m<4) ? 0 : 1; color_indexes >>= 2; int index = ((y+(2*n)+dy)*Desc.Width) + (x+(m%4)); if(index < bmsize/2) bm[index]=color; } } } } fwrite((BYTE *)bm, bmsize, 1, hf); free(bm); } break; case D3DFMT_DXT2: case D3DFMT_DXT3: { // Copy the array of color indices into the .BMP file. DWORD *bm; WORD *c; int bmsize; c = (WORD *)LockedRect.pBits; bmsize = Desc.Width * Desc.Height * sizeof(DWORD); bm = (DWORD *)malloc(bmsize); memset(bm, 0, bmsize); for(int y=0; y<(int)Desc.Height; y+=4){ for(int x=0; x<(int)Desc.Width; x+=4){ WORD color_0, color_1; DWORD dwcolor[4]; BYTE alpha[16]; WORD *pAlpha; pAlpha = (WORD *)c; for(int row=0; row<4; row++){ WORD a = *c++; for(int col=0; col<4; col++){ alpha[(row<<2)+col] = (a & 0xF); a >>= 4; } } color_0 = *c++; color_1 = *c++; dwcolor[0] = Conv32(color_0); dwcolor[1] = Conv32(color_1); dwcolor[2] = Melt32_123(color_1, color_0); dwcolor[3] = Melt32_123(color_0, color_1); for(int n=0; n<2; n++){ int dy; WORD color_indexes = *c++; DWORD color; for (int m=0; m<8; m++){ dy = (m<4) ? 0 : 1; color = dwcolor[color_indexes & 0x3] & 0x00FFFFFF; dy = (m<4) ? 0 : 1; color_indexes >>= 2; int index = ((y+(2*n)+dy)*Desc.Width) + (x+(m%4)); int alpha_index = (((2*n) + dy)<<2) + (m % 4); //if(index < bmsize/4) bm[index] = color | 0xFF000000; // uncomment to get rid of alpha channel if(index < bmsize/4) bm[index] = color | (alpha[alpha_index]<<28); } } } } fwrite((BYTE *)bm, bmsize, 1, hf); free(bm); } break; case D3DFMT_DXT4: case D3DFMT_DXT5: { // Copy the array of color indices into the .BMP file. DWORD *bm; WORD *c; int bmsize; c = (WORD *)LockedRect.pBits; bmsize = Desc.Width * Desc.Height * sizeof(DWORD); bm = (DWORD *)malloc(bmsize); memset(bm, 0, bmsize); for(int y=0; y<(int)Desc.Height; y+=4){ for(int x=0; x<(int)Desc.Width; x+=4){ WORD color_0, color_1; DWORD dwcolor[4]; DWORD alpha[8]; // alpha section (4 words) .... alpha[1] = ((*c) >> 8) & 0xFF; alpha[0] = (*c) & 0xFF; c++; if(alpha[0] > alpha[1]) { // 6 interpolated alpha values. alpha[2] = ((6*alpha[0]) + (1*alpha[1])) / 7; // bit code 010 alpha[3] = ((5*alpha[0]) + (2*alpha[1])) / 7; // bit code 011 alpha[4] = ((4*alpha[0]) + (3*alpha[1])) / 7; // bit code 100 alpha[5] = ((3*alpha[0]) + (4*alpha[1])) / 7; // bit code 101 alpha[6] = ((2*alpha[0]) + (5*alpha[1])) / 7; // bit code 110 alpha[7] = ((1*alpha[0]) + (6*alpha[1])) / 7; // bit code 111 } else { // 4 interpolated alpha values. alpha[2] = ((4*alpha[0]) + (1*alpha[1])) / 5; // bit code 010 alpha[3] = ((3*alpha[0]) + (2*alpha[1])) / 5; // bit code 011 alpha[4] = ((2*alpha[0]) + (3*alpha[1])) / 5; // bit code 100 alpha[5] = ((1*alpha[0]) + (4*alpha[1])) / 5; // bit code 101 alpha[6] = 0x00; // bit code 110 (fully transparent) alpha[7] = 0xFF; // bit code 111 (fully opaque) } BYTE *pAlpha = (BYTE *)c; c += 3; color_0 = *c++; color_1 = *c++; dwcolor[0] = Conv32(color_0); dwcolor[1] = Conv32(color_1); dwcolor[2] = Melt32_123(color_1, color_0); dwcolor[3] = Melt32_123(color_0, color_1); for(int n=0; n<2; n++){ int dy; DWORD dwAlpha_indexes = (*(pAlpha+0) & 0x0000FF) | ((*(pAlpha+1)<<8) & 0x00FF00) | ((*(pAlpha+2)<<16) & 0xFF0000); pAlpha += 3; DWORD alpha_color; WORD color_indexes = *c++; DWORD color; for (int m=0; m<8; m++){ alpha_color = (alpha[dwAlpha_indexes & 0x7] << 24) & 0xFF000000; dy = (m<4) ? 0 : 1; dwAlpha_indexes >>= 3; color = dwcolor[color_indexes & 0x3] & 0x00FFFFFF; dy = (m<4) ? 0 : 1; color_indexes >>= 2; int index = ((y+(2*n)+dy)*Desc.Width) + (x+(m%4)); if(index < bmsize/4) bm[index] = color | alpha_color; } } } } fwrite((BYTE *)bm, bmsize, 1, hf); free(bm); } default: break; } // Close the .BMP file. fclose(hf); } break; } // end of fake loop 1 } void D3DTextureHack(D3DSURFACE_DESC Desc, D3DLOCKED_RECT LockedRect) { static BOOL DoOnce = TRUE; static int MinTexX, MinTexY, MaxTexX, MaxTexY; FILE *hf; BITMAPFILEHEADER hdr; // bitmap file-header BITMAPV4HEADER pbi; // bitmap info-header int iSurfaceSize, iScanLineSize; char pszFile[MAX_PATH]; char *sExt; DWORD hash; int w, h; static int iTextureFileFormat; OutTraceB("TextureHack(D3D)\n"); if(DoOnce){ char sProfilePath[MAX_PATH]; sprintf(sProfilePath, "%s\\dxwnd.ini", GetDxWndPath()); MinTexX=GetPrivateProfileInt("Texture", "MinTexX", 0, sProfilePath); MaxTexX=GetPrivateProfileInt("Texture", "MaxTexX", 0, sProfilePath); MinTexY=GetPrivateProfileInt("Texture", "MinTexY", 0, sProfilePath); MaxTexY=GetPrivateProfileInt("Texture", "MaxTexY", 0, sProfilePath); iTextureFileFormat = FORMAT_BMP; if(dxw.dwFlags8 & RAWFORMAT) iTextureFileFormat = FORMAT_RAW; if(dxw.dwFlags8 & DDSFORMAT) iTextureFileFormat = FORMAT_DDS; OutTrace("TextureHack: size min=(%dx%d) max=(%dx%d) format=%d\n", MinTexX, MinTexY, MaxTexX, MaxTexY, iTextureFileFormat); DoOnce = FALSE; } while(TRUE){ // fake loop w = Desc.Width; h = Desc.Height; if((MinTexX && (wMaxTexX)) || (MaxTexY && (h>MaxTexY))) { OutTrace("TextureHack: SKIP big texture\n"); break; } iSurfaceSize = Desc.Height * LockedRect.Pitch; // calculate the bitmap hash hash = D3DHash(Desc, LockedRect); if(!hash) { OutTrace("TextureHack: hash=NULL\n"); break; // almost certainly, an empty black surface! } // Look for the .BMP file. // Create the file. switch (iTextureFileFormat){ case FORMAT_BMP: sExt = "bmp"; break; case FORMAT_RAW: sExt = "raw"; break; case FORMAT_DDS: sExt = "dds"; break; } sprintf_s(pszFile, MAX_PATH, "%s\\texture.in\\texture.%03d.%03d.%s.%08X.%s", GetDxWndPath(), Desc.Width, Desc.Height, ExplainD3DSurfaceFormat(Desc.Format), hash, sExt); hf = fopen(pszFile, "rb"); if(!hf) break; // no updated texture to load OutTrace("TextureHack: IMPORT path=%s\n", pszFile); switch(iTextureFileFormat){ case FORMAT_RAW: if(fread((BYTE *)LockedRect.pBits, TextureSize(Desc, LockedRect), 1, hf)!=1) OutTraceE("TextureHack: fread ERROR err=%d\n", GetLastError()); break; case FORMAT_DDS: { BYTE magic[4]; DDS_HEADER ddsh; // assume the file is sane, read and throw away magic and dds header if(fread(magic, 4, 1, hf)!=1) OutTraceE("TextureHack: fread ERROR err=%d\n", GetLastError()); if(fread((BYTE *)&ddsh, sizeof(ddsh), 1, hf)!=1) OutTraceE("TextureHack: fread ERROR err=%d\n", GetLastError()); memset(&ddsh, 0, sizeof(ddsh)); if(fread((BYTE *)LockedRect.pBits, TextureSize(Desc, LockedRect), 1, hf)!=1) OutTraceE("TextureHack: fread ERROR err=%d\n", GetLastError()); } break; case FORMAT_BMP: int iBitCount = FormatColorDepth(Desc.Format); if(iBitCount == 0){ OutTrace("TextureHack: unsupported format=%x\n", Desc.Format); break; } iScanLineSize = ((Desc.Width * iBitCount + 0x1F) & ~0x1F)/8; while(TRUE) { // fake loop to ensure final fclose // Read the BITMAPFILEHEADER from the .BMP file (and throw away ...). if(fread((LPVOID)&hdr, sizeof(BITMAPFILEHEADER), 1, hf) != 1)break; // Read the BITMAPINFOHEADER (and throw away ...). // If the file contains BITMAPV4HEADER or BITMAPV5HEADER, no problem: next fseek will settle things if(fread((LPVOID)&pbi, sizeof(BITMAPINFOHEADER), 1, hf) != 1) break; // skip the RGBQUAD array if the editor inserted one fseek(hf, hdr.bfOffBits, SEEK_SET); switch (Desc.Format){ case D3DFMT_X8R8G8B8: case D3DFMT_A8R8G8B8: // Read the new texture from the .BMP file. if(pbi.bV4Height < 0){ // biHeight < 0 -> scan lines from top to bottom, same as surface/texture convention for(int y=0; y<(int)Desc.Height; y++){ BYTE *p = (BYTE *)LockedRect.pBits + (LockedRect.Pitch * y); fseek(hf, hdr.bfOffBits + (iScanLineSize * y), SEEK_SET); if(fread((LPVOID)p, LockedRect.Pitch, 1, hf) != 1) break; } } else { // biHeight > 0 -> scan lines from bottom to top, inverse order as surface/texture convention for(int y=0; y<(int)Desc.Height; y++){ BYTE *p = (BYTE *)LockedRect.pBits + (LockedRect.Pitch * ((Desc.Height-1) - y)); fseek(hf, hdr.bfOffBits + (iScanLineSize * y), SEEK_SET); if(fread((LPVOID)p, LockedRect.Pitch, 1, hf) != 1) break; } } break; case D3DFMT_DXT1: // Read the new texture from the .BMP file. if(pbi.bV4Height < 0){ BYTE *p = (BYTE *)LockedRect.pBits; BYTE *fb; fb = (BYTE *)malloc(Desc.Width * Desc.Height * sizeof(WORD)); if(!fb) { OutTrace("TextureHack: malloc error\n"); break; } fseek(hf, hdr.bfOffBits, SEEK_SET); if(fread((LPVOID)fb, Desc.Height * Desc.Width * (iBitCount / 8), 1, hf) != 1) { OutTrace("TextureHack: fread error\n"); free(fb); break; } // biHeight < 0 -> scan lines from top to bottom, same as surface/texture convention for(int y=0; y<(int)Desc.Height; y+=4){ for(int x=0; x<(int)Desc.Width; x+=4){ OutTrace("Compressing line=%d row=%d\n", y, x); stb_compress_dxt_block(p, fb, FALSE, STB_DXT_NORMAL); p += (16 * sizeof(DWORD) / 8); OutTrace("Compression done\n"); fb += 4 * 2; } } free(fb); } break; case D3DFMT_DXT5: // Read the new texture from the .BMP file. if(pbi.bV4Height < 0){ BYTE *p = (BYTE *)LockedRect.pBits; BYTE *fb; fb = (BYTE *)malloc(Desc.Width * Desc.Height * sizeof(DWORD)); if(!fb) { OutTrace("TextureHack: malloc error\n"); break; } fseek(hf, hdr.bfOffBits, SEEK_SET); if(fread((LPVOID)fb, Desc.Height * Desc.Width * (iBitCount / 8), 1, hf) != 1) { OutTrace("TextureHack: fread error\n"); free(fb); break; } // biHeight < 0 -> scan lines from top to bottom, same as surface/texture convention for(int y=0; y<(int)Desc.Height; y+=4){ for(int x=0; x<(int)Desc.Width; x+=4){ OutTrace("Compressing line=%d row=%d\n", y, x); stb_compress_dxt_block(p, fb, FALSE, STB_DXT_NORMAL); p += (16 * sizeof(DWORD) / 4); OutTrace("Compression done\n"); fb += 4 * 4; } } free(fb); } break; } break; } OutTrace("TextureHack: TEXTURE LOAD DONE\n"); break; } fclose(hf); break; } } void D3DTextureTransp(D3DSURFACE_DESC Desc, D3DLOCKED_RECT LockedRect) { switch (Desc.Format){ case D3DFMT_X8R8G8B8: case D3DFMT_A8R8G8B8: { DWORD *p; for(UINT y=0; y> 2); for(UINT x=0; x> 1); for(UINT x=0; x> 2); for(UINT x=0; x> 2); for(UINT x=0; x #include #include "dxwnd.h" #include "dxwcore.hpp" #include "stdio.h" #include "hddraw.h" #include "dxhelper.h" extern LPDIRECTDRAWSURFACE lpDDSEmu_Prim; extern BOOL bVSyncDone; extern LPDIRECTDRAW lpPrimaryDD; extern Blt_Type pBlt; extern ReleaseS_Type pReleaseSMethod(int); extern CreateSurface1_Type pCreateSurface1; extern CreateSurface1_Type pCreateSurface2; extern CreateSurface1_Type pCreateSurface3; extern CreateSurface2_Type pCreateSurface4; extern CreateSurface2_Type pCreateSurface7; extern Unlock4_Type pUnlockMethod(int); extern HDC hFlippedDC; extern BOOL bFlippedDC; extern ReleaseDC_Type pReleaseDC1; extern ReleaseDC_Type pReleaseDC2; extern ReleaseDC_Type pReleaseDC3; extern ReleaseDC_Type pReleaseDC4; extern ReleaseDC_Type pReleaseDC7; extern void BlitError(HRESULT, LPRECT, LPRECT, int); extern void BlitTrace(char *, LPRECT, LPRECT, int); extern void DescribeSurface(LPDIRECTDRAWSURFACE, int, char *, int); extern void TextureHandling(LPDIRECTDRAWSURFACE, int); extern GetSurfaceDesc2_Type pGetSurfaceDescMethod(); extern GetSurfaceDesc2_Type GetSurfaceDescMethod(); extern Blt_Type pBltMethod(); static HRESULT sBltNoPrimary(int dxversion, Blt_Type pBlt, char *api, LPDIRECTDRAWSURFACE lpdds, LPRECT lpdestrect, LPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, DWORD dwflags, LPDDBLTFX lpddbltfx) { RECT srcrect; HRESULT res; BOOL FromScreen; FromScreen=dxwss.IsAPrimarySurface(lpddssrc); // make a working copy of srcrect if not NULL if (lpsrcrect) srcrect=*lpsrcrect; // when blitting from a primary surface on screen (that is in non emulated mode), correct offsets // You should take account also for scaled primary surfaces, but that would be a hard task: // a reduced primary surface (in not-emulated mode) would bring quality loss!!! // v2.1.83: BLITFROMBACKBUFFER mode, let you chose to blit from backbuffer, where the surface size // is fixed no matter how the window/primary surface is scaled. // In "The Sims" there is no quality loss, but some scrolling artifact. //if(lpsrcrect && FromScreen){ if(FromScreen){ if ((dxw.dwFlags1 & EMULATESURFACE) || (dxw.dwFlags1 & EMULATEBUFFER)){ if(dxw.dwFlags1 & BLITFROMBACKBUFFER){ LPDIRECTDRAWSURFACE lpDDSBack; lpDDSBack = dxwss.GetBackBufferSurface(); if(lpDDSBack) lpddssrc=lpDDSBack; } } else { if(dxw.dwFlags1 & BLITFROMBACKBUFFER){ LPDIRECTDRAWSURFACE lpDDSBack; lpDDSBack = dxwss.GetBackBufferSurface(); if(lpDDSBack) lpddssrc=lpDDSBack; } else{ srcrect=dxw.MapWindowRect(lpsrcrect); } } } if (IsDebug) BlitTrace("NOPRIM", lpsrcrect, lpdestrect, __LINE__); res= (*pBlt)(lpdds, lpdestrect, lpddssrc, lpsrcrect ? &srcrect : NULL, dwflags, lpddbltfx); // Blitting compressed data may work to screen surfaces only. In this case, it may be worth // trying blitting directly to lpDDSEmu_Prim: it makes DK2 intro movies working. // Wrong guess!!! The cause was not compression, but simply a pixelformat mismatch. Better // configure things properly and avoid this branch. switch(res){ // commented out: it was the cause of the "Divine Divinity" flickering. // commented in?: it seems useful in "Axis and Allies".... //case DDERR_UNSUPPORTED: // if (dxw.dwFlags1 & EMULATESURFACE){ // RECT targetrect; // if (IsDebug) BlitTrace("UNSUPP", lpsrcrect ? &srcrect : NULL, lpdestrect, __LINE__); // targetrect = dxw.MapWindowRect(lpdestrect); // res=(*pBlt)(lpDDSEmu_Prim, &targetrect, lpddssrc, lpsrcrect ? &srcrect : NULL, dwflags, lpddbltfx); // } // break; case DDERR_SURFACEBUSY: if (lpsrcrect) srcrect=*lpsrcrect; (*pUnlockMethod(dxversion))(lpdds, NULL); if (lpddssrc) (*pUnlockMethod(dxversion))(lpddssrc, NULL); if (IsDebug) BlitTrace("BUSY", lpsrcrect ? &srcrect : NULL, lpdestrect, __LINE__); res=(*pBlt)(lpdds, lpdestrect, lpddssrc, lpsrcrect ? &srcrect : NULL, dwflags|DDBLT_WAIT, lpddbltfx); break; case DDERR_UNSUPPORTED: // to be fixed: parameters coming from BltFast in Star Defender 1 are not compatible with Blt transformation, so clear all.... if(dwflags & (DDBLT_KEYDEST|DDBLT_KEYSRC)){ #if 1 res= (*pBlt)(lpdds, lpdestrect, lpddssrc, lpsrcrect ? &srcrect : NULL, 0, 0); #else DDBLTFX ddbltfx; memset(&ddbltfx, 0, sizeof(ddbltfx)); ddbltfx.dwSize = sizeof(ddbltfx); if(dwflags & DDBLT_KEYDEST) ddbltfx.dwROP |= DDCKEYCAPS_DESTBLT; if(dwflags & DDBLT_KEYSRC ) ddbltfx.dwROP |= DDCKEYCAPS_SRCBLT; res= (*pBlt)(lpdds, lpdestrect, lpddssrc, lpsrcrect ? &srcrect : NULL, dwflags|DDBLT_ROP, &ddbltfx); #endif } break; case DDERR_SURFACELOST: lpdds->Restore(); res= (*pBlt)(lpdds, lpdestrect, lpddssrc, lpsrcrect ? &srcrect : NULL, dwflags, lpddbltfx); OutTraceDW("Blt SURFACELOST RETRY: ret=%x(%s)\n", res, ExplainDDError(res)); break; default: break; } if (res) BlitError(res, &srcrect, lpdestrect, __LINE__); if(IsDebug) { DescribeSurface(lpdds, 0, "[DST]" , __LINE__); if (lpddssrc) DescribeSurface(lpddssrc, 0, "[SRC]" , __LINE__); // lpddssrc could be NULL!!! } if(dxw.dwFlags1 & SUPPRESSDXERRORS) res=0; if(dxw.dwFlags5 & TEXTUREMASK) { // Texture Handling on Blt TextureHandling(lpdds, dxversion); } return res; } static HRESULT sBltToPrimary(int dxversion, Blt_Type pBlt, char *api, LPDIRECTDRAWSURFACE lpdds, LPRECT lpdestrect, LPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, DWORD dwflags, LPDDBLTFX lpddbltfx, BOOL isFlipping) { HRESULT res; RECT destrect, emurect; extern PrimaryBlt_Type pPrimaryBlt; // handle minimized states if(!dxw.IsVisible) return DD_OK; // check coordinates dxw.UpdateDesktopCoordinates(); // debug suppressions if(isFlipping){ if(dxw.dwFlags3 & NODDRAWFLIP) return DD_OK; } else { if(dxw.dwFlags3 & NODDRAWBLT) return DD_OK; } // v2.03.48: on WinXP it may happen (reported by Cloudstr) that alt tabbing produces // bad blit attempts where the client coordinates get the (-32000,-32000) - (-32000,-32000) // value. In such cases, it's adviseable to simulate an OK return code without attempting // any blit operation! if(lpdestrect && (lpdestrect->left == -32000)) return DD_OK; // no blit on invisible window #ifdef ONEPIXELFIX if (lpdestrect){ if ((lpdestrect->top == 0) && (lpdestrect->bottom == dxw.GetScreenHeight() -1)) lpdestrect->bottom = dxw.GetScreenHeight(); if ((lpdestrect->left == 0) && (lpdestrect->right == dxw.GetScreenWidth() -1)) lpdestrect->right = dxw.GetScreenWidth(); } if (lpsrcrect){ if ((lpsrcrect->top == 0) && (lpsrcrect->bottom == dxw.GetScreenHeight() -1)) lpsrcrect->bottom = dxw.GetScreenHeight(); if ((lpsrcrect->left == 0) && (lpsrcrect->right == dxw.GetScreenWidth() -1)) lpsrcrect->right = dxw.GetScreenWidth(); } #endif // seems necessary to "cure" the "FIFA 2000" soccer game in hw accelerated graphics, when the Unlock() method // receives RECT coordinates with big positive or negative numbers! // v2.03.94fx1: "FIFA2002" is ok with Unlock rect set to Lock previous value, but other games ("Aztec Wars", ...) // require some software clipping when moving the cursor outside the window or similar cases if(lpdestrect){ if(lpdestrect->top < 0) lpdestrect->top = 0; if(lpdestrect->top > (LONG)dxw.GetScreenHeight()) lpdestrect->top = dxw.GetScreenHeight(); if(lpdestrect->left < 0) lpdestrect->left = 0; if(lpdestrect->left > (LONG)dxw.GetScreenWidth()) lpdestrect->left = (LONG)dxw.GetScreenWidth(); if(lpdestrect->bottom > (LONG)dxw.GetScreenHeight()) lpdestrect->bottom = dxw.GetScreenHeight(); if(lpdestrect->right > (LONG)dxw.GetScreenWidth()) lpdestrect->right = dxw.GetScreenWidth(); if(lpdestrect->bottom < lpdestrect->top) lpdestrect->bottom = lpdestrect->top; if(lpdestrect->right < lpdestrect->left) lpdestrect->right = lpdestrect->left; } if(dxw.dwFlags5 & QUARTERBLT){ BOOL QuarterUpdate; QuarterUpdate = lpdestrect ? (((lpdestrect->bottom - lpdestrect->top) * (lpdestrect->right - lpdestrect->left)) > ((LONG)(dxw.GetScreenHeight() * dxw.GetScreenWidth()) >> 2)) : TRUE; if(QuarterUpdate) if(dxw.HandleFPS()) return DD_OK; } else if(dxw.HandleFPS()) return DD_OK; if(dxw.dwFlags5 & NOBLT) return DD_OK; destrect=dxw.MapWindowRect(lpdestrect); OutTraceB("DESTRECT=(%d,%d)-(%d,%d) Screen=(%dx%d)\n", destrect.left, destrect.top, destrect.right, destrect.bottom, dxw.GetScreenWidth(), dxw.GetScreenHeight()); //if(!(lpddssrc || (dwflags & DDBLT_COLORFILL))) { if((lpddssrc==0) && !(dwflags & DDBLT_COLORFILL)){ lpddssrc = dxwss.GetBackBufferSurface(); OutTraceDW("Flip: setting flip chain to lpdds=%x\n", lpddssrc); } // ========================= // Blit to primary direct or fullscreen surface // ========================= if(!dxw.IsEmulated){ res=DD_OK; if((dxw.dwFlags1 & SAVELOAD) || (dxw.dwFlags8 & FORCEVSYNC)) { HRESULT res2; if(!bVSyncDone){ if(res2=lpPrimaryDD->WaitForVerticalBlank(DDWAITVB_BLOCKBEGIN , 0)) OutTraceE("WaitForVerticalBlank ERROR: res=%x\n", res2); } bVSyncDone = FALSE; } if(dxw.Windowize) lpdestrect = &destrect; // blit only when source and dest surface are different. Should make ScreenRefresh faster. if (lpdds != lpddssrc) { dxw.ShowOverlay(lpddssrc); if (IsDebug) BlitTrace("PRIM-NOEMU", lpsrcrect, lpdestrect, __LINE__); res=(*pPrimaryBlt)(dxversion, pBlt, lpdds, lpdestrect, lpddssrc, lpsrcrect, lpddbltfx); //res=(*pBlt)(lpdds, lpdestrect, lpddssrc, lpsrcrect, dwflags, lpddbltfx); } if(res){ BlitError(res, lpsrcrect, lpdestrect, __LINE__); if(IsDebug) { DescribeSurface(lpdds, 0, "[DST]" , __LINE__); if (lpddssrc) DescribeSurface(lpddssrc, 0, "[SRC]" , __LINE__); // lpddssrc could be NULL!!! } // Try to handle HDC lock concurrency.... if(res==DDERR_SURFACEBUSY){ (*pUnlockMethod(dxversion))(lpdds, NULL); if(lpddssrc) (*pUnlockMethod(dxversion))(lpdds, NULL); if (IsDebug) BlitTrace("BUSY", lpsrcrect, lpdestrect, __LINE__); res= (*pBlt)(lpdds, lpdestrect, lpddssrc, lpsrcrect, dwflags, lpddbltfx); if (res) BlitError(res, lpsrcrect, lpdestrect, __LINE__); } // Try to handle DDBLT_KEYSRC on primary surface if((res==DDERR_INVALIDPARAMS) && (dwflags & DDBLT_KEYSRC)){ // to do: handle possible situations with surface 2 / 4 / 7 types DDSURFACEDESC2 ddsd; LPDIRECTDRAWSURFACE2 lpddsTmp; extern CreateSurface2_Type pCreateSurfaceMethod(int); if (IsDebug) BlitTrace("KEYSRC", lpsrcrect, lpdestrect, __LINE__); memset(&ddsd, 0, sizeof(ddsd)); ddsd.dwSize = (dxversion < 4) ? sizeof(DDSURFACEDESC) : sizeof(DDSURFACEDESC2); (*pGetSurfaceDescMethod())((LPDIRECTDRAWSURFACE2)lpddssrc, &ddsd); res=(*pCreateSurfaceMethod(dxversion))(lpPrimaryDD, &ddsd, (LPDIRECTDRAWSURFACE *)&lpddsTmp, NULL); if(res) OutTraceE("CreateSurface: ERROR %x(%s) at %d", res, ExplainDDError(res), __LINE__); // copy background res= (*pBlt)((LPDIRECTDRAWSURFACE)lpddsTmp, lpsrcrect, lpdds, lpdestrect, DDBLT_WAIT, NULL); if(res) OutTraceE("Blt: ERROR %x(%s) at %d", res, ExplainDDError(res), __LINE__); // overlay texture res= (*pBlt)((LPDIRECTDRAWSURFACE)lpddsTmp, lpsrcrect, lpddssrc, lpsrcrect, dwflags, lpddbltfx); if(res) OutTraceE("Blt: ERROR %x(%s) at %d", res, ExplainDDError(res), __LINE__); // copy back to destination res= (*pBlt)(lpdds, lpdestrect, (LPDIRECTDRAWSURFACE)lpddsTmp, lpsrcrect, DDBLT_WAIT, lpddbltfx); if(res) OutTraceE("Blt: ERROR %x(%s) at %d", res, ExplainDDError(res), __LINE__); if (res) BlitError(res, lpsrcrect, lpdestrect, __LINE__); (*pReleaseSMethod(dxversion))((LPDIRECTDRAWSURFACE)lpddsTmp); } if(res==DDERR_SURFACELOST){ lpdds->Restore(); res=(*pPrimaryBlt)(dxversion, pBlt, lpdds, lpdestrect, lpddssrc, lpsrcrect, lpddbltfx); OutTraceDW("Blt SURFACELOST RETRY: ret=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); } if(dxw.dwFlags1 & SUPPRESSDXERRORS) res=DD_OK; } return res; } // ... else blitting on emulated surface // ========================= // Blit/Flip to emulated primary surface // ========================= if(dxw.dwFlags5 & GDIMODE){ extern void BlitToWindow(HWND, LPDIRECTDRAWSURFACE); if((dxw.dwFlags1 & SAVELOAD) || (dxw.dwFlags8 & FORCEVSYNC)){ HRESULT res2; if(!bVSyncDone){ if(res2=lpPrimaryDD->WaitForVerticalBlank(DDWAITVB_BLOCKBEGIN , 0)) OutTraceE("WaitForVerticalBlank ERROR: res=%x\n", res2); } bVSyncDone = FALSE; } BlitToWindow(dxw.GethWnd(), lpddssrc); return DD_OK; } if (lpdestrect){ emurect=*lpdestrect; } else{ // emurect: emulated rect is full surface (dwWidth x dwHeight) emurect.left = 0; emurect.top = 0; emurect.right = dxw.GetScreenWidth(); emurect.bottom = dxw.GetScreenHeight(); } res=DD_OK; // blit only when source and dest surface are different. Should make ScreenRefresh faster. if (lpdds != lpddssrc){ if (IsDebug) BlitTrace("SRC2EMU", &emurect, &destrect, __LINE__); if(destrect.top == -32000) return DD_OK; // happens when window is minimized & do not notify on task switch ... if(lpdds->IsLost()) lpdds->Restore(); // lpDDSEmu_Back could get lost ..... res=(*pBlt)(lpdds, &emurect, lpddssrc, lpsrcrect, dwflags, lpddbltfx); } if (res) { BlitError(res, lpsrcrect, &emurect, __LINE__); DescribeSurface(lpdds, 0, "[DST]" , __LINE__); if (lpddssrc) DescribeSurface(lpddssrc, 0, "[SRC]" , __LINE__); // lpddssrc could be NULL!!! /* Dungeon Keeper II intro movies bug .... it seems that you can't blit from compressed or different surfaces in memory, while the operation COULD be supported to video. As a mater of fact, it DOES work on my PC. The error code is DDERR_UNSUPPORTED. v2.02.98: The same thing happens with "New York Racer", but with DDERR_EXCEPTION error code. V2.03.15: The same thing happens with "Silent Hunter III", but with DDERR_INVALIDRECT error code. */ if((res==DDERR_UNSUPPORTED) || (res==DDERR_EXCEPTION) || (res==DDERR_INVALIDRECT)){ //RECT targetrect; dxw.ShowOverlay(lpddssrc); if (IsDebug) BlitTrace("UNSUPP", &emurect, &destrect, __LINE__); //targetrect=dxw.MapWindowRect(&destrect); // v2.03.18 //res=(*pBlt)(lpDDSEmu_Prim, &targetrect, lpddssrc, lpsrcrect, dwflags, lpddbltfx); res=(*pBlt)(lpDDSEmu_Prim, &destrect, lpddssrc, lpsrcrect, dwflags, lpddbltfx); if (res) BlitError(res, lpsrcrect, &destrect, __LINE__); } // Try to handle HDC lock concurrency.... if(res==DDERR_SURFACEBUSY){ if (bFlippedDC) { ReleaseDC_Type pReleaseDC; switch(dxversion){ case 1: pReleaseDC=pReleaseDC1; break; case 2: pReleaseDC=pReleaseDC2; break; case 3: pReleaseDC=pReleaseDC3; break; case 4: pReleaseDC=pReleaseDC4; break; case 7: pReleaseDC=pReleaseDC7; break; } (*pReleaseDC)(lpdds, hFlippedDC); } // v2.03.49: resumed because if fixes locked surfaces on "Red Alert 1" on WinXP as reported by cloudstr if(lpddssrc) { // lpddssrc could be NULL!!! res=(*pUnlockMethod(dxversion))(lpddssrc, NULL); if(res && (res!=DDERR_NOTLOCKED)) OutTraceE("Unlock ERROR: lpdds=%x err=%x(%s)\n", lpddssrc, res, ExplainDDError(res)); } res=(*pUnlockMethod(dxversion))(lpdds, NULL); // v2.03.24 reintroduced because of "Virtua Cop" if(res && (res!=DDERR_NOTLOCKED)) OutTraceE("Unlock ERROR: lpdds=%x err=%x(%s)\n", lpdds, res, ExplainDDError(res)); if (IsDebug) BlitTrace("BUSY", &emurect, &destrect, __LINE__); res=(*pBlt)(lpdds, &emurect, lpddssrc, lpsrcrect, dwflags, lpddbltfx); if (res) BlitError(res, lpsrcrect, &destrect, __LINE__); } if(dxw.dwFlags1 & SUPPRESSDXERRORS) res=DD_OK; return res; } LPDIRECTDRAWSURFACE lpDDSSource; if (res=(*pColorConversion)(dxversion, lpdds, emurect, &lpDDSSource)) { OutTraceE("sBlt ERROR: Color conversion failed res=%x(%s)\n", res, ExplainDDError(res)); if(dxw.dwFlags1 & SUPPRESSDXERRORS) res=DD_OK; return res; } if(lpDDSEmu_Prim->IsLost()) lpDDSEmu_Prim->Restore(); dxw.ShowOverlay(lpDDSSource); if(dxw.dwFlags4 & BILINEAR2XFILTER){ emurect.right <<= 1; emurect.bottom <<= 1; } if((dxw.dwFlags1 & SAVELOAD) || (dxw.dwFlags8 & FORCEVSYNC)) { HRESULT res2; if(!bVSyncDone){ if(res2=lpPrimaryDD->WaitForVerticalBlank(DDWAITVB_BLOCKBEGIN , 0)) OutTraceE("WaitForVerticalBlank ERROR: res=%x\n", res2); } bVSyncDone = FALSE; } if (IsDebug) BlitTrace("BACK2PRIM", &emurect, &destrect, __LINE__); res=(*pPrimaryBlt)(dxversion, pBlt, lpDDSEmu_Prim, &destrect, lpDDSSource, &emurect, NULL); if (res) BlitError(res, &emurect, &destrect, __LINE__); if(dxw.dwFlags1 & SUPPRESSDXERRORS) res=DD_OK; if (IsDebug) OutTrace("%s: done ret=%x at %d\n", api, res, __LINE__); return res; } HRESULT WINAPI sBlt(int dxversion, Blt_Type pBlt, char *api, LPDIRECTDRAWSURFACE lpdds, LPRECT lpdestrect, LPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, DWORD dwflags, LPDDBLTFX lpddbltfx, BOOL isFlipping) { POINT p = {0, 0}; HRESULT res; BOOL ToPrim, FromPrim, ToScreen, FromScreen; if(dxw.dwFlags5 & MESSAGEPUMP) dxw.MessagePump(); ToPrim=dxwss.IsAPrimarySurface(lpdds); FromPrim=dxwss.IsAPrimarySurface(lpddssrc); ToScreen=ToPrim && !(dxw.dwFlags1 & EMULATESURFACE); FromScreen=FromPrim && !(dxw.dwFlags1 & EMULATESURFACE) && !(dxw.dwFlags1 & EMULATEBUFFER); // v2.02.77 // log if(IsTraceDW){ char sLog[256]; char sInfo[128]; sprintf(sLog, "%s: dest=%x%s src=%x%s dwFlags=%x(%s)", api, lpdds, (ToPrim ? "(PRIM)":""), lpddssrc, (FromPrim ? "(PRIM)":""), dwflags, ExplainBltFlags(dwflags)); if (lpdestrect) sprintf(sInfo, " destrect=(%d,%d)-(%d,%d)", lpdestrect->left, lpdestrect->top, lpdestrect->right, lpdestrect->bottom); else sprintf(sInfo, " destrect=(NULL)"); strcat(sLog, sInfo); if (lpsrcrect) sprintf(sInfo, " srcrect=(%d,%d)-(%d,%d)", lpsrcrect->left, lpsrcrect->top, lpsrcrect->right, lpsrcrect->bottom); else sprintf(sInfo, " srcrect=(NULL)"); strcat(sLog, sInfo); if(lpddbltfx){ if (dwflags & DDBLT_COLORFILL){ sprintf(sInfo, " ddbltfx.FillColor=%x", lpddbltfx->dwFillColor); strcat(sLog, sInfo); } if (dwflags & DDBLT_KEYDESTOVERRIDE){ sprintf(sInfo, " ddbltfx.DestColorkey=%x", lpddbltfx->ddckDestColorkey); strcat(sLog, sInfo); } if (dwflags & DDBLT_KEYSRCOVERRIDE){ sprintf(sInfo, " ddbltfx.SrcColorkey=%x", lpddbltfx->ddckSrcColorkey); strcat(sLog, sInfo); } if (dwflags & DDBLT_ROP){ sprintf(sInfo, " ddbltfx.ROP=%x", lpddbltfx->dwROP); strcat(sLog, sInfo); } if (dwflags & DDBLT_DEPTHFILL){ sprintf(sInfo, " ddbltfx.FillDepth=%x", lpddbltfx->dwFillDepth); strcat(sLog, sInfo); } } strcat(sLog,"\n"); OutTrace(sLog); } if(dxw.dwFlags8 & FORCEWAIT){ dwflags |= DDBLT_WAIT; dwflags &= ~(DDBLT_ASYNC|DDBLT_DONOTWAIT); } if(dxw.dwFlags8 & FORCENOWAIT){ dwflags &= ~DDBLT_WAIT; dwflags |= (DDBLT_ASYNC|DDBLT_DONOTWAIT); } if(ToPrim) res = sBltToPrimary(dxversion, pBlt, api, lpdds, lpdestrect, lpddssrc, lpsrcrect, dwflags, lpddbltfx, isFlipping); else res = sBltNoPrimary(dxversion, pBlt, api, lpdds, lpdestrect, lpddssrc, lpsrcrect, dwflags, lpddbltfx); return res; } ================================================ FILE: dll/ddcreates.cpp ================================================ #define _CRT_SECURE_NO_WARNINGS #define INITGUID //#define FULLHEXDUMP #include #include #include "dxwnd.h" #include "dxhook.h" #include "ddrawi.h" #include "dxwcore.hpp" #include "stdio.h" #include "hddraw.h" #include "dxhelper.h" #include "syslibs.h" #define MAXBACKBUFFERS 4 extern void SetPixFmt(LPDDSURFACEDESC2); extern void GetPixFmt(LPDDSURFACEDESC2); extern CHAR *LogSurfaceAttributes(LPDDSURFACEDESC2, char *, int); extern void DumpPixFmt(LPDDSURFACEDESC2); extern void DescribeSurface(LPDIRECTDRAWSURFACE, int, char *, int); extern void HookDDSurface(LPDIRECTDRAWSURFACE *, int, BOOL); extern void RegisterPixelFormat(int, LPDIRECTDRAWSURFACE); extern void SetVSyncDelays(int, LPDIRECTDRAW); extern char *DumpPixelFormat(LPDDSURFACEDESC2); extern void FixSurfaceCaps(LPDDSURFACEDESC2, int); extern SetPalette_Type pSetPaletteMethod(int); extern ReleaseS_Type pReleaseSMethod(int); extern CreatePalette_Type pCreatePaletteMethod(int); extern GetGDISurface_Type pGetGDISurfaceMethod(int); extern int iBakBufferVersion; extern LPDIRECTDRAWSURFACE lpDDSEmu_Prim; extern LPDIRECTDRAWSURFACE lpDDSEmu_Back; extern LPDIRECTDRAWSURFACE lpDDZBuffer; extern DDSURFACEDESC2 DDSD_Prim; extern LPDIRECTDRAWPALETTE lpDDP; extern LPDIRECTDRAWCLIPPER lpddC; extern LPDIRECTDRAW lpPrimaryDD; extern int iDDPExtraRefCounter; extern DWORD dwBackBufferCaps; extern BOOL bFlippedDC; extern PALETTEENTRY DefaultSystemPalette[]; extern GetGDISurface_Type pGetGDISurface1, pGetGDISurface2, pGetGDISurface3, pGetGDISurface4, pGetGDISurface7; extern GetAttachedSurface_Type pGetAttachedSurface1, pGetAttachedSurface2, pGetAttachedSurface3, pGetAttachedSurface4, pGetAttachedSurface7; extern CreateSurface1_Type pCreateSurface1, pCreateSurface2, pCreateSurface3, pCreateSurface4, pCreateSurface7; extern ReleaseS_Type pReleaseS1, pReleaseS2, pReleaseS3, pReleaseS4, pReleaseS7; extern GetPixelFormat_Type pGetPixelFormat1, pGetPixelFormat2, pGetPixelFormat3, pGetPixelFormat4, pGetPixelFormat7; void InitDSScreenParameters(int dxversion, LPDIRECTDRAWSURFACE lpdds) { HRESULT res; DDPIXELFORMAT p; DDSURFACEDESC2 ddsd; GetPixelFormat_Type pGetPixelFormat; switch(dxversion){ case 1: pGetPixelFormat=pGetPixelFormat1; break; case 2: pGetPixelFormat=pGetPixelFormat2; break; case 3: pGetPixelFormat=pGetPixelFormat3; break; case 4: pGetPixelFormat=pGetPixelFormat4; break; case 7: pGetPixelFormat=pGetPixelFormat7; break; } //OutTrace("dxversion=%d pGetPixelFormat=%x\n", dxversion, pGetPixelFormat); p.dwSize=sizeof(DDPIXELFORMAT); if(res=(*pGetPixelFormat)(lpdds, &p)){ OutTraceE("GetPixelFormat: ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); return; } ddsd.ddpfPixelFormat = p; OutTraceDW("InitDSScreenParameters: version=%d Actual %s\n", dxversion, DumpPixelFormat(&ddsd)); dxw.ActualPixelFormat = p; SetBltTransformations(dxversion); return; } static void ClearSurfaceDesc(void *ddsd, int dxversion) { int size; size = (dxversion < 4) ? sizeof(DDSURFACEDESC) : sizeof(DDSURFACEDESC2); memset(ddsd, 0, size); // Clean all ((LPDDSURFACEDESC)ddsd)->dwSize = size; } static void BuildRealSurfaces(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurface, int dxversion) { HRESULT res; DDSURFACEDESC2 ddsd; OutTraceDW("BuildRealSurfaces: lpdd=%x pCreateSurface=%x version=%d\n", lpdd, pCreateSurface, dxversion); if(lpDDSEmu_Prim==NULL){ ClearSurfaceDesc((void *)&ddsd, dxversion); ddsd.dwFlags = DDSD_CAPS; // try DDSCAPS_SYSTEMMEMORY first, then suppress it if not supported // no, DDSCAPS_SYSTEMMEMORY cause screen flickering while moving the window (and other troubles?) ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE; OutTraceDW("BuildRealSurfaces: %s\n", LogSurfaceAttributes(&ddsd, "[EmuPrim]", __LINE__)); res=(*pCreateSurface)(lpdd, &ddsd, &lpDDSEmu_Prim, 0); if(res==DDERR_PRIMARYSURFACEALREADYEXISTS){ OutTraceDW("BuildRealSurfaces: ASSERT DDSEmu_Prim already exists\n"); if(dxw.Windowize){ // in Windowize mode, the desktop properties are untouched, then the current primary surface can be recycled res=(*pGetGDISurfaceMethod(dxversion))(lpdd, &lpDDSEmu_Prim); } else { // in non-Windowized mode, the primary surface must be released and rebuilt with the proper properties res=(*pGetGDISurfaceMethod(dxversion))(lpdd, &lpDDSEmu_Prim); if (lpDDSEmu_Prim) while((*pReleaseSMethod(dxversion))(lpDDSEmu_Prim)); res=(*pCreateSurface)(lpdd, &ddsd, &lpDDSEmu_Prim, 0); } } if(res){ OutTraceE("BuildRealSurfaces: CreateSurface ERROR on DDSEmu_Prim res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); if(res==DDERR_INVALIDPIXELFORMAT) DumpPixFmt(&ddsd); return; } OutTraceDW("BuildRealSurfaces: created new DDSEmu_Prim=%x\n",lpDDSEmu_Prim); if(IsDebug) DescribeSurface(lpDDSEmu_Prim, dxversion, "DDSEmu_Prim", __LINE__); InitDSScreenParameters(dxversion, lpDDSEmu_Prim); dxwss.PopSurface(lpDDSEmu_Prim); if (dxw.dwFlags3 & FORCECLIPPER){ OutTraceDW("BuildRealSurfaces: FORCE SetClipper on primary hwnd=%x lpdds=%x\n", dxw.GethWnd(), lpDDSEmu_Prim); res=lpdd->CreateClipper(0, &lpddC, NULL); if (res) OutTraceE("BuildRealSurfaces: CreateClipper ERROR res=%x(%s)\n", res, ExplainDDError(res)); res=lpddC->SetHWnd(0, dxw.GethWnd()); if (res) OutTraceE("BuildRealSurfaces: SetHWnd ERROR res=%x(%s)\n", res, ExplainDDError(res)); res=lpDDSEmu_Prim->SetClipper(lpddC); if (res) OutTraceE("BuildRealSurfaces: SetClipper ERROR res=%x(%s)\n", res, ExplainDDError(res)); } // can't hook lpDDSEmu_Prim as generic, since the Flip method is unimplemented for a PRIMARY surface! // better avoid it or hook just useful methods. //if (dxw.dwTFlags & OUTPROXYTRACE) HookDDSurfaceGeneric(&lpDDSEmu_Prim, dxw.dwDDVersion); } if(lpDDSEmu_Back==NULL){ ClearSurfaceDesc((void *)&ddsd, dxversion); ddsd.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT; ddsd.ddsCaps.dwCaps = dwBackBufferCaps; ddsd.dwWidth = dxw.GetScreenWidth(); ddsd.dwHeight = dxw.GetScreenHeight(); if(dxw.dwFlags4 & BILINEAR2XFILTER){ // double backbuffer size ddsd.dwWidth = dxw.GetScreenWidth() << 1; ddsd.dwHeight = dxw.GetScreenHeight() << 1; } OutTraceDW("BuildRealSurfaces: %s\n", LogSurfaceAttributes(&ddsd, "[EmuBack]", __LINE__)); res=(*pCreateSurface)(lpdd, &ddsd, &lpDDSEmu_Back, 0); if(res) { ddsd.ddsCaps.dwCaps &= ~DDSCAPS_SYSTEMMEMORY; OutTraceDW("BuildRealSurfaces: %s\n", LogSurfaceAttributes(&ddsd, "[EmuBack]", __LINE__)); res=(*pCreateSurface)(lpdd, &ddsd, &lpDDSEmu_Back, 0); } if(res){ OutTraceE("BuildRealSurfaces: CreateSurface ERROR on DDSEmuBack : res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); if(res==DDERR_INVALIDPIXELFORMAT) DumpPixFmt(&ddsd); return; } OutTraceDW("BuildRealSurfaces: created new DDSEmu_Back=%x\n", lpDDSEmu_Back); if(IsDebug) DescribeSurface(lpDDSEmu_Back, dxversion, "DDSEmu_Back", __LINE__); dxwss.PopSurface(lpDDSEmu_Back); //if (dxw.dwTFlags & OUTPROXYTRACE) HookDDSurfaceGeneric(&lpDDSEmu_Back, dxversion); } } void RestoreDDrawSurfaces() { // if it's a ddraw game .... if(lpPrimaryDD){ OutTraceDW("RestoreDDrawSurfaces: rebuilding surfaces for dd session %x\n", lpPrimaryDD); ReleaseS_Type pReleaseS; CreateSurface_Type pCreateSurface; switch(iBakBufferVersion){ case 1: pCreateSurface=(CreateSurface_Type)pCreateSurface1; pReleaseS=pReleaseS1; break; case 2: pCreateSurface=(CreateSurface_Type)pCreateSurface2; pReleaseS=pReleaseS2; break; case 3: pCreateSurface=(CreateSurface_Type)pCreateSurface3; pReleaseS=pReleaseS3; break; case 4: pCreateSurface=(CreateSurface_Type)pCreateSurface4; pReleaseS=pReleaseS4; break; case 7: pCreateSurface=(CreateSurface_Type)pCreateSurface7; pReleaseS=pReleaseS7; break; } if(lpDDSEmu_Back) while((*pReleaseS)(lpDDSEmu_Back)); lpDDSEmu_Back=0; if(lpDDSEmu_Prim) while((*pReleaseS)(lpDDSEmu_Prim)); lpDDSEmu_Prim=0; BuildRealSurfaces(lpPrimaryDD, pCreateSurface, iBakBufferVersion); } } static HRESULT BuildPrimaryEmu(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurface, LPDDSURFACEDESC2 lpddsd, int dxversion, LPDIRECTDRAWSURFACE *lplpdds, void *pu) { DDSURFACEDESC2 ddsd; HRESULT res; OutTraceDW("BuildPrimaryEmu: lpdd=%x pCreateSurface=%x lpddsd=%x version=%d\n", lpdd, pCreateSurface, lpddsd, dxversion); // emulated primary surface memcpy((void *)&ddsd, lpddsd, lpddsd->dwSize); // handle the surface attributes before the ddsd.dwFlags gets updated: // if a surface desc is NOT specified, build one if(!(ddsd.dwFlags & DDSD_PIXELFORMAT)) SetPixFmt((LPDDSURFACEDESC2)&ddsd); // then save it dxw.VirtualPixelFormat = ddsd.ddpfPixelFormat; OutTraceDW("BuildPrimaryEmu: DDSD_PIXELFORMAT color=%d flags=%x\n", dxw.VirtualPixelFormat.dwRGBBitCount, dxw.VirtualPixelFormat.dwFlags); ddsd.dwFlags &= ~(DDSD_BACKBUFFERCOUNT|DDSD_REFRESHRATE); ddsd.dwFlags |= (DDSD_CAPS|DDSD_WIDTH|DDSD_HEIGHT|DDSD_PIXELFORMAT); ddsd.ddsCaps.dwCaps &= ~(DDSCAPS_PRIMARYSURFACE|DDSCAPS_FLIP|DDSCAPS_COMPLEX|DDSCAPS_VIDEOMEMORY|DDSCAPS_LOCALVIDMEM); // DDSCAPS_OFFSCREENPLAIN seems required to support the palette in memory surfaces ddsd.ddsCaps.dwCaps |= (DDSCAPS_OFFSCREENPLAIN|DDSCAPS_SYSTEMMEMORY); // on WinXP Fifa 99 doesn't like DDSCAPS_SYSTEMMEMORY cap, so better to leave a way to unset it.... if(dxw.dwFlags6 & NOSYSMEMPRIMARY) ddsd.ddsCaps.dwCaps &= ~DDSCAPS_SYSTEMMEMORY; ddsd.dwWidth = dxw.GetScreenWidth(); ddsd.dwHeight = dxw.GetScreenHeight(); // create Primary surface OutTraceDW("BuildPrimaryEmu: %s\n", LogSurfaceAttributes(&ddsd, "[Primary]" , __LINE__)); res=(*pCreateSurface)(lpdd, &ddsd, lplpdds, 0); if(res){ OutTraceE("BuildPrimaryEmu: CreateSurface ERROR on DDSPrim res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); if(res==DDERR_INVALIDPIXELFORMAT) DumpPixFmt(&ddsd); return res; } iBakBufferVersion=dxversion; // v2.03.01 OutTraceDW("BuildPrimaryEmu: created PRIMARY DDSPrim=%x\n", *lplpdds); if(IsDebug) DescribeSurface(*lplpdds, dxversion, "DDSPrim", __LINE__); HookDDSurface(lplpdds, dxversion, TRUE); // "Hoyle Casino Empire" opens a primary surface and NOT a backbuffer .... // build a default System palette and apply it to primary surface if((ddsd.ddpfPixelFormat.dwFlags & DDPF_PALETTEINDEXED8) && (dxw.dwFlags6 & SYNCPALETTE)){ if(lpDDP == NULL){ res=(*pCreatePaletteMethod(dxversion))(lpdd, DDPCAPS_8BIT|DDPCAPS_ALLOW256, DefaultSystemPalette, &lpDDP, NULL); if(res) OutTrace("BuildPrimaryEmu: CreatePalette ERROR err=%x at %d\n", res, __LINE__); } // this must be done after hooking - who knows why? res=(*pSetPaletteMethod(dxversion))(*lplpdds, lpDDP); if(res) { OutTraceE("BuildPrimaryEmu: SetPalette ERROR err=%x at %d\n", res, __LINE__); } else iDDPExtraRefCounter++; } // set a global capability value for surfaces that have to blit to primary // DDSCAPS_OFFSCREENPLAIN seems required to support the palette in memory surfaces // DDSCAPS_SYSTEMMEMORY makes operations faster, but it is not always good... dwBackBufferCaps = (DDSCAPS_OFFSCREENPLAIN|DDSCAPS_SYSTEMMEMORY); // on WinXP Fifa 99 doesn't like DDSCAPS_SYSTEMMEMORY cap, so better to leave a way to unset it.... // this is important to avoid that certain D3D operations will abort - see "Forsaken" problem if(dxw.dwFlags6 & NOSYSMEMBACKBUF) dwBackBufferCaps = DDSCAPS_OFFSCREENPLAIN; if(dxw.dwFlags6 & SHAREDDC) bFlippedDC = TRUE; if(dxw.dwFlags5 & GDIMODE) return DD_OK; BuildRealSurfaces(lpdd, pCreateSurface, dxversion); return DD_OK; } static HRESULT BuildPrimaryFlippable(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurface, LPDDSURFACEDESC2 lpddsd, int dxversion, LPDIRECTDRAWSURFACE *lplpdds, void *pu) { DDSURFACEDESC2 ddsd; HRESULT res; OutTraceDW("BuildPrimaryFlippable: lpdd=%x pCreateSurface=%x lpddsd=%x version=%d\n", lpdd, pCreateSurface, lpddsd, dxversion); // emulated primary surface memcpy((void *)&ddsd, lpddsd, lpddsd->dwSize); // handle the surface attributes before the ddsd.dwFlags gets updated: // if a surface desc is NOT specified, build one if(!(ddsd.dwFlags & DDSD_PIXELFORMAT)) SetPixFmt((LPDDSURFACEDESC2)&ddsd); // then save it dxw.VirtualPixelFormat = ddsd.ddpfPixelFormat; OutTraceDW("BuildPrimaryFlippable: DDSD_PIXELFORMAT color=%d flags=%x\n", dxw.VirtualPixelFormat.dwRGBBitCount, dxw.VirtualPixelFormat.dwFlags); // dwFlags ddsd.dwFlags &= ~(DDSD_REFRESHRATE); ddsd.dwFlags |= (DDSD_CAPS|DDSD_WIDTH|DDSD_HEIGHT|DDSD_PIXELFORMAT|DDSD_BACKBUFFERCOUNT); // DDSCAPS_OFFSCREENPLAIN seems required to support the palette in memory surfaces ddsd.ddsCaps.dwCaps |= (DDSCAPS_OFFSCREENPLAIN|DDSCAPS_SYSTEMMEMORY); // dwBackBufferCount: set to at least 1 if(!(lpddsd->dwFlags & DDSD_BACKBUFFERCOUNT) || (lpddsd->dwBackBufferCount == 0)) ddsd.dwBackBufferCount = 1; // dwCaps ddsd.ddsCaps.dwCaps &= ~(DDSCAPS_PRIMARYSURFACE|DDSCAPS_VIDEOMEMORY|DDSCAPS_LOCALVIDMEM|DDSCAPS_FRONTBUFFER); ddsd.ddsCaps.dwCaps |= (DDSCAPS_COMPLEX|DDSCAPS_FLIP|DDSCAPS_OFFSCREENPLAIN|DDSCAPS_SYSTEMMEMORY); // on WinXP Fifa 99 doesn't like DDSCAPS_SYSTEMMEMORY cap, so better to leave a way to unset it.... if(dxw.dwFlags6 & NOSYSMEMPRIMARY) ddsd.ddsCaps.dwCaps &= ~DDSCAPS_SYSTEMMEMORY; // dwWidth & dwHeight ddsd.dwWidth = dxw.GetScreenWidth(); ddsd.dwHeight = dxw.GetScreenHeight(); // create Primary surface OutTraceDW("BuildPrimaryFlippable: %s\n", LogSurfaceAttributes(&ddsd, "[Primary]" , __LINE__)); res=(*pCreateSurface)(lpdd, &ddsd, lplpdds, 0); if(res){ OutTraceE("BuildPrimaryFlippable: CreateSurface ERROR on DDSPrim res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); if(res==DDERR_INVALIDPIXELFORMAT) DumpPixFmt(&ddsd); return res; } iBakBufferVersion=dxversion; // v2.03.01 OutTraceDW("BuildPrimaryFlippable: created PRIMARY DDSPrim=%x\n", *lplpdds); if(IsDebug) DescribeSurface(*lplpdds, dxversion, "DDSPrim", __LINE__); HookDDSurface(lplpdds, dxversion, TRUE); // "Hoyle Casino Empire" opens a primary surface and NOT a backbuffer .... // build a default System palette and apply it to primary surface if((ddsd.ddpfPixelFormat.dwFlags & DDPF_PALETTEINDEXED8) && (dxw.dwFlags6 & SYNCPALETTE)){ if(lpDDP == NULL){ res=(*pCreatePaletteMethod(dxversion))(lpdd, DDPCAPS_8BIT|DDPCAPS_ALLOW256, DefaultSystemPalette, &lpDDP, NULL); if(res) OutTrace("BuildPrimaryFlippable: CreatePalette ERROR err=%x at %d\n", res, __LINE__); } // this must be done after hooking - who knows why? res=(*pSetPaletteMethod(dxversion))(*lplpdds, lpDDP); if(res) { OutTraceE("BuildPrimaryFlippable: SetPalette ERROR err=%x at %d\n", res, __LINE__); } else iDDPExtraRefCounter++; } // set a global capability value for surfaces that have to blit to primary dwBackBufferCaps = (DDSCAPS_OFFSCREENPLAIN|DDSCAPS_SYSTEMMEMORY); // on WinXP Fifa 99 doesn't like DDSCAPS_SYSTEMMEMORY cap, so better to leave a way to unset it.... // this is important to avoid that certain D3D operations will abort - see "Forsaken" problem if(dxw.dwFlags6 & NOSYSMEMBACKBUF) dwBackBufferCaps = DDSCAPS_OFFSCREENPLAIN; if(dxw.dwFlags6 & SHAREDDC) bFlippedDC = TRUE; if(dxw.dwFlags5 & GDIMODE) return DD_OK; BuildRealSurfaces(lpdd, pCreateSurface, dxversion); return DD_OK; } static HRESULT BuildPrimaryFullscreen(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurface, LPDDSURFACEDESC2 lpddsd, int dxversion, LPDIRECTDRAWSURFACE *lplpdds, void *pu) { DDSURFACEDESC2 ddsd; HRESULT res; OutTraceDW("BuildPrimaryFullscreen: lpdd=%x pCreateSurface=%x lpddsd=%x version=%d\n", lpdd, pCreateSurface, lpddsd, dxversion); // genuine primary surface memcpy((void *)&ddsd, lpddsd, lpddsd->dwSize); // create Primary surface OutTraceDW("BuildPrimaryFullscreen: %s\n", LogSurfaceAttributes(&ddsd, "[Primary]", __LINE__)); res=(*pCreateSurface)(lpdd, &ddsd, lplpdds, 0); if(res){ if (res==DDERR_PRIMARYSURFACEALREADYEXISTS){ LPDIRECTDRAWSURFACE lpPrim; GetGDISurface_Type pGetGDISurface; pGetGDISurface = pGetGDISurfaceMethod(dxversion); OutTraceE("BuildPrimaryFullscreen: CreateSurface DDERR_PRIMARYSURFACEALREADYEXISTS workaround\n"); (*pGetGDISurface)(lpPrimaryDD, &lpPrim); while ((*pReleaseSMethod(dxversion))(lpPrim)); res = (*pCreateSurface)(lpdd, &ddsd, lplpdds, 0); } /* fall through */ if(res){ OutTraceE("BuildPrimaryFullscreen: CreateSurface ERROR on DDSPrim res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); if(res==DDERR_INVALIDPIXELFORMAT) DumpPixFmt(&ddsd); return res; } } OutTraceDW("BuildPrimaryFullscreen: created PRIMARY DDSPrim=%x\n", *lplpdds); if(IsDebug) DescribeSurface(*lplpdds, dxversion, "DDSPrim", __LINE__); iBakBufferVersion=dxversion; HookDDSurface(lplpdds, dxversion, TRUE); if(dxw.dwFlags1 & CLIPCURSOR) dxw.SetClipCursor(); return DD_OK; } static HRESULT BuildPrimaryDir(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurface, LPDDSURFACEDESC2 lpddsd, int dxversion, LPDIRECTDRAWSURFACE *lplpdds, void *pu) { DDSURFACEDESC2 ddsd; HRESULT res; OutTraceDW("BuildPrimaryDir: lpdd=%x pCreateSurface=%x lpddsd=%x version=%d\n", lpdd, pCreateSurface, lpddsd, dxversion); // genuine primary surface memcpy((void *)&ddsd, lpddsd, lpddsd->dwSize); // v2.03.98 - when going to fullscreen mode and no emulation do not alter the capability masks, or in other words ... // if doing emulation or in window mode, fix the capability masks (De Morgan docet) ddsd.dwFlags &= ~(DDSD_WIDTH|DDSD_HEIGHT|DDSD_BACKBUFFERCOUNT|DDSD_REFRESHRATE|DDSD_PIXELFORMAT); ddsd.ddsCaps.dwCaps &= ~(DDSCAPS_FLIP|DDSCAPS_COMPLEX); // v2.02.93: don't move primary / backbuf surfaces on systemmemory when 3DDEVICE is requested // this impact also on capabilities for temporary surfaces for AERO optimized handling // v2.04.08: this seems not always true, so it can be bypassed by ALLOWSYSMEMON3DDEV, just in case. // should be tested with "Tomb Raider 3" in no emulation mode if(!(dxw.dwFlags8 & ALLOWSYSMEMON3DDEV)){ if ((lpddsd->dwFlags & DDSD_CAPS) && (lpddsd->ddsCaps.dwCaps & DDSCAPS_3DDEVICE)) ddsd.ddsCaps.dwCaps &= ~DDSCAPS_SYSTEMMEMORY; } // create Primary surface OutTraceDW("BuildPrimaryDir: %s\n", LogSurfaceAttributes(&ddsd, "[Primary]", __LINE__)); res=(*pCreateSurface)(lpdd, &ddsd, lplpdds, 0); if(res){ if (res==DDERR_PRIMARYSURFACEALREADYEXISTS){ LPDIRECTDRAWSURFACE lpPrim; GetGDISurface_Type pGetGDISurface; pGetGDISurface = pGetGDISurfaceMethod(dxversion); OutTraceE("BuildPrimaryDir: CreateSurface DDERR_PRIMARYSURFACEALREADYEXISTS workaround\n"); (*pGetGDISurface)(lpPrimaryDD, &lpPrim); while ((*pReleaseSMethod(dxversion))(lpPrim)); res = (*pCreateSurface)(lpdd, &ddsd, lplpdds, 0); } /* fall through */ if(res){ OutTraceE("BuildPrimaryDir: CreateSurface ERROR on DDSPrim res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); if(res==DDERR_INVALIDPIXELFORMAT) DumpPixFmt(&ddsd); return res; } } OutTraceDW("BuildPrimaryDir: created PRIMARY DDSPrim=%x\n", *lplpdds); if(IsDebug) DescribeSurface(*lplpdds, dxversion, "DDSPrim", __LINE__); if(dxw.dwFlags1 & EMULATEBUFFER){ lpDDSEmu_Prim = *lplpdds; dxwss.PopSurface(lpDDSEmu_Prim); ddsd.dwFlags = DDSD_WIDTH | DDSD_HEIGHT | DDSD_CAPS; // warning: can't create zero sized backbuffer surface !!!! ddsd.dwWidth = dxw.GetScreenWidth(); ddsd.dwHeight = dxw.GetScreenHeight(); ddsd.ddsCaps.dwCaps = 0; if (dxversion >= 4) ddsd.ddsCaps.dwCaps |= DDSCAPS_OFFSCREENPLAIN; OutTraceDW("BuildPrimaryDir: %s\n", LogSurfaceAttributes(&ddsd, "[Dir FixBuf]", __LINE__)); res=(*pCreateSurface)(lpdd, &ddsd, lplpdds, 0); if(res){ OutTraceE("BuildPrimaryDir: CreateSurface ERROR on DDSPrim res=%x(%s) at %d\n",res, ExplainDDError(res), __LINE__); return res; } OutTraceDW("BuildPrimaryDir: created FIX DDSPrim=%x\n", *lplpdds); if(IsDebug) DescribeSurface(*lplpdds, dxversion, "DDSPrim(2)", __LINE__); } iBakBufferVersion=dxversion; // v2.03.37 HookDDSurface(lplpdds, dxversion, TRUE); if(dxw.dwFlags1 & CLIPCURSOR) dxw.SetClipCursor(); return DD_OK; } static HRESULT BuildBackBufferEmu(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurface, LPDDSURFACEDESC2 lpddsd, int dxversion, LPDIRECTDRAWSURFACE *lplpdds, void *pu) { DDSURFACEDESC2 ddsd; HRESULT res; OutTraceDW("BuildBackBufferEmu: lpdd=%x pCreateSurface=%x lpddsd=%x version=%d\n", lpdd, pCreateSurface, lpddsd, dxversion); // create BackBuffer surface memcpy(&ddsd, lpddsd, lpddsd->dwSize); ddsd.dwFlags &= ~(DDSD_BACKBUFFERCOUNT|DDSD_REFRESHRATE); ddsd.dwFlags |= (DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH|DDSD_PIXELFORMAT); ddsd.ddsCaps.dwCaps &= ~(DDSCAPS_BACKBUFFER|DDSCAPS_PRIMARYSURFACE|DDSCAPS_FLIP|DDSCAPS_COMPLEX|DDSCAPS_VIDEOMEMORY|DDSCAPS_LOCALVIDMEM); // v2.03.75: if a surface desc is NOT specified, build one. This will allow ZBUF attach. if(!(lpddsd->dwFlags & DDSD_PIXELFORMAT)) SetPixFmt((LPDDSURFACEDESC2)&ddsd); // DDSCAPS_OFFSCREENPLAIN seems required to support the palette in memory surfaces ddsd.ddsCaps.dwCaps |= (DDSCAPS_SYSTEMMEMORY|DDSCAPS_OFFSCREENPLAIN); // necessary: Martian Gotic crashes otherwise // v2.04.08: this seems no longer true in some cases, so ALLOWSYSMEMON3DDEV will bypass it. // Should be tested with "Martian Gotic" and "Dominant Species" SW mode in emulation modes if(!(dxw.dwFlags8 & ALLOWSYSMEMON3DDEV)){ if((ddsd.dwFlags & DDSD_CAPS) && (ddsd.ddsCaps.dwCaps & DDSCAPS_3DDEVICE)) ddsd.ddsCaps.dwCaps &= ~DDSCAPS_SYSTEMMEMORY; } // on WinXP Fifa 99 doesn't like DDSCAPS_SYSTEMMEMORY cap, so better to leave a way to unset it.... if(dxw.dwFlags6 & NOSYSMEMBACKBUF) ddsd.ddsCaps.dwCaps &= ~DDSCAPS_SYSTEMMEMORY; ddsd.dwWidth = dxw.GetScreenWidth(); ddsd.dwHeight = dxw.GetScreenHeight(); GetPixFmt(&ddsd); OutTraceDW("BuildBackBufferEmu: %s\n", LogSurfaceAttributes(&ddsd, "[Backbuf]", __LINE__)); res=(*pCreateSurface)(lpdd, &ddsd, lplpdds, 0); if(res) { OutTraceE("BuildBackBufferEmu: CreateSurface ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); if(res==DDERR_INVALIDPIXELFORMAT) DumpPixFmt(&ddsd); return res; } OutTraceDW("BuildBackBufferEmu: created BACK DDSBack=%x\n", *lplpdds); if(IsDebug) DescribeSurface(*lplpdds, dxversion, "DDSBack", __LINE__); HookDDSurface(lplpdds, dxversion, FALSE); // added !!! iBakBufferVersion=dxversion; // v2.02.31 if((ddsd.ddpfPixelFormat.dwFlags & DDPF_PALETTEINDEXED8) && (dxw.dwFlags6 & SYNCPALETTE)){ if(lpDDP == NULL){ res=(*pCreatePaletteMethod(dxversion))(lpdd, DDPCAPS_8BIT|DDPCAPS_ALLOW256, DefaultSystemPalette, &lpDDP, NULL); if(res) OutTrace("BuildBackBufferEmu: CreatePalette ERROR err=%x at %d\n", res, __LINE__); } // this must be done after hooking - who knows why? res=(*pSetPaletteMethod(dxversion))(*lplpdds, lpDDP); if(res) { OutTraceE("BuildBackBufferEmu: SetPalette ERROR err=%x at %d\n", res, __LINE__); } else iDDPExtraRefCounter++; } // V2.1.85/V2.2.34: tricky !!!! // When a real backbuffer is created, it has a reference to its frontbuffer. // some games (Monopoly 3D) may depend on this setting - i.e. they could close // the exceeding references - so this is better be replicated adding an initial // reference to the zero count. But you don't have to do this if the backbuffer // is created independently by the primary surface. (*lplpdds)->AddRef(); // should it be repeated BBCount times???? return DD_OK; } static HRESULT BuildBackBufferFlippable(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurface, LPDDSURFACEDESC2 lpddsd, int dxversion, LPDIRECTDRAWSURFACE *lplpdds, void *pu) { DDSURFACEDESC2 ddsd; HRESULT res; OutTraceDW("BuildBackBufferFlippable: lpdd=%x pCreateSurface=%x lpddsd=%x version=%d\n", lpdd, pCreateSurface, lpddsd, dxversion); //MessageBox(NULL, "BuildBackBufferFlippable", "DxWnd", MB_OK); // create BackBuffer surface memcpy(&ddsd, lpddsd, lpddsd->dwSize); ddsd.dwFlags &= ~(DDSD_BACKBUFFERCOUNT|DDSD_REFRESHRATE); ddsd.dwFlags |= (DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH|DDSD_PIXELFORMAT); ddsd.ddsCaps.dwCaps &= ~(DDSCAPS_PRIMARYSURFACE|DDSCAPS_FRONTBUFFER|DDSCAPS_BACKBUFFER|DDSCAPS_VIDEOMEMORY|DDSCAPS_LOCALVIDMEM); ddsd.ddsCaps.dwCaps |= (DDSCAPS_SYSTEMMEMORY|DDSCAPS_OFFSCREENPLAIN); ddsd.dwWidth = dxw.GetScreenWidth(); ddsd.dwHeight = dxw.GetScreenHeight(); GetPixFmt(&ddsd); OutTraceDW("BuildBackBufferFlippable: %s\n", LogSurfaceAttributes(&ddsd, "[Backbuf]", __LINE__)); res=(*pCreateSurface)(lpdd, &ddsd, lplpdds, 0); if(res) { OutTraceE("BuildBackBufferFlippable: CreateSurface ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); if(res==DDERR_INVALIDPIXELFORMAT) DumpPixFmt(&ddsd); return res; } OutTraceDW("BuildBackBufferFlippable: created BACK DDSBack=%x\n", *lplpdds); if(IsDebug) DescribeSurface(*lplpdds, dxversion, "DDSBack", __LINE__); HookDDSurface(lplpdds, dxversion, FALSE); // added !!! iBakBufferVersion=dxversion; // v2.02.31 if((ddsd.ddpfPixelFormat.dwFlags & DDPF_PALETTEINDEXED8) && (dxw.dwFlags6 & SYNCPALETTE)){ if(lpDDP == NULL){ res=(*pCreatePaletteMethod(dxversion))(lpdd, DDPCAPS_8BIT|DDPCAPS_ALLOW256, DefaultSystemPalette, &lpDDP, NULL); if(res) OutTrace("BuildBackBufferFlippable: CreatePalette ERROR err=%x at %d\n", res, __LINE__); } // this must be done after hooking - who knows why? res=(*pSetPaletteMethod(dxversion))(*lplpdds, lpDDP); if(res) { OutTraceE("BuildBackBufferFlippable: SetPalette ERROR err=%x at %d\n", res, __LINE__); } else iDDPExtraRefCounter++; } return DD_OK; } static HRESULT AttachBackBufferFlippable(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurface, LPDDSURFACEDESC2 lpddsd, int dxversion, LPDIRECTDRAWSURFACE *lplpdds, void *pu) { HRESULT res; LPDIRECTDRAWSURFACE lpDDSPrim; OutTraceDW("AttachBackBufferFlippable: lpdd=%x pCreateSurface=%x lpddsd=%x version=%d\n", lpdd, pCreateSurface, lpddsd, dxversion); // retrieve the attached backbuffer surface and hook it if(lpddsd->dwBackBufferCount == 0) return DD_OK; // nothing to retrieve GetAttachedSurface_Type pGetAttachedSurface; DDSCAPS2 caps; switch(dxversion){ case 1: pGetAttachedSurface = pGetAttachedSurface1; break; case 2: pGetAttachedSurface = pGetAttachedSurface2; break; case 3: pGetAttachedSurface = pGetAttachedSurface3; break; case 4: pGetAttachedSurface = pGetAttachedSurface4; break; case 7: pGetAttachedSurface = pGetAttachedSurface7; break; } memset(&caps, 0, sizeof(caps)); caps.dwCaps = DDSCAPS_BACKBUFFER; lpDDSPrim = dxwss.GetPrimarySurface(); res = (*pGetAttachedSurface)(lpDDSPrim, (LPDDSCAPS)&caps, lplpdds); if(res){ OutTraceE("AttachBackBufferFlippable: GetAttachedSurface ERROR on DDSPrim res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); return res; } OutTraceDW("AttachBackBufferFlippable: retrieved BACK DDSBack=%x\n", *lplpdds); if(IsDebug) DescribeSurface(*lplpdds, dxversion, "DDSBack", __LINE__); HookDDSurface(lplpdds, dxversion, FALSE); // added !!! iBakBufferVersion=dxversion; // v2.02.31 return DD_OK; } static HRESULT BuildBackBufferFullscreen(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurface, LPDDSURFACEDESC2 lpddsd, int dxversion, LPDIRECTDRAWSURFACE *lplpdds, void *pu) { OutTraceDW("BuildBackBufferFullscreen: lpdd=%x pCreateSurface=%x lpddsd=%x version=%d\n", lpdd, pCreateSurface, lpddsd, dxversion); return DD_OK; } static HRESULT AttachBackBufferFullscreen(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurface, LPDDSURFACEDESC2 lpddsd, int dxversion, LPDIRECTDRAWSURFACE *lplpdds, void *pu) { OutTraceDW("AttachBackBufferFullscreen: lpdd=%x pCreateSurface=%x lpddsd=%x version=%d\n", lpdd, pCreateSurface, lpddsd, dxversion); return DD_OK; } static HRESULT BuildBackBufferDir(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurface, LPDDSURFACEDESC2 lpddsd, int dxversion, LPDIRECTDRAWSURFACE *lplpdds, void *pu) { DDSURFACEDESC2 ddsd; HRESULT res; OutTraceDW("BuildBackBufferDir: lpdd=%x pCreateSurface=%x lpddsd=%x version=%d\n", lpdd, pCreateSurface, lpddsd, dxversion); // create BackBuffer surface // ClearSurfaceDesc((void *)&ddsd, dxversion); memcpy(&ddsd, lpddsd, lpddsd->dwSize); if(dxw.IsEmulated || dxw.Windowize){ ddsd.dwFlags &= ~(DDSD_WIDTH|DDSD_HEIGHT|DDSD_BACKBUFFERCOUNT|DDSD_REFRESHRATE|DDSD_PIXELFORMAT); ddsd.dwFlags |= (DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH); ddsd.ddsCaps.dwCaps &= ~(DDSCAPS_PRIMARYSURFACE|DDSCAPS_FLIP|DDSCAPS_COMPLEX); // v2.02.93: don't move primary / backbuf surfaces on systemmemory when 3DDEVICE is requested // v2.04.08: possibly no longer true ... to test with "Tomb Raider 3" non emulated modes if(dxw.dwFlags8 & ALLOWSYSMEMON3DDEV){ ddsd.ddsCaps.dwCaps |= DDSCAPS_SYSTEMMEMORY; if (dxversion >= 4) ddsd.ddsCaps.dwCaps |= DDSCAPS_OFFSCREENPLAIN; ddsd.ddsCaps.dwCaps &= ~(DDSCAPS_VIDEOMEMORY|DDSCAPS_LOCALVIDMEM); } else { if(lpddsd->ddsCaps.dwCaps & DDSCAPS_3DDEVICE) { ddsd.ddsCaps.dwCaps &= ~DDSCAPS_SYSTEMMEMORY; } else { ddsd.ddsCaps.dwCaps |= DDSCAPS_SYSTEMMEMORY; if (dxversion >= 4) ddsd.ddsCaps.dwCaps |= DDSCAPS_OFFSCREENPLAIN; ddsd.ddsCaps.dwCaps &= ~(DDSCAPS_VIDEOMEMORY|DDSCAPS_LOCALVIDMEM); } } } if(dxw.dwFlags6 & NOSYSMEMBACKBUF) ddsd.ddsCaps.dwCaps &= ~DDSCAPS_SYSTEMMEMORY; ddsd.dwWidth = dxw.GetScreenWidth(); ddsd.dwHeight = dxw.GetScreenHeight(); if (dxw.dwFlags2 & BACKBUFATTACH) { LPDIRECTDRAWSURFACE lpPrim; DDSURFACEDESC2 prim; GetGDISurface_Type pGetGDISurface; pGetGDISurface = pGetGDISurfaceMethod(dxversion); (*pGetGDISurface)(lpPrimaryDD, &lpPrim); memset(&prim, 0, sizeof(DDSURFACEDESC2)); prim.dwSize = (dxversion >= 4) ? sizeof(DDSURFACEDESC2) : sizeof(DDSURFACEDESC); res=lpPrim->GetSurfaceDesc((DDSURFACEDESC *)&prim); (*pReleaseSMethod(dxversion))(lpPrim); ddsd.dwWidth = prim.dwWidth; ddsd.dwHeight = prim.dwHeight; OutTraceDW("BuildBackBufferDir: BMX FIX res=%x(%s) wxh=(%dx%d)\n", res, ExplainDDError(res),ddsd.dwWidth, ddsd.dwHeight); } OutTraceDW("BuildBackBufferDir: %s\n", LogSurfaceAttributes(&ddsd, "[Backbuf]", __LINE__)); res=(*pCreateSurface)(lpdd, &ddsd, lplpdds, 0); if(res) { if ((dxw.dwFlags1 & SWITCHVIDEOMEMORY) && (res==DDERR_OUTOFVIDEOMEMORY)){ OutTraceDW("BuildBackBufferDir: CreateSurface DDERR_OUTOFVIDEOMEMORY ERROR at %d, retry in SYSTEMMEMORY\n", __LINE__); ddsd.ddsCaps.dwCaps &= ~DDSCAPS_VIDEOMEMORY; ddsd.ddsCaps.dwCaps |= DDSCAPS_SYSTEMMEMORY; res=(*pCreateSurface)(lpdd, &ddsd, lplpdds, 0); } if(res){ OutTraceE("BuildBackBufferDir: CreateSurface ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); return res; } } OutTraceDW("BuildBackBufferDir: created BACK DDSBack=%x\n", *lplpdds); if(IsDebug) DescribeSurface(*lplpdds, dxversion, "DDSBack", __LINE__); HookDDSurface(lplpdds, dxversion, FALSE); // added !!! iBakBufferVersion=dxversion; // v2.02.31 return DD_OK; } static HRESULT BuildGenericEmu(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurface, LPDDSURFACEDESC2 lpddsd, int dxversion, LPDIRECTDRAWSURFACE *lplpdds, void *pu) { DDSURFACEDESC2 ddsd; HRESULT res; OutTraceDW("BuildGenericEmu: lpdd=%x pCreateSurface=%x lpddsd=%x version=%d\n", lpdd, pCreateSurface, lpddsd, dxversion); memcpy(&ddsd, lpddsd, lpddsd->dwSize); // Copy over .... FixSurfaceCaps(&ddsd, dxversion); // It looks that DDSCAPS_SYSTEMMEMORY surfaces can perfectly be DDSCAPS_3DDEVICE as well. // For "Risk II" it is necessary that both the primary surface and the offscreen surfaces are generated // with the same type, so that assuming an identical lPitch and memcopy-ing from one buffer to the // other is a legitimate operation. if(dxw.dwFlags6 & POWER2WIDTH){ // v2.03.28: POWER2WIDTH to fix "Midtown Madness" in surface emulation mode if(((ddsd.dwFlags & (DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH)) == (DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH)) && (ddsd.ddsCaps.dwCaps & DDSCAPS_OFFSCREENPLAIN) ){ DWORD dwWidth; dwWidth = ((ddsd.dwWidth + 3) >> 2) << 2; if(dwWidth != ddsd.dwWidth) OutTraceDW("BuildGenericEmu: POWER2WIDTH fix surface width %d->%d\n", ddsd.dwWidth, dwWidth); ddsd.dwWidth = dwWidth; } } res=(*pCreateSurface)(lpdd, &ddsd, lplpdds, pu); // v2.04.05: error condition found & fixed on certain platforms for "Dominant Species" only (so far). if (((res == DDERR_UNSUPPORTED) || (res == DDERR_UNSUPPORTEDMODE)) && (ddsd.ddsCaps.dwCaps & DDSCAPS_TEXTURE)){ OutTraceDW("BuildGenericEmu: CreateSurface ERROR res=%x(%s) at %d, TEXTURE->OFFSCREENPLAIN retry\n", res, ExplainDDError(res), __LINE__); ddsd.ddsCaps.dwCaps &= ~(DDSCAPS_TEXTURE|DDSCAPS_ALLOCONLOAD); ddsd.ddsCaps.dwCaps |= (DDSCAPS_OFFSCREENPLAIN); res=(*pCreateSurface)(lpdd, &ddsd, lplpdds, pu); } if ((dxw.dwFlags1 & SWITCHVIDEOMEMORY) && (res!=DD_OK)){ OutTraceDW("BuildGenericEmu: CreateSurface ERROR res=%x(%s) at %d, retry\n", res, ExplainDDError(res), __LINE__); ddsd.ddsCaps.dwCaps &= ~DDSCAPS_VIDEOMEMORY; ddsd.ddsCaps.dwCaps |= DDSCAPS_SYSTEMMEMORY; res=(*pCreateSurface)(lpdd, &ddsd, lplpdds, pu); } if (res) { OutTraceE("BuildGenericEmu: CreateSurface ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); return res; } OutTraceDW("BuildGenericEmu: CREATED lpddsd=%x version=%d %s\n", *lplpdds, dxversion, LogSurfaceAttributes(&ddsd, "[Emu Generic]", __LINE__)); // v2.02.66: if 8BPP paletized surface and a primary palette exixts, apply. // fixes "Virtua Fighter PC" palette bug if(lpDDP && (ddsd.ddpfPixelFormat.dwFlags & DDPF_PALETTEINDEXED8)){ res=(*pSetPaletteMethod(dxversion))(*lplpdds, lpDDP); if(res) OutTraceE("BuildGenericEmu: SetPalette ERROR lpdds=%x res=%x(%s) at %d\n", *lplpdds, res, ExplainDDError(res), __LINE__); else { OutTraceDW("BuildGenericEmu: applied palette lpddp=%x to lpdds=%x\n", lpDDP, *lplpdds); iDDPExtraRefCounter++; } } // diagnostic hooks .... HookDDSurface(lplpdds, dxversion, FALSE); return DD_OK; } static HRESULT BuildGenericFlippable(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurface, LPDDSURFACEDESC2 lpddsd, int dxversion, LPDIRECTDRAWSURFACE *lplpdds, void *pu) { DDSURFACEDESC2 ddsd; HRESULT res; OutTraceDW("BuildGenericFlippable: lpdd=%x pCreateSurface=%x lpddsd=%x version=%d\n", lpdd, pCreateSurface, lpddsd, dxversion); memcpy(&ddsd, lpddsd, lpddsd->dwSize); // Copy over .... FixSurfaceCaps(&ddsd, dxversion); if(dxw.dwFlags6 & POWER2WIDTH){ // v2.03.28: POWER2WIDTH to fix "Midtown Madness" in surface emulation mode if(((ddsd.dwFlags & (DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH)) == (DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH)) && (ddsd.ddsCaps.dwCaps & DDSCAPS_OFFSCREENPLAIN) ){ DWORD dwWidth; dwWidth = ((ddsd.dwWidth + 3) >> 2) << 2; if(dwWidth != ddsd.dwWidth) OutTraceDW("BuildGenericFlippable: POWER2WIDTH fix surface width %d->%d\n", ddsd.dwWidth, dwWidth); ddsd.dwWidth = dwWidth; } } res=(*pCreateSurface)(lpdd, &ddsd, lplpdds, pu); if ((dxw.dwFlags1 & SWITCHVIDEOMEMORY) && (res!=DD_OK)){ OutTraceDW("BuildGenericFlippable: CreateSurface ERROR res=%x(%s) at %d, retry\n", res, ExplainDDError(res), __LINE__); ddsd.ddsCaps.dwCaps &= ~DDSCAPS_VIDEOMEMORY; ddsd.ddsCaps.dwCaps |= DDSCAPS_SYSTEMMEMORY; res=(*pCreateSurface)(lpdd, &ddsd, lplpdds, pu); } if (res) { OutTraceE("BuildGenericFlippable: CreateSurface ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); return res; } OutTraceDW("BuildGenericFlippable: CREATED lpddsd=%x version=%d %s\n", *lplpdds, dxversion, LogSurfaceAttributes(&ddsd, "[Emu Generic]", __LINE__)); // v2.02.66: if 8BPP paletized surface and a primary palette exixts, apply. // fixes "Virtua Fighter PC" palette bug if(lpDDP && (ddsd.ddpfPixelFormat.dwFlags & DDPF_PALETTEINDEXED8)){ res=(*pSetPaletteMethod(dxversion))(*lplpdds, lpDDP); if(res) OutTraceE("BuildGenericFlippable: SetPalette ERROR on lpdds=%x res=%x(%s) at %d\n", *lplpdds, res, ExplainDDError(res), __LINE__); else { OutTraceDW("BuildGenericFlippable: applied palette lpddp=%x to lpdds=%x\n", lpDDP, *lplpdds); iDDPExtraRefCounter++; } } // diagnostic hooks .... HookDDSurface(lplpdds, dxversion, FALSE); return DD_OK; } static HRESULT BuildGenericDir(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurface, LPDDSURFACEDESC2 lpddsd, int dxversion, LPDIRECTDRAWSURFACE *lplpdds, void *pu) { HRESULT res; OutTraceDW("BuildGenericDir: lpdd=%x pCreateSurface=%x lpddsd=%x version=%d\n", lpdd, pCreateSurface, lpddsd, dxversion); OutTraceDW("BuildGenericDir: %s\n", LogSurfaceAttributes(lpddsd, "[Dir Generic]", __LINE__)); res = (*pCreateSurface)(lpdd, lpddsd, lplpdds, 0); if(res){ // v2.02.60: Ref. game Incoming GOG release, post by Marek, error DDERR_UNSUPPORTED while trying to create ZBUFFER surface if ((dxw.dwFlags1 & SWITCHVIDEOMEMORY) && ((res==DDERR_OUTOFVIDEOMEMORY)||(res==DDERR_UNSUPPORTED))){ OutTraceDW("BuildGenericDir: CreateSurface ERROR res=%x(%s) at %d, retry\n", res, ExplainDDError(res), __LINE__); lpddsd->ddsCaps.dwCaps &= ~DDSCAPS_VIDEOMEMORY; lpddsd->ddsCaps.dwCaps |= DDSCAPS_SYSTEMMEMORY; res = (*pCreateSurface)(lpdd, lpddsd, lplpdds, 0); } if(res){ OutTraceE("BuildGenericDir: CreateSurface ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); return res; } } OutTraceDW("BuildGenericDir: CREATED lpddsd=%x version=%d %s\n", *lplpdds, dxversion, LogSurfaceAttributes(lpddsd, "[Dir Generic]", __LINE__)); // hooks .... HookDDSurface(lplpdds, dxversion, FALSE); return DD_OK; } HRESULT WINAPI extCreateSurface(int dxversion, CreateSurface_Type pCreateSurface, LPDIRECTDRAW lpdd, DDSURFACEDESC2 *lpddsd, LPDIRECTDRAWSURFACE *lplpdds, void *pu) { HRESULT res; DDSURFACEDESC2 ddsd; LPDIRECTDRAWSURFACE lpDDSPrim; LPDIRECTDRAWSURFACE lpDDSBack = NULL; DWORD CurFlags; int TargetSize; typedef HRESULT (*BuildSurface_Type)(LPDIRECTDRAW, CreateSurface_Type, LPDDSURFACEDESC2, int, LPDIRECTDRAWSURFACE *, void *); static BuildSurface_Type BuildPrimary = 0; static BuildSurface_Type BuildBackBuffer = 0; static BuildSurface_Type AttachBackBuffer = 0; static BuildSurface_Type BuildGeneric = 0; static enum { PRIMARY_FULLSCREEN = 0, PRIMARY_DIRECT, PRIMARY_FLIPPABLE, PRIMARY_EMULATED } SurfaceMode; OutTraceDDRAW("CreateSurface(%d): lpdd=%x %s\n", dxversion, lpdd, LogSurfaceAttributes(lpddsd, "[CreateSurface]", __LINE__)); // v2.03.95.fx1 - deleted: some texture handling REQUIRES a proper FourCC codec. // maybe it could be suppressed by a dedicated config. flag and on primary surfaces only? //lpddsd->ddpfPixelFormat.dwFourCC = 0; // if not initialized yet .... if(BuildPrimary == 0){ char *sLabel; SurfaceMode = PRIMARY_FULLSCREEN; if(dxw.IsEmulated || dxw.Windowize){ SurfaceMode = (dxw.dwFlags1 & EMULATESURFACE) ? ((dxw.dwFlags6 & FLIPEMULATION) ? PRIMARY_EMULATED : PRIMARY_FLIPPABLE) : PRIMARY_DIRECT; } switch(SurfaceMode) { case PRIMARY_FULLSCREEN: BuildPrimary = BuildPrimaryFullscreen; BuildBackBuffer = BuildBackBufferFullscreen; AttachBackBuffer = AttachBackBufferFullscreen; BuildGeneric = BuildGenericDir; sLabel="FULLSCR"; break; case PRIMARY_DIRECT: BuildPrimary = BuildPrimaryDir; BuildBackBuffer = BuildBackBufferDir; AttachBackBuffer = BuildBackBufferDir; BuildGeneric = BuildGenericDir; sLabel="DIRECT"; break; case PRIMARY_FLIPPABLE: BuildPrimary = BuildPrimaryFlippable; BuildBackBuffer = BuildBackBufferFlippable; AttachBackBuffer = AttachBackBufferFlippable; BuildGeneric = BuildGenericFlippable; sLabel="FLIPPABLE"; break; case PRIMARY_EMULATED: BuildPrimary = BuildPrimaryEmu; BuildBackBuffer = BuildBackBufferEmu; AttachBackBuffer = BuildBackBufferEmu; BuildGeneric = BuildGenericEmu; sLabel="EMULATED"; break; } OutTraceDW("CreateSurface: MODE INITIALIZED mode=%d(%s)\n", SurfaceMode, sLabel); } // check for lpddsd->dwSize value TargetSize=(dxversion<4)?sizeof(DDSURFACEDESC):sizeof(DDSURFACEDESC2); if(lpddsd->dwSize != TargetSize){ char sMsg[81]; sprintf_s(sMsg,80, "CreateSurface: ASSERT bad dwSize=%d dxversion=%d\n", lpddsd->dwSize, dxversion); OutTraceDW(sMsg); if(IsAssertEnabled) MessageBox(0, sMsg, "CreateSurface", MB_OK | MB_ICONEXCLAMATION); return DDERR_INVALIDPARAMS; } //GHO workaround (needed for WarWind, Rogue Spear): if (lpddsd->dwFlags && !(lpddsd->dwFlags & 0x1)){ OutTraceDW("CreateSurface: fixing illegal dwFlags value: %x -> %x\n", lpddsd->dwFlags, (lpddsd->dwFlags | DDSD_CAPS)); lpddsd->dwFlags |= DDSD_CAPS; } memcpy(&ddsd, lpddsd, lpddsd->dwSize); // Copy // v2.02.38: this is odd: in "Star Force Deluxe" there is no PRIMARY surface, but a surface with // 0 flags and 0 capabilities serves for this purpose. Is it a side-effect of old ddraw releases? if((dxversion == 1) && ((ddsd.dwFlags & ~DDSD_BACKBUFFERCOUNT) == 0)){ // Star Force Deluxe ddsd.dwFlags = DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH; ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE; //if(dxw.VirtualPixelFormat.dwRGBBitCount == 8) ddsd.ddsCaps.dwCaps |= DDSCAPS_PALETTE; } // creation of the primary surface.... if(ddsd.dwFlags & DDSD_CAPS && ddsd.ddsCaps.dwCaps & DDSCAPS_PRIMARYSURFACE){ dxwss.ClearSurfaceList(); // v2.03.83: "Daytona USA" would saturate the list otherwise SetVSyncDelays(dxversion, lpdd); GetHookInfo()->Height=(short)dxw.GetScreenHeight(); GetHookInfo()->Width=(short)dxw.GetScreenWidth(); GetHookInfo()->ColorDepth=(short)dxw.VirtualPixelFormat.dwRGBBitCount; GetHookInfo()->DXVersion=dxversion; lpPrimaryDD = lpdd; // v2.1.87 memcpy(&DDSD_Prim, lpddsd, sizeof(DDSD_Prim)); // v2.02.37 // beware of the different behaviour between older and newer directdraw releases... if(dxversion >= 4){ if (lpDDSEmu_Back) while(lpDDSEmu_Back->Release()); if (lpDDSEmu_Prim) while(lpDDSEmu_Prim->Release()); if (ddsd.dwFlags & DDSD_BACKBUFFERCOUNT) { // Praetorians !!!! lpDDSBack = dxwss.GetBackBufferSurface(); if (lpDDSBack) { if(dxw.dwFlags6 & FLIPEMULATION) while(lpDDSBack->Release()); dxwss.PopSurface(lpDDSBack); lpDDSBack = NULL; } } } lpDDSEmu_Back=NULL; lpDDSEmu_Prim=NULL; int BBCount=0; // or 1 ?? if (ddsd.dwFlags & DDSD_BACKBUFFERCOUNT) BBCount=ddsd.dwBackBufferCount; if ((BBCount > 0) && (iBakBufferVersion < 4)){ lpDDSBack=NULL; OutTraceDW("CreateSurface: backbuffer cleared - BackBufferCount=%d\n", BBCount); } if (BBCount > MAXBACKBUFFERS){ char sMsg[81]; sprintf_s(sMsg, 80, "CreateSurface: BackBufferCount=%d\n", BBCount); OutTraceDW(sMsg); if (IsAssertEnabled) MessageBox(0, sMsg, "CreateSurface", MB_OK | MB_ICONEXCLAMATION); // recover ... BBCount = MAXBACKBUFFERS; } // build emulated primary surface, real primary and backbuffer surfaces CurFlags=ddsd.dwFlags; res=BuildPrimary(lpdd, pCreateSurface, lpddsd, dxversion, lplpdds, NULL); if(res) return res; lpDDSPrim = *lplpdds; dxwss.PushPrimarySurface(lpDDSPrim, dxversion, lpddsd->ddsCaps.dwCaps); RegisterPixelFormat(dxversion, lpDDSPrim); if (BBCount){ DWORD dwCaps; // build emulated backbuffer surface res=AttachBackBuffer(lpdd, pCreateSurface, lpddsd, dxversion, &lpDDSBack, NULL); if(res) return res; // here we try to guess what sort of capabilities would expose a built-in backbuffer surface dwCaps = lpddsd->ddsCaps.dwCaps; dwCaps &= ~DDSCAPS_PRIMARYSURFACE; dwCaps |= (DDSCAPS_BACKBUFFER|DDSCAPS_VIDEOMEMORY); dxwss.PushBackBufferSurface(lpDDSBack, dxversion, dwCaps); } if(IsTraceDDRAW){ char sInfo[256+1]; sprintf(sInfo, "CreateSurface: created DDSPrim=%x DDSBack=%x", lpDDSPrim, lpDDSBack); if(dxw.IsEmulated) sprintf(sInfo, "%s DDSEmu_Prim=%x", sInfo, lpDDSEmu_Prim); if(dxw.dwFlags1 & EMULATESURFACE) sprintf(sInfo, "%s DDSEmu_Back=%x", sInfo, lpDDSEmu_Back); strcat(sInfo, "\n"); OutTrace(sInfo); } // rebuild the clipper area if(dxw.dwFlags1 & CLIPCURSOR) dxw.SetClipCursor(); // v2.2.64: added extra ref needed to preserve ddraw session for later use. Is it a ddraw1 legacy? // seems to fix problems in "Warhammer 40K Rites Of War" that uses a ddraw session after reaching 0 refcount. // v2.2.84: avoid the extra referenced in non windowed mode since it causes the window shift reported by gsky916 // for Wind Fantasy SP. // v2.3.59: same extra reference is needed by "Wahammer Chaos Gate" that uses ddraw interface release 2 // v2.3.72: fixed previous fix: condition is <=2, not >=2 ! // Be aware that it may perhaps become <=3, if we get the same problem elsewhere // v2.3.96: deleted the if(Windowized) condition: AddRef is needed also in fullscreen mode. if(dxw.dwDDVersion<=2) lpdd->AddRef(); return DD_OK; } // a request for a separate (not complex) backbuffer to attach later on, maybe. if ((ddsd.dwFlags & DDSD_CAPS) && (ddsd.ddsCaps.dwCaps & DDSCAPS_BACKBUFFER)){ if (lpDDSBack) { OutTraceDW("CreateSurface: returning current DDSBack=%x\n", lpDDSBack); *lplpdds = lpDDSBack; return DD_OK; } res=BuildBackBuffer(lpdd, pCreateSurface, lpddsd, dxversion, lplpdds, NULL); if(res == DD_OK) dxwss.PushBackBufferSurface(*lplpdds, dxversion, lpddsd->ddsCaps.dwCaps); return res; } // if nothing else, it's a generic/zbuffer surface // Note: should DxWnd trace a memory 3D surface that will be used as reference surface for D3D CreateDevice? res=BuildGeneric(lpdd, pCreateSurface, lpddsd, dxversion, lplpdds, pu); if(!res) { dxwss.PopSurface(*lplpdds); if(lpddsd->ddsCaps.dwCaps & DDSCAPS_ZBUFFER) { // v2.03.82: save ZBUFFER capabilities for later fix in D3D CreateDevice OutTraceDW("CreateSurface: lpDDZBuffer=%x save ZBUFFER caps=%x(%s)\n", *lplpdds, lpddsd->ddsCaps.dwCaps, ExplainDDSCaps(lpddsd->ddsCaps.dwCaps)); lpDDZBuffer = *lplpdds; // save surface size expressed in bytes extern int ZBufferSize; ZBufferSize = lpddsd->dwWidth * lpddsd->dwHeight * (lpddsd->ddpfPixelFormat.dwZBufferBitDepth >> 3); dxwss.PushZBufferSurface(*lplpdds, dxversion, lpddsd->ddsCaps.dwCaps); OutTraceDW("CreateSurface: ZBufferSize=%d\n", ZBufferSize); } else { if(lpddsd->ddsCaps.dwCaps & DDSCAPS_3DDEVICE) { OutTraceDW("CreateSurface: lpDD3DRef=%x save 3DREF caps=%x(%s)\n", *lplpdds, lpddsd->ddsCaps.dwCaps, ExplainDDSCaps(lpddsd->ddsCaps.dwCaps)); dxwss.Push3DRefSurface(*lplpdds, dxversion, lpddsd->ddsCaps.dwCaps); } } } return res; } ================================================ FILE: dll/ddraw.cpp ================================================ #define _CRT_SECURE_NO_WARNINGS #define INITGUID //#define FULLHEXDUMP #include #include #include "dxwnd.h" #include "dxhook.h" #include "ddrawi.h" #include "dxwcore.hpp" #include "stdio.h" #include "hddraw.h" #include "dxhelper.h" #include "syslibs.h" #define HANDLEFLIPPABLE #ifdef CHECKMETHODPOINTERS static void NullMethodPointer(char *s) { char msg[80]; sprintf(msg, "NULL %s method", s); MessageBox(0, msg, "DxWnd", MB_OK); } #define CHECKPTR(p, s) if(!p) NullMethodPointer(s) #else #define CHECKPTR(p, s) #endif extern BOOL IsChangeDisplaySettingsHotPatched; extern void TextureHandling(LPDIRECTDRAWSURFACE, int); extern void SetMinimalCaps(int, LPDDCAPS, LPDDCAPS); ColorConversion_Type pColorConversion = NULL; extern HRESULT WINAPI extQueryInterfaceDX(int, QueryInterface_Type, void *, REFIID, LPVOID *); HDC hFlippedDC = NULL; BOOL bFlippedDC = FALSE; DWORD dwBackBufferCaps = 0; BOOL bVSyncDone; // DirectDraw API HRESULT WINAPI extDirectDrawCreate(GUID FAR *, LPDIRECTDRAW FAR *, IUnknown FAR *); HRESULT WINAPI extDirectDrawCreateEx(GUID FAR *, LPDIRECTDRAW FAR *, REFIID, IUnknown FAR *); HRESULT WINAPI extDirectDrawEnumerateA(LPDDENUMCALLBACKA, LPVOID); HRESULT WINAPI extDirectDrawEnumerateExA(LPDDENUMCALLBACKEXA, LPVOID, DWORD); HRESULT WINAPI extDirectDrawEnumerateW(LPDDENUMCALLBACKW, LPVOID); HRESULT WINAPI extDirectDrawEnumerateExW(LPDDENUMCALLBACKEXW, LPVOID, DWORD); HRESULT WINAPI extDirectDrawCreateClipper(DWORD, LPDIRECTDRAWCLIPPER *, IUnknown *); // DirectDraw HRESULT WINAPI extQueryInterfaceD1(void *, REFIID, LPVOID *); HRESULT WINAPI extQueryInterfaceD2(void *, REFIID, LPVOID *); HRESULT WINAPI extQueryInterfaceD3(void *, REFIID, LPVOID *); HRESULT WINAPI extQueryInterfaceD4(void *, REFIID, LPVOID *); HRESULT WINAPI extQueryInterfaceD7(void *, REFIID, LPVOID *); ULONG WINAPI extReleaseD1(LPDIRECTDRAW); ULONG WINAPI extReleaseD2(LPDIRECTDRAW); ULONG WINAPI extReleaseD3(LPDIRECTDRAW); ULONG WINAPI extReleaseD4(LPDIRECTDRAW); ULONG WINAPI extReleaseD7(LPDIRECTDRAW); /*** IDirectDraw methods ***/ HRESULT WINAPI extCompact(LPDIRECTDRAW); // unimplemented method ??? HRESULT WINAPI extCreateClipper1(LPDIRECTDRAW, DWORD, LPDIRECTDRAWCLIPPER FAR* , IUnknown FAR*); HRESULT WINAPI extCreateClipper2(LPDIRECTDRAW, DWORD, LPDIRECTDRAWCLIPPER FAR* , IUnknown FAR*); HRESULT WINAPI extCreateClipper3(LPDIRECTDRAW, DWORD, LPDIRECTDRAWCLIPPER FAR* , IUnknown FAR*); HRESULT WINAPI extCreateClipper4(LPDIRECTDRAW, DWORD, LPDIRECTDRAWCLIPPER FAR* , IUnknown FAR*); HRESULT WINAPI extCreateClipper7(LPDIRECTDRAW, DWORD, LPDIRECTDRAWCLIPPER FAR* , IUnknown FAR*); HRESULT WINAPI extCreatePalette1(LPDIRECTDRAW, DWORD, LPPALETTEENTRY, LPDIRECTDRAWPALETTE *, IUnknown *); HRESULT WINAPI extCreatePalette2(LPDIRECTDRAW, DWORD, LPPALETTEENTRY, LPDIRECTDRAWPALETTE *, IUnknown *); HRESULT WINAPI extCreatePalette3(LPDIRECTDRAW, DWORD, LPPALETTEENTRY, LPDIRECTDRAWPALETTE *, IUnknown *); HRESULT WINAPI extCreatePalette4(LPDIRECTDRAW, DWORD, LPPALETTEENTRY, LPDIRECTDRAWPALETTE *, IUnknown *); HRESULT WINAPI extCreatePalette7(LPDIRECTDRAW, DWORD, LPPALETTEENTRY, LPDIRECTDRAWPALETTE *, IUnknown *); HRESULT WINAPI extCreateSurface1(LPDIRECTDRAW, DDSURFACEDESC *, LPDIRECTDRAWSURFACE *, void *); HRESULT WINAPI extCreateSurface2(LPDIRECTDRAW, DDSURFACEDESC *, LPDIRECTDRAWSURFACE *, void *); HRESULT WINAPI extCreateSurface3(LPDIRECTDRAW, DDSURFACEDESC *, LPDIRECTDRAWSURFACE *, void *); HRESULT WINAPI extCreateSurface4(LPDIRECTDRAW, DDSURFACEDESC2 *, LPDIRECTDRAWSURFACE *, void *); HRESULT WINAPI extCreateSurface7(LPDIRECTDRAW, DDSURFACEDESC2 *, LPDIRECTDRAWSURFACE *, void *); HRESULT WINAPI extDuplicateSurface1(LPDIRECTDRAW, LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE FAR *); HRESULT WINAPI extDuplicateSurface2(LPDIRECTDRAW, LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE FAR *); HRESULT WINAPI extDuplicateSurface3(LPDIRECTDRAW, LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE FAR *); HRESULT WINAPI extDuplicateSurface4(LPDIRECTDRAW, LPDIRECTDRAWSURFACE4, LPDIRECTDRAWSURFACE4 FAR *); HRESULT WINAPI extDuplicateSurface7(LPDIRECTDRAW, LPDIRECTDRAWSURFACE7, LPDIRECTDRAWSURFACE7 FAR *); HRESULT WINAPI extFlipToGDISurface1(LPDIRECTDRAW); HRESULT WINAPI extFlipToGDISurface2(LPDIRECTDRAW); HRESULT WINAPI extFlipToGDISurface3(LPDIRECTDRAW); HRESULT WINAPI extFlipToGDISurface4(LPDIRECTDRAW); HRESULT WINAPI extFlipToGDISurface7(LPDIRECTDRAW); HRESULT WINAPI extGetDisplayMode1(LPDIRECTDRAW, LPDDSURFACEDESC); HRESULT WINAPI extGetDisplayMode2(LPDIRECTDRAW, LPDDSURFACEDESC); HRESULT WINAPI extGetDisplayMode3(LPDIRECTDRAW, LPDDSURFACEDESC); HRESULT WINAPI extGetDisplayMode4(LPDIRECTDRAW, LPDDSURFACEDESC2); HRESULT WINAPI extGetDisplayMode7(LPDIRECTDRAW, LPDDSURFACEDESC2); HRESULT WINAPI extGetGDISurface1(LPDIRECTDRAW, LPDIRECTDRAWSURFACE *); HRESULT WINAPI extGetGDISurface2(LPDIRECTDRAW, LPDIRECTDRAWSURFACE *); HRESULT WINAPI extGetGDISurface3(LPDIRECTDRAW, LPDIRECTDRAWSURFACE *); HRESULT WINAPI extGetGDISurface4(LPDIRECTDRAW, LPDIRECTDRAWSURFACE *); HRESULT WINAPI extGetGDISurface7(LPDIRECTDRAW, LPDIRECTDRAWSURFACE *); HRESULT WINAPI extEnumDisplayModes1(LPDIRECTDRAW, DWORD, LPDDSURFACEDESC, LPVOID, LPDDENUMMODESCALLBACK); HRESULT WINAPI extEnumDisplayModes2(LPDIRECTDRAW, DWORD, LPDDSURFACEDESC, LPVOID, LPDDENUMMODESCALLBACK); HRESULT WINAPI extEnumDisplayModes3(LPDIRECTDRAW, DWORD, LPDDSURFACEDESC, LPVOID, LPDDENUMMODESCALLBACK); HRESULT WINAPI extEnumDisplayModes4(LPDIRECTDRAW, DWORD, LPDDSURFACEDESC2, LPVOID, LPDDENUMMODESCALLBACK2); HRESULT WINAPI extEnumDisplayModes7(LPDIRECTDRAW, DWORD, LPDDSURFACEDESC2, LPVOID, LPDDENUMMODESCALLBACK2); HRESULT WINAPI extInitialize1(LPDIRECTDRAW, FAR GUID *); HRESULT WINAPI extInitialize2(LPDIRECTDRAW, FAR GUID *); HRESULT WINAPI extInitialize3(LPDIRECTDRAW, FAR GUID *); HRESULT WINAPI extInitialize4(LPDIRECTDRAW, FAR GUID *); HRESULT WINAPI extInitialize7(LPDIRECTDRAW, FAR GUID *); HRESULT WINAPI extRestoreDisplayMode1(LPDIRECTDRAW); HRESULT WINAPI extRestoreDisplayMode2(LPDIRECTDRAW); HRESULT WINAPI extRestoreDisplayMode3(LPDIRECTDRAW); HRESULT WINAPI extRestoreDisplayMode4(LPDIRECTDRAW); HRESULT WINAPI extRestoreDisplayMode7(LPDIRECTDRAW); HRESULT WINAPI extSetCooperativeLevel1(LPDIRECTDRAW, HWND, DWORD); HRESULT WINAPI extSetCooperativeLevel2(LPDIRECTDRAW, HWND, DWORD); HRESULT WINAPI extSetCooperativeLevel3(LPDIRECTDRAW, HWND, DWORD); HRESULT WINAPI extSetCooperativeLevel4(LPDIRECTDRAW, HWND, DWORD); HRESULT WINAPI extSetCooperativeLevel7(LPDIRECTDRAW, HWND, DWORD); HRESULT WINAPI extSetDisplayMode1(LPDIRECTDRAW, DWORD, DWORD, DWORD); HRESULT WINAPI extSetDisplayMode2(LPDIRECTDRAW, DWORD, DWORD, DWORD, DWORD, DWORD); HRESULT WINAPI extSetDisplayMode3(LPDIRECTDRAW, DWORD, DWORD, DWORD, DWORD, DWORD); HRESULT WINAPI extSetDisplayMode4(LPDIRECTDRAW, DWORD, DWORD, DWORD, DWORD, DWORD); HRESULT WINAPI extSetDisplayMode7(LPDIRECTDRAW, DWORD, DWORD, DWORD, DWORD, DWORD); HRESULT WINAPI extWaitForVerticalBlank1(LPDIRECTDRAW, DWORD, HANDLE); HRESULT WINAPI extWaitForVerticalBlank2(LPDIRECTDRAW, DWORD, HANDLE); HRESULT WINAPI extWaitForVerticalBlank3(LPDIRECTDRAW, DWORD, HANDLE); HRESULT WINAPI extWaitForVerticalBlank4(LPDIRECTDRAW, DWORD, HANDLE); HRESULT WINAPI extWaitForVerticalBlank7(LPDIRECTDRAW, DWORD, HANDLE); /*** Added in the V2 Interface ***/ HRESULT WINAPI extGetAvailableVidMem2(LPDIRECTDRAW, LPDDSCAPS, LPDWORD, LPDWORD); HRESULT WINAPI extGetAvailableVidMem3(LPDIRECTDRAW, LPDDSCAPS, LPDWORD, LPDWORD); HRESULT WINAPI extGetAvailableVidMem4(LPDIRECTDRAW, LPDDSCAPS2, LPDWORD, LPDWORD); HRESULT WINAPI extGetAvailableVidMem7(LPDIRECTDRAW, LPDDSCAPS2, LPDWORD, LPDWORD); /*** Added in the V4 Interface ***/ HRESULT WINAPI extTestCooperativeLevel4(LPDIRECTDRAW); HRESULT WINAPI extTestCooperativeLevel7(LPDIRECTDRAW); // STDMETHOD(StartModeTest)(THIS_ LPSIZE, DWORD, DWORD ) PURE; // STDMETHOD(EvaluateMode)(THIS_ DWORD, DWORD * ) PURE; HRESULT WINAPI extGetCaps1D(LPDIRECTDRAW, LPDDCAPS, LPDDCAPS); HRESULT WINAPI extGetCaps2D(LPDIRECTDRAW, LPDDCAPS, LPDDCAPS); HRESULT WINAPI extGetCaps3D(LPDIRECTDRAW, LPDDCAPS, LPDDCAPS); HRESULT WINAPI extGetCaps4D(LPDIRECTDRAW, LPDDCAPS, LPDDCAPS); HRESULT WINAPI extGetCaps7D(LPDIRECTDRAW, LPDDCAPS, LPDDCAPS); HRESULT WINAPI extGetScanLine1(LPDIRECTDRAW, LPDWORD); HRESULT WINAPI extGetScanLine2(LPDIRECTDRAW, LPDWORD); HRESULT WINAPI extGetScanLine3(LPDIRECTDRAW, LPDWORD); HRESULT WINAPI extGetScanLine4(LPDIRECTDRAW, LPDWORD); HRESULT WINAPI extGetScanLine7(LPDIRECTDRAW, LPDWORD); /*** Added in the V7 Interface ??? ***/ HRESULT WINAPI extStartModeTest(LPDIRECTDRAW, LPSIZE, DWORD, DWORD); HRESULT WINAPI extEvaluateMode(LPDIRECTDRAW, DWORD, DWORD *); // DirectDrawSurface HRESULT WINAPI extQueryInterfaceS1(void *, REFIID, LPVOID *); HRESULT WINAPI extQueryInterfaceS2(void *, REFIID, LPVOID *); HRESULT WINAPI extQueryInterfaceS3(void *, REFIID, LPVOID *); HRESULT WINAPI extQueryInterfaceS4(void *, REFIID, LPVOID *); HRESULT WINAPI extQueryInterfaceS7(void *, REFIID, LPVOID *); HRESULT WINAPI extReleaseS1(LPDIRECTDRAWSURFACE); HRESULT WINAPI extReleaseS2(LPDIRECTDRAWSURFACE); HRESULT WINAPI extReleaseS3(LPDIRECTDRAWSURFACE); HRESULT WINAPI extReleaseS4(LPDIRECTDRAWSURFACE); HRESULT WINAPI extReleaseS7(LPDIRECTDRAWSURFACE); /*** IDirectDrawSurface methods ***/ HRESULT WINAPI extAddAttachedSurface1(LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE); HRESULT WINAPI extAddAttachedSurface2(LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE); HRESULT WINAPI extAddAttachedSurface3(LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE); HRESULT WINAPI extAddAttachedSurface4(LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE); HRESULT WINAPI extAddAttachedSurface7(LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE); HRESULT WINAPI extBlt1(LPDIRECTDRAWSURFACE, LPRECT, LPDIRECTDRAWSURFACE, LPRECT, DWORD, LPDDBLTFX); HRESULT WINAPI extBlt2(LPDIRECTDRAWSURFACE, LPRECT, LPDIRECTDRAWSURFACE, LPRECT, DWORD, LPDDBLTFX); HRESULT WINAPI extBlt3(LPDIRECTDRAWSURFACE, LPRECT, LPDIRECTDRAWSURFACE, LPRECT, DWORD, LPDDBLTFX); HRESULT WINAPI extBlt4(LPDIRECTDRAWSURFACE, LPRECT, LPDIRECTDRAWSURFACE, LPRECT, DWORD, LPDDBLTFX); HRESULT WINAPI extBlt7(LPDIRECTDRAWSURFACE, LPRECT, LPDIRECTDRAWSURFACE, LPRECT, DWORD, LPDDBLTFX); HRESULT WINAPI extBltFast1(LPDIRECTDRAWSURFACE, DWORD, DWORD, LPDIRECTDRAWSURFACE, LPRECT, DWORD); HRESULT WINAPI extBltFast2(LPDIRECTDRAWSURFACE, DWORD, DWORD, LPDIRECTDRAWSURFACE, LPRECT, DWORD); HRESULT WINAPI extBltFast3(LPDIRECTDRAWSURFACE, DWORD, DWORD, LPDIRECTDRAWSURFACE, LPRECT, DWORD); HRESULT WINAPI extBltFast4(LPDIRECTDRAWSURFACE, DWORD, DWORD, LPDIRECTDRAWSURFACE, LPRECT, DWORD); HRESULT WINAPI extBltFast7(LPDIRECTDRAWSURFACE, DWORD, DWORD, LPDIRECTDRAWSURFACE, LPRECT, DWORD); HRESULT WINAPI extDeleteAttachedSurface1(LPDIRECTDRAWSURFACE, DWORD, LPDIRECTDRAWSURFACE); HRESULT WINAPI extDeleteAttachedSurface2(LPDIRECTDRAWSURFACE, DWORD, LPDIRECTDRAWSURFACE); HRESULT WINAPI extDeleteAttachedSurface3(LPDIRECTDRAWSURFACE, DWORD, LPDIRECTDRAWSURFACE); HRESULT WINAPI extDeleteAttachedSurface4(LPDIRECTDRAWSURFACE, DWORD, LPDIRECTDRAWSURFACE); HRESULT WINAPI extDeleteAttachedSurface7(LPDIRECTDRAWSURFACE, DWORD, LPDIRECTDRAWSURFACE); HRESULT WINAPI extEnumAttachedSurfaces1(LPDIRECTDRAWSURFACE, LPVOID, LPDDENUMSURFACESCALLBACK); HRESULT WINAPI extEnumAttachedSurfaces2(LPDIRECTDRAWSURFACE, LPVOID, LPDDENUMSURFACESCALLBACK); HRESULT WINAPI extEnumAttachedSurfaces3(LPDIRECTDRAWSURFACE, LPVOID, LPDDENUMSURFACESCALLBACK); HRESULT WINAPI extEnumAttachedSurfaces4(LPDIRECTDRAWSURFACE, LPVOID, LPDDENUMSURFACESCALLBACK); HRESULT WINAPI extEnumAttachedSurfaces7(LPDIRECTDRAWSURFACE, LPVOID, LPDDENUMSURFACESCALLBACK); HRESULT WINAPI extFlip1(LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE, DWORD); HRESULT WINAPI extFlip2(LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE, DWORD); HRESULT WINAPI extFlip3(LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE, DWORD); HRESULT WINAPI extFlip4(LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE, DWORD); HRESULT WINAPI extFlip7(LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE, DWORD); HRESULT WINAPI extGetAttachedSurface1(LPDIRECTDRAWSURFACE, LPDDSCAPS, LPDIRECTDRAWSURFACE *); HRESULT WINAPI extGetAttachedSurface2(LPDIRECTDRAWSURFACE, LPDDSCAPS, LPDIRECTDRAWSURFACE *); HRESULT WINAPI extGetAttachedSurface3(LPDIRECTDRAWSURFACE, LPDDSCAPS, LPDIRECTDRAWSURFACE *); HRESULT WINAPI extGetAttachedSurface4(LPDIRECTDRAWSURFACE, LPDDSCAPS2, LPDIRECTDRAWSURFACE *); HRESULT WINAPI extGetAttachedSurface7(LPDIRECTDRAWSURFACE, LPDDSCAPS2, LPDIRECTDRAWSURFACE *); HRESULT WINAPI extGetCaps1S(LPDIRECTDRAWSURFACE, LPDDSCAPS); HRESULT WINAPI extGetCaps2S(LPDIRECTDRAWSURFACE, LPDDSCAPS); HRESULT WINAPI extGetCaps3S(LPDIRECTDRAWSURFACE, LPDDSCAPS); HRESULT WINAPI extGetCaps4S(LPDIRECTDRAWSURFACE, LPDDSCAPS2); HRESULT WINAPI extGetCaps7S(LPDIRECTDRAWSURFACE, LPDDSCAPS2); HRESULT WINAPI extGetColorKey1(LPDIRECTDRAWSURFACE, DWORD, LPDDCOLORKEY); HRESULT WINAPI extGetColorKey2(LPDIRECTDRAWSURFACE, DWORD, LPDDCOLORKEY); HRESULT WINAPI extGetColorKey3(LPDIRECTDRAWSURFACE, DWORD, LPDDCOLORKEY); HRESULT WINAPI extGetColorKey4(LPDIRECTDRAWSURFACE, DWORD, LPDDCOLORKEY); HRESULT WINAPI extGetColorKey7(LPDIRECTDRAWSURFACE, DWORD, LPDDCOLORKEY); HRESULT WINAPI extGetDC1(LPDIRECTDRAWSURFACE, HDC FAR *); HRESULT WINAPI extGetDC2(LPDIRECTDRAWSURFACE, HDC FAR *); HRESULT WINAPI extGetDC3(LPDIRECTDRAWSURFACE, HDC FAR *); HRESULT WINAPI extGetDC4(LPDIRECTDRAWSURFACE, HDC FAR *); HRESULT WINAPI extGetDC7(LPDIRECTDRAWSURFACE, HDC FAR *); HRESULT WINAPI extGetPalette1(LPDIRECTDRAWSURFACE, LPDIRECTDRAWPALETTE *); HRESULT WINAPI extGetPalette2(LPDIRECTDRAWSURFACE, LPDIRECTDRAWPALETTE *); HRESULT WINAPI extGetPalette3(LPDIRECTDRAWSURFACE, LPDIRECTDRAWPALETTE *); HRESULT WINAPI extGetPalette4(LPDIRECTDRAWSURFACE, LPDIRECTDRAWPALETTE *); HRESULT WINAPI extGetPalette7(LPDIRECTDRAWSURFACE, LPDIRECTDRAWPALETTE *); HRESULT WINAPI extGetPixelFormat1(LPDIRECTDRAWSURFACE, LPDDPIXELFORMAT); HRESULT WINAPI extGetPixelFormat2(LPDIRECTDRAWSURFACE, LPDDPIXELFORMAT); HRESULT WINAPI extGetPixelFormat3(LPDIRECTDRAWSURFACE, LPDDPIXELFORMAT); HRESULT WINAPI extGetPixelFormat4(LPDIRECTDRAWSURFACE, LPDDPIXELFORMAT); HRESULT WINAPI extGetPixelFormat7(LPDIRECTDRAWSURFACE, LPDDPIXELFORMAT); HRESULT WINAPI extGetSurfaceDesc1(LPDIRECTDRAWSURFACE lpdds, LPDDSURFACEDESC lpddsd); HRESULT WINAPI extGetSurfaceDesc2(LPDIRECTDRAWSURFACE lpdds, LPDDSURFACEDESC lpddsd); HRESULT WINAPI extGetSurfaceDesc3(LPDIRECTDRAWSURFACE lpdds, LPDDSURFACEDESC lpddsd); HRESULT WINAPI extGetSurfaceDesc4(LPDIRECTDRAWSURFACE2 lpdds, LPDDSURFACEDESC2 lpddsd); HRESULT WINAPI extGetSurfaceDesc7(LPDIRECTDRAWSURFACE2 lpdds, LPDDSURFACEDESC2 lpddsd); HRESULT WINAPI extLock1(LPDIRECTDRAWSURFACE, LPRECT, LPDDSURFACEDESC, DWORD, HANDLE); HRESULT WINAPI extLock2(LPDIRECTDRAWSURFACE, LPRECT, LPDDSURFACEDESC, DWORD, HANDLE); HRESULT WINAPI extLock3(LPDIRECTDRAWSURFACE, LPRECT, LPDDSURFACEDESC, DWORD, HANDLE); HRESULT WINAPI extLock4(LPDIRECTDRAWSURFACE, LPRECT, LPDDSURFACEDESC, DWORD, HANDLE); HRESULT WINAPI extLock7(LPDIRECTDRAWSURFACE, LPRECT, LPDDSURFACEDESC, DWORD, HANDLE); HRESULT WINAPI extLockDir1(LPDIRECTDRAWSURFACE, LPRECT, LPDDSURFACEDESC, DWORD, HANDLE); HRESULT WINAPI extLockDir2(LPDIRECTDRAWSURFACE, LPRECT, LPDDSURFACEDESC, DWORD, HANDLE); HRESULT WINAPI extLockDir3(LPDIRECTDRAWSURFACE, LPRECT, LPDDSURFACEDESC, DWORD, HANDLE); HRESULT WINAPI extLockDir4(LPDIRECTDRAWSURFACE, LPRECT, LPDDSURFACEDESC, DWORD, HANDLE); HRESULT WINAPI extLockDir7(LPDIRECTDRAWSURFACE, LPRECT, LPDDSURFACEDESC, DWORD, HANDLE); HRESULT WINAPI extReleaseDC1(LPDIRECTDRAWSURFACE, HDC); HRESULT WINAPI extReleaseDC2(LPDIRECTDRAWSURFACE, HDC); HRESULT WINAPI extReleaseDC3(LPDIRECTDRAWSURFACE, HDC); HRESULT WINAPI extReleaseDC4(LPDIRECTDRAWSURFACE, HDC); HRESULT WINAPI extReleaseDC7(LPDIRECTDRAWSURFACE, HDC); HRESULT WINAPI extSetClipper1(LPDIRECTDRAWSURFACE, LPDIRECTDRAWCLIPPER); HRESULT WINAPI extSetClipper2(LPDIRECTDRAWSURFACE, LPDIRECTDRAWCLIPPER); HRESULT WINAPI extSetClipper3(LPDIRECTDRAWSURFACE, LPDIRECTDRAWCLIPPER); HRESULT WINAPI extSetClipper4(LPDIRECTDRAWSURFACE, LPDIRECTDRAWCLIPPER); HRESULT WINAPI extSetClipper7(LPDIRECTDRAWSURFACE, LPDIRECTDRAWCLIPPER); HRESULT WINAPI extSetColorKey1(LPDIRECTDRAWSURFACE, DWORD, LPDDCOLORKEY); HRESULT WINAPI extSetColorKey2(LPDIRECTDRAWSURFACE, DWORD, LPDDCOLORKEY); HRESULT WINAPI extSetColorKey3(LPDIRECTDRAWSURFACE, DWORD, LPDDCOLORKEY); HRESULT WINAPI extSetColorKey4(LPDIRECTDRAWSURFACE, DWORD, LPDDCOLORKEY); HRESULT WINAPI extSetColorKey7(LPDIRECTDRAWSURFACE, DWORD, LPDDCOLORKEY); HRESULT WINAPI extSetPalette1(LPDIRECTDRAWSURFACE, LPDIRECTDRAWPALETTE); HRESULT WINAPI extSetPalette2(LPDIRECTDRAWSURFACE, LPDIRECTDRAWPALETTE); HRESULT WINAPI extSetPalette3(LPDIRECTDRAWSURFACE, LPDIRECTDRAWPALETTE); HRESULT WINAPI extSetPalette4(LPDIRECTDRAWSURFACE, LPDIRECTDRAWPALETTE); HRESULT WINAPI extSetPalette7(LPDIRECTDRAWSURFACE, LPDIRECTDRAWPALETTE); HRESULT WINAPI extUnlock1(LPDIRECTDRAWSURFACE, LPVOID); HRESULT WINAPI extUnlock2(LPDIRECTDRAWSURFACE, LPVOID); HRESULT WINAPI extUnlock3(LPDIRECTDRAWSURFACE, LPVOID); HRESULT WINAPI extUnlock4(LPDIRECTDRAWSURFACE, LPRECT); HRESULT WINAPI extUnlock7(LPDIRECTDRAWSURFACE, LPRECT); HRESULT WINAPI extUnlockDir1(LPDIRECTDRAWSURFACE, LPVOID); HRESULT WINAPI extUnlockDir2(LPDIRECTDRAWSURFACE, LPVOID); HRESULT WINAPI extUnlockDir3(LPDIRECTDRAWSURFACE, LPVOID); HRESULT WINAPI extUnlockDir4(LPDIRECTDRAWSURFACE, LPRECT); HRESULT WINAPI extUnlockDir7(LPDIRECTDRAWSURFACE, LPRECT); HRESULT WINAPI extEnumOverlayZOrders1(LPDIRECTDRAWSURFACE, DWORD, LPVOID, LPDDENUMSURFACESCALLBACK); HRESULT WINAPI extEnumOverlayZOrders2(LPDIRECTDRAWSURFACE, DWORD, LPVOID, LPDDENUMSURFACESCALLBACK); HRESULT WINAPI extEnumOverlayZOrders3(LPDIRECTDRAWSURFACE, DWORD, LPVOID, LPDDENUMSURFACESCALLBACK); HRESULT WINAPI extEnumOverlayZOrders4(LPDIRECTDRAWSURFACE, DWORD, LPVOID, LPDDENUMSURFACESCALLBACK); HRESULT WINAPI extEnumOverlayZOrders7(LPDIRECTDRAWSURFACE, DWORD, LPVOID, LPDDENUMSURFACESCALLBACK); HRESULT WINAPI extAddOverlayDirtyRect1(LPDIRECTDRAWSURFACE, LPRECT); HRESULT WINAPI extAddOverlayDirtyRect2(LPDIRECTDRAWSURFACE, LPRECT); HRESULT WINAPI extAddOverlayDirtyRect3(LPDIRECTDRAWSURFACE, LPRECT); HRESULT WINAPI extAddOverlayDirtyRect4(LPDIRECTDRAWSURFACE, LPRECT); HRESULT WINAPI extAddOverlayDirtyRect7(LPDIRECTDRAWSURFACE, LPRECT); HRESULT WINAPI extGetOverlayPosition1(LPDIRECTDRAWSURFACE, LPLONG, LPLONG); HRESULT WINAPI extGetOverlayPosition2(LPDIRECTDRAWSURFACE, LPLONG, LPLONG); HRESULT WINAPI extGetOverlayPosition3(LPDIRECTDRAWSURFACE, LPLONG, LPLONG); HRESULT WINAPI extGetOverlayPosition4(LPDIRECTDRAWSURFACE, LPLONG, LPLONG); HRESULT WINAPI extGetOverlayPosition7(LPDIRECTDRAWSURFACE, LPLONG, LPLONG); HRESULT WINAPI extSetOverlayPosition1(LPDIRECTDRAWSURFACE, LONG, LONG); HRESULT WINAPI extSetOverlayPosition2(LPDIRECTDRAWSURFACE, LONG, LONG); HRESULT WINAPI extSetOverlayPosition3(LPDIRECTDRAWSURFACE, LONG, LONG); HRESULT WINAPI extSetOverlayPosition4(LPDIRECTDRAWSURFACE, LONG, LONG); HRESULT WINAPI extSetOverlayPosition7(LPDIRECTDRAWSURFACE, LONG, LONG); extern HRESULT WINAPI extCreateSurface(int, CreateSurface_Type, LPDIRECTDRAW, DDSURFACEDESC2 *, LPDIRECTDRAWSURFACE *, void *); HRESULT WINAPI extSetSurfaceDesc3(LPDIRECTDRAWSURFACE, LPDDSURFACEDESC, DWORD); HRESULT WINAPI extSetSurfaceDesc4(LPDIRECTDRAWSURFACE, LPDDSURFACEDESC, DWORD); HRESULT WINAPI extSetSurfaceDesc7(LPDIRECTDRAWSURFACE, LPDDSURFACEDESC, DWORD); // DirectDrawClipper HRESULT WINAPI extReleaseC(LPDIRECTDRAWCLIPPER); HRESULT WINAPI extGetClipList(LPDIRECTDRAWCLIPPER, LPRECT, LPRGNDATA, LPDWORD); HRESULT WINAPI extSetClipList(LPDIRECTDRAWCLIPPER, LPRGNDATA, DWORD); HRESULT WINAPI extSetHWnd(LPDIRECTDRAWCLIPPER, DWORD, HWND); // DirectDrawPalette HRESULT WINAPI extReleaseP(LPDIRECTDRAWPALETTE); // STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW, DWORD, LPPALETTEENTRY) PURE; HRESULT WINAPI extSetEntries(LPDIRECTDRAWPALETTE, DWORD, DWORD, DWORD, LPPALETTEENTRY); // GammaRamp HRESULT WINAPI extDDSetGammaRamp(LPDIRECTDRAWSURFACE, DWORD, LPDDGAMMARAMP); HRESULT WINAPI extDDGetGammaRamp(LPDIRECTDRAWSURFACE, DWORD, LPDDGAMMARAMP); HDC WINAPI extGDIGetDC(HWND); HDC WINAPI extGDIGetWindowDC(HWND); int WINAPI extGDIReleaseDC(HWND, HDC); /* DirectDraw APIs */ DirectDrawCreate_Type pDirectDrawCreate = NULL; DirectDrawCreateEx_Type pDirectDrawCreateEx = NULL; DirectDrawEnumerateA_Type pDirectDrawEnumerateA = NULL; DirectDrawEnumerateW_Type pDirectDrawEnumerateW = NULL; DirectDrawEnumerateExA_Type pDirectDrawEnumerateExA = NULL; DirectDrawEnumerateExW_Type pDirectDrawEnumerateExW = NULL; DirectDrawCreateClipper_Type pDirectDrawCreateClipper = NULL; HandleDDThreadLock_Type pAcquireDDThreadLock = NULL; HandleDDThreadLock_Type pReleaseDDThreadLock = NULL; StartModeTest_Type pStartModeTest = NULL; EvaluateMode_Type pEvaluateMode = NULL; /* DirectDraw hook pointers */ QueryInterface_Type pQueryInterfaceD1, pQueryInterfaceD2, pQueryInterfaceD3, pQueryInterfaceD4, pQueryInterfaceD7; AddRefD_Type pAddRefD; ReleaseD_Type pReleaseD1, pReleaseD2, pReleaseD3, pReleaseD4, pReleaseD7; Compact_Type pCompact; CreateClipper_Type pCreateClipper1, pCreateClipper2, pCreateClipper3, pCreateClipper4, pCreateClipper7; CreatePalette_Type pCreatePalette1, pCreatePalette2, pCreatePalette3, pCreatePalette4, pCreatePalette7; CreateSurface1_Type pCreateSurface1, pCreateSurface2, pCreateSurface3, pCreateSurface4, pCreateSurface7; DuplicateSurface_Type pDuplicateSurface1, pDuplicateSurface2, pDuplicateSurface3; DuplicateSurface4_Type pDuplicateSurface4; DuplicateSurface7_Type pDuplicateSurface7; EnumDisplayModes1_Type pEnumDisplayModes1, pEnumDisplayModes2, pEnumDisplayModes3; EnumDisplayModes4_Type pEnumDisplayModes4, pEnumDisplayModes7; EnumSurfaces1_Type pEnumSurfaces1; EnumSurfaces4_Type pEnumSurfaces4; FlipToGDISurface_Type pFlipToGDISurface1, pFlipToGDISurface2, pFlipToGDISurface3, pFlipToGDISurface4, pFlipToGDISurface7; GetCapsD_Type pGetCaps1D, pGetCaps2D, pGetCaps3D, pGetCaps4D, pGetCaps7D; GetDisplayMode_Type pGetDisplayMode1, pGetDisplayMode2, pGetDisplayMode3; GetDisplayMode4_Type pGetDisplayMode4, pGetDisplayMode7; GetFourCCCodes_Type pGetFourCCCodes; GetGDISurface_Type pGetGDISurface1, pGetGDISurface2, pGetGDISurface3, pGetGDISurface4, pGetGDISurface7; GetMonitorFrequency_Type pGetMonitorFrequency; GetScanLine_Type pGetScanLine; GetVerticalBlankStatus_Type pGetVerticalBlankStatus; Initialize_Type pInitialize1, pInitialize2, pInitialize3, pInitialize4, pInitialize7; RestoreDisplayMode_Type pRestoreDisplayMode; SetCooperativeLevel_Type pSetCooperativeLevel1, pSetCooperativeLevel2, pSetCooperativeLevel3, pSetCooperativeLevel4, pSetCooperativeLevel7; SetDisplayMode1_Type pSetDisplayMode1; SetDisplayMode2_Type pSetDisplayMode2, pSetDisplayMode3, pSetDisplayMode4, pSetDisplayMode7; WaitForVerticalBlank_Type pWaitForVerticalBlank1, pWaitForVerticalBlank2, pWaitForVerticalBlank3, pWaitForVerticalBlank4, pWaitForVerticalBlank7; GetSurfaceFromDC_Type pGetSurfaceFromDC; GetAvailableVidMem_Type pGetAvailableVidMem2, pGetAvailableVidMem3; GetAvailableVidMem4_Type pGetAvailableVidMem4, pGetAvailableVidMem7; RestoreAllSurfaces_Type pRestoreAllSurfaces; TestCooperativeLevel_Type pTestCooperativeLevel4, pTestCooperativeLevel7; GetDeviceIdentifier_Type pGetDeviceIdentifier; RestoreDisplayMode_Type pRestoreDisplayMode1, pRestoreDisplayMode2, pRestoreDisplayMode3, pRestoreDisplayMode4, pRestoreDisplayMode7; GetScanLine_Type pGetScanLine1, pGetScanLine2, pGetScanLine3, pGetScanLine4, pGetScanLine7; /* DirectDrawSurface hook pointers */ QueryInterface_Type pQueryInterfaceS1, pQueryInterfaceS2, pQueryInterfaceS3, pQueryInterfaceS4, pQueryInterfaceS7; ReleaseS_Type pReleaseS1, pReleaseS2, pReleaseS3, pReleaseS4, pReleaseS7; AddAttachedSurface_Type pAddAttachedSurface1, pAddAttachedSurface2, pAddAttachedSurface3, pAddAttachedSurface4, pAddAttachedSurface7; AddOverlayDirtyRect_Type pAddOverlayDirtyRect; Blt_Type pBlt1, pBlt2, pBlt3, pBlt4, pBlt7; //BltBatch_Type pBltBatch; BltFast_Type pBltFast1, pBltFast2, pBltFast3, pBltFast4, pBltFast7; DeleteAttachedSurface_Type pDeleteAttachedSurface1, pDeleteAttachedSurface2, pDeleteAttachedSurface3, pDeleteAttachedSurface4, pDeleteAttachedSurface7; EnumAttachedSurfaces_Type pEnumAttachedSurfaces1, pEnumAttachedSurfaces2, pEnumAttachedSurfaces3, pEnumAttachedSurfaces4, pEnumAttachedSurfaces7; EnumOverlayZOrders_Type pEnumOverlayZOrders; Flip_Type pFlip1, pFlip2, pFlip3, pFlip4, pFlip7; GetAttachedSurface_Type pGetAttachedSurface1, pGetAttachedSurface2, pGetAttachedSurface3, pGetAttachedSurface4, pGetAttachedSurface7; GetBltStatus_Type pGetBltStatus; GetCapsS_Type pGetCaps1S, pGetCaps2S, pGetCaps3S, pGetCaps4S, pGetCaps7S; GetClipper_Type pGetClipper; GetColorKey_Type pGetColorKey1, pGetColorKey2, pGetColorKey3, pGetColorKey4, pGetColorKey7; GetDC_Type pGetDC1, pGetDC2, pGetDC3, pGetDC4, pGetDC7; GetFlipStatus_Type pGetFlipStatus; GetOverlayPosition_Type pGetOverlayPosition1, pGetOverlayPosition2, pGetOverlayPosition3, pGetOverlayPosition4, pGetOverlayPosition7; SetOverlayPosition_Type pSetOverlayPosition1, pSetOverlayPosition2, pSetOverlayPosition3, pSetOverlayPosition4, pSetOverlayPosition7; GetPalette_Type pGetPalette1, pGetPalette2, pGetPalette3, pGetPalette4, pGetPalette7; GetPixelFormat_Type pGetPixelFormat1, pGetPixelFormat2, pGetPixelFormat3, pGetPixelFormat4, pGetPixelFormat7; GetSurfaceDesc_Type pGetSurfaceDesc1, pGetSurfaceDesc2, pGetSurfaceDesc3; GetSurfaceDesc2_Type pGetSurfaceDesc4, pGetSurfaceDesc7; Lock_Type pLock1, pLock2, pLock3, pLock4, pLock7; EnumOverlayZOrders_Type pEnumOverlayZOrders1, pEnumOverlayZOrders2, pEnumOverlayZOrders3, pEnumOverlayZOrders4, pEnumOverlayZOrders7; AddOverlayDirtyRect_Type pAddOverlayDirtyRect1, pAddOverlayDirtyRect2, pAddOverlayDirtyRect3, pAddOverlayDirtyRect4, pAddOverlayDirtyRect7; //Initialize IsLost_Type pIsLost; ReleaseDC_Type pReleaseDC1, pReleaseDC2, pReleaseDC3, pReleaseDC4, pReleaseDC7; Restore_Type pRestore; SetClipper_Type pSetClipper1, pSetClipper2, pSetClipper3, pSetClipper4, pSetClipper7; SetColorKey_Type pSetColorKey1, pSetColorKey2, pSetColorKey3, pSetColorKey4, pSetColorKey7; SetOverlayPosition_Type pSetOverlayPosition; SetPalette_Type pSetPalette1, pSetPalette2, pSetPalette3, pSetPalette4, pSetPalette7; Unlock1_Type pUnlock1, pUnlock2, pUnlock3; Unlock4_Type pUnlock4, pUnlock7; UpdateOverlay_Type pUpdateOverlay; UpdateOverlayDisplay_Type pUpdateOverlayDisplay; UpdateOverlayZOrder_Type pUpdateOverlayZOrder; SetSurfaceDesc_Type pSetSurfaceDesc3, pSetSurfaceDesc4, pSetSurfaceDesc7; /* DirectDrawClipper hook pointers */ QueryInterface_Type pQueryInterfaceC; AddRefC_Type pAddRefC; ReleaseC_Type pReleaseC; GetClipList_Type pGetClipList; SetClipList_Type pSetClipList; GetHWnd_Type pGetHWnd; InitializeC_Type pInitializeC; IsClipListChanged_Type pIsClipListChanged; SetHWnd_Type pSetHWnd; /* DirectDrawPalette hook pointers */ QueryInterfaceP_Type pQueryInterfaceP; AddRefP_Type pAddRefP; ReleaseP_Type pReleaseP; /*** IDirectDrawPalette methods ***/ GetCapsP_Type pGetCapsP; GetEntries_Type pGetEntries; // STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW, DWORD, LPPALETTEENTRY) PURE; SetEntries_Type pSetEntries; // GammaRamp GammaRamp_Type pDDGetGammaRamp; GammaRamp_Type pDDSetGammaRamp; // ddraw global variables, constants & so on extern PALETTEENTRY DefaultSystemPalette[256]; LPDIRECTDRAWSURFACE lpDDSEmu_Prim=NULL; LPDIRECTDRAWSURFACE lpDDSEmu_Back=NULL; LPDIRECTDRAWSURFACE lpDDZBuffer=NULL; // BEWARE! Likely, this global is useless .... int ZBufferSize; // v2.1.87: lpPrimaryDD is the DIRECTDRAW object to which the primary surface and all // the service objects (emulated backbuffer, emulater primary, ....) are attached. LPDIRECTDRAW lpPrimaryDD=NULL; int iBakBufferVersion; int iDirectDrawVersion; LPDIRECTDRAWPALETTE lpDDP=NULL; LPDIRECTDRAWCLIPPER lpddC=NULL; int iDDPExtraRefCounter=0; // v2.02.37: globals to store requested main surface capabilities DDSURFACEDESC2 DDSD_Prim; DWORD PaletteEntries[256]; DWORD *Palette16BPP = NULL; void *EmuScreenBuffer = NULL; // to implement pitch bug fix DWORD rPitch = 0; LPVOID rSurface = NULL; void SetPixFmt(LPDDSURFACEDESC2); void GetPixFmt(LPDDSURFACEDESC2); static HookEntryEx_Type ddHooks[]={ {HOOK_HOT_CANDIDATE, 0x08, "DirectDrawCreate", (FARPROC)NULL, (FARPROC *)&pDirectDrawCreate, (FARPROC)extDirectDrawCreate}, {HOOK_HOT_CANDIDATE, 0x0A, "DirectDrawCreateEx", (FARPROC)NULL, (FARPROC *)&pDirectDrawCreateEx, (FARPROC)extDirectDrawCreateEx}, {HOOK_HOT_CANDIDATE, 0x0B, "DirectDrawEnumerateA", (FARPROC)NULL, (FARPROC *)&pDirectDrawEnumerateA, (FARPROC)extDirectDrawEnumerateA}, {HOOK_HOT_CANDIDATE, 0x0C, "DirectDrawEnumerateExA", (FARPROC)NULL, (FARPROC *)&pDirectDrawEnumerateExA, (FARPROC)extDirectDrawEnumerateExA}, {HOOK_HOT_CANDIDATE, 0x09, "DirectDrawCreateClipper", (FARPROC)NULL, (FARPROC *)&pDirectDrawCreateClipper, (FARPROC)extDirectDrawCreateClipper}, {HOOK_HOT_CANDIDATE, 0x01, "AcquireDDThreadLock", (FARPROC)NULL, (FARPROC *)&pAcquireDDThreadLock, (FARPROC)NULL}, {HOOK_HOT_CANDIDATE, 0x15, "ReleaseDDThreadLock", (FARPROC)NULL, (FARPROC *)&pReleaseDDThreadLock, (FARPROC)NULL}, {HOOK_IAT_CANDIDATE, 0x0E, "DirectDrawEnumerateW", (FARPROC)NULL, (FARPROC *)&pDirectDrawEnumerateW, (FARPROC)extDirectDrawCreate}, {HOOK_IAT_CANDIDATE, 0x0D, "DirectDrawEnumerateExW", (FARPROC)NULL, (FARPROC *)&pDirectDrawEnumerateExW, (FARPROC)extDirectDrawCreate}, {HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator }; FARPROC Remap_ddraw_ProcAddress(LPCSTR proc, HMODULE hModule) { FARPROC addr; if (dxw.dwTargetDDVersion == HOOKDDRAWNONE) return NULL; if (addr=RemapLibraryEx(proc, hModule, ddHooks)) return addr; return NULL; } extern HRESULT WINAPI sBlt(int, Blt_Type pBlt, char *, LPDIRECTDRAWSURFACE, LPRECT, LPDIRECTDRAWSURFACE, LPRECT, DWORD, LPDDBLTFX, BOOL); /* ------------------------------------------------------------------------------ */ // auxiliary (static) functions /* ------------------------------------------------------------------------------ */ DWORD gdwRefreshRate; #define MAXREFRESHDELAYCOUNT 20 int iRefreshDelays[MAXREFRESHDELAYCOUNT]={16, 17}; int iRefreshDelayCount=2; static HRESULT myGetDisplayMode(int dxversion, LPDIRECTDRAW lpdd, LPDDSURFACEDESC lpdds) { HRESULT res; switch(dxversion){ default: case 1: res=(*pGetDisplayMode1)(lpdd, lpdds); break; case 2: res=(*pGetDisplayMode2)(lpdd, lpdds); break; case 3: res=(*pGetDisplayMode3)(lpdd, lpdds); break; case 4: res=(*pGetDisplayMode4)(lpdd, (LPDDSURFACEDESC2)lpdds); break; case 7: res=(*pGetDisplayMode7)(lpdd, (LPDDSURFACEDESC2)lpdds); break; } return res; } void SetVSyncDelays(int dxversion, LPDIRECTDRAW lpdd) { DDSURFACEDESC2 ddsdRefreshRate; HRESULT res; memset(&ddsdRefreshRate, 0, sizeof(ddsdRefreshRate)); ddsdRefreshRate.dwSize = sizeof(DDSURFACEDESC); res=myGetDisplayMode(dxversion, lpdd, (LPDDSURFACEDESC)&ddsdRefreshRate); if(res) return; dxw.SetVSyncDelays(ddsdRefreshRate.dwRefreshRate); } static DWORD GetBltWaitFlags(DWORD dwBltFlags) { if(dxw.dwFlags8 & FORCEWAIT) { dwBltFlags |= DDBLT_WAIT; dwBltFlags &= ~DDBLT_DONOTWAIT; } if(dxw.dwFlags8 & FORCENOWAIT){ dwBltFlags |= DDBLT_DONOTWAIT; dwBltFlags &= ~DDBLT_WAIT; } return dwBltFlags; } static DWORD GetFlipWaitFlags(DWORD dwFlipFlags) { if(dxw.dwFlags8 & FORCEWAIT) { dwFlipFlags |= DDFLIP_WAIT; dwFlipFlags &= ~DDFLIP_DONOTWAIT; } if(dxw.dwFlags8 & FORCENOWAIT){ dwFlipFlags |= DDFLIP_DONOTWAIT; dwFlipFlags &= ~DDFLIP_WAIT; } return dwFlipFlags; } static DWORD SetPrimaryCaps(DWORD dwCaps) { dwCaps |= (DDSCAPS_PRIMARYSURFACE|DDSCAPS_FLIP|DDSCAPS_FRONTBUFFER|DDSCAPS_VIDEOMEMORY|DDSCAPS_VISIBLE); // primary surfaces must be this way dwCaps &= ~(DDSCAPS_SYSTEMMEMORY|DDSCAPS_OFFSCREENPLAIN); // primary surfaces can't be this way return dwCaps; } static DWORD SetBackBufferCaps(DWORD dwCaps) { // v2.03.11: added DDSCAPS_FLIP capability to backbuffer surface: "Ignition" checks for it before Flip-ping to primary dwCaps |= (DDSCAPS_BACKBUFFER|DDSCAPS_VIDEOMEMORY|DDSCAPS_FLIP|DDSCAPS_LOCALVIDMEM); // you never know.... dwCaps &= ~(DDSCAPS_SYSTEMMEMORY|DDSCAPS_OFFSCREENPLAIN); // backbuffer surfaces can't be this way return dwCaps; } static DWORD SetZBufferCaps(DWORD dwCaps) { // beware! the ZBUFFER surface could have never been registered! // in this case better adapt to the primary/backbuffer ones, since a ZBUFFER with no good caps won't work. // input caps not null or simply DDSCAPS_ZBUFFER, supposedly good, don't touch .... if(dwCaps & ~DDSCAPS_ZBUFFER) return dwCaps; // ... else try to cope with primary surface caps dwCaps = dxwss.GetCaps(dxwss.GetPrimarySurface()); dwCaps &= ~(DDSCAPS_PRIMARYSURFACE|DDSCAPS_FLIP|DDSCAPS_BACKBUFFER|DDSCAPS_3DDEVICE|DDSCAPS_COMPLEX); dwCaps |= DDSCAPS_ZBUFFER; return dwCaps; } static void Stopper(char *s, int line) { char sMsg[81]; sprintf(sMsg,"break: \"%s\"", s); MessageBox(0, sMsg, "break", MB_OK | MB_ICONEXCLAMATION); } //#define STOPPER_TEST // comment out to eliminate #ifdef STOPPER_TEST #define STOPPER(s) Stopper(s, __LINE__) #else #define STOPPER(s) #endif char *DumpPixelFormat(LPDDSURFACEDESC2 lpddsd) { return ExplainPixelFormat(&(lpddsd->ddpfPixelFormat)); } CHAR *LogSurfaceAttributes(LPDDSURFACEDESC2 lpddsd, char *label, int line) { static char sInfo[1024]; sprintf(sInfo, "SurfaceDesc: %s Flags=%x(%s)", label, lpddsd->dwFlags, ExplainFlags(lpddsd->dwFlags)); if (lpddsd->dwFlags & DDSD_BACKBUFFERCOUNT) sprintf(sInfo, "%s BackBufferCount=%d", sInfo, lpddsd->dwBackBufferCount); if (lpddsd->dwFlags & DDSD_WIDTH) sprintf(sInfo, "%s Width=%d", sInfo, lpddsd->dwWidth); if (lpddsd->dwFlags & DDSD_HEIGHT) sprintf(sInfo, "%s Height=%d", sInfo, lpddsd->dwHeight); if (lpddsd->dwFlags & DDSD_PITCH) sprintf(sInfo, "%s Pitch=%d", sInfo, lpddsd->lPitch); if (lpddsd->dwFlags & DDSD_MIPMAPCOUNT) sprintf(sInfo, "%s MipMapCount=%d", sInfo, lpddsd->dwMipMapCount); if (lpddsd->dwFlags & DDSD_CAPS) { sprintf(sInfo, "%s Caps=%x(%s)", sInfo, lpddsd->ddsCaps.dwCaps, ExplainDDSCaps(lpddsd->ddsCaps.dwCaps)); if(lpddsd->dwSize==sizeof(DDSURFACEDESC2)){ LPDDSURFACEDESC2 lpddsd2=lpddsd; sprintf(sInfo, "%s Caps2=%x(%s)", sInfo, lpddsd2->ddsCaps.dwCaps2, ExplainDDSCaps2(lpddsd2->ddsCaps.dwCaps2)); sprintf(sInfo, "%s Caps3=%x(%s)", sInfo, lpddsd2->ddsCaps.dwCaps3, ExplainDDSCaps3(lpddsd2->ddsCaps.dwCaps3)); sprintf(sInfo, "%s Caps4=%x(%s)", sInfo, lpddsd2->ddsCaps.dwCaps4, ExplainDDSCaps4(lpddsd2->ddsCaps.dwCaps4)); } } if (lpddsd->dwFlags & DDSD_CKDESTBLT ) sprintf(sInfo, "%s CKDestBlt=(%x,%x)", sInfo, lpddsd->ddckCKDestBlt.dwColorSpaceLowValue, lpddsd->ddckCKDestBlt.dwColorSpaceHighValue); if (lpddsd->dwFlags & DDSD_CKDESTOVERLAY ) sprintf(sInfo, "%s CKDestOverlay=(%x,%x)", sInfo, lpddsd->ddckCKDestOverlay.dwColorSpaceLowValue, lpddsd->ddckCKDestOverlay.dwColorSpaceHighValue); if (lpddsd->dwFlags & DDSD_CKSRCBLT ) sprintf(sInfo, "%s CKSrcBlt=(%x,%x)", sInfo, lpddsd->ddckCKSrcBlt.dwColorSpaceLowValue, lpddsd->ddckCKSrcBlt.dwColorSpaceHighValue); if (lpddsd->dwFlags & DDSD_CKSRCOVERLAY ) sprintf(sInfo, "%s CKSrcOverlay=(%x,%x)", sInfo, lpddsd->ddckCKSrcOverlay.dwColorSpaceLowValue, lpddsd->ddckCKSrcOverlay.dwColorSpaceHighValue); if (lpddsd->dwFlags & DDSD_PIXELFORMAT ) sprintf(sInfo, "%s %s", sInfo, DumpPixelFormat((LPDDSURFACEDESC2)lpddsd)); if (lpddsd->dwFlags & DDSD_LPSURFACE) sprintf(sInfo, "%s Surface=%x", sInfo, lpddsd->lpSurface); if ((lpddsd->dwFlags & DDSD_ZBUFFERBITDEPTH) && (lpddsd->dwSize==sizeof(DDSURFACEDESC))) sprintf(sInfo, "%s ZBufferBitDepth=%d", sInfo, ((LPDDSURFACEDESC)lpddsd)->dwZBufferBitDepth); if (lpddsd->dwFlags & DDSD_ALPHABITDEPTH) sprintf(sInfo, "%s AlphaBitDepth=%d", sInfo, lpddsd->dwAlphaBitDepth); if (lpddsd->dwReserved) sprintf(sInfo, "%s Reserved=%d", sInfo, lpddsd->dwReserved); if (lpddsd->dwFlags & DDSD_REFRESHRATE) sprintf(sInfo, "%s RefreshRate=%d", sInfo, lpddsd->dwRefreshRate); if (lpddsd->dwFlags & DDSD_LINEARSIZE) sprintf(sInfo, "%s LinearSize=%d", sInfo, lpddsd->dwLinearSize); if (lpddsd->dwSize == sizeof(DDSURFACEDESC2)){ if (lpddsd->dwFlags & DDSD_TEXTURESTAGE) sprintf(sInfo, "%s TextureStage=%x", sInfo, ((LPDDSURFACEDESC2)lpddsd)->dwTextureStage); if (lpddsd->dwFlags & DDSD_FVF) sprintf(sInfo, "%s FVF=%x", sInfo, ((LPDDSURFACEDESC2)lpddsd)->dwFVF); } return sInfo; } void DumpPixFmt(LPDDSURFACEDESC2 lpdds) { OutTrace("PixelFormat: lpdds=%x %s\n", DumpPixelFormat(lpdds)); } /* ------------------------------------------------------------------------------ */ // auxiliary (static) functions for palette handling /* ------------------------------------------------------------------------------ */ BOOL isPaletteUpdated; void mySetPalette(int dwstart, int dwcount, LPPALETTEENTRY lpentries) { int i; extern DXWNDSTATUS *pStatus; // if has reserved palette entries, recover them if(dxw.dwFlags5 & LOCKRESERVEDPALETTE){ int nStatCols, nPalEntries; PALETTEENTRY SysPalEntry[256]; LPPALETTEENTRY lpEntry; extern GetSystemPaletteEntries_Type pGDIGetSystemPaletteEntries; extern GetDeviceCaps_Type pGDIGetDeviceCaps; // The number of static colours should be 20, but inquire it anyway nStatCols = (*pGDIGetDeviceCaps)(GetDC(0), NUMRESERVED); // fix the first nStatCols/2 and the last nStatCols/2 entries nPalEntries=(*pGDIGetSystemPaletteEntries)(GetDC(0), 0, 256, SysPalEntry); for (i = 0; i < 256; i++){ // skip intermediate un-reserved palette entries if(i==(nStatCols / 2)) i=256 - (nStatCols / 2); lpEntry = &lpentries[i]; if(lpEntry->peFlags==0){ lpEntry->peRed = SysPalEntry[i].peRed; lpEntry->peGreen = SysPalEntry[i].peGreen; lpEntry->peBlue = SysPalEntry[i].peBlue; } } } // copy the palette entries on the current system palette for(int idx=0; idxPalette[dwstart+idx]= lpentries[idx]; for(i = 0; i < dwcount; i ++){ PALETTEENTRY PalColor; PalColor = lpentries[i]; if (dxw.dwFlags3 & BLACKWHITE){ // (http://www.codeproject.com/Articles/66253/Converting-Colors-to-Gray-Shades): // gray = (red * 0.30) + (green * 0.59) + (blue * 0.11) DWORD grayscale; //grayscale = ((DWORD)lpentries[i].peRed + (DWORD)lpentries[i].peGreen + (DWORD)lpentries[i].peBlue) / 3; grayscale = (((DWORD)PalColor.peRed * 30) + ((DWORD)PalColor.peGreen * 59) + ((DWORD)PalColor.peBlue) * 11) / 100; PalColor.peRed = PalColor.peGreen = PalColor.peBlue = (BYTE)grayscale; } switch (dxw.ActualPixelFormat.dwRGBBitCount){ case 32: PaletteEntries[i + dwstart] = (((DWORD)PalColor.peRed) << 16) + (((DWORD)PalColor.peGreen) << 8) + ((DWORD)PalColor.peBlue); break; case 16: PaletteEntries[i + dwstart] = (dxw.ActualPixelFormat.dwGBitMask == 0x03E0) ? (((DWORD)PalColor.peRed & 0xF8) << 8) + (((DWORD)PalColor.peGreen & 0xFC) << 3) + (((DWORD)PalColor.peBlue &0xF8) >> 3) : (((DWORD)PalColor.peRed & 0xF8) << 8) + (((DWORD)PalColor.peGreen & 0xF8) << 3) + (((DWORD)PalColor.peBlue &0xF8) >> 3); break; case 8: // it may happen in unemulated modes PaletteEntries[i + dwstart] = (((DWORD)PalColor.peRed) << 16) + (((DWORD)PalColor.peGreen) << 8) + ((DWORD)PalColor.peBlue); break; default: OutTraceDW("ASSERT: unsupported Color BPP=%d\n", dxw.ActualPixelFormat.dwRGBBitCount); break; } } isPaletteUpdated = TRUE; } void InitDDScreenParameters(int dxversion, LPDIRECTDRAW lpdd) { HRESULT res; DDSURFACEDESC2 ddsd; ddsd.dwSize=sizeof(DDSURFACEDESC); res=myGetDisplayMode(dxversion, lpdd, (LPDDSURFACEDESC)&ddsd); if(res){ OutTraceE("GetDisplayMode: ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); return; } OutTraceDW("InitDDScreenParameters: Actual %s\n", DumpPixelFormat((LPDDSURFACEDESC2)&ddsd)); dxw.ActualPixelFormat=ddsd.ddpfPixelFormat; if(dxw.VirtualPixelFormat.dwRGBBitCount==0) dxw.VirtualPixelFormat=ddsd.ddpfPixelFormat; SetBltTransformations(dxversion); return; } void InitScreenParameters(int dxversion) { extern void FixPixelFormat(int , DDPIXELFORMAT *); DEVMODE CurrDevMode; static int DoOnce = FALSE; DWORD dwVJoyStatus; if(DoOnce) return; DoOnce = TRUE; // set default VGA mode 800x600 // should I make it configurable ? (640x480, 800x600, 1024x768) dxw.SetScreenSize(); // 800 x 600 by default GetHookInfo()->Height=(short)dxw.GetScreenHeight(); GetHookInfo()->Width=(short)dxw.GetScreenWidth(); GetHookInfo()->ColorDepth=0; // unknown GetHookInfo()->DXVersion=0; // unknown GetHookInfo()->isLogging=(dxw.dwTFlags & OUTTRACE); dwVJoyStatus = GetHookInfo()->VJoyStatus; dwVJoyStatus &= ~VJOYPRESENT; if(dxw.dwFlags6 & VIRTUALJOYSTICK) dwVJoyStatus |= VJOYPRESENT; GetHookInfo()->VJoyStatus = dwVJoyStatus; if(!(*pEnumDisplaySettings)(NULL, ENUM_CURRENT_SETTINGS, &CurrDevMode)){ OutTraceE("EnumDisplaySettings: ERROR err=%d at %d\n", GetLastError(), __LINE__); return; } memset(&dxw.ActualPixelFormat, 0, sizeof(DDPIXELFORMAT)); // initialize to default null values, but dwRGBBitCount dxw.ActualPixelFormat.dwRGBBitCount=CurrDevMode.dmBitsPerPel; dxw.VirtualPixelFormat.dwRGBBitCount=CurrDevMode.dmBitsPerPel; // until set differently if(dxw.dwFlags2 & INIT8BPP) FixPixelFormat(8, &dxw.VirtualPixelFormat); if(dxw.dwFlags2 & INIT16BPP) FixPixelFormat(16, &dxw.VirtualPixelFormat); if(dxw.dwFlags7 & INIT24BPP) FixPixelFormat(24, &dxw.VirtualPixelFormat); if(dxw.dwFlags7 & INIT32BPP) FixPixelFormat(32, &dxw.VirtualPixelFormat); OutTraceDW("InitScreenParameters: dxversion=%d RGBBitCount=%d\n", dxversion, CurrDevMode.dmBitsPerPel); SetBltTransformations(dxversion); return; } void FixPixelFormat(int ColorDepth, DDPIXELFORMAT *pf) { pf->dwFlags = DDPF_RGB; switch(ColorDepth){ case 8: pf->dwFlags |= DDPF_PALETTEINDEXED8; pf->dwRGBBitCount = 8; pf->dwRBitMask = 0; pf->dwGBitMask = 0; pf->dwBBitMask = 0; pf->dwRGBAlphaBitMask = 0x0000; break; case 15: // v2.02.53: Hesperian Wars - so far the only game setting color depth to 15 BPP! case 16: pf->dwRGBBitCount = 16; if (dxw.dwFlags1 & USERGB565){ pf->dwRBitMask = 0xf800; pf->dwGBitMask = 0x07e0; pf->dwBBitMask = 0x001f; pf->dwRGBAlphaBitMask = 0x0000; } else { if(!(dxw.dwFlags4 & NOALPHACHANNEL) && (ColorDepth == 16)) pf->dwFlags |= DDPF_ALPHAPIXELS; // v2.02.33,40,53 pf->dwRBitMask = 0x7c00; pf->dwGBitMask = 0x03e0; pf->dwBBitMask = 0x001f; pf->dwRGBAlphaBitMask = 0x8000; } break; case 24: pf->dwRGBBitCount = 24; pf->dwRBitMask = 0x00FF0000; pf->dwGBitMask = 0x0000FF00; pf->dwBBitMask = 0x000000FF; pf->dwRGBAlphaBitMask = 0x00000000; break; case 32: if(!(dxw.dwFlags4 & NOALPHACHANNEL)) pf->dwFlags |= DDPF_ALPHAPIXELS; // v2.02.33 pf->dwRGBBitCount = 32; pf->dwRBitMask = 0x00FF0000; pf->dwGBitMask = 0x0000FF00; pf->dwBBitMask = 0x000000FF; pf->dwRGBAlphaBitMask = 0xFF000000; break; } } static void ddSetCompatibility() { typedef HRESULT (WINAPI *SetAppCompatData_Type)(DWORD, DWORD); SetAppCompatData_Type pSetAppCompatData; HRESULT res; HINSTANCE hinst; hinst=(*pLoadLibraryA)("ddraw.dll"); if(!hinst){ OutTraceDW("LoadLibrary ddraw.dll ERROR err=%d at %d\n", GetLastError(), __LINE__); } pSetAppCompatData=(SetAppCompatData_Type)(*pGetProcAddress)(hinst, "SetAppCompatData"); if(pSetAppCompatData) { if (dxw.dwFlags2 & SETCOMPATIBILITY){ // v2.03.27: set DWM Off for both primary Lock and Blt. Good for Age of Empires intro movie! res=(*pSetAppCompatData)(1, 0); res=(*pSetAppCompatData)(2, 0); OutTraceDW("HookDirectDraw: SetAppCompatData(2,0) ret=%x(%s)\n", res, ExplainDDError(res)); } if (dxw.dwFlags6 & DISABLEMAXWINMODE){ res=(*pSetAppCompatData)(12, 0); OutTraceDW("HookDirectDraw: SetAppCompatData(12,0) ret=%x(%s)\n", res, ExplainDDError(res)); } } else{ OutTraceDW("HookDirectDraw: missing SetAppCompatData call\n"); } (*pFreeLibrary)(hinst); } static void BypassGOGDDrawRedirector() { // this procedure bypasses the GOG proxy ddraw.dll that sometimes is found in the GOG game folders. // This way, there will be no more the need to rename or delete this file. char sSysLibraryPath[MAX_PATH+10]; HMODULE hinst; GetSystemDirectory(sSysLibraryPath, MAX_PATH); strcat(sSysLibraryPath, "\\ddraw.dll"); hinst = (*pLoadLibraryA)(sSysLibraryPath); pDirectDrawEnumerateA = (DirectDrawEnumerateA_Type)GetProcAddress(hinst, "DirectDrawEnumerateA"); pDirectDrawEnumerateExA = (DirectDrawEnumerateExA_Type)GetProcAddress(hinst, "DirectDrawEnumerateExA"); pDirectDrawEnumerateW = (DirectDrawEnumerateW_Type)GetProcAddress(hinst, "DirectDrawEnumerateW"); pDirectDrawEnumerateExW = (DirectDrawEnumerateExW_Type)GetProcAddress(hinst, "DirectDrawEnumerateExW"); pDirectDrawCreate = (DirectDrawCreate_Type)GetProcAddress(hinst, "DirectDrawCreate"); pDirectDrawCreateEx = (DirectDrawCreateEx_Type)GetProcAddress(hinst, "DirectDrawCreateEx"); } int HookDirectDraw(HMODULE module, int version) { if(dxw.dwTargetDDVersion == HOOKDDRAWNONE) return 0; if ((dxw.dwFlags2 & SETCOMPATIBILITY) || (dxw.dwFlags6 & DISABLEMAXWINMODE)){ static BOOL AlreadyDone = FALSE; if(!AlreadyDone){ ddSetCompatibility(); AlreadyDone = TRUE; } } if(dxw.dwFlags6 & BYPASSGOGLIBS) { BypassGOGDDrawRedirector(); return TRUE; } if(dxw.dwFlags4 & HOTPATCH) { // hot-patch all APIs and that's all folks! HookLibraryEx(module, ddHooks, "ddraw.dll"); return TRUE; } //const GUID dd7 = {0x15e65ec0,0x3b9c,0x11d2,0xb9,0x2f,0x00,0x60,0x97,0x97,0xea,0x5b}; HMODULE hinst; OutTraceB("HookDirectDraw version=%d\n", version); //GHO switch(version){ case 0: // automatic HookLibraryEx(module, ddHooks, "ddraw.dll"); break; case 1: case 2: case 3: case 4: case 5: case 6: HookLibraryEx(module, ddHooks, "ddraw.dll"); if(!pDirectDrawCreate){ // required for IAT patching hinst = (*pLoadLibraryA)("ddraw.dll"); if(!hinst) OutTraceE("LoadLibrary ddraw.dll ERROR err=%d at %d\n", GetLastError(), __LINE__); pDirectDrawCreate = (DirectDrawCreate_Type)GetProcAddress(hinst, "DirectDrawCreate"); pDirectDrawEnumerateA = (DirectDrawEnumerateA_Type)GetProcAddress(hinst, "DirectDrawEnumerateA"); } if(pDirectDrawCreate){ LPDIRECTDRAW lpdd; BOOL res; HookLibraryEx(module, ddHooks, "ddraw.dll"); res=extDirectDrawCreate(0, &lpdd, 0); if (res){ OutTraceE("DirectDrawCreate: ERROR res=%x(%s)\n", res, ExplainDDError(res)); } lpdd->Release(); } break; case 7: HookLibraryEx(module, ddHooks, "ddraw.dll"); if(!pDirectDrawCreate){ // required for IAT patching in "Crimson skies" hinst = (*pLoadLibraryA)("ddraw.dll"); if(!hinst) OutTraceE("LoadLibrary ddraw.dll ERROR err=%d at %d\n", GetLastError(), __LINE__); pDirectDrawEnumerateA = (DirectDrawEnumerateA_Type)GetProcAddress(hinst, "DirectDrawEnumerateA"); pDirectDrawEnumerateExA = (DirectDrawEnumerateExA_Type)GetProcAddress(hinst, "DirectDrawEnumerateExA"); pDirectDrawCreate = (DirectDrawCreate_Type)GetProcAddress(hinst, "DirectDrawCreate"); pDirectDrawCreateEx = (DirectDrawCreateEx_Type)GetProcAddress(hinst, "DirectDrawCreateEx"); } if(pDirectDrawCreate){ LPDIRECTDRAW lpdd; BOOL res; res=extDirectDrawCreate(0, &lpdd, 0); if (res) OutTraceE("DirectDrawCreate: ERROR res=%x(%s)\n", res, ExplainDDError(res)); lpdd->Release(); } break; } if(pDirectDrawCreate || pDirectDrawCreateEx) return 1; return 0; } CreatePalette_Type pCreatePaletteMethod(int dxversion) { CreatePalette_Type pCreatePalette; switch(dxversion){ case 1: pCreatePalette = pCreatePalette1; break; case 2: pCreatePalette = pCreatePalette2; break; case 3: pCreatePalette = pCreatePalette3; break; case 4: pCreatePalette = pCreatePalette4; break; case 7: pCreatePalette = pCreatePalette7; break; } CHECKPTR(pCreatePalette, "CreatePalette"); return pCreatePalette; } SetPalette_Type pSetPaletteMethod(int dxversion) { SetPalette_Type pSetPalette; switch(dxversion){ case 1: pSetPalette=pSetPalette1; break; case 2: pSetPalette=pSetPalette2; break; case 3: pSetPalette=pSetPalette3; break; case 4: pSetPalette=pSetPalette4; break; case 7: pSetPalette=pSetPalette7; break; } CHECKPTR(pSetPalette, "SetPalette"); return pSetPalette; } ReleaseS_Type pReleaseSMethod(int dxversion) { ReleaseS_Type pReleaseS; switch(dxversion){ case 1: pReleaseS=pReleaseS1; break; case 2: pReleaseS=pReleaseS2; break; case 3: pReleaseS=pReleaseS3; break; case 4: pReleaseS=pReleaseS4; break; case 7: pReleaseS=pReleaseS7; break; } CHECKPTR(pReleaseS, "Surface::Release"); return pReleaseS; } ReleaseDC_Type pReleaseDCMethod() { ReleaseDC_Type pReleaseDC; switch(iBakBufferVersion){ case 1: pReleaseDC=pReleaseDC1; break; case 2: pReleaseDC=pReleaseDC2; break; case 3: pReleaseDC=pReleaseDC3; break; case 4: pReleaseDC=pReleaseDC4; break; case 7: pReleaseDC=pReleaseDC7; break; } CHECKPTR(pReleaseDC, "ReleaseDC"); return pReleaseDC; } SetClipper_Type pSetClipperMethod(int dxversion) { SetClipper_Type pSetClipper; switch(dxversion){ case 1: pSetClipper=pSetClipper1; break; case 2: pSetClipper=pSetClipper2; break; case 3: pSetClipper=pSetClipper3; break; case 4: pSetClipper=pSetClipper4; break; case 7: pSetClipper=pSetClipper7; break; } CHECKPTR(pSetClipper, "SetClipper"); return pSetClipper; } Blt_Type pGetBltMethod(int dxversion) { Blt_Type pBlt; switch(dxversion){ case 1: pBlt=pBlt1; break; case 2: pBlt=pBlt2; break; case 3: pBlt=pBlt3; break; case 4: pBlt=pBlt4; break; case 7: pBlt=pBlt7; break; } CHECKPTR(pBlt, "Blt"); return pBlt; } Blt_Type pBltMethod() { Blt_Type pBlt; switch(iBakBufferVersion){ case 1: pBlt=pBlt1; break; case 2: pBlt=pBlt2; break; case 3: pBlt=pBlt3; break; case 4: pBlt=pBlt4; break; case 7: pBlt=pBlt7; break; } CHECKPTR(pBlt, "Blt"); return pBlt; } GetDC_Type pGetDCMethod() { GetDC_Type pGetDC; switch(iBakBufferVersion){ case 1: pGetDC=pGetDC1; break; case 2: pGetDC=pGetDC2; break; case 3: pGetDC=pGetDC3; break; case 4: pGetDC=pGetDC4; break; case 7: pGetDC=pGetDC7; break; } CHECKPTR(pGetDC, "GetDC"); return pGetDC; } Unlock4_Type pUnlockMethod(int dxversion) { Unlock4_Type pUnlock; switch(dxversion){ case 1: pUnlock=(Unlock4_Type)pUnlock1; break; case 2: pUnlock=(Unlock4_Type)pUnlock2; break; case 3: pUnlock=(Unlock4_Type)pUnlock3; break; case 4: pUnlock=(Unlock4_Type)pUnlock4; break; case 7: pUnlock=(Unlock4_Type)pUnlock7; break; } CHECKPTR(pUnlock, "Unlock"); return pUnlock; } Lock_Type pLockMethod(int dxversion) { Lock_Type pLock; switch(dxversion){ case 1: pLock=pLock1; break; case 2: pLock=pLock2; break; case 3: pLock=pLock3; break; case 4: pLock=pLock4; break; case 7: pLock=pLock7; break; } CHECKPTR(pLock, "Lock"); return pLock; } CreateSurface2_Type pCreateSurfaceMethod(int dxversion) { CreateSurface2_Type pCreateSurface; switch(dxversion){ case 1: pCreateSurface=(CreateSurface2_Type)pCreateSurface1; break; case 2: pCreateSurface=(CreateSurface2_Type)pCreateSurface2; break; case 3: pCreateSurface=(CreateSurface2_Type)pCreateSurface3; break; case 4: pCreateSurface=(CreateSurface2_Type)pCreateSurface4; break; case 7: pCreateSurface=(CreateSurface2_Type)pCreateSurface7; break; } CHECKPTR(pCreateSurface, "CreateSurface"); return pCreateSurface; } GetSurfaceDesc2_Type pGetSurfaceDescMethod() { GetSurfaceDesc2_Type pGetSurfaceDesc; pGetSurfaceDesc = NULL; switch(iBakBufferVersion){ case 1: pGetSurfaceDesc=(GetSurfaceDesc2_Type)pGetSurfaceDesc1; break; case 2: pGetSurfaceDesc=(GetSurfaceDesc2_Type)pGetSurfaceDesc2; break; case 3: pGetSurfaceDesc=(GetSurfaceDesc2_Type)pGetSurfaceDesc3; break; case 4: pGetSurfaceDesc=(GetSurfaceDesc2_Type)pGetSurfaceDesc4; break; case 7: pGetSurfaceDesc=(GetSurfaceDesc2_Type)pGetSurfaceDesc7; break; } CHECKPTR(pGetSurfaceDesc, "GetSurfaceDesc"); return pGetSurfaceDesc; } GetGDISurface_Type pGetGDISurfaceMethod(int dxversion) { GetGDISurface_Type pGetGDISurface; switch(dxversion){ default: case 1: pGetGDISurface = pGetGDISurface1; break; case 2: pGetGDISurface = pGetGDISurface2; break; case 3: pGetGDISurface = pGetGDISurface3; break; case 4: pGetGDISurface = pGetGDISurface4; break; case 7: pGetGDISurface = pGetGDISurface7; break; } CHECKPTR(pGetGDISurface, "GetGDISurface"); return pGetGDISurface; } int lpddsHookedVersion() { return iBakBufferVersion; } void DescribeSurface(LPDIRECTDRAWSURFACE lpdds, int dxversion, char *label, int line) { DDSURFACEDESC2 ddsd; HRESULT res; GetSurfaceDesc2_Type pGetSurfaceDesc = NULL; int dwSize = (dxversion<4)?sizeof(DDSURFACEDESC):sizeof(DDSURFACEDESC2); memset(&ddsd, 0, dwSize); ddsd.dwSize = dwSize; pGetSurfaceDesc = pGetSurfaceDescMethod(); if(pGetSurfaceDesc==NULL) return; res=(*pGetSurfaceDescMethod())((LPDIRECTDRAWSURFACE2)lpdds, &ddsd); if(res)return; OutTraceDW("Surface %s: ddsd=%x dxversion=%d %s\n", label, lpdds, dxversion, LogSurfaceAttributes(&ddsd, label, line)); } void RegisterPixelFormat(int dxversion, LPDIRECTDRAWSURFACE lpdds) { DDSURFACEDESC2 ddsdpix; memset((void *)&ddsdpix, 0, sizeof(DDSURFACEDESC2)); ddsdpix.dwSize = (dxversion < 4) ? sizeof(DDSURFACEDESC) : sizeof(DDSURFACEDESC2); ddsdpix.dwFlags = DDSD_PIXELFORMAT; switch(dxversion){ case 1: if(pGetSurfaceDesc1)(*pGetSurfaceDesc1)((LPDIRECTDRAWSURFACE)lpdds, (LPDDSURFACEDESC)&ddsdpix); break; case 2: if(pGetSurfaceDesc2)(*pGetSurfaceDesc2)((LPDIRECTDRAWSURFACE)lpdds, (LPDDSURFACEDESC)&ddsdpix); break; case 3: if(pGetSurfaceDesc3)(*pGetSurfaceDesc3)((LPDIRECTDRAWSURFACE)lpdds, (LPDDSURFACEDESC)&ddsdpix); break; case 4: if(pGetSurfaceDesc4)(*pGetSurfaceDesc4)((LPDIRECTDRAWSURFACE2)lpdds, &ddsdpix); break; case 7: if(pGetSurfaceDesc7)(*pGetSurfaceDesc7)((LPDIRECTDRAWSURFACE2)lpdds, &ddsdpix); break; } GetHookInfo()->pfd=ddsdpix.ddpfPixelFormat; // v2.02.88 OutTraceB("RegisterPixelFormat: lpdds=%x %s\n", lpdds, DumpPixelFormat(&ddsdpix)); } /* ------------------------------------------------------------------ */ // SetPixFmt: builds a pixel format descriptor when no one is specified, starting from the color depth, the current // desktop pixel format (when the color depth is the same) or the config flags void SetPixFmt(LPDDSURFACEDESC2 lpdd) { OutTraceDW("SetPixFmt: BPP=%d Use565=%d NoAlpha=%d\n", dxw.VirtualPixelFormat.dwRGBBitCount, dxw.dwFlags1 & USERGB565 ? 1:0, dxw.dwFlags4 & NOALPHACHANNEL ? 1:0); memset(&lpdd->ddpfPixelFormat,0,sizeof(DDPIXELFORMAT)); lpdd->ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT); switch (dxw.VirtualPixelFormat.dwRGBBitCount) { case 8: case 15: case 16: case 24: case 32: FixPixelFormat(dxw.VirtualPixelFormat.dwRGBBitCount, &lpdd->ddpfPixelFormat); break; default: OutTraceE("CreateSurface ERROR: Unsupported resolution ColorBPP=%d\n", dxw.VirtualPixelFormat.dwRGBBitCount); break; } // remember current virtual settings dxw.VirtualPixelFormat=lpdd->ddpfPixelFormat; OutTraceDW("SetPixFmt: %s\n", DumpPixelFormat(lpdd)); } // retrieves the stored pixel format void GetPixFmt(LPDDSURFACEDESC2 lpdd) { lpdd->ddpfPixelFormat = dxw.VirtualPixelFormat; OutTraceDW("GetPixFmt: %s\n", DumpPixelFormat(lpdd)); } /* ------------------------------------------------------------------ */ // hook query functions that determines the object versioning .... /* ------------------------------------------------------------------ */ int Set_dwSize_From_Surface() { int size; switch(iBakBufferVersion){ case 1: size=sizeof(DDSURFACEDESC); break; case 2: size=sizeof(DDSURFACEDESC); break; case 3: size=sizeof(DDSURFACEDESC); break; case 4: size=sizeof(DDSURFACEDESC2); break; case 7: size=sizeof(DDSURFACEDESC2); break; } return size; } void HookDDSession(LPDIRECTDRAW *lplpdd, int dxversion) { OutTraceDW("Hooking directdraw session dd=%x dxversion=%d thread_id=%x\n", *lplpdd, dxversion, GetCurrentThreadId()); iDirectDrawVersion = dxversion; // save for ddraw session operations // unimplemented, but better not hook it with a single wrapper //SetHook((void *)(**(DWORD **)lplpdd + 12), extCompact, (void **)&pCompact, "Compact"); switch(dxversion) { case 1: SetHook((void *)(**(DWORD **)lplpdd), extQueryInterfaceD1, (void **)&pQueryInterfaceD1, "QueryInterface(D1)"); SetHook((void *)(**(DWORD **)lplpdd + 8), extReleaseD1, (void **)&pReleaseD1, "Release(D1)"); SetHook((void *)(**(DWORD **)lplpdd + 16), extCreateClipper1, (void **)&pCreateClipper1, "CreateClipper(D1)"); SetHook((void *)(**(DWORD **)lplpdd + 20), extCreatePalette1, (void **)&pCreatePalette1, "CreatePalette(D1)"); SetHook((void *)(**(DWORD **)lplpdd + 24), extCreateSurface1, (void **)&pCreateSurface1, "CreateSurface(D1)"); SetHook((void *)(**(DWORD **)lplpdd + 28), extDuplicateSurface1, (void **)&pDuplicateSurface1, "DuplicateSurface(D1)"); SetHook((void *)(**(DWORD **)lplpdd + 32), extEnumDisplayModes1, (void **)&pEnumDisplayModes1, "EnumDisplayModes(D1)"); SetHook((void *)(**(DWORD **)lplpdd + 40), extFlipToGDISurface1, (void **)&pFlipToGDISurface1, "FlipToGDISurface(D1)"); SetHook((void *)(**(DWORD **)lplpdd + 44), extGetCaps1D, (void **)&pGetCaps1D, "GetCaps(D1)"); SetHook((void *)(**(DWORD **)lplpdd + 48), extGetDisplayMode1, (void **)&pGetDisplayMode1, "GetDisplayMode(D1)"); SetHook((void *)(**(DWORD **)lplpdd + 56), extGetGDISurface1, (void **)&pGetGDISurface1, "GetGDISurface(D1)"); SetHook((void *)(**(DWORD **)lplpdd + 64), extGetScanLine1, (void **)&pGetScanLine1, "GetScanLine(D1)"); SetHook((void *)(**(DWORD **)lplpdd + 72), extInitialize1, (void **)&pInitialize1, "Initialize(D1)"); SetHook((void *)(**(DWORD **)lplpdd + 76), extRestoreDisplayMode1, (void **)&pRestoreDisplayMode1, "RestoreDisplayMode(D1)"); SetHook((void *)(**(DWORD **)lplpdd + 80), extSetCooperativeLevel1, (void **)&pSetCooperativeLevel1, "SetCooperativeLevel(D1)"); SetHook((void *)(**(DWORD **)lplpdd + 84), extSetDisplayMode1, (void **)&pSetDisplayMode1, "SetDisplayMode(D1)"); SetHook((void *)(**(DWORD **)lplpdd + 88), extWaitForVerticalBlank1, (void **)&pWaitForVerticalBlank1, "WaitForVerticalBlank(D1)"); break; case 2: SetHook((void *)(**(DWORD **)lplpdd), extQueryInterfaceD2, (void **)&pQueryInterfaceD2, "QueryInterface(D2)"); SetHook((void *)(**(DWORD **)lplpdd + 8), extReleaseD2, (void **)&pReleaseD2, "Release(D2)"); SetHook((void *)(**(DWORD **)lplpdd + 16), extCreateClipper2, (void **)&pCreateClipper2, "CreateClipper(D2)"); SetHook((void *)(**(DWORD **)lplpdd + 20), extCreatePalette2, (void **)&pCreatePalette2, "CreatePalette(D2)"); SetHook((void *)(**(DWORD **)lplpdd + 24), extCreateSurface2, (void **)&pCreateSurface2, "CreateSurface(D2)"); SetHook((void *)(**(DWORD **)lplpdd + 28), extDuplicateSurface2, (void **)&pDuplicateSurface2, "DuplicateSurface(D2)"); SetHook((void *)(**(DWORD **)lplpdd + 32), extEnumDisplayModes2, (void **)&pEnumDisplayModes2, "EnumDisplayModes(D2)"); SetHook((void *)(**(DWORD **)lplpdd + 40), extFlipToGDISurface2, (void **)&pFlipToGDISurface2, "FlipToGDISurface(D2)"); SetHook((void *)(**(DWORD **)lplpdd + 44), extGetCaps2D, (void **)&pGetCaps2D, "GetCaps(D2)"); SetHook((void *)(**(DWORD **)lplpdd + 48), extGetDisplayMode2, (void **)&pGetDisplayMode2, "GetDisplayMode(D2)"); SetHook((void *)(**(DWORD **)lplpdd + 56), extGetGDISurface2, (void **)&pGetGDISurface2, "GetGDISurface(D2)"); SetHook((void *)(**(DWORD **)lplpdd + 64), extGetScanLine2, (void **)&pGetScanLine2, "GetScanLine(D2)"); SetHook((void *)(**(DWORD **)lplpdd + 72), extInitialize2, (void **)&pInitialize2, "Initialize(D2)"); SetHook((void *)(**(DWORD **)lplpdd + 76), extRestoreDisplayMode2, (void **)&pRestoreDisplayMode2, "RestoreDisplayMode(D2)"); SetHook((void *)(**(DWORD **)lplpdd + 80), extSetCooperativeLevel2, (void **)&pSetCooperativeLevel2, "SetCooperativeLevel(D2)"); SetHook((void *)(**(DWORD **)lplpdd + 84), extSetDisplayMode2, (void **)&pSetDisplayMode2, "SetDisplayMode(D2)"); SetHook((void *)(**(DWORD **)lplpdd + 88), extWaitForVerticalBlank2, (void **)&pWaitForVerticalBlank2, "WaitForVerticalBlank(D2)"); // added in v2 interface SetHook((void *)(**(DWORD **)lplpdd + 92), extGetAvailableVidMem2, (void **)&pGetAvailableVidMem2, "GetAvailableVidMem(D2)"); break; case 3: SetHook((void *)(**(DWORD **)lplpdd), extQueryInterfaceD3, (void **)&pQueryInterfaceD3, "QueryInterface(D3)"); SetHook((void *)(**(DWORD **)lplpdd + 8), extReleaseD3, (void **)&pReleaseD3, "Release(D3)"); SetHook((void *)(**(DWORD **)lplpdd + 16), extCreateClipper3, (void **)&pCreateClipper3, "CreateClipper(D3)"); SetHook((void *)(**(DWORD **)lplpdd + 20), extCreatePalette3, (void **)&pCreatePalette3, "CreatePalette(D3)"); SetHook((void *)(**(DWORD **)lplpdd + 24), extCreateSurface3, (void **)&pCreateSurface3, "CreateSurface(D3)"); SetHook((void *)(**(DWORD **)lplpdd + 28), extDuplicateSurface3, (void **)&pDuplicateSurface3, "DuplicateSurface(D3)"); SetHook((void *)(**(DWORD **)lplpdd + 32), extEnumDisplayModes3, (void **)&pEnumDisplayModes3, "EnumDisplayModes(D3)"); SetHook((void *)(**(DWORD **)lplpdd + 40), extFlipToGDISurface3, (void **)&pFlipToGDISurface3, "FlipToGDISurface(D3)"); SetHook((void *)(**(DWORD **)lplpdd + 44), extGetCaps3D, (void **)&pGetCaps3D, "GetCaps(D3)"); SetHook((void *)(**(DWORD **)lplpdd + 48), extGetDisplayMode3, (void **)&pGetDisplayMode3, "GetDisplayMode(D3)"); SetHook((void *)(**(DWORD **)lplpdd + 56), extGetGDISurface3, (void **)&pGetGDISurface3, "GetGDISurface(D3)"); SetHook((void *)(**(DWORD **)lplpdd + 64), extGetScanLine3, (void **)&pGetScanLine3, "GetScanLine(D3)"); SetHook((void *)(**(DWORD **)lplpdd + 72), extInitialize3, (void **)&pInitialize3, "Initialize(D3)"); SetHook((void *)(**(DWORD **)lplpdd + 76), extRestoreDisplayMode3, (void **)&pRestoreDisplayMode3, "RestoreDisplayMode(D3)"); SetHook((void *)(**(DWORD **)lplpdd + 80), extSetCooperativeLevel3, (void **)&pSetCooperativeLevel3, "SetCooperativeLevel(D3)"); SetHook((void *)(**(DWORD **)lplpdd + 84), extSetDisplayMode3, (void **)&pSetDisplayMode3, "SetDisplayMode(D3)"); SetHook((void *)(**(DWORD **)lplpdd + 88), extWaitForVerticalBlank3, (void **)&pWaitForVerticalBlank3, "WaitForVerticalBlank(D3)"); // added in v2 interface SetHook((void *)(**(DWORD **)lplpdd + 92), extGetAvailableVidMem3, (void **)&pGetAvailableVidMem3, "GetAvailableVidMem(D3)"); break; case 4: SetHook((void *)(**(DWORD **)lplpdd), extQueryInterfaceD4, (void **)&pQueryInterfaceD4, "QueryInterface(D4)"); SetHook((void *)(**(DWORD **)lplpdd + 8), extReleaseD4, (void **)&pReleaseD4, "Release(D4)"); SetHook((void *)(**(DWORD **)lplpdd + 16), extCreateClipper4, (void **)&pCreateClipper4, "CreateClipper(D4)"); SetHook((void *)(**(DWORD **)lplpdd + 20), extCreatePalette4, (void **)&pCreatePalette4, "CreatePalette(D4)"); SetHook((void *)(**(DWORD **)lplpdd + 24), extCreateSurface4, (void **)&pCreateSurface4, "CreateSurface(D4)"); SetHook((void *)(**(DWORD **)lplpdd + 28), extDuplicateSurface4, (void **)&pDuplicateSurface4, "DuplicateSurface(D4)"); SetHook((void *)(**(DWORD **)lplpdd + 32), extEnumDisplayModes4, (void **)&pEnumDisplayModes4, "EnumDisplayModes(D4)"); SetHook((void *)(**(DWORD **)lplpdd + 40), extFlipToGDISurface4, (void **)&pFlipToGDISurface4, "FlipToGDISurface(D4)"); SetHook((void *)(**(DWORD **)lplpdd + 44), extGetCaps4D, (void **)&pGetCaps4D, "GetCaps(D4)"); SetHook((void *)(**(DWORD **)lplpdd + 48), extGetDisplayMode4, (void **)&pGetDisplayMode4, "GetDisplayMode(D4)"); SetHook((void *)(**(DWORD **)lplpdd + 56), extGetGDISurface4, (void **)&pGetGDISurface4, "GetGDISurface(D4)"); SetHook((void *)(**(DWORD **)lplpdd + 64), extGetScanLine4, (void **)&pGetScanLine4, "GetScanLine(D4)"); SetHook((void *)(**(DWORD **)lplpdd + 72), extInitialize4, (void **)&pInitialize4, "Initialize(D4)"); SetHook((void *)(**(DWORD **)lplpdd + 76), extRestoreDisplayMode4, (void **)&pRestoreDisplayMode4, "RestoreDisplayMode(D4)"); SetHook((void *)(**(DWORD **)lplpdd + 80), extSetCooperativeLevel4, (void **)&pSetCooperativeLevel4, "SetCooperativeLevel(D4)"); SetHook((void *)(**(DWORD **)lplpdd + 84), extSetDisplayMode4, (void **)&pSetDisplayMode4, "SetDisplayMode(D4)"); SetHook((void *)(**(DWORD **)lplpdd + 88), extWaitForVerticalBlank4, (void **)&pWaitForVerticalBlank4, "WaitForVerticalBlank(D4)"); // added in v2 interface SetHook((void *)(**(DWORD **)lplpdd + 92), extGetAvailableVidMem4, (void **)&pGetAvailableVidMem4, "GetAvailableVidMem(D4)"); // added in v4 interface SetHook((void *)(**(DWORD **)lplpdd + 104), extTestCooperativeLevel4, (void **)&pTestCooperativeLevel4, "TestCooperativeLevel(D4)"); break; case 7: SetHook((void *)(**(DWORD **)lplpdd), extQueryInterfaceD7, (void **)&pQueryInterfaceD7, "QueryInterface(D7)"); SetHook((void *)(**(DWORD **)lplpdd + 8), extReleaseD7, (void **)&pReleaseD7, "Release(D7)"); SetHook((void *)(**(DWORD **)lplpdd + 16), extCreateClipper7, (void **)&pCreateClipper7, "CreateClipper(D7)"); SetHook((void *)(**(DWORD **)lplpdd + 20), extCreatePalette7, (void **)&pCreatePalette7, "CreatePalette(D7)"); SetHook((void *)(**(DWORD **)lplpdd + 24), extCreateSurface7, (void **)&pCreateSurface7, "CreateSurface(D7)"); SetHook((void *)(**(DWORD **)lplpdd + 28), extDuplicateSurface7, (void **)&pDuplicateSurface7, "DuplicateSurface(D7)"); SetHook((void *)(**(DWORD **)lplpdd + 32), extEnumDisplayModes7, (void **)&pEnumDisplayModes7, "EnumDisplayModes(D4)"); SetHook((void *)(**(DWORD **)lplpdd + 40), extFlipToGDISurface7, (void **)&pFlipToGDISurface7, "FlipToGDISurface(D7)"); SetHook((void *)(**(DWORD **)lplpdd + 44), extGetCaps7D, (void **)&pGetCaps7D, "GetCaps(D7)"); SetHook((void *)(**(DWORD **)lplpdd + 48), extGetDisplayMode7, (void **)&pGetDisplayMode7, "GetDisplayMode(D7)"); SetHook((void *)(**(DWORD **)lplpdd + 56), extGetGDISurface7, (void **)&pGetGDISurface7, "GetGDISurface(D7)"); SetHook((void *)(**(DWORD **)lplpdd + 64), extGetScanLine7, (void **)&pGetScanLine7, "GetScanLine(D7)"); SetHook((void *)(**(DWORD **)lplpdd + 72), extInitialize7, (void **)&pInitialize7, "Initialize(D7)"); SetHook((void *)(**(DWORD **)lplpdd + 76), extRestoreDisplayMode7, (void **)&pRestoreDisplayMode7, "RestoreDisplayMode(D7)"); SetHook((void *)(**(DWORD **)lplpdd + 80), extSetCooperativeLevel7, (void **)&pSetCooperativeLevel7, "SetCooperativeLevel(D7)"); SetHook((void *)(**(DWORD **)lplpdd + 84), extSetDisplayMode7, (void **)&pSetDisplayMode7, "SetDisplayMode(D7)"); SetHook((void *)(**(DWORD **)lplpdd + 88), extWaitForVerticalBlank7, (void **)&pWaitForVerticalBlank7, "WaitForVerticalBlank(D7)"); // added in v2 interface SetHook((void *)(**(DWORD **)lplpdd + 92), extGetAvailableVidMem7, (void **)&pGetAvailableVidMem7, "GetAvailableVidMem(D7)"); // added in v4 interface SetHook((void *)(**(DWORD **)lplpdd + 104), extTestCooperativeLevel7, (void **)&pTestCooperativeLevel7, "TestCooperativeLevel(D7)"); // added in v7 interface SetHook((void *)(**(DWORD **)lplpdd + 112), extStartModeTest, (void **)&pStartModeTest, "StartModeTest(D7)"); SetHook((void *)(**(DWORD **)lplpdd + 116), extEvaluateMode, (void **)&pEvaluateMode, "EvaluateMode(D7)"); break; } } void HookDDClipper(LPDIRECTDRAWCLIPPER FAR* lplpDDClipper) { OutTraceDW("Hooking directdraw clipper dd=%x\n", *lplpDDClipper); SetHook((void *)(**(DWORD **)lplpDDClipper + 8), extReleaseC, (void **)&pReleaseC, "Release(C)"); SetHook((void *)(**(DWORD **)lplpDDClipper + 12), extGetClipList, (void **)&pGetClipList, "GetClipList(C)"); SetHook((void *)(**(DWORD **)lplpDDClipper + 28), extSetClipList, (void **)&pSetClipList, "SetClipList(C)"); SetHook((void *)(**(DWORD **)lplpDDClipper + 32), extSetHWnd, (void **)&pSetHWnd, "SetHWnd(C)"); } static void HookDDPalette(LPDIRECTDRAWPALETTE FAR* lplpDDPalette) { OutTraceDW("Hooking directdraw palette dd=%x\n", *lplpDDPalette); /*** IDirectDrawPalette methods ***/ SetHook((void *)(**(DWORD **)lplpDDPalette + 8), extReleaseP, (void **)&pReleaseP, "Release(P)"); SetHook((void *)(**(DWORD **)lplpDDPalette + 24), extSetEntries, (void **)&pSetEntries, "SetEntries(P)"); } void HookDDSurface(LPDIRECTDRAWSURFACE *lplpdds, int dxversion, BOOL isPrim) { BOOL bEmu = dxw.IsEmulated; if(iBakBufferVersion==0) iBakBufferVersion=dxversion; // v2.03.60 OutTraceDW("Hooking surface dds=%x dxversion=%d prim=%x thread_id=%x\n", *lplpdds, dxversion, isPrim, GetCurrentThreadId()); switch(dxversion) { case 1: SetHook((void *)(**(DWORD **)lplpdds), extQueryInterfaceS1, (void **)&pQueryInterfaceS1, "QueryInterface(S1)"); SetHook((void *)(**(DWORD **)lplpdds + 8), extReleaseS1, (void **)&pReleaseS1, "Release(S1)"); SetHook((void *)(**(DWORD **)lplpdds + 12), extAddAttachedSurface1, (void **)&pAddAttachedSurface1, "AddAttachedSurface(S1)"); SetHook((void *)(**(DWORD **)lplpdds + 16), extAddOverlayDirtyRect1, (void **)&pAddOverlayDirtyRect1, "AddOverlayDirtyRect(S1)"); SetHook((void *)(**(DWORD **)lplpdds + 28), extBltFast1, (void **)&pBltFast1, "BltFast(S1)"); SetHook((void *)(**(DWORD **)lplpdds + 20), extBlt1, (void **)&pBlt1, "Blt(S1)"); SetHook((void *)(**(DWORD **)lplpdds + 32), extDeleteAttachedSurface1, (void **)&pDeleteAttachedSurface1, "DeleteAttachedSurface(S1)"); SetHook((void *)(**(DWORD **)lplpdds + 36), extEnumAttachedSurfaces1, (void **)&pEnumAttachedSurfaces1, "EnumAttachedSurfaces(S1)"); SetHook((void *)(**(DWORD **)lplpdds + 40), extEnumOverlayZOrders1, (void **)&pEnumOverlayZOrders1, "EnumOverlayZOrders(S1)"); SetHook((void *)(**(DWORD **)lplpdds + 44), extFlip1, (void **)&pFlip1, "Flip(S1)"); SetHook((void *)(**(DWORD **)lplpdds + 48), extGetAttachedSurface1, (void **)&pGetAttachedSurface1, "GetAttachedSurface(S1)"); SetHook((void *)(**(DWORD **)lplpdds + 56), extGetCaps1S, (void **)&pGetCaps1S, "GetCaps(S1)"); SetHook((void *)(**(DWORD **)lplpdds + 64), extGetColorKey1, (void **)&pGetColorKey1, "GetColorKey(S1)"); SetHook((void *)(**(DWORD **)lplpdds + 68), extGetDC1, (void **)&pGetDC1, "GetDC(S1)"); SetHook((void *)(**(DWORD **)lplpdds + 76), extGetOverlayPosition1, (void **)&pGetOverlayPosition1, "GetOverlayPosition(S1)"); SetHook((void *)(**(DWORD **)lplpdds + 80), extGetPalette1, (void **)&pGetPalette1, "GetPalette(S1)"); SetHook((void *)(**(DWORD **)lplpdds + 84), extGetPixelFormat1, (void **)&pGetPixelFormat1, "GetPixelFormat(S1)"); SetHook((void *)(**(DWORD **)lplpdds + 88), extGetSurfaceDesc1, (void **)&pGetSurfaceDesc1, "GetSurfaceDesc(S1)"); SetHook((void *)(**(DWORD **)lplpdds + 100), bEmu ? extLock1 : extLockDir1, (void **)&pLock1, "Lock(S1)"); SetHook((void *)(**(DWORD **)lplpdds + 128), bEmu ? extUnlock1 : extUnlockDir1, (void **)&pUnlock1, "Unlock(S1)"); SetHook((void *)(**(DWORD **)lplpdds + 104), extReleaseDC1, (void **)&pReleaseDC1, "ReleaseDC(S1)"); SetHook((void *)(**(DWORD **)lplpdds + 120), extSetOverlayPosition1, (void **)&pSetOverlayPosition1, "SetOverlayPosition(S1)"); SetHook((void *)(**(DWORD **)lplpdds + 124), extSetPalette1, (void **)&pSetPalette1, "SetPalette(S1)"); break; case 2: SetHook((void *)(**(DWORD **)lplpdds), extQueryInterfaceS2, (void **)&pQueryInterfaceS2, "QueryInterface(S2)"); SetHook((void *)(**(DWORD **)lplpdds + 8), extReleaseS2, (void **)&pReleaseS2, "Release(S2)"); SetHook((void *)(**(DWORD **)lplpdds + 12), extAddAttachedSurface2, (void **)&pAddAttachedSurface2, "AddAttachedSurface(S2)"); SetHook((void *)(**(DWORD **)lplpdds + 16), extAddOverlayDirtyRect2, (void **)&pAddOverlayDirtyRect2, "AddOverlayDirtyRect(S2)"); SetHook((void *)(**(DWORD **)lplpdds + 28), extBltFast2, (void **)&pBltFast2, "BltFast(S2)"); SetHook((void *)(**(DWORD **)lplpdds + 20), extBlt2, (void **)&pBlt2, "Blt(S2)"); SetHook((void *)(**(DWORD **)lplpdds + 32), extDeleteAttachedSurface2, (void **)&pDeleteAttachedSurface2, "DeleteAttachedSurface(S2)"); SetHook((void *)(**(DWORD **)lplpdds + 36), extEnumAttachedSurfaces2, (void **)&pEnumAttachedSurfaces2, "EnumAttachedSurfaces(S2)"); SetHook((void *)(**(DWORD **)lplpdds + 40), extEnumOverlayZOrders2, (void **)&pEnumOverlayZOrders2, "EnumOverlayZOrders(S2)"); SetHook((void *)(**(DWORD **)lplpdds + 44), extFlip2, (void **)&pFlip2, "Flip(S2)"); SetHook((void *)(**(DWORD **)lplpdds + 48), extGetAttachedSurface2, (void **)&pGetAttachedSurface2, "GetAttachedSurface(S2)"); SetHook((void *)(**(DWORD **)lplpdds + 56), extGetCaps2S, (void **)&pGetCaps2S, "GetCaps(S2)"); SetHook((void *)(**(DWORD **)lplpdds + 64), extGetColorKey2, (void **)&pGetColorKey2, "GetColorKey(S2)"); SetHook((void *)(**(DWORD **)lplpdds + 68), extGetDC2, (void **)&pGetDC2, "GetDC(S2)"); SetHook((void *)(**(DWORD **)lplpdds + 76), extGetOverlayPosition2, (void **)&pGetOverlayPosition2, "GetOverlayPosition(S2)"); SetHook((void *)(**(DWORD **)lplpdds + 80), extGetPalette2, (void **)&pGetPalette2, "GetPalette(S2)"); SetHook((void *)(**(DWORD **)lplpdds + 84), extGetPixelFormat2, (void **)&pGetPixelFormat2, "GetPixelFormat(S2)"); SetHook((void *)(**(DWORD **)lplpdds + 88), extGetSurfaceDesc2, (void **)&pGetSurfaceDesc2, "GetSurfaceDesc(S2)"); SetHook((void *)(**(DWORD **)lplpdds + 100), bEmu ? extLock2 : extLockDir2, (void **)&pLock2, "Lock(S2)"); SetHook((void *)(**(DWORD **)lplpdds + 128), bEmu ? extUnlock2 : extUnlockDir2, (void **)&pUnlock2, "Unlock(S2)"); SetHook((void *)(**(DWORD **)lplpdds + 104), extReleaseDC2, (void **)&pReleaseDC2, "ReleaseDC(S2)"); SetHook((void *)(**(DWORD **)lplpdds + 120), extSetOverlayPosition2, (void **)&pSetOverlayPosition2, "SetOverlayPosition(S2)"); SetHook((void *)(**(DWORD **)lplpdds + 124), extSetPalette2, (void **)&pSetPalette2, "SetPalette(S2)"); break; case 3: SetHook((void *)(**(DWORD **)lplpdds), extQueryInterfaceS3, (void **)&pQueryInterfaceS3, "QueryInterface(S3)"); SetHook((void *)(**(DWORD **)lplpdds + 8), extReleaseS3, (void **)&pReleaseS3, "Release(S3)"); SetHook((void *)(**(DWORD **)lplpdds + 12), extAddAttachedSurface3, (void **)&pAddAttachedSurface3, "AddAttachedSurface(S3)"); SetHook((void *)(**(DWORD **)lplpdds + 16), extAddOverlayDirtyRect3, (void **)&pAddOverlayDirtyRect3, "AddOverlayDirtyRect(S3)"); SetHook((void *)(**(DWORD **)lplpdds + 28), extBltFast3, (void **)&pBltFast3, "BltFast(S3)"); SetHook((void *)(**(DWORD **)lplpdds + 20), extBlt3, (void **)&pBlt3, "Blt(S1)"); SetHook((void *)(**(DWORD **)lplpdds + 32), extDeleteAttachedSurface3, (void **)&pDeleteAttachedSurface3, "DeleteAttachedSurface(S3)"); SetHook((void *)(**(DWORD **)lplpdds + 36), extEnumAttachedSurfaces3, (void **)&pEnumAttachedSurfaces3, "EnumAttachedSurfaces(S3)"); SetHook((void *)(**(DWORD **)lplpdds + 40), extEnumOverlayZOrders3, (void **)&pEnumOverlayZOrders3, "EnumOverlayZOrders(S3)"); SetHook((void *)(**(DWORD **)lplpdds + 44), extFlip3, (void **)&pFlip3, "Flip(S3)"); SetHook((void *)(**(DWORD **)lplpdds + 48), extGetAttachedSurface3, (void **)&pGetAttachedSurface3, "GetAttachedSurface(S3)"); SetHook((void *)(**(DWORD **)lplpdds + 56), extGetCaps3S, (void **)&pGetCaps3S, "GetCaps(S3)"); SetHook((void *)(**(DWORD **)lplpdds + 64), extGetColorKey3, (void **)&pGetColorKey3, "GetColorKey(S3)"); SetHook((void *)(**(DWORD **)lplpdds + 68), extGetDC3, (void **)&pGetDC3, "GetDC(S3)"); SetHook((void *)(**(DWORD **)lplpdds + 76), extGetOverlayPosition3, (void **)&pGetOverlayPosition3, "GetOverlayPosition(S3)"); SetHook((void *)(**(DWORD **)lplpdds + 80), extGetPalette3, (void **)&pGetPalette3, "GetPalette(S3)"); SetHook((void *)(**(DWORD **)lplpdds + 84), extGetPixelFormat3, (void **)&pGetPixelFormat3, "GetPixelFormat(S3)"); SetHook((void *)(**(DWORD **)lplpdds + 88), extGetSurfaceDesc3, (void **)&pGetSurfaceDesc3, "GetSurfaceDesc(S3)"); SetHook((void *)(**(DWORD **)lplpdds + 100), bEmu ? extLock3 : extLockDir3, (void **)&pLock3, "Lock(S3)"); SetHook((void *)(**(DWORD **)lplpdds + 128), bEmu ? extUnlock3 : extUnlockDir3, (void **)&pUnlock3, "Unlock(S3)"); SetHook((void *)(**(DWORD **)lplpdds + 104), extReleaseDC3, (void **)&pReleaseDC3, "ReleaseDC(S3)"); SetHook((void *)(**(DWORD **)lplpdds + 120), extSetOverlayPosition3, (void **)&pSetOverlayPosition3, "SetOverlayPosition(S3)"); SetHook((void *)(**(DWORD **)lplpdds + 124), extSetPalette3, (void **)&pSetPalette3, "SetPalette(S3)"); // added in interface version 3 SetHook((void *)(**(DWORD **)lplpdds + 156), extSetSurfaceDesc3, (void **)&pSetSurfaceDesc3, "SetSurfaceDesc(S3)"); break; case 4: SetHook((void *)(**(DWORD **)lplpdds), extQueryInterfaceS4, (void **)&pQueryInterfaceS4, "QueryInterface(S4)"); SetHook((void *)(**(DWORD **)lplpdds + 8), extReleaseS4, (void **)&pReleaseS4, "Release(S4)"); SetHook((void *)(**(DWORD **)lplpdds + 12), extAddAttachedSurface4, (void **)&pAddAttachedSurface4, "AddAttachedSurface(S4)"); SetHook((void *)(**(DWORD **)lplpdds + 16), extAddOverlayDirtyRect4, (void **)&pAddOverlayDirtyRect4, "AddOverlayDirtyRect(S4)"); SetHook((void *)(**(DWORD **)lplpdds + 28), extBltFast4, (void **)&pBltFast4, "BltFast(S4)"); SetHook((void *)(**(DWORD **)lplpdds + 20), extBlt4, (void **)&pBlt4, "Blt(S1)"); SetHook((void *)(**(DWORD **)lplpdds + 32), extDeleteAttachedSurface4, (void **)&pDeleteAttachedSurface4, "DeleteAttachedSurface(S4)"); SetHook((void *)(**(DWORD **)lplpdds + 36), extEnumAttachedSurfaces4, (void **)&pEnumAttachedSurfaces4, "EnumAttachedSurfaces(S4)"); SetHook((void *)(**(DWORD **)lplpdds + 40), extEnumOverlayZOrders4, (void **)&pEnumOverlayZOrders4, "EnumOverlayZOrders(S4)"); SetHook((void *)(**(DWORD **)lplpdds + 44), extFlip4, (void **)&pFlip4, "Flip(S4)"); SetHook((void *)(**(DWORD **)lplpdds + 48), extGetAttachedSurface4, (void **)&pGetAttachedSurface4, "GetAttachedSurface(S4)"); SetHook((void *)(**(DWORD **)lplpdds + 56), extGetCaps4S, (void **)&pGetCaps4S, "GetCaps(S4)"); SetHook((void *)(**(DWORD **)lplpdds + 64), extGetColorKey4, (void **)&pGetColorKey4, "GetColorKey(S4)"); SetHook((void *)(**(DWORD **)lplpdds + 68), extGetDC4, (void **)&pGetDC4, "GetDC(S4)"); SetHook((void *)(**(DWORD **)lplpdds + 76), extGetOverlayPosition4, (void **)&pGetOverlayPosition4, "GetOverlayPosition(S4)"); SetHook((void *)(**(DWORD **)lplpdds + 80), extGetPalette4, (void **)&pGetPalette4, "GetPalette(S4)"); SetHook((void *)(**(DWORD **)lplpdds + 84), extGetPixelFormat4, (void **)&pGetPixelFormat4, "GetPixelFormat(S4)"); SetHook((void *)(**(DWORD **)lplpdds + 88), extGetSurfaceDesc4, (void **)&pGetSurfaceDesc4, "GetSurfaceDesc(S4)"); SetHook((void *)(**(DWORD **)lplpdds + 100), bEmu ? extLock4 : extLockDir4, (void **)&pLock4, "Lock(S4)"); SetHook((void *)(**(DWORD **)lplpdds + 128), bEmu ? extUnlock4 : extUnlockDir4, (void **)&pUnlock4, "Unlock(S4)"); SetHook((void *)(**(DWORD **)lplpdds + 104), extReleaseDC4, (void **)&pReleaseDC4, "ReleaseDC(S4)"); SetHook((void *)(**(DWORD **)lplpdds + 120), extSetOverlayPosition4, (void **)&pSetOverlayPosition4, "SetOverlayPosition(S4)"); SetHook((void *)(**(DWORD **)lplpdds + 124), extSetPalette4, (void **)&pSetPalette4, "SetPalette(S4)"); // added in interface version 3 SetHook((void *)(**(DWORD **)lplpdds + 156), extSetSurfaceDesc4, (void **)&pSetSurfaceDesc4, "SetSurfaceDesc(S4)"); break; case 7: SetHook((void *)(**(DWORD **)lplpdds), extQueryInterfaceS7, (void **)&pQueryInterfaceS7, "QueryInterface(S7)"); SetHook((void *)(**(DWORD **)lplpdds + 8), extReleaseS7, (void **)&pReleaseS7, "Release(S7)"); SetHook((void *)(**(DWORD **)lplpdds + 12), extAddAttachedSurface7, (void **)&pAddAttachedSurface7, "AddAttachedSurface(S7)"); SetHook((void *)(**(DWORD **)lplpdds + 16), extAddOverlayDirtyRect7, (void **)&pAddOverlayDirtyRect7, "AddOverlayDirtyRect(S7)"); SetHook((void *)(**(DWORD **)lplpdds + 28), extBltFast7, (void **)&pBltFast7, "BltFast(S7)"); SetHook((void *)(**(DWORD **)lplpdds + 20), extBlt7, (void **)&pBlt7, "Blt(S7)"); SetHook((void *)(**(DWORD **)lplpdds + 32), extDeleteAttachedSurface7, (void **)&pDeleteAttachedSurface7, "DeleteAttachedSurface(S7)"); SetHook((void *)(**(DWORD **)lplpdds + 36), extEnumAttachedSurfaces7, (void **)&pEnumAttachedSurfaces7, "EnumAttachedSurfaces(S7)"); SetHook((void *)(**(DWORD **)lplpdds + 40), extEnumOverlayZOrders7, (void **)&pEnumOverlayZOrders7, "EnumOverlayZOrders(S7)"); SetHook((void *)(**(DWORD **)lplpdds + 44), extFlip7, (void **)&pFlip7, "Flip(S7)"); SetHook((void *)(**(DWORD **)lplpdds + 48), extGetAttachedSurface7, (void **)&pGetAttachedSurface7, "GetAttachedSurface(S7)"); SetHook((void *)(**(DWORD **)lplpdds + 56), extGetCaps7S, (void **)&pGetCaps7S, "GetCaps(S7)"); SetHook((void *)(**(DWORD **)lplpdds + 64), extGetColorKey7, (void **)&pGetColorKey7, "GetColorKey(S7)"); SetHook((void *)(**(DWORD **)lplpdds + 68), extGetDC7, (void **)&pGetDC7, "GetDC(S7)"); SetHook((void *)(**(DWORD **)lplpdds + 76), extGetOverlayPosition7, (void **)&pGetOverlayPosition7, "GetOverlayPosition(S7)"); SetHook((void *)(**(DWORD **)lplpdds + 80), extGetPalette7, (void **)&pGetPalette7, "GetPalette(S7)"); SetHook((void *)(**(DWORD **)lplpdds + 84), extGetPixelFormat7, (void **)&pGetPixelFormat7, "GetPixelFormat(S7)"); SetHook((void *)(**(DWORD **)lplpdds + 88), extGetSurfaceDesc7, (void **)&pGetSurfaceDesc7, "GetSurfaceDesc(S7)"); SetHook((void *)(**(DWORD **)lplpdds + 100), bEmu ? extLock7 : extLockDir7, (void **)&pLock7, "Lock(S7)"); SetHook((void *)(**(DWORD **)lplpdds + 128), bEmu ? extUnlock7 : extUnlockDir7, (void **)&pUnlock7, "Unlock(S7)"); SetHook((void *)(**(DWORD **)lplpdds + 104), extReleaseDC7, (void **)&pReleaseDC7, "ReleaseDC(S7)"); SetHook((void *)(**(DWORD **)lplpdds + 120), extSetOverlayPosition7, (void **)&pSetOverlayPosition7, "SetOverlayPosition(S7)"); SetHook((void *)(**(DWORD **)lplpdds + 124), extSetPalette7, (void **)&pSetPalette7, "SetPalette(S7)"); // added in interface version 3 SetHook((void *)(**(DWORD **)lplpdds + 156), extSetSurfaceDesc7, (void **)&pSetSurfaceDesc7, "SetSurfaceDesc(S7)"); break; } if (!isPrim) return; switch(dxversion) { case 1: SetHook((void *)(**(DWORD **)lplpdds + 112), extSetClipper1, (void **)&pSetClipper1, "SetClipper(S1)"); SetHook((void *)(**(DWORD **)lplpdds + 116), extSetColorKey1, (void **)&pSetColorKey1, "SetColorKey(S1)"); break; case 2: SetHook((void *)(**(DWORD **)lplpdds + 112), extSetClipper2, (void **)&pSetClipper2, "SetClipper(S2)"); SetHook((void *)(**(DWORD **)lplpdds + 116), extSetColorKey2, (void **)&pSetColorKey2, "SetColorKey(S2)"); break; case 3: SetHook((void *)(**(DWORD **)lplpdds + 112), extSetClipper3, (void **)&pSetClipper3, "SetClipper(S3)"); SetHook((void *)(**(DWORD **)lplpdds + 116), extSetColorKey3, (void **)&pSetColorKey3, "SetColorKey(S3)"); break; case 4: SetHook((void *)(**(DWORD **)lplpdds + 112), extSetClipper4, (void **)&pSetClipper4, "SetClipper(S4)"); SetHook((void *)(**(DWORD **)lplpdds + 116), extSetColorKey4, (void **)&pSetColorKey4, "SetColorKey(S4)"); break; case 7: SetHook((void *)(**(DWORD **)lplpdds + 112), extSetClipper7, (void **)&pSetClipper7, "SetClipper(S7)"); SetHook((void *)(**(DWORD **)lplpdds + 116), extSetColorKey7, (void **)&pSetColorKey7, "SetColorKey(S7)"); break; } } void HookGammaControl(LPVOID *obp) { // IDirectDrawGammaControl::GetGammaRamp SetHook((void *)(**(DWORD **)obp + 12), extDDGetGammaRamp, (void **)&pDDGetGammaRamp, "GetGammaRamp(G)"); // IDirectDrawGammaControl::SetGammaRamp SetHook((void *)(**(DWORD **)obp + 16), extDDSetGammaRamp, (void **)&pDDSetGammaRamp, "SetGammaRamp(G)"); } /* ------------------------------------------------------------------------------ */ // CleanRect: // takes care of a corrupted RECT struct where some elements are not valid pointers. // In this case, the whole RECT * variable is set to NULL, a value that is interpreted // by directdraw functions as the whole surface area. /* ------------------------------------------------------------------------------ */ static void CleanRect(RECT **lprect, int line) { __try { // normally unharmful statements if(*lprect){ int i; i=(*lprect)->bottom; i=(*lprect)->top; i=(*lprect)->left; i=(*lprect)->right; } } __except(EXCEPTION_EXECUTE_HANDLER){ OutTraceE("Rectangle exception caught at %d: invalid RECT\n", __LINE__); if(IsAssertEnabled) MessageBox(0, "Rectangle exception", "CleanRect", MB_OK | MB_ICONEXCLAMATION); *lprect=NULL; } } static void MaskCapsD(LPDDCAPS c1, LPDDCAPS c2) { FILE *capfile; //char sBuf[80+1]; DWORD val; if(IsDebug){ char CapsBuf[3*sizeof(DDCAPS_DX7)+20]; int i; unsigned char *p; if(c1){ p=(unsigned char *)c1; for(i=0; idwSize) + WordOffset; switch(Operator){ case '&': *lpDWord &= val; break; case '|': *lpDWord |= val; break; case '-': *lpDWord &= (~val); break; case '=': default: *lpDWord = val; break; } } fclose(capfile); if(c1) { OutTrace("MaskCaps(D-HW): caps=%x(%s) caps2=%x(%s) fxcaps=%x(%s) fxalphacaps=%x(%s) keycaps=%x(%s)\n", c1->dwCaps, ExplainDDDCaps(c1->dwCaps), c1->dwCaps2, ExplainDDDCaps2(c1->dwCaps2), c1->dwFXCaps, ExplainDDFXCaps(c1->dwFXCaps), c1->dwFXAlphaCaps, ExplainDDFXALPHACaps(c1->dwFXAlphaCaps), c1->dwCKeyCaps, ExplainDDCKeyCaps(c1->dwCKeyCaps)); } if(c2) { OutTrace("MaskCaps(D-SW): caps=%x(%s) caps2=%x(%s) fxcaps=%x(%s) fxalphacaps=%x(%s) keycaps=%x(%s)\n", c2->dwCaps, ExplainDDDCaps(c2->dwCaps), c2->dwCaps2, ExplainDDDCaps2(c2->dwCaps2), c2->dwFXCaps, ExplainDDFXCaps(c2->dwFXCaps), c2->dwFXAlphaCaps, ExplainDDFXALPHACaps(c2->dwFXAlphaCaps), c2->dwCKeyCaps, ExplainDDCKeyCaps(c2->dwCKeyCaps)); } } /* ------------------------------------------------------------------------------ */ // directdraw method hooks /* ------------------------------------------------------------------------------ */ static void HandleCapsD(char *sLabel, LPDDCAPS c) { const DWORD dwMaxMem = 0x70000000; const DWORD dwHugeMem = 0xFFFFFFFF; OutTraceDDRAW( "GetCaps(%s): caps=%x(%s) caps2=%x(%s) palcaps=%x(%s) " "fxcaps=%x(%s) fxalphacaps=%x(%s) keycaps=%x(%s)\n", sLabel, c->dwCaps, ExplainDDDCaps(c->dwCaps), c->dwCaps2, ExplainDDDCaps2(c->dwCaps2), c->dwPalCaps, ExplainDDPalCaps(c->dwPalCaps), c->dwFXCaps, ExplainDDFXCaps(c->dwFXCaps), c->dwFXAlphaCaps, ExplainDDFXALPHACaps(c->dwFXAlphaCaps), c->dwCKeyCaps, ExplainDDCKeyCaps(c->dwCKeyCaps)); OutTraceDDRAW("GetCaps(%s): VidMemTotal=%x VidMemFree=%x ZBufferBitDepths=%x(%s)\n", sLabel, c->dwVidMemTotal, c->dwVidMemFree, c->dwZBufferBitDepths, ExplainZBufferBitDepths(c->dwZBufferBitDepths)); OutTraceDDRAW("GetCaps(%s): MaxVisibleOverlays=%x CurrVisibleOverlays=%x\n", sLabel, c->dwMaxVisibleOverlays, c->dwCurrVisibleOverlays); if(IsTraceHex) HexTrace((unsigned char *)c, c->dwSize); if(dxw.bHintActive){ if(c->dwVidMemTotal > dwMaxMem) ShowHint(HINT_LIMITMEM); if(c->dwVidMemFree > dwMaxMem) ShowHint(HINT_LIMITMEM); } if(dxw.dwFlags2 & LIMITRESOURCES){ // check for memory value overflow if(c->dwVidMemTotal > dwMaxMem) c->dwVidMemTotal = dwMaxMem; if(c->dwVidMemFree > dwMaxMem) c->dwVidMemFree = dwMaxMem; } if(dxw.dwFlags5 & STRESSRESOURCES){ c->dwVidMemTotal = dwHugeMem; c->dwVidMemFree = dwHugeMem; } if(dxw.dwFlags6 & SETZBUFFERBITDEPTHS){ // From MSDN https://msdn.microsoft.com/en-us/library/windows/desktop/gg426101%28v=vs.85%29.aspx : // dwZBufferBitDepths // DDBD_8, DDBD_16, DDBD_24, or DDBD_32. (Indicate 8, 16, 24, or 32 bits per pixel.) // This member is obsolete for DirectX 6.0 and later. // Use the IDirect3D7::EnumZBufferFormats to retrieve information about supported depth buffer formats. // v2.03.35: needed to bypass the "Banzai Bug" initial controls if (c->dwZBufferBitDepths == 0) { c->dwZBufferBitDepths = (DDBD_8|DDBD_16|DDBD_24|DDBD_32); OutTraceDDRAW("GetCaps(%s): FIXED ZBufferBitDepths=%x(%s)\n", sLabel, c->dwZBufferBitDepths, ExplainZBufferBitDepths(c->dwZBufferBitDepths)); } } if((dxw.dwFlags5 & STRESSRESOURCES) || (dxw.dwFlags2 & LIMITRESOURCES)) OutTraceDDRAW("GetCaps(%s): FIXED VidMemTotal=%x VidMemFree=%x\n", sLabel, c->dwVidMemTotal, c->dwVidMemFree); } static HRESULT WINAPI extGetCapsD(int dxversion, GetCapsD_Type pGetCapsD, LPDIRECTDRAW lpdd, LPDDCAPS c1, LPDDCAPS c2) { HRESULT res; OutTraceDDRAW("GetCaps(D%d): lpdd=%x %s %s\n", dxversion, lpdd, c1?"c1":"NULL", c2?"c2":"NULL"); res=(*pGetCapsD)(lpdd, c1, c2); if(res) { OutTraceE("GetCaps(D): ERROR res=%x(%s)\n", res, ExplainDDError(res)); return res; } if (c1) HandleCapsD("D-HW", c1); if (c2) HandleCapsD("D-SW", c2); if((dxw.dwFlags3 & FORCESHEL) && c1) { DDCAPS_DX7 swcaps; // DDCAPS_DX7 because it is the bigger in size int size; size=c1->dwSize; if (!c2) { memset(&swcaps, 0, sizeof(DDCAPS_DX7)); swcaps.dwSize=size; c2=&swcaps; res=(*pGetCapsD)(lpdd, NULL, c2); } DWORD dwVidMemTotal=c1->dwVidMemTotal; DWORD dwVidMemFree=c1->dwVidMemFree; memcpy((void *)c1, (void *)c2, size); if(c1->dwVidMemTotal == 0) c1->dwVidMemTotal=dwVidMemTotal; if(c1->dwVidMemFree == 0) c1->dwVidMemFree =dwVidMemFree; if(c1->dwVidMemTotal == 0) c1->dwVidMemTotal=0x20000000; // 500 MB if(c1->dwVidMemFree == 0) c1->dwVidMemFree =0x20000000; // 500 MB if (c1) HandleCapsD("D-HW(fixed)", c1); if (c2) HandleCapsD("D-SW(fixed)", c2); } if((dxw.dwFlags8 & NOHALDEVICE) && c1) { OutTraceDW("GetCaps(D): NOHALDEVICE\n"); c1->ddsCaps.dwCaps = DDCAPS_NOHARDWARE; c1->ddsCaps.dwCaps2 = DDCAPS2_CANRENDERWINDOWED; c1->dwPalCaps = 0; c1->dwFXCaps = 0; c1->dwFXAlphaCaps = 0; c1->dwCKeyCaps = 0; c1->dwVidMemTotal = c1->dwVidMemFree = 0; c1->dwZBufferBitDepths = 0; c1->dwMaxVisibleOverlays = c1->dwCurrVisibleOverlays = 0; HandleCapsD("D-HW(NoHAL)", c1); } if((dxw.dwFlags3 & MINIMALCAPS)) SetMinimalCaps(dxversion, c1, c2); if(dxw.dwFlags3 & CAPMASK) MaskCapsD(c1, c2); #define OVERLAYLAYERCAPS \ (DDCAPS_OVERLAY|DDCAPS_OVERLAYCANTCLIP|\ DDCAPS_OVERLAYFOURCC|DDCAPS_OVERLAYSTRETCH) #define OVERLAYKEYCAPS \ (DDCKEYCAPS_DESTOVERLAY|DDCKEYCAPS_DESTOVERLAYYUV|\ DDCKEYCAPS_SRCOVERLAY|DDCKEYCAPS_SRCOVERLAYYUV|\ DDCKEYCAPS_SRCOVERLAYCLRSPACE|DDCKEYCAPS_SRCOVERLAYCLRSPACEYUV) if(dxw.dwFlags7 & SUPPRESSOVERLAY){ if(c1){ c1->ddsCaps.dwCaps &= ~OVERLAYLAYERCAPS; c1->dwCKeyCaps &= ~OVERLAYKEYCAPS; c1->dwMaxVisibleOverlays = c1->dwCurrVisibleOverlays = 0; } if(c2){ c2->ddsCaps.dwCaps &= ~OVERLAYLAYERCAPS; c2->dwCKeyCaps &= ~OVERLAYKEYCAPS; c2->dwMaxVisibleOverlays = c2->dwCurrVisibleOverlays = 0; } } return res; } HRESULT WINAPI extGetCaps1D(LPDIRECTDRAW lpdd, LPDDCAPS c1, LPDDCAPS c2) { return extGetCapsD(1, pGetCaps1D, lpdd, c1, c2); } HRESULT WINAPI extGetCaps2D(LPDIRECTDRAW lpdd, LPDDCAPS c1, LPDDCAPS c2) { return extGetCapsD(2, pGetCaps2D, lpdd, c1, c2); } HRESULT WINAPI extGetCaps3D(LPDIRECTDRAW lpdd, LPDDCAPS c1, LPDDCAPS c2) { return extGetCapsD(3, pGetCaps3D, lpdd, c1, c2); } HRESULT WINAPI extGetCaps4D(LPDIRECTDRAW lpdd, LPDDCAPS c1, LPDDCAPS c2) { return extGetCapsD(4, pGetCaps4D, lpdd, c1, c2); } HRESULT WINAPI extGetCaps7D(LPDIRECTDRAW lpdd, LPDDCAPS_DX7 c1, LPDDCAPS_DX7 c2) { return extGetCapsD(7, pGetCaps7D, lpdd, (LPDDCAPS)c1, (LPDDCAPS)c2); } HRESULT WINAPI extDirectDrawCreate(GUID FAR *lpguid, LPDIRECTDRAW FAR *lplpdd, IUnknown FAR *pu) { HRESULT res; GUID FAR *lpPrivGuid = lpguid; OutTraceDDRAW("DirectDrawCreate: guid=%x(%s)\n", lpguid, ExplainGUID(lpguid)); if(!pDirectDrawCreate){ // not hooked yet.... HINSTANCE hinst; hinst = (*pLoadLibraryA)("ddraw.dll"); if(!hinst){ OutTraceE("LoadLibrary ddraw.dll ERROR err=%d at %d\n", GetLastError(), __LINE__); } pDirectDrawCreate = (DirectDrawCreate_Type)GetProcAddress(hinst, "DirectDrawCreate"); if(pDirectDrawCreate) HookAPI(hinst, "ddraw.dll", pDirectDrawCreate, "DirectDrawCreate", extDirectDrawCreate); // v2.02.52 else{ char sMsg[81]; sprintf_s(sMsg, 80, "DirectDrawCreate hook failed: error=%d\n", GetLastError()); OutTraceDW(sMsg); if(IsAssertEnabled) MessageBox(0, sMsg, "Hook", MB_OK | MB_ICONEXCLAMATION); return DDERR_GENERIC; // is there a better one? } } if((dxw.dwFlags3 & FORCESHEL) && (lpguid==NULL)) lpPrivGuid=(GUID FAR *)DDCREATE_EMULATIONONLY; res = (*pDirectDrawCreate)(lpPrivGuid, lplpdd, pu); if(res) { OutTraceE("DirectDrawCreate: ERROR res=%x(%s)\n", res, ExplainDDError(res)); return res; } if(dxw.dwFlags3 & COLORFIX) (*((DDRAWI_DIRECTDRAW_INT **)lplpdd))->lpLcl->dwAppHackFlags |= 0x800; dxw.dwDDVersion=1; char *mode; switch ((DWORD)lpPrivGuid){ case 0: mode="NULL"; break; case DDCREATE_HARDWAREONLY: mode="DDCREATE_HARDWAREONLY"; break; case DDCREATE_EMULATIONONLY: mode="DDCREATE_EMULATIONONLY"; break; default: switch (*(DWORD *)lpguid){ case 0x6C14DB80: dxw.dwDDVersion=1; mode="IID_IDirectDraw"; break; case 0xB3A6F3E0: dxw.dwDDVersion=2; mode="IID_IDirectDraw2"; break; case 0x618f8ad4: dxw.dwDDVersion=3; mode="IID_IDirectDraw3"; break; case 0x9c59509a: dxw.dwDDVersion=4; mode="IID_IDirectDraw4"; break; case 0x15e65ec0: dxw.dwDDVersion=7; mode="IID_IDirectDraw7"; break; default: mode="unknown"; break; } break; } OutTraceDDRAW("DirectDrawCreate: lpdd=%x guid=%s DDVersion=%d\n", *lplpdd, mode, dxw.dwDDVersion); HookDDSession(lplpdd, dxw.dwDDVersion); // beware: old ddraw games seem to reuse a closed ddraw handle. The theory is that maybe whenever // you created a ddraw session, you got more than one reference count, so that releasing it once // did not destroy the object.... but why? when (I mean, in which situations? Maybe not always...) // and for which releases? The fix here assumes that this fact is true and holds always for ddraw 1 // sessions. // update: this is no good for "Jet Moto" that created a ddraw session and expects to Release it // with a refcount zero. //if(dxw.dwDDVersion==1) (*lplpdd)->AddRef(); // seems to fix problems in "Warhammer 40K Rites Of War" if(IsDebug){ DDCAPS DriverCaps, EmulCaps; memset(&DriverCaps, 0, sizeof(DriverCaps)); DriverCaps.dwSize=sizeof(DriverCaps); memset(&EmulCaps, 0, sizeof(EmulCaps)); EmulCaps.dwSize=sizeof(EmulCaps); (LPDIRECTDRAW)(*lplpdd)->GetCaps(&DriverCaps, &EmulCaps); //OutTrace("DirectDrawCreate: drivercaps=%x(%s) emulcaps=%x(%s)\n", DriverCaps.ddsCaps, "???", EmulCaps.ddsCaps, "???"); } if(lpPrimaryDD==NULL) lpPrimaryDD=*lplpdd; // do not override the value set when creating the primary surface! bFlippedDC = FALSE; // v02.03.30 #ifdef AUTOSETCOOPERATIVELEVEL OutTrace("Setting cooperative level version=%d hwnd=%x\n", dxw.dwDDVersion, dxw.GethWnd()); switch(dxw.dwDDVersion){ case 1: res=(*pSetCooperativeLevel1)(*lplpdd, dxw.GethWnd(), DDSCL_NORMAL); break; case 2: res=(*pSetCooperativeLevel2)(*lplpdd, dxw.GethWnd(), DDSCL_NORMAL); break; case 4: res=(*pSetCooperativeLevel4)(*lplpdd, dxw.GethWnd(), DDSCL_NORMAL); break; case 7: res=(*pSetCooperativeLevel7)(*lplpdd, dxw.GethWnd(), DDSCL_NORMAL); break; } if(res) OutTraceE("SetCooperativeLevel ERROR: err=%x(%s)\n", res, ExplainDDError(res)); #endif return DD_OK; } HRESULT WINAPI extDirectDrawCreateEx(GUID FAR *lpguid, LPDIRECTDRAW FAR *lplpdd, REFIID iid, IUnknown FAR *pu) { HRESULT res; GUID FAR *lpPrivGuid = lpguid; OutTraceDDRAW("DirectDrawCreateEx: guid=%x(%s) refiid=%x\n", lpguid, ExplainGUID(lpguid), iid); // v2.1.70: auto-hooking (just in case...) if(!pDirectDrawCreateEx){ // not hooked yet.... HINSTANCE hinst; hinst = (*pLoadLibraryA)("ddraw.dll"); if(!hinst){ OutTraceE("LoadLibrary ddraw.dll ERROR err=%d at %d\n", GetLastError(), __LINE__); } pDirectDrawCreateEx = (DirectDrawCreateEx_Type)GetProcAddress(hinst, "DirectDrawCreateEx"); if(pDirectDrawCreateEx) HookAPI(hinst, "ddraw.dll", pDirectDrawCreateEx, "DirectDrawCreateEx", extDirectDrawCreateEx); // v2.02.52 else{ char sMsg[81]; sprintf_s(sMsg, 80, "DirectDrawCreateEx hook failed: error=%d\n", GetLastError()); OutTraceDW(sMsg); if(IsAssertEnabled) MessageBox(0, sMsg, "Hook", MB_OK | MB_ICONEXCLAMATION); return DDERR_GENERIC; // is there a better one? } } if((dxw.dwFlags3 & FORCESHEL) && (lpguid==NULL)) lpPrivGuid=(GUID FAR *)DDCREATE_EMULATIONONLY; res = (*pDirectDrawCreateEx)(lpPrivGuid, lplpdd, iid, pu); if (res){ OutTraceDW("DirectDrawCreateEx: res=%x(%s)\n",res, ExplainDDError(res)); return res; } if(dxw.dwFlags3 & COLORFIX) (*((DDRAWI_DIRECTDRAW_INT **)lplpdd))->lpLcl->dwAppHackFlags |= 0x800; dxw.dwDDVersion=7; char *mode; switch ((DWORD)lpPrivGuid){ case 0: mode="NULL"; break; case DDCREATE_HARDWAREONLY: mode="DDCREATE_HARDWAREONLY"; break; case DDCREATE_EMULATIONONLY: mode="DDCREATE_EMULATIONONLY"; break; default: switch (*(DWORD *)lpguid){ case 0x6C14DB80: dxw.dwDDVersion=1; mode="IID_IDirectDraw"; break; case 0xB3A6F3E0: dxw.dwDDVersion=2; mode="IID_IDirectDraw2"; break; case 0x618f8ad4: dxw.dwDDVersion=3; mode="IID_IDirectDraw3"; break; case 0x9c59509a: dxw.dwDDVersion=4; mode="IID_IDirectDraw4"; break; case 0x15e65ec0: dxw.dwDDVersion=7; mode="IID_IDirectDraw7"; break; default: mode="unknown"; break; } break; } OutTraceDDRAW("DirectDrawCreateEx: lpdd=%x guid=%s DDVersion=%d\n", *lplpdd, mode, dxw.dwDDVersion); HookDDSession(lplpdd, dxw.dwDDVersion); if(IsDebug){ DDCAPS DriverCaps, EmulCaps; memset(&DriverCaps, 0, sizeof(DriverCaps)); DriverCaps.dwSize=sizeof(DriverCaps); memset(&EmulCaps, 0, sizeof(EmulCaps)); EmulCaps.dwSize=sizeof(EmulCaps); (LPDIRECTDRAW)(*lplpdd)->GetCaps(&DriverCaps, &EmulCaps); //OutTrace("DirectDrawCreate: drivercaps=%x(%s) emulcaps=%x(%s)\n", DriverCaps.ddsCaps, "???", EmulCaps.ddsCaps, "???"); } if(lpPrimaryDD==NULL) lpPrimaryDD=*lplpdd; // do not override the value set when creating the primary surface! bFlippedDC = FALSE; // v02.03.30: fix for Powerslide return DD_OK; } static HRESULT WINAPI extInitialize(int dxversion, Initialize_Type pInitialize, LPDIRECTDRAW lpdd, GUID FAR *lpguid) { HRESULT res; GUID FAR *lpPrivGuid = lpguid; OutTraceDDRAW("Initialize(%d): lpdd=%x guid=%x(%s)\n", dxversion, lpdd, lpguid, ExplainGUID(lpguid)); if((dxw.dwFlags3 & FORCESHEL) && (lpguid==NULL)) lpPrivGuid=(GUID FAR *)DDCREATE_EMULATIONONLY; res=(*pInitialize)(lpdd, lpPrivGuid); if(res == DDERR_ALREADYINITIALIZED) { OutTrace("Initialize: SKIP DDERR_ALREADYINITIALIZED error\n"); res=DD_OK; // v2.03.18: this error could be caused by the CoCreateInstance implementation } if(dxw.dwFlags3 & COLORFIX) (((DDRAWI_DIRECTDRAW_INT *)lpdd))->lpLcl->dwAppHackFlags |= 0x800; if(res) OutTraceE("Initialize ERROR: res=%x(%s)\n", res, ExplainDDError(res)); return res; } HRESULT WINAPI extInitialize1(LPDIRECTDRAW lpdd, GUID FAR *lpguid) { return extInitialize(1, pInitialize1, lpdd, lpguid); } HRESULT WINAPI extInitialize2(LPDIRECTDRAW lpdd, GUID FAR *lpguid) { return extInitialize(2, pInitialize2, lpdd, lpguid); } HRESULT WINAPI extInitialize3(LPDIRECTDRAW lpdd, GUID FAR *lpguid) { return extInitialize(3, pInitialize3, lpdd, lpguid); } HRESULT WINAPI extInitialize4(LPDIRECTDRAW lpdd, GUID FAR *lpguid) { return extInitialize(4, pInitialize4, lpdd, lpguid); } HRESULT WINAPI extInitialize7(LPDIRECTDRAW lpdd, GUID FAR *lpguid) { return extInitialize(7, pInitialize7, lpdd, lpguid); } static HRESULT WINAPI extRestoreDisplayMode(int dxversion, RestoreDisplayMode_Type pRestoreDisplayMode, LPDIRECTDRAW lpdd) { OutTraceDW("RestoreDisplayMode(%d): lpdd=%x\n", dxversion, lpdd); if(dxw.IsEmulated){ OutTraceDW("RestoreDisplayMode: BYPASS\n"); return DD_OK; } return (*pRestoreDisplayMode)(lpdd); } HRESULT WINAPI extRestoreDisplayMode1(LPDIRECTDRAW lpdd) { return extRestoreDisplayMode(1, pRestoreDisplayMode1, lpdd); } HRESULT WINAPI extRestoreDisplayMode2(LPDIRECTDRAW lpdd) { return extRestoreDisplayMode(2, pRestoreDisplayMode2, lpdd); } HRESULT WINAPI extRestoreDisplayMode3(LPDIRECTDRAW lpdd) { return extRestoreDisplayMode(3, pRestoreDisplayMode3, lpdd); } HRESULT WINAPI extRestoreDisplayMode4(LPDIRECTDRAW lpdd) { return extRestoreDisplayMode(4, pRestoreDisplayMode4, lpdd); } HRESULT WINAPI extRestoreDisplayMode7(LPDIRECTDRAW lpdd) { return extRestoreDisplayMode(7, pRestoreDisplayMode7, lpdd); } HRESULT WINAPI extGetScanLine(int dxversion, GetScanLine_Type pGetScanLine, LPDIRECTDRAW lpdd, LPDWORD lpdwScanLine) { HRESULT res; res = pGetScanLine(lpdd, lpdwScanLine); OutTraceB("GetScanLine(%d): lpdd=%x res=%x line=%d\n", dxversion, lpdd, res, *lpdwScanLine); if(!res && dxw.Windowize && dxw.dwRealScreenHeight){ *lpdwScanLine = (*lpdwScanLine * dxw.GetScreenHeight()) / dxw.dwRealScreenHeight; OutTraceB("GetScanLine(%d): FIXED line=%d\n", *lpdwScanLine); } return res; } HRESULT WINAPI extGetScanLine1(LPDIRECTDRAW lpdd, LPDWORD lpdwScanLine) { return extGetScanLine(1, pGetScanLine1, lpdd, lpdwScanLine); } HRESULT WINAPI extGetScanLine2(LPDIRECTDRAW lpdd, LPDWORD lpdwScanLine) { return extGetScanLine(2, pGetScanLine2, lpdd, lpdwScanLine); } HRESULT WINAPI extGetScanLine3(LPDIRECTDRAW lpdd, LPDWORD lpdwScanLine) { return extGetScanLine(3, pGetScanLine3, lpdd, lpdwScanLine); } HRESULT WINAPI extGetScanLine4(LPDIRECTDRAW lpdd, LPDWORD lpdwScanLine) { return extGetScanLine(4, pGetScanLine4, lpdd, lpdwScanLine); } HRESULT WINAPI extGetScanLine7(LPDIRECTDRAW lpdd, LPDWORD lpdwScanLine) { return extGetScanLine(7, pGetScanLine7, lpdd, lpdwScanLine); } HRESULT WINAPI extQueryInterfaceD1(void *lpdd, REFIID riid, LPVOID *obp) { return extQueryInterfaceDX(1, pQueryInterfaceD1, lpdd, riid, obp); } HRESULT WINAPI extQueryInterfaceD2(void *lpdd, REFIID riid, LPVOID *obp) { return extQueryInterfaceDX(2, pQueryInterfaceD2, lpdd, riid, obp); } HRESULT WINAPI extQueryInterfaceD3(void *lpdd, REFIID riid, LPVOID *obp) { return extQueryInterfaceDX(3, pQueryInterfaceD3, lpdd, riid, obp); } HRESULT WINAPI extQueryInterfaceD4(void *lpdd, REFIID riid, LPVOID *obp) { return extQueryInterfaceDX(4, pQueryInterfaceD4, lpdd, riid, obp); } HRESULT WINAPI extQueryInterfaceD7(void *lpdd, REFIID riid, LPVOID *obp) { return extQueryInterfaceDX(7, pQueryInterfaceD7, lpdd, riid, obp); } HRESULT WINAPI extQueryInterfaceS1(void *lpdds, REFIID riid, LPVOID *obp) { return extQueryInterfaceDX(1, pQueryInterfaceS1, lpdds, riid, obp); } HRESULT WINAPI extQueryInterfaceS2(void *lpdds, REFIID riid, LPVOID *obp) { return extQueryInterfaceDX(2, pQueryInterfaceS2, lpdds, riid, obp); } HRESULT WINAPI extQueryInterfaceS3(void *lpdds, REFIID riid, LPVOID *obp) { return extQueryInterfaceDX(3, pQueryInterfaceS3, lpdds, riid, obp); } HRESULT WINAPI extQueryInterfaceS4(void *lpdds, REFIID riid, LPVOID *obp) { return extQueryInterfaceDX(4, pQueryInterfaceS4, lpdds, riid, obp); } HRESULT WINAPI extQueryInterfaceS7(void *lpdds, REFIID riid, LPVOID *obp) { return extQueryInterfaceDX(7, pQueryInterfaceS7, lpdds, riid, obp); } HRESULT WINAPI extSetDisplayMode(int dxversion, LPDIRECTDRAW lpdd, DWORD dwwidth, DWORD dwheight, DWORD dwbpp, DWORD dwrefreshrate, DWORD dwflags) { DDSURFACEDESC2 ddsd; HRESULT res = 0; if(IsTraceDDRAW){ char sInfo[81]; strcpy(sInfo, ""); if (dxversion>=4) sprintf(sInfo, " dwRefresh=%i dwFlags=%x", dwrefreshrate, dwflags); OutTrace("SetDisplayMode(%d): dwWidth=%i dwHeight=%i dwBPP=%i%s\n", dxversion, dwwidth, dwheight, dwbpp, sInfo); } // binkplayer fix if((int)dwwidth < 0) dwwidth = dxw.GetScreenWidth(); if((int)dwheight < 0) dwheight = dxw.GetScreenHeight(); // v2.03.90: add LOCKCOLORDEPTH, easiest way to manage "Ahlgrens bisplet"! if(dxw.dwFlags7 & LOCKCOLORDEPTH){ OutTraceDW("SetDisplayMode: LOCKCOLORDEPTH bpp=%d->%d\n", dwbpp, dxw.ActualPixelFormat.dwRGBBitCount); dwbpp = dxw.ActualPixelFormat.dwRGBBitCount; } dxw.SetScreenSize(dwwidth, dwheight); GetHookInfo()->Height=(short)dxw.GetScreenHeight(); GetHookInfo()->Width=(short)dxw.GetScreenWidth(); GetHookInfo()->ColorDepth=(short)dwbpp; if(dxw.Windowize) AdjustWindowFrame(dxw.GethWnd(), dwwidth, dwheight); if(dxw.dwFlags1 & EMULATESURFACE){ // in EMULATESURFACE mode, let SetPixFmt decide upon the PixelFormat dxw.VirtualPixelFormat.dwRGBBitCount = dwbpp; memset(&ddsd, 0, sizeof(ddsd)); ddsd.dwSize=sizeof(ddsd); SetPixFmt(&ddsd); SetBltTransformations(dxversion); if(dxw.Windowize) { OutTraceDW("SetDisplayMode: mode=EMULATE %s ret=OK\n", DumpPixelFormat(&ddsd)); SetVSyncDelays(dxversion, lpdd); return DD_OK; } } else{ OutTraceDW("SetDisplayMode: mode=STANDARD BPP=%d\n", dwbpp); dxw.VirtualPixelFormat.dwRGBBitCount = dwbpp; dxw.ActualPixelFormat.dwRGBBitCount = dwbpp; } ZeroMemory(&ddsd, sizeof(ddsd)); ddsd.dwFlags = DDSD_WIDTH | DDSD_HEIGHT | DDSD_PIXELFORMAT | DDSD_REFRESHRATE; ddsd.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT); ddsd.ddpfPixelFormat.dwFlags = DDPF_RGB; switch(dxversion){ default: case 1: ddsd.dwSize=sizeof(LPDDSURFACEDESC); res=(*pGetDisplayMode1)(lpdd, (LPDDSURFACEDESC)&ddsd); break; case 2: ddsd.dwSize=sizeof(LPDDSURFACEDESC); res=(*pGetDisplayMode2)(lpdd, (LPDDSURFACEDESC)&ddsd); break; case 3: ddsd.dwSize=sizeof(LPDDSURFACEDESC); res=(*pGetDisplayMode3)(lpdd, (LPDDSURFACEDESC)&ddsd); break; case 4: ddsd.dwSize=sizeof(LPDDSURFACEDESC2); res=(*pGetDisplayMode4)(lpdd, &ddsd); break; case 7: ddsd.dwSize=sizeof(LPDDSURFACEDESC2); res=(*pGetDisplayMode7)(lpdd, &ddsd); break; } if(res){ OutTraceE("SetDisplayMode: GetDisplayMode err=%x(%s)\n", res, ExplainDDError(res)); // fix for Win10 platform returning DDERR_INVALIDPARAMS RECT desktop; ddsd.ddpfPixelFormat.dwRGBBitCount = 32; (*pGetClientRect)((*pGetDesktopWindow)(), &desktop); ddsd.dwWidth = desktop.right; ddsd.dwHeight = desktop.bottom; } OutTraceB("SetDisplayMode: detected screen size=(%dx%d)\n", ddsd.dwWidth, ddsd.dwHeight); if(dxw.Windowize){ if(!IsChangeDisplaySettingsHotPatched){ dwwidth = ddsd.dwWidth; dwheight = ddsd.dwHeight; } OutTraceDW("SetDisplayMode: fixing colordepth current=%d required=%d size=(%dx%d)\n", ddsd.ddpfPixelFormat.dwRGBBitCount, dwbpp, dwwidth, dwheight); } if(dxw.dwFlags1 & EMULATESURFACE){ dwbpp = ddsd.ddpfPixelFormat.dwRGBBitCount; } switch(dxversion){ default: case 1: res=(*pSetDisplayMode1)(lpdd, dwwidth, dwheight, dwbpp); break; case 2: res=(*pSetDisplayMode2)(lpdd, dwwidth, dwheight, dwbpp, ddsd.dwRefreshRate, 0); break; case 3: res=(*pSetDisplayMode3)(lpdd, dwwidth, dwheight, dwbpp, ddsd.dwRefreshRate, 0); break; case 4: res=(*pSetDisplayMode4)(lpdd, dwwidth, dwheight, dwbpp, ddsd.dwRefreshRate, 0); break; case 7: res=(*pSetDisplayMode7)(lpdd, dwwidth, dwheight, dwbpp, ddsd.dwRefreshRate, 0); break; } if(res) OutTraceE("SetDisplayMode: error=%x(%s)\n", res, ExplainDDError(res)); SetVSyncDelays(dxversion, lpdd); // set a default palette ??? if(dxw.VirtualPixelFormat.dwRGBBitCount == 8) mySetPalette(0, 256, DefaultSystemPalette); if(dxw.bAutoScale) dxw.AutoScale(); return DD_OK; } HRESULT WINAPI extSetDisplayMode1(LPDIRECTDRAW lpdd, DWORD dwwidth, DWORD dwheight, DWORD dwbpp) { return extSetDisplayMode(1, lpdd, dwwidth, dwheight, dwbpp, 0, 0); } HRESULT WINAPI extSetDisplayMode2(LPDIRECTDRAW lpdd, DWORD dwwidth, DWORD dwheight, DWORD dwbpp, DWORD dwrefreshrate, DWORD dwflags) { return extSetDisplayMode(2, lpdd, dwwidth, dwheight, dwbpp, dwrefreshrate, dwflags); } HRESULT WINAPI extSetDisplayMode3(LPDIRECTDRAW lpdd, DWORD dwwidth, DWORD dwheight, DWORD dwbpp, DWORD dwrefreshrate, DWORD dwflags) { return extSetDisplayMode(3, lpdd, dwwidth, dwheight, dwbpp, dwrefreshrate, dwflags); } HRESULT WINAPI extSetDisplayMode4(LPDIRECTDRAW lpdd, DWORD dwwidth, DWORD dwheight, DWORD dwbpp, DWORD dwrefreshrate, DWORD dwflags) { return extSetDisplayMode(4, lpdd, dwwidth, dwheight, dwbpp, dwrefreshrate, dwflags); } HRESULT WINAPI extSetDisplayMode7(LPDIRECTDRAW lpdd, DWORD dwwidth, DWORD dwheight, DWORD dwbpp, DWORD dwrefreshrate, DWORD dwflags) { return extSetDisplayMode(7, lpdd, dwwidth, dwheight, dwbpp, dwrefreshrate, dwflags);} HRESULT WINAPI extGetDisplayMode(int dxversion, GetDisplayMode_Type pGetDisplayMode, LPDIRECTDRAW lpdd, LPDDSURFACEDESC lpddsd) { OutTraceDDRAW("GetDisplayMode(D%d): lpdd=%x lpddsd=%x\n", dxversion, lpdd, lpddsd); (*pGetDisplayMode)(lpdd, lpddsd); if(dxw.dwFlags1 & EMULATESURFACE) { GetPixFmt((LPDDSURFACEDESC2)lpddsd); if(!lpddsd->ddpfPixelFormat.dwFlags) SetPixFmt((LPDDSURFACEDESC2)lpddsd); } dxw.dwRealScreenWidth = lpddsd->dwWidth; dxw.dwRealScreenHeight = lpddsd->dwHeight; if(dxw.Windowize){ lpddsd->dwWidth = dxw.GetScreenWidth(); lpddsd->dwHeight = dxw.GetScreenHeight(); } // v2.1.96: fake screen color depth // v2.03.96: moved out from dxw.Windowize condition if((dxw.dwFlags2 & (INIT8BPP|INIT16BPP)) || (dxw.dwFlags7 & (INIT24BPP|INIT32BPP))){ // v2.02.32 fix if(dxw.dwFlags2 & INIT8BPP) FixPixelFormat(8, &lpddsd->ddpfPixelFormat); if(dxw.dwFlags2 & INIT16BPP) FixPixelFormat(16, &lpddsd->ddpfPixelFormat); if(dxw.dwFlags7 & INIT24BPP) FixPixelFormat(24, &lpddsd->ddpfPixelFormat); if(dxw.dwFlags7 & INIT32BPP) FixPixelFormat(32, &lpddsd->ddpfPixelFormat); OutTraceDW("GetDisplayMode: fix RGBBitCount=%d\n", lpddsd->ddpfPixelFormat.dwRGBBitCount); } //OutTraceDW("GetDisplayMode: returning WxH=(%dx%d) PixelFormat Flags=%x(%s) RGBBitCount=%d RGBAmask=(%x,%x,%x,%x) Caps=%x(%s)\n", // lpddsd->dwWidth, lpddsd->dwHeight, // lpddsd->ddpfPixelFormat.dwFlags, ExplainPixelFormatFlags(lpddsd->ddpfPixelFormat.dwFlags), // lpddsd->ddpfPixelFormat.dwRGBBitCount, // lpddsd->ddpfPixelFormat.dwRBitMask, lpddsd->ddpfPixelFormat.dwGBitMask, lpddsd->ddpfPixelFormat.dwBBitMask, // lpddsd->ddpfPixelFormat.dwRGBAlphaBitMask, // lpddsd->ddsCaps.dwCaps, ExplainDDSCaps(lpddsd->ddsCaps.dwCaps)); OutTraceDDRAW("GetDisplayMode: returning size=(%dx%d) %s\n", lpddsd->dwWidth, lpddsd->dwHeight, DumpPixelFormat((LPDDSURFACEDESC2)lpddsd)); return DD_OK; } HRESULT WINAPI extGetDisplayMode1(LPDIRECTDRAW lpdd, LPDDSURFACEDESC lpddsd) { return extGetDisplayMode(1, pGetDisplayMode1, lpdd, lpddsd); } HRESULT WINAPI extGetDisplayMode2(LPDIRECTDRAW lpdd, LPDDSURFACEDESC lpddsd) { return extGetDisplayMode(2, pGetDisplayMode2, lpdd, lpddsd); } HRESULT WINAPI extGetDisplayMode3(LPDIRECTDRAW lpdd, LPDDSURFACEDESC lpddsd) { return extGetDisplayMode(3, pGetDisplayMode3, lpdd, lpddsd); } HRESULT WINAPI extGetDisplayMode4(LPDIRECTDRAW lpdd, LPDDSURFACEDESC2 lpddsd) { return extGetDisplayMode(4, (GetDisplayMode_Type)pGetDisplayMode4, lpdd, (LPDDSURFACEDESC)lpddsd); } HRESULT WINAPI extGetDisplayMode7(LPDIRECTDRAW lpdd, LPDDSURFACEDESC2 lpddsd) { return extGetDisplayMode(7, (GetDisplayMode_Type)pGetDisplayMode7, lpdd, (LPDDSURFACEDESC)lpddsd); } static HWND CreateVirtualDesktop(LPRECT TargetPos) { HWND hDesktopWindow; HINSTANCE hinst=NULL; HWND hParent = GetDesktopWindow(); // not hooked yet ! hDesktopWindow=(*pCreateWindowExA)(0, "Static", "DxWnd Desktop", WS_OVERLAPPEDWINDOW, 0, 0, 0, 0, hParent, NULL, hinst, NULL); if(hDesktopWindow){ (*pMoveWindow)(hDesktopWindow, TargetPos->left, TargetPos->top, TargetPos->right-TargetPos->left, TargetPos->bottom-TargetPos->top, TRUE); (*pSetWindowLong)(hDesktopWindow, GWL_STYLE, WS_OVERLAPPEDWINDOW); (*pShowWindow)(hDesktopWindow, SW_RESTORE); OutTraceDW("created desktop emulation: hwnd=%x\n", hDesktopWindow); return hDesktopWindow; } else{ OutTraceE("CreateWindowEx ERROR: err=%d at %d\n", GetLastError(), __LINE__); return NULL; } } HRESULT WINAPI extSetCooperativeLevel(int dxversion, SetCooperativeLevel_Type pSetCooperativeLevel, LPDIRECTDRAW lpdd, HWND hwnd, DWORD dwflags) { HRESULT res; BOOL bFixFrame = FALSE; OutTraceDDRAW("SetCooperativeLevel(D%d): lpdd=%x hwnd=%x dwFlags=%x(%s)\n", dxversion, lpdd, hwnd, dwflags,ExplainCoopFlags(dwflags)); // when SetCooperativeLevel is called for the only purpose of setting the FPU policy, // just proxy the call. Seen in "G-Darius". switch(dwflags){ case DDSCL_FPUSETUP: case DDSCL_FPUPRESERVE: res=(*pSetCooperativeLevel)(lpdd, hwnd, dwflags); if(res){ OutTraceE("SetCooperativeLevel: ERROR bypass err=%x(%s)\n", res, ExplainDDError(res)); } return DD_OK; break; } DDSURFACEDESC2 ddsd; switch(dxversion){ default: case 1: ddsd.dwSize=sizeof(DDSURFACEDESC); res=(*pGetDisplayMode1)(lpdd, (LPDDSURFACEDESC)&ddsd); break; case 2: ddsd.dwSize=sizeof(DDSURFACEDESC); res=(*pGetDisplayMode2)(lpdd, (LPDDSURFACEDESC)&ddsd); break; case 3: ddsd.dwSize=sizeof(DDSURFACEDESC); res=(*pGetDisplayMode3)(lpdd, (LPDDSURFACEDESC)&ddsd); break; case 4: ddsd.dwSize=sizeof(DDSURFACEDESC2); res=(*pGetDisplayMode4)(lpdd, &ddsd); break; case 7: ddsd.dwSize=sizeof(DDSURFACEDESC2); res=(*pGetDisplayMode7)(lpdd, &ddsd); break; } if(res){ OutTraceE("SetCooperativeLevel: GetDisplayMode ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); return res; } OutTraceDW("InitDDScreenParameters: Actual size=(%dx%d)%s\n", ddsd.dwWidth, ddsd.dwHeight, DumpPixelFormat((LPDDSURFACEDESC2)&ddsd)); dxw.ActualPixelFormat=ddsd.ddpfPixelFormat; if(dxw.VirtualPixelFormat.dwRGBBitCount==0) dxw.VirtualPixelFormat=ddsd.ddpfPixelFormat; SetBltTransformations(dxversion); if(dxw.Windowize || (dxw.dwFlags7 & NODDEXCLUSIVEMODE)){ if (dwflags & DDSCL_FULLSCREEN){ // v2.04.01: CREATEDESKTOP option for games that despite all efforts don't have // a valid main window, so we build one. // Fixes (somehow) "Man TT Super Bike". if(dxw.dwFlags6 & CREATEDESKTOP){ static BOOL bDoOnce = TRUE; if(bDoOnce){ RECT desktop = dxw.GetUnmappedScreenRect(); hwnd = CreateVirtualDesktop(&desktop); dxw.SethWnd(hwnd); bDoOnce=FALSE; } } // v2.01.82 fix: // WARN: Tomb Raider 4 demo is setting cooperative level against hwnd 0 (desktop) // so in this case better use the registered hWnd value. Same as GP500, who uses // the desktop window handle. // v2.02.31 fix: // Hooligans - Storm over Europe wants to set cooperative level NORMAL to hwnd 0 // that is legitimate, but setting against desktop window gives an error code - so // the zero hwnd redirection had to be moved within the FULLSCREEN if case. if(dxw.IsRealDesktop(hwnd)){ OutTraceDW("SetCooperativeLevel: desktop hwnd=%x -> %x\n", hwnd, dxw.GethWnd()); hwnd=dxw.GethWnd(); } // v2.03.40 fix: // WARN: "Reah" creates a main window undetected. Setting a FULLSCREEN cooperative level // against it is a good enough proof that this is the real main window! if(hwnd != dxw.GethWnd()){ OutTraceDW("SetCooperativeLevel: setting new main hwnd=%x -> %x\n", dxw.GethWnd(), hwnd); dxw.SethWnd(hwnd); } dxw.SetFullScreen(TRUE); // v2.03.41: added suppression of DDSCL_SETDEVICEWINDOW DDSCL_CREATEDEVICEWINDOW DDSCL_SETFOCUSWINDOW used by "PBA Bowling 2" dwflags &= ~(DDSCL_FULLSCREEN | DDSCL_EXCLUSIVE | DDSCL_ALLOWMODEX | DDSCL_SETDEVICEWINDOW | DDSCL_CREATEDEVICEWINDOW | DDSCL_SETFOCUSWINDOW); dwflags |= DDSCL_NORMAL; bFixFrame = TRUE; } else{ // v2.03.77: the game "Portugal 1111" calls SetCooperativeLevel with hwnd=0. // in such a case, you can get the window size, so better leave the previous // FullScreen setting unchanged. This is a wise politic also in case of any // sort of GetClientRect error code. if(hwnd){ RECT client; BOOL ret; ret=(*pGetClientRect)(hwnd, &client); // v2.02.11: // Non fullscreen cooperative mode means windowed, unless the window occupies the whole desktop area if (ret) dxw.SetFullScreen(client.right==dxw.iSizX && client.bottom==dxw.iSizY); } } } res=(*pSetCooperativeLevel)(lpdd, hwnd, dwflags); if(res){ switch(res){ case DDERR_EXCLUSIVEMODEALREADYSET: // v2.04.15 - "Sid Meier's Alpha Centauri" in non-windowed mode OutTraceDW("SetCooperativeLevel: bypass DDERR_EXCLUSIVEMODEALREADYSET\n"); res = 0; break; case DDERR_INVALIDPARAMS: //hwnd = GetForegroundWindow(); PostMessage(hwnd, WM_SYSCOMMAND, SC_RESTORE, 0); Sleep(1000); res=(*pSetCooperativeLevel)(lpdd, hwnd, dwflags); break; } if(res){ OutTraceE("SetCooperativeLevel: ERROR lpdd=%x hwnd=%x Flags=%x err=%x(%s) at %d\n", lpdd, hwnd, dwflags, res, ExplainDDError(res), __LINE__); } } if(bFixFrame){ AdjustWindowFrame(hwnd, dxw.GetScreenWidth(), dxw.GetScreenHeight()); if ((dxw.dwFlags1 & FIXWINFRAME) || (dxw.dwFlags9 & FIXTHINFRAME)) dxw.FixWindowFrame(hwnd); } GetHookInfo()->IsFullScreen=dxw.IsFullScreen(); // WARN: GP500 was setting cooperative level against the desktop! This can be partially // intercepted by hooking the GetDesktopWindow() call, but in windowed mode this can't be // done, so better repeat the check here. if ((res==DD_OK) && (hwnd!=NULL)){ if (hwnd==(*pGetDesktopWindow)()){ OutTraceE("SetCooperativeLevel: attempt to work on desktop window\n"); } else dxw.SethWnd(hwnd); // save the good one } return res; } HRESULT WINAPI extSetCooperativeLevel1(LPDIRECTDRAW lpdd, HWND hwnd, DWORD dwflags) { return extSetCooperativeLevel(1, pSetCooperativeLevel1, lpdd, hwnd, dwflags); } HRESULT WINAPI extSetCooperativeLevel2(LPDIRECTDRAW lpdd, HWND hwnd, DWORD dwflags) { return extSetCooperativeLevel(2, pSetCooperativeLevel2, lpdd, hwnd, dwflags); } HRESULT WINAPI extSetCooperativeLevel3(LPDIRECTDRAW lpdd, HWND hwnd, DWORD dwflags) { return extSetCooperativeLevel(3, pSetCooperativeLevel3, lpdd, hwnd, dwflags); } HRESULT WINAPI extSetCooperativeLevel4(LPDIRECTDRAW lpdd, HWND hwnd, DWORD dwflags) { return extSetCooperativeLevel(4, pSetCooperativeLevel4, lpdd, hwnd, dwflags); } HRESULT WINAPI extSetCooperativeLevel7(LPDIRECTDRAW lpdd, HWND hwnd, DWORD dwflags) { return extSetCooperativeLevel(7, pSetCooperativeLevel7, lpdd, hwnd, dwflags); } void FixSurfaceCapsInner(LPDDSURFACEDESC2 lpddsd, int dxversion) { // rules of thumb: // 1) textures should be left untouched (switching to SYSTEMMEMORY when forcing HEL may even fail!) // 1.1) textures with no DDSD_PIXELFORMAT specification should have one when virtual color depth is not equal to real color depth? // 2) if a pixel format is specified, if DDSCAPS_SYSTEMMEMORY add DDSCAPS_OFFSCREENPLAY (if pixel formats are different?), otherwise do not touch anything. // 3) if the surface is used as a buffer (DDSD_WIDTH set, DDSD_HEIGHT unset) do not touch anything. // 4) zbuffer surfaces (DDSCAPS_ZBUFFER set) must have DDSCAPS_SYSTEMMEMORY // 5) DDSCAPS_3DDEVICE surfaces should have a defined pixel format // 6) in all remaining cases, adjust the pixel format and ensure you have DDSCAPS_SYSTEMMEMORY|DDSCAPS_OFFSCREENPLAIN if(!(lpddsd->dwFlags & DDSD_CAPS)) lpddsd->ddsCaps.dwCaps = 0; // DDSCAPS_TEXTURE surfaces must be left untouched, unless you set FORCESHEL: in this case switch VIDEOMEMORY to SYSTEMMEMORY if((lpddsd->dwFlags & DDSD_CAPS) && (lpddsd->ddsCaps.dwCaps & DDSCAPS_TEXTURE)){ if (dxw.dwFlags3 & FORCESHEL) { lpddsd->ddsCaps.dwCaps &= ~DDSCAPS_VIDEOMEMORY; lpddsd->ddsCaps.dwCaps |= DDSCAPS_SYSTEMMEMORY; } if((dxw.dwFlags5 & TEXTUREFORMAT) && !(lpddsd->dwFlags & DDSD_PIXELFORMAT)){ // TEXTURE: enforce PIXELFORMAT on MEMORY lpddsd->dwFlags |= DDSD_PIXELFORMAT; GetPixFmt(lpddsd); // trytry // lpddsd->ddsCaps.dwCaps |= DDSCAPS_OFFSCREENPLAIN; // OFFSCREENPLAIN to set a different pixel format } if((lpddsd->dwFlags & DDSD_PIXELFORMAT) && (lpddsd->ddpfPixelFormat.dwFlags & DDPF_FOURCC) && (dxw.dwFlags7 & CLEARTEXTUREFOURCC)){ lpddsd->ddpfPixelFormat = dxw.VirtualPixelFormat; lpddsd->ddpfPixelFormat.dwFourCC = 0; lpddsd->ddpfPixelFormat.dwFlags &= ~DDPF_FOURCC; } return; } if((lpddsd->dwFlags & DDSD_CAPS) && (lpddsd->ddsCaps.dwCaps & DDSCAPS_ZBUFFER)) { // z-buffer surface - set to memory if(dxw.dwFlags8 & OFFSCREENZBUFFER) return; lpddsd->ddsCaps.dwCaps = DDSCAPS_ZBUFFER; if (dxw.dwFlags8 & ALLOWSYSMEMON3DDEV) lpddsd->ddsCaps.dwCaps = DDSCAPS_SYSTEMMEMORY|DDSCAPS_ZBUFFER; return; } // this is valid just in case the above block eliminated TEXTURE surfaces.... if (lpddsd->dwFlags & DDSD_PIXELFORMAT){ // pixel format defined // trytry //if (lpddsd->ddsCaps.dwCaps & DDSCAPS_SYSTEMMEMORY) lpddsd->ddsCaps.dwCaps |= DDSCAPS_OFFSCREENPLAIN; // to allow for pixel format conversion (Quest for Glory 5 - GOG version) lpddsd->ddsCaps.dwCaps |= DDSCAPS_OFFSCREENPLAIN; return; } // buffer surface if ((lpddsd->dwFlags & (DDSD_WIDTH|DDSD_HEIGHT)) == DDSD_WIDTH) return; // 3DDEVICE no TEXTURE: enforce PIXELFORMAT // v2.02.90: added for "Zoo Tycoon" textures // v2.03.48 - there are two situations // "Arx fatalis" asks for DDSCAPS_3DDEVICE+DDSCAPS_OFFSCREENPLAIN capability and needs no DDSCAPS_SYSTEMMEMORY capability // "Bunnies must die" asks for DDSCAPS_3DDEVICE+DDSCAPS_OFFSCREENPLAIN+DDSCAPS_VIDEOMEMORY capability and requires DDSCAPS_SYSTEMMEMORY capability // we try to manage them by checking for the DDSCAPS_VIDEOMEMORY capability ... if((lpddsd->dwFlags & DDSD_CAPS) && (lpddsd->ddsCaps.dwCaps & DDSCAPS_3DDEVICE)){ lpddsd->dwFlags |= DDSD_PIXELFORMAT; GetPixFmt(lpddsd); if(dxw.dwFlags8 & OFFSCREENZBUFFER) { // add OFFSCREENPLAIN to set a different pixel format lpddsd->ddsCaps.dwCaps |= DDSCAPS_OFFSCREENPLAIN; return; } if(lpddsd->ddsCaps.dwCaps & DDSCAPS_VIDEOMEMORY) lpddsd->ddsCaps.dwCaps = (DDSCAPS_OFFSCREENPLAIN|DDSCAPS_3DDEVICE|DDSCAPS_SYSTEMMEMORY); // good for "Bunnies must die", NO "Arx Fatalis" else lpddsd->ddsCaps.dwCaps = (DDSCAPS_OFFSCREENPLAIN|DDSCAPS_3DDEVICE); // good for "Arx Fatalis", NO "Bunnies must die" return; } // default case: adjust pixel format OutTraceB("FixSurfaceCaps: suppress DDSCAPS_VIDEOMEMORY case\n"); lpddsd->dwFlags |= (DDSD_CAPS|DDSD_PIXELFORMAT); if(!(dxw.dwFlags8 & OFFSCREENZBUFFER)){ lpddsd->ddsCaps.dwCaps &= ~(DDSCAPS_VIDEOMEMORY|DDSCAPS_LOCALVIDMEM); // v2.02.43 lpddsd->ddsCaps.dwCaps |= (DDSCAPS_SYSTEMMEMORY|DDSCAPS_OFFSCREENPLAIN); } if(!(dxw.dwFlags3 & NOPIXELFORMAT)) GetPixFmt(lpddsd); return; } void FixSurfaceCaps(LPDDSURFACEDESC2 lpddsd, int dxversion) { OutTraceDW("FixSurfaceCaps: INPUT Flags=%x(%s) Caps=%x(%s)\n", lpddsd->dwFlags, ExplainFlags(lpddsd->dwFlags), lpddsd->ddsCaps.dwCaps, ExplainDDSCaps(lpddsd->ddsCaps.dwCaps)); FixSurfaceCapsInner(lpddsd, dxversion); OutTraceDW("FixSurfaceCaps: OUTPUT Flags=%x(%s) Caps=%x(%s)\n", lpddsd->dwFlags, ExplainFlags(lpddsd->dwFlags), lpddsd->ddsCaps.dwCaps, ExplainDDSCaps(lpddsd->ddsCaps.dwCaps)); } HRESULT WINAPI extCreateSurface1(LPDIRECTDRAW lpdd, DDSURFACEDESC *lpddsd, LPDIRECTDRAWSURFACE *lplpdds, void *pu) { return extCreateSurface(1, (CreateSurface_Type)pCreateSurface1, lpdd, (DDSURFACEDESC2 *)lpddsd, lplpdds, pu); } HRESULT WINAPI extCreateSurface2(LPDIRECTDRAW lpdd, DDSURFACEDESC *lpddsd, LPDIRECTDRAWSURFACE *lplpdds, void *pu) { return extCreateSurface(2, (CreateSurface_Type)pCreateSurface2, lpdd, (DDSURFACEDESC2 *)lpddsd, lplpdds, pu); } HRESULT WINAPI extCreateSurface3(LPDIRECTDRAW lpdd, DDSURFACEDESC *lpddsd, LPDIRECTDRAWSURFACE *lplpdds, void *pu) { return extCreateSurface(3, (CreateSurface_Type)pCreateSurface3, lpdd, (DDSURFACEDESC2 *)lpddsd, lplpdds, pu); } HRESULT WINAPI extCreateSurface4(LPDIRECTDRAW lpdd, DDSURFACEDESC2 *lpddsd, LPDIRECTDRAWSURFACE *lplpdds, void *pu) { return extCreateSurface(4, (CreateSurface_Type)pCreateSurface4, lpdd, (DDSURFACEDESC2 *)lpddsd, lplpdds, pu); } HRESULT WINAPI extCreateSurface7(LPDIRECTDRAW lpdd, DDSURFACEDESC2 *lpddsd, LPDIRECTDRAWSURFACE *lplpdds, void *pu) { return extCreateSurface(7, (CreateSurface_Type)pCreateSurface7, lpdd, (DDSURFACEDESC2 *)lpddsd, lplpdds, pu); } HRESULT WINAPI extGetAttachedSurface(int dxversion, GetAttachedSurface_Type pGetAttachedSurface, LPDIRECTDRAWSURFACE lpdds, LPDDSCAPS2 lpddsc, LPDIRECTDRAWSURFACE *lplpddas) { HRESULT res; BOOL IsPrim; BOOL IsBack; IsPrim=dxwss.IsAPrimarySurface(lpdds); IsBack=dxwss.IsABackBufferSurface(lpdds); if(IsTraceDDRAW){ char sCaps2[60]; strcpy(sCaps2, ""); if(dxversion >= 4) sprintf(sCaps2, " caps2=%x caps3=%x caps4=%x", lpddsc->dwCaps2, lpddsc->dwCaps3, lpddsc->dwCaps4); OutTrace("GetAttachedSurface(%d): lpdds=%x%s caps=%x(%s)%s\n", dxversion, lpdds, (IsPrim?"(PRIM)":(IsBack ? "(BACK)":"")), lpddsc->dwCaps, ExplainDDSCaps(lpddsc->dwCaps), sCaps2); } if(dxw.dwFlags1 & EMULATESURFACE){ // v2.1.81: fix to make "Silver" working: if the primary surface was created with // backbuffercount == 2, the game expects some more surface to be attached to // the attached backbuffer. Since there would be no use for it, just return // the attached backbuffer itself. Makes Silver working, anyway.... // beware: "Snowboard Racer" fails if you return an attached surface anyhow! There, // the primary surface was created with back buffer count == 1. // v2.2.62 fix: a check to implement doublebuffer emulation only in case of DDSCAPS_BACKBUFFER // requests. A call to GetAttachedSurface can be made to retrieve DDSCAPS_ZBUFFER surfaces, and in // this case the BackBuffer surface can't be returned. // v2.03.56.fix1: the double buffer trick for Silver works in generic EMULATESURFACE mode, but the // surface is requested also as a DDSCAPS_VIDEOMEMORY one. if (IsBack && (DDSD_Prim.dwBackBufferCount > 1) && (lpddsc->dwCaps & (DDSCAPS_BACKBUFFER|DDSCAPS_VIDEOMEMORY))){ *lplpddas = lpdds; OutTraceDW("GetAttachedSurface(%d): DOUBLEBUFFER attached to BACK=%x\n", dxversion, lpdds); return DD_OK; } // on primary surface return the backbuffer surface coming from either an explicit // AddAttachedSurface, or a primary complex surface creation otherwise.... if(IsPrim && (lpddsc->dwCaps & (DDSCAPS_BACKBUFFER|DDSCAPS_FLIP))) { // v2.02.42 added DDSCAPS_FLIP for Empire Earth // in "Tomb Raider III" GOG release, the primary surface is queryed and has no attached // backbuffer, but a backbuffer does exist and has to be retrieved by GetBackBufferSurface. LPDIRECTDRAWSURFACE lpddsback = dxwss.GetBackBufferSurface(); if (lpddsback) { *lplpddas = lpddsback; OutTraceDW("GetAttachedSurface(%d): BACKBUFFER attached=%x\n", dxversion, *lplpddas); return DD_OK; } else { *lplpddas = NULL; OutTraceDW("GetAttachedSurface(%d): no attached BACKBUFFER\n", dxversion); return DDERR_NOTFOUND; } } if((dxw.dwFlags8 & NOHALDEVICE) && (lpddsc->dwCaps & DDSCAPS_ZBUFFER)){ // tested with "Grand Prix World": if a ZBUFFER is returned, CreateDevice fails! *lplpddas = NULL; OutTraceDW("GetAttachedSurface(%d): NOHALDEVICE no attached ZBUFFER\n", dxversion); return DDERR_NOTFOUND; } // attempt to fix S.C.A.R.S. black screen bug ... failed //if(lpddsc->dwCaps == (DDSCAPS_TEXTURE|DDSCAPS_MIPMAP)) lpddsc->dwCaps = DDSCAPS_TEXTURE; } else { // Virtual primary surfaces are created with no DDSCAPS_3DDEVICE caps, so don't look for it .... if(IsPrim && (lpddsc->dwCaps & (DDSCAPS_BACKBUFFER|DDSCAPS_FLIP))) lpddsc->dwCaps &= ~DDSCAPS_3DDEVICE; } // proxy the call... res=(*pGetAttachedSurface)(lpdds, (LPDDSCAPS)lpddsc, lplpddas); if(res) { // if possible, simulate a backbuffer attached to primary surface if (IsPrim && (DDSD_Prim.dwBackBufferCount > 0) && (lpddsc->dwCaps & (DDSCAPS_BACKBUFFER|DDSCAPS_FLIP))){ LPDIRECTDRAWSURFACE lpBackBuffer; lpBackBuffer = dxwss.GetBackBufferSurface(); if(lpBackBuffer){ *lplpddas = lpBackBuffer; OutTraceDW("GetAttachedSurface(%d): SIMULATE BACKBUF attach to PRIM=%x\n", dxversion, lpdds); return DD_OK; } } // Warning: AVOID simulating a ZBUFFER attach to any surface that has not it really attached // otherwise the program steps over but crashes afterwards, as soon as it tries to use the ZBUFFER. // Better return the error (most programs overcome the problem) or change caps policy so that the // ZBUFFER becomes attached. // Ref: "Arx Fatalis", "TOCA Touring Car Championship" OutTraceE("GetAttachedSurface(%d): ERROR res=%x(%s) at %d\n", dxversion, res, ExplainDDError(res), __LINE__); } else { OutTraceDDRAW("GetAttachedSurface(%d): attached=%x\n", dxversion, *lplpddas); if(lpddsc->dwCaps & DDSCAPS_ZBUFFER){ char *sMode; // Martian Gothic and others: if the ZBUFFER is unknown, then you must register virtual capabilities // compatible with those of the original surface! DWORD dwCaps; lpDDZBuffer = *lplpddas; dwCaps = dxwss.GetCaps(*lplpddas); // v2.04.17 - beware: the caps db is not properly cleaned on surface destruction, so it may happen // that you get a fake-known case where the caps are referred to some other surface type. // Happened in "Star Treck: Armada" where the ZBUFFER collects an old PRIMARY caps entry. if(!dwCaps || !(dwCaps & DDSCAPS_ZBUFFER)){ dwCaps = dxwss.GetCaps(lpdds); if(dwCaps){ dwCaps &= ~(DDSCAPS_PRIMARYSURFACE|DDSCAPS_FLIP|DDSCAPS_BACKBUFFER|DDSCAPS_3DDEVICE|DDSCAPS_COMPLEX); dwCaps |= DDSCAPS_ZBUFFER; //if(dwCaps & DDSCAPS_VIDEOMEMORY) dwCaps|=DDSCAPS_LOCALVIDMEM; dxwss.PushZBufferSurface(*lplpddas, dxversion, dwCaps); sMode = "derived"; } else sMode = "unknown"; } else { sMode = "known"; } OutTraceDW("GetAttachedSurface(%d): ZBUFFER caps=%x(%s) (%s)\n", dxversion, dwCaps, ExplainDDSCaps(dwCaps), sMode); } } return res; } HRESULT WINAPI extGetAttachedSurface1(LPDIRECTDRAWSURFACE lpdds, LPDDSCAPS lpddsc, LPDIRECTDRAWSURFACE *lplpddas) { return extGetAttachedSurface(1, pGetAttachedSurface1, lpdds, (LPDDSCAPS2)lpddsc, lplpddas); } HRESULT WINAPI extGetAttachedSurface2(LPDIRECTDRAWSURFACE lpdds, LPDDSCAPS lpddsc, LPDIRECTDRAWSURFACE *lplpddas) { return extGetAttachedSurface(2, pGetAttachedSurface2, lpdds, (LPDDSCAPS2)lpddsc, lplpddas); } HRESULT WINAPI extGetAttachedSurface3(LPDIRECTDRAWSURFACE lpdds, LPDDSCAPS lpddsc, LPDIRECTDRAWSURFACE *lplpddas) { return extGetAttachedSurface(3, pGetAttachedSurface3, lpdds, (LPDDSCAPS2)lpddsc, lplpddas); } HRESULT WINAPI extGetAttachedSurface4(LPDIRECTDRAWSURFACE lpdds, LPDDSCAPS2 lpddsc, LPDIRECTDRAWSURFACE *lplpddas) { return extGetAttachedSurface(4, pGetAttachedSurface4, lpdds, lpddsc, lplpddas); } HRESULT WINAPI extGetAttachedSurface7(LPDIRECTDRAWSURFACE lpdds, LPDDSCAPS2 lpddsc, LPDIRECTDRAWSURFACE *lplpddas) { return extGetAttachedSurface(7, pGetAttachedSurface7, lpdds, lpddsc, lplpddas); } void BlitError(HRESULT res, LPRECT lps, LPRECT lpd, int line) { char sInfo[512]; sprintf(sInfo, "Blt: ERROR %x(%s) at %d", res, ExplainDDError(res), line); if (res==DDERR_INVALIDRECT){ if (lps) sprintf(sInfo, "%s src=(%d,%d)-(%d,%d)", sInfo, lps->left, lps->top, lps->right, lps->bottom); else sprintf(sInfo, "%s src=(NULL)", sInfo); if (lpd) sprintf(sInfo, "%s dest=(%d,%d)-(%d,%d)", sInfo, lpd->left, lpd->top, lpd->right, lpd->bottom); else sprintf(sInfo, "%s dest=(NULL)", sInfo); } strcat(sInfo, "\n"); OutTrace(sInfo); return; } void BlitTrace(char *label, LPRECT lps, LPRECT lpd, int line) { char sInfo[512]; sprintf(sInfo, "[%s]", label); if (lps) sprintf(sInfo, "%s src=(%d,%d)-(%d,%d)", sInfo, lps->left, lps->top, lps->right, lps->bottom); else sprintf(sInfo, "%s src=(NULL)", sInfo); if (lpd) sprintf(sInfo, "%s dest=(%d,%d)-(%d,%d)", sInfo, lpd->left, lpd->top, lpd->right, lpd->bottom); else sprintf(sInfo, "%s dest=(NULL)", sInfo); sprintf(sInfo, "%s at %d\n", sInfo, line); OutTrace(sInfo); return; } HRESULT WINAPI PrimaryBlt(int dxversion, Blt_Type pBlt, LPDIRECTDRAWSURFACE lpdds, LPRECT lpdestrect, LPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, LPDDBLTFX lpddbltfx) { HRESULT res; res = (*pBlt)(lpdds, lpdestrect, lpddssrc, lpsrcrect, GetBltWaitFlags(DDBLT_WAIT), lpddbltfx); if(res == DDERR_SURFACELOST) { if(lpdds->IsLost()) { OutTraceDW("RECOVERY of lost surface lpdds=%x\n", lpdds); lpdds->Restore(); if(res) { OutTraceE("PrimaryBlt: Restore ERROR lpdds=%x err=%x(%s) at %d\n", lpdds, res, ExplainDDError(res), __LINE__); } } } return res; } HRESULT WINAPI PrimaryFastBlt(int dxversion, Blt_Type pBlt, LPDIRECTDRAWSURFACE lpdds, LPRECT lpdestrect, LPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, LPDDBLTFX lpddbltfx) { HRESULT res; RECT client; int iXOffset, iYOffset; // offsets to center surface area to window (*pGetClientRect)(dxw.GethWnd(), &client); iXOffset = (client.right - dxw.GetScreenWidth()) >> 1; iYOffset = (client.bottom - dxw.GetScreenHeight()) >> 1; if(dxw.dwFlags3 & FORCECLIPPER){ RECT destrect; destrect.left = iXOffset + lpdestrect->left; destrect.right = iXOffset + lpdestrect->right; destrect.top = iYOffset + lpdestrect->top; destrect.bottom = iYOffset + lpdestrect->bottom; res = (*pBlt)(lpdds, &destrect, lpddssrc, lpsrcrect, GetBltWaitFlags(DDBLT_WAIT), 0); } else { BltFast_Type pBltFast; switch(dxversion){ case 1: pBltFast=pBltFast1; break; case 2: pBltFast=pBltFast2; break; case 3: pBltFast=pBltFast3; break; case 4: pBltFast=pBltFast4; break; case 7: pBltFast=pBltFast7; break; } res= (*pBltFast)(lpdds, iXOffset + lpdestrect->left, iYOffset + lpdestrect->top, lpddssrc, lpsrcrect, GetFlipWaitFlags(DDFLIP_WAIT)); } if(res == DDERR_SURFACELOST) { if(lpdds->IsLost()) { OutTraceDW("RECOVERY of lost surface lpdds=%x\n", lpdds); res = lpdds->Restore(); if(res) { OutTraceE("PrimaryBlt: Restore ERROR lpdds=%x err=%x(%s) at %d\n", lpdds, res, ExplainDDError(res), __LINE__); } } } return res; } HRESULT WINAPI PrimaryStretchBlt(int dxversion, Blt_Type pBlt, LPDIRECTDRAWSURFACE lpdds, LPRECT lpdestrect, LPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, LPDDBLTFX lpddbltfx) { HRESULT res; DDSURFACEDESC2 ddsd; RECT TmpRect; LPDIRECTDRAWSURFACE lpddsTmp; LPDIRECTDRAWSURFACE lpddsBak; DDSCAPS caps; CreateSurface1_Type pCreateSurface; CreateClipper_Type pCreateClipper; SetClipper_Type pSetClipper; BltFast_Type pBltFast; int dwSize; static BOOL bUseFastBlt = !(dxw.dwFlags3 & FORCECLIPPER); switch(iBakBufferVersion){ default: case 1: pBltFast=pBltFast1; pCreateSurface=pCreateSurface1; dwSize = sizeof(DDSURFACEDESC); break; case 2: pBltFast=pBltFast2; pCreateSurface=(CreateSurface1_Type)pCreateSurface2; dwSize = sizeof(DDSURFACEDESC); break; case 3: pBltFast=pBltFast3; pCreateSurface=(CreateSurface1_Type)pCreateSurface3; dwSize = sizeof(DDSURFACEDESC); break; case 4: pBltFast=pBltFast4; pCreateSurface=(CreateSurface1_Type)pCreateSurface4; dwSize = sizeof(DDSURFACEDESC2); break; case 7: pBltFast=pBltFast7; pCreateSurface=(CreateSurface1_Type)pCreateSurface7; dwSize = sizeof(DDSURFACEDESC2); break; } caps.dwCaps = DDSCAPS_BACKBUFFER; memset(&ddsd, 0, sizeof(ddsd)); ddsd.dwSize = dwSize; if(lpddssrc==NULL){ // blit from backbuffer lpdds->GetAttachedSurface(&caps, &(LPDIRECTDRAWSURFACE)lpddsBak); if(lpddsBak == NULL) { OutTraceE("PrimaryStretchBlt: skip - lpddsBak=%x at %d\n", lpddsBak, __LINE__); return DD_OK; // fake a success ... } lpddsBak->GetSurfaceDesc((LPDDSURFACEDESC)&ddsd); } else{ // blit from surface lpddssrc->GetSurfaceDesc((LPDDSURFACEDESC)&ddsd); } TmpRect.left = TmpRect.top = 0; TmpRect.bottom = ddsd.dwHeight = lpdestrect->bottom - lpdestrect->top; TmpRect.right = ddsd.dwWidth = lpdestrect->right - lpdestrect->left; if((TmpRect.bottom==0) || (TmpRect.right==0)) return DD_OK; // avoid blitting to null areas (Fifa 2000 D3D) ddsd.dwFlags = (DDSD_HEIGHT | DDSD_WIDTH | DDSD_CAPS); // capabilities must cope with primary / backbuffer surface capabilities to get speedy operations ddsd.ddsCaps.dwCaps = dwBackBufferCaps; res=(*pCreateSurface)(lpPrimaryDD, (LPDDSURFACEDESC)&ddsd, &lpddsTmp, NULL); if(res) { OutTraceE("PrimaryStretchBlt: CreateSurface ERROR %x(%s) at %d\n", res, ExplainDDError(res), __LINE__); OutTraceB("PrimaryStretchBlt: CreateSurface %s\n", LogSurfaceAttributes(&ddsd, "[Gateway]", __LINE__)); return res; } // stretch-blit to target size on OFFSCREENPLAIN temp surface res= (*pBlt)(lpddsTmp, &TmpRect, lpddssrc, lpsrcrect, DDBLT_WAIT, 0); if(res) { OutTraceE("PrimaryStretchBlt: Blt ERROR %x(%s) at %d\n", res, ExplainDDError(res), __LINE__); } else { while(TRUE) { if(bUseFastBlt){ res= (*pBltFast)(lpdds, lpdestrect->left, lpdestrect->top, lpddsTmp, &TmpRect, GetFlipWaitFlags(DDBLTFAST_WAIT)); } else{ res= (*pBlt)(lpdds, lpdestrect, lpddsTmp, &TmpRect, GetBltWaitFlags(DDBLT_WAIT), 0); } if(res == DDERR_INVALIDRECT){ OutTraceDW("PrimaryStretchBlt: adding clipper ddversion=%x at %d\n", iDirectDrawVersion, __LINE__); bUseFastBlt = FALSE; switch(iDirectDrawVersion){ case 1: pCreateClipper = pCreateClipper1; break; case 2: pCreateClipper = pCreateClipper2; break; case 3: pCreateClipper = pCreateClipper3; break; case 4: pCreateClipper = pCreateClipper4; break; case 7: pCreateClipper = pCreateClipper7; break; } switch(iBakBufferVersion){ case 1: pSetClipper = pSetClipper1; break; case 2: pSetClipper = pSetClipper2; break; case 3: pSetClipper = pSetClipper3; break; case 4: pSetClipper = pSetClipper4; break; case 7: pSetClipper = pSetClipper7; break; } if(!lpddC){ res=(*pCreateClipper)(lpPrimaryDD, 0, &lpddC, NULL); if(res) OutTraceE("CreateClipper ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); } //res=(*pSetHWnd)(lpddC, 0, dxw.GethWnd()); // no good, cliper object could be unhooked yet! "Settlers III" would crash! res=lpddC->SetHWnd(0, dxw.GethWnd()); if(res) OutTraceE("SetHWnd ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); res=(*pSetClipper)(lpdds, lpddC); if(res) OutTraceE("SetClipper ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); OutTraceDW("PrimaryStretchBlt: added clipper lpddc=%x at %d\n", lpddC, __LINE__); res= (*pBlt)(lpdds, lpdestrect, lpddsTmp, &TmpRect, GetBltWaitFlags(DDBLT_WAIT), 0); } if(res) OutTraceE("PrimaryStretchBlt: %s ERROR %x(%s) at %d\n", bUseFastBlt?"BltFast":"Blt", res, ExplainDDError(res), __LINE__); if(res == DDERR_SURFACELOST){ if(lpdds->IsLost()) { OutTraceDW("RECOVERY of lost surface lpdds=%x\n", lpdds); res = lpdds->Restore(); if(res) { OutTraceE("PrimaryStretchBlt: Restore ERROR lpdds=%x err=%x(%s) at %d\n", lpdds, res, ExplainDDError(res), __LINE__); } } if(lpddsTmp->IsLost()) { OutTraceDW("RECOVERY of lost surface lpdds=%x\n", lpddsTmp); res = lpddsTmp->Restore(); if(res) { OutTraceE("PrimaryStretchBlt: Restore ERROR lpdds=%x err=%x(%s) at %d\n", lpddsTmp, res, ExplainDDError(res), __LINE__); } } if(!res) { OutTraceDW("PrimaryStretchBlt: surface sucessfully recovered, retry\n"); continue; } } break; } } (*pReleaseSMethod(dxversion))(lpddsTmp); return res; } void *LoadFilter(char *apiname) { HMODULE filterlib; #define MAX_FILE_PATH 512 char sSourcePath[MAX_FILE_PATH+1]; char *p; DWORD dwAttrib; dwAttrib = GetFileAttributes("dxwnd.dll"); if (dwAttrib != INVALID_FILE_ATTRIBUTES && !(dwAttrib & FILE_ATTRIBUTE_DIRECTORY)) return NULL; GetModuleFileName(GetModuleHandle("dxwnd"), sSourcePath, MAX_FILE_PATH); p=&sSourcePath[strlen(sSourcePath)-strlen("dxwnd.dll")]; *p=0; SetDllDirectory(sSourcePath); strcpy(p, "filter.dll"); filterlib=(*pLoadLibraryA)(sSourcePath); if(!filterlib) { OutTraceDW("DXWND: Load lib=\"%s\" failed err=%d\n", sSourcePath, GetLastError()); return NULL; } return (*pGetProcAddress)(filterlib, apiname); } HRESULT WINAPI PrimaryBilinearBlt(int dxversion, Blt_Type pBlt, LPDIRECTDRAWSURFACE lpdds, LPRECT lpdestrect, LPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, LPDDBLTFX lpddbltfx) { HRESULT res; typedef void (WINAPI *Resize_HQ_Type)( unsigned char*, RECT *, int, unsigned char*, RECT *, int); static Resize_HQ_Type pResize_HQ = NULL; /* to be implemented .... */ DDSURFACEDESC2 ddsd; RECT TmpRect, SrcRect; LPDIRECTDRAWSURFACE lpddsTmp; LPDIRECTDRAWSURFACE lpddsBak; LPDIRECTDRAWSURFACE lpddsCopy=NULL; DDSCAPS caps; BYTE *bSourceBuf, *bDestBuf; LONG dwWidth, dwHeight; int SrcPitch, DestPitch; CreateSurface1_Type pCreateSurface; BltFast_Type pBltFast; int dwSize; switch(iBakBufferVersion){ // v2.04.03.fx1 fix: must use iBakBufferVersion, not dxversion! default: case 1: pBltFast=pBltFast1; pCreateSurface=pCreateSurface1; dwSize = sizeof(DDSURFACEDESC); break; case 2: pBltFast=pBltFast2; pCreateSurface=(CreateSurface1_Type)pCreateSurface2; dwSize = sizeof(DDSURFACEDESC); break; case 3: pBltFast=pBltFast3; pCreateSurface=(CreateSurface1_Type)pCreateSurface3; dwSize = sizeof(DDSURFACEDESC); break; case 4: pBltFast=pBltFast4; pCreateSurface=(CreateSurface1_Type)pCreateSurface4; dwSize = sizeof(DDSURFACEDESC2); break; case 7: pBltFast=pBltFast7; pCreateSurface=(CreateSurface1_Type)pCreateSurface7; dwSize = sizeof(DDSURFACEDESC2); break; } caps.dwCaps = DDSCAPS_BACKBUFFER; memset(&ddsd, 0, sizeof(DDSURFACEDESC)); ddsd.dwSize = dwSize; if(lpddssrc==NULL){ // blit from backbuffer lpdds->GetAttachedSurface(&caps, &lpddsBak); if(lpddsBak) lpddsBak->GetSurfaceDesc((LPDDSURFACEDESC)&ddsd); } else{ // blit from surface lpddssrc->GetSurfaceDesc((LPDDSURFACEDESC)&ddsd); } // assign source RECT values anyway.... if(!lpsrcrect){ lpsrcrect = &SrcRect; lpsrcrect->left = lpsrcrect->top = 0; lpsrcrect->right = dxw.GetScreenWidth(); lpsrcrect->bottom = dxw.GetScreenHeight(); } dwWidth = lpdestrect->right - lpdestrect->left; dwHeight = lpdestrect->bottom - lpdestrect->top; TmpRect.left = TmpRect.top = 0; TmpRect.bottom = ddsd.dwHeight = dwHeight; TmpRect.right = ddsd.dwWidth = dwWidth; ddsd.dwFlags = (DDSD_HEIGHT | DDSD_WIDTH | DDSD_CAPS); // capabilities must cope with primary / backbuffer surface capabilities to get speedy operations ddsd.ddsCaps.dwCaps = dwBackBufferCaps; res=(*pCreateSurface)(lpPrimaryDD, (LPDDSURFACEDESC)&ddsd, &lpddsTmp, NULL); if(res) OutTraceE("PrimaryBilinearBlt: CreateSurface ERROR %x(%s) at %d\n", res, ExplainDDError(res), __LINE__); // get informations memset(&ddsd,0,dwSize); ddsd.dwSize = dwSize; ddsd.dwFlags = DDSD_LPSURFACE | DDSD_PITCH; res=(*pLockMethod(dxversion))(lpddssrc, 0, (LPDDSURFACEDESC)&ddsd, DDLOCK_SURFACEMEMORYPTR|DDLOCK_READONLY, 0); if(res) { OutTraceE("PrimaryBilinearBlt: Lock ERROR %x(%s) at %d\n", res, ExplainDDError(res), __LINE__); return DD_OK; } bSourceBuf = (BYTE *)ddsd.lpSurface; SrcPitch = ddsd.lPitch; memset(&ddsd,0,dwSize); ddsd.dwSize = dwSize; ddsd.dwFlags = DDSD_LPSURFACE | DDSD_PITCH; res=(*pLockMethod(dxversion))(lpddsTmp, 0, (LPDDSURFACEDESC)&ddsd, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0); if(res) { OutTraceE("PrimaryBilinearBlt: Lock ERROR %x(%s) at %d\n", res, ExplainDDError(res), __LINE__); return DD_OK; } bDestBuf = (BYTE *)ddsd.lpSurface; DestPitch = ddsd.lPitch; // do the filtering if(!pResize_HQ) { char *filter; HMODULE filterlib; switch(ddsd.ddpfPixelFormat.dwGBitMask) { default: case 0x00FF00: filter = "Resize_HQ_4ch"; break; case 0x0007E0: // RGB565 filter = "Resize_HQ_2ch565"; break; case 0x0003E0: // RGB555 filter = "Resize_HQ_2ch555"; break; } filterlib=(*pLoadLibraryA)("filter.dll"); if(!filterlib) { char sMsg[80+1]; sprintf(sMsg, "DXWND: ERROR can't load lib=\"filter.dll\" err=%x\n", GetLastError()); OutTraceE(sMsg); MessageBox(0, sMsg, "ERROR", MB_OK | MB_ICONEXCLAMATION); exit(0); } pResize_HQ = (Resize_HQ_Type)(*pGetProcAddress)(filterlib, filter); if(!pResize_HQ){ char sMsg[80+1]; sprintf(sMsg, "DXWND: ERROR can't load name=\"%s\"\n", filter); OutTraceE(sMsg); MessageBox(0, sMsg, "ERROR", MB_OK | MB_ICONEXCLAMATION); exit(0); } } (*pResize_HQ)(bSourceBuf, lpsrcrect, SrcPitch, bDestBuf, lpdestrect, DestPitch); // fast-blit to primary (*pUnlockMethod(dxversion))(lpddssrc, NULL); (*pUnlockMethod(dxversion))(lpddsTmp, NULL); if(dxw.dwFlags3 & FORCECLIPPER) { res= (*pBlt)(lpdds, lpdestrect, lpddsTmp, &TmpRect, DDBLT_WAIT, 0); if(res) OutTraceE("PrimaryBilinearBlt: Blt ERROR %x(%s) at %d\n", res, ExplainDDError(res), __LINE__); } else { res= (*pBltFast)(lpdds, lpdestrect->left, lpdestrect->top, lpddsTmp, &TmpRect, DDBLTFAST_WAIT); if(res) OutTraceE("PrimaryBilinearBlt: BltFast ERROR %x(%s) at %d\n", res, ExplainDDError(res), __LINE__); } (*pReleaseSMethod(dxversion))(lpddsTmp); if(lpddsCopy) (*pReleaseSMethod(dxversion))(lpddsCopy); return res; } HRESULT WINAPI PrimaryNoBlt(int dxversion, Blt_Type pBlt, LPDIRECTDRAWSURFACE lpdds, LPRECT lpdestrect, LPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, LPDDBLTFX lpddbltfx) { return DD_OK; } typedef HRESULT (WINAPI *ColorConversion_Type)(int, LPDIRECTDRAWSURFACE, RECT, LPDIRECTDRAWSURFACE *); HRESULT WINAPI ColorConversionEmulated(int dxversion, LPDIRECTDRAWSURFACE lpdds, RECT emurect, LPDIRECTDRAWSURFACE *lpddssource) { HRESULT res; Blt_Type pBlt; RECT srcrect, destrect; pBlt = pGetBltMethod(dxversion); // v2.04.01.fx6: copy emurect since pEmuBlt will alter values! srcrect=destrect=emurect; res=(*pEmuBlt)(dxversion, pBlt, lpDDSEmu_Back, &destrect, lpdds, &srcrect, DDBLT_WAIT, 0); if(res==DDERR_SURFACEBUSY){ (*pUnlockMethod(dxversion))(lpdds, NULL); (*pUnlockMethod(dxversion))(lpDDSEmu_Back, NULL); //srcrect=destrect=emurect; //res=(*pEmuBlt)(dxversion, pBlt, lpDDSEmu_Back, &destrect, lpdds, &srcrect, DDBLT_WAIT, 0); res=DD_OK; } if(res) { BlitError(res, &emurect, &emurect, __LINE__); if(dxw.dwFlags1 & SUPPRESSDXERRORS) res=0; } *lpddssource = lpDDSEmu_Back; return res; } HRESULT WINAPI ColorConversionGDI(int version, LPDIRECTDRAWSURFACE lpdds, RECT emurect, LPDIRECTDRAWSURFACE *lpddssource) { // GDICOLORCONV: use GDI capabilities to convert color depth by BitBlt-ting between different hdc HRESULT res; GetDC_Type pGetDC = pGetDCMethod(); ReleaseDC_Type pReleaseDC = pReleaseDCMethod(); do { HDC hdc_source, hdc_dest; res=(*pGetDC)(lpdds, &hdc_source); if(res) { OutTraceE("GetDC ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); break; } res=(*pGetDC)(lpDDSEmu_Back, &hdc_dest); if(res) { OutTraceE("GetDC ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); break; } if(!BitBlt(hdc_dest, 0, 0, dxw.GetScreenWidth(), dxw.GetScreenHeight(), hdc_source, 0, 0, SRCCOPY)){ OutTraceE("BitBlt ERROR: err=%d at %d\n", GetLastError(), __LINE__); } res=(*pReleaseDC)(lpdds, hdc_source); if(res) { OutTraceE("ReleaseDC ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); break; } res=(*pReleaseDC)(lpDDSEmu_Back, hdc_dest); if(res) { OutTraceE("ReleaseDC ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); break; } } while(FALSE); *lpddssource = lpDDSEmu_Back; return res; } HRESULT WINAPI ColorConversionDDRAW(int dxversion, LPDIRECTDRAWSURFACE lpdds, RECT emurect, LPDIRECTDRAWSURFACE *lpddssource) { *lpddssource = lpdds; return DD_OK; } HRESULT WINAPI extFlip(int dxversion, Flip_Type pFlip, LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWSURFACE lpddssrc, DWORD dwflags) { BOOL IsPrim; HRESULT res; DDSURFACEDESC2 ddsd; LPDIRECTDRAWSURFACE lpddsTmp; LPDIRECTDRAWSURFACE lpDDSBack; DWORD dwBltFlags; BOOL bEmulatedFlip; bEmulatedFlip = dxw.Windowize || dxw.IsEmulated; IsPrim=dxwss.IsAPrimarySurface(lpdds); OutTraceDDRAW("Flip(%d): %s lpdds=%x%s, src=%x, flags=%x(%s)\n", dxversion, bEmulatedFlip?"EMULATED":"GENUINE", lpdds, IsPrim?"(PRIM)":"", lpddssrc, dwflags, ExplainFlipFlags(dwflags)); Blt_Type pBlt; pBlt = pGetBltMethod(dxversion); if (!IsPrim){ if(lpddssrc){ res=(*pFlip)(lpdds, lpddssrc, dwflags); } else{ LPDIRECTDRAWSURFACE lpddsAttached; DDSCAPS ddsc; DDSURFACEDESC2 sd; sd.dwSize=Set_dwSize_From_Surface(); res=lpdds->GetSurfaceDesc((DDSURFACEDESC *)&sd); if (res) OutTraceDW("Flip: GetSurfaceDesc res=%x at %d\n",res, __LINE__); // replace these CAPS (good for seven kingdoms II) with same as lpdds surface ddsc.dwCaps=sd.ddsCaps.dwCaps; res=lpdds->GetAttachedSurface(&ddsc, &lpddsAttached); if(res){ OutTraceE("Flip: GetAttachedSurface ERROR %x(%s) at %d\n", res, ExplainDDError(res), __LINE__); return res; } res=sBlt(dxversion, pBlt, "Flip", lpdds, NULL, lpddsAttached, NULL, DDBLT_WAIT, 0, TRUE); if(res){ OutTraceE("Flip: Blt ERROR %x(%s) at %d\n", res, ExplainDDError(res), __LINE__); return res; } } if(res) OutTraceE("Flip: ERROR %x(%s) at %d\n", res, ExplainDDError(res), __LINE__); return res; } #ifdef HANDLEFLIPPABLE if(!bEmulatedFlip){ dwBltFlags = GetFlipWaitFlags(dwflags); res=(*pFlip)(lpdds, lpddssrc, dwBltFlags); if(res) OutTraceE("Flip: ERROR %x(%s) at %d\n", res, ExplainDDError(res), __LINE__); return res; } #endif // emulation to primary surface Flip - you can't flip to window surfaces, // so you have to replace it with Blt operations. // v2.03.98: moved closer to actual video operations to avoid the risk of losing the end of vertical blank period // while doing calculations //if((dwflags & DDFLIP_WAIT) || (dxw.dwFlags1 & SAVELOAD)) lpPrimaryDD->WaitForVerticalBlank(DDWAITVB_BLOCKEND , 0); lpDDSBack = dxwss.GetBackBufferSurface(); // from ddraw.h: // On IDirectDrawSurface7 and higher interfaces, the default is DDFLIP_WAIT. If you wish // to override the default and use time when the accelerator is busy (as denoted by // the DDERR_WASSTILLDRAWING return code) then use DDFLIP_DONOTWAIT. if(dxversion >= 7) dwBltFlags = (dwflags & DDFLIP_DONOTWAIT) ? DDBLT_DONOTWAIT : DDBLT_WAIT; else dwBltFlags = (dwflags & DDFLIP_WAIT) ? DDBLT_WAIT : 0; dwBltFlags = GetBltWaitFlags(dwBltFlags); if(dxw.dwFlags4 & NOFLIPEMULATION){ HRESULT res2; // create a temporary working surface memset(&ddsd, 0, sizeof(ddsd)); ddsd.dwSize = (dxversion <4) ? sizeof(DDSURFACEDESC) : sizeof(DDSURFACEDESC2); // v2.03.60 insidious bug fix !!! // v2.02.80: the BackBuffer may not exist? see "HellCopter" if(lpDDSBack){ (*pGetSurfaceDescMethod())((LPDIRECTDRAWSURFACE2)lpDDSBack, &ddsd); ddsd.dwFlags &= ~DDSD_PITCH; } else{ ddsd.dwFlags = (DDSD_HEIGHT | DDSD_WIDTH | DDSD_CAPS); ddsd.ddsCaps.dwCaps = (DDSCAPS_OFFSCREENPLAIN); ddsd.dwHeight = dxw.GetScreenHeight(); ddsd.dwWidth = dxw.GetScreenWidth(); } // v2.04.09 fix: dxversion replaced with iBakBufferVersion - fixes "Gruntz" crash res2=(*pCreateSurfaceMethod(iBakBufferVersion))(lpPrimaryDD, &ddsd, &lpddsTmp, NULL); if(res2) { OutTraceE("CreateSurface: ERROR %x(%s) at %d\n", res2, ExplainDDError(res2), __LINE__); OutTraceE("Size=%d lpPrimaryDD=%x lpDDSBack=%x %s\n", ddsd.dwSize, lpPrimaryDD, lpDDSBack, LogSurfaceAttributes(&ddsd, "[FlipBuf]", __LINE__)); } //OutTrace("DEBUG: copied surface size=(%dx%d)\n", ddsd.dwWidth, ddsd.dwHeight); // copy front buffer if(dxw.dwFlags1 & EMULATESURFACE){ // in emulated mode, the primary surface is virtual and you can pick it all // needed for "Gruntz" res2= (*pBlt)(lpddsTmp, NULL, lpdds, NULL, DDBLT_WAIT, NULL); if(res2) BlitError(res2, NULL, NULL, __LINE__); } else { // in no-emulated mode, the primary surface is the whole screen, so you have to pick... // needed for "Black Thorn" RECT clip; if(dxw.dwFlags1 & EMULATEBUFFER) clip=dxw.GetScreenRect(); else clip=dxw.GetUnmappedScreenRect(); res2= (*pBlt)(lpddsTmp, NULL, lpdds, &clip, DDBLT_WAIT, NULL); if(res2) BlitError(res2, &clip, NULL, __LINE__); } } if(lpddssrc){ //res=lpdds->Blt(0, lpddssrc, 0, DDBLT_WAIT, 0); res=sBlt(dxversion, pBlt, "Flip", lpdds, NULL, lpddssrc, NULL, dwBltFlags, 0, TRUE); } else{ if(!lpDDSBack){ OutTraceE("Flip: no backbuffer\n"); return DDERR_INVALIDPARAMS; } if (dxw.dwFlags2 & BACKBUFATTACH){ RECT NullArea; NullArea.left=NullArea.top=0; NullArea.bottom=dxw.GetScreenHeight(); NullArea.right=dxw.GetScreenWidth(); res=sBlt(dxversion, pBlt, "Flip", lpdds, NULL, lpDDSBack, &NullArea, dwBltFlags, 0, TRUE); } else res=sBlt(dxversion, pBlt, "Flip", lpdds, NULL, lpDDSBack, NULL, dwBltFlags, 0, TRUE); lpddssrc = lpDDSBack; } if(dxw.dwFlags4 & NOFLIPEMULATION){ HRESULT res2; // restore flipped backbuffer and delete temporary surface res2= (*pBlt)(lpddssrc, NULL, lpddsTmp, NULL, DDBLT_WAIT, NULL); if(res2) OutTraceE("Blt: ERROR %x(%s) at %d\n", res2, ExplainDDError(res2), __LINE__); (*pReleaseSMethod(dxversion))(lpddsTmp); } if(res) OutTraceE("Flip: Blt ERROR %x(%s)\n", res, ExplainDDError(res)); return res; } HRESULT WINAPI extFlip1(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWSURFACE lpddssrc, DWORD dwflags) { return extFlip(1, pFlip1, lpdds, lpddssrc, dwflags); } HRESULT WINAPI extFlip2(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWSURFACE lpddssrc, DWORD dwflags) { return extFlip(2, pFlip2, lpdds, lpddssrc, dwflags); } HRESULT WINAPI extFlip3(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWSURFACE lpddssrc, DWORD dwflags) { return extFlip(3, pFlip3, lpdds, lpddssrc, dwflags); } HRESULT WINAPI extFlip4(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWSURFACE lpddssrc, DWORD dwflags) { return extFlip(4, pFlip4, lpdds, lpddssrc, dwflags); } HRESULT WINAPI extFlip7(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWSURFACE lpddssrc, DWORD dwflags) { return extFlip(7, pFlip7, lpdds, lpddssrc, dwflags); } HRESULT WINAPI extBlt(int dxversion, Blt_Type pBlt, LPDIRECTDRAWSURFACE lpdds, LPRECT lpdestrect, LPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, DWORD dwflags, LPDDBLTFX lpddbltfx) { if ((dxw.dwFlags2 & FULLRECTBLT) && dxwss.IsAPrimarySurface(lpdds)){ lpsrcrect=NULL; lpdestrect=NULL; } return sBlt(dxversion, pBlt, "Blt", lpdds, lpdestrect, lpddssrc, lpsrcrect, dwflags, lpddbltfx, FALSE); } HRESULT WINAPI extBlt1(LPDIRECTDRAWSURFACE lpdds, LPRECT lpdestrect, LPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, DWORD dwflags, LPDDBLTFX lpddbltfx) { return extBlt(1, pBlt1, lpdds, lpdestrect, lpddssrc, lpsrcrect, dwflags, lpddbltfx); } HRESULT WINAPI extBlt2(LPDIRECTDRAWSURFACE lpdds, LPRECT lpdestrect, LPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, DWORD dwflags, LPDDBLTFX lpddbltfx) { return extBlt(2, pBlt2, lpdds, lpdestrect, lpddssrc, lpsrcrect, dwflags, lpddbltfx); } HRESULT WINAPI extBlt3(LPDIRECTDRAWSURFACE lpdds, LPRECT lpdestrect, LPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, DWORD dwflags, LPDDBLTFX lpddbltfx) { return extBlt(3, pBlt3, lpdds, lpdestrect, lpddssrc, lpsrcrect, dwflags, lpddbltfx); } HRESULT WINAPI extBlt4(LPDIRECTDRAWSURFACE lpdds, LPRECT lpdestrect, LPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, DWORD dwflags, LPDDBLTFX lpddbltfx) { return extBlt(4, pBlt4, lpdds, lpdestrect, lpddssrc, lpsrcrect, dwflags, lpddbltfx); } HRESULT WINAPI extBlt7(LPDIRECTDRAWSURFACE lpdds, LPRECT lpdestrect, LPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, DWORD dwflags, LPDDBLTFX lpddbltfx) { return extBlt(7, pBlt7, lpdds, lpdestrect, lpddssrc, lpsrcrect, dwflags, lpddbltfx); } static HRESULT WINAPI extBltFast(int dxversion, Blt_Type pBlt, BltFast_Type pBltFast, LPDIRECTDRAWSURFACE lpdds, DWORD dwx, DWORD dwy, LPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, DWORD dwtrans) { // BltFast is supported just on screen surfaces, so it has to be replaced // by ordinary Blt operation in EMULATESURFACE mode. // Mind that screen surface doesn't necessarily mean PRIMARY surfaces! RECT srcrect, destrect; DWORD flags = 0; DDSURFACEDESC2 ddsd; HRESULT ret; BOOL ToPrim, FromPrim; ToPrim=dxwss.IsAPrimarySurface(lpdds); FromPrim=dxwss.IsAPrimarySurface(lpddssrc); CleanRect(&lpsrcrect,__LINE__); if(IsTraceDDRAW){ char sRect[81]; if (lpsrcrect) sprintf(sRect, "(%d,%d)-(%d,%d)", lpsrcrect->left, lpsrcrect->top, lpsrcrect->right, lpsrcrect->bottom); else strcpy(sRect, "(NULL)"); OutTrace("BltFast(%d): dest=%x%s src=%x%s dwTrans=%x(%s) (x,y)=(%d,%d) srcrect=%s\n", dxversion, lpdds, ToPrim?"(PRIM)":"", lpddssrc, FromPrim?"(PRIM)":"", dwtrans, ExplainBltFastFlags(dwtrans), dwx, dwy, sRect); } // try the actual method first, it may work in some corcumstances.... // when ret is DDERR_UNSUPPORTED try the emulated path. if(!(ToPrim || FromPrim)) { if(dxw.dwFlags5 & MESSAGEPUMP) dxw.MessagePump(); ret = pBltFast(lpdds, dwx, dwy, lpddssrc, lpsrcrect, dwtrans); if(ret != DDERR_UNSUPPORTED) { if(ret) OutTraceE("BltFast ERROR: res=%x(%s)\n", ret, ExplainDDError(ret)); return ret; } } // consistency check .... // situation found for instance in "Warlords Battlecry II demo". if (lpsrcrect) if((lpsrcrect->left >= lpsrcrect->right) || (lpsrcrect->top >= lpsrcrect->bottom)) { OutTraceDW("BltFast: ASSERT bad rect at %d\n", __LINE__); return 0; } flags = 0; if(dwtrans & DDBLTFAST_WAIT) flags = DDBLT_WAIT; if(dwtrans & DDBLTFAST_DESTCOLORKEY) flags |= DDBLT_KEYDEST; if(dwtrans & DDBLTFAST_SRCCOLORKEY) flags |= DDBLT_KEYSRC; if ((dxw.dwFlags2 & FULLRECTBLT) && ToPrim){ ret = sBlt(dxversion, pBlt, "BltFast", lpdds, NULL, lpddssrc, lpsrcrect, flags, NULL, FALSE); if(ret) { OutTraceE("BltFast FULLRECBLT res=%x\n", ret); } else { OutTraceDDRAW("BltFast FULLRECBLT res=DD_OK\n"); } return ret; } destrect.left = dwx; destrect.top = dwy; if(lpsrcrect){ destrect.right = destrect.left + lpsrcrect->right - lpsrcrect->left; destrect.bottom = destrect.top + lpsrcrect->bottom - lpsrcrect->top; // avoid altering pointed values.... srcrect=*lpsrcrect; ret=sBlt(dxversion, pBlt, "BltFast", lpdds, &destrect, lpddssrc, &srcrect, flags, NULL, FALSE); } else{ // does it EVER goes through here? NULL is not a valid rect value for BltFast call.... // yes, forced in FULLRECTBLT mode! // yes, when BltFast on DDBLTFAST_SRCCOLORKEY!! (Pax Corpus) if(lpddssrc){ ddsd.dwSize=Set_dwSize_From_Surface(); ddsd.dwFlags = DDSD_WIDTH | DDSD_HEIGHT; ret=lpddssrc->GetSurfaceDesc((LPDDSURFACEDESC)&ddsd); if (ret){ OutTraceE("BltFast: GetSurfaceDesc ERROR %x at %d\n", ret, __LINE__); return DD_OK; } destrect.right = destrect.left + ddsd.dwWidth; destrect.bottom = destrect.top + ddsd.dwHeight; ret=sBlt(dxversion, pBlt, "BltFast", lpdds, &destrect, lpddssrc, NULL, flags, NULL, FALSE); } else{ //ret=sBlt("BltFast", lpdds, NULL, lpddssrc, NULL, flags, NULL, FALSE); OutTraceDW("BltFast FAKE res=DD_OK at %d\n", __LINE__); ret=DD_OK; } } if(ret) { OutTraceE("BltFast ERROR: res=%x(%s)\n", ret, ExplainDDError(ret)); } else { OutTraceDDRAW("BltFast: res=DD_OK\n"); } return ret; } HRESULT WINAPI extBltFast1(LPDIRECTDRAWSURFACE lpdds, DWORD dwx, DWORD dwy, LPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, DWORD dwtrans) { return extBltFast(1, pBlt1, pBltFast1, lpdds, dwx, dwy, lpddssrc, lpsrcrect, dwtrans); } HRESULT WINAPI extBltFast2(LPDIRECTDRAWSURFACE lpdds, DWORD dwx, DWORD dwy, LPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, DWORD dwtrans) { return extBltFast(2, pBlt2, pBltFast2, lpdds, dwx, dwy, lpddssrc, lpsrcrect, dwtrans); } HRESULT WINAPI extBltFast3(LPDIRECTDRAWSURFACE lpdds, DWORD dwx, DWORD dwy, LPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, DWORD dwtrans) { return extBltFast(3, pBlt3, pBltFast3, lpdds, dwx, dwy, lpddssrc, lpsrcrect, dwtrans); } HRESULT WINAPI extBltFast4(LPDIRECTDRAWSURFACE lpdds, DWORD dwx, DWORD dwy, LPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, DWORD dwtrans) { return extBltFast(4, pBlt4, pBltFast4, lpdds, dwx, dwy, lpddssrc, lpsrcrect, dwtrans); } HRESULT WINAPI extBltFast7(LPDIRECTDRAWSURFACE lpdds, DWORD dwx, DWORD dwy, LPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, DWORD dwtrans) { return extBltFast(7, pBlt7, pBltFast7, lpdds, dwx, dwy, lpddssrc, lpsrcrect, dwtrans); } HRESULT WINAPI extWaitForVerticalBlank(WaitForVerticalBlank_Type pWaitForVerticalBlank, LPDIRECTDRAW lpdd, DWORD dwflags, HANDLE hevent) { // set a global to avoid double calls bVSyncDone = TRUE; if(dxw.dwFlags8 & FORCENOVSYNC) return DD_OK; if(dxw.dwFlags1 & SAVELOAD){ dxw.VSyncWait(); return DD_OK; } if(dxw.dwFlags8 & VSYNCSCANLINE){ dxw.VSyncWaitLine(((DWORD)dxw.ScanLine * 100) / dxw.GetScreenHeight()); return DD_OK; } return (*pWaitForVerticalBlank)(lpdd, dwflags, hevent); } HRESULT WINAPI extWaitForVerticalBlank1(LPDIRECTDRAW lpdd, DWORD dwflags, HANDLE hevent) { return extWaitForVerticalBlank(pWaitForVerticalBlank1, lpdd, dwflags, hevent); } HRESULT WINAPI extWaitForVerticalBlank2(LPDIRECTDRAW lpdd, DWORD dwflags, HANDLE hevent) { return extWaitForVerticalBlank(pWaitForVerticalBlank2, lpdd, dwflags, hevent); } HRESULT WINAPI extWaitForVerticalBlank3(LPDIRECTDRAW lpdd, DWORD dwflags, HANDLE hevent) { return extWaitForVerticalBlank(pWaitForVerticalBlank3, lpdd, dwflags, hevent); } HRESULT WINAPI extWaitForVerticalBlank4(LPDIRECTDRAW lpdd, DWORD dwflags, HANDLE hevent) { return extWaitForVerticalBlank(pWaitForVerticalBlank4, lpdd, dwflags, hevent); } HRESULT WINAPI extWaitForVerticalBlank7(LPDIRECTDRAW lpdd, DWORD dwflags, HANDLE hevent) { return extWaitForVerticalBlank(pWaitForVerticalBlank7, lpdd, dwflags, hevent); } #define DDPCAPS_INITIALIZE_LEGACY 0x00000008l HRESULT WINAPI extCreatePalette(int version, CreatePalette_Type pCreatePalette, LPDIRECTDRAW lpdd, DWORD dwflags, LPPALETTEENTRY lpddpa, LPDIRECTDRAWPALETTE *lplpddp, IUnknown *pu) { HRESULT res; OutTraceDDRAW("CreatePalette: lpdd=%x dwFlags=%x(%s)\n", lpdd, dwflags, ExplainCreatePaletteFlags(dwflags)); if(IsDebug && (dwflags & DDPCAPS_8BIT)) dxw.DumpPalette(256, lpddpa); if(dxw.dwFlags1 & EMULATESURFACE) dwflags &= ~DDPCAPS_PRIMARYSURFACE; res = (*pCreatePalette)(lpdd, dwflags, lpddpa, lplpddp, pu); if (res) { OutTraceE("CreatePalette: ERROR res=%x(%s)\n", res, ExplainDDError(res)); return res; } OutTraceDDRAW("CreatePalette: OK lpddp=%x\n", *lplpddp); HookDDPalette(lplpddp); return DD_OK; } HRESULT WINAPI extCreatePalette1(LPDIRECTDRAW lpdd, DWORD dwflags, LPPALETTEENTRY lpddpa, LPDIRECTDRAWPALETTE *lplpddp, IUnknown *pu) { return extCreatePalette(1, (CreatePalette_Type)pCreatePalette1, lpdd, dwflags, lpddpa, lplpddp, pu); } HRESULT WINAPI extCreatePalette2(LPDIRECTDRAW lpdd, DWORD dwflags, LPPALETTEENTRY lpddpa, LPDIRECTDRAWPALETTE *lplpddp, IUnknown *pu) { return extCreatePalette(2, (CreatePalette_Type)pCreatePalette2, lpdd, dwflags, lpddpa, lplpddp, pu); } HRESULT WINAPI extCreatePalette3(LPDIRECTDRAW lpdd, DWORD dwflags, LPPALETTEENTRY lpddpa, LPDIRECTDRAWPALETTE *lplpddp, IUnknown *pu) { return extCreatePalette(3, (CreatePalette_Type)pCreatePalette3, lpdd, dwflags, lpddpa, lplpddp, pu); } HRESULT WINAPI extCreatePalette4(LPDIRECTDRAW lpdd, DWORD dwflags, LPPALETTEENTRY lpddpa, LPDIRECTDRAWPALETTE *lplpddp, IUnknown *pu) { return extCreatePalette(4, (CreatePalette_Type)pCreatePalette4, lpdd, dwflags, lpddpa, lplpddp, pu); } HRESULT WINAPI extCreatePalette7(LPDIRECTDRAW lpdd, DWORD dwflags, LPPALETTEENTRY lpddpa, LPDIRECTDRAWPALETTE *lplpddp, IUnknown *pu) { return extCreatePalette(7, (CreatePalette_Type)pCreatePalette7, lpdd, dwflags, lpddpa, lplpddp, pu); } HRESULT WINAPI extGetPalette(int dxversion, GetPalette_Type pGetPalette, LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWPALETTE *lplpddp) { HRESULT res; BOOL isPrim, isBack; isPrim=dxwss.IsAPrimarySurface(lpdds); isBack=dxwss.IsABackBufferSurface(lpdds); OutTraceDDRAW("GetPalette(%d): lpdds=%x%s%s\n", dxversion, lpdds, isPrim?"(PRIM)":"", isBack?"(BACK)":""); res = DD_OK; lpdds->AddRef(); if(lpdds->Release()) res=(*pGetPalette)(lpdds, lplpddp); // v2.03.07: in "Die Hard Trilogy" the backbuffer surface is queryed for the palette // v2.03.08: in "Viper Racing" lpDDP is still NULL (how could it be?) if((dxw.dwFlags1 & EMULATESURFACE) && (res == DDERR_NOPALETTEATTACHED) && (isPrim||isBack) && lpDDP){ OutTraceDW("GetPalette: retrieve PRIMARY palette for emulated surface lpDDP=%x\n", lpDDP); *lplpddp = lpDDP; lpDDP->AddRef(); iDDPExtraRefCounter++; res=DD_OK; } if (res) { OutTraceE("GetPalette: ERROR res=%x(%s)\n", res, ExplainDDError(res)); } else { OutTraceDDRAW("GetPalette: OK lplpddp=%x\n", *lplpddp); } return res; } HRESULT WINAPI extGetPalette1(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWPALETTE *lplpddp) { return extGetPalette(1, pGetPalette1, lpdds, lplpddp); } HRESULT WINAPI extGetPalette2(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWPALETTE *lplpddp) { return extGetPalette(2, pGetPalette2, lpdds, lplpddp); } HRESULT WINAPI extGetPalette3(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWPALETTE *lplpddp) { return extGetPalette(3, pGetPalette3, lpdds, lplpddp); } HRESULT WINAPI extGetPalette4(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWPALETTE *lplpddp) { return extGetPalette(4, pGetPalette4, lpdds, lplpddp); } HRESULT WINAPI extGetPalette7(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWPALETTE *lplpddp) { return extGetPalette(7, pGetPalette7, lpdds, lplpddp); } HRESULT WINAPI extSetPalette(int dxversion, SetPalette_Type pSetPalette, LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWPALETTE lpddp) { PALETTEENTRY *lpentries; BOOL isPrim; HRESULT res; isPrim=dxwss.IsAPrimarySurface(lpdds); OutTraceDDRAW("SetPalette(%d): lpdds=%x%s lpddp=%x\n", dxversion, lpdds, isPrim?"(PRIM)":"", lpddp); res=(*pSetPalette)(lpdds, lpddp); if(res){ OutTraceE("SetPalette: ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); // from MSDN, about lpddp: // A pointer to the IDirectDrawPalette interface for the palette object to be used with this surface. // If NULL, the current palette is detached. if(lpddp) lpddp->AddRef(); // to allow final Release() without crash - fixes "Heavy Gear" crash at end of mission } else OutTraceDDRAW("SetPalette: OK\n"); res=DD_OK; if((dxw.dwFlags1 & EMULATESURFACE) && isPrim){ OutTraceDW("SetPalette: register PRIMARY palette lpDDP=%x\n", lpddp); lpDDP = lpddp; LPDIRECTDRAWSURFACE lpDDSBack; if(lpddp){ HRESULT res2; lpentries = (LPPALETTEENTRY)PaletteEntries; res2=lpddp->GetEntries(0, 0, 256, lpentries); if(res2) OutTraceE("SetPalette: GetEntries ERROR res=%x(%s)\n", res2, ExplainDDError(res2)); mySetPalette(0, 256, lpentries); // v2.02.76: necessary for "Requiem Avenging Angel" in SURFACEEMULATION mode } // Apply palette to backbuffer surface. This is necessary on some games: "Duckman private dick", "Total Soccer 2000", ... lpDDSBack = dxwss.GetBackBufferSurface(); if (lpDDSBack){ OutTraceDW("SetPalette: apply PRIMARY palette lpDDP=%x to DDSBack=%x\n", lpddp, lpDDSBack); res=(*pSetPalette)(lpDDSBack, lpddp); if(res) OutTraceE("SetPalette: ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); } // add a reference to simulate what would happen in reality.... if(lpddp) lpdds->AddRef(); res=DD_OK; } return res; } HRESULT WINAPI extSetPalette1(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWPALETTE lpddp) { return extSetPalette(1, pSetPalette1, lpdds, lpddp); } HRESULT WINAPI extSetPalette2(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWPALETTE lpddp) { return extSetPalette(2, pSetPalette2, lpdds, lpddp); } HRESULT WINAPI extSetPalette3(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWPALETTE lpddp) { return extSetPalette(3, pSetPalette3, lpdds, lpddp); } HRESULT WINAPI extSetPalette4(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWPALETTE lpddp) { return extSetPalette(4, pSetPalette4, lpdds, lpddp); } HRESULT WINAPI extSetPalette7(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWPALETTE lpddp) { return extSetPalette(7, pSetPalette7, lpdds, lpddp); } HRESULT WINAPI extSetEntries(LPDIRECTDRAWPALETTE lpddp, DWORD dwflags, DWORD dwstart, DWORD dwcount, LPPALETTEENTRY lpentries) { HRESULT res; OutTraceDDRAW("SetEntries: lpddp=%x dwFlags=%x, start=%d, count=%d entries=%x\n", //GHO: added trace infos lpddp, dwflags, dwstart, dwcount, lpentries); if(IsDebug) dxw.DumpPalette(dwcount, &lpentries[dwstart]); if((dxw.dwFlags1 & EMULATESURFACE) && (lpDDP == lpddp)){ OutTraceDW("SetEntries: update PRIMARY palette lpDDP=%x\n", lpddp); if ((dwstart + dwcount > 256) || (dwstart<0)){ dwcount=256; dwstart=0; OutTraceDW("SetEntries: ASSERT start+count > 256\n"); } mySetPalette(dwstart, dwcount, lpentries); // GHO: needed for fixed rect and variable palette animations, // e.g. dungeon keeper loading screen, Warcraft II splash, ... // GHO: but refreshing cause flickering when GDI was used without updating the primary surface // e.g. Tomb Raider 2 intro titles, Virtua Fighter PC, ... // v2.03.10: do not blit also in case of GDI mode if ((dxw.dwFlags1 & EMULATESURFACE) && !(dxw.dwFlags2 & NOPALETTEUPDATE) && !(dxw.dwFlags5 & GDIMODE)) dxw.ScreenRefresh(); } // this part (setentry against all surfaces, including virtual primary) can be necessary whenever the game uses mixed access to the // screen (like ddraw & GDI) and is necessary on "Road Rash". res = (*pSetEntries)(lpddp, dwflags, dwstart, dwcount, lpentries); if(res) OutTraceE("SetEntries: ERROR res=%x(%s)\n", res, ExplainDDError(res)); else OutTraceDDRAW("SetEntries: OK\n"); return res; } static HRESULT WINAPI extSetClipper(int dxversion, SetClipper_Type pSetClipper, LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWCLIPPER lpddc) { HRESULT res; BOOL isPrim; isPrim=dxwss.IsAPrimarySurface(lpdds); OutTraceDDRAW("SetClipper(%d): lpdds=%x%s lpddc=%x\n", dxversion, lpdds, isPrim?"(PRIM)":"", lpddc); // v2.1.84: SUPPRESSCLIPPING flag - improves "Monopoly Edition 3D" where continuous // clipping ON & OFF affects blitting on primary surface. // Needed also to avoid "New Yourk Racer" intro movie clipping. if(dxw.dwFlags1 & SUPPRESSCLIPPING) return 0; if(dxw.IsEmulated){ if (dxw.dwFlags3 & FORCECLIPPER){ // v2.03.48: FORCECLIPPER ensures that a valid clipper is issued on the real primary surface // and on the main game window. Then, you won't be able to BltFast any longer.... if ((isPrim || dxwss.IsABackBufferSurface(lpdds)) && lpDDSEmu_Prim){ OutTraceDW("SetClipper: redirect surface to primary hwnd=%x lpdds=%x%s->%x\n", dxw.GethWnd(), lpdds, isPrim?"(PRIM)":"", lpDDSEmu_Prim); res=(*pSetHWnd)(lpddc, 0, dxw.GethWnd()); //res=lpddc->SetHWnd(0, dxw.GethWnd()); if (res) OutTraceE("SetClipper: SetHWnd ERROR res=%x(%s)\n", res, ExplainDDError(res)); res=(*pSetClipper)(lpDDSEmu_Prim, lpddc); if (res) OutTraceE("SetClipper: ERROR res=%x(%s)\n", res, ExplainDDError(res)); return res; } } else { if ((isPrim && lpDDSEmu_Prim) || (dxwss.IsABackBufferSurface(lpdds) && lpDDSEmu_Back)){ OutTraceDW("SetClipper: skip primary/backbuffer lpdds=%x\n", lpdds); return 0; } } } res=(*pSetClipper)(lpdds, lpddc); if (res) OutTraceE("SetClipper: ERROR res=%x(%s)\n", res, ExplainDDError(res)); return res; } HRESULT WINAPI extSetClipper1(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWCLIPPER lpddc) { return extSetClipper(1, pSetClipper1, lpdds, lpddc); } HRESULT WINAPI extSetClipper2(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWCLIPPER lpddc) { return extSetClipper(2, pSetClipper2, lpdds, lpddc); } HRESULT WINAPI extSetClipper3(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWCLIPPER lpddc) { return extSetClipper(3, pSetClipper3, lpdds, lpddc); } HRESULT WINAPI extSetClipper4(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWCLIPPER lpddc) { return extSetClipper(4, pSetClipper4, lpdds, lpddc); } HRESULT WINAPI extSetClipper7(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWCLIPPER lpddc) { return extSetClipper(7, pSetClipper7, lpdds, lpddc); } DDSURFACEDESC SaveSurfaceDesc; LPDIRECTDRAWSURFACE SaveSurface = NULL; LPRECT SaveLockedlpRect = NULL; RECT SaveLockedRect; LPDIRECTDRAWSURFACE SaveLockedSurface = NULL; static void PushLockedRect(LPDIRECTDRAWSURFACE lpdds, LPRECT lprect) { SaveLockedSurface = lpdds; SaveLockedlpRect = lprect; if(SaveLockedlpRect) SaveLockedRect = *lprect; } static LPRECT PopLockedRect(LPDIRECTDRAWSURFACE lpdds, LPRECT lprect) { if(lpdds == SaveLockedSurface){ SaveLockedSurface = NULL; return SaveLockedlpRect; } else return lprect; } static HRESULT WINAPI extLock(int dxversion, Lock_Type pLock, LPDIRECTDRAWSURFACE lpdds, LPRECT lprect, LPDDSURFACEDESC lpDDSurfaceDesc, DWORD flags, HANDLE hEvent) { HRESULT res; CleanRect(&lprect, __LINE__); if(IsTraceDDRAW){ BOOL IsPrim=dxwss.IsAPrimarySurface(lpdds); char sRect[81]; if (lprect) sprintf_s(sRect, 80, "(%d,%d)-(%d,%d)", lprect->left, lprect->top, lprect->right, lprect->bottom); else strcpy(sRect, "(NULL)"); OutTrace("Lock(%d): lpdds=%x%s flags=%x(%s) lpDDSurfaceDesc=%x rect=%s\n", dxversion, lpdds, (IsPrim ? "(PRIM)":""), flags, ExplainLockFlags(flags), lpDDSurfaceDesc, sRect); } PushLockedRect(lpdds, lprect); res=(*pLock)(lpdds, lprect, lpDDSurfaceDesc, flags, hEvent); if(res==DDERR_SURFACEBUSY){ // v70: fix for "Ancient Evil" (*pUnlockMethod(dxversion))(lpdds, NULL); res = (*pLock)(lpdds, lprect, lpDDSurfaceDesc, flags, hEvent); OutTraceDW("Lock SURFACEBUSY RETRY: ret=%x(%s)\n", res, ExplainDDError(res)); } if(res==DDERR_SURFACELOST){ lpdds->Restore(); res = (*pLock)(lpdds, lprect, lpDDSurfaceDesc, flags, hEvent); OutTraceDW("Lock SURFACELOST RETRY: ret=%x(%s)\n", res, ExplainDDError(res)); } if(res) OutTraceE("Lock ERROR: ret=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); OutTraceB("Lock: lPitch=%d lpSurface=%x %s\n", lpDDSurfaceDesc->lPitch, lpDDSurfaceDesc->lpSurface, LogSurfaceAttributes((LPDDSURFACEDESC2)lpDDSurfaceDesc, "[Locked]", __LINE__)); // v2.03.60: necessary for "Mech Commander 2" if(dxw.dwFlags6 & SETZBUFFERBITDEPTHS) lpDDSurfaceDesc->dwZBufferBitDepth = dxw.VirtualPixelFormat.dwRGBBitCount; if(dxw.dwFlags1 & SUPPRESSDXERRORS) res=DD_OK; if((dxw.dwFlags6 & FIXPITCH) || (dxw.dwFlags3 & MARKLOCK)){ SaveSurfaceDesc = *lpDDSurfaceDesc; SaveSurface = lpdds; } return res; } HRESULT WINAPI extLock1(LPDIRECTDRAWSURFACE lpdds, LPRECT lprect, LPDDSURFACEDESC lpDDSurfaceDesc, DWORD flags, HANDLE hEvent) { return extLock(1, pLock1, lpdds, lprect, lpDDSurfaceDesc, flags, hEvent); } HRESULT WINAPI extLock2(LPDIRECTDRAWSURFACE lpdds, LPRECT lprect, LPDDSURFACEDESC lpDDSurfaceDesc, DWORD flags, HANDLE hEvent) { return extLock(2, pLock2, lpdds, lprect, lpDDSurfaceDesc, flags, hEvent); } HRESULT WINAPI extLock3(LPDIRECTDRAWSURFACE lpdds, LPRECT lprect, LPDDSURFACEDESC lpDDSurfaceDesc, DWORD flags, HANDLE hEvent) { return extLock(3, pLock3, lpdds, lprect, lpDDSurfaceDesc, flags, hEvent); } HRESULT WINAPI extLock4(LPDIRECTDRAWSURFACE lpdds, LPRECT lprect, LPDDSURFACEDESC lpDDSurfaceDesc, DWORD flags, HANDLE hEvent) { return extLock(4, pLock4, lpdds, lprect, lpDDSurfaceDesc, flags, hEvent); } HRESULT WINAPI extLock7(LPDIRECTDRAWSURFACE lpdds, LPRECT lprect, LPDDSURFACEDESC lpDDSurfaceDesc, DWORD flags, HANDLE hEvent) { return extLock(7, pLock7, lpdds, lprect, lpDDSurfaceDesc, flags, hEvent); } LPDIRECTDRAWSURFACE2 lpDDSBuffer = NULL; static HRESULT WINAPI extLockDir(int dxversion, Lock_Type pLock, LPDIRECTDRAWSURFACE lpdds, LPRECT lprect, LPDDSURFACEDESC lpDDSurfaceDesc, DWORD flags, HANDLE hEvent) { HRESULT res, res2; static RECT client; POINT upleft={0,0}; Blt_Type pBlt; GetGDISurface_Type pGetGDISurface; // this hooker operates on // Beware!!! for strange reason, the function gets hooked to ANY surface, also non primary ones!!! // to find out whether it is the primary or not, using lpdds==lpPrimaryDD->GetGDISurface(&lpDDSPrim); if(IsTraceDDRAW){ BOOL IsPrim=dxwss.IsAPrimarySurface(lpdds); char sRect[81]; if (lprect) sprintf_s(sRect, 80, "(%d,%d)-(%d,%d)", lprect->left, lprect->top, lprect->right, lprect->bottom); else strcpy(sRect, "(NULL)"); OutTrace("Lock(%d): lpdds=%x%s flags=%x(%s) lpDDSurfaceDesc=%x rect=%s\n", dxversion, lpdds, (IsPrim ? "(PRIM)":""), flags, ExplainLockFlags(flags), lpDDSurfaceDesc, sRect); } PushLockedRect(lpdds, lprect); // v2.04.09: for IDirectDraw methods use iBakBufferVersion instead of dxversion ... pBlt = pGetBltMethod(dxversion); pGetGDISurface = pGetGDISurfaceMethod(iBakBufferVersion); // V2.02.43: Empire Earth does some test Lock operations apparently before the primary surface is created if(lpPrimaryDD){ LPDIRECTDRAWSURFACE lpDDSPrim = 0; res2=(*pGetGDISurface)(lpPrimaryDD, &lpDDSPrim); if(res2) OutTraceE("Lock: GetGDISurface ERROR res=%x(%s) at %d\n", res2, ExplainDDError(res2), __LINE__); else (*pReleaseSMethod(dxversion))(lpDDSPrim); if(lpdds==lpDDSPrim){ if(dxw.dwFlags1 & LOCKEDSURFACE){ DDSURFACEDESC2 ddsd; DDBLTFX fx; memset(&ddsd, 0, sizeof(ddsd)); ddsd.dwSize=sizeof(DDSURFACEDESC); ddsd.dwFlags = DDSD_WIDTH | DDSD_HEIGHT | DDSD_CAPS; ddsd.dwWidth = dxw.GetScreenWidth(); ddsd.dwHeight = dxw.GetScreenHeight(); ddsd.ddsCaps.dwCaps = 0; OutTraceB("Lock: %s\n", LogSurfaceAttributes(&ddsd, "[Dir FixBuf]" , __LINE__)); res=(*pCreateSurface1)(lpPrimaryDD, (DDSURFACEDESC *)&ddsd, (LPDIRECTDRAWSURFACE *)&lpDDSBuffer, 0); if(res){ OutTraceE("CreateSurface: ERROR on DDSBuffer res=%x(%s) at %d\n",res, ExplainDDError(res), __LINE__); return res; } memset(&fx, 0, sizeof(fx)); fx.dwSize=sizeof(DDBLTFX); fx.dwFillColor=0; res=(*pBlt)((LPDIRECTDRAWSURFACE)lpDDSBuffer, NULL, NULL, NULL, DDBLT_WAIT|DDBLT_COLORFILL, &fx); if(res){ OutTraceE("Blt: ERROR on DDSBuffer res=%x(%s) at %d\n",res, ExplainDDError(res), __LINE__); } lpdds=(LPDIRECTDRAWSURFACE)lpDDSBuffer; } else{ // since it can't scale, at least the updated rect is centered into the window. HWND hwnd; hwnd = dxw.GethWnd(); (*pGetClientRect)(hwnd, &client); (*pClientToScreen)(hwnd, &upleft); if (!lprect) lprect=&client; OffsetRect(lprect, upleft.x+(client.right-dxw.GetScreenWidth())/2, upleft.y+(client.bottom-dxw.GetScreenHeight())/2); OutTraceDW("Lock: NULL rect remapped to (%d,%d)-(%d,%d)\n", lprect->left, lprect->top, lprect->right, lprect->bottom); } } } res=(*pLock)(lpdds, lprect, lpDDSurfaceDesc, flags, hEvent); if(res==DDERR_SURFACEBUSY){ // v70: fix for "Ancient Evil" (*pUnlockMethod(dxversion))(lpdds, NULL); res = (*pLock)(lpdds, lprect, lpDDSurfaceDesc, flags, hEvent); OutTraceDW("Lock SURFACEBUSY RETRY: ret=%x(%s)\n", res, ExplainDDError(res)); } if(res==DDERR_SURFACELOST){ lpdds->Restore(); res = (*pLock)(lpdds, lprect, lpDDSurfaceDesc, flags, hEvent); OutTraceDW("Lock SURFACELOST RETRY: ret=%x(%s)\n", res, ExplainDDError(res)); } if(res) OutTraceE("Lock ERROR: ret=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); OutTraceB("Lock: lPitch=%d lpSurface=%x %s\n", lpDDSurfaceDesc->lPitch, lpDDSurfaceDesc->lpSurface, LogSurfaceAttributes((LPDDSURFACEDESC2)lpDDSurfaceDesc, "[Locked]", __LINE__)); // v2.03.60: necessary for "Mech Commander 2" if(dxw.dwFlags6 & SETZBUFFERBITDEPTHS) lpDDSurfaceDesc->dwZBufferBitDepth = dxw.VirtualPixelFormat.dwRGBBitCount; if(dxw.dwFlags1 & SUPPRESSDXERRORS) res=DD_OK; if((dxw.dwFlags6 & FIXPITCH) || (dxw.dwFlags3 & MARKLOCK)){ SaveSurfaceDesc = *lpDDSurfaceDesc; SaveSurface = lpdds; } return res; } HRESULT WINAPI extLockDir1(LPDIRECTDRAWSURFACE lpdds, LPRECT lprect, LPDDSURFACEDESC lpDDSurfaceDesc, DWORD flags, HANDLE hEvent) { return extLockDir(1, pLock1, lpdds, lprect, lpDDSurfaceDesc, flags, hEvent); } HRESULT WINAPI extLockDir2(LPDIRECTDRAWSURFACE lpdds, LPRECT lprect, LPDDSURFACEDESC lpDDSurfaceDesc, DWORD flags, HANDLE hEvent) { return extLockDir(2, pLock2, lpdds, lprect, lpDDSurfaceDesc, flags, hEvent); } HRESULT WINAPI extLockDir3(LPDIRECTDRAWSURFACE lpdds, LPRECT lprect, LPDDSURFACEDESC lpDDSurfaceDesc, DWORD flags, HANDLE hEvent) { return extLockDir(3, pLock3, lpdds, lprect, lpDDSurfaceDesc, flags, hEvent); } HRESULT WINAPI extLockDir4(LPDIRECTDRAWSURFACE lpdds, LPRECT lprect, LPDDSURFACEDESC lpDDSurfaceDesc, DWORD flags, HANDLE hEvent) { return extLockDir(4, pLock4, lpdds, lprect, lpDDSurfaceDesc, flags, hEvent); } HRESULT WINAPI extLockDir7(LPDIRECTDRAWSURFACE lpdds, LPRECT lprect, LPDDSURFACEDESC lpDDSurfaceDesc, DWORD flags, HANDLE hEvent) { return extLockDir(7, pLock7, lpdds, lprect, lpDDSurfaceDesc, flags, hEvent); } #define MARK16COLOR 0x7C1F #define MARK32COLOR 0x00FF00FF static HRESULT WINAPI extUnlock(int dxversion, Unlock4_Type pUnlock, LPDIRECTDRAWSURFACE lpdds, LPRECT lprect) { HRESULT res; BOOL IsPrim; BOOL IsBack; Blt_Type pBlt; RECT rect; IsPrim=dxwss.IsAPrimarySurface(lpdds); IsBack=dxwss.IsABackBufferSurface(lpdds); if(IsTraceDDRAW){ char sRect[81]; switch(dxversion){ case 1: case 2: case 3: sprintf_s(sRect, 80, "lpvoid=%x", lprect); break; case 4: case 7: if (lprect) sprintf_s(sRect, 80, "rect=(%d,%d)-(%d,%d)", lprect->left, lprect->top, lprect->right, lprect->bottom); else strcpy(sRect, "rect=(NULL)"); break; } OutTrace("Unlock(%d): lpdds=%x%s %s\n", dxversion, lpdds, (IsPrim ? "(PRIM)": (IsBack ? "(BACK)" : "")), sRect); } if ((dxw.dwFlags8 & ZBUFFERHARDCLEAN) && dxwss.IsAZBufferSurface(lpdds)){ DWORD dwSize = (dxversion<4)?sizeof(DDSURFACEDESC):sizeof(DDSURFACEDESC2); DDSURFACEDESC2 ddsd; memset(&ddsd, 0, dwSize); ddsd.dwSize = dwSize; res=(*pUnlock)(lpdds, NULL); if(res) OutTraceDW("Unlock ZBUFFER: Unlock err=%x at %d\n", res, __LINE__); res=(*pLockMethod(dxversion))(lpdds, NULL, (LPDDSURFACEDESC)&ddsd, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY, 0); if(res) OutTraceDW("Unlock ZBUFFER: Lock err=%x at %d\n", res, __LINE__); memset(ddsd.lpSurface, 0xFF, ZBufferSize); res=(*pUnlock)(lpdds, lprect); if(res) OutTraceDW("Unlock ZBUFFER: Unlock err=%x at %d\n", res, __LINE__); return res; } switch(dxversion){ case 4: // v2.02.92: found in Fifa 2000: lpRect is completely ignored, receiving bogus values like (-1, -1, -1, -1} // or {0, 0, 0, 0}, or {-109119151, -109119151, -109119151, -109119151}. // better use the Lock-ed rect // v2.04.21: the fix is proper only when lprect is not NULL, when NULL better leave it unaltered. // Fixing the lprect value unconditionally breaks "Shadow Watch" text blitting on game menus. if(lprect) lprect = PopLockedRect(lpdds, lprect); break; case 7: if(lprect){ rect = *lprect; lprect = ▭ // v2.03.20: apparently, it seems that in ddraw 7 you can set an empty rectangle to mean the whole area .... // this fixes the black screen otherwise present in "Arcanum". if(IsPrim && ((lprect->right - lprect->left) == 0) && ((lprect->bottom - lprect->top) == 0)) lprect = NULL; } break; } if((dxw.dwFlags6 & FIXPITCH) && !(IsPrim||IsBack) && (lpdds == SaveSurface)){ OutTrace("DEBUG: fixing lpdds=%x size=(%dx%d) surface=%x pitch=%d bpp=%d\n", lpdds, SaveSurfaceDesc.dwWidth, SaveSurfaceDesc.dwHeight, SaveSurfaceDesc.lpSurface, SaveSurfaceDesc.lPitch, SaveSurfaceDesc.ddpfPixelFormat.dwRGBBitCount); int y; LONG lVirtualPitch; LPVOID p1, p2; lVirtualPitch = (((SaveSurfaceDesc.dwWidth+1)>>1) * SaveSurfaceDesc.ddpfPixelFormat.dwRGBBitCount) >> 2; if(lVirtualPitch != SaveSurfaceDesc.lPitch){ // do just if necessary ... for (y=SaveSurfaceDesc.dwHeight-1; y; y--){ // for each scan line ... p1 = (LPVOID)((DWORD)SaveSurfaceDesc.lpSurface + (y * lVirtualPitch)); p2 = (LPVOID)((DWORD)SaveSurfaceDesc.lpSurface + (y * SaveSurfaceDesc.lPitch)); memcpy(p2, p1, SaveSurfaceDesc.lPitch); // copy line to correct offset } } } if((dxw.dwFlags3 & MARKLOCK) && !(IsPrim||IsBack) && (lpdds == SaveSurface)){ switch(SaveSurfaceDesc.ddpfPixelFormat.dwRGBBitCount){ case 16: for (UINT y=0; yleft, lprect->top, lprect->right, lprect->bottom); else strcpy(sRect, "rect=(NULL)"); break; } OutTrace("Unlock(%d): lpdds=%x%s %s\n", dxversion, lpdds, (IsPrim ? "(PRIM)": (IsBack ? "(BACK)" : "")), sRect); } if ((dxw.dwFlags8 & ZBUFFERHARDCLEAN) && dxwss.IsAZBufferSurface(lpdds)){ DWORD dwSize = (dxversion<4)?sizeof(DDSURFACEDESC):sizeof(DDSURFACEDESC2); DDSURFACEDESC2 ddsd; memset(&ddsd, 0, dwSize); ddsd.dwSize = dwSize; res=(*pUnlock)(lpdds, NULL); if(res) OutTraceDW("Unlock ZBUFFER: Unlock err=%x at %d\n", res, __LINE__); res=(*pLockMethod(dxversion))(lpdds, NULL, (LPDDSURFACEDESC)&ddsd, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY, 0); if(res) OutTraceDW("Unlock ZBUFFER: Lock err=%x at %d\n", res, __LINE__); memset(ddsd.lpSurface, 0xFF, ZBufferSize); res=(*pUnlock)(lpdds, lprect); if(res) OutTraceDW("Unlock ZBUFFER: Unlock err=%x at %d\n", res, __LINE__); return res; } switch(dxversion){ case 4: // v2.02.92: found in Fifa 2000: lpRect is completely ignored, receiving bogus values like (-1, -1, -1, -1} // or {0, 0, 0, 0}, or {-109119151, -109119151, -109119151, -109119151}. // better use the Lock-ed rect // v2.04.21: the fix is proper only when lprect is not NULL, when NULL better leave it unaltered. // Fixing the lprect value unconditionally breaks "Shadow Watch" text blitting on game menus. if(lprect) lprect = PopLockedRect(lpdds, lprect); break; case 7: if(lprect){ rect = *lprect; lprect = ▭ // v2.03.20: apparently, it seems that in ddraw 7 you can set an empty rectangle to mean the whole area .... // this fixes the black screen otherwise present in "Arcanum". if(IsPrim && ((lprect->right - lprect->left) == 0) && ((lprect->bottom - lprect->top) == 0)) lprect = NULL; } break; } // v2.04.09: for IDirectDraw methods use iBakBufferVersion instead of dxversion ... pBlt = pGetBltMethod(dxversion); if(dxw.dwFlags1 & LOCKEDSURFACE){ LPDIRECTDRAWSURFACE lpDDSPrim = 0; GetGDISurface_Type pGetGDISurface = pGetGDISurfaceMethod(iBakBufferVersion); (*pGetGDISurface)(lpPrimaryDD, &lpDDSPrim); if(lpdds==lpDDSPrim && lpDDSBuffer){ RECT client; POINT upleft={0,0}; (*pGetClientRect)(dxw.GethWnd(), &client); (*pClientToScreen)(dxw.GethWnd(), &upleft); if (!lprect) lprect=&client; OffsetRect(lprect, upleft.x, upleft.y); res=(*pUnlock)((LPDIRECTDRAWSURFACE)lpDDSBuffer, lprect); (*pBlt)(lpdds, lprect, (LPDIRECTDRAWSURFACE)lpDDSBuffer, NULL, DDBLT_WAIT, 0); (*pReleaseSMethod(dxversion))((LPDIRECTDRAWSURFACE)lpDDSBuffer); lpDDSBuffer = NULL; } (*pReleaseSMethod(dxversion))(lpDDSPrim); // to leave a correct refcount } res=(*pUnlock)(lpdds, lprect); if(res==DDERR_NOTLOCKED) res=DD_OK; // ignore not locked error if (IsPrim && res==DD_OK) { if(dxversion < 4) lprect=NULL; // v2.03.60 res=sBlt(dxversion, pBlt, "Unlock", lpdds, lprect, lpdds, lprect, NULL, 0, FALSE); } if (res) OutTraceE("Unlock ERROR res=%x(%s) at %d\n",res, ExplainDDError(res), __LINE__); if(dxw.dwFlags1 & SUPPRESSDXERRORS) res=DD_OK; if((dxw.dwFlags5 & TEXTUREMASK) && (!IsPrim)) { // Texture Handling on Unlock TextureHandling(lpdds, dxversion); } OutTraceB("Unlock OK\n"); return res; } HRESULT WINAPI extUnlockDir1(LPDIRECTDRAWSURFACE lpdds, LPVOID lpvoid) { return extUnlockDir(1, (Unlock4_Type)pUnlock1, lpdds, (LPRECT)lpvoid); } HRESULT WINAPI extUnlockDir2(LPDIRECTDRAWSURFACE lpdds, LPVOID lpvoid) { return extUnlockDir(2, (Unlock4_Type)pUnlock2, lpdds, (LPRECT)lpvoid); } HRESULT WINAPI extUnlockDir3(LPDIRECTDRAWSURFACE lpdds, LPVOID lpvoid) { return extUnlockDir(3, (Unlock4_Type)pUnlock3, lpdds, (LPRECT)lpvoid); } HRESULT WINAPI extUnlockDir4(LPDIRECTDRAWSURFACE lpdds, LPRECT lprect) { return extUnlockDir(4, pUnlock4, lpdds, lprect); } HRESULT WINAPI extUnlockDir7(LPDIRECTDRAWSURFACE lpdds, LPRECT lprect) { return extUnlockDir(7, pUnlock7, lpdds, lprect); } /* to do: instead of calling GDI GetDC, try to map GetDC with Lock and ReleaseDC with Unlock, returning the surface memory ptr (???) as HDC and avoiding the consistency check performed by surface::GetDC (why should it bother if the screen is 32BPP and the surface is not??? */ static HRESULT WINAPI extGetDC(int dxversion, GetDC_Type pGetDC, LPDIRECTDRAWSURFACE lpdds, HDC FAR *pHDC) { HRESULT res; BOOL IsPrim; IsPrim=dxwss.IsAPrimarySurface(lpdds); OutTraceDDRAW("GetDC: lpdss=%x%s\n",lpdds, IsPrim?"(PRIM)":""); // In non-emulated mode, better return the window DC rather than the actual primary surfce DC, // because that would refer to the whole desktop if (!(dxw.dwFlags1 & EMULATESURFACE) && IsPrim) { *pHDC = (*pGDIGetDC)(dxw.GethWnd()); return DD_OK; } res=(*pGetDC)(lpdds, pHDC); if (res==DDERR_CANTCREATEDC && (dxw.dwFlags1 & EMULATESURFACE) && dxw.VirtualPixelFormat.dwRGBBitCount==8) { // for 8BPP palettized surfaces, connect them to either the ddraw emulated palette or the GDI emulated palette OutTraceDW("GetDC: adding 8BPP palette to surface lpdds=%x\n", lpdds); if(lpDDP==NULL){ // should link here to the GDI palette? See Hyperblade.... dxw.palNumEntries=256; res=(*pCreatePaletteMethod(dxversion))(lpPrimaryDD, DDPCAPS_ALLOW256|DDPCAPS_8BIT|DDPCAPS_INITIALIZE, dxw.palPalEntry, &lpDDP, NULL); if (res) { OutTraceE("GetDC: CreatePalette ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); return res; } } res=(*pSetPaletteMethod(dxversion))(lpdds, lpDDP); if (res) { OutTraceE("GetDC: SetPalette ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); return res; } iDDPExtraRefCounter++; // retry .... res=(*pGetDC)(lpdds, pHDC); } OutTraceDDRAW("GetDC: res=%x(%s) hdc=%x\n", res, ExplainDDError(res), *pHDC); return res; } HRESULT WINAPI extGetDC1(LPDIRECTDRAWSURFACE lpdds, HDC FAR *pHDC) { return extGetDC(1, pGetDC1, lpdds, pHDC); } HRESULT WINAPI extGetDC2(LPDIRECTDRAWSURFACE lpdds, HDC FAR *pHDC) { return extGetDC(2, pGetDC2, lpdds, pHDC); } HRESULT WINAPI extGetDC3(LPDIRECTDRAWSURFACE lpdds, HDC FAR *pHDC) { return extGetDC(3, pGetDC3, lpdds, pHDC); } HRESULT WINAPI extGetDC4(LPDIRECTDRAWSURFACE lpdds, HDC FAR *pHDC) { return extGetDC(4, pGetDC4, lpdds, pHDC); } HRESULT WINAPI extGetDC7(LPDIRECTDRAWSURFACE lpdds, HDC FAR *pHDC) { return extGetDC(7, pGetDC7, lpdds, pHDC); } HRESULT WINAPI extReleaseDC(int dxversion, ReleaseDC_Type pReleaseDC, LPDIRECTDRAWSURFACE lpdds, HDC FAR hdc) { HRESULT res; BOOL IsPrim; IsPrim=dxwss.IsAPrimarySurface(lpdds); OutTraceDDRAW("ReleaseDC: lpdss=%x%s hdc=%x\n",lpdds, IsPrim?"(PRIM)":"", hdc); res=(*pReleaseDC)(lpdds, hdc); if((IsPrim) && (dxw.dwFlags1 & EMULATESURFACE)) { Blt_Type pBlt; GetGDISurface_Type pGetGDISurface; // v2.04.09: for IDirectDraw methods use iBakBufferVersion instead of dxversion ... pBlt = pGetBltMethod(dxversion); pGetGDISurface = pGetGDISurfaceMethod(iBakBufferVersion); sBlt(dxversion, pBlt, "ReleaseDC", lpdds, NULL, lpdds, NULL, 0, NULL, FALSE); } if (res) OutTraceE("ReleaseDC: ERROR res=%x(%s)\n", res, ExplainDDError(res)); if(dxw.dwFlags1 & SUPPRESSDXERRORS) res=DD_OK; return res; } HRESULT WINAPI extReleaseDC1(LPDIRECTDRAWSURFACE lpdds, HDC FAR hdc) { return extReleaseDC(1, pReleaseDC1, lpdds, hdc); } HRESULT WINAPI extReleaseDC2(LPDIRECTDRAWSURFACE lpdds, HDC FAR hdc) { return extReleaseDC(2, pReleaseDC2, lpdds, hdc); } HRESULT WINAPI extReleaseDC3(LPDIRECTDRAWSURFACE lpdds, HDC FAR hdc) { return extReleaseDC(3, pReleaseDC3, lpdds, hdc); } HRESULT WINAPI extReleaseDC4(LPDIRECTDRAWSURFACE lpdds, HDC FAR hdc) { return extReleaseDC(4, pReleaseDC4, lpdds, hdc); } HRESULT WINAPI extReleaseDC7(LPDIRECTDRAWSURFACE lpdds, HDC FAR hdc) { return extReleaseDC(7, pReleaseDC7, lpdds, hdc); } HRESULT WINAPI extFlipToGDISurface(FlipToGDISurface_Type pFlipToGDISurface, LPDIRECTDRAW lpdd) { // HRESULT res; OutTraceDDRAW("FlipToGDISurface: lpdd=%x\n", lpdd); // to revise: so far, it seems the best thing to do is NOTHING, just return 0. // res=(*pFlipToGDISurface)(lpdd); // if (res) OutTraceE("FlipToGDISurface: ERROR res=%x(%s), skipping\n", res, ExplainDDError(res)); // pretend you flipped anyway.... if(dxw.dwFlags6 & SHAREDDC) bFlippedDC = TRUE; return DD_OK; } HRESULT WINAPI extFlipToGDISurface1(LPDIRECTDRAW lpdd) { return extFlipToGDISurface(pFlipToGDISurface1, lpdd); } HRESULT WINAPI extFlipToGDISurface2(LPDIRECTDRAW lpdd) { return extFlipToGDISurface(pFlipToGDISurface2, lpdd); } HRESULT WINAPI extFlipToGDISurface3(LPDIRECTDRAW lpdd) { return extFlipToGDISurface(pFlipToGDISurface3, lpdd); } HRESULT WINAPI extFlipToGDISurface4(LPDIRECTDRAW lpdd) { return extFlipToGDISurface(pFlipToGDISurface4, lpdd); } HRESULT WINAPI extFlipToGDISurface7(LPDIRECTDRAW lpdd) { return extFlipToGDISurface(pFlipToGDISurface7, lpdd); } HRESULT WINAPI extGetGDISurface(int dxversion, GetGDISurface_Type pGetGDISurface, LPDIRECTDRAW lpdd, LPDIRECTDRAWSURFACE *w) { int res; OutTraceDDRAW("GetGDISurface(%d): lpdd=%x\n", dxversion, lpdd); // v2.02.31: // in EMULATED mode, should not return the actual ddraw primary surface, but the virtual one. if(dxw.dwFlags1 & EMULATESURFACE){ *w=dxwss.GetPrimarySurface(); OutTraceDW("GetGDISurface: EMULATED lpdd=%x w=%x\n", lpdd, *w); return DD_OK; } res=(*pGetGDISurface)(lpdd, w); if (res) { OutTraceE("GetGDISurface: ERROR lpdd=%x res=%x(%s)\n", lpdd, res, ExplainDDError(res)); } else { OutTraceDDRAW("GetGDISurface: lpdd=%x w=%x\n", lpdd, *w); } return res; } HRESULT WINAPI extGetGDISurface1(LPDIRECTDRAW lpdd, LPDIRECTDRAWSURFACE *w) { return extGetGDISurface(1, pGetGDISurface1, lpdd, w); } HRESULT WINAPI extGetGDISurface2(LPDIRECTDRAW lpdd, LPDIRECTDRAWSURFACE *w) { return extGetGDISurface(2, pGetGDISurface2, lpdd, w); } HRESULT WINAPI extGetGDISurface3(LPDIRECTDRAW lpdd, LPDIRECTDRAWSURFACE *w) { return extGetGDISurface(3, pGetGDISurface3, lpdd, w); } HRESULT WINAPI extGetGDISurface4(LPDIRECTDRAW lpdd, LPDIRECTDRAWSURFACE *w) { return extGetGDISurface(4, pGetGDISurface4, lpdd, w); } HRESULT WINAPI extGetGDISurface7(LPDIRECTDRAW lpdd, LPDIRECTDRAWSURFACE *w) { return extGetGDISurface(7, pGetGDISurface7, lpdd, w); } // debug function to dump all video modes queried by the DirectDrav::EnumDisplayModes method HRESULT WINAPI EnumModesCallbackDumper(LPDDSURFACEDESC lpDDSurfaceDesc, LPVOID lpContext) { OutTrace("EnumModesCallback:\n"); OutTrace("\tdwSize=%d\n", lpDDSurfaceDesc->dwSize); OutTrace("\tddpfPixelFormat depth=%d rgba=(%X-%X-%X-%X)\n", lpDDSurfaceDesc->ddpfPixelFormat.dwRGBBitCount, lpDDSurfaceDesc->ddpfPixelFormat.dwRBitMask, lpDDSurfaceDesc->ddpfPixelFormat.dwGBitMask, lpDDSurfaceDesc->ddpfPixelFormat.dwBBitMask, lpDDSurfaceDesc->ddpfPixelFormat.dwRGBAlphaBitMask); OutTrace("\tdwFlags=%x(%s)\n", lpDDSurfaceDesc->dwFlags, ExplainFlags(lpDDSurfaceDesc->dwFlags)); OutTrace("\tdwWidth x dwHeight=(%d,%d)\n", lpDDSurfaceDesc->dwWidth, lpDDSurfaceDesc->dwHeight); OutTrace("\tlPitch=%d\n", lpDDSurfaceDesc->lPitch); //OutTrace("\tdwBackBufferCount=%d\n", lpDDSurfaceDesc->dwBackBufferCount); OutTrace("\tdwRefreshRate=%d\n", lpDDSurfaceDesc->dwRefreshRate); //OutTrace("\tlpSurface=%x\n", lpDDSurfaceDesc->lpSurface); //OutTrace("\tCaps=%x(%s)\n", lpDDSurfaceDesc->ddsCaps.dwCaps, ExplainDDSCaps(lpDDSurfaceDesc->ddsCaps.dwCaps)); //if ((NewContext_Type *)lpContext->dxversion >= 4) { // OutTrace("\tddpfPixelFormat %s\n", DumpPixelFormat((LPDDSURFACEDESC2)lpDDSurfaceDesc)); //} #ifdef FULLHEXDUMP OutTrace("DDSurfaceDesc="); OutTraceHex((BYTE *)lpDDSurfaceDesc, sizeof(DDSURFACEDESC)); #endif return DDENUMRET_OK; } typedef HRESULT (WINAPI *EnumModesCallback_Type)(LPDDSURFACEDESC, LPVOID); typedef struct { LPVOID lpContext; EnumModesCallback_Type lpCallback; DWORD dwWidth; DWORD dwHeight; int dxversion; } NewContext_Type; static BOOL CheckResolutionLimit(LPDDSURFACEDESC lpDDSurfaceDesc) { if(dxw.dwFlags4 & LIMITSCREENRES) { #define HUGE 100000 DWORD maxw, maxh; maxw=HUGE; maxh=HUGE; switch(dxw.MaxScreenRes){ case DXW_LIMIT_320x200: maxw=320; maxh=200; break; case DXW_LIMIT_640x480: maxw=640; maxh=480; break; case DXW_LIMIT_800x600: maxw=800; maxh=600; break; case DXW_LIMIT_1024x768: maxw=1024; maxh=768; break; case DXW_LIMIT_1280x960: maxw=1280; maxh=960; break; } if((lpDDSurfaceDesc->dwWidth > maxw) || (lpDDSurfaceDesc->dwHeight > maxh)){ OutTraceDW("EnumDisplaySettings: hide device mode=(%d,%d)\n", maxw, maxh); return TRUE; } } if(dxw.dwFlags7 & MAXIMUMRES) { if((lpDDSurfaceDesc->dwWidth > (DWORD)dxw.iMaxW) || (lpDDSurfaceDesc->dwHeight > (DWORD)dxw.iMaxH)){ OutTraceDW("EnumDisplaySettings: hide device mode=(%d,%d)\n", dxw.iMaxW, dxw.iMaxH); return TRUE; } } return FALSE; } HRESULT WINAPI myEnumModesFilterDirect(LPDDSURFACEDESC lpDDSurfaceDesc, LPVOID lpContext) { HRESULT res; SupportedRes_Type *SupportedRes; if ((((NewContext_Type *)lpContext)->dwHeight != lpDDSurfaceDesc->dwHeight) || (((NewContext_Type *)lpContext)->dwWidth != lpDDSurfaceDesc->dwWidth)) return DDENUMRET_OK; if (IsDebug) EnumModesCallbackDumper(lpDDSurfaceDesc, NULL); // tricky part: for each color depth related to current video resolution, fake each of the // supported resolutions, unless is greater than maximum allowed SupportedRes = (dxw.dwFlags4 & SUPPORTHDTV) ? &SupportedHDTVRes[0] : &SupportedSVGARes[0]; for (int ResIdx=0; SupportedRes[ResIdx].h; ResIdx++){ lpDDSurfaceDesc->dwHeight=SupportedRes[ResIdx].h; lpDDSurfaceDesc->dwWidth=SupportedRes[ResIdx].w; if(CheckResolutionLimit(lpDDSurfaceDesc)) return DDENUMRET_OK; res=(*((NewContext_Type *)lpContext)->lpCallback)(lpDDSurfaceDesc, ((NewContext_Type *)lpContext)->lpContext); OutTraceDW("EnumDisplayModes(D): proposed size[%d]=(%d,%d) res=%x\n", ResIdx, SupportedRes[ResIdx].w, SupportedRes[ResIdx].h, res); if(res==DDENUMRET_CANCEL) break; } return res; } HRESULT WINAPI myEnumModesFilterNative(LPDDSURFACEDESC lpDDSurfaceDesc, LPVOID lpContext) { HRESULT res; if (IsDebug) EnumModesCallbackDumper(lpDDSurfaceDesc, NULL); if (dxw.dwFlags1 & PREVENTMAXIMIZE){ // if PREVENTMAXIMIZE is set, don't let the caller know about forbidden screen settings. if((lpDDSurfaceDesc->dwHeight > dxw.GetScreenHeight()) || (lpDDSurfaceDesc->dwWidth > dxw.GetScreenWidth())){ OutTraceDW("EnumDisplayModes: skipping screen size=(%d,%d)\n", lpDDSurfaceDesc->dwHeight, lpDDSurfaceDesc->dwWidth); return DDENUMRET_OK; } } if(CheckResolutionLimit(lpDDSurfaceDesc)) return DDENUMRET_OK; res=(*((NewContext_Type *)lpContext)->lpCallback)(lpDDSurfaceDesc, ((NewContext_Type *)lpContext)->lpContext); OutTraceDW("EnumDisplayModes(D): native size=(%d,%d) bpp=%d res=%x\n", lpDDSurfaceDesc->dwWidth, lpDDSurfaceDesc->dwHeight, lpDDSurfaceDesc->ddpfPixelFormat.dwRGBBitCount, res); return res; } static char *sDisplayModesFlags(DWORD dwFlags) { static char sBuf[81]; size_t l; strcpy(sBuf, "DDEDM_"); if(dwFlags & DDEDM_REFRESHRATES) strcat(sBuf, "REFRESHRATES+"); if(dwFlags & DDEDM_STANDARDVGAMODES) strcat(sBuf, "STANDARDVGAMODES+"); l=strlen(sBuf); if (l>strlen("DDEDM_")) sBuf[l-1]=0; // delete last '+' if any else sBuf[0]=0; return(sBuf); } HRESULT WINAPI extEnumDisplayModes(int dxversion, EnumDisplayModes1_Type pEnumDisplayModes, LPDIRECTDRAW lpdd, DWORD dwflags, LPDDSURFACEDESC lpddsd, LPVOID lpContext, LPDDENUMMODESCALLBACK cb) { HRESULT res; SupportedRes_Type *SupportedRes; NewContext_Type NewContext; OutTraceDDRAW("EnumDisplayModes(D%d): lpdd=%x flags=%x lpddsd=%x callback=%x\n", dxversion, lpdd, dwflags, lpddsd, cb); if(lpddsd) OutTraceDDRAW("EnumDisplayModes(D): %s\n", LogSurfaceAttributes((LPDDSURFACEDESC2)lpddsd, "EnumDisplayModes", __LINE__)); if ((dxw.dwFlags4 & NATIVERES) || (!(dxw.dwFlags1 & EMULATESURFACE) && !dxw.Windowize)){ // v2.04.14 - make nonemulated nonwindowed mode work ... NewContext.dwWidth = 0; NewContext.dwHeight = 0; NewContext.lpContext = lpContext; NewContext.lpCallback = cb; NewContext.dxversion = dxversion; res=(*pEnumDisplayModes)(lpdd, dwflags, lpddsd, &NewContext, myEnumModesFilterNative); if(res) OutTraceE("EnumDisplayModes(D): ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); return res; } // note: extEnumDisplayModes serves both the EnumDisplayModes and EnumDisplayModes2 interfaces: // they differ for the lpddsd argument that should point to either DDSURFACEDESC or DDSURFACEDESC2 // structures, but unification is possible if the lpddsd->dwSize is properly set and is left untouched. if((dxw.dwFlags1 & EMULATESURFACE)){ int SupportedDepths[5]={8,16,24,32,0}; int ResIdx, DepthIdx; DDSURFACEDESC2 EmuDesc; DWORD dwSize; EmuDesc.dwRefreshRate = 0; EmuDesc.ddpfPixelFormat.dwFlags = DDPF_RGB; if (lpddsd) dwSize=lpddsd->dwSize; // sizeof either DDSURFACEDESC or DDSURFACEDESC2 !!! else dwSize= (dxversion < 4) ? sizeof(DDSURFACEDESC) : sizeof(DDSURFACEDESC2); memset(&EmuDesc, 0, dwSize); EmuDesc.dwSize=dwSize; EmuDesc.dwFlags=DDSD_PIXELFORMAT|DDSD_REFRESHRATE|DDSD_WIDTH|DDSD_HEIGHT|DDSD_PITCH; SupportedRes = (dxw.dwFlags4 & SUPPORTHDTV) ? &SupportedHDTVRes[0] : &SupportedSVGARes[0]; res=DD_OK; for (ResIdx=0; SupportedRes[ResIdx].h; ResIdx++){ EmuDesc.dwHeight=SupportedRes[ResIdx].h; EmuDesc.dwWidth=SupportedRes[ResIdx].w; if(CheckResolutionLimit((LPDDSURFACEDESC)&EmuDesc)) break; EmuDesc.ddpfPixelFormat.dwSize=sizeof(DDPIXELFORMAT); EmuDesc.ddpfPixelFormat.dwFlags=DDPF_RGB; for (DepthIdx=0; SupportedDepths[DepthIdx]; DepthIdx++) { // v2.03.24: if lpddsd is not null, compatible colr depth must be selected. Skip incompatible ones. // Fixes "Total Annihilation Kingdoms" crash if(lpddsd && (lpddsd->dwFlags & DDSD_PIXELFORMAT) && (lpddsd->ddpfPixelFormat.dwRGBBitCount != SupportedDepths[DepthIdx])) continue; EmuDesc.ddpfPixelFormat.dwRGBBitCount=SupportedDepths[DepthIdx]; EmuDesc.lPitch=SupportedRes[ResIdx].w * SupportedDepths[DepthIdx] / 8; FixPixelFormat(EmuDesc.ddpfPixelFormat.dwRGBBitCount, &(EmuDesc.ddpfPixelFormat)); if(IsDebug) EnumModesCallbackDumper((LPDDSURFACEDESC)&EmuDesc, lpContext); res=(*cb)((LPDDSURFACEDESC)&EmuDesc, lpContext); if(res==DDENUMRET_CANCEL) break; } if(res==DDENUMRET_CANCEL) break; } res=DD_OK; } else{ DDSURFACEDESC2 EmuDesc; memset(&EmuDesc, 0, sizeof(EmuDesc)); EmuDesc.dwSize = sizeof(DDSURFACEDESC); // using release 1 type .... res=myGetDisplayMode(dxversion, lpdd, (LPDDSURFACEDESC)&EmuDesc); if(res){ OutTraceE("EnumDisplayModes(D): GetDisplayMode ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); return res; } NewContext_Type NewContext; NewContext.dwWidth = EmuDesc.dwWidth; NewContext.dwHeight = EmuDesc.dwHeight; NewContext.lpContext=lpContext; NewContext.lpCallback=cb; res=(*pEnumDisplayModes)(lpdd, dwflags, lpddsd, &NewContext, myEnumModesFilterDirect); } if(res) OutTraceE("EnumDisplayModes(D): ERROR res=%x(%s)\n", res, ExplainDDError(res)); return res; } HRESULT WINAPI extEnumDisplayModes1(LPDIRECTDRAW lpdd, DWORD dwflags, LPDDSURFACEDESC lpddsd, LPVOID lpContext, LPDDENUMMODESCALLBACK cb) { return extEnumDisplayModes(1, pEnumDisplayModes1, lpdd, dwflags, lpddsd, lpContext, cb); } HRESULT WINAPI extEnumDisplayModes2(LPDIRECTDRAW lpdd, DWORD dwflags, LPDDSURFACEDESC lpddsd, LPVOID lpContext, LPDDENUMMODESCALLBACK cb) { return extEnumDisplayModes(2, pEnumDisplayModes2, lpdd, dwflags, lpddsd, lpContext, cb); } HRESULT WINAPI extEnumDisplayModes3(LPDIRECTDRAW lpdd, DWORD dwflags, LPDDSURFACEDESC lpddsd, LPVOID lpContext, LPDDENUMMODESCALLBACK cb) { return extEnumDisplayModes(3, pEnumDisplayModes3, lpdd, dwflags, lpddsd, lpContext, cb); } HRESULT WINAPI extEnumDisplayModes4(LPDIRECTDRAW lpdd, DWORD dwflags, LPDDSURFACEDESC2 lpddsd, LPVOID lpContext, LPDDENUMMODESCALLBACK2 cb) { return extEnumDisplayModes(4, (EnumDisplayModes1_Type)pEnumDisplayModes4, lpdd, dwflags, (LPDDSURFACEDESC)lpddsd, lpContext, (LPDDENUMMODESCALLBACK)cb); } HRESULT WINAPI extEnumDisplayModes7(LPDIRECTDRAW lpdd, DWORD dwflags, LPDDSURFACEDESC2 lpddsd, LPVOID lpContext, LPDDENUMMODESCALLBACK2 cb) { return extEnumDisplayModes(7, (EnumDisplayModes1_Type)pEnumDisplayModes7, lpdd, dwflags, (LPDDSURFACEDESC)lpddsd, lpContext, (LPDDENUMMODESCALLBACK)cb); } HRESULT WINAPI extGetPixelFormat(GetPixelFormat_Type pGetPixelFormat, LPDIRECTDRAWSURFACE lpdds, LPDDPIXELFORMAT p) { DWORD res; BOOL IsPrim; IsPrim=dxwss.IsAPrimarySurface(lpdds); OutTraceDDRAW("GetPixelFormat: lpdds=%x%s\n", lpdds, IsPrim?"(PRIM)":""); res=(*pGetPixelFormat)(lpdds, p); if(res){ OutTraceE("GetPixelFormat: ERROR res=%x(%s)\n", res, ExplainDDError(res)); } else{ OutTraceDDRAW("GetPixelFormat: Flags=%x(%s) FourCC=%x BitCount=%d RGBA=(%x,%x,%x,%x)\n", p->dwFlags, ExplainPixelFormatFlags(p->dwFlags), p->dwFourCC, p->dwRGBBitCount, p->dwRBitMask, p->dwGBitMask, p->dwBBitMask, p->dwRGBAlphaBitMask ); } // fix: virtual pixel definition is helpful not only on promary surfaces, but more in general // on every surface that returns an error. It fixes "Arx Fatalis" crash. if ((dxw.dwFlags1 & EMULATESURFACE) && res){ p->dwFlags = dxw.VirtualPixelFormat.dwFlags; p->dwRGBBitCount= dxw.VirtualPixelFormat.dwRGBBitCount; p->dwRBitMask = dxw.VirtualPixelFormat.dwRBitMask; p->dwGBitMask = dxw.VirtualPixelFormat.dwGBitMask; p->dwBBitMask = dxw.VirtualPixelFormat.dwBBitMask; p->dwRGBAlphaBitMask = dxw.VirtualPixelFormat.dwRGBAlphaBitMask; OutTraceDW("GetPixelFormat: EMULATED BitCount=%d RGBA=(%x,%x,%x,%x)\n", p->dwRGBBitCount, p->dwRBitMask, p->dwGBitMask, p->dwBBitMask, p->dwRGBAlphaBitMask ); res = DD_OK; } return res; } HRESULT WINAPI extGetPixelFormat1(LPDIRECTDRAWSURFACE lpdds, LPDDPIXELFORMAT p) { return extGetPixelFormat(pGetPixelFormat1, lpdds, p); } HRESULT WINAPI extGetPixelFormat2(LPDIRECTDRAWSURFACE lpdds, LPDDPIXELFORMAT p) { return extGetPixelFormat(pGetPixelFormat2, lpdds, p); } HRESULT WINAPI extGetPixelFormat3(LPDIRECTDRAWSURFACE lpdds, LPDDPIXELFORMAT p) { return extGetPixelFormat(pGetPixelFormat3, lpdds, p); } HRESULT WINAPI extGetPixelFormat4(LPDIRECTDRAWSURFACE lpdds, LPDDPIXELFORMAT p) { return extGetPixelFormat(pGetPixelFormat4, lpdds, p); } HRESULT WINAPI extGetPixelFormat7(LPDIRECTDRAWSURFACE lpdds, LPDDPIXELFORMAT p) { return extGetPixelFormat(pGetPixelFormat7, lpdds, p); } HRESULT WINAPI extTestCooperativeLevel(TestCooperativeLevel_Type pTestCooperativeLevel, LPDIRECTDRAW lpdd) { HRESULT res; res=(*pTestCooperativeLevel)(lpdd); OutTraceB("TestCooperativeLevel: lpdd=%x res=%x(%s)\n", lpdd, res, ExplainDDError(res)); if(res==DDERR_WRONGMODE) { res=((LPDIRECTDRAW7)lpdd)->RestoreAllSurfaces(); if(res) OutTraceE("TestCooperativeLevel: RestoreAllSurfaces ERROR res=%x(%s)\n", res, ExplainDDError(res)); } if(dxw.dwFlags1 & SUPPRESSDXERRORS) res=DD_OK; return res; } HRESULT WINAPI extTestCooperativeLevel4(LPDIRECTDRAW lpdd) { return extTestCooperativeLevel(pTestCooperativeLevel4, lpdd); } HRESULT WINAPI extTestCooperativeLevel7(LPDIRECTDRAW lpdd) { return extTestCooperativeLevel(pTestCooperativeLevel7, lpdd); } HRESULT WINAPI extReleaseS(ReleaseS_Type pReleaseS, LPDIRECTDRAWSURFACE lpdds) { HRESULT res; BOOL IsPrim; BOOL IsBack; IsPrim=dxwss.IsAPrimarySurface(lpdds); IsBack=dxwss.IsABackBufferSurface(lpdds); // fix for Tetris World .... ??? if (IsBack && (dxw.dwFlags6 & SUPPRESSRELEASE)) { OutTraceDDRAW("Release(S): SUPPRESS lpdds=%x%s res=0\n", lpdds, dxwss.ExplainSurfaceRole(lpdds)); return 0; } __try { // try/except useful when using proxy dll res = (*pReleaseS)(lpdds); } __except(EXCEPTION_EXECUTE_HANDLER){ OutTraceE("Release(S): EXCEPTION lpdds=%x%s res=0\n", lpdds, dxwss.ExplainSurfaceRole(lpdds)); res = 0; } OutTraceDDRAW("Release(S): lpdds=%x%s refcount=%d\n", lpdds, dxwss.ExplainSurfaceRole(lpdds), res); if (res==0) { // common precondition // erase surface from primary or backbuffer list // v2-03-20: d3d 1-7 play a dirty trick: it Release the surface passed as argument until refcount == 0, // but then rebuilds it with the original attributes! So, better not forget them. if(IsPrim || IsBack) dxwss.UnrefSurface(lpdds); // when releasing primary surface, erase clipping region // v2.04.14: commented out, better not to! The game could close and reopen a new primary surface. // fixes "Settlers III" clipping problems // if(IsPrim && (dxw.dwFlags1 & CLIPCURSOR)) dxw.EraseClipCursor(); // clear service surface pointers if (dxw.dwFlags1 & EMULATESURFACE) { if(lpdds==lpDDSEmu_Prim) { OutTraceDW("Release(S): Clearing lpDDSEmu_Prim pointer\n"); lpDDSEmu_Prim=NULL; } if(lpdds==lpDDSEmu_Back) { OutTraceDW("Release(S): Clearing lpDDSEmu_Back pointer\n"); lpDDSEmu_Back=NULL; } } } if(dxw.dwFlags4 & RETURNNULLREF) return 0; return res; } HRESULT WINAPI extReleaseS1(LPDIRECTDRAWSURFACE lpdds) { return extReleaseS(pReleaseS1, lpdds); } HRESULT WINAPI extReleaseS2(LPDIRECTDRAWSURFACE lpdds) { return extReleaseS(pReleaseS2, lpdds); } HRESULT WINAPI extReleaseS3(LPDIRECTDRAWSURFACE lpdds) { return extReleaseS(pReleaseS3, lpdds); } HRESULT WINAPI extReleaseS4(LPDIRECTDRAWSURFACE lpdds) { return extReleaseS(pReleaseS4, lpdds); } HRESULT WINAPI extReleaseS7(LPDIRECTDRAWSURFACE lpdds) { return extReleaseS(pReleaseS7, lpdds); } static HRESULT WINAPI extSetColorKey(SetColorKey_Type pSetColorKey, LPDIRECTDRAWSURFACE lpdds, DWORD flags, LPDDCOLORKEY lpDDColorKey) { HRESULT res; BOOL IsPrim; IsPrim=dxwss.IsAPrimarySurface(lpdds); if(IsTraceDDRAW){ char sInfo[81]; if (lpDDColorKey) sprintf(sInfo, "(L:%x,H:%x)",lpDDColorKey->dwColorSpaceLowValue, lpDDColorKey->dwColorSpaceHighValue); else strcpy(sInfo, "(NULL)"); OutTrace("SetColorKey: lpdds=%x%s flags=%x(%s) colors=%s\n", lpdds, (IsPrim ? "(PRIM)" : ""), flags, ExplainColorKeyFlag(flags), sInfo); } res=(*pSetColorKey)(lpdds, flags, lpDDColorKey); if(res) OutTraceE("SetColorKey: ERROR flags=%x lpdds=%x res=%x(%s)\n", flags, lpdds, res, ExplainDDError(res)); if(dxw.dwFlags1 & SUPPRESSDXERRORS) res=DD_OK; return res; } HRESULT WINAPI extSetColorKey1(LPDIRECTDRAWSURFACE lpdds, DWORD flags, LPDDCOLORKEY lpDDColorKey) { return extSetColorKey(pSetColorKey1, lpdds, flags, lpDDColorKey); } HRESULT WINAPI extSetColorKey2(LPDIRECTDRAWSURFACE lpdds, DWORD flags, LPDDCOLORKEY lpDDColorKey) { return extSetColorKey(pSetColorKey2, lpdds, flags, lpDDColorKey); } HRESULT WINAPI extSetColorKey3(LPDIRECTDRAWSURFACE lpdds, DWORD flags, LPDDCOLORKEY lpDDColorKey) { return extSetColorKey(pSetColorKey3, lpdds, flags, lpDDColorKey); } HRESULT WINAPI extSetColorKey4(LPDIRECTDRAWSURFACE lpdds, DWORD flags, LPDDCOLORKEY lpDDColorKey) { return extSetColorKey(pSetColorKey4, lpdds, flags, lpDDColorKey); } HRESULT WINAPI extSetColorKey7(LPDIRECTDRAWSURFACE lpdds, DWORD flags, LPDDCOLORKEY lpDDColorKey) { return extSetColorKey(pSetColorKey7, lpdds, flags, lpDDColorKey); } static HRESULT WINAPI extGetColorKey(int dxversion, GetColorKey_Type pGetColorKey, LPDIRECTDRAWSURFACE lpdds, DWORD flags, LPDDCOLORKEY lpDDColorKey) { HRESULT res; BOOL IsPrim; IsPrim=dxwss.IsAPrimarySurface(lpdds); OutTraceDDRAW("GetColorKey(S%d): lpdds=%x%s flags=%x(%s)\n", dxversion, lpdds, (IsPrim ? "(PRIM)" : ""), flags, ExplainColorKeyFlag(flags)); res=(*pGetColorKey)(lpdds, flags, lpDDColorKey); if(res) OutTraceE("GetColorKey: ERROR lpdds=%x flags=%x res=%x(%s)\n", lpdds, flags, res, ExplainDDError(res)); else OutTraceDDRAW("GetColorKey: colors=(L:%x,H:%x)\n", lpDDColorKey->dwColorSpaceLowValue, lpDDColorKey->dwColorSpaceHighValue); if(dxw.dwFlags1 & SUPPRESSDXERRORS) res=DD_OK; return res; } HRESULT WINAPI extGetColorKey1(LPDIRECTDRAWSURFACE lpdds, DWORD flags, LPDDCOLORKEY lpDDColorKey) { return extGetColorKey(1, pGetColorKey1, lpdds, flags, lpDDColorKey); } HRESULT WINAPI extGetColorKey2(LPDIRECTDRAWSURFACE lpdds, DWORD flags, LPDDCOLORKEY lpDDColorKey) { return extGetColorKey(2, pGetColorKey2, lpdds, flags, lpDDColorKey); } HRESULT WINAPI extGetColorKey3(LPDIRECTDRAWSURFACE lpdds, DWORD flags, LPDDCOLORKEY lpDDColorKey) { return extGetColorKey(3, pGetColorKey3, lpdds, flags, lpDDColorKey); } HRESULT WINAPI extGetColorKey4(LPDIRECTDRAWSURFACE lpdds, DWORD flags, LPDDCOLORKEY lpDDColorKey) { return extGetColorKey(4, pGetColorKey4, lpdds, flags, lpDDColorKey); } HRESULT WINAPI extGetColorKey7(LPDIRECTDRAWSURFACE lpdds, DWORD flags, LPDDCOLORKEY lpDDColorKey) { return extGetColorKey(7, pGetColorKey7, lpdds, flags, lpDDColorKey); } static HRESULT WINAPI extEnumAttachedSurfaces(EnumAttachedSurfaces_Type pEnumAttachedSurfaces, LPDIRECTDRAWSURFACE lpdds, LPVOID lpContext, LPDDENUMSURFACESCALLBACK lpEnumSurfacesCallback) { HRESULT res; BOOL IsPrim, IsBack; IsPrim=dxwss.IsAPrimarySurface(lpdds); IsBack=dxwss.IsABackBufferSurface(lpdds); OutTraceDDRAW("EnumAttachedSurfaces: lpdds=%x%s Context=%x Callback=%x\n", lpdds, (IsPrim ? "(PRIM)":""), lpContext, lpEnumSurfacesCallback); if (IsPrim){ LPDIRECTDRAWSURFACE lpDDSBack; // A Primary surface has not backbuffer attached surfaces actually, // so don't rely on ddraw and call the callback function directly. // Needed to make Nox working. DDSURFACEDESC2 ddsd; // first, call hooked function res=(*pEnumAttachedSurfaces)(lpdds, lpContext, lpEnumSurfacesCallback); if (res) OutTraceE("EnumAttachedSurfaces: ERROR %x(%s) at %d\n", res, ExplainDDError(res), __LINE__); if(lpDDSBack = dxwss.GetBackBufferSurface()){ ddsd.dwSize=Set_dwSize_From_Surface(); res=lpDDSBack->GetSurfaceDesc((LPDDSURFACEDESC)&ddsd); if(res){ OutTraceE("EnumAttachedSurfaces: GetSurfaceDesc ERROR %x(%s)\n", res, ExplainDDError(res)); return res; } res=(lpEnumSurfacesCallback)(lpDDSBack, (LPDDSURFACEDESC)&ddsd, lpContext); OutTraceDW("EnumSurfacesCallback: on DDSBack res=%x(%s)\n", res, ExplainDDError(res)); } return DD_OK; // for Black Dahlia } if(IsBack){ LPDIRECTDRAWSURFACE lpDDSPrim; // A Primary surface has not backbuffer attached surfaces actually, // so don't rely on ddraw and call the callback function directly. // Needed to make Nox working. DDSURFACEDESC2 ddsd; // first, call hooked function res=(*pEnumAttachedSurfaces)(lpdds, lpContext, lpEnumSurfacesCallback); if (res) OutTraceE("EnumAttachedSurfaces: ERROR %x(%s) at %d\n", res, ExplainDDError(res), __LINE__); if(lpDDSPrim = dxwss.GetPrimarySurface()){ ddsd.dwSize=Set_dwSize_From_Surface(); res=lpDDSPrim->GetSurfaceDesc((LPDDSURFACEDESC)&ddsd); if(res){ OutTraceE("EnumAttachedSurfaces: GetSurfaceDesc ERROR %x(%s)\n", res, ExplainDDError(res)); return res; } res=(lpEnumSurfacesCallback)(lpDDSPrim, (LPDDSURFACEDESC)&ddsd, lpContext); OutTraceDW("EnumSurfacesCallback: on DDSPrim res=%x(%s)\n", res, ExplainDDError(res)); } return DD_OK; // for GTA (first episode, window version "gtawin.exe") } res=(*pEnumAttachedSurfaces)(lpdds, lpContext, lpEnumSurfacesCallback); if (res) OutTraceE("EnumAttachedSurfaces: ERROR %x(%s) at %d\n", res, ExplainDDError(res), __LINE__); return res; } HRESULT WINAPI extEnumAttachedSurfaces1(LPDIRECTDRAWSURFACE lpdds, LPVOID lpContext, LPDDENUMSURFACESCALLBACK lpEnumSurfacesCallback) { return extEnumAttachedSurfaces(pEnumAttachedSurfaces1, lpdds, lpContext, lpEnumSurfacesCallback); } HRESULT WINAPI extEnumAttachedSurfaces2(LPDIRECTDRAWSURFACE lpdds, LPVOID lpContext, LPDDENUMSURFACESCALLBACK lpEnumSurfacesCallback) { return extEnumAttachedSurfaces(pEnumAttachedSurfaces2, lpdds, lpContext, lpEnumSurfacesCallback); } HRESULT WINAPI extEnumAttachedSurfaces3(LPDIRECTDRAWSURFACE lpdds, LPVOID lpContext, LPDDENUMSURFACESCALLBACK lpEnumSurfacesCallback) { return extEnumAttachedSurfaces(pEnumAttachedSurfaces3, lpdds, lpContext, lpEnumSurfacesCallback); } HRESULT WINAPI extEnumAttachedSurfaces4(LPDIRECTDRAWSURFACE lpdds, LPVOID lpContext, LPDDENUMSURFACESCALLBACK lpEnumSurfacesCallback) { return extEnumAttachedSurfaces(pEnumAttachedSurfaces4, lpdds, lpContext, lpEnumSurfacesCallback); } HRESULT WINAPI extEnumAttachedSurfaces7(LPDIRECTDRAWSURFACE lpdds, LPVOID lpContext, LPDDENUMSURFACESCALLBACK lpEnumSurfacesCallback) { return extEnumAttachedSurfaces(pEnumAttachedSurfaces7, lpdds, lpContext, lpEnumSurfacesCallback); } static HRESULT WINAPI extAddAttachedSurface(AddAttachedSurface_Type pAddAttachedSurface, LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWSURFACE lpddsadd) { HRESULT res; BOOL IsPrim, IsBack; // You can add backbuffers to primary surfaces to join the flipping chain, but you can't do that // to an emulated primary surface, and you receive a DDERR_CANNOTATTACHSURFACE error code. // In that case, it's worth to try to emulate the attach, and since the Flip method is emulated, // just remember this for further handling in the Flip operation. // But beware: this holds to BACKBUFFER surfaces only, and NOT for attached ZBUFFERS or similar! // If the surface was created with DDSCAPS_BACKBUFFER/ZBUFFER capabilities, it should be in the // surface stack already, so better avoid setting unknown version and capabilities here... // Note: should DxWnd trace the difference between a potential BACK/ZBUFFER surface and an active one? // The program can create a surface with backbuffer/zbuffer capabilities, but assign the effective // role afterwards, here while performing the attach to the master surface. IsPrim=dxwss.IsAPrimarySurface(lpdds); IsBack=dxwss.IsABackBufferSurface(lpdds); OutTraceDDRAW("AddAttachedSurface: lpdds=%x%s lpddsadd=%x%s\n", lpdds, IsPrim?"(PRIM)":(IsBack?"(BACK)":""), lpddsadd, (lpddsadd==lpDDZBuffer)?"(ZBUF)":""); //if(!lpddsadd) return DDERR_CANNOTATTACHSURFACE; // to avoid a crash... res=(*pAddAttachedSurface)(lpdds, lpddsadd); if (res) { HRESULT sdres; DDSURFACEDESC2 sd; if (res) OutTraceE("AddAttachedSurface: ERROR %x(%s) at %d\n", res, ExplainDDError(res), __LINE__); sd.dwSize=Set_dwSize_From_Surface(); sdres=lpddsadd->GetSurfaceDesc((DDSURFACEDESC *)&sd); if (sdres) OutTraceE("AddAttachedSurface: GetSurfaceDesc ERROR res=%x at %d\n", sdres, __LINE__); else OutTraceDW("AddAttachedSurface: GetSurfaceDesc dwCaps=%x(%s)\n", sd.ddsCaps.dwCaps, ExplainDDSCaps(sd.ddsCaps.dwCaps)); if (IsPrim){ if (sd.ddsCaps.dwCaps & DDSCAPS_BACKBUFFER) if ((dxw.dwFlags1 & EMULATESURFACE) && (res==DDERR_CANNOTATTACHSURFACE) || (res==DDERR_NOEXCLUSIVEMODE)) OutTraceDW("AddAttachedSurface: emulating BACKBUFFER attach on PRIMARY\n"); res=DD_OK; } //else if (IsBack) { else { // v2.02.13: emulate ZBUFFER attach to backbuffer/plain surface: do nothing and return OK // this trick makes at least "Nocturne" work also in emulated mode when hardware acceleration // is set in the game "Options" menu. if (sd.ddsCaps.dwCaps & DDSCAPS_ZBUFFER) // DDSCAPS_BACKBUFFER for double buffering ??? if ((dxw.dwFlags1 & EMULATESURFACE) && (res==DDERR_CANNOTATTACHSURFACE)){ OutTraceDW("AddAttachedSurface: emulating ZBUFFER attach on %s surface\n", IsBack ? "BACKBUFFER" : "PLAIN"); res=DD_OK; } } } if (res) OutTraceE("AddAttachedSurface: ERROR %x(%s)\n", res, ExplainDDError(res)); return res; } HRESULT WINAPI extAddAttachedSurface1(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWSURFACE lpddsadd) { return extAddAttachedSurface(pAddAttachedSurface1, lpdds, lpddsadd); } HRESULT WINAPI extAddAttachedSurface2(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWSURFACE lpddsadd) { return extAddAttachedSurface(pAddAttachedSurface2, lpdds, lpddsadd); } HRESULT WINAPI extAddAttachedSurface3(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWSURFACE lpddsadd) { return extAddAttachedSurface(pAddAttachedSurface3, lpdds, lpddsadd); } HRESULT WINAPI extAddAttachedSurface4(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWSURFACE lpddsadd) { return extAddAttachedSurface(pAddAttachedSurface4, lpdds, lpddsadd); } HRESULT WINAPI extAddAttachedSurface7(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWSURFACE lpddsadd) { return extAddAttachedSurface(pAddAttachedSurface7, lpdds, lpddsadd); } static HRESULT WINAPI extDeleteAttachedSurface(DeleteAttachedSurface_Type pDeleteAttachedSurface, LPDIRECTDRAWSURFACE lpdds, DWORD dwflags, LPDIRECTDRAWSURFACE lpddsdel) { HRESULT res; OutTraceDDRAW("DeleteAttachedSurface: lpdds=%x flags=%x lpddsdel=%x\n", lpdds, dwflags, lpddsdel); res=(*pDeleteAttachedSurface)(lpdds, dwflags, lpddsdel); if(res) OutTraceE("DeleteAttachedSurface: ERROR %x(%s)\n", res, ExplainDDError(res)); if (res && dxwss.IsABackBufferSurface(lpddsdel)){ OutTraceDW("DeleteAttachedSurface: emulating surface detach lpdds=%x\n", lpddsdel); res = DD_OK; } if(dxw.dwFlags1 & SUPPRESSDXERRORS) res=DD_OK; return res; } HRESULT WINAPI extDeleteAttachedSurface1(LPDIRECTDRAWSURFACE lpdds, DWORD dwflags, LPDIRECTDRAWSURFACE lpddsdel) { return extDeleteAttachedSurface(pDeleteAttachedSurface1, lpdds, dwflags, lpddsdel); } HRESULT WINAPI extDeleteAttachedSurface2(LPDIRECTDRAWSURFACE lpdds, DWORD dwflags, LPDIRECTDRAWSURFACE lpddsdel) { return extDeleteAttachedSurface(pDeleteAttachedSurface2, lpdds, dwflags, lpddsdel); } HRESULT WINAPI extDeleteAttachedSurface3(LPDIRECTDRAWSURFACE lpdds, DWORD dwflags, LPDIRECTDRAWSURFACE lpddsdel) { return extDeleteAttachedSurface(pDeleteAttachedSurface3, lpdds, dwflags, lpddsdel); } HRESULT WINAPI extDeleteAttachedSurface4(LPDIRECTDRAWSURFACE lpdds, DWORD dwflags, LPDIRECTDRAWSURFACE lpddsdel) { return extDeleteAttachedSurface(pDeleteAttachedSurface4, lpdds, dwflags, lpddsdel); } HRESULT WINAPI extDeleteAttachedSurface7(LPDIRECTDRAWSURFACE lpdds, DWORD dwflags, LPDIRECTDRAWSURFACE lpddsdel) { return extDeleteAttachedSurface(pDeleteAttachedSurface7, lpdds, dwflags, lpddsdel); } HRESULT WINAPI cbDump(LPDDSURFACEDESC lpDDSurfaceDesc, LPVOID lpContext) { OutTraceDW("EnumDisplayModes: CALLBACK lpdds=%x Context=%x Caps=%x(%s)\n", lpDDSurfaceDesc, lpContext, lpDDSurfaceDesc->ddsCaps.dwCaps, ExplainDDSCaps(lpDDSurfaceDesc->ddsCaps.dwCaps)); return 1; } // BEWARE!!! // in order to meet Direct3D expectations, it seems that we require this policy: // when a ZBUFFER surface is created, its dwCaps value must be saved and restored identically on GetSurfaceDesc and GetCaps // A surface is known to be virtually a primary or backbuffer only by looking at the surfaces stack dxwss // On the contrary, a surface is known to be a ZBUFFER only after retrieving its capabilities with pGetCaps or pGetSurfaceDesc // hence the IsZBuf flag is set after the query and can't be reflected in the first log line! // The same comment / logic is valid also for extGetSurfaceDesc wrapper static HRESULT WINAPI extGetCapsS(int dxInterface, GetCapsS_Type pGetCapsS, LPDIRECTDRAWSURFACE lpdds, LPDDSCAPS caps) { HRESULT res; BOOL IsFixed=FALSE; int role; SurfaceDB_Type *ps; char *sLabel; ps = dxwss.GetSurface(lpdds); // BEWARE: ZBUFFER surfaces could be created automatically so that they could exist without // being regisered in surface stack. You must query the actual surface capabilities. res=(*pGetCapsS)(lpdds, caps); if(res) OutTraceE("GetCaps(S%d): ERROR lpdds=%x err=%x(%s)\n", dxInterface, lpdds, res, ExplainDDError(res)); else OutTraceDDRAW("GetCaps(S%d): lpdds=%x caps=%x(%s)\n", dxInterface, lpdds, caps->dwCaps, ExplainDDSCaps(caps->dwCaps)); sLabel=""; role = SURFACE_ROLE_UNKNOWN; if (ps) { role = ps->uRole; switch(role){ case SURFACE_ROLE_PRIMARY: sLabel="(PRIM)"; break; case SURFACE_ROLE_BACKBUFFER: sLabel="(BACK)"; break; case SURFACE_ROLE_ZBUFFER: sLabel="(ZBUF)"; break; case SURFACE_ROLE_3DREF: sLabel="(3DREF)"; break; } } else { if (caps->dwCaps & DDSCAPS_ZBUFFER) { sLabel="(ZBUF)"; role = SURFACE_ROLE_ZBUFFER; } } if(!(dxw.IsEmulated || dxw.Windowize)) return res; switch(role) { case SURFACE_ROLE_PRIMARY: IsFixed=TRUE; caps->dwCaps = SetPrimaryCaps(dxwss.GetCaps(lpdds)); break; case SURFACE_ROLE_BACKBUFFER: IsFixed=TRUE; caps->dwCaps = SetBackBufferCaps(dxwss.GetCaps(lpdds)); break; case SURFACE_ROLE_ZBUFFER: IsFixed=TRUE; caps->dwCaps = SetZBufferCaps(dxwss.GetCaps(lpdds)); break; case SURFACE_ROLE_3DREF: IsFixed=TRUE; caps->dwCaps = dxwss.GetCaps(lpdds); break; } if(IsFixed) OutTraceDW("GetCaps(S%d): lpdds=%x FIXED %s caps=%x(%s)\n", dxInterface, lpdds, sLabel, caps->dwCaps, ExplainDDSCaps(caps->dwCaps)); if(IsTraceHex) HexTrace((unsigned char *)caps, sizeof(DDSCAPS)); return res; } HRESULT WINAPI extGetCaps1S(LPDIRECTDRAWSURFACE lpdds, LPDDSCAPS caps) { return extGetCapsS(1, pGetCaps1S, lpdds, caps); } HRESULT WINAPI extGetCaps2S(LPDIRECTDRAWSURFACE lpdds, LPDDSCAPS caps) { return extGetCapsS(2, pGetCaps2S, lpdds, caps); } HRESULT WINAPI extGetCaps3S(LPDIRECTDRAWSURFACE lpdds, LPDDSCAPS caps) { return extGetCapsS(3, pGetCaps3S, lpdds, caps); } HRESULT WINAPI extGetCaps4S(LPDIRECTDRAWSURFACE lpdds, LPDDSCAPS2 caps) { return extGetCapsS(4, (GetCapsS_Type)pGetCaps4S, lpdds, (LPDDSCAPS)caps); } HRESULT WINAPI extGetCaps7S(LPDIRECTDRAWSURFACE lpdds, LPDDSCAPS2 caps) { return extGetCapsS(7, (GetCapsS_Type)pGetCaps7S, lpdds, (LPDDSCAPS)caps); } static HRESULT WINAPI extGetSurfaceDesc(int dxversion, GetSurfaceDesc_Type pGetSurfaceDesc, LPDIRECTDRAWSURFACE lpdds, LPDDSURFACEDESC lpddsd) { HRESULT res; BOOL IsFixed = FALSE; SurfaceDB_Type *ps; int role; char *sLabel; if (!pGetSurfaceDesc) { OutTraceE("GetSurfaceDesc: ERROR no hooked function\n"); return DDERR_INVALIDPARAMS; } ps = dxwss.GetSurface(lpdds); int prevsize = lpddsd->dwSize; switch(dxversion){ case 1: case 2: case 3: lpddsd->dwSize = sizeof(DDSURFACEDESC); break; case 4: case 7: lpddsd->dwSize = sizeof(DDSURFACEDESC2); break; } if(prevsize != lpddsd->dwSize) OutTraceDW("GetSurfaceDesc(%d): FIXED dwSize=%d->%d\n", dxversion, prevsize, lpddsd->dwSize); res=(*pGetSurfaceDesc)(lpdds, lpddsd); if(res) { OutTraceE("GetSurfaceDesc(%d): ERROR err=%x(%s)\n", dxversion, res, ExplainDDError(res)); return res; } sLabel=""; role = SURFACE_ROLE_UNKNOWN; if (ps) { role = ps->uRole; switch(role){ case SURFACE_ROLE_PRIMARY: sLabel="(PRIM)"; break; case SURFACE_ROLE_BACKBUFFER: sLabel="(BACK)"; break; case SURFACE_ROLE_ZBUFFER: sLabel="(ZBUF)"; break; case SURFACE_ROLE_3DREF: sLabel="(3DREF)"; break; } } else { if (lpddsd->ddsCaps.dwCaps & DDSCAPS_ZBUFFER) { sLabel="(ZBUF)"; role = SURFACE_ROLE_ZBUFFER; } } OutTraceDDRAW("GetSurfaceDesc(%d): lpdds=%x%s %s\n", dxversion, lpdds, sLabel, LogSurfaceAttributes((LPDDSURFACEDESC2)lpddsd, "GetSurfaceDesc", __LINE__)); if(!(dxw.IsEmulated || dxw.Windowize)) return res; switch(role) { case SURFACE_ROLE_PRIMARY: IsFixed=TRUE; //if (dxw.dwFlags1 & EMULATESURFACE) lpddsd->ddpfPixelFormat = dxw.VirtualPixelFormat; lpddsd->ddsCaps.dwCaps = SetPrimaryCaps(dxwss.GetCaps(lpdds)); lpddsd->dwBackBufferCount=DDSD_Prim.dwBackBufferCount; lpddsd->dwHeight=dxw.GetScreenHeight(); lpddsd->dwWidth=dxw.GetScreenWidth(); break; case SURFACE_ROLE_BACKBUFFER: IsFixed=TRUE; //if (dxw.dwFlags1 & EMULATESURFACE) lpddsd->ddpfPixelFormat = dxw.VirtualPixelFormat; // v2.04.20 lpddsd->ddsCaps.dwCaps = SetBackBufferCaps(dxwss.GetCaps(lpdds)); break; case SURFACE_ROLE_ZBUFFER: IsFixed=TRUE; lpddsd->ddsCaps.dwCaps = SetZBufferCaps(dxwss.GetCaps(lpdds)); break; case SURFACE_ROLE_3DREF: IsFixed=TRUE; lpddsd->ddsCaps.dwCaps = dxwss.GetCaps(lpdds); break; } if(IsFixed) OutTraceDW("GetSurfaceDesc: FIXED lpdds=%x %s\n", lpdds, LogSurfaceAttributes((LPDDSURFACEDESC2)lpddsd, sLabel, __LINE__)); if(IsTraceHex) HexTrace((unsigned char *)lpddsd, sizeof(DDSURFACEDESC)); return DD_OK; } // Beware: despite the surface version, some game (The Sims!!!) intentionally uses a different dwSize, so that // you shouldn't reset the value HRESULT WINAPI extGetSurfaceDesc1(LPDIRECTDRAWSURFACE lpdds, LPDDSURFACEDESC lpddsd) { return extGetSurfaceDesc(1, pGetSurfaceDesc1, lpdds, lpddsd); } HRESULT WINAPI extGetSurfaceDesc2(LPDIRECTDRAWSURFACE lpdds, LPDDSURFACEDESC lpddsd) { return extGetSurfaceDesc(2, pGetSurfaceDesc2, lpdds, lpddsd); } HRESULT WINAPI extGetSurfaceDesc3(LPDIRECTDRAWSURFACE lpdds, LPDDSURFACEDESC lpddsd) { return extGetSurfaceDesc(3, pGetSurfaceDesc3, lpdds, lpddsd); } HRESULT WINAPI extGetSurfaceDesc4(LPDIRECTDRAWSURFACE2 lpdds, LPDDSURFACEDESC2 lpddsd) { return extGetSurfaceDesc(4, (GetSurfaceDesc_Type)pGetSurfaceDesc4, (LPDIRECTDRAWSURFACE)lpdds, (LPDDSURFACEDESC)lpddsd); } HRESULT WINAPI extGetSurfaceDesc7(LPDIRECTDRAWSURFACE2 lpdds, LPDDSURFACEDESC2 lpddsd) { return extGetSurfaceDesc(7, (GetSurfaceDesc_Type)pGetSurfaceDesc7, (LPDIRECTDRAWSURFACE)lpdds, (LPDDSURFACEDESC)lpddsd); } static ULONG WINAPI extReleaseD(int dxversion, ReleaseD_Type pReleaseD, LPDIRECTDRAW lpdd) { ULONG ActualRef; LONG VirtualRef; OutTraceDDRAW("Release(D%d): lpdd=%x\n", dxversion, lpdd); if((ReleaseD_Type)extReleaseD == pReleaseD) { OutTraceE("Release(D) ERROR: bad hooker pReleaseD=%x\n", pReleaseD); return 0; } ActualRef=(*pReleaseD)(lpdd); VirtualRef=(LONG)ActualRef; OutTraceDW("Release(D): lpdd=%x service_lpdd=%x ref=%d\n", lpdd, lpPrimaryDD, ActualRef); if (lpdd == lpPrimaryDD) { // v2.1.87: fix for Dungeon Keeper II if(dxw.dwFlags4 & FIXREFCOUNTER){ // v2.02.41: fix the ref counter to sumulate the unwindowed original situation --VirtualRef; // why ???? if(dxwss.GetBackBufferSurface()) --VirtualRef; if(dxw.dwFlags1 & EMULATESURFACE){ if(lpDDSEmu_Prim) --VirtualRef; if(lpDDSEmu_Back) --VirtualRef; if(lpDDZBuffer) --VirtualRef; // is it correct ? Inserted to fix "Microsoft International Soccer 2000" in hw mode } if(VirtualRef<0) VirtualRef=0; OutTraceDW("Release(D): fixed ref counter %d->%d\n", ActualRef, VirtualRef); } if((dxversion<4) && (ActualRef==0)){ // directdraw old versions automatically free all linked objects when the parent session is closed. OutTraceDW("Release(D): RefCount=0 - service object RESET condition\n"); lpDDSEmu_Prim=NULL; lpDDSEmu_Back=NULL; lpDDP=NULL; iDDPExtraRefCounter = 0; } if(ActualRef==0) lpPrimaryDD=NULL; // v2.03.61 } // when lpdd session is closed (ref==0) the system restores the default color depth // so if FORCE16BPP is set, dxwnd must restore the 16BPP value //extern void SwitchTo16BPP(); //if((ActualRef==0) && (dxw.dwFlags3 & FORCE16BPP)) SwitchTo16BPP(); if(dxw.dwFlags4 & RETURNNULLREF) VirtualRef = 0; OutTraceDDRAW("Release(D): lpdd=%x ref=%x\n", lpdd, VirtualRef); return (ULONG)VirtualRef; } ULONG WINAPI extReleaseD1(LPDIRECTDRAW lpdd) { return extReleaseD(1, pReleaseD1, lpdd); } ULONG WINAPI extReleaseD2(LPDIRECTDRAW lpdd) { return extReleaseD(2, pReleaseD2, lpdd); } ULONG WINAPI extReleaseD3(LPDIRECTDRAW lpdd) { return extReleaseD(3, pReleaseD3, lpdd); } ULONG WINAPI extReleaseD4(LPDIRECTDRAW lpdd) { return extReleaseD(4, pReleaseD4, lpdd); } ULONG WINAPI extReleaseD7(LPDIRECTDRAW lpdd) { return extReleaseD(7, pReleaseD7, lpdd); } static HRESULT WINAPI extCreateClipper(int dxversion, CreateClipper_Type pCreateClipper, LPDIRECTDRAW lpdd, DWORD dwflags, LPDIRECTDRAWCLIPPER FAR* lplpDDClipper, IUnknown FAR* pUnkOuter) { HRESULT res; OutTraceDDRAW("CreateClipper(%d): lpdd=%x flags=%x\n", dxversion, lpdd, dwflags); res=(*pCreateClipper)(lpdd, dwflags, lplpDDClipper, pUnkOuter); if(res) { OutTraceE("CreateClipper: ERROR res=%x(%s)\n", lpdd, res, ExplainDDError(res)); return res; } OutTraceDDRAW("CreateClipper: OK lpddclipper=%x\n", *lplpDDClipper); HookDDClipper(lplpDDClipper); // there is a single Clipper intrface! return res; } HRESULT WINAPI extCreateClipper1(LPDIRECTDRAW lpdd, DWORD dwflags, LPDIRECTDRAWCLIPPER FAR* lplpDDClipper, IUnknown FAR* pUnkOuter) { return extCreateClipper(1, pCreateClipper1, lpdd, dwflags, lplpDDClipper, pUnkOuter); } HRESULT WINAPI extCreateClipper2(LPDIRECTDRAW lpdd, DWORD dwflags, LPDIRECTDRAWCLIPPER FAR* lplpDDClipper, IUnknown FAR* pUnkOuter) { return extCreateClipper(2, pCreateClipper2, lpdd, dwflags, lplpDDClipper, pUnkOuter); } HRESULT WINAPI extCreateClipper3(LPDIRECTDRAW lpdd, DWORD dwflags, LPDIRECTDRAWCLIPPER FAR* lplpDDClipper, IUnknown FAR* pUnkOuter) { return extCreateClipper(3, pCreateClipper3, lpdd, dwflags, lplpDDClipper, pUnkOuter); } HRESULT WINAPI extCreateClipper4(LPDIRECTDRAW lpdd, DWORD dwflags, LPDIRECTDRAWCLIPPER FAR* lplpDDClipper, IUnknown FAR* pUnkOuter) { return extCreateClipper(4, pCreateClipper4, lpdd, dwflags, lplpDDClipper, pUnkOuter); } HRESULT WINAPI extCreateClipper7(LPDIRECTDRAW lpdd, DWORD dwflags, LPDIRECTDRAWCLIPPER FAR* lplpDDClipper, IUnknown FAR* pUnkOuter) { return extCreateClipper(7, pCreateClipper7, lpdd, dwflags, lplpDDClipper, pUnkOuter); } HRESULT WINAPI extReleaseC(LPDIRECTDRAWCLIPPER lpddClip) { ULONG ref; ref = (*pReleaseC)(lpddClip); OutTraceDDRAW("Release(C): PROXED lpddClip=%x ref=%x\n", lpddClip, ref); return ref; } HRESULT WINAPI extGetClipList(LPDIRECTDRAWCLIPPER lpddClip, LPRECT lpRect, LPRGNDATA lpRgnData, LPDWORD lpw) { HRESULT res; // returned clip region (both RgnData and single RECT array) should be relocated in window mode // an easy way to do that, though not accurate, is to consider the clip region as the whole virtual screen // a better way is to use the dxw.UnmapWindow(RECT *) method // this makes "Full Pipe" working without clipping problems. if(IsTraceDDRAW){ char sInfo[81]; if (lpRect) sprintf(sInfo, "rect=(%d,%d)-(%d,%d) ", lpRect->left, lpRect->top, lpRect->right, lpRect->bottom); else sprintf(sInfo, "rect=(NULL) "); OutTrace("GetClipList(C): lpddClip=%x %s\n", lpddClip, sInfo); } res=(*pGetClipList)(lpddClip, lpRect, lpRgnData, lpw); if(IsTraceDDRAW){ if(res) OutTrace("GetClipList(C): ERROR err=%x(%s)\n", res, ExplainDDError(res)); else{ if(lpRgnData){ OutTrace("GetClipList(C): w=%x rgndataheader{size=%d type=%x count=%d RgnSize=%d bound=(%d,%d)-(%d,%d)}\n", *lpw, lpRgnData->rdh.dwSize, lpRgnData->rdh.iType, lpRgnData->rdh.nCount, lpRgnData->rdh.nRgnSize, lpRgnData->rdh.rcBound.left, lpRgnData->rdh.rcBound.top, lpRgnData->rdh.rcBound.right, lpRgnData->rdh.rcBound.bottom); if(dxw.Windowize && (dxw.dwFlags1 & CLIENTREMAPPING)){ dxw.UnmapWindow(&lpRgnData->rdh.rcBound); //lpRgnData->rdh.rcBound = dxw.GetScreenRect(); OutTraceDW("GetClipList(C): w=%x rgndataheader{size=%d type=%x count=%d RgnSize=%d REMAPPED bound=(%d,%d)-(%d,%d)}\n", *lpw, lpRgnData->rdh.dwSize, lpRgnData->rdh.iType, lpRgnData->rdh.nCount, lpRgnData->rdh.nRgnSize, lpRgnData->rdh.rcBound.left, lpRgnData->rdh.rcBound.top, lpRgnData->rdh.rcBound.right, lpRgnData->rdh.rcBound.bottom); } if(IsDebug){ RECT *rgns; rgns = (RECT *)lpRgnData->Buffer; for(DWORD i=0; irdh.nCount; i++){ OutTrace("GetClipList(C): rect[%d]=(%d,%d)-(%d,%d)\n", i, rgns[i].left, rgns[i].top, rgns[i].right, rgns[i].bottom); if(dxw.Windowize && (dxw.dwFlags1 & CLIENTREMAPPING)){ dxw.UnmapWindow(&rgns[i]); //rgns[i] = dxw.GetScreenRect(); OutTrace("GetClipList(C): REMAPPED rect[%d]=(%d,%d)-(%d,%d)\n", i, rgns[i].left, rgns[i].top, rgns[i].right, rgns[i].bottom); } } } } else{ OutTrace("GetClipList(C): w=%x\n", *lpw); } } } return res; } HRESULT WINAPI extSetClipList(LPDIRECTDRAWCLIPPER lpddClip, LPRGNDATA lpClipList, DWORD dwFlags) { HRESULT res; OutTraceP("SetClipList(C): lpddClip=%x lpcliplist=%x flags=%x\n", lpddClip, lpClipList, dwFlags); res = (*pSetClipList)(lpddClip, lpClipList, dwFlags); if(res) OutTraceP("SetClipList(C): ERROR err=%x(%s)\n", res, ExplainDDError(res)); return res; } HRESULT WINAPI extSetHWnd(LPDIRECTDRAWCLIPPER lpddClip, DWORD w, HWND hwnd) { HRESULT res; OutTraceP("SetHWnd(C): lpddClip=%x w=%x hwnd=%x\n", lpddClip, w, hwnd); res=(*pSetHWnd)(lpddClip, w, hwnd); if(res) OutTraceP("SetHWnd(C): ERROR err=%x(%s)\n", res, ExplainDDError(res)); return res; } HRESULT WINAPI extReleaseP(LPDIRECTDRAWPALETTE lpddPalette) { ULONG ref; ref = (*pReleaseP)(lpddPalette); OutTraceDDRAW("Release(P): lpddPalette=%x ref=%x\n", lpddPalette, ref); if (lpddPalette == lpDDP) { if(dxw.dwFlags4 & FIXREFCOUNTER) { OutTraceDW("Release(P): lpDDP extrarefcount=%d\n", iDDPExtraRefCounter); if((ULONG)iDDPExtraRefCounter >= ref){ while(ref) ref = (*pReleaseP)(lpddPalette); lpDDP=NULL; iDDPExtraRefCounter = 0; return 0; } ref -= iDDPExtraRefCounter; } if (ref <= 0) { ref = 0; OutTraceDW("Release(P): clearing lpDDP=%x->NULL\n", lpDDP); lpDDP=NULL; } if(dxw.dwFlags4 & RETURNNULLREF) ref = 0; } return ref; } static BOOL IsMatchingDeviceW(LPWSTR lpDriverName) { WCHAR MatchDev[20]; wsprintfW(MatchDev, L"DISPLAY%d", dxw.MonitorId+1); return (wcsstr(lpDriverName, MatchDev) != NULL); } static BOOL IsMatchingDeviceA(LPCSTR lpDriverName) { CHAR MatchDev[20]; sprintf(MatchDev, "DISPLAY%d", dxw.MonitorId+1); return (strstr(lpDriverName, MatchDev) != NULL); } BOOL FAR PASCAL DDEnumerateCallbackFilterW(GUID FAR *lpGuid, LPWSTR lpDriverDescription, LPWSTR lpDriverName, LPVOID lpContext) { BOOL res; typedef struct {LPDDENUMCALLBACKW lpCallback; LPVOID lpContext;} Context_Type; Context_Type *p=(Context_Type *)lpContext; OutTraceDW("DDEnumerateCallback: guid=%x DriverDescription=\"%ls\" DriverName=\"%ls\" Context=%x\n", lpGuid, lpDriverDescription, lpDriverName, p->lpContext); if(dxw.MonitorId != -1){ if(IsMatchingDeviceW(lpDriverName)){ (*p->lpCallback)(lpGuid, lpDriverDescription, lpDriverName, p->lpContext); res=FALSE; } else { OutTraceDW("DDEnumerateCallback: SKIP DriverName=\"%ls\"\n", lpDriverName); res=TRUE; } } else{ if((lpGuid==NULL) || !(dxw.dwFlags2 & HIDEMULTIMONITOR)) res=(*p->lpCallback)(lpGuid, lpDriverDescription, lpDriverName, p->lpContext); if((lpGuid==NULL) && (dxw.dwFlags2 & HIDEMULTIMONITOR)) res=FALSE; } OutTraceDW("DDEnumerateCallback: res=%x(%s)\n", res, res?"continue":"break"); return res; } BOOL FAR PASCAL DDEnumerateCallbackExFilterW(GUID FAR *lpGuid, LPWSTR lpDriverDescription, LPWSTR lpDriverName, LPVOID lpContext, HMONITOR hm) { BOOL res; typedef struct {LPDDENUMCALLBACKEXW lpCallback; LPVOID lpContext;} Context_Type; Context_Type *p=(Context_Type *)lpContext; OutTraceDW("DDEnumerateCallbackEx: guid=%x DriverDescription=\"%ls\" DriverName=\"%ls\" Context=%x hm=%x\n", lpGuid, lpDriverDescription, lpDriverName, lpContext, hm); res=TRUE; // single monitor handling if(dxw.MonitorId != -1){ if(IsMatchingDeviceW(lpDriverName)){ (*p->lpCallback)(lpGuid, lpDriverDescription, lpDriverName, p->lpContext, hm); res=FALSE; } else{ OutTraceDW("DDEnumerateCallbackEx: SKIP DriverName=\"%ls\"\n", lpDriverName); res=TRUE; } } else{ if((lpGuid==NULL) || !(dxw.dwFlags2 & HIDEMULTIMONITOR)) res=(*p->lpCallback)(lpGuid, lpDriverDescription, lpDriverName, p->lpContext, hm); if((lpGuid==NULL) && (dxw.dwFlags2 & HIDEMULTIMONITOR)) res=FALSE; } OutTraceDW("DDEnumerateCallbackEx: res=%x(%s)\n", res, res?"continue":"break"); return res; } BOOL FAR PASCAL DDEnumerateCallbackFilterA(GUID FAR *lpGuid, LPSTR lpDriverDescription, LPSTR lpDriverName, LPVOID lpContext) { BOOL res; typedef struct {LPDDENUMCALLBACK lpCallback; LPVOID lpContext;} Context_Type; Context_Type *p=(Context_Type *)lpContext; OutTraceDW("DDEnumerateCallback: guid=%x DriverDescription=\"%s\" DriverName=\"%s\" Context=%x\n", lpGuid, lpDriverDescription, lpDriverName, p->lpContext); res=TRUE; if(dxw.MonitorId != -1){ if(IsMatchingDeviceA(lpDriverName)){ (*p->lpCallback)(lpGuid, lpDriverDescription, lpDriverName, p->lpContext); res=FALSE; } else{ OutTraceDW("DDEnumerateCallback: SKIP DriverName=\"%s\"\n", lpDriverName); res=TRUE; } } else{ if((lpGuid==NULL) || !(dxw.dwFlags2 & HIDEMULTIMONITOR)) res=(*p->lpCallback)(lpGuid, lpDriverDescription, lpDriverName, p->lpContext); if((lpGuid==NULL) && (dxw.dwFlags2 & HIDEMULTIMONITOR)) res=FALSE; } OutTraceDW("DDEnumerateCallback: res=%x(%s)\n", res, res?"continue":"break"); return res; } BOOL FAR PASCAL DDEnumerateCallbackExFilterA(GUID FAR *lpGuid, LPSTR lpDriverDescription, LPSTR lpDriverName, LPVOID lpContext, HMONITOR hm) { BOOL res; typedef struct {LPDDENUMCALLBACKEX lpCallback; LPVOID lpContext;} Context_Type; Context_Type *p=(Context_Type *)lpContext; OutTraceDW("DDEnumerateCallbackEx: guid=%x DriverDescription=\"%s\" DriverName=\"%s\" Context=%x hm=%x\n", lpGuid, lpDriverDescription, lpDriverName, lpContext, hm); res=TRUE; if(dxw.MonitorId != -1){ if(IsMatchingDeviceA(lpDriverName)){ (*p->lpCallback)(lpGuid, lpDriverDescription, lpDriverName, p->lpContext, hm); res=FALSE; } else{ OutTraceDW("DDEnumerateCallbackEx: SKIP DriverName=\"%s\"\n", lpDriverName); res=TRUE; } } else{ if((lpGuid==NULL) || !(dxw.dwFlags2 & HIDEMULTIMONITOR)) res=(*p->lpCallback)(lpGuid, lpDriverDescription, lpDriverName, p->lpContext, hm); if((lpGuid==NULL) && (dxw.dwFlags2 & HIDEMULTIMONITOR)) res=FALSE; } OutTraceDW("DDEnumerateCallbackEx: res=%x(%s)\n", res, res?"continue":"break"); return res; } HRESULT WINAPI extDirectDrawEnumerateA(LPDDENUMCALLBACKA lpCallback, LPVOID lpContext) { HRESULT ret; OutTraceDDRAW("DirectDrawEnumerate[A]: lpCallback=%x lpContext=%x\n", lpCallback, lpContext); if((dxw.dwFlags2 & HIDEMULTIMONITOR) || (dxw.dwTFlags & OUTDEBUG) || (dxw.MonitorId != -1)){ struct {LPDDENUMCALLBACKA lpCallback; LPVOID lpContext;} myContext; myContext.lpCallback=lpCallback; myContext.lpContext=lpContext; ret=(*pDirectDrawEnumerateA)(DDEnumerateCallbackFilterA, (LPVOID)&myContext); } else ret=(*pDirectDrawEnumerateA)(lpCallback, lpContext); if(ret) OutTraceE("DirectDrawEnumerate: ERROR res=%x(%s)\n", ret, ExplainDDError(ret)); return ret; } HRESULT WINAPI extDirectDrawEnumerateW(LPDDENUMCALLBACKW lpCallback, LPVOID lpContext) { HRESULT ret; OutTraceDDRAW("DirectDrawEnumerate[W]: lpCallback=%x lpContext=%x\n", lpCallback, lpContext); if((dxw.dwFlags2 & HIDEMULTIMONITOR) || (dxw.dwTFlags & OUTDEBUG) || (dxw.MonitorId != -1)){ struct {LPDDENUMCALLBACKW lpCallback; LPVOID lpContext;} myContext; myContext.lpCallback=lpCallback; myContext.lpContext=lpContext; ret=(*pDirectDrawEnumerateW)(DDEnumerateCallbackFilterW, (LPVOID)&myContext); } else ret=(*pDirectDrawEnumerateW)(lpCallback, lpContext); if(ret) OutTraceE("DirectDrawEnumerate: ERROR res=%x(%s)\n", ret, ExplainDDError(ret)); return ret; } HRESULT WINAPI extDirectDrawEnumerateExA(LPDDENUMCALLBACKEXA lpCallback, LPVOID lpContext, DWORD dwFlags) { HRESULT ret; OutTraceDDRAW("DirectDrawEnumerateEx[A]: lpCallback=%x lpContext=%x Flags=%x(%s)\n", lpCallback, lpContext, dwFlags, ExplainDDEnumerateFlags(dwFlags)); if((dxw.dwFlags2 & HIDEMULTIMONITOR) || (dxw.dwTFlags & OUTDEBUG) || (dxw.MonitorId != -1)){ struct {LPDDENUMCALLBACKEXA lpCallback; LPVOID lpContext;} myContext; myContext.lpCallback=lpCallback; myContext.lpContext=lpContext; if(dxw.dwFlags2 & HIDEMULTIMONITOR){ dwFlags &= ~(DDENUM_ATTACHEDSECONDARYDEVICES|DDENUM_DETACHEDSECONDARYDEVICES|DDENUM_NONDISPLAYDEVICES); } ret=(*pDirectDrawEnumerateExA)(DDEnumerateCallbackExFilterA, (LPVOID)&myContext, dwFlags); } else{ ret=(*pDirectDrawEnumerateExA)(lpCallback, lpContext, dwFlags); } if(ret) OutTraceE("DirectDrawEnumerateEx: ERROR res=%x(%s)\n", ret, ExplainDDError(ret)); if(dxw.dwFlags1 & SUPPRESSDXERRORS) ret=DD_OK; return ret; } HRESULT WINAPI extDirectDrawEnumerateExW(LPDDENUMCALLBACKEXW lpCallback, LPVOID lpContext, DWORD dwFlags) { HRESULT ret; OutTraceDDRAW("DirectDrawEnumerateEx[W]: lpCallback=%x lpContext=%x Flags=%x(%s)\n", lpCallback, lpContext, dwFlags, ExplainDDEnumerateFlags(dwFlags)); if((dxw.dwFlags2 & HIDEMULTIMONITOR) || (dxw.dwTFlags & OUTDEBUG) || (dxw.MonitorId != -1)){ struct {LPDDENUMCALLBACKEXW lpCallback; LPVOID lpContext;} myContext; myContext.lpCallback=lpCallback; myContext.lpContext=lpContext; if(dxw.dwFlags2 & HIDEMULTIMONITOR){ dwFlags &= ~(DDENUM_ATTACHEDSECONDARYDEVICES|DDENUM_DETACHEDSECONDARYDEVICES|DDENUM_NONDISPLAYDEVICES); } ret=(*pDirectDrawEnumerateExW)(DDEnumerateCallbackExFilterW, (LPVOID)&myContext, dwFlags); } else{ ret=(*pDirectDrawEnumerateExW)(lpCallback, lpContext, dwFlags); } if(ret) OutTraceE("DirectDrawEnumerateEx: ERROR res=%x(%s)\n", ret, ExplainDDError(ret)); if(dxw.dwFlags1 & SUPPRESSDXERRORS) ret=DD_OK; return ret; } HRESULT WINAPI extDDGetGammaRamp(LPDIRECTDRAWSURFACE lpdds, DWORD dwFlags, LPDDGAMMARAMP lpgr) { HRESULT ret; OutTraceDDRAW("GetGammaRamp: dds=%x dwFlags=%x\n", lpdds, dwFlags); if(dxwss.IsAPrimarySurface(lpdds)) lpdds=lpDDSEmu_Prim; ret=(*pDDGetGammaRamp)(lpdds, dwFlags, lpgr); if(ret) { OutTraceE("GetGammaRamp: ERROR res=%x(%s)\n", ret, ExplainDDError(ret)); if(dxw.dwFlags1 & SUPPRESSDXERRORS) { // clear the error code, and provide a reasonable gamma ramp array for(int i=0; i<256; i++) lpgr->red[i]=lpgr->green[i]=lpgr->blue[i]=(i * 0x100); ret=0; } } else{ if(IsDebug){ OutTrace("GetGammaRamp: RGB="); for(int i=0; i<256; i++) OutTrace("(%x,%x,%x)", lpgr->red[i], lpgr->green[i], lpgr->blue[i]); OutTrace("\n"); } } return ret; } HRESULT WINAPI extDDSetGammaRamp(LPDIRECTDRAWSURFACE lpdds, DWORD dwFlags, LPDDGAMMARAMP lpgr) { HRESULT ret; OutTraceDDRAW("SetGammaRamp: dds=%x dwFlags=%x\n", lpdds, dwFlags); if(IsDebug){ OutTrace("GetGammaRamp: RGB="); for(int i=0; i<256; i++) OutTrace("(%x,%x,%x)", lpgr->red[i], lpgr->green[i], lpgr->blue[i]); OutTrace("\n"); } if (dxw.dwFlags2 & DISABLEGAMMARAMP) return DD_OK; ret=(*pDDSetGammaRamp)(lpdds, dwFlags, lpgr); if(ret) OutTraceE("SetGammaRamp: ERROR res=%x(%s)\n", ret, ExplainDDError(ret)); if(dxw.dwFlags1 & SUPPRESSDXERRORS) ret = DD_OK; return ret; } static HRESULT WINAPI extGetAvailableVidMem(int dxversion, GetAvailableVidMem4_Type pGetAvailableVidMem, LPDIRECTDRAW lpdd, LPDDSCAPS2 lpDDSCaps, LPDWORD lpdwTotal, LPDWORD lpdwFree) { HRESULT res; //const DWORD dwMaxMem = 0x7FFFF000; // v03.01.01: limit to smaller value to allow "Breath of Fire IV" card detection const DWORD dwMaxMem = 0x70000000; const DWORD dwHugeMem = 0xF0000000; OutTraceDDRAW("GetAvailableVidMem(D%d): lpdd=%x\n", dxversion, lpdd); res=(*pGetAvailableVidMem)(lpdd, lpDDSCaps, lpdwTotal, lpdwFree); if(res){ if((dxw.dwFlags3 & FORCESHEL) && (res==DDERR_NODIRECTDRAWHW)){ // fake some video memory.... OutTraceDW("GetAvailableVidMem(D): FORCESHEL mode Total=Free=%x\n", dwMaxMem); if(lpdwTotal) *lpdwTotal = dwMaxMem; if(lpdwFree) *lpdwFree = dwMaxMem; return DD_OK; } OutTraceE("GetAvailableVidMem(D): ERROR res=%x(%s)\n", res, ExplainDDError(res)); return res; } if(dxversion < 4){ // fix: should include also dxversion 3!!! OutTraceDW("GetAvailableVidMem(D%d): DDSCaps=%x(%s) Total=%x Free=%x\n", dxversion, lpDDSCaps->dwCaps, ExplainDDSCaps(lpDDSCaps->dwCaps), lpdwTotal?*lpdwTotal:0, lpdwFree?*lpdwFree:0); } else{ OutTraceDW("GetAvailableVidMem(D%d): DDSCaps=%x(%s).%x.%x.%x volumedepth=%d Total=%x Free=%x\n", dxversion, lpDDSCaps->dwCaps, ExplainDDSCaps(lpDDSCaps->dwCaps), lpDDSCaps->dwCaps2, lpDDSCaps->dwCaps3, lpDDSCaps->dwCaps4, lpDDSCaps->dwVolumeDepth, lpdwTotal?*lpdwTotal:0, lpdwFree?*lpdwFree:0); } if(!(dxw.dwFlags2 & LIMITRESOURCES)) return res; // may need hints .... if(dxw.bHintActive){ if(lpdwTotal && (*lpdwTotal > dwMaxMem)) ShowHint(HINT_LIMITMEM); if(lpdwFree && (*lpdwFree > dwMaxMem)) ShowHint(HINT_LIMITMEM); } // simulate a value overflow condition if(dxw.dwFlags5 & STRESSRESOURCES){ if(lpdwTotal) *lpdwTotal = dwHugeMem; if(lpdwFree) *lpdwFree = dwHugeMem; return DD_OK; } // check for memory value overflow - see "Mageslayer" and "Take no Prisoners" DWORD dwLocalTotal; if(lpdwTotal == NULL) { lpdwTotal = &dwLocalTotal; // point to usable memory.... res=(*pGetAvailableVidMem)(lpdd, lpDDSCaps, lpdwTotal, lpdwFree); // do it again to get total memory } if(*lpdwTotal > dwMaxMem){ if(lpdwFree != NULL){ DWORD dwDiff = *lpdwTotal - *lpdwFree; if(dwDiff > dwMaxMem){ *lpdwFree = dwMaxMem; } else{ *lpdwFree = dwMaxMem - dwDiff; } } *lpdwTotal = dwMaxMem; OutTraceDW("GetAvailableVidMem(D): FIXED Total=%x Free=%x\n", *lpdwTotal, *lpdwFree); } return res; } HRESULT WINAPI extGetAvailableVidMem2(LPDIRECTDRAW lpdd, LPDDSCAPS lpDDSCaps, LPDWORD lpdwTotal, LPDWORD lpdwFree) { return extGetAvailableVidMem(2, (GetAvailableVidMem4_Type)pGetAvailableVidMem2, lpdd, (LPDDSCAPS2)lpDDSCaps, lpdwTotal, lpdwFree); } HRESULT WINAPI extGetAvailableVidMem3(LPDIRECTDRAW lpdd, LPDDSCAPS lpDDSCaps, LPDWORD lpdwTotal, LPDWORD lpdwFree) { return extGetAvailableVidMem(3, (GetAvailableVidMem4_Type)pGetAvailableVidMem3, lpdd, (LPDDSCAPS2)lpDDSCaps, lpdwTotal, lpdwFree); } HRESULT WINAPI extGetAvailableVidMem4(LPDIRECTDRAW lpdd, LPDDSCAPS2 lpDDSCaps, LPDWORD lpdwTotal, LPDWORD lpdwFree) { return extGetAvailableVidMem(4, pGetAvailableVidMem4, lpdd, lpDDSCaps, lpdwTotal, lpdwFree); } HRESULT WINAPI extGetAvailableVidMem7(LPDIRECTDRAW lpdd, LPDDSCAPS2 lpDDSCaps, LPDWORD lpdwTotal, LPDWORD lpdwFree) { return extGetAvailableVidMem(7, pGetAvailableVidMem7, lpdd, lpDDSCaps, lpdwTotal, lpdwFree); } HRESULT WINAPI extSetSurfaceDesc(SetSurfaceDesc_Type pSetSurfaceDesc, LPDIRECTDRAWSURFACE lpdds, LPDDSURFACEDESC lpDDsd2, DWORD dwFlags) { HRESULT res; OutTrace("SetSurfaceDesc: REACHED\n"); res = (*pSetSurfaceDesc)(lpdds, lpDDsd2, dwFlags); if(res) OutTraceE("SetSurfaceDesc: ERROR res=%x(%s)\n", res, ExplainDDError(res)); return res; } HRESULT WINAPI extSetSurfaceDesc3(LPDIRECTDRAWSURFACE lpdds, LPDDSURFACEDESC lpDDsd2, DWORD dwFlags) { return extSetSurfaceDesc(pSetSurfaceDesc3, lpdds, lpDDsd2, dwFlags); } HRESULT WINAPI extSetSurfaceDesc4(LPDIRECTDRAWSURFACE lpdds, LPDDSURFACEDESC lpDDsd2, DWORD dwFlags) { return extSetSurfaceDesc(pSetSurfaceDesc4, lpdds, lpDDsd2, dwFlags); } HRESULT WINAPI extSetSurfaceDesc7(LPDIRECTDRAWSURFACE lpdds, LPDDSURFACEDESC lpDDsd2, DWORD dwFlags) { return extSetSurfaceDesc(pSetSurfaceDesc7, lpdds, lpDDsd2, dwFlags); } HRESULT WINAPI extDirectDrawCreateClipper(DWORD dwFlags, LPDIRECTDRAWCLIPPER *lplpDDClipper, IUnknown *pUnkOuter) { HRESULT res; OutTraceDW("DirectDrawCreateClipper: flags=%x\n", dwFlags); res = (*pDirectDrawCreateClipper)(dwFlags, lplpDDClipper, pUnkOuter); if(res) { OutTraceE("DirectDrawCreateClipper: ERROR res=%x(%s)\n", res, ExplainDDError(res)); return res; } OutTraceDW("DirectDrawCreateClipper: OK lpclipper=%x\n", *lplpDDClipper); HookDDClipper(lplpDDClipper); return res; } HRESULT WINAPI extEnumOverlayZOrders(int dxversion, EnumOverlayZOrders_Type pEnumOverlayZOrders, LPDIRECTDRAWSURFACE lpdds, DWORD dwFlags, LPVOID lpContext, LPDDENUMSURFACESCALLBACK lpfnCallback) { HRESULT res; OutTrace("EnumOverlayZOrders(%d): lpdds=%x flags=%x(%s)\n", dxversion, lpdds, dwFlags, dwFlags?"FRONTTOBACK":"BACKTOFRONT"); res = (*pEnumOverlayZOrders)(lpdds, dwFlags, lpContext, lpfnCallback); OutTrace("EnumOverlayZOrders: res=%x(%s)\n", res, ExplainDDError(res)); return res; } HRESULT WINAPI extEnumOverlayZOrders1(LPDIRECTDRAWSURFACE lpdds, DWORD dwFlags, LPVOID lpContext, LPDDENUMSURFACESCALLBACK lpfnCallback) { return extEnumOverlayZOrders(1, pEnumOverlayZOrders1, lpdds, dwFlags, lpContext, lpfnCallback); } HRESULT WINAPI extEnumOverlayZOrders2(LPDIRECTDRAWSURFACE lpdds, DWORD dwFlags, LPVOID lpContext, LPDDENUMSURFACESCALLBACK lpfnCallback) { return extEnumOverlayZOrders(2, pEnumOverlayZOrders2, lpdds, dwFlags, lpContext, lpfnCallback); } HRESULT WINAPI extEnumOverlayZOrders3(LPDIRECTDRAWSURFACE lpdds, DWORD dwFlags, LPVOID lpContext, LPDDENUMSURFACESCALLBACK lpfnCallback) { return extEnumOverlayZOrders(3, pEnumOverlayZOrders3, lpdds, dwFlags, lpContext, lpfnCallback); } HRESULT WINAPI extEnumOverlayZOrders4(LPDIRECTDRAWSURFACE lpdds, DWORD dwFlags, LPVOID lpContext, LPDDENUMSURFACESCALLBACK lpfnCallback) { return extEnumOverlayZOrders(4, pEnumOverlayZOrders4, lpdds, dwFlags, lpContext, lpfnCallback); } HRESULT WINAPI extEnumOverlayZOrders7(LPDIRECTDRAWSURFACE lpdds, DWORD dwFlags, LPVOID lpContext, LPDDENUMSURFACESCALLBACK lpfnCallback) { return extEnumOverlayZOrders(7, pEnumOverlayZOrders7, lpdds, dwFlags, lpContext, lpfnCallback); } HRESULT WINAPI extAddOverlayDirtyRect(int dxversion, AddOverlayDirtyRect_Type pAddOverlayDirtyRect, LPDIRECTDRAWSURFACE lpdds, LPRECT lpRect) { HRESULT res; char sInfo[128]; if (lpRect) sprintf(sInfo, "(%d,%d)-(%d,%d)", lpRect->left, lpRect->top, lpRect->right, lpRect->bottom); else sprintf(sInfo, "(NULL)"); OutTrace("AddOverlayDirtyRect(%d): lpdds=%x rect=%s\n", dxversion, lpdds, sInfo); res=(*pAddOverlayDirtyRect)(lpdds, lpRect); OutTrace("AddOverlayDirtyRect: res=%x(%s)\n", res, ExplainDDError(res)); return res; } HRESULT WINAPI extAddOverlayDirtyRect1(LPDIRECTDRAWSURFACE lpdds, LPRECT lpRect) { return extAddOverlayDirtyRect(1, pAddOverlayDirtyRect1, lpdds, lpRect); } HRESULT WINAPI extAddOverlayDirtyRect2(LPDIRECTDRAWSURFACE lpdds, LPRECT lpRect) { return extAddOverlayDirtyRect(2, pAddOverlayDirtyRect2, lpdds, lpRect); } HRESULT WINAPI extAddOverlayDirtyRect3(LPDIRECTDRAWSURFACE lpdds, LPRECT lpRect) { return extAddOverlayDirtyRect(3, pAddOverlayDirtyRect3, lpdds, lpRect); } HRESULT WINAPI extAddOverlayDirtyRect4(LPDIRECTDRAWSURFACE lpdds, LPRECT lpRect) { return extAddOverlayDirtyRect(4, pAddOverlayDirtyRect4, lpdds, lpRect); } HRESULT WINAPI extAddOverlayDirtyRect7(LPDIRECTDRAWSURFACE lpdds, LPRECT lpRect) { return extAddOverlayDirtyRect(7, pAddOverlayDirtyRect7, lpdds, lpRect); } HRESULT WINAPI extCompact(LPDIRECTDRAW lpdd) { OutTraceDW("Compact: lpdd=%x\n", lpdd); return DD_OK; } HRESULT WINAPI extDuplicateSurface(int dxversion, DuplicateSurface_Type pDuplicateSurface, LPDIRECTDRAW lpdd, LPDIRECTDRAWSURFACE lpddssrc, LPDIRECTDRAWSURFACE FAR *lpddsdest) { HRESULT res; OutTrace("DuplicateSurface(%d): lpdd=%x lpddsrc=%x\n", dxversion, lpdd, lpddssrc); res = (*pDuplicateSurface)(lpdd, lpddssrc, lpddsdest); if(res) OutTrace("DuplicateSurface: ERROR res=%x(%s)\n", res, ExplainDDError(res)); else OutTrace("DuplicateSurface: lpddsdest=%x\n", *lpddsdest); return res; } HRESULT WINAPI extDuplicateSurface1(LPDIRECTDRAW lpdd, LPDIRECTDRAWSURFACE lpddssrc, LPDIRECTDRAWSURFACE FAR *lpddsdest) { return extDuplicateSurface(1, pDuplicateSurface1, lpdd, lpddssrc, lpddsdest); } HRESULT WINAPI extDuplicateSurface2(LPDIRECTDRAW lpdd, LPDIRECTDRAWSURFACE lpddssrc, LPDIRECTDRAWSURFACE FAR *lpddsdest) { return extDuplicateSurface(2, pDuplicateSurface2, lpdd, lpddssrc, lpddsdest); } HRESULT WINAPI extDuplicateSurface3(LPDIRECTDRAW lpdd, LPDIRECTDRAWSURFACE lpddssrc, LPDIRECTDRAWSURFACE FAR *lpddsdest) { return extDuplicateSurface(3, pDuplicateSurface3, lpdd, lpddssrc, lpddsdest); } HRESULT WINAPI extDuplicateSurface4(LPDIRECTDRAW lpdd, LPDIRECTDRAWSURFACE4 lpddssrc, LPDIRECTDRAWSURFACE4 FAR *lpddsdest) { return extDuplicateSurface(4, (DuplicateSurface_Type)pDuplicateSurface4, lpdd, (LPDIRECTDRAWSURFACE)lpddssrc, (LPDIRECTDRAWSURFACE *)lpddsdest); } HRESULT WINAPI extDuplicateSurface7(LPDIRECTDRAW lpdd, LPDIRECTDRAWSURFACE7 lpddssrc, LPDIRECTDRAWSURFACE7 FAR *lpddsdest) { return extDuplicateSurface(7, (DuplicateSurface_Type)pDuplicateSurface7, lpdd, (LPDIRECTDRAWSURFACE)lpddssrc, (LPDIRECTDRAWSURFACE *)lpddsdest); } static HRESULT WINAPI extSetOverlayPosition(int dxversion, SetOverlayPosition_Type pSetOverlayPosition, LPDIRECTDRAWSURFACE lpdds, LONG lX, LONG lY) { HRESULT res; OutTrace("SetOverlayPosition(%d): lpdds=%x pos=(%ld,%ld)\n", dxversion, lpdds, lX, lY); res = (*pSetOverlayPosition)(lpdds, lX, lY); if(res) OutTraceE("SetOverlayPosition: ERROR res=%x(%s)\n", res, ExplainDDError(res)); return res; } HRESULT WINAPI extSetOverlayPosition1(LPDIRECTDRAWSURFACE lpdds, LONG lX, LONG lY) { return extSetOverlayPosition(1, pSetOverlayPosition1, lpdds, lX, lY); } HRESULT WINAPI extSetOverlayPosition2(LPDIRECTDRAWSURFACE lpdds, LONG lX, LONG lY) { return extSetOverlayPosition(2, pSetOverlayPosition2, lpdds, lX, lY); } HRESULT WINAPI extSetOverlayPosition3(LPDIRECTDRAWSURFACE lpdds, LONG lX, LONG lY) { return extSetOverlayPosition(3, pSetOverlayPosition3, lpdds, lX, lY); } HRESULT WINAPI extSetOverlayPosition4(LPDIRECTDRAWSURFACE lpdds, LONG lX, LONG lY) { return extSetOverlayPosition(4, pSetOverlayPosition4, lpdds, lX, lY); } HRESULT WINAPI extSetOverlayPosition7(LPDIRECTDRAWSURFACE lpdds, LONG lX, LONG lY) { return extSetOverlayPosition(7, pSetOverlayPosition7, lpdds, lX, lY); } static HRESULT WINAPI extGetOverlayPosition(int dxversion, GetOverlayPosition_Type pGetOverlayPosition, LPDIRECTDRAWSURFACE lpdds, LPLONG lX, LPLONG lY) { HRESULT res; OutTrace("GetOverlayPosition(%d): lpdds=%x\n", dxversion, lpdds); res = (*pGetOverlayPosition)(lpdds, lX, lY); if(res) OutTraceE("GetOverlayPosition: ERROR res=%x(%s)\n", res, ExplainDDError(res)); else{ OutTraceDW("GetOverlayPosition: pos=(%ld,%ld)\n", *lX, *lY); } return res; } HRESULT WINAPI extGetOverlayPosition1(LPDIRECTDRAWSURFACE lpdds, LPLONG lX, LPLONG lY) { return extGetOverlayPosition(1, pGetOverlayPosition1, lpdds, lX, lY); } HRESULT WINAPI extGetOverlayPosition2(LPDIRECTDRAWSURFACE lpdds, LPLONG lX, LPLONG lY) { return extGetOverlayPosition(2, pGetOverlayPosition2, lpdds, lX, lY); } HRESULT WINAPI extGetOverlayPosition3(LPDIRECTDRAWSURFACE lpdds, LPLONG lX, LPLONG lY) { return extGetOverlayPosition(3, pGetOverlayPosition3, lpdds, lX, lY); } HRESULT WINAPI extGetOverlayPosition4(LPDIRECTDRAWSURFACE lpdds, LPLONG lX, LPLONG lY) { return extGetOverlayPosition(4, pGetOverlayPosition4, lpdds, lX, lY); } HRESULT WINAPI extGetOverlayPosition7(LPDIRECTDRAWSURFACE lpdds, LPLONG lX, LPLONG lY) { return extGetOverlayPosition(7, pGetOverlayPosition7, lpdds, lX, lY); } HRESULT WINAPI extStartModeTest(LPDIRECTDRAW lpdds, LPSIZE lpModesToTest, DWORD dwNumEntries, DWORD dwFlags) { HRESULT res; if(IsTraceDW){ char sBuf[80]; OutTrace("StartModeTest(7): lpdds=%x flags=%x num=%d modes=", lpdds, dwFlags, dwNumEntries); for(DWORD i=0; i #include #include "dxwnd.h" #include "dxhook.h" #include "ddrawi.h" #include "dxwcore.hpp" #include "stdio.h" #include "hddraw.h" #include "dxhelper.h" #include "syslibs.h" /* Using DirectDrawEx This article provides a brief overview of DirectDrawEx and how it extends the functionality of a DirectDraw object as described in the Microsoft DirectX SDK. Contents of this article: What Is DirectDrawEx? Advantages of Using DirectDrawEx Creating DirectDraw Objects and Surfaces with DirectDrawEx Distinctions Between DirectDraw and DirectDrawEx What Is DirectDrawEx? DirectDrawEx is a dynamic-link library (DLL) that embellishes current functionality of DirectDraw, enhancing existing features and providing new functionality. DirectDrawEx also exposes new interfaces that applications can use when you include the ddrawex.h header file. To create a DirectDraw object that can use the extended features provided by DirectDrawEx, you must create the object by using the IDirectDrawFactory interface. A DirectDraw object created with the IDirectDrawFactory interface will support the IDirectDraw3 interface, aggregation of DirectDraw surfaces, data exchange, and palette mapping, in addition to the features of DirectDraw objects described in the DirectX SDK. Advantages of Using DirectDrawEx The primary advantage of creating a DirectDraw object through the IDirectDrawFactory interface is that it exposes the IDirectDraw3 interface. The IDirectDraw3 interface inherits all the functionality of the IDirectDraw and the IDirectDraw2 interfaces and provides a new method that can retrieve a pointer to an IDirectDrawSurface interface, given a handle to a device context. To obtain the IDirectDraw3 interface, you must call the IDirectDrawFactory::CreateDirectDraw method to create the DirectDraw object and expose the IUnknown and IDirectDraw interfaces. Applications can then call QueryInterface to obtain a pointer to the IDirectDraw3 interface. To view sample code that demonstrates this, see Creating DirectDraw Objects and Surfaces with DirectDrawEx. Another advantage of using DirectDrawEx over using DirectDraw is that you can now aggregate inner objects with outer objects by using the IDirectDraw3::CreateSurface method. Formerly, IDirectDraw::CreateSurface and IDirectDraw2::CreateSurface did not provide COM aggregation features. For a thorough description of how IDirectDraw3 implements aggregation see, IDirectDraw3::CreateSurface. Finally, DirectDrawEx now also provides the DDSCAPS_DATAEXCHANGE flag for the DDSCAPS structure's dwcaps member. Setting this flag in conjunction with the DDSCAPS_OWNDC flag enables applications to call the IDirectDrawSurface::GetDC method to lock the device context for as long they require, without holding a lock on the surface. Creating DirectDraw Objects and Surfaces with DirectDrawEx The following sample code demonstrates how to create a DirectDraw object by using DirectDrawEx, and get a pointer to the IDirectDraw3 interface. The code shows how to create and call DirectDraw objects. #include ddrawex.h void CreateDDEx() { //Declarations HRESULT hr; IDirectDraw *pDD; IDirectDraw3 *pDD3; IDirectDrawFactory *pDDF; //Initialize COM library CoInitialize(NULL); //Create a DirectDrawFactory object and get //an IDirectDrawFactory interface pointer CoCreateInstance(CLSID_DirectDrawFactory, NULL, CLSCTX_INPROC_SERVER, IID_IDirectDrawFactory, (void **)&pDDF); //Call the IDirectDrawFactory::CreateDirectDraw method to create the //DirectDraw surface, set the cooperative level, and get the address //of an IDirectDraw interface pointer hr = (pDDF->CreateDirectDraw(NULL, GetDesktopWindow(), DDSCL_NORMAL, NULL, NULL, &pDD)); if (hr !=DD_OK) {//error checking } //Now query for the new IDirectDraw3 interface, and release the old one. hr =(pDD->QueryInterface(IID_IDirectDraw3, (LPVOID*)&pDD3)); if (hr !=S_OK) {//error checking } //Release IDirectDraw pDD->Release(); pDD= NULL; //Initialize the DDSURFACEDESC structure for the primary surface ZeroMemory(&ddsd, sizeof(ddsd)); ddsd.dwSize = sizeof(ddsd); ddsd.dwFlags = DDSD_CAPS; ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE; hr = pDD3->CreateSurface(&ddsd, &pPrimarySurface, NULL); //Do whatever you need to do in your application here with your //DirectDraw surface //Release IDirectDraw3, IDirectDrawFactory, and the DirectDraw surface pDD3->Release(); pDDF->Release(); pPrimarySurface->Release(); //Close the COM library CoUninitialize(); } Distinctions Between DirectDraw and DirectDrawEx One important distinction to note between DirectDrawEx and DirectDraw is that applications that have created multiple DirectDrawSurfaces through a DirectDrawEx surface must release every DirectDraw surface. Also, calling the GetDDInterface method from any surface created under DirectDrawEx will return a pointer to the IUnknown interface instead of a pointer to an IDirectDraw interface. Applications must use the IUnknown::QueryInterface method to retrieve the IDirectDraw, IDirectDraw2, or IDirectDraw3 interfaces. Finally, DirectDrawEx does not currently support blitting between surfaces created by DirectDrawEx and surfaces created by DirectDraw. Applications should blit only between similar surfaces. 1997 Microsoft Corporation. All rights reserved. Terms of Use. */ // from ddrawex.h //DECLARE_INTERFACE_(IDirectDrawFactory, IUnknown) //{ // /*** IUnknown methods ***/ // STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE; // STDMETHOD_(ULONG,AddRef) (THIS) PURE; // STDMETHOD_(ULONG,Release) (THIS) PURE; // /*** IDirectDrawFactory methods ***/ // STDMETHOD(CreateDirectDraw) (THIS_ GUID * pGUID, HWND hWnd, DWORD dwCoopLevelFlags, DWORD dwReserved, IUnknown *pUnkOuter, IDirectDraw **ppDirectDraw) PURE; // STDMETHOD(DirectDrawEnumerate) (THIS_ LPDDENUMCALLBACK lpCallback, LPVOID lpContext) PURE; //}; // DirectDrawEx API (undocumented) HRESULT WINAPI extDllCanUnloadNow(void); HRESULT WINAPI extDllGetClassObject(REFCLSID, REFIID, void **); HRESULT WINAPI extDllRegisterServer(void); HRESULT WINAPI extDllUnregisterServer(void); typedef HRESULT (WINAPI *DllCanUnloadNow_Type)(void); typedef HRESULT (WINAPI *DllGetClassObject_Type)(REFCLSID, REFIID, void **); typedef HRESULT (WINAPI *DllRegisterServer_Type)(void); typedef HRESULT (WINAPI *DllUnregisterServer_Type)(void); DllCanUnloadNow_Type pDllCanUnloadNow; DllGetClassObject_Type pDllGetClassObject; DllRegisterServer_Type pDllRegisterServer; DllUnregisterServer_Type pDllUnregisterServer; // DirectDrawEx class objects HRESULT WINAPI extCreateDirectDraw(void *, GUID *, HWND, DWORD, DWORD, IUnknown *, IDirectDraw **); HRESULT WINAPI extDirectDrawEnumerateEX(void *, LPDDENUMCALLBACK, LPVOID); typedef HRESULT (WINAPI *CreateDirectDrawEX_Type)(void *, GUID *, HWND, DWORD, DWORD, IUnknown *, IDirectDraw **); typedef HRESULT (WINAPI *DirectDrawEnumerateEX_Type)(void *, LPDDENUMCALLBACK, LPVOID); CreateDirectDrawEX_Type pCreateDirectDrawEX = NULL; DirectDrawEnumerateEX_Type pDirectDrawEnumerateEX = NULL; // static functions static char *sGUID(GUID *pGUID) { static char sGUIDBuffer[81]; switch ((DWORD)pGUID){ case 0: return "(NULL)"; break; case DDCREATE_EMULATIONONLY: return "DDCREATE_EMULATIONONLY"; break; case DDCREATE_HARDWAREONLY: return "DDCREATE_HARDWAREONLY"; break; default: sprintf(sGUIDBuffer, "%x.%x.%x.%x", pGUID->Data1, pGUID->Data2, pGUID->Data3, pGUID->Data4); return sGUIDBuffer; break; } } // Library hook static HookEntryEx_Type ddexHooks[]={ {HOOK_HOT_CANDIDATE, 0x01, "DllCanUnloadNow", (FARPROC)NULL, (FARPROC *)&pDllCanUnloadNow, (FARPROC)extDllCanUnloadNow}, {HOOK_HOT_CANDIDATE, 0x02, "DllGetClassObject", (FARPROC)NULL, (FARPROC *)&pDllGetClassObject, (FARPROC)extDllGetClassObject}, {HOOK_HOT_CANDIDATE, 0x03, "DllRegisterServer", (FARPROC)NULL, (FARPROC *)&pDllRegisterServer, (FARPROC)extDllRegisterServer}, {HOOK_HOT_CANDIDATE, 0x04, "DllUnregisterServer", (FARPROC)NULL, (FARPROC *)&pDllUnregisterServer, (FARPROC)extDllUnregisterServer}, {HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator }; void HookDirectDrawFactoryLib(HMODULE module) { HookLibraryEx(module, ddexHooks, "ddrawex.dll"); } // Objects Hook void HookDirectDrawFactory(void *obj) { //MessageBox(0,"Hooking IID_DirectDrawFactory object", "DxWnd", MB_OK); OutTrace("Hooking IID_DirectDrawFactory object\n"); //SetHook((void *)(**(DWORD **)obj ), extQueryInterfaceD1, (void **)&pQueryInterfaceD1, "QueryInterface(D1)"); //SetHook((void *)(**(DWORD **)obj + 8), extReleaseD1, (void **)&pReleaseD1, "Release(D1)"); SetHook((void *)(**(DWORD **)obj + 12), extCreateDirectDraw, (void **)&pCreateDirectDrawEX, "CreateDirectDraw(ex)"); SetHook((void *)(**(DWORD **)obj + 16), extDirectDrawEnumerateEX, (void **)&pDirectDrawEnumerateEX, "DirectDrawEnumerate(ex)"); } // API wrappers HRESULT WINAPI extDllCanUnloadNow(void) { HRESULT res; OutTraceDW("ddrawex#DllCanUnloadNow\n"); res = (*pDllCanUnloadNow)(); if(res) OutTraceE("ddrawex#DllCanUnloadNow ERROR: res=%x\n", res); return res; } HRESULT WINAPI extDllGetClassObject(REFCLSID rclsid, REFIID riid, void **out) { HRESULT res; OutTraceDW("ddrawex#DllGetClassObject: clsid=%x refiid=%x\n", rclsid, riid); res = (*pDllGetClassObject)(rclsid, riid, out); if(res) OutTraceE("ddrawex#DllGetClassObject ERROR: res=%x\n", res); return res; } HRESULT WINAPI extDllRegisterServer(void) { HRESULT res; OutTraceDW("ddrawex#DllRegisterServer\n"); res = (*pDllRegisterServer)(); if(res) OutTraceE("ddrawex#DllRegisterServer ERROR: res=%x\n", res); return res; } HRESULT WINAPI extDllUnregisterServer(void) { HRESULT res; OutTraceDW("ddrawex#DllUnregisterServer\n"); res = (*pDllUnregisterServer)(); if(res) OutTraceE("ddrawex#DllUnregisterServer ERROR: res=%x\n", res); return res; } // COM bject wrappers HRESULT WINAPI extCreateDirectDraw(void *ddf, GUID *pGUID, HWND hWnd, DWORD dwCoopLevelFlags, DWORD dwReserved, IUnknown *pUnkOuter, IDirectDraw **ppDirectDraw) { HRESULT res; if(IsTraceDW){ OutTrace("CreateDirectDraw(EX): factory=%x guid=%s hwnd=%x coopflags=%x(%s)\n", ddf, sGUID(pGUID), hWnd, dwCoopLevelFlags, ExplainCoopFlags(dwCoopLevelFlags)); } res = (*pCreateDirectDrawEX)(ddf, pGUID, hWnd, dwCoopLevelFlags, dwReserved, pUnkOuter, ppDirectDraw); if(res){ OutTraceE("CreateDirectDraw(EX) ERROR: res=%x\n"); } else { // CreateDirectDraw can load an unreferences ddraw.dll module, so it's time now to hook it. extern DirectDrawCreate_Type pDirectDrawCreate; if(pDirectDrawCreate == NULL){ HINSTANCE hinst; hinst=(*pLoadLibraryA)("ddraw.dll"); HookDirectDraw(hinst, 1); FreeLibrary(hinst); } OutTraceDW("CreateDirectDraw(EX): guid=%s pDirectDraw=%x\n", sGUID(pGUID), *ppDirectDraw); } return res; } HRESULT WINAPI extDirectDrawEnumerateEX(void *ddf, LPDDENUMCALLBACK lpCallback, LPVOID lpContext) { HRESULT res; OutTraceDW("DirectDrawEnumerate(EX): factory=%x\n", ddf); res = (*pDirectDrawEnumerateEX)(ddf, lpCallback, lpContext); if(res) OutTraceE("DirectDrawEnumerate(EX) ERROR: res=%x\n"); return res; } ================================================ FILE: dll/ddshot.cpp ================================================ #define _CRT_SECURE_NO_WARNINGS #include #include #include "dxwnd.h" #include "dxwcore.hpp" #include "dxhelper.h" extern char *ExplainDDError(DWORD); typedef HRESULT (WINAPI *Lock_Type)(LPDIRECTDRAWSURFACE, LPRECT, LPDDSURFACEDESC, DWORD, HANDLE); typedef HRESULT (WINAPI *Unlock4_Type)(LPDIRECTDRAWSURFACE, LPRECT); typedef HRESULT (WINAPI *Unlock1_Type)(LPDIRECTDRAWSURFACE, LPVOID); extern Lock_Type pLockMethod(int); extern Unlock4_Type pUnlockMethod(int); extern int Set_dwSize_From_Surface(); void DDrawScreenShot(int dxversion) { LPDIRECTDRAWSURFACE s; DDSURFACEDESC2 ddsd; int w, h, iSurfaceSize, iScanLineSize; HRESULT res; static int MinTexX, MinTexY, MaxTexX, MaxTexY; static BOOL DoOnce = TRUE; char pszFile[MAX_PATH]; static int hash = 0; if(DoOnce){ sprintf_s(pszFile, MAX_PATH, "%s\\screenshot.out", GetDxWndPath()); CreateDirectory(pszFile, NULL); while(TRUE){ sprintf_s(pszFile, MAX_PATH, "%s\\screenshot.out\\shot.%08d.bmp", GetDxWndPath(), hash); if(GetFileAttributes(pszFile) == INVALID_FILE_ATTRIBUTES) break; hash++; } DoOnce = FALSE; } if(dxw.dwFlags5 & GDIMODE){ s = dxwss.GetBackBufferSurface(); } else{ s = dxwss.GetPrimarySurface(); } if(!s) return; memset(&ddsd,0,sizeof(DDSURFACEDESC2)); ddsd.dwSize = Set_dwSize_From_Surface(); ddsd.dwFlags = DDSD_LPSURFACE | DDSD_PITCH; if(res=(*pLockMethod(dxversion))(s, 0, (LPDDSURFACEDESC)&ddsd, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){ OutTraceE("ScreenShot: Lock ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); return; } while (TRUE) { // fake loop OutTrace("ScreenShot: lpdds=%x BitCount=%d size=(%dx%d)\n", s, ddsd.ddpfPixelFormat.dwRGBBitCount, ddsd.dwWidth, ddsd.dwHeight); w = ddsd.dwWidth; h = ddsd.dwHeight; if(ddsd.ddpfPixelFormat.dwRGBBitCount == 0) { OutTrace("ScreenShot: SKIP 0BPP texture\n"); break; } iSurfaceSize = ddsd.dwHeight * ddsd.lPitch; FILE *hf; BITMAPFILEHEADER hdr; // bitmap file-header BITMAPV4HEADER pbi; // bitmap info-header memset((void *)&pbi, 0, sizeof(BITMAPV4HEADER)); pbi.bV4Size = sizeof(BITMAPV4HEADER); pbi.bV4Width = ddsd.dwWidth; pbi.bV4Height = ddsd.dwHeight; pbi.bV4BitCount = (WORD)ddsd.ddpfPixelFormat.dwRGBBitCount; pbi.bV4SizeImage = ((pbi.bV4Width * pbi.bV4BitCount + 0x1F) & ~0x1F)/8 * pbi.bV4Height; pbi.bV4Height = - pbi.bV4Height; pbi.bV4Planes = 1; pbi.bV4V4Compression = BI_BITFIELDS; if(pbi.bV4BitCount == 8) pbi.bV4V4Compression = BI_RGB; pbi.bV4XPelsPerMeter = 1; pbi.bV4YPelsPerMeter = 1; pbi.bV4ClrUsed = 0; if(pbi.bV4BitCount == 8) pbi.bV4ClrUsed = 256; pbi.bV4ClrImportant = 0; pbi.bV4RedMask = ddsd.ddpfPixelFormat.dwRBitMask; pbi.bV4GreenMask = ddsd.ddpfPixelFormat.dwGBitMask; pbi.bV4BlueMask = ddsd.ddpfPixelFormat.dwBBitMask; pbi.bV4AlphaMask = ddsd.ddpfPixelFormat.dwRGBAlphaBitMask; pbi.bV4CSType = LCS_CALIBRATED_RGB; iScanLineSize = ((pbi.bV4Width * pbi.bV4BitCount + 0x1F) & ~0x1F)/8; // Create the .BMP file. sprintf_s(pszFile, MAX_PATH, "%s\\screenshot.out\\shot.%08d.bmp", GetDxWndPath(), hash++); hf = fopen(pszFile, "wb"); if(!hf) break; hdr.bfType = 0x4d42; // 0x42 = "B" 0x4d = "M" // Compute the size of the entire file. hdr.bfSize = (DWORD) (sizeof(BITMAPFILEHEADER) + pbi.bV4Size + pbi.bV4ClrUsed * sizeof(RGBQUAD) + pbi.bV4SizeImage); hdr.bfReserved1 = 0; hdr.bfReserved2 = 0; // Compute the offset to the array of color indices. hdr.bfOffBits = (DWORD) sizeof(BITMAPFILEHEADER) + pbi.bV4Size + pbi.bV4ClrUsed * sizeof (RGBQUAD); // Copy the BITMAPFILEHEADER into the .BMP file. fwrite((LPVOID)&hdr, sizeof(BITMAPFILEHEADER), 1, hf); // Copy the BITMAPINFOHEADER array into the file. fwrite((LPVOID)&pbi, sizeof(BITMAPV4HEADER), 1, hf); // Copy the RGBQUAD array into the file. if(pbi.bV4ClrUsed){ extern DWORD PaletteEntries[256]; fwrite((LPVOID)PaletteEntries, pbi.bV4ClrUsed * sizeof (RGBQUAD), 1, hf); } // Copy the array of color indices into the .BMP file. for(int y=0; y<(int)ddsd.dwHeight; y++) fwrite((BYTE *)ddsd.lpSurface + (y*ddsd.lPitch), iScanLineSize, 1, hf); // Close the .BMP file. fclose(hf); break; } res=(*pUnlockMethod(dxversion))(s, NULL); if (res) OutTraceE("ScreenShot: Unlock ERROR lpdds=%x res=%x(%s) at %d\n", s, res, ExplainDDError(res), __LINE__); } ================================================ FILE: dll/ddtexture.cpp ================================================ #define _CRT_SECURE_NO_WARNINGS #include #include #include #include "dxwnd.h" #include "dxwcore.hpp" #include "dxhook.h" #include "syslibs.h" #include "dxhelper.h" #include "dxdds.h" extern char *ExplainDDError(DWORD); typedef HRESULT (WINAPI *Lock_Type)(LPDIRECTDRAWSURFACE, LPRECT, LPDDSURFACEDESC, DWORD, HANDLE); typedef HRESULT (WINAPI *Unlock4_Type)(LPDIRECTDRAWSURFACE, LPRECT); typedef HRESULT (WINAPI *Unlock1_Type)(LPDIRECTDRAWSURFACE, LPVOID); extern Lock_Type pLockMethod(int); extern Unlock4_Type pUnlockMethod(int); extern int Set_dwSize_From_Surface(); #define GRIDSIZE 16 typedef enum { FORMAT_BMP = 0, FORMAT_RAW, FORMAT_DDS }; /* RS Hash Function */ static unsigned int Hash(BYTE *buf, int len) { unsigned int b = 378551; unsigned int a = 63689; DWORD hash = 0; for(int i = 0; i < len; i++){ hash = hash * a + buf[i]; a = a * b; } return hash; } unsigned int HashSurface(BYTE *buf, int pitch, int width, int height) { unsigned int b = 378551; unsigned int a = 63689; int pixelsize; DWORD hash = 0; // integer divide, intentionally throwing reminder away if (width == 0) return 0; // avoid DivBy0 error pixelsize = pitch / width; for(int y = 0; y < height; y++){ BYTE *p = buf + (y * pitch); for(int x = 0; x < width; x++){ for(int pixelbyte = 0; pixelbyte < pixelsize; pixelbyte++){ hash = (hash * a) + (*p++); a = a * b; } } } return hash; } static char *SurfaceType(DDPIXELFORMAT ddpfPixelFormat) { static char sSurfaceType[81]; char sColorType[21]; DWORD mask; int i, count; if(ddpfPixelFormat.dwRGBBitCount == 8) return "RGB8"; strcpy(sSurfaceType, ""); // red mask=ddpfPixelFormat.dwRBitMask; for (i=0, count=0; i<32; i++) { if(mask & 0x1) count++; mask >>= 1; } sprintf(sColorType, "R%d", count); strcat(sSurfaceType, sColorType); // green mask=ddpfPixelFormat.dwGBitMask; for (i=0, count=0; i<32; i++) { if(mask & 0x1) count++; mask >>= 1; } sprintf(sColorType, "G%d", count); strcat(sSurfaceType, sColorType); // blue mask=ddpfPixelFormat.dwBBitMask; for (i=0, count=0; i<32; i++) { if(mask & 0x1) count++; mask >>= 1; } sprintf(sColorType, "B%d", count); strcat(sSurfaceType, sColorType); // alpha channel mask=ddpfPixelFormat.dwRGBAlphaBitMask; if(mask){ for (i=0, count=0; i<32; i++) { if(mask & 0x1) count++; mask >>= 1; } sprintf(sColorType, "A%d", count); strcat(sSurfaceType, sColorType); } return sSurfaceType; } void TextureHighlight(LPDIRECTDRAWSURFACE s, int dxversion) { DDSURFACEDESC2 ddsd; int x, y, w, h; HRESULT res; OutTraceB("TextureHigh(%d): lpdds=%x\n", dxversion, s); memset(&ddsd,0,sizeof(DDSURFACEDESC2)); ddsd.dwSize = Set_dwSize_From_Surface(); ddsd.dwFlags = DDSD_LPSURFACE | DDSD_PITCH; // if(res=(*pLockMethod(lpddsHookedVersion()))(s, 0, (LPDDSURFACEDESC)&ddsd, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){ if(res=(*pLockMethod(dxversion))(s, 0, (LPDDSURFACEDESC)&ddsd, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){ OutTraceE("TextureHigh(%d): Lock ERROR res=%x(%s) at %d\n", dxversion, res, ExplainDDError(res), __LINE__); return; } if((ddsd.ddsCaps.dwCaps & DDSCAPS_TEXTURE) && !dxwss.IsABackBufferSurface(s)) { OutTrace("TextureHigh(%d): lpdds=%x BitCount=%d size=(%dx%d)\n", dxversion, s, ddsd.ddpfPixelFormat.dwRGBBitCount, ddsd.dwWidth, ddsd.dwHeight); w = ddsd.dwWidth; h = ddsd.dwHeight; switch (ddsd.ddpfPixelFormat.dwRGBBitCount){ case 8: { BYTE *p; BYTE color; color=(BYTE)(rand() & 0xFF); for(y=0; y> 1); for(x=0; x> 1); for(x=0; x> 2); for(x=0; x> 2); for(x=0; xMaxTexX)) || (MaxTexY && (h>MaxTexY))) { OutTrace("TextureDump: SKIP big texture\n"); break; } if(ddsd.ddpfPixelFormat.dwRGBBitCount == 0) { OutTrace("TextureDump: SKIP 0BPP texture\n"); break; } if((ddsd.lPitch == 0) || (ddsd.dwHeight == 0)) { OutTrace("TextureDump: SKIP void texture\n"); break; } iSurfaceSize = ddsd.dwHeight * ddsd.lPitch; FILE *hf; BITMAPFILEHEADER hdr; // bitmap file-header BITMAPV4HEADER pbi; // bitmap info-header memset((void *)&pbi, 0, sizeof(BITMAPV4HEADER)); pbi.bV4Size = sizeof(BITMAPV4HEADER); pbi.bV4Width = ddsd.dwWidth; pbi.bV4Height = ddsd.dwHeight; pbi.bV4BitCount = (WORD)ddsd.ddpfPixelFormat.dwRGBBitCount; pbi.bV4SizeImage = ((pbi.bV4Width * pbi.bV4BitCount + 0x1F) & ~0x1F)/8 * pbi.bV4Height; pbi.bV4Height = - pbi.bV4Height; pbi.bV4Planes = 1; pbi.bV4V4Compression = BI_BITFIELDS; if(pbi.bV4BitCount == 8) pbi.bV4V4Compression = BI_RGB; pbi.bV4XPelsPerMeter = 1; pbi.bV4YPelsPerMeter = 1; pbi.bV4ClrUsed = 0; if(pbi.bV4BitCount == 8) pbi.bV4ClrUsed = 256; pbi.bV4ClrImportant = 0; pbi.bV4RedMask = ddsd.ddpfPixelFormat.dwRBitMask; pbi.bV4GreenMask = ddsd.ddpfPixelFormat.dwGBitMask; pbi.bV4BlueMask = ddsd.ddpfPixelFormat.dwBBitMask; pbi.bV4AlphaMask = ddsd.ddpfPixelFormat.dwRGBAlphaBitMask; pbi.bV4CSType = LCS_CALIBRATED_RGB; iScanLineSize = ((pbi.bV4Width * pbi.bV4BitCount + 0x1F) & ~0x1F)/8; // calculate the bitmap hash DWORD hash; hash = HashSurface((BYTE *)ddsd.lpSurface, ddsd.lPitch, ddsd.dwWidth, ddsd.dwHeight); if(!hash) { OutTrace("TextureDump: lpdds=%x hash=NULL\n", s); break; // almost certainly, an empty black surface! } // Create the .BMP file. switch (iTextureFileFormat){ case FORMAT_BMP: sExt = "bmp"; break; case FORMAT_RAW: sExt = "raw"; break; case FORMAT_DDS: sExt = "dds"; break; } sprintf_s(pszFile, MAX_PATH, "%s\\texture.out\\texture.%03d.%03d.%s.%08X.%s", GetDxWndPath(), ddsd.dwWidth, ddsd.dwHeight, SurfaceType(ddsd.ddpfPixelFormat), hash, sExt); hf = fopen(pszFile, "wb"); if(!hf) break; switch(iTextureFileFormat){ case FORMAT_RAW: if(fwrite((BYTE *)ddsd.lpSurface, ddsd.lPitch * ddsd.dwHeight, 1, hf)!=1) OutTraceE("TextureHack: fwrite ERROR err=%d\n", GetLastError()); break; case FORMAT_DDS: { // no good for 8bpp textured bitmaps !!! DDS_HEADER ddsh; if(fwrite("DDS ", 4, 1, hf)!=1) OutTraceE("TextureHack: fwrite ERROR err=%d\n", GetLastError()); memset(&ddsh, 0, sizeof(ddsh)); ddsh.dwSize = sizeof(ddsh); ddsh.dwFlags = DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH|DDSD_PIXELFORMAT|DDSD_PITCH; ddsh.dwHeight = ddsd.dwHeight; ddsh.dwWidth = ddsd.dwWidth; ddsh.ddspf.dwSize = sizeof(DDS_PIXELFORMAT); ddsh.ddspf.dwFlags = DDPF_RGB; ddsh.dwPitchOrLinearSize = (DWORD)ddsd.lPitch; ddsh.ddspf.dwABitMask = ddsd.ddpfPixelFormat.dwRGBAlphaBitMask; ddsh.ddspf.dwRBitMask = ddsd.ddpfPixelFormat.dwRBitMask; ddsh.ddspf.dwGBitMask = ddsd.ddpfPixelFormat.dwGBitMask; ddsh.ddspf.dwBBitMask = ddsd.ddpfPixelFormat.dwBBitMask; ddsh.ddspf.dwRGBBitCount = ddsd.ddpfPixelFormat.dwRGBBitCount; if(fwrite((BYTE *)&ddsh, sizeof(ddsh), 1, hf)!=1) OutTraceE("TextureHack: fwrite ERROR err=%d\n", GetLastError()); if(fwrite((BYTE *)ddsd.lpSurface, ddsd.lPitch * ddsd.dwHeight, 1, hf)!=1) OutTraceE("TextureHack: fwrite ERROR err=%d\n", GetLastError()); } break; case FORMAT_BMP: hdr.bfType = 0x4d42; // 0x42 = "B" 0x4d = "M" // Compute the size of the entire file. hdr.bfSize = (DWORD) (sizeof(BITMAPFILEHEADER) + pbi.bV4Size + pbi.bV4ClrUsed * sizeof(RGBQUAD) + pbi.bV4SizeImage); hdr.bfReserved1 = 0; hdr.bfReserved2 = 0; // Compute the offset to the array of color indices. hdr.bfOffBits = (DWORD) sizeof(BITMAPFILEHEADER) + pbi.bV4Size + pbi.bV4ClrUsed * sizeof (RGBQUAD); // Copy the BITMAPFILEHEADER into the .BMP file. fwrite((LPVOID)&hdr, sizeof(BITMAPFILEHEADER), 1, hf); // Copy the BITMAPINFOHEADER array into the file. fwrite((LPVOID)&pbi, sizeof(BITMAPV4HEADER), 1, hf); // Copy the RGBQUAD array into the file. if(pbi.bV4ClrUsed){ extern DWORD PaletteEntries[256]; fwrite((LPVOID)PaletteEntries, pbi.bV4ClrUsed * sizeof (RGBQUAD), 1, hf); } // Copy the array of color indices into the .BMP file. for(int y=0; y<(int)ddsd.dwHeight; y++) fwrite((BYTE *)ddsd.lpSurface + (y*ddsd.lPitch), iScanLineSize, 1, hf); break; } // Close the .BMP file. fclose(hf); break; } res=(*pUnlockMethod(dxversion))(s, NULL); if (res) OutTraceE("TextureDump: Unlock ERROR lpdds=%x res=%x(%s) at %d\n", s, res, ExplainDDError(res), __LINE__); } static void TextureHack(LPDIRECTDRAWSURFACE s, int dxversion) { static BOOL DoOnce = TRUE; DDSURFACEDESC2 ddsd; int w, h, iSurfaceSize, iScanLineSize; HRESULT res; char *sExt; static int iTextureFileFormat; if(DoOnce){ //char sProfilePath[MAX_PATH]; //sprintf(sProfilePath, "%s\\dxwnd.ini", GetDxWndPath()); //MinTexX=GetPrivateProfileInt("Texture", "MinTexX", 0, sProfilePath); //MaxTexX=GetPrivateProfileInt("Texture", "MaxTexX", 0, sProfilePath); //MinTexY=GetPrivateProfileInt("Texture", "MinTexY", 0, sProfilePath); //MaxTexY=GetPrivateProfileInt("Texture", "MaxTexY", 0, sProfilePath); //sprintf_s(pszFile, MAX_PATH, "%s\\texture.in", GetDxWndPath()); iTextureFileFormat = FORMAT_BMP; if(dxw.dwFlags8 & RAWFORMAT) iTextureFileFormat = FORMAT_RAW; if(dxw.dwFlags8 & DDSFORMAT) iTextureFileFormat = FORMAT_DDS; //OutTrace("TextureHack: size min=(%dx%d) max=(%dx%d) format=%d\n", MinTexX, MinTexY, MaxTexX, MaxTexY, iTextureFileFormat); OutTrace("TextureHack: format=%d\n", iTextureFileFormat); } OutTraceB("TextureHack(%d): lpdds=%x\n", dxversion, s); memset(&ddsd,0,sizeof(DDSURFACEDESC2)); ddsd.dwSize = Set_dwSize_From_Surface(); ddsd.dwFlags = DDSD_LPSURFACE | DDSD_PITCH; if(res=(*pLockMethod(dxversion))(s, 0, (LPDDSURFACEDESC)&ddsd, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){ OutTraceE("TextureHack: Lock ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); return; } if((ddsd.ddsCaps.dwCaps & DDSCAPS_TEXTURE) && !dxwss.IsABackBufferSurface(s)) while (TRUE) { // fake loop to ensure final Unlock OutTrace("TextureHack(%d): lpdds=%x BitCount=%d size=(%dx%d) surface=%x\n", dxversion, s, ddsd.ddpfPixelFormat.dwRGBBitCount, ddsd.dwWidth, ddsd.dwHeight, ddsd.lpSurface); w = ddsd.dwWidth; h = ddsd.dwHeight; iSurfaceSize = ddsd.dwHeight * ddsd.lPitch; FILE *hf; BITMAPFILEHEADER hdr; // bitmap file-header BITMAPINFOHEADER pbi; // bitmap info-header char pszFile[MAX_PATH]; int iSizeImage; // calculate the bitmap hash DWORD hash; hash = HashSurface((BYTE *)ddsd.lpSurface, ddsd.lPitch, ddsd.dwWidth, ddsd.dwHeight); if(!hash) break; // almost certainly, an empty black surface! // Look for the .BMP file. switch (iTextureFileFormat){ case FORMAT_BMP: sExt = "bmp"; break; case FORMAT_RAW: sExt = "raw"; break; case FORMAT_DDS: sExt = "dds"; break; } sprintf_s(pszFile, MAX_PATH, "%s\\texture.in\\texture.%03d.%03d.%s.%08X.%s", GetDxWndPath(), ddsd.dwWidth, ddsd.dwHeight, SurfaceType(ddsd.ddpfPixelFormat), hash, sExt); hf = fopen(pszFile, "rb"); if(!hf) break; // no updated texture to load OutTrace("TextureHack: IMPORT path=%s\n", pszFile); switch(iTextureFileFormat){ case FORMAT_RAW: { if(fread((BYTE *)ddsd.lpSurface, ddsd.lPitch * ddsd.dwHeight, 1, hf)!=1) OutTraceE("TextureHack: fread ERROR err=%d\n", GetLastError()); } break; case FORMAT_DDS: { BYTE magic[4]; DDS_HEADER ddsh; // assume the file is sane, read and throw away magic and dds header if(fread(magic, 4, 1, hf)!=1) OutTraceE("TextureHack: fread ERROR err=%d\n", GetLastError()); if(fread((BYTE *)&ddsh, sizeof(ddsh), 1, hf)!=1) OutTraceE("TextureHack: fread ERROR err=%d\n", GetLastError()); memset(&ddsh, 0, sizeof(ddsh)); if(fread((BYTE *)ddsd.lpSurface, ddsd.lPitch * ddsd.dwHeight, 1, hf)!=1) OutTraceE("TextureHack: fread ERROR err=%d\n", GetLastError()); } break; case FORMAT_BMP: memset((void *)&pbi, 0, sizeof(BITMAPINFOHEADER)); pbi.biSize = sizeof(BITMAPINFOHEADER); pbi.biWidth = ddsd.dwWidth; pbi.biHeight = ddsd.dwHeight; pbi.biBitCount = (WORD)ddsd.ddpfPixelFormat.dwRGBBitCount; pbi.biSizeImage = ((pbi.biWidth * pbi.biBitCount + 0x1F) & ~0x1F)/8 * pbi.biHeight; iSizeImage = pbi.biSizeImage; iScanLineSize = ((pbi.biWidth * pbi.biBitCount + 0x1F) & ~0x1F)/8; while(TRUE) { // fake loop to ensure final fclose // Read the BITMAPFILEHEADER from the .BMP file (and throw away ...). if(fread((LPVOID)&hdr, sizeof(BITMAPFILEHEADER), 1, hf) != 1)break; // Read the BITMAPINFOHEADER (and throw away ...). // If the file contains BITMAPV4HEADER or BITMAPV5HEADER, no problem: next fseek will settle things if(fread((LPVOID)&pbi, sizeof(BITMAPINFOHEADER), 1, hf) != 1) break; // skip the RGBQUAD array if the editor inserted one fseek(hf, hdr.bfOffBits, SEEK_SET); // Read the new texture from the .BMP file. if(pbi.biHeight < 0){ // biHeight < 0 -> scan lines from top to bottom, same as surface/texture convention for(int y=0; y<(int)ddsd.dwHeight; y++){ BYTE *p = (BYTE *)ddsd.lpSurface + (ddsd.lPitch * y); fseek(hf, hdr.bfOffBits + (iScanLineSize * y), SEEK_SET); if(fread((LPVOID)p, ddsd.lPitch, 1, hf) != 1) break; } } else { // biHeight > 0 -> scan lines from bottom to top, inverse order as surface/texture convention for(int y=0; y<(int)ddsd.dwHeight; y++){ BYTE *p = (BYTE *)ddsd.lpSurface + (ddsd.lPitch * ((ddsd.dwHeight-1) - y)); fseek(hf, hdr.bfOffBits + (iScanLineSize * y), SEEK_SET); if(fread((LPVOID)p, ddsd.lPitch, 1, hf) != 1) break; } } OutTrace("TextureHack: TEXTURE LOAD DONE\n"); break; } break; } // Close the .BMP file. fclose(hf); break; } res=(*pUnlockMethod(dxversion))(s, NULL); if (res) OutTraceE("TextureHack: Unlock ERROR lpdds=%x res=%x(%s) at %d\n", s, res, ExplainDDError(res), __LINE__); } void TextureTransp(LPDIRECTDRAWSURFACE s, int dxversion) { DDSURFACEDESC2 ddsd; int x, y, w, h; HRESULT res; OutTraceB("TextureTransp(%d): lpdds=%x\n", dxversion, s); memset(&ddsd,0,sizeof(DDSURFACEDESC2)); ddsd.dwSize = Set_dwSize_From_Surface(); ddsd.dwFlags = DDSD_LPSURFACE | DDSD_PITCH; // if(res=(*pLockMethod(lpddsHookedVersion()))(s, 0, (LPDDSURFACEDESC)&ddsd, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){ if(res=(*pLockMethod(dxversion))(s, 0, (LPDDSURFACEDESC)&ddsd, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){ OutTraceE("TextureTransp(%d): Lock ERROR res=%x(%s) at %d\n", dxversion, res, ExplainDDError(res), __LINE__); return; } if((ddsd.ddsCaps.dwCaps & DDSCAPS_TEXTURE) && !dxwss.IsABackBufferSurface(s)) { OutTrace("TextureTransp(%d): lpdds=%x BitCount=%d size=(%dx%d)\n", dxversion, s, ddsd.ddpfPixelFormat.dwRGBBitCount, ddsd.dwWidth, ddsd.dwHeight); w = ddsd.dwWidth; h = ddsd.dwHeight; switch (ddsd.ddpfPixelFormat.dwRGBBitCount){ case 8: // no way break; case 16: { WORD *p; for(y=0; y> 1); for(x=0; x> 2); for(x=0; xbmiHeader.biWidth; pbi.bV4Height = pbmi->bmiHeader.biHeight; pbi.bV4BitCount = pbmi->bmiHeader.biBitCount; bV4SizeImage = ((pbi.bV4Width * pbi.bV4BitCount + 0x1F) & ~0x1F)/8 * pbi.bV4Height; if(bV4SizeImage < 0) bV4SizeImage = -bV4SizeImage; pbi.bV4SizeImage = bV4SizeImage; pbi.bV4Height = - pbi.bV4Height; pbi.bV4Planes = pbmi->bmiHeader.biPlanes; pbi.bV4V4Compression = pbmi->bmiHeader.biCompression; pbi.bV4XPelsPerMeter = 1; pbi.bV4YPelsPerMeter = 1; pbi.bV4ClrUsed = pbmi->bmiHeader.biClrUsed; if(!pbi.bV4ClrUsed) pbi.bV4ClrUsed = 1 << pbi.bV4BitCount; pbi.bV4ClrImportant = pbmi->bmiHeader.biClrImportant; pbi.bV4RedMask = 0; pbi.bV4RedMask = 0; pbi.bV4GreenMask = 0; pbi.bV4BlueMask = 0; pbi.bV4AlphaMask = 0; pbi.bV4CSType = LCS_CALIBRATED_RGB; iScanLineSize = ((pbi.bV4Width * pbi.bV4BitCount + 0x1F) & ~0x1F)/8; OutTrace("DumpDibSection: prog=%08.8d size=%d wxh=(%dx%d) bc=%d sizeimg=%d planes=%d comp=%x ppm=(%dx%d) colors=%d imp=%d\n", prog, pbi.bV4Size, pbi.bV4Width, pbi.bV4Height, pbi.bV4BitCount, pbi.bV4SizeImage, pbi.bV4Planes, pbi.bV4V4Compression, pbi.bV4XPelsPerMeter, pbi.bV4YPelsPerMeter, pbi.bV4ClrUsed, pbi.bV4ClrImportant); prog++; hdr.bfType = 0x4d42; // 0x42 = "B" 0x4d = "M" // Compute the size of the entire file. hdr.bfSize = (DWORD) (sizeof(BITMAPFILEHEADER) + pbi.bV4Size + pbi.bV4ClrUsed * sizeof(RGBQUAD) + pbi.bV4SizeImage); hdr.bfReserved1 = 0; hdr.bfReserved2 = 0; // Compute the offset to the array of color indices. hdr.bfOffBits = (DWORD) sizeof(BITMAPFILEHEADER) + pbi.bV4Size + pbi.bV4ClrUsed * sizeof (RGBQUAD); // Copy the BITMAPFILEHEADER into the .BMP file. fwrite((LPVOID)&hdr, sizeof(BITMAPFILEHEADER), 1, fdump); // Copy the BITMAPINFOHEADER array into the file. fwrite((LPVOID)&pbi, sizeof(BITMAPV4HEADER), 1, fdump); // Copy the RGBQUAD array into the file. if(pbi.bV4ClrUsed) fwrite(&pbmi->bmiColors[0], pbi.bV4ClrUsed * sizeof (RGBQUAD), 1, fdump); // Copy the array of color indices into the .BMP file. //for(int y=0; y<(int)ddsd.dwHeight; y++) // fwrite((BYTE *)ddsd.lpSurface + (y*ddsd.lPitch), iScanLineSize, 1, fdump); fwrite((BYTE *)pvBits, pbi.bV4SizeImage, 1, fdump); // Close the .BMP file. fclose(fdump); } void DumpHDC(HDC hdc, int x0, int y0, int w, int h) { FILE *fdump; static int prog = 0; char path[81]; BITMAPFILEHEADER hdr; BITMAPV4HEADER pbi; // bitmap info-header if (w<0) w = -w; if (h<0) h = -h; if(prog==0) CreateDirectory(".\\bmp.out", NULL); sprintf(path,".\\bmp.out\\hdc.%08.8d.bmp", prog); fdump=fopen(path, "wb"); if(!fdump) { OutTrace("DumpHDC: err=%d\n", GetLastError()); return; } // this bitmap is not created in the same format of the original HDC: using the GetPixel call to read the pixels // means that the resulting image will be 32bpp color depth memset((void *)&pbi, 0, sizeof(BITMAPV4HEADER)); pbi.bV4Size = sizeof(BITMAPV4HEADER); pbi.bV4Width = w; pbi.bV4Height = h; pbi.bV4BitCount = 32; pbi.bV4SizeImage = ((pbi.bV4Width * pbi.bV4BitCount + 0x1F) & ~0x1F)/8 * pbi.bV4Height; pbi.bV4Height = -pbi.bV4Height; pbi.bV4Planes = 1; pbi.bV4V4Compression = BI_BITFIELDS; pbi.bV4XPelsPerMeter = 1; pbi.bV4YPelsPerMeter = 1; pbi.bV4ClrUsed = 0; pbi.bV4ClrImportant = 0; pbi.bV4RedMask = 0x000000FF; pbi.bV4GreenMask = 0x0000FF00; pbi.bV4BlueMask = 0x00FF0000; pbi.bV4AlphaMask = 0x00000000; pbi.bV4CSType = LCS_CALIBRATED_RGB; int iScanLineSize = ((pbi.bV4Width * pbi.bV4BitCount + 0x1F) & ~0x1F)/8; OutTrace("DumpDevContext: prog=%08.8d size=%d wxh=(%dx%d) bc=%d sizeimg=%d planes=%d comp=%x ppm=(%dx%d) colors=%d imp=%d\n", prog, pbi.bV4Size, pbi.bV4Width, pbi.bV4Height, pbi.bV4BitCount, pbi.bV4SizeImage, pbi.bV4Planes, pbi.bV4V4Compression, pbi.bV4XPelsPerMeter, pbi.bV4YPelsPerMeter, pbi.bV4ClrUsed, pbi.bV4ClrImportant); prog++; // Fill in the fields of the file header hdr.bfType = ((WORD) ('M' << 8) | 'B'); // is always "BM" hdr.bfSize = (w * h) + sizeof( hdr ); hdr.bfReserved1 = 0; hdr.bfReserved2 = 0; hdr.bfOffBits = (DWORD)(sizeof(hdr) + sizeof(pbi)); // Write the file header fwrite( &hdr, sizeof(hdr), 1, fdump); // Write the DIB header fwrite( &pbi, sizeof(pbi), 1, fdump ); // Write the bits for(int y=y0; y #include #include "dxwnd.h" #include "dxhook.h" #include "dxwcore.hpp" #include "syslibs.h" #include "dxhelper.h" #ifndef DIDEVTYPE_MOUSE #define DIDEVTYPE_DEVICE 1 #define DIDEVTYPE_MOUSE 2 #define DIDEVTYPE_KEYBOARD 3 #define DIDEVTYPE_JOYSTICK 4 #endif extern BOOL WINAPI extGetCursorPos(LPPOINT); #ifndef OLDDIRECTINPUTVERSION #define OLDDIRECTINPUTVERSION 0x8007047e #endif /* DEFINE_GUID(IID_IDirectInputA, 0x89521360,0xAA8A,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(IID_IDirectInputW, 0x89521361,0xAA8A,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(IID_IDirectInput2A, 0x5944E662,0xAA8A,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(IID_IDirectInput2W, 0x5944E663,0xAA8A,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(IID_IDirectInput7A, 0x9A4CB684,0x236D,0x11D3,0x8E,0x9D,0x00,0xC0,0x4F,0x68,0x44,0xAE); DEFINE_GUID(IID_IDirectInput7W, 0x9A4CB685,0x236D,0x11D3,0x8E,0x9D,0x00,0xC0,0x4F,0x68,0x44,0xAE); DEFINE_GUID(IID_IDirectInput8A, 0xBF798030,0x483A,0x4DA2,0xAA,0x99,0x5D,0x64,0xED,0x36,0x97,0x00); DEFINE_GUID(IID_IDirectInput8W, 0xBF798031,0x483A,0x4DA2,0xAA,0x99,0x5D,0x64,0xED,0x36,0x97,0x00); DEFINE_GUID(IID_IDirectInputDeviceA, 0x5944E680,0xC92E,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(IID_IDirectInputDeviceW, 0x5944E681,0xC92E,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(IID_IDirectInputDevice2A,0x5944E682,0xC92E,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(IID_IDirectInputDevice2W,0x5944E683,0xC92E,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(IID_IDirectInputDevice7A,0x57D7C6BC,0x2356,0x11D3,0x8E,0x9D,0x00,0xC0,0x4F,0x68,0x44,0xAE); DEFINE_GUID(IID_IDirectInputDevice7W,0x57D7C6BD,0x2356,0x11D3,0x8E,0x9D,0x00,0xC0,0x4F,0x68,0x44,0xAE); DEFINE_GUID(IID_IDirectInputDevice8A,0x54D41080,0xDC15,0x4833,0xA4,0x1B,0x74,0x8F,0x73,0xA3,0x81,0x79); DEFINE_GUID(IID_IDirectInputDevice8W,0x54D41081,0xDC15,0x4833,0xA4,0x1B,0x74,0x8F,0x73,0xA3,0x81,0x79); DEFINE_GUID(IID_IDirectInputEffect, 0xE7E1F7C0,0x88D2,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35); */ typedef HRESULT (WINAPI *QueryInterface_Type)(void *, REFIID, LPVOID *); typedef HRESULT (WINAPI *DirectInputCreateA_Type)(HINSTANCE, DWORD, LPDIRECTINPUTA *, LPUNKNOWN); typedef HRESULT (WINAPI *DirectInputCreateW_Type)(HINSTANCE, DWORD, LPDIRECTINPUTW *, LPUNKNOWN); typedef HRESULT (WINAPI *DirectInputCreateEx_Type)(HINSTANCE, DWORD, REFIID, LPVOID *, LPUNKNOWN); typedef HRESULT (WINAPI *DICreateDeviceA_Type)(LPDIRECTINPUTA, REFGUID, LPDIRECTINPUTDEVICEA *, LPUNKNOWN); typedef HRESULT (WINAPI *DICreateDeviceW_Type)(LPDIRECTINPUTW, REFGUID, LPDIRECTINPUTDEVICEW *, LPUNKNOWN); typedef HRESULT (WINAPI *DICreateDeviceEx_Type)(LPDIRECTINPUT, REFGUID, REFIID, LPVOID *, LPUNKNOWN); typedef HRESULT (WINAPI *GetDeviceData_Type)(LPDIRECTINPUTDEVICE, DWORD, LPVOID, LPDWORD, DWORD); typedef HRESULT (WINAPI *GetDeviceState_Type)(LPDIRECTINPUTDEVICE, DWORD, LPDIMOUSESTATE); typedef HRESULT (WINAPI *DISetCooperativeLevel_Type)(LPDIRECTINPUTDEVICE, HWND, DWORD); typedef HRESULT (WINAPI *SetDataFormat_Type)(LPDIRECTINPUTDEVICE, LPCDIDATAFORMAT); typedef HRESULT (WINAPI *DIEnumDevicesA_Type)(void *, DWORD, LPDIENUMDEVICESCALLBACKA, LPVOID, DWORD); typedef HRESULT (WINAPI *DIEnumDevicesW_Type)(void *, DWORD, LPDIENUMDEVICESCALLBACKW, LPVOID, DWORD); typedef HRESULT (WINAPI *Acquire_Type)(LPDIRECTINPUTDEVICE); typedef HRESULT (WINAPI *Unacquire_Type)(LPDIRECTINPUTDEVICE); typedef HRESULT (WINAPI *DirectInput8Create_Type)(HINSTANCE, DWORD, REFIID, LPVOID *, LPUNKNOWN); //typedef HRESULT (WINAPI *DIFindDeviceA8_Type)(void *, REFGUID, LPCSTR, LPGUID); //typedef HRESULT (WINAPI *EnumDevicesBySemantics_Type)(void *, LPCTSTR, LPDIACTIONFORMAT, LPDIENUMDEVICESBYSEMANTICSCB, LPVOID, DWORD); HRESULT WINAPI extDirectInputCreateA(HINSTANCE, DWORD, LPDIRECTINPUTA *, LPUNKNOWN); HRESULT WINAPI extDirectInputCreateW(HINSTANCE, DWORD, LPDIRECTINPUTW *, LPUNKNOWN); HRESULT WINAPI extDirectInputCreateEx(HINSTANCE, DWORD, REFIID, LPVOID *, LPUNKNOWN); HRESULT WINAPI extDirectInput8Create(HINSTANCE, DWORD, REFIID, LPVOID *, LPUNKNOWN); HRESULT WINAPI extDICreateDeviceA1(LPDIRECTINPUTA, REFGUID, LPDIRECTINPUTDEVICEA *, LPUNKNOWN); HRESULT WINAPI extDICreateDeviceA2(LPDIRECTINPUTA, REFGUID, LPDIRECTINPUTDEVICEA *, LPUNKNOWN); HRESULT WINAPI extDICreateDeviceA7(LPDIRECTINPUTA, REFGUID, LPDIRECTINPUTDEVICEA *, LPUNKNOWN); HRESULT WINAPI extDICreateDeviceA8(LPDIRECTINPUTA, REFGUID, LPDIRECTINPUTDEVICEA *, LPUNKNOWN); HRESULT WINAPI extDICreateDeviceW1(LPDIRECTINPUTW, REFGUID, LPDIRECTINPUTDEVICEW *, LPUNKNOWN); HRESULT WINAPI extDICreateDeviceW2(LPDIRECTINPUTW, REFGUID, LPDIRECTINPUTDEVICEW *, LPUNKNOWN); HRESULT WINAPI extDICreateDeviceW7(LPDIRECTINPUTW, REFGUID, LPDIRECTINPUTDEVICEW *, LPUNKNOWN); HRESULT WINAPI extDICreateDeviceW8(LPDIRECTINPUTW, REFGUID, LPDIRECTINPUTDEVICEW *, LPUNKNOWN); HRESULT WINAPI extDICreateDeviceExA(LPDIRECTINPUTA, REFGUID, REFIID, LPVOID *, LPUNKNOWN); HRESULT WINAPI extDICreateDeviceExW(LPDIRECTINPUTW, REFGUID, REFIID, LPVOID *, LPUNKNOWN); HRESULT WINAPI extGetDeviceData(LPDIRECTINPUTDEVICE, DWORD, LPVOID, LPDWORD, DWORD); HRESULT WINAPI extGetDeviceState(LPDIRECTINPUTDEVICE, DWORD, LPDIMOUSESTATE); HRESULT WINAPI extDISetCooperativeLevel(LPDIRECTINPUTDEVICE, HWND, DWORD); HRESULT WINAPI extSetDataFormat(LPDIRECTINPUTDEVICE, LPCDIDATAFORMAT); HRESULT WINAPI extDIQueryInterface(void *, REFIID, LPVOID *); HRESULT WINAPI extDIEnumDevicesA1(void *, DWORD, LPDIENUMDEVICESCALLBACKA, LPVOID, DWORD); HRESULT WINAPI extDIEnumDevicesA2(void *, DWORD, LPDIENUMDEVICESCALLBACKA, LPVOID, DWORD); HRESULT WINAPI extDIEnumDevicesA7(void *, DWORD, LPDIENUMDEVICESCALLBACKA, LPVOID, DWORD); HRESULT WINAPI extDIEnumDevicesA8(void *, DWORD, LPDIENUMDEVICESCALLBACKA, LPVOID, DWORD); HRESULT WINAPI extDIEnumDevicesW1(void *, DWORD, LPDIENUMDEVICESCALLBACKW, LPVOID, DWORD); HRESULT WINAPI extDIEnumDevicesW2(void *, DWORD, LPDIENUMDEVICESCALLBACKW, LPVOID, DWORD); HRESULT WINAPI extDIEnumDevicesW7(void *, DWORD, LPDIENUMDEVICESCALLBACKW, LPVOID, DWORD); HRESULT WINAPI extDIEnumDevicesW8(void *, DWORD, LPDIENUMDEVICESCALLBACKW, LPVOID, DWORD); HRESULT WINAPI extAcquire(LPDIRECTINPUTDEVICE); HRESULT WINAPI extUnacquire(LPDIRECTINPUTDEVICE); HRESULT WINAPI extDirectInput8Create(HINSTANCE, DWORD, REFIID, LPVOID *, LPUNKNOWN); //HRESULT WINAPI extDIFindDeviceA8(void *, REFGUID, LPCSTR, LPGUID); //HRESULT WINAPI extEnumDevicesBySemantics(void *, LPCTSTR, LPDIACTIONFORMAT, LPDIENUMDEVICESBYSEMANTICSCB, LPVOID, DWORD); DirectInputCreateA_Type pDirectInputCreateA = NULL; DirectInputCreateW_Type pDirectInputCreateW = NULL; DirectInputCreateEx_Type pDirectInputCreateEx; DICreateDeviceA_Type pDICreateDeviceA1, pDICreateDeviceA2, pDICreateDeviceA7, pDICreateDeviceA8; DICreateDeviceW_Type pDICreateDeviceW1, pDICreateDeviceW2, pDICreateDeviceW7, pDICreateDeviceW8; DICreateDeviceEx_Type pDICreateDeviceExA, pDICreateDeviceExW; //DICreateDeviceEx_Type pDICreateDeviceEx; GetDeviceData_Type pGetDeviceData = NULL; GetDeviceState_Type pGetDeviceState = NULL; DISetCooperativeLevel_Type pDISetCooperativeLevel = NULL; SetDataFormat_Type pSetDataFormat = NULL; QueryInterface_Type pDIQueryInterface = NULL; DIEnumDevicesA_Type pDIEnumDevicesA1, pDIEnumDevicesA2, pDIEnumDevicesA7, pDIEnumDevicesA8; DIEnumDevicesW_Type pDIEnumDevicesW1, pDIEnumDevicesW2, pDIEnumDevicesW7, pDIEnumDevicesW8; Acquire_Type pAcquire = NULL; Unacquire_Type pUnacquire = NULL; DirectInput8Create_Type pDirectInput8Create = NULL; //DIFindDeviceA8_Type pDIFindDeviceA8 = NULL; //EnumDevicesBySemantics_Type pEnumDevicesBySemantics = NULL; static HookEntryEx_Type diHooks[]={ {HOOK_HOT_CANDIDATE, 0, "DirectInputCreateA", (FARPROC)NULL, (FARPROC *)&pDirectInputCreateA, (FARPROC)extDirectInputCreateA}, {HOOK_HOT_CANDIDATE, 0, "DirectInputCreateW", (FARPROC)NULL, (FARPROC *)&pDirectInputCreateW, (FARPROC)extDirectInputCreateW}, {HOOK_HOT_CANDIDATE, 0, "DirectInputCreateEx", (FARPROC)NULL, (FARPROC *)&pDirectInputCreateEx, (FARPROC)extDirectInputCreateEx}, {HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator }; static HookEntryEx_Type di8Hooks[]={ {HOOK_HOT_CANDIDATE, 0, "DirectInput8Create", (FARPROC)NULL, (FARPROC *)&pDirectInput8Create, (FARPROC)extDirectInput8Create}, {HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator }; void GetMousePosition(int *, int *); void InitPosition(int, int, int, int, int, int); int iCursorX; int iCursorY; int iCursorXBuf; int iCursorYBuf; int iCurMinX; int iCurMinY; int iCurMaxX; int iCurMaxY; LPDIRECTINPUTDEVICE lpDIDDevice = NULL; LPDIRECTINPUTDEVICE lpDIDKeyboard = NULL; LPDIRECTINPUTDEVICE lpDIDSysMouse = NULL; LPDIRECTINPUTDEVICE lpDIDJoystick = NULL; static char *sDevice(LPDIRECTINPUTDEVICE lpdid) { char *ret; ret = NULL; if(lpdid==lpDIDDevice) ret = "Device"; if(lpdid==lpDIDKeyboard) ret = "Keyboard"; if(lpdid==lpDIDSysMouse) ret = "Mouse"; if(lpdid==lpDIDJoystick) ret = "Joystick"; if (ret) return ret; else return (lpdid ? "unknown" : "NULL"); } void HookDirectInput(HMODULE module) { const GUID di7 = {0x9A4CB684,0x236D,0x11D3,0x8E,0x9D,0x00,0xC0,0x4F,0x68,0x44,0xAE}; HINSTANCE hinst; LPDIRECTINPUT lpdi; if(!(dxw.dwFlags1 & HOOKDI)) return; HookLibraryEx(module, diHooks, "dinput.dll"); if(!pDirectInputCreateA && !pDirectInputCreateW && !pDirectInputCreateEx){ hinst = LoadLibrary("dinput.dll"); if(!hinst) { OutTraceE("LoadLibrary dinput.dll ERROR err=%d at %d\n", GetLastError(), __LINE__); return; } pDirectInputCreateA = (DirectInputCreateA_Type)GetProcAddress(hinst, "DirectInputCreateA"); if(pDirectInputCreateA) if(!extDirectInputCreateA(GetModuleHandle(0), DIRECTINPUT_VERSION, &lpdi, 0)) lpdi->Release(); pDirectInputCreateEx = (DirectInputCreateEx_Type)GetProcAddress(hinst, "DirectInputCreateEx"); if(pDirectInputCreateEx) if(!extDirectInputCreateEx(GetModuleHandle(0), DIRECTINPUT_VERSION, di7, (void **)&lpdi, 0)) lpdi->Release(); } } void HookDirectInput8(HMODULE module) { const GUID di8 = {0xBF798030,0x483A,0x4DA2,0xAA,0x99,0x5D,0x64,0xED,0x36,0x97,0x00}; HINSTANCE hinst; LPDIRECTINPUT lpdi; if(!(dxw.dwFlags1 & HOOKDI8)) return; HookLibraryEx(module, di8Hooks, "dinput8.dll"); if(!pDirectInput8Create){ hinst = LoadLibrary("dinput8.dll"); if(!hinst) { OutTraceE("LoadLibrary dinput8.dll ERROR err=%d at %d\n", GetLastError(), __LINE__); return; } pDirectInput8Create = (DirectInput8Create_Type)GetProcAddress(hinst, "DirectInput8Create"); if(pDirectInput8Create) if(!extDirectInput8Create(GetModuleHandle(0), DIRECTINPUT8_VERSION, di8, (LPVOID *)&lpdi, 0)) lpdi->Release(); } } FARPROC Remap_DInput_ProcAddress(LPCSTR proc, HMODULE hModule) { FARPROC addr; if ((dxw.dwFlags1 & HOOKDI) && (addr=RemapLibraryEx(proc, hModule, diHooks))) return addr; return NULL; } FARPROC Remap_DInput8_ProcAddress(LPCSTR proc, HMODULE hModule) { FARPROC addr; if ((dxw.dwFlags1 & HOOKDI8) && (addr=RemapLibraryEx(proc, hModule, di8Hooks))) return addr; return NULL; } const GUID FAR IID_IDirectInput8A = { 0xBF798030,0x483A,0x4DA2,0xAA,0x99,0x5D,0x64,0xED,0x36,0x97,0x00 }; const GUID FAR IID_IDirectInput8W = { 0xBF798031,0x483A,0x4DA2,0xAA,0x99,0x5D,0x64,0xED,0x36,0x97,0x00 }; #define OLDDIVERSION FALSE HRESULT WINAPI extDirectInputCreateA(HINSTANCE hinst, DWORD dwversion, LPDIRECTINPUT *lplpdi, LPUNKNOWN pu) { HRESULT res; OutTraceDW("DirectInputCreateA(%x)\n", dwversion); res = (*pDirectInputCreateA)(hinst, dwversion, lplpdi, pu); if(res) { if ((res == OLDDIRECTINPUTVERSION) && (dwversion == 0x800) && OLDDIVERSION){ OutTraceE("DirectInputCreateA: ERROR err=OLDDIRECTINPUTVERSION version=800 try to call DirectInput8 interface\n"); if(!pDirectInput8Create) { HMODULE hDI8; hDI8 = (*pLoadLibraryA)("dinput8.dll"); pDirectInput8Create = (DirectInput8Create_Type)(*pGetProcAddress)(hDI8, "DirectInput8Create"); } if(pDirectInput8Create){ res = extDirectInput8Create(hinst, dwversion, IID_IDirectInput8A, (LPVOID *)lplpdi, pu); return res; } } OutTraceE("DirectInputCreateA: ERROR err=%x(%s)\n", res, ExplainDDError(res)); return res; } SetHook((void *)(**(DWORD **)lplpdi), extDIQueryInterface, (void **)&pDIQueryInterface, "QueryInterface(I)"); SetHook((void *)(**(DWORD **)lplpdi + 12), extDICreateDeviceA1, (void **)&pDICreateDeviceA1, "CreateDevice(I)"); SetHook((void *)(**(DWORD **)lplpdi + 16), extDIEnumDevicesA1, (void **)&pDIEnumDevicesA1, "EnumDevices(I)"); return 0; } HRESULT WINAPI extDirectInputCreateW(HINSTANCE hinst, DWORD dwversion, LPDIRECTINPUTW *lplpdi, LPUNKNOWN pu) { HRESULT res; OutTraceDW("DirectInputCreateW(%x)\n", dwversion); res = (*pDirectInputCreateW)(hinst, dwversion, lplpdi, pu); if(res) { if ((res == OLDDIRECTINPUTVERSION) && (dwversion == 0x800) && OLDDIVERSION){ OutTraceE("DirectInputCreateA: ERROR err=OLDDIRECTINPUTVERSION version=800 try to call DirectInput8 interface\n"); if(!pDirectInput8Create) { HMODULE hDI8; hDI8 = (*pLoadLibraryA)("dinput8.dll"); pDirectInput8Create = (DirectInput8Create_Type)(*pGetProcAddress)(hDI8, "DirectInput8Create"); } if(pDirectInput8Create){ res = extDirectInput8Create(hinst, dwversion, IID_IDirectInput8W, (LPVOID *)lplpdi, pu); return res; } } OutTraceE("DirectInputCreateW: ERROR err=%x(%s)\n", res, ExplainDDError(res)); return res; } SetHook((void *)(**(DWORD **)lplpdi), extDIQueryInterface, (void **)&pDIQueryInterface, "QueryInterface(I)"); SetHook((void *)(**(DWORD **)lplpdi + 12), extDICreateDeviceW1, (void **)&pDICreateDeviceW1, "CreateDevice(IW1)"); SetHook((void *)(**(DWORD **)lplpdi + 16), extDIEnumDevicesW1, (void **)&pDIEnumDevicesW1, "EnumDevices(IW1)"); return 0; } HRESULT WINAPI extDirectInputCreateEx(HINSTANCE hinst, DWORD dwversion, REFIID riidltf, LPVOID *ppvout, LPUNKNOWN pu) { HRESULT res; OutTraceDW("DirectInputCreateEx: dwVersion=%x REFIID=%x(%s)\n", dwversion, riidltf.Data1, ExplainGUID((GUID *)&riidltf)); res = (*pDirectInputCreateEx)(hinst, dwversion, riidltf, ppvout, pu); if(res) { if ((res == OLDDIRECTINPUTVERSION) && (dwversion == 0x800) && OLDDIVERSION){ OutTraceE("DirectInputCreateA: ERROR err=OLDDIRECTINPUTVERSION version=800 try to call DirectInput8 interface\n"); if(!pDirectInput8Create) { HMODULE hDI8; hDI8 = (*pLoadLibraryA)("dinput8.dll"); pDirectInput8Create = (DirectInput8Create_Type)(*pGetProcAddress)(hDI8, "DirectInput8Create"); } if(pDirectInput8Create){ switch (riidltf.Data1){ case 0x9A4CB684: res = extDirectInput8Create(hinst, dwversion, IID_IDirectInput8A, ppvout, pu); break; case 0x9A4CB685: res = extDirectInput8Create(hinst, dwversion, IID_IDirectInput8W, ppvout, pu); break; } return res; } } OutTraceE("DirectInputCreateEx: ERROR err=%x(%s)\n", res, ExplainDDError(res)); return res; } switch (riidltf.Data1){ case 0x9A4CB684: SetHook((void *)(**(DWORD **)ppvout + 12), extDICreateDeviceA7, (void **)&pDICreateDeviceA7, "CreateDevice(IA7)"); SetHook((void *)(**(DWORD **)ppvout + 16), extDIEnumDevicesA7, (void **)&pDIEnumDevicesA7, "EnumDevices(IA7)"); if(dwversion >= 700) SetHook((void *)(**(DWORD **)ppvout + 36), extDICreateDeviceExA, (void **)&pDICreateDeviceExA, "CreateDeviceEx(IA7)"); break; case 0x9A4CB685: SetHook((void *)(**(DWORD **)ppvout + 12), extDICreateDeviceW7, (void **)&pDICreateDeviceA7, "CreateDevice(IA7)"); SetHook((void *)(**(DWORD **)ppvout + 16), extDIEnumDevicesW7, (void **)&pDIEnumDevicesA7, "EnumDevices(IA7)"); if(dwversion >= 700) SetHook((void *)(**(DWORD **)ppvout + 36), extDICreateDeviceExW, (void **)&pDICreateDeviceExA, "CreateDeviceEx(IA7)"); break; } return res; } HRESULT WINAPI extDIQueryInterface(void * lpdi, REFIID riid, LPVOID *obp) { HRESULT res; OutTraceDW("QueryInterface(I): REFIID=%x(%s)\n", riid.Data1, ExplainGUID((GUID *)&riid)); res = (*pDIQueryInterface)(lpdi, riid, obp); if(res) return res; switch(riid.Data1){ case 0x89521360: //DirectInputA SetHook((void *)(**(DWORD **)obp + 12), extDICreateDeviceA1, (void **)&pDICreateDeviceA1, "CreateDevice(IA1)"); SetHook((void *)(**(DWORD **)obp + 16), extDIEnumDevicesA1, (void **)&pDIEnumDevicesA1, "EnumDevices(IA1)"); break; case 0x89521361: //DirectInputW SetHook((void *)(**(DWORD **)obp + 12), extDICreateDeviceW1, (void **)&pDICreateDeviceW1, "CreateDevice(IW1)"); SetHook((void *)(**(DWORD **)obp + 16), extDIEnumDevicesW1, (void **)&pDIEnumDevicesW1, "EnumDevices(IW1)"); break; case 0x5944E662: //DirectInput2A SetHook((void *)(**(DWORD **)obp + 12), extDICreateDeviceA2, (void **)&pDICreateDeviceA2, "CreateDevice(IA2)"); SetHook((void *)(**(DWORD **)obp + 16), extDIEnumDevicesA2, (void **)&pDIEnumDevicesA2, "EnumDevices(IA2)"); break; case 0x5944E663: //DirectInput2W SetHook((void *)(**(DWORD **)obp + 12), extDICreateDeviceW2, (void **)&pDICreateDeviceW2, "CreateDevice(IW2)"); SetHook((void *)(**(DWORD **)obp + 16), extDIEnumDevicesW2, (void **)&pDIEnumDevicesW2, "EnumDevices(IW2)"); break; case 0x9A4CB684: //IDirectInput7A SetHook((void *)(**(DWORD **)obp + 12), extDICreateDeviceA7, (void **)&pDICreateDeviceA7, "CreateDevice(IA7)"); SetHook((void *)(**(DWORD **)obp + 16), extDIEnumDevicesA7, (void **)&pDIEnumDevicesA7, "EnumDevices(IA7)"); SetHook((void *)(**(DWORD **)obp + 36), extDICreateDeviceExA, (void **)&pDICreateDeviceExA, "CreateDeviceEx(IA7)"); case 0x9A4CB685: //IDirectInput7W SetHook((void *)(**(DWORD **)obp + 12), extDICreateDeviceW7, (void **)&pDICreateDeviceW7, "CreateDevice(IW7)"); SetHook((void *)(**(DWORD **)obp + 16), extDIEnumDevicesW7, (void **)&pDIEnumDevicesW7, "EnumDevices(IW7)"); SetHook((void *)(**(DWORD **)obp + 36), extDICreateDeviceExW, (void **)&pDICreateDeviceExW, "CreateDeviceEx(IW7)"); break; } return 0; } HRESULT WINAPI extDirectInput8Create(HINSTANCE hinst, DWORD dwversion, REFIID riidltf, LPVOID *ppvout, LPUNKNOWN pu) { HRESULT res; OutTraceDW("DirectInput8Create: dwVersion=%x REFIID=%x(%s)\n", dwversion, riidltf.Data1, ExplainGUID((GUID *)&riidltf)); res = (*pDirectInput8Create)(hinst, dwversion, riidltf, ppvout, pu); if(res) { OutTraceE("DirectInput8Create: ERROR res=%x\n", res); return res; } OutTraceDW("DirectInput8Create: di=%x\n", *ppvout); switch(riidltf.Data1){ case 0xBF798030: SetHook((void *)(**(DWORD **)ppvout + 12), extDICreateDeviceA8, (void **)&pDICreateDeviceA8, "CreateDevice(IA8)"); SetHook((void *)(**(DWORD **)ppvout + 16), extDIEnumDevicesA8, (void **)&pDIEnumDevicesA8, "EnumDevices(IA8)"); //SetHook((void *)(**(DWORD **)ppvout + 32), extDIFindDeviceA8, (void **)&pDIFindDeviceA8, "FindDevice(IA8)"); break; case 0xBF798031: SetHook((void *)(**(DWORD **)ppvout + 12), extDICreateDeviceW8, (void **)&pDICreateDeviceW8, "CreateDevice(IW8)"); SetHook((void *)(**(DWORD **)ppvout + 16), extDIEnumDevicesW8, (void **)&pDIEnumDevicesW8, "EnumDevices(IW8)"); //SetHook((void *)(**(DWORD **)ppvout + 32), extDIFindDeviceW8, (void **)&pDIFindDeviceW8, "FindDevice(IW8)"); break; default: MessageBox(0, "Bad DirectInput REFIID", "warning", 0); break; } //SetHook((void *)(**(DWORD **)ppvout + 36), extEnumDevicesBySemantics, (void **)&pEnumDevicesBySemantics, "EnumDevicesBySemantics(I8)"); return 0; } static char *sDeviceType(REFGUID rguid) { char *devtype; switch(rguid.Data1){ case 0x6F1D2B60: devtype = "SysMouse"; break; case 0x6F1D2B61: devtype = "SysKeyboard"; break; case 0x6F1D2B70: devtype = "Joystick"; break; case 0x6F1D2B80: devtype = "SysMouseEm"; break; case 0x6F1D2B81: devtype = "SysMouseEm2"; break; case 0x6F1D2B82: devtype = "SysKeyboardEm"; break; case 0x6F1D2B83: devtype = "SysKeyboardEm2"; break; default: devtype = "Unknown"; break; } return devtype; } static int iDeviceType(REFGUID rguid) { int devtype; switch(rguid.Data1){ case 0x6F1D2B60: devtype = DIDEVTYPE_MOUSE; break; case 0x6F1D2B61: devtype = DIDEVTYPE_KEYBOARD; break; case 0x6F1D2B70: devtype = DIDEVTYPE_JOYSTICK; break; default: devtype = 0; break; } return devtype; } HRESULT WINAPI extDICreateDeviceA(DICreateDeviceA_Type pDICreateDevice, LPDIRECTINPUT lpdi, REFGUID rguid, LPDIRECTINPUTDEVICEA *lplpdid, LPUNKNOWN pu) { HRESULT res; OutTraceDW("CreateDeviceA(I): REFGUID=%x(%s)\n", rguid.Data1, sDeviceType(rguid)); res = (*pDICreateDevice)(lpdi, rguid, lplpdid, pu); if(res) { OutTraceE("CreateDeviceA(I): ERROR res=%x\n", res); return res; } OutTraceDW("CreateDevice(I): did=%x\n", *lplpdid); SetHook((void *)(**(DWORD **)lplpdid + 28), extAcquire, (void **)&pAcquire, "Acquire(I)"); SetHook((void *)(**(DWORD **)lplpdid + 32), extUnacquire, (void **)&pUnacquire, "Unacquire(I)"); SetHook((void *)(**(DWORD **)lplpdid + 36), extGetDeviceState, (void **)&pGetDeviceState, "GetDeviceState(I)"); SetHook((void *)(**(DWORD **)lplpdid + 40), extGetDeviceData, (void **)&pGetDeviceData, "GetDeviceData(I)"); SetHook((void *)(**(DWORD **)lplpdid + 44), extSetDataFormat, (void **)&pSetDataFormat, "SetDataFormat(I)"); SetHook((void *)(**(DWORD **)lplpdid + 52), extDISetCooperativeLevel, (void **)&pDISetCooperativeLevel, "SetCooperativeLevel(I)"); switch(iDeviceType(rguid)){ case DIDEVTYPE_DEVICE: lpDIDDevice = *lplpdid; break; case DIDEVTYPE_MOUSE: lpDIDSysMouse = *lplpdid; break; case DIDEVTYPE_KEYBOARD: lpDIDKeyboard = *lplpdid; break; case DIDEVTYPE_JOYSTICK: lpDIDJoystick = *lplpdid; break; } return DI_OK; } HRESULT WINAPI extDICreateDeviceA1(LPDIRECTINPUT lpdi, REFGUID rguid, LPDIRECTINPUTDEVICEA *lplpdid, LPUNKNOWN pu) { return extDICreateDeviceA(pDICreateDeviceA1, lpdi, rguid, lplpdid, pu); } HRESULT WINAPI extDICreateDeviceA2(LPDIRECTINPUT lpdi, REFGUID rguid, LPDIRECTINPUTDEVICEA *lplpdid, LPUNKNOWN pu) { return extDICreateDeviceA(pDICreateDeviceA2, lpdi, rguid, lplpdid, pu); } HRESULT WINAPI extDICreateDeviceA7(LPDIRECTINPUT lpdi, REFGUID rguid, LPDIRECTINPUTDEVICEA *lplpdid, LPUNKNOWN pu) { return extDICreateDeviceA(pDICreateDeviceA7, lpdi, rguid, lplpdid, pu); } HRESULT WINAPI extDICreateDeviceA8(LPDIRECTINPUT lpdi, REFGUID rguid, LPDIRECTINPUTDEVICEA *lplpdid, LPUNKNOWN pu) { return extDICreateDeviceA(pDICreateDeviceA8, lpdi, rguid, lplpdid, pu); } HRESULT WINAPI extDICreateDeviceW(DICreateDeviceW_Type pDICreateDevice, LPDIRECTINPUTW lpdi, REFGUID rguid, LPDIRECTINPUTDEVICEW *lplpdid, LPUNKNOWN pu) { HRESULT res; OutTraceDW("CreateDeviceW(I): REFGUID=%x(%s)\n", rguid.Data1, sDeviceType(rguid)); res = (*pDICreateDevice)(lpdi, rguid, lplpdid, pu); if(res) { OutTraceE("CreateDeviceW(I): ERROR res=%x\n", res); return res; } OutTraceDW("CreateDevice(I): did=%x\n", *lplpdid); SetHook((void *)(**(DWORD **)lplpdid + 28), extAcquire, (void **)&pAcquire, "Acquire(I)"); SetHook((void *)(**(DWORD **)lplpdid + 32), extUnacquire, (void **)&pUnacquire, "Unacquire(I)"); SetHook((void *)(**(DWORD **)lplpdid + 36), extGetDeviceState, (void **)&pGetDeviceState, "GetDeviceState(I)"); SetHook((void *)(**(DWORD **)lplpdid + 40), extGetDeviceData, (void **)&pGetDeviceData, "GetDeviceData(I)"); SetHook((void *)(**(DWORD **)lplpdid + 44), extSetDataFormat, (void **)&pSetDataFormat, "SetDataFormat(I)"); SetHook((void *)(**(DWORD **)lplpdid + 52), extDISetCooperativeLevel, (void **)&pDISetCooperativeLevel, "SetCooperativeLevel(I)"); switch(iDeviceType(rguid)){ case DIDEVTYPE_DEVICE: lpDIDDevice = (LPDIRECTINPUTDEVICE)*lplpdid; break; case DIDEVTYPE_MOUSE: lpDIDSysMouse = (LPDIRECTINPUTDEVICE)*lplpdid; break; case DIDEVTYPE_KEYBOARD: lpDIDKeyboard = (LPDIRECTINPUTDEVICE)*lplpdid; break; case DIDEVTYPE_JOYSTICK: lpDIDJoystick = (LPDIRECTINPUTDEVICE)*lplpdid; break; } return DI_OK; } HRESULT WINAPI extDICreateDeviceW1(LPDIRECTINPUTW lpdi, REFGUID rguid, LPDIRECTINPUTDEVICEW *lplpdid, LPUNKNOWN pu) { return extDICreateDeviceW(pDICreateDeviceW1, lpdi, rguid, lplpdid, pu); } HRESULT WINAPI extDICreateDeviceW2(LPDIRECTINPUTW lpdi, REFGUID rguid, LPDIRECTINPUTDEVICEW *lplpdid, LPUNKNOWN pu) { return extDICreateDeviceW(pDICreateDeviceW2, lpdi, rguid, lplpdid, pu); } HRESULT WINAPI extDICreateDeviceW7(LPDIRECTINPUTW lpdi, REFGUID rguid, LPDIRECTINPUTDEVICEW *lplpdid, LPUNKNOWN pu) { return extDICreateDeviceW(pDICreateDeviceW7, lpdi, rguid, lplpdid, pu); } HRESULT WINAPI extDICreateDeviceW8(LPDIRECTINPUTW lpdi, REFGUID rguid, LPDIRECTINPUTDEVICEW *lplpdid, LPUNKNOWN pu) { return extDICreateDeviceW(pDICreateDeviceW8, lpdi, rguid, lplpdid, pu); } HRESULT WINAPI extDICreateDeviceEx(LPDIRECTINPUT lpdi, REFGUID rguid, REFIID riid, LPVOID *pvout, LPUNKNOWN pu) { HRESULT res; OutTraceDW("CreateDeviceEx(I): GUID=%x(%s) REFIID=%x\n", rguid.Data1, sDeviceType(rguid), riid.Data1); res = (*pDICreateDeviceExA)(lpdi, rguid, riid, pvout, pu); if(res) { OutTraceE("CreateDeviceEx(I): ERROR res=%x\n", res); return res; } OutTraceDW("CreateDeviceEx(I): did=%x\n", *pvout); SetHook((void *)(**(DWORD **)pvout + 28), extAcquire, (void **)&pAcquire, "Acquire(I)"); SetHook((void *)(**(DWORD **)pvout + 32), extUnacquire, (void **)&pUnacquire, "Unacquire(I)"); SetHook((void *)(**(DWORD **)pvout + 36), extGetDeviceState, (void **)&pGetDeviceState, "GetDeviceState(I)"); SetHook((void *)(**(DWORD **)pvout + 40), extGetDeviceData, (void **)&pGetDeviceData, "GetDeviceData(I)"); SetHook((void *)(**(DWORD **)pvout + 44), extSetDataFormat, (void **)&pSetDataFormat, "SetDataFormat(I)"); SetHook((void *)(**(DWORD **)pvout + 52), extDISetCooperativeLevel, (void **)&pDISetCooperativeLevel, "SetCooperativeLevel(I)"); switch(iDeviceType(rguid)){ case DIDEVTYPE_DEVICE: lpDIDDevice = *(LPDIRECTINPUTDEVICE *)pvout; break; case DIDEVTYPE_MOUSE: lpDIDSysMouse = *(LPDIRECTINPUTDEVICE *)pvout; break; case DIDEVTYPE_KEYBOARD: lpDIDKeyboard = *(LPDIRECTINPUTDEVICE *)pvout; break; case DIDEVTYPE_JOYSTICK: lpDIDJoystick = *(LPDIRECTINPUTDEVICE *)pvout; break; } return DI_OK; } // to do HRESULT WINAPI extDICreateDeviceExA(LPDIRECTINPUTA lpdi, REFGUID rguid, REFIID riid, LPVOID *pvout, LPUNKNOWN pu) { return extDICreateDeviceEx(lpdi, rguid, riid, pvout, pu); } HRESULT WINAPI extDICreateDeviceExW(LPDIRECTINPUTW lpdi, REFGUID rguid, REFIID riid, LPVOID *pvout, LPUNKNOWN pu) { return extDICreateDeviceEx((LPDIRECTINPUT)lpdi, rguid, riid, pvout, pu); } /* from MSDN: cbObjectData Size of the DIDEVICEOBJECTDATA structure, in bytes. rgdod Array of DIDEVICEOBJECTDATA structures to receive the buffered data. The number of elements in this array must be equal to the value of the pdwInOut parameter. If this parameter is NULL, the buffered data is not stored anywhere, but all other side effects take place. pdwInOut On entry, the number of elements in the array pointed to by the rgdod parameter. On exit, the number of elements actually obtained. dwFlags Flags that control the manner in which data is obtained. This value can be 0 or the following flag. DIGDD_PEEK Do not remove the items from the buffer. A subsequent IDirectInputDevice8::GetDeviceData call will read the same data. Normally, data is removed from the buffer after it is read. */ /* Mind the following scenarios! Your application can query for the number of elements in the device buffer by setting the rgdod parameter to NULL, setting pdwInOut to INFINITE and setting dwFlags to DIGDD_PEEK. The following code example illustrates how this can be done. dwItems = INFINITE; hres = idirectinputdevice9_GetDeviceData( pdid, sizeof(DIDEVICEOBJECTDATA), NULL, &dwItems, DIGDD_PEEK); if (SUCCEEDED(hres)) { // dwItems = Number of elements in buffer. if (hres == DI_BUFFEROVERFLOW) { // Buffer overflow occurred; not all data // was successfully captured. } } To query about whether a buffer overflow has occurred, set the rgdod parameter to NULL and the pdwInOut parameter to 0. The following code example illustrates how this can be done. dwItems = 0; hres = idirectinputdevice9_GetDeviceData( pdid, sizeof(DIDEVICEOBJECTDATA), NULL, &dwItems, 0); if (hres == DI_BUFFEROVERFLOW) { // Buffer overflow occurred. } */ HRESULT WINAPI extGetDeviceData(LPDIRECTINPUTDEVICE lpdid, DWORD cbdata, LPVOID rgdod, LPDWORD pdwinout, DWORD dwflags) { HRESULT res; BYTE *tmp; unsigned int i; POINT p; OutTraceDW("GetDeviceData(I): did=%x(%s) cbdata=%i rgdod=%x, inout=%d flags=%x\n", lpdid, sDevice(lpdid), cbdata, rgdod, *pdwinout, dwflags); res = (*pGetDeviceData)(lpdid, cbdata, rgdod, pdwinout, dwflags); if (((res == DIERR_INPUTLOST) || (res == DIERR_NOTACQUIRED)) && RECOVERINPUTLOST){ OutTraceE("GetDeviceState(I) recovering DIERR_INPUTLOST\n"); if(lpdid == lpDIDSysMouse) { res = (*pDISetCooperativeLevel)(lpdid, dxw.GethWnd(), DISCL_NONEXCLUSIVE | DISCL_FOREGROUND); if(res) OutTraceE("GetDeviceState(I): SetCooperativeLevel ERROR: err=%x(%s)\n", res, ExplainDDError(res)); if(dxw.dwFlags1 & CLIPCURSOR) dxw.SetClipCursor(); } res = (*pAcquire)(lpdid); if(res) OutTraceE("GetDeviceState(I): Acquire ERROR: err=%x(%s)\n", res, ExplainDDError(res)); res = (*pGetDeviceData)(lpdid, cbdata, rgdod, pdwinout, dwflags); } switch(res){ case DI_OK: case DI_BUFFEROVERFLOW: break; case DIERR_NOTACQUIRED: case DIERR_INPUTLOST: OutTraceB("GetDeviceData(I): handling err=%s\n", ExplainDDError(res)); *pdwinout = 0; // to avoid crashes break; default: OutTraceE("GetDeviceData(I) ERROR: err=%x(%s)\n", res, ExplainDDError(res)); return res; break; } if(!dxw.bActive) { *pdwinout = 0; return DI_OK; } if(lpdid == lpDIDSysMouse){ if(dxw.dwFlags4 & RELEASEMOUSE) { POINT curr; RECT client; extern GetCursorPos_Type pGetCursorPos; extern GetClientRect_Type pGetClientRect; extern ScreenToClient_Type pScreenToClient; (*pGetCursorPos)(&curr); (*pScreenToClient)(dxw.GethWnd(), &curr); (*pGetClientRect)(dxw.GethWnd(), &client); if ((curr.x < client.left) || (curr.y < client.top) || (curr.x > client.right) || (curr.y > client.bottom)){ *pdwinout = 0; return DI_OK; } } tmp = (BYTE *)rgdod; if(!tmp) return res; if(dxw.bDInputAbs){ GetMousePosition((int *)&p.x, (int *)&p.y); for(i = 0; (i < *pdwinout) && ((LPDIDEVICEOBJECTDATA)tmp)->dwOfs; i ++){ if(((LPDIDEVICEOBJECTDATA)tmp)->dwOfs == DIMOFS_X)((LPDIDEVICEOBJECTDATA)tmp)->dwData = p.x; if(((LPDIDEVICEOBJECTDATA)tmp)->dwOfs == DIMOFS_Y)((LPDIDEVICEOBJECTDATA)tmp)->dwData = p.y; tmp += cbdata; } OutTraceB("GetDeviceData(I): ABS mousedata=(%d,%d)\n", p.x, p.y); } else{ for(i = 0; (i < *pdwinout) && ((LPDIDEVICEOBJECTDATA)tmp)->dwOfs; i ++){ if(((LPDIDEVICEOBJECTDATA)tmp)->dwOfs == DIMOFS_X) OutTraceB("GetDeviceData(I): REL mousedata X=%d\n", ((LPDIDEVICEOBJECTDATA)tmp)->dwData); if(((LPDIDEVICEOBJECTDATA)tmp)->dwOfs == DIMOFS_Y) OutTraceB("GetDeviceData(I): REL mousedata Y=%d\n", ((LPDIDEVICEOBJECTDATA)tmp)->dwData); tmp += cbdata; } } } return res; } HRESULT WINAPI extGetDeviceState(LPDIRECTINPUTDEVICE lpdid, DWORD cbdata, LPDIMOUSESTATE lpvdata) { HRESULT res; POINT p = {0, 0}; OutTraceB("GetDeviceState(I): did=%x(%s) cbData=%i,%i\n", lpdid, sDevice(lpdid), cbdata, dxw.bActive); res = (*pGetDeviceState)(lpdid, cbdata, lpvdata); if (((res == DIERR_INPUTLOST) || (res == DIERR_NOTACQUIRED)) && RECOVERINPUTLOST){ OutTraceE("GetDeviceState(I) recovering DIERR_INPUTLOST\n"); if(lpdid == lpDIDSysMouse) { res = (*pDISetCooperativeLevel)(lpdid, dxw.GethWnd(), DISCL_NONEXCLUSIVE | DISCL_FOREGROUND); if(res) OutTraceE("GetDeviceState(I): SetCooperativeLevel ERROR: err=%x(%s)\n", res, ExplainDDError(res)); if(dxw.dwFlags1 & CLIPCURSOR) dxw.SetClipCursor(); } res = (*pAcquire)(lpdid); if(res) OutTraceE("GetDeviceState(I): Acquire ERROR: err=%x(%s)\n", res, ExplainDDError(res)); res = (*pGetDeviceState)(lpdid, cbdata, lpvdata); } switch(res){ case DI_OK: break; case DIERR_NOTACQUIRED: case DIERR_INPUTLOST: OutTraceB("GetDeviceState(I): handling err=%s\n", ExplainDDError(res)); break; default: OutTraceE("GetDeviceState(I) ERROR: err=%x(%s)\n", res, ExplainDDError(res)); return res; break; } if( cbdata == sizeof(DIMOUSESTATE) || cbdata == sizeof(DIMOUSESTATE2)){ if(!dxw.bActive){ lpvdata->lZ = 0; *(DWORD *)lpvdata->rgbButtons = 0; OutTraceB("GetDeviceState(I): DEBUG cleared mousestate=(%d,%d)\n", p.x, p.y); return DI_OK; } if(dxw.bDInputAbs){ // absolute position POINT p; extGetCursorPos(&p); lpvdata->lX = p.x; lpvdata->lY = p.y; OutTraceDW("GetMousePosition(I): x,y=(%d,%d)\n", p.x, p.y); } else { // relative position if(dxw.dwFlags6 & EMULATERELMOUSE){ int iMaxX, iMaxY, iMinX, iMinY; RECT WinRect = dxw.GetUnmappedScreenRect(); iMinX = WinRect.left; iMaxX = WinRect.right; iMinY = WinRect.top; iMaxY = WinRect.bottom; iCursorX = (iMaxX+iMinX)/2; iCursorY = (iMaxY+iMinY)/2; OutTraceB("GetDeviceState(I): RELATIVE clip=(%d,%d)-(%d,%d) pos=(%d,%d)\n", iMinX, iMinY, iMaxX, iMaxY, iCursorX, iCursorY); (*pGetCursorPos)(&p); lpvdata->lX = p.x - iCursorX; lpvdata->lY = p.y - iCursorY; (*pSetCursorPos)(iCursorX, iCursorY); } } } // SysKeybd device if(cbdata == 256 && !dxw.bActive) { ZeroMemory(lpvdata, 256); OutTraceB("GetDeviceState(I): DEBUG cleared syskeybdstate\n"); } return DI_OK; } static char *didftype(DWORD c) { static char eb[256]; unsigned int l; strcpy(eb,"DIDFT_"); switch (c & 0x00000003){ case DIDFT_RELAXIS: strcat(eb, "RELAXIS+"); break; case DIDFT_ABSAXIS: strcat(eb, "ABSAXIS+"); break; case DIDFT_AXIS: strcat(eb, "AXIS+"); break; } switch (c & 0x0000000C){ case DIDFT_PSHBUTTON: strcat(eb, "PSHBUTTON+"); break; case DIDFT_TGLBUTTON: strcat(eb, "TGLBUTTON+"); break; case DIDFT_BUTTON: strcat(eb, "BUTTON+"); break; } if (c & DIDFT_POV) strcat(eb, "POV+"); if (c & DIDFT_COLLECTION) strcat(eb, "COLLECTION+"); if (c & DIDFT_NODATA) strcat(eb, "NODATA+"); if (c & DIDFT_FFACTUATOR) strcat(eb, "FFACTUATOR+"); if (c & DIDFT_FFEFFECTTRIGGER) strcat(eb, "FFEFFECTTRIGGER+"); if (c & DIDFT_VENDORDEFINED) strcat(eb, "VENDORDEFINED+"); if (c & DIDFT_OUTPUT) strcat(eb, "OUTPUT+"); if (c & DIDFT_ALIAS) strcat(eb, "ALIAS+"); if (c & DIDFT_OPTIONAL) strcat(eb, "OPTIONAL+"); l=strlen(eb); if (l>strlen("DIDFT_")) eb[l-1]=0; // delete last '+' if any else eb[0]=0; return(eb); } static char *ExplainDataFormatFlags(DWORD f) { char *s; s="unknown"; switch(f){ case DIDF_ABSAXIS: s="DIDF_ABSAXIS"; case DIDF_RELAXIS: s="DIDF_RELAXIS"; } return s; } HRESULT WINAPI extSetDataFormat(LPDIRECTINPUTDEVICE lpdid, LPCDIDATAFORMAT lpdf) { OutTraceDW("SetDataFormat(I): did=%x(%s) lpdf=%x size=%d objsize=%d flags=0x%x(%s) datasize=%d numobjects=%d\n", lpdid, sDevice(lpdid), lpdf, lpdf->dwSize, lpdf->dwObjSize, lpdf->dwFlags, ExplainDataFormatFlags(lpdf->dwFlags), lpdf->dwDataSize, lpdf->dwNumObjs); if(IsDebug){ DIOBJECTDATAFORMAT *df; df = lpdf->rgodf; for(DWORD i=0; idwNumObjs; i++){ OutTrace("SetDataFormat(I): DataFormat[%d] ofs=%x flags=%x type=%x(%s)\n", i, df[i].dwOfs, df[i].dwFlags, df[i].dwType, didftype(df[i].dwType)); } } if(lpdid == lpDIDSysMouse){ if(lpdf->dwFlags & DIDF_ABSAXIS) dxw.bDInputAbs = 1; if(lpdf->dwFlags & DIDF_RELAXIS) dxw.bDInputAbs = 0; } return (*pSetDataFormat)(lpdid, lpdf); } HRESULT WINAPI extDISetCooperativeLevel(LPDIRECTINPUTDEVICE lpdid, HWND hwnd, DWORD dwflags) { HRESULT res; OutTraceDW("SetCooperativeLevel(I): did=%x(%s) hwnd=%x flags=%x(%s)\n", lpdid, sDevice(lpdid), hwnd, dwflags, ExplainDICooperativeFlags(dwflags)); if(dxw.IsRealDesktop(hwnd)) hwnd=dxw.GethWnd(); if(lpdid == lpDIDSysMouse) dwflags = (DISCL_NONEXCLUSIVE | DISCL_FOREGROUND); // v2.03.84: SHAREDKEYBOARD option to prevent situations like "Planet of the Apes" // not processing the PrintScreen syskeys. if((lpdid == lpDIDKeyboard) && (dxw.dwFlags7 & SHAREDKEYBOARD)) dwflags = (DISCL_NONEXCLUSIVE | DISCL_FOREGROUND); res = (*pDISetCooperativeLevel)(lpdid, hwnd, dwflags); if(res != DD_OK){ OutTraceE("SetCooperativeLevel(I) ERROR: err=%x(%s)\n", res, ExplainDDError(res)); } return res; } // Simplified version, taking in proper account the GetCursorPos API hooking & coordinate processing void GetMousePosition(int *x, int *y) { POINT p; extern BOOL WINAPI extGetCursorPos(LPPOINT); extGetCursorPos(&p); *x = p.x; *y = p.y; OutTraceDW("GetMousePosition(I): x,y=(%d,%d)\n", *x, *y); } typedef struct { LPDIENUMDEVICESCALLBACK cb; LPVOID arg; } CallbackArg; HRESULT WINAPI extDeviceProxy(LPCDIDEVICEINSTANCE dev, LPVOID arg) { HRESULT res; char *p; switch (dev->dwSize) { case sizeof(DIDEVICEINSTANCEA): p="ASCII"; break; case sizeof(DIDEVICEINSTANCEW): p="WIDECHAR"; break; default: p="UNKNOWN"; break; } OutTraceDW("EnumDevices(I): CALLBACK size=%d(%s) GUID=(%x.%x.%x.%x) type=%x InstanceName=\"%s\", ProductName=\"%s\"\n", dev->dwSize, p, dev->guidInstance.Data1, dev->guidInstance.Data2, dev->guidInstance.Data3, dev->guidInstance.Data4, dev->dwDevType, dev->tszInstanceName, dev->tszProductName); if((dxw.dwFlags7 & SKIPDEVTYPEHID) && (dev->dwDevType & DIDEVTYPE_HID)) { OutTraceDW("EnumDevices(I): skip HID device devtype=%x\n", dev->dwDevType); return TRUE; // skip DIDEVTYPE_HID } res = (*(((CallbackArg *)arg)->cb))(dev, ((CallbackArg *)arg)->arg); OutTraceDW("EnumDevices: CALLBACK ret=%x\n", res); return res; } HRESULT WINAPI extDIEnumDevicesA(DIEnumDevicesA_Type pDIEnumDevices, void *lpdi, DWORD dwDevType, LPDIENUMDEVICESCALLBACKA lpCallback, LPVOID pvRef, DWORD dwFlags) { HRESULT res; CallbackArg Arg; OutTraceDW("EnumDevicesA(I): di=%x DevType=%x CallBack=%x Ref=%x Flags=%x\n", lpdi, dwDevType, lpCallback, pvRef, dwFlags); Arg.cb= lpCallback; Arg.arg=pvRef; res=(*pDIEnumDevices)( lpdi, dwDevType, (LPDIENUMDEVICESCALLBACKA)extDeviceProxy, &Arg, dwFlags); // V2.02.80 fix //res=(*pDIEnumDevices)( lpdi, dwDevType, lpCallback, pvRef, dwFlags); OutTraceDW("EnumDevicesA(I): res=%x\n", res); return res; } HRESULT WINAPI extDIEnumDevicesA1(void *lpdi, DWORD dwDevType, LPDIENUMDEVICESCALLBACK lpCallback, LPVOID pvRef, DWORD dwFlags) { return extDIEnumDevicesA(pDIEnumDevicesA1, lpdi, dwDevType, lpCallback, pvRef, dwFlags); } HRESULT WINAPI extDIEnumDevicesA2(void *lpdi, DWORD dwDevType, LPDIENUMDEVICESCALLBACK lpCallback, LPVOID pvRef, DWORD dwFlags) { return extDIEnumDevicesA(pDIEnumDevicesA2, lpdi, dwDevType, lpCallback, pvRef, dwFlags); } HRESULT WINAPI extDIEnumDevicesA7(void *lpdi, DWORD dwDevType, LPDIENUMDEVICESCALLBACK lpCallback, LPVOID pvRef, DWORD dwFlags) { return extDIEnumDevicesA(pDIEnumDevicesA7, lpdi, dwDevType, lpCallback, pvRef, dwFlags); } HRESULT WINAPI extDIEnumDevicesA8(void *lpdi, DWORD dwDevType, LPDIENUMDEVICESCALLBACK lpCallback, LPVOID pvRef, DWORD dwFlags) { return extDIEnumDevicesA(pDIEnumDevicesA8, lpdi, dwDevType, lpCallback, pvRef, dwFlags); } HRESULT WINAPI extDIEnumDevicesW(DIEnumDevicesW_Type pDIEnumDevices, void *lpdi, DWORD dwDevType, LPDIENUMDEVICESCALLBACKW lpCallback, LPVOID pvRef, DWORD dwFlags) { HRESULT res; CallbackArg Arg; OutTraceDW("EnumDevicesW(I): di=%x DevType=%x CallBack=%x Ref=%x Flags=%x\n", lpdi, dwDevType, lpCallback, pvRef, dwFlags); Arg.cb= (LPDIENUMDEVICESCALLBACKA)lpCallback; Arg.arg=pvRef; res=(*pDIEnumDevices)( lpdi, dwDevType, (LPDIENUMDEVICESCALLBACKW)extDeviceProxy, &Arg, dwFlags); // V2.02.80 fix //res=(*pDIEnumDevices)( lpdi, dwDevType, lpCallback, pvRef, dwFlags); OutTraceDW("EnumDevicesW(I): res=%x\n", res); return res; } HRESULT WINAPI extDIEnumDevicesW1(void *lpdi, DWORD dwDevType, LPDIENUMDEVICESCALLBACKW lpCallback, LPVOID pvRef, DWORD dwFlags) { return extDIEnumDevicesW(pDIEnumDevicesW1, lpdi, dwDevType, lpCallback, pvRef, dwFlags); } HRESULT WINAPI extDIEnumDevicesW2(void *lpdi, DWORD dwDevType, LPDIENUMDEVICESCALLBACKW lpCallback, LPVOID pvRef, DWORD dwFlags) { return extDIEnumDevicesW(pDIEnumDevicesW2, lpdi, dwDevType, lpCallback, pvRef, dwFlags); } HRESULT WINAPI extDIEnumDevicesW7(void *lpdi, DWORD dwDevType, LPDIENUMDEVICESCALLBACKW lpCallback, LPVOID pvRef, DWORD dwFlags) { return extDIEnumDevicesW(pDIEnumDevicesW7, lpdi, dwDevType, lpCallback, pvRef, dwFlags); } HRESULT WINAPI extDIEnumDevicesW8(void *lpdi, DWORD dwDevType, LPDIENUMDEVICESCALLBACKW lpCallback, LPVOID pvRef, DWORD dwFlags) { return extDIEnumDevicesW(pDIEnumDevicesW8, lpdi, dwDevType, lpCallback, pvRef, dwFlags); } HRESULT WINAPI extAcquire(LPDIRECTINPUTDEVICE lpdid) { HRESULT res; res = (*pAcquire)(lpdid); OutTrace("Acquire(I): lpdid=%x(%s) res=%x(%s)\n", lpdid, sDevice(lpdid), res, ExplainDDError(res)); if((dxw.dwFlags7 & SUPPRESSDIERRORS) && (res == DIERR_OTHERAPPHASPRIO)) res = DI_OK; return res; } HRESULT WINAPI extUnacquire(LPDIRECTINPUTDEVICE lpdid) { HRESULT res; res = (*pUnacquire)(lpdid); OutTrace("Unacquire(I): lpdid=%x(%s) res=%x(%s)\n", lpdid, sDevice(lpdid), res, ExplainDDError(res)); if((dxw.dwFlags7 & SUPPRESSDIERRORS) && (res == DIERR_OTHERAPPHASPRIO)) res = DI_OK; return res; } void ToggleAcquiredDevices(BOOL flag) { if(flag && pAcquire){ if(lpDIDSysMouse) (*pAcquire)(lpDIDSysMouse); if(lpDIDKeyboard) (*pAcquire)(lpDIDKeyboard); if(lpDIDJoystick) (*pAcquire)(lpDIDJoystick); if (dxw.dwFlags1 & CLIPCURSOR) dxw.SetClipCursor(); } if(!flag && pUnacquire){ if(lpDIDSysMouse) (*pUnacquire)(lpDIDSysMouse); if(lpDIDKeyboard) (*pUnacquire)(lpDIDKeyboard); if(lpDIDJoystick) (*pUnacquire)(lpDIDJoystick); if (dxw.dwFlags1 & CLIPCURSOR) dxw.EraseClipCursor(); } } //HRESULT WINAPI extDIFindDeviceA8(void *di, REFGUID rguidClass, LPCSTR ptszName, LPGUID pguidInstance) //{ // HRESULT res; // MessageBox(0, "calling FindDevice", "debug", 0); // res=(*pDIFindDeviceA8)(di, rguidClass, ptszName, pguidInstance); // return res; //} //HRESULT WINAPI extEnumDevicesBySemantics(void *di, LPCTSTR ptszUserName, LPDIACTIONFORMAT lpdiActionFormat, LPDIENUMDEVICESBYSEMANTICSCB lpCallback, LPVOID pvRef, DWORD dwFlags) //{ // HRESULT res; // MessageBox(0, "calling EnumDevicesBySemantics", "debug", 0); // res=(*pEnumDevicesBySemantics)(di, ptszUserName, lpdiActionFormat, lpCallback, pvRef, dwFlags); // return res; //} //BOOL WINAPI extDIEnumDevicesBySemanticsCallback(LPCDIDEVICEINSTANCE lpddi, LPDIRECTINPUTDEVICE8 lpdid, DWORD dwFlags, DWORD dwRemaining, LPVOID pvRef) //{ // BOOL res; // MessageBox(0, "calling EnumDevicesBySemanticsCallback", "debug", 0); // res=(*pDIFindDeviceA8)(di, rguidClass, ptszName, pguidInstance); // return res; //} ================================================ FILE: dll/dsound.cpp ================================================ #define _WIN32_WINNT 0x0600 #define WIN32_LEAN_AND_MEAN #define _CRT_SECURE_NO_WARNINGS #define _CRT_NON_CONFORMING_SWPRINTFS #include #include #include "dxwnd.h" #include "dxwcore.hpp" #include "syslibs.h" #include "dxhook.h" #include "dsound.h" #include "dxhelper.h" typedef HRESULT (WINAPI *DirectSoundCreate_Type)(LPGUID, LPDIRECTSOUND *, LPUNKNOWN); typedef HRESULT (WINAPI *DirectSoundCreate8_Type)(LPCGUID, LPDIRECTSOUND8 *, LPUNKNOWN); typedef HRESULT (WINAPI *SetCooperativeLevel_Type) (void *, HWND, DWORD); typedef HRESULT (WINAPI *CreateSoundBuffer_Type) (void *, LPCDSBUFFERDESC, LPDIRECTSOUNDBUFFER *, LPUNKNOWN); typedef HRESULT (WINAPI *DirectSoundEnumerateA_Type)(LPDSENUMCALLBACKA, LPVOID); typedef HRESULT (WINAPI *DirectSoundEnumerateW_Type)(LPDSENUMCALLBACKW, LPVOID); typedef HRESULT (WINAPI *GetSpeakerConfig_Type)(void *, LPDWORD); typedef HRESULT (WINAPI *SetSpeakerConfig_Type)(void *, DWORD); typedef HRESULT (WINAPI *DSInitialize_Type)(void *, LPCGUID); DirectSoundCreate_Type pDirectSoundCreate = NULL; DirectSoundCreate8_Type pDirectSoundCreate8 = NULL; SetCooperativeLevel_Type pDSSetCooperativeLevel = NULL; CreateSoundBuffer_Type pCreateSoundBuffer = NULL; DirectSoundEnumerateA_Type pDirectSoundEnumerateA = NULL; DirectSoundEnumerateW_Type pDirectSoundEnumerateW = NULL; GetSpeakerConfig_Type pGetSpeakerConfig = NULL; SetSpeakerConfig_Type pSetSpeakerConfig = NULL; DSInitialize_Type pDSInitialize = NULL; HRESULT WINAPI extDirectSoundCreate(LPGUID, LPDIRECTSOUND *, LPUNKNOWN); HRESULT WINAPI extDirectSoundCreate8(LPCGUID, LPDIRECTSOUND8 *, LPUNKNOWN); HRESULT WINAPI extDSSetCooperativeLevel(void *, HWND, DWORD); HRESULT WINAPI extCreateSoundBuffer(void *, LPCDSBUFFERDESC, LPDIRECTSOUNDBUFFER *, LPUNKNOWN); HRESULT WINAPI extDirectSoundEnumerateA(LPDSENUMCALLBACKA, LPVOID); HRESULT WINAPI extDirectSoundEnumerateW(LPDSENUMCALLBACKW, LPVOID); HRESULT WINAPI extGetSpeakerConfig(void *, LPDWORD); HRESULT WINAPI extSetSpeakerConfig(void *, DWORD); HRESULT WINAPI extDSInitialize(void *, LPCGUID); static HookEntryEx_Type Hooks[]={ {HOOK_HOT_CANDIDATE, 0x0001, "DirectSoundCreate", (FARPROC)NULL, (FARPROC *)&pDirectSoundCreate, (FARPROC)extDirectSoundCreate}, {HOOK_HOT_CANDIDATE, 0x000B, "DirectSoundCreate8", (FARPROC)NULL, (FARPROC *)&pDirectSoundCreate8, (FARPROC)extDirectSoundCreate8}, {HOOK_HOT_CANDIDATE, 0x000B, "DirectSoundEnumerateA", (FARPROC)NULL, (FARPROC *)&pDirectSoundEnumerateA, (FARPROC)extDirectSoundEnumerateA}, {HOOK_HOT_CANDIDATE, 0x000B, "DirectSoundEnumerateW", (FARPROC)NULL, (FARPROC *)&pDirectSoundEnumerateW, (FARPROC)extDirectSoundEnumerateW}, {HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator }; FARPROC Remap_DSound_ProcAddress(LPCSTR proc, HMODULE hModule) { FARPROC addr; if(!(dxw.dwFlags7 & HOOKDIRECTSOUND)) return NULL; if (addr=RemapLibraryEx(proc, hModule, Hooks)) return addr; return NULL; } static char *libname = "dsound.dll"; void HookDirectSound(HMODULE hModule) { if(!(dxw.dwFlags7 & HOOKDIRECTSOUND)) return; HookLibraryEx(hModule, Hooks, "dsound.dll"); } void HookDirectSoundInit() { HookLibInitEx(Hooks); } void HookDirectSoundObj(LPDIRECTSOUND *lpds) { // v2.03.99: check or DirectSound could be hooked through CoCreateInstance !! if(!(dxw.dwFlags7 & HOOKDIRECTSOUND)) return; // IDIrectSound::SetCooperativeLevel SetHook((void *)(**(DWORD **)lpds + 12), extCreateSoundBuffer, (void **)&pCreateSoundBuffer, "CreateSoundBuffer"); SetHook((void *)(**(DWORD **)lpds + 24), extDSSetCooperativeLevel, (void **)&pDSSetCooperativeLevel, "SetCooperativeLevel(DSound)"); SetHook((void *)(**(DWORD **)lpds + 32), extGetSpeakerConfig, (void **)&pGetSpeakerConfig, "GetSpeakerConfig(DSound)"); SetHook((void *)(**(DWORD **)lpds + 36), extSetSpeakerConfig, (void **)&pSetSpeakerConfig, "SetSpeakerConfig(DSound)"); SetHook((void *)(**(DWORD **)lpds + 40), extDSInitialize, (void **)&pDSInitialize, "Initialize(DSound)"); } HRESULT WINAPI extDirectSoundCreate(LPGUID guid, LPDIRECTSOUND *lpds, LPUNKNOWN unk) { HRESULT res; OutTraceDW("DirectSoundCreate: guid=%x\n", guid); res = (*pDirectSoundCreate)(guid, lpds, unk); if(res){ OutTraceE("DirectSoundCreate ERROR: res=%x(%s)\n", res, ExplainDDError(res)); } else { OutTraceDW("DirectSoundCreate lpDS=%x\n", *lpds); HookDirectSoundObj(lpds); } return res; } HRESULT WINAPI extDirectSoundCreate8(LPCGUID lpcGuidDevice, LPDIRECTSOUND8 *ppDS8, LPUNKNOWN pUnkOuter) { HRESULT res; OutTraceDW("DirectSoundCreate8: guid=%x\n", lpcGuidDevice); res = (*pDirectSoundCreate8)(lpcGuidDevice, ppDS8, pUnkOuter); res = DD_OK; if(res){ OutTraceE("DirectSoundCreate8 ERROR: res=%x(%s)\n", res, ExplainDDError(res)); } else { OutTraceDW("DirectSoundCreate8 lpDS8=%x\n", *ppDS8); HookDirectSoundObj((LPDIRECTSOUND *)ppDS8); } return res; } #define DSSCL_NORMAL 0x00000001 #define DSSCL_PRIORITY 0x00000002 #define DSSCL_EXCLUSIVE 0x00000003 #define DSSCL_WRITEPRIMARY 0x00000004 static char *ExplainLevel(DWORD lev) { char *s; switch(lev){ case DSSCL_NORMAL: s="NORMAL"; break; case DSSCL_PRIORITY: s="PRIORITY"; break; case DSSCL_EXCLUSIVE: s="EXCLUSIVE"; break; case DSSCL_WRITEPRIMARY: s="WRITEPRIMARY"; break; default: s="invalid"; break; } return s; } HRESULT WINAPI extDSSetCooperativeLevel(void *lpds, HWND hwnd, DWORD dwLevel) { HRESULT res; OutTrace("DirectSound::SetCooperativeLevel: lpds=%x hwnd=%x level=%x(%s)\n", lpds, hwnd, dwLevel, ExplainLevel(dwLevel)); if(dwLevel == DSSCL_EXCLUSIVE) { OutTrace("DirectSound::SetCooperativeLevel: PATCH\n"); dwLevel=DSSCL_PRIORITY; // Arxel Tribe patch //dwLevel=DSSCL_NORMAL; // Arxel Tribe patch hwnd=dxw.GethWnd(); //hwnd=(*pGetDesktopWindow)(); //hwnd=0; } res = (*pDSSetCooperativeLevel)(lpds, hwnd, dwLevel); if(res){ OutTraceE("DirectSound::SetCooperativeLevel ERROR: res=%x(%s)\n", res, ExplainDDError(res)); } return res; } char *ExplainCSBFlags(DWORD c) { static char eb[512]; unsigned int l; strcpy(eb,""); if (c & DSBCAPS_PRIMARYBUFFER) strcat(eb, "PRIMARYBUFFER+"); if (c & DSBCAPS_STATIC) strcat(eb, "STATIC+"); if (c & DSBCAPS_LOCHARDWARE) strcat(eb, "LOCHARDWARE+"); if (c & DSBCAPS_LOCSOFTWARE) strcat(eb, "LOCSOFTWARE+"); if (c & DSBCAPS_CTRL3D) strcat(eb, "CTRL3D+"); if (c & DSBCAPS_CTRLFREQUENCY) strcat(eb, "CTRLFREQUENCY+"); if (c & DSBCAPS_CTRLPAN) strcat(eb, "CTRLPAN+"); if (c & DSBCAPS_CTRLVOLUME) strcat(eb, "CTRLVOLUME+"); if (c & DSBCAPS_CTRLPOSITIONNOTIFY) strcat(eb, "CTRLPOSITIONNOTIFY+"); if (c & DSBCAPS_CTRLFX) strcat(eb, "CTRLFX+"); if (c & DSBCAPS_STICKYFOCUS) strcat(eb, "STICKYFOCUS+"); if (c & DSBCAPS_GLOBALFOCUS) strcat(eb, "GLOBALFOCUS+"); if (c & DSBCAPS_GETCURRENTPOSITION2) strcat(eb, "GETCURRENTPOSITION2+"); if (c & DSBCAPS_MUTE3DATMAXDISTANCE) strcat(eb, "MUTE3DATMAXDISTANCE+"); if (c & DSBCAPS_LOCDEFER) strcat(eb, "LOCDEFER+"); l=strlen(eb); if (l>strlen("DSBCAPS_")) eb[l-1]=0; // delete last '+' if any else eb[0]=0; return(eb); } HRESULT WINAPI extCreateSoundBuffer (void *lpds, LPCDSBUFFERDESC pcDSBufferDesc, LPDIRECTSOUNDBUFFER *ppDSBuffer, LPUNKNOWN pUnkOuter) { HRESULT res; OutTraceDW("CreateSoundBuffer: flags=%x(%s) BufferBytes=%d\n", pcDSBufferDesc->dwFlags, ExplainCSBFlags(pcDSBufferDesc->dwFlags), pcDSBufferDesc->dwBufferBytes); res = (*pCreateSoundBuffer)(lpds, pcDSBufferDesc, ppDSBuffer, pUnkOuter); if(res) OutTraceE("CreateSoundBuffer ERROR: res=%x(s)\n", res, ExplainDDError(res)); return res; } HRESULT WINAPI extDirectSoundEnumerateA(LPDSENUMCALLBACKA pDSEnumCallback, LPVOID pContext) { HRESULT res; OutTraceDW("DirectSoundEnumerateA\n"); res = (*pDirectSoundEnumerateA)(pDSEnumCallback, pContext); if(res) OutTraceE("DirectSoundEnumerateA ERROR: res=%x(s)\n", res, ExplainDDError(res)); return res; } HRESULT WINAPI extDirectSoundEnumerateW(LPDSENUMCALLBACKW pDSEnumCallback, LPVOID pContext) { HRESULT res; OutTraceDW("DirectSoundEnumerateW\n"); res = (*pDirectSoundEnumerateW)(pDSEnumCallback, pContext); if(res) OutTraceE("DirectSoundEnumerateW ERROR: res=%x(s)\n", res, ExplainDDError(res)); return res; } HRESULT WINAPI extGetSpeakerConfig(void *lpds, LPDWORD pdwSpeakerConfig) { HRESULT res; OutTraceDW("DirectSound::GetSpeakerConfig\n"); res = (*pGetSpeakerConfig)(lpds, pdwSpeakerConfig); if(res) OutTraceE("GetSpeakerConfig ERROR: res=%x(s)\n", res, ExplainDDError(res)); return res; } HRESULT WINAPI extSetSpeakerConfig(void *lpds, DWORD pdwSpeakerConfig) { HRESULT res; OutTraceDW("DirectSound::SetSpeakerConfig\n"); res = (*pSetSpeakerConfig)(lpds, pdwSpeakerConfig); if(res) OutTraceE("SetSpeakerConfig ERROR: res=%x(s)\n", res, ExplainDDError(res)); return res; } HRESULT WINAPI extDSInitialize(void *lpds, LPCGUID pcGuidDevice) { HRESULT res; OutTraceDW("DirectSound::Initialize\n"); res = (*pDSInitialize)(lpds, pcGuidDevice); if(res) OutTraceE("Initialize ERROR: res=%x(s)\n", res, ExplainDDError(res)); return res; } ================================================ FILE: dll/dwhide.cpp ================================================ #define _CRT_SECURE_NO_WARNINGS #include #include "dxwnd.h" #include "dxwcore.hpp" #include "syslibs.h" #include "dxhelper.h" //#define FOUR_WINDOWS_STRIPED_HIDER /**************************************************************************** * Function Name : gShowHideTaskBar() * * Parameters : BOOL bHide (flag to toggle Show/Hide of Taskbar) * * Return type : void * * Purpose : Function is used to Show/Hide the TaskBar * * Author : Ashutosh R. Bhatikar (ARB) * * Date written : 20th December 2000 * * Modification History : * * Date of modification Reason * * 25th December 2000 Added methods to Show/Hide menu * ****************************************************************************/ void gShowHideTaskBar(BOOL bHide /*=FALSE*/) { RECT rectWorkArea; RECT rectTaskBar; static HWND pWnd = NULL; static HWND pStart = NULL; if(!pWnd) { pWnd = FindWindow("Shell_TrayWnd", ""); // WinXP find pStart = FindWindowEx(pWnd, NULL, "Button", NULL); // if unsuccessful, do a Win7/8 find if(!pStart) pStart = FindWindowEx((*pGetDesktopWindow)(), NULL, "Button", "Start"); } (*pSystemParametersInfoA)(SPI_GETWORKAREA,0, (LPVOID)&rectWorkArea, 0); (*pGetWindowRect)(pWnd, &rectTaskBar); if( bHide ){ // Code to Hide the System Task Bar rectWorkArea.bottom += (rectTaskBar.bottom - rectTaskBar.top); (*pSystemParametersInfoA)(SPI_SETWORKAREA, 0, (LPVOID)&rectWorkArea, 0); (*pShowWindow)(pWnd, SW_HIDE); (*pShowWindow)(pStart, SW_HIDE); } else{ // Code to Show the System Task Bar rectWorkArea.bottom -= (rectTaskBar.bottom - rectTaskBar.top); (*pSystemParametersInfoA)(SPI_SETWORKAREA, 0, (LPVOID)&rectWorkArea, 0); (*pShowWindow)(pWnd, SW_SHOW); (*pShowWindow)(pStart, SW_SHOW); } } static bool quit = false; static HWND wHider=0; static RECT wDesktop; #ifdef FOUR_WINDOWS_STRIPED_HIDER LRESULT CALLBACK dw_Hider_Message_Handler(HWND hwnd, UINT umsg, WPARAM wparam, LPARAM lparam) { switch(umsg) { case WM_DESTROY: PostQuitMessage(0); break; case WM_CLOSE: quit = true; break; } return (*pDefWindowProcA)(hwnd, umsg, wparam, lparam); } #else LRESULT CALLBACK dw_Hider_Message_Handler(HWND hwnd, UINT umsg, WPARAM wparam, LPARAM lparam) { extern void ExplainMsg(char *, HWND, UINT, WPARAM, LPARAM); // ExplainMsg("HIDER", hwnd, umsg, wparam, lparam); //LRESULT ret; switch(umsg) { case WM_DESTROY: PostQuitMessage(0); break; case WM_CLOSE: quit = true; break; } // OutTrace("HIDER: msg=%x(%s) w/lparam= %x-%x\n", umsg, ExplainWinMessage(umsg), wparam, lparam); if(hwnd == wHider){ WINDOWPOS *wp; switch(umsg){ case WM_NOTIFY: case WM_SETFOCUS: case WM_LBUTTONDOWN: //case WM_LBUTTONUP: //case WM_LBUTTONDBLCLK: case WM_RBUTTONDOWN: //case WM_RBUTTONUP: //case WM_RBUTTONDBLCLK: case WM_MBUTTONDOWN: //case WM_MBUTTONUP: //case WM_MBUTTONDBLCLK: (*pInvalidateRect)(hwnd, NULL, TRUE); (*pSetWindowPos)(hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE|SWP_NOOWNERZORDER|SWP_NOSENDCHANGING); (*pSetWindowPos)(dxw.GethWnd(), HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE|SWP_NOOWNERZORDER|SWP_NOSENDCHANGING); return 0; break; case WM_WINDOWPOSCHANGING: case WM_WINDOWPOSCHANGED: wp = (WINDOWPOS *)lparam; wp->x = wDesktop.left; wp->y = wDesktop.top; wp->cx = wDesktop.right - wDesktop.left; wp->cy = wDesktop.bottom - wDesktop.top; break; default: break; } } return (*pDefWindowProcA)(hwnd, umsg, wparam, lparam); } #endif static HINSTANCE RegisterHiderWindow() { WNDCLASSEX WndClsEx; HINSTANCE hinst = NULL; static ATOM aClass; #ifdef DISABLEAERODESKTOP typedef HRESULT (WINAPI *DwmEnableComposition_Type)(UINT); DwmEnableComposition_Type pDwmEnableComposition; HMODULE hlib; // try to disable AERO desktop interface, if possible ... pDwmEnableComposition = NULL; hlib=(*pLoadLibraryA)("dwmapi.dll"); if(hlib){ pDwmEnableComposition = (DwmEnableComposition_Type)(*pGetProcAddress)(hlib, "DwmEnableComposition"); } if(pDwmEnableComposition) { (*pDwmEnableComposition)(FALSE); } #endif hinst=GetModuleHandle(NULL); if(!hinst) OutTrace("GetModuleHandle ERROR err=%d\n", GetLastError()); else OutTrace("GetModuleHandle hinst=%x\n", hinst); WndClsEx.cbSize = sizeof(WNDCLASSEX); WndClsEx.style = 0; WndClsEx.lpfnWndProc = dw_Hider_Message_Handler; //DefWindowProc; WndClsEx.cbClsExtra = 0; WndClsEx.cbWndExtra = 0; WndClsEx.hIcon = LoadIcon(NULL, IDI_APPLICATION); //WndClsEx.hCursor = LoadCursor(NULL, IDC_CROSS); WndClsEx.hCursor = NULL; WndClsEx.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); //WndClsEx.hbrBackground = CreateSolidBrush(RGB(200,0,0)); WndClsEx.lpszMenuName = NULL; WndClsEx.lpszClassName = "dxwnd:hider"; WndClsEx.hInstance = hinst; WndClsEx.hIconSm = LoadIcon(NULL, IDI_APPLICATION); // Register the application aClass=(*pRegisterClassExA)(&WndClsEx); if(!aClass) OutTraceE("RegisterClassEx: ERROR err=%d\n", GetLastError()); return hinst; } #ifdef FOUR_WINDOWS_STRIPED_HIDER void dxwCore::HideDesktop(HWND hwnd) { static BOOL DoOnce=TRUE; static ATOM aClass; static HWND wleft=0, wright=0, wtop=0, wbottom=0; BOOL bleft, bright, btop, bbottom; RECT wRect, wDesktop; static HINSTANCE hinst=NULL; if(DoOnce){ hinst=RegisterHiderWindow(); DoOnce=FALSE; } if(!(*pGetWindowRect)(hwnd, &wRect)) { OutTrace("GetWindowRect ERROR hwnd=%x err=%d\n", hWnd, GetLastError()); return; } if(!(*pGetWindowRect)((*pGetDesktopWindow)(), &wDesktop)) { OutTrace("GetWindowRect ERROR hwnd=%x err=%d\n", NULL, GetLastError()); return; } if(dxw.dwFlags6 & HIDETASKBAR){ wDesktop.left = 0; wDesktop.top = 0; wDesktop.right = (*pGetSystemMetrics)(SM_CXSCREEN); wDesktop.bottom = (*pGetSystemMetrics)(SM_CYSCREEN); gShowHideTaskBar(TRUE); } bleft = (wDesktop.left != wRect.left); bright = (wDesktop.right != wRect.right); btop = (wDesktop.top != wRect.top); bbottom = (wDesktop.bottom != wRect.bottom); OutTrace("Hider: desktop=(%d,%d)-(%d,%d)\n", wDesktop.left, wDesktop.top, wDesktop.right, wDesktop.bottom); OutTrace("Hider: window =(%d,%d)-(%d,%d)\n", wRect.left, wRect.top, wRect.right, wRect.bottom); // this is tricky: if you create a window with zero style, the manager seems to apply a default // overlapped window style. The only way I got to be sure that the style is exactly nothing // at all is to repeat the command by a SetWindowLong(hwnd, GWL_STYLE, 0) that sets again zero // as the correct window style. // create the windows that are necessary HWND hParent = (*pGetDesktopWindow)(); if(!wleft && bleft) { wleft=(*pCreateWindowExA)(0, "dxwnd:hider", "hider", 0, 0, 0, 0, 0, hParent, NULL, hinst, NULL); (*pSetWindowLongA)(wleft, GWL_STYLE, 0); } if(!wright && bright) { wright=(*pCreateWindowExA)(0, "dxwnd:hider", "hider", 0, 0, 0, 0, 0, hParent, NULL, hinst, NULL); (*pSetWindowLongA)(wright, GWL_STYLE, 0); } if(!wtop && btop) { wtop=(*pCreateWindowExA)(0, "dxwnd:hider", "hider", 0, 0, 0, 0, 0, hParent, NULL, hinst, NULL); (*pSetWindowLongA)(wtop, GWL_STYLE, 0); } if(!wbottom && bbottom) { wbottom=(*pCreateWindowExA)(0, "dxwnd:hider", "hider", 0, 0, 0, 0, 0, hParent, NULL, hinst, NULL); (*pSetWindowLongA)(wbottom, GWL_STYLE, 0); } // destroy the windows no longer useful if(wleft && !bleft) { (*pDestroyWindow)(wleft); wleft=0; } if(wright && !bright) { (*pDestroyWindow)(wright); wright=0; } if(wtop && !btop) { (*pDestroyWindow)(wtop); wtop=0; } if(wbottom && !bbottom) { (*pDestroyWindow)(wbottom); wbottom=0; } if(bleft) { (*pMoveWindow)(wleft, wDesktop.left, wDesktop.top, wRect.left-wDesktop.left, wDesktop.bottom-wDesktop.top, TRUE); (*pSetWindowLongA)(wleft, GWL_EXSTYLE, WS_EX_TOPMOST); (*pShowWindow)(wleft, SW_SHOW); } if(bright) { (*pMoveWindow)(wright, wRect.right, wDesktop.top, wDesktop.right-wRect.right, wDesktop.bottom-wDesktop.top, TRUE); (*pSetWindowLongA)(wright, GWL_EXSTYLE, WS_EX_TOPMOST); (*pShowWindow)(wright, SW_SHOW); } if(btop) { (*pMoveWindow)(wtop, wDesktop.left, wDesktop.top, wDesktop.right-wDesktop.left, wRect.top-wDesktop.top, TRUE); (*pSetWindowLongA)(wtop, GWL_EXSTYLE, WS_EX_TOPMOST); (*pShowWindow)(wtop, SW_SHOW); } if(bbottom) { (*pMoveWindow)(wbottom, wDesktop.left, wRect.bottom, wDesktop.right-wDesktop.left, wDesktop.bottom-wRect.bottom, TRUE); (*pSetWindowLongA)(wbottom, GWL_EXSTYLE, WS_EX_TOPMOST); (*pShowWindow)(wbottom, SW_SHOW); } } #else void dxwCore::HideDesktop(HWND hwnd) { static BOOL DoOnce=TRUE; static ATOM aClass; RECT wRect; static HINSTANCE hinst=NULL; if(DoOnce){ hinst=RegisterHiderWindow(); DoOnce=FALSE; } if(!(*pGetWindowRect)(hwnd, &wRect)) { OutTrace("GetWindowRect ERROR hwnd=%x err=%d\n", hwnd, GetLastError()); return; } dxw.GetMonitorWorkarea(&wDesktop, (Coordinates != DXW_DESKTOP_FULL)); if(dxw.dwFlags6 & HIDETASKBAR)gShowHideTaskBar(TRUE); //OutTrace("Hider: desktop=(%d,%d)-(%d,%d)\n", wDesktop.left, wDesktop.top, wDesktop.right, wDesktop.bottom); //OutTrace("Hider: window =(%d,%d)-(%d,%d)\n", wRect.left, wRect.top, wRect.right, wRect.bottom); // this is tricky: if you create a window with zero style, the manager seems to apply a default // overlapped window style. The only way I got to be sure that the style is exactly nothing // at all is to repeat the command by a SetWindowLong(hwnd, GWL_STYLE, 0) that sets again zero // as the correct window style. HWND hParent = (*pGetDesktopWindow)(); if(!wHider) { wHider=(*pCreateWindowExA)(0, "dxwnd:hider", "hider", 0, 0, 0, 0, 0, hParent, NULL, hinst, NULL); if(!wHider) { OutTraceE("HideDesktop: CreateWindowEx ERROR hwnd=%x parent=%x err=%d\n", hwnd, hParent, GetLastError()); return; } else{ OutTraceDW("HideDesktop: Created Window wHider=%x\n", wHider); } (*pSetWindowLongA)(wHider, GWL_STYLE, 0); } (*pMoveWindow)(wHider, wDesktop.left, wDesktop.top, wDesktop.right-wDesktop.left, wDesktop.bottom-wDesktop.top, TRUE); (*pSetWindowPos)(wHider, HWND_BOTTOM, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE|SWP_NOOWNERZORDER|SWP_NOSENDCHANGING); //(*pSetWindowPos)(wHider, hwnd, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE); (*pShowWindow)(wHider, SW_SHOW); //(*pSetWindowPos)(wHider, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE); // make the game window visible again .... (*pSetWindowPos)(hwnd, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE); (*pUpdateWindow)(hwnd); //(*pShowWindow)(hwnd, SW_SHOW); } #endif ================================================ FILE: dll/dxdds.h ================================================ #ifndef DDS_HEADER struct DDS_PIXELFORMAT { DWORD dwSize; DWORD dwFlags; DWORD dwFourCC; DWORD dwRGBBitCount; DWORD dwRBitMask; DWORD dwGBitMask; DWORD dwBBitMask; DWORD dwABitMask; }; typedef struct { DWORD dwSize; DWORD dwFlags; DWORD dwHeight; DWORD dwWidth; DWORD dwPitchOrLinearSize; DWORD dwDepth; DWORD dwMipMapCount; DWORD dwReserved1[11]; DDS_PIXELFORMAT ddspf; DWORD dwCaps; DWORD dwCaps2; DWORD dwCaps3; DWORD dwCaps4; DWORD dwReserved2; } DDS_HEADER; #endif ================================================ FILE: dll/dxdiaghook.cpp ================================================ #include #include #include "dxwnd.h" #include "dxwcore.hpp" // COM generic types typedef HRESULT (WINAPI *QueryInterface_Type)(void *, REFIID, LPVOID *); // DxDiag IDxDiagProvider typedef HRESULT (WINAPI *Initialize_Type) (void *, DXDIAG_INIT_PARAMS *); typedef HRESULT (WINAPI *GetRootContainer_Type) (void *, IDxDiagContainer **); // DxDiag IDxDiagContainer typedef HRESULT (WINAPI *GetNumberOfChildContainers_Type) (void *, DWORD *); typedef HRESULT (WINAPI *EnumChildContainerNames_Type) (void *, DWORD, LPWSTR, DWORD); typedef HRESULT (WINAPI *GetChildContainer_Type) (void *, LPCWSTR, IDxDiagContainer **); typedef HRESULT (WINAPI *GetNumberOfProps_Type) (void *, DWORD *); typedef HRESULT (WINAPI *EnumPropNames_Type) (void *, DWORD, LPWSTR, DWORD); typedef HRESULT (WINAPI *GetProp_Type) (void *, LPCWSTR, VARIANT *); typedef HRESULT (WINAPI *Initialize_Type)(void *, DXDIAG_INIT_PARAMS *); typedef HRESULT (WINAPI *GetRootContainer_Type)(void *, IDxDiagContainer **); HRESULT WINAPI extInitializeDD(void *, DXDIAG_INIT_PARAMS *); HRESULT WINAPI extGetRootContainer(void *, IDxDiagContainer **); HRESULT WINAPI extGetNumberOfChildContainers(void *, DWORD *); HRESULT WINAPI extQueryInterfaceDD(void *, REFIID, LPVOID *); HRESULT WINAPI extGetProp(void *, LPCWSTR, VARIANT *); Initialize_Type pInitializeDD; GetRootContainer_Type pGetRootContainer; GetNumberOfChildContainers_Type pGetNumberOfChildContainers; EnumChildContainerNames_Type pEnumChildContainerNames; GetChildContainer_Type pGetChildContainer; GetNumberOfProps_Type pGetNumberOfProps; EnumPropNames_Type pEnumPropNames; GetProp_Type pGetProp; QueryInterface_Type pQueryInterfaceDD; HRESULT HookDxDiag(REFIID riid, LPVOID FAR* ppv) { HMODULE dxdlib; OutTraceDW("CoCreateInstance: CLSID_DxDiagProvider object\n"); dxdlib=(*pLoadLibraryA)("dxdiagn.dll"); OutTraceDW("CoCreateInstance: dxdiagn lib handle=%x\n", dxdlib); extern void HookModule(HMODULE, int); HookModule(dxdlib, 0); switch (*(DWORD *)&riid){ case 0x9C6B4CB0: OutTraceDW("CoCreateInstance: IID_DxDiagProvider RIID\n"); // IID_DxDiagProvider::QueryInterface SetHook((void *)(**(DWORD **)ppv), extQueryInterfaceDD, (void **)&pQueryInterfaceDD, "QueryInterface(DxDiag)"); // IID_DxDiagProvider::Initialize SetHook((void *)(**(DWORD **)ppv + 12), extInitializeDD, (void **)&pInitializeDD, "Initialize(DxDiag)"); // IID_DxDiagProvider::Initialize SetHook((void *)(**(DWORD **)ppv + 16), extGetRootContainer, (void **)&pGetRootContainer, "GetRootContainer(DxDiag)"); break; case 0x7D0F462F: OutTraceDW("CoCreateInstance: IID_IDxDiagContainer RIID\n"); break; } return DD_OK; } HRESULT WINAPI extInitializeDD(void *th, DXDIAG_INIT_PARAMS *pParams) { HRESULT res; OutTraceDW("DxDiag::Initialize Params=%x\n", pParams); res=(*pInitializeDD)(th, pParams); OutTraceDW("DxDiag::Initialize res=%x\n", res); return res; } HRESULT WINAPI extGetRootContainer(void *th, IDxDiagContainer **ppInstance) { HRESULT res; OutTraceDW("DxDiag::GetRootContainer pInstance=%x\n", *ppInstance); res=(*pGetRootContainer)(th, ppInstance); // IID_IDxDiagContainer::GetNumberOfChildContainers SetHook((void *)(**(DWORD **)ppInstance + 12), extGetNumberOfChildContainers, (void **)&pGetNumberOfChildContainers, "GetNumberOfChildContainers(DxDiag)"); // IID_IDxDiagContainer::GetProp SetHook((void *)(**(DWORD **)ppInstance + 32), extGetProp, (void **)&pGetProp, "GetProp(DxDiag)"); OutTraceDW("DxDiag::GetRootContainer res=%x\n", res); return res; } HRESULT WINAPI extGetNumberOfChildContainers(void *th, DWORD *pdwCount) { HRESULT res; OutTraceDW("DxDiag::GetNumberOfChildContainers\n"); res=(*pGetNumberOfChildContainers)(th, pdwCount); OutTraceDW("DxDiag::GetNumberOfChildContainers res=%x Count=%d\n", res, *pdwCount); return res; } HRESULT WINAPI extQueryInterfaceDD(void *th, REFIID riid, LPVOID *ppvObj) { HRESULT res; OutTraceDW("DxDiag::QueryInterface ref=%x\n"); res=(*pQueryInterfaceDD)(th, riid, ppvObj); OutTraceDW("DxDiag::QueryInterface res=%x\n", res); return res; } HRESULT WINAPI extGetProp(void *th, LPCWSTR pwszPropName, VARIANT *pvarProp) { HRESULT res; OutTraceDW("DxDiag::GetProp PropName=%ls\n", pwszPropName); res=(*pGetProp)(th, pwszPropName, pvarProp); if(res) OutTraceE("DxDiag::GetProp ERROR res=%x\n", res); if (!wcsncmp(L"dwDirectXVersionMajor", pwszPropName, sizeof(L"dwDirectXVersionMajor"))){ OutTraceDW("DxDiag::GetProp DirectXVersionMajor=%d\n", *pvarProp); //*(DWORD *)pvarProp=10; //OutTraceDW("DxDiag::GetProp fixed DirectXVersionMajor=%d\n", *pvarProp); } if (!wcsncmp(L"dwDirectXVersionMinor", pwszPropName, sizeof(L"dwDirectXVersionMinor"))){ OutTraceDW("DxDiag::GetProp DirectXVersionMinor=%d\n", *pvarProp); //*(DWORD *)pvarProp=10; //OutTraceDW("DxDiag::GetProp fixed dwDirectXVersionMinor=%d\n", *pvarProp); } if (!wcsncmp(L"szDirectXVersionLetter", pwszPropName, sizeof(L"szDirectXVersionLetter"))){ OutTraceDW("DxDiag::GetProp DirectXVersionLetter=%d\n", *pvarProp); //*(DWORD *)pvarProp=9; //OutTraceDW("DxDiag::GetProp fixed szDirectXVersionLetter=%d\n", *pvarProp); } return res; } /* STDMETHOD(GetNumberOfChildContainers) (THIS_ DWORD *pdwCount) PURE; STDMETHOD(EnumChildContainerNames) (THIS_ DWORD dwIndex, LPWSTR pwszContainer, DWORD cchContainer) PURE; STDMETHOD(GetChildContainer) (THIS_ LPCWSTR pwszContainer, IDxDiagContainer **ppInstance) PURE; STDMETHOD(GetNumberOfProps) (THIS_ DWORD *pdwCount) PURE; STDMETHOD(EnumPropNames) (THIS_ DWORD dwIndex, LPWSTR pwszPropName, DWORD cchPropName) PURE; STDMETHOD(GetProp) (THIS_ LPCWSTR pwszPropName, VARIANT *pvarProp) PURE; */ ================================================ FILE: dll/dxemublt.cpp ================================================ #include #include #include #include "dxwnd.h" #include "dxwcore.hpp" #include "hddraw.h" //#define USEOPENMP typedef HRESULT (WINAPI *Lock_Type)(LPDIRECTDRAWSURFACE, LPRECT, LPDDSURFACEDESC, DWORD, HANDLE); typedef HRESULT (WINAPI *Unlock4_Type)(LPDIRECTDRAWSURFACE, LPRECT); typedef HRESULT (WINAPI *Unlock1_Type)(LPDIRECTDRAWSURFACE, LPVOID); extern Lock_Type pLockMethod(int); extern Unlock4_Type pUnlockMethod(int); extern DWORD PaletteEntries[256]; extern DWORD *Palette16BPP; extern char *ExplainDDError(DWORD); // just in case .... #define SwitchdwSize(s) s.dwSize=(s.dwSize==sizeof(DDSURFACEDESC))?sizeof(DDSURFACEDESC2):sizeof(DDSURFACEDESC) #define MARKBLITCOLOR32 0x00FFFF00 #define MARKBLITCOLOR16 0x0FF0 EmuBlt_Type pEmuBlt; PrimaryBlt_Type pPrimaryBlt; extern Blt_Type pBlt; //--------------------------------------------------------------------------------------------// // Emulated blitting procedures: fills a 32BPP surface from the content of 8BPP or 16BPP ones. //--------------------------------------------------------------------------------------------// static void MarkRect32(DWORD *dest, int w, int h, int destpitch) { int x, y; for(x = 0; x < w; x ++) *(dest ++) = MARKBLITCOLOR32; if (h<3) return; dest += destpitch; for(y = 0; y < h-2; y ++){ *dest = MARKBLITCOLOR32; dest += w-1; *dest = MARKBLITCOLOR32; dest += destpitch + 1; } for(x = 0; x < w; x ++) *(dest ++) = MARKBLITCOLOR32; return; } static void MarkRect16(SHORT *dest, int w, int h, int destpitch) { int x, y; for(x = 0; x < w; x ++) *(dest ++) = MARKBLITCOLOR16; if (h<3) return; dest += destpitch; for(y = 0; y < h-2; y ++){ *dest = MARKBLITCOLOR16; dest += w-1; *dest = MARKBLITCOLOR16; dest += destpitch + 1; } for(x = 0; x < w; x ++) *(dest ++) = MARKBLITCOLOR16; return; } static DWORD Melt32(DWORD c1, DWORD c2) { DWORD ret; ret = ((((c1 & 0x0000FF) + (c2 & 0x0000FF)) >> 1) & 0x0000FF) | ((((c1 & 0x00FF00) + (c2 & 0x00FF00)) >> 1) & 0x00FF00) | ((((c1 & 0xFF0000) + (c2 & 0xFF0000)) >> 1) & 0xFF0000); return ret; } static DWORD Melt16_555(DWORD c1, DWORD c2) { DWORD ret; ret = ((((c1 & 0x00001F) + (c2 & 0x00001F)) >> 1) & 0x00001F) | ((((c1 & 0x0003E0) + (c2 & 0x0003E0)) >> 1) & 0x0003E0) | ((((c1 & 0x007C00) + (c2 & 0x007C00)) >> 1) & 0x007C00); return ret; } static DWORD Melt16_565(DWORD c1, DWORD c2) { DWORD ret; ret = ((((c1 & 0x00001F) + (c2 & 0x00001F)) >> 1) & 0x00001F) | ((((c1 & 0x0007E0) + (c2 & 0x0007E0)) >> 1) & 0x0007E0) | ((((c1 & 0x00F800) + (c2 & 0x00F800)) >> 1) & 0x00F800); return ret; } void SetPalette16BPP() { // OutTraceDW("DEBUG: h=%d w=%d src=%x dst=%x spitch=%d dpitch=%d\n",h,w,src16,dest,srcpitch,destpitch); unsigned int pi; Palette16BPP = (DWORD *)malloc(0x10000 * sizeof(DWORD)); if (dxw.dwFlags3 & BLACKWHITE){ // actually, it should be like this: R/G/B = (red * 0.30) + (green * 0.59) + (blue * 0.11) // (http://www.codeproject.com/Articles/66253/Converting-Colors-to-Gray-Shades) DWORD grey; if (dxw.dwFlags1 & USERGB565){ for (pi=0; pi<0x10000; pi++) { //grey = ((((pi & 0x1F)<<3) + ((pi & 0x7E0)>>3) + ((pi & 0xF800)>>8)) / 3) & 0xFF; grey = (((((pi & 0x1F)<<3) * 30) + (((pi & 0x7E0)>>3) * 59) + (((pi & 0xF800)>>8) * 11)) / 100) & 0xFF; Palette16BPP[pi] = (grey) + (grey<<8) + (grey<<16); } } else { for (pi=0; pi<0x10000; pi++) { //grey = ((((pi & 0x1F)<<3) + ((pi & 0x3E0)>>2) + ((pi & 0x7C00)>>7)) / 3) & 0xFF; grey = (((((pi & 0x1F)<<3) * 30) + (((pi & 0x3E0)>>2) * 59) + (((pi & 0x7C00)>>7) * 11)) / 100) & 0xFF; Palette16BPP[pi] = grey + (grey<<8) + (grey<<16); } } } else { if (dxw.dwFlags1 & USERGB565){ for (pi=0; pi<0x10000; pi++) { Palette16BPP[pi]=(pi & 0x1F)<<3 | (pi & 0x7E0)<<5 | (pi & 0xF800)<<8; // RGB565 } } else { for (pi=0; pi<0x10000; pi++) { Palette16BPP[pi]=(pi & 0x1F)<<3 | (pi & 0x3E0)<<6 | (pi & 0x7C00)<<9; // RGB555 } } } } static HRESULT WINAPI EmuBlt_8_to_32(int dxversion, Blt_Type pBlt, LPDIRECTDRAWSURFACE lpddsdst, LPRECT lpdestrect, LPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, DWORD dwflags, LPVOID lpsurface) { HRESULT res; BYTE *src8; DWORD *dest, *dest0; DDSURFACEDESC2 ddsd_src, ddsd_dst; long srcpitch, destpitch; int x, y, w, h; w = lpdestrect->right - lpdestrect->left; h = lpdestrect->bottom - lpdestrect->top; memset(&ddsd_dst,0,sizeof(DDSURFACEDESC2)); ddsd_dst.dwSize = Set_dwSize_From_Surface(); ddsd_dst.dwFlags = DDSD_LPSURFACE | DDSD_PITCH; if(res=(*pLockMethod(dxversion))(lpddsdst, 0, (LPDDSURFACEDESC)&ddsd_dst, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){ OutTraceE("EmuBlt8_32: Lock ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); return res; } memset(&ddsd_src,0,sizeof(DDSURFACEDESC2)); ddsd_src.dwSize = Set_dwSize_From_Surface(); ddsd_src.dwFlags = DDSD_LPSURFACE | DDSD_PITCH; if (lpsurface) { // already locked, just get info .... if(res=lpddssrc->GetSurfaceDesc((LPDDSURFACEDESC)&ddsd_src)) { OutTraceE("EmuBlt8_32: GetSurfaceDesc ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); (*pUnlockMethod(dxversion))(lpddsdst, lpdestrect); (*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect); return 0; } } else { if(res=(*pLockMethod(dxversion))(lpddssrc, 0, (LPDDSURFACEDESC)&ddsd_src, DDLOCK_SURFACEMEMORYPTR|DDLOCK_READONLY, 0)) { OutTraceE("EmuBlt8_32: Lock ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); (*pUnlockMethod(dxversion))(lpddsdst, 0); (*pUnlockMethod(dxversion))(lpddssrc, 0); return 0; } lpsurface=ddsd_src.lpSurface; } ddsd_dst.lPitch >>= 2; dest = (DWORD *)ddsd_dst.lpSurface; dest += lpdestrect->top*ddsd_dst.lPitch; dest += lpdestrect->left; destpitch = ddsd_dst.lPitch - w; dest0 = dest; src8 = (BYTE *)lpsurface; src8 += lpsrcrect->top*ddsd_src.lPitch; src8 += lpsrcrect->left; srcpitch = ddsd_src.lPitch - w; // OutTraceDW("DEBUG: h=%d w=%d src=%x dst=%x spitch=%d dpitch=%d\n",h,w,src8,dest,srcpitch,destpitch); for(y = 0; y < h; y ++){ for(x = 0; x < w; x ++){ *(dest ++) = PaletteEntries[*(src8 ++)]; } dest += destpitch; src8 += srcpitch; } if(dxw.dwFlags3 & MARKBLIT) MarkRect32(dest0, w, h, destpitch); res=(*pUnlockMethod(dxversion))(lpddsdst, lpdestrect); if (res) OutTraceE("EmuBlt8_32: Unlock ERROR dds=%x res=%x(%s) at %d\n", lpddsdst, res, ExplainDDError(res), __LINE__); res=(*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect); if (res) OutTraceE("EmuBlt8_32: Unlock ERROR dds=%x res=%x(%s) at %d\n", lpddssrc, res, ExplainDDError(res), __LINE__); return res; } static HRESULT WINAPI BilinearBlt_8_to_32(int dxversion, Blt_Type pBlt, LPDIRECTDRAWSURFACE lpddsdst, LPRECT lpdestrect, LPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, DWORD dwflags, LPVOID lpsurface) { HRESULT res; BYTE *src8, *src0; DWORD *dest, *dest0; DDSURFACEDESC2 ddsd_src, ddsd_dst; long srcpitch, destpitch; int w, h; w = lpdestrect->right - lpdestrect->left; h = lpdestrect->bottom - lpdestrect->top; lpdestrect->left <<= 1; lpdestrect->top <<= 1; lpdestrect->right <<= 1; lpdestrect->bottom <<= 1; memset(&ddsd_dst,0,sizeof(DDSURFACEDESC2)); ddsd_dst.dwSize = Set_dwSize_From_Surface(); ddsd_dst.dwFlags = DDSD_LPSURFACE | DDSD_PITCH; if(res=(*pLockMethod(dxversion))(lpddsdst, 0, (LPDDSURFACEDESC)&ddsd_dst, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){ OutTraceE("BilBlt8_32: Lock ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); return res; } memset(&ddsd_src,0,sizeof(DDSURFACEDESC2)); ddsd_src.dwSize = Set_dwSize_From_Surface(); ddsd_src.dwFlags = DDSD_LPSURFACE | DDSD_PITCH; if (lpsurface) { // already locked, just get info .... if(res=lpddssrc->GetSurfaceDesc((LPDDSURFACEDESC)&ddsd_src)) { OutTraceE("BilBlt8_32: GetSurfaceDesc ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); (*pUnlockMethod(dxversion))(lpddsdst, lpdestrect); (*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect); return 0; } } else { if(res=(*pLockMethod(dxversion))(lpddssrc, 0, (LPDDSURFACEDESC)&ddsd_src, DDLOCK_SURFACEMEMORYPTR|DDLOCK_READONLY, 0)) { OutTraceE("BilBlt8_32: Lock ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); (*pUnlockMethod(dxversion))(lpddsdst,0); (*pUnlockMethod(dxversion))(lpddssrc, 0); return 0; } lpsurface=ddsd_src.lpSurface; } ddsd_dst.lPitch >>= 2; dest = (DWORD *)ddsd_dst.lpSurface; dest += lpdestrect->top*ddsd_dst.lPitch; dest += lpdestrect->left; destpitch = ddsd_dst.lPitch - (2 * w); dest0 = dest; src8 = (BYTE *)lpsurface; src8 += (lpsrcrect->top >> 1)*ddsd_src.lPitch; src8 += (lpsrcrect->left >> 1); srcpitch = ddsd_src.lPitch - w; src0 = src8; // OutTraceDW("DEBUG: h=%d w=%d src=%x dst=%x spitch=%d dpitch=%d\n",h,w,src8,dest,srcpitch,destpitch); #ifdef USEOPENMP #pragma omp parallel for schedule(static) #endif for(int y = 0; y < h; y ++){ register DWORD Q1, Q2, Q3, Q4, Q5; src8 = src0 + (y * ddsd_src.lPitch); dest = dest0 + ((y * ddsd_dst.lPitch) << 1); Q5 = Melt32(PaletteEntries[*(src8)], PaletteEntries[*(src8+ddsd_src.lPitch)]); for(int x = 0; x < w; x ++){ Q1 = PaletteEntries[*(src8)]; Q2 = Melt32(Q1, PaletteEntries[*(src8+1)]); Q3 = Q5; if(y == h-1){ Q3 = Q1; Q4 = Q2; } else{ Q5 = Melt32(PaletteEntries[*(src8+1)], PaletteEntries[*(src8+ddsd_src.lPitch+1)]); // to be used in next for cycle Q4 = Melt32(Q3, Q5); } *(dest) = Q1; *(dest+1) = Q2; *(dest+ddsd_dst.lPitch) = Q3; *(dest+ddsd_dst.lPitch+1) = Q4; src8++; dest+=2; } } if(dxw.dwFlags3 & MARKBLIT) MarkRect32(dest0, 2*w, 2*h, destpitch); res=(*pUnlockMethod(dxversion))(lpddsdst, lpdestrect); if (res) OutTraceE("BilBlt8_32: Unlock ERROR dds=%x res=%x(%s) at %d\n", lpddsdst, res, ExplainDDError(res), __LINE__); res=(*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect); if (res) OutTraceE("BilBlt8_32: Unlock ERROR dds=%x res=%x(%s) at %d\n", lpddssrc, res, ExplainDDError(res), __LINE__); return res; } static HRESULT WINAPI EmuBlt_16_to_32(int dxversion, Blt_Type pBlt, LPDIRECTDRAWSURFACE lpddsdst, LPRECT lpdestrect, LPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, DWORD dwflags, LPVOID lpsurface) { HRESULT res; WORD *src16; DWORD *dest, *dest0; DDSURFACEDESC2 ddsd_src, ddsd_dst; long srcpitch, destpitch; DWORD x, y, w, h; w = lpdestrect->right - lpdestrect->left; h = lpdestrect->bottom - lpdestrect->top; memset(&ddsd_dst,0,sizeof(DDSURFACEDESC2)); ddsd_dst.dwSize = Set_dwSize_From_Surface(); ddsd_dst.dwFlags = DDSD_LPSURFACE | DDSD_PITCH; // useless ...? if(res=(*pLockMethod(dxversion))(lpddsdst, 0, (LPDDSURFACEDESC)&ddsd_dst, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){ OutTraceE("EmuBlt16_32: Lock ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); return res; } memset(&ddsd_src,0,sizeof(DDSURFACEDESC2)); ddsd_src.dwSize = Set_dwSize_From_Surface(); ddsd_src.dwFlags = DDSD_LPSURFACE | DDSD_PITCH; if (lpsurface) { // already locked, just get info .... if(res=lpddssrc->GetSurfaceDesc((LPDDSURFACEDESC)&ddsd_src)) { OutTraceE("EmuBlt16_32: GetSurfaceDesc ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); (*pUnlockMethod(dxversion))(lpddsdst, lpdestrect); (*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect); return 0; } } else { if(res=(*pLockMethod(dxversion))(lpddssrc, 0, (LPDDSURFACEDESC)&ddsd_src, DDLOCK_SURFACEMEMORYPTR|DDLOCK_READONLY|DDLOCK_WAIT, 0)) { OutTraceE("EmuBlt16_32: Lock ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); (*pUnlockMethod(dxversion))(lpddsdst,0); (*pUnlockMethod(dxversion))(lpddssrc, 0); return res; } lpsurface=ddsd_src.lpSurface; } ddsd_dst.lPitch >>= 2; dest = (DWORD *)ddsd_dst.lpSurface; dest += lpdestrect->top*ddsd_dst.lPitch; dest += lpdestrect->left; destpitch = ddsd_dst.lPitch - w; dest0 = dest; ddsd_src.lPitch >>= 1; src16 = (WORD *)(lpsurface ? lpsurface:ddsd_src.lpSurface); src16 += lpsrcrect->top*ddsd_src.lPitch; src16 += lpsrcrect->left; srcpitch = ddsd_src.lPitch - w; if (!Palette16BPP) SetPalette16BPP(); for(y = 0; y < h; y ++){ for(x = 0; x < w; x ++){ //if (!(*src16 & 0x8000)) // try implement alpha bit *(dest ++) = Palette16BPP[*(src16 ++)]; } dest += destpitch; src16 += srcpitch; } if(dxw.dwFlags3 & MARKBLIT) MarkRect32(dest0, w, h, destpitch); res=(*pUnlockMethod(dxversion))(lpddsdst, lpdestrect); if (res) OutTraceE("EmuBlt16_32: Unlock ERROR dds=%x res=%x(%s) at %d\n", lpddsdst, res, ExplainDDError(res), __LINE__); res=(*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect); if (res) OutTraceE("EmuBlt16_32: Unlock ERROR dds=%x res=%x(%s) at %d\n", lpddssrc, res, ExplainDDError(res), __LINE__); return res; } static HRESULT WINAPI Deinterlace_16_to_32(int dxversion, Blt_Type pBlt, LPDIRECTDRAWSURFACE lpddsdst, LPRECT lpdestrect, LPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, DWORD dwflags, LPVOID lpsurface) { HRESULT res; WORD *src16; DWORD *dest, *dest0; DDSURFACEDESC2 ddsd_src, ddsd_dst; long srcpitch, destpitch; DWORD x, y, w, h; w = lpdestrect->right - lpdestrect->left; h = lpdestrect->bottom - lpdestrect->top; memset(&ddsd_dst,0,sizeof(DDSURFACEDESC2)); ddsd_dst.dwSize = Set_dwSize_From_Surface(); ddsd_dst.dwFlags = DDSD_LPSURFACE | DDSD_PITCH; if(res=(*pLockMethod(dxversion))(lpddsdst, 0, (LPDDSURFACEDESC)&ddsd_dst, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){ OutTraceE("EmuBlt16_32: Lock ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); return res; } memset(&ddsd_src,0,sizeof(DDSURFACEDESC2)); ddsd_src.dwSize = Set_dwSize_From_Surface(); ddsd_src.dwFlags = DDSD_LPSURFACE | DDSD_PITCH; if (lpsurface) { // already locked, just get info .... if(res=lpddssrc->GetSurfaceDesc((LPDDSURFACEDESC)&ddsd_src)) { OutTraceE("EmuBlt16_32: GetSurfaceDesc ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); (*pUnlockMethod(dxversion))(lpddsdst, lpdestrect); (*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect); return 0; } } else { if(res=(*pLockMethod(dxversion))(lpddssrc, 0, (LPDDSURFACEDESC)&ddsd_src, DDLOCK_SURFACEMEMORYPTR|DDLOCK_READONLY|DDLOCK_WAIT, 0)) { OutTraceE("EmuBlt16_32: Lock ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); (*pUnlockMethod(dxversion))(lpddsdst,0); (*pUnlockMethod(dxversion))(lpddssrc, 0); return res; } lpsurface=ddsd_src.lpSurface; } ddsd_dst.lPitch >>= 2; dest = (DWORD *)ddsd_dst.lpSurface; dest += lpdestrect->top*ddsd_dst.lPitch; dest += lpdestrect->left; destpitch = ddsd_dst.lPitch - w; dest0 = dest; ddsd_src.lPitch >>= 1; src16 = (WORD *)(lpsurface ? lpsurface:ddsd_src.lpSurface); src16 += lpsrcrect->top*ddsd_src.lPitch; src16 += lpsrcrect->left; srcpitch = ddsd_src.lPitch - w; if (!Palette16BPP) SetPalette16BPP(); BOOL allblack = TRUE; WORD *src016 = src16; y = ((h >> 2) << 1) + 1; for(x = 0; x < w; x ++) if(Palette16BPP[*((src16 ++) + (y * ddsd_src.lPitch))]) allblack = FALSE; dest = dest0; src16 = src016; if(allblack){ for(y = 0; y < h; y += 2){ for(x = 0; x < w; x ++){ *(dest ++) = Palette16BPP[*(src16 ++)]; } dest += destpitch+ddsd_dst.lPitch; src16 += srcpitch+ddsd_src.lPitch; } dest = dest0 + ddsd_dst.lPitch; src16 = src016 + ddsd_src.lPitch; for(y = 1; y < h; y += 2){ for(x = 0; x < w; x ++){ *(dest ++) = (*(dest + ddsd_dst.lPitch) >> 1) + (*(dest - ddsd_dst.lPitch) >> 1) ; } dest += destpitch+ddsd_dst.lPitch; src16 += srcpitch+ddsd_src.lPitch; } } else { for(y = 0; y < h; y ++){ for(x = 0; x < w; x ++){ //if (!(*src16 & 0x8000)) // try implement alpha bit *(dest ++) = Palette16BPP[*(src16 ++)]; } dest += destpitch; src16 += srcpitch; } } if(dxw.dwFlags3 & MARKBLIT) MarkRect32(dest0, w, h, destpitch); res=(*pUnlockMethod(dxversion))(lpddsdst, lpdestrect); if (res) OutTraceE("EmuBlt16_32: Unlock ERROR dds=%x res=%x(%s) at %d\n", lpddsdst, res, ExplainDDError(res), __LINE__); res=(*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect); if (res) OutTraceE("EmuBlt16_32: Unlock ERROR dds=%x res=%x(%s) at %d\n", lpddssrc, res, ExplainDDError(res), __LINE__); return res; } static HRESULT WINAPI BilinearBlt_16_to_32(int dxversion, Blt_Type pBlt, LPDIRECTDRAWSURFACE lpddsdst, LPRECT lpdestrect, LPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, DWORD dwflags, LPVOID lpsurface) { HRESULT res; WORD *src16, *src0; DWORD *dest, *dest0; DDSURFACEDESC2 ddsd_src, ddsd_dst; long srcpitch, destpitch; int w, h; w = lpdestrect->right - lpdestrect->left; h = lpdestrect->bottom - lpdestrect->top; lpdestrect->left <<= 1; lpdestrect->top <<= 1; lpdestrect->right <<= 1; lpdestrect->bottom <<= 1; memset(&ddsd_dst,0,sizeof(DDSURFACEDESC2)); ddsd_dst.dwSize = Set_dwSize_From_Surface(); ddsd_dst.dwFlags = DDSD_LPSURFACE | DDSD_PITCH; if(res=(*pLockMethod(dxversion))(lpddsdst, 0, (LPDDSURFACEDESC)&ddsd_dst, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){ OutTraceE("BilBlt16_32: Lock ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); return res; } memset(&ddsd_src,0,sizeof(DDSURFACEDESC2)); ddsd_src.dwSize = Set_dwSize_From_Surface(); ddsd_src.dwFlags = DDSD_LPSURFACE | DDSD_PITCH; if (lpsurface) { // already locked, just get info .... if(res=lpddssrc->GetSurfaceDesc((LPDDSURFACEDESC)&ddsd_src)) { OutTraceE("BilBlt16_32: GetSurfaceDesc ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); (*pUnlockMethod(dxversion))(lpddsdst, lpdestrect); (*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect); return 0; } } else { if(res=(*pLockMethod(dxversion))(lpddssrc, 0, (LPDDSURFACEDESC)&ddsd_src, DDLOCK_SURFACEMEMORYPTR|DDLOCK_READONLY|DDLOCK_WAIT, 0)) { OutTraceE("BilBlt16_32: Lock ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); (*pUnlockMethod(dxversion))(lpddsdst,0); (*pUnlockMethod(dxversion))(lpddssrc, 0); return res; } lpsurface=ddsd_src.lpSurface; } ddsd_dst.lPitch >>= 2; dest = (DWORD *)ddsd_dst.lpSurface; dest += lpdestrect->top*ddsd_dst.lPitch; dest += lpdestrect->left; destpitch = ddsd_dst.lPitch - (2 * w); dest0 = dest; ddsd_src.lPitch >>= 1; src16 = (WORD *)(lpsurface ? lpsurface:ddsd_src.lpSurface); src16 += (lpsrcrect->top >> 1)*ddsd_src.lPitch; src16 += (lpsrcrect->left >> 1); srcpitch = ddsd_src.lPitch - w; src0 = src16; if (!Palette16BPP) SetPalette16BPP(); // OutTraceDW("DEBUG: h=%d w=%d src=%x dst=%x spitch=%d dpitch=%d\n",h,w,src8,dest,srcpitch,destpitch); #ifdef USEOPENMP #pragma omp parallel for schedule(static) #endif for(int y = 0; y < h; y ++){ register DWORD Q1, Q2, Q3, Q4, Q5; src16 = src0 + (y * ddsd_src.lPitch); dest = dest0 + ((y * ddsd_dst.lPitch) << 1); Q5 = Melt32(Palette16BPP[*(src16)], Palette16BPP[*(src16+ddsd_src.lPitch)]); for(int x = 0; x < w; x ++){ Q1 = Palette16BPP[*(src16)]; Q2 = Melt32(Q1, Palette16BPP[*(src16+1)]); Q3 = Q5; if(y == h-1){ Q3 = Q1; Q4 = Q2; } else{ Q5 = Melt32(Palette16BPP[*(src16+1)], Palette16BPP[*(src16+ddsd_src.lPitch+1)]); // to be used in next for cycle Q4 = Melt32(Q3, Q5); } *(dest) = Q1; *(dest+1) = Q2; *(dest+ddsd_dst.lPitch) = Q3; *(dest+ddsd_dst.lPitch+1) = Q4; src16++; dest+=2; } } if(dxw.dwFlags3 & MARKBLIT) MarkRect32(dest0, 2*w, 2*h, destpitch); res=(*pUnlockMethod(dxversion))(lpddsdst, lpdestrect); if (res) OutTraceE("BilBlt16_32: Unlock ERROR dds=%x res=%x(%s) at %d\n", lpddsdst, res, ExplainDDError(res), __LINE__); res=(*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect); if (res) OutTraceE("BilBlt16_32: Unlock ERROR dds=%x res=%x(%s) at %d\n", lpddssrc, res, ExplainDDError(res), __LINE__); return res; } static HRESULT WINAPI EmuBlt_24_to_32(int dxversion, Blt_Type pBlt, LPDIRECTDRAWSURFACE lpddsdst, LPRECT lpdestrect, LPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, DWORD dwflags, LPVOID lpsurface) { HRESULT res; BYTE *src24; DWORD *dest, *dest0; DDSURFACEDESC2 ddsd_src, ddsd_dst; long srcpitch, destpitch; DWORD x, y, w, h; w = lpdestrect->right - lpdestrect->left; h = lpdestrect->bottom - lpdestrect->top; memset(&ddsd_dst,0,sizeof(DDSURFACEDESC2)); ddsd_dst.dwSize = Set_dwSize_From_Surface(); ddsd_dst.dwFlags = DDSD_LPSURFACE | DDSD_PITCH; if(res=(*pLockMethod(dxversion))(lpddsdst, 0, (LPDDSURFACEDESC)&ddsd_dst, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){ OutTraceE("EmuBlt24_32: Lock ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); return res; } memset(&ddsd_src,0,sizeof(DDSURFACEDESC2)); ddsd_src.dwSize = Set_dwSize_From_Surface(); ddsd_src.dwFlags = DDSD_LPSURFACE | DDSD_PITCH; if (lpsurface) { // already locked, just get info .... if(res=lpddssrc->GetSurfaceDesc((LPDDSURFACEDESC)&ddsd_src)) { OutTraceE("EmuBlt24_32: GetSurfaceDesc ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); (*pUnlockMethod(dxversion))(lpddsdst, lpdestrect); (*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect); return 0; } } else { if(res=(*pLockMethod(dxversion))(lpddssrc, 0, (LPDDSURFACEDESC)&ddsd_src, DDLOCK_SURFACEMEMORYPTR|DDLOCK_READONLY, 0)) { OutTraceE("EmuBlt24_32: Lock ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); (*pUnlockMethod(dxversion))(lpddsdst,0); (*pUnlockMethod(dxversion))(lpddssrc, 0); return res; } lpsurface=ddsd_src.lpSurface; } ddsd_dst.lPitch >>= 2; dest = (DWORD *)ddsd_dst.lpSurface; dest += lpdestrect->top*ddsd_dst.lPitch; dest += lpdestrect->left; destpitch = ddsd_dst.lPitch - w; dest0 = dest; src24 = (BYTE *)lpsurface; src24 += lpsrcrect->top*ddsd_src.lPitch; src24 += lpsrcrect->left; srcpitch = ddsd_src.lPitch - 3*w; for(y = 0; y < h; y ++){ for(x = 0; x < w; x ++){ DWORD dwPixel; dwPixel=0; memcpy((void *)&dwPixel, (void *)src24, 3); *(dest ++) = dwPixel; src24 += 3; // 3 bytes = 24 bits } dest += destpitch; src24 += srcpitch; } if(dxw.dwFlags3 & MARKBLIT) MarkRect32(dest0, w, h, destpitch); res=(*pUnlockMethod(dxversion))(lpddsdst, lpdestrect); if (res) OutTraceE("EmuBlt24_32: Unlock ERROR dds=%x res=%x(%s) at %d\n", lpddsdst, res, ExplainDDError(res), __LINE__); res=(*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect); if (res) OutTraceE("EmuBlt24_32: Unlock ERROR dds=%x res=%x(%s) at %d\n", lpddssrc, res, ExplainDDError(res), __LINE__); return res; } // note: better avoid direct blitting in case of identical color depth (e.g. EmuBlt_32_to_32, EmuBlt_16_to_16) // because it does not work between complex surfaces when DDSDCAPS_SYSTEMMEMORY is not omogeneous! static HRESULT WINAPI EmuBlt_32_to_32(int dxversion, Blt_Type pBlt, LPDIRECTDRAWSURFACE lpddsdst, LPRECT lpdestrect, LPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, DWORD dwflags, LPVOID lpsurface) { DWORD x, y, w, h; long srcpitch, destpitch; HRESULT res; DWORD *src32; DWORD *dest, *dest0; DDSURFACEDESC2 ddsd_src, ddsd_dst; w = lpdestrect->right - lpdestrect->left; h = lpdestrect->bottom - lpdestrect->top; memset(&ddsd_dst,0,sizeof(DDSURFACEDESC2)); ddsd_dst.dwSize = Set_dwSize_From_Surface(); ddsd_dst.dwFlags = DDSD_LPSURFACE | DDSD_PITCH; if(res=(*pLockMethod(dxversion))(lpddsdst, 0, (LPDDSURFACEDESC)&ddsd_dst, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){ OutTraceE("EmuBlt32_32: Lock ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); return res; } memset(&ddsd_src,0,sizeof(DDSURFACEDESC2)); ddsd_src.dwSize = Set_dwSize_From_Surface(); ddsd_src.dwFlags = DDSD_LPSURFACE | DDSD_PITCH; if (lpsurface) { // already locked, just get info .... if(res=lpddssrc->GetSurfaceDesc((LPDDSURFACEDESC)&ddsd_src)) { OutTraceE("EmuBlt32_32: GetSurfaceDesc ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); (*pUnlockMethod(dxversion))(lpddsdst, lpdestrect); (*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect); return res; } } else { if(res=(*pLockMethod(dxversion))(lpddssrc, 0, (LPDDSURFACEDESC)&ddsd_src, DDLOCK_SURFACEMEMORYPTR|DDLOCK_READONLY, 0)) { OutTraceE("EmuBlt32_32: Lock ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); (*pUnlockMethod(dxversion))(lpddsdst,0); (*pUnlockMethod(dxversion))(lpddssrc, 0); return res; } lpsurface=ddsd_src.lpSurface; } ddsd_dst.lPitch >>= 2; dest = (DWORD *)ddsd_dst.lpSurface; dest += lpdestrect->top*ddsd_dst.lPitch; dest += lpdestrect->left; destpitch = ddsd_dst.lPitch - w; dest0 = dest; ddsd_src.lPitch >>= 2; src32 = (DWORD *)(lpsurface ? lpsurface:ddsd_src.lpSurface); src32 += lpsrcrect->top*ddsd_src.lPitch; src32 += lpsrcrect->left; srcpitch = ddsd_src.lPitch - w; // OutTraceDW("DEBUG: h=%d w=%d src=%x dst=%x spitch=%d dpitch=%d\n",h,w,src32,dest,srcpitch,destpitch); for(y = 0; y < h; y ++){ for(x = 0; x < w; x ++) *(dest ++) = *(src32 ++); dest += destpitch; src32 += srcpitch; } if(dxw.dwFlags3 & MARKBLIT) MarkRect32(dest0, w, h, destpitch); res=(*pUnlockMethod(dxversion))(lpddsdst,lpdestrect); if (res) OutTraceE("EmuBlt32_32: Unlock ERROR dds=%x res=%x(%s) at %d\n", lpddsdst, res, ExplainDDError(res), __LINE__); res=(*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect); if (res) OutTraceE("EmuBlt32_32: Unlock ERROR dds=%x res=%x(%s) at %d\n", lpddssrc, res, ExplainDDError(res), __LINE__); return res; } static HRESULT WINAPI EmuBlt_8_to_16(int dxversion, Blt_Type pBlt, LPDIRECTDRAWSURFACE lpddsdst, LPRECT lpdestrect, LPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, DWORD dwflags, LPVOID lpsurface) { HRESULT res; BYTE *src8; SHORT *dest, *dest0; DDSURFACEDESC2 ddsd_src, ddsd_dst; long srcpitch, destpitch; DWORD x, y, w, h; w = lpdestrect->right - lpdestrect->left; h = lpdestrect->bottom - lpdestrect->top; memset(&ddsd_dst,0,sizeof(DDSURFACEDESC2)); ddsd_dst.dwSize = Set_dwSize_From_Surface(); ddsd_dst.dwFlags = DDSD_LPSURFACE | DDSD_PITCH; if(res=(*pLockMethod(dxversion))(lpddsdst, 0, (LPDDSURFACEDESC)&ddsd_dst, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){ OutTraceE("EmuBlt8_16: Lock ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); return res; } memset(&ddsd_src,0,sizeof(DDSURFACEDESC2)); ddsd_src.dwSize = Set_dwSize_From_Surface(); ddsd_src.dwFlags = DDSD_LPSURFACE | DDSD_PITCH; if (lpsurface) { // already locked, just get info .... if(res=lpddssrc->GetSurfaceDesc((LPDDSURFACEDESC)&ddsd_src)) { OutTraceE("EmuBlt8_16: GetSurfaceDesc ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); (*pUnlockMethod(dxversion))(lpddsdst, lpdestrect); (*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect); return 0; } } else { if(res=(*pLockMethod(dxversion))(lpddssrc, 0, (LPDDSURFACEDESC)&ddsd_src, DDLOCK_SURFACEMEMORYPTR|DDLOCK_READONLY, 0)) { OutTraceE("EmuBlt8_16: Lock ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); (*pUnlockMethod(dxversion))(lpddsdst,0); (*pUnlockMethod(dxversion))(lpddssrc, 0); return 0; } lpsurface=ddsd_src.lpSurface; } ddsd_dst.lPitch >>= 1; dest = (SHORT *)ddsd_dst.lpSurface; dest += lpdestrect->top*ddsd_dst.lPitch; dest += lpdestrect->left; destpitch = ddsd_dst.lPitch - w; dest0 = dest; src8 = (BYTE *)lpsurface; src8 += lpsrcrect->top*ddsd_src.lPitch; src8 += lpsrcrect->left; srcpitch = ddsd_src.lPitch - w; // OutTraceDW("DEBUG: h=%d w=%d src=%x dst=%x spitch=%d dpitch=%d\n",h,w,src8,dest,srcpitch,destpitch); for(y = 0; y < h; y ++){ for(x = 0; x < w; x ++){ *(dest ++) = (SHORT)PaletteEntries[*(src8 ++)]; } dest += destpitch; src8 += srcpitch; } if(dxw.dwFlags3 & MARKBLIT) MarkRect16(dest0, w, h, destpitch); res=(*pUnlockMethod(dxversion))(lpddsdst, lpdestrect); if (res) OutTraceE("EmuBlt8_16: Unlock ERROR dds=%x res=%x(%s) at %d\n", lpddsdst, res, ExplainDDError(res), __LINE__); res=(*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect); if (res) OutTraceE("EmuBlt8_16: Unlock ERROR dds=%x res=%x(%s) at %d\n", lpddssrc, res, ExplainDDError(res), __LINE__); return res; } static HRESULT WINAPI BilinearBlt_8_to_16(int dxversion, Blt_Type pBlt, LPDIRECTDRAWSURFACE lpddsdst, LPRECT lpdestrect, LPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, DWORD dwflags, LPVOID lpsurface) { HRESULT res; BYTE *src8, *src0; SHORT *dest, *dest0; DDSURFACEDESC2 ddsd_src, ddsd_dst; long srcpitch, destpitch; int w, h; typedef DWORD (*Melt16_Type)(DWORD, DWORD); Melt16_Type Melt16; w = lpdestrect->right - lpdestrect->left; h = lpdestrect->bottom - lpdestrect->top; lpdestrect->left <<= 1; lpdestrect->top <<= 1; lpdestrect->right <<= 1; lpdestrect->bottom <<= 1; memset(&ddsd_dst,0,sizeof(DDSURFACEDESC2)); ddsd_dst.dwSize = Set_dwSize_From_Surface(); ddsd_dst.dwFlags = DDSD_LPSURFACE | DDSD_PITCH; if(res=(*pLockMethod(dxversion))(lpddsdst, 0, (LPDDSURFACEDESC)&ddsd_dst, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){ OutTraceE("BilBlt8_16: Lock ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); return res; } Melt16 = (ddsd_dst.ddpfPixelFormat.dwGBitMask == 0x3E0) ? Melt16_555 : Melt16_565; memset(&ddsd_src,0,sizeof(DDSURFACEDESC2)); ddsd_src.dwSize = Set_dwSize_From_Surface(); ddsd_src.dwFlags = DDSD_LPSURFACE | DDSD_PITCH; if (lpsurface) { // already locked, just get info .... if(res=lpddssrc->GetSurfaceDesc((LPDDSURFACEDESC)&ddsd_src)) { OutTraceE("BilBlt8_16: GetSurfaceDesc ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); (*pUnlockMethod(dxversion))(lpddsdst, lpdestrect); (*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect); return 0; } } else { if(res=(*pLockMethod(dxversion))(lpddssrc, 0, (LPDDSURFACEDESC)&ddsd_src, DDLOCK_SURFACEMEMORYPTR|DDLOCK_READONLY, 0)) { OutTraceE("BilBlt8_16: Lock ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); (*pUnlockMethod(dxversion))(lpddsdst,0); (*pUnlockMethod(dxversion))(lpddssrc, 0); return 0; } lpsurface=ddsd_src.lpSurface; } ddsd_dst.lPitch >>= 1; dest = (SHORT *)ddsd_dst.lpSurface; dest += lpdestrect->top*ddsd_dst.lPitch; dest += lpdestrect->left; destpitch = ddsd_dst.lPitch - (2 * w); dest0 = dest; src8 = (BYTE *)lpsurface; src8 += (lpsrcrect->top >> 1)*ddsd_src.lPitch; src8 += (lpsrcrect->left >> 1); srcpitch = ddsd_src.lPitch - w; src0 = src8; // OutTraceDW("DEBUG: h=%d w=%d src=%x dst=%x spitch=%d dpitch=%d\n",h,w,src8,dest,srcpitch,destpitch); #ifdef USEOPENMP #pragma omp parallel for schedule(static) #endif for(int y = 0; y < h; y ++){ register DWORD Q1, Q2, Q3, Q4, Q5; src8 = src0 + (y * ddsd_src.lPitch); dest = dest0 + ((y * ddsd_dst.lPitch) << 1); Q5 = Melt16(PaletteEntries[*(src8)], PaletteEntries[*(src8+ddsd_src.lPitch)]); for(int x = 0; x < w; x ++){ Q1 = PaletteEntries[*(src8)]; Q2 = Melt16(Q1, PaletteEntries[*(src8+1)]); Q3 = Q5; if(y == h-1){ Q3 = Q1; Q4 = Q2; } else{ Q5 = Melt16(PaletteEntries[*(src8+1)], PaletteEntries[*(src8+ddsd_src.lPitch+1)]); // to be used in next for cycle Q4 = Melt16(Q3, Q5); } *(dest) = (SHORT)Q1; *(dest+1) = (SHORT)Q2; *(dest+ddsd_dst.lPitch) = (SHORT)Q3; *(dest+ddsd_dst.lPitch+1) = (SHORT)Q4; src8++; dest+=2; } } if(dxw.dwFlags3 & MARKBLIT) MarkRect16(dest0, 2*w, 2*h, destpitch); res=(*pUnlockMethod(dxversion))(lpddsdst, lpdestrect); if (res) OutTraceE("BilBlt8_16: Unlock ERROR dds=%x res=%x(%s) at %d\n", lpddsdst, res, ExplainDDError(res), __LINE__); res=(*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect); if (res) OutTraceE("BilBlt8_16: Unlock ERROR dds=%x res=%x(%s) at %d\n", lpddssrc, res, ExplainDDError(res), __LINE__); return res; } static HRESULT WINAPI EmuBlt_16_to_16(int dxversion, Blt_Type pBlt, LPDIRECTDRAWSURFACE lpddsdst, LPRECT lpdestrect, LPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, DWORD dwflags, LPVOID lpsurface) { #if 0 return (*pBlt)(lpddsdst, lpdestrect, lpddssrc, lpsrcrect, dwflags, NULL); #endif HRESULT res; SHORT *src16; SHORT *dest, *dest0; DDSURFACEDESC2 ddsd_src, ddsd_dst; long srcpitch, destpitch; DWORD x, y, w, h; BOOL is555src, is555dst; w = lpdestrect->right - lpdestrect->left; h = lpdestrect->bottom - lpdestrect->top; memset(&ddsd_dst,0,sizeof(DDSURFACEDESC2)); ddsd_dst.dwSize = Set_dwSize_From_Surface(); ddsd_dst.dwFlags = DDSD_LPSURFACE | DDSD_PITCH; if(res=(*pLockMethod(dxversion))(lpddsdst, 0, (LPDDSURFACEDESC)&ddsd_dst, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){ OutTraceE("EmuBlt16_16: Lock ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); return res; } memset(&ddsd_src,0,sizeof(DDSURFACEDESC2)); ddsd_src.dwSize = Set_dwSize_From_Surface(); ddsd_src.dwFlags = DDSD_LPSURFACE | DDSD_PITCH; if (lpsurface) { // already locked, just get info .... if(res=lpddssrc->GetSurfaceDesc((LPDDSURFACEDESC)&ddsd_src)) { OutTraceE("EmuBlt16_16: GetSurfaceDesc ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); (*pUnlockMethod(dxversion))(lpddsdst, lpdestrect); (*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect); return 0; } } else { if(res=(*pLockMethod(dxversion))(lpddssrc, 0, (LPDDSURFACEDESC)&ddsd_src, DDLOCK_SURFACEMEMORYPTR|DDLOCK_READONLY, 0)) { OutTraceE("EmuBlt16_16: Lock ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); (*pUnlockMethod(dxversion))(lpddsdst,0); (*pUnlockMethod(dxversion))(lpddssrc, 0); return 0; } lpsurface=ddsd_src.lpSurface; } ddsd_dst.lPitch >>= 1; dest = (SHORT *)ddsd_dst.lpSurface; dest += lpdestrect->top*ddsd_dst.lPitch; dest += lpdestrect->left; destpitch = ddsd_dst.lPitch - w; dest0 = dest; is555dst = (ddsd_dst.ddpfPixelFormat.dwGBitMask == 0x3E0); ddsd_src.lPitch >>= 1; src16 = (SHORT *)lpsurface; src16 += lpsrcrect->top*ddsd_src.lPitch; src16 += lpsrcrect->left; srcpitch = ddsd_src.lPitch - w; is555src = (ddsd_dst.ddpfPixelFormat.dwGBitMask == 0x3E0); // OutTraceDW("DEBUG: h=%d w=%d src=%x dst=%x spitch=%d dpitch=%d\n",h,w,src8,dest,srcpitch,destpitch); if (is555dst == is555src){ for(y = 0; y < h; y ++){ // copy one whole pixel line at a time.... memcpy(dest, src16, w<<1); dest += (w + destpitch); src16 += (w + srcpitch); } } else { if(is555dst){ for(y = 0; y < h; y ++){ for(x = 0; x < w; x ++){ SHORT pi; pi = *(src16 ++); pi = (pi & 0x1F) | (pi & 0x7C0)>>1 | (pi & 0xF800)>>1; *(dest ++) = pi; } dest += destpitch; src16 += srcpitch; } } else { for(y = 0; y < h; y ++){ for(x = 0; x < w; x ++){ SHORT pi; pi = *(src16 ++); pi = (pi & 0x1F) | (pi & 0x3E0)<<1 | (pi & 0x7C00)<<1; *(dest ++) = pi; } dest += destpitch; src16 += srcpitch; } } } if(dxw.dwFlags3 & MARKBLIT) MarkRect16(dest0, w, h, destpitch); res=(*pUnlockMethod(dxversion))(lpddsdst, lpdestrect); if (res) OutTraceE("EmuBlt16_16: Unlock ERROR dds=%x res=%x(%s) at %d\n", lpddsdst, res, ExplainDDError(res), __LINE__); res=(*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect); if (res) OutTraceE("EmuBlt16_16: Unlock ERROR dds=%x res=%x(%s) at %d\n", lpddssrc, res, ExplainDDError(res), __LINE__); return res; } static HRESULT WINAPI BilinearBlt_16_to_16(int dxversion, Blt_Type pBlt, LPDIRECTDRAWSURFACE lpddsdst, LPRECT lpdestrect, LPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, DWORD dwflags, LPVOID lpsurface) { HRESULT res; WORD *src16, *src0; WORD *dest, *dest0; DDSURFACEDESC2 ddsd_src, ddsd_dst; long srcpitch, destpitch; int w, h; typedef DWORD (*Melt16_Type)(DWORD, DWORD); Melt16_Type Melt16; w = lpdestrect->right - lpdestrect->left; h = lpdestrect->bottom - lpdestrect->top; lpdestrect->left <<= 1; lpdestrect->top <<= 1; lpdestrect->right <<= 1; lpdestrect->bottom <<= 1; memset(&ddsd_dst,0,sizeof(DDSURFACEDESC2)); ddsd_dst.dwSize = Set_dwSize_From_Surface(); ddsd_dst.dwFlags = DDSD_LPSURFACE | DDSD_PITCH; if(res=(*pLockMethod(dxversion))(lpddsdst, 0, (LPDDSURFACEDESC)&ddsd_dst, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){ OutTraceE("BilBlt16_16: Lock ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); return res; } Melt16 = (ddsd_dst.ddpfPixelFormat.dwGBitMask == 0x3E0) ? Melt16_555 : Melt16_565; memset(&ddsd_src,0,sizeof(DDSURFACEDESC2)); ddsd_src.dwSize = Set_dwSize_From_Surface(); ddsd_src.dwFlags = DDSD_LPSURFACE | DDSD_PITCH; if (lpsurface) { // already locked, just get info .... if(res=lpddssrc->GetSurfaceDesc((LPDDSURFACEDESC)&ddsd_src)) { OutTraceE("BilBlt16_16: GetSurfaceDesc ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); (*pUnlockMethod(dxversion))(lpddsdst, lpdestrect); (*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect); return 0; } } else { if(res=(*pLockMethod(dxversion))(lpddssrc, 0, (LPDDSURFACEDESC)&ddsd_src, DDLOCK_SURFACEMEMORYPTR|DDLOCK_READONLY|DDLOCK_WAIT, 0)) { OutTraceE("BilBlt16_16: Lock ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); (*pUnlockMethod(dxversion))(lpddsdst,0); (*pUnlockMethod(dxversion))(lpddssrc, 0); return res; } lpsurface=ddsd_src.lpSurface; } ddsd_dst.lPitch >>= 1; dest = (WORD *)ddsd_dst.lpSurface; dest += lpdestrect->top*ddsd_dst.lPitch; dest += lpdestrect->left; destpitch = ddsd_dst.lPitch - (2 * w); dest0 = dest; ddsd_src.lPitch >>= 1; src16 = (WORD *)(lpsurface ? lpsurface:ddsd_src.lpSurface); src16 += (lpsrcrect->top >> 1)*ddsd_src.lPitch; src16 += (lpsrcrect->left >> 1); srcpitch = ddsd_src.lPitch - w; src0 = src16; // OutTraceDW("DEBUG: h=%d w=%d src=%x dst=%x spitch=%d dpitch=%d\n",h,w,src8,dest,srcpitch,destpitch); #ifdef USEOPENMP #pragma omp parallel for schedule(static) #endif for(int y = 0; y < h; y ++){ register DWORD Q1, Q2, Q3, Q4, Q5; src16 = src0 + (y * ddsd_src.lPitch); dest = dest0 + ((y * ddsd_dst.lPitch) << 1); Q5 = Melt16(*(src16), *(src16+ddsd_src.lPitch)); for(int x = 0; x < w; x ++){ Q1 = *(src16); Q2 = Melt16(Q1, *(src16+1)); Q3 = Q5; if(y == h-1){ Q3 = Q1; Q4 = Q2; } else{ Q5 = Melt16(*(src16+1), *(src16+ddsd_src.lPitch+1)); // to be used in next for cycle Q4 = Melt16(Q3, Q5); } *(dest) = (WORD)Q1; *(dest+1) = (WORD)Q2; *(dest+ddsd_dst.lPitch) = (WORD)Q3; *(dest+ddsd_dst.lPitch+1) = (WORD)Q4; src16++; dest+=2; } } if(dxw.dwFlags3 & MARKBLIT) MarkRect16((SHORT *)dest0, 2*w, 2*h, destpitch); res=(*pUnlockMethod(dxversion))(lpddsdst, lpdestrect); if (res) OutTraceE("BilBlt16_16: Unlock ERROR dds=%x res=%x(%s) at %d\n", lpddsdst, res, ExplainDDError(res), __LINE__); res=(*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect); if (res) OutTraceE("BilBlt16_16: Unlock ERROR dds=%x res=%x(%s) at %d\n", lpddssrc, res, ExplainDDError(res), __LINE__); return res; } static HRESULT WINAPI EmuBlt_24_to_16(int dxversion, Blt_Type pBlt, LPDIRECTDRAWSURFACE lpddsdst, LPRECT lpdestrect, LPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, DWORD dwflags, LPVOID lpsurface) { HRESULT res; BYTE *src24; SHORT *dest, *dest0; DDSURFACEDESC2 ddsd_src, ddsd_dst; long srcpitch, destpitch; DWORD x, y, w, h; w = lpdestrect->right - lpdestrect->left; h = lpdestrect->bottom - lpdestrect->top; memset(&ddsd_dst,0,sizeof(DDSURFACEDESC2)); ddsd_dst.dwSize = Set_dwSize_From_Surface(); ddsd_dst.dwFlags = DDSD_LPSURFACE | DDSD_PITCH; if(res=(*pLockMethod(dxversion))(lpddsdst, 0, (LPDDSURFACEDESC)&ddsd_dst, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){ OutTraceE("EmuBlt24_16: Lock ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); return res; } memset(&ddsd_src,0,sizeof(DDSURFACEDESC2)); ddsd_src.dwSize = Set_dwSize_From_Surface(); ddsd_src.dwFlags = DDSD_LPSURFACE | DDSD_PITCH; if (lpsurface) { // already locked, just get info .... if(res=lpddssrc->GetSurfaceDesc((LPDDSURFACEDESC)&ddsd_src)) { OutTraceE("EmuBlt24_16: GetSurfaceDesc ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); (*pUnlockMethod(dxversion))(lpddsdst, lpdestrect); (*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect); return 0; } } else { if(res=(*pLockMethod(dxversion))(lpddssrc, 0, (LPDDSURFACEDESC)&ddsd_src, DDLOCK_SURFACEMEMORYPTR|DDLOCK_READONLY, 0)) { OutTraceE("EmuBlt24_16: Lock ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); (*pUnlockMethod(dxversion))(lpddsdst,0); (*pUnlockMethod(dxversion))(lpddssrc, 0); return 0; } lpsurface=ddsd_src.lpSurface; } ddsd_dst.lPitch >>= 1; dest = (SHORT *)ddsd_dst.lpSurface; dest += lpdestrect->top*ddsd_dst.lPitch; dest += lpdestrect->left; destpitch = ddsd_dst.lPitch - w; dest0 = dest; src24 = (BYTE *)lpsurface; src24 += lpsrcrect->top*ddsd_src.lPitch; src24 += lpsrcrect->left; srcpitch = ddsd_src.lPitch - 3*w; for(y = 0; y < h; y ++){ for(x = 0; x < w; x ++){ *(dest ++) = (*(src24+2) & 0xF8)<<8 | (*(src24+1) & 0xFC)<<3 | (*(src24+0) & 0xF8)>>3; src24 += 3; // 3 bytes = 24 bits } dest += destpitch; src24 += srcpitch; } if(dxw.dwFlags3 & MARKBLIT) MarkRect16(dest0, w, h, destpitch); res=(*pUnlockMethod(dxversion))(lpddsdst, lpdestrect); if (res) OutTraceE("EmuBlt24_16: Unlock ERROR dds=%x res=%x(%s) at %d\n", lpddsdst, res, ExplainDDError(res), __LINE__); res=(*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect); if (res) OutTraceE("EmuBlt24_16: Unlock ERROR dds=%x res=%x(%s) at %d\n", lpddssrc, res, ExplainDDError(res), __LINE__); return res; } static HRESULT WINAPI EmuBlt_32_to_16(int dxversion, Blt_Type pBlt, LPDIRECTDRAWSURFACE lpddsdst, LPRECT lpdestrect, LPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, DWORD dwflags, LPVOID lpsurface) { HRESULT res; BYTE *src32; SHORT *dest, *dest0; DDSURFACEDESC2 ddsd_src, ddsd_dst; long srcpitch, destpitch; DWORD x, y, w, h; w = lpdestrect->right - lpdestrect->left; h = lpdestrect->bottom - lpdestrect->top; memset(&ddsd_dst,0,sizeof(DDSURFACEDESC2)); ddsd_dst.dwSize = Set_dwSize_From_Surface(); ddsd_dst.dwFlags = DDSD_LPSURFACE | DDSD_PITCH; if(res=(*pLockMethod(dxversion))(lpddsdst, 0, (LPDDSURFACEDESC)&ddsd_dst, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){ OutTraceE("EmuBlt32_16: Lock ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); return res; } memset(&ddsd_src,0,sizeof(DDSURFACEDESC2)); ddsd_src.dwSize = Set_dwSize_From_Surface(); ddsd_src.dwFlags = DDSD_LPSURFACE | DDSD_PITCH; if (lpsurface) { // already locked, just get info .... if(res=lpddssrc->GetSurfaceDesc((LPDDSURFACEDESC)&ddsd_src)) { OutTraceE("EmuBlt32_16: GetSurfaceDesc ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); (*pUnlockMethod(dxversion))(lpddsdst, lpdestrect); (*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect); return 0; } } else { if(res=(*pLockMethod(dxversion))(lpddssrc, 0, (LPDDSURFACEDESC)&ddsd_src, DDLOCK_SURFACEMEMORYPTR|DDLOCK_READONLY, 0)) { OutTraceE("EmuBlt32_16: Lock ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); (*pUnlockMethod(dxversion))(lpddsdst,0); (*pUnlockMethod(dxversion))(lpddssrc, 0); return 0; } lpsurface=ddsd_src.lpSurface; } ddsd_dst.lPitch >>= 1; dest = (SHORT *)ddsd_dst.lpSurface; dest += lpdestrect->top*ddsd_dst.lPitch; dest += lpdestrect->left; destpitch = ddsd_dst.lPitch - w; dest0 = dest; src32 = (BYTE *)lpsurface; src32 += lpsrcrect->top*ddsd_src.lPitch; src32 += lpsrcrect->left; srcpitch = ddsd_src.lPitch - 4*w; for(y = 0; y < h; y ++){ for(x = 0; x < w; x ++){ *(dest ++) = (*(src32+2) & 0xF8)<<8 | (*(src32+1) & 0xFC)<<3 | (*(src32+0) & 0xF8)>>3; src32 += 4; // 4 bytes = 32 bits } dest += destpitch; src32 += srcpitch; } if(dxw.dwFlags3 & MARKBLIT) MarkRect16(dest0, w, h, destpitch); res=(*pUnlockMethod(dxversion))(lpddsdst, lpdestrect); if (res) OutTraceE("EmuBlt32_16: Unlock ERROR dds=%x res=%x(%s) at %d\n", lpddsdst, res, ExplainDDError(res), __LINE__); res=(*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect); if (res) OutTraceE("EmuBlt32_16: Unlock ERROR dds=%x res=%x(%s) at %d\n", lpddssrc, res, ExplainDDError(res), __LINE__); return res; } static HRESULT WINAPI BilinearBlt_32_to_32(int dxversion, Blt_Type pBlt, LPDIRECTDRAWSURFACE lpddsdst, LPRECT lpdestrect, LPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, DWORD dwflags, LPVOID lpsurface) { HRESULT res; DWORD *src32; DWORD *dest, *dest0; DDSURFACEDESC2 ddsd_src, ddsd_dst; long srcpitch, destpitch; DWORD x, y, w, h; w = lpdestrect->right - lpdestrect->left; h = lpdestrect->bottom - lpdestrect->top; lpdestrect->left <<= 1; lpdestrect->top <<= 1; lpdestrect->right <<= 1; lpdestrect->bottom <<= 1; memset(&ddsd_dst,0,sizeof(DDSURFACEDESC2)); ddsd_dst.dwSize = Set_dwSize_From_Surface(); ddsd_dst.dwFlags = DDSD_LPSURFACE | DDSD_PITCH; if(res=(*pLockMethod(dxversion))(lpddsdst, 0, (LPDDSURFACEDESC)&ddsd_dst, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){ OutTraceE("BilBlt32_32: Lock ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); return res; } memset(&ddsd_src,0,sizeof(DDSURFACEDESC2)); ddsd_src.dwSize = Set_dwSize_From_Surface(); ddsd_src.dwFlags = DDSD_LPSURFACE | DDSD_PITCH; if (lpsurface) { // already locked, just get info .... if(res=lpddssrc->GetSurfaceDesc((LPDDSURFACEDESC)&ddsd_src)) { OutTraceE("BilBlt32_32: GetSurfaceDesc ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); (*pUnlockMethod(dxversion))(lpddsdst, lpdestrect); (*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect); return 0; } } else { if(res=(*pLockMethod(dxversion))(lpddssrc, 0, (LPDDSURFACEDESC)&ddsd_src, DDLOCK_SURFACEMEMORYPTR|DDLOCK_READONLY|DDLOCK_WAIT, 0)) { OutTraceE("BilBlt32_32: Lock ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); (*pUnlockMethod(dxversion))(lpddsdst,0); (*pUnlockMethod(dxversion))(lpddssrc, 0); return res; } lpsurface=ddsd_src.lpSurface; } ddsd_dst.lPitch >>= 2; dest = (DWORD *)ddsd_dst.lpSurface; dest += lpdestrect->top*ddsd_dst.lPitch; dest += lpdestrect->left; destpitch = ddsd_dst.lPitch - (2 * w); dest0 = dest; ddsd_src.lPitch >>= 2; src32 = (DWORD *)(lpsurface ? lpsurface:ddsd_src.lpSurface); src32 += lpsrcrect->top*ddsd_src.lPitch; src32 += lpsrcrect->left; srcpitch = ddsd_src.lPitch - w; //OutTraceDW("DEBUG: h=%d w=%d src=%x dst=%x spitch=%d dpitch=%d\n",h,w,src32,dest,srcpitch,destpitch); for(y = 0; y < h-1; y ++){ register DWORD Q1, Q2, Q3, Q4, Q5; Q5 = Melt32(*(src32), *(src32+ddsd_src.lPitch)); for(x = 0; x < w; x ++){ Q1 = *(src32); Q2 = Melt32(Q1, *(src32+1)); Q3 = Q5; Q5 = Melt32(*(src32+1), *(src32+ddsd_src.lPitch+1)); // to be used in next for cycle Q4 = Melt32(Q3, Q5); *(dest) = Q1; *(dest+1) = Q2; *(dest+ddsd_dst.lPitch) = Q3; *(dest+ddsd_dst.lPitch+1) = Q4; src32++; dest+=2; } src32 += srcpitch; dest += (ddsd_dst.lPitch + destpitch); } for(x = 0; x < w; x ++){ // last line (there's no next line to melt...) register DWORD Q1, Q2; Q1 = *(src32); Q2 = Melt32(Q1, *(src32+1)); *(dest) = Q1; *(dest+1) = Q2; *(dest+ddsd_dst.lPitch) = Q1; *(dest+ddsd_dst.lPitch+1) = Q2; src32++; dest+=2; } if(dxw.dwFlags3 & MARKBLIT) MarkRect32(dest0, 2*w, 2*h, destpitch); res=(*pUnlockMethod(dxversion))(lpddsdst, lpdestrect); if (res) OutTraceE("BilBlt32_32: Unlock ERROR dds=%x res=%x(%s) at %d\n", lpddsdst, res, ExplainDDError(res), __LINE__); res=(*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect); if (res) OutTraceE("BilBlt32_32: Unlock ERROR dds=%x res=%x(%s) at %d\n", lpddssrc, res, ExplainDDError(res), __LINE__); return res; } static HRESULT WINAPI EmuBlt_Null(int dxversion, Blt_Type pBlt, LPDIRECTDRAWSURFACE lpddsdst, LPRECT lpdestrect, LPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, DWORD dwflags, LPVOID lpsurface) { char *sMsg="EmuBlt: undefined color depth\n"; OutTraceE(sMsg); if(IsAssertEnabled) MessageBox(0, sMsg, "EmuBlt", MB_OK | MB_ICONEXCLAMATION); return -1; } //--------------------------------------------------------------------------------------------// // exported methods //--------------------------------------------------------------------------------------------// void SetBltTransformations(int dxversion) { pPrimaryBlt = PrimaryBlt; if(dxw.dwFlags5 & AEROBOOST) pPrimaryBlt = PrimaryStretchBlt; if(dxw.dwFlags5 & BILINEARFILTER) pPrimaryBlt = PrimaryBilinearBlt; if(dxw.dwFlags5 & DOFASTBLT) pPrimaryBlt = PrimaryFastBlt; // debug opt if(dxw.dwFlags5 & CENTERTOWIN) pPrimaryBlt = PrimaryFastBlt; if(dxw.dwFlags5 & NOBLT) pPrimaryBlt = PrimaryNoBlt; // debug opt extern HRESULT WINAPI ColorConversionDDRAW(int, LPDIRECTDRAWSURFACE, RECT, LPDIRECTDRAWSURFACE *); extern HRESULT WINAPI ColorConversionGDI(int, LPDIRECTDRAWSURFACE, RECT, LPDIRECTDRAWSURFACE *); extern HRESULT WINAPI ColorConversionEmulated(int, LPDIRECTDRAWSURFACE, RECT, LPDIRECTDRAWSURFACE *); pColorConversion = ColorConversionDDRAW; // default for no emulation mode if(dxw.dwFlags1 & EMULATESURFACE) { pColorConversion = ColorConversionEmulated; // default for emulation mode if(dxw.dwFlags5 & HYBRIDMODE) pColorConversion = ColorConversionDDRAW; if(dxw.dwFlags5 & GDICOLORCONV) pColorConversion = ColorConversionGDI; } char *s = "???"; if(pColorConversion == ColorConversionDDRAW) s="DDRAW"; if(pColorConversion == ColorConversionGDI) s="GDI"; if(pColorConversion == ColorConversionEmulated) s="EMULATED"; OutTraceDW("SetBltTransformations: color conversion %s BPP %d->%d\n", s, dxw.VirtualPixelFormat.dwRGBBitCount, dxw.ActualPixelFormat.dwRGBBitCount); if(pColorConversion != ColorConversionEmulated) return; /* default (bad) setting */ pEmuBlt=EmuBlt_Null; switch (dxw.ActualPixelFormat.dwRGBBitCount){ case 32: switch(dxw.VirtualPixelFormat.dwRGBBitCount){ case 8: pEmuBlt=EmuBlt_8_to_32; if(dxw.dwFlags4 & BILINEAR2XFILTER) pEmuBlt=BilinearBlt_8_to_32; OutTraceDW("set color transformation 8<->32\n"); break; case 16: pEmuBlt=EmuBlt_16_to_32; if(dxw.dwFlags4 & BILINEAR2XFILTER) pEmuBlt=BilinearBlt_16_to_32; if(dxw.dwFlags5 & DEINTERLACE) pEmuBlt=Deinterlace_16_to_32; OutTraceDW("set color transformation 16<->32\n"); break; case 24: pEmuBlt=EmuBlt_24_to_32; OutTraceDW("set color transformation 24->32\n"); break; case 32: pEmuBlt=EmuBlt_32_to_32; if(dxw.dwFlags4 & BILINEAR2XFILTER) pEmuBlt=BilinearBlt_32_to_32; OutTraceDW("set color transformation 32->32\n"); break; default: OutTraceDW("unsupported color transformation %d->32\n", dxw.VirtualPixelFormat.dwRGBBitCount); break; } break; case 16: switch(dxw.VirtualPixelFormat.dwRGBBitCount){ case 8: pEmuBlt=EmuBlt_8_to_16; if(dxw.dwFlags4 & BILINEAR2XFILTER) pEmuBlt=BilinearBlt_8_to_16; OutTraceDW("set color transformation 8<->16\n"); break; case 16: pEmuBlt=EmuBlt_16_to_16; if(dxw.dwFlags4 & BILINEAR2XFILTER) pEmuBlt=BilinearBlt_16_to_16; OutTraceDW("set color transformation 16<->16\n"); break; case 24: pEmuBlt=EmuBlt_24_to_16; OutTraceDW("set color transformation 24<->16\n"); break; case 32: pEmuBlt=EmuBlt_32_to_16; break; default: OutTraceDW("unsupported color transformation %d->16\n", dxw.VirtualPixelFormat.dwRGBBitCount); break; } break; default: OutTraceDW("unsupported color transformation %d->%d\n", dxw.VirtualPixelFormat.dwRGBBitCount, dxw.ActualPixelFormat.dwRGBBitCount); break; } } ================================================ FILE: dll/dxhelper.cpp ================================================ #define _CRT_SECURE_NO_DEPRECATE 1 #define DIRECTINPUT_VERSION 0x0800 #include #include #include #include #include #include "dxwnd.h" // debug functions to make the log more readable void DumpRect(char *what, LPRECT r, int line) { OutTrace("DEBUG: RECT %s at %d:", what, line); if (r) OutTrace("(%d,%d)-(%d,%d)\n",r->left,r->top,r->right,r->bottom); else OutTrace("(NULL)\n"); } char *ExplainFlags(DWORD c) { static char eb[256]; unsigned int l; strcpy(eb,"DDSD_"); if (c & DDSD_CAPS) strcat(eb, "CAPS+"); if (c & DDSD_HEIGHT) strcat(eb, "HEIGHT+"); if (c & DDSD_WIDTH) strcat(eb, "WIDTH+"); if (c & DDSD_PITCH) strcat(eb, "PITCH+"); if (c & DDSD_BACKBUFFERCOUNT) strcat(eb, "BACKBUFFERCOUNT+"); if (c & DDSD_ZBUFFERBITDEPTH) strcat(eb, "ZBUFFERBITDEPTH+"); if (c & DDSD_ALPHABITDEPTH) strcat(eb, "ALPHABITDEPTH+"); if (c & DDSD_LPSURFACE) strcat(eb, "LPSURFACE+"); if (c & DDSD_PIXELFORMAT) strcat(eb, "PIXELFORMAT+"); if (c & DDSD_CKDESTOVERLAY) strcat(eb, "CKDESTOVERLAY+"); if (c & DDSD_CKDESTBLT) strcat(eb, "CKDESTBLT+"); if (c & DDSD_CKSRCOVERLAY) strcat(eb, "CKSRCOVERLAY+"); if (c & DDSD_CKSRCBLT) strcat(eb, "CKSRCBLT+"); if (c & DDSD_MIPMAPCOUNT) strcat(eb, "MIPMAPCOUNT+"); if (c & DDSD_REFRESHRATE) strcat(eb, "REFRESHRATE+"); if (c & DDSD_LINEARSIZE) strcat(eb, "LINEARSIZE+"); if (c & DDSD_TEXTURESTAGE) strcat(eb, "TEXTURESTAGE+"); if (c & DDSD_SRCVBHANDLE) strcat(eb, "SRCVBHANDLE+"); if (c & DDSD_DEPTH) strcat(eb, "DEPTH+"); l=strlen(eb); if (l>strlen("DDSD_")) eb[l-1]=0; // delete last '+' if any else eb[0]=0; return(eb); } char *ExplainDDSCaps(DWORD c) { static char eb[256]; unsigned int l; strcpy(eb,"DDSCAPS_"); if (c & DDSCAPS_RESERVED1) strcat(eb, "RESERVED1+"); if (c & DDSCAPS_ALPHA) strcat(eb, "ALPHA+"); if (c & DDSCAPS_BACKBUFFER) strcat(eb, "BACKBUFFER+"); if (c & DDSCAPS_COMPLEX) strcat(eb, "COMPLEX+"); if (c & DDSCAPS_FLIP) strcat(eb, "FLIP+"); if (c & DDSCAPS_FRONTBUFFER) strcat(eb, "FRONTBUFFER+"); if (c & DDSCAPS_OFFSCREENPLAIN) strcat(eb, "OFFSCREENPLAIN+"); if (c & DDSCAPS_OVERLAY) strcat(eb, "OVERLAY+"); if (c & DDSCAPS_PALETTE) strcat(eb, "PALETTE+"); if (c & DDSCAPS_PRIMARYSURFACE) strcat(eb, "PRIMARYSURFACE+"); if (c & DDSCAPS_SYSTEMMEMORY) strcat(eb, "SYSTEMMEMORY+"); if (c & DDSCAPS_TEXTURE) strcat(eb, "TEXTURE+"); if (c & DDSCAPS_3DDEVICE) strcat(eb, "3DDEVICE+"); if (c & DDSCAPS_VIDEOMEMORY) strcat(eb, "VIDEOMEMORY+"); if (c & DDSCAPS_VISIBLE) strcat(eb, "VISIBLE+"); if (c & DDSCAPS_WRITEONLY) strcat(eb, "WRITEONLY+"); if (c & DDSCAPS_ZBUFFER) strcat(eb, "ZBUFFER+"); if (c & DDSCAPS_OWNDC) strcat(eb, "OWNDC+"); if (c & DDSCAPS_LIVEVIDEO) strcat(eb, "LIVEVIDEO+"); if (c & DDSCAPS_HWCODEC) strcat(eb, "HWCODEC+"); if (c & DDSCAPS_MODEX) strcat(eb, "MODEX+"); if (c & DDSCAPS_MIPMAP) strcat(eb, "MIPMAP+"); if (c & DDSCAPS_RESERVED2) strcat(eb, "RESERVED2+"); if (c & DDSCAPS_ALLOCONLOAD) strcat(eb, "ALLOCONLOAD+"); if (c & DDSCAPS_VIDEOPORT) strcat(eb, "VIDEOPORT+"); if (c & DDSCAPS_LOCALVIDMEM) strcat(eb, "LOCALVIDMEM+"); if (c & DDSCAPS_NONLOCALVIDMEM) strcat(eb, "NONLOCALVIDMEM+"); if (c & DDSCAPS_STANDARDVGAMODE) strcat(eb, "STANDARDVGAMODE+"); if (c & DDSCAPS_OPTIMIZED) strcat(eb, "OPTIMIZED+"); l=strlen(eb); if (l>strlen("DDSCAPS_")) eb[l-1]=0; // delete last '+' if any else eb[0]=0; return(eb); } char *ExplainDDSCaps2(DWORD c) { static char eb[256]; unsigned int l; strcpy(eb,"DDSCAPS2_"); if (c & DDSCAPS2_RESERVED4) strcat(eb, "RESERVED4+"); if (c & DDSCAPS2_HINTDYNAMIC) strcat(eb, "HINTDYNAMIC+"); if (c & DDSCAPS2_HINTSTATIC) strcat(eb, "HINTSTATIC+"); if (c & DDSCAPS2_TEXTUREMANAGE) strcat(eb, "TEXTUREMANAGE+"); if (c & DDSCAPS2_RESERVED1) strcat(eb, "RESERVED1+"); if (c & DDSCAPS2_RESERVED2) strcat(eb, "RESERVED2+"); if (c & DDSCAPS2_OPAQUE) strcat(eb, "OPAQUE+"); if (c & DDSCAPS2_HINTANTIALIASING) strcat(eb, "HINTANTIALIASING+"); if (c & DDSCAPS2_CUBEMAP) strcat(eb, "CUBEMAP+"); if (c & DDSCAPS2_CUBEMAP_POSITIVEX) strcat(eb, "CUBEMAP_POSITIVEX+"); if (c & DDSCAPS2_CUBEMAP_NEGATIVEX) strcat(eb, "CUBEMAP_NEGATIVEX+"); if (c & DDSCAPS2_CUBEMAP_POSITIVEY) strcat(eb, "CUBEMAP_POSITIVEY+"); if (c & DDSCAPS2_CUBEMAP_NEGATIVEY) strcat(eb, "CUBEMAP_NEGATIVEY+"); if (c & DDSCAPS2_CUBEMAP_POSITIVEZ) strcat(eb, "CUBEMAP_POSITIVEZ+"); if (c & DDSCAPS2_CUBEMAP_NEGATIVEZ) strcat(eb, "CUBEMAP_NEGATIVEZ+"); if (c & DDSCAPS2_MIPMAPSUBLEVEL) strcat(eb, "MIPMAPSUBLEVEL+"); if (c & DDSCAPS2_D3DTEXTUREMANAGE) strcat(eb, "D3DTEXTUREMANAGE+"); if (c & DDSCAPS2_DONOTPERSIST) strcat(eb, "DONOTPERSIST+"); if (c & DDSCAPS2_STEREOSURFACELEFT) strcat(eb, "STEREOSURFACELEFT+"); if (c & DDSCAPS2_VOLUME) strcat(eb, "VOLUME+"); if (c & DDSCAPS2_NOTUSERLOCKABLE) strcat(eb, "NOTUSERLOCKABLE+"); if (c & DDSCAPS2_POINTS) strcat(eb, "POINTS+"); if (c & DDSCAPS2_RTPATCHES) strcat(eb, "RTPATCHES+"); if (c & DDSCAPS2_NPATCHES) strcat(eb, "NPATCHES+"); if (c & DDSCAPS2_RESERVED3) strcat(eb, "RESERVED3+"); if (c & DDSCAPS2_DISCARDBACKBUFFER) strcat(eb, "DISCARDBACKBUFFER+"); if (c & DDSCAPS2_ENABLEALPHACHANNEL) strcat(eb, "ENABLEALPHACHANNEL+"); if (c & DDSCAPS2_EXTENDEDFORMATPRIMARY) strcat(eb, "EXTENDEDFORMATPRIMARY+"); if (c & DDSCAPS2_ADDITIONALPRIMARY) strcat(eb, "ADDITIONALPRIMARY+"); l=strlen(eb); if (l>strlen("DDSCAPS2_")) eb[l-1]=0; // delete last '+' if any else eb[0]=0; return(eb); } char *ExplainDDSCaps3(DWORD c) { static char eb[256]; unsigned int l; strcpy(eb,"DDSCAPS3_"); if (c & DDSCAPS3_MULTISAMPLE_MASK) strcat(eb, "DDSCAPS3_MULTISAMPLE_MASK+"); if (c & DDSCAPS3_RESERVED1) strcat(eb, "DDSCAPS3_RESERVED1+"); if (c & DDSCAPS3_RESERVED2) strcat(eb, "DDSCAPS3_RESERVED2+"); if (c & DDSCAPS3_LIGHTWEIGHTMIPMAP) strcat(eb, "DDSCAPS3_LIGHTWEIGHTMIPMAP+"); if (c & DDSCAPS3_AUTOGENMIPMAP) strcat(eb, "DDSCAPS3_AUTOGENMIPMAP+"); if (c & DDSCAPS3_DMAP) strcat(eb, "DDSCAPS3_DMAP+"); if (c & DDSCAPS3_MULTISAMPLE_QUALITY_MASK) { DWORD dwQuality; char sQuality[32]; dwQuality = (c & DDSCAPS3_MULTISAMPLE_QUALITY_MASK) >> DDSCAPS3_MULTISAMPLE_QUALITY_SHIFT; sprintf(sQuality, "QUALITY(%d)+", dwQuality); strcat(eb, sQuality); } l=strlen(eb); if (l>strlen("DDSCAPS3_")) eb[l-1]=0; // delete last '+' if any else eb[0]=0; return(eb); } char *ExplainDDSCaps4(DWORD c) { static char eb[256]; unsigned int l; strcpy(eb,"DDSCAPS4_"); // insert here .... // if (c & DDSCAPS4_XXX) strcat(eb, "XXX+"); l=strlen(eb); if (l>strlen("DDSCAPS4_")) eb[l-1]=0; // delete last '+' if any else eb[0]=0; return(eb); } char *ExplainDDDCaps(DWORD c) { static char eb[512]; unsigned int l; strcpy(eb,"DDCAPS_"); if (c & DDCAPS_3D) strcat(eb, "3D+"); if (c & DDCAPS_ALIGNBOUNDARYDEST) strcat(eb, "ALIGNBOUNDARYDEST+"); if (c & DDCAPS_ALIGNSIZEDEST) strcat(eb, "ALIGNSIZEDEST+"); if (c & DDCAPS_ALIGNBOUNDARYSRC) strcat(eb, "ALIGNBOUNDARYSRC+"); if (c & DDCAPS_ALIGNSIZESRC) strcat(eb, "ALIGNSIZESRC+"); if (c & DDCAPS_ALIGNSTRIDE) strcat(eb, "ALIGNSTRIDE+"); if (c & DDCAPS_BLT) strcat(eb, "BLT+"); if (c & DDCAPS_BLTQUEUE) strcat(eb, "BLTQUEUE+"); if (c & DDCAPS_BLTFOURCC) strcat(eb, "BLTFOURCC+"); if (c & DDCAPS_BLTSTRETCH) strcat(eb, "BLTSTRETCH+"); if (c & DDCAPS_GDI) strcat(eb, "GDI+"); if (c & DDCAPS_OVERLAY) strcat(eb, "OVERLAY+"); if (c & DDCAPS_OVERLAYCANTCLIP) strcat(eb, "OVERLAYCANTCLIP+"); if (c & DDCAPS_OVERLAYFOURCC) strcat(eb, "OVERLAYFOURCC+"); if (c & DDCAPS_OVERLAYSTRETCH) strcat(eb, "OVERLAYSTRETCH+"); if (c & DDCAPS_PALETTE) strcat(eb, "PALETTE+"); if (c & DDCAPS_PALETTEVSYNC) strcat(eb, "PALETTEVSYNC+"); if (c & DDCAPS_READSCANLINE) strcat(eb, "READSCANLINE+"); if (c & DDCAPS_RESERVED1) strcat(eb, "RESERVED1+"); if (c & DDCAPS_VBI) strcat(eb, "VBI+"); if (c & DDCAPS_ZBLTS) strcat(eb, "ZBLTS+"); if (c & DDCAPS_ZOVERLAYS) strcat(eb, "ZOVERLAYS+"); if (c & DDCAPS_COLORKEY) strcat(eb, "COLORKEY+"); if (c & DDCAPS_ALPHA) strcat(eb, "ALPHA+"); if (c & DDCAPS_COLORKEYHWASSIST) strcat(eb, "COLORKEYHWASSIST+"); if (c & DDCAPS_NOHARDWARE) strcat(eb, "NOHARDWARE+"); if (c & DDCAPS_BLTCOLORFILL) strcat(eb, "BLTCOLORFILL+"); if (c & DDCAPS_BANKSWITCHED) strcat(eb, "BANKSWITCHED+"); if (c & DDCAPS_BLTDEPTHFILL) strcat(eb, "BLTDEPTHFILL+"); if (c & DDCAPS_CANCLIP) strcat(eb, "CANCLIP+"); if (c & DDCAPS_CANCLIPSTRETCHED) strcat(eb, "CANCLIPSTRETCHED+"); if (c & DDCAPS_CANBLTSYSMEM) strcat(eb, "CANBLTSYSMEM+"); l=strlen(eb); if (l>strlen("DDCAPS_")) eb[l-1]=0; // delete last '+' if any else eb[0]=0; return(eb); } char *ExplainDDDCaps2(DWORD c) { static char eb[512]; unsigned int l; strcpy(eb,"DDCAPS2_"); if (c & DDCAPS2_CERTIFIED) strcat(eb, "CERTIFIED+"); if (c & DDCAPS2_NO2DDURING3DSCENE) strcat(eb, "NO2DDURING3DSCENE+"); if (c & DDCAPS2_VIDEOPORT) strcat(eb, "VIDEOPORT+"); if (c & DDCAPS2_AUTOFLIPOVERLAY) strcat(eb, "AUTOFLIPOVERLAY+"); if (c & DDCAPS2_CANBOBINTERLEAVED) strcat(eb, "CANBOBINTERLEAVED+"); if (c & DDCAPS2_CANBOBNONINTERLEAVED) strcat(eb, "CANBOBNONINTERLEAVED+"); if (c & DDCAPS2_COLORCONTROLOVERLAY) strcat(eb, "COLORCONTROLOVERLAY+"); if (c & DDCAPS2_COLORCONTROLPRIMARY) strcat(eb, "COLORCONTROLPRIMARY+"); if (c & DDCAPS2_CANDROPZ16BIT) strcat(eb, "CANDROPZ16BIT+"); if (c & DDCAPS2_NONLOCALVIDMEM) strcat(eb, "NONLOCALVIDMEM+"); if (c & DDCAPS2_NONLOCALVIDMEMCAPS) strcat(eb, "NONLOCALVIDMEMCAPS+"); if (c & DDCAPS2_NOPAGELOCKREQUIRED) strcat(eb, "NOPAGELOCKREQUIRED+"); if (c & DDCAPS2_WIDESURFACES) strcat(eb, "WIDESURFACES+"); if (c & DDCAPS2_CANFLIPODDEVEN) strcat(eb, "CANFLIPODDEVEN+"); if (c & DDCAPS2_CANBOBHARDWARE) strcat(eb, "CANBOBHARDWARE+"); if (c & DDCAPS2_COPYFOURCC) strcat(eb, "COPYFOURCC+"); if (c & DDCAPS2_PRIMARYGAMMA) strcat(eb, "PRIMARYGAMMA+"); if (c & DDCAPS2_CANRENDERWINDOWED) strcat(eb, "CANRENDERWINDOWED+"); if (c & DDCAPS2_CANCALIBRATEGAMMA) strcat(eb, "CANCALIBRATEGAMMA+"); if (c & DDCAPS2_FLIPINTERVAL) strcat(eb, "FLIPINTERVAL+"); if (c & DDCAPS2_FLIPNOVSYNC) strcat(eb, "FLIPNOVSYNC+"); if (c & DDCAPS2_CANMANAGETEXTURE) strcat(eb, "CANMANAGETEXTURE+"); if (c & DDCAPS2_TEXMANINNONLOCALVIDMEM) strcat(eb, "TEXMANINNONLOCALVIDMEM+"); if (c & DDCAPS2_STEREO) strcat(eb, "STEREO+"); if (c & DDCAPS2_SYSTONONLOCAL_AS_SYSTOLOCAL) strcat(eb, "SYSTONONLOCAL_AS_SYSTOLOCAL+"); if (c & DDCAPS2_RESERVED1) strcat(eb, "RESERVED1/PUREHAL+"); if (c & DDCAPS2_CANMANAGERESOURCE) strcat(eb, "CANMANAGERESOURCE+"); if (c & DDCAPS2_DYNAMICTEXTURES) strcat(eb, "DYNAMICTEXTURES+"); if (c & DDCAPS2_CANAUTOGENMIPMAP) strcat(eb, "CANAUTOGENMIPMAP+"); l=strlen(eb); if (l>strlen("DDCAPS2_")) eb[l-1]=0; // delete last '+' if any else eb[0]=0; return(eb); } char *ExplainDDFXALPHACaps(DWORD c) { static char eb[512]; unsigned int l; strcpy(eb,"DDFXALPHACAPS_"); if (c & DDFXALPHACAPS_BLTALPHAEDGEBLEND) strcat(eb, "BLTALPHAEDGEBLEND+"); if (c & DDFXALPHACAPS_BLTALPHAPIXELS) strcat(eb, "BLTALPHAPIXELS+"); if (c & DDFXALPHACAPS_BLTALPHAPIXELSNEG) strcat(eb, "BLTALPHAPIXELSNEG+"); if (c & DDFXALPHACAPS_BLTALPHASURFACES) strcat(eb, "BLTALPHASURFACES+"); if (c & DDFXALPHACAPS_BLTALPHASURFACESNEG) strcat(eb, "BLTALPHASURFACESNEG+"); if (c & DDFXALPHACAPS_OVERLAYALPHAEDGEBLEND) strcat(eb, "OVERLAYALPHAEDGEBLEND+"); if (c & DDFXALPHACAPS_OVERLAYALPHAPIXELS) strcat(eb, "OVERLAYALPHAPIXELS+"); if (c & DDFXALPHACAPS_OVERLAYALPHAPIXELSNEG) strcat(eb, "OVERLAYALPHAPIXELSNEG+"); if (c & DDFXALPHACAPS_OVERLAYALPHASURFACES) strcat(eb, "OVERLAYALPHASURFACES+"); if (c & DDFXALPHACAPS_OVERLAYALPHASURFACESNEG) strcat(eb, "OVERLAYALPHASURFACESNEG+"); l=strlen(eb); if (l>strlen("DDFXALPHACAPS_")) eb[l-1]=0; // delete last '+' if any else eb[0]=0; return(eb); } char *ExplainDDFXCaps(DWORD c) { static char eb[512]; unsigned int l; strcpy(eb,"DDFXCAPS_"); if (c & DDFXCAPS_BLTARITHSTRETCHY) strcat(eb, "BLTARITHSTRETCHY+"); if (c & DDFXCAPS_BLTARITHSTRETCHYN) strcat(eb, "BLTARITHSTRETCHYN+"); if (c & DDFXCAPS_BLTMIRRORLEFTRIGHT) strcat(eb, "BLTMIRRORLEFTRIGHT+"); if (c & DDFXCAPS_BLTMIRRORUPDOWN) strcat(eb, "BLTMIRRORUPDOWN+"); if (c & DDFXCAPS_BLTROTATION) strcat(eb, "BLTROTATION+"); if (c & DDFXCAPS_BLTROTATION90) strcat(eb, "BLTROTATION90+"); if (c & DDFXCAPS_BLTSHRINKX) strcat(eb, "BLTSHRINKX+"); if (c & DDFXCAPS_BLTSHRINKXN) strcat(eb, "BLTSHRINKXN+"); if (c & DDFXCAPS_BLTSHRINKY) strcat(eb, "BLTSHRINKY+"); if (c & DDFXCAPS_BLTSHRINKYN) strcat(eb, "BLTSHRINKYN+"); if (c & DDFXCAPS_BLTSTRETCHX) strcat(eb, "BLTSTRETCHX+"); if (c & DDFXCAPS_BLTSTRETCHXN) strcat(eb, "BLTSTRETCHXN+"); if (c & DDFXCAPS_BLTSTRETCHY) strcat(eb, "BLTSTRETCHY+"); if (c & DDFXCAPS_BLTSTRETCHYN) strcat(eb, "BLTSTRETCHYN+"); if (c & DDFXCAPS_OVERLAYARITHSTRETCHY) strcat(eb, "OVERLAYARITHSTRETCHY+"); if (c & DDFXCAPS_OVERLAYARITHSTRETCHYN) strcat(eb, "OVERLAYARITHSTRETCHYN+"); if (c & DDFXCAPS_OVERLAYSHRINKX) strcat(eb, "OVERLAYSHRINKX+"); if (c & DDFXCAPS_OVERLAYSHRINKXN) strcat(eb, "OVERLAYSHRINKXN+"); if (c & DDFXCAPS_OVERLAYSHRINKY) strcat(eb, "OVERLAYSHRINKY+"); if (c & DDFXCAPS_OVERLAYSHRINKYN) strcat(eb, "OVERLAYSHRINKYN+"); if (c & DDFXCAPS_OVERLAYSTRETCHX) strcat(eb, "OVERLAYSTRETCHX+"); if (c & DDFXCAPS_OVERLAYSTRETCHXN) strcat(eb, "OVERLAYSTRETCHXN+"); if (c & DDFXCAPS_OVERLAYSTRETCHY) strcat(eb, "OVERLAYSTRETCHY+"); if (c & DDFXCAPS_OVERLAYSTRETCHYN) strcat(eb, "OVERLAYSTRETCHYN+"); if (c & DDFXCAPS_OVERLAYMIRRORLEFTRIGHT) strcat(eb, "OVERLAYMIRRORLEFTRIGHT+"); if (c & DDFXCAPS_OVERLAYMIRRORUPDOWN) strcat(eb, "OVERLAYMIRRORUPDOWN+"); if (c & DDFXCAPS_OVERLAYDEINTERLACE) strcat(eb, "OVERLAYDEINTERLACE+"); if (c & DDFXCAPS_BLTALPHA) strcat(eb, "BLTALPHA+"); if (c & DDFXCAPS_BLTFILTER) strcat(eb, "BLTFILTER+"); if (c & DDFXCAPS_OVERLAYALPHA) strcat(eb, "OVERLAYALPHA+"); if (c & DDFXCAPS_BLTARITHSTRETCHY) strcat(eb, "BLTARITHSTRETCHY+"); if (c & DDFXCAPS_OVERLAYFILTER) strcat(eb, "OVERLAYFILTER+"); if (c & DDFXCAPS_OVERLAYARITHSTRETCHY) strcat(eb, "OVERLAYARITHSTRETCHY+"); l=strlen(eb); if (l>strlen("DDFXCAPS_")) eb[l-1]=0; // delete last '+' if any else eb[0]=0; return(eb); } char *ExplainDDPalCaps(DWORD c) { static char eb[256]; unsigned int l; strcpy(eb,"DDPCAPS_"); if (c & DDPCAPS_ALPHA) strcat(eb, "ALPHA+"); if (c & DDPCAPS_PRIMARYSURFACE) strcat(eb, "PRIMARYSURFACE+"); l=strlen(eb); if (l>strlen("DDPCAPS_")) eb[l-1]=0; // delete last '+' if any else eb[0]=0; return(eb); } char *ExplainDDCKeyCaps(DWORD c) { static char eb[512]; unsigned int l; strcpy(eb,"DDCKEYCAPS_"); if (c & DDCKEYCAPS_DESTBLT) strcat(eb, "DESTBLT+"); if (c & DDCKEYCAPS_DESTBLTCLRSPACE) strcat(eb, "DESTBLTCLRSPACE+"); if (c & DDCKEYCAPS_DESTBLTCLRSPACEYUV) strcat(eb, "DESTBLTCLRSPACEYUV+"); if (c & DDCKEYCAPS_DESTBLTYUV) strcat(eb, "DESTBLTYUV+"); if (c & DDCKEYCAPS_DESTOVERLAY) strcat(eb, "DESTOVERLAY+"); if (c & DDCKEYCAPS_DESTOVERLAYCLRSPACE) strcat(eb, "DESTOVERLAYCLRSPACE+"); if (c & DDCKEYCAPS_DESTOVERLAYCLRSPACEYUV) strcat(eb, "DESTOVERLAYCLRSPACEYUV+"); if (c & DDCKEYCAPS_DESTOVERLAYONEACTIVE) strcat(eb, "DESTOVERLAYONEACTIVE+"); if (c & DDCKEYCAPS_DESTOVERLAYYUV) strcat(eb, "DESTOVERLAYYUV+"); if (c & DDCKEYCAPS_SRCBLT) strcat(eb, "SRCBLT+"); if (c & DDCKEYCAPS_SRCBLTCLRSPACE) strcat(eb, "SRCBLTCLRSPACE+"); if (c & DDCKEYCAPS_SRCBLTCLRSPACEYUV) strcat(eb, "SRCBLTCLRSPACEYUV+"); if (c & DDCKEYCAPS_SRCBLTYUV) strcat(eb, "SRCBLTYUV+"); if (c & DDCKEYCAPS_SRCOVERLAY) strcat(eb, "SRCOVERLAY+"); if (c & DDCKEYCAPS_SRCOVERLAYCLRSPACE) strcat(eb, "SRCOVERLAYCLRSPACE+"); if (c & DDCKEYCAPS_SRCOVERLAYCLRSPACEYUV) strcat(eb, "SRCOVERLAYCLRSPACEYUV+"); if (c & DDCKEYCAPS_SRCOVERLAYONEACTIVE) strcat(eb, "SRCOVERLAYONEACTIVE+"); if (c & DDCKEYCAPS_SRCOVERLAYYUV) strcat(eb, "SRCOVERLAYYUV+"); if (c & DDCKEYCAPS_NOCOSTOVERLAY) strcat(eb, "NOCOSTOVERLAY+"); l=strlen(eb); if (l>strlen("DDCKEYCAPS_")) eb[l-1]=0; // delete last '+' if any else eb[0]=0; return(eb); } char *ExplainCoopFlags(DWORD c) { static char eb[256]; unsigned int l; strcpy(eb,"DDSCL_"); if (c & DDSCL_FULLSCREEN) strcat(eb, "FULLSCREEN+"); if (c & DDSCL_ALLOWREBOOT) strcat(eb, "ALLOWREBOOT+"); if (c & DDSCL_NOWINDOWCHANGES) strcat(eb, "NOWINDOWCHANGES+"); if (c & DDSCL_NORMAL) strcat(eb, "NORMAL+"); if (c & DDSCL_EXCLUSIVE) strcat(eb, "EXCLUSIVE+"); if (c & DDSCL_ALLOWMODEX) strcat(eb, "ALLOWMODEX+"); if (c & DDSCL_SETFOCUSWINDOW) strcat(eb, "SETFOCUSWINDOW+"); if (c & DDSCL_SETDEVICEWINDOW) strcat(eb, "SETDEVICEWINDOW+"); if (c & DDSCL_CREATEDEVICEWINDOW) strcat(eb, "CREATEDEVICEWINDOW+"); if (c & DDSCL_MULTITHREADED) strcat(eb, "MULTITHREADED+"); if (c & DDSCL_FPUSETUP) strcat(eb, "FPUSETUP+"); if (c & DDSCL_FPUPRESERVE) strcat(eb, "FPUPRESERVE+"); l=strlen(eb); if (l>strlen("DDSCL_")) eb[l-1]=0; // delete last '+' if any else eb[0]=0; return(eb); } char *ExplainPixelFormatFlags(DWORD c) { static char eb[256]; unsigned int l; strcpy(eb,"DDPF_"); if (c & DDPF_ALPHAPIXELS) strcat(eb, "ALPHAPIXELS+"); if (c & DDPF_ALPHA) strcat(eb, "ALPHA+"); if (c & DDPF_FOURCC) strcat(eb, "FOURCC+"); if (c & DDPF_PALETTEINDEXED4) strcat(eb, "PALETTEINDEXED4+"); if (c & DDPF_PALETTEINDEXEDTO8) strcat(eb, "PALETTEINDEXEDTO8+"); if (c & DDPF_PALETTEINDEXED8) strcat(eb, "PALETTEINDEXED8+"); if (c & DDPF_RGB) strcat(eb, "RGB+"); if (c & DDPF_COMPRESSED) strcat(eb, "COMPRESSED+"); if (c & DDPF_RGBTOYUV) strcat(eb, "RGBTOYUV+"); if (c & DDPF_YUV) strcat(eb, "YUV+"); if (c & DDPF_ZBUFFER) strcat(eb, "ZBUFFER+"); if (c & DDPF_PALETTEINDEXED1) strcat(eb, "PALETTEINDEXED1+"); if (c & DDPF_PALETTEINDEXED2) strcat(eb, "PALETTEINDEXED2+"); if (c & DDPF_ZPIXELS) strcat(eb, "ZPIXELS+"); if (c & DDPF_STENCILBUFFER) strcat(eb, "STENCILBUFFER+"); if (c & DDPF_ALPHAPREMULT) strcat(eb, "ALPHAPREMULT+"); if (c & DDPF_LUMINANCE) strcat(eb, "LUMINANCE+"); if (c & DDPF_BUMPLUMINANCE) strcat(eb, "BUMPLUMINANCE+"); if (c & DDPF_BUMPDUDV) strcat(eb, "BUMPDUDV+"); l=strlen(eb); if (l>strlen("DDPF_")) eb[l-1]=0; // delete last '+' if any else eb[0]=0; return(eb); } char *ExplainFlipFlags(DWORD c) { static char eb[512]; unsigned int l; strcpy(eb,"DDFLIP_"); if (c & DDFLIP_WAIT) strcat(eb, "WAIT+"); if (c & DDFLIP_EVEN) strcat(eb, "EVEN+"); if (c & DDFLIP_ODD) strcat(eb, "ODD+"); if (c & DDFLIP_NOVSYNC) strcat(eb, "NOVSYNC+"); if (c & DDFLIP_INTERVAL3) strcat(eb, "INTERVAL3+"); else if (c & DDFLIP_INTERVAL2) strcat(eb, "INTERVAL2+"); if (c & DDFLIP_INTERVAL4) strcat(eb, "INTERVAL4+"); if (c & DDFLIP_STEREO) strcat(eb, "STEREO+"); if (c & DDFLIP_DONOTWAIT) strcat(eb, "DONOTWAIT+"); l=strlen(eb); if (l>strlen("DDFLIP_")) eb[l-1]=0; // delete last '+' if any else eb[0]=0; return(eb); } char *ExplainBltFlags(DWORD c) { static char eb[512]; unsigned int l; strcpy(eb,"DDBLT_"); if (c & DDBLT_ALPHADEST) strcat(eb, "ALPHADEST+"); if (c & DDBLT_ALPHADESTCONSTOVERRIDE) strcat(eb, "ALPHADESTCONSTOVERRIDE+"); if (c & DDBLT_ALPHADESTNEG) strcat(eb, "ALPHADESTNEG+"); if (c & DDBLT_ALPHADESTSURFACEOVERRIDE) strcat(eb, "ALPHADESTSURFACEOVERRIDE+"); if (c & DDBLT_ALPHAEDGEBLEND) strcat(eb, "ALPHAEDGEBLEND+"); if (c & DDBLT_ALPHASRC) strcat(eb, "ALPHASRC+"); if (c & DDBLT_ALPHASRCCONSTOVERRIDE) strcat(eb, "ALPHASRCCONSTOVERRIDE+"); if (c & DDBLT_ALPHASRCNEG) strcat(eb, "ALPHASRCNEG+"); if (c & DDBLT_ALPHASRCSURFACEOVERRIDE) strcat(eb, "ALPHASRCSURFACEOVERRIDE+"); if (c & DDBLT_ASYNC) strcat(eb, "ASYNC+"); if (c & DDBLT_COLORFILL) strcat(eb, "COLORFILL+"); if (c & DDBLT_DDFX) strcat(eb, "DDFX+"); if (c & DDBLT_DDROPS) strcat(eb, "DDROPS+"); if (c & DDBLT_KEYDEST) strcat(eb, "KEYDEST+"); if (c & DDBLT_KEYDESTOVERRIDE) strcat(eb, "KEYDESTOVERRIDE+"); if (c & DDBLT_KEYSRC) strcat(eb, "KEYSRC+"); if (c & DDBLT_KEYSRCOVERRIDE) strcat(eb, "KEYSRCOVERRIDE+"); if (c & DDBLT_ROP) strcat(eb, "ROP+"); if (c & DDBLT_ROTATIONANGLE) strcat(eb, "ROTATIONANGLE+"); if (c & DDBLT_ZBUFFER) strcat(eb, "ZBUFFER+"); if (c & DDBLT_ZBUFFERDESTCONSTOVERRIDE) strcat(eb, "ZBUFFERDESTCONSTOVERRIDE+"); if (c & DDBLT_ZBUFFERDESTOVERRIDE) strcat(eb, "ZBUFFERDESTOVERRIDE+"); if (c & DDBLT_ZBUFFERSRCCONSTOVERRIDE) strcat(eb, "ZBUFFERSRCCONSTOVERRIDE+"); if (c & DDBLT_ZBUFFERSRCOVERRIDE) strcat(eb, "ZBUFFERSRCOVERRIDE+"); if (c & DDBLT_WAIT) strcat(eb, "WAIT+"); if (c & DDBLT_DEPTHFILL) strcat(eb, "DEPTHFILL+"); if (c & DDBLT_DONOTWAIT) strcat(eb, "DONOTWAIT+"); if (c & DDBLT_ROTATIONANGLE) strcat(eb, "ROTATIONANGLE+"); l=strlen(eb); if (l>strlen("DDBLT_")) eb[l-1]=0; // delete last '+' if any else eb[0]=0; return(eb); } char *ExplainBltFastFlags(DWORD c) { static char eb[256]; unsigned int l; strcpy(eb,"DDBLTFAST_"); if (!(c & (DDBLTFAST_SRCCOLORKEY|DDBLTFAST_DESTCOLORKEY))) strcat(eb, "NOCOLORKEY+"); if (c & DDBLTFAST_SRCCOLORKEY) strcat(eb, "SRCCOLORKEY+"); if (c & DDBLTFAST_DESTCOLORKEY) strcat(eb, "DESTCOLORKEY+"); if (c & DDBLTFAST_WAIT) strcat(eb, "WAIT+"); if (c & DDBLTFAST_DONOTWAIT) strcat(eb, "DONOTWAIT+"); l=strlen(eb); if (l>strlen("DDBLTFAST_")) eb[l-1]=0; // delete last '+' if any else eb[0]=0; return(eb); } #define DDPCAPS_INITIALIZE_LEGACY 0x00000008l char *ExplainCreatePaletteFlags(DWORD c) { static char eb[256]; unsigned int l; strcpy(eb,"DDPCAPS_"); if (c & DDPCAPS_4BIT) strcat(eb, "4BIT+"); if (c & DDPCAPS_8BITENTRIES) strcat(eb, "8BITENTRIES+"); if (c & DDPCAPS_8BIT) strcat(eb, "8BIT+"); //if (c & DDPCAPS_INITIALIZE) strcat(eb, "INITIALIZE+"); // DDPCAPS_INITIALIZE is obsolete and redefined to 0x0, but that is not the legacy value embedded in assembly! if (c & DDPCAPS_INITIALIZE_LEGACY) strcat(eb, "INITIALIZE+"); if (c & DDPCAPS_PRIMARYSURFACE) strcat(eb, "PRIMARYSURFACE+"); if (c & DDPCAPS_PRIMARYSURFACELEFT) strcat(eb, "PRIMARYSURFACELEFT+"); if (c & DDPCAPS_ALLOW256) strcat(eb, "ALLOW256+"); if (c & DDPCAPS_VSYNC) strcat(eb, "VSYNC+"); if (c & DDPCAPS_1BIT) strcat(eb, "1BIT+"); if (c & DDPCAPS_2BIT) strcat(eb, "2BIT+"); if (c & DDPCAPS_ALPHA) strcat(eb, "ALPHA+"); l=strlen(eb); if (l>strlen("DDPCAPS_")) eb[l-1]=0; // delete last '+' if any else eb[0]=0; return(eb); } char *ExplainROP(DWORD c) { static char *eb; switch(c){ case SRCCOPY: eb="SRCCOPY"; break; case SRCPAINT: eb="SRCPAINT"; break; case SRCAND: eb="SRCAND"; break; case SRCINVERT: eb="SRCINVERT"; break; case SRCERASE: eb="SRCERASE"; break; case NOTSRCCOPY: eb="NOTSRCCOPY"; break; case NOTSRCERASE: eb="NOTSRCERASE"; break; case MERGECOPY: eb="MERGECOPY"; break; case MERGEPAINT: eb="MERGEPAINT"; break; case PATCOPY: eb="PATCOPY"; break; case PATPAINT: eb="PATPAINT"; break; case PATINVERT: eb="PATINVERT"; break; case DSTINVERT: eb="DSTINVERT"; break; case BLACKNESS: eb="BLACKNESS"; break; case WHITENESS: eb="WHITENESS"; break; case NOMIRRORBITMAP: eb="NOMIRRORBITMAP"; break; case CAPTUREBLT: eb="CAPTUREBLT"; break; default: eb="unknown"; break; } return(eb); } char *ExplainLockFlags(DWORD c) { static char eb[256]; unsigned int l; strcpy(eb,"DDLOCK_"); if (c & DDLOCK_WAIT) strcat(eb, "WAIT+"); if (c & DDLOCK_EVENT) strcat(eb, "EVENT+"); if (c & DDLOCK_READONLY) strcat(eb, "READONLY+"); if (c & DDLOCK_WRITEONLY) strcat(eb, "WRITEONLY+"); if (c & DDLOCK_NOSYSLOCK) strcat(eb, "NOSYSLOCK+"); if (c & DDLOCK_NOOVERWRITE) strcat(eb, "NOOVERWRITE+"); if (c & DDLOCK_DISCARDCONTENTS) strcat(eb, "DISCARDCONTENTS+"); if (c & DDLOCK_DONOTWAIT) strcat(eb, "DONOTWAIT+"); if (c & DDLOCK_HASVOLUMETEXTUREBOXRECT) strcat(eb, "HASVOLUMETEXTUREBOXRECT+"); if (c & DDLOCK_NODIRTYUPDATE) strcat(eb, "NODIRTYUPDATE+"); l=strlen(eb); if (l>strlen("DDLOCK_")) eb[l-1]=0; // delete last '+' if any else strcpy(eb,"DDLOCK_SURFACEMEMORYPTR"); // when zero... return(eb); } char *ExplainStyle(DWORD c) { static char eb[256]; unsigned int l; strcpy(eb,"WS_"); if (c & WS_BORDER) strcat(eb, "BORDER+"); if (c & WS_CAPTION) strcat(eb, "CAPTION+"); if (c & WS_CHILD) strcat(eb, "CHILD+"); if (c & WS_CLIPCHILDREN) strcat(eb, "CLIPCHILDREN+"); if (c & WS_CLIPSIBLINGS) strcat(eb, "CLIPSIBLINGS+"); if (c & WS_DISABLED) strcat(eb, "DISABLED+"); if (c & WS_DLGFRAME) strcat(eb, "DLGFRAME+"); if (c & WS_GROUP) strcat(eb, "GROUP+"); if (c & WS_HSCROLL) strcat(eb, "HSCROLL+"); if (c & WS_MAXIMIZE) strcat(eb, "MAXIMIZE+"); if (c & WS_MAXIMIZEBOX) strcat(eb, "MAXIMIZEBOX+"); if (c & WS_MINIMIZE) strcat(eb, "MINIMIZE+"); if (c & WS_MINIMIZEBOX) strcat(eb, "MINIMIZEBOX+"); if (c & WS_POPUP) strcat(eb, "POPUP+"); if (c & WS_SIZEBOX) strcat(eb, "SIZEBOX+"); if (c & WS_SYSMENU) strcat(eb, "SYSMENU+"); if (c & WS_TABSTOP) strcat(eb, "TABSTOP+"); if (c & WS_THICKFRAME) strcat(eb, "THICKFRAME+"); if (c & WS_TILED) strcat(eb, "TILED+"); if (c & WS_VISIBLE) strcat(eb, "VISIBLE+"); if (c & WS_VSCROLL) strcat(eb, "VSCROLL+"); l=strlen(eb); if (l>strlen("WS_")) eb[l-1]=0; // delete last '+' if any else strcpy(eb,"WS_OVERLAPPED"); // when zero ... return(eb); } char *ExplainExStyle(DWORD c) { static char eb[256]; unsigned int l; strcpy(eb,"WS_EX_"); if (c & WS_EX_ACCEPTFILES) strcat(eb, "ACCEPTFILES+"); if (c & WS_EX_APPWINDOW) strcat(eb, "APPWINDOW+"); if (c & WS_EX_CLIENTEDGE) strcat(eb, "CLIENTEDGE+"); //if (c & WS_EX_COMPOSITED) strcat(eb, "COMPOSITED+"); if (c & WS_EX_CONTEXTHELP) strcat(eb, "CONTEXTHELP+"); if (c & WS_EX_CONTROLPARENT) strcat(eb, "CONTROLPARENT+"); if (c & WS_EX_DLGMODALFRAME) strcat(eb, "DLGMODALFRAME+"); //if (c & WS_EX_LAYERED) strcat(eb, "LAYERED+"); if (c & WS_EX_LAYOUTRTL) strcat(eb, "LAYOUTRTL+"); if (c & WS_EX_LEFT) strcat(eb, "LEFT+"); if (c & WS_EX_LEFTSCROLLBAR) strcat(eb, "LEFTSCROLLBAR+"); if (c & WS_EX_LTRREADING) strcat(eb, "LTRREADING+"); if (c & WS_EX_MDICHILD) strcat(eb, "MDICHILD+"); //if (c & WS_EX_NOACTIVATE) strcat(eb, "NOACTIVATE+"); if (c & WS_EX_NOINHERITLAYOUT) strcat(eb, "NOINHERITLAYOUT+"); if (c & WS_EX_NOPARENTNOTIFY) strcat(eb, "NOPARENTNOTIFY+"); if (c & WS_EX_RIGHT) strcat(eb, "RIGHT+"); if (c & WS_EX_RTLREADING) strcat(eb, "RTLREADING+"); if (c & WS_EX_STATICEDGE) strcat(eb, "STATICEDGE+"); if (c & WS_EX_TOOLWINDOW) strcat(eb, "TOOLWINDOW+"); if (c & WS_EX_TOPMOST) strcat(eb, "TOPMOST+"); if (c & WS_EX_TRANSPARENT) strcat(eb, "TRANSPARENT+"); if (c & WS_EX_WINDOWEDGE) strcat(eb, "WINDOWEDGE+"); l=strlen(eb); if (l>strlen("WS_EX_")) eb[l-1]=0; // delete last '+' if any else strcpy(eb,"WS_EX_RIGHTSCROLLBAR"); // when zero ... return(eb); } char *ExplainShowCmd(int c) { static char *eb; switch(c) { case SW_HIDE: eb="SW_HIDE"; break; // 0 case SW_SHOWNORMAL: eb="SW_SHOWNORMAL"; break; // 1 case SW_SHOWMINIMIZED: eb="SW_SHOWMINIMIZED"; break; // 2 case SW_MAXIMIZE: eb="SW_MAXIMIZE"; break; // 3 //case SW_SHOWMAXIMIZED: eb="SW_SHOWMAXIMIZED"; break; // 3 = SW_MAXIMIZE case SW_SHOWNOACTIVATE: eb="SW_SHOWNOACTIVATE"; break; // 4 case SW_SHOW: eb="SW_SHOW"; break; // 5 case SW_MINIMIZE: eb="SW_MINIMIZE"; break; // 6 case SW_SHOWMINNOACTIVE: eb="SW_SHOWMINNOACTIVE"; break; // 7 case SW_SHOWNA: eb="SW_SHOWNA"; break; // 8 case SW_RESTORE: eb="SW_RESTORE"; break; // 9 case SW_SHOWDEFAULT: eb="SW_SHOWDEFAULT"; break; // 10 case SW_FORCEMINIMIZE: eb="SW_FORCEMINIMIZE"; break; // 11 default: eb="unknown"; break; } return(eb); } char *ExplainBltStatus(DWORD c) { static char *eb; switch(c) { case DDGBS_CANBLT: eb="DDGBS_CANBLT"; break; case DDGBS_ISBLTDONE: eb="DDGBS_ISBLTDONE"; break; default: eb="invalid"; break; } return(eb); } char *ExplainFlipStatus(DWORD c) { static char *eb; switch(c) { case DDGFS_CANFLIP: eb="DDGFS_CANFLIP"; break; case DDGFS_ISFLIPDONE: eb="DDGFS_ISFLIPDONE"; break; default: eb="invalid"; break; } return(eb); } char *ExplainWinMessage(DWORD c) { static char *eb; switch(c) { case WM_NULL: eb="WM_NULL"; break; case WM_CREATE: eb="WM_CREATE"; break; case WM_DESTROY: eb="WM_DESTROY"; break; case WM_MOVE: eb="WM_MOVE"; break; case WM_SIZE: eb="WM_SIZE"; break; case WM_ACTIVATE: eb="WM_ACTIVATE"; break; case WM_SETFOCUS: eb="WM_SETFOCUS"; break; case WM_KILLFOCUS: eb="WM_KILLFOCUS"; break; case WM_ENABLE: eb="WM_ENABLE"; break; case WM_SETREDRAW: eb="WM_SETREDRAW"; break; case WM_SETTEXT: eb="WM_SETTEXT"; break; case WM_GETTEXT: eb="WM_GETTEXT"; break; case WM_GETTEXTLENGTH: eb="WM_GETTEXTLENGTH"; break; case WM_PAINT: eb="WM_PAINT"; break; case WM_CLOSE: eb="WM_CLOSE"; break; case WM_QUERYENDSESSION: eb="WM_QUERYENDSESSION"; break; case WM_QUERYOPEN: eb="WM_QUERYOPEN"; break; case WM_ENDSESSION: eb="WM_ENDSESSION"; break; case WM_QUIT: eb="WM_QUIT"; break; case WM_ERASEBKGND: eb="WM_ERASEBKGND"; break; case WM_SYSCOLORCHANGE: eb="WM_SYSCOLORCHANGE"; break; case WM_SHOWWINDOW: eb="WM_SHOWWINDOW"; break; case WM_WININICHANGE: eb="WM_WININICHANGE"; break; case WM_DEVMODECHANGE: eb="WM_DEVMODECHANGE"; break; case WM_ACTIVATEAPP: eb="WM_ACTIVATEAPP"; break; case WM_FONTCHANGE: eb="WM_FONTCHANGE"; break; case WM_CANCELMODE: eb="WM_CANCELMODE"; break; case WM_SETCURSOR: eb="WM_SETCURSOR"; break; case WM_MOUSEACTIVATE: eb="WM_MOUSEACTIVATE"; break; case WM_CHILDACTIVATE: eb="WM_CHILDACTIVATE"; break; case WM_QUEUESYNC: eb="WM_QUEUESYNC"; break; case WM_GETMINMAXINFO: eb="WM_GETMINMAXINFO"; break; case WM_PAINTICON: eb="WM_PAINTICON"; break; case WM_ICONERASEBKGND: eb="WM_ICONERASEBKGND"; break; case WM_NEXTDLGCTL: eb="WM_NEXTDLGCTL"; break; case WM_SPOOLERSTATUS: eb="WM_SPOOLERSTATUS"; break; case WM_DRAWITEM: eb="WM_DRAWITEM"; break; case WM_MEASUREITEM: eb="WM_MEASUREITEM"; break; case WM_DELETEITEM: eb="WM_DELETEITEM"; break; case WM_VKEYTOITEM: eb="WM_VKEYTOITEM"; break; case WM_CHARTOITEM: eb="WM_CHARTOITEM"; break; case WM_SETFONT: eb="WM_SETFONT"; break; case WM_GETFONT: eb="WM_GETFONT"; break; case WM_SETHOTKEY: eb="WM_SETHOTKEY"; break; case WM_GETHOTKEY: eb="WM_GETHOTKEY"; break; case WM_QUERYDRAGICON: eb="WM_QUERYDRAGICON"; break; case WM_COMPAREITEM: eb="WM_COMPAREITEM"; break; case WM_GETOBJECT: eb="WM_GETOBJECT"; break; case WM_COMPACTING: eb="WM_COMPACTING"; break; case WM_COMMNOTIFY: eb="WM_COMMNOTIFY"; break; case WM_WINDOWPOSCHANGING: eb="WM_WINDOWPOSCHANGING"; break; case WM_WINDOWPOSCHANGED: eb="WM_WINDOWPOSCHANGED"; break; case WM_POWER: eb="WM_POWER"; break; case WM_COPYDATA: eb="WM_COPYDATA"; break; case WM_CANCELJOURNAL: eb="WM_CANCELJOURNAL"; break; case WM_NOTIFY: eb="WM_NOTIFY"; break; case WM_INPUTLANGCHANGEREQUEST: eb="WM_INPUTLANGCHANGEREQUEST"; break; case WM_INPUTLANGCHANGE: eb="WM_INPUTLANGCHANGE"; break; case WM_TCARD: eb="WM_TCARD"; break; case WM_HELP: eb="WM_HELP"; break; case WM_USERCHANGED: eb="WM_USERCHANGED"; break; case WM_NOTIFYFORMAT: eb="WM_NOTIFYFORMAT"; break; case WM_CONTEXTMENU: eb="WM_CONTEXTMENU"; break; case WM_STYLECHANGING: eb="WM_STYLECHANGING"; break; case WM_STYLECHANGED: eb="WM_STYLECHANGED"; break; case WM_DISPLAYCHANGE: eb="WM_DISPLAYCHANGE"; break; case WM_GETICON: eb="WM_GETICON"; break; case WM_SETICON: eb="WM_SETICON"; break; case WM_NCCREATE: eb="WM_NCCREATE"; break; case WM_NCDESTROY: eb="WM_NCDESTROY"; break; case WM_NCCALCSIZE: eb="WM_NCCALCSIZE"; break; case WM_NCHITTEST: eb="WM_NCHITTEST"; break; case WM_NCPAINT: eb="WM_NCPAINT"; break; case WM_NCACTIVATE: eb="WM_NCACTIVATE"; break; case WM_GETDLGCODE: eb="WM_GETDLGCODE"; break; #ifndef _WIN32_WCE case WM_SYNCPAINT: eb="WM_SYNCPAINT"; break; #endif case WM_NCMOUSEMOVE: eb="WM_NCMOUSEMOVE"; break; case WM_NCLBUTTONDOWN: eb="WM_NCLBUTTONDOWN"; break; case WM_NCLBUTTONUP: eb="WM_NCLBUTTONUP"; break; case WM_NCLBUTTONDBLCLK: eb="WM_NCLBUTTONDBLCLK"; break; case WM_NCRBUTTONDOWN: eb="WM_NCRBUTTONDOWN"; break; case WM_NCRBUTTONUP: eb="WM_NCRBUTTONUP"; break; case WM_NCRBUTTONDBLCLK: eb="WM_NCRBUTTONDBLCLK"; break; case WM_NCMBUTTONDOWN: eb="WM_NCMBUTTONDOWN"; break; case WM_NCMBUTTONUP: eb="WM_NCMBUTTONUP"; break; case WM_NCMBUTTONDBLCLK: eb="WM_NCMBUTTONDBLCLK"; break; #if(_WIN32_WINNT >= 0x0500) case WM_NCXBUTTONDOWN: eb="WM_NCXBUTTONDOWN"; break; case WM_NCXBUTTONUP: eb="WM_NCXBUTTONUP"; break; case WM_NCXBUTTONDBLCLK: eb="WM_NCXBUTTONDBLCLK"; break; #endif /* _WIN32_WINNT >= 0x0500 */ #if(_WIN32_WINNT >= 0x0501) case WM_INPUT: eb="WM_INPUT"; break; #endif /* _WIN32_WINNT >= 0x0501 */ case WM_KEYDOWN: eb="WM_KEYDOWN/FIRST"; break; case WM_KEYUP: eb="WM_KEYUP"; break; case WM_CHAR: eb="WM_CHAR"; break; case WM_DEADCHAR: eb="WM_DEADCHAR"; break; case WM_SYSKEYDOWN: eb="WM_SYSKEYDOWN"; break; case WM_SYSKEYUP: eb="WM_SYSKEYUP"; break; case WM_SYSCHAR: eb="WM_SYSCHAR"; break; case WM_SYSDEADCHAR: eb="WM_SYSDEADCHAR"; break; #if(WINVER >= 0x0400) case WM_IME_STARTCOMPOSITION: eb="WM_IME_STARTCOMPOSITION"; break; case WM_IME_ENDCOMPOSITION: eb="WM_IME_ENDCOMPOSITION"; break; case WM_IME_COMPOSITION: eb="WM_IME_COMPOSITION/KEYLAST"; break; #endif /* WINVER >= 0x0400 */ case WM_INITDIALOG: eb="WM_INITDIALOG"; break; case WM_COMMAND: eb="WM_COMMAND"; break; case WM_SYSCOMMAND: eb="WM_SYSCOMMAND"; break; case WM_TIMER: eb="WM_TIMER"; break; case WM_HSCROLL: eb="WM_HSCROLL"; break; case WM_VSCROLL: eb="WM_VSCROLL"; break; case WM_INITMENU: eb="WM_INITMENU"; break; case WM_INITMENUPOPUP: eb="WM_INITMENUPOPUP"; break; case WM_MENUSELECT: eb="WM_MENUSELECT"; break; case WM_MENUCHAR: eb="WM_MENUCHAR"; break; case WM_ENTERIDLE: eb="WM_ENTERIDLE"; break; case WM_CTLCOLORMSGBOX: eb="WM_CTLCOLORMSGBOX"; break; case WM_CTLCOLOREDIT: eb="WM_CTLCOLOREDIT"; break; case WM_CTLCOLORLISTBOX: eb="WM_CTLCOLORLISTBOX"; break; case WM_CTLCOLORBTN: eb="WM_CTLCOLORBTN"; break; case WM_CTLCOLORDLG: eb="WM_CTLCOLORDLG"; break; case WM_CTLCOLORSCROLLBAR: eb="WM_CTLCOLORSCROLLBAR"; break; case WM_CTLCOLORSTATIC: eb="WM_CTLCOLORSTATIC"; break; case MN_GETHMENU: eb="MN_GETHMENU"; break; case WM_MOUSEFIRST: eb="WM_MOUSEFIRST/MOUSEMOVE"; break; case WM_LBUTTONDOWN: eb="WM_LBUTTONDOWN"; break; case WM_LBUTTONUP: eb="WM_LBUTTONUP"; break; case WM_LBUTTONDBLCLK: eb="WM_LBUTTONDBLCLK"; break; case WM_RBUTTONDOWN: eb="WM_RBUTTONDOWN"; break; case WM_RBUTTONUP: eb="WM_RBUTTONUP"; break; case WM_RBUTTONDBLCLK: eb="WM_RBUTTONDBLCLK"; break; case WM_MBUTTONDOWN: eb="WM_MBUTTONDOWN"; break; case WM_MBUTTONUP: eb="WM_MBUTTONUP"; break; case WM_MBUTTONDBLCLK: eb="WM_MBUTTONDBLCLK"; break; case WM_MOUSEWHEEL: eb="WM_MOUSEWHEEL"; break; case WM_MOUSEHWHEEL: eb="WM_MOUSEHWHEEL"; break; case WM_PARENTNOTIFY: eb="WM_PARENTNOTIFY"; break; case WM_ENTERMENULOOP: eb="WM_ENTERMENULOOP"; break; case WM_EXITMENULOOP: eb="WM_EXITMENULOOP"; break; #if(WINVER >= 0x0400) case WM_NEXTMENU: eb="WM_NEXTMENU"; break; case WM_SIZING: eb="WM_SIZING"; break; case WM_CAPTURECHANGED: eb="WM_CAPTURECHANGED"; break; case WM_MOVING: eb="WM_MOVING"; break; case WM_POWERBROADCAST: eb="WM_POWERBROADCAST"; break; case WM_DEVICECHANGE: eb="WM_DEVICECHANGE"; break; #endif /* WINVER >= 0x0400 */ case WM_MDICREATE: eb="WM_MDICREATE"; break; case WM_MDIDESTROY: eb="WM_MDIDESTROY"; break; case WM_MDIACTIVATE: eb="WM_MDIACTIVATE"; break; case WM_MDIRESTORE: eb="WM_MDIRESTORE"; break; case WM_MDINEXT: eb="WM_MDINEXT"; break; case WM_MDIMAXIMIZE: eb="WM_MDIMAXIMIZE"; break; case WM_MDITILE: eb="WM_MDITILE"; break; case WM_MDICASCADE: eb="WM_MDICASCADE"; break; case WM_MDIICONARRANGE: eb="WM_MDIICONARRANGE"; break; case WM_MDIGETACTIVE: eb="WM_MDIGETACTIVE"; break; case WM_MDISETMENU: eb="WM_MDISETMENU"; break; case WM_ENTERSIZEMOVE: eb="WM_ENTERSIZEMOVE"; break; case WM_EXITSIZEMOVE: eb="WM_EXITSIZEMOVE"; break; case WM_DROPFILES: eb="WM_DROPFILES"; break; case WM_MDIREFRESHMENU: eb="WM_MDIREFRESHMENU"; break; #if(WINVER >= 0x0400) case WM_IME_SETCONTEXT: eb="WM_IME_SETCONTEXT"; break; case WM_IME_NOTIFY: eb="WM_IME_NOTIFY"; break; case WM_IME_CONTROL: eb="WM_IME_CONTROL"; break; case WM_IME_COMPOSITIONFULL: eb="WM_IME_COMPOSITIONFULL"; break; case WM_IME_SELECT: eb="WM_IME_SELECT"; break; case WM_IME_CHAR: eb="WM_IME_CHAR"; break; case WM_IME_REQUEST: eb="WM_IME_REQUEST"; break; case WM_IME_KEYDOWN: eb="WM_IME_KEYDOWN"; break; case WM_IME_KEYUP: eb="WM_IME_KEYUP"; break; #endif /* WINVER >= 0x0400 */ case WM_MOUSEHOVER: eb="WM_MOUSEHOVER"; break; case WM_MOUSELEAVE: eb="WM_MOUSELEAVE"; break; case WM_NCMOUSEHOVER: eb="WM_NCMOUSEHOVER"; break; case WM_NCMOUSELEAVE: eb="WM_NCMOUSELEAVE"; break; case WM_DWMCOMPOSITIONCHANGED: eb="WM_DWMCOMPOSITIONCHANGED"; break; case WM_DWMNCRENDERINGCHANGED: eb="WM_DWMNCRENDERINGCHANGED"; break; case WM_DWMCOLORIZATIONCOLORCHANGED: eb="WM_DWMCOLORIZATIONCOLORCHANGED"; break; case WM_DWMWINDOWMAXIMIZEDCHANGE: eb="WM_DWMWINDOWMAXIMIZEDCHANGE"; break; case WM_GETTITLEBARINFOEX: eb="WM_GETTITLEBARINFOEX"; break; case WM_HANDHELDFIRST: eb="WM_HANDHELDFIRST"; break; case WM_HANDHELDLAST: eb="WM_HANDHELDLAST"; break; case WM_PENWINFIRST: eb="WM_PENWINFIRST"; break; default: eb="???"; break; } return eb; } char *ExplainResizing(DWORD c) { static char *eb; switch(c) { case SIZE_MAXHIDE: eb="SIZE_MAXHIDE"; break; case SIZE_MAXIMIZED: eb="SIZE_MAXIMIZED"; break; case SIZE_MAXSHOW: eb="SIZE_MAXSHOW"; break; case SIZE_MINIMIZED: eb="SIZE_MINIMIZED"; break; case SIZE_RESTORED: eb="SIZE_RESTORED"; break; default: eb="???"; break; } return eb; } char *ExplainDeviceCaps(DWORD c) { static char *eb; switch(c) { case DRIVERVERSION: eb="DRIVERVERSION"; break; case TECHNOLOGY: eb="TECHNOLOGY"; break; case HORZSIZE: eb="HORZSIZE"; break; case VERTSIZE: eb="VERTSIZE"; break; case HORZRES: eb="HORZRES"; break; case VERTRES: eb="VERTRES"; break; case LOGPIXELSX: eb="LOGPIXELSX"; break; case LOGPIXELSY: eb="LOGPIXELSY"; break; case BITSPIXEL: eb="BITSPIXEL"; break; case PLANES: eb="PLANES"; break; case NUMBRUSHES: eb="NUMBRUSHES"; break; case NUMPENS: eb="NUMPENS"; break; case NUMFONTS: eb="NUMFONTS"; break; case NUMCOLORS: eb="NUMCOLORS"; break; case ASPECTX: eb="ASPECTX"; break; case ASPECTY: eb="ASPECTY"; break; case ASPECTXY: eb="ASPECTXY"; break; case PDEVICESIZE: eb="PDEVICESIZE"; break; case CLIPCAPS: eb="CLIPCAPS"; break; case SIZEPALETTE: eb="SIZEPALETTE"; break; case NUMRESERVED: eb="NUMRESERVED"; break; case COLORRES: eb="COLORRES"; break; case PHYSICALWIDTH: eb="PHYSICALWIDTH"; break; case PHYSICALHEIGHT: eb="PHYSICALHEIGHT"; break; case PHYSICALOFFSETX: eb="PHYSICALOFFSETX"; break; case PHYSICALOFFSETY: eb="PHYSICALOFFSETY"; break; case VREFRESH: eb="VREFRESH"; break; case SCALINGFACTORX: eb="SCALINGFACTORX"; break; case SCALINGFACTORY: eb="SCALINGFACTORY"; break; case BLTALIGNMENT: eb="BLTALIGNMENT"; break; case SHADEBLENDCAPS: eb="SHADEBLENDCAPS"; break; case RASTERCAPS: eb="RASTERCAPS"; break; case CURVECAPS: eb="CURVECAPS"; break; case LINECAPS: eb="LINECAPS"; break; case POLYGONALCAPS: eb="POLYGONALCAPS"; break; case TEXTCAPS: eb="TEXTCAPS"; break; case COLORMGMTCAPS: eb="COLORMGMTCAPS"; break; default: eb="???"; break; } return eb; } char *ExplainDisplaySettingsRetcode(DWORD c) { static char *eb; switch(c) { case DISP_CHANGE_SUCCESSFUL: eb="DISP_CHANGE_SUCCESSFUL"; break; //case DISP_CHANGE_BADDUALVIEW: eb="DISP_CHANGE_BADDUALVIEW"; break; case DISP_CHANGE_BADFLAGS: eb="DISP_CHANGE_BADFLAGS"; break; case DISP_CHANGE_BADMODE: eb="DISP_CHANGE_BADMODE"; break; case DISP_CHANGE_BADPARAM: eb="DISP_CHANGE_BADPARAM"; break; case DISP_CHANGE_FAILED: eb="DISP_CHANGE_FAILED"; break; case DISP_CHANGE_NOTUPDATED: eb="DISP_CHANGE_NOTUPDATED"; break; case DISP_CHANGE_RESTART: eb="DISP_CHANGE_RESTART"; break; } return eb; } char *ExplainSetWindowIndex(DWORD c) { static char *eb; switch(c) { case GWL_EXSTYLE: eb="GWL_EXSTYLE"; break; case GWL_HINSTANCE: eb="GWL_HINSTANCE"; break; case GWL_ID: eb="GWL_ID"; break; case GWL_STYLE: eb="GWL_STYLE"; break; case GWL_USERDATA: eb="GWL_USERDATA"; break; case GWL_WNDPROC: eb="GWL_WNDPROC"; break; case GWL_HWNDPARENT: eb="GWL_HWNDPARENT"; break; case DWL_DLGPROC: eb="DWL_DLGPROC"; break; case DWL_MSGRESULT: eb="DWL_MSGRESULT"; break; case DWL_USER: eb="DWL_USER"; break; default: eb=""; break; } return eb; } char *ExplainColorKeyFlag(DWORD c) { static char *eb; switch(c) { case DDCKEY_COLORSPACE: eb="DDCKEY_COLORSPACE"; break; case DDCKEY_DESTBLT: eb="DDCKEY_DESTBLT"; break; case DDCKEY_DESTOVERLAY: eb="DDCKEY_DESTOVERLAY"; break; case DDCKEY_SRCBLT: eb="DDCKEY_SRCBLT"; break; case DDCKEY_SRCOVERLAY: eb="DDCKEY_SRCOVERLAY"; break; default: eb=""; break; } return eb; } char *ExplainGUID(GUID FAR *lpguid) { static char *sguid; switch ((DWORD)lpguid){ case NULL: return "NULL"; break; case DDCREATE_HARDWAREONLY: return "DDCREATE_HARDWAREONLY"; break; case DDCREATE_EMULATIONONLY: return "DDCREATE_EMULATIONONLY"; break; } switch (lpguid->Data1){ case 0x00000000: sguid="IID_IUnknown"; break; case 0x6C14DB80: sguid="IID_IDirectDraw"; break; case 0xB3A6F3E0: sguid="IID_IDirectDraw2"; break; case 0x618f8ad4: sguid="IID_IDirectDraw3"; break; case 0x9c59509a: sguid="IID_IDirectDraw4"; break; case 0x15e65ec0: sguid="IID_IDirectDraw7"; break; case 0x6C14DB81: sguid="IID_IDirectDrawSurface"; break; case 0x57805885: sguid="IID_IDirectDrawSurface2"; break; case 0xDA044E00: sguid="IID_IDirectDrawSurface3"; break; case 0x0B2B8630: sguid="IID_IDirectDrawSurface4"; break; case 0x06675a80: sguid="IID_IDirectDrawSurface7"; break; case 0x6C14DB84: sguid="IID_IDirectDrawPalette"; break; case 0x6C14DB85: sguid="IID_IDirectDrawClipper"; break; case 0x4B9F0EE0: sguid="IID_IDirectDrawColorControl"; break; case 0x69C11C3E: sguid="IID_IDirectDrawGammaControl"; break; case 0xA4665C60: sguid="IID_IDirect3DRGBDevice"; break; case 0x84E63dE0: sguid="IID_IDirect3DHALDevice"; break; case 0x3BBA0080: sguid="IID_IDirect3D"; break; case 0x6aae1ec1: sguid="IID_IDirect3D2"; break; case 0xbb223240: sguid="IID_IDirect3D3"; break; case 0xf5049e77: sguid="IID_IDirect3D7"; break; case 0x64108800: sguid="IID_IDirect3DDevice"; break; case 0x93281501: sguid="IID_IDirect3DDevice2"; break; case 0xb0ab3b60: sguid="IID_IDirect3DDevice3"; break; case 0xf5049e79: sguid="IID_IDirect3DDevice7"; break; case 0x2CDCD9E0: sguid="IID_IDirect3DTexture"; break; case 0x93281502: sguid="IID_IDirect3DTexture2"; break; case 0x4417C142: sguid="IID_IDirect3DLight"; break; case 0x4417C144: sguid="IID_IDirect3DMaterial"; break; case 0x93281503: sguid="IID_IDirect3DMaterial2"; break; case 0xca9c46f4: sguid="IID_IDirect3DMaterial3"; break; case 0x4417C145: sguid="IID_IDirect3DExecuteBuffer"; break; case 0x4417C146: sguid="IID_IDirect3DViewport"; break; case 0x93281500: sguid="IID_IDirect3DViewport2"; break; case 0xb0ab3b61: sguid="IID_IDirect3DViewport3"; break; case 0x7a503555: sguid="IID_IDirect3DVertexBuffer"; break; case 0xf5049e7d: sguid="IID_IDirect3DVertexBuffer7"; break; case 0xF2086B20: sguid="IID_IDirect3DRampDevice"; break; case 0x881949a1: sguid="IID_IDirect3DMMXDevice"; break; case 0x50936643: sguid="IID_IDirect3DRefDevice"; break; case 0x8767df22: sguid="IID_IDirect3DNullDevice"; break; case 0xf5049e78: sguid="IID_IDirect3DTnLHalDevice"; break; case 0xD7B70EE0: sguid="CLSID_DirectDraw"; break; case 0x3c305196: sguid="CLSID_DirectDraw7"; break; case 0x593817A0: sguid="CLSID_DirectDrawClipper"; break; case 0x89521360: sguid="IID_IDirectInputA"; break; case 0x89521361: sguid="IID_IDirectInputW"; break; case 0x5944E662: sguid="IID_IDirectInput2A"; break; case 0x5944E663: sguid="IID_IDirectInput2W"; break; case 0x9A4CB684: sguid="IID_IDirectInput7A"; break; case 0x9A4CB685: sguid="IID_IDirectInput7W"; break; case 0xBF798030: sguid="IID_IDirectInput8A"; break; case 0xBF798031: sguid="IID_IDirectInput8W"; break; case 0x5944E680: sguid="IID_IDirectInputDeviceA"; break; case 0x5944E681: sguid="IID_IDirectInputDeviceW"; break; case 0x5944E682: sguid="IID_IDirectInputDevice2A"; break; case 0x5944E683: sguid="IID_IDirectInputDevice2W"; break; case 0x57D7C6BC: sguid="IID_IDirectInputDevice7A"; break; case 0x57D7C6BD: sguid="IID_IDirectInputDevice7W"; break; case 0x54D41080: sguid="IID_IDirectInputDevice8A"; break; case 0x54D41081: sguid="IID_IDirectInputDevice8W"; break; case 0xE7E1F7C0: sguid="IID_IDirectInputEffect"; break; case 0x1dd9e8da: sguid="IID_IDirect3D8"; break; case 0x81bdcbca: sguid="IID_IDirect3D9"; break; case 0x02177241: sguid="IID_IDirect3D9Ex"; break; case 0x7385e5df: sguid="IID_IDirect3DDevice8"; break; case 0xd0223b96: sguid="IID_IDirect3DDevice9"; break; case 0xb18b10ce: sguid="IID_IDirect3DDevice9Ex"; break; case 0xb4211cfa: sguid="IID_IDirect3DBaseTexture8"; break; case 0xe4cdd575: sguid="IID_IDirect3DTexture8"; break; case 0x580ca87e: sguid="IID_IDirect3DBaseTexture9"; break; case 0x85c31227: sguid="IID_IDirect3DTexture9"; break; case 0xb96eebca: sguid="IID_IDirect3DSurface8"; break; case 0x0cfbaf3a: sguid="IID_IDirect3DSurface9"; break; default: sguid="UNKNOWN"; break; } return sguid; } char *ExplainNChitTest(DWORD c) { static char *eb; switch(c) { case HTERROR: eb="HTERROR"; break; case HTTRANSPARENT: eb="HTTRANSPARENT"; break; case HTNOWHERE: eb="HTNOWHERE"; break; case HTCLIENT: eb="HTCLIENT"; break; case HTCAPTION: eb="HTCAPTION"; break; case HTSYSMENU: eb="HTSYSMENU"; break; case HTGROWBOX: eb="HTGROWBOX"; break; case HTMENU: eb="HTMENU"; break; case HTHSCROLL: eb="HTHSCROLL"; break; case HTVSCROLL: eb="HTVSCROLL"; break; case HTMINBUTTON: eb="HTMINBUTTON"; break; case HTMAXBUTTON: eb="HTMAXBUTTON"; break; case HTLEFT: eb="HTLEFT"; break; case HTRIGHT: eb="HTRIGHT"; break; case HTTOP: eb="HTTOP"; break; case HTTOPLEFT: eb="HTTOPLEFT"; break; case HTTOPRIGHT: eb="HTTOPRIGHT"; break; case HTBOTTOM: eb="HTBOTTOM"; break; case HTBOTTOMLEFT: eb="HTBOTTOMLEFT"; break; case HTBOTTOMRIGHT: eb="HTBOTTOMRIGHT"; break; case HTBORDER: eb="HTBORDER"; break; case HTOBJECT: eb="HTOBJECT"; break; case HTCLOSE: eb="HTCLOSE"; break; case HTHELP: eb="HTHELP"; break; default: eb="Unknown"; break; } return eb; } char *ExplainDDEnumerateFlags(DWORD c) { static char eb[256]; unsigned int l; strcpy(eb,"DDENUM_"); if (c & DDENUM_ATTACHEDSECONDARYDEVICES) strcat(eb, "ATTACHEDSECONDARYDEVICES+"); if (c & DDENUM_DETACHEDSECONDARYDEVICES) strcat(eb, "DETACHEDSECONDARYDEVICES+"); if (c & DDENUM_NONDISPLAYDEVICES) strcat(eb, "NONDISPLAYDEVICES+"); l=strlen(eb); if (l>strlen("DDENUM_")) eb[l-1]=0; // delete last '+' if any else strcpy(eb,"NULL"); return(eb); } char *ExplainsSystemMetrics(DWORD c) { char *Captions[94]={ "SM_CXSCREEN", "SM_CYSCREEN", "SM_CXVSCROLL", "SM_CYHSCROLL", "SM_CYCAPTION", "SM_CXBORDER", "SM_CYBORDER", "SM_CXDLGFRAME", "SM_CYDLGFRAME", "SM_CYVTHUMB", "SM_CXHTHUMB", "SM_CXICON", "SM_CYICON", "SM_CXCURSOR", "SM_CYCURSOR", "SM_CYMENU", "SM_CXFULLSCREEN", "SM_CYFULLSCREEN", "SM_CYKANJIWINDOW", "SM_MOUSEPRESENT", "SM_CYVSCROLL", "SM_CXHSCROLL", "SM_DEBUG", "SM_SWAPBUTTON", "SM_RESERVED1", "SM_RESERVED2", "SM_RESERVED3", "SM_RESERVED4", "SM_CXMIN", "SM_CYMIN", "SM_CXSIZE", "SM_CYSIZE", "SM_CXFRAME", "SM_CYFRAME", "SM_CXMINTRACK", "SM_CYMINTRACK", "SM_CXDOUBLECLK", "SM_CYDOUBLECLK", "SM_CXICONSPACING", "SM_CYICONSPACING", "SM_MENUDROPALIGNMENT", "SM_PENWINDOWS", "SM_DBCSENABLED", "SM_CMOUSEBUTTONS", "SM_SECURE", "SM_CXEDGE", "SM_CYEDGE", "SM_CXMINSPACING", "SM_CYMINSPACING", "SM_CXSMICON", "SM_CYSMICON", "SM_CYSMCAPTION", "SM_CXSMSIZE", "SM_CYSMSIZE", "SM_CXMENUSIZE", "SM_CYMENUSIZE", "SM_ARRANGE", "SM_CXMINIMIZED", "SM_CYMINIMIZED", "SM_CXMAXTRACK", "SM_CYMAXTRACK", "SM_CXMAXIMIZED", "SM_CYMAXIMIZED", "SM_NETWORK", "64???", "65???", "66???", "SM_CLEANBOOT", "SM_CXDRAG", "SM_CYDRAG", "SM_SHOWSOUNDS", "SM_CXMENUCHECK", "SM_CYMENUCHECK", "SM_SLOWMACHINE", "SM_MIDEASTENABLED", "SM_MOUSEWHEELPRESENT", "SM_XVIRTUALSCREEN", "SM_YVIRTUALSCREEN", "SM_CXVIRTUALSCREEN", "SM_CYVIRTUALSCREEN", "SM_CMONITORS", "SM_SAMEDISPLAYFORMAT", "SM_IMMENABLED", "SM_CXFOCUSBORDER", "SM_CYFOCUSBORDER", "85???", "SM_TABLETPC", "SM_MEDIACENTER", "SM_STARTER", "SM_SERVERR2", "SM_CMETRICS(Win 0x501)", "SM_MOUSEHORIZONTALWHEELPRESENT", "SM_CXPADDEDBORDER", "SM_CMETRICS"}; if (c>=0 && c<94) return Captions[c]; switch(c){ case SM_REMOTESESSION: return "SM_REMOTESESSION"; case SM_SHUTTINGDOWN: return "SM_SHUTTINGDOWN"; case SM_REMOTECONTROL: return "SM_REMOTECONTROL"; case SM_CARETBLINKINGENABLED: return "SM_CARETBLINKINGENABLED"; } return "???"; } char *ExplainWPFlags(DWORD c) { static char eb[256]; unsigned int l; strcpy(eb,"SWP_"); if (c & SWP_NOSIZE) strcat(eb, "NOSIZE+"); if (c & SWP_NOMOVE) strcat(eb, "NOMOVE+"); if (c & SWP_NOZORDER) strcat(eb, "NOZORDER+"); if (c & SWP_NOREDRAW) strcat(eb, "NOREDRAW+"); if (c & SWP_NOACTIVATE) strcat(eb, "NOACTIVATE+"); if (c & SWP_FRAMECHANGED) strcat(eb, "FRAMECHANGED+"); if (c & SWP_SHOWWINDOW) strcat(eb, "SHOWWINDOW+"); if (c & SWP_HIDEWINDOW) strcat(eb, "HIDEWINDOW+"); if (c & SWP_NOCOPYBITS) strcat(eb, "NOCOPYBITS+"); if (c & SWP_NOOWNERZORDER) strcat(eb, "NOOWNERZORDER+"); if (c & SWP_NOSENDCHANGING) strcat(eb, "NOSENDCHANGING+"); l=strlen(eb); if (l>strlen("SWP_")) eb[l-1]=0; // delete last '+' if any else strcpy(eb,"NULL"); return(eb); } char *ExplainLoadLibFlags(DWORD c) { static char eb[256]; unsigned int l; strcpy(eb,""); if (c & DONT_RESOLVE_DLL_REFERENCES) strcat(eb, "DONT_RESOLVE_DLL_REFERENCES+"); if (c & LOAD_LIBRARY_AS_DATAFILE) strcat(eb, "LOAD_LIBRARY_AS_DATAFILE+"); if (c & LOAD_WITH_ALTERED_SEARCH_PATH) strcat(eb, "LOAD_WITH_ALTERED_SEARCH_PATH+"); if (c & LOAD_IGNORE_CODE_AUTHZ_LEVEL) strcat(eb, "LOAD_IGNORE_CODE_AUTHZ_LEVEL+"); if (c & LOAD_LIBRARY_AS_IMAGE_RESOURCE) strcat(eb, "LOAD_LIBRARY_AS_IMAGE_RESOURCE+"); if (c & LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE) strcat(eb, "LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE+"); l=strlen(eb); if (l>0) eb[l-1]=0; // delete last '+' if any else strcpy(eb,"NULL"); return(eb); } char *ExplainDevModeFields(DWORD c) { static char eb[512]; unsigned int l; strcpy(eb,"DM_"); if (c & DM_ORIENTATION) strcat(eb, "ORIENTATION+"); if (c & DM_PAPERSIZE) strcat(eb, "PAPERSIZE+"); if (c & DM_PAPERLENGTH) strcat(eb, "PAPERLENGTH+"); if (c & DM_PAPERWIDTH) strcat(eb, "PAPERWIDTH+"); if (c & DM_SCALE) strcat(eb, "SCALE+"); if (c & DM_COPIES) strcat(eb, "COPIES+"); if (c & DM_DEFAULTSOURCE) strcat(eb, "DEFAULTSOURCE+"); if (c & DM_PRINTQUALITY) strcat(eb, "PRINTQUALITY+"); if (c & DM_POSITION) strcat(eb, "POSITION+"); if (c & DM_DISPLAYORIENTATION) strcat(eb, "DISPLAYORIENTATION+"); if (c & DM_DISPLAYFIXEDOUTPUT) strcat(eb, "DISPLAYFIXEDOUTPUT+"); if (c & DM_COLOR) strcat(eb, "COLOR+"); if (c & DM_DUPLEX) strcat(eb, "DUPLEX+"); if (c & DM_YRESOLUTION) strcat(eb, "YRESOLUTION+"); if (c & DM_TTOPTION) strcat(eb, "TTOPTION+"); if (c & DM_COLLATE) strcat(eb, "COLLATE+"); if (c & DM_FORMNAME) strcat(eb, "FORMNAME+"); if (c & DM_LOGPIXELS) strcat(eb, "LOGPIXELS+"); if (c & DM_BITSPERPEL) strcat(eb, "BITSPERPEL+"); if (c & DM_PELSWIDTH) strcat(eb, "PELSWIDTH+"); if (c & DM_PELSHEIGHT) strcat(eb, "PELSHEIGHT+"); if (c & DM_DISPLAYFLAGS) strcat(eb, "DISPLAYFLAGS+"); if (c & DM_NUP) strcat(eb, "NUP+"); if (c & DM_DISPLAYFREQUENCY) strcat(eb, "DISPLAYFREQUENCY+"); if (c & DM_ICMMETHOD) strcat(eb, "ICMMETHOD+"); if (c & DM_ICMINTENT) strcat(eb, "ICMINTENT+"); if (c & DM_MEDIATYPE) strcat(eb, "MEDIATYPE+"); if (c & DM_DITHERTYPE) strcat(eb, "DITHERTYPE+"); if (c & DM_PANNINGWIDTH) strcat(eb, "PANNINGWIDTH+"); if (c & DM_PANNINGHEIGHT) strcat(eb, "PANNINGHEIGHT+"); l=strlen(eb); if (l>strlen("DM_")) eb[l-1]=0; // delete last '+' if any else strcpy(eb,"NULL"); return(eb); } char *ExplainMCICommands(DWORD c) { switch(c){ case MCI_OPEN: return "MCI_OPEN"; case MCI_CLOSE: return "MCI_CLOSE"; case MCI_ESCAPE: return "MCI_ESCAPE"; case MCI_PLAY: return "MCI_PLAY"; case MCI_SEEK: return "MCI_SEEK"; case MCI_STOP: return "MCI_STOP"; case MCI_PAUSE: return "MCI_PAUSE"; case MCI_INFO: return "MCI_INFO"; case MCI_GETDEVCAPS: return "MCI_GETDEVCAPS"; case MCI_SPIN: return "MCI_SPIN"; case MCI_SET: return "MCI_SET"; case MCI_STEP: return "MCI_STEP"; case MCI_RECORD: return "MCI_RECORD"; case MCI_SYSINFO: return "MCI_SYSINFO"; case MCI_BREAK: return "MCI_BREAK"; case MCI_SAVE: return "MCI_SAVE"; case MCI_STATUS: return "MCI_STATUS"; case MCI_CUE: return "MCI_CUE"; case MCI_REALIZE: return "MCI_REALIZE"; case MCI_WINDOW: return "MCI_WINDOW"; case MCI_PUT: return "MCI_PUT"; case MCI_WHERE: return "MCI_WHERE"; case MCI_FREEZE: return "MCI_FREEZE"; case MCI_UNFREEZE: return "MCI_UNFREEZE"; case MCI_LOAD: return "MCI_LOAD"; case MCI_CUT: return "MCI_CUT"; case MCI_COPY: return "MCI_COPY"; case MCI_PASTE: return "MCI_PASTE"; case MCI_UPDATE: return "MCI_UPDATE"; case MCI_RESUME: return "MCI_RESUME"; case MCI_DELETE: return "MCI_DELETE"; } return "???"; } char *ExplainMCIFlags(DWORD cmd, DWORD c) { static char eb[512]; unsigned int l; strcpy(eb,"MCI_"); // common flags if (c & MCI_NOTIFY) strcat(eb, "NOTIFY+"); if (c & MCI_WAIT) strcat(eb, "WAIT+"); if (c & MCI_FROM) strcat(eb, "FROM+"); if (c & MCI_TO) strcat(eb, "TO+"); if (c & MCI_TRACK) strcat(eb, "TRACK+"); switch(cmd){ case MCI_OPEN: if (c & MCI_OPEN_SHAREABLE) strcat(eb, "OPEN_SHAREABLE+"); if (c & MCI_OPEN_ELEMENT) strcat(eb, "OPEN_ELEMENT+"); if (c & MCI_OPEN_ALIAS) strcat(eb, "OPEN_ALIAS+"); if (c & MCI_OPEN_ELEMENT_ID) strcat(eb, "OPEN_ELEMENT_ID+"); if (c & MCI_OPEN_TYPE_ID) strcat(eb, "OPEN_TYPE_ID+"); if (c & MCI_OPEN_TYPE) strcat(eb, "OPEN_TYPE+"); if (c & MCI_WAVE_OPEN_BUFFER) strcat(eb, "WAVE_OPEN_BUFFER+"); break; case MCI_SEEK: if (c & MCI_SEEK_TO_START) strcat(eb, "SEEK_TO_START+"); if (c & MCI_STATUS_START) strcat(eb, "STATUS_START+"); if (c & MCI_VD_SEEK_REVERSE) strcat(eb, "VD_SEEK_REVERSE+"); break; case MCI_STATUS: if (c & MCI_STATUS_ITEM) strcat(eb, "STATUS_ITEM+"); if (c & MCI_STATUS_START) strcat(eb, "STATUS_START+"); break; case MCI_INFO: if (c & MCI_INFO_PRODUCT) strcat(eb, "INFO_PRODUCT+"); if (c & MCI_INFO_FILE) strcat(eb, "INFO_FILE+"); if (c & MCI_INFO_MEDIA_UPC) strcat(eb, "INFO_MEDIA_UPC+"); if (c & MCI_INFO_MEDIA_IDENTITY) strcat(eb, "INFO_MEDIA_IDENTITY+"); if (c & MCI_INFO_NAME) strcat(eb, "INFO_NAME+"); if (c & MCI_INFO_COPYRIGHT) strcat(eb, "INFO_COPYRIGHT+"); break; case MCI_GETDEVCAPS: if (c & MCI_VD_GETDEVCAPS_CLV) strcat(eb, "VD_GETDEVCAPS_CLV+"); if (c & MCI_VD_GETDEVCAPS_CAV) strcat(eb, "VD_GETDEVCAPS_CAV+"); if (c & MCI_GETDEVCAPS_ITEM) strcat(eb, "GETDEVCAPS_ITEM+"); break; case MCI_SYSINFO: if (c & MCI_SYSINFO_QUANTITY) strcat(eb, "SYSINFO_QUANTITY+"); if (c & MCI_SYSINFO_OPEN) strcat(eb, "SYSINFO_OPEN+"); if (c & MCI_SYSINFO_NAME) strcat(eb, "SYSINFO_NAME+"); if (c & MCI_SYSINFO_INSTALLNAME) strcat(eb, "SYSINFO_INSTALLNAME+"); break; case MCI_SET: if (c & MCI_SET_DOOR_OPEN) strcat(eb, "SET_DOOR_OPEN+"); if (c & MCI_SET_DOOR_CLOSED) strcat(eb, "SET_DOOR_CLOSED+"); if (c & MCI_SET_TIME_FORMAT) strcat(eb, "SET_TIME_FORMAT+"); if (c & MCI_SET_AUDIO) strcat(eb, "SET_AUDIO+"); if (c & MCI_SET_VIDEO) strcat(eb, "SET_VIDEO+"); if (c & MCI_SET_ON) strcat(eb, "SET_ON+"); if (c & MCI_SET_OFF) strcat(eb, "SET_OFF+"); if (c & MCI_SEQ_SET_TEMPO) strcat(eb, "SEQ_SET_TEMPO+"); if (c & MCI_SEQ_SET_PORT) strcat(eb, "SEQ_SET_PORT+"); if (c & MCI_SEQ_SET_SLAVE) strcat(eb, "SEQ_SET_SLAVE+"); if (c & MCI_SEQ_SET_MASTER) strcat(eb, "SEQ_SET_MASTER+"); if (c & MCI_SEQ_SET_OFFSET) strcat(eb, "SEQ_SET_OFFSET+"); break; case MCI_BREAK: if (c & MCI_BREAK_KEY) strcat(eb, "BREAK_KEY+"); if (c & MCI_BREAK_HWND) strcat(eb, "BREAK_HWND+"); if (c & MCI_BREAK_OFF) strcat(eb, "BREAK_OFF+"); break; case MCI_RECORD: if (c & MCI_RECORD_INSERT) strcat(eb, "RECORD_INSERT+"); if (c & MCI_RECORD_OVERWRITE) strcat(eb, "RECORD_OVERWRITE+"); break; case MCI_SAVE: if (c & MCI_SAVE_FILE) strcat(eb, "SAVE_FILE+"); break; case MCI_LOAD: if (c & MCI_LOAD_FILE) strcat(eb, "SAVE_FILE+"); break; case MCI_PLAY: if (c & MCI_VD_PLAY_REVERSE) strcat(eb, "VD_PLAY_REVERSE+"); if (c & MCI_VD_PLAY_FAST) strcat(eb, "VD_PLAY_FAST+"); if (c & MCI_VD_PLAY_SPEED) strcat(eb, "VD_PLAY_SPEED+"); if (c & MCI_VD_PLAY_SCAN) strcat(eb, "VD_PLAY_SCAN+"); if (c & MCI_VD_PLAY_SLOW) strcat(eb, "VD_PLAY_SLOW+"); break; case MCI_STEP: if (c & MCI_VD_STEP_FRAMES) strcat(eb, "VD_STEP_FRAMES+"); if (c & MCI_VD_STEP_REVERSE) strcat(eb, "VD_STEP_REVERSE+"); break; case MCI_WINDOW: if (c & MCI_ANIM_WINDOW_HWND) strcat(eb, "ANIM_WINDOW_HWND+"); if (c & MCI_ANIM_WINDOW_STATE) strcat(eb, "ANIM_WINDOW_STATE+"); if (c & MCI_ANIM_WINDOW_TEXT) strcat(eb, "ANIM_WINDOW_TEXT+"); if (c & MCI_ANIM_WINDOW_ENABLE_STRETCH) strcat(eb, "ANIM_WINDOW_ENABLE_STRETCH+"); if (c & MCI_ANIM_WINDOW_DISABLE_STRETCH) strcat(eb, "ANIM_WINDOW_DISABLE_STRETCH+"); break; case MCI_PUT: if (c & MCI_ANIM_RECT) strcat(eb, "ANIM_RECT+"); if (c & MCI_ANIM_PUT_SOURCE) strcat(eb, "ANIM_PUT_SOURCE+"); if (c & MCI_ANIM_PUT_DESTINATION) strcat(eb, "ANIM_PUT_DESTINATION+"); break; case MCI_WHERE: if (c & MCI_ANIM_WHERE_SOURCE) strcat(eb, "ANIM_WHERE_SOURCE+"); if (c & MCI_ANIM_WHERE_DESTINATION) strcat(eb, "ANIM_WHERE_DESTINATION+"); break; case MCI_UPDATE: if (c & MCI_ANIM_UPDATE_HDC) strcat(eb, "ANIM_UPDATE_HDC+"); break; } /* if (c & MCI_OVLY_OPEN_WS) strcat(eb, "OVLY_OPEN_WS+"); if (c & MCI_OVLY_OPEN_PARENT) strcat(eb, "OVLY_OPEN_PARENT+"); if (c & MCI_OVLY_STATUS_HWND) strcat(eb, "OVLY_STATUS_HWND+"); if (c & MCI_OVLY_STATUS_STRETCH) strcat(eb, "OVLY_STATUS_STRETCH+"); if (c & MCI_OVLY_INFO_TEXT) strcat(eb, "OVLY_INFO_TEXT+"); if (c & MCI_OVLY_WINDOW_HWND) strcat(eb, "OVLY_WINDOW_HWND+"); if (c & MCI_OVLY_WINDOW_STATE) strcat(eb, "OVLY_WINDOW_STATE+"); if (c & MCI_OVLY_WINDOW_TEXT) strcat(eb, "OVLY_WINDOW_TEXT+"); if (c & MCI_OVLY_WINDOW_ENABLE_STRETCH) strcat(eb, "OVLY_WINDOW_ENABLE_STRETCH+"); if (c & MCI_OVLY_WINDOW_DISABLE_STRETCH) strcat(eb, "OVLY_WINDOW_DISABLE_STRETCH+"); if (c & MCI_OVLY_WINDOW_DEFAULT) strcat(eb, "OVLY_WINDOW_DEFAULT+"); if (c & MCI_OVLY_RECT) strcat(eb, "OVLY_RECT+"); if (c & MCI_OVLY_PUT_SOURCE) strcat(eb, "OVLY_PUT_SOURCE+"); if (c & MCI_OVLY_PUT_DESTINATION) strcat(eb, "OVLY_PUT_DESTINATION+"); if (c & MCI_OVLY_PUT_FRAME) strcat(eb, "OVLY_PUT_FRAME+"); if (c & MCI_OVLY_PUT_VIDEO) strcat(eb, "OVLY_PUT_VIDEO+"); if (c & MCI_OVLY_WHERE_SOURCE) strcat(eb, "OVLY_WHERE_SOURCE+"); if (c & MCI_OVLY_WHERE_DESTINATION) strcat(eb, "OVLY_WHERE_DESTINATION+"); if (c & MCI_OVLY_WHERE_FRAME) strcat(eb, "OVLY_WHERE_FRAME+"); if (c & MCI_OVLY_WHERE_VIDEO) strcat(eb, "OVLY_WHERE_VIDEO+"); */ l=strlen(eb); if (l>strlen("MCI_")) eb[l-1]=0; // delete last '+' if any else strcpy(eb,"NULL"); return(eb); } char *ExplainRegType(DWORD c) { char *Captions[12]={ "REG_NONE", "REG_SZ", "REG_EXPAND_SZ", "REG_BINARY", "REG_DWORD", "REG_DWORD_BIG_ENDIAN", "REG_LINK", "REG_MULTI_SZ", "REG_RESOURCE_LIST", "REG_FULL_RESOURCE_DESCRIPTOR", "REG_RESOURCE_REQUIREMENTS_LIST", "REG_QWORD"}; if (c>=0 && c<12) return Captions[c]; return "???"; } char *ExplainDCType(DWORD c) { char *Captions[GDI_OBJ_LAST+1]={ "NULL", "OBJ_PEN", "OBJ_BRUSH", "OBJ_DC", "OBJ_METADC", "OBJ_PAL", "OBJ_FONT", "OBJ_BITMAP", "OBJ_REGION", "OBJ_METAFILE", "OBJ_MEMDC", "OBJ_EXTPEN", "OBJ_ENHMETADC", "OBJ_ENHMETAFILE", "OBJ_COLORSPACE"}; if (c>=0 && c<=GDI_OBJ_LAST) return Captions[c]; return "???"; } char *ExplainPeekRemoveMsg(DWORD c) { static char eb[128]; strcpy(eb, (c & PM_REMOVE) ? "PM_REMOVE" : "PM_NOREMOVE"); if(c & PM_NOYIELD) strcat(eb, "+NOYIELD"); c >>= 16; if(c & QS_MOUSEMOVE) strcat(eb, "+MOUSEMOVE"); if(c & QS_MOUSEBUTTON) strcat(eb, "+MOUSEBUTTON"); if(c & QS_KEY) strcat(eb, "+KEY"); if(c & QS_RAWINPUT) strcat(eb, "+RAWINPUT"); if(c & QS_PAINT) strcat(eb, "+PAINT"); if(c & QS_POSTMESSAGE) strcat(eb, "+POSTMESSAGE"); if(c & QS_HOTKEY) strcat(eb, "+HOTKEY"); if(c & QS_TIMER) strcat(eb, "+TIMER"); if(c & QS_SENDMESSAGE) strcat(eb, "+SENDMESSAGE"); if(c & QS_ALLPOSTMESSAGE) strcat(eb, "+ALLPOSTMESSAGE"); return(eb); } char *ExplainGetDCExFlags(DWORD c) { static char eb[128]; unsigned int l; strcpy(eb,"DCX_"); if(c & DCX_WINDOW) strcat(eb, "WINDOW+"); if(c & DCX_CACHE) strcat(eb, "CACHE+"); if(c & DCX_PARENTCLIP) strcat(eb, "PARENTCLIP+"); if(c & DCX_CLIPSIBLINGS) strcat(eb, "CLIPSIBLINGS+"); if(c & DCX_CLIPCHILDREN) strcat(eb, "CLIPCHILDREN+"); if(c & DCX_NORESETATTRS) strcat(eb, "NORESETATTRS+"); if(c & DCX_EXCLUDERGN) strcat(eb, "EXCLUDERGN+"); if(c & DCX_EXCLUDEUPDATE) strcat(eb, "EXCLUDEUPDATE+"); if(c & DCX_INTERSECTRGN) strcat(eb, "INTERSECTRGN+"); if(c & DCX_INTERSECTUPDATE) strcat(eb, "INTERSECTUPDATE+"); if(c & DCX_VALIDATE) strcat(eb, "VALIDATE+"); l=strlen(eb); if (l>strlen("DCX_")) eb[l-1]=0; // delete last '+' if any else strcpy(eb,"NULL"); return(eb); } char *ExplainPaletteUse(UINT uUsage) { char *eb = "SYSPAL_ERROR"; switch(uUsage){ case SYSPAL_STATIC: eb="SYSPAL_STATIC"; break; case SYSPAL_NOSTATIC: eb="SYSPAL_NOSTATIC"; break; case SYSPAL_NOSTATIC256: eb="SYSPAL_NOSTATIC256"; break; } return eb; } char *ExplainRasterCaps(DWORD c) { static char eb[256]; unsigned int l; strcpy(eb,"RC_"); if(c & RC_BITBLT) strcat(eb, "BITBLT+"); if(c & RC_BANDING) strcat(eb, "BANDING+"); if(c & RC_SCALING) strcat(eb, "SCALING+"); if(c & RC_BITMAP64) strcat(eb, "BITMAP64+"); if(c & RC_GDI20_OUTPUT) strcat(eb, "GDI20_OUTPUT+"); if(c & RC_GDI20_STATE) strcat(eb, "GDI20_STATE+"); if(c & RC_SAVEBITMAP) strcat(eb, "SAVEBITMAP+"); if(c & RC_DI_BITMAP) strcat(eb, "DI_BITMAP+"); if(c & RC_PALETTE) strcat(eb, "PALETTE+"); if(c & RC_DIBTODEV) strcat(eb, "DIBTODEV+"); if(c & RC_BIGFONT) strcat(eb, "BIGFONT+"); if(c & RC_STRETCHBLT) strcat(eb, "STRETCHBLT+"); if(c & RC_FLOODFILL) strcat(eb, "FLOODFILL+"); if(c & RC_STRETCHDIB) strcat(eb, "STRETCHDIB+"); if(c & RC_OP_DX_OUTPUT) strcat(eb, "OP_DX_OUTPUT+"); if(c & RC_DEVBITS) strcat(eb, "DEVBITS+"); l=strlen(eb); if (l>strlen("RC_")) eb[l-1]=0; // delete last '+' if any else strcpy(eb,"NULL"); return(eb); } char *ExplainD3DRenderState(DWORD c) { char *p; if((c>=D3DRENDERSTATE_STIPPLEPATTERN00) && (c<=D3DRENDERSTATE_STIPPLEPATTERN31)) p="STIPPLEPATTERNnn"; else if((c>=D3DRENDERSTATE_WRAP0) && (c<=D3DRENDERSTATE_WRAP7)) p="WRAPn"; else switch(c){ case D3DRENDERSTATE_ANTIALIAS: p="ANTIALIAS"; break; case D3DRENDERSTATE_TEXTUREPERSPECTIVE: p="TEXTUREPERSPECTIVE"; break; case D3DRENDERSTATE_ZENABLE: p="ZENABLE"; break; case D3DRENDERSTATE_FILLMODE: p="FILLMODE"; break; case D3DRENDERSTATE_SHADEMODE: p="SHADEMODE"; break; case D3DRENDERSTATE_LINEPATTERN: p="LINEPATTERN"; break; case D3DRENDERSTATE_ZWRITEENABLE: p="ZWRITEENABLE"; break; case D3DRENDERSTATE_ALPHATESTENABLE: p="ALPHATESTENABLE"; break; case D3DRENDERSTATE_LASTPIXEL: p="LASTPIXEL"; break; case D3DRENDERSTATE_SRCBLEND: p="SRCBLEND"; break; case D3DRENDERSTATE_DESTBLEND: p="DESTBLEND"; break; case D3DRENDERSTATE_CULLMODE: p="CULLMODE"; break; case D3DRENDERSTATE_ZFUNC: p="ZFUNC"; break; case D3DRENDERSTATE_ALPHAREF: p="ALPHAREF"; break; case D3DRENDERSTATE_ALPHAFUNC: p="ALPHAFUNC"; break; case D3DRENDERSTATE_DITHERENABLE: p="DITHERENABLE"; break; case D3DRENDERSTATE_ALPHABLENDENABLE: p="ALPHABLENDENABLE"; break; case D3DRENDERSTATE_FOGENABLE: p="FOGENABLE"; break; case D3DRENDERSTATE_SPECULARENABLE: p="SPECULARENABLE"; break; case D3DRENDERSTATE_ZVISIBLE: p="ZVISIBLE"; break; case D3DRENDERSTATE_STIPPLEDALPHA: p="STIPPLEDALPHA"; break; case D3DRENDERSTATE_FOGCOLOR: p="FOGCOLOR"; break; case D3DRENDERSTATE_FOGTABLEMODE: p="FOGTABLEMODE"; break; case D3DRENDERSTATE_FOGSTART: p="FOGSTART"; break; case D3DRENDERSTATE_FOGEND: p="FOGEND"; break; case D3DRENDERSTATE_FOGDENSITY: p="FOGDENSITY"; break; case D3DRENDERSTATE_EDGEANTIALIAS: p="EDGEANTIALIAS"; break; case D3DRENDERSTATE_COLORKEYENABLE: p="COLORKEYENABLE"; break; case D3DRENDERSTATE_STENCILENABLE: p="STENCILENABLE"; break; case D3DRENDERSTATE_ZBIAS: p="ZBIAS"; break; case D3DRENDERSTATE_RANGEFOGENABLE: p="RANGEFOGENABLE"; break; case D3DRENDERSTATE_STENCILFAIL: p="STENCILFAIL"; break; case D3DRENDERSTATE_STENCILZFAIL: p="STENCILZFAIL"; break; case D3DRENDERSTATE_STENCILPASS: p="STENCILPASS"; break; case D3DRENDERSTATE_STENCILFUNC: p="STENCILFUNC"; break; case D3DRENDERSTATE_STENCILREF: p="STENCILREF"; break; case D3DRENDERSTATE_STENCILMASK: p="STENCILMASK"; break; case D3DRENDERSTATE_STENCILWRITEMASK: p="STENCILWRITEMASK"; break; case D3DRENDERSTATE_TEXTUREFACTOR: p="TEXTUREFACTOR"; break; case D3DRENDERSTATE_CLIPPING: p="CLIPPING"; break; case D3DRENDERSTATE_LIGHTING: p="LIGHTING"; break; case D3DRENDERSTATE_EXTENTS: p="EXTENTS"; break; case D3DRENDERSTATE_AMBIENT: p="AMBIENT"; break; case D3DRENDERSTATE_FOGVERTEXMODE: p="FOGVERTEXMODE"; break; case D3DRENDERSTATE_COLORVERTEX: p="COLORVERTEX"; break; case D3DRENDERSTATE_LOCALVIEWER: p="LOCALVIEWER"; break; case D3DRENDERSTATE_NORMALIZENORMALS: p="NORMALIZENORMALS"; break; case D3DRENDERSTATE_COLORKEYBLENDENABLE: p="COLORKEYBLENDENABLE"; break; case D3DRENDERSTATE_DIFFUSEMATERIALSOURCE: p="DIFFUSEMATERIALSOURCE"; break; case D3DRENDERSTATE_SPECULARMATERIALSOURCE: p="SPECULARMATERIALSOURCE"; break; case D3DRENDERSTATE_AMBIENTMATERIALSOURCE: p="AMBIENTMATERIALSOURCE"; break; case D3DRENDERSTATE_EMISSIVEMATERIALSOURCE: p="EMISSIVEMATERIALSOURCE"; break; case D3DRENDERSTATE_VERTEXBLEND: p="VERTEXBLEND"; break; case D3DRENDERSTATE_CLIPPLANEENABLE: p="CLIPPLANEENABLE"; break; // unsupported legacy case D3DRENDERSTATE_TEXTUREHANDLE: p="TEXTUREHANDLE"; break; case D3DRENDERSTATE_TEXTUREADDRESS: p="TEXTUREADDRESS"; break; case D3DRENDERSTATE_WRAPU: p="WRAPU"; break; case D3DRENDERSTATE_WRAPV: p="WRAPV"; break; case D3DRENDERSTATE_MONOENABLE: p="MONOENABLE"; break; case D3DRENDERSTATE_ROP2: p="ROP2"; break; case D3DRENDERSTATE_PLANEMASK: p="PLANEMASK"; break; case D3DRENDERSTATE_TEXTUREMAG: p="TEXTUREMAG"; break; case D3DRENDERSTATE_TEXTUREMIN: p="TEXTUREMIN"; break; case D3DRENDERSTATE_TEXTUREMAPBLEND: p="TEXTUREMAPBLEND"; break; case D3DRENDERSTATE_SUBPIXEL: p="SUBPIXEL"; break; case D3DRENDERSTATE_SUBPIXELX: p="SUBPIXELX"; break; case D3DRENDERSTATE_STIPPLEENABLE: p="STIPPLEENABLE"; break; case D3DRENDERSTATE_BORDERCOLOR: p="BORDERCOLOR"; break; case D3DRENDERSTATE_TEXTUREADDRESSU: p="TEXTUREADDRESSU"; break; case D3DRENDERSTATE_TEXTUREADDRESSV: p="TEXTUREADDRESSV"; break; case D3DRENDERSTATE_MIPMAPLODBIAS: p="MIPMAPLODBIAS"; break; case D3DRENDERSTATE_ANISOTROPY: p="ANISOTROPY"; break; case D3DRENDERSTATE_FLUSHBATCH: p="FLUSHBATCH"; break; case D3DRENDERSTATE_FORCE_DWORD: p="FORCE_DWORD"; break; default: p="???"; break; } return p; } char *ExplainRenderstateValue(DWORD Value) { char *p; switch(Value){ case D3DCMP_NEVER : p="D3DCMP_NEVER"; break; case D3DCMP_LESS : p="D3DCMP_LESS"; break; case D3DCMP_EQUAL : p="D3DCMP_EQUAL"; break; case D3DCMP_LESSEQUAL : p="D3DCMP_LESSEQUAL"; break; case D3DCMP_GREATER : p="D3DCMP_GREATER"; break; case D3DCMP_NOTEQUAL : p="D3DCMP_NOTEQUAL"; break; case D3DCMP_GREATEREQUAL : p="D3DCMP_GREATEREQUAL"; break; case D3DCMP_ALWAYS : p="D3DCMP_ALWAYS"; break; default : p="???"; break; } return p; } char *ExplainWfPFlags(DWORD c) { static char eb[128]; unsigned int l; strcpy(eb,"CWP_"); if(c & CWP_SKIPDISABLED) strcat(eb, "SKIPDISABLED+"); if(c & CWP_SKIPINVISIBLE) strcat(eb, "SKIPINVISIBLE+"); if(c & CWP_SKIPTRANSPARENT) strcat(eb, "SKIPTRANSPARENT+"); l=strlen(eb); if (l>strlen("CWP_")) eb[l-1]=0; // delete last '+' if any else strcpy(eb,"CWP_ALL"); return(eb); } char *ExplainChangeDisplaySettingsFlags(DWORD c) { static char eb[128]; unsigned int l; strcpy(eb,"CDS_"); if(c & CDS_UPDATEREGISTRY) strcat(eb, "UPDATEREGISTRY+"); if(c & CDS_TEST) strcat(eb, "TEST+"); if(c & CDS_FULLSCREEN) strcat(eb, "FULLSCREEN+"); if(c & CDS_GLOBAL) strcat(eb, "GLOBAL+"); if(c & CDS_SET_PRIMARY) strcat(eb, "SET_PRIMARY+"); if(c & CDS_VIDEOPARAMETERS) strcat(eb, "VIDEOPARAMETERS+"); if(c & CDS_ENABLE_UNSAFE_MODES) strcat(eb, "ENABLE_UNSAFE_MODES+"); if(c & CDS_DISABLE_UNSAFE_MODES) strcat(eb, "DISABLE_UNSAFE_MODES+"); if(c & CDS_RESET) strcat(eb, "RESET+"); if(c & CDS_NORESET) strcat(eb, "NORESET+"); l=strlen(eb); if (l>strlen("CDS_")) eb[l-1]=0; // delete last '+' if any else strcpy(eb,"NULL"); return(eb); } char *ExplainDICooperativeFlags(DWORD c) { static char eb[128]; unsigned int l; strcpy(eb,"DISCL_"); if(c & DISCL_EXCLUSIVE) strcat(eb, "EXCLUSIVE+"); if(c & DISCL_NONEXCLUSIVE) strcat(eb, "NONEXCLUSIVE+"); if(c & DISCL_FOREGROUND) strcat(eb, "FOREGROUND+"); if(c & DISCL_BACKGROUND) strcat(eb, "BACKGROUND+"); if(c & DISCL_NOWINKEY) strcat(eb, "NOWINKEY+"); l=strlen(eb); if (l>strlen("DISCL_")) eb[l-1]=0; // delete last '+' if any else strcpy(eb,"NULL"); return(eb); } char *ExplainRegionType(DWORD c) { static char *sRetCodes[4]={"ERROR", "NULLREGION", "SIMPLEREGION", "COMPLEXREGION"}; if(c<4) return sRetCodes[c]; return "unknown"; } char *ExplainZBufferBitDepths(DWORD c) { static char eb[128]; unsigned int l; strcpy(eb,"DDBD_"); if(c & DDBD_8) strcat(eb, "8+"); if(c & DDBD_16) strcat(eb, "16+"); if(c & DDBD_24) strcat(eb, "24+"); if(c & DDBD_32) strcat(eb, "32+"); l=strlen(eb); if (l>strlen("DDBD_")) eb[l-1]=0; // delete last '+' if any else strcpy(eb,"NULL"); return(eb); } #define _FACD3D 0x876 #define MAKE_D3DHRESULT( code ) MAKE_HRESULT( 1, _FACD3D, code ) #define MAKE_D3DSTATUS( code ) MAKE_HRESULT( 0, _FACD3D, code ) #define D3DERR_DRIVERINTERNALERROR MAKE_D3DHRESULT(2087) #define D3DERR_NOTFOUND MAKE_D3DHRESULT(2150) #define D3DERR_MOREDATA MAKE_D3DHRESULT(2151) #define D3DERR_DEVICELOST MAKE_D3DHRESULT(2152) #define D3DERR_DEVICENOTRESET MAKE_D3DHRESULT(2153) #define D3DERR_NOTAVAILABLE MAKE_D3DHRESULT(2154) #define D3DERR_OUTOFVIDEOMEMORY MAKE_D3DHRESULT(380) #define D3DERR_INVALIDDEVICE MAKE_D3DHRESULT(2155) #define D3DERR_INVALIDCALL MAKE_D3DHRESULT(2156) #define D3DERR_DRIVERINVALIDCALL MAKE_D3DHRESULT(2157) #define D3DERR_WASSTILLDRAWING MAKE_D3DHRESULT(540) #define D3DOK_NOAUTOGEN MAKE_D3DSTATUS(2159) #define D3DERR_DEVICEREMOVED MAKE_D3DHRESULT(2160) #define S_NOT_RESIDENT MAKE_D3DSTATUS(2165) #define S_RESIDENT_IN_SHARED_MEMORY MAKE_D3DSTATUS(2166) #define S_PRESENT_MODE_CHANGED MAKE_D3DSTATUS(2167) #define S_PRESENT_OCCLUDED MAKE_D3DSTATUS(2168) #define D3DERR_DEVICEHUNG MAKE_D3DHRESULT(2164) #define D3DERR_UNSUPPORTEDOVERLAY MAKE_D3DHRESULT(2171) #define D3DERR_UNSUPPORTEDOVERLAYFORMAT MAKE_D3DHRESULT(2172) #define D3DERR_CANNOTPROTECTCONTENT MAKE_D3DHRESULT(2173) #define D3DERR_UNSUPPORTEDCRYPTO MAKE_D3DHRESULT(2174) #define D3DERR_PRESENT_STATISTICS_DISJOINT MAKE_D3DHRESULT(2180) char *ExplainDDError(DWORD c) { static char *eb; switch(c) { case DD_OK: eb="DD_OK"; break; case DDERR_ALREADYINITIALIZED: eb="DDERR_ALREADYINITIALIZED"; break; case DDERR_BLTFASTCANTCLIP: eb="DDERR_BLTFASTCANTCLIP"; break; case DDERR_CANNOTATTACHSURFACE: eb="DDERR_CANNOTATTACHSURFACE"; break; case DDERR_CANNOTDETACHSURFACE: eb="DDERR_CANNOTDETACHSURFACE"; break; case DDERR_CANTCREATEDC: eb="DDERR_CANTCREATEDC"; break; case DDERR_CANTDUPLICATE: eb="DDERR_CANTDUPLICATE"; break; case DDERR_CANTLOCKSURFACE: eb="DDERR_CANTLOCKSURFACE"; break; case DDERR_CANTPAGELOCK: eb="DDERR_CANTPAGELOCK"; break; case DDERR_CANTPAGEUNLOCK: eb="DDERR_CANTPAGEUNLOCK"; break; case DDERR_CLIPPERISUSINGHWND: eb="DDERR_CLIPPERISUSINGHWND"; break; case DDERR_COLORKEYNOTSET: eb="DDERR_COLORKEYNOTSET"; break; case DDERR_CURRENTLYNOTAVAIL: eb="DDERR_CURRENTLYNOTAVAIL"; break; case DDERR_DCALREADYCREATED: eb="DDERR_DCALREADYCREATED"; break; case DDERR_DEVICEDOESNTOWNSURFACE: eb="DDERR_DEVICEDOESNTOWNSURFACE"; break; case DDERR_DIRECTDRAWALREADYCREATED: eb="DDERR_DIRECTDRAWALREADYCREATED"; break; case DDERR_EXCEPTION: eb="DDERR_EXCEPTION"; break; case DDERR_EXCLUSIVEMODEALREADYSET: eb="DDERR_EXCLUSIVEMODEALREADYSET"; break; case DDERR_EXPIRED: eb="DDERR_EXPIRED"; break; case DDERR_GENERIC: eb="DDERR_GENERIC"; break; case DDERR_HEIGHTALIGN: eb="DDERR_HEIGHTALIGN"; break; case DDERR_HWNDALREADYSET: eb="DDERR_HWNDALREADYSET"; break; case DDERR_HWNDSUBCLASSED: eb="DDERR_HWNDSUBCLASSED"; break; case DDERR_IMPLICITLYCREATED: eb="DDERR_IMPLICITLYCREATED"; break; case DDERR_INCOMPATIBLEPRIMARY: eb="DDERR_INCOMPATIBLEPRIMARY"; break; case DDERR_INVALIDCAPS: eb="DDERR_INVALIDCAPS"; break; case DDERR_INVALIDCLIPLIST: eb="DDERR_INVALIDCLIPLIST"; break; case DDERR_INVALIDDIRECTDRAWGUID: eb="DDERR_INVALIDDIRECTDRAWGUID"; break; case DDERR_INVALIDMODE: eb="DDERR_INVALIDMODE"; break; case DDERR_INVALIDOBJECT: eb="DDERR_INVALIDOBJECT"; break; case DDERR_INVALIDPARAMS: eb="DDERR_INVALIDPARAMS"; break; case DDERR_INVALIDPIXELFORMAT: eb="DDERR_INVALIDPIXELFORMAT"; break; case DDERR_INVALIDPOSITION: eb="DDERR_INVALIDPOSITION"; break; case DDERR_INVALIDRECT: eb="DDERR_INVALIDRECT"; break; case DDERR_INVALIDSTREAM: eb="DDERR_INVALIDSTREAM"; break; case DDERR_INVALIDSURFACETYPE: eb="DDERR_INVALIDSURFACETYPE"; break; case DDERR_LOCKEDSURFACES: eb="DDERR_LOCKEDSURFACES"; break; case DDERR_MOREDATA: eb="DDERR_MOREDATA"; break; case DDERR_NO3D: eb="DDERR_NO3D"; break; case DDERR_NOALPHAHW: eb="DDERR_NOALPHAHW"; break; case DDERR_NOBLTHW: eb="DDERR_NOBLTHW"; break; case DDERR_NOCLIPLIST: eb="DDERR_NOCLIPLIST"; break; case DDERR_NOCLIPPERATTACHED: eb="DDERR_NOCLIPPERATTACHED"; break; case DDERR_NOCOLORCONVHW: eb="DDERR_NOCOLORCONVHW"; break; case DDERR_NOCOLORKEY: eb="DDERR_NOCOLORKEY"; break; case DDERR_NOCOLORKEYHW: eb="DDERR_NOCOLORKEYHW"; break; case DDERR_NOCOOPERATIVELEVELSET: eb="DDERR_NOCOOPERATIVELEVELSET"; break; case DDERR_NODC: eb="DDERR_NODC"; break; case DDERR_NODDROPSHW: eb="DDERR_NODDROPSHW"; break; case DDERR_NODIRECTDRAWHW: eb="DDERR_NODIRECTDRAWHW"; break; case DDERR_NODIRECTDRAWSUPPORT: eb="DDERR_NODIRECTDRAWSUPPORT"; break; case DDERR_NOEMULATION: eb="DDERR_NOEMULATION"; break; case DDERR_NOEXCLUSIVEMODE: eb="DDERR_NOEXCLUSIVEMODE"; break; case DDERR_NOFLIPHW: eb="DDERR_NOFLIPHW"; break; case DDERR_NOFOCUSWINDOW: eb="DDERR_NOFOCUSWINDOW"; break; case DDERR_NOGDI: eb="DDERR_NOGDI"; break; case DDERR_NOHWND: eb="DDERR_NOHWND"; break; case DDERR_NOMIPMAPHW: eb="DDERR_NOMIPMAPHW"; break; case DDERR_NOMIRRORHW: eb="DDERR_NOMIRRORHW"; break; case DDERR_NONONLOCALVIDMEM: eb="DDERR_NONONLOCALVIDMEM"; break; case DDERR_NOOPTIMIZEHW: eb="DDERR_NOOPTIMIZEHW"; break; case DDERR_NOOVERLAYDEST: eb="DDERR_NOOVERLAYDEST"; break; case DDERR_NOOVERLAYHW: eb="DDERR_NOOVERLAYHW"; break; case DDERR_NOPALETTEATTACHED: eb="DDERR_NOPALETTEATTACHED"; break; case DDERR_NOPALETTEHW: eb="DDERR_NOPALETTEHW"; break; case DDERR_NORASTEROPHW: eb="DDERR_NORASTEROPHW"; break; case DDERR_NOROTATIONHW: eb="DDERR_NOROTATIONHW"; break; case DDERR_NOSTRETCHHW: eb="DDERR_NOSTRETCHHW"; break; case DDERR_NOT4BITCOLOR: eb="DDERR_NOT4BITCOLOR"; break; case DDERR_NOT4BITCOLORINDEX: eb="DDERR_NOT4BITCOLORINDEX"; break; case DDERR_NOT8BITCOLOR: eb="DDERR_NOT8BITCOLOR"; break; case DDERR_NOTAOVERLAYSURFACE: eb="DDERR_NOTAOVERLAYSURFACE"; break; case DDERR_NOTEXTUREHW: eb="DDERR_NOTEXTUREHW"; break; case DDERR_NOTFLIPPABLE: eb="DDERR_NOTFLIPPABLE"; break; case DDERR_NOTFOUND: eb="DDERR_NOTFOUND"; break; case DDERR_NOTINITIALIZED: eb="DDERR_NOTINITIALIZED"; break; case DDERR_NOTLOADED: eb="DDERR_NOTLOADED"; break; case DDERR_NOTLOCKED: eb="DDERR_NOTLOCKED"; break; case DDERR_NOTPAGELOCKED: eb="DDERR_NOTPAGELOCKED"; break; case DDERR_NOTPALETTIZED: eb="DDERR_NOTPALETTIZED"; break; case DDERR_NOVSYNCHW: eb="DDERR_NOVSYNCHW"; break; case DDERR_NOZBUFFERHW: eb="DDERR_NOZBUFFERHW"; break; case DDERR_NOZOVERLAYHW: eb="DDERR_NOZOVERLAYHW"; break; case DDERR_OUTOFCAPS: eb="DDERR_OUTOFCAPS"; break; case DDERR_OUTOFMEMORY: eb="DDERR_OUTOFMEMORY"; break; case DDERR_OUTOFVIDEOMEMORY: eb="DDERR_OUTOFVIDEOMEMORY"; break; case DDERR_OVERLAPPINGRECTS: eb="DDERR_OVERLAPPINGRECTS"; break; case DDERR_OVERLAYCANTCLIP: eb="DDERR_OVERLAYCANTCLIP"; break; case DDERR_OVERLAYCOLORKEYONLYONEACTIVE:eb="DDERR_OVERLAYCOLORKEYONLYONEACTIVE"; break; case DDERR_OVERLAYNOTVISIBLE: eb="DDERR_OVERLAYNOTVISIBLE"; break; case DDERR_PALETTEBUSY: eb="DDERR_PALETTEBUSY"; break; case DDERR_PRIMARYSURFACEALREADYEXISTS: eb="DDERR_PRIMARYSURFACEALREADYEXISTS"; break; case DDERR_REGIONTOOSMALL: eb="DDERR_REGIONTOOSMALL"; break; case DDERR_SURFACEALREADYATTACHED: eb="DDERR_SURFACEALREADYATTACHED"; break; case DDERR_SURFACEALREADYDEPENDENT: eb="DDERR_SURFACEALREADYDEPENDENT"; break; case DDERR_SURFACEBUSY: eb="DDERR_SURFACEBUSY"; break; case DDERR_SURFACEISOBSCURED: eb="DDERR_SURFACEISOBSCURED"; break; case DDERR_SURFACELOST: eb="DDERR_SURFACELOST"; break; case DDERR_SURFACENOTATTACHED: eb="DDERR_SURFACENOTATTACHED"; break; case DDERR_TOOBIGHEIGHT: eb="DDERR_TOOBIGHEIGHT"; break; case DDERR_TOOBIGSIZE: eb="DDERR_TOOBIGSIZE"; break; case DDERR_TOOBIGWIDTH: eb="DDERR_TOOBIGWIDTH"; break; case DDERR_UNSUPPORTED: eb="DDERR_UNSUPPORTED"; break; case DDERR_UNSUPPORTEDFORMAT: eb="DDERR_UNSUPPORTEDFORMAT"; break; case DDERR_UNSUPPORTEDMASK: eb="DDERR_UNSUPPORTEDMASK"; break; case DDERR_UNSUPPORTEDMODE: eb="DDERR_UNSUPPORTEDMODE"; break; case DDERR_VERTICALBLANKINPROGRESS: eb="DDERR_VERTICALBLANKINPROGRESS"; break; case DDERR_VIDEONOTACTIVE: eb="DDERR_VIDEONOTACTIVE"; break; case DDERR_WASSTILLDRAWING: eb="DDERR_WASSTILLDRAWING"; break; case DDERR_WRONGMODE: eb="DDERR_WRONGMODE"; break; case DDERR_XALIGN: eb="DDERR_XALIGN"; break; case DDERR_NOTONMIPMAPSUBLEVEL: eb="DDERR_NOTONMIPMAPSUBLEVEL"; break; // D3D errors case D3DERR_WRONGTEXTUREFORMAT: eb="D3DERR_WRONGTEXTUREFORMAT"; break; case D3DERR_UNSUPPORTEDCOLOROPERATION: eb="D3DERR_UNSUPPORTEDCOLOROPERATION"; break; case D3DERR_UNSUPPORTEDCOLORARG: eb="D3DERR_UNSUPPORTEDCOLORARG"; break; case D3DERR_UNSUPPORTEDALPHAOPERATION: eb="D3DERR_UNSUPPORTEDALPHAOPERATION"; break; case D3DERR_UNSUPPORTEDALPHAARG: eb="D3DERR_UNSUPPORTEDALPHAARG"; break; case D3DERR_TOOMANYOPERATIONS: eb="D3DERR_TOOMANYOPERATIONS"; break; case D3DERR_CONFLICTINGTEXTUREFILTER: eb="D3DERR_CONFLICTINGTEXTUREFILTER"; break; case D3DERR_UNSUPPORTEDFACTORVALUE: eb="D3DERR_UNSUPPORTEDFACTORVALUE"; break; case D3DERR_CONFLICTINGRENDERSTATE: eb="D3DERR_CONFLICTINGRENDERSTATE"; break; case D3DERR_UNSUPPORTEDTEXTUREFILTER: eb="D3DERR_UNSUPPORTEDTEXTUREFILTER"; break; case D3DERR_CONFLICTINGTEXTUREPALETTE: eb="D3DERR_CONFLICTINGTEXTUREPALETTE"; break; case D3DERR_DRIVERINTERNALERROR: eb="D3DERR_DRIVERINTERNALERROR"; break; case D3DERR_NOTFOUND: eb="D3DERR_NOTFOUND"; break; case D3DERR_MOREDATA: eb="D3DERR_MOREDATA"; break; case D3DERR_DEVICELOST: eb="D3DERR_DEVICELOST"; break; case D3DERR_DEVICENOTRESET: eb="D3DERR_DEVICENOTRESET"; break; case D3DERR_NOTAVAILABLE: eb="D3DERR_NOTAVAILABLE"; break; //case D3DERR_OUTOFVIDEOMEMORY: eb="D3DERR_OUTOFVIDEOMEMORY"; break; case D3DERR_INVALIDDEVICE: eb="D3DERR_INVALIDDEVICE"; break; case D3DERR_INVALIDCALL: eb="D3DERR_INVALIDCALL"; break; case D3DERR_DRIVERINVALIDCALL: eb="D3DERR_DRIVERINVALIDCALL"; break; //case D3DERR_WASSTILLDRAWING: eb="D3DERR_WASSTILLDRAWING"; break; case D3DOK_NOAUTOGEN: eb="D3DOK_NOAUTOGEN"; break; case D3DERR_DEVICEREMOVED: eb="D3DERR_DEVICEREMOVED"; break; case D3DERR_DEVICEHUNG: eb="D3DERR_DEVICEHUNG"; break; case D3DERR_UNSUPPORTEDOVERLAY: eb="D3DERR_UNSUPPORTEDOVERLAY"; break; case D3DERR_UNSUPPORTEDOVERLAYFORMAT: eb="D3DERR_UNSUPPORTEDOVERLAYFORMAT"; break; case D3DERR_CANNOTPROTECTCONTENT: eb="D3DERR_CANNOTPROTECTCONTENT"; break; case D3DERR_UNSUPPORTEDCRYPTO: eb="D3DERR_UNSUPPORTEDCRYPTO"; break; case D3DERR_PRESENT_STATISTICS_DISJOINT:eb="D3DERR_PRESENT_STATISTICS_DISJOINT"; break; case D3DERR_INBEGIN: eb="D3DERR_INBEGIN"; break; case D3DERR_NOTINBEGIN: eb="D3DERR_NOTINBEGIN"; break; case D3DERR_NOVIEWPORTS: eb="D3DERR_NOVIEWPORTS"; break; case D3DERR_VIEWPORTDATANOTSET: eb="D3DERR_VIEWPORTDATANOTSET"; break; case D3DERR_VIEWPORTHASNODEVICE: eb="D3DERR_VIEWPORTHASNODEVICE"; break; case D3DERR_NOCURRENTVIEWPORT: eb="D3DERR_NOCURRENTVIEWPORT"; break; // DINPUT errors case DIERR_INPUTLOST: eb="DIERR_INPUTLOST"; break; //case DIERR_INVALIDPARAM: eb="DIERR_INVALIDPARAM"; break; case DIERR_NOTACQUIRED: eb="DIERR_NOTACQUIRED"; break; case DIERR_NOTINITIALIZED: eb="DIERR_NOTINITIALIZED"; break; case E_PENDING: eb="E_PENDING"; break; default: eb="unknown"; break; } return eb; } static char *sFourCC(DWORD fcc) { static char sRet[5]; char c; int i; char *t=&sRet[0]; for(i=0; i<4; i++){ c = fcc & (0xFF); *(t++) = isprint(c) ? c : '.'; fcc = fcc >> 8; } *t = 0; return sRet; } char *ExplainPixelFormat(LPDDPIXELFORMAT ddpfPixelFormat) { static char sBuf[512]; char sItem[256]; DWORD flags=ddpfPixelFormat->dwFlags; sprintf(sBuf, " PixelFormat flags=%x(%s) BPP=%d", flags, ExplainPixelFormatFlags(flags), ddpfPixelFormat->dwRGBBitCount); if (flags & DDPF_RGB) { if (flags & DDPF_ALPHAPIXELS) { sprintf(sItem, " RGBA=(%x,%x,%x,%x)", ddpfPixelFormat->dwRBitMask, ddpfPixelFormat->dwGBitMask, ddpfPixelFormat->dwBBitMask, ddpfPixelFormat->dwRGBAlphaBitMask); } else { sprintf(sItem, " RGB=(%x,%x,%x)", ddpfPixelFormat->dwRBitMask, ddpfPixelFormat->dwGBitMask, ddpfPixelFormat->dwBBitMask); } strcat(sBuf, sItem); } if (flags & DDPF_YUV) { sprintf(sItem, " YUVA=(%x,%x,%x,%x)", ddpfPixelFormat->dwYBitMask, ddpfPixelFormat->dwUBitMask, ddpfPixelFormat->dwVBitMask, ddpfPixelFormat->dwYUVAlphaBitMask); strcat(sBuf, sItem); } if (flags & DDPF_ZBUFFER) { sprintf(sItem, " SdZSbL=(%x,%x,%x,%x)", ddpfPixelFormat->dwStencilBitDepth, ddpfPixelFormat->dwZBitMask, ddpfPixelFormat->dwStencilBitMask, ddpfPixelFormat->dwLuminanceAlphaBitMask); strcat(sBuf, sItem); } if (flags & DDPF_ALPHA) { sprintf(sItem, " LBdBlZ=(%x,%x,%x,%x)", ddpfPixelFormat->dwLuminanceBitMask, ddpfPixelFormat->dwBumpDvBitMask, ddpfPixelFormat->dwBumpLuminanceBitMask, ddpfPixelFormat->dwRGBZBitMask); strcat(sBuf, sItem); } if (flags & DDPF_LUMINANCE) { sprintf(sItem, " BMbMF=(%x,%x,%x,%x)", ddpfPixelFormat->dwBumpDuBitMask, ddpfPixelFormat->MultiSampleCaps.wBltMSTypes, ddpfPixelFormat->MultiSampleCaps.wFlipMSTypes, ddpfPixelFormat->dwYUVZBitMask); strcat(sBuf, sItem); } if (flags & DDPF_BUMPDUDV) { sprintf(sItem, " O=(%x)", ddpfPixelFormat->dwOperations); strcat(sBuf, sItem); } if (flags & DDPF_FOURCC) { sprintf(sItem, " FourCC=%x(%s)", ddpfPixelFormat->dwFourCC, sFourCC(ddpfPixelFormat->dwFourCC)); strcat(sBuf, sItem); } return sBuf; } char *GetObjectTypeStr(HDC hdc) { char *s; switch (GetObjectType(hdc)){ case OBJ_PEN: s="PEN"; break; case OBJ_BRUSH: s="BRUSH"; break; case OBJ_DC: s="DC"; break; case OBJ_METADC: s="METADC"; break; case OBJ_PAL: s="PAL"; break; case OBJ_FONT: s="FONT"; break; case OBJ_BITMAP: s="BITMAP"; break; case OBJ_REGION: s="REGION"; break; case OBJ_METAFILE: s="METAFILE"; break; case OBJ_MEMDC: s="MEMDC"; break; case OBJ_EXTPEN: s="EXTPEN"; break; case OBJ_ENHMETADC: s="ENHMETADC"; break; case OBJ_ENHMETAFILE: s="ENHMETAFILE"; break; case OBJ_COLORSPACE: s="COLORSPACE"; break; default: s="unknown"; break; } return s; } ================================================ FILE: dll/dxhelper.h ================================================ // debug functions to make the log more readable extern void DumpRect(char *, LPRECT, int); extern char *ExplainFlags(DWORD); extern char *ExplainDDSCaps(DWORD); extern char *ExplainDDSCaps2(DWORD); extern char *ExplainDDSCaps3(DWORD); extern char *ExplainDDSCaps4(DWORD); extern char *ExplainDDDCaps(DWORD); extern char *ExplainDDDCaps2(DWORD); extern char *ExplainDDPalCaps(DWORD); extern char *ExplainDDFXALPHACaps(DWORD); extern char *ExplainDDFXCaps(DWORD); extern char *ExplainDDCKeyCaps(DWORD); extern char *ExplainCoopFlags(DWORD); extern char *ExplainPixelFormatFlags(DWORD); extern char *ExplainFlipFlags(DWORD); extern char *ExplainBltFlags(DWORD); extern char *ExplainBltFastFlags(DWORD); extern char *ExplainCreatePaletteFlags(DWORD); extern char *ExplainLockFlags(DWORD); extern char *ExplainStyle(DWORD); extern char *ExplainExStyle(DWORD); extern char *ExplainShowCmd(int); extern char *ExplainBltStatus(DWORD); extern char *ExplainFlipStatus(DWORD); extern char *ExplainDDError(DWORD); extern char *ExplainWinMessage(DWORD); extern char *ExplainResizing(DWORD); extern char *ExplainDeviceCaps(DWORD); extern char *ExplainDisplaySettingsRetcode(DWORD); extern char *ExplainSetWindowIndex(DWORD); extern char *ExplainColorKeyFlag(DWORD); extern char *ExplainGUID(GUID FAR *); extern char *ExplainROP(DWORD); extern char *ExplainNChitTest(DWORD); extern char *ExplainDDEnumerateFlags(DWORD); extern char *ExplainsSystemMetrics(DWORD); extern char *ExplainWPFlags(DWORD); extern char *ExplainLoadLibFlags(DWORD); extern char *ExplainDevModeFields(DWORD); extern char *ExplainMCICommands(DWORD); extern char *ExplainMCIFlags(DWORD, DWORD); extern char *ExplainRegType(DWORD); extern char *ExplainDCType(DWORD); extern char *ExplainPeekRemoveMsg(DWORD); extern char *ExplainGetDCExFlags(DWORD); extern char *ExplainPaletteUse(UINT); extern char *ExplainRasterCaps(DWORD); extern char *ExplainD3DRenderState(DWORD); extern char *ExplainRenderstateValue(DWORD); extern char *ExplainWfPFlags(DWORD); extern char *ExplainChangeDisplaySettingsFlags(DWORD); extern char *ExplainDICooperativeFlags(DWORD); extern char *ExplainRegionType(DWORD); extern char *ExplainPixelFormat(LPDDPIXELFORMAT); extern char *ExplainZBufferBitDepths(DWORD); extern char *GetObjectTypeStr(HDC); extern char *ExplainD3DSurfaceFormat(DWORD); ================================================ FILE: dll/dxhook.cpp ================================================ #define _WIN32_WINNT 0x0600 #define WIN32_LEAN_AND_MEAN #define _CRT_SECURE_NO_DEPRECATE 1 #include #include #include #include #include #include "dxwnd.h" #include "dxwcore.hpp" #include "shareddc.hpp" #include "dxhook.h" #include "glhook.h" #include "glidehook.h" #include "msvfwhook.h" #define DXWDECLARATIONS 1 #include "syslibs.h" #undef DXWDECLARATIONS #include "dxhelper.h" #include "Ime.h" #include "Winnls32.h" #include "Mmsystem.h" #include "disasm.h" #include "MinHook.h" #define SKIPIMEWINDOW TRUE dxwCore dxw; dxwSStack dxwss; dxwWStack dxwws; dxwSDC sdc; dxwFStack fontdb; GetWindowLong_Type pGetWindowLong; SetWindowLong_Type pSetWindowLong; HWND hTrayWnd; extern LRESULT CALLBACK MessageHook(int, WPARAM, LPARAM); extern DWORD WINAPI CpuLimit(LPVOID); extern DWORD WINAPI CpuSlow(LPVOID); extern HMODULE SysLibs[]; typedef char *(*Geterrwarnmessage_Type)(unsigned long, unsigned long); typedef int (*Preparedisasm_Type)(void); typedef void (*Finishdisasm_Type)(void); typedef unsigned long (*Disasm_Type)(const unsigned char *, unsigned long, unsigned long, t_disasm *, int, t_config *, int (*)(tchar *, unsigned long)); Geterrwarnmessage_Type pGeterrwarnmessage; Preparedisasm_Type pPreparedisasm; Finishdisasm_Type pFinishdisasm; Disasm_Type pDisasm; extern void InitScreenParameters(int); extern void *HotPatch(void *, const char *, void *); extern void *IATPatchDefault(HMODULE, DWORD, char *, void *, const char *, void *); extern void *IATPatchSequential(HMODULE, DWORD, char *, void *, const char *, void *); typedef void * (*IATPatch_Type)(HMODULE, DWORD, char *, void *, const char *, void *); extern void DumpImportTableDefault(HMODULE); extern void DumpImportTableSequential(HMODULE); typedef void (*DumpImportTable_Type)(HMODULE); IATPatch_Type IATPatch; DumpImportTable_Type DumpImportTable; extern BOOL IsIATSequential(HMODULE); void HookModule(HMODULE, int); void RecoverScreenMode(); static void LockScreenMode(DWORD, DWORD, DWORD); extern HANDLE hTraceMutex; CRITICAL_SECTION TraceCS; char *GetDxWndPath() { static BOOL DoOnce = TRUE; static char sFolderPath[MAX_PATH]; if(DoOnce){ DWORD dwAttrib; dwAttrib = GetFileAttributes("dxwnd.dll"); //if (dwAttrib != INVALID_FILE_ATTRIBUTES && !(dwAttrib & FILE_ATTRIBUTE_DIRECTORY)) { // MessageBox(0, "DXWND: ERROR can't locate itself", "ERROR", MB_OK | MB_ICONEXCLAMATION); // exit(0); //} GetModuleFileName(GetModuleHandle("dxwnd"), sFolderPath, MAX_PATH); sFolderPath[strlen(sFolderPath)-strlen("dxwnd.dll")] = 0; // terminate the string just before "dxwnd.dll" DoOnce = FALSE; } return sFolderPath; } static void OutTraceHeader(FILE *fp, DWORD tflags) { SYSTEMTIME Time; char Version[20+1]; int i; DWORD dword; GetLocalTime(&Time); GetDllVersion(Version); fprintf(fp, "*** DxWnd %s log BEGIN: %02d-%02d-%04d %02d:%02d:%02d ***\n", Version, Time.wDay, Time.wMonth, Time.wYear, Time.wHour, Time.wMinute, Time.wSecond); fprintf(fp, "*** Flags= "); for(i=0, dword=dxw.dwFlags1; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", GetFlagCaption(0,i)); for(i=0, dword=dxw.dwFlags2; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", GetFlagCaption(1,i)); for(i=0, dword=dxw.dwFlags3; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", GetFlagCaption(2,i)); for(i=0, dword=dxw.dwFlags4; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", GetFlagCaption(3,i)); for(i=0, dword=dxw.dwFlags5; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", GetFlagCaption(4,i)); for(i=0, dword=dxw.dwFlags6; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", GetFlagCaption(5,i)); for(i=0, dword=dxw.dwFlags7; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", GetFlagCaption(6,i)); for(i=0, dword=dxw.dwFlags8; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", GetFlagCaption(7,i)); for(i=0, dword=dxw.dwFlags9; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", GetFlagCaption(8,i)); for(i=0, dword=dxw.dwFlags10;i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", GetFlagCaption(9,i)); for(i=0, dword=tflags ; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", GetFlagCaption(10,i)); fprintf(fp, "***\n"); } #define DXWMAXLOGSIZE 4096 void OutTrace(const char *format, ...) { va_list al; static char path[MAX_PATH]; static FILE *fp=NULL; // GHO: thread safe??? char sBuf[DXWMAXLOGSIZE+1]; DWORD tFlags; static GetTickCount_Type pGetTick; // check global log flag if(!(dxw.dwTFlags & (OUTTRACE|OUTDEBUGSTRING))) return; tFlags = dxw.dwTFlags; dxw.dwTFlags = 0x0; // to avoid possible log recursion while loading C runtime libraries!!! WaitForSingleObject(hTraceMutex, INFINITE); if (fp == NULL){ char *OpenMode = (tFlags & ERASELOGFILE) ? "w+" : "a+"; pGetTick = GetTickCount; // save function pointer GetCurrentDirectory(MAX_PATH, path); if(tFlags & OUTSEPARATED){ char *p = path + strlen(path); strcat(path, "\\dxwnd.log"); if(fp = fopen(path, "r")){ fclose(fp); for (int i=1; ; i++){ sprintf(p, "\\dxwnd(%d).log", i); if(fp = fopen(path, "r")) fclose(fp); else break; } } } else { strcat(path, "\\dxwnd.log"); } fp = fopen(path, OpenMode); if (fp==NULL){ // in case of error (e.g. current dir on unwritable CD unit)... strcpy(path, GetDxWndPath()); strcat(path, "\\dxwnd.log"); fp = fopen(path, OpenMode); } if (fp==NULL) return; // last chance: do not log... else OutTraceHeader(fp, tFlags); } va_start(al, format); //vfprintf(fp, format, al); vsprintf_s(sBuf, DXWMAXLOGSIZE, format, al); sBuf[DXWMAXLOGSIZE]=0; // just in case of log truncation va_end(al); if(tFlags & OUTTRACE) { if(tFlags & ADDTIMESTAMP) { DWORD tCount = (*pGetTick)(); if (tFlags & ADDRELATIVETIME){ static DWORD tLastCount = 0; DWORD tNow; tNow = tCount; tCount = tLastCount ? (tCount - tLastCount) : 0; tLastCount = tNow; } fprintf(fp, "%08.8d: ", tCount); } fputs(sBuf, fp); fflush(fp); } if(tFlags & OUTDEBUGSTRING) OutputDebugString(sBuf); ReleaseMutex(hTraceMutex); dxw.dwTFlags = tFlags; // restore settings } void HexTrace(unsigned char *buf, int len) { char line[3*32 + 40]; char hex[6]; int count=0; while(len){ sprintf(line,"%04X: ", count); for(int i=32; i && len; i--, len--, buf++){ sprintf(hex, "%02X.", *buf); strcat(line, hex); } strcat(line, "\n"); OutTrace(line); count += 32; } } // from MSDN: // GetVersionEx may be altered or unavailable for releases after Windows 8.1. Instead, use the Version Helper functions // // With the release of Windows 8.1, the behavior of the GetVersionEx API has changed in the value it will return for the // operating system version. The value returned by the GetVersionEx function now depends on how the application is manifested. // // Applications not manifested for Windows 8.1 or Windows 10 will return the Windows 8 OS version value (6.2). // Once an application is manifested for a given operating system version, GetVersionEx will always return the version // that the application is manifested for in future releases. // To manifest your applications for Windows 8.1 or Windows 10, refer to Targeting your application for Windows. static BOOL CheckCompatibilityFlags() { typedef DWORD (WINAPI *GetFileVersionInfoSizeA_Type)(LPCSTR, LPDWORD); typedef BOOL (WINAPI *GetFileVersionInfoA_Type)(LPCSTR, DWORD, DWORD, LPVOID); typedef BOOL (WINAPI *VerQueryValueA_Type)(LPCVOID, LPCSTR, LPVOID, PUINT); VerQueryValueA_Type pVerQueryValueA; GetFileVersionInfoA_Type pGetFileVersionInfoA; GetFileVersionInfoSizeA_Type pGetFileVersionInfoSizeA; HMODULE VersionLib; DWORD dwMajorVersion, dwMinorVersion; DWORD dwHandle = 0; int size; UINT len = 0; VS_FIXEDFILEINFO* vsfi = NULL; OSVERSIONINFO vi; if(!(VersionLib=LoadLibrary("Version.dll"))) return FALSE; pGetFileVersionInfoA=(GetFileVersionInfoA_Type)GetProcAddress(VersionLib, "GetFileVersionInfoA"); if(!pGetFileVersionInfoA) return FALSE; pGetFileVersionInfoSizeA=(GetFileVersionInfoSizeA_Type)GetProcAddress(VersionLib, "GetFileVersionInfoSizeA"); if(!pGetFileVersionInfoSizeA) return FALSE; pVerQueryValueA=(VerQueryValueA_Type)GetProcAddress(VersionLib, "VerQueryValueA"); if(!pVerQueryValueA) return FALSE; size = (*pGetFileVersionInfoSizeA)("kernel32.dll", &dwHandle); BYTE* VersionInfo = new BYTE[size]; (*pGetFileVersionInfoA)("kernel32.dll", dwHandle, size, VersionInfo); (*pVerQueryValueA)(VersionInfo, "\\", (void**)&vsfi, &len); dwMajorVersion=HIWORD(vsfi->dwProductVersionMS); dwMinorVersion=LOWORD(vsfi->dwProductVersionMS); delete[] VersionInfo; vi.dwOSVersionInfoSize=sizeof(vi); GetVersionExA(&vi); if((vi.dwMajorVersion!=dwMajorVersion) || (vi.dwMinorVersion!=dwMinorVersion)) { ShowHint(HINT_FAKEOS); return TRUE; } return FALSE; } void OutTraceHex(BYTE *bBuf, int iLen) { for(int i=0; ie_lfanew); if(!pnth) { OutTraceH("HookDlls: ERROR no pnth at %d\n", __LINE__); return; } rva = pnth->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress; if(!rva) { OutTraceH("HookDlls: ERROR no rva at %d\n", __LINE__); return; } for(pidesc = (PIMAGE_IMPORT_DESCRIPTOR)(base + rva); pidesc->FirstThunk; pidesc++){ HMODULE DllBase; int idx; extern HMODULE SysLibs[]; impmodule = (PSTR)(base + pidesc->Name); // skip dxwnd and system dll if(!lstrcmpi(impmodule, "DxWnd")) continue; idx=dxw.GetDLLIndex(impmodule); if(!lstrcmpi(impmodule,dxw.CustomOpenGLLib))idx=SYSLIBIDX_OPENGL; if(idx != -1) { DllBase=GetModuleHandle(impmodule); SysLibs[idx]=DllBase; OutTraceH("HookDlls: system module %s at %x\n", impmodule, DllBase); continue; } OutTraceH("HookDlls: ENTRY timestamp=%x module=%s forwarderchain=%x\n", pidesc->TimeDateStamp, impmodule, pidesc->ForwarderChain); if(pidesc->OriginalFirstThunk) { ptname = (PIMAGE_THUNK_DATA)(base + (DWORD)pidesc->OriginalFirstThunk); } else{ ptname = 0; OutTraceH("HookDlls: no PE OFTs - stripped module=%s\n", impmodule); } DllBase=GetModuleHandle(impmodule); if(DllBase) HookModule(DllBase, 0); } } __except(EXCEPTION_EXECUTE_HANDLER) { OutTraceDW("HookDlls: EXCEPTION\n"); } return; } // CheckImportTable: a good enough criteria to detect obfuscated executables is to count the entries in the most common // and somehow mandatory system dlls such as kernel32.dll, user32.dll and gdi32.dll // the routine counsts the kernel32.dll overall entries (they could be split in different sections!) and if lesser than 3 // a warning message is shown. void CheckImportTable(HMODULE module) { PIMAGE_NT_HEADERS pnth; PIMAGE_IMPORT_DESCRIPTOR pidesc; DWORD base, rva; PSTR impmodule; PIMAGE_THUNK_DATA ptaddr; int Kernel32Count = 0; base=(DWORD)module; __try{ pnth = PIMAGE_NT_HEADERS(PBYTE(base) + PIMAGE_DOS_HEADER(base)->e_lfanew); if(!pnth) { return; } rva = pnth->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress; if(!rva) { return; } pidesc = (PIMAGE_IMPORT_DESCRIPTOR)(base + rva); while(pidesc->FirstThunk){ impmodule = (PSTR)(base + pidesc->Name); if(!_stricmp (impmodule, "kernel32.dll")){ ptaddr = (PIMAGE_THUNK_DATA)(base + (DWORD)pidesc->FirstThunk); while(ptaddr->u1.Function){ ptaddr ++; Kernel32Count++; } } // warning: do not confuse "dplayerx.dll" (SafeDisk) with "dplayx.dll" (DirectPlay)! if(!_stricmp (impmodule, "dplayerx.dll")) ShowHint(HINT_SAFEDISC); if(!_stricmp (impmodule, "cms_95.dll")) ShowHint(HINT_SECUROM); if(!_stricmp (impmodule, "cms_NT.dll")) ShowHint(HINT_SECUROM); if(!_stricmp (impmodule, "cms16.dll")) ShowHint(HINT_SECUROM); pidesc ++; } } __except(EXCEPTION_EXECUTE_HANDLER) { OutTraceDW("CheckImportTable: EXCEPTION\n"); } OutTraceDW("CheckImportTable: found %d entries for kernel32.dll\n", Kernel32Count); if(Kernel32Count <= 3) ShowHint(HINT_OBFUSCATED); return; } void SetHook(void *target, void *hookproc, void **hookedproc, char *hookname) { void *tmp; char msg[201]; DWORD dwTmp, oldprot; OutTraceH("SetHook: DEBUG target=%x, proc=%x name=%s\n", target, hookproc, hookname); // keep track of hooked call range to avoid re-hooking of hooked addresses !!! dwTmp = *(DWORD *)target; if(dwTmp == (DWORD)hookproc) { OutTraceH("target already hooked\n"); return; // already hooked } if(*(DWORD *)hookedproc == (DWORD)hookproc) { OutTraceH("hook already hooked\n"); return; // already hooked } if(dwTmp == 0){ sprintf(msg,"SetHook ERROR: NULL target for %s\n", hookname); OutTraceDW(msg); if (IsAssertEnabled) MessageBox(0, msg, "SetHook", MB_OK | MB_ICONEXCLAMATION); return; // error condition } if(!VirtualProtect(target, 4, PAGE_READWRITE, &oldprot)) { sprintf(msg,"SetHook ERROR: target=%x err=%d\n", target, GetLastError()); OutTraceDW(msg); if (IsAssertEnabled) MessageBox(0, msg, "SetHook", MB_OK | MB_ICONEXCLAMATION); return; // error condition } *(DWORD *)target = (DWORD)hookproc; if(!VirtualProtect(target, 4, oldprot, &oldprot)){ OutTrace("SetHook: VirtualProtect ERROR target=%x, err=%x\n", target, GetLastError()); return; // error condition } if(!FlushInstructionCache(GetCurrentProcess(), target, 4)){ OutTrace("SetHook: FlushInstructionCache ERROR target=%x, err=%x\n", target, GetLastError()); return; // error condition } tmp=(void *)dwTmp; __try { if (*hookedproc && (*hookedproc)!=tmp) { sprintf(msg,"SetHook: proc=%s oldhook=%x->%x newhook=%x\n", hookname, hookedproc, *(DWORD *)hookedproc, tmp); OutTraceDW(msg); if (IsAssertEnabled) MessageBox(0, msg, "SetHook", MB_OK | MB_ICONEXCLAMATION); if (dxw.bHintActive) ShowHint(HINT_HOOKUPDATE); // v2.03.83: updating the pointer sometimes is good, sometimes is bad! if(!(dxw.dwFlags7 & HOOKNOUPDATE)) tmp = *hookedproc; } } __except(EXCEPTION_EXECUTE_HANDLER){ OutTrace("SetHook: %s exception\n", hookname); }; *hookedproc = tmp; OutTraceH("SetHook: *hookedproc=%x, name=%s\n", tmp, hookname); } // v2.02.53: thorough scan - the IAT is scanned considering the possibility to have each dll module // replicated also many times. It may depend upon the compiling environment? // So far, it makes the difference for Dungeon Odissey void *HookAPI(HMODULE module, char *dll, void *apiproc, const char *apiname, void *hookproc) { if(dxw.dwTFlags & OUTIMPORTTABLE) OutTrace("HookAPI: module=%x dll=%s apiproc=%x apiname=%s hookproc=%x\n", module, dll, apiproc, apiname, hookproc); if(!*apiname) { // check char *sMsg="HookAPI: NULL api name\n"; OutTraceE(sMsg); if (IsAssertEnabled) MessageBox(0, sMsg, "HookAPI", MB_OK | MB_ICONEXCLAMATION); return 0; } if(dxw.dwFlags4 & HOTPATCHALWAYS) { void *orig; orig=HotPatch(apiproc, apiname, hookproc); if(orig) return orig; } return IATPatch(module, 0, dll, apiproc, apiname, hookproc); } void AdjustWindowPos(HWND hwnd, DWORD width, DWORD height) { WINDOWPOS wp; OutTraceDW("AdjustWindowPos: hwnd=%x, size=(%d,%d)\n", hwnd, width, height); dxw.CalculateWindowPos(hwnd, width, height, &wp); OutTraceDW("AdjustWindowPos: fixed pos=(%d,%d) size=(%d,%d)\n", wp.x, wp.y, wp.cx, wp.cy); //if(!pSetWindowPos) pSetWindowPos=SetWindowPos; //OutTraceDW("pSetWindowPos=%x\n", pSetWindowPos); OutTraceDW("hwnd=%x pos=(%d,%d) size=(%d,%d)\n", pSetWindowPos, wp.x, wp.y, wp.cx, wp.cy); if(!(*pSetWindowPos)(hwnd, 0, wp.x, wp.y, wp.cx, wp.cy, 0)){ OutTraceE("AdjustWindowPos: ERROR err=%d at %d\n", GetLastError(), __LINE__); } dxw.UpdateDesktopCoordinates(); if(dxw.dwFlags2 & SUPPRESSIME) SuppressIMEWindow(); if(dxw.dwFlags4 & HIDEDESKTOP) dxw.HideDesktop(hwnd); dxw.ShowBanner(hwnd); return; } void HookWindowProc(HWND hwnd) { WNDPROC pWindowProc; if(dxw.dwFlags6 & NOWINDOWHOOKS) return; pWindowProc = (WNDPROC)(*pGetWindowLong)(hwnd, GWL_WNDPROC); // don't hook twice .... if ((pWindowProc == extWindowProc) || (pWindowProc == extChildWindowProc) || (pWindowProc == extDialogWindowProc) || (pWindowProc == dw_Hider_Message_Handler)){ // hooked already !!! OutTraceDW("GetWindowLong: hwnd=%x WindowProc HOOK already in place\n", hwnd); return; } // v2.03.22: don't remap WindowProc in case of special address 0xFFFFnnnn. // This makes "The Hulk demo" work avoiding WindowProc recursion and stack overflow // v2.03.99.rc1: commented out, issue fixed by addition below! //if (((DWORD)pWindowProc & 0xFFFF0000) == 0xFFFF0000){ // OutTraceDW("GetWindowLong: hwnd=%x WindowProc HOOK %x not updated\n", hwnd, pWindowProc); // return; //} // v2.03.99.rc1: always remap WindowProc, but push to call stack the previous value // depending on whether the window was hooked already or not! long lres; if(lres=(long)dxwws.GetProc(hwnd)) dxwws.PutProc(hwnd, (WNDPROC)lres); else dxwws.PutProc(hwnd, pWindowProc); lres=(*pSetWindowLongA)(hwnd, GWL_WNDPROC, (LONG)extWindowProc); OutTraceDW("SetWindowLong: HOOK hwnd=%x WindowProc=%x->%x\n", hwnd, lres, (LONG)extWindowProc); } void AdjustWindowFrame(HWND hwnd, DWORD width, DWORD height) { HRESULT res=0; LONG style, exstyle; OutTraceDW("AdjustWindowFrame hwnd=%x, size=(%d,%d) coord=%d\n", hwnd, width, height, dxw.Coordinates); dxw.SetScreenSize(width, height); if (hwnd==NULL) return; style = dxw.FixWinStyle(WS_OVERLAPPEDWINDOW); exstyle = dxw.FixWinExStyle(0); (*pSetWindowLongA)(hwnd, GWL_STYLE, style); (*pSetWindowLongA)(hwnd, GWL_EXSTYLE, exstyle); (*pShowWindow)(hwnd, SW_SHOWNORMAL); OutTraceDW("AdjustWindowFrame hwnd=%x, set style=%s extstyle=0\n", hwnd, (style == 0) ? "0" : "WS_OVERLAPPEDWINDOW"); if (dxw.Windowize) AdjustWindowPos(hwnd, width, height); // fixing windows message handling procedure HookWindowProc(hwnd); // fixing cursor view and clipping region if ((dxw.dwFlags1 & HIDEHWCURSOR) && dxw.IsFullScreen()) while ((*pShowCursor)(0) >= 0); if (dxw.dwFlags2 & SHOWHWCURSOR) while((*pShowCursor)(1) < 0); if (dxw.dwFlags1 & CLIPCURSOR) { OutTraceDW("AdjustWindowFrame: setting clip region\n"); dxw.SetClipCursor(); } (*pInvalidateRect)(hwnd, NULL, TRUE); } void HookSysLibsInit() { static BOOL DoOnce = FALSE; if(DoOnce) return; DoOnce=TRUE; HookKernel32Init(); HookUser32Init(); HookGDI32Init(); HookWinG32Init(); HookImagehlpInit(); } DEVMODE InitDevMode; static void SaveScreenMode() { static BOOL DoOnce=FALSE; if(DoOnce) return; DoOnce=TRUE; (*pEnumDisplaySettings)(NULL, ENUM_CURRENT_SETTINGS, &InitDevMode); OutTraceDW("DXWND: Initial display mode WxH=(%dx%d) BitsPerPel=%d\n", InitDevMode.dmPelsWidth, InitDevMode.dmPelsHeight, InitDevMode.dmBitsPerPel); } void RecoverScreenMode() { DEVMODE CurrentDevMode; BOOL res; (*pEnumDisplaySettings)(NULL, ENUM_CURRENT_SETTINGS, &CurrentDevMode); OutTraceDW("ChangeDisplaySettings: recover CURRENT WxH=(%dx%d) BitsPerPel=%d TARGET WxH=(%dx%d) BitsPerPel=%d\n", CurrentDevMode.dmPelsWidth, CurrentDevMode.dmPelsHeight, CurrentDevMode.dmBitsPerPel, InitDevMode.dmPelsWidth, InitDevMode.dmPelsHeight, InitDevMode.dmBitsPerPel); InitDevMode.dmFields = (DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT); res=(*pChangeDisplaySettingsExA)(NULL, &InitDevMode, NULL, 0, NULL); if(res) OutTraceE("ChangeDisplaySettings: ERROR err=%d at %d\n", GetLastError(), __LINE__); } void SwitchTo16BPP() { DEVMODE CurrentDevMode; BOOL res; (*pEnumDisplaySettings)(NULL, ENUM_CURRENT_SETTINGS, &CurrentDevMode); OutTraceDW("ChangeDisplaySettings: CURRENT wxh=(%dx%d) BitsPerPel=%d -> 16\n", CurrentDevMode.dmPelsWidth, CurrentDevMode.dmPelsHeight, CurrentDevMode.dmBitsPerPel); CurrentDevMode.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT; CurrentDevMode.dmBitsPerPel = 16; res=(*pChangeDisplaySettingsExA)(NULL, &CurrentDevMode, NULL, CDS_UPDATEREGISTRY, NULL); if(res) OutTraceE("ChangeDisplaySettings: ERROR err=%d at %d\n", GetLastError(), __LINE__); } static void LockScreenMode(DWORD dmPelsWidth, DWORD dmPelsHeight, DWORD dmBitsPerPel) { DEVMODE InitDevMode; BOOL res; OutTraceDW("ChangeDisplaySettings: LOCK wxh=(%dx%d) BitsPerPel=%d -> wxh=(%dx%d) BitsPerPel=%d\n", InitDevMode.dmPelsWidth, InitDevMode.dmPelsHeight, InitDevMode.dmBitsPerPel, dmPelsWidth, dmPelsHeight, dmBitsPerPel); if( (dmPelsWidth != InitDevMode.dmPelsWidth) || (dmPelsHeight !=InitDevMode.dmPelsHeight) || (dmBitsPerPel != InitDevMode.dmBitsPerPel)){ res=(*pChangeDisplaySettingsExA)(NULL, &InitDevMode, NULL, 0, NULL); if(res) OutTraceE("ChangeDisplaySettings: ERROR err=%d at %d\n", GetLastError(), __LINE__); } } static HMODULE LoadDisasm() { HMODULE disasmlib; disasmlib=(*pLoadLibraryA)("disasm.dll"); if(!disasmlib) { OutTraceDW("DXWND: Load lib=\"%s\" failed err=%d\n", "disasm.dll", GetLastError()); return NULL; } pGeterrwarnmessage=(Geterrwarnmessage_Type)(*pGetProcAddress)(disasmlib, "Geterrwarnmessage"); pPreparedisasm=(Preparedisasm_Type)(*pGetProcAddress)(disasmlib, "Preparedisasm"); pFinishdisasm=(Finishdisasm_Type)(*pGetProcAddress)(disasmlib, "Finishdisasm"); pDisasm=(Disasm_Type)(*pGetProcAddress)(disasmlib, "Disasm"); //OutTraceDW("DXWND: Load disasm.dll ptrs=%x,%x,%x,%x\n", pGeterrwarnmessage, pPreparedisasm, pFinishdisasm, pDisasm); return disasmlib; } LONG WINAPI myUnhandledExceptionFilter(LPEXCEPTION_POINTERS ExceptionInfo) { OutTrace("UnhandledExceptionFilter: exception code=%x flags=%x addr=%x\n", ExceptionInfo->ExceptionRecord->ExceptionCode, ExceptionInfo->ExceptionRecord->ExceptionFlags, ExceptionInfo->ExceptionRecord->ExceptionAddress); DWORD oldprot; static HMODULE disasmlib = NULL; PVOID target = ExceptionInfo->ExceptionRecord->ExceptionAddress; switch(ExceptionInfo->ExceptionRecord->ExceptionCode){ case 0xc0000094: // IDIV reg (Ultim@te Race Pro) case 0xc0000095: // DIV by 0 (divide overflow) exception (SonicR) case 0xc0000096: // CLI Priviliged instruction exception (Resident Evil), FB (Asterix & Obelix) case 0xc000001d: // FEMMS (eXpendable) case 0xc0000005: // Memory exception (Tie Fighter) int cmdlen; t_disasm da; if(!disasmlib){ if (!(disasmlib=LoadDisasm())) return EXCEPTION_CONTINUE_SEARCH; (*pPreparedisasm)(); } if(!VirtualProtect(target, 10, PAGE_READWRITE, &oldprot)) return EXCEPTION_CONTINUE_SEARCH; // error condition cmdlen=(*pDisasm)((BYTE *)target, 10, 0, &da, 0, NULL, NULL); OutTrace("UnhandledExceptionFilter: NOP opcode=%x len=%d\n", *(BYTE *)target, cmdlen); memset((BYTE *)target, 0x90, cmdlen); VirtualProtect(target, 10, oldprot, &oldprot); if(!FlushInstructionCache(GetCurrentProcess(), target, cmdlen)) OutTrace("UnhandledExceptionFilter: FlushInstructionCache ERROR target=%x, err=%x\n", target, GetLastError()); // v2.03.10 skip replaced opcode ExceptionInfo->ContextRecord->Eip += cmdlen; // skip ahead op-code length return EXCEPTION_CONTINUE_EXECUTION; break; default: return EXCEPTION_CONTINUE_SEARCH; } } LPTOP_LEVEL_EXCEPTION_FILTER WINAPI extSetUnhandledExceptionFilter(LPTOP_LEVEL_EXCEPTION_FILTER lpTopLevelExceptionFilter) { OutTraceDW("SetUnhandledExceptionFilter: lpExceptionFilter=%x\n", lpTopLevelExceptionFilter); extern LONG WINAPI myUnhandledExceptionFilter(LPEXCEPTION_POINTERS); return (*pSetUnhandledExceptionFilter)(myUnhandledExceptionFilter); } //#define USEPERFCOUNTERS unsigned __int64 inline GetRDTSC() { __asm { ; Flush the pipeline XOR eax, eax CPUID ; Get RDTSC counter in edx:eax RDTSC } } LONG CALLBACK Int3Handler(PEXCEPTION_POINTERS ExceptionInfo) { // Vectored Handler routine to intercept INT3 opcodes replacing RDTSC if (ExceptionInfo->ExceptionRecord->ExceptionCode == 0x80000003){ LARGE_INTEGER myPerfCount; #ifdef USEPERFCOUNTERS if(!pQueryPerformanceCounter) pQueryPerformanceCounter=QueryPerformanceCounter; (*pQueryPerformanceCounter)(&myPerfCount); #else __asm { ; Flush the pipeline XOR eax, eax CPUID ; Get RDTSC counter in edx:eax RDTSC mov myPerfCount.LowPart, eax mov myPerfCount.HighPart, edx } #endif //myPerfCount = dxw.StretchCounter(myPerfCount); myPerfCount = dxw.StretchLargeCounter(myPerfCount); OutTraceDW("Int3Handler: INT3 at=%x tick=%x RDTSC=%x:%x\n", ExceptionInfo->ExceptionRecord->ExceptionAddress, (*pGetTickCount)(), myPerfCount.HighPart, myPerfCount.LowPart); ExceptionInfo->ContextRecord->Edx = myPerfCount.HighPart; ExceptionInfo->ContextRecord->Eax = myPerfCount.LowPart; ExceptionInfo->ContextRecord->Eip++; // skip ahead one-byte ( jump over 0xCC op-code ) ExceptionInfo->ContextRecord->Eip++; // skip ahead one-byte ( jump over 0x90 op-code ) return EXCEPTION_CONTINUE_EXECUTION; } return EXCEPTION_CONTINUE_SEARCH; } void HookExceptionHandler(void) { void *tmp; HMODULE base; OutTraceDW("Set exception handlers\n"); base=GetModuleHandle(NULL); pSetUnhandledExceptionFilter = SetUnhandledExceptionFilter; //v2.1.75 override default exception handler, if any.... LONG WINAPI myUnhandledExceptionFilter(LPEXCEPTION_POINTERS); tmp = HookAPI(base, "KERNEL32.dll", UnhandledExceptionFilter, "UnhandledExceptionFilter", myUnhandledExceptionFilter); // so far, no need to save the previous handler, but anyway... tmp = HookAPI(base, "KERNEL32.dll", SetUnhandledExceptionFilter, "SetUnhandledExceptionFilter", extSetUnhandledExceptionFilter); if(tmp) pSetUnhandledExceptionFilter = (SetUnhandledExceptionFilter_Type)tmp; SetErrorMode(SEM_NOGPFAULTERRORBOX|SEM_NOOPENFILEERRORBOX|SEM_FAILCRITICALERRORS); (*pSetUnhandledExceptionFilter)((LPTOP_LEVEL_EXCEPTION_FILTER)myUnhandledExceptionFilter); } static void InitModuleHooks() { for (int i=0; ifnc=IME_SETLEVEL; imes->fnc=7; imes->wParam=1; SetLastError(0); res=(*pSendIMEMessage)(dxw.GethWnd(), (LPARAM)imeh); OutTrace("res=%x error=%d\n", res, GetLastError()); #endif } void SetSingleProcessAffinity(BOOL first) { int i; DWORD ProcessAffinityMask, SystemAffinityMask; if(!GetProcessAffinityMask(GetCurrentProcess(), &ProcessAffinityMask, &SystemAffinityMask)) OutTraceE("GetProcessAffinityMask: ERROR err=%d\n", GetLastError()); OutTraceDW("Process affinity=%x\n", ProcessAffinityMask); if(first){ for (i=0; i<(8 * sizeof(DWORD)); i++){ if (ProcessAffinityMask & 0x1) break; ProcessAffinityMask >>= 1; } OutTraceDW("First process affinity bit=%d\n", i); ProcessAffinityMask = 0x1; for (; i; i--) ProcessAffinityMask <<= 1; OutTraceDW("Process affinity=%x\n", ProcessAffinityMask); } else { for (i=0; i<(8 * sizeof(DWORD)); i++){ if (ProcessAffinityMask & 0x80000000) break; ProcessAffinityMask <<= 1; } i = 31 - i; OutTraceDW("Last process affinity bit=%d\n", i); ProcessAffinityMask = 0x1; for (; i; i--) ProcessAffinityMask <<= 1; OutTraceDW("Process affinity=%x\n", ProcessAffinityMask); } if (!SetProcessAffinityMask(GetCurrentProcess(), ProcessAffinityMask)) OutTraceE("SetProcessAffinityMask: ERROR err=%d\n", GetLastError()); } static BOOL GetTextSegment(char *module, unsigned char **start, DWORD *len) { typedef BOOL (WINAPI *GetModuleInformation_Type)(HANDLE, HMODULE, LPMODULEINFO, DWORD); MODULEINFO mi; HMODULE psapilib; GetModuleInformation_Type pGetModuleInformation; // getting segment size psapilib=(*pLoadLibraryA)("psapi.dll"); if(!psapilib) { OutTraceDW("DXWND: Load lib=\"%s\" failed err=%d\n", "psapi.dll", GetLastError()); return FALSE; } pGetModuleInformation=(GetModuleInformation_Type)(*pGetProcAddress)(psapilib, "GetModuleInformation"); (*pGetModuleInformation)(GetCurrentProcess(), GetModuleHandle(NULL), &mi, sizeof(mi)); FreeLibrary(psapilib); typedef IMAGE_NT_HEADERS *(WINAPI *ImageNtHeader_Type)(PVOID); ImageNtHeader_Type pImageNtHeader = NULL; HMODULE hDbgLib = LoadLibrary("dbghelp.dll"); if(!hDbgLib) { OutTraceDW("DXWND: Load lib=\"%s\" failed err=%d\n", "dbghelp.dll", GetLastError()); return FALSE; } pImageNtHeader = (ImageNtHeader_Type)GetProcAddress(hDbgLib, "ImageNtHeader"); if (!pImageNtHeader) return FALSE; *start = NULL; *len = 0; IMAGE_NT_HEADERS *pNtHdr = (*pImageNtHeader)(GetModuleHandle(module)); IMAGE_SECTION_HEADER *pSectionHdr = (IMAGE_SECTION_HEADER *)(pNtHdr+1); OutTrace("sections=%d\n", pNtHdr->FileHeader.NumberOfSections); for(int i=0; iFileHeader.NumberOfSections; i++){ char *name = (char *)pSectionHdr->Name; if ((memcmp(name, ".text", 5) == 0) || (memcmp(name, "CODE", 4) == 0)){ *start = (unsigned char *)mi.lpBaseOfDll + pSectionHdr->VirtualAddress; *len = pSectionHdr->SizeOfRawData; break; } } FreeLibrary(hDbgLib); return (*start != NULL); } static void ReplaceRDTSC() { typedef BOOL (WINAPI *GetModuleInformation_Type)(HANDLE, HMODULE, LPMODULEINFO, DWORD); HMODULE disasmlib; unsigned char *opcodes; t_disasm da; DWORD dwSegSize; DWORD oldprot; if (!(disasmlib=LoadDisasm())) return; (*pPreparedisasm)(); if(!GetTextSegment(NULL, &opcodes, &dwSegSize)) return; unsigned int offset = 0; BOOL cont = TRUE; OutTraceDW("DXWND: ReplaceRDTSC starting at addr=%x size=%x\n", opcodes, dwSegSize); while (cont) { int cmdlen = 0; __try{ cmdlen=(*pDisasm)(opcodes+offset,20,offset,&da,0,NULL,NULL); //OutTrace("offset=%x opcode=%x\n", offset, *(opcodes+offset)); } __except (EXCEPTION_EXECUTE_HANDLER){ OutTrace("exception at offset=%x\n", offset); cont=FALSE; } if (cmdlen==0) break; // search for RDTSC opcode 0x0F31 if((*(opcodes+offset) == 0x0F) && (*(opcodes+offset+1) == 0x31)){ OutTraceDW("DXWND: RDTSC opcode found at addr=%x\n", (opcodes+offset)); if(!VirtualProtect((LPVOID)(opcodes+offset), 4, PAGE_READWRITE, &oldprot)) { OutTrace("VirtualProtect ERROR: target=%x err=%d at %d\n", opcodes+offset, GetLastError(), __LINE__); return; // error condition } *(opcodes+offset) = 0xCC; // __asm INT3 *(opcodes+offset+1) = 0x90; // __asm NOP if(!VirtualProtect((LPVOID)(opcodes+offset), 4, oldprot, &oldprot)){ OutTrace("VirtualProtect ERROR; target=%x, err=%d at %d\n", opcodes+offset, GetLastError(), __LINE__); return; // error condition } } // search for RDTSCP opcode 0x0F01F9 if((*(opcodes+offset) == 0x0F) && (*(opcodes+offset+1) == 0x01) && (*(opcodes+offset+2) == 0xF9)){ OutTraceDW("DXWND: RDTSC opcode found at addr=%x\n", (opcodes+offset)); if(!VirtualProtect((LPVOID)(opcodes+offset), 4, PAGE_READWRITE, &oldprot)) { OutTrace("VirtualProtect ERROR: target=%x err=%d at %d\n", opcodes+offset, GetLastError(), __LINE__); return; // error condition } *(opcodes+offset) = 0xCC; // __asm INT3 *(opcodes+offset+1) = 0x90; // __asm NOP *(opcodes+offset+2) = 0x90; // __asm NOP if(!VirtualProtect((LPVOID)(opcodes+offset), 4, oldprot, &oldprot)){ OutTrace("VirtualProtect ERROR; target=%x, err=%d at %d\n", opcodes+offset, GetLastError(), __LINE__); return; // error condition } } offset+=cmdlen; if((offset+0x10) > dwSegSize) break; // skip last 16 bytes, just in case.... } return; (*pFinishdisasm)(); FreeLibrary(disasmlib); } static void ReplacePrivilegedOps() { HMODULE disasmlib; unsigned char *opcodes; t_disasm da; DWORD dwSegSize; DWORD oldprot; static BOOL bDoOnce=FALSE; if(bDoOnce) return; bDoOnce = TRUE; if (!(disasmlib=LoadDisasm())) return; (*pPreparedisasm)(); if(!GetTextSegment(NULL, &opcodes, &dwSegSize)) return; unsigned int offset = 0; BOOL cont = TRUE; OutTraceDW("DXWND: ReplacePrivilegedOps starting at addr=%x size=%x\n", opcodes, dwSegSize); while (cont) { int cmdlen = 0; char *sOpcode; BOOL bPriv; __try{ cmdlen=(*pDisasm)(opcodes+offset,20,offset,&da,0,NULL,NULL); //OutTrace("offset=%x opcode=%x\n", offset, *(opcodes+offset)); } __except (EXCEPTION_EXECUTE_HANDLER){ OutTrace("exception at offset=%x\n", offset); cont=FALSE; } if (cmdlen==0) break; // search for following opcodes: // 0xEC (IN AL, DX) // 0x6D (INS DWORD PTR ES:[EDI],DX) // 0x6E (OUTS DX,BYTE PTR DS:[ESI]) bPriv = FALSE; switch(*(opcodes+offset)){ case 0x6D: sOpcode = "INS"; bPriv=TRUE; break; case 0x6E: sOpcode = "OUTS"; bPriv=TRUE; break; case 0xEC: sOpcode = "IN"; bPriv=TRUE; break; } if(bPriv){ OutTraceDW("DXWND: %s opcode found at addr=%x\n", sOpcode, (opcodes+offset)); if(!VirtualProtect((LPVOID)(opcodes+offset), 8, PAGE_READWRITE, &oldprot)) { OutTrace("VirtualProtect ERROR: target=%x err=%d at %d\n", opcodes+offset, GetLastError(), __LINE__); return; // error condition } *(opcodes+offset) = 0x90; // __asm NOP if((*(opcodes+offset+1) == 0xA8) && ((*(opcodes+offset+3) == 0x75) || (*(opcodes+offset+3) == 0x74))) { // both JNZ and JZ OutTraceDW("DXWND: IN loop found at addr=%x\n", (opcodes+offset)); memset((opcodes+offset+1), 0x90, 4); // Ubik I/O loop offset+=4; } if(!VirtualProtect((LPVOID)(opcodes+offset), 8, oldprot, &oldprot)){ OutTrace("VirtualProtect ERROR; target=%x, err=%d at %d\n", opcodes+offset, GetLastError(), __LINE__); return; // error condition } } offset+=cmdlen; if((offset+0x10) > dwSegSize) break; // skip last 16 bytes, just in case.... } return; (*pFinishdisasm)(); FreeLibrary(disasmlib); } #if 0 // from https://www.winehq.org/pipermail/wine-users/2002-April/007910.html // // There is no publicaly available version numbering for SafeDisc. However, it // seems that the version number is stored in the executable as 3 unsigned 32-bit // integers. Using an hexadecimal editor, locate the following byte pattern in // the wrapper (game.exe) // // > 426f475f 202a3930 2e302621 21202059 BoG_ *90.0&!! Y // > 793e0000 y>.. // // There should be 3 unsigned integers right after that, which are respectively // the version, subversion an revision number. // // On some versions of SafeDisc there are 3 null integers following the pattern, // before the version number. You'll then have to look at the 3 unsigned 32-bit // integers right after // // > 426f475f 202a3930 2e302621 21202059 BoG_ *90.0&!! Y // > 793e0000 00000000 00000000 00000000 y>.............. static void CheckSafeDiscVersion() { unsigned char *opcode; DWORD dwSegSize; static BOOL bDoOnce=FALSE; DWORD dwVersion, dwSubversion, dwRevision; if(bDoOnce) return; bDoOnce = TRUE; if(!GetTextSegment(NULL, &opcode, &dwSegSize)) return; unsigned int offset = 0; BOOL cont = TRUE; OutTraceDW("DXWND: CheckSafeDiscVersion starting at addr=%x size=%x\n", opcode, dwSegSize); for(; dwSegSize > 40;) { // fast way to make 20 char comparisons ..... if(*(DWORD *)opcode ==0x5F476F42) if(*(DWORD *)(opcode+4) ==0x30392A20) if(*(DWORD *)(opcode+8) ==0x2126302E) if(*(DWORD *)(opcode+12)==0x59202021) if(*(DWORD *)(opcode+16)==0x00003E79){ dwVersion = *(DWORD *)(opcode+20); dwSubversion = *(DWORD *)(opcode+24); dwRevision = *(DWORD *)(opcode+28); if(dwVersion == 0){ dwVersion = *(DWORD *)(opcode+32); dwSubversion = *(DWORD *)(opcode+36); dwRevision = *(DWORD *)(opcode+40); } OutTrace("Safedisk %d.%d.%d detected\n"); ShowHint(HINT_SAFEDISC); break; } dwSegSize -= 4; opcode += 4; } } #endif HWND hDesktopWindow = NULL; // Message poller: its only purpose is to keep sending messages to the main window // so that the message loop is kept running. It is a trick necessary to play // smack videos with smackw32.dll and AUTOREFRESH mode set DWORD WINAPI MessagePoller(LPVOID lpParameter) { #define DXWREFRESHINTERVAL 20 while(TRUE){ Sleep(DXWREFRESHINTERVAL); if(dxw.dwFlags2 & INDEPENDENTREFRESH) dxw.ScreenRefresh(); else SendMessage(dxw.GethWnd(), WM_NCHITTEST, 0, 0); } return 0; } DWORD WINAPI TimeFreezePoller(LPVOID lpParameter) { #define DXWREFRESHINTERVAL 20 extern UINT VKeyConfig[]; UINT FreezeToggleKey; FreezeToggleKey = VKeyConfig[DXVK_FREEZETIME]; while(TRUE){ Sleep(DXWREFRESHINTERVAL); if(GetAsyncKeyState(FreezeToggleKey) & 0xF000) dxw.ToggleFreezedTime(); } return 0; } static void MemoryReserve() { VirtualAlloc((LPVOID)0x4000000, 0x04000000, MEM_RESERVE, PAGE_READWRITE); VirtualAlloc((LPVOID)0x5000000, 0x00F00000, MEM_RESERVE, PAGE_READWRITE); VirtualAlloc((LPVOID)0x6000000, 0x00F00000, MEM_RESERVE, PAGE_READWRITE); VirtualAlloc((LPVOID)0x7000000, 0x00F00000, MEM_RESERVE, PAGE_READWRITE); VirtualAlloc((LPVOID)0x8000000, 0x00F00000, MEM_RESERVE, PAGE_READWRITE); } extern HHOOK hMouseHook; void HookInit(TARGETMAP *target, HWND hwnd) { static BOOL DoOnce = TRUE; HMODULE base; char *sModule; char sModuleBuf[60+1]; char sSourcePath[MAX_PATH+1]; static char *dxversions[14]={ "Automatic", "DirectX1~6", "", "", "", "", "", "DirectX7", "DirectX8", "DirectX9", "DirectX10", "DirectX11", "None", "" }; static char *Resolutions[]={ "unlimited", "320x200", "400x300", "640x480", "800x600", "1024x768", "1280x960", "1280x1024", "" // terminator }; dxw.InitTarget(target); // reserve legacy memory segments if(dxw.dwFlags6 & LEGACYALLOC) MemoryReserve(); // add the DxWnd install dir to the search path, to make all included dll linkable DWORD dwAttrib; dwAttrib = GetFileAttributes("dxwnd.dll"); //if (dwAttrib != INVALID_FILE_ATTRIBUTES && !(dwAttrib & FILE_ATTRIBUTE_DIRECTORY)) { // MessageBox(0, "DXWND: ERROR can't locate itself", "ERROR", MB_OK | MB_ICONEXCLAMATION); // exit(0); //} GetModuleFileName(GetModuleHandle("dxwnd"), sSourcePath, MAX_PATH); sSourcePath[strlen(sSourcePath)-strlen("dxwnd.dll")] = 0; // terminate the string just before "dxwnd.dll" SetDllDirectory(sSourcePath); if(dxw.bHintActive) ShowHint(HINT_HINT); if(DoOnce){ DoOnce = FALSE; InitModuleHooks(); dxw.VirtualDesktop.left = GetSystemMetrics(SM_XVIRTUALSCREEN); dxw.VirtualDesktop.top = GetSystemMetrics(SM_YVIRTUALSCREEN); dxw.VirtualDesktop.right = dxw.VirtualDesktop.left + GetSystemMetrics(SM_CXVIRTUALSCREEN); dxw.VirtualDesktop.bottom = dxw.VirtualDesktop.top + GetSystemMetrics(SM_CYVIRTUALSCREEN); OutTraceDW("Virtual Desktop: monitors=%d area=(%d,%d)-(%d,%d)\n", GetSystemMetrics(SM_CMONITORS), dxw.VirtualDesktop.left, dxw.VirtualDesktop.top, dxw.VirtualDesktop.right, dxw.VirtualDesktop.bottom); if(dxw.bHintActive) { CheckCompatibilityFlags(); // v2.02.83: Check for change of OS release // CheckSafeDiscVersion(); // v2.03.78: Detects SafeDisk references and version - moved to DxWnd.exe } hTrayWnd = FindWindow("Shell_TrayWnd", NULL); } if(hwnd){ // v2.02.32: skip this when in code injection mode. // v2.1.75: is it correct to set hWnd here? //dxw.SethWnd(hwnd); dxw.hParentWnd=GetParent(hwnd); dxw.hChildWnd=hwnd; // v2.02.31: set main win either this one or the parent! dxw.SethWnd((dxw.dwFlags1 & FIXPARENTWIN) ? GetParent(hwnd) : hwnd); if(dxw.dwFlags4 & ENABLEHOTKEYS) dxw.MapKeysInit(); } if(IsTraceDW){ char sInfo[1024]; OSVERSIONINFO osinfo; strcpy(sInfo, ""); if(hwnd) sprintf(sInfo, " hWnd=%x ParentWnd=%x desktop=%x", hwnd, dxw.hParentWnd, GetDesktopWindow()); OutTrace("HookInit: path=\"%s\" module=\"%s\" dxversion=%s pos=(%d,%d) size=(%d,%d) init-max=(%d,%d) monitor=%d%s\n", target->path, target->module, dxversions[dxw.dwTargetDDVersion], target->posx, target->posy, target->sizx, target->sizy, target->resw, target->resh, target->monitorid, sInfo); osinfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); if(GetVersionEx(&osinfo)){ OutTrace("OS=(%d.%d) build=%d platform=%d service pack=%s\n", osinfo.dwMajorVersion, osinfo.dwMinorVersion, osinfo.dwPlatformId, osinfo.dwPlatformId, osinfo.szCSDVersion); } if (dxw.dwFlags4 & LIMITSCREENRES) OutTrace("HookInit: max resolution=%s\n", (dxw.MaxScreenRes<6)?Resolutions[dxw.MaxScreenRes]:"unknown"); if (dxw.dwFlags7 & MAXIMUMRES) OutTrace("HookInit: max resolution=(%dx%d)\n", dxw.iMaxW, dxw.iMaxH); if (dxw.dwFlags7 & LIMITDDRAW) OutTrace("HookInit: max supported IDidrectDrawInterface=%d\n", dxw.MaxDdrawInterface); if (dxw.dwFlags7 & CPUSLOWDOWN) OutTrace("HookInit: CPU slowdown ratio 1:%d\n", dxw.SlowRatio); if (dxw.dwFlags7 & CPUMAXUSAGE) OutTrace("HookInit: CPU maxusage ratio 1:%d\n", dxw.SlowRatio); if (dxw.dwFlags8 & VSYNCSCANLINE) OutTrace("HookInit: VSync Scanline=%d\n", dxw.ScanLine); } if (hwnd && IsDebug){ DWORD dwStyle, dwExStyle; char ClassName[81]; char WinText[81]; dwStyle=GetWindowLong(dxw.GethWnd(), GWL_STYLE); dwExStyle=GetWindowLong(dxw.GethWnd(), GWL_EXSTYLE); GetClassName(dxw.GethWnd(), ClassName, sizeof(ClassName)); GetWindowText(dxw.GethWnd(), WinText, sizeof(WinText)); OutTrace("HookInit: dxw.hChildWnd=%x class=\"%s\" text=\"%s\" style=%x(%s) exstyle=%x(%s)\n", dxw.hChildWnd, ClassName, WinText, dwStyle, ExplainStyle(dwStyle), dwExStyle, ExplainExStyle(dwExStyle)); dwStyle=GetWindowLong(dxw.hParentWnd, GWL_STYLE); dwExStyle=GetWindowLong(dxw.hParentWnd, GWL_EXSTYLE); GetClassName(dxw.hParentWnd, ClassName, sizeof(ClassName)); GetWindowText(dxw.hParentWnd, WinText, sizeof(WinText)); OutTrace("HookInit: dxw.hParentWnd=%x class=\"%s\" text=\"%s\" style=%x(%s) exstyle=%x(%s)\n", dxw.hParentWnd, ClassName, WinText, dwStyle, ExplainStyle(dwStyle), dwExStyle, ExplainExStyle(dwExStyle)); OutTrace("HookInit: target window pos=(%d,%d) size=(%d,%d)\n", dxw.iPosX, dxw.iPosY, dxw.iSizX, dxw.iSizY); dxw.DumpDesktopStatus(); typedef HRESULT (WINAPI *DwmIsCompositionEnabled_Type)(BOOL *); DwmIsCompositionEnabled_Type pDwmIsCompositionEnabled = NULL; HMODULE DwnApiHdl; DwnApiHdl = LoadLibrary("Dwmapi.dll"); if (DwnApiHdl) pDwmIsCompositionEnabled = (DwmIsCompositionEnabled_Type)GetProcAddress(DwnApiHdl, "DwmIsCompositionEnabled"); char *sRes; if(pDwmIsCompositionEnabled){ HRESULT res; BOOL val; res = (*pDwmIsCompositionEnabled)(&val); if(res==S_OK) sRes = val ? "ENABLED" : "DISABLED"; else sRes = "ERROR"; } else sRes = "Unknown"; OutTrace("HookInit: DWMComposition %s\n", sRes); } if (hwnd) { char ClassName[8+1]; GetClassName(hwnd, ClassName, sizeof(ClassName)); if(!strcmp(ClassName, "IME")){ dxw.hChildWnd=GetParent(hwnd); dxw.hParentWnd=GetParent(dxw.hChildWnd); if (dxw.dwFlags2 & SUPPRESSIME) DestroyWindow(hwnd); // v2.02.31: set main win either this one or the parent! dxw.SethWnd((dxw.dwFlags1 & FIXPARENTWIN) ? dxw.hParentWnd : dxw.hChildWnd); hwnd = dxw.GethWnd(); if(hwnd) OutTraceDW("HookInit: skipped IME window. current hWnd=%x(hdc=%x) dxw.hParentWnd=%x(hdc=%x)\n", hwnd, GetDC(hwnd), dxw.hParentWnd, GetDC(dxw.hParentWnd)); } } HookSysLibsInit(); // this just once... if(dxw.dwFlags4 & HOOKGLIDE) { dxw.PushDLL("glide", SYSLIBIDX_GLIDE); dxw.PushDLL("glide2x", SYSLIBIDX_GLIDE2); dxw.PushDLL("glide3x", SYSLIBIDX_GLIDE3); } if(dxw.dwFlags7 & HOOKSMACKW32) { dxw.PushDLL("smackw32", SYSLIBIDX_SMACKW32); // SMACKW32.DLL } if(dxw.dwFlags8 & HOOKWING32) { dxw.PushDLL("wing32", SYSLIBIDX_WING32); // WING32.DLL } base=GetModuleHandle(NULL); // set IAT navigators IATPatch = IATPatchDefault; DumpImportTable = DumpImportTableDefault; //if(dxw.dwFlags8 & SEQUENCEDIAT) { if(IsIATSequential(base)){ OutTraceDW("HookInit: setting sequential IAT navigation\n"); DumpImportTable = DumpImportTableSequential; IATPatch = IATPatchSequential; } if (dxw.dwFlags3 & SINGLEPROCAFFINITY) SetSingleProcessAffinity(TRUE); if (dxw.dwFlags5 & USELASTCORE) SetSingleProcessAffinity(FALSE); if (dxw.dwFlags4 & INTERCEPTRDTSC) AddVectoredExceptionHandler(1, Int3Handler); // 1 = first call, 0 = call last if (dxw.dwFlags1 & HANDLEEXCEPTIONS) HookExceptionHandler(); if (dxw.dwTFlags & OUTIMPORTTABLE) DumpImportTable(base); if (dxw.dwFlags2 & SUPPRESSIME) DisableIME(); if (dxw.dwFlags4 & INTERCEPTRDTSC) ReplaceRDTSC(); if (dxw.dwFlags5 & REPLACEPRIVOPS) ReplacePrivilegedOps(); if(dxw.bHintActive) CheckImportTable(base); // make InitPosition used for both DInput and DDraw if(dxw.Windowize) dxw.InitWindowPos(target->posx, target->posy, target->sizx, target->sizy); OutTraceB("HookInit: base hmodule=%x\n", base); HookModule(base, dxw.dwTargetDDVersion); if (dxw.dwFlags3 & HOOKDLLS) HookDlls(base); strncpy(sModuleBuf, dxw.gsModules, 60); sModule=strtok(sModuleBuf," ;"); while (sModule) { base=(*pLoadLibraryA)(sModule); if(!base){ OutTraceE("HookInit: LoadLibrary ERROR module=%s err=%d\n", sModule, GetLastError()); } else { OutTraceDW("HookInit: hooking additional module=%s base=%x\n", sModule, base); if (dxw.dwTFlags & OUTIMPORTTABLE) DumpImportTable(base); HookModule(base, dxw.dwTargetDDVersion); } sModule=strtok(NULL," ;"); } SaveScreenMode(); if(dxw.dwFlags2 & RECOVERSCREENMODE) RecoverScreenMode(); if(dxw.dwFlags3 & FORCE16BPP) SwitchTo16BPP(); if (dxw.dwFlags1 & MESSAGEPROC){ extern HINSTANCE hInst; typedef HHOOK (WINAPI *SetWindowsHookEx_Type)(int, HOOKPROC, HINSTANCE, DWORD); extern SetWindowsHookEx_Type pSetWindowsHookExA; hMouseHook =(*pSetWindowsHookExA)(WH_GETMESSAGE, MessageHook, hInst, GetCurrentThreadId()); if(hMouseHook==NULL) OutTraceE("SetWindowsHookEx WH_GETMESSAGE failed: error=%d\n", GetLastError()); } InitScreenParameters(0); // still unknown if(hwnd) HookWindowProc(hwnd); // in fullscreen mode, messages seem to reach and get processed by the parent window if((!dxw.Windowize) && hwnd) HookWindowProc(dxw.hParentWnd); // initialize window: if // 1) not in injection mode (hwnd != 0) and // 2) in Windowed mode and // 3) supposedly in fullscreen mode (dxw.IsFullScreen()) and // 4) configuration ask for a overlapped bordered window (dxw.dwFlags1 & FIXWINFRAME) then // update window styles: just this window or, when FIXPARENTWIN is set, the father one as well. if (hwnd && dxw.Windowize && dxw.IsFullScreen()) { if((dxw.dwFlags1 & FIXWINFRAME) || (dxw.dwFlags9 & FIXTHINFRAME)) dxw.FixWindowFrame(dxw.hChildWnd); AdjustWindowPos(dxw.hChildWnd, target->sizx, target->sizy); if(dxw.dwFlags1 & FIXPARENTWIN) { if((dxw.dwFlags1 & FIXWINFRAME) || (dxw.dwFlags9 & FIXTHINFRAME)) dxw.FixWindowFrame(dxw.hParentWnd); AdjustWindowPos(dxw.hParentWnd, target->sizx, target->sizy); } } if (dxw.dwFlags1 & AUTOREFRESH) CreateThread(NULL, 0, MessagePoller, NULL, 0, NULL); if (dxw.dwFlags4 & ENABLETIMEFREEZE) CreateThread(NULL, 0, TimeFreezePoller, NULL, 0, NULL); if(dxw.dwFlags7 & CPUSLOWDOWN) CreateThread(NULL, 0, CpuSlow, NULL, 0, NULL); else if(dxw.dwFlags7 & CPUMAXUSAGE) CreateThread(NULL, 0, CpuLimit, NULL, 0, NULL); } LPCSTR ProcToString(LPCSTR proc) { static char sBuf[24+1]; if(((DWORD)proc & 0xFFFF0000) == 0){ sprintf_s(sBuf, 24, "#0x%x", proc); return sBuf; } else return proc; } FARPROC RemapLibraryEx(LPCSTR proc, HMODULE hModule, HookEntryEx_Type *Hooks) { void *remapped_addr; for(; Hooks->APIName; Hooks++){ if (!strcmp(proc,Hooks->APIName)){ if ((Hooks->HookStatus == HOOK_HOT_REQUIRED) || ((dxw.dwFlags4 & HOTPATCH) && (Hooks->HookStatus == HOOK_HOT_CANDIDATE)) || // hot patch candidate still to process - or ((dxw.dwFlags4 & HOTPATCHALWAYS) && (Hooks->HookStatus != HOOK_HOT_LINKED))){ // force hot patch and not already hooked if(!Hooks->OriginalAddress) { Hooks->OriginalAddress=(*pGetProcAddress)(hModule, Hooks->APIName); if(!Hooks->OriginalAddress) continue; } remapped_addr = HotPatch(Hooks->OriginalAddress, Hooks->APIName, Hooks->HookerAddress); if(remapped_addr == (void *)1) { // should never go here ... Hooks->HookStatus = HOOK_HOT_LINKED; continue; // already hooked } if(remapped_addr) { Hooks->HookStatus = HOOK_HOT_LINKED; if(Hooks->StoreAddress) *(Hooks->StoreAddress) = (FARPROC)remapped_addr; } } if(Hooks->HookStatus == HOOK_HOT_LINKED) { OutTraceDW("GetProcAddress: hot patched proc=%s addr=%x\n", ProcToString(proc), Hooks->HookerAddress); return Hooks->HookerAddress; } if (Hooks->StoreAddress) *(Hooks->StoreAddress)=(*pGetProcAddress)(hModule, proc); OutTraceDW("GetProcAddress: hooking proc=%s addr=%x->%x\n", ProcToString(proc), (Hooks->StoreAddress) ? *(Hooks->StoreAddress) : 0, Hooks->HookerAddress); return Hooks->HookerAddress; } } return NULL; } void HookLibraryEx(HMODULE hModule, HookEntryEx_Type *Hooks, char *DLLName) { HMODULE hDLL = NULL; //OutTrace("HookLibrary: hModule=%x dll=%s\n", hModule, DLLName); for(; Hooks->APIName; Hooks++){ void *remapped_addr; if(Hooks->HookStatus == HOOK_HOT_LINKED) continue; // skip any hot-linked entry if(((Hooks->HookStatus == HOOK_HOT_REQUIRED) || ((dxw.dwFlags4 & HOTPATCH) && (Hooks->HookStatus == HOOK_HOT_CANDIDATE)) || // hot patch candidate still to process - or ((dxw.dwFlags4 & HOTPATCHALWAYS) && (Hooks->HookStatus != HOOK_HOT_LINKED))) // force hot patch and not already hooked && Hooks->StoreAddress){ // and save ptr available // Hot Patch - beware! This way you're likely to hook unneeded libraries. if(!Hooks->OriginalAddress) { if(!hDLL) { hDLL = (*pLoadLibraryA)(DLLName); if(!hDLL) { OutTrace("HookLibrary: LoadLibrary failed on DLL=%s err=%x\n", DLLName, GetLastError()); continue; } } Hooks->OriginalAddress=(*pGetProcAddress)(hDLL, Hooks->APIName); if(!Hooks->OriginalAddress) { OutTraceB("HookLibrary: GetProcAddress failed on API=%s err=%x\n", Hooks->APIName, GetLastError()); continue; } } remapped_addr = HotPatch(Hooks->OriginalAddress, Hooks->APIName, Hooks->HookerAddress); if(remapped_addr == (void *)1) { // should never go here ... Hooks->HookStatus = HOOK_HOT_LINKED; continue; // already hooked } if(remapped_addr) { Hooks->HookStatus = HOOK_HOT_LINKED; *(Hooks->StoreAddress) = (FARPROC)remapped_addr; continue; } } remapped_addr = IATPatch(hModule, Hooks->ordinal, DLLName, Hooks->OriginalAddress, Hooks->APIName, Hooks->HookerAddress); if(remapped_addr) { Hooks->HookStatus = HOOK_IAT_LINKED; if (Hooks->StoreAddress) *(Hooks->StoreAddress) = (FARPROC)remapped_addr; } } } void PinLibraryEx(HookEntryEx_Type *Hooks, char *DLLName) { HMODULE hModule = NULL; hModule = (*pLoadLibraryA)(DLLName); if(!hModule) { OutTrace("PinLibrary: LoadLibrary failed on DLL=%s err=%x\n", DLLName, GetLastError()); return; } for(; Hooks->APIName; Hooks++){ if (Hooks->StoreAddress) *(Hooks->StoreAddress) = (*pGetProcAddress)(hModule, Hooks->APIName); } } BOOL IsHotPatchedEx(HookEntryEx_Type *Hooks, char *ApiName) { for(; Hooks->APIName; Hooks++){ if(!strcmp(Hooks->APIName, ApiName)) return (Hooks->HookStatus == HOOK_HOT_LINKED); } return FALSE; } void HookLibInitEx(HookEntryEx_Type *Hooks) { for(; Hooks->APIName; Hooks++) if (Hooks->StoreAddress) *(Hooks->StoreAddress) = Hooks->OriginalAddress; } ================================================ FILE: dll/dxhook.h ================================================ extern int HookDirectDraw(HMODULE, int); extern int HookDirect3D(HMODULE, int); extern int HookDirect3D7(HMODULE, int); extern void HookOle32(HMODULE); extern void HookGDI32(HMODULE); extern void HookDirectInput(HMODULE); extern void HookDirectInput8(HMODULE); extern void HookDirectSound(HMODULE); extern void HookImeLib(HMODULE); extern void HookKernel32(HMODULE); extern void HookUser32(HMODULE); extern void HookTrust(HMODULE); extern void HookWinMM(HMODULE, char *libname); extern void HookAdvApi32(HMODULE); extern void HookImagehlp(HMODULE); extern void HookSmackW32(HMODULE); extern void HookAVIFil32(HMODULE); extern void HookComDlg32(HMODULE); extern void HookComCtl32(HMODULE); extern void HookWinG32(HMODULE); extern void InitPosition(int, int, int, int, int, int); //void InitWindowPos(int, int, int, int); extern LPCSTR ProcToString(LPCSTR proc); extern HRESULT HookDxDiag(REFIID, LPVOID FAR*); extern FARPROC Remap_AVIFil32_ProcAddress(LPCSTR, HMODULE); extern FARPROC Remap_ddraw_ProcAddress(LPCSTR, HMODULE); extern FARPROC Remap_d3d7_ProcAddress(LPCSTR, HMODULE); extern FARPROC Remap_d3d8_ProcAddress(LPCSTR, HMODULE); extern FARPROC Remap_d3d9_ProcAddress(LPCSTR, HMODULE); extern FARPROC Remap_d3d10_ProcAddress(LPCSTR, HMODULE); extern FARPROC Remap_d3d10_1_ProcAddress(LPCSTR, HMODULE); extern FARPROC Remap_d3d11_ProcAddress(LPCSTR, HMODULE); extern FARPROC Remap_gl_ProcAddress(LPCSTR, HMODULE); extern FARPROC Remap_smack_ProcAddress(LPCSTR, HMODULE); extern FARPROC Remap_user32_ProcAddress(LPCSTR, HMODULE); extern FARPROC Remap_GDI32_ProcAddress(LPCSTR, HMODULE); extern FARPROC Remap_kernel32_ProcAddress(LPCSTR, HMODULE); extern FARPROC Remap_ole32_ProcAddress(LPCSTR, HMODULE); extern FARPROC Remap_trust_ProcAddress(LPCSTR, HMODULE); extern FARPROC Remap_WinMM_ProcAddress(LPCSTR, HMODULE); extern FARPROC Remap_ImeLib_ProcAddress(LPCSTR, HMODULE); extern FARPROC Remap_vfw_ProcAddress(LPCSTR, HMODULE); extern FARPROC Remap_AdvApi32_ProcAddress(LPCSTR, HMODULE); extern FARPROC Remap_Glide_ProcAddress(LPCSTR, HMODULE); extern FARPROC Remap_Imagehlp_ProcAddress(LPCSTR, HMODULE); extern FARPROC Remap_DInput_ProcAddress(LPCSTR, HMODULE); extern FARPROC Remap_DInput8_ProcAddress(LPCSTR, HMODULE); extern FARPROC Remap_ComCtl32_ProcAddress(LPCSTR, HMODULE); extern FARPROC Remap_ComDlg32_ProcAddress(LPCSTR, HMODULE); extern FARPROC Remap_DSound_ProcAddress(LPCSTR, HMODULE); extern FARPROC Remap_WinG32_ProcAddress(LPCSTR, HMODULE); typedef enum { HOOK_IAT_CANDIDATE = 0, HOOK_HOT_CANDIDATE, HOOK_HOT_REQUIRED, HOOK_IAT_LINKED, HOOK_HOT_LINKED } HookEntry_Status; typedef struct { HookEntry_Status HookStatus; DWORD ordinal; char *APIName; FARPROC OriginalAddress; FARPROC *StoreAddress; FARPROC HookerAddress; } HookEntryEx_Type; extern FARPROC RemapLibraryEx(LPCSTR, HMODULE, HookEntryEx_Type *); extern void HookLibraryEx(HMODULE, HookEntryEx_Type *, char *); extern void PinLibraryEx(HookEntryEx_Type *, char *); extern void HookLibInitEx(HookEntryEx_Type *); extern BOOL IsHotPatchedEx(HookEntryEx_Type *, char *); #define MISSING ((FARPROC)-1) ================================================ FILE: dll/dxmapping.cpp ================================================ #define _CRT_SECURE_NO_WARNINGS #include #include "dxwnd.h" #include "dxwcore.hpp" #include "syslibs.h" #include "dxhelper.h" // IsValidMainWindow: returns TRUE if the main window can be queried for coordinates, // FALSE otherwise (e.g. when minimized) BOOL dxwCore::IsValidMainWindow() { RECT Client; POINT UpLeft = {0, 0}; if(!(*pGetClientRect)(hWnd, &Client)) return FALSE; if((Client.right == 0) || (Client.bottom == 0)) return FALSE; if(!(*pClientToScreen)(hWnd, &UpLeft)) return FALSE; return TRUE; } // if the main window coordinates are still valid updates the window placement values void dxwCore::UpdateDesktopCoordinates() { RECT Client; POINT UpLeft = {0, 0}; //OutTraceB("dxwCore::UpdateDesktopCoordinates: OLD pos=(%d,%d) size=(%dx%d)\n", iPosX, iPosY, iSizX, iSizY); if(!(*pGetClientRect)(hWnd, &Client)) return; if((Client.right == 0) || (Client.bottom == 0)) return; if(!(*pClientToScreen)(hWnd, &UpLeft)) return; // update coordinates .... iPosX = UpLeft.x; iPosY = UpLeft.y; iSizX = Client.right - Client.left; iSizY = Client.bottom - Client.top; //OutTraceB("dxwCore::UpdateDesktopCoordinates: NEW pos=(%d,%d) size=(%dx%d)\n", iPosX, iPosY, iSizX, iSizY); } // GetScreenRect: returns a RECT sized as the virtual desktop RECT dxwCore::GetScreenRect() { static RECT Screen; Screen.left=0; Screen.top=0; Screen.right=dwScreenWidth; Screen.bottom=dwScreenHeight; return Screen; } // GetUnmappedScreenRect: returns the RECT of the real coordinates of the virtual desktop, // that is the client area of the main window RECT dxwCore::GetUnmappedScreenRect() { RECT Screen; Screen.top = iPosY; Screen.bottom = iPosY + iSizX; Screen.left = iPosX; Screen.right = iPosX + iSizX; return Screen; } // GetFrameOffset: return the POINT coordinates of the upper-left corner of the main window frame // taking in account of the window frame and title bar, then it needs to query hWnd POINT dxwCore::GetFrameOffset() { RECT wrect; POINT FrameOffset={0, 0}; (*pGetWindowRect)(hWnd, &wrect); (*pClientToScreen)(hWnd, &FrameOffset); FrameOffset.x -= wrect.left; FrameOffset.y -= wrect.top; OutTraceB("GetFrameOffset: offset=(%d,%d)\n", FrameOffset.x, FrameOffset.y); return FrameOffset; } // ClientOffset: returns the virtual offset of a window within the virtual desktop POINT dxwCore::ClientOffset(HWND hwnd) { POINT upleft, ret = {0, 0}; if(iSizX && iSizY) { upleft.x = upleft.y = 0; (*pClientToScreen)(hwnd, &upleft); ret.x = (((upleft.x - iPosX) * dwScreenWidth) + (iSizX >> 1)) / iSizX; ret.y = (((upleft.y - iPosY) * dwScreenHeight) + (iSizY >> 1)) / iSizY; if(ret.x < 0) ret.x = 0; if(ret.y < 0) ret.y = 0; OutTraceB("ClientOffset: hwnd=%x offset=(%d,%d)\n", hwnd, ret.x, ret.y); } return ret; } // GetWindowRect: returns the virtual coordinates of a window within the virtual desktop RECT dxwCore::GetWindowRect(RECT win) { if(iSizX && iSizY) { win.left = (((win.left - iPosX) * (LONG)dwScreenWidth) + (iSizX >> 1)) / iSizX; win.top = (((win.top - iPosY) * (LONG)dwScreenHeight) + (iSizY >> 1)) / iSizY; win.right = (((win.right - iPosX) * (LONG)dwScreenWidth) + (iSizX >> 1)) / iSizX; win.bottom = (((win.bottom - iPosY) * (LONG)dwScreenHeight) + (iSizY >> 1)) / iSizY; } return win; } // GetClientRect: returns the virtual client coordinates of a window RECT dxwCore::GetClientRect(RECT win) { if(iSizX && iSizY) { win.left = ((win.left * dwScreenWidth) + (iSizX >> 1)) / iSizX; win.top = ((win.top * dwScreenHeight) + (iSizY >> 1)) / iSizY; win.right = ((win.right * dwScreenWidth) + (iSizX >> 1)) / iSizX; win.bottom = ((win.bottom * dwScreenHeight) + (iSizY >> 1)) / iSizY; } return win; } // AddCoordinates, SubCoordinates: adds or subtracts a POINT displacement POINT dxwCore::AddCoordinates(POINT p1, POINT p2) { POINT ps; ps.x = p1.x + p2.x; ps.y = p1.y + p2.y; return ps; } RECT dxwCore::AddCoordinates(RECT r1, POINT p2) { RECT rs; rs.left = r1.left + p2.x; rs.right = r1.right + p2.x; rs.top = r1.top + p2.y; rs.bottom = r1.bottom + p2.y; return rs; } POINT dxwCore::SubCoordinates(POINT p1, POINT p2) { POINT ps; ps.x = p1.x - p2.x; ps.y = p1.y - p2.y; return ps; } // MapWindow, MapWindowRect: transforms the virtual window coordinates of the virtual desktop into real ones RECT dxwCore::MapWindowRect(LPRECT lpRect) { RECT RetRect; if(!Windowize){ if(lpRect) RetRect=*lpRect; else{ RetRect.left = RetRect.top = 0; RetRect.right = dwScreenWidth; RetRect.bottom = dwScreenHeight; } return RetRect; } if(lpRect){ RetRect.left = iPosX + (lpRect->left * iSizX / dwScreenWidth); RetRect.right = iPosX + (lpRect->right * iSizX / dwScreenWidth); RetRect.top = iPosY + (lpRect->top * iSizY / dwScreenHeight); RetRect.bottom = iPosY + (lpRect->bottom * iSizY / dwScreenHeight); } else{ RetRect.left = iPosX; RetRect.right = iPosX + iSizX; RetRect.top = iPosY; RetRect.bottom = iPosY + iSizY; } return RetRect; } void dxwCore::MapWindow(LPRECT rect) { rect->left= iPosX + (((rect->left * iSizX) + (dwScreenWidth >> 1)) / (int)dwScreenWidth); rect->top= iPosY + (((rect->top * iSizY) + (dwScreenHeight >> 1)) / (int)dwScreenHeight); rect->right= iPosX + (((rect->right * iSizX) + (dwScreenWidth >> 1)) / (int)dwScreenWidth); rect->bottom= iPosY + (((rect->bottom * iSizY) + (dwScreenHeight >> 1)) / (int)dwScreenHeight); } void dxwCore::MapWindow(int *nXDest, int *nYDest, int *nWDest, int *nHDest) { *nXDest= iPosX + (((*nXDest * iSizX) + (dwScreenWidth >> 1)) / (int)dwScreenWidth); *nYDest= iPosY + (((*nYDest * iSizY) + (dwScreenHeight >> 1)) / (int)dwScreenHeight); *nWDest= ((*nWDest * iSizX) + (dwScreenWidth >> 1)) / (int)dwScreenWidth; *nHDest= ((*nHDest * iSizY) + (dwScreenHeight >> 1)) / (int)dwScreenHeight; } void dxwCore::MapWindow(LPPOINT lppoint) { lppoint->x = iPosX + (((lppoint->x * iSizX) + (dwScreenWidth >> 1)) / dwScreenWidth); lppoint->y = iPosY + (((lppoint->y * iSizY) + (dwScreenHeight >> 1)) / dwScreenHeight); } // MapClient, MapClientRect: transforms the client virtual coordinates of the virtual desktop into real ones RECT dxwCore::MapClientRect(LPRECT lpRect) { RECT RetRect; if(lpRect){ RetRect.left = (lpRect->left * iSizX / dwScreenWidth); RetRect.right = (lpRect->right * iSizX / dwScreenWidth); RetRect.top = (lpRect->top * iSizY / dwScreenHeight); RetRect.bottom = (lpRect->bottom * iSizY / dwScreenHeight); } else{ RetRect.left = 0; RetRect.right = iSizX; RetRect.top = 0; RetRect.bottom = iSizY; } return RetRect; } void dxwCore::MapClient(LPRECT rect) { rect->left= ((rect->left * iSizX)+(dwScreenWidth >> 1)) / (int)dwScreenWidth; rect->top= ((rect->top * iSizY)+(dwScreenHeight >> 1)) / (int)dwScreenHeight; rect->right= ((rect->right * iSizX)+(dwScreenWidth >> 1)) / (int)dwScreenWidth; rect->bottom= ((rect->bottom * iSizY)+(dwScreenHeight >> 1)) / (int)dwScreenHeight; } void dxwCore::MapClient(int *nXDest, int *nYDest, int *nWDest, int *nHDest) { *nXDest= ((*nXDest * iSizX)+(dwScreenWidth >> 1)) / (int)dwScreenWidth; *nYDest= ((*nYDest * iSizY)+(dwScreenHeight >> 1)) / (int)dwScreenHeight; *nWDest= ((*nWDest * iSizX)+(dwScreenWidth >> 1)) / (int)dwScreenWidth; *nHDest= ((*nHDest * iSizY)+(dwScreenHeight >> 1)) / (int)dwScreenHeight; } void dxwCore::MapClient(LPPOINT lppoint) { lppoint->x= ((lppoint->x * iSizX)+(dwScreenWidth >> 1)) / (int)dwScreenWidth; lppoint->y= ((lppoint->y * iSizY)+(dwScreenHeight >> 1)) / (int)dwScreenHeight; } void dxwCore::MapClient(int *nXDest, int *nYDest) { *nXDest= ((*nXDest * iSizX)+(dwScreenWidth >> 1)) / (int)dwScreenWidth; *nYDest= ((*nYDest * iSizY)+(dwScreenHeight >> 1)) / (int)dwScreenHeight; } // UnmapWindow: transforms the window real coordinates of the real desktop into virtual ones void dxwCore::UnmapWindow(LPRECT rect) { if(iSizX && iSizY) { rect->left= ((rect->left - iPosX) * (int)dwScreenWidth) / iSizX; rect->top= ((rect->top - iPosY) * (int)dwScreenHeight) / iSizY; rect->right= ((rect->right - iPosX) * (int)dwScreenWidth) / iSizX; rect->bottom= ((rect->bottom - iPosY) * (int)dwScreenHeight) / iSizY; } } void dxwCore::UnmapWindow(LPPOINT point) { if(iSizX && iSizY) { point->x= ((point->x - iPosX) * (int)dwScreenWidth) / iSizX; point->y= ((point->y - iPosY) * (int)dwScreenHeight) / iSizY; } } // UnmapClient: transforms the client real coordinates of the real desktop into virtual ones void dxwCore::UnmapClient(LPPOINT lppoint) { if(iSizX && iSizY) { lppoint->x = ((lppoint->x * (int)dwScreenWidth) + (iSizX >> 1)) / iSizX; lppoint->y = ((lppoint->y * (int)dwScreenHeight) + (iSizY >> 1)) / iSizY; } } void dxwCore::UnmapClient(int *nXDest, int *nYDest) { if(iSizX && iSizY) { *nXDest = ((*nXDest * (int)dwScreenWidth) + (iSizX >> 1)) / iSizX; *nYDest = ((*nYDest * (int)dwScreenHeight) + (iSizY >> 1)) / iSizY; } } void dxwCore::UnmapClient(int *nXDest, int *nYDest, int *nWidth, int *nHeight) { if(iSizX && iSizY) { *nXDest = ((*nXDest * (int)dwScreenWidth) + (iSizX >> 1)) / iSizX; *nYDest = ((*nYDest * (int)dwScreenHeight) + (iSizY >> 1)) / iSizY; *nWidth = ((*nWidth * (int)dwScreenWidth) + (iSizX >> 1)) / iSizX; *nHeight = ((*nHeight * (int)dwScreenHeight) + (iSizY >> 1)) / iSizY; } } void dxwCore::UnmapClient(LPRECT lpRect) { if(iSizX && iSizY) { lpRect->left = ((lpRect->left * (int)dwScreenWidth) + (iSizX >> 1)) / iSizX; lpRect->right = ((lpRect->right * (int)dwScreenWidth) + (iSizX >> 1)) / iSizX; lpRect->top = ((lpRect->top * (int)dwScreenHeight) + (iSizY >> 1)) / iSizY; lpRect->bottom = ((lpRect->bottom * (int)dwScreenHeight) + (iSizY >> 1)) / iSizY; } } // GetMonitorWorkarea: retrieves the desktop coordinates of the whole desktop (id == -1) or of a given monitor (id >= 0) // returning either the whole desktop area (WorkArea == FALSE) or the workarea (WorkArea == TRUE) // callback function called by EnumDisplayMonitors for each enabled monitor struct ENUM_DISP_ARG { int TargetId; int MonId; RECT rect; HMONITOR hMon; }; BOOL CALLBACK EnumDispProc(HMONITOR hMon, HDC dcMon, RECT* pRcMon, LPARAM lParam) { ENUM_DISP_ARG* pArg = reinterpret_cast(lParam); if (pArg->MonId >= pArg->TargetId){ pArg->rect = *pRcMon; pArg->hMon = hMon; return FALSE; } else { pArg->MonId++; return TRUE; } } void dxwCore::GetMonitorWorkarea(LPRECT lpRect, BOOL WorkArea) { if(MonitorId == -1) { // whole desktop from all monitors if(WorkArea) { (*pSystemParametersInfoA)(SPI_GETWORKAREA, NULL, lpRect, 0); } else { (*pGetClientRect)((*pGetDesktopWindow)(), lpRect); } return; } MONITORINFO mi; memset((void *)&mi, 0, sizeof(MONITORINFO)); mi.cbSize = sizeof(MONITORINFO); ENUM_DISP_ARG arg = { 0 }; arg.TargetId = MonitorId; // monitor to look for EnumDisplayMonitors(0, 0, EnumDispProc, reinterpret_cast(&arg)); if(GetMonitorInfo(arg.hMon, &mi)){ *lpRect = WorkArea ? mi.rcWork : mi.rcMonitor; } else{ // recurse with undefined id MonitorId = -1; GetMonitorWorkarea(lpRect, WorkArea); } OutTraceB("dxwCore::GetMonitorWorkarea: id=%d workarea=%x rect=(%d,%d)-(%d,%d)\n", MonitorId, WorkArea, lpRect->left, lpRect->top, lpRect->right, lpRect->bottom); } // v.2.1.80: unified positioning logic into CalculateWindowPos routine // now taking in account for window menus (see "Alien Cabal") // sets the correct values in wp LPWINDOWPOS structure, but doesn't do any window update void dxwCore::CalculateWindowPos(HWND hwnd, DWORD width, DWORD height, LPWINDOWPOS wp) { RECT rect, desktop; DWORD dwStyle, dwExStyle; int MaxX, MaxY; HMENU hMenu; switch(Coordinates){ case DXW_DESKTOP_CENTER: if(bAutoScale){ MaxX = GetScreenWidth(); MaxY = GetScreenHeight(); if(dxw.dwFlags4 & BILINEAR2XFILTER) MaxX <<= 1; // double if(dxw.dwFlags4 & BILINEAR2XFILTER) MaxY <<= 1; // double } else{ MaxX = iSizX; MaxY = iSizY; } if (!MaxX) { MaxX = width; if(dxw.dwFlags4 & BILINEAR2XFILTER) MaxX <<= 1; // double } if (!MaxY) { MaxY = height; if(dxw.dwFlags4 & BILINEAR2XFILTER) MaxY <<= 1; // double } dxw.GetMonitorWorkarea(&desktop, TRUE); rect.left = (desktop.right + desktop.left - MaxX) / 2; // v2.03.89 - fixed rect.top = (desktop.bottom + desktop.top - MaxY) / 2; // v2.03.89 - fixed rect.right = rect.left + MaxX; rect.bottom = rect.top + MaxY; //v2.02.09 // fixed .... if(rect.left < desktop.left) rect.left = desktop.left; if(rect.top < desktop.top) rect.top = desktop.top; if(rect.bottom > desktop.bottom) rect.bottom = desktop.bottom; if(rect.right > desktop.right) rect.right = desktop.right; break; case DXW_DESKTOP_WORKAREA: dxw.GetMonitorWorkarea(&rect, TRUE); if(dxw.dwFlags2 & KEEPASPECTRATIO) dxw.FixWorkarea(&rect); break; case DXW_DESKTOP_FULL: dxw.GetMonitorWorkarea(&rect, FALSE); if(dxw.dwFlags2 & KEEPASPECTRATIO) dxw.FixWorkarea(&rect); break; case DXW_SET_COORDINATES: default: // set size if(bAutoScale){ MaxX = GetScreenWidth(); MaxY = GetScreenHeight(); if(dxw.dwFlags4 & BILINEAR2XFILTER) MaxX <<= 1; // double if(dxw.dwFlags4 & BILINEAR2XFILTER) MaxY <<= 1; // double } else{ if((dxw.dwFlags2 & LOCKEDSIZE) || (dxw.dwFlags7 & ANCHORED)){ iSizX = iSiz0X; iSizY = iSiz0Y; } MaxX = iSizX; MaxY = iSizY; } if (!MaxX) { MaxX = width; if(dxw.dwFlags4 & BILINEAR2XFILTER) MaxX <<= 1; // double } if (!MaxY) { MaxY = height; if(dxw.dwFlags4 & BILINEAR2XFILTER) MaxY <<= 1; // double } // set pos if(dxw.dwFlags7 & ANCHORED){ iPosX = iPos0X; iPosY = iPos0Y; } rect.left = iPosX; rect.top = iPosY; //v2.02.09 rect.right = iPosX + MaxX; rect.bottom = iPosY + MaxY; //v2.02.09 break; } OutTraceB("dxwCore::CalculateWindowPos: coord=%d client rect=(%d,%d)-(%d,%d)\n", Coordinates, rect.left, rect.top, rect.right, rect.bottom); if(hwnd){ RECT UnmappedRect; UnmappedRect=rect; dwStyle=(*pGetWindowLong)(hwnd, GWL_STYLE); dwExStyle=(*pGetWindowLong)(hwnd, GWL_EXSTYLE); // BEWARE: from MSDN - If the window is a child window, the return value is undefined. hMenu = (dwStyle & WS_CHILD) ? NULL : GetMenu(hwnd); (*pAdjustWindowRectEx)(&rect, dwStyle, (hMenu!=NULL), dwExStyle); // if (hMenu) __try {CloseHandle(hMenu);} __except(EXCEPTION_EXECUTE_HANDLER){}; switch(dxw.Coordinates){ case DXW_DESKTOP_WORKAREA: case DXW_DESKTOP_FULL: // if there's a menu, reduce height to fit area if(rect.top != UnmappedRect.top){ rect.bottom = rect.bottom - UnmappedRect.top + rect.top; } break; default: break; } // shift down-right so that the border is visible if(rect.left < dxw.VirtualDesktop.left){ rect.right = dxw.VirtualDesktop.left - rect.left + rect.right; rect.left = dxw.VirtualDesktop.left; } if(rect.top < dxw.VirtualDesktop.top){ rect.bottom = dxw.VirtualDesktop.top - rect.top + rect.bottom; rect.top = dxw.VirtualDesktop.top; } // shift up-left so that the windows doesn't exceed on the other side if(rect.right > dxw.VirtualDesktop.right){ rect.left = dxw.VirtualDesktop.right - rect.right + rect.left; rect.right = dxw.VirtualDesktop.right; } if(rect.bottom > dxw.VirtualDesktop.bottom){ rect.top = dxw.VirtualDesktop.bottom - rect.bottom + rect.top; rect.bottom = dxw.VirtualDesktop.bottom; } } OutTraceB("dxwCore::CalculateWindowPos: coord=%d window rect=(%d,%d)-(%d,%d)\n", Coordinates, rect.left, rect.top, rect.right, rect.bottom); // update the arguments for the window creation wp->x=rect.left; wp->y=rect.top; wp->cx=rect.right-rect.left; wp->cy=rect.bottom-rect.top; } void dxwCore::AutoScale() { WINDOWPOS wp; if(!dxw.Windowize) return; CalculateWindowPos(hWnd, dwScreenWidth, dwScreenHeight, &wp); OutTrace("AutoScale: new pos=(%d,%d) size=(%dx%d)\n", wp.x, wp.y, wp.cx, wp.cy); if(!(*pSetWindowPos)(hWnd, 0, wp.x, wp.y, wp.cx, wp.cy, 0)){ OutTraceE("AutoScale: SetWindowPos ERROR err=%d at %d\n", GetLastError(), __LINE__); } // need to ShowWindow(SW_SHOW) to make new coordinates active (*pShowWindow)(hWnd, SW_SHOW); UpdateDesktopCoordinates(); } ================================================ FILE: dll/dxwcapsdb.cpp ================================================ /* ------------------------------------------------------------------ */ // DirectDraw Objects capability DB /* ------------------------------------------------------------------ */ #define _CRT_SECURE_NO_WARNINGS #include #include "dxwnd.h" #include "dxwcore.hpp" #if 0 // uncomment (#if 1) to activate caps db tracing #define DXW_SURFACE_STACK_TRACING #define OutTraceSDB OutTrace #include "dxhelper.h" #endif dxwCapsDB::dxwCapsDB() { memset(CapsDB, 0, sizeof(CapsDB)); } dxwCapsDB::~dxwCapsDB() { } void dxwCapsDB::PushCaps(LPDIRECTDRAWSURFACE ps, DWORD dwCaps) { int i; CapsDB_Type *e; #ifdef DXW_SURFACE_STACK_TRACING OutTraceSDB(">>> CAPSDB MARK: lpdds=%x caps=%x(%s)\n", ps, dwCaps, ExplainDDSCaps(dwCaps)); #endif for (i=0;ilpdds==ps) || (e->lpdds==(DWORD)0)) break; // got matching entry or end of the list } if(i == DDSQLEN) { //MessageBox(0, "Caps stack is full", "DxWnd SurfaceList", MB_OK | MB_ICONEXCLAMATION); //return; for(int j=0;jlpdds=ps; e->dwCaps = dwCaps; } DWORD dxwCapsDB::GetCaps(LPDIRECTDRAWSURFACE ps) { int i; // look for entry for (i=0;i>> CAPSDB GETCAPS: i=%d lpdds=%x caps=%x(%s)\n", i, ps, CapsDB[i].dwCaps, ExplainDDSCaps(CapsDB[i].dwCaps)); #endif return CapsDB[i].dwCaps; } return 0; } ================================================ FILE: dll/dxwcore.cpp ================================================ #define _CRT_SECURE_NO_WARNINGS #define SYSLIBNAMES_DEFINES #include #include "dxwnd.h" #include "dxwcore.hpp" #include "syslibs.h" #include "dxhelper.h" #include "resource.h" #include "hddraw.h" #include "d3d9.h" extern GetDC_Type pGetDCMethod(); extern ReleaseDC_Type pReleaseDC1; extern HandleDDThreadLock_Type pReleaseDDThreadLock; /* ------------------------------------------------------------------ */ // Internal function pointers /* ------------------------------------------------------------------ */ typedef DWORD (*TimeShifter_Type)(DWORD, int); typedef LARGE_INTEGER (*TimeShifter64_Type)(LARGE_INTEGER, int); TimeShifter_Type pTimeShifter; TimeShifter64_Type pTimeShifter64; static DWORD TimeShifterFine(DWORD, int); static LARGE_INTEGER TimeShifter64Fine(LARGE_INTEGER, int); static DWORD TimeShifterCoarse(DWORD, int); static LARGE_INTEGER TimeShifter64Coarse(LARGE_INTEGER, int); /* ------------------------------------------------------------------ */ // Constructor, destructor, initialization.... /* ------------------------------------------------------------------ */ dxwCore::dxwCore() { // initialization stuff .... FullScreen=FALSE; SethWnd(NULL); SetScreenSize(); dwMaxDDVersion=7; hParentWnd = 0; hChildWnd = 0; bActive = TRUE; bDInputAbs = 0; TimeShift = 0; ResetEmulatedDC(); MustShowOverlay=FALSE; TimerEvent.dwTimerType = TIMER_TYPE_NONE; // initialization of default vsync emulation array iRefreshDelays[0]=16; iRefreshDelays[1]=17; iRefreshDelayCount=2; TimeFreeze = FALSE; dwScreenWidth = 0; dwScreenHeight = 0; } dxwCore::~dxwCore() { } void dxwCore::SetFullScreen(BOOL fs, int line) { OutTraceDW("SetFullScreen: %s at %d\n", fs?"FULLSCREEN":"WINDOWED", line); FullScreen=fs; } void dxwCore::SetFullScreen(BOOL fs) { if(dxw.dwFlags3 & FULLSCREENONLY) fs=TRUE; OutTraceDW("SetFullScreen: %s\n", fs?"FULLSCREEN":"WINDOWED"); FullScreen=fs; } BOOL dxwCore::IsFullScreen() { return (Windowize && FullScreen); } BOOL dxwCore::IsToRemap(HDC hdc) { if(!hdc) return TRUE; return (Windowize && FullScreen && (OBJ_DC == (*pGetObjectType)(hdc))); } void dxwCore::InitTarget(TARGETMAP *target) { dwFlags1 = target->flags; dwFlags2 = target->flags2; dwFlags3 = target->flags3; dwFlags4 = target->flags4; dwFlags5 = target->flags5; dwFlags6 = target->flags6; dwFlags7 = target->flags7; dwFlags8 = target->flags8; dwFlags9 = target->flags9; dwFlags10= target->flags10; dwTFlags = target->tflags; Windowize = (dwFlags2 & WINDOWIZE) ? TRUE : FALSE; IsVisible = TRUE; if(dwFlags3 & FULLSCREENONLY) FullScreen=TRUE; gsModules = target->module; MaxFPS = target->MaxFPS; CustomOpenGLLib = target->OpenGLLib; if(!strlen(CustomOpenGLLib)) CustomOpenGLLib=NULL; // bounds control dwTargetDDVersion = target->dxversion; MaxDdrawInterface = target->MaxDdrawInterface; if(dwTargetDDVersion<0) dwTargetDDVersion=0; if(dwTargetDDVersion>12) dwTargetDDVersion=12; TimeShift = target->InitTS; if(TimeShift < -8) TimeShift = -8; if(TimeShift > 8) TimeShift = 8; FakeVersionId = target->FakeVersionId; MaxScreenRes = target->MaxScreenRes; Coordinates = target->coordinates; switch(target->SwapEffect){ case 0: SwapEffect = D3DSWAPEFFECT_DISCARD; break; case 1: SwapEffect = D3DSWAPEFFECT_FLIP; break; case 2: SwapEffect = D3DSWAPEFFECT_COPY; break; case 3: SwapEffect = D3DSWAPEFFECT_OVERLAY; break; case 4: SwapEffect = D3DSWAPEFFECT_FLIPEX; break; } MustShowOverlay=((dwFlags2 & SHOWFPSOVERLAY) || (dwFlags4 & SHOWTIMESTRETCH)); if(dwFlags4 & FINETIMING){ pTimeShifter = TimeShifterFine; pTimeShifter64 = TimeShifter64Fine; } else{ pTimeShifter = TimeShifterCoarse; pTimeShifter64 = TimeShifter64Coarse; } iSiz0X = iSizX = target->sizx; iSiz0Y = iSizY = target->sizy; iPos0X = iPosX = target->posx; iPos0Y = iPosY = target->posy; iMaxW = target->resw; iMaxH = target->resh; // Aspect Ratio from window size, or traditional 4:3 by default iRatioX = iSizX ? iSizX : 800; iRatioY = iSizY ? iSizY : 600; // AutoScale: when iSizX == iSizY == 0, size is set to current screen resolution bAutoScale = !(iSizX && iSizY); // guessed initial screen resolution // v2.04.01.fx4: set default value ONLY when zero, because some program may initialize // them before creating a window that triggers second initialization, like "Spearhead" // through the Smack32 SmackSetSystemRes call if(!dwScreenWidth) dwScreenWidth = 800; if(!dwScreenHeight) dwScreenHeight = 600; SlowRatio = target->SlowRatio; ScanLine = target->ScanLine; GDIEmulationMode = GDIMODE_NONE; // default if (dwFlags2 & GDISTRETCHED) GDIEmulationMode = GDIMODE_STRETCHED; if (dwFlags3 & GDIEMULATEDC) GDIEmulationMode = GDIMODE_EMULATED; if (dwFlags6 & SHAREDDC) GDIEmulationMode = GDIMODE_SHAREDDC; if(dwFlags5 & HYBRIDMODE) { // special mode settings .... dwFlags1 |= EMULATESURFACE; dwFlags2 |= SETCOMPATIBILITY; dwFlags5 &= ~(BILINEARFILTER | AEROBOOST); } if(dwFlags5 & GDIMODE) dwFlags1 |= EMULATESURFACE; if(dwFlags5 & STRESSRESOURCES) dwFlags5 |= LIMITRESOURCES; IsEmulated = (dwFlags1 & (EMULATESURFACE|EMULATEBUFFER)) ? TRUE : FALSE; // includes also the HYBRIDMODE and GDIMODE cases .... extern GetWindowLong_Type pGetWindowLong; extern SetWindowLong_Type pSetWindowLong; // made before hooking !!! pGetWindowLong = (dwFlags5 & ANSIWIDE) ? GetWindowLongW : GetWindowLongA; pSetWindowLong = (dwFlags5 & ANSIWIDE) ? SetWindowLongW : SetWindowLongA; // hint system bHintActive = (dwFlags7 & SHOWHINTS) ? TRUE : FALSE; MonitorId = target->monitorid; // if specified, set the custom initial resolution if(dxw.dwFlags7 & INITIALRES) SetScreenSize(target->resw, target->resh); } void dxwCore::SetScreenSize(void) { // if specified, use values registered in InitTarget if(dxw.dwFlags7 & INITIALRES) return; if(dxw.Windowize){ SetScreenSize(800, 600); // set to default screen resolution } else{ int sizx, sizy; sizx = GetSystemMetrics(SM_CXSCREEN); sizy = GetSystemMetrics(SM_CYSCREEN); SetScreenSize(sizx, sizy); } } void dxwCore::SetScreenSize(int x, int y) { DXWNDSTATUS *p; OutTraceDW("DXWND: set screen size=(%d,%d)\n", x, y); if(x) dwScreenWidth=x; if(y) dwScreenHeight=y; p = GetHookInfo(); if(p) { p->Width = (short)dwScreenWidth; p->Height = (short)dwScreenHeight; } if(dwFlags4 & LIMITSCREENRES){ #define HUGE 100000 DWORD maxw, maxh; maxw=HUGE; maxh=HUGE; switch(dxw.MaxScreenRes){ case DXW_LIMIT_320x200: maxw=320; maxh=200; break; case DXW_LIMIT_400x300: maxw=400; maxh=300; break; case DXW_LIMIT_640x480: maxw=640; maxh=480; break; case DXW_LIMIT_800x600: maxw=800; maxh=600; break; case DXW_LIMIT_1024x768: maxw=1024; maxh=768; break; case DXW_LIMIT_1280x960: maxw=1280; maxh=960; break; } if(((DWORD)p->Width > maxw) || ((DWORD)p->Height > maxh)){ OutTraceDW("DXWND: limit device size=(%d,%d)\n", maxw, maxh); // v2.02.95 setting new virtual desktop size dwScreenWidth = p->Width = (short)maxw; dwScreenHeight= p->Height = (short)maxh; } } if(dxw.dwFlags7 & MAXIMUMRES){ if(((long)p->Width > dxw.iMaxW) || ((long)p->Height > dxw.iMaxH)){ OutTraceDW("DXWND: limit device size=(%d,%d)\n", dxw.iMaxW, dxw.iMaxH); // v2.03.90 setting new virtual desktop size dwScreenWidth = p->Width = (short)dxw.iMaxW; dwScreenHeight= p->Height = (short)dxw.iMaxH; } } } void dxwCore::DumpDesktopStatus() { HDC hDC; HWND hDesktop; RECT desktop; PIXELFORMATDESCRIPTOR pfd; int iPixelFormat, iBPP; char ColorMask[32+1]; // get the current pixel format index hDesktop = GetDesktopWindow(); hDC = GetDC(hDesktop); ::GetWindowRect(hDesktop, &desktop); iBPP = GetDeviceCaps(hDC, BITSPIXEL); iPixelFormat = GetPixelFormat(hDC); if(!iPixelFormat) iPixelFormat=1; // why returns 0??? // obtain a detailed description of that pixel format if(!DescribePixelFormat(hDC, iPixelFormat, sizeof(PIXELFORMATDESCRIPTOR), &pfd)){ OutTrace("DescribePixelFormat ERROR: err=%d\n", GetLastError()); return; } memset(ColorMask, ' ', 32); // blank fill ColorMask[32] = 0; // terminate if ((pfd.cRedShift+pfd.cRedBits <= 32) && (pfd.cGreenShift+pfd.cGreenBits <= 32) && (pfd.cBlueShift+pfd.cBlueBits <= 32) && (pfd.cAlphaShift+pfd.cAlphaBits <= 32)){ // everything within the 32 bits ... for (int i=pfd.cRedShift; i w) || (curr.y > h)){ if(IsWithin){ int RestX, RestY; RestX = w ? ((CLIP_TOLERANCE * w) / dxw.GetScreenWidth()) + 2 : CLIP_TOLERANCE + 2; RestY = h ? ((CLIP_TOLERANCE * h) / dxw.GetScreenHeight()) + 2 : CLIP_TOLERANCE + 2; if (curr.x < 0) curr.x = RestX; if (curr.y < 0) curr.y = RestY; if (curr.x > w) curr.x = w - RestX; if (curr.y > h) curr.y = h - RestY; LastPos = curr; IsWithin = FALSE; } else{ curr = LastPos; } } else{ IsWithin = TRUE; LastPos = curr; } } else { if (curr.x < 0) curr.x = 0; if (curr.y < 0) curr.y = 0; if (curr.x > w) curr.x = w; if (curr.y > h) curr.y = h; } if (w) curr.x = (curr.x * dxw.GetScreenWidth()) / w; if (h) curr.y = (curr.y * dxw.GetScreenHeight()) / h; } if((dxw.dwFlags1 & DISABLECLIPPING) && lpClipRegion){ // v2.1.93: // in clipping mode, avoid the cursor position to lay outside the valid rect // note 1: the rect follow the convention and valid coord lay between left to righ-1, // top to bottom-1 // note 2: CLIP_TOLERANCE is meant to handle possible integer divide tolerance errors // that may prevent reaching the clip rect borders. The smaller you shrink the window, // the bigger tolerance is required if (curr.x < lpClipRegion->left+CLIP_TOLERANCE) curr.x=lpClipRegion->left; if (curr.y < lpClipRegion->top+CLIP_TOLERANCE) curr.y=lpClipRegion->top; if (curr.x >= lpClipRegion->right-CLIP_TOLERANCE) curr.x=lpClipRegion->right-1; if (curr.y >= lpClipRegion->bottom-CLIP_TOLERANCE) curr.y=lpClipRegion->bottom-1; } else{ if (curr.x < CLIP_TOLERANCE) curr.x=0; if (curr.y < CLIP_TOLERANCE) curr.y=0; if (curr.x >= (LONG)dxw.GetScreenWidth()-CLIP_TOLERANCE) curr.x=dxw.GetScreenWidth()-1; if (curr.y >= (LONG)dxw.GetScreenHeight()-CLIP_TOLERANCE) curr.y=dxw.GetScreenHeight()-1; } return curr; } POINT dxwCore::ScreenToClient(POINT point) { // convert absolute screen coordinates to frame relative if (!(*pScreenToClient)(hWnd, &point)) { OutTraceE("ScreenToClient(%x) ERROR %d at %d\n", hWnd, GetLastError(), __LINE__); point.x =0; point.y=0; } return point; } void dxwCore::FixNCHITCursorPos(LPPOINT lppoint) { RECT rect; POINT point; point=*lppoint; (*pGetClientRect)(dxw.GethWnd(), &rect); (*pScreenToClient)(dxw.GethWnd(), &point); if (point.x < 0) return; if (point.y < 0) return; if (point.x > rect.right) return; if (point.y > rect.bottom) return; *lppoint=point; lppoint->x = (lppoint->x * dxw.GetScreenWidth()) / rect.right; lppoint->y = (lppoint->y * dxw.GetScreenHeight()) / rect.bottom; if(lppoint->x < CLIP_TOLERANCE) lppoint->x=0; if(lppoint->y < CLIP_TOLERANCE) lppoint->y=0; if(lppoint->x > (LONG)dxw.GetScreenWidth()-CLIP_TOLERANCE) lppoint->x=dxw.GetScreenWidth()-1; if(lppoint->y > (LONG)dxw.GetScreenHeight()-CLIP_TOLERANCE) lppoint->y=dxw.GetScreenHeight()-1; } void dxwCore::InitializeClipCursorState(void) { RECT cliprect; BOOL clipret; clipret = (*pGetClipCursor)(&cliprect); // v2.04.06: you always get a clipper area. To tell that the clipper is NOT active for your window // you can compare the clipper area with the whole desktop. If they are equivalent, you have no // clipper (or you are in fullscreen mode, but that is equivalent). ClipCursorToggleState = TRUE; if (((cliprect.right - cliprect.left) == (*pGetSystemMetrics)(SM_CXVIRTUALSCREEN)) && ((cliprect.bottom - cliprect.top) == (*pGetSystemMetrics)(SM_CYVIRTUALSCREEN))) ClipCursorToggleState = FALSE; OutTraceDW("Initial clipper status=%x\n", ClipCursorToggleState); } BOOL dxwCore::IsClipCursorActive(void) { static BOOL bDoOnce = TRUE; if (bDoOnce) InitializeClipCursorState(); return ClipCursorToggleState; } void dxwCore::SetClipCursor() { RECT Rect; POINT UpLeftCorner={0,0}; OutTraceDW("SetClipCursor:\n"); if (hWnd==NULL) { OutTraceDW("SetClipCursor: ASSERT hWnd==NULL\n"); return; } // check for errors to avoid setting random clip regions //if((*pIsWindowVisible)(hWnd)){ // OutTraceE("SetClipCursor: not visible\n"); // return; //} if(!(*pGetClientRect)(hWnd, &Rect)){ OutTraceE("SetClipCursor: GetClientRect ERROR err=%d at %d\n", GetLastError(), __LINE__); return; } if((Rect.right == 0) && (Rect.bottom == 0)){ OutTraceE("SetClipCursor: GetClientRect returns zero sized rect at %d\n", __LINE__); return; } if(!(*pClientToScreen)(hWnd, &UpLeftCorner)){ OutTraceE("SetClipCursor: ClientToScreen ERROR err=%d at %d\n", GetLastError(), __LINE__); return ; } Rect.left+=UpLeftCorner.x; Rect.right+=UpLeftCorner.x; Rect.top+=UpLeftCorner.y; Rect.bottom+=UpLeftCorner.y; if(dwFlags8 & CLIPMENU) { // v2.04.11: // if flag set and the window has a menu, extend the mouse clipper area to allow reaching the manu // implementation is partial: doesn't take in account multi-lines menues or menus positioned // not on the top of the window client area, but it seems good for the most cases. if(GetMenu(hWnd)) Rect.top -= (*pGetSystemMetrics)(SM_CYMENU); } (*pClipCursor)(NULL); if((*pClipCursor)(&Rect)){ ClipCursorToggleState = TRUE; } else{ OutTraceE("SetClipCursor: ERROR err=%d at %d\n", GetLastError(), __LINE__); } OutTraceDW("SetClipCursor: rect=(%d,%d)-(%d,%d)\n", Rect.left, Rect.top, Rect.right, Rect.bottom); } void dxwCore::EraseClipCursor() { OutTraceDW("EraseClipCursor:\n"); (*pClipCursor)(NULL); ClipCursorToggleState = FALSE; } void dxwCore::SethWnd(HWND hwnd) { RECT WinRect; if(!pGetWindowRect) pGetWindowRect=::GetWindowRect; if(!pGDIGetDC) pGDIGetDC=::GetDC; hWnd=hwnd; hWndFPS=hwnd; if(hwnd){ (*pGetWindowRect)(hwnd, &WinRect); OutTraceDW("SethWnd: setting main win=%x pos=(%d,%d)-(%d,%d)\n", hwnd, WinRect.left, WinRect.top, WinRect.right, WinRect.bottom); } else{ OutTraceDW("SethWnd: clearing main win\n"); } } BOOL dxwCore::ishWndFPS(HWND hwnd) { return (hwnd == hWndFPS); } void dxwCore::FixWorkarea(LPRECT workarea) { int w, h, b; // width, height and border w = workarea->right - workarea->left; h = workarea->bottom - workarea->top; if ((w * iRatioY) > (h * iRatioX)){ b = (w - (h * iRatioX / iRatioY))/2; workarea->left += b; workarea->right -= b; } else { b = (h - (w * iRatioY / iRatioX))/2; workarea->top += b; workarea->bottom -= b; } } //#define DUMPALLPALETTECHANGES TRUE void dxwCore::DumpPalette(DWORD dwcount, LPPALETTEENTRY lpentries) { char sInfo[(14*256)+1]; sInfo[0]=0; // "Spearhead" has a bug that sets 897 palette entries! if(dwcount > 256) dwcount=256; for(DWORD idx=0; idxPalette[idx]= lpentries[idx]; Sleep(2000); } #endif } void dxwCore::ScreenRefresh(void) { // optimization: don't blit too often! // 20mSec seems a good compromise. #define DXWREFRESHINTERVAL 20 LPDIRECTDRAWSURFACE lpDDSPrim; extern HRESULT WINAPI extBlt(int, Blt_Type, LPDIRECTDRAWSURFACE, LPRECT, LPDIRECTDRAWSURFACE, LPRECT, DWORD, LPDDBLTFX); static int t = -1; if (t == -1) t = (*pGetTickCount)()-(DXWREFRESHINTERVAL+1); // V.2.1.69: trick - subtract int tn = (*pGetTickCount)(); if (tn-t < DXWREFRESHINTERVAL) return; t = tn; // if not too early, refresh primary surface .... lpDDSPrim=dxwss.GetPrimarySurface(); extern Blt_Type pBltMethod(); extern int lpddsHookedVersion(); if (lpDDSPrim) extBlt(lpddsHookedVersion(), pBltMethod(), lpDDSPrim, NULL, lpDDSPrim, NULL, 0, NULL); // v2.02.44 - used for what? Commenting out seems to fix the palette update glitches // and make the "Palette updates don't blit" option useless.... //(*pInvalidateRect)(hWnd, NULL, FALSE); } void dxwCore::DoSlow(int delay) { MSG uMsg; int t, tn; t = (*pGetTickCount)(); uMsg.message=0; // initialize somehow... while((tn = (*pGetTickCount)())-t < delay){ while (PeekMessage (&uMsg, NULL, 0, 0, PM_REMOVE) > 0){ if(WM_QUIT == uMsg.message) break; TranslateMessage (&uMsg); DispatchMessage (&uMsg); } (*pSleep)(1); } } // Remarks: // If the target window is owned by the current process, GetWindowText causes a WM_GETTEXT message // to be sent to the specified window or control. If the target window is owned by another process // and has a caption, GetWindowText retrieves the window caption text. If the window does not have // a caption, the return value is a null string. This behavior is by design. It allows applications // to call GetWindowText without becoming unresponsive if the process that owns the target window // is not responding. However, if the target window is not responding and it belongs to the calling // application, GetWindowText will cause the calling application to become unresponsive. static void CountFPS(HWND hwnd) { static DWORD time = 0xFFFFFFFF; static DWORD FPSCount = 0; static HWND LasthWnd = 0; extern void SetFPS(int); static char sBuf[80+15+1]; // title + fps string + terminator //DXWNDSTATUS Status; DWORD tmp; tmp = (*pGetTickCount)(); if((tmp - time) > 1000) { char *fpss; // log fps count // OutTrace("FPS: Delta=%x FPSCount=%d\n", (tmp-time), FPSCount); // show fps count on status win GetHookInfo()->FPSCount = FPSCount; // for overlay display // show fps on win title bar if (dxw.dwFlags2 & SHOWFPS){ if(hwnd != LasthWnd){ GetWindowText(hwnd, sBuf, 80); LasthWnd = hwnd; } fpss=strstr(sBuf," ~ ("); if(fpss==NULL) fpss=&sBuf[strlen(sBuf)]; sprintf_s(fpss, 15, " ~ (%d FPS)", FPSCount); SetWindowText(hwnd, sBuf); } // reset FPSCount=0; time = tmp; } else { FPSCount++; OutTraceB("FPS: Delta=%x FPSCount++=%d\n", (tmp-time), FPSCount); } } static void LimitFrameCount(DWORD delay) { static DWORD oldtime = (*pGetTickCount)(); DWORD newtime; newtime = (*pGetTickCount)(); if(IsDebug) OutTrace("FPS limit: old=%x new=%x delay=%d sleep=%d\n", oldtime, newtime, delay, (oldtime+delay-newtime)); // use '<' and not '<=' to avoid the risk of sleeping forever.... if((newtime < oldtime+delay) && (newtime >= oldtime)) { //if(IsDebug) OutTrace("FPS limit: old=%x new=%x delay=%d sleep=%d\n", // oldtime, newtime, delay, (oldtime+delay-newtime)); do{ if(IsDebug) OutTrace("FPS limit: sleep=%d\n", oldtime+delay-newtime); (*pSleep)(oldtime+delay-newtime); newtime = (*pGetTickCount)(); if(IsDebug) OutTrace("FPS limit: newtime=%d\n", newtime); } while(newtime < oldtime+delay); } oldtime += delay; if(oldtime < newtime-delay) oldtime = newtime-delay; } static BOOL SkipFrameCount(DWORD delay) { static DWORD oldtime=(*pGetTickCount)(); DWORD newtime; newtime = (*pGetTickCount)(); if(newtime < oldtime+delay) return TRUE; // TRUE => skip the screen refresh oldtime = newtime; return FALSE; // don't skip, do the update } BOOL dxwCore::HandleFPS() { if(dwFlags2 & (SHOWFPS|SHOWFPSOVERLAY)) CountFPS(hWndFPS); if(dwFlags2 & LIMITFPS) LimitFrameCount(dxw.MaxFPS); if(dwFlags2 & SKIPFPS) if(SkipFrameCount(dxw.MaxFPS)) return TRUE; return FALSE; } // auxiliary functions ... void dxwCore::SetVSyncDelays(UINT RefreshRate) { int Reminder; char sInfo[256]; if(!(dxw.dwFlags1 & SAVELOAD)) return; if((RefreshRate < 10) || (RefreshRate > 100)) return; gdwRefreshRate = RefreshRate; if(!gdwRefreshRate) return; iRefreshDelayCount=0; Reminder=0; do{ iRefreshDelays[iRefreshDelayCount]=(1000+Reminder)/gdwRefreshRate; Reminder=(1000+Reminder)-(iRefreshDelays[iRefreshDelayCount]*gdwRefreshRate); iRefreshDelayCount++; } while(Reminder && (iRefreshDelayCount 32) time = tmp; (*pSleep)(time - tmp); time += iRefreshDelays[step++]; if(step >= iRefreshDelayCount) step=0; } void dxwCore::VSyncWaitLine(DWORD ScanLine) { extern LPDIRECTDRAW lpPrimaryDD; static DWORD iLastScanLine = 0; DWORD iCurrentScanLine; if (!lpPrimaryDD) return; while(1){ HRESULT res; if(res=lpPrimaryDD->GetScanLine(&iCurrentScanLine)) { OutTraceE("VSyncWaitLine: GetScanLine ERROR res=%x\n", res); iLastScanLine = 0; break; // error } if((iLastScanLine <= ScanLine) && (iCurrentScanLine > ScanLine)) { OutTraceB("VSyncWaitLine: line=%d last=%d\n", iCurrentScanLine, iLastScanLine); break; } iLastScanLine = iCurrentScanLine; (*pSleep)(1); } } static float fMul[17]={2.14F, 1.95F, 1.77F, 1.61F, 1.46F, 1.33F, 1.21F, 1.10F, 1.00F, 0.91F, 0.83F, 0.75F, 0.68F, 0.62F, 0.56F, 0.51F, 0.46F}; static DWORD TimeShifterFine(DWORD val, int shift) { float fVal; fVal = (float)val * fMul[shift+8]; return (DWORD)fVal; } static DWORD TimeShifterCoarse(DWORD val, int shift) { int exp, reminder; if (shift > 0) { exp = shift >> 1; reminder = shift & 0x1; if (reminder) val -= (val >> 2); // val * (1-1/4) = val * 3/4 val >>= exp; // val * 2^exp } if (shift < 0) { exp = (-shift) >> 1; reminder = (-shift) & 0x1; val <<= exp; // val / 2^exp if (reminder) val += (val >> 1); // val * (1+1/2) = val * 3/2 } return val; } static LARGE_INTEGER TimeShifter64Fine(LARGE_INTEGER val, int shift) { float fVal; fVal = (float)val.LowPart * fMul[shift+8]; val.HighPart = 0; val.LowPart = (DWORD)fVal; return val; } static LARGE_INTEGER TimeShifter64Coarse(LARGE_INTEGER val, int shift) { int exp, reminder; if (shift > 0) { exp = shift >> 1; reminder = shift & 0x1; if (reminder) val.QuadPart -= (val.QuadPart >> 2); // val * (1-1/4) = val * 3/4 val.QuadPart >>= exp; // val * 2^exp } if (shift < 0) { exp = (-shift) >> 1; reminder = (-shift) & 0x1; val.QuadPart <<= exp; // val / 2^exp if (reminder) val.QuadPart += (val.QuadPart >> 1); // val * (1+1/2) = val * 3/2 } return val; } DWORD dxwCore::GetTickCount(void) { DWORD dwTick; static DWORD dwLastRealTick=0; static DWORD dwLastFakeTick=0; DWORD dwNextRealTick; static BOOL FirstTime = TRUE; if(FirstTime){ dwLastRealTick=(*pGetTickCount)(); dwLastFakeTick=dwLastRealTick; FirstTime=FALSE; } dwNextRealTick=(*pGetTickCount)(); dwTick=(dwNextRealTick-dwLastRealTick); TimeShift=GetHookInfo()->TimeShift; dwTick = (*pTimeShifter)(dwTick, TimeShift); if(TimeFreeze) dwTick=0; dwLastFakeTick += dwTick; dwLastRealTick = dwNextRealTick; return dwLastFakeTick; } DWORD dxwCore::StretchTime(DWORD dwTimer) { TimeShift=GetHookInfo()->TimeShift; dwTimer = (*pTimeShifter)(dwTimer, -TimeShift); return dwTimer; } DWORD dxwCore::StretchCounter(DWORD dwTimer) { TimeShift=GetHookInfo()->TimeShift; dwTimer = (*pTimeShifter)(dwTimer, TimeShift); return (dxw.TimeFreeze) ? 0 : dwTimer; } LARGE_INTEGER dxwCore::StretchCounter(LARGE_INTEGER dwTimer) { static int Reminder = 0; LARGE_INTEGER ret; LARGE_INTEGER zero = {0,0}; TimeShift=GetHookInfo()->TimeShift; dwTimer.QuadPart += Reminder; ret = (*pTimeShifter64)(dwTimer, TimeShift); Reminder = (ret.QuadPart==0) ? dwTimer.LowPart : 0; return (dxw.TimeFreeze) ? zero : ret; } void dxwCore::GetSystemTimeAsFileTime(LPFILETIME lpSystemTimeAsFileTime) { DWORD dwTick; DWORD dwCurrentTick; FILETIME CurrFileTime; static DWORD dwStartTick=0; static FILETIME StartFileTime; if(dwStartTick==0) { SYSTEMTIME StartingTime; // first time through, initialize & return true time dwStartTick = (*pGetTickCount)(); (*pGetSystemTime)(&StartingTime); SystemTimeToFileTime(&StartingTime, &StartFileTime); *lpSystemTimeAsFileTime = StartFileTime; } else { dwCurrentTick=(*pGetTickCount)(); dwTick=(dwCurrentTick-dwStartTick); TimeShift=GetHookInfo()->TimeShift; dwTick = (*pTimeShifter)(dwTick, TimeShift); if(dxw.TimeFreeze) dwTick=0; // From MSDN: Contains a 64-bit value representing the number of // 100-nanosecond intervals since January 1, 1601 (UTC). // So, since 1mSec = 10.000 * 100nSec, you still have to multiply by 10.000. CurrFileTime.dwHighDateTime = StartFileTime.dwHighDateTime; // wrong !!!! CurrFileTime.dwLowDateTime = StartFileTime.dwLowDateTime + (10000 * dwTick); // wrong !!!! *lpSystemTimeAsFileTime=CurrFileTime; // reset to avoid time jumps on TimeShift changes... StartFileTime = CurrFileTime; dwStartTick = dwCurrentTick; } } void dxwCore::GetSystemTime(LPSYSTEMTIME lpSystemTime) { DWORD dwTick; DWORD dwCurrentTick; FILETIME CurrFileTime; static DWORD dwStartTick=0; static FILETIME StartFileTime; if(dwStartTick==0) { SYSTEMTIME StartingTime; // first time through, initialize & return true time dwStartTick = (*pGetTickCount)(); (*pGetSystemTime)(&StartingTime); SystemTimeToFileTime(&StartingTime, &StartFileTime); *lpSystemTime = StartingTime; } else { dwCurrentTick=(*pGetTickCount)(); dwTick=(dwCurrentTick-dwStartTick); TimeShift=GetHookInfo()->TimeShift; dwTick = (*pTimeShifter)(dwTick, TimeShift); if(TimeFreeze) dwTick=0; // From MSDN: Contains a 64-bit value representing the number of // 100-nanosecond intervals since January 1, 1601 (UTC). // So, since 1mSec = 10.000 * 100nSec, you still have to multiply by 10.000. CurrFileTime.dwHighDateTime = StartFileTime.dwHighDateTime; // wrong !!!! CurrFileTime.dwLowDateTime = StartFileTime.dwLowDateTime + (10000 * dwTick); // wrong !!!! FileTimeToSystemTime(&CurrFileTime, lpSystemTime); // reset to avoid time jumps on TimeShift changes... StartFileTime = CurrFileTime; dwStartTick = dwCurrentTick; } } void dxwCore::ShowOverlay() { if (MustShowOverlay) { RECT rect; (*pGetClientRect)(hWnd, &rect); this->ShowOverlay(GetDC(hWnd), rect.right, rect.bottom); } } void dxwCore::ShowOverlay(LPDIRECTDRAWSURFACE lpdds) { typedef HRESULT (WINAPI *GetDC_Type) (LPDIRECTDRAWSURFACE, HDC FAR *); typedef HRESULT (WINAPI *ReleaseDC_Type)(LPDIRECTDRAWSURFACE, HDC); extern GetDC_Type pGetDCMethod(); extern ReleaseDC_Type pReleaseDCMethod(); if (MustShowOverlay) { HDC hdc; // the working dc int h, w; if(!lpdds) return; if (FAILED((*pGetDCMethod())(lpdds, &hdc))) return; w = this->GetScreenWidth(); h = this->GetScreenHeight(); if(this->dwFlags4 & BILINEAR2XFILTER) { w <<=1; h <<=1; } this->ShowOverlay(hdc, w, h); (*pReleaseDCMethod())(lpdds, hdc); } } void dxwCore::ShowOverlay(HDC hdc) { if(!hdc) return; RECT rect; (*pGetClientRect)(hWnd, &rect); this->ShowOverlay(hdc, rect.right, rect.bottom); } void dxwCore::ShowOverlay(HDC hdc, int w, int h) { if(!hdc) return; if (dwFlags2 & SHOWFPSOVERLAY) ShowFPS(hdc, w, h); if (dwFlags4 & SHOWTIMESTRETCH) ShowTimeStretching(hdc, w, h); } // nasty global to ensure that the corner is picked semi-random, but never overlapped // between FPS and TimeStretch (and, as a side effect, never twice the same!) static int LastCorner; void dxwCore::ShowFPS(HDC xdc, int w, int h) { char sBuf[81]; static DWORD dwTimer = 0; static int corner = 0; static int x, y; static DWORD color; if((*pGetTickCount)()-dwTimer > 6000){ dwTimer = (*pGetTickCount)(); corner = dwTimer % 4; if(corner==LastCorner) corner = (corner+1) % 4; LastCorner = corner; color=0xFF0000; // blue switch (corner) { case 0: x=10; y=10; break; case 1: x=w-60; y=10; break; case 2: x=w-60; y=h-20; break; case 3: x=10; y=h-20; break; } } SetTextColor(xdc,color); SetBkMode(xdc, OPAQUE); sprintf_s(sBuf, 80, "FPS: %d", GetHookInfo()->FPSCount); TextOut(xdc, x, y, sBuf, strlen(sBuf)); } void dxwCore::ShowTimeStretching(HDC xdc, int w, int h) { char sBuf[81]; static DWORD dwTimer = 0; static int corner = 0; static int x, y; static DWORD color; static int LastTimeShift = 1000; // any initial number different from -8 .. +8 static int LastTimeFreeze = 1000; // any initial number different from TRUE, FALSE if((*pGetTickCount)()-dwTimer > 4000){ if((LastTimeShift==TimeShift) && (LastTimeFreeze==TimeFreeze)) return; // after a while, stop the show dwTimer = (*pGetTickCount)(); LastTimeShift=TimeShift; corner = dwTimer % 4; if(corner==LastCorner) corner = (corner+1) % 4; LastCorner = corner; color=0x0000FF; // red switch (corner) { case 0: x=10; y=10; break; case 1: x=w-60; y=10; break; case 2: x=w-60; y=h-20; break; case 3: x=10; y=h-20; break; } } SetTextColor(xdc,color); SetBkMode(xdc, OPAQUE); sprintf_s(sBuf, 80, "t%s", dxw.GetTSCaption()); TextOut(xdc, x, y, sBuf, strlen(sBuf)); } char *dxwCore::GetTSCaption(int shift) { static char *sTSCaptionCoarse[17]={ "x16","x12","x8","x6", "x4","x3","x2","x1.5", "x1", ":1.5",":2",":3",":4", ":6",":8",":12",":16"}; static char *sTSCaptionFine[17]={ "x2.14","x1.95","x1.77","x1.61", "x1.46","x1.33","x1.21","x1.10", "x1.00", ":1.10",":1.21",":1.33",":1.46", ":1.61",":1.77",":1.95",":2.14"}; if(TimeFreeze) return "x0"; if (shift<(-8) || shift>(+8)) return "???"; shift += 8; return (dxw.dwFlags4 & FINETIMING) ? sTSCaptionFine[shift] : sTSCaptionCoarse[shift]; } char *dxwCore::GetTSCaption(void) { return GetTSCaption(TimeShift); } void dxwCore::ShowBanner(HWND hwnd) { static BOOL JustOnce=FALSE; extern HMODULE hInst; BITMAP bm; HDC hClientDC; HBITMAP g_hbmBall; RECT client; RECT win; POINT PrevViewPort; int StretchMode; hClientDC=(*pGDIGetDC)(hwnd); (*pGetClientRect)(hwnd, &client); //(*pInvalidateRect)((*pGetDesktopWindow)(), NULL, FALSE); // invalidate full desktop, no erase. (*pInvalidateRect)(0, NULL, FALSE); // invalidate full desktop, no erase. (*pGDIBitBlt)(hClientDC, 0, 0, client.right, client.bottom, NULL, 0, 0, BLACKNESS); if(JustOnce || (dwFlags2 & NOBANNER)) return; JustOnce=TRUE; g_hbmBall = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_BANNER)); HDC hdcMem = CreateCompatibleDC(hClientDC); HBITMAP hbmOld = (HBITMAP)(*pSelectObject)(hdcMem, g_hbmBall); GetObject(g_hbmBall, sizeof(bm), &bm); (*pGetWindowRect)(hwnd, &win); OutTraceDW("ShowBanner: hwnd=%x win=(%d,%d)-(%d,%d) banner size=(%dx%d)\n", hwnd, win.left, win.top, win.right, win.bottom, bm.bmWidth, bm.bmHeight); //if(!pSetViewportOrgEx) pSetViewportOrgEx=SetViewportOrgEx; (*pSetViewportOrgEx)(hClientDC, 0, 0, &PrevViewPort); StretchMode=GetStretchBltMode(hClientDC); SetStretchBltMode(hClientDC, HALFTONE); for (int i=1; i<=16; i++){ int w, h; w=(bm.bmWidth*i)/8; h=(bm.bmHeight*i)/8; (*pGDIStretchBlt)(hClientDC, (client.right-w)/2, (client.bottom-h)/2, w, h, hdcMem, 0, 0, bm.bmWidth, bm.bmHeight, SRCCOPY); Sleep(40); } for (int i=16; i>=8; i--){ int w, h; w=(bm.bmWidth*i)/8; h=(bm.bmHeight*i)/8; (*pGDIBitBlt)(hClientDC, 0, 0, client.right, client.bottom, NULL, 0, 0, BLACKNESS); (*pGDIStretchBlt)(hClientDC, (client.right-w)/2, (client.bottom-h)/2, w, h, hdcMem, 0, 0, bm.bmWidth, bm.bmHeight, SRCCOPY); Sleep(40); } SetStretchBltMode(hClientDC, StretchMode); (*pSetViewportOrgEx)(hClientDC, PrevViewPort.x, PrevViewPort.y, NULL); (*pSelectObject)(hdcMem, hbmOld); DeleteDC(hdcMem); (*pGDIReleaseDC)(hwnd, hClientDC); Sleep(200); } void dxwCore::PushDLL(char *lpName, int idx) { SysNames[idx] = lpName; // add entry } int dxwCore::GetDLLIndex(char *lpFileName) { int idx; char *lpName, *lpNext; lpName=lpFileName; while (lpNext=strchr(lpName,'\\')) lpName=lpNext+1; for(idx=0; SysNames[idx]; idx++){ char SysNameExt[81]; strcpy(SysNameExt, SysNames[idx]); strcat(SysNameExt, ".dll"); if( (!lstrcmpi(lpName,SysNames[idx])) || (!lstrcmpi(lpName,SysNameExt)) ){ OutTraceDW("Registered DLL FileName=%s\n", lpFileName); break; } } if (!SysNames[idx]) return -1; return idx; } DWORD dxwCore::FixWinStyle(DWORD dwStyle) { switch(dxw.Coordinates){ case DXW_SET_COORDINATES: case DXW_DESKTOP_CENTER: if(dxw.dwFlags2 & MODALSTYLE){ dwStyle &= ~(WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_SYSMENU | WS_THICKFRAME); } else { dwStyle = WS_OVERLAPPEDWINDOW; } break; case DXW_DESKTOP_WORKAREA: case DXW_DESKTOP_FULL: dwStyle = 0; break; } return dwStyle; } DWORD dxwCore::FixWinExStyle(DWORD dwExStyle) { switch(dxw.Coordinates){ case DXW_SET_COORDINATES: case DXW_DESKTOP_CENTER: if(dxw.dwFlags2 & MODALSTYLE){ dwExStyle &= ~(WS_EX_CLIENTEDGE | WS_EX_DLGMODALFRAME | WS_EX_STATICEDGE | WS_EX_WINDOWEDGE); } else { dwExStyle &= ~(WS_EX_CLIENTEDGE | WS_EX_DLGMODALFRAME | WS_EX_STATICEDGE | WS_EX_WINDOWEDGE); } break; case DXW_DESKTOP_WORKAREA: case DXW_DESKTOP_FULL: dwExStyle = 0; break; } return dwExStyle; } void dxwCore::FixWindowFrame(HWND hwnd) { LONG nStyle, nExStyle; OutTraceDW("FixWindowFrame: hwnd=%x foreground=%x\n", hwnd, GetForegroundWindow()); nStyle=(*pGetWindowLong)(hwnd, GWL_STYLE); // beware: 0 is a valid return code! //if (!nStyle){ // OutTraceE("FixWindowFrame: GetWindowLong ERROR %d at %d\n",GetLastError(),__LINE__); // return; //} nExStyle=(*pGetWindowLong)(hwnd, GWL_EXSTYLE); // beware: 0 is a valid return code! //if (!nExStyle){ // OutTraceE("FixWindowFrame: GetWindowLong ERROR %d at %d\n",GetLastError(),__LINE__); // return; //} OutTraceDW("FixWindowFrame: style=%x(%s) exstyle=%x(%s)\n", nStyle, ExplainStyle(nStyle), nExStyle, ExplainExStyle(nExStyle)); // fix style if (!(*pSetWindowLongA)(hwnd, GWL_STYLE, FixWinStyle(nStyle))){ OutTraceE("FixWindowFrame: SetWindowLong ERROR %d at %d\n",GetLastError(),__LINE__); return; } // fix exstyle if (!(*pSetWindowLongA)(hwnd, GWL_EXSTYLE, FixWinExStyle(nExStyle))){ OutTraceE("FixWindowFrame: SetWindowLong ERROR %d at %d\n",GetLastError(),__LINE__); return; } // ShowWindow retcode means in no way an error code! Better ignore it. (*pShowWindow)(hwnd, SW_RESTORE); return; } void dxwCore::FixStyle(char *ApiName, HWND hwnd, WPARAM wParam, LPARAM lParam) { LPSTYLESTRUCT lpSS; lpSS = (LPSTYLESTRUCT) lParam; switch (wParam) { case GWL_STYLE: OutTraceDW("%s: new Style=%x(%s)\n", ApiName, lpSS->styleNew, ExplainStyle(lpSS->styleNew)); if (dxw.dwFlags1 & FIXWINFRAME){ // set canonical style lpSS->styleNew= WS_OVERLAPPEDWINDOW; } if (dxw.dwFlags9 & FIXTHINFRAME){ // set canonical style with thin border lpSS->styleNew= WS_OVERLAPPEDTHIN; } if (dxw.dwFlags1 & LOCKWINSTYLE){ // set to current value lpSS->styleNew= (*pGetWindowLong)(hwnd, GWL_STYLE); } if (dxw.dwFlags1 & PREVENTMAXIMIZE){ // disable maximize settings if (lpSS->styleNew & WS_MAXIMIZE){ OutTraceDW("%s: prevent maximize style\n", ApiName); lpSS->styleNew &= ~WS_MAXIMIZE; } } break; case GWL_EXSTYLE: OutTraceDW("%s: new ExStyle=%x(%s)\n", ApiName, lpSS->styleNew, ExplainExStyle(lpSS->styleNew)); if (dxw.dwFlags1 & FIXWINFRAME){ // set canonical style lpSS->styleNew= 0; } if (dxw.dwFlags1 & LOCKWINSTYLE){ // set to current value lpSS->styleNew= (*pGetWindowLong)(hwnd, GWL_EXSTYLE); } if ((dxw.dwFlags5 & UNLOCKZORDER) && (hwnd==hWnd)){ // disable maximize settings if (lpSS->styleNew & WS_EX_TOPMOST){ OutTraceDW("%s: prevent EXSTYLE topmost style\n", ApiName); lpSS->styleNew &= ~WS_EX_TOPMOST; } } break; default: break; } } void dxwCore::PushTimer(UINT uTimerId, UINT uDelay, UINT uResolution, LPTIMECALLBACK lpTimeProc, DWORD_PTR dwUser, UINT fuEvent) { // save current timer TimerEvent.dwTimerType = TIMER_TYPE_WINMM; TimerEvent.t.uTimerId = uTimerId; TimerEvent.t.uDelay = uDelay; TimerEvent.t.uResolution = uResolution; TimerEvent.t.lpTimeProc = lpTimeProc; TimerEvent.t.dwUser = dwUser; TimerEvent.t.fuEvent = fuEvent; } void dxwCore::PushTimer(HWND hWnd, UINT_PTR nIDEvent, UINT uElapse, TIMERPROC lpTimerFunc) { // save current timer TimerEvent.dwTimerType = TIMER_TYPE_USER32; TimerEvent.t.hWnd = hWnd; TimerEvent.t.nIDEvent = nIDEvent; TimerEvent.t.uElapse = uElapse; TimerEvent.t.lpTimerFunc = lpTimerFunc; } void dxwCore::PopTimer(UINT uTimerId) { // clear current timer if(TimerEvent.dwTimerType != TIMER_TYPE_WINMM) { // this should never happen, unless there are more than 1 timer! char msg[256]; sprintf(msg,"PopTimer: TimerType=%x last=%x\n", TIMER_TYPE_WINMM, TimerEvent.dwTimerType); //MessageBox(0, msg, "PopTimer", MB_OK | MB_ICONEXCLAMATION); OutTraceE(msg); return; } if(uTimerId != TimerEvent.t.uTimerId){ // this should never happen, unless there are more than 1 timer! char msg[256]; sprintf(msg,"PopTimer: TimerId=%x last=%x\n", uTimerId, TimerEvent.t.uTimerId); //MessageBox(0, msg, "PopTimer", MB_OK | MB_ICONEXCLAMATION); OutTraceE(msg); return; } TimerEvent.dwTimerType = TIMER_TYPE_NONE; } void dxwCore::PopTimer(HWND hWnd, UINT_PTR nIDEvent) { // clear current timer if(TimerEvent.dwTimerType != TIMER_TYPE_USER32) { // this should never happen, unless there are more than 1 timer! char msg[256]; sprintf(msg,"PopTimer: TimerType=%x last=%x\n", TIMER_TYPE_WINMM, TimerEvent.dwTimerType); //MessageBox(0, msg, "PopTimer", MB_OK | MB_ICONEXCLAMATION); OutTraceE(msg); return; } if(nIDEvent != TimerEvent.t.nIDEvent){ // this should never happen, unless there are more than 1 timer! char msg[256]; sprintf(msg,"PopTimer: TimerId=%x last=%x\n", nIDEvent, TimerEvent.t.nIDEvent); //MessageBox(0, msg, "PopTimer", MB_OK | MB_ICONEXCLAMATION); OutTraceE(msg); return; } TimerEvent.dwTimerType = TIMER_TYPE_NONE; } void dxwCore::RenewTimers() { OutTraceE("DXWND: RenewTimers type=%x\n", TimerEvent.dwTimerType); switch(TimerEvent.dwTimerType){ case TIMER_TYPE_NONE: OutTraceDW("DXWND: RenewTimers type=NONE\n"); break; case TIMER_TYPE_USER32: if(pSetTimer && pKillTimer){ UINT uElapse; UINT_PTR res; res=(*pKillTimer)(TimerEvent.t.hWnd, TimerEvent.t.nIDEvent); if(!res) OutTraceE("DXWND: KillTimer ERROR hWnd=%x IDEvent=%x err=%d\n", TimerEvent.t.hWnd, TimerEvent.t.nIDEvent, GetLastError()); uElapse = dxw.StretchTime(TimerEvent.t.uElapse); res=(*pSetTimer)(TimerEvent.t.hWnd, TimerEvent.t.nIDEvent, uElapse, TimerEvent.t.lpTimerFunc); TimerEvent.t.nIDEvent = res; if(res) OutTraceDW("DXWND: RenewTimers type=USER32 Elsapse=%d IDEvent=%x\n", uElapse, res); else OutTraceE("DXWND: SetTimer ERROR hWnd=%x Elapse=%d TimerFunc=%x err=%d\n", TimerEvent.t.hWnd, uElapse, TimerEvent.t.lpTimerFunc, GetLastError()); } break; case TIMER_TYPE_WINMM: if(ptimeKillEvent && ptimeSetEvent){ UINT NewDelay; MMRESULT res; (*ptimeKillEvent)(TimerEvent.t.uTimerId); NewDelay = dxw.StretchTime(TimerEvent.t.uDelay); res=(*ptimeSetEvent)(NewDelay, TimerEvent.t.uResolution, TimerEvent.t.lpTimeProc, TimerEvent.t.dwUser, TimerEvent.t.fuEvent); TimerEvent.t.uTimerId = res; OutTraceDW("DXWND: RenewTimers type=WINMM Delay=%d TimerId=%x\n", NewDelay, res); } break; default: OutTraceE("DXWND: RenewTimers type=%x(UNKNOWN)\n", TimerEvent.dwTimerType); break; } } LARGE_INTEGER dxwCore::StretchLargeCounter(LARGE_INTEGER CurrentInCount) { LARGE_INTEGER CurrentOutPerfCount; static LARGE_INTEGER LastInPerfCount; static LARGE_INTEGER LastOutPerfCount; static BOOL FirstTime = TRUE; LARGE_INTEGER ElapsedCount; if(FirstTime){ // first time through, initialize both inner and output per counters with real values LastInPerfCount.QuadPart = CurrentInCount.QuadPart; LastOutPerfCount.QuadPart = CurrentInCount.QuadPart; FirstTime=FALSE; } ElapsedCount.QuadPart = CurrentInCount.QuadPart - LastInPerfCount.QuadPart; ElapsedCount = dxw.StretchCounter(ElapsedCount); CurrentOutPerfCount.QuadPart = LastOutPerfCount.QuadPart + ElapsedCount.QuadPart; LastInPerfCount = CurrentInCount; LastOutPerfCount = CurrentOutPerfCount; OutTraceB("dxw::StretchCounter: Count=[%x-%x]\n", CurrentOutPerfCount.HighPart, CurrentOutPerfCount.LowPart); return CurrentOutPerfCount; } BOOL dxwCore::CheckScreenResolution(unsigned int w, unsigned int h) { #define HUGE 100000 if(dxw.dwFlags4 & LIMITSCREENRES){ DWORD maxw, maxh; maxw=HUGE; maxh=HUGE; // v2.02.96 switch(MaxScreenRes){ case DXW_NO_LIMIT: maxw=HUGE; maxh=HUGE; break; case DXW_LIMIT_320x200: maxw=320; maxh=200; break; case DXW_LIMIT_640x480: maxw=640; maxh=480; break; case DXW_LIMIT_800x600: maxw=800; maxh=600; break; case DXW_LIMIT_1024x768: maxw=1024; maxh=768; break; case DXW_LIMIT_1280x960: maxw=1280; maxh=960; break; case DXW_LIMIT_1280x1024: maxw=1280; maxh=1024; break; } if((w > maxw) || (h > maxh)) return FALSE; } if(dxw.dwFlags7 & MAXIMUMRES){ if(((long)w > dxw.iMaxW) || ((long)h > dxw.iMaxH)) return FALSE; } return TRUE; } UINT VKeyConfig[DXVK_SIZE]; static char *VKeyLabels[DXVK_SIZE]={ "none", "cliptoggle", "refresh", "logtoggle", "plocktoggle", "fpstoggle", "timefast", "timeslow", "timetoggle", "altf4", "printscreen", "corner", "freezetime", "fullscreen", "workarea", "desktop", }; void dxwCore::MapKeysInit() { char InitPath[MAX_PATH]; char *p; DWORD dwAttrib; int KeyIdx; dwAttrib = GetFileAttributes("dxwnd.dll"); if (dwAttrib != INVALID_FILE_ATTRIBUTES && !(dwAttrib & FILE_ATTRIBUTE_DIRECTORY)) return; GetModuleFileName(GetModuleHandle("dxwnd"), InitPath, MAX_PATH); p=&InitPath[strlen(InitPath)-strlen("dxwnd.dll")]; strcpy(p, "dxwnd.ini"); VKeyConfig[DXVK_NONE]=DXVK_NONE; for(KeyIdx=1; KeyIdx= WM_KEYFIRST) && (msg.message <= WM_KEYLAST)) break; // do not consume keyboard inputs if((msg.message >= WM_MOUSEFIRST) && (msg.message <= WM_MOUSELAST)) break; // do not consume mouse inputs PeekMessage(&msg, NULL, 0, 0, PM_REMOVE); TranslateMessage(&msg); DispatchMessage(&msg); } } void dxwCore::Mark(HDC hdc, BOOL scale, COLORREF color, int x, int y, int cx, int cy) { RECT frame; HBRUSH brush = CreateSolidBrush(color); frame.left = x; frame.top = y; frame.right = x+cx; frame.bottom = y+cy; if(scale) dxw.MapClient(&frame); (*pFrameRect)(hdc, &frame, brush); DeleteObject(brush); } void dxwCore::Mark(HDC hdc, BOOL scale, COLORREF color, RECT frame) { HBRUSH brush = CreateSolidBrush(color); if(scale) dxw.MapClient(&frame); (*pFrameRect)(hdc, &frame, brush); DeleteObject(brush); } ================================================ FILE: dll/dxwcore.hpp ================================================ #include #include "syslibs.h" #define DDSQLEN 0x20 #define MAXFONTS 0x40 #define WS_OVERLAPPEDTHIN (WS_OVERLAPPED | \ WS_CAPTION | \ WS_SYSMENU | \ WS_THICKFRAME | \ WS_MINIMIZEBOX | \ WS_MAXIMIZEBOX) typedef struct { DWORD dwTimerType; union{ struct { UINT uTimerId; UINT uDelay; UINT uResolution; LPTIMECALLBACK lpTimeProc; DWORD_PTR dwUser; UINT fuEvent; }; struct { HWND hWnd; UINT_PTR nIDEvent; UINT uElapse; TIMERPROC lpTimerFunc; }; } t; } TimerEvent_Type; typedef struct { LPDIRECTDRAWSURFACE lpdds; USHORT uRef; USHORT uRole; USHORT uVersion; DWORD dwCaps; } SurfaceDB_Type; typedef struct { LPDIRECTDRAWSURFACE lpdds; DWORD dwCaps; } CapsDB_Type; typedef enum { SURFACE_ROLE_PRIMARY = 0, SURFACE_ROLE_BACKBUFFER, SURFACE_ROLE_ZBUFFER, SURFACE_ROLE_3DREF, SURFACE_ROLE_UNKNOWN } Enum_Surface_Role_Type; typedef struct { HFONT font; HFONT scaled; } FontDB_Type; class dxwCore { // Construction/destruction public: dxwCore(); virtual ~dxwCore(); // Operations public: // methods void InitTarget(TARGETMAP *); void SethWnd(HWND hwnd); void SethWnd(HWND hwnd, HWND hwndfps) {hWnd=hwnd; hWndFPS=hwndfps;} void InitWindowPos(int, int, int, int); HWND GethWnd(void) {return hWnd;} void SetScreenSize(void); void SetScreenSize(int x, int y); DWORD GetScreenWidth(void) {return dwScreenWidth;} DWORD GetScreenHeight(void) {return dwScreenHeight;} void SetFullScreen(BOOL); void SetFullScreen(BOOL, int); BOOL IsFullScreen(); BOOL IsToRemap(HDC); BOOL IsDesktop(HWND); BOOL IsRealDesktop(HWND); POINT FixCursorPos(POINT); void FixNCHITCursorPos(LPPOINT); void SetClipCursor(void); void EraseClipCursor(void); void InitializeClipCursorState(void); BOOL IsClipCursorActive(void); BOOL IsValidMainWindow(); RECT MapWindowRect(LPRECT); RECT MapWindowRect(void); RECT MapClientRect(LPRECT); void MapClient(LPPOINT); void MapClient(LPRECT); void MapClient(int *, int *, int *, int *); void MapClient(int *, int *); //void MapClient(float *, float *); void UnmapClient(LPPOINT); void UnmapClient(int *, int *); void UnmapClient(int *, int *, int *, int *); void UnmapClient(LPRECT); void MapWindow(LPPOINT); void MapWindow(LPRECT); void MapWindow(int *, int *, int *, int *); void UnmapWindow(LPRECT); void UnmapWindow(LPPOINT); void FixWorkarea(LPRECT); void UpdateDesktopCoordinates(); RECT GetScreenRect(void); RECT GetUnmappedScreenRect(); RECT GetWindowRect(RECT); RECT GetClientRect(RECT); POINT GetFrameOffset(); POINT AddCoordinates(POINT, POINT); RECT AddCoordinates(RECT, POINT); POINT SubCoordinates(POINT, POINT); POINT ClientOffset(HWND); void AutoScale(); void ScreenRefresh(void); BOOL HandleFPS(void); BOOL ishWndFPS(HWND); DWORD GetTickCount(void); void GetSystemTime(LPSYSTEMTIME); void GetSystemTimeAsFileTime(LPFILETIME); DWORD StretchTime(DWORD); DWORD StretchCounter(DWORD); LARGE_INTEGER StretchCounter(LARGE_INTEGER); void ShowOverlay(); void ShowOverlay(HDC); void ShowOverlay(HDC, int, int); void ShowOverlay(LPDIRECTDRAWSURFACE); char *GetTSCaption(void); char *GetTSCaption(int); void DoSlow(int); void ShowBanner(HWND); void HideDesktop(HWND); POINT ScreenToClient(POINT); int GetDLLIndex(char *); void PushDLL(char *, int); void FixStyle(char *, HWND, WPARAM, LPARAM); void FixWindowFrame(HWND); DWORD FixWinStyle(DWORD); DWORD FixWinExStyle(DWORD); HDC AcquireEmulatedDC(HWND); BOOL ReleaseEmulatedDC(HWND); BOOL IsVirtual(HDC); void ResetEmulatedDC(); int VirtualOffsetX, VirtualOffsetY, VirtualExtentX, VirtualExtentY; void DumpPalette(DWORD, LPPALETTEENTRY); void PushTimer(UINT, UINT, UINT, LPTIMECALLBACK, DWORD_PTR, UINT); void PushTimer(HWND, UINT_PTR, UINT, TIMERPROC); void PopTimer(UINT); void PopTimer(HWND, UINT_PTR); void RenewTimers(); BOOL CheckScreenResolution(unsigned int, unsigned int); LARGE_INTEGER StretchLargeCounter(LARGE_INTEGER); UINT MapKeysConfig(UINT, LPARAM, WPARAM); void MapKeysInit(); void SetVSyncDelays(UINT); void VSyncWait(); void VSyncWaitLine(DWORD); void DumpDesktopStatus(); void ToggleFreezedTime(); void GetMonitorWorkarea(LPRECT, BOOL); void CalculateWindowPos(HWND, DWORD, DWORD, LPWINDOWPOS); void MessagePump(void); void Mark(HDC, BOOL, COLORREF, int, int, int, int); void Mark(HDC, BOOL, COLORREF, RECT); public: // simple data variables int MonitorId; BOOL Windowize; BOOL IsVisible; BOOL IsEmulated; DDPIXELFORMAT ActualPixelFormat; DDPIXELFORMAT VirtualPixelFormat; DWORD dwDDVersion; DWORD dwTargetDDVersion; DWORD dwMaxDDVersion; DWORD MaxDdrawInterface; DWORD dwFlags1; DWORD dwFlags2; DWORD dwFlags3; DWORD dwFlags4; DWORD dwFlags5; DWORD dwFlags6; DWORD dwFlags7; DWORD dwFlags8; DWORD dwFlags9; DWORD dwFlags10; DWORD dwTFlags; HWND hParentWnd; HWND hChildWnd; BOOL bActive; BOOL bDInputAbs; DWORD MaxFPS; DWORD SwapEffect; char *gsModules; int TimeShift; long iPosX; long iPosY; long iSizX; long iSizY; long iPos0X; long iPos0Y; long iSiz0X; long iSiz0Y; long iMaxW; long iMaxH; int iRatioX; int iRatioY; char *CustomOpenGLLib; WORD palVersion; WORD palNumEntries; PALETTEENTRY palPalEntry[256]; short FakeVersionId; short Coordinates; short MaxScreenRes; short SlowRatio; short ScanLine; HDC RealHDC; HDC VirtualHDC; int GDIEmulationMode; BOOL TimeFreeze; RECT VirtualDesktop; BOOL bHintActive; BOOL bAutoScale; DWORD dwRealScreenWidth; DWORD dwRealScreenHeight; // Implementation protected: LONG dwScreenWidth; LONG dwScreenHeight; BOOL FullScreen; HWND hWnd, hWndFPS; HBITMAP VirtualPic; RECT VirtualPicRect; private: BOOL MustShowOverlay; void ShowFPS(HDC, int, int); void ShowTimeStretching(HDC, int, int); TimerEvent_Type TimerEvent; DWORD gdwRefreshRate; #define MAXREFRESHDELAYCOUNT 20 int iRefreshDelays[MAXREFRESHDELAYCOUNT]; int iRefreshDelayCount; BOOL ClipCursorToggleState; }; class dxwSStack { public: dxwSStack(); virtual ~dxwSStack(); public: char *ExplainSurfaceRole(LPDIRECTDRAWSURFACE); void ClearSurfaceList(); void PushPrimarySurface(LPDIRECTDRAWSURFACE, int, DWORD); BOOL IsAPrimarySurface(LPDIRECTDRAWSURFACE); void UnrefSurface(LPDIRECTDRAWSURFACE); LPDIRECTDRAWSURFACE GetPrimarySurface(void); void PushBackBufferSurface(LPDIRECTDRAWSURFACE, int, DWORD); BOOL IsABackBufferSurface(LPDIRECTDRAWSURFACE); LPDIRECTDRAWSURFACE GetZBufferSurface(void); void PushZBufferSurface(LPDIRECTDRAWSURFACE, int, DWORD); BOOL IsAZBufferSurface(LPDIRECTDRAWSURFACE); LPDIRECTDRAWSURFACE GetBackBufferSurface(void); void Push3DRefSurface(LPDIRECTDRAWSURFACE, int, DWORD); BOOL IsA3DRefSurface(LPDIRECTDRAWSURFACE); LPDIRECTDRAWSURFACE Get3DRefBufferSurface(void); void PopSurface(LPDIRECTDRAWSURFACE); DWORD DuplicateSurface(LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE, int); DWORD GetCaps(LPDIRECTDRAWSURFACE); SurfaceDB_Type *GetSurface(LPDIRECTDRAWSURFACE); protected: SurfaceDB_Type SurfaceDB[DDSQLEN+1]; LPDIRECTDRAWSURFACE lpDDSPrimary; LPDIRECTDRAWSURFACE lpDDSBackBuffer; LPDIRECTDRAWSURFACE lpDDSZBuffer; LPDIRECTDRAWSURFACE lpDDS3DRef; private: void PushSurface(LPDIRECTDRAWSURFACE, USHORT, USHORT, DWORD); LPDIRECTDRAWSURFACE GetSurfaceByRole(USHORT); void SetSurfaceEntry(LPDIRECTDRAWSURFACE, USHORT, USHORT); }; typedef struct { HWND hwnd; WNDPROC wndproc; int w; int h; } wndstack_entry; class dxwWStack { public: dxwWStack(); virtual ~dxwWStack(); public: void Put(HWND, WNDPROC, int, int); void PutProc(HWND, WNDPROC); void PutSize(HWND, int, int); BOOL GetSize(HWND, int *, int *); WNDPROC GetProc(HWND); private: wndstack_entry *WhndStack; int WhndTOS; int WhndSize; }; class dxwFStack { public: dxwFStack(); virtual ~dxwFStack(); public: void Push(HFONT, HFONT); HFONT GetScaledFont(HFONT); HFONT DeleteFont(HFONT); protected: FontDB_Type *FontDB; }; extern dxwCore dxw; extern dxwSStack dxwss; extern dxwWStack dxwws; extern dxwFStack fontdb; typedef enum { SYSLIBIDX_KERNEL32 = 0, SYSLIBIDX_USER32, SYSLIBIDX_GDI32, SYSLIBIDX_IMELIB, SYSLIBIDX_ADVAPI32, SYSLIBIDX_OLE32, SYSLIBIDX_DIRECTDRAW, SYSLIBIDX_DIRECT3D8, SYSLIBIDX_DIRECT3D9, SYSLIBIDX_DIRECT3D10, SYSLIBIDX_DIRECT3D10_1, SYSLIBIDX_DIRECT3D11, SYSLIBIDX_OPENGL, SYSLIBIDX_MSVFW, SYSLIBIDX_DSOUND, SYSLIBIDX_WINMM, SYSLIBIDX_IMM32, SYSLIBIDX_DINPUT, SYSLIBIDX_DINPUT8, SYSLIBIDX_WINTRUST, SYSLIBIDX_DIRECT3D, SYSLIBIDX_DIRECT3D700, SYSLIBIDX_IMAGEHLP, SYSLIBIDX_COMDLG32, SYSLIBIDX_COMCTL32, SYSLIBIDX_AVIFIL32, SYSLIBIDX_GLIDE, SYSLIBIDX_GLIDE2, SYSLIBIDX_GLIDE3, SYSLIBIDX_SMACKW32, SYSLIBIDX_WING32, FREE6, SYSLIBIDX_MAX } enum_syslibraries; #ifdef SYSLIBNAMES_DEFINES char *SysNames[]={ "kernel32", "USER32", "GDI32", "imelib", "ADVAPI32", "ole32", "ddraw", "d3d8", "d3d9", "d3d10", "d3d10_1", "d3d11", "opengl32", "msvfw32", "dsound", "winmm", "imm32", "dinput", "dinput8", "wintrust", "d3dim", "d3dim700", "imagehlp", "comdlg32", "comctl32", "AVIFIL32", "_", "_", "_", "_", "_", "_", // 6 free slots NULL }; #else extern char *SysNames[]; #endif enum { HINT_HINT = 0, HINT_DDRAW, HINT_D3D8, HINT_D3D9, HINT_D3D10, HINT_D3D11, HINT_OPENGL, HINT_DSOUND, HINT_DINPUT, HINT_DINPUT8, HINT_MOVIES, HINT_D3D, HINT_IHLP, HINT_FAKEOS, HINT_OBFUSCATED,HINT_SAFEDISC, HINT_SECUROM, HINT_LIMITMEM, HINT_HOOKUPDATE, HINT_LAST }; enum { DXVK_NONE=0, DXVK_CLIPTOGGLE, DXVK_REFRESH, DXVK_LOGTOGGLE, DXVK_PLOCKTOGGLE, DXVK_FPSTOGGLE, DXVK_TIMEFAST, DXVK_TIMESLOW, DXVK_TIMETOGGLE, DXVK_ALTF4, DXVK_PRINTSCREEN, DXVK_CORNERIZE, DXVK_FREEZETIME, DXVK_FULLSCREEN, DXVK_FAKEWORKAREA, DXVK_FAKEDESKTOP, DXVK_SIZE }; enum { GDIMODE_NONE = 0, GDIMODE_STRETCHED, GDIMODE_EMULATED, GDIMODE_SHAREDDC }; typedef HRESULT (WINAPI *ColorConversion_Type)(int, LPDIRECTDRAWSURFACE, RECT, LPDIRECTDRAWSURFACE *); extern ColorConversion_Type pColorConversion; extern void ToggleAcquiredDevices(BOOL); extern GetWindowLong_Type pGetWindowLong; extern SetWindowLong_Type pSetWindowLong; ================================================ FILE: dll/dxwnd.cpp ================================================ /* DXWnd/dxwnd.cpp DirectX Hook Module Copyright(C) 2004-2016 SFB7/GHO 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 3 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, see . */ #define _CRT_SECURE_NO_WARNINGS #include #include #include #include #include "dxwnd.h" #include "dxwcore.hpp" #include "TlHelp32.h" #define VERSION "2.04.21" #define DDTHREADLOCK 1 LRESULT CALLBACK HookProc(int ncode, WPARAM wparam, LPARAM lparam); HINSTANCE hInst; HHOOK hHook; HHOOK hMouseHook; HANDLE hMapping; TARGETMAP *pMapping; DXWNDSTATUS *pStatus; HANDLE hMutex; HANDLE hTraceMutex; HANDLE hLockMutex; HANDLE hDDLockMutex; HANDLE hKillMutex; int HookStatus=DXW_IDLE; static int TaskIndex=-1; DXWNDSTATUS DxWndStatus; void InjectHook(); BOOL APIENTRY DllMain( HANDLE hmodule, DWORD dwreason, LPVOID preserved ) { HANDLE hCurrentThread; if(dwreason == DLL_PROCESS_DETACH){ //if(pInvalidateRect && pGetDesktopWindow) (*pInvalidateRect)((*pGetDesktopWindow)(), NULL, FALSE); // invalidate full desktop, no erase. if(pInvalidateRect) (*pInvalidateRect)(0, NULL, FALSE); // invalidate full desktop, no erase. UnmapViewOfFile(pMapping); CloseHandle(hMapping); } if(dwreason != DLL_PROCESS_ATTACH) return TRUE; hCurrentThread = GetCurrentThread(); SetThreadPriority(hCurrentThread, THREAD_PRIORITY_HIGHEST); // trick to reduce concurrency problems at program startup hInst = (HINSTANCE)hmodule; // optimization: disables DLL_THREAD_ATTACH and DLL_THREAD_DETACH notifications for the specified DLL DisableThreadLibraryCalls((HMODULE)hmodule); hMapping = CreateFileMapping((HANDLE)0xffffffff, NULL, PAGE_READWRITE, 0, sizeof(DxWndStatus)+sizeof(TARGETMAP)*MAXTARGETS, "UniWind_TargetList"); if(!hMapping) { SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_NORMAL); return false; } // v2.0.2.75: beware: some tasks (namely, Flash player) get dxwnd.dll loaded, but can't create the file mapping // this situation has to be intercepted, or it can cause the dll to cause faults that may crash the program. pStatus = (DXWNDSTATUS *)MapViewOfFile(hMapping, FILE_MAP_ALL_ACCESS, 0, 0, sizeof(DXWNDSTATUS)+sizeof(TARGETMAP)*MAXTARGETS); if(!pStatus) return false; pMapping = (TARGETMAP *)((char *)pStatus + sizeof(DXWNDSTATUS)); hMutex = OpenMutex(MUTEX_ALL_ACCESS, FALSE, "UniWind_Mutex"); if(!hMutex) hMutex = CreateMutex(0, FALSE, "UniWind_Mutex"); hTraceMutex = OpenMutex(MUTEX_ALL_ACCESS, FALSE, "Trace_Mutex"); if(!hTraceMutex) hTraceMutex = CreateMutex(0, FALSE, "Trace_Mutex"); hLockMutex = OpenMutex(MUTEX_ALL_ACCESS, FALSE, "Lock_Mutex"); if(!hLockMutex) hLockMutex = CreateMutex(0, FALSE, "Lock_Mutex"); if(DDTHREADLOCK){ hDDLockMutex = OpenMutex(MUTEX_ALL_ACCESS, FALSE, "DDLock_Mutex"); if(!hDDLockMutex) hDDLockMutex = CreateMutex(0, FALSE, "DDLock_Mutex"); } InjectHook(); SetThreadPriority(hCurrentThread, THREAD_PRIORITY_NORMAL); CloseHandle(hCurrentThread); return true; } static BOOL GetMultiTaskEnabling(){ char inipath[MAX_PATH]; GetModuleFileName(GetModuleHandle("dxwnd"), inipath, MAX_PATH); inipath[strlen(inipath)-strlen("dxwnd.dll")] = 0; // terminate the string just before "dxwnd.dll" strcat(inipath, "dxwnd.ini"); return GetPrivateProfileInt("window", "multiprocesshook", 0, inipath); } int SetTarget(DXWNDSTATUS *statusmap, TARGETMAP *targets){ int i; char path[MAX_PATH+1]; WaitForSingleObject(hMutex, INFINITE); pStatus->Status=DXW_IDLE; pStatus->IsFullScreen=FALSE; pStatus->TaskIdx=0; pStatus->hWnd=NULL; pStatus->ColorDepth=0; memset((void *)&(pStatus->pfd), 0, sizeof(DDPIXELFORMAT)); pStatus->Height = pStatus->Width = 0; pStatus->DXVersion = 0; pStatus->AllowMultiTask=GetMultiTaskEnabling(); //pStatus->VJoyStatus=VJOYENABLED|CROSSENABLED|INVERTYAXIS; if(statusmap) { pStatus->VJoyStatus=statusmap->VJoyStatus; pStatus->VJoySensivity=statusmap->VJoySensivity; } for(i = 0; targets[i].path[0]; i ++){ char *c; pMapping[i] = targets[i]; c = targets[i].path; if(*c == '*') strcpy(path, targets[i].path); else GetFullPathName(targets[i].path, MAX_PATH, path, NULL); for(c = path; *c; c++) *c = tolower(*c); strcpy(pMapping[i].path, path); } pMapping[i].path[0] = 0; ReleaseMutex(hMutex); return i; } int StartHook(void) { hHook = SetWindowsHookEx(WH_CALLWNDPROC, HookProc, hInst, 0); HookStatus=DXW_ACTIVE; return 0; } int EndHook(void) { UnhookWindowsHookEx(hHook); UnhookWindowsHookEx(hMouseHook); HookStatus=DXW_IDLE; return 0; } void GetDllVersion(char *dest) { strcpy_s(dest, strlen(VERSION)+1, VERSION); } int GetHookStatus(DXWNDSTATUS *s) { DWORD ret; ret=WaitForSingleObject(hLockMutex, 0); ReleaseMutex(hLockMutex); if(ret==WAIT_TIMEOUT) { if (s) *s = *pStatus; return DXW_RUNNING; } return HookStatus; } DXWNDSTATUS *GetHookInfo() { return pStatus; } void SetFPS(int fps) { pStatus->FPSCount=fps; } LRESULT CALLBACK HookProc(int ncode, WPARAM wparam, LPARAM lparam) { char name[MAX_PATH+1]; HWND hwnd; int i; static int DoOnce = FALSE; // don't do more than once per process if(DoOnce) return CallNextHookEx(hHook, ncode, wparam, lparam); // take care here: if anything stops or delays the execution logic, the whole // operating system hangs, since it can't activate new windows! // could use WM_NCCREATE instead of WM_CREATE. Are there differences? hwnd = ((CWPSTRUCT *)lparam)->hwnd; if(((CWPSTRUCT *)lparam)->message == WM_CREATE){ int iNameLength; name[MAX_PATH]=0; // string terminator GetModuleFileName(0, name, MAX_PATH); for(i = 0; name[i]; i ++) name[i] = tolower(name[i]); iNameLength = strlen(name); WaitForSingleObject(hMutex, INFINITE); for(i = 0; pMapping[i].path[0] && (iAllowMultiTask)){ if(WaitForSingleObject(hLockMutex, 0)==WAIT_TIMEOUT){ ReleaseMutex(hMutex); exit(0); } } else WaitForSingleObject(hLockMutex, 0); pStatus->Status=DXW_RUNNING; pStatus->TaskIdx=i; pStatus->OrigIdx=pMapping[i].index; pStatus->IsFullScreen=FALSE; pStatus->hWnd=hwnd; pStatus->dwPid=GetProcessId(GetCurrentProcess()); pStatus->TimeShift=pMapping[i].InitTS; pStatus->CursorX = pStatus->CursorY = 0; memset((void *)&(pStatus->pfd), 0, sizeof(DDPIXELFORMAT)); DxWndStatus = *pStatus; HookInit(&pMapping[i], hwnd); } } ReleaseMutex(hMutex); } return CallNextHookEx(hHook, ncode, wparam, lparam); } void UnhookProc() { // used to unhook DxWnd from the current process and allow another one (a son) to be managed //ReleaseMutex(hMutex); ReleaseMutex(hLockMutex); UnmapViewOfFile(pMapping); CloseHandle(hMapping); } void InjectHook() { char name[MAX_PATH+1]; int i; GetModuleFileName(0, name, MAX_PATH); name[MAX_PATH]=0; // terminator for(char *c = name; *c; c++) *c = tolower(*c); for(i = 0; pMapping[i].path[0]; i ++){ if(pMapping[i].flags3 & HOOKENABLED){ if(!strncmp(name, pMapping[i].path, strlen(name))){ if ((pMapping[i].flags2 & STARTDEBUG) || (pMapping[i].flags7 & INJECTSUSPENDED)) { HookInit(&pMapping[i],NULL); // beware: logging is possible only AFTER HookInit execution OutTrace("InjectHook: task[%d]=\"%s\" hooked\n", i, pMapping[i].path); } break; } } } } static char *FlagNames[11][32] ={{ // Flags1 "UNNOTIFY", "EMULATESURFACE", "CLIPCURSOR", "NEEDADMINCAPS", "HOOKDI", "MODIFYMOUSE", "HANDLEEXCEPTIONS", "SAVELOAD", "EMULATEBUFFER", "HOOKDI8", "BLITFROMBACKBUFFER", "SUPPRESSCLIPPING", "AUTOREFRESH", "FIXWINFRAME", "HIDEHWCURSOR", "SLOWDOWN", "DISABLECLIPPING", "LOCKWINSTYLE", "MAPGDITOPRIMARY", "FIXTEXTOUT", "KEEPCURSORWITHIN", "USERGB565", "SUPPRESSDXERRORS", "PREVENTMAXIMIZE", "LOCKEDSURFACE", "FIXPARENTWIN", "SWITCHVIDEOMEMORY", "CLIENTREMAPPING", "HANDLEALTF4", "LOCKWINPOS", "HOOKCHILDWIN", "MESSAGEPROC" },{ // Flags2 "RECOVERSCREENMODE", "REFRESHONRESIZE", "BACKBUFATTACH", "MODALSTYLE", "KEEPASPECTRATIO", "INIT8BPP", "FORCEWINRESIZE", "INIT16BPP", "KEEPCURSORFIXED", "DISABLEGAMMARAMP", "INDEPENDENTREFRESH", "FIXNCHITTEST", "LIMITFPS", "SKIPFPS", "SHOWFPS", "HIDEMULTIMONITOR", "TIMESTRETCH", "HOOKOPENGL", "LOCKEDSIZE", "SHOWHWCURSOR", "GDISTRETCHED", "SHOWFPSOVERLAY", "FAKEVERSION", "FULLRECTBLT", "NOPALETTEUPDATE", "SUPPRESSIME", "NOBANNER", "WINDOWIZE", "LIMITRESOURCES", "STARTDEBUG", "SETCOMPATIBILITY", "WIREFRAME", },{ // Flags3 "FORCEHOOKOPENGL", "MARKBLIT", "HOOKDLLS", "SUPPRESSD3DEXT", "HOOKENABLED", "FIXD3DFRAME", "FORCE16BPP", "BLACKWHITE", "MARKLOCK", "SINGLEPROCAFFINITY", "EMULATEREGISTRY", "CDROMDRIVETYPE", "NOWINDOWMOVE", "FORCECLIPPER", "LOCKSYSCOLORS", "GDIEMULATEDC", "FULLSCREENONLY", "FONTBYPASS", "MINIMALCAPS", "DEFAULTMESSAGES", "BUFFEREDIOFIX", "FILTERMESSAGES", "PEEKALLMESSAGES", "SURFACEWARN", "ANALYTICMODE", "FORCESHEL", "CAPMASK", "COLORFIX", "NODDRAWBLT", "NODDRAWFLIP", "NOGDIBLT", "NOPIXELFORMAT", },{ // Flags4 "NOALPHACHANNEL", "SUPPRESSCHILD", "FIXREFCOUNTER", "SHOWTIMESTRETCH", "ZBUFFERCLEAN", "ZBUFFER0CLEAN", "ZBUFFERALWAYS", "DISABLEFOGGING", "NOPOWER2FIX", "NOPERFCOUNTER", "BILINEAR2XFILTER", "INTERCEPTRDTSC", "LIMITSCREENRES", "NOFILLRECT", "HOOKGLIDE", "HIDEDESKTOP", "STRETCHTIMERS", "NOFLIPEMULATION", "NOTEXTURES", "RETURNNULLREF", "FINETIMING", "NATIVERES", "SUPPORTSVGA", "SUPPORTHDTV", "RELEASEMOUSE", "ENABLETIMEFREEZE", "HOTPATCH", "ENABLEHOTKEYS", "HOTPATCHALWAYS", "NOD3DRESET", "OVERRIDEREGISTRY", "HIDECDROMEMPTY", },{ // Flags5 "DIABLOTWEAK", "CLEARTARGET", "NOWINPOSCHANGES", "ANSIWIDE", "NOBLT", "USELASTCORE", "DOFASTBLT", "AEROBOOST", "QUARTERBLT", "NOIMAGEHLP", "BILINEARFILTER", "REPLACEPRIVOPS", "REMAPMCI", "TEXTUREHIGHLIGHT", "TEXTUREDUMP", "TEXTUREHACK", "TEXTURETRANSP", "NORMALIZEPERFCOUNT", "HYBRIDMODE", "GDICOLORCONV", "INJECTSON", "ENABLESONHOOK", "FREEZEINJECTEDSON", "GDIMODE", "CENTERTOWIN", "STRESSRESOURCES", "MESSAGEPUMP", "TEXTUREFORMAT", "DEINTERLACE", "LOCKRESERVEDPALETTE", "UNLOCKZORDER", "EASPORTSHACK", },{ // Flags6 "FORCESWAPEFFECT", "LEGACYALLOC", "NODESTROYWINDOW", "NOMOVIES", "SUPPRESSRELEASE", "FIXMOVIESCOLOR", "WOW64REGISTRY", "DISABLEMAXWINMODE", "FIXPITCH", "POWER2WIDTH", "HIDETASKBAR", "ACTIVATEAPP", "NOSYSMEMPRIMARY", "NOSYSMEMBACKBUF", "CONFIRMONCLOSE", "TERMINATEONCLOSE", "FLIPEMULATION", "SETZBUFFERBITDEPTHS", "SHAREDDC", "WOW32REGISTRY", "STRETCHMOVIES", "BYPASSMCI", "FIXPIXELZOOM", "---REUSEEMULATEDDC---", "CREATEDESKTOP", "NOWINDOWHOOKS", "SYNCPALETTE", "VIRTUALJOYSTICK", "UNACQUIRE", "HOOKGOGLIBS", "BYPASSGOGLIBS", "EMULATERELMOUSE", },{ // Flags7 "LIMITDDRAW", "DISABLEDISABLEALTTAB", "FIXCLIPPERAREA", "HOOKDIRECTSOUND", "HOOKSMACKW32", "BLOCKPRIORITYCLASS", "CPUSLOWDOWN", "CPUMAXUSAGE", "NOWINERRORS", "SUPPRESSOVERLAY", "INIT24BPP", "INIT32BPP", "FIXGLOBALUNLOCK", "SHOWHINTS", "SKIPDEVTYPEHID", "INJECTSUSPENDED", "SSUPPRESSDIERRORS", "HOOKNORUN", "FIXBINDTEXTURE", "ENUM16BITMODES", "SHAREDKEYBOARD", "HOOKNOUPDATE", "HOOKGLUT32", "INITIALRES", "MAXIMUMRES", "LOCKCOLORDEPTH", "FIXSMACKLOOP", "FIXFREELIBRARY", "ANCHORED", "CLEARTEXTUREFOURCC", "NODDEXCLUSIVEMODE", "COPYNOSHIMS", },{ // Flags8 "FORCEWAIT", "FORCENOWAIT", "FORCEVSYNC", "FORCENOVSYNC", "VSYNCSCANLINES", "TRIMTEXTUREFORMATS", "NOHALDEVICE", "CLIPLOCK", "PRETENDVISIBLE", "RAWFORMAT", "WININSULATION", "FIXMOUSEHOOK", "DDSFORMAT", "HOOKWING32", "SEQUENCEDIAT", "D3D8BACK16", "MARKWING32", "DYNAMICZCLEAN", "MARKGDI32", "DUMPDIBSECTION", "DUMPDEVCONTEXT", "QUALITYFONTS", "ALLOWSYSMEMON3DDEV", "CLIPMENU", "BACKGROUNDPRIORITY", "OFFSCREENZBUFFER", "VIRTUALHEAP", "ZBUFFERHARDCLEAN", "LOADLIBRARYERR", "SHAREDDCHYBRID", "FIXADJUSTWINRECT", "HOOKDLGWIN", },{ // Flags9 "FIXTHINFRAME", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", },{ // Flags10 "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", },{ // TFlags "OUTTRACE", "OUTDDRAWTRACE", "OUTWINMESSAGES", "OUTCURSORTRACE", "OUTSEPARATED", "**", "ASSERTDIALOG", "OUTIMPORTTABLE", "OUTDEBUG", "OUTREGISTRY", "TRACEHOOKS", "OUTD3DTRACE", "OUTDXWINTRACE", "OUTWINGTRACE", "OUTOGLTRACE", "", "", "", "", "", "", "", "", "", "", "", "", "ADDRELATIVETIME", "**", "ADDTIMESTAMP", "OUTDEBUGSTRING", "ERASELOGFILE", }}; LPCSTR GetFlagCaption(int flag, int bit) { //if((flag<0) || (flag>(9*32))) return ""; //return FlagNames[flag >> 5][flag & 0x1F]; if((flag<0) || (flag>10)) return ""; if((bit<0) || (bit>31)) return ""; return FlagNames[flag][bit]; } ================================================ FILE: dll/dxwnd.def ================================================ LIBRARY dxwnd EXPORTS SetTarget @1 StartHook @2 EndHook @3 GetDllVersion @4 GetHookStatus @5 GetHookInfo @6 Inject @7 GetThreadStartAddress @8 GetFlagCaption @9 ================================================ FILE: dll/dxwnd.dll.manifest ================================================ ================================================ FILE: dll/dxwnd.rc ================================================ // Microsoft Visual C++ generated resource script. // #include "resource.h" #define APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// // // Generated from the TEXTINCLUDE 2 resource. // #include "afxres.h" ///////////////////////////////////////////////////////////////////////////// #undef APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// // English (U.S.) resources #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) #ifdef _WIN32 LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US #pragma code_page(1252) #endif //_WIN32 #ifdef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // // TEXTINCLUDE // 1 TEXTINCLUDE BEGIN "resource.h\0" END 2 TEXTINCLUDE BEGIN "#include ""afxres.h""\r\n" "\0" END 3 TEXTINCLUDE BEGIN "\r\n" "\0" END #endif // APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // // Bitmap // IDB_BANNER BITMAP "dxwbanner.bmp" IDB_CROSS BITMAP "cross.bmp" IDB_FIRE1 BITMAP "fire1.bmp" IDB_FIRE2 BITMAP "fire2.bmp" IDB_FIRE3 BITMAP "fire3.bmp" IDB_JOYCENTER BITMAP "center.bmp" #endif // English (U.S.) resources ///////////////////////////////////////////////////////////////////////////// #ifndef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // // Generated from the TEXTINCLUDE 3 resource. // ///////////////////////////////////////////////////////////////////////////// #endif // not APSTUDIO_INVOKED ================================================ FILE: dll/dxwnd.vs2008.sln ================================================  Microsoft Visual Studio Solution File, Format Version 10.00 # Visual Studio 2008 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dxwnd", "dxwnd.vs2008.vcproj", "{579E7FE7-2745-4100-A802-23511711FCDE}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Release|Win32 = Release|Win32 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {579E7FE7-2745-4100-A802-23511711FCDE}.Debug|Win32.ActiveCfg = Debug|Win32 {579E7FE7-2745-4100-A802-23511711FCDE}.Debug|Win32.Build.0 = Debug|Win32 {579E7FE7-2745-4100-A802-23511711FCDE}.Release|Win32.ActiveCfg = Release|Win32 {579E7FE7-2745-4100-A802-23511711FCDE}.Release|Win32.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal ================================================ FILE: dll/dxwnd.vs2008.vcproj ================================================ ================================================ FILE: dll/dxwsstack.cpp ================================================ /* ------------------------------------------------------------------ */ // DirectDraw Surface Stack implementation /* ------------------------------------------------------------------ */ #define _CRT_SECURE_NO_WARNINGS #include #include "dxwnd.h" #include "dxwcore.hpp" // uncomment line below to activate surface stack tracing //#define DXW_SURFACE_STACK_TRACING #define OutTraceSDB OutTrace dxwSStack::dxwSStack() { // three variables used as cache ... lpDDSPrimary = NULL; lpDDSBackBuffer = NULL; lpDDSZBuffer = NULL; lpDDS3DRef = NULL; memset(SurfaceDB, 0, sizeof(SurfaceDB)); } dxwSStack::~dxwSStack() { } static char *sRole(USHORT role) { char *s; switch (role){ case SURFACE_ROLE_PRIMARY: s="(PRIM)"; break; case SURFACE_ROLE_BACKBUFFER: s="(BACK)"; break; case SURFACE_ROLE_ZBUFFER: s="(ZBUF)"; break; case SURFACE_ROLE_3DREF: s="(3DREF)"; break; default: s="??"; break; // should never happen ... } return s; } #ifdef DXW_SURFACE_STACK_TRACING extern char*ExplainDDSCaps(DWORD); static void CheckSurfaceList(SurfaceDB_Type *SurfaceDB) { char sMsg[81]; int iPCount = 0; int iBCount = 0; int iZCount = 0; for (int i=0;i 1) { sprintf(sMsg, "Primary count = %d", iPCount); MessageBox(0, sMsg, "DxWnd SurfaceList", MB_OK | MB_ICONEXCLAMATION); } if(iBCount > 1) { sprintf(sMsg, "Backbuffer count = %d", iPCount); MessageBox(0, sMsg, "DxWnd SurfaceList", MB_OK | MB_ICONEXCLAMATION); } if(iZCount > 1) { sprintf(sMsg, "Zbuffer count = %d", iZCount); MessageBox(0, sMsg, "DxWnd SurfaceList", MB_OK | MB_ICONEXCLAMATION); } } static void DumpSurfaceList(SurfaceDB_Type *SurfaceDB) { for (int i=0;i>> SURFACELIST CLEAR UNREF\n"); #endif // v2.03.91.fx5: emptying the list entirely is no good for "Warhammer 40K Rites of War" // better leave the last used primary and backbuffer surfaces. int i, j; SurfaceDB_Type NewEntries[DDSQLEN]; lpDDSPrimary = NULL; lpDDSBackBuffer = NULL; lpDDSZBuffer = NULL; lpDDS3DRef = NULL; // search for valid entries and copy to safe place for (i=0, j=0; i>> SURFACELIST UNREF: lpdds=%x%s ref=%x vers=%d\n", ps, sRole(SurfaceDB[i].uRole), SurfaceDB[i].uRef, SurfaceDB[i].uVersion); #endif } #ifdef DXW_SURFACE_STACK_TRACING DumpSurfaceList(SurfaceDB); #endif } void dxwSStack::PushSurface(LPDIRECTDRAWSURFACE ps, USHORT role, USHORT version, DWORD dwCaps) { int i; SurfaceDB_Type *e; #ifdef DXW_SURFACE_STACK_TRACING OutTraceSDB(">>> SURFACELIST MARK: lpdds=%x%s vers=%d\n", ps, sRole(role), version); #endif for (i=0;ilpdds==ps) || (e->lpdds==(DWORD)0)) break; // got matching entry or end of the list } if(i == DDSQLEN) { //MessageBox(0, "Surface stack is full", "DxWnd SurfaceList", MB_OK | MB_ICONEXCLAMATION); //return; for(int j=0;jlpdds=ps; e->uRole = role; e->uRef = TRUE; e->uVersion = version; e->dwCaps = dwCaps; switch(e->uRole){ case SURFACE_ROLE_PRIMARY: lpDDSPrimary = e->lpdds; break; case SURFACE_ROLE_BACKBUFFER: lpDDSBackBuffer = e->lpdds; break; case SURFACE_ROLE_ZBUFFER: lpDDSZBuffer = e->lpdds; break; } #ifdef DXW_SURFACE_STACK_TRACING DumpSurfaceList(SurfaceDB); #endif } void dxwSStack::PushPrimarySurface(LPDIRECTDRAWSURFACE ps, int version, DWORD dwCaps) { PushSurface(ps, SURFACE_ROLE_PRIMARY, (USHORT)version, dwCaps); } void dxwSStack::PushBackBufferSurface(LPDIRECTDRAWSURFACE ps, int version, DWORD dwCaps) { PushSurface(ps, SURFACE_ROLE_BACKBUFFER, (USHORT)version, dwCaps); } void dxwSStack::PushZBufferSurface(LPDIRECTDRAWSURFACE ps, int version, DWORD dwCaps) { PushSurface(ps, SURFACE_ROLE_ZBUFFER, (USHORT)version, dwCaps); } void dxwSStack::Push3DRefSurface(LPDIRECTDRAWSURFACE ps, int version, DWORD dwCaps) { PushSurface(ps, SURFACE_ROLE_3DREF, (USHORT)version, dwCaps); } DWORD dxwSStack::DuplicateSurface(LPDIRECTDRAWSURFACE psfrom, LPDIRECTDRAWSURFACE psto, int version) { int i; SurfaceDB_Type *e; SurfaceDB_Type sentry; #ifdef DXW_SURFACE_STACK_TRACING OutTraceSDB(">>> SURFACELIST DUPL: from=%x to=%x vers=%d\n", psfrom, psto, version); #endif // search for source or empty slot for (i=0;ilpdds==psfrom) || (e->lpdds==(DWORD)0)) break; // got matching entry or end of the list } // if not found, return if (!e->lpdds) { #ifdef DXW_SURFACE_STACK_TRACING OutTraceSDB("--- NO ENTRY: from=%x\n", psfrom); #endif return 0; } // save surface entry sentry = *e; // search for destination or empty slot for (i=0;ilpdds==psto) || (e->lpdds==(DWORD)0)) break; // got matching entry or end of the list } if(i == DDSQLEN) { //MessageBox(0, "Surface stack is full", "DxWnd SurfaceList", MB_OK | MB_ICONEXCLAMATION); //return; for(int j=0;jlpdds = psto; e->uVersion = version; e->uRef = TRUE; #ifdef DXW_SURFACE_STACK_TRACING DumpSurfaceList(SurfaceDB); #endif return e->dwCaps; } void dxwSStack::PopSurface(LPDIRECTDRAWSURFACE ps) { int i; // look for entry for (i=0;i>> SURFACELIST CLEAR: i=%d lpdds=%x%s ref=%x vers=%d\n", i, ps, sRole(SurfaceDB[i].uRole), SurfaceDB[i].uRef, SurfaceDB[i].uVersion); #endif for (; i>> GETCAPS: lpdds=%x caps=%x(%s)\n", ps, SurfaceDB[i].dwCaps, ExplainDDSCaps(SurfaceDB[i].dwCaps)); #endif return SurfaceDB[i].dwCaps; } } return 0; } SurfaceDB_Type *dxwSStack::GetSurface(LPDIRECTDRAWSURFACE ps) { for (int i=0;i>> GETCAPS: lpdds=%x caps=%x(%s)\n", ps, SurfaceDB[i].dwCaps, ExplainDDSCaps(SurfaceDB[i].dwCaps)); #endif return &SurfaceDB[i]; } } return NULL; } ================================================ FILE: dll/dxwwstack.cpp ================================================ /* ------------------------------------------------------------------ */ // DirectDraw Surface Stack implementation /* ------------------------------------------------------------------ */ #define _CRT_SECURE_NO_WARNINGS #include #include "dxwnd.h" #include "dxwcore.hpp" //#define DXW_WINPROC_STACK_TRACING #define MAXWNDHSTACK 256 dxwWStack::dxwWStack() { WhndTOS = 0; WhndSize = MAXWNDHSTACK; WhndStack = (wndstack_entry *)malloc(WhndSize * sizeof(wndstack_entry)); } dxwWStack::~dxwWStack() { } void dxwWStack::Put(HWND hwnd, WNDPROC wndproc, int w, int h) { int StackIdx; // add extra space when necessary, in chunks of MAXWNDHSTACK entries if(WhndTOS == WhndSize){ WhndSize += MAXWNDHSTACK; WhndStack = (wndstack_entry *)realloc(WhndStack, WhndSize * sizeof(wndstack_entry)); } // wndproc values of 0xFFFFxxxx type seems to be error codes rather than valid callback addresses .... // v2.02.36 using CallWindowProc you can pass WinProc handles, so you don't need to eliminate them! //if (((DWORD)wndproc & 0xFFFF0000) == 0xFFFF0000) return; //OutTraceDW("DEBUG: WNDPROC STACK push hwnd=%x, wndproc=%x\n", hwnd, wndproc); // try update first... for(StackIdx=0; StackIdx #include "dxwnd.h" #include "dxwcore.hpp" #include "syslibs.h" #include "dxhelper.h" #include "resource.h" // SAVELASTDC: optimized mode, if the last window handle and size didn't change, // it is not necessary to create a new VirtualHDC and attached bitmap, you can reuse // the last one, with the further advantage of avoiding multiple scaling to and from // the virtual image with quality loss (see "BattleZone 1998"). // Unfortunately something is wrong with Imperialism II, so better not activate .... #ifdef DXWND_SAVELASTDC static HWND gLasthWnd = NULL; static RECT gLastRect = {0,0,0,0}; #endif HDC dxwCore::AcquireEmulatedDC(HWND hwnd) { HDC wdc; RECT WinRect; HGDIOBJ PrevSelection; //OutTrace("ACQUIRE hwnd=%x vhdc=%x pic=%x\n", hwnd, VirtualHDC, VirtualPic); if(!(wdc=(*pGDIGetDC)(hwnd))){ // potential DC leakage OutTraceE("AcquireEmulatedDC: GetDC ERROR hwnd=%x err=%d at=%d\n", hwnd, GetLastError(), __LINE__); return NULL; } (*pGetClientRect)(hwnd, &WinRect); VirtualPicRect = WinRect; dxw.UnmapClient(&VirtualPicRect); #ifdef DXWND_SAVELASTDC if((hwnd == gLasthWnd) && (WinRect.right == gLastRect.right) && (WinRect.bottom == gLastRect.bottom)) { if(!(*pGDIStretchBlt)(VirtualHDC, VirtualPicRect.left, VirtualPicRect.top, VirtualPicRect.right, VirtualPicRect.bottom, wdc, 0, 0, WinRect.right, WinRect.bottom, SRCCOPY)) OutTraceE("AcquireEmulatedDC: StretchBlt ERROR err=%d at=%d\n", GetLastError(), __LINE__); if(!(pGDIReleaseDC)(hwnd, wdc)) OutTraceE("AcquireEmulatedDC: ReleaseDC ERROR hdc=%x err=%d at=%d\n", wdc, GetLastError(), __LINE__); return VirtualHDC; } gLasthWnd = hwnd; gLastRect = WinRect; #endif //OutTrace("WINDOW picrect=(%d,%d)-(%d,%d)\n", // VirtualPicRect.left, VirtualPicRect.top, VirtualPicRect.right, VirtualPicRect.bottom); OutTraceB("AcquireEmulatedDC: hwnd=%x Desktop=%x WinRect=(%d,%d)(%d,%d) VirtRect=(%d,%d)(%d,%d)\n", hwnd, dxw.IsDesktop(hwnd), WinRect.left, WinRect.top, WinRect.right, WinRect.bottom, VirtualPicRect.left, VirtualPicRect.top, VirtualPicRect.right, VirtualPicRect.bottom); // v2.03.91.fx3: loop required to eliminate resource leakage ("Yu No") if(VirtualHDC) { while(TRUE){ if(!DeleteObject(VirtualHDC)) OutTraceE("AcquireEmulatedDC: DeleteObject ERROR hdc=%x err=%d at=%d\n", VirtualHDC, GetLastError(), __LINE__); else break; (*pSleep)(1); } } if(VirtualPic) { while(TRUE){ if(!DeleteObject(VirtualPic)) OutTraceE("AcquireEmulatedDC: DeleteObject ERROR pic=%x err=%d at=%d\n", VirtualPic, GetLastError(), __LINE__); else break; (*pSleep)(1); } } if(!(VirtualHDC=CreateCompatibleDC(wdc))) OutTraceE("AcquireEmulatedDC: CreateCompatibleDC ERROR err=%d at=%d\n", GetLastError(), __LINE__); if(!(VirtualPic=CreateCompatibleBitmap(wdc, dxw.GetScreenWidth(), dxw.GetScreenHeight()))) OutTraceE("AcquireEmulatedDC: CreateCompatibleBitmap ERROR err=%d at=%d\n", GetLastError(), __LINE__); if(!(PrevSelection=(*pSelectObject)(VirtualHDC, VirtualPic))) OutTraceE("AcquireEmulatedDC: SelectObject ERROR err=%d at=%d\n", GetLastError(), __LINE__); else { if(!DeleteObject(PrevSelection)) OutTraceE("AcquireEmulatedDC: DeleteObject ERROR pic=%x err=%d at=%d\n", PrevSelection, GetLastError(), __LINE__);; } //OutTrace("RENEW_IMAGE hdc=%x pic=%x\n", VirtualHDC, VirtualPic); if(!(*pGDIStretchBlt)(VirtualHDC, VirtualPicRect.left, VirtualPicRect.top, VirtualPicRect.right, VirtualPicRect.bottom, wdc, 0, 0, WinRect.right, WinRect.bottom, SRCCOPY)) OutTraceE("AcquireEmulatedDC: StretchBlt ERROR err=%d at=%d\n", GetLastError(), __LINE__); if(!(pGDIReleaseDC)(hwnd, wdc)) OutTraceE("AcquireEmulatedDC: ReleaseDC ERROR hdc=%x err=%d at=%d\n", wdc, GetLastError(), __LINE__); return VirtualHDC; } BOOL dxwCore::ReleaseEmulatedDC(HWND hwnd) { HDC wdc; RECT WinRect; //OutTrace("RELEASE hwnd=%x\n", hwnd); (*pGetClientRect)(hwnd, &WinRect); OutTraceB("ReleaseEmulatedDC: hwnd=%x Desktop=%x WinRect=(%d,%d)(%d,%d) VirtRect=(%d,%d)(%d,%d)\n", hwnd, dxw.IsDesktop(hwnd), WinRect.left, WinRect.top, WinRect.right, WinRect.bottom, VirtualPicRect.left, VirtualPicRect.top, VirtualPicRect.right, VirtualPicRect.bottom); if(!(wdc=(*pGDIGetDC)(hwnd))) { // potential DC leakage OutTraceE("ReleaseEmulatedDC: GetDC ERROR err=%d at=%d\n", GetLastError(), __LINE__); return FALSE; } SetStretchBltMode(VirtualHDC, HALFTONE); if(!(*pGDIStretchBlt)(wdc, 0, 0, WinRect.right, WinRect.bottom, VirtualHDC, 0, 0, VirtualPicRect.right, VirtualPicRect.bottom, SRCCOPY)) OutTraceE("ReleaseEmulatedDC: StretchBlt ERROR err=%d at=%d\n", GetLastError(), __LINE__); if(!(*pGDIReleaseDC)(hwnd, wdc))// fixed DC leakage OutTraceE("ReleaseEmulatedDC: ReleaseDC ERROR hwnd=%x hdc=%x err=%d at=%d\n", hwnd, wdc, GetLastError(), __LINE__); return TRUE; } void dxwCore::ResetEmulatedDC() { //OutTrace("RESET\n"); VirtualHDC=NULL; VirtualPic=NULL; VirtualOffsetX=0; VirtualOffsetY=0; } BOOL dxwCore::IsVirtual(HDC hdc) { return (hdc==VirtualHDC) && (GDIEmulationMode == GDIMODE_EMULATED); } ================================================ FILE: dll/fontstack.cpp ================================================ /* ------------------------------------------------------------------ */ // Font Stack implementation /* ------------------------------------------------------------------ */ #define _CRT_SECURE_NO_WARNINGS #include #include "dxwnd.h" #include "dxwcore.hpp" dxwFStack::dxwFStack() { FontDB = (FontDB_Type *)malloc(sizeof(FontDB_Type)*(MAXFONTS+1)); memset(FontDB, 0, sizeof(FontDB)); } dxwFStack::~dxwFStack() { free(FontDB); } void dxwFStack::Push(HFONT font, HFONT scaled) { int i; FontDB_Type *e; for (i=0;ifont == 0) break; // got matching entry or end of the list } if(i == DDSQLEN) { MessageBox(0, "Font stack is full", "DxWnd", MB_OK | MB_ICONEXCLAMATION); return; } e->font=font; e->scaled=scaled; } HFONT dxwFStack::GetScaledFont(HFONT font) { int i; FontDB_Type *e; for (i=0;ifont == font) return e->scaled; // got matching entry if (e->font == 0) return 0; // got end of the list } return 0; // got max entries } HFONT dxwFStack::DeleteFont(HFONT font) { int i; HFONT scaled; FontDB_Type *e; for (i=0;ifont == font) { scaled = e->scaled; break; // got matching entry } } if(i==MAXFONTS) return NULL; for (; ibmiColors->rgbRed, pbmi->bmiColors->rgbGreen, pbmi->bmiColors->rgbBlue, pbmi->bmiColors->rgbReserved, pbmi->bmiHeader.biBitCount, pbmi->bmiHeader.biWidth, pbmi->bmiHeader.biHeight, pbmi->bmiHeader.biCompression); return s; } static void TraceBITMAPINFOHEADER(char *fName, BITMAPINFOHEADER *bmi) { OutTrace("%s: BitmapInfo {Size=%d dim=(%dx%d) Planes=%d bitcount=%d Compression=%x SizeImage=%d PelsPerMeter=%dx%d colors=U%d:I%d}\n", fName, bmi->biSize, bmi->biWidth, bmi->biHeight, bmi->biPlanes, bmi->biBitCount, bmi->biCompression, bmi->biSizeImage, bmi->biXPelsPerMeter, bmi->biYPelsPerMeter, bmi->biClrUsed, bmi->biClrImportant); if(bmi->biSize > sizeof(BITMAPINFOHEADER)){ BITMAPV4HEADER *bm4 = (BITMAPV4HEADER *)bmi; OutTrace("%s: BitmapInfoV4 {RGBA mask=%x:%x:%x:%x cstype=%x gamma RGB=%x:%x:%x}\n", fName, bm4->bV4RedMask, bm4->bV4GreenMask, bm4->bV4BlueMask, bm4->bV4AlphaMask, bm4->bV4CSType, bm4->bV4GammaRed, bm4->bV4GammaGreen, bm4->bV4GammaBlue); } if(bmi->biSize > sizeof(BITMAPV4HEADER)){ BITMAPV5HEADER *bm5 = (BITMAPV5HEADER *)bmi; OutTrace("%s: BitmapInfoV5 {intent=%x profiledata=%x profilesize=%x resvd=%x}\n", fName, bm5->bV5Intent, bm5->bV5ProfileData, bm5->bV5ProfileSize, bm5->bV5Reserved); } } //-------------------------------------------------------------------------------------------- // // API hookers // //-------------------------------------------------------------------------------------------- int WINAPI extGetDeviceCaps(HDC hdc, int nindex) { DWORD res; res = (*pGDIGetDeviceCaps)(hdc, nindex); if(IsTraceDDRAW){ char sInfo[1024]; sprintf(sInfo, "GetDeviceCaps: hdc=%x index=%x(%s)", hdc, nindex, ExplainDeviceCaps(nindex)); switch(nindex){ case RASTERCAPS: sprintf(sInfo, "%s res=0x%04x(%s)\n", sInfo, res, ExplainRasterCaps(res)); break; case BITSPIXEL: case COLORRES: case VERTRES: case HORZRES: case SIZEPALETTE: case NUMRESERVED: sprintf(sInfo, "%s res=%d\n", sInfo, res); break; default: sprintf(sInfo, "%s res=0x%04x\n", sInfo, res); break; } OutTrace(sInfo); } switch(nindex){ case VERTRES: if(dxw.Windowize){ if(dxw.IsDesktop(WindowFromDC(hdc))) res= dxw.GetScreenHeight(); else { if(OBJ_DC == (*pGetObjectType)(hdc)){ switch(dxw.GDIEmulationMode){ case GDIMODE_SHAREDDC: case GDIMODE_EMULATED: default: break; case GDIMODE_STRETCHED: int dummy = 0; dxw.UnmapClient(&dummy, (int *)&res); break; } } } OutTraceDW("GetDeviceCaps: fix(2) VERTRES cap=%d\n", res); } break; case HORZRES: if(dxw.Windowize){ if(dxw.IsDesktop(WindowFromDC(hdc))) res= dxw.GetScreenWidth(); else { if(OBJ_DC == (*pGetObjectType)(hdc)){ switch(dxw.GDIEmulationMode){ case GDIMODE_SHAREDDC: case GDIMODE_EMULATED: default: break; case GDIMODE_STRETCHED: int dummy = 0; dxw.UnmapClient((int *)&res, &dummy); break; } } } OutTraceDW("GetDeviceCaps: fix(2) HORZRES cap=%d\n", res); } break; if(dxw.Windowize){ res= dxw.GetScreenWidth(); } break; // WARNING: in no-emu mode, the INIT8BPP and INIT16BPP flags expose capabilities that // are NOT implemented and may cause later troubles! case RASTERCAPS: if(dxw.dwFlags2 & INIT8BPP) { res |= RC_PALETTE; // v2.02.12 OutTraceDW("GetDeviceCaps: fix(2) RASTERCAPS setting RC_PALETTE cap=%x\n", res); } break; case BITSPIXEL: case COLORRES: if((dxw.dwFlags2 & (INIT8BPP|INIT16BPP)) || (dxw.dwFlags7 & (INIT24BPP|INIT32BPP))){ // v2.02.32 fix if(dxw.dwFlags2 & INIT8BPP) res = 8; if(dxw.dwFlags2 & INIT16BPP) res = 16; if(dxw.dwFlags7 & INIT24BPP) res = 24; if(dxw.dwFlags7 & INIT32BPP) res = 32; OutTraceDW("GetDeviceCaps: fix(2) BITSPIXEL/COLORRES cap=%d\n", res); } break; //case NUMCOLORS: // numcolors windows bug fix.... // if(res == -1) res=1; // return res; } if(dxw.dwFlags1 & EMULATESURFACE){ switch(nindex){ case RASTERCAPS: if((dxw.VirtualPixelFormat.dwRGBBitCount==8) || (dxw.dwFlags2 & INIT8BPP)){ res |= RC_PALETTE; OutTraceDW("GetDeviceCaps: fix(3) RASTERCAPS setting RC_PALETTE cap=%x(%s)\n", res, ExplainRasterCaps(res)); } break; case BITSPIXEL: case COLORRES: int PrevRes; PrevRes=res; if(dxw.VirtualPixelFormat.dwRGBBitCount!=0) res = dxw.VirtualPixelFormat.dwRGBBitCount; if(dxw.dwFlags2 & INIT8BPP) res = 8; if(dxw.dwFlags2 & INIT16BPP) res = 16; if(dxw.dwFlags7 & INIT24BPP) res = 24; if(dxw.dwFlags7 & INIT32BPP) res = 32; if(PrevRes != res) OutTraceDW("GetDeviceCaps: fix(3) BITSPIXEL/COLORRES cap=%d\n", res); break; case SIZEPALETTE: res = 256; OutTraceDW("GetDeviceCaps: fix(3) SIZEPALETTE cap=%x\n", res); break; case NUMRESERVED: res = 0; OutTraceDW("GetDeviceCaps: fix(3) NUMRESERVED cap=%x\n", res); break; } } return res; } BOOL WINAPI extTextOutA(HDC hdc, int nXStart, int nYStart, LPCTSTR lpString, int cchString) { BOOL ret; extern BOOL gFixed; OutTraceDW("TextOutA: hdc=%x xy=(%d,%d) str=(%d)\"%.*s\"\n", hdc, nXStart, nYStart, cchString, cchString, lpString); if (!gFixed && dxw.IsToRemap(hdc)){ switch(dxw.GDIEmulationMode){ case GDIMODE_SHAREDDC: sdc.GetPrimaryDC(hdc); ret=(*pGDITextOutA)(sdc.GetHdc(), nXStart, nYStart, lpString, cchString); // update whole screen to avoid make calculations about text position & size sdc.PutPrimaryDC(hdc, TRUE); return ret; break; case GDIMODE_STRETCHED: dxw.MapClient(&nXStart, &nYStart); OutTraceDW("TextOut: fixed dest=(%d,%d)\n", nXStart, nYStart); break; } } ret=(*pGDITextOutA)(hdc, nXStart, nYStart, lpString, cchString); if(!ret) OutTraceE("TextOutA: ERROR ret=%x\n", ret); return ret; } BOOL WINAPI extTextOutW(HDC hdc, int nXStart, int nYStart, LPCWSTR lpString, int cchString) { BOOL ret; extern BOOL gFixed; OutTraceDW("TextOutW: hdc=%x xy=(%d,%d) str=(%d)\"%.*ls\"\n", hdc, nXStart, nYStart, cchString, cchString, lpString); if (!gFixed && dxw.IsToRemap(hdc)){ switch(dxw.GDIEmulationMode){ case GDIMODE_SHAREDDC: sdc.GetPrimaryDC(hdc); ret=(*pGDITextOutW)(sdc.GetHdc(), nXStart, nYStart, lpString, cchString); // update whole screen to avoid make calculations about text position & size sdc.PutPrimaryDC(hdc, TRUE); return ret; break; case GDIMODE_STRETCHED: dxw.MapClient(&nXStart, &nYStart); OutTraceDW("TextOutW: fixed dest=(%d,%d)\n", nXStart, nYStart); break; } } ret=(*pGDITextOutW)(hdc, nXStart, nYStart, lpString, cchString); if(!ret) OutTraceE("TextOutW: ERROR ret=%x\n", ret); return ret; } BOOL WINAPI extScaleWindowExtEx(HDC hdc, int Xnum, int Xdenom, int Ynum, int Ydenom, LPSIZE lpSize) { OutTraceDW("ScaleWindowExtEx: hdc=%x num=(%d,%d) denom=(%d,%d) lpSize=%d\n", hdc, Xnum, Ynum, Xdenom, Ydenom, lpSize); MessageBox(0, "ScaleWindowExtEx", "to fix", MB_OK | MB_ICONEXCLAMATION); return (*pGDIScaleWindowExtEx)(hdc, Xnum, Xdenom, Ynum, Ydenom, lpSize); } BOOL WINAPI extRectangle(HDC hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect) { int ret; OutTraceDW("Rectangle: hdc=%x xy=(%d,%d)-(%d,%d)\n", hdc, nLeftRect, nTopRect, nRightRect, nBottomRect); if (dxw.IsToRemap(hdc)){ switch(dxw.GDIEmulationMode){ case GDIMODE_SHAREDDC: sdc.GetPrimaryDC(hdc); ret=(*pGDIRectangle)(sdc.GetHdc(), nLeftRect, nTopRect, nRightRect, nBottomRect); sdc.PutPrimaryDC(hdc, TRUE, nLeftRect, nTopRect, nRightRect-nLeftRect, nBottomRect-nTopRect); return ret; break; case GDIMODE_STRETCHED: dxw.MapClient(&nLeftRect, &nTopRect, &nRightRect, &nBottomRect); OutTraceDW("Rectangle: fixed dest=(%d,%d)-(%d,%d)\n", nLeftRect, nTopRect, nRightRect, nBottomRect); break; } } ret=(*pGDIRectangle)(hdc, nLeftRect, nTopRect, nRightRect, nBottomRect); if(!ret) OutTraceE("Rectangle: ERROR ret=%x\n", ret); return ret; } int WINAPI extGDISaveDC(HDC hdc) { int ret; ret=(*pGDISaveDC)(hdc); OutTraceDW("GDI.SaveDC: hdc=%x ret=%x\n", hdc, ret); return ret; } BOOL WINAPI extGDIRestoreDC(HDC hdc, int nSavedDC) { BOOL ret; ret=(*pGDIRestoreDC)(hdc, nSavedDC); OutTraceDW("GDI.RestoreDC: hdc=%x nSavedDC=%x ret=%x\n", hdc, nSavedDC, ret); return ret; } /* --------------------------------------------------------------------------- */ /* Palette handling */ /* --------------------------------------------------------------------------- */ extern HDC hFlippedDC; extern BOOL bFlippedDC; extern void mySetPalette(int, int, LPPALETTEENTRY); // v2.1.75: Hooking for GDI32 CreatePalette, SelectPalette, RealizePalette: // maps the GDI palette to the buffered DirectDraw one. This fixes the screen // output for "Dementia" (a.k.a. "Armed & Delirious"). // In emulated mode (when color depyth is 8BPP ?) it may happen that the game // expects to get the requested system palette entries, while the 32BPP screen // returns 0. "Mission Force Cyberstorm" is one of these. Returning the same // value as nEntries, even though lppe is untouched, fixes the problem. PALETTEENTRY DefaultSystemPalette[256]={ // default palette, captured on my PC with video mode set to 8BPP {0x00,0x00,0x00,0x00},{0x80,0x00,0x00,0x00},{0x00,0x80,0x00,0x00},{0x80,0x80,0x00,0x00}, {0x00,0x00,0x80,0x00},{0x80,0x00,0x80,0x00},{0x00,0x80,0x80,0x00},{0xc0,0xc0,0xc0,0x00}, {0xa0,0xa0,0xa0,0x00},{0xf0,0xf0,0xf0,0x00},{0xc0,0xdc,0xc0,0x00},{0xa6,0xca,0xf0,0x00}, {0x04,0x04,0x04,0x00},{0x08,0x08,0x08,0x00},{0x0c,0x0c,0x0c,0x00},{0x11,0x11,0x11,0x00}, {0x16,0x16,0x16,0x00},{0x1c,0x1c,0x1c,0x00},{0x22,0x22,0x22,0x00},{0x29,0x29,0x29,0x00}, {0x55,0x55,0x55,0x00},{0x4d,0x4d,0x4d,0x00},{0x42,0x42,0x42,0x00},{0x39,0x39,0x39,0x00}, {0xff,0x7c,0x80,0x00},{0xff,0x50,0x50,0x00},{0xd6,0x00,0x93,0x00},{0xcc,0xec,0xff,0x00}, {0xef,0xd6,0xc6,0x00},{0xe7,0xe7,0xd6,0x00},{0xad,0xa9,0x90,0x00},{0x33,0x00,0x00,0x00}, {0x66,0x00,0x00,0x00},{0x99,0x00,0x00,0x00},{0xcc,0x00,0x00,0x00},{0x00,0x33,0x00,0x00}, {0x33,0x33,0x00,0x00},{0x66,0x33,0x00,0x00},{0x99,0x33,0x00,0x00},{0xcc,0x33,0x00,0x00}, {0xff,0x33,0x00,0x00},{0x00,0x66,0x00,0x00},{0x33,0x66,0x00,0x00},{0x66,0x66,0x00,0x00}, {0x99,0x66,0x00,0x00},{0xcc,0x66,0x00,0x00},{0xff,0x66,0x00,0x00},{0x00,0x99,0x00,0x00}, {0x33,0x99,0x00,0x00},{0x66,0x99,0x00,0x00},{0x99,0x99,0x00,0x00},{0xcc,0x99,0x00,0x00}, {0xff,0x99,0x00,0x00},{0x00,0xcc,0x00,0x00},{0x33,0xcc,0x00,0x00},{0x66,0xcc,0x00,0x00}, {0x99,0xcc,0x00,0x00},{0xcc,0xcc,0x00,0x00},{0xff,0xcc,0x00,0x00},{0x66,0xff,0x00,0x00}, {0x99,0xff,0x00,0x00},{0xcc,0xff,0x00,0x00},{0x00,0x00,0x33,0x00},{0x33,0x00,0x33,0x00}, {0x66,0x00,0x33,0x00},{0x99,0x00,0x33,0x00},{0xcc,0x00,0x33,0x00},{0xff,0x00,0x33,0x00}, {0x00,0x33,0x33,0x00},{0x33,0x33,0x33,0x00},{0x66,0x33,0x33,0x00},{0x99,0x33,0x33,0x00}, {0xcc,0x33,0x33,0x00},{0xff,0x33,0x33,0x00},{0x00,0x66,0x33,0x00},{0x33,0x66,0x33,0x00}, {0x66,0x66,0x33,0x00},{0x99,0x66,0x33,0x00},{0xcc,0x66,0x33,0x00},{0xff,0x66,0x33,0x00}, {0x00,0x99,0x33,0x00},{0x33,0x99,0x33,0x00},{0x66,0x99,0x33,0x00},{0x99,0x99,0x33,0x00}, {0xcc,0x99,0x33,0x00},{0xff,0x99,0x33,0x00},{0x00,0xcc,0x33,0x00},{0x33,0xcc,0x33,0x00}, {0x66,0xcc,0x33,0x00},{0x99,0xcc,0x33,0x00},{0xcc,0xcc,0x33,0x00},{0xff,0xcc,0x33,0x00}, {0x33,0xff,0x33,0x00},{0x66,0xff,0x33,0x00},{0x99,0xff,0x33,0x00},{0xcc,0xff,0x33,0x00}, {0xff,0xff,0x33,0x00},{0x00,0x00,0x66,0x00},{0x33,0x00,0x66,0x00},{0x66,0x00,0x66,0x00}, {0x99,0x00,0x66,0x00},{0xcc,0x00,0x66,0x00},{0xff,0x00,0x66,0x00},{0x00,0x33,0x66,0x00}, {0x33,0x33,0x66,0x00},{0x66,0x33,0x66,0x00},{0x99,0x33,0x66,0x00},{0xcc,0x33,0x66,0x00}, {0xff,0x33,0x66,0x00},{0x00,0x66,0x66,0x00},{0x33,0x66,0x66,0x00},{0x66,0x66,0x66,0x00}, {0x99,0x66,0x66,0x00},{0xcc,0x66,0x66,0x00},{0x00,0x99,0x66,0x00},{0x33,0x99,0x66,0x00}, {0x66,0x99,0x66,0x00},{0x99,0x99,0x66,0x00},{0xcc,0x99,0x66,0x00},{0xff,0x99,0x66,0x00}, {0x00,0xcc,0x66,0x00},{0x33,0xcc,0x66,0x00},{0x99,0xcc,0x66,0x00},{0xcc,0xcc,0x66,0x00}, {0xff,0xcc,0x66,0x00},{0x00,0xff,0x66,0x00},{0x33,0xff,0x66,0x00},{0x99,0xff,0x66,0x00}, {0xcc,0xff,0x66,0x00},{0xff,0x00,0xcc,0x00},{0xcc,0x00,0xff,0x00},{0x00,0x99,0x99,0x00}, {0x99,0x33,0x99,0x00},{0x99,0x00,0x99,0x00},{0xcc,0x00,0x99,0x00},{0x00,0x00,0x99,0x00}, {0x33,0x33,0x99,0x00},{0x66,0x00,0x99,0x00},{0xcc,0x33,0x99,0x00},{0xff,0x00,0x99,0x00}, {0x00,0x66,0x99,0x00},{0x33,0x66,0x99,0x00},{0x66,0x33,0x99,0x00},{0x99,0x66,0x99,0x00}, {0xcc,0x66,0x99,0x00},{0xff,0x33,0x99,0x00},{0x33,0x99,0x99,0x00},{0x66,0x99,0x99,0x00}, {0x99,0x99,0x99,0x00},{0xcc,0x99,0x99,0x00},{0xff,0x99,0x99,0x00},{0x00,0xcc,0x99,0x00}, {0x33,0xcc,0x99,0x00},{0x66,0xcc,0x66,0x00},{0x99,0xcc,0x99,0x00},{0xcc,0xcc,0x99,0x00}, {0xff,0xcc,0x99,0x00},{0x00,0xff,0x99,0x00},{0x33,0xff,0x99,0x00},{0x66,0xcc,0x99,0x00}, {0x99,0xff,0x99,0x00},{0xcc,0xff,0x99,0x00},{0xff,0xff,0x99,0x00},{0x00,0x00,0xcc,0x00}, {0x33,0x00,0x99,0x00},{0x66,0x00,0xcc,0x00},{0x99,0x00,0xcc,0x00},{0xcc,0x00,0xcc,0x00}, {0x00,0x33,0x99,0x00},{0x33,0x33,0xcc,0x00},{0x66,0x33,0xcc,0x00},{0x99,0x33,0xcc,0x00}, {0xcc,0x33,0xcc,0x00},{0xff,0x33,0xcc,0x00},{0x00,0x66,0xcc,0x00},{0x33,0x66,0xcc,0x00}, {0x66,0x66,0x99,0x00},{0x99,0x66,0xcc,0x00},{0xcc,0x66,0xcc,0x00},{0xff,0x66,0x99,0x00}, {0x00,0x99,0xcc,0x00},{0x33,0x99,0xcc,0x00},{0x66,0x99,0xcc,0x00},{0x99,0x99,0xcc,0x00}, {0xcc,0x99,0xcc,0x00},{0xff,0x99,0xcc,0x00},{0x00,0xcc,0xcc,0x00},{0x33,0xcc,0xcc,0x00}, {0x66,0xcc,0xcc,0x00},{0x99,0xcc,0xcc,0x00},{0xcc,0xcc,0xcc,0x00},{0xff,0xcc,0xcc,0x00}, {0x00,0xff,0xcc,0x00},{0x33,0xff,0xcc,0x00},{0x66,0xff,0x99,0x00},{0x99,0xff,0xcc,0x00}, {0xcc,0xff,0xcc,0x00},{0xff,0xff,0xcc,0x00},{0x33,0x00,0xcc,0x00},{0x66,0x00,0xff,0x00}, {0x99,0x00,0xff,0x00},{0x00,0x33,0xcc,0x00},{0x33,0x33,0xff,0x00},{0x66,0x33,0xff,0x00}, {0x99,0x33,0xff,0x00},{0xcc,0x33,0xff,0x00},{0xff,0x33,0xff,0x00},{0x00,0x66,0xff,0x00}, {0x33,0x66,0xff,0x00},{0x66,0x66,0xcc,0x00},{0x99,0x66,0xff,0x00},{0xcc,0x66,0xff,0x00}, {0xff,0x66,0xcc,0x00},{0x00,0x99,0xff,0x00},{0x33,0x99,0xff,0x00},{0x66,0x99,0xff,0x00}, {0x99,0x99,0xff,0x00},{0xcc,0x99,0xff,0x00},{0xff,0x99,0xff,0x00},{0x00,0xcc,0xff,0x00}, {0x33,0xcc,0xff,0x00},{0x66,0xcc,0xff,0x00},{0x99,0xcc,0xff,0x00},{0xcc,0xcc,0xff,0x00}, {0xff,0xcc,0xff,0x00},{0x33,0xff,0xff,0x00},{0x66,0xff,0xcc,0x00},{0x99,0xff,0xff,0x00}, {0xcc,0xff,0xff,0x00},{0xff,0x66,0x66,0x00},{0x66,0xff,0x66,0x00},{0xff,0xff,0x66,0x00}, {0x66,0x66,0xff,0x00},{0xff,0x66,0xff,0x00},{0x66,0xff,0xff,0x00},{0xa5,0x00,0x21,0x00}, {0x5f,0x5f,0x5f,0x00},{0x77,0x77,0x77,0x00},{0x86,0x86,0x86,0x00},{0x96,0x96,0x96,0x00}, {0xcb,0xcb,0xcb,0x00},{0xb2,0xb2,0xb2,0x00},{0xd7,0xd7,0xd7,0x00},{0xdd,0xdd,0xdd,0x00}, {0xe3,0xe3,0xe3,0x00},{0xea,0xea,0xea,0x00},{0xff,0xfb,0xf0,0x00},{0xa0,0xa0,0xa4,0x00}, {0x80,0x80,0x80,0x00},{0xff,0x00,0x00,0x00},{0x00,0xff,0x00,0x00},{0xff,0xff,0x00,0x00}, {0x00,0x00,0xff,0x00},{0xff,0x00,0xff,0x00},{0x00,0xff,0xff,0x00},{0xff,0xff,0xff,0x00} }; HPALETTE WINAPI extGDICreatePalette(CONST LOGPALETTE *plpal) { HPALETTE ret; OutTraceDW("GDI.CreatePalette: plpal=%x version=%x NumEntries=%d\n", plpal, plpal->palVersion, plpal->palNumEntries); if(IsDebug) dxw.DumpPalette(plpal->palNumEntries, (LPPALETTEENTRY)plpal->palPalEntry); ret=(*pGDICreatePalette)(plpal); OutTraceDW("GDI.CreatePalette: hPalette=%x\n", ret); return ret; } HPALETTE hDesktopPalette=NULL; HPALETTE WINAPI extSelectPalette(HDC hdc, HPALETTE hpal, BOOL bForceBackground) { HPALETTE ret; OutTraceDW("GDI.SelectPalette: hdc=%x hpal=%x ForceBackground=%x\n", hdc, hpal, bForceBackground); if(hdc==dxw.RealHDC) hdc= dxw.VirtualHDC; //if((dxw.dwFlags1 & EMULATESURFACE) && (dxw.dwFlags6 & SYNCPALETTE) && bFlippedDC){ if((dxw.dwFlags1 & EMULATESURFACE) && (dxw.dwFlags6 & SYNCPALETTE)){ hDesktopPalette=hpal; if(hFlippedDC){ hdc = hFlippedDC; ret=(*pGDISelectPalette)(hdc, hpal, bForceBackground); } else{ extern GetDC_Type pGetDCMethod(); extern ReleaseDC_Type pReleaseDCMethod(); LPDIRECTDRAWSURFACE lpDDSPrim; lpDDSPrim = dxwss.GetPrimarySurface(); (*pGetDCMethod())(lpDDSPrim, &hdc); ret=(*pGDISelectPalette)(hdc, hpal, bForceBackground); (*pReleaseDCMethod())(lpDDSPrim, hdc); } } else{ ret=(*pGDISelectPalette)(hdc, hpal, bForceBackground); OutTraceDW("GDI.SelectPalette: ret=%x\n", ret); } return ret; } BOOL WINAPI extAnimatePalette(HPALETTE hpal, UINT iStartIndex, UINT cEntries, const PALETTEENTRY *ppe) { // Invoked by "Pharaoh's Ascent 1.4" // Used by "Yu No" BOOL ret; #if 0 if((dxw.dwFlags1 & EMULATESURFACE) && (dxw.dwFlags6 & SYNCPALETTE) && bFlippedDC){ hDesktopPalette=hpal; if(hFlippedDC){ ret = (*pAnimatePalette)(hpal, iStartIndex, cEntries, ppe); } else{ HDC hdc; extern GetDC_Type pGetDCMethod(); extern ReleaseDC_Type pReleaseDCMethod(); LPDIRECTDRAWSURFACE lpDDSPrim; lpDDSPrim = dxwss.GetPrimarySurface(); (*pGetDCMethod())(lpDDSPrim, &hdc); ret = (*pAnimatePalette)(hpal, iStartIndex, cEntries, ppe); (*pReleaseDCMethod())(lpDDSPrim, hdc); } } else{ ret = (*pAnimatePalette)(hpal, iStartIndex, cEntries, ppe); } #else ret = (*pAnimatePalette)(hpal, iStartIndex, cEntries, ppe); #endif if(!ret) { OutTraceE("AnimatePalette ERROR: err=%d\n", GetLastError()); ret = TRUE; } // if(dxw.IsFullScreen()) (*pInvalidateRect)(dxw.GethWnd(), NULL, FALSE); return ret; } UINT WINAPI extRealizePalette(HDC hdc) { UINT ret; OutTraceDW("GDI.RealizePalette: hdc=%x\n", hdc); if((dxw.dwFlags1 & EMULATESURFACE) && (dxw.dwFlags6 & SYNCPALETTE)){ PALETTEENTRY PalEntries[256]; UINT nEntries; if(bFlippedDC) hdc = hFlippedDC; ret=(*pGDIRealizePalette)(hdc); OutTraceDW("GDI.RealizePalette: RealizePalette on hdc=%x ret=%d\n", hdc, ret); nEntries=(*pGetPaletteEntries)(hDesktopPalette, 0, 256, PalEntries); OutTraceDW("GDI.RealizePalette: GetPaletteEntries on hdc=%x ret=%d\n", hdc, nEntries); mySetPalette(0, nEntries, PalEntries); if(IsDebug && nEntries) dxw.DumpPalette(nEntries, PalEntries); ret=nEntries; HRESULT res; extern LPDIRECTDRAWPALETTE lpDDP; extern SetEntries_Type pSetEntries; if(lpDDP && pSetEntries) res=(*pSetEntries)(lpDDP, 0, 0, 256, PalEntries); } else ret=(*pGDIRealizePalette)(hdc); OutTraceDW("GDI.RealizePalette: hdc=%x nEntries=%d\n", hdc, ret); // if(dxw.IsFullScreen()) (*pInvalidateRect)(dxw.GethWnd(), NULL, FALSE); return ret; } UINT WINAPI extGetSystemPaletteEntries(HDC hdc, UINT iStartIndex, UINT nEntries, LPPALETTEENTRY lppe) { int ret; OutTraceDW("GetSystemPaletteEntries: hdc=%x start=%d num=%d\n", hdc, iStartIndex, nEntries); ret=(*pGDIGetSystemPaletteEntries)(hdc, iStartIndex, nEntries, lppe); OutTraceDW("GetSystemPaletteEntries: ret=%d\n", ret); if((ret == 0) && (dxw.dwFlags1 & EMULATESURFACE) && (dxw.dwFlags6 & SYNCPALETTE)) { // use static default data... for(UINT idx=0; idx%x\n", hdcDest); IsDCLeakageDest = TRUE; } if(hdcSrc == NULL){ hdcSrc = (*pGDIGetDC)(dxw.GethWnd()); OutTraceB("GDI.BitBlt: DEBUG hdc src=NULL->%x\n", hdcSrc); IsDCLeakageSrc = TRUE; } IsToScreen=(OBJ_DC == (*pGetObjectType)(hdcDest)); IsFromScreen=(OBJ_DC == (*pGetObjectType)(hdcSrc)); Flux = (IsToScreen ? 1 : 0) + (IsFromScreen ? 2 : 0); if (IsToScreen && (dxw.dwFlags3 & NOGDIBLT)) return TRUE; if(IsToScreen && (dxw.dwFlags8 & DUMPDEVCONTEXT)) DumpHDC(hdcSrc, nXSrc, nYSrc, nWidth, nHeight); if(dxw.IsFullScreen()){ //int nWSrc, nHSrc, int nWDest, nHDest; switch(dxw.GDIEmulationMode){ case GDIMODE_SHAREDDC: switch(Flux){ case 0: // memory to memory res=(*pGDIBitBlt)(hdcDest, nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, dwRop); break; case 1: // memory to screen case 3: // screen to screen dxw.HandleFPS(); // handle refresh delays sdc.SetOrigin(nXSrc, nYSrc); sdc.GetPrimaryDC(hdcDest, hdcSrc); res=(*pGDIBitBlt)(sdc.GetHdc(), nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, dwRop); sdc.PutPrimaryDC(hdcDest, TRUE, nXDest, nYDest, nWidth, nHeight); break; case 2: // screen to memory sdc.GetPrimaryDC(hdcSrc); res=(*pGDIBitBlt)(hdcDest, nXDest, nYDest, nWidth, nHeight, sdc.GetHdc(), nXSrc, nYSrc, dwRop); sdc.PutPrimaryDC(hdcSrc, TRUE, nXDest, nYDest, nWidth, nHeight); break; } break; case GDIMODE_STRETCHED: nWDest= nWidth; nHDest= nHeight; switch(Flux){ case 1: // memory to screen // v1.03.58: BitBlt can blitfrom negative coordinates, StretchBlt can't! dxw.HandleFPS(); // handle refresh delays if(nXDest < 0){ int nXshift = -nXDest; nXDest = 0; nXSrc += nXshift; nWidth -= nXshift; nWDest -= nXshift; } if(nYDest < 0){ int nYshift = -nYDest; nYDest = 0; nYSrc += nYshift; nHeight -= nYshift; nHDest -= nYshift; } dxw.MapClient(&nXDest, &nYDest, &nWDest, &nHDest); break; case 2: // screen to memory dxw.MapClient(&nXSrc, &nYSrc, &nWidth, &nHeight); break; default: break; } res=(*pGDIStretchBlt)(hdcDest, nXDest, nYDest, nWDest, nHDest, hdcSrc, nXSrc, nYSrc, nWidth, nHeight, dwRop); OutTraceB("GDI.BitBlt: DEBUG DC dest=(%d,%d) size=(%d,%d)\n", nXDest, nYDest, nWDest, nHDest); break; case GDIMODE_EMULATED: if (hdcDest==dxw.RealHDC) { hdcDest=dxw.VirtualHDC; dxw.HandleFPS(); // handle refresh delays } res=(*pGDIBitBlt)(hdcDest, nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, dwRop); OutTraceB("GDI.BitBlt: DEBUG emulated hdc dest=%x->%x\n", dxw.RealHDC, hdcDest); break; default: res=(*pGDIBitBlt)(hdcDest, nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, dwRop); break; } } else { res=(*pGDIBitBlt)(hdcDest, nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, dwRop); } if(IsDCLeakageSrc) (*pGDIReleaseDC)(dxw.GethWnd(), hdcSrc); if(IsDCLeakageDest) (*pGDIReleaseDC)(dxw.GethWnd(), hdcDest); if(res && IsToScreen) { dxw.ShowOverlay(hdcDest); if(dxw.dwFlags8 & MARKGDI32) dxw.Mark(hdcDest, FALSE, RGB(0, 0, 255), nXDest, nYDest, nWidth, nHeight); } if(!res) OutTraceE("GDI.BitBlt: ERROR err=%d at %d\n", GetLastError(), __LINE__); return res; } BOOL WINAPI extGDIStretchBlt(HDC hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, HDC hdcSrc, int nXSrc, int nYSrc, int nWSrc, int nHSrc, DWORD dwRop) { BOOL res; BOOL IsToScreen; BOOL IsFromScreen; BOOL IsDCLeakageSrc = FALSE; BOOL IsDCLeakageDest = FALSE; int Flux; OutTraceDW("GDI.StretchBlt: HDC=%x nXDest=%d nYDest=%d nWidth=%d nHeight=%d hdcSrc=%x nXSrc=%d nYSrc=%d nWSrc=%d nHSrc=%d dwRop=%x(%s)\n", hdcDest, nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, nWSrc, nHSrc, dwRop, ExplainROP(dwRop)); OutTraceB("GDI.StretchBlt: DEBUG FullScreen=%x target hdctype=%x(%s) hwnd=%x\n", dxw.IsFullScreen(), (*pGetObjectType)(hdcDest), ExplainDCType((*pGetObjectType)(hdcDest)), WindowFromDC(hdcDest)); if(dxw.GDIEmulationMode == GDIMODE_EMULATED){ if (hdcDest==dxw.RealHDC) hdcDest=dxw.VirtualHDC; OutTraceB("GDI.StretchBlt: DEBUG emulated hdc dest=%x->%x\n", dxw.RealHDC, hdcDest); } if(hdcDest == NULL){ // happens in Reah, hdc is NULL despite the fact that BeginPaint returns a valid DC. Too bad, we recover here ... hdcDest = (*pGDIGetDC)(dxw.GethWnd()); OutTraceB("GDI.StretchBlt: DEBUG hdc dest=NULL->%x\n", hdcDest); IsDCLeakageDest = TRUE; } if(hdcSrc == NULL){ hdcSrc = (*pGDIGetDC)(dxw.GethWnd()); OutTraceB("GDI.StretchBlt: DEBUG hdc src=NULL->%x\n", hdcSrc); IsDCLeakageSrc = TRUE; } IsToScreen=(OBJ_DC == (*pGetObjectType)(hdcDest)); IsFromScreen=(OBJ_DC == (*pGetObjectType)(hdcSrc)); Flux = (IsToScreen ? 1 : 0) + (IsFromScreen ? 2 : 0); if (IsToScreen && (dxw.dwFlags3 & NOGDIBLT)) return TRUE; if(dxw.IsToRemap(hdcDest) && (hdcDest != hdcSrc)){ switch(dxw.GDIEmulationMode){ case GDIMODE_SHAREDDC: switch(Flux){ case 0: // memory to memory res=(*pGDIStretchBlt)(hdcDest, nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, nWSrc, nHSrc, dwRop); break; case 1: // memory to screen case 3: // screen to screen sdc.GetPrimaryDC(hdcDest, hdcSrc); sdc.SetOrigin(nXSrc, nYSrc); res=(*pGDIStretchBlt)(sdc.GetHdc(), nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, nWSrc, nHSrc, dwRop); sdc.PutPrimaryDC(hdcDest, TRUE, nXDest, nYDest, nWidth, nHeight); break; case 2: // screen to memory using virtual screen sdc.GetPrimaryDC(hdcSrc); res=(*pGDIStretchBlt)(hdcDest, nXDest, nYDest, nWidth, nHeight, sdc.GetHdc(), nXSrc, nYSrc, nWSrc, nHSrc, dwRop); sdc.PutPrimaryDC(hdcSrc, TRUE, nXSrc, nYSrc, nWSrc, nHSrc); break; } break; case GDIMODE_STRETCHED: { int nWDest, nHDest; nWDest= nWidth; nHDest= nHeight; switch(Flux){ case 1: // memory to screen dxw.MapClient(&nXDest, &nYDest, &nWDest, &nHDest); break; case 2: // screen to memory dxw.MapClient(&nXSrc, &nYSrc, &nWidth, &nHeight); break; default: break; } res=(*pGDIStretchBlt)(hdcDest, nXDest, nYDest, nWDest, nHDest, hdcSrc, nXSrc, nYSrc, nWSrc, nHSrc, dwRop); OutTraceB("GDI.StretchBlt: DEBUG DC dest=(%d,%d) size=(%d,%d)\n", nXDest, nYDest, nWDest, nHDest); } break; case GDIMODE_EMULATED: default: res=(*pGDIStretchBlt)(hdcDest, nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, nWSrc, nHSrc, dwRop); break; } } else { res=(*pGDIStretchBlt)(hdcDest, nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, nWSrc, nHSrc, dwRop); } if(IsDCLeakageSrc) (*pGDIReleaseDC)(dxw.GethWnd(), hdcSrc); if(IsDCLeakageDest) (*pGDIReleaseDC)(dxw.GethWnd(), hdcDest); if(res && IsToScreen) { dxw.ShowOverlay(hdcDest); if(dxw.dwFlags8 & MARKGDI32) dxw.Mark(hdcDest, FALSE, RGB(0, 250, 250), nXDest, nYDest, nWidth, nHeight); } if(!res) OutTraceE("GDI.StretchBlt: ERROR err=%d at %d\n", GetLastError(), __LINE__); return res; } BOOL WINAPI extGDIPatBlt(HDC hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, DWORD dwRop) { BOOL res; BOOL IsToScreen; BOOL IsDCLeakageDest = FALSE; OutTraceDW("GDI.PatBlt: HDC=%x nXDest=%d nYDest=%d nWidth=%d nHeight=%d dwRop=%x(%s)\n", hdcDest, nXDest, nYDest, nWidth, nHeight, dwRop, ExplainROP(dwRop)); OutTraceB("GDI.PatBlt: DEBUG FullScreen=%x target hdctype=%x(%s) hwnd=%x\n", dxw.IsFullScreen(), (*pGetObjectType)(hdcDest), ExplainDCType((*pGetObjectType)(hdcDest)), WindowFromDC(hdcDest)); if(dxw.GDIEmulationMode == GDIMODE_EMULATED){ if (hdcDest==dxw.RealHDC) hdcDest=dxw.VirtualHDC; OutTraceB("GDI.PatBlt: DEBUG emulated hdc dest=%x->%x\n", dxw.RealHDC, hdcDest); } if(hdcDest == NULL){ // happens in Reah, hdc is NULL despite the fact that BeginPaint returns a valid DC. Too bad, we recover here ... hdcDest = (*pGDIGetDC)(dxw.GethWnd()); OutTraceB("GDI.PatBlt: DEBUG hdc dest=NULL->%x\n", hdcDest); IsDCLeakageDest = TRUE; } IsToScreen=(OBJ_DC == (*pGetObjectType)(hdcDest)); if (IsToScreen && (dxw.dwFlags3 & NOGDIBLT)) return TRUE; if(dxw.IsToRemap(hdcDest)) { switch(dxw.GDIEmulationMode){ case GDIMODE_SHAREDDC: sdc.GetPrimaryDC(hdcDest); res=(*pGDIPatBlt)(sdc.GetHdc(), nXDest, nYDest, nWidth, nHeight, dwRop); sdc.PutPrimaryDC(hdcDest, TRUE, nXDest, nYDest, nWidth, nHeight); return res; break; case GDIMODE_STRETCHED: { int nWDest, nHDest; nWDest= nWidth; nHDest= nHeight; dxw.MapClient(&nXDest, &nYDest, &nWDest, &nHDest); res=(*pGDIPatBlt)(hdcDest, nXDest, nYDest, nWDest, nHDest, dwRop); OutTraceB("GDI.PatBlt: DEBUG DC dest=(%d,%d) size=(%d,%d)\n", nXDest, nYDest, nWDest, nHDest); } break; case GDIMODE_EMULATED: default: res=(*pGDIPatBlt)(hdcDest, nXDest, nYDest, nWidth, nHeight, dwRop); break; } } else { res=(*pGDIPatBlt)(hdcDest, nXDest, nYDest, nWidth, nHeight, dwRop); } if(IsDCLeakageDest) (*pGDIReleaseDC)(dxw.GethWnd(), hdcDest); if(res && IsToScreen) { dxw.ShowOverlay(hdcDest); if(dxw.dwFlags8 & MARKGDI32) dxw.Mark(hdcDest, FALSE, RGB(255, 255, 0), nXDest, nYDest, nWidth, nHeight); } if(!res) OutTraceE("GDI.PatBlt: ERROR err=%d at %d\n", GetLastError(), __LINE__); return res; } HFONT WINAPI extCreateFont(int nHeight, int nWidth, int nEscapement, int nOrientation, int fnWeight, DWORD fdwItalic, DWORD fdwUnderline, DWORD fdwStrikeOut, DWORD fdwCharSet, DWORD fdwOutputPrecision, DWORD fdwClipPrecision, DWORD fdwQuality, DWORD fdwPitchAndFamily, LPCTSTR lpszFace) { HFONT HFont, HScaled; OutTraceDW("CreateFont: h=%d w=%d face=\"%s\"\n", nHeight, nWidth, lpszFace); if(dxw.dwFlags8 & QUALITYFONTS) fdwQuality = BEST_QUALITY; HFont = (*pGDICreateFont)(nHeight, nWidth, nEscapement, nOrientation, fnWeight, fdwItalic, fdwUnderline, fdwStrikeOut, fdwCharSet, fdwOutputPrecision, fdwClipPrecision, fdwQuality, fdwPitchAndFamily, lpszFace); if((dxw.dwFlags1 & FIXTEXTOUT) && HFont) { if(nHeight > 0) dxw.MapClient(&nWidth, &nHeight); else { nHeight= -nHeight; dxw.MapClient(&nWidth, &nHeight); nHeight= -nHeight; } HScaled = (*pGDICreateFont)(nHeight, nWidth, nEscapement, nOrientation, fnWeight, fdwItalic, fdwUnderline, fdwStrikeOut, fdwCharSet, fdwOutputPrecision, fdwClipPrecision, fdwQuality, fdwPitchAndFamily, lpszFace); if(HScaled){ OutTraceDW("CreateFontIndirect: associate font=%x scaled=%x\n", HFont, HScaled); fontdb.Push(HFont, HScaled); } else{ OutTraceE("CreateFontIndirect ERROR: scaled font err=%d\n", GetLastError()); } } if(HFont) OutTraceDW("CreateFont: hfont=%x\n", HFont); else OutTraceDW("CreateFont ERROR: err=%d\n", GetLastError()); return HFont; } // CreateFontIndirect hook routine to avoid font aliasing that prevents reverse blitting working on palettized surfaces // NONANTIALIASED_QUALITY no longer necessary, since reverse blitting is no longer used HFONT WINAPI extCreateFontIndirect(const LOGFONT* lplf) { HFONT HFont, HScaled; LOGFONT lf; OutTraceDW("CreateFontIndirect: h=%d w=%d face=\"%s\"\n", lplf->lfHeight, lplf->lfWidth, lplf->lfFaceName); memcpy((char *)&lf, (char *)lplf, sizeof(LOGFONT)); if(dxw.dwFlags8 & QUALITYFONTS) lf.lfQuality = BEST_QUALITY; HFont=(*pGDICreateFontIndirect)(&lf); if(dxw.dwFlags1 & FIXTEXTOUT) { memcpy((char *)&lf, (char *)lplf, sizeof(LOGFONT)); if(dxw.dwFlags8 & QUALITYFONTS) lf.lfQuality = BEST_QUALITY; if(lf.lfHeight > 0) dxw.MapClient((int *)&lf.lfWidth, (int *)&lf.lfHeight); else { lf.lfHeight= -lf.lfHeight; dxw.MapClient((int *)&lf.lfWidth, (int *)&lf.lfHeight); lf.lfHeight= -lf.lfHeight; } HScaled=((*pGDICreateFontIndirect)(&lf)); if(HScaled){ OutTraceDW("CreateFontIndirect: associate font=%x scaled=%x\n", HFont, HScaled); fontdb.Push(HFont, HScaled); } else{ OutTraceE("CreateFontIndirect ERROR: scaled font err=%d\n", GetLastError()); } } if(HFont) OutTraceDW("CreateFontIndirect: hfont=%x\n", HFont); else OutTraceE("CreateFontIndirect ERROR: err=%d\n", GetLastError()); return HFont; } BOOL WINAPI extSetDeviceGammaRamp(HDC hDC, LPVOID lpRamp) { BOOL ret; OutTraceDW("SetDeviceGammaRamp: hdc=%x\n", hDC); if(dxw.dwFlags2 & DISABLEGAMMARAMP) { OutTraceDW("SetDeviceGammaRamp: SUPPRESS\n"); return TRUE; } ret=(*pGDISetDeviceGammaRamp)(hDC, lpRamp); if(!ret) OutTraceE("SetDeviceGammaRamp: ERROR err=%d\n", GetLastError()); return ret; } BOOL WINAPI extGetDeviceGammaRamp(HDC hDC, LPVOID lpRamp) { BOOL ret; OutTraceDW("GetDeviceGammaRamp: hdc=%x\n", hDC); ret=(*pGDIGetDeviceGammaRamp)(hDC, lpRamp); if(!ret) OutTraceE("GetDeviceGammaRamp: ERROR err=%d\n", GetLastError()); return ret; } int WINAPI extGetClipBox(HDC hdc, LPRECT lprc) { // v2.02.31: needed in "Imperialism II" to avoid blit clipping int ret; OutTraceDW("GetClipBox: hdc=%x\n", hdc); if (dxw.IsToRemap(hdc)){ switch(dxw.GDIEmulationMode){ case GDIMODE_SHAREDDC: sdc.GetPrimaryDC(hdc); ret=(*pGDIGetClipBox)(sdc.GetHdc(), lprc); sdc.PutPrimaryDC(hdc, FALSE); return ret; break; case GDIMODE_STRETCHED: ret=(*pGDIGetClipBox)(hdc, lprc); OutTraceDW("GetClipBox: scaling main win coordinates (%d,%d)-(%d,%d)\n", lprc->left, lprc->top, lprc->right, lprc->bottom); dxw.UnmapClient(lprc); break; default: ret=(*pGDIGetClipBox)(hdc, lprc); break; } } else ret=(*pGDIGetClipBox)(hdc, lprc); OutTraceDW("GetClipBox: ret=%x(%s) rect=(%d,%d)-(%d,%d)\n", ret, ExplainRegionType(ret), lprc->left, lprc->top, lprc->right, lprc->bottom); return ret; } int WINAPI extIntersectClipRect(HDC hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect) { int ret; OutTraceDW("IntersectClipRect: hdc=%x rect=(%d,%d)-(%d,%d)\n", hdc, nLeftRect, nTopRect, nRightRect, nBottomRect); if (dxw.IsToRemap(hdc)){ switch(dxw.GDIEmulationMode){ case GDIMODE_SHAREDDC: sdc.GetPrimaryDC(hdc); ret=(*pIntersectClipRect)(sdc.GetHdc(), nLeftRect, nTopRect, nRightRect, nBottomRect); sdc.PutPrimaryDC(hdc, FALSE); return ret; break; case GDIMODE_STRETCHED: dxw.MapClient(&nLeftRect, &nTopRect, &nRightRect, &nBottomRect); OutTraceDW("IntersectClipRect: fixed rect=(%d,%d)-(%d,%d)\n", nLeftRect, nTopRect, nRightRect, nBottomRect); break; } } ret=(*pIntersectClipRect)(hdc, nLeftRect, nTopRect, nRightRect, nBottomRect); OutTraceDW("IntersectClipRect: ret=%x(%s)\n", ret, ExplainRegionType(ret)); return ret; } int WINAPI extGetRgnBox(HRGN hrgn, LPRECT lprc) { int ret; OutTraceDW("GetRgnBox: hrgn=%x\n", hrgn); ret=(*pGetRgnBox)(hrgn, lprc); if (dxw.IsFullScreen() && (ret!=ERROR)){ switch(dxw.GDIEmulationMode){ case GDIMODE_STRETCHED: OutTraceDW("GetRgnBox: scaling main win coordinates (%d,%d)-(%d,%d)\n", lprc->left, lprc->top, lprc->right, lprc->bottom); dxw.UnmapClient(lprc); break; } } OutTraceDW("GetRgnBox: ret=%x(%s) rect=(%d,%d)-(%d,%d)\n", ret, ExplainRegionType(ret), lprc->left, lprc->top, lprc->right, lprc->bottom); return ret; } BOOL WINAPI extPolyline(HDC hdc, const POINT *lppt, int cPoints) { // LOGTOBEFIXED BOOL ret; if(IsTraceDDRAW){ int i; OutTrace("Polyline: hdc=%x cPoints=%d pt=", hdc, cPoints); for(i=0; ibmiHeader)); } if(dxw.IsToRemap(hdc)){ dxw.HandleFPS(); // handle refresh delays switch(dxw.GDIEmulationMode){ case GDIMODE_SHAREDDC: sdc.GetPrimaryDC(hdc); ret=(*pStretchDIBits)(sdc.GetHdc(), XDest, YDest, nDestWidth, nDestHeight, XSrc, YSrc, nSrcWidth, nSrcHeight, lpBits, lpBitsInfo, iUsage, dwRop); sdc.PutPrimaryDC(hdc, TRUE, XDest, YDest, nDestWidth, nDestHeight); return ret; break; case GDIMODE_STRETCHED: dxw.MapClient(&XDest, &YDest, &nDestWidth, &nDestHeight); OutTraceDW("StretchDIBits: fixed STRETCHED dest=(%d,%d)-(%d,%d)\n", XDest, YDest, nDestWidth, nDestHeight); break; case GDIMODE_EMULATED: if(dxw.IsVirtual(hdc)){ XDest+=dxw.VirtualOffsetX; YDest+=dxw.VirtualOffsetY; OutTraceDW("StretchDIBits: fixed EMULATED dest=(%d,%d)-(%d,%d)\n", XDest, YDest, nDestWidth, nDestHeight); } break; default: break; } } ret=(*pStretchDIBits)(hdc, XDest, YDest, nDestWidth, nDestHeight, XSrc, YSrc, nSrcWidth, nSrcHeight, lpBits, lpBitsInfo, iUsage, dwRop); if(dxw.dwFlags8 & MARKGDI32) dxw.Mark(hdc, FALSE, RGB(255, 0, 255), XDest, YDest, nDestWidth, nDestHeight); if(!ret || (ret==GDI_ERROR)) OutTraceE("StretchDIBits: ERROR ret=%x err=%d\n", ret, GetLastError()); return ret; } int WINAPI extSetDIBits(HDC hdc, HBITMAP hbmp, UINT uStartScan, UINT cScanLines, const VOID *lpvBits, const BITMAPINFO *lpbmi, UINT fuColorUse) { int ret; if(IsTraceDW){ OutTrace("SetDIBits: hdc=%x%s hbmp=%x lines=(%d,%d) ColorUse=%x(%s)\n", hdc, dxw.IsToRemap(hdc)?"(R)":"", hbmp, uStartScan, cScanLines, fuColorUse, ExplainDIBUsage(fuColorUse)); TraceBITMAPINFOHEADER("SetDIBits", (BITMAPINFOHEADER *)&(lpbmi->bmiHeader)); } if(dxw.IsToRemap(hdc) && !bGDIRecursionFlag){ //HDC hTempDc; //HBITMAP hbmPic; switch(dxw.GDIEmulationMode){ case GDIMODE_SHAREDDC: // this will flicker !!!! sdc.GetPrimaryDC(hdc); ret=(*pSetDIBits)(sdc.GetHdc(), hbmp, uStartScan, cScanLines, lpvBits, lpbmi, fuColorUse); if(!ret || (ret==GDI_ERROR)) OutTraceE("SetDIBits: ERROR err=%d\n", GetLastError()); sdc.PutPrimaryDC(hdc, TRUE, 0, 0, lpbmi->bmiHeader.biWidth, lpbmi->bmiHeader.biHeight); return ret; break; case GDIMODE_STRETCHED: #if 0 // blitting to primary surface !!! int OrigXDest, OrigYDest; OrigWidth=dwWidth; OrigHeight=dwHeight; OrigXDest=XDest; OrigYDest=YDest; dxw.MapClient(&XDest, &YDest, (int *)&dwWidth, (int *)&dwHeight); OutTraceDW("SetDIBits: fixed dest=(%d,%d)-(%dx%d)\n", XDest, YDest, dwWidth, dwHeight); if(!(hTempDc=CreateCompatibleDC(hdc))) OutTraceE("CreateCompatibleDC: ERROR err=%d at=%d\n", GetLastError(), __LINE__); // tricky part: CreateCompatibleBitmap is needed to set the dc size, but it has to be performed // against hdc to set for color depth, then selected (through SelectObject) against the temporary // dc to assign the needed size and color space to the temporary dc. if(!(hbmPic=CreateCompatibleBitmap(hdc, OrigWidth, OrigHeight))) OutTraceE("CreateCompatibleBitmap: ERROR err=%d at=%d\n", GetLastError(), __LINE__); if(!SelectObject(hTempDc, hbmPic)) OutTraceE("SelectObject: ERROR err=%d at=%d\n", GetLastError(), __LINE__); if(!(*pSetDIBits)(hTempDc, hbmp, uStartScan, cScanLines, lpvBits, lpbmi, fuColorUse)) OutTraceE("SetDIBits: ERROR err=%d at=%d\n", GetLastError(), __LINE__); // v2.02.94: set HALFTONE stretching. Fixes "Celtic Kings Rage of War" SetStretchBltMode(hdc,HALFTONE); if(!(ret=(*pGDIStretchBlt)(hdc, XDest, YDest, dwWidth, dwHeight, hTempDc, 0, 0, OrigWidth, OrigHeight, SRCCOPY))) OutTraceE("StretchBlt: ERROR err=%d at=%d\n", GetLastError(), __LINE__); if(!(DeleteObject(hbmPic))) // v2.02.32 - avoid resource leakage OutTraceE("DeleteObject: ERROR err=%d at=%d\n", GetLastError(), __LINE__); if(!(DeleteDC(hTempDc))) OutTraceE("DeleteDC: ERROR err=%d at=%d\n", GetLastError(), __LINE__); return TRUE; #endif break; case GDIMODE_EMULATED: #if 0 if (dxw.IsVirtual(hdc)){ int X, Y; X=XDest+dxw.VirtualOffsetX; Y=YDest+dxw.VirtualOffsetY; OutTraceDW("SetDIBits: virtual pos=(%d,%d)+(%d+%d)=(%d,%d)\n", XDest, YDest, dxw.VirtualOffsetX, dxw.VirtualOffsetY, X, Y); ret=(*pSetDIBits)(sdc.GetHdc(), hbmp, uStartScan, cScanLines, lpvBits, lpbmi, fuColorUse); if(!ret || (ret==GDI_ERROR)) OutTraceE("SetDIBits: ERROR ret=%x err=%d\n", ret, GetLastError()); return ret; } #endif break; default: break; } } ret = (*pSetDIBits)(hdc, hbmp, uStartScan, cScanLines, lpvBits, lpbmi, fuColorUse); if(!ret || (ret==GDI_ERROR)) OutTraceE("SetDIBits: ERROR err=%d\n", GetLastError()); return ret; } int WINAPI extGetDIBits(HDC hdc, HBITMAP hbmp, UINT uStartScan, UINT cScanLines, LPVOID lpvBits, LPBITMAPINFO lpbmi, UINT uUsage) { int ret; if(IsTraceDW){ OutTrace("GetDIBits: hdc=%x hbmp=%x lines=(%d,%d) ColorUse=%x(%s)\n", hdc, hbmp, uStartScan, cScanLines, uUsage, ExplainDIBUsage(uUsage)); TraceBITMAPINFOHEADER("GetDIBits", (BITMAPINFOHEADER *)&(lpbmi->bmiHeader)); } if(dxw.IsToRemap(hdc) && !bGDIRecursionFlag){ switch(dxw.GDIEmulationMode){ case GDIMODE_SHAREDDC: // this will flicker !!!! sdc.GetPrimaryDC(hdc); ret=(*pGetDIBits)(sdc.GetHdc(), hbmp, uStartScan, cScanLines, lpvBits, lpbmi, uUsage); sdc.PutPrimaryDC(hdc, FALSE); return ret; break; case GDIMODE_EMULATED: default: break; } } ret = (*pGetDIBits)(hdc, hbmp, uStartScan, cScanLines, lpvBits, lpbmi, uUsage); if(!ret || (ret==GDI_ERROR)) OutTraceE("GetDIBits: ERROR err=%d\n", GetLastError()); return ret; } int WINAPI extSetDIBitsToDevice(HDC hdc, int XDest, int YDest, DWORD dwWidth, DWORD dwHeight, int XSrc, int YSrc, UINT uStartScan, UINT cScanLines, const VOID *lpvBits, const BITMAPINFO *lpbmi, UINT fuColorUse) { int ret; if(IsTraceDW){ OutTrace("SetDIBitsToDevice: hdc=%x dest=(%d,%d)-(%dx%d) src=(%d,%d) lines=(%d,%d) bits=%x ColorUse=%x(%s)\n", hdc, XDest, YDest, dwWidth, dwHeight, XSrc, YSrc, uStartScan, cScanLines, lpvBits, fuColorUse, ExplainDIBUsage(fuColorUse)); TraceBITMAPINFOHEADER("SetDIBitsToDevice", (BITMAPINFOHEADER *)&(lpbmi->bmiHeader)); } bGDIRecursionFlag = TRUE; // beware: it seems that SetDIBitsToDevice calls SetDIBits internally if(dxw.IsToRemap(hdc)){ HDC hTempDc; HBITMAP hbmPic; DWORD OrigWidth, OrigHeight; int OrigXDest, OrigYDest; OrigWidth=dwWidth; OrigHeight=dwHeight; OrigXDest=XDest; OrigYDest=YDest; switch(dxw.GDIEmulationMode){ case GDIMODE_SHAREDDC: sdc.GetPrimaryDC(hdc); ret=(*pSetDIBitsToDevice)(sdc.GetHdc(), XDest, YDest, dwWidth, dwHeight, XSrc, YSrc, uStartScan, cScanLines, lpvBits, lpbmi, fuColorUse); if(dxw.dwFlags8 & DUMPDEVCONTEXT) DumpHDC(sdc.GetHdc(), XDest, YDest, dwWidth, dwHeight); sdc.PutPrimaryDC(hdc, TRUE, XDest, YDest, dwWidth, dwHeight); bGDIRecursionFlag = FALSE; return ret; break; case GDIMODE_STRETCHED: // blitting to primary surface !!! dxw.MapClient(&XDest, &YDest, (int *)&dwWidth, (int *)&dwHeight); OutTraceDW("SetDIBitsToDevice: fixed dest=(%d,%d)-(%dx%d)\n", XDest, YDest, dwWidth, dwHeight); if(!(hTempDc=CreateCompatibleDC(hdc))) OutTraceE("CreateCompatibleDC: ERROR err=%d at=%d\n", GetLastError(), __LINE__); // tricky part: CreateCompatibleBitmap is needed to set the dc size, but it has to be performed // against hdc to set for color depth, then selected (through SelectObject) against the temporary // dc to assign the needed size and color space to the temporary dc. if(!(hbmPic=CreateCompatibleBitmap(hdc, OrigWidth, OrigHeight))) OutTraceE("CreateCompatibleBitmap: ERROR err=%d at=%d\n", GetLastError(), __LINE__); if(!(*pSelectObject)(hTempDc, hbmPic)) OutTraceE("SelectObject: ERROR err=%d at=%d\n", GetLastError(), __LINE__); if(!(ret=(*pSetDIBitsToDevice)(hTempDc, 0, 0, OrigWidth, OrigHeight, XSrc, YSrc, uStartScan, cScanLines, lpvBits, lpbmi, fuColorUse))) OutTraceE("SetDIBitsToDevice: ERROR err=%d at=%d\n", GetLastError(), __LINE__); bGDIRecursionFlag = FALSE; if(dxw.dwFlags8 & DUMPDEVCONTEXT) DumpHDC(hTempDc, 0, 0, OrigWidth, OrigHeight); // v2.02.94: set HALFTONE stretching. Fixes "Celtic Kings Rage of War" SetStretchBltMode(hdc,HALFTONE); if(!(ret=(*pGDIStretchBlt)(hdc, XDest, YDest, dwWidth, dwHeight, hTempDc, 0, 0, OrigWidth, OrigHeight, SRCCOPY))) OutTraceE("StretchBlt: ERROR err=%d at=%d\n", GetLastError(), __LINE__); if(!(DeleteObject(hbmPic))) // v2.02.32 - avoid resource leakage OutTraceE("DeleteObject: ERROR err=%d at=%d\n", GetLastError(), __LINE__); if(!(DeleteDC(hTempDc))) OutTraceE("DeleteDC: ERROR err=%d at=%d\n", GetLastError(), __LINE__); if(dxw.dwFlags8 & MARKGDI32) dxw.Mark(hdc, FALSE, RGB(255, 255, 255), XDest, YDest, dwWidth, dwHeight); return ret; break; case GDIMODE_EMULATED: int X, Y; X=XDest+dxw.VirtualOffsetX; Y=YDest+dxw.VirtualOffsetY; OutTraceDW("SetDIBitsToDevice: virtual pos=(%d,%d)+(%d+%d)=(%d,%d)\n", XDest, YDest, dxw.VirtualOffsetX, dxw.VirtualOffsetY, X, Y); ret=(*pSetDIBitsToDevice)(hdc, X, Y, dwWidth, dwHeight, XSrc, YSrc, uStartScan, cScanLines, lpvBits, lpbmi, fuColorUse); bGDIRecursionFlag = FALSE; if(dxw.dwFlags8 & DUMPDEVCONTEXT) DumpHDC(hdc, X, Y, dwWidth, dwHeight); if(!ret || (ret==GDI_ERROR)) OutTraceE("SetDIBitsToDevice: ERROR ret=%x err=%d\n", ret, GetLastError()); if(dxw.dwFlags8 & MARKGDI32) dxw.Mark(hdc, FALSE, RGB(255, 255, 255), XDest, YDest, dwWidth, dwHeight); return ret; default: if(dxw.dwFlags8 & DUMPDEVCONTEXT) DumpHDC(hdc, XDest, YDest, dwWidth, dwHeight); break; } } ret=(*pSetDIBitsToDevice)(hdc, XDest, YDest, dwWidth, dwHeight, XSrc, YSrc, uStartScan, cScanLines, lpvBits, lpbmi, fuColorUse); bGDIRecursionFlag = FALSE; if(!ret || (ret==GDI_ERROR)) OutTraceE("SetDIBitsToDevice: ERROR ret=%x err=%d\n", ret, GetLastError()); if(dxw.dwFlags8 & MARKGDI32) dxw.Mark(hdc, FALSE, RGB(255, 255, 255), XDest, YDest, dwWidth, dwHeight); return ret; } HBITMAP WINAPI extCreateCompatibleBitmap(HDC hdc, int nWidth, int nHeight) { HBITMAP ret; OutTraceDW("CreateCompatibleBitmap: hdc=%x size=(%d,%d)\n", hdc, nWidth, nHeight); if (dxw.IsToRemap(hdc)){ switch(dxw.GDIEmulationMode){ case GDIMODE_SHAREDDC: sdc.GetPrimaryDC(hdc); ret=(*pCreateCompatibleBitmap)(sdc.GetHdc(), nWidth, nHeight); sdc.PutPrimaryDC(hdc, FALSE); break; case GDIMODE_STRETCHED: dxw.MapClient(&nWidth, &nHeight); OutTraceDW("CreateCompatibleBitmap: fixed size=(%d,%d)\n", nWidth, nHeight); break; default: break; } } ret=(*pCreateCompatibleBitmap)(hdc, nWidth, nHeight); if(!ret) OutTraceE("CreateCompatibleBitmap: ERROR ret=%x err=%d\n", ret, GetLastError()); return ret; } COLORREF WINAPI extSetPixel(HDC hdc, int X, int Y, COLORREF crColor) { COLORREF ret; OutTraceDW("SetPixel: hdc=%x color=%x point=(%d,%d)\n", hdc, crColor, X, Y); if(dxw.IsToRemap(hdc)){ switch(dxw.GDIEmulationMode){ case GDIMODE_SHAREDDC: sdc.GetPrimaryDC(hdc); ret=(*pSetPixel)(sdc.GetHdc(), X, Y, crColor); sdc.PutPrimaryDC(hdc, TRUE, X, Y, 1, 1); // ???? return ret; // this returns a COLORREF type break; case GDIMODE_STRETCHED: dxw.MapClient(&X, &Y); OutTraceDW("SetPixel: fixed pos=(%d,%d)\n", X, Y); break; } } ret=(*pSetPixel)(hdc, X, Y, crColor); // both 0x00000000 and 0xFFFFFFFF are legitimate colors and therefore valid return codes... //if(ret==GDI_ERROR) OutTraceE("SetPixel: ERROR ret=%x err=%d\n", ret, GetLastError()); return ret; } BOOL WINAPI extSetPixelV(HDC hdc, int X, int Y, COLORREF crColor) { BOOL ret; OutTraceDW("SetPixelV: hdc=%x color=%x point=(%d,%d)\n", hdc, crColor, X, Y); if(dxw.IsToRemap(hdc)){ switch(dxw.GDIEmulationMode){ case GDIMODE_SHAREDDC: sdc.GetPrimaryDC(hdc); ret=(*pSetPixelV)(sdc.GetHdc(), X, Y, crColor); sdc.PutPrimaryDC(hdc, TRUE, X, Y, 1, 1); // ???? return ret; break; case GDIMODE_STRETCHED: dxw.MapClient(&X, &Y); OutTraceDW("SetPixelV: fixed pos=(%d,%d)\n", X, Y); break; } } ret=(*pSetPixelV)(hdc, X, Y, crColor); return ret; } BOOL WINAPI extEllipse(HDC hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect) { int ret; OutTraceDW("Ellipse: hdc=%x rect=(%d,%d)-(%d,%d)\n", hdc, nLeftRect, nTopRect, nRightRect, nBottomRect); if (dxw.IsToRemap(hdc)){ switch(dxw.GDIEmulationMode){ case GDIMODE_SHAREDDC: sdc.GetPrimaryDC(hdc); ret=(*pEllipse)(sdc.GetHdc(),nLeftRect, nTopRect, nRightRect, nBottomRect); sdc.PutPrimaryDC(hdc, TRUE, nLeftRect, nTopRect, nRightRect-nLeftRect, nBottomRect-nTopRect); return ret; break; case GDIMODE_STRETCHED: dxw.MapClient(&nLeftRect, &nTopRect, &nRightRect, &nBottomRect); OutTraceDW("Ellipse: fixed dest=(%d,%d)-(%d,%d)\n", nLeftRect, nTopRect, nRightRect, nBottomRect); break; } } ret=(*pEllipse)(hdc, nLeftRect, nTopRect, nRightRect, nBottomRect); if(!ret) OutTraceE("Ellipse: ERROR ret=%x err=%d\n", ret, GetLastError()); return ret; } BOOL WINAPI extPolygon(HDC hdc, const POINT *lpPoints, int cCount) { // LOGTOBEFIXED BOOL ret; if(IsTraceDDRAW){ int i; OutTrace("Polygon: hdc=%x cCount=%d pt=", hdc, cCount); for(i=0; ileft, lprc->top, lprc->right, lprc->bottom); if (dxw.IsFullScreen()){ dxw.MapClient((RECT *)lprc); OutTraceDW("CreateEllipticRgnIndirect: fixed rect=(%d,%d)-(%d,%d)\n", lprc->left, lprc->top, lprc->right, lprc->bottom); } ret=(*pCreateEllipticRgnIndirect)(lprc); if(!ret) OutTraceE("CreateEllipticRgnIndirect: ERROR ret=%x err=%d\n", ret, GetLastError()); return ret; } HRGN WINAPI extCreateRectRgn(int nLeftRect, int nTopRect, int nRightRect, int nBottomRect) { HRGN ret; OutTraceDW("CreateRectRgn: rect=(%d,%d)-(%d,%d)\n", nLeftRect, nTopRect, nRightRect, nBottomRect); if (dxw.IsFullScreen()){ dxw.MapClient(&nLeftRect, &nTopRect, &nRightRect, &nBottomRect); OutTraceDW("CreateRectRgn: fixed rect=(%d,%d)-(%d,%d)\n", nLeftRect, nTopRect, nRightRect, nBottomRect); } ret=(*pCreateRectRgn)(nLeftRect, nTopRect, nRightRect, nBottomRect); if(!ret) OutTraceE("CreateRectRgn: ERROR ret=%x err=%d\n", ret, GetLastError()); return ret; } HRGN WINAPI extCreateRectRgnIndirect(const RECT *lprc) { HRGN ret; RECT rc; OutTraceDW("CreateRectRgnIndirect: rect=(%d,%d)-(%d,%d)\n", lprc->left, lprc->top, lprc->right, lprc->bottom); // v2.04.05: copy the RECT, do not alter the values! rc = *lprc; if (dxw.IsFullScreen()){ dxw.MapClient(&rc); OutTraceDW("CreateRectRgnIndirect: fixed rect=(%d,%d)-(%d,%d)\n", rc.left, rc.top, rc.right, rc.bottom); } ret=(*pCreateRectRgnIndirect)(&rc); if(!ret) OutTraceE("CreateRectRgnIndirect: ERROR ret=%x err=%d\n", ret, GetLastError()); return ret; } BOOL WINAPI extSetRectRgn(HRGN hrgn, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect) { BOOL ret; OutTraceDW("SetRectRgn: hrgn=%x rect=(%d,%d)-(%d,%d)\n", hrgn, nLeftRect, nTopRect, nRightRect, nBottomRect); if (dxw.IsFullScreen()){ dxw.MapClient(&nLeftRect, &nTopRect, &nRightRect, &nBottomRect); OutTraceDW("SetRectRgn: fixed rect=(%d,%d)-(%d,%d)\n", nLeftRect, nTopRect, nRightRect, nBottomRect); } ret=(*pSetRectRgn)(hrgn, nLeftRect, nTopRect, nRightRect, nBottomRect); if(!ret) OutTraceE("SetRectRgn: ERROR ret=%x err=%d\n", ret, GetLastError()); return ret; } HRGN WINAPI extCreatePolygonRgn(const POINT *lpPoints, int cPoints, int fnPolyFillMode) { // LOGTOBEFIXED HRGN ret; if(IsTraceDDRAW){ int i; OutTrace("CreatePolygonRgn: PolyFillMode=%x cCount=%d pt=", fnPolyFillMode, cPoints); for(i=0; ix = dxw.VirtualOffsetX; lpPoint->y = dxw.VirtualOffsetY; } ret = TRUE; } else { ret=(*pSetViewportOrgEx)(hdc, X, Y, lpPoint); if(ret && lpPoint) { OutTraceDW("SetViewportOrgEx: previous ViewPort=(%d,%d)\n", lpPoint->x, lpPoint->y); dxw.UnmapClient(lpPoint); OutTraceDW("SetViewportOrgEx: fixed previous ViewPort=(%d,%d)\n", lpPoint->x, lpPoint->y); } } break; case GDIMODE_STRETCHED: dxw.MapClient(&X, &Y); OutTraceDW("SetViewportOrgEx: fixed pos=(%d,%d)\n", X, Y); ret=(*pSetViewportOrgEx)(hdc, X, Y, lpPoint); if(ret && lpPoint) { OutTraceDW("SetViewportOrgEx: previous ViewPort=(%d,%d)\n", lpPoint->x, lpPoint->y); dxw.UnmapClient(lpPoint); OutTraceDW("SetViewportOrgEx: fixed previous ViewPort=(%d,%d)\n", lpPoint->x, lpPoint->y); } break; case GDIMODE_SHAREDDC: sdc.GetPrimaryDC(hdc); ret=(*pSetViewportOrgEx)(sdc.GetHdc(), X, Y, lpPoint); sdc.PutPrimaryDC(hdc, FALSE); break; default: ret=(*pSetViewportOrgEx)(hdc, X, Y, lpPoint); break; } } else{ ret=(*pSetViewportOrgEx)(hdc, X, Y, lpPoint); } if(ret && lpPoint) OutTraceDW("SetViewportOrgEx: previous ViewPort=(%d,%d)\n", lpPoint->x, lpPoint->y); if(!ret) OutTraceE("SetViewportOrgEx: ERROR ret=%x err=%d\n", ret, GetLastError()); return ret; } BOOL WINAPI extSetViewportExtEx(HDC hdc, int X, int Y, LPSIZE lpSize) { BOOL ret; OutTraceDW("SetViewportExtEx: hdc=%x pos=(%d,%d)\n", hdc, X, Y); if(dxw.IsToRemap(hdc)){ switch(dxw.GDIEmulationMode){ case GDIMODE_EMULATED: if(dxw.IsVirtual(hdc)) { OutTraceDW("SetViewportExtEx: virtual hdc\n"); if(lpSize){ lpSize->cx = dxw.VirtualExtentX; lpSize->cy = dxw.VirtualExtentY; } dxw.VirtualExtentX = X; dxw.VirtualExtentY = Y; ret = TRUE; } else ret=(*pSetViewportExtEx)(hdc, X, Y, lpSize); break; case GDIMODE_SHAREDDC: sdc.GetPrimaryDC(hdc); ret=(*pSetViewportExtEx)(sdc.GetHdc(), X, Y, lpSize); sdc.PutPrimaryDC(hdc, FALSE); break; case GDIMODE_STRETCHED: dxw.MapClient(&X, &Y); OutTraceDW("SetViewportExtEx: fixed pos=(%d,%d)\n", X, Y); ret=(*pSetViewportExtEx)(hdc, X, Y, lpSize); if(ret && lpSize) { OutTraceDW("SetViewportExtEx: previous ViewPort=(%d,%d)\n", lpSize->cx, lpSize->cy); dxw.UnmapClient((LPPOINT)lpSize); OutTraceDW("SetViewportExtEx: fixed previous ViewPort=(%d,%d)\n", lpSize->cx, lpSize->cy); } break; default: ret=(*pSetViewportExtEx)(hdc, X, Y, lpSize); break; } } else{ ret=(*pSetViewportExtEx)(hdc, X, Y, lpSize); } if(ret && lpSize) OutTraceDW("SetViewportOrgEx: previous ViewPort=(%d,%d)\n", lpSize->cx, lpSize->cy); if(!ret) OutTraceE("SetViewportOrgEx: ERROR ret=%x err=%d\n", ret, GetLastError()); return ret; } BOOL WINAPI extGetViewportOrgEx(HDC hdc, LPPOINT lpPoint) { BOOL ret; OutTraceDW("GetViewportOrgEx: hdc=%x\n", hdc); if(dxw.IsVirtual(hdc)) { lpPoint->x = dxw.VirtualOffsetX; lpPoint->y = dxw.VirtualOffsetY; return TRUE; } ret=(*pGetViewportOrgEx)(hdc, lpPoint); if(ret) { OutTraceDW("GetViewportOrgEx: ViewPort=(%d,%d)\n", lpPoint->x, lpPoint->y); if (dxw.IsToRemap(hdc)){ dxw.UnmapClient(lpPoint); OutTraceDW("GetViewportOrgEx: fixed ViewPort=(%d,%d)\n", lpPoint->x, lpPoint->y); } } if(!ret) OutTraceE("GetViewportOrgEx: ERROR ret=%x err=%d\n", ret, GetLastError()); return ret; } BOOL WINAPI extGetViewportExtEx(HDC hdc, LPPOINT lpPoint) { BOOL ret; OutTraceDW("GetViewportExtEx: hdc=%x\n", hdc); if(dxw.IsVirtual(hdc)) { lpPoint->x = dxw.VirtualOffsetX; lpPoint->y = dxw.VirtualOffsetY; return TRUE; } ret=(*pGetViewportExtEx)(hdc, lpPoint); if(ret) { OutTraceDW("GetViewportExtEx: ViewPort=(%d,%d)\n", lpPoint->x, lpPoint->y); if (dxw.IsToRemap(hdc)){ dxw.UnmapClient(lpPoint); OutTraceDW("GetViewportOrgEx: fixed ViewPort=(%d,%d)\n", lpPoint->x, lpPoint->y); } } if(!ret) OutTraceE("GetViewportExtEx: ERROR ret=%x err=%d\n", ret, GetLastError()); return ret; } BOOL WINAPI extGetWindowOrgEx(HDC hdc, LPPOINT lpPoint) { BOOL ret; OutTraceDW("GetWindowOrgEx: hdc=%x\n", hdc); ret=(*pGetWindowOrgEx)(hdc, lpPoint); if(ret) { OutTraceDW("GetWindowOrgEx: ViewPort=(%d,%d)\n", lpPoint->x, lpPoint->y); if (dxw.IsToRemap(hdc)){ dxw.UnmapClient(lpPoint); OutTraceDW("GetWindowOrgEx: fixed ViewPort=(%d,%d)\n", lpPoint->x, lpPoint->y); } } if(!ret) OutTraceE("GetWindowOrgEx: ERROR ret=%x err=%d\n", ret, GetLastError()); return ret; } BOOL WINAPI extSetWindowOrgEx(HDC hdc, int X, int Y, LPPOINT lpPoint) { BOOL ret; OutTraceDW("SetWindowOrgEx: hdc=%x pos=(%d,%d)\n", hdc, X, Y); if (dxw.IsToRemap(hdc)){ dxw.MapClient(&X, &Y); OutTraceDW("SetWindowOrgEx: fixed pos=(%d,%d)\n", X, Y); } ret=(*pSetWindowOrgEx)(hdc, X, Y, lpPoint); if(ret && lpPoint) { OutTraceDW("SetWindowOrgEx: previous ViewPort=(%d,%d)\n", lpPoint->x, lpPoint->y); if (dxw.IsToRemap(hdc)){ dxw.UnmapClient(lpPoint); OutTraceDW("SetWindowOrgEx: fixed previous ViewPort=(%d,%d)\n", lpPoint->x, lpPoint->y); } } if(!ret) OutTraceE("SetWindowOrgEx: ERROR ret=%x err=%d\n", ret, GetLastError()); return ret; } BOOL WINAPI extSetWindowExtEx(HDC hdc, int X, int Y, LPPOINT lpPoint) { BOOL ret; OutTraceDW("SetWindowExtEx: hdc=%x pos=(%d,%d)\n", hdc, X, Y); if (dxw.IsToRemap(hdc)){ dxw.MapClient(&X, &Y); OutTraceDW("SetWindowExtEx: fixed pos=(%d,%d)\n", X, Y); } ret=(*pSetWindowExtEx)(hdc, X, Y, lpPoint); if(ret && lpPoint) { OutTraceDW("SetWindowExtEx: previous ViewPort=(%d,%d)\n", lpPoint->x, lpPoint->y); if (dxw.IsToRemap(hdc)){ dxw.UnmapClient(lpPoint); OutTraceDW("SetWindowExtEx: fixed previous ViewPort=(%d,%d)\n", lpPoint->x, lpPoint->y); } } if(!ret) OutTraceE("SetWindowExtEx: ERROR ret=%x err=%d\n", ret, GetLastError()); return ret; } BOOL WINAPI extGetCurrentPositionEx(HDC hdc, LPPOINT lpPoint) { BOOL ret; OutTraceDW("GetCurrentPositionEx: hdc=%x\n", hdc); ret=(*pGetCurrentPositionEx)(hdc, lpPoint); if(ret) { OutTraceDW("GetCurrentPositionEx: pos=(%d,%d)\n", lpPoint->x, lpPoint->y); if (dxw.IsToRemap(hdc)){ switch(dxw.GDIEmulationMode){ case GDIMODE_STRETCHED: dxw.UnmapClient(lpPoint); break; case GDIMODE_SHAREDDC: sdc.GetPrimaryDC(hdc); ret=(*pGetCurrentPositionEx)(sdc.GetHdc(), lpPoint); sdc.PutPrimaryDC(hdc, FALSE); return ret; break; case GDIMODE_EMULATED: default: break; } OutTraceDW("GetCurrentPositionEx: fixed pos=(%d,%d)\n", lpPoint->x, lpPoint->y); } } if(!ret) OutTraceE("GetCurrentPositionEx: ERROR ret=%x err=%d\n", ret, GetLastError()); return ret; } BOOL WINAPI extCreateScalableFontResourceA(DWORD fdwHidden, LPCTSTR lpszFontRes, LPCTSTR lpszFontFile, LPCTSTR lpszCurrentPath) { BOOL res; OutTraceDW("CreateScalableFontResource: hidden=%d FontRes=\"%s\" FontFile=\"%s\" CurrentPath=\"%s\"\n", fdwHidden, lpszFontRes, lpszFontFile, lpszCurrentPath); if(dxw.dwFlags3 & FONTBYPASS) return TRUE; res=(*pCreateScalableFontResourceA)(fdwHidden, lpszFontRes, lpszFontFile, lpszCurrentPath); if(!res) OutTraceE("CreateScalableFontResource: ERROR err=%d at=%d\n", GetLastError(), __LINE__); return res; } BOOL WINAPI extCreateScalableFontResourceW(DWORD fdwHidden, LPCWSTR lpszFontRes, LPCWSTR lpszFontFile, LPCWSTR lpszCurrentPath) { BOOL res; OutTraceDW("CreateScalableFontResource: hidden=%d FontRes=\"%ls\" FontFile=\"%ls\" CurrentPath=\"%ls\"\n", fdwHidden, lpszFontRes, lpszFontFile, lpszCurrentPath); if(dxw.dwFlags3 & FONTBYPASS) return TRUE; res=(*pCreateScalableFontResourceW)(fdwHidden, lpszFontRes, lpszFontFile, lpszCurrentPath); if(!res) OutTraceE("CreateScalableFontResource: ERROR err=%d at=%d\n", GetLastError(), __LINE__); return res; } int WINAPI extAddFontResourceA(LPCTSTR lpszFontFile) { BOOL res; OutTraceDW("AddFontResource: FontFile=\"%s\"\n", lpszFontFile); if(dxw.dwFlags3 & FONTBYPASS) { OutTraceDW("AddFontResource: SUPPRESS FontFile=\"%s\"\n", lpszFontFile); return TRUE; } res=(*pAddFontResourceA)(lpszFontFile); if(!res) OutTraceE("AddFontResource: ERROR err=%d at=%d\n", GetLastError(), __LINE__); return res; } int WINAPI extRemoveFontResourceA(LPCTSTR lpszFontFile) { BOOL res; OutTraceDW("RemoveFontResource: FontFile=\"%s\"\n", lpszFontFile); if(dxw.dwFlags3 & FONTBYPASS) { OutTraceDW("RemoveFontResource: SUPPRESS FontFile=\"%s\"\n", lpszFontFile); return TRUE; } res=(*pRemoveFontResourceA)(lpszFontFile); if(!res) OutTraceE("RemoveFontResource: ERROR err=%d at=%d\n", GetLastError(), __LINE__); return res; } int WINAPI extAddFontResourceW(LPCWSTR lpszFontFile) { BOOL res; OutTraceDW("AddFontResource: FontFile=\"%ls\"\n", lpszFontFile); if(dxw.dwFlags3 & FONTBYPASS) { OutTraceDW("AddFontResource: SUPPRESS FontFile=\"%ls\"\n", lpszFontFile); return TRUE; } res=(*pAddFontResourceW)(lpszFontFile); if(!res) OutTraceE("AddFontResource: ERROR err=%d at=%d\n", GetLastError(), __LINE__); return res; } int WINAPI extRemoveFontResourceW(LPCWSTR lpszFontFile) { BOOL res; OutTraceDW("RemoveFontResource: FontFile=\"%ls\"\n", lpszFontFile); if(dxw.dwFlags3 & FONTBYPASS) { OutTraceDW("RemoveFontResource: SUPPRESS FontFile=\"%ls\"\n", lpszFontFile); return TRUE; } res=(*pRemoveFontResourceW)(lpszFontFile); if(!res) OutTraceE("RemoveFontResource: ERROR err=%d at=%d\n", GetLastError(), __LINE__); return res; } int WINAPI extEnumFontsA(HDC hdc, LPCSTR lpFaceName, FONTENUMPROC lpFontFunc, LPARAM lParam) { int res; OutTraceDW("EnumFonts: hdc=%x facename=\"%s\" fontfunc=%x lparam=%x\n", hdc, lpFaceName, lpFontFunc, lParam); res = (*pEnumFontsA)(hdc, lpFaceName, lpFontFunc, lParam); OutTraceDW("EnumFonts: res=0x%x\n", res); return res; } //BEWARE: SetPixelFormat must be issued on the same hdc used by OpenGL wglCreateContext, otherwise // a failure err=2000 ERROR INVALID PIXEL FORMAT occurs!! // //Remarks: https://msdn.microsoft.com/en-us/library/ms537559(VS.85).aspx // // If hdc references a window, calling the SetPixelFormat function also changes the pixel format of the window. // Setting the pixel format of a window more than once can lead to significant complications for the Window // Manager and for multithread applications, so it is not allowed. An application can only set the pixel format // of a window one time. Once a window's pixel format is set, it cannot be changed. BOOL WINAPI extGDISetPixelFormat(HDC hdc, int iPixelFormat, const PIXELFORMATDESCRIPTOR *ppfd) { BOOL res; BOOL bRemappedDC = FALSE; static int iCounter = 0; static HDC hLastDC = 0; OutTraceDW("SetPixelFormat: hdc=%x PixelFormat=%d Flags=%x PixelType=%x(%s) ColorBits=%d RGBdepth=(%d,%d,%d) RGBshift=(%d,%d,%d)\n", hdc, iPixelFormat, ppfd->dwFlags, ppfd->iPixelType, ppfd->iPixelType?"PFD_TYPE_COLORINDEX":"PFD_TYPE_RGBA", ppfd->cColorBits, ppfd->cRedBits, ppfd->cGreenBits, ppfd->cBlueBits, ppfd->cRedShift, ppfd->cGreenShift, ppfd->cBlueShift); //if(dxw.dwFlags1 & EMULATESURFACE) { if(dxw.IsRealDesktop(WindowFromDC(hdc))){ HDC oldhdc = hdc; hdc=(*pGDIGetDC)(dxw.GethWnd()); // potential leakage bRemappedDC = TRUE; OutTraceDW("SetPixelFormat: remapped desktop hdc=%x->%x hWnd=%x\n", oldhdc, hdc, dxw.GethWnd()); } if(iCounter && (hdc == hLastDC)) res = TRUE; // avoid calling SetPixelFormat more than once on same hdc else { res=(*pGDISetPixelFormat)(hdc, iPixelFormat, ppfd); iCounter++; hLastDC = hdc; } if(bRemappedDC) (*pGDIReleaseDC)(dxw.GethWnd(), hdc); // fixed DC leakage dxw.ActualPixelFormat.dwRGBBitCount = ppfd->cColorBits; if(!res) OutTraceE("SetPixelFormat: ERROR err=%d at=%d\n", GetLastError(), __LINE__); return res; } int WINAPI extGDIGetPixelFormat(HDC hdc) { int res; BOOL bRemappedDC = FALSE; OutTraceDW("GetPixelFormat: hdc=%x\n", hdc); if(dxw.IsDesktop(WindowFromDC(hdc))){ HDC oldhdc = hdc; hdc=(*pGDIGetDC)(dxw.GethWnd()); // potential DC leakage bRemappedDC = TRUE; OutTraceDW("GetPixelFormat: remapped desktop hdc=%x->%x hWnd=%x\n", oldhdc, hdc, dxw.GethWnd()); } res=(*pGDIGetPixelFormat)(hdc); if(!res) OutTraceE("GetPixelFormat: ERROR err=%d at=%d\n", GetLastError(), __LINE__); else OutTraceDW("GetPixelFormat: res=%d\n", res); if(bRemappedDC)(*pGDIReleaseDC)(dxw.GethWnd(), hdc); // fixed DC leakage return res; } static char *ExplainPFFlags(DWORD c) { static char eb[256]; unsigned int l; strcpy(eb,"PFD_"); if (c & PFD_DOUBLEBUFFER) strcat(eb, "DOUBLEBUFFER+"); if (c & PFD_STEREO) strcat(eb, "STEREO+"); if (c & PFD_DRAW_TO_WINDOW) strcat(eb, "DRAW_TO_WINDOW+"); if (c & PFD_DRAW_TO_BITMAP) strcat(eb, "DRAW_TO_BITMAP+"); if (c & PFD_SUPPORT_GDI) strcat(eb, "SUPPORT_GDI+"); if (c & PFD_SUPPORT_OPENGL) strcat(eb, "SUPPORT_OPENGL+"); if (c & PFD_GENERIC_FORMAT) strcat(eb, "GENERIC_FORMAT+"); if (c & PFD_NEED_PALETTE) strcat(eb, "NEED_PALETTE+"); if (c & PFD_NEED_SYSTEM_PALETTE) strcat(eb, "NEED_SYSTEM_PALETTE+"); if (c & PFD_SWAP_EXCHANGE) strcat(eb, "SWAP_EXCHANGE+"); if (c & PFD_SWAP_COPY) strcat(eb, "SWAP_COPY+"); if (c & PFD_SWAP_LAYER_BUFFERS) strcat(eb, "SWAP_LAYER_BUFFERS+"); if (c & PFD_GENERIC_ACCELERATED) strcat(eb, "GENERIC_ACCELERATED+"); if (c & PFD_SUPPORT_DIRECTDRAW) strcat(eb, "SUPPORT_DIRECTDRAW+"); if (c & PFD_DIRECT3D_ACCELERATED) strcat(eb, "DIRECT3D_ACCELERATED+"); if (c & PFD_SUPPORT_COMPOSITION) strcat(eb, "SUPPORT_COMPOSITION+"); if (c & PFD_DEPTH_DONTCARE) strcat(eb, "DEPTH_DONTCARE+"); if (c & PFD_DOUBLEBUFFER_DONTCARE) strcat(eb, "DOUBLEBUFFER_DONTCARE+"); if (c & PFD_STEREO_DONTCARE) strcat(eb, "STEREO_DONTCARE+"); l=strlen(eb); if (l>strlen("PFD_")) eb[l-1]=0; // delete last '+' if any else eb[0]=0; return(eb); } int WINAPI extChoosePixelFormat(HDC hdc, const PIXELFORMATDESCRIPTOR *ppfd) { int res; OutTraceDW("ChoosePixelFormat: hdc=%x Flags=%x(%s) PixelType=%x(%s) ColorBits=%d RGBdepth=(%d,%d,%d) RGBshift=(%d,%d,%d)\n", hdc, ppfd->dwFlags, ExplainPFFlags(ppfd->dwFlags), ppfd->iPixelType, ppfd->iPixelType?"PFD_TYPE_COLORINDEX":"PFD_TYPE_RGBA", ppfd->cColorBits, ppfd->cRedBits, ppfd->cGreenBits, ppfd->cBlueBits, ppfd->cRedShift, ppfd->cGreenShift, ppfd->cBlueShift); if(0){ // if necessary, add a flag here ..... PIXELFORMATDESCRIPTOR myppfd; memcpy(&myppfd, ppfd, sizeof(PIXELFORMATDESCRIPTOR)); myppfd.nSize = sizeof(PIXELFORMATDESCRIPTOR); myppfd.dwFlags |= PFD_DRAW_TO_WINDOW; res=(*pChoosePixelFormat)(hdc, &myppfd); } else { res=(*pChoosePixelFormat)(hdc, ppfd); } if(!res) OutTraceE("ChoosePixelFormat: ERROR err=%d at=%d\n", GetLastError(), __LINE__); else OutTraceDW("ChoosePixelFormat: res=%d\n", res); return res; } int WINAPI extDescribePixelFormat(HDC hdc, int iPixelFormat, UINT nBytes, LPPIXELFORMATDESCRIPTOR ppfd) { int res; OutTraceDW("DescribePixelFormat: hdc=%x PixelFormat=%d Bytes=%d\n", hdc, iPixelFormat, nBytes); res=(*pDescribePixelFormat)(hdc, iPixelFormat, nBytes, ppfd); if(!res){ OutTraceE("DescribePixelFormat: ERROR err=%d at=%d\n", GetLastError(), __LINE__); return res; } if (ppfd && nBytes==sizeof(PIXELFORMATDESCRIPTOR)){ OutTraceDW("DescribePixelFormat: res=%d Flags=%x(%s) PixelType=%x(%s) ColorBits=%d RGBdepth=(%d,%d,%d) RGBshift=(%d,%d,%d)\n", res, ppfd->dwFlags, ExplainPFFlags(ppfd->dwFlags), ppfd->iPixelType, ppfd->iPixelType?"PFD_TYPE_COLORINDEX":"PFD_TYPE_RGBA", ppfd->cColorBits, ppfd->cRedBits, ppfd->cGreenBits, ppfd->cBlueBits, ppfd->cRedShift, ppfd->cGreenShift, ppfd->cBlueShift); if((hdc==0) && dxw.IsFullScreen() && (ppfd->iPixelType==PFD_TYPE_RGBA)){ OutTraceDW("DescribePixelFormat: emulating virtual desktop pixelformat bpp=%d\n", dxw.VirtualPixelFormat.dwRGBBitCount); switch(dxw.VirtualPixelFormat.dwRGBBitCount){ case 8: ppfd->cColorBits = 8; OutTrace("colorbits=%d to be fixed!\n", ppfd->cColorBits); break; case 16: ppfd->cColorBits = 16; switch(dxw.VirtualPixelFormat.dwGBitMask){ case 0x0007E0: // RGB565 ppfd->cColorBits=16; ppfd->cRedBits=5; ppfd->cRedShift=0; ppfd->cGreenBits=6; ppfd->cGreenShift=5; ppfd->cBlueBits=5; ppfd->cBlueShift=11; ppfd->cAlphaBits=0; ppfd->cAlphaShift=0; break; case 0x0003E0: // RGB555 ppfd->cColorBits=15; ppfd->cRedBits=5; ppfd->cRedShift=0; ppfd->cGreenBits=5; ppfd->cGreenShift=5; ppfd->cBlueBits=5; ppfd->cBlueShift=10; ppfd->cAlphaBits=1; ppfd->cAlphaShift=15; break; } break; case 24: if (ppfd->cColorBits != 24) OutTrace("colorbits=%d to be fixed!\n", ppfd->cColorBits); break; case 32: if (ppfd->cColorBits != 24) OutTrace("colorbits=%d to be fixed!\n", ppfd->cColorBits); break; } } } else { OutTraceDW("DescribePixelFormat: res=%d\n", res); } return res; } DWORD WINAPI extGetObjectType(HGDIOBJ h) { DWORD res; res=(*pGetObjectType)(h); OutTraceDW("GetObjectType: h=%x type=%x\n", h, res); if(h==dxw.VirtualHDC) { OutTraceDW("GetObjectType: REMAP h=%x type=%x->%x\n", h, res, OBJ_DC); res=OBJ_DC; } return res; } extern BOOL gFixed; BOOL WINAPI extExtTextOutA(HDC hdc, int X, int Y, UINT fuOptions, const RECT *lprc, LPCSTR lpString, UINT cbCount, const INT *lpDx) { RECT rc; BOOL ret; if(IsTraceDW){ char sRect[81]; if(lprc) sprintf(sRect, "(%d,%d)-(%d,%d)", lprc->left, lprc->top, lprc->right, lprc->bottom); else strcpy(sRect, "NULL"); OutTrace("ExtTextOutA: hdc=%x pos=(%d,%d) String=\"%s\" rect=%s\n", hdc, X, Y, lpString, sRect); } if (dxw.IsToRemap(hdc) && !gFixed){ switch(dxw.GDIEmulationMode){ case GDIMODE_SHAREDDC: sdc.GetPrimaryDC(hdc); ret=(*pExtTextOutA)(sdc.GetHdc(), X, Y, fuOptions, lprc, lpString, cbCount, lpDx); if(lprc){ rc = *lprc; sdc.PutPrimaryDC(hdc, TRUE, rc.left, rc.top, rc.right-rc.left, rc.bottom-rc.top); } else sdc.PutPrimaryDC(hdc, TRUE); return ret; break; case GDIMODE_STRETCHED: dxw.MapClient(&X, &Y); if(lprc) { rc = *lprc; dxw.MapClient(&rc); } OutTraceDW("ExtTextOutA: fixed pos=(%d,%d)\n", X, Y); break; } } if(lprc) return (*pExtTextOutA)(hdc, X, Y, fuOptions, &rc, lpString, cbCount, lpDx); else return (*pExtTextOutA)(hdc, X, Y, fuOptions, NULL, lpString, cbCount, lpDx); } BOOL WINAPI extExtTextOutW(HDC hdc, int X, int Y, UINT fuOptions, const RECT *lprc, LPCWSTR lpString, UINT cbCount, const INT *lpDx) { RECT rc; BOOL ret; if(IsTraceDW){ char sRect[81]; if(lprc) sprintf(sRect, "(%d,%d)-(%d,%d)", lprc->left, lprc->top, lprc->right, lprc->bottom); else strcpy(sRect, "NULL"); OutTrace("ExtTextOutW: hdc=%x pos=(%d,%d) String=\"%ls\" rect=%s\n", hdc, X, Y, lpString, sRect); } if (dxw.IsToRemap(hdc) && !gFixed){ switch(dxw.GDIEmulationMode){ case GDIMODE_SHAREDDC: sdc.GetPrimaryDC(hdc); ret=(*pExtTextOutW)(sdc.GetHdc(), X, Y, fuOptions, lprc, lpString, cbCount, lpDx); if(lprc){ rc = *lprc; sdc.PutPrimaryDC(hdc, TRUE, rc.left, rc.top, rc.right-rc.left, rc.bottom-rc.top); } else sdc.PutPrimaryDC(hdc, TRUE); return ret; break; case GDIMODE_STRETCHED: dxw.MapClient(&X, &Y); if(lprc) { rc = *lprc; dxw.MapClient(&rc); } OutTraceDW("ExtTextOutW: fixed pos=(%d,%d)\n", X, Y); break; } } if(lprc) return (*pExtTextOutW)(hdc, X, Y, fuOptions, &rc, lpString, cbCount, lpDx); else return (*pExtTextOutW)(hdc, X, Y, fuOptions, NULL, lpString, cbCount, lpDx); } #ifdef TRACEPALETTE BOOL WINAPI extResizePalette(HPALETTE hpal, UINT nEntries) { OutTrace("ResizePalette: hpal=%x nEntries=%d\n", hpal, nEntries); return (*pResizePalette)(hpal, nEntries); } #endif #if 0 COLORREF WINAPI extSetBkColor(HDC hdc, COLORREF crColor) { OutTrace("SetBkColor: hdc=%x color=%x\n", hdc, crColor); if(dxw.Windowize && dxw.IsRealDesktop(WindowFromDC(hdc))) { OutTrace("Remap desktop hdc=%x->%x\n", hdc, GetDC(dxw.GethWnd())); hdc=GetDC(dxw.GethWnd()); } return (*pSetBkColor)(hdc, crColor); } int WINAPI extSetBkMode(HDC hdc, int iBkMode) { OutTrace("SetBkMode: hdc=%x bkmode=%x\n", hdc, iBkMode); if(dxw.Windowize && dxw.IsRealDesktop(WindowFromDC(hdc))) { OutTrace("Remap desktop hdc=%x->%x\n", hdc, GetDC(dxw.GethWnd())); hdc=GetDC(dxw.GethWnd()); } return (*pSetBkMode)(hdc, iBkMode); } COLORREF WINAPI extSetTextColor(HDC hdc, COLORREF crColor) { OutTrace("SetTextColor: hdc=%x color=%x\n", hdc, crColor); if(dxw.Windowize && dxw.IsRealDesktop(WindowFromDC(hdc))) { OutTrace("Remap desktop hdc=%x->%x\n", hdc, GetDC(dxw.GethWnd())); hdc=GetDC(dxw.GethWnd()); } return (*pSetTextColor)(hdc, crColor); } // unhooked, since quite surprisingly all rectangles showed properly scaled already in RollerCoaster Tycoon !! DWORD WINAPI extGetRegionData(HRGN hRgn, DWORD dwCount, LPRGNDATA lpRgnData) { DWORD ret; RECT *data; ret=(*pGetRegionData)(hRgn, dwCount, lpRgnData); if(IsDebug){ OutTrace("GetRegionData: hRgn=%x count=%d RgnData=%x ret=%d\n", hRgn, dwCount, lpRgnData, ret); if(lpRgnData && dwCount){ OutTrace("GetRegionData: size=%d type=%x(%s) count=%d size=%d rect=(%d,%d)-(%d,%d)\n", lpRgnData->rdh.dwSize, lpRgnData->rdh.iType, (lpRgnData->rdh.iType==RDH_RECTANGLES ? "RDH_RECTANGLES" : "unknown"), lpRgnData->rdh.nCount, lpRgnData->rdh.nRgnSize, lpRgnData->rdh.rcBound.left, lpRgnData->rdh.rcBound.top, lpRgnData->rdh.rcBound.right, lpRgnData->rdh.rcBound.bottom); data=(RECT *)lpRgnData->Buffer; for(DWORD i=0; irdh.nCount; i++) OutTrace("GetRegionData: item=%i rect=(%d,%d)-(%d,%d)\n", i, data[i].left, data[i].top, data[i].right, data[i].bottom); } } if(dxw.IsFullScreen() && lpRgnData && dwCount){ dxw.UnmapClient(&(lpRgnData->rdh.rcBound)); data=(RECT *)lpRgnData->Buffer; for(DWORD i=0; irdh.nCount; i++) dxw.UnmapClient(&(data[i])); if(IsDebug){ OutTrace("GetRegionData: FIXED rect=(%d,%d)-(%d,%d)\n", lpRgnData->rdh.rcBound.left, lpRgnData->rdh.rcBound.top, lpRgnData->rdh.rcBound.right, lpRgnData->rdh.rcBound.bottom); data=(RECT *)lpRgnData->Buffer; for(DWORD i=0; irdh.nCount; i++) OutTrace("GetRegionData: FIXED item=%i rect=(%d,%d)-(%d,%d)\n", i, data[i].left, data[i].top, data[i].right, data[i].bottom); } } return ret; } #endif int WINAPI extOffsetRgn(HRGN hrgn, int nXOffset, int nYOffset) { OutTraceDW("OffsetRgn(hrgn=%x nXOffset=%d nYOffset=%d\n", hrgn, nXOffset, nYOffset); if(dxw.IsFullScreen()){ switch(dxw.GDIEmulationMode){ case GDIMODE_STRETCHED: dxw.MapClient(&nXOffset, &nYOffset); OutTraceDW("OffsetRgn: fixed STRETCHED offset=(%d,%d)\n", nXOffset, nYOffset); break; default: break; } } return (*pOffsetRgn)(hrgn, nXOffset, nYOffset); } COLORREF WINAPI extGetPixel(HDC hdc, int nXPos, int nYPos) { COLORREF ret; OutTraceDW("GetPixel: hdc=%x\n", hdc); if(dxw.IsToRemap(hdc)) { switch(dxw.GDIEmulationMode){ case GDIMODE_SHAREDDC: sdc.GetPrimaryDC(hdc); ret=(*pGetPixel)(sdc.GetHdc(), nXPos, nYPos); sdc.PutPrimaryDC(hdc, FALSE); return ret; break; default: // to do ..... break; } } ret=(*pGetPixel)(hdc, nXPos, nYPos); if(ret==CLR_INVALID) { OutTraceE("GetPixel ERROR: err=%d\n", GetLastError()); } else { OutTraceDW("GetPixel: color=0x%x\n", ret); } return ret;} BOOL WINAPI extPlgBlt(HDC hdcDest, const POINT *lpPoint, HDC hdcSrc, int nXSrc, int nYSrc, int nWidth, int nHeight, HBITMAP hbmMask, int xMask, int yMask) { MessageBox(0, "PlgBlt", "DxWnd", MB_OK); return (COLORREF)0; } BOOL WINAPI extChord(HDC hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect, int nXRadial1, int nYRadial1, int nXRadial2, int nYRadial2) { MessageBox(0, "Chord", "DxWnd", MB_OK); return (COLORREF)0; } BOOL WINAPI extPolyTextOutA(HDC hdc, const POLYTEXTA *pptxt, int cStrings) { MessageBox(0, "PolyTextOutA", "DxWnd", MB_OK); return TRUE; } BOOL WINAPI extPolyTextOutW(HDC hdc, const POLYTEXTW *pptxt, int cStrings) { MessageBox(0, "PolyTextOutW", "DxWnd", MB_OK); return TRUE; } HBITMAP WINAPI extCreateDIBitmap(HDC hdc, BITMAPINFOHEADER *lpbmih, DWORD fdwInit, const VOID *lpbInit, const BITMAPINFO *lpbmi, UINT fuUsage) { HBITMAP ret; if(IsTraceDW){ OutTrace("CreateDIBitmap: hdc=%x init=%x%s data=%x usage=%x(%s)\n", hdc, fdwInit, fdwInit==CBM_INIT?"(CBM_INIT)":"", lpbInit, fuUsage, ExplainDIBUsage(fuUsage)); if(fdwInit==CBM_INIT) TraceBITMAPINFOHEADER("CreateDIBitmap(lpbmih)", lpbmih); TraceBITMAPINFOHEADER("CreateDIBitmap(lpbmi)", (BITMAPINFOHEADER *)&(lpbmi->bmiHeader)); } if(dxw.IsToRemap(hdc)) { switch(dxw.GDIEmulationMode){ case GDIMODE_SHAREDDC: sdc.GetPrimaryDC(hdc); ret=(*pCreateDIBitmap)(sdc.GetHdc(), lpbmih, fdwInit, lpbInit, lpbmi, fuUsage); if(!ret) OutTraceE("CreateDIBitmap ERROR: err=%d\n", GetLastError()); sdc.PutPrimaryDC(hdc, FALSE); return ret; break; default: break; } } ret = (*pCreateDIBitmap)(hdc, lpbmih, fdwInit, lpbInit, lpbmi, fuUsage); if(!ret) OutTraceE("CreateDIBitmap ERROR: err=%d\n", GetLastError()); return ret; } HBITMAP WINAPI extCreateDIBSection(HDC hdc, const BITMAPINFO *pbmi, UINT iUsage, VOID **ppvBits, HANDLE hSection, DWORD dwOffset) { HBITMAP ret; OutTraceDW("CreateDIBSection: hdc=%x bmi={%s} usage=%s hsect=%x offset=%x\n", hdc, sBMIDump((BITMAPINFO *)pbmi), ExplainDIBUsage(iUsage), hSection, dwOffset); if(dxw.IsToRemap(hdc)) { switch(dxw.GDIEmulationMode){ case GDIMODE_SHAREDDC: sdc.GetPrimaryDC(hdc); ret=(*pCreateDIBSection)(sdc.GetHdc(), pbmi, iUsage, ppvBits, hSection, dwOffset); sdc.PutPrimaryDC(hdc, FALSE); return ret; break; default: break; } } ret=(*pCreateDIBSection)(hdc, pbmi, iUsage, ppvBits, hSection, dwOffset); if(!ret) { OutTraceE("CreateDIBSection ERROR: err=%d\n", GetLastError()); } else { OutTraceDW("CreateDIBSection: ret=%x\n", ret); // beware: it is worth dumping the DIB section only when hSection is not NULL // which means the bitmap is connected to a shared memory file if((dxw.dwFlags8 & DUMPDIBSECTION) && hSection) DumpDibSection(pbmi, iUsage, *ppvBits); } return ret; } HBITMAP WINAPI extCreateDiscardableBitmap(HDC hdc, int nWidth, int nHeight) { HBITMAP ret; OutTraceDW("CreateDiscardableBitmap: hdc=%x size=(%dx%d)\n", hdc, nWidth, nHeight); if(dxw.IsToRemap(hdc)) { switch(dxw.GDIEmulationMode){ case GDIMODE_SHAREDDC: sdc.GetPrimaryDC(hdc); ret=(*pCreateDiscardableBitmap)(sdc.GetHdc(), nWidth, nHeight); sdc.PutPrimaryDC(hdc, FALSE); return ret; break; default: break; } } ret=(*pCreateDiscardableBitmap)(hdc, nWidth, nHeight); if(!ret) OutTraceE("CreateDiscardableBitmap ERROR: err=%d\n", GetLastError()); return ret; } BOOL WINAPI extExtFloodFill(HDC hdc, int nXStart, int nYStart, COLORREF crColor, UINT fuFillType) { BOOL ret; OutTraceDW("ExtFloodFill: hdc=%x pos=(%d,%d)\n", hdc, nXStart, nYStart); if(dxw.IsToRemap(hdc)) { switch(dxw.GDIEmulationMode){ case GDIMODE_SHAREDDC: sdc.GetPrimaryDC(hdc); ret=(*pExtFloodFill)(sdc.GetHdc(), nXStart, nYStart, crColor, fuFillType); sdc.PutPrimaryDC(hdc, TRUE); return ret; break; default: break; } } ret=(*pExtFloodFill)(hdc, nXStart, nYStart, crColor, fuFillType); if(!ret) OutTraceE("ExtFloodFill ERROR: err=%d\n", GetLastError()); return ret; } BOOL WINAPI extGdiAlphaBlend(HDC hdcDest, int xoriginDest, int yoriginDest, int wDest, int hDest, HDC hdcSrc, int xoriginSrc, int yoriginSrc, int wSrc, int hSrc, BLENDFUNCTION ftn) { BOOL ret; int Flux; BOOL IsToScreen, IsFromScreen; BOOL IsDCLeakageSrc = FALSE; BOOL IsDCLeakageDest = FALSE; // v2.04.05: call found in Rhem during savegame load OutTraceDW("GdiAlphaBlend: dest {hdc=%x pos=(%d,%d) size=(%dx%d)} source {hdc=%x pos=(%d,%d) size=(%dx%d)} ftn=%x\n", hdcDest, xoriginDest, yoriginDest, wDest, hDest, hdcSrc, xoriginSrc, yoriginSrc, wSrc, hSrc, ftn); if(hdcDest == NULL){ hdcDest = (*pGDIGetDC)(dxw.GethWnd()); OutTraceB("GdiAlphaBlend: DEBUG hdc dest=NULL->%x\n", hdcDest); IsDCLeakageDest = TRUE; } if(hdcSrc == NULL){ hdcSrc = (*pGDIGetDC)(dxw.GethWnd()); OutTraceB("GdiAlphaBlend: DEBUG hdc src=NULL->%x\n", hdcSrc); IsDCLeakageSrc = TRUE; } IsToScreen=(OBJ_DC == (*pGetObjectType)(hdcDest)); IsFromScreen=(OBJ_DC == (*pGetObjectType)(hdcSrc)); Flux = (IsToScreen ? 1 : 0) + (IsFromScreen ? 2 : 0); if (IsToScreen && (dxw.dwFlags3 & NOGDIBLT)) return TRUE; //_Warn("GdiAlphaBlend"); switch(dxw.GDIEmulationMode){ case GDIMODE_SHAREDDC: switch(Flux){ case 0: // memory to memory ret=(*pGdiAlphaBlend)(hdcSrc, xoriginDest, yoriginDest, wDest, hDest, hdcSrc, xoriginSrc, yoriginSrc, wSrc, hSrc, ftn); break; case 1: // memory to screen case 3: // screen to screen sdc.GetPrimaryDC(hdcDest); ret=(*pGdiAlphaBlend)(sdc.GetHdc(), xoriginDest, yoriginDest, wDest, hDest, hdcSrc, xoriginSrc, yoriginSrc, wSrc, hSrc, ftn); sdc.PutPrimaryDC(hdcDest, TRUE, xoriginDest, yoriginDest, wDest, hDest); break; case 2: // screen to memory using virtual screen sdc.GetPrimaryDC(hdcSrc); ret=(*pGdiAlphaBlend)(hdcDest, xoriginDest, yoriginDest, wDest, hDest, sdc.GetHdc(), xoriginSrc, yoriginSrc, wSrc, hSrc, ftn); sdc.PutPrimaryDC(hdcSrc, FALSE, xoriginSrc, yoriginSrc, wSrc, hSrc); break; } break; case GDIMODE_STRETCHED: switch(Flux){ case 1: // memory to screen dxw.MapClient(&xoriginDest, &yoriginDest, &wDest, &hDest); break; case 2: // screen to memory dxw.MapClient(&xoriginSrc, &yoriginSrc, &wSrc, &hSrc); break; default: break; } // fallthrough .... case GDIMODE_EMULATED: default: ret=(*pGdiAlphaBlend)(hdcDest, xoriginDest, yoriginDest, wDest, hDest, hdcSrc, xoriginSrc, yoriginSrc, wSrc, hSrc, ftn); break; } if(IsDCLeakageSrc) (*pGDIReleaseDC)(dxw.GethWnd(), hdcSrc); if(IsDCLeakageDest) (*pGDIReleaseDC)(dxw.GethWnd(), hdcDest); if(ret && IsToScreen) dxw.ShowOverlay(hdcDest); if(!ret) OutTraceE("GdiAlphaBlend ERROR: err=%d\n", GetLastError()); return ret; } static char *sGradientMode(ULONG mode) { char *s; switch(mode){ case GRADIENT_FILL_RECT_H: s="RECT_H"; break; case GRADIENT_FILL_RECT_V: s="RECT_V"; break; case GRADIENT_FILL_TRIANGLE: s="TRIANGLE"; break; default: s="???"; break; } return s; } BOOL WINAPI extGdiGradientFill(HDC hdc, PTRIVERTEX pVertex, ULONG nVertex, PVOID pMesh, ULONG nMesh, ULONG ulMode) { // v2.04.06.fx2: found in RHEM when DirectX emulation is off (?). // temporary version - doesn't scale nor return error BOOL ret; OutTraceDW("GDI.GdiGradientFill: HDC=%x nVertex=%d nMesh=%d mode=%x(%s)\n", hdc, nVertex, nMesh, ulMode, sGradientMode(ulMode)); ret = (*pGdiGradientFill)(hdc, pVertex, nVertex, pMesh, nMesh, ulMode); if(!ret) OutTraceE("GDI.GdiGradientFill ERROR: err=%d\n", GetLastError()); return TRUE; } BOOL WINAPI extGdiTransparentBlt(HDC hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, HDC hdcSrc, int nXSrc, int nYSrc, int nWSrc, int nHSrc, UINT crTransparent) { BOOL res; BOOL IsToScreen; BOOL IsFromScreen; BOOL IsDCLeakageSrc = FALSE; BOOL IsDCLeakageDest = FALSE; int Flux; OutTraceDW("GDI.GdiTransparentBlt: HDC=%x nXDest=%d nYDest=%d nWidth=%d nHeight=%d hdcSrc=%x nXSrc=%d nYSrc=%d nWSrc=%d nHSrc=%d transp=%x\n", hdcDest, nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, nWSrc, nHSrc, crTransparent); OutTraceB("GDI.GdiTransparentBlt: DEBUG FullScreen=%x target hdctype=%x(%s) hwnd=%x\n", dxw.IsFullScreen(), (*pGetObjectType)(hdcDest), ExplainDCType((*pGetObjectType)(hdcDest)), WindowFromDC(hdcDest)); if(dxw.GDIEmulationMode == GDIMODE_EMULATED){ if (hdcDest==dxw.RealHDC) hdcDest=dxw.VirtualHDC; OutTraceB("GDI.GdiTransparentBlt: DEBUG emulated hdc dest=%x->%x\n", dxw.RealHDC, hdcDest); } if(hdcDest == NULL){ // happens in Reah, hdc is NULL despite the fact that BeginPaint returns a valid DC. Too bad, we recover here ... hdcDest = (*pGDIGetDC)(dxw.GethWnd()); OutTraceB("GDI.GdiTransparentBlt: DEBUG hdc dest=NULL->%x\n", hdcDest); IsDCLeakageDest = TRUE; } if(hdcSrc == NULL){ hdcSrc = (*pGDIGetDC)(dxw.GethWnd()); OutTraceB("GDI.GdiTransparentBlt: DEBUG hdc src=NULL->%x\n", hdcSrc); IsDCLeakageSrc = TRUE; } IsToScreen=(OBJ_DC == (*pGetObjectType)(hdcDest)); IsFromScreen=(OBJ_DC == (*pGetObjectType)(hdcSrc)); Flux = (IsToScreen ? 1 : 0) + (IsFromScreen ? 2 : 0); if (IsToScreen && (dxw.dwFlags3 & NOGDIBLT)) return TRUE; if(dxw.IsToRemap(hdcDest) && (hdcDest != hdcSrc)){ switch(dxw.GDIEmulationMode){ case GDIMODE_SHAREDDC: switch(Flux){ case 0: // memory to memory res=(*pGdiTransparentBlt)(hdcDest, nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, nWSrc, nHSrc, crTransparent); break; case 1: // memory to screen case 3: // screen to screen sdc.GetPrimaryDC(hdcDest); res=(*pGdiTransparentBlt)(sdc.GetHdc(), nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, nWSrc, nHSrc, crTransparent); sdc.PutPrimaryDC(hdcDest, TRUE, nXDest, nYDest, nWidth, nHeight); break; case 2: // screen to memory using virtual screen sdc.GetPrimaryDC(hdcSrc); res=(*pGdiTransparentBlt)(hdcDest, nXDest, nYDest, nWidth, nHeight, sdc.GetHdc(), nXSrc, nYSrc, nWSrc, nHSrc, crTransparent); sdc.PutPrimaryDC(hdcSrc, FALSE, nXSrc, nYSrc, nWSrc, nHSrc); break; } break; case GDIMODE_STRETCHED: { int nWDest, nHDest; nWDest= nWidth; nHDest= nHeight; switch(Flux){ case 1: // memory to screen dxw.MapClient(&nXDest, &nYDest, &nWDest, &nHDest); break; case 2: // screen to memory dxw.MapClient(&nXSrc, &nYSrc, &nWidth, &nHeight); break; default: break; } res=(*pGdiTransparentBlt)(hdcDest, nXDest, nYDest, nWDest, nHDest, hdcSrc, nXSrc, nYSrc, nWSrc, nHSrc, crTransparent); OutTraceB("GDI.GdiTransparentBlt: DEBUG DC dest=(%d,%d) size=(%d,%d)\n", nXDest, nYDest, nWDest, nHDest); } break; case GDIMODE_EMULATED: default: res=(*pGdiTransparentBlt)(hdcDest, nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, nWSrc, nHSrc, crTransparent); break; } } else { res=(*pGdiTransparentBlt)(hdcDest, nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, nWSrc, nHSrc, crTransparent); } if(IsDCLeakageSrc) (*pGDIReleaseDC)(dxw.GethWnd(), hdcSrc); if(IsDCLeakageDest) (*pGDIReleaseDC)(dxw.GethWnd(), hdcDest); if(res && IsToScreen) { dxw.ShowOverlay(hdcDest); if(dxw.dwFlags8 & MARKGDI32) dxw.Mark(hdcDest, FALSE, RGB(255, 255, 255), nXDest, nYDest, nWidth, nHeight); } if(!res) OutTraceE("GDI.GdiTransparentBlt: ERROR err=%d at %d\n", GetLastError(), __LINE__); return res; } BOOL WINAPI extPie(HDC hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect, int nXRadial1, int nYRadial1, int nXRadial2, int nYRadial2) { BOOL ret; OutTraceDW("Pie: hdc=%x rect=(%d,%d)-(%d,%d)\n", hdc, nLeftRect, nTopRect, nRightRect, nBottomRect); if(dxw.IsToRemap(hdc)) { switch(dxw.GDIEmulationMode){ case GDIMODE_SHAREDDC: sdc.GetPrimaryDC(hdc); ret=(*pPie)(sdc.GetHdc(), nLeftRect, nTopRect, nRightRect, nBottomRect, nXRadial1, nYRadial1, nXRadial2, nYRadial2); sdc.PutPrimaryDC(hdc, TRUE); return ret; break; default: break; } } ret=(*pPie)(hdc, nLeftRect, nTopRect, nRightRect, nBottomRect, nXRadial1, nYRadial1, nXRadial2, nYRadial2); if(!ret) OutTraceE("Pie ERROR: err=%d\n", GetLastError()); return ret; } BOOL WINAPI extAngleArc(HDC hdc, int X, int Y, DWORD dwRadius, FLOAT eStartAngle, FLOAT eSweepAngle) { BOOL ret; OutTraceDW("AngleArc: hdc=%x pos=(%d,%d)\n", hdc, X, Y); if(dxw.IsToRemap(hdc)) { switch(dxw.GDIEmulationMode){ case GDIMODE_SHAREDDC: sdc.GetPrimaryDC(hdc); ret=(*pAngleArc)(sdc.GetHdc(), X, Y, dwRadius, eStartAngle, eSweepAngle); sdc.PutPrimaryDC(hdc, TRUE); return ret; break; default: break; } } ret=(*pAngleArc)(hdc, X, Y, dwRadius, eStartAngle, eSweepAngle); if(!ret) OutTraceE("AngleArc ERROR: err=%d\n", GetLastError()); return ret; } BOOL WINAPI extPolyPolyline(HDC hdc, const POINT *lppt, const DWORD *lpdwPolyPoints, DWORD cCount) { BOOL ret; OutTraceDW("PolyPolyline: hdc=%x\n", hdc); if(dxw.IsToRemap(hdc)) { switch(dxw.GDIEmulationMode){ case GDIMODE_SHAREDDC: sdc.GetPrimaryDC(hdc); ret=(*pPolyPolyline)(sdc.GetHdc(), lppt, lpdwPolyPoints, cCount); sdc.PutPrimaryDC(hdc, TRUE); return ret; break; default: break; } } ret=(*pPolyPolyline)(hdc, lppt, lpdwPolyPoints, cCount); if(!ret) OutTraceE("PolyPolyline ERROR: err=%d\n", GetLastError()); return ret; } BOOL WINAPI extFillRgn(HDC hdc, HRGN hrgn, HBRUSH hbr) { BOOL ret; OutTraceDW("FillRgn: hdc=%x\n", hdc); if(dxw.IsToRemap(hdc)) { switch(dxw.GDIEmulationMode){ case GDIMODE_SHAREDDC: sdc.GetPrimaryDC(hdc); ret=(*pFillRgn)(sdc.GetHdc(), hrgn, hbr); sdc.PutPrimaryDC(hdc, TRUE); return ret; break; default: break; } } ret=(*pFillRgn)(hdc, hrgn, hbr); if(!ret) OutTraceE("FillRgn ERROR: err=%d\n", GetLastError()); return ret; } BOOL WINAPI extFrameRgn(HDC hdc, HRGN hrgn, HBRUSH hbr, int nWidth, int nHeight) { BOOL ret; OutTraceDW("FrameRgn: hdc=%x\n", hdc); if(dxw.IsToRemap(hdc)) { switch(dxw.GDIEmulationMode){ case GDIMODE_SHAREDDC: sdc.GetPrimaryDC(hdc); ret=(*pFrameRgn)(sdc.GetHdc(), hrgn, hbr, nWidth, nHeight); sdc.PutPrimaryDC(hdc, TRUE); return ret; break; default: break; } } ret=(*pFrameRgn)(hdc, hrgn, hbr, nWidth, nHeight); if(!ret) OutTraceE("FrameRgn ERROR: err=%d\n", GetLastError()); return ret; } BOOL WINAPI extInvertRgn(HDC hdc, HRGN hrgn) { BOOL ret; OutTraceDW("InvertRgn: hdc=%x hrgn=%x\n", hdc, hrgn); if(dxw.IsToRemap(hdc)) { switch(dxw.GDIEmulationMode){ case GDIMODE_SHAREDDC: sdc.GetPrimaryDC(hdc); ret=(*pInvertRgn)(sdc.GetHdc(), hrgn); sdc.PutPrimaryDC(hdc, TRUE); return ret; break; default: break; } } ret=(*pInvertRgn)(hdc, hrgn); if(!ret) OutTraceE("InvertRgn ERROR: err=%d\n", GetLastError()); return ret; } BOOL WINAPI extPaintRgn(HDC hdc, HRGN hrgn) { BOOL ret; OutTraceDW("PaintRgn: hdc=%x hrgn=%x\n", hdc, hrgn); if(dxw.IsToRemap(hdc)) { switch(dxw.GDIEmulationMode){ case GDIMODE_SHAREDDC: sdc.GetPrimaryDC(hdc); ret=(*pPaintRgn)(sdc.GetHdc(), hrgn); sdc.PutPrimaryDC(hdc, TRUE); return ret; break; default: break; } } ret=(*pPaintRgn)(hdc, hrgn); if(!ret) OutTraceE("PaintRgn ERROR: err=%d\n", GetLastError()); return ret; } int WINAPI extSetMapMode(HDC hdc, int fnMapMode) { int ret; OutTraceDW("SetMapMode: hdc=%x fnMapMode=%x\n", hdc, fnMapMode); if(dxw.IsToRemap(hdc)) { switch(dxw.GDIEmulationMode){ case GDIMODE_SHAREDDC: sdc.GetPrimaryDC(hdc); ret=(*pSetMapMode)(sdc.GetHdc(), fnMapMode); sdc.PutPrimaryDC(hdc, FALSE); return ret; break; default: break; } } ret=(*pSetMapMode)(hdc, fnMapMode); if(!ret) OutTraceE("SetMapMode ERROR: err=%d\n", GetLastError()); return ret; } BOOL WINAPI extRoundRect(HDC hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect, int nWidth, int nHeight) { int ret; OutTraceDW("RoundRect: hdc=%x rect=(%d,%d)-(%d,%d) ellipse=(%dx%d)\n", hdc, nLeftRect, nTopRect, nRightRect, nBottomRect, nWidth, nHeight); if(dxw.IsToRemap(hdc)) { switch(dxw.GDIEmulationMode){ case GDIMODE_SHAREDDC: sdc.GetPrimaryDC(hdc); ret=(*pRoundRect)(sdc.GetHdc(), nLeftRect, nTopRect, nRightRect, nBottomRect, nWidth, nHeight); sdc.PutPrimaryDC(hdc, TRUE, nLeftRect, nTopRect, nRightRect, nBottomRect); return ret; break; default: break; } } ret=(*pRoundRect)(hdc, nLeftRect, nTopRect, nRightRect, nBottomRect, nWidth, nHeight); if(!ret) OutTraceE("RoundRect ERROR: err=%d\n", GetLastError()); return ret; } BOOL WINAPI extPolyPolygon(HDC hdc, const POINT *lpPoints, const INT *lpPolyCounts, int nCount) { BOOL ret; OutTraceDW("PolyPolygon: hdc=%x\n", hdc); if(dxw.IsToRemap(hdc)) { switch(dxw.GDIEmulationMode){ case GDIMODE_SHAREDDC: sdc.GetPrimaryDC(hdc); ret=(*pPolyPolygon)(sdc.GetHdc(), lpPoints, lpPolyCounts, nCount); sdc.PutPrimaryDC(hdc, TRUE); return ret; break; default: break; } } ret=(*pPolyPolygon)(hdc, lpPoints, lpPolyCounts, nCount); if(!ret) OutTraceE("PolyPolygon ERROR: err=%d\n", GetLastError()); return ret; } #if 0 BOOL WINAPI extDPtoLP(HDC hdc, LPPOINT lpPoints, int nCount) { BOOL ret; OutTrace("DPtoLP: hdc=%x, nCount=%d\n", hdc, nCount); for(int i=0; ix, lpPoint->y); if(ret && dxw.IsFullScreen()){ // ?? and dxw.isDesktop() ??? dxw.UnmapClient(lpPoint); OutTraceDW("GetDCOrgEx: fixed pt=(%d,%d)\n", lpPoint->x, lpPoint->y); } return ret; } UINT WINAPI extSetPaletteEntries(HPALETTE hpal, UINT iStart, UINT cEntries, const PALETTEENTRY *lppe) { UINT ret; OutTraceDW("SetPaletteEntries: hpal=%x start=%d entries=%d\n", hpal, iStart, cEntries); ret = (*pSetPaletteEntries)(hpal, iStart, cEntries, lppe); // the only purpose of hooking this call is the fact that in windowed mode a palette update // does not flush the HDC updates to the device like in fullscreen (Win98?) mode. // if(dxw.IsFullScreen()) (*pInvalidateRect)(dxw.GethWnd(), NULL, FALSE); return ret; } int WINAPI extSetROP2(HDC hdc, int fnDrawMode) { // In early OS the SetROP2 caused some sort of screen refresh, that does no longer happen in recent ones. // So wrapping the function and inserting a InvalidateRect right after that fixes the problem. // This trick fixes the black screens in "Titanic - an adventure out of time" on Win10. // N.b. Titanic calls SetTextColor, SetBkColor and SetROP2 in sequence, it might be possible that the // API to hook for refreshing is another, or even them all! int ret; OutTraceDW("SetROP2: hdc=%x drawmode=%d\n", hdc, fnDrawMode); ret = (*pSetROP2)(hdc, fnDrawMode); (*pInvalidateRect)(WindowFromDC(hdc), NULL, 0); return ret; } // v2.04.05: GetTextExtentPointA hooker for "Warhammer Shadow of the Horned Rat" BOOL WINAPI extGetTextExtentPointA(HDC hdc, LPCTSTR lpString, int cbString, LPSIZE lpSize) { BOOL ret; OutTraceDW("GetTextExtentPointA: hdc=%x string=\"%s\"(%d)\n", hdc, lpString, cbString); ret = (*pGetTextExtentPointA)(hdc, lpString, cbString, lpSize); if(!ret){ OutTraceDW("GetTextExtentPointA ERROR: err=%d\n", GetLastError); return ret; } OutTraceDW("GetTextExtentPointA: size=(%dx%d)\n", lpSize->cx, lpSize->cy); // beware: size scaling is appropriate only when referred to video DC switch(dxw.GDIEmulationMode){ case GDIMODE_STRETCHED: if(dxw.Windowize && (OBJ_DC == (*pGetObjectType)(hdc))){ dxw.UnmapClient((LPPOINT)lpSize); OutTraceDW("GetTextExtentPointA: remapped size=(%dx%d)\n", lpSize->cx, lpSize->cy); } break; default: break; } return ret; } // v2.04.05: GetTextExtentPoint32A hooker for "Warhammer Shadow of the Horned Rat" BOOL WINAPI extGetTextExtentPoint32A(HDC hdc, LPCTSTR lpString, int cbString, LPSIZE lpSize) { BOOL ret; OutTraceDW("GetTextExtentPoint32A: hdc=%x(%s) string=\"%s\"(%d)\n", hdc, GetObjectTypeStr(hdc), lpString, cbString); ret = (*pGetTextExtentPoint32A)(hdc, lpString, cbString, lpSize); if(!ret){ OutTraceDW("GetTextExtentPoint32A ERROR: err=%d\n", GetLastError); return ret; } OutTraceDW("GetTextExtentPoint32A: size=(%dx%d)\n", lpSize->cx, lpSize->cy); // beware: size scaling is appropriate only when referred to video DC switch(dxw.GDIEmulationMode){ case GDIMODE_STRETCHED: if(dxw.Windowize && (OBJ_DC == (*pGetObjectType)(hdc))){ dxw.UnmapClient((LPPOINT)lpSize); OutTraceDW("GetTextExtentPoint32A: remapped size=(%dx%d)\n", lpSize->cx, lpSize->cy); } break; default: break; } return ret; } #if 0 LONG WINAPI extSetBitmapBits(HBITMAP hbmp, DWORD cBytes, VOID *lpBits) { LONG ret; if(IsTraceDW){ OutTrace("SetDIBits: hdc=%x hbmp=%x lines=(%d,%d) ColorUse=%x(%s)\n", hdc, hbmp, uStartScan, cScanLines, fuColorUse, ExplainDIBUsage(fuColorUse)); TraceBITMAPINFOHEADER("SetDIBits", (BITMAPINFOHEADER *)&(lpbmi->bmiHeader)); } if(dxw.IsToRemap(hdc)){ switch(dxw.GDIEmulationMode){ case GDIMODE_SHAREDDC: // this will flicker !!!! sdc.GetPrimaryDC(hdc); ret=(*pSetDIBits)(sdc.GetHdc(), hbmp, uStartScan, cScanLines, lpvBits, lpbmi, fuColorUse); if(!ret || (ret==GDI_ERROR)) OutTraceE("SetDIBits: ERROR err=%d\n", GetLastError()); sdc.PutPrimaryDC(hdc, TRUE, 0, 0, lpbmi->bmiHeader.biWidth, lpbmi->bmiHeader.biHeight); return ret; break; case GDIMODE_STRETCHED: case GDIMODE_EMULATED: default: break; } } ret = (*pSetBitmapBits)(hbmp, cBytes, lpBits); if(!ret || (ret==GDI_ERROR)) OutTraceE("SetDIBits: ERROR err=%d\n", GetLastError()); return ret; } #endif HGDIOBJ WINAPI extSelectObject(HDC hdc, HGDIOBJ hgdiobj) { HGDIOBJ ret; OutTraceDW("SelectObject: hdc=%x(%s) obj=%x(%s)\n", hdc, GetObjectTypeStr(hdc), hgdiobj, GetObjectTypeStr((HDC)hgdiobj)); if(GetObjectType(hgdiobj)==OBJ_FONT){ if(GetObjectType(hdc)==OBJ_DC) { HGDIOBJ scaled; scaled = fontdb.GetScaledFont((HFONT)hgdiobj); if(scaled) { hgdiobj=scaled; OutTraceDW("SelectObject: replaced font obj=%x\n", hgdiobj); } else{ OutTraceE("SelectObject: unmatched font obj=%x\n", hgdiobj); } } } ret = (*pSelectObject)(hdc, hgdiobj); return ret; } BOOL WINAPI extDeleteObject(HGDIOBJ hgdiobj) { BOOL ret; HGDIOBJ scaledobj; OutTraceDW("DeleteObject: obj=%x(%s)\n", hgdiobj, GetObjectTypeStr((HDC)hgdiobj)); if(GetObjectType(hgdiobj)==OBJ_FONT){ scaledobj=fontdb.DeleteFont((HFONT)hgdiobj); OutTraceDW("DeleteObject: deleted font obj=%x scaled=%x\n", hgdiobj, scaledobj); } if(scaledobj) (*pDeleteObject)(scaledobj); ret = (*pDeleteObject)(hgdiobj); return ret; } int WINAPI extSelectClipRgn(HDC hdc, HRGN hrgn) { int ret; // just proxy, right now .... OutTrace("SelectClipRgn: hdc=%x hrgn=%x\n", hdc, hrgn); ret = (*pSelectClipRgn)(hdc, NULL); return ret; } ================================================ FILE: dll/gdiblt.cpp ================================================ #define _CRT_SECURE_NO_WARNINGS #define INITGUID //#define FULLHEXDUMP #include #include #include "dxwnd.h" #include "dxhook.h" #include "ddrawi.h" #include "dxwcore.hpp" #include "stdio.h" #include "hddraw.h" #include "dxhelper.h" #include "syslibs.h" extern GetDC_Type pGetDCMethod(); extern ReleaseDC_Type pReleaseDCMethod(); extern Unlock1_Type pUnlockMethod(int); void BlitToWindow(HWND w, LPDIRECTDRAWSURFACE s) { HDC shdc, thdc; RECT client; HRESULT res; BOOL ret; if(!s) return; // for surface color fill res=(*pGetDCMethod())(s, &shdc); if(res) { OutTrace("ddraw GetDC error lpdds=%x res=%x(%s)\n", s, res, ExplainDDError(res)); return; } thdc=(*pGDIGetDC)(w); if(!thdc) { OutTrace("GDI GetDC error=%d\n", GetLastError()); return; } client = dxw.MapClientRect(NULL); if(dxw.dwFlags5 & CENTERTOWIN){ int x, y; x = (client.left + client.right - dxw.GetScreenWidth()) >> 1; // right-shift 1 bit means divide by 2! y = (client.top + client.bottom - dxw.GetScreenHeight()) >> 1; ret=(*pGDIBitBlt)(thdc, x, y, dxw.GetScreenWidth(), dxw.GetScreenHeight(), shdc, 0, 0, SRCCOPY); if(!ret) OutTrace("BitBlt error=%d\n", GetLastError()); } else{ if(dxw.dwFlags5 & BILINEARFILTER) { ret=SetStretchBltMode(thdc, HALFTONE); if((!ret) || (ret==ERROR_INVALID_PARAMETER)) OutTrace("GDI SetStretchBltMode error=%d\n", GetLastError()); } ret=(*pGDIStretchBlt)(thdc, client.left, client.top, client.right-client.left, client.bottom-client.top, shdc, 0, 0, dxw.GetScreenWidth(), dxw.GetScreenHeight(), SRCCOPY); if(!ret) OutTrace("GDI StretchBlt error=%d\n", GetLastError()); } dxw.ShowOverlay(thdc); res=(*pReleaseDCMethod())(s, shdc); if(res) OutTrace("ddraw ReleaseDC error lpdds=%x res=%x(%s)\n", s, res, ExplainDDError(res)); ret=(*pGDIReleaseDC)(w, thdc); if(!ret) OutTrace("GDI ReleaseDC error=%d\n", GetLastError()); } ================================================ FILE: dll/glhook.h ================================================ #include "gl.h" extern void HookOpenGL(HMODULE, char *); typedef GLenum (WINAPI *glGetError_Type)(); typedef void (WINAPI *glViewport_Type)(GLint, GLint, GLsizei, GLsizei); typedef void (WINAPI *glScissor_Type)(GLint, GLint, GLsizei, GLsizei); typedef void (WINAPI *glGetIntegerv_Type)(GLenum, GLint *); typedef void (WINAPI *glFinish_Type)(void); typedef void (WINAPI *glFlush_Type)(void); typedef void (WINAPI *glDrawBuffer_Type)(GLenum); typedef void (WINAPI *glPolygonMode_Type)(GLenum, GLenum); typedef void (WINAPI *glGetFloatv_Type)(GLenum, GLboolean *); typedef void (WINAPI *glClear_Type)(GLbitfield); typedef HGLRC (WINAPI *wglCreateContext_Type)(HDC); typedef PROC (WINAPI *wglGetProcAddress_Type)(LPCSTR); typedef BOOL (WINAPI *wglMakeCurrent_Type)(HDC, HGLRC); typedef void (WINAPI *glTexImage2D_Type)(GLenum, GLint, GLint, GLsizei, GLsizei, GLint, GLenum, GLenum, const GLvoid *); typedef void (WINAPI *glPixelZoom_Type)(GLfloat, GLfloat); typedef void (WINAPI *glBegin_Type)(GLenum); typedef void (WINAPI *glBindTexture_Type)(GLenum, GLuint); typedef void (WINAPI *glPixelStorei_Type)(GLenum, GLint); typedef void (WINAPI *glCopyTexImage2D_Type)(GLenum, GLint, GLenum, GLint, GLint, GLsizei, GLsizei, GLint); extern GLenum WINAPI extglGetError(); extern void WINAPI extglViewport(GLint, GLint, GLsizei, GLsizei); extern void WINAPI extglScissor(GLint, GLint, GLsizei, GLsizei); extern void WINAPI extglGetIntegerv(GLenum, GLint *); extern void WINAPI extglFinish(void); extern void WINAPI extglFlush(void); extern void WINAPI extglDrawBuffer(GLenum); extern void WINAPI extglPolygonMode(GLenum, GLenum); extern void WINAPI extglGetFloatv(GLenum, GLboolean *); extern void WINAPI extglClear(GLbitfield); extern HGLRC WINAPI extwglCreateContext(HDC); extern PROC WINAPI extwglGetProcAddress(LPCSTR); extern BOOL WINAPI extwglMakeCurrent(HDC, HGLRC); extern void WINAPI extglTexImage2D(GLenum, GLint, GLint, GLsizei, GLsizei, GLint, GLenum, GLenum, const GLvoid *); extern void WINAPI extglPixelZoom(GLfloat, GLfloat); extern void WINAPI extglBegin(GLenum); extern void WINAPI extglBindTexture(GLenum, GLuint); extern void WINAPI extglPixelStorei(GLenum, GLint); extern void WINAPI extglCopyTexImage2D(GLenum, GLint, GLenum, GLint, GLint, GLsizei, GLsizei, GLint); #ifdef DXWDECLARATIONS #undef DXWEXTERN #undef DXWINITIALIZED #define DXWEXTERN #define DXWINITIALIZED = NULL #else #undef DXWEXTERN #undef DXWINITIALIZED #define DXWEXTERN extern #define DXWINITIALIZED #endif // GDI32.dll: DXWEXTERN glGetError_Type pglGetError; DXWEXTERN glViewport_Type pglViewport; DXWEXTERN glScissor_Type pglScissor; DXWEXTERN glGetIntegerv_Type pglGetIntegerv; //DXWEXTERN glFinish_Type pglFinish; //DXWEXTERN glFlush_Type pglFlush; DXWEXTERN glDrawBuffer_Type pglDrawBuffer; DXWEXTERN glPolygonMode_Type pglPolygonMode; DXWEXTERN glGetFloatv_Type pglGetFloatv; DXWEXTERN glClear_Type pglClear; DXWEXTERN wglCreateContext_Type pwglCreateContext; DXWEXTERN wglGetProcAddress_Type pwglGetProcAddress; DXWEXTERN wglMakeCurrent_Type pwglMakeCurrent; DXWEXTERN glTexImage2D_Type pglTexImage2D; DXWEXTERN glPixelZoom_Type pglPixelZoom; DXWEXTERN glBegin_Type pglBegin; DXWEXTERN glBindTexture_Type pglBindTexture; DXWEXTERN glPixelStorei_Type pglPixelStorei; DXWEXTERN glCopyTexImage2D_Type pglCopyTexImage2D; ================================================ FILE: dll/glide.cpp ================================================ #define __MSC__ #include #include #include "dxwnd.h" #include "dxwcore.hpp" #include "syslibs.h" #include "dxhook.h" #include "hddraw.h" #include "dxhelper.h" #include "glidehook.h" void WINAPI extgrGlideInit(void); void WINAPI extgrGlideShutdown(void); void WINAPI extgrClipWindow(FxU32, FxU32, FxU32, FxU32); GrContext_t WINAPI extgrSstWinOpen(FxU32, GrScreenResolution_t, GrScreenRefresh_t, GrColorFormat_t, GrOriginLocation_t, int, int); FxI32 WINAPI extgrQueryResolutions (const GrResolution *, GrResolution *); grGlideInit_Type pgrGlideInit = 0; grGlideShutdown_Type pgrGlideShutdown = 0; grClipWindow_Type pgrClipWindow = 0; grSstWinOpen_Type pgrSstWinOpen = 0; grQueryResolutions_Type pgrQueryResolutions = 0; static HookEntryEx_Type Hooks[]={ {HOOK_IAT_CANDIDATE, 0, "_grGlideInit@0", (FARPROC)NULL, (FARPROC *)&pgrGlideInit, (FARPROC)extgrGlideInit}, {HOOK_IAT_CANDIDATE, 0, "_grGlideShutdown@0", (FARPROC)NULL, (FARPROC *)&pgrGlideShutdown, (FARPROC)extgrGlideShutdown}, {HOOK_IAT_CANDIDATE, 0, "_grClipWindow@16", (FARPROC)NULL, (FARPROC *)&pgrClipWindow, (FARPROC)extgrClipWindow}, {HOOK_IAT_CANDIDATE, 0, "_grSstWinOpen@28", (FARPROC)NULL, (FARPROC *)&pgrSstWinOpen, (FARPROC)extgrSstWinOpen}, {HOOK_IAT_CANDIDATE, 0, "_grQueryResolutions@8", (FARPROC)NULL, (FARPROC *)&pgrQueryResolutions, (FARPROC)extgrQueryResolutions}, {HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator }; FARPROC Remap_Glide_ProcAddress(LPCSTR proc, HMODULE hModule) { FARPROC addr; OutTrace("Remap_Glide_ProcAddress: proc=%s\n", proc); if(!(dxw.dwFlags4 & HOOKGLIDE)) return NULL; if (addr=RemapLibraryEx(proc, hModule, Hooks)) return addr; // NULL -> keep the original call address return NULL; } void HookGlideLibs(HMODULE hModule) { OutTraceDW("HookGlideLibs module=%x\n", hModule); HookLibraryEx(hModule, Hooks, "glide.dll"); HookLibraryEx(hModule, Hooks, "glide2x.dll"); HookLibraryEx(hModule, Hooks, "glide3x.dll"); return; } // static utility static char *ExplainGlideRes(int res) { char *p; switch(res){ case GR_RESOLUTION_320x200: p="320x200"; break; case GR_RESOLUTION_320x240: p="320x240"; break; case GR_RESOLUTION_400x256: p="400x256"; break; case GR_RESOLUTION_512x384: p="512x384"; break; case GR_RESOLUTION_640x200: p="640x200"; break; case GR_RESOLUTION_640x350: p="640x350"; break; case GR_RESOLUTION_640x400: p="640x400"; break; case GR_RESOLUTION_640x480: p="640x480"; break; case GR_RESOLUTION_800x600: p="800x600"; break; case GR_RESOLUTION_960x720: p="960x720"; break; case GR_RESOLUTION_856x480: p="856x480"; break; case GR_RESOLUTION_512x256: p="512x256"; break; case GR_RESOLUTION_1024x768: p="1024x768"; break; case GR_RESOLUTION_1280x1024: p="1280x1024"; break; case GR_RESOLUTION_1600x1200: p="1600x1200"; break; case GR_RESOLUTION_400x300: p="400x300"; break; case GR_RESOLUTION_NONE: p="NONE"; break; default: p="unknown"; break; } return p; } // glide wrappers void WINAPI extgrClipWindow(FxU32 minx, FxU32 miny, FxU32 maxx, FxU32 maxy) { OutTrace("grClipWindow: win=(%d,%d)-(%d,%d)\n", minx, miny, maxx, maxy); return (*pgrClipWindow)(minx, miny, maxx, maxy); } GrContext_t WINAPI extgrSstWinOpen( FxU32 hWin, GrScreenResolution_t res, GrScreenRefresh_t ref, GrColorFormat_t cFormat, GrOriginLocation_t org_loc, int num_buffers, int num_aux_buffers) { GrContext_t ret; OutTrace("grSstWinOpen: hWin=%x res=%x(%s)\n", hWin, res, ExplainGlideRes(res)); if(dxw.IsDesktop((HWND)hWin)) hWin=(FxU32)dxw.GethWnd(); ret=(*pgrSstWinOpen)(hWin, res, ref, cFormat, org_loc, num_buffers, num_aux_buffers); OutTrace("grSstWinOpen: ret=%x\n", ret); return ret; } FxI32 WINAPI extgrQueryResolutions (const GrResolution *resTemplate, GrResolution *output) { FxI32 ret; OutTrace("grQueryResolutions: resolution=%x refresh=%x numColorBuffers=%d numAuxBuffers=%d\n", resTemplate->resolution, resTemplate->refresh, resTemplate->numColorBuffers, resTemplate->numAuxBuffers); ret=(*pgrQueryResolutions)(resTemplate, output); OutTrace("grQueryResolutions: res=%d\n", ret); return ret; } void WINAPI extgrGlideInit(void) { OutTrace("grGlideInit\n"); return; } void WINAPI extgrGlideShutdown(void) { OutTrace("grGlideShutdown\n"); return; } ================================================ FILE: dll/glidehook.h ================================================ #define __WIN32__ #define __MSC__ #include "3dfx.h" #include "glide.h" extern void HookGlideLibs(HMODULE); typedef void (WINAPI *grGlideInit_Type)(void); typedef void (WINAPI *grGlideShutdown_Type)(void); typedef void (WINAPI *grClipWindow_Type)(FxU32, FxU32, FxU32, FxU32); typedef GrContext_t (WINAPI *grSstWinOpen_Type)(FxU32, GrScreenResolution_t, GrScreenRefresh_t, GrColorFormat_t, GrOriginLocation_t, int, int); typedef FxI32 (WINAPI *grQueryResolutions_Type)(const GrResolution *, GrResolution *); ================================================ FILE: dll/hd3d.cpp ================================================ //#define D3D10_IGNORE_SDK_LAYERS 1 #define _CRT_SECURE_NO_WARNINGS #include #include #include #include #include #include #include "dxwnd.h" #include "dxwcore.hpp" #include "dxhook.h" #include "dxhelper.h" #include "syslibs.h" #include "stdio.h" #include "hd3d.doc.hpp" // fake include to hold documentation #define HOOKD3D10ANDLATER 1 #define TRACEALLMETHODS 1 //#define DXWNDDISABLEDHOOKS 1 extern void D3D9TextureHandling(void *, int); extern void D3D8TextureHandling(void *, int); extern HRESULT exCreateImageSurface8(void *, UINT, UINT, D3DFORMAT, LPDIRECTDRAWSURFACE *); extern HRESULT dxCopyRects(void *, LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE); extern HRESULT dwD3D8InitEmulation(void *); extern LPDIRECTDRAWSURFACE dwGetVirtualBackBuffer(); extern void dwD3D8ShutdownEmulation(void *); extern HRESULT dwD3D8Present(void *, CONST RECT *, CONST RECT*, HWND, CONST RGNDATA *); extern void HookWindowProc(HWND); extern char *ExplainDDError(DWORD); extern char *ExplainRenderstateValue(DWORD Value); extern HRESULT dxGetFrontBuffer(void *, LPDIRECTDRAWSURFACE); void *lpD3DActiveDevice = NULL; typedef HRESULT (WINAPI *QueryInterface_Type)(void *, REFIID riid, void** ppvObj); // D3D8/9 API typedef void* (WINAPI *Direct3DCreate8_Type)(UINT); typedef void* (WINAPI *Direct3DCreate9_Type)(UINT); typedef HRESULT (WINAPI *Direct3DCreate9Ex_Type)(UINT, IDirect3D9Ex **); typedef HRESULT (WINAPI *CheckFullScreen_Type)(void); typedef BOOL (WINAPI * DisableD3DSpy_Type)(void); typedef void (WINAPI * D3DPERF_SetOptions_Type)(DWORD); void* WINAPI extDirect3DCreate8(UINT); void* WINAPI extDirect3DCreate9(UINT); HRESULT WINAPI extDirect3DCreate9Ex(UINT, IDirect3D9Ex **); HRESULT WINAPI extCheckFullScreen(void); HRESULT WINAPI voidDirect3DShaderValidatorCreate9(void); void WINAPI voidDebugSetLevel(void); void WINAPI voidDebugSetMute(void); BOOL WINAPI voidDisableD3DSpy(void); BOOL WINAPI extDisableD3DSpy(void); void WINAPI extD3DPERF_SetOptions(DWORD); Direct3DCreate8_Type pDirect3DCreate8 = 0; Direct3DCreate9_Type pDirect3DCreate9 = 0; Direct3DCreate9Ex_Type pDirect3DCreate9Ex = 0; CheckFullScreen_Type pCheckFullScreen = 0; DisableD3DSpy_Type pDisableD3DSpy = 0; D3DPERF_SetOptions_Type pD3DPERF_SetOptions = 0; // IDirect3D8/9 methods typedef UINT (WINAPI *GetAdapterCount_Type)(void *); typedef HRESULT (WINAPI *GetAdapterIdentifier_Type)(void *, UINT, DWORD, D3DADAPTER_IDENTIFIER9 *); typedef UINT (WINAPI *GetAdapterModeCount8_Type)(void *, UINT); typedef UINT (WINAPI *GetAdapterModeCount9_Type)(void *, UINT, D3DFORMAT); typedef HRESULT (WINAPI *EnumAdapterModes8_Type)(void *, UINT, UINT, D3DDISPLAYMODE *); typedef HRESULT (WINAPI *EnumAdapterModes9_Type)(void *, UINT, D3DFORMAT ,UINT, D3DDISPLAYMODE *); typedef HRESULT (WINAPI *GetAdapterDisplayMode_Type)(void *, UINT, D3DDISPLAYMODE *); typedef HRESULT (WINAPI *CheckDeviceType_Type)(void *, UINT, D3DDEVTYPE, D3DFORMAT, D3DFORMAT, BOOL); typedef HRESULT (WINAPI *D3DGetDeviceCaps8_Type)(void *, UINT, D3DDEVTYPE, D3DCAPS8 *); typedef HRESULT (WINAPI *D3DGetDeviceCaps9_Type)(void *, UINT, D3DDEVTYPE, D3DCAPS9 *); typedef HMONITOR (WINAPI *GetAdapterMonitor_Type)(void *, UINT); typedef HRESULT (WINAPI *CreateDevice_Type)(void *, UINT, D3DDEVTYPE, HWND, DWORD, void *, void **); typedef HRESULT (WINAPI *CreateDeviceEx_Type)(void *, UINT, D3DDEVTYPE, HWND, DWORD, void *, D3DDISPLAYMODEEX *, void **); typedef BOOL (WINAPI *DisableD3DSpy_Type)(void); typedef HRESULT (WINAPI *GetBackBuffer8_Type)(void *, UINT, D3DBACKBUFFER_TYPE, LPDIRECTDRAWSURFACE *); UINT WINAPI extGetAdapterCount8(void *); UINT WINAPI extGetAdapterCount9(void *); HRESULT WINAPI extGetAdapterIdentifier8(void *, UINT, DWORD, D3DADAPTER_IDENTIFIER9 *); HRESULT WINAPI extGetAdapterIdentifier9(void *, UINT, DWORD, D3DADAPTER_IDENTIFIER9 *); UINT WINAPI extGetAdapterModeCount8(void *, UINT); UINT WINAPI extGetAdapterModeCount9(void *, UINT, D3DFORMAT); HRESULT WINAPI extCheckDeviceType8(void *, UINT, D3DDEVTYPE, D3DFORMAT, D3DFORMAT, BOOL); HRESULT WINAPI extCheckDeviceType9(void *, UINT, D3DDEVTYPE, D3DFORMAT, D3DFORMAT, BOOL); HRESULT WINAPI extD3DGetDeviceCaps8(void *, UINT, D3DDEVTYPE, D3DCAPS8 *); HRESULT WINAPI extD3DGetDeviceCaps9(void *, UINT, D3DDEVTYPE, D3DCAPS9 *); HMONITOR WINAPI extGetAdapterMonitor8(void *, UINT); HMONITOR WINAPI extGetAdapterMonitor9(void *, UINT); HRESULT WINAPI extCreateDevice8(void *, UINT, D3DDEVTYPE, HWND, DWORD, D3DPRESENT_PARAMETERS *, void **); HRESULT WINAPI extCreateDevice9(void *, UINT, D3DDEVTYPE, HWND, DWORD, D3DPRESENT_PARAMETERS *, void **); HRESULT WINAPI extCreateDeviceEx(void *, UINT, D3DDEVTYPE, HWND, DWORD, D3DPRESENT_PARAMETERS *, D3DDISPLAYMODEEX *, void **); HRESULT WINAPI extGetBackBuffer8(void *, UINT, D3DBACKBUFFER_TYPE, LPDIRECTDRAWSURFACE *); GetAdapterCount_Type pGetAdapterCount8, pGetAdapterCount9; GetAdapterModeCount8_Type pGetAdapterModeCount8; GetAdapterModeCount9_Type pGetAdapterModeCount9; GetAdapterIdentifier_Type pGetAdapterIdentifier8, pGetAdapterIdentifier9; CheckDeviceType_Type pCheckDeviceType8, pCheckDeviceType9; D3DGetDeviceCaps8_Type pD3DGetDeviceCaps8 = 0; D3DGetDeviceCaps9_Type pD3DGetDeviceCaps9 = 0; GetAdapterMonitor_Type pGetAdapterMonitor8, pGetAdapterMonitor9; CreateDevice_Type pCreateDevice8, pCreateDevice9; CreateDeviceEx_Type pCreateDeviceEx = 0; GetBackBuffer8_Type pGetBackBuffer8 = 0; // IDirect3DDevice8/9 methods typedef UINT (WINAPI *GetAvailableTextureMem_Type)(void *); typedef HRESULT (WINAPI *TestCooperativeLevel_Type)(void *); typedef HRESULT (WINAPI *GetDirect3D8_Type)(void *, void **); typedef HRESULT (WINAPI *GetDirect3D9_Type)(void *, void **); typedef HRESULT (WINAPI *GetDisplayMode8_Type)(void *, D3DDISPLAYMODE *); typedef HRESULT (WINAPI *GetDisplayMode9_Type)(void *, UINT, D3DDISPLAYMODE *); typedef void (WINAPI *SetCursorPosition9_Type)(void *, int, int, DWORD); typedef void (WINAPI *SetCursorPosition8_Type)(void *, int, int, DWORD); typedef BOOL (WINAPI *ShowCursor8_Type)(void *, BOOL); typedef BOOL (WINAPI *ShowCursor9_Type)(void *, BOOL); typedef HRESULT (WINAPI *CreateAdditionalSwapChain_Type)(void *, D3DPRESENT_PARAMETERS *, IDirect3DSwapChain9 **); typedef HRESULT (WINAPI *GetSwapChain_Type)(void *, UINT, IDirect3DSwapChain9**); typedef UINT (WINAPI *GetNumberOfSwapChains_Type)(void *); typedef HRESULT (WINAPI *BeginStateBlock_Type)(void *); typedef HRESULT (WINAPI *EndStateBlock8_Type)(void *, DWORD *); typedef HRESULT (WINAPI *EndStateBlock9_Type)(void *, IDirect3DStateBlock9**); typedef HRESULT (WINAPI *CreateTexture8_Type)(void *, UINT, UINT, UINT, DWORD, D3DFORMAT, D3DPOOL, void **); typedef HRESULT (WINAPI *CreateTexture9_Type)(void *, UINT, UINT, UINT, DWORD, D3DFORMAT, D3DPOOL, void **, HANDLE *); typedef HRESULT (WINAPI *CopyRects_Type)(void *, LPDIRECTDRAWSURFACE, CONST RECT *, UINT, LPDIRECTDRAWSURFACE, CONST POINT *); typedef HRESULT (WINAPI *GetFrontBuffer_Type)(void *, LPDIRECTDRAWSURFACE); typedef ULONG (WINAPI *ReleaseDev_Type)(void *); UINT WINAPI extGetAvailableTextureMem8(void *); UINT WINAPI extGetAvailableTextureMem9(void *); HRESULT WINAPI extTestCooperativeLevel8(void *); HRESULT WINAPI extTestCooperativeLevel9(void *); HRESULT WINAPI extGetDirect3D8(void *, void **); HRESULT WINAPI extGetDirect3D9(void *, void **); HRESULT WINAPI extGetDisplayMode8(void *, D3DDISPLAYMODE *); HRESULT WINAPI extGetDisplayMode9(void *, UINT, D3DDISPLAYMODE *); void WINAPI extSetCursorPosition9(void *, int, int, DWORD); void WINAPI extSetCursorPosition8(void *, int, int, DWORD); BOOL WINAPI extShowCursor8(void *, BOOL); BOOL WINAPI extShowCursor9(void *, BOOL); HRESULT WINAPI extCreateAdditionalSwapChain8(void *, D3DPRESENT_PARAMETERS *, IDirect3DSwapChain9 **); HRESULT WINAPI extCreateAdditionalSwapChain9(void *, D3DPRESENT_PARAMETERS *, IDirect3DSwapChain9 **); HRESULT WINAPI extGetSwapChain(void *, UINT, IDirect3DSwapChain9**); UINT WINAPI extGetNumberOfSwapChains(void *); HRESULT WINAPI extBeginStateBlock8(void *); HRESULT WINAPI extBeginStateBlock9(void *); HRESULT WINAPI extEndStateBlock8(void *, DWORD *); HRESULT WINAPI extEndStateBlock9(void *, IDirect3DStateBlock9**); HRESULT WINAPI extCreateTexture8(void *, UINT, UINT, UINT, DWORD, D3DFORMAT, D3DPOOL, void **); HRESULT WINAPI extCreateTexture9(void *, UINT, UINT, UINT, DWORD, D3DFORMAT, D3DPOOL, void **, HANDLE *); // CopyRects prototype uses IDirect3DSurface8 *, but to avoid including d3d8.h better use a generic ptr as LPDIRECTDRAWSURFACE HRESULT WINAPI extCopyRects(void *, LPDIRECTDRAWSURFACE, CONST RECT *, UINT, LPDIRECTDRAWSURFACE, CONST POINT *); HRESULT WINAPI extGetFrontBuffer(void *, LPDIRECTDRAWSURFACE); ULONG WINAPI extReleaseDev8(void *); ULONG WINAPI extReleaseDev9(void *); GetAvailableTextureMem_Type pGetAvailableTextureMem8, pGetAvailableTextureMem9; TestCooperativeLevel_Type pTestCooperativeLevel8, pTestCooperativeLevel9; GetDirect3D8_Type pGetDirect3D8 = 0; GetDirect3D9_Type pGetDirect3D9 = 0; GetDisplayMode8_Type pGetDisplayMode8 = 0; GetDisplayMode9_Type pGetDisplayMode9 = 0; SetCursorPosition9_Type pSetCursorPosition9 = 0; SetCursorPosition8_Type pSetCursorPosition8 = 0; ShowCursor8_Type pShowCursor8 = 0; ShowCursor9_Type pShowCursor9 = 0; CreateAdditionalSwapChain_Type pCreateAdditionalSwapChain8 = 0; CreateAdditionalSwapChain_Type pCreateAdditionalSwapChain9 = 0; GetSwapChain_Type pGetSwapChain = 0; GetNumberOfSwapChains_Type pGetNumberOfSwapChains = 0; BeginStateBlock_Type pBeginStateBlock8 = 0; BeginStateBlock_Type pBeginStateBlock9 = 0; EndStateBlock8_Type pEndStateBlock8 = 0; EndStateBlock9_Type pEndStateBlock9 = 0; CreateTexture8_Type pCreateTexture8 = 0; CreateTexture9_Type pCreateTexture9 = 0; CopyRects_Type pCopyRects = 0; GetFrontBuffer_Type pGetFrontBuffer = 0; ReleaseDev_Type pReleaseDev8, pReleaseDev9; // IDirect3DTexture8/9 methods typedef HRESULT (WINAPI *LockRect_Type)(void *, UINT, D3DLOCKED_RECT *, CONST RECT *, DWORD); typedef HRESULT (WINAPI *UnlockRect_Type)(void *, UINT); HRESULT WINAPI extLockRect8(void *, UINT, D3DLOCKED_RECT *, CONST RECT *, DWORD); HRESULT WINAPI extLockRect9(void *, UINT, D3DLOCKED_RECT *, CONST RECT *, DWORD); HRESULT WINAPI extUnlockRect8(void *, UINT); HRESULT WINAPI extUnlockRect9(void *, UINT); LockRect_Type pLockRect8, pLockRect9; UnlockRect_Type pUnlockRect8, pUnlockRect9; // to sort ... typedef HRESULT (WINAPI *Present_Type)(void *, CONST RECT *, CONST RECT *, HWND, CONST RGNDATA *); typedef HRESULT (WINAPI *SetRenderState_Type)(void *, D3DRENDERSTATETYPE, DWORD); typedef HRESULT (WINAPI *GetRenderState_Type)(void *, D3DRENDERSTATETYPE, DWORD ); typedef HRESULT (WINAPI *GetViewport_Type)(void *, D3DVIEWPORT9 *); typedef HRESULT (WINAPI *SetViewport_Type)(void *, D3DVIEWPORT9 *); typedef void (WINAPI *SetGammaRamp_Type)(void *, UINT, DWORD, D3DGAMMARAMP *); typedef void (WINAPI *GetGammaRamp_Type)(void *, UINT, D3DGAMMARAMP *); typedef HRESULT (WINAPI *SetTexture8_Type)(void *, DWORD, void *); typedef HRESULT (WINAPI *SetTexture9_Type)(void *, DWORD, void *); //typedef ULONG (WINAPI *CreateRenderTarget8_Type)(void *, UINT, UINT, D3DFORMAT, D3DMULTISAMPLE_TYPE, BOOL, IDirect3DSurface8**); typedef ULONG (WINAPI *CreateRenderTarget8_Type)(void *, UINT, UINT, D3DFORMAT, D3DMULTISAMPLE_TYPE, BOOL, void**); typedef ULONG (WINAPI *CreateRenderTarget9_Type)(void *, UINT, UINT, D3DFORMAT, D3DMULTISAMPLE_TYPE, BOOL, void**); typedef ULONG (WINAPI *BeginScene_Type)(void *); typedef ULONG (WINAPI *EndScene_Type)(void *); typedef HRESULT (WINAPI *D3D10CreateDevice_Type)(IDXGIAdapter *, D3D10_DRIVER_TYPE, HMODULE, UINT, UINT, ID3D10Device **); typedef HRESULT (WINAPI *D3D10CreateDeviceAndSwapChain_Type)(IDXGIAdapter *, D3D10_DRIVER_TYPE, HMODULE, UINT, UINT, DXGI_SWAP_CHAIN_DESC *, IDXGISwapChain **, ID3D10Device **); typedef HRESULT (WINAPI *D3D10CreateDevice1_Type)(IDXGIAdapter *, D3D10_DRIVER_TYPE, HMODULE, UINT, D3D10_FEATURE_LEVEL1, UINT, ID3D10Device **); typedef HRESULT (WINAPI *D3D10CreateDeviceAndSwapChain1_Type)(IDXGIAdapter *, D3D10_DRIVER_TYPE, HMODULE, UINT, UINT, DXGI_SWAP_CHAIN_DESC *, IDXGISwapChain **, ID3D10Device **); typedef HRESULT (WINAPI *D3D11CreateDevice_Type)(IDXGIAdapter *, D3D_DRIVER_TYPE, HMODULE, UINT, const D3D_FEATURE_LEVEL *, UINT, UINT, ID3D11Device **, D3D_FEATURE_LEVEL *, ID3D11DeviceContext **); typedef HRESULT (WINAPI *D3D11CreateDeviceAndSwapChain_Type)(IDXGIAdapter *, D3D_DRIVER_TYPE, HMODULE, UINT, const D3D_FEATURE_LEVEL *, UINT, UINT, const DXGI_SWAP_CHAIN_DESC *, IDXGISwapChain **, ID3D11Device **, D3D_FEATURE_LEVEL *, ID3D11DeviceContext **); typedef void (WINAPI *RSSetViewports10_Type)(void *, UINT, D3D10_VIEWPORT *); typedef void (WINAPI *RSSetViewports11_Type)(void *, UINT, D3D11_VIEWPORT *); typedef ULONG (WINAPI *AddRef_Type)(void *); typedef ULONG (WINAPI *Release_Type)(void *); typedef HRESULT (WINAPI *Reset_Type)(void *, D3DPRESENT_PARAMETERS*); HRESULT WINAPI extQueryInterfaceD3D8(void *, REFIID, void** ); HRESULT WINAPI extQueryInterfaceDev8(void *, REFIID, void** ); HRESULT WINAPI extQueryInterfaceD3D9(void *, REFIID, void** ); HRESULT WINAPI extQueryInterfaceDev9(void *, REFIID, void** ); HRESULT WINAPI extEnumAdapterModes8(void *, UINT, UINT , D3DDISPLAYMODE *); HRESULT WINAPI extEnumAdapterModes9(void *, UINT, D3DFORMAT, UINT , D3DDISPLAYMODE *); HRESULT WINAPI extGetAdapterDisplayMode8(void *, UINT, D3DDISPLAYMODE *); HRESULT WINAPI extGetAdapterDisplayMode9(void *, UINT, D3DDISPLAYMODE *); HRESULT WINAPI extPresent8(void *, CONST RECT *, CONST RECT *, HWND, CONST RGNDATA *); HRESULT WINAPI extPresent9(void *, CONST RECT *, CONST RECT *, HWND, CONST RGNDATA *); HRESULT WINAPI extSetRenderState8(void *, D3DRENDERSTATETYPE, DWORD); HRESULT WINAPI extSetRenderState9(void *, D3DRENDERSTATETYPE, DWORD); HRESULT WINAPI extGetRenderState8(void *, D3DRENDERSTATETYPE, DWORD); HRESULT WINAPI extGetRenderState9(void *, D3DRENDERSTATETYPE, DWORD); HRESULT WINAPI extGetViewport(void *, D3DVIEWPORT9 *); HRESULT WINAPI extSetViewport(void *, D3DVIEWPORT9 *); HRESULT WINAPI extReset8(void *, D3DPRESENT_PARAMETERS *); HRESULT WINAPI extReset9(void *, D3DPRESENT_PARAMETERS *); void WINAPI extSetGammaRamp8(void *, UINT, DWORD, D3DGAMMARAMP *); void WINAPI extSetGammaRamp9(void *, UINT, DWORD, D3DGAMMARAMP *); void WINAPI extGetGammaRamp8(void *, UINT, D3DGAMMARAMP *); void WINAPI extGetGammaRamp9(void *, UINT, D3DGAMMARAMP *); BOOL WINAPI voidDisableD3DSpy(void); ULONG WINAPI extCreateRenderTarget8(void *, UINT, UINT, D3DFORMAT, D3DMULTISAMPLE_TYPE, BOOL, void**); ULONG WINAPI extCreateRenderTarget9(void *, UINT, UINT, D3DFORMAT, D3DMULTISAMPLE_TYPE, BOOL, void**); ULONG WINAPI extBeginScene8(void *); ULONG WINAPI extEndScene8(void *); ULONG WINAPI extBeginScene9(void *); ULONG WINAPI extEndScene9(void *); ULONG WINAPI extSetTexture8(void *, DWORD, void *); ULONG WINAPI extSetTexture9(void *, DWORD, void *); HRESULT WINAPI extD3D10CreateDevice(IDXGIAdapter *, D3D10_DRIVER_TYPE, HMODULE, UINT, UINT, ID3D10Device **); HRESULT WINAPI extD3D10CreateDeviceAndSwapChain(IDXGIAdapter *, D3D10_DRIVER_TYPE, HMODULE, UINT, UINT, DXGI_SWAP_CHAIN_DESC *, IDXGISwapChain **, ID3D10Device **); HRESULT WINAPI extD3D10CreateDevice1(IDXGIAdapter *, D3D10_DRIVER_TYPE, HMODULE, UINT, D3D10_FEATURE_LEVEL1, UINT, ID3D10Device **); HRESULT WINAPI extD3D10CreateDeviceAndSwapChain1(IDXGIAdapter *, D3D10_DRIVER_TYPE, HMODULE, UINT, UINT, DXGI_SWAP_CHAIN_DESC *, IDXGISwapChain **, ID3D10Device **); HRESULT WINAPI extD3D11CreateDevice(IDXGIAdapter *, D3D_DRIVER_TYPE, HMODULE, UINT, const D3D_FEATURE_LEVEL *, UINT, UINT, ID3D11Device **, D3D_FEATURE_LEVEL *, ID3D11DeviceContext **); HRESULT WINAPI extD3D11CreateDeviceAndSwapChain(IDXGIAdapter *, D3D_DRIVER_TYPE, HMODULE, UINT, const D3D_FEATURE_LEVEL *, UINT, UINT, const DXGI_SWAP_CHAIN_DESC *, IDXGISwapChain **, ID3D11Device **, D3D_FEATURE_LEVEL *, ID3D11DeviceContext **); void WINAPI extRSSetViewports10(void *, UINT, D3D10_VIEWPORT *); void WINAPI extRSSetViewports11(ID3D11DeviceContext *, UINT, D3D11_VIEWPORT *); QueryInterface_Type pQueryInterfaceD3D8 = 0; QueryInterface_Type pQueryInterfaceDev8 = 0; QueryInterface_Type pQueryInterfaceD3D9 = 0; QueryInterface_Type pQueryInterfaceDev9 = 0; EnumAdapterModes8_Type pEnumAdapterModes8 = 0; EnumAdapterModes9_Type pEnumAdapterModes9 = 0; GetAdapterDisplayMode_Type pGetAdapterDisplayMode8 = 0; GetAdapterDisplayMode_Type pGetAdapterDisplayMode9 = 0; Present_Type pPresent8 = 0; Present_Type pPresent9 = 0; SetRenderState_Type pSetRenderState8, pSetRenderState9; GetRenderState_Type pGetRenderState8, pGetRenderState9; GetViewport_Type pGetViewport = 0; SetViewport_Type pSetViewport = 0; SetGammaRamp_Type pSetGammaRamp8, pSetGammaRamp9; GetGammaRamp_Type pGetGammaRamp8, pGetGammaRamp9; CreateRenderTarget8_Type pCreateRenderTarget8 = 0; CreateRenderTarget9_Type pCreateRenderTarget9 = 0; BeginScene_Type pBeginScene8, pBeginScene9; EndScene_Type pEndScene8, pEndScene9; Reset_Type pReset8, pReset9; SetTexture8_Type pSetTexture8 = 0; SetTexture9_Type pSetTexture9 = 0; D3D10CreateDevice_Type pD3D10CreateDevice = 0; D3D10CreateDeviceAndSwapChain_Type pD3D10CreateDeviceAndSwapChain = 0; D3D10CreateDevice1_Type pD3D10CreateDevice1 = 0; D3D10CreateDeviceAndSwapChain1_Type pD3D10CreateDeviceAndSwapChain1 = 0; D3D11CreateDevice_Type pD3D11CreateDevice = 0; D3D11CreateDeviceAndSwapChain_Type pD3D11CreateDeviceAndSwapChain = 0; RSSetViewports10_Type pRSSetViewports10 = 0; RSSetViewports11_Type pRSSetViewports11 = 0; AddRef_Type pAddRef9 = 0; Release_Type pRelease9 = 0; DWORD dwD3DVersion; DWORD dwD3DSwapEffect; static HookEntryEx_Type d3d8Hooks[]={ {HOOK_HOT_CANDIDATE, 0, "Direct3DCreate8", (FARPROC)NULL, (FARPROC *)&pDirect3DCreate8, (FARPROC)extDirect3DCreate8}, {HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator }; static HookEntryEx_Type d3d9Hooks[]={ {HOOK_HOT_CANDIDATE, 0, "Direct3DCreate9", (FARPROC)NULL, (FARPROC *)&pDirect3DCreate9, (FARPROC)extDirect3DCreate9}, {HOOK_HOT_CANDIDATE, 0, "Direct3DCreate9Ex", (FARPROC)NULL, (FARPROC *)&pDirect3DCreate9Ex, (FARPROC)extDirect3DCreate9Ex}, {HOOK_HOT_CANDIDATE, 0, "CheckFullScreen", (FARPROC)NULL, (FARPROC *)&pCheckFullScreen, (FARPROC)extCheckFullScreen}, //{HOOK_HOT_CANDIDATE, 0, "DisableD3DSpy", (FARPROC)NULL, (FARPROC *)&pDisableD3DSpy, (FARPROC)extDisableD3DSpy}, {HOOK_HOT_CANDIDATE, 0, "D3DPERF_SetOptions", (FARPROC)NULL, (FARPROC *)&pD3DPERF_SetOptions, (FARPROC)extD3DPERF_SetOptions}, {HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator }; static HookEntryEx_Type d3d9Extra[]={ {HOOK_HOT_CANDIDATE, 0, "Direct3DShaderValidatorCreate9", (FARPROC)NULL, (FARPROC *)NULL, (FARPROC)voidDirect3DShaderValidatorCreate9}, {HOOK_HOT_CANDIDATE, 0, "DebugSetLevel", (FARPROC)NULL, (FARPROC *)NULL, (FARPROC)voidDebugSetLevel}, {HOOK_HOT_CANDIDATE, 0, "DebugSetMute", (FARPROC)NULL, (FARPROC *)NULL, (FARPROC)voidDebugSetMute}, {HOOK_HOT_CANDIDATE, 0, "DisableD3DSpy", (FARPROC)NULL, (FARPROC *)NULL, (FARPROC)voidDisableD3DSpy}, {HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator }; static HookEntryEx_Type d3d10Hooks[]={ {HOOK_HOT_CANDIDATE, 0, "D3D10CreateDevice", (FARPROC)NULL, (FARPROC *)&pD3D10CreateDevice, (FARPROC)extD3D10CreateDevice}, {HOOK_HOT_CANDIDATE, 0, "D3D10CreateDeviceAndSwapChain", (FARPROC)NULL, (FARPROC *)&pD3D10CreateDeviceAndSwapChain, (FARPROC)extD3D10CreateDeviceAndSwapChain}, {HOOK_HOT_CANDIDATE, 0, "CheckFullScreen", (FARPROC)NULL, (FARPROC *)&pCheckFullScreen, (FARPROC)extCheckFullScreen}, {HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator }; static HookEntryEx_Type d3d10_1Hooks[]={ {HOOK_HOT_CANDIDATE, 0, "D3D11CreateDevice", (FARPROC)NULL, (FARPROC *)&pD3D11CreateDevice, (FARPROC)extD3D11CreateDevice}, {HOOK_HOT_CANDIDATE, 0, "D3D11CreateDeviceAndSwapChain", (FARPROC)NULL, (FARPROC *)&pD3D11CreateDeviceAndSwapChain, (FARPROC)extD3D11CreateDeviceAndSwapChain}, {HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator }; static HookEntryEx_Type d3d11Hooks[]={ {HOOK_HOT_CANDIDATE, 0, "D3D10CreateDevice1", (FARPROC)NULL, (FARPROC *)&pD3D10CreateDevice1, (FARPROC)extD3D10CreateDevice1}, {HOOK_HOT_CANDIDATE, 0, "D3D10CreateDeviceAndSwapChain1", (FARPROC)NULL, (FARPROC *)&pD3D10CreateDeviceAndSwapChain1, (FARPROC)extD3D10CreateDeviceAndSwapChain1}, {HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator }; FARPROC Remap_d3d8_ProcAddress(LPCSTR proc, HMODULE hModule) { FARPROC addr; //if (dxw.dwTargetDDVersion == HOOKDDRAWNONE) return NULL; if (addr=RemapLibraryEx(proc, hModule, d3d8Hooks)) return addr; return NULL; } FARPROC Remap_d3d9_ProcAddress(LPCSTR proc, HMODULE hModule) { FARPROC addr; //if (dxw.dwTargetDDVersion == HOOKDDRAWNONE) return NULL; if (addr=RemapLibraryEx(proc, hModule, d3d9Hooks)) return addr; if (dxw.dwFlags3 & SUPPRESSD3DEXT) if (addr=RemapLibraryEx(proc, hModule, d3d9Extra)) return addr; return NULL; } FARPROC Remap_d3d10_ProcAddress(LPCSTR proc, HMODULE hModule) { FARPROC addr; //if (dxw.dwTargetDDVersion == HOOKDDRAWNONE) return NULL; if (addr=RemapLibraryEx(proc, hModule, d3d10Hooks)) return addr; return NULL; } FARPROC Remap_d3d10_1_ProcAddress(LPCSTR proc, HMODULE hModule) { FARPROC addr; //if (dxw.dwTargetDDVersion == HOOKDDRAWNONE) return NULL; if (addr=RemapLibraryEx(proc, hModule, d3d10_1Hooks)) return addr; return NULL; } FARPROC Remap_d3d11_ProcAddress(LPCSTR proc, HMODULE hModule) { FARPROC addr; //if (dxw.dwTargetDDVersion == HOOKDDRAWNONE) return NULL; if (addr=RemapLibraryEx(proc, hModule, d3d11Hooks)) return addr; return NULL; } int HookDirect3D(HMODULE module, int version){ LPDIRECT3D9 lpd3d; ID3D10Device *lpd3d10; ID3D11Device *lpd3d11; HRESULT res; OutTraceDW("HookDirect3D: module=%x version=%d\n", module, version); switch(version){ case 0: HookLibraryEx(module, d3d8Hooks, "d3d8.dll"); HookLibraryEx(module, d3d9Hooks, "d3d9.dll"); #ifdef HOOKD3D10ANDLATER HookLibraryEx(module, d3d10Hooks, "d3d10.dll"); HookLibraryEx(module, d3d10_1Hooks, "d3d10_1.dll"); HookLibraryEx(module, d3d11Hooks, "d3d11.dll"); #endif break; case 8: PinLibraryEx(d3d8Hooks, "d3d8.dll"); // pin for "Port Royale 2" HookLibraryEx(module, d3d8Hooks, "d3d8.dll"); if(pDirect3DCreate8){ lpd3d = (LPDIRECT3D9)extDirect3DCreate8(220); if(lpd3d) lpd3d->Release(); } break; case 9: PinLibraryEx(d3d9Hooks, "d3d9.dll");// pin for "Affari tuoi" HookLibraryEx(module, d3d9Hooks, "d3d9.dll"); if(pDirect3DCreate9){ lpd3d = (LPDIRECT3D9)extDirect3DCreate9(31); if(lpd3d) lpd3d->Release(); } break; #ifdef HOOKD3D10ANDLATER case 10: PinLibraryEx(d3d10Hooks, "d3d10.dll"); PinLibraryEx(d3d10_1Hooks, "d3d10_1.dll"); HookLibraryEx(module, d3d10Hooks, "d3d10.dll"); HookLibraryEx(module, d3d10_1Hooks, "d3d10_1.dll"); if(pD3D10CreateDevice){ res = extD3D10CreateDevice( NULL, D3D10_DRIVER_TYPE_HARDWARE, NULL, 0, D3D10_SDK_VERSION, &lpd3d10); if(res==DD_OK) lpd3d10->Release(); } break; case 11: PinLibraryEx(d3d11Hooks, "d3d11.dll"); HookLibraryEx(module, d3d11Hooks, "d3d11.dll"); if(pD3D11CreateDevice){ D3D_FEATURE_LEVEL FeatureLevel; ID3D11DeviceContext *pImmediateContext; res = extD3D11CreateDevice( NULL, D3D_DRIVER_TYPE_HARDWARE, NULL, 0, // flags NULL, // FeatureLevels 0, D3D11_SDK_VERSION, &lpd3d11, &FeatureLevel, &pImmediateContext); if(res==DD_OK) lpd3d11->Release(); } #endif } if(pDirect3DCreate8 || pDirect3DCreate9) return 1; return 0; } void HookD3DDevice8(void** ppD3Ddev8) { OutTraceD3D("Device hook for IID_IDirect3DDevice8 interface\n"); SetHook((void *)(**(DWORD **)ppD3Ddev8 + 0), extQueryInterfaceDev8, (void **)&pQueryInterfaceDev8, "QueryInterface(D8)"); //SetHook((void *)(**(DWORD **)ppD3Ddev8 + 8), extReleaseDev8, (void **)&pReleaseDev8, "Release(D8)"); SetHook((void *)(**(DWORD **)ppD3Ddev8 + 12), extTestCooperativeLevel8, (void **)&pTestCooperativeLevel8, "TestCooperativeLevel(D8)"); SetHook((void *)(**(DWORD **)ppD3Ddev8 + 16), extGetAvailableTextureMem8, (void **)&pGetAvailableTextureMem8, "GetAvailableTextureMem(D8)"); SetHook((void *)(**(DWORD **)ppD3Ddev8 + 24), extGetDirect3D8, (void **)&pGetDirect3D8, "GetDirect3D(D8)"); SetHook((void *)(**(DWORD **)ppD3Ddev8 + 32), extGetDisplayMode8, (void **)&pGetDisplayMode8, "GetDisplayMode(D8)"); SetHook((void *)(**(DWORD **)ppD3Ddev8 + 44), extSetCursorPosition8, (void **)&pSetCursorPosition8, "SetCursorPosition(D8)"); SetHook((void *)(**(DWORD **)ppD3Ddev8 + 48), extShowCursor8, (void **)&pShowCursor8, "ShowCursor(D8)"); SetHook((void *)(**(DWORD **)ppD3Ddev8 + 52), extCreateAdditionalSwapChain8, (void **)&pCreateAdditionalSwapChain8, "CreateAdditionalSwapChain(D8)"); SetHook((void *)(**(DWORD **)ppD3Ddev8 + 56), extReset8, (void **)&pReset8, "Reset(D8)"); SetHook((void *)(**(DWORD **)ppD3Ddev8 + 60), extPresent8, (void **)&pPresent8, "Present(D8)"); SetHook((void *)(**(DWORD **)ppD3Ddev8 + 64), extGetBackBuffer8, (void **)&pGetBackBuffer8, "GetBackBuffer(D8)"); if(dxw.dwFlags2 & DISABLEGAMMARAMP){ SetHook((void *)(**(DWORD **)ppD3Ddev8 + 72), extSetGammaRamp8, (void **)&pSetGammaRamp8, "SetGammaRamp(D8)"); SetHook((void *)(**(DWORD **)ppD3Ddev8 + 76), extGetGammaRamp8, (void **)&pGetGammaRamp8, "GetGammaRamp(D8)"); } if(dxw.dwFlags5 & TEXTUREMASK){ SetHook((void *)(**(DWORD **)ppD3Ddev8 + 80), extCreateTexture8, (void **)&pCreateTexture8, "CreateTexture(D8)"); } SetHook((void *)(**(DWORD **)ppD3Ddev8 + 100), extCreateRenderTarget8, (void **)&pCreateRenderTarget8, "CreateRenderTarget(D8)"); SetHook((void *)(**(DWORD **)ppD3Ddev8 + 112), extCopyRects, (void **)&pCopyRects, "CopyRects(D8)"); SetHook((void *)(**(DWORD **)ppD3Ddev8 + 120), extGetFrontBuffer, (void **)&pGetFrontBuffer, "GetFrontBuffer(D8)"); SetHook((void *)(**(DWORD **)ppD3Ddev8 + 136), extBeginScene8, (void **)&pBeginScene8, "BeginScene(D8)"); SetHook((void *)(**(DWORD **)ppD3Ddev8 + 140), extEndScene8, (void **)&pEndScene8, "EndScene(D8)"); if((dxw.dwFlags2 & WIREFRAME) || (dxw.dwFlags4 & DISABLEFOGGING) || (dxw.dwFlags4 & ZBUFFERALWAYS) || (dxw.dwFlags5 & TEXTURETRANSP)){ SetHook((void *)(**(DWORD **)ppD3Ddev8 + 200), extSetRenderState8, (void **)&pSetRenderState8, "SetRenderState(D8)"); SetHook((void *)(**(DWORD **)ppD3Ddev8 + 204), extGetRenderState8, (void **)&pGetRenderState8, "GetRenderState(D8)"); if(dxw.dwFlags2 & WIREFRAME) (*pSetRenderState8)((void *)*ppD3Ddev8, D3DRS_FILLMODE, D3DFILL_WIREFRAME); if(dxw.dwFlags4 & DISABLEFOGGING) (*pSetRenderState8)((void *)*ppD3Ddev8, D3DRS_FOGENABLE, FALSE); if(dxw.dwFlags4 & ZBUFFERALWAYS) (*pSetRenderState8)((void *)*ppD3Ddev8, D3DRS_ZFUNC, D3DCMP_ALWAYS); //if(1) (*pSetRenderState8)((void *)*ppD3Ddev8, D3DRS_SPECULARENABLE, TRUE); } SetHook((void *)(**(DWORD **)ppD3Ddev8 + 208), extBeginStateBlock8, (void **)&pBeginStateBlock8, "BeginStateBlock(D8)"); SetHook((void *)(**(DWORD **)ppD3Ddev8 + 212), extEndStateBlock8, (void **)&pEndStateBlock8, "EndStateBlock(D8)"); if((dxw.dwFlags5 & TEXTUREMASK) || (dxw.dwFlags4 & NOTEXTURES)){ SetHook((void *)(**(DWORD **)ppD3Ddev8 + 244), extSetTexture8, (void **)&pSetTexture8, "SetTexture(D8)"); } } void HookD3DDevice9(void** ppD3Ddev9) { OutTraceD3D("Device hook for IID_IDirect3DDevice9 interface\n"); SetHook((void *)(**(DWORD **)ppD3Ddev9 + 0), extQueryInterfaceDev9, (void **)&pQueryInterfaceDev9, "QueryInterface(D9)"); //SetHook((void *)(**(DWORD **)ppD3Ddev9 + 8), extReleaseDev9, (void **)&pReleaseDev9, "Release(D9)"); SetHook((void *)(**(DWORD **)ppD3Ddev9 + 12), extTestCooperativeLevel9, (void **)&pTestCooperativeLevel9, "TestCooperativeLevel(D9)"); SetHook((void *)(**(DWORD **)ppD3Ddev9 + 16), extGetAvailableTextureMem9, (void **)&pGetAvailableTextureMem9, "GetAvailableTextureMem(D9)"); SetHook((void *)(**(DWORD **)ppD3Ddev9 + 24), extGetDirect3D9, (void **)&pGetDirect3D9, "GetDirect3D(D9)"); SetHook((void *)(**(DWORD **)ppD3Ddev9 + 32), extGetDisplayMode9, (void **)&pGetDisplayMode9, "GetDisplayMode(D9)"); SetHook((void *)(**(DWORD **)ppD3Ddev9 + 44), extSetCursorPosition9, (void **)&pSetCursorPosition9, "SetCursorPosition(D9)"); SetHook((void *)(**(DWORD **)ppD3Ddev9 + 48), extShowCursor9, (void **)&pShowCursor9, "ShowCursor(D9)"); SetHook((void *)(**(DWORD **)ppD3Ddev9 + 52), extCreateAdditionalSwapChain9, (void **)&pCreateAdditionalSwapChain9, "CreateAdditionalSwapChain(D9)"); SetHook((void *)(**(DWORD **)ppD3Ddev9 + 56), extGetSwapChain, (void **)&pGetSwapChain, "GetSwapChain(D9)"); SetHook((void *)(**(DWORD **)ppD3Ddev9 + 60), extGetNumberOfSwapChains, (void **)&pGetNumberOfSwapChains, "extGetNumberOfSwapChains(D9)"); SetHook((void *)(**(DWORD **)ppD3Ddev9 + 64), extReset9, (void **)&pReset9, "Reset(D9)"); SetHook((void *)(**(DWORD **)ppD3Ddev9 + 68), extPresent9, (void **)&pPresent9, "Present(D9)"); if(dxw.dwFlags2 & DISABLEGAMMARAMP){ SetHook((void *)(**(DWORD **)ppD3Ddev9 + 84), extSetGammaRamp9, (void **)&pSetGammaRamp9, "SetGammaRamp(D9)"); SetHook((void *)(**(DWORD **)ppD3Ddev9 + 88), extGetGammaRamp9, (void **)&pGetGammaRamp9, "GetGammaRamp(D9)"); } if(dxw.dwFlags5 & TEXTUREMASK){ SetHook((void *)(**(DWORD **)ppD3Ddev9 + 92), extCreateTexture9, (void **)&pCreateTexture9, "CreateTexture(D9)"); } #ifdef DXWNDDISABLEDHOOKS SetHook((void *)(**(DWORD **)ppD3Ddev9 + 120), extUpdateSurface, (void **)&pUpdateSurface, "UpdateSurface(D9)"); SetHook((void *)(**(DWORD **)ppD3Ddev9 + 124), extUpdateTexture, (void **)&pUpdateTexture, "UpdateTexture(D9)"); #endif //SetHook((void *)(**(DWORD **)ppD3Ddev9 + 112), extCreateRenderTarget9, (void **)&pCreateRenderTarget9, "CreateRenderTarget(D9)"); SetHook((void *)(**(DWORD **)ppD3Ddev9 + 164), extBeginScene9, (void **)&pBeginScene9, "BeginScene(D9)"); SetHook((void *)(**(DWORD **)ppD3Ddev9 + 168), extEndScene9, (void **)&pEndScene9, "EndScene(D9)"); //SetHook((void *)(**(DWORD **)ppD3Ddev9 +188), extSetViewport, (void **)&pSetViewport, "SetViewport(D9)"); //SetHook((void *)(**(DWORD **)ppD3Ddev9 +192), extGetViewport, (void **)&pGetViewport, "GetViewport(D9)"); if((dxw.dwFlags2 & WIREFRAME) || (dxw.dwFlags4 & DISABLEFOGGING) || (dxw.dwFlags4 & ZBUFFERALWAYS) || (dxw.dwFlags5 & TEXTURETRANSP)){ SetHook((void *)(**(DWORD **)ppD3Ddev9 + 228), extSetRenderState9, (void **)&pSetRenderState9, "SetRenderState(D9)"); SetHook((void *)(**(DWORD **)ppD3Ddev9 + 232), extGetRenderState9, (void **)&pGetRenderState9, "GetRenderState(D9)"); if(dxw.dwFlags2 & WIREFRAME) (*pSetRenderState9)((void *)*ppD3Ddev9, D3DRS_FILLMODE, D3DFILL_WIREFRAME); if(dxw.dwFlags4 & DISABLEFOGGING) (*pSetRenderState9)((void *)*ppD3Ddev9, D3DRS_FOGENABLE, FALSE); if(dxw.dwFlags4 & ZBUFFERALWAYS) (*pSetRenderState9)((void *)*ppD3Ddev9, D3DRS_ZFUNC, D3DCMP_ALWAYS); //if(1) (*pSetRenderState9)((void *)*ppD3Ddev9, D3DRS_SPECULARENABLE, TRUE); } SetHook((void *)(**(DWORD **)ppD3Ddev9 + 240), extBeginStateBlock9, (void **)&pBeginStateBlock9, "BeginStateBlock(D9)"); SetHook((void *)(**(DWORD **)ppD3Ddev9 + 244), extEndStateBlock9, (void **)&pEndStateBlock9, "EndStateBlock(D9)"); if((dxw.dwFlags5 & TEXTUREMASK) || (dxw.dwFlags4 & NOTEXTURES)){ SetHook((void *)(**(DWORD **)ppD3Ddev9 + 260), extSetTexture9, (void **)&pSetTexture9, "SetTexture(D9)"); } } // WIP void HookD3DTexture8(void** ppD3Dtex8) { OutTraceD3D("Device hook for IDirect3DTexture8 interface\n"); SetHook((void *)(**(DWORD **)ppD3Dtex8 + 64), extLockRect8, (void **)&pLockRect8, "LockRect(D8)"); SetHook((void *)(**(DWORD **)ppD3Dtex8 + 68), extUnlockRect8, (void **)&pUnlockRect8, "UnlockRect(D8)"); } void HookD3DTexture9(void** ppD3Dtex9) { OutTraceD3D("Device hook for IDirect3DTexture9 interface\n"); SetHook((void *)(**(DWORD **)ppD3Dtex9 + 76), extLockRect9, (void **)&pLockRect9, "LockRect(T9)"); SetHook((void *)(**(DWORD **)ppD3Dtex9 + 80), extUnlockRect9, (void **)&pUnlockRect9, "UnlockRect(T9)"); } void HookDirect3D8(void *lpd3d) { SetHook((void *)(*(DWORD *)lpd3d + 0), extQueryInterfaceD3D8, (void **)&pQueryInterfaceD3D8, "QueryInterface(D8)"); SetHook((void *)(*(DWORD *)lpd3d + 16), extGetAdapterCount8, (void **)&pGetAdapterCount8, "GetAdapterCount(D8)"); SetHook((void *)(*(DWORD *)lpd3d + 20), extGetAdapterIdentifier8, (void **)&pGetAdapterIdentifier8, "GetAdapterIdentifier(D8)"); SetHook((void *)(*(DWORD *)lpd3d + 24), extGetAdapterModeCount8, (void **)&pGetAdapterModeCount8, "GetAdapterGetAdapterModeCount(D8)"); SetHook((void *)(*(DWORD *)lpd3d + 28), extEnumAdapterModes8, (void **)&pEnumAdapterModes8, "EnumAdapterModes(D8)"); SetHook((void *)(*(DWORD *)lpd3d + 32), extGetAdapterDisplayMode8, (void **)&pGetAdapterDisplayMode8, "GetAdapterDisplayMode(D8)"); SetHook((void *)(*(DWORD *)lpd3d + 36), extCheckDeviceType8, (void **)&pCheckDeviceType8, "CheckDeviceType(D8)"); SetHook((void *)(*(DWORD *)lpd3d + 52), extD3DGetDeviceCaps8, (void **)&pD3DGetDeviceCaps8, "GetDeviceCaps(D8)"); SetHook((void *)(*(DWORD *)lpd3d + 56), extGetAdapterMonitor8, (void **)&pGetAdapterMonitor8, "GetAdapterMonitor(D8)"); SetHook((void *)(*(DWORD *)lpd3d + 60), extCreateDevice8, (void **)&pCreateDevice8, "CreateDevice(D8)"); } void HookDirect3D9(void *lpd3d, BOOL ex) { SetHook((void *)(*(DWORD *)lpd3d + 0), extQueryInterfaceD3D9, (void **)&pQueryInterfaceD3D9, "QueryInterface(D9)"); SetHook((void *)(*(DWORD *)lpd3d + 16), extGetAdapterCount9, (void **)&pGetAdapterCount9, "GetAdapterCount(D9)"); SetHook((void *)(*(DWORD *)lpd3d + 20), extGetAdapterIdentifier9, (void **)&pGetAdapterIdentifier9, "GetAdapterIdentifier(D9)"); SetHook((void *)(*(DWORD *)lpd3d + 24), extGetAdapterModeCount9, (void **)&pGetAdapterModeCount9, "GetAdapterGetAdapterModeCount(D9)"); SetHook((void *)(*(DWORD *)lpd3d + 28), extEnumAdapterModes9, (void **)&pEnumAdapterModes9, "EnumAdapterModes(D9)"); SetHook((void *)(*(DWORD *)lpd3d + 32), extGetAdapterDisplayMode9, (void **)&pGetAdapterDisplayMode9, "GetAdapterDisplayMode(D9)"); SetHook((void *)(*(DWORD *)lpd3d + 36), extCheckDeviceType9, (void **)&pCheckDeviceType9, "CheckDeviceType(D9)"); SetHook((void *)(*(DWORD *)lpd3d + 56), extD3DGetDeviceCaps9, (void **)&pD3DGetDeviceCaps9, "GetDeviceCaps(D9)"); SetHook((void *)(*(DWORD *)lpd3d + 60), extGetAdapterMonitor9, (void **)&pGetAdapterMonitor9, "GetAdapterMonitor(D9)"); SetHook((void *)(*(DWORD *)lpd3d + 64), extCreateDevice9, (void **)&pCreateDevice9, "CreateDevice(D9)"); if(ex) SetHook((void *)(*(DWORD *)lpd3d + 80), extCreateDeviceEx, (void **)&pCreateDeviceEx, "CreateDeviceEx(D9)"); } typedef enum { TYPE_OBJECT_UNKNOWN = 0, TYPE_OBJECT_DIRECT3D, TYPE_OBJECT_DIRECT3DDEVICE, TYPE_OBJECT_GAMMARAMP, TYPE_OBJECT_BASETEXTURE, TYPE_OBJECT_TEXTURE, TYPE_OBJECT_3DSURFACE, TYPE_OBJECT_VIEWPORT }; static HRESULT WINAPI QueryInterfaceD3D(int d3dversion, QueryInterface_Type pQueryInterfaceD3D, void *obj, REFIID riid, void** ppvObj) { HRESULT res; int iObjectType; int iObjectVersion; BOOL bEx = FALSE; iObjectVersion = 0; iObjectType = TYPE_OBJECT_UNKNOWN; OutTraceD3D("D3D::QueryInterface(%d): d3d=%x riid=%x(%s)\n", d3dversion, obj, riid.Data1, ExplainGUID((GUID *)&riid)); switch(riid.Data1){ // DirectDraw case 0x1dd9e8da: //IID_IDirect3D8 iObjectType=TYPE_OBJECT_DIRECT3D; iObjectVersion=8; break; case 0x81bdcbca: // IID_IDirect3D9 iObjectType=TYPE_OBJECT_DIRECT3D; iObjectVersion=9; break; case 0x02177241: // IID_IDirect3D9Ex iObjectType=TYPE_OBJECT_DIRECT3D; iObjectVersion=9; bEx=TRUE; break; case 0x7385e5df: // IID_IDirect3DDevice8 iObjectType=TYPE_OBJECT_DIRECT3DDEVICE; iObjectVersion=8; break; case 0xd0223b96: // IID_IDirect3DDevice9 iObjectType=TYPE_OBJECT_DIRECT3DDEVICE; iObjectVersion=9; break; case 0xb18b10ce: // IID_IDirect3DDevice9Ex iObjectType=TYPE_OBJECT_DIRECT3DDEVICE; iObjectVersion=9; bEx=TRUE; break; // !!!! case 0xb4211cfa: // IID_IDirect3DBaseTexture8 iObjectType=TYPE_OBJECT_BASETEXTURE; iObjectVersion=8; break; case 0xe4cdd575: // IID_IDirect3DTexture8 iObjectType=TYPE_OBJECT_TEXTURE; iObjectVersion=8; break; case 0x580ca87e: // IID_IDirect3DBaseTexture9 iObjectType=TYPE_OBJECT_BASETEXTURE; iObjectVersion=9; break; case 0x85c31227: // IID_IDirect3DTexture9 iObjectType=TYPE_OBJECT_TEXTURE; iObjectVersion=9; break; case 0xb96eebca: // IID_IDirect3DSurface8 iObjectType=TYPE_OBJECT_3DSURFACE; iObjectVersion=8; break; case 0x0cfbaf3a: // IID_IDirect3DSurface9 iObjectType=TYPE_OBJECT_3DSURFACE; iObjectVersion=9; break; } /* IID_IDirect3DDevice9Video */ // {26DC4561-A1EE-4ae7-96DA-118A36C0EC95} // DEFINE_GUID(IID_IDirect3DDevice9Video, 0x26dc4561, 0xa1ee, 0x4ae7, 0x96, 0xda, 0x11, 0x8a, 0x36, 0xc0, 0xec, 0x95); char *sLabel; switch(iObjectType){ case TYPE_OBJECT_DIRECT3D: sLabel = "IID_IDirect3D"; break; case TYPE_OBJECT_DIRECT3DDEVICE: sLabel = "IID_IDirect3DDevice"; break; case TYPE_OBJECT_BASETEXTURE: sLabel = "IID_IDirect3DBaseTexture"; break; case TYPE_OBJECT_TEXTURE: sLabel = "IID_IDirect3DTexture"; break; case TYPE_OBJECT_3DSURFACE: sLabel = "IID_IDirect3DSurface"; break; case TYPE_OBJECT_UNKNOWN: default: sLabel = "(unknown)"; break; } OutTraceDW("D3D::QueryInterface: Got interface for %s version %d\n", sLabel, iObjectVersion); res=pQueryInterfaceD3D(obj, riid, ppvObj); if(res) { OutTraceDW("D3D::QueryInterface ERROR: obj=%x REFIID=%x obp=%x ret=%x(%s)\n", obj, riid.Data1, *ppvObj, res, ExplainDDError(res)); return res; } if (! *ppvObj) { OutTraceDW("D3D::QueryInterface: Interface for object %x not found\n", riid.Data1); return res; } // added trace OutTraceDW("D3D::QueryInterface: obj=%x REFIID=%x obp=%x obj=%s version=%d ret=0\n", obj, riid.Data1, *ppvObj, sLabel, iObjectVersion); if(iObjectVersion == 8){ switch(iObjectType){ case TYPE_OBJECT_DIRECT3D: HookDirect3D8(ppvObj); break; case TYPE_OBJECT_DIRECT3DDEVICE: HookD3DDevice8(ppvObj); break; case TYPE_OBJECT_TEXTURE: HookD3DTexture8(ppvObj); break; } } else{ // 9! switch(iObjectType){ case TYPE_OBJECT_DIRECT3D: HookDirect3D9(ppvObj, bEx); break; case TYPE_OBJECT_DIRECT3DDEVICE: HookD3DDevice9(ppvObj); break; case TYPE_OBJECT_TEXTURE: HookD3DTexture9(ppvObj); break; } } OutTraceD3D("D3D::QueryInterface: obp=%x\n", *ppvObj); return res; } HRESULT WINAPI extQueryInterfaceD3D8(void *obj, REFIID riid, void** ppvObj) { return QueryInterfaceD3D(8, pQueryInterfaceD3D8, obj, riid, ppvObj); } HRESULT WINAPI extQueryInterfaceDev8(void *obj, REFIID riid, void** ppvObj) { return QueryInterfaceD3D(8, pQueryInterfaceDev8, obj, riid, ppvObj); } HRESULT WINAPI extQueryInterfaceD3D9(void *obj, REFIID riid, void** ppvObj) { return QueryInterfaceD3D(9, pQueryInterfaceD3D9, obj, riid, ppvObj); } HRESULT WINAPI extQueryInterfaceDev9(void *obj, REFIID riid, void** ppvObj) { return QueryInterfaceD3D(9, pQueryInterfaceDev9, obj, riid, ppvObj); } BOOL WINAPI extDisableD3DSpy(void) { if(TRUE) return FALSE; return (*pDisableD3DSpy)(); } void* WINAPI extDirect3DCreate8(UINT sdkversion) { void *lpd3d; OutTraceD3D("Direct3DCreate8: sdkversion=%x\n", sdkversion); lpd3d = (*pDirect3DCreate8)(sdkversion); if(!lpd3d) { OutTraceE("Direct3DCreate8: ERROR err=%d\n", GetLastError()); return 0; } dwD3DVersion = 8; HookDirect3D8(lpd3d); OutTraceD3D("Direct3DCreate8: d3d=%x\n", lpd3d); return lpd3d; } static char *ExplainD3DBehaviourFlags(DWORD c) { static char eb[256]; unsigned int l; strcpy(eb,"D3DCREATE_"); if (c & D3DCREATE_FPU_PRESERVE) strcat(eb, "FPU_PRESERVE+"); if (c & D3DCREATE_MULTITHREADED) strcat(eb, "MULTITHREADED+"); if (c & D3DCREATE_PUREDEVICE) strcat(eb, "PUREDEVICE+"); if (c & D3DCREATE_SOFTWARE_VERTEXPROCESSING) strcat(eb, "SOFTWARE_VERTEXPROCESSING+"); if (c & D3DCREATE_HARDWARE_VERTEXPROCESSING) strcat(eb, "HARDWARE_VERTEXPROCESSING+"); if (c & D3DCREATE_MIXED_VERTEXPROCESSING) strcat(eb, "MIXED_VERTEXPROCESSING+"); if (c & D3DCREATE_DISABLE_DRIVER_MANAGEMENT) strcat(eb, "DISABLE_DRIVER_MANAGEMENT+"); if (c & D3DCREATE_ADAPTERGROUP_DEVICE) strcat(eb, "ADAPTERGROUP_DEVICE+"); if (c & D3DCREATE_DISABLE_DRIVER_MANAGEMENT_EX) strcat(eb, "DISABLE_DRIVER_MANAGEMENT_EX+"); l=strlen(eb); if (l>strlen("D3DCREATE_")) eb[l-1]=0; // delete last '+' if any else eb[0]=0; return(eb); } void* WINAPI extDirect3DCreate9(UINT sdkversion) { void *lpd3d; OutTraceD3D("Direct3DCreate9: sdkversion=%x\n", sdkversion); lpd3d = (*pDirect3DCreate9)(sdkversion); if(!lpd3d) { OutTraceE("Direct3DCreate9: ERROR err=%d\n", GetLastError()); return 0; } dwD3DVersion = 9; HookDirect3D9(lpd3d, FALSE); OutTraceD3D("Direct3DCreate9: d3d=%x\n", lpd3d); return lpd3d; } HRESULT WINAPI extDirect3DCreate9Ex(UINT sdkversion, IDirect3D9Ex **ppD3D) { void *lpd3d; HRESULT res; OutTraceD3D("Direct3DCreate9Ex: sdkversion=%x\n", sdkversion); res = (*pDirect3DCreate9Ex)(sdkversion, ppD3D); if(res) { OutTraceE("Direct3DCreate9Ex: ERROR res=%x(%s)\n", res, ExplainDDError(res)); return res; } dwD3DVersion = 9; lpd3d = *ppD3D; HookDirect3D9(lpd3d, TRUE); OutTraceD3D("Direct3DCreate9Ex: d3d=%x\n", lpd3d); return res; } UINT WINAPI extGetAdapterCount8(void *lpd3d) { UINT res; res=(*pGetAdapterCount8)(lpd3d); OutTraceD3D("GetAdapterCount(8): count=%d\n", res); if(dxw.dwFlags2 & HIDEMULTIMONITOR) { OutTraceD3D("GetAdapterCount: HIDEMULTIMONITOR count=1\n"); res=1; } return res; } UINT WINAPI extGetAdapterCount9(void *lpd3d) { UINT res; res=(*pGetAdapterCount9)(lpd3d); OutTraceD3D("GetAdapterCount(9): count=%d\n", res); if(dxw.dwFlags2 & HIDEMULTIMONITOR) { OutTraceD3D("GetAdapterCount: HIDEMULTIMONITOR count=1\n"); res=1; } return res; } HRESULT WINAPI extGetAdapterIdentifier8(void *pd3dd, UINT Adapter, DWORD Flags, D3DADAPTER_IDENTIFIER9 *pIdentifier) { HRESULT res; OutTraceD3D("GetAdapterIdentifier(8): Adapter=%d flags=%x\n", Adapter, Flags); res=pGetAdapterIdentifier8(pd3dd, Adapter, Flags, pIdentifier); OutTraceD3D("GetAdapterIdentifier(8): ret=%x\n", res); //if(pIdentifier){ // OutTraceD3D("\tDriver=%s\n", pIdentifier->Driver); // OutTraceD3D("\tDescription=%s\n", pIdentifier->Description); // OutTraceD3D("\tDeviceName=%s\n", pIdentifier->DeviceName); // OutTraceD3D("\tVersion=%x\n", pIdentifier->DriverVersion); //} return res; } HRESULT WINAPI extGetAdapterIdentifier9(void *pd3dd, UINT Adapter, DWORD Flags, D3DADAPTER_IDENTIFIER9 *pIdentifier) { HRESULT res; OutTraceD3D("GetAdapterIdentifier(9): Adapter=%d flags=%x\n", Adapter, Flags); res=pGetAdapterIdentifier9(pd3dd, Adapter, Flags, pIdentifier); OutTraceD3D("GetAdapterIdentifier(9): ret=%x\n", res); if(pIdentifier){ OutTraceD3D("\tDriver=%s\n", pIdentifier->Driver); OutTraceD3D("\tDescription=%s\n", pIdentifier->Description); OutTraceD3D("\tDeviceName=%s\n", pIdentifier->DeviceName); OutTraceD3D("\tVersion=%x\n", pIdentifier->DriverVersion); OutTraceD3D("\tVendorId=%x\n", pIdentifier->VendorId); OutTraceD3D("\tDeviceId=%x\n", pIdentifier->DeviceId); OutTraceD3D("\tSubSysId=%x\n", pIdentifier->SubSysId); OutTraceD3D("\tWHQLLevel=%x\n", pIdentifier->WHQLLevel); } return res; } static char *ExplainSwapEffect(DWORD f) { char *s; switch(f){ case D3DSWAPEFFECT_DISCARD: s="DISCARD"; break; case D3DSWAPEFFECT_FLIP: s="FLIP"; break; case D3DSWAPEFFECT_COPY: s="COPY"; break; case D3DSWAPEFFECT_OVERLAY: s="OVERLAY"; break; case D3DSWAPEFFECT_FLIPEX: s="FLIPEX"; break; default: s="unknown"; break; } return s; } static HRESULT WINAPI extReset(int dwD3DVersion, void *pd3dd, D3DPRESENT_PARAMETERS* pPresParam) { HRESULT res; DWORD param[64], *tmp; D3DDISPLAYMODE mode; DWORD Windowed; void *pD3D; Reset_Type pReset; memcpy(param, pPresParam, (dwD3DVersion == 9)?56:52); dxw.SetScreenSize(param[0], param[1]); if(IsTraceD3D){ tmp = param; DWORD SwapEffect; OutTrace("D3D%d::Reset\n", dwD3DVersion); OutTrace(" BackBufferWidth = %i\n", *(tmp ++)); OutTrace(" BackBufferHeight = %i\n", *(tmp ++)); OutTrace(" BackBufferFormat = %i(%s)\n", *(tmp ++), ExplainD3DSurfaceFormat(param[2])); OutTrace(" BackBufferCount = %i\n", *(tmp ++)); OutTrace(" MultiSampleType = %i\n", *(tmp ++)); if(dwD3DVersion == 9) OutTrace(" MultiSampleQuality = %i\n", *(tmp ++)); SwapEffect = *(tmp ++); OutTrace(" SwapEffect = 0x%x(%s)\n", SwapEffect, ExplainSwapEffect(SwapEffect)); OutTrace(" hDeviceWindow = 0x%x\n", *(tmp ++)); OutTrace(" Windowed = %i\n", *(tmp ++)); OutTrace(" EnableAutoDepthStencil = %i\n", *(tmp ++)); OutTrace(" AutoDepthStencilFormat = %i\n", *(tmp ++)); OutTrace(" Flags = 0x%x\n", *(tmp ++)); OutTrace(" FullScreen_RefreshRateInHz = %i\n", *(tmp ++)); OutTrace(" PresentationInterval = 0x%x\n", *(tmp ++)); } Windowed = (dwD3DVersion == 8) ? param[7] : param[8]; pReset = (dwD3DVersion == 8) ? pReset8 : pReset9; if(dxw.Windowize){ if(Windowed) { // do not attempt to reset when returning to windowed mode: it is useless (you are windowed already) // and the code below (GetDirect3D, ...) doesn't work. OutTraceD3D("SKIPPED!\n"); return DD_OK; } if (dwD3DVersion == 9){ res=(*pGetDirect3D9)(pd3dd, &pD3D); if(res) { OutTraceD3D("GetDirect3D FAILED! %x\n", res); return(DD_OK); } OutTraceD3D("GetDirect3D pd3d=%x\n", pD3D); res=(*pGetAdapterDisplayMode9)(pD3D, 0, &mode); if(res) { OutTraceD3D("GetAdapterDisplayMode FAILED! %x\n", res); return(DD_OK); } if(dxw.dwFlags6 & FORCESWAPEFFECT) param[6] = dxw.SwapEffect; //Swap effect; dwD3DSwapEffect = param[6]; param[7] = 0; //hDeviceWindow dxw.SetFullScreen(~param[8]?TRUE:FALSE); param[8] = 1; //Windowed //param[11] = D3DPRESENTFLAG_DEVICECLIP; //Flags; param[12] = 0; //FullScreen_RefreshRateInHz; param[13] = D3DPRESENT_INTERVAL_DEFAULT; //PresentationInterval } else{ res=(*pGetDirect3D8)(pd3dd, &pD3D); if(res) { OutTraceD3D("GetDirect3D FAILED! %x\n", res); return(DD_OK); } OutTraceD3D("GetDirect3D pd3d=%x\n", pD3D); res=(*pGetAdapterDisplayMode8)(pD3D, 0, &mode); if(res) { OutTraceD3D("GetAdapterDisplayMode FAILED! %x\n", res); return(DD_OK); } if(dxw.dwFlags6 & FORCESWAPEFFECT) param[5] = dxw.SwapEffect; //Swap effect; dwD3DSwapEffect = param[5]; param[6] = 0; //hDeviceWindow dxw.SetFullScreen(~param[7]?TRUE:FALSE); param[7] = 1; //Windowed //param[10] = D3DPRESENTFLAG_DEVICECLIP; //Flags; param[11] = 0; //FullScreen_RefreshRateInHz; param[12] = D3DPRESENT_INTERVAL_DEFAULT; //PresentationInterval } } if((dxw.dwFlags8 & D3D8BACK16) && (dwD3DVersion == 8)){ D3DPRESENT_PARAMETERS *params = (D3DPRESENT_PARAMETERS *)¶m[0]; dwD3D8ShutdownEmulation(pd3dd); // Change the presentation effect from D3DSWAPEFFECT_COPY to D3DSWAPEFFECT_DISCARD to fix blank screen on W10. params->SwapEffect = D3DSWAPEFFECT_DISCARD; // Drop the lockable backbuffer flag to be safe. We do not need it. params->Flags &= ~D3DPRESENTFLAG_LOCKABLE_BACKBUFFER; } if(!(dxw.dwFlags4 & NOD3DRESET)){ res = (*pReset)(pd3dd, (D3DPRESENT_PARAMETERS *)param); if(res){ OutTraceD3D("err=%x(%s) switching to mode=%d(%s)\n", res, ExplainDDError(res), mode.Format, ExplainD3DSurfaceFormat(mode.Format)); param[2] = mode.Format; // first attempt: current screen mode res = (*pReset)(pd3dd, (D3DPRESENT_PARAMETERS *)param); } if(res){ OutTraceD3D("switching to mode=D3DFMT_UNKNOWN\n"); param[2] = D3DFMT_UNKNOWN; // second attempt: unknown, good for windowed mode res = (*pReset)(pd3dd, (D3DPRESENT_PARAMETERS *)param); } if(res == D3DERR_INVALIDCALL){ OutTraceD3D("FAILED! D3DERR_INVALIDCALL\n", res); return D3DERR_INVALIDCALL; } if(res){ OutTraceD3D("FAILED! %x(%s)\n", res, ExplainDDError(res)); return res; } OutTraceD3D("SUCCESS!\n"); (dwD3DVersion == 8) ? HookD3DDevice8(&pd3dd) : HookD3DDevice9(&pd3dd); } else{ OutTraceD3D("SKIPPED!\n"); res=D3D_OK; } if((dxw.dwFlags8 & D3D8BACK16) && (dwD3DVersion == 8)){ dwD3D8InitEmulation(pd3dd); if(res) OutTraceE("Reset: dwD3D8InitEmulation ERROR: err=%x(%s)\n", res, ExplainDDError(res)); } dxw.SetScreenSize(pPresParam->BackBufferWidth, pPresParam->BackBufferHeight); dxw.SetVSyncDelays(mode.RefreshRate); GetHookInfo()->IsFullScreen = dxw.IsFullScreen(); GetHookInfo()->DXVersion=(short)dwD3DVersion; GetHookInfo()->Height=(short)dxw.GetScreenHeight(); GetHookInfo()->Width=(short)dxw.GetScreenWidth(); GetHookInfo()->ColorDepth=(short)dxw.VirtualPixelFormat.dwRGBBitCount; return D3D_OK; } HRESULT WINAPI extReset8(void *pd3dd, D3DPRESENT_PARAMETERS* pPresParam) { return extReset(8, pd3dd, pPresParam); } HRESULT WINAPI extReset9(void *pd3dd, D3DPRESENT_PARAMETERS* pPresParam) { return extReset(9, pd3dd, pPresParam); } static HRESULT WINAPI extPresent(int d3dversion, Present_Type pPresent, void *pd3dd, CONST RECT *pSourceRect, CONST RECT *pDestRect, HWND hDestWindowOverride, CONST RGNDATA *pDirtyRegion) { HRESULT res; RECT RemappedSrcRect, RemappedDstRect; if(IsDebug){ char sSourceRect[81]; char sDestRect[81]; if (pSourceRect) sprintf_s(sSourceRect, 80, "(%d,%d)-(%d,%d)", pSourceRect->left, pSourceRect->top, pSourceRect->right, pSourceRect->bottom); else strcpy(sSourceRect, "(NULL)"); if (pDestRect) sprintf_s(sDestRect, 80, "(%d,%d)-(%d,%d)", pDestRect->left, pDestRect->top, pDestRect->right, pDestRect->bottom); else strcpy(sDestRect, "(NULL)"); OutTraceB("Present(%d): d3dd=%x SourceRect=%s DestRect=%s hDestWndOverride=%x dirtyregion=%x\n", d3dversion, pd3dd, sSourceRect, sDestRect, hDestWindowOverride, pDirtyRegion); } // frame counter handling.... if (dxw.HandleFPS()) return D3D_OK; if (dxw.dwFlags1 & SAVELOAD) dxw.VSyncWait(); if((dxw.dwFlags8 & D3D8BACK16) && (d3dversion == 8)){ res = dwD3D8Present(pd3dd, pSourceRect, pDestRect, hDestWindowOverride, pDirtyRegion); OutTraceD3D("Present: EMULATION res=%x\n", res); } if(dxw.dwFlags2 & FULLRECTBLT) pSourceRect = pDestRect = NULL; if(dxw.Windowize){ // v2.03.15 - fix target RECT region if ((dwD3DSwapEffect == D3DSWAPEFFECT_COPY) && (dxw.dwFlags2 & KEEPASPECTRATIO)) { RemappedDstRect=dxw.MapClientRect((LPRECT)pDestRect); pDestRect = &RemappedDstRect; OutTraceB("Present: FIXED DestRect=(%d,%d)-(%d,%d)\n", RemappedDstRect.left, RemappedDstRect.top, RemappedDstRect.right, RemappedDstRect.bottom); } // in case of NOD3DRESET, remap source rect. Unfortunately, this doesn't work in fullscreen mode .... if((dxw.dwFlags4 & NOD3DRESET) && (pSourceRect == NULL)){ RemappedSrcRect = dxw.GetScreenRect(); pSourceRect = &RemappedSrcRect; OutTraceB("Present: NOD3DRESET FIXED SourceRect=(%d,%d)-(%d,%d)\n", RemappedSrcRect.left, RemappedSrcRect.top, RemappedSrcRect.right, RemappedSrcRect.bottom); } } res=(*pPresent)(pd3dd, pSourceRect, pDestRect, hDestWindowOverride, pDirtyRegion); if(res) { OutTraceE("Present: err=%x(%s)\n", res, ExplainDDError(res)); } else { if(IsDebug){ if(pDirtyRegion) { OutTrace("Present: D3D_OK dirtyreg={buf=%x type=%d count=%d rgnsize=%x bound=(%d,%d)-(%d,%d)}\n", pDirtyRegion->Buffer, pDirtyRegion->rdh.iType, pDirtyRegion->rdh.nCount, pDirtyRegion->rdh.nRgnSize, pDirtyRegion->rdh.rcBound.left, pDirtyRegion->rdh.rcBound.top, pDirtyRegion->rdh.rcBound.right, pDirtyRegion->rdh.rcBound.bottom); } else { OutTrace("Present: D3D_OK\n"); } } } dxw.ShowOverlay(); return res; } HRESULT WINAPI extPresent8(void *pd3dd, CONST RECT *pSourceRect, CONST RECT *pDestRect, HWND hDestWindowOverride, CONST RGNDATA *pDirtyRegion) { return extPresent(8, pPresent8, pd3dd, pSourceRect, pDestRect, hDestWindowOverride, pDirtyRegion); } HRESULT WINAPI extPresent9(void *pd3dd, CONST RECT *pSourceRect, CONST RECT *pDestRect, HWND hDestWindowOverride, CONST RGNDATA *pDirtyRegion) { return extPresent(9, pPresent9, pd3dd, pSourceRect, pDestRect, hDestWindowOverride, pDirtyRegion); } HRESULT WINAPI extGetDisplayMode8(void *lpd3d, D3DDISPLAYMODE *pMode) { HRESULT res; res=(*pGetDisplayMode8)(lpd3d, pMode); OutTraceD3D("GetDisplayMode(8): size=(%dx%d) RefreshRate=%d Format=%d\n", pMode->Width, pMode->Height, pMode->RefreshRate, pMode->Format); if(dxw.dwFlags2 & KEEPASPECTRATIO){ pMode->Width=dxw.iSizX; pMode->Height=dxw.iSizY; } else{ pMode->Width = dxw.GetScreenWidth(); pMode->Height = dxw.GetScreenHeight(); } OutTraceD3D("GetDisplayMode(8): fixed size=(%dx%d)\n", pMode->Width, pMode->Height); dxw.SetVSyncDelays(pMode->RefreshRate); return res; } HRESULT WINAPI extGetDisplayMode9(void *lpd3d, UINT iSwapChain, D3DDISPLAYMODE *pMode) { HRESULT res; res=(*pGetDisplayMode9)(lpd3d, iSwapChain, pMode); OutTraceD3D("GetDisplayMode(9): SwapChain=%d size=(%dx%d) RefreshRate=%d Format=%d\n", iSwapChain, pMode->Width, pMode->Height, pMode->RefreshRate, pMode->Format); if(dxw.dwFlags2 & KEEPASPECTRATIO){ pMode->Width=dxw.iSizX; pMode->Height=dxw.iSizY; } else{ pMode->Width = dxw.GetScreenWidth(); pMode->Height = dxw.GetScreenHeight(); } OutTraceD3D("GetDisplayMode(9): fixed size=(%dx%d)\n", pMode->Width, pMode->Height); dxw.SetVSyncDelays(pMode->RefreshRate); return res; } HRESULT WINAPI extEnumAdapterModes8(void *lpd3d, UINT Adapter, UINT Mode, D3DDISPLAYMODE* pMode) { HRESULT res; OutTraceD3D("EnumAdapterModes(8): adapter=%d mode=%d pMode=%x\n", Adapter, Mode, pMode); if(dxw.dwFlags7 & ENUM16BITMODES){ res=(*pEnumAdapterModes8)(lpd3d, Adapter, Mode/2, pMode); if((res == D3D_OK) && (Mode % 2)){ pMode->Format = (dxw.dwFlags1 & USERGB565)? D3DFMT_R5G6B5 : D3DFMT_A1R5G5B5; } } else res=(*pEnumAdapterModes8)(lpd3d, Adapter, Mode, pMode); if(res) { OutTraceE("EnumAdapterModes ERROR: err=%x(%s)\n", res, ExplainDDError(res)); } else { OutTraceD3D("EnumAdapterModes(8): res=(%dx%d) refresh=%dHz format=%d(%s)\n", pMode->Width, pMode->Height, pMode->RefreshRate, pMode->Format, ExplainD3DSurfaceFormat(pMode->Format)); } return res; } HRESULT WINAPI extEnumAdapterModes9(void *lpd3d, UINT Adapter, D3DFORMAT Format, UINT Mode, D3DDISPLAYMODE* pMode) { HRESULT res; OutTraceD3D("EnumAdapterModes(9): adapter=%d format=%x mode=%d pMode=%x\n", Adapter, Format, Mode, pMode); if(dxw.dwFlags7 & ENUM16BITMODES){ res=(*pEnumAdapterModes9)(lpd3d, Adapter, Format, Mode/2, pMode); if((res == D3D_OK) && (Mode % 2)){ pMode->Format = (dxw.dwFlags1 & USERGB565)? D3DFMT_R5G6B5 : D3DFMT_A1R5G5B5; } } else res=(*pEnumAdapterModes9)(lpd3d, Adapter, Format, Mode, pMode); if(res) { OutTraceE("EnumAdapterModes ERROR: err=%x(%s)\n", res, ExplainDDError(res)); } else { OutTraceD3D("EnumAdapterModes(9): res=(%dx%d) refresh=%dHz format=%d(%s)\n", pMode->Width, pMode->Height, pMode->RefreshRate, pMode->Format, ExplainD3DSurfaceFormat(pMode->Format)); } return res; } HRESULT WINAPI extGetAdapterDisplayMode(int d3dversion, GetAdapterDisplayMode_Type pGetAdapterDisplayMode, void *lpd3d, UINT Adapter, D3DDISPLAYMODE *pMode) { HRESULT res; res=(*pGetAdapterDisplayMode)(lpd3d, Adapter, pMode); OutTraceD3D("GetAdapterDisplayMode(%d): size=(%dx%d) RefreshRate=%d Format=%d(%s)\n", d3dversion, pMode->Width, pMode->Height, pMode->RefreshRate, pMode->Format, ExplainD3DSurfaceFormat(pMode->Format)); if(dxw.dwFlags2 & KEEPASPECTRATIO){ pMode->Width=dxw.iSizX; pMode->Height=dxw.iSizY; } else{ pMode->Width = dxw.GetScreenWidth(); pMode->Height = dxw.GetScreenHeight(); } OutTraceD3D("GetAdapterDisplayMode: fixed size=(%dx%d)\n", pMode->Width, pMode->Height); dxw.SetVSyncDelays(pMode->RefreshRate); return res; } HRESULT WINAPI extGetAdapterDisplayMode8(void *lpd3d, UINT Adapter, D3DDISPLAYMODE *pMode) { return extGetAdapterDisplayMode(8, pGetAdapterDisplayMode8, lpd3d, Adapter, pMode); } HRESULT WINAPI extGetAdapterDisplayMode9(void *lpd3d, UINT Adapter, D3DDISPLAYMODE *pMode) { return extGetAdapterDisplayMode(9, pGetAdapterDisplayMode9, lpd3d, Adapter, pMode); } HWND FixD3DWindowFrame(HWND hFocusWin) { HWND hRetWnd = hFocusWin; if(!(dxw.dwFlags3 & NOWINDOWMOVE)) AdjustWindowFrame(dxw.GethWnd(), dxw.GetScreenWidth(), dxw.GetScreenHeight()); if(dxw.dwFlags3 & FIXD3DFRAME){ char ClassName[81]; RECT workarea; HWND hChildWin; GetClassName(dxw.GethWnd(), ClassName, 80); (*pGetClientRect)(dxw.GethWnd(), &workarea); if (dxw.dwFlags2 & KEEPASPECTRATIO) dxw.FixWorkarea(&workarea); hChildWin=(*pCreateWindowExA)( 0, ClassName, "child", WS_CHILD|WS_VISIBLE, //GetSystemMetrics(SM_CXSIZEFRAME), GetSystemMetrics(SM_CYSIZEFRAME)+GetSystemMetrics(SM_CYCAPTION), workarea.left, workarea.top, workarea.right-workarea.left, workarea.bottom-workarea.top, //workarea.left+20, workarea.top+20, workarea.right-workarea.left-40, workarea.bottom-workarea.top-40, dxw.GethWnd(), NULL, NULL, NULL); if (hChildWin) OutTraceD3D("CreateDevice: ChildWin=%x pos=(%d,%d) size=(%d,%d)\n", hChildWin, workarea.left, workarea.top, workarea.right-workarea.left, workarea.bottom-workarea.top); else OutTraceE("CreateDevice: CreateWindowEx ERROR err=%d\n", GetLastError()); dxw.SethWnd(hChildWin, dxw.GethWnd()); HookWindowProc(hChildWin); hRetWnd = hChildWin; } return hRetWnd; } static HRESULT WINAPI extCreateDevice(void *lpd3d, UINT adapter, D3DDEVTYPE devicetype, HWND hfocuswindow, DWORD behaviorflags, D3DPRESENT_PARAMETERS *ppresentparam, void **ppd3dd, int dwD3DVersion) { HRESULT res; DWORD param[64], *tmp; D3DDISPLAYMODE mode; OutTraceD3D("CreateDevice(%d): lpd3d=%x adapter=%x hFocusWnd=%x behavior=%x, size=(%d,%d)\n", dwD3DVersion, lpd3d, adapter, hfocuswindow, behaviorflags, ppresentparam->BackBufferWidth, ppresentparam->BackBufferHeight); memcpy(param, ppresentparam, (dwD3DVersion == 9)?56:52); dxw.SethWnd(hfocuswindow); dxw.SetScreenSize(param[0], param[1]); if(dxw.Windowize) hfocuswindow=FixD3DWindowFrame(hfocuswindow); if(IsTraceD3D){ tmp = param; DWORD SwapEffect; OutTrace("D3D%d::CreateDevice\n", dwD3DVersion); OutTrace(" Adapter = %i\n", adapter); OutTrace(" DeviceType = %i\n", devicetype); OutTrace(" hFocusWindow = 0x%x\n", hfocuswindow); OutTrace(" BehaviorFlags = 0x%x(%s)\n", behaviorflags, ExplainD3DBehaviourFlags(behaviorflags)); OutTrace(" BackBufferWidth = %i\n", *(tmp ++)); OutTrace(" BackBufferHeight = %i\n", *(tmp ++)); OutTrace(" BackBufferFormat = %i(%s)\n", *(tmp ++), ExplainD3DSurfaceFormat(param[2])); OutTrace(" BackBufferCount = %i\n", *(tmp ++)); OutTrace(" MultiSampleType = %i\n", *(tmp ++)); if(dwD3DVersion == 9) OutTrace(" MultiSampleQuality = %i\n", *(tmp ++)); SwapEffect = *(tmp ++); OutTrace(" SwapEffect = 0x%x(%s)\n", SwapEffect, ExplainSwapEffect(SwapEffect)); OutTrace(" hDeviceWindow = 0x%x\n", *(tmp ++)); OutTrace(" Windowed = %i\n", *(tmp ++)); OutTrace(" EnableAutoDepthStencil = %i\n", *(tmp ++)); OutTrace(" AutoDepthStencilFormat = %i\n", *(tmp ++)); OutTrace(" Flags = 0x%x\n", *(tmp ++)); OutTrace(" FullScreen_RefreshRateInHz = %i\n", *(tmp ++)); OutTrace(" PresentationInterval = 0x%x\n", *(tmp ++)); } if(dwD3DVersion == 9) (*pGetAdapterDisplayMode9)(lpd3d, 0, &mode); else (*pGetAdapterDisplayMode8)(lpd3d, 0, &mode); OutTraceD3D(" Current Format = %d(%s)\n", mode.Format, ExplainD3DSurfaceFormat(mode.Format)); OutTraceD3D(" Current ScreenSize = (%dx%d)\n", mode.Width, mode.Height); OutTraceD3D(" Current Refresh Rate = %d\n", mode.RefreshRate); if((dxw.dwFlags4 & NOD3DRESET) && dxw.Windowize){ RECT desktop; // Get a handle to the desktop window const HWND hDesktop = (*pGetDesktopWindow)(); // Get the size of screen to the variable desktop (*pGetWindowRect)(hDesktop, &desktop); // The top left corner will have coordinates (0,0) // and the bottom right corner will have coordinates // (horizontal, vertical) param[0] = desktop.right; param[1] = desktop.bottom; } if(dwD3DVersion == 9){ if(dxw.Windowize){ if(dxw.dwFlags6 & FORCESWAPEFFECT) param[6] = dxw.SwapEffect; //Swap effect; dwD3DSwapEffect = param[6]; param[7] = 0; //hDeviceWindow dxw.SetFullScreen(~param[8]?TRUE:FALSE); param[8] = 1; //Windowed //param[11] = D3DPRESENTFLAG_DEVICECLIP; //Flags; param[12] = 0; //FullScreen_RefreshRateInHz; param[13] = D3DPRESENT_INTERVAL_DEFAULT; //PresentationInterval } res = (*pCreateDevice9)(lpd3d, 0, devicetype, hfocuswindow, behaviorflags, param, ppd3dd); if(res){ OutTraceD3D("err=%x(%s) switching to mode=%d(%s)\n", res, ExplainDDError(res), mode.Format, ExplainD3DSurfaceFormat(mode.Format)); param[2] = mode.Format; // first attempt: current screen mode res = (*pCreateDevice9)(lpd3d, 0, devicetype, hfocuswindow, behaviorflags, param, ppd3dd); } if(res){ OutTraceD3D("err=%x(%s) switching to mode=D3DFMT_UNKNOWN\n", res, ExplainDDError(res)); param[2] = D3DFMT_UNKNOWN; // second attempt: unknown, good for windowed mode res = (*pCreateDevice9)(lpd3d, 0, devicetype, hfocuswindow, behaviorflags, param, ppd3dd); } } else{ if(dxw.Windowize){ if(dxw.dwFlags6 & FORCESWAPEFFECT) param[5] = dxw.SwapEffect; //Swap effect; dwD3DSwapEffect = param[5]; param[6] = 0; //hDeviceWindow dxw.SetFullScreen(~param[7]?TRUE:FALSE); param[7] = 1; //Windowed //param[10] = D3DPRESENTFLAG_DEVICECLIP; //Flags; param[11] = 0; //FullScreen_RefreshRateInHz; param[12] = D3DPRESENT_INTERVAL_DEFAULT; //PresentationInterval } res = (*pCreateDevice8)(lpd3d, 0, devicetype, hfocuswindow, behaviorflags, param, ppd3dd); if(res){ OutTraceD3D("err=%x(%s) switching to mode=%d(%s)\n", res, ExplainDDError(res), mode.Format, ExplainD3DSurfaceFormat(mode.Format)); param[2] = mode.Format; // first attempt: current screen mode res = (*pCreateDevice8)(lpd3d, 0, devicetype, hfocuswindow, behaviorflags, param, ppd3dd); } if(res){ OutTraceD3D("err=%x(%s) switching to mode=D3DFMT_UNKNOWN\n", res, ExplainDDError(res)); param[2] = D3DFMT_UNKNOWN; // second attempt: unknown, good for windowed mode res = (*pCreateDevice8)(lpd3d, 0, devicetype, hfocuswindow, behaviorflags, param, ppd3dd); } } if(res){ OutTraceD3D("FAILED! err=%x(%s)\n", res, ExplainDDError(res)); return res; } OutTraceD3D("SUCCESS! device=%x\n", *ppd3dd); lpD3DActiveDevice = *ppd3dd; if((dxw.dwFlags8 & D3D8BACK16) && (dwD3DVersion == 8)){ dwD3D8InitEmulation(*ppd3dd); } if(dwD3DVersion == 8){ HookD3DDevice8(ppd3dd); } else { HookD3DDevice9(ppd3dd); } dxw.SetVSyncDelays(mode.RefreshRate); GetHookInfo()->IsFullScreen = dxw.IsFullScreen(); GetHookInfo()->DXVersion=(short)dwD3DVersion; GetHookInfo()->Height=(short)dxw.GetScreenHeight(); GetHookInfo()->Width=(short)dxw.GetScreenWidth(); GetHookInfo()->ColorDepth=(short)dxw.VirtualPixelFormat.dwRGBBitCount; return DD_OK; } HRESULT WINAPI extCreateDevice8(void *lpd3d, UINT adapter, D3DDEVTYPE dt, HWND hfw, DWORD bf, D3DPRESENT_PARAMETERS *ppp, void **ppd3dd) { return extCreateDevice(lpd3d, adapter, dt, hfw, bf, ppp, ppd3dd, 8); } HRESULT WINAPI extCreateDevice9(void *lpd3d, UINT adapter, D3DDEVTYPE dt, HWND hfw, DWORD bf, D3DPRESENT_PARAMETERS *ppp, void **ppd3dd) { return extCreateDevice(lpd3d, adapter, dt, hfw, bf, ppp, ppd3dd, 9); } HRESULT WINAPI extCreateDeviceEx(void *lpd3d, UINT adapter, D3DDEVTYPE devicetype, HWND hfocuswindow, DWORD behaviorflags, D3DPRESENT_PARAMETERS *ppresentparam, D3DDISPLAYMODEEX *pFullscreenDisplayMode, void **ppd3dd) { HRESULT res; DWORD param[64], *tmp; D3DDISPLAYMODE mode; OutTraceD3D("CreateDeviceEx: D3DVersion=%d lpd3d=%x adapter=%x hFocusWnd=%x behavior=%x, size=(%d,%d)\n", dwD3DVersion, lpd3d, adapter, hfocuswindow, behaviorflags, ppresentparam->BackBufferWidth, ppresentparam->BackBufferHeight); memcpy(param, ppresentparam, 56); dxw.SethWnd(hfocuswindow); dxw.SetScreenSize(param[0], param[1]); if(dxw.Windowize) hfocuswindow=FixD3DWindowFrame(hfocuswindow); if(IsTraceD3D){ tmp = param; DWORD SwapEffect; OutTrace("D3D%d::CreateDeviceEx\n", dwD3DVersion); OutTrace(" Adapter = %i\n", adapter); OutTrace(" DeviceType = %i\n", devicetype); OutTrace(" hFocusWindow = 0x%x\n", hfocuswindow); OutTrace(" BehaviorFlags = 0x%x\n", behaviorflags); OutTrace(" BackBufferWidth = %i\n", *(tmp ++)); OutTrace(" BackBufferHeight = %i\n", *(tmp ++)); OutTrace(" BackBufferFormat = %i(%s)\n", *(tmp ++), ExplainD3DSurfaceFormat(param[2])); OutTrace(" BackBufferCount = %i\n", *(tmp ++)); OutTrace(" MultiSampleType = %i\n", *(tmp ++)); OutTrace(" MultiSampleQuality = %i\n", *(tmp ++)); SwapEffect = *(tmp ++); OutTrace(" SwapEffect = 0x%x(%s)\n", SwapEffect, ExplainSwapEffect(SwapEffect)); OutTrace(" hDeviceWindow = 0x%x\n", *(tmp ++)); OutTrace(" Windowed = %i\n", *(tmp ++)); OutTrace(" EnableAutoDepthStencil = %i\n", *(tmp ++)); OutTrace(" AutoDepthStencilFormat = %i\n", *(tmp ++)); OutTrace(" Flags = 0x%x\n", *(tmp ++)); OutTrace(" FullScreen_RefreshRateInHz = %i\n", *(tmp ++)); OutTrace(" PresentationInterval = 0x%x\n", *(tmp ++)); } //((LPDIRECT3D9)lpd3d)->GetAdapterDisplayMode(0, &mode); (*pGetAdapterDisplayMode9)(lpd3d, 0, &mode); OutTraceD3D(" Current Format = %d(%s)\n", mode.Format, ExplainD3DSurfaceFormat(mode.Format)); OutTraceD3D(" Current ScreenSize = (%dx%d)\n", mode.Width, mode.Height); OutTraceD3D(" Current Refresh Rate = %d\n", mode.RefreshRate); if((dxw.dwFlags4 & NOD3DRESET) && dxw.Windowize){ RECT desktop; // Get a handle to the desktop window const HWND hDesktop = (*pGetDesktopWindow)(); // Get the size of screen to the variable desktop (*pGetWindowRect)(hDesktop, &desktop); // The top left corner will have coordinates (0,0) // and the bottom right corner will have coordinates // (horizontal, vertical) param[0] = desktop.right; param[1] = desktop.bottom; } if(dxw.Windowize){ if(dxw.dwFlags6 & FORCESWAPEFFECT) param[6] = dxw.SwapEffect; //Swap effect; dwD3DSwapEffect = param[6]; //param[7] = 0; //hDeviceWindow param[7] = (DWORD)dxw.GethWnd(); //hDeviceWindow dxw.SetFullScreen(~param[8]?TRUE:FALSE); param[8] = 1; //Windowed param[12] = 0; //FullScreen_RefreshRateInHz; param[13] = D3DPRESENT_INTERVAL_DEFAULT; //PresentationInterval // from MSDN: // The display mode for when the device is set to fullscreen. See D3DDISPLAYMODEEX. // If BehaviorFlags specifies D3DCREATE_ADAPTERGROUP_DEVICE, this parameter is an array. // This parameter must be NULL for windowed mode. pFullscreenDisplayMode = NULL; } res = (*pCreateDeviceEx)(lpd3d, 0, devicetype, hfocuswindow, behaviorflags, param, pFullscreenDisplayMode, ppd3dd); if(res){ OutTraceD3D("err=%x(%s) switching to mode=%d(%s)\n", res, ExplainDDError(res), mode.Format, ExplainD3DSurfaceFormat(mode.Format)); param[2] = mode.Format; // first attempt: current screen mode res = (*pCreateDeviceEx)(lpd3d, 0, devicetype, hfocuswindow, behaviorflags, param, pFullscreenDisplayMode, ppd3dd); } if(res){ OutTraceD3D("err=%x(%s) switching to mode=D3DFMT_UNKNOWN\n", res, ExplainDDError(res)); param[2] = D3DFMT_UNKNOWN; // second attempt: unknown, good for windowed mode res = (*pCreateDeviceEx)(lpd3d, 0, devicetype, hfocuswindow, behaviorflags, param, pFullscreenDisplayMode, ppd3dd); } if(res){ OutTraceD3D("FAILED! err=%x(%s)\n", res, ExplainDDError(res)); return res; } OutTraceD3D("SUCCESS!\n"); lpD3DActiveDevice = *ppd3dd; HookD3DDevice9(ppd3dd); dxw.SetVSyncDelays(mode.RefreshRate); GetHookInfo()->IsFullScreen = dxw.IsFullScreen(); GetHookInfo()->DXVersion=(short)dwD3DVersion; GetHookInfo()->Height=(short)dxw.GetScreenHeight(); GetHookInfo()->Width=(short)dxw.GetScreenWidth(); GetHookInfo()->ColorDepth=(short)dxw.VirtualPixelFormat.dwRGBBitCount; return DD_OK; } static HRESULT WINAPI extSetRenderState(SetRenderState_Type pSetRenderState, void *pd3dd, D3DRENDERSTATETYPE State, DWORD Value) { HRESULT res; OutTraceD3D("SetRenderState: d3dd=%x State=%x(%s) Value=%x\n", pd3dd, State, ExplainD3DRenderState(State), Value); if((dxw.dwFlags4 & ZBUFFERALWAYS) && (State == D3DRS_ZFUNC)) { OutTraceD3D("SetRenderState: FIXED State=ZFUNC Value=%s->D3DCMP_ALWAYS\n", ExplainRenderstateValue(Value)); Value = D3DCMP_ALWAYS; } if((dxw.dwFlags2 & WIREFRAME) && (State == D3DRS_FILLMODE)){ OutTraceD3D("SetRenderState: FIXED State=FILLMODE Value=%x->D3DFILL_WIREFRAME\n", Value); Value = D3DFILL_WIREFRAME; } if((dxw.dwFlags4 & DISABLEFOGGING) && (State == D3DRS_FOGENABLE)){ OutTraceD3D("SetRenderState: FIXED State=FOGENABLE Value=%x->FALSE\n", Value); Value = FALSE; } if((dxw.dwFlags5 & TEXTURETRANSP) && (State == D3DRS_ALPHABLENDENABLE)){ OutTraceD3D("SetRenderState: FIXED State=ALPHABLENDENABLE Value=%x->TRUE\n", Value); Value = TRUE; } res=(*pSetRenderState)(pd3dd, State, Value); if(res) OutTraceE("SetRenderState: res=%x(%s)\n", res, ExplainDDError(res)); return res; } HRESULT WINAPI extSetRenderState8(void *pd3dd, D3DRENDERSTATETYPE State, DWORD Value) { return extSetRenderState(pSetRenderState8, pd3dd, State, Value); } HRESULT WINAPI extSetRenderState9(void *pd3dd, D3DRENDERSTATETYPE State, DWORD Value) { return extSetRenderState(pSetRenderState9, pd3dd, State, Value); } static HRESULT WINAPI extGetRenderState(GetRenderState_Type pGetRenderState, void *pd3dd, D3DRENDERSTATETYPE State, DWORD Value) { return (*pGetRenderState)(pd3dd, State, Value); } HRESULT WINAPI extGetRenderState8(void *pd3dd, D3DRENDERSTATETYPE State, DWORD Value) { return extGetRenderState(pSetRenderState8, pd3dd, State, Value); } HRESULT WINAPI extGetRenderState9(void *pd3dd, D3DRENDERSTATETYPE State, DWORD Value) { return extGetRenderState(pSetRenderState9, pd3dd, State, Value); } HRESULT WINAPI extGetViewport(void *pd3dd, D3DVIEWPORT9 *pViewport) { return (*pGetViewport)(pd3dd, pViewport); } HRESULT WINAPI extSetViewport(void *pd3dd, D3DVIEWPORT9 *pViewport) { RECT client; POINT p={0,0}; (*pGetClientRect)(dxw.GethWnd(), &client); OutTraceD3D("SetViewport: declared pos=(%d,%d) size=(%d,%d) depth=(%f;%f)\n", pViewport->X, pViewport->Y, pViewport->Width, pViewport->Height, pViewport->MinZ, pViewport->MaxZ); if(IsDebug) OutTrace("SetViewport: DEBUG win=(%d,%d) screen=(%d,%d)\n", client.right, client.bottom, dxw.GetScreenWidth(), dxw.GetScreenHeight()); pViewport->X = (pViewport->X * (int)client.right) / (int)dxw.GetScreenWidth(); pViewport->Y = (pViewport->Y * (int)client.bottom) / (int)dxw.GetScreenHeight(); pViewport->Width = (pViewport->Width * (int)client.right) / (int)dxw.GetScreenWidth(); pViewport->Height = (pViewport->Height * (int)client.bottom) / (int)dxw.GetScreenHeight(); OutTraceD3D("SetViewport: remapped pos=(%d,%d) size=(%d,%d)\n", pViewport->X, pViewport->Y, pViewport->Width, pViewport->Height); return (*pSetViewport)(pd3dd, pViewport); } static HRESULT WINAPI extCreateAdditionalSwapChain(int dwD3DVersion, void *lpd3dd, D3DPRESENT_PARAMETERS *pPresentationParameters, IDirect3DSwapChain9 **ppSwapChain) { HRESULT res, res2; DWORD param[64], *tmp; D3DDISPLAYMODE mode; CreateAdditionalSwapChain_Type pCreateAdditionalSwapChain; Reset_Type pReset; GetAdapterDisplayMode_Type pGetAdapterDisplayMode; OutTraceD3D("CreateAdditionalSwapChain(%d): d3d=%x\n", dwD3DVersion, lpd3dd); pCreateAdditionalSwapChain = (dwD3DVersion == 8) ? pCreateAdditionalSwapChain8 : pCreateAdditionalSwapChain9; pReset = (dwD3DVersion == 8) ? pReset8 : pReset9; pGetAdapterDisplayMode = (dwD3DVersion == 8) ? pGetAdapterDisplayMode8 : pGetAdapterDisplayMode9; memcpy(param, pPresentationParameters, (dwD3DVersion == 9)?56:52); dxw.SetScreenSize(param[0], param[1]); if(dxw.Windowize) FixD3DWindowFrame(dxw.GethWnd()); if(IsTraceD3D){ tmp = param; DWORD SwapEffect; OutTrace("D3D%d::CreateAdditionalSwapChain\n", dwD3DVersion); OutTrace(" BackBufferWidth = %i\n", *(tmp ++)); OutTrace(" BackBufferHeight = %i\n", *(tmp ++)); OutTrace(" BackBufferFormat = %i(%s)\n", *(tmp ++), ExplainD3DSurfaceFormat(param[2])); OutTrace(" BackBufferCount = %i\n", *(tmp ++)); OutTrace(" MultiSampleType = %i\n", *(tmp ++)); if(dwD3DVersion == 9) OutTrace(" MultiSampleQuality = %i\n", *(tmp ++)); SwapEffect = *(tmp ++); OutTrace(" SwapEffect = 0x%x(%s)\n", SwapEffect, ExplainSwapEffect(SwapEffect)); OutTrace(" hDeviceWindow = 0x%x\n", *(tmp ++)); OutTrace(" Windowed = %i\n", *(tmp ++)); OutTrace(" EnableAutoDepthStencil = %i\n", *(tmp ++)); OutTrace(" AutoDepthStencilFormat = %i\n", *(tmp ++)); OutTrace(" Flags = 0x%x\n", *(tmp ++)); OutTrace(" FullScreen_RefreshRateInHz = %i\n", *(tmp ++)); OutTrace(" PresentationInterval = 0x%x\n", *(tmp ++)); } res2=(*pGetAdapterDisplayMode)(lpd3dd, D3DADAPTER_DEFAULT, &mode); if(res2==DD_OK){ OutTraceD3D(" Current Format = %d(%s)\n", mode.Format, ExplainD3DSurfaceFormat(mode.Format)); OutTraceD3D(" Current ScreenSize = (%dx%d)\n", mode.Width, mode.Height); OutTraceD3D(" Current Refresh Rate = %d\n", mode.RefreshRate); } else OutTraceE("CreateAdditionalSwapChain: GetAdapterDisplayMode err=%x(%s)\n", res2, ExplainDDError(res2)); if(dxw.Windowize){ if(dwD3DVersion == 9){ if(dxw.dwFlags6 & FORCESWAPEFFECT) param[6] = dxw.SwapEffect; //Swap effect; dwD3DSwapEffect = param[6]; param[7] = 0; //hDeviceWindow dxw.SetFullScreen(~param[8]?TRUE:FALSE); param[8] = 1; //Windowed param[12] = 0; //FullScreen_RefreshRateInHz; param[13] = D3DPRESENT_INTERVAL_DEFAULT; //PresentationInterval } else{ if(dxw.dwFlags6 & FORCESWAPEFFECT) param[5] = dxw.SwapEffect; //Swap effect; dwD3DSwapEffect = param[5]; param[6] = 0; //hDeviceWindow dxw.SetFullScreen(~param[7]?TRUE:FALSE); param[7] = 1; //Windowed param[11] = 0; //FullScreen_RefreshRateInHz; param[12] = D3DPRESENT_INTERVAL_DEFAULT; //PresentationInterval } } if(res2 == D3DERR_DEVICELOST){ res2 = (*pReset)(lpd3dd, (D3DPRESENT_PARAMETERS *)param); if(res2 != DD_OK) OutTraceE("CreateAdditionalSwapChain: Reset err=%x(%s)\n", res2, ExplainDDError(res2)); } res=(*pCreateAdditionalSwapChain)(lpd3dd, (D3DPRESENT_PARAMETERS *)param, ppSwapChain); if(res && (res2==DD_OK)){ OutTraceD3D("err=%x(%s) switching to mode=%d(%s)\n", res, ExplainDDError(res), mode.Format, ExplainD3DSurfaceFormat(mode.Format)); param[2] = mode.Format; // first attempt: current screen mode res=(*pCreateAdditionalSwapChain)(lpd3dd, (D3DPRESENT_PARAMETERS *)param, ppSwapChain); } if(res){ OutTraceD3D("switching to mode=D3DFMT_UNKNOWN\n"); param[2] = D3DFMT_UNKNOWN; // second attempt: unknown, good for windowed mode res=(*pCreateAdditionalSwapChain)(lpd3dd, (D3DPRESENT_PARAMETERS *)param, ppSwapChain); } //if(res){ // OutTraceD3D("switching to size=0,0\n"); // param[0] = param[1] = 0; // third attempt: unknown, good for windowed mode // res=(*pCreateAdditionalSwapChain)(lpd3dd, (D3DPRESENT_PARAMETERS *)param, ppSwapChain); //} if(res) { OutTraceE("CreateAdditionalSwapChain ERROR: res=%x(%s)\n", res, ExplainDDError(res)); } (dwD3DVersion == 9) ? HookD3DDevice9(&lpd3dd) : HookD3DDevice8(&lpd3dd); dxw.SetVSyncDelays(mode.RefreshRate); return res; } HRESULT WINAPI extCreateAdditionalSwapChain8(void *lpd3dd, D3DPRESENT_PARAMETERS *pPresentationParameters, IDirect3DSwapChain9 **ppSwapChain) { return extCreateAdditionalSwapChain(8, lpd3dd, pPresentationParameters, ppSwapChain); } HRESULT WINAPI extCreateAdditionalSwapChain9(void *lpd3dd, D3DPRESENT_PARAMETERS *pPresentationParameters, IDirect3DSwapChain9 **ppSwapChain) { return extCreateAdditionalSwapChain(9, lpd3dd, pPresentationParameters, ppSwapChain); } // to do: // hook SetCursorPosition ShowCursor to handle cursor HRESULT WINAPI extD3D10CreateDevice( IDXGIAdapter *pAdapter, D3D10_DRIVER_TYPE DriverType, HMODULE Software, UINT Flags, UINT SDKVersion, ID3D10Device **ppDevice) { HRESULT res; //D3D10_VIEWPORT ViewPort; OutTraceD3D("D3D10CreateDevice: DriverType=%x Flags=%x SDKVersion=%x\n", DriverType, Flags, SDKVersion); //return 0x887a0004; res=(*pD3D10CreateDevice)(pAdapter, DriverType, Software, Flags, SDKVersion, ppDevice); if(res){ OutTraceE("D3D10CreateDevice: ret=%x(%s)\n", res, ExplainDDError(res)); return res; } // useless .... //SetHook((void *)(*(DWORD *)*ppDevice + 120), extRSSetViewports10, (void **)&pRSSetViewports10, "RSSetViewports(D10)"); // useless .... //if(dxw.Windowize){ // ViewPort.TopLeftX=dxw.iPosX; // ViewPort.TopLeftY=dxw.iPosY; // ViewPort.Width=dxw.iSizX; // ViewPort.Height=dxw.iSizY; // ViewPort.MinDepth=1.0; // ViewPort.MaxDepth=1.0; // (*pRSSetViewports10)((void *)*ppDevice, 1, (D3D10_VIEWPORT *)&ViewPort); //} OutTraceD3D("D3D10CreateDevice: ret=%x\n", res); return res; } HRESULT WINAPI extD3D10CreateDevice1( IDXGIAdapter *pAdapter, D3D10_DRIVER_TYPE DriverType, HMODULE Software, UINT Flags, D3D10_FEATURE_LEVEL1 HardwareLevel, UINT SDKVersion, ID3D10Device **ppDevice) { HRESULT res; OutTraceD3D("D3D10CreateDevice1: DriverType=%x Flags=%x HardwareLevel=%x SDKVersion=%x\n", DriverType, Flags, HardwareLevel, SDKVersion); res=(*pD3D10CreateDevice1)(pAdapter, DriverType, Software, Flags, HardwareLevel, SDKVersion, ppDevice); SetHook((void *)(*(DWORD *)*ppDevice + 100), extRSSetViewports10, (void **)&pRSSetViewports10, "RSSetViewports(D10)"); OutTraceD3D("D3D10CreateDevice1: ret=%x\n", res); return res; } HRESULT WINAPI extD3D10CreateDeviceAndSwapChain( IDXGIAdapter *pAdapter, D3D10_DRIVER_TYPE DriverType, HMODULE Software, UINT Flags, UINT SDKVersion, DXGI_SWAP_CHAIN_DESC *pSwapChainDesc, IDXGISwapChain **ppSwapChain, ID3D10Device **ppDevice) { HRESULT res; OutTraceD3D("D3D10CreateDeviceAndSwapChain: DriverType=%x Flags=%x SDKVersion=%x\n", DriverType, Flags, SDKVersion); //return 0x887a0004; if(dxw.Windowize){ pSwapChainDesc->OutputWindow = dxw.GethWnd(); pSwapChainDesc->Windowed = true; } res=(*pD3D10CreateDeviceAndSwapChain)(pAdapter, DriverType, Software, Flags, SDKVersion, pSwapChainDesc, ppSwapChain, ppDevice); OutTraceD3D("D3D10CreateDeviceAndSwapChain ret=%x\n", res); return res; } HRESULT WINAPI extD3D10CreateDeviceAndSwapChain1( IDXGIAdapter *pAdapter, D3D10_DRIVER_TYPE DriverType, HMODULE Software, UINT Flags, UINT SDKVersion, DXGI_SWAP_CHAIN_DESC *pSwapChainDesc, IDXGISwapChain **ppSwapChain, ID3D10Device **ppDevice) { HRESULT res; OutTraceD3D("D3D10CreateDeviceAndSwapChain1: DriverType=%x Flags=%x SDKVersion=%x\n", DriverType, Flags, SDKVersion); //return 0x887a0004; if(dxw.Windowize){ pSwapChainDesc->OutputWindow = dxw.GethWnd(); pSwapChainDesc->Windowed = true; } res=(*pD3D10CreateDeviceAndSwapChain1)(pAdapter, DriverType, Software, Flags, SDKVersion, pSwapChainDesc, ppSwapChain, ppDevice); OutTraceD3D("D3D10CreateDeviceAndSwapChain1 ret=%x\n", res); return res; } HRESULT WINAPI extD3D11CreateDevice( IDXGIAdapter *pAdapter, D3D_DRIVER_TYPE DriverType, HMODULE Software, UINT Flags, const D3D_FEATURE_LEVEL *pFeatureLevels, UINT FeatureLevels, UINT SDKVersion, ID3D11Device **ppDevice, D3D_FEATURE_LEVEL *pFeatureLevel, ID3D11DeviceContext **ppImmediateContext) { HRESULT res; OutTraceD3D("D3D11CreateDevice: DriverType=%x Flags=%x FeatureLevels=%x SDKVersion=%x\n", DriverType, Flags, FeatureLevels, SDKVersion); //return 0x887a0004; res=(*pD3D11CreateDevice)(pAdapter, DriverType, Software, Flags, pFeatureLevels, FeatureLevels, SDKVersion, ppDevice, pFeatureLevel, ppImmediateContext); if(res){ OutTraceE("D3D11CreateDevice: ret=%x\n", res); return res; } SetHook((void *)(*(DWORD *)ppImmediateContext + 148), extRSSetViewports11, (void **)&pRSSetViewports11, "RSSetViewports(D11)"); //SetHook((void *)(*(DWORD *)ppImmediateContext + 152), extRSSetScissorRects, (void **)&pRSSetScissorRects, "RSSetScissorRects(D11)"); OutTraceD3D("D3D11CreateDevice ret=%x\n", res); return res; } HRESULT WINAPI extD3D11CreateDeviceAndSwapChain( IDXGIAdapter *pAdapter, D3D_DRIVER_TYPE DriverType, HMODULE Software, UINT Flags, const D3D_FEATURE_LEVEL *pFeatureLevels, UINT FeatureLevels, UINT SDKVersion, const DXGI_SWAP_CHAIN_DESC *pSwapChainDesc, IDXGISwapChain **ppSwapChain, ID3D11Device **ppDevice, D3D_FEATURE_LEVEL *pFeatureLevel, ID3D11DeviceContext **ppImmediateContext) { HRESULT res; OutTraceD3D("D3D11CreateDeviceAndSwapChain\n"); res=(*pD3D11CreateDeviceAndSwapChain)(pAdapter, DriverType, Software, Flags, pFeatureLevels, FeatureLevels, SDKVersion, pSwapChainDesc, ppSwapChain, ppDevice, pFeatureLevel, ppImmediateContext); OutTraceD3D("D3D11CreateDeviceAndSwapChain ret=%x\n", res); return res; } void WINAPI extRSSetViewports10(void *This, UINT NumViewports, D3D10_VIEWPORT *pViewports) { OutTraceD3D("RSSetViewports: NumViewports=%d\n", NumViewports); if(dxw.Windowize && (NumViewports==1)){ pViewports->TopLeftX=dxw.iPosX; pViewports->TopLeftY=dxw.iPosY; pViewports->Width=dxw.iSizX; pViewports->Height=dxw.iSizY; } (*pRSSetViewports10)(This, NumViewports, pViewports); } void WINAPI extRSSetViewports11(ID3D11DeviceContext *This, UINT NumViewports, D3D11_VIEWPORT *pViewports) { OutTraceD3D("RSSetViewports: NumViewports=%d\n", NumViewports); if(dxw.Windowize && (NumViewports==1)){ pViewports->TopLeftX=(FLOAT)dxw.iPosX; pViewports->TopLeftY=(FLOAT)dxw.iPosY; pViewports->Width=(FLOAT)dxw.iSizX; pViewports->Height=(FLOAT)dxw.iSizY; } (*pRSSetViewports11)(This, NumViewports, pViewports); } static ULONG WINAPI ReleaseDev(int d3dversion, ReleaseDev_Type pReleaseDev, void *lpdd) { ULONG ActualRef; ActualRef=(*pReleaseDev)(lpdd); OutTraceD3D("Release(D%d): lpdd=%x ret=%d\n", d3dversion, lpdd, ActualRef); return ActualRef; } ULONG WINAPI extReleaseDev8(void *lpdd) { return ReleaseDev(8, pReleaseDev8, lpdd); } ULONG WINAPI extReleaseDev9(void *lpdd) { return ReleaseDev(9, pReleaseDev9, lpdd); } HRESULT WINAPI extGetDirect3D8(void *lpdd3dd, void **ppD3D8) { HRESULT res; OutTraceD3D("Device::GetDirect3D(8): d3dd=%x\n", lpdd3dd); res=(*pGetDirect3D8)(lpdd3dd, ppD3D8); if(res) OutTraceE("Device::GetDirect3D ERROR: d3dd=%x ret=%x\n", lpdd3dd, res); else{ OutTraceD3D("Device::GetDirect3D: d3dd=%x d3d=%x\n", lpdd3dd, *ppD3D8); // HookDirect3D8(*ppD3D8); } return res; } HRESULT WINAPI extGetDirect3D9(void *lpdd3dd, void **ppD3D9) { HRESULT res; OutTraceD3D("Device::GetDirect3D(9): d3dd=%x\n", lpdd3dd); res=(*pGetDirect3D9)(lpdd3dd, ppD3D9); if(res) OutTraceE("Device::GetDirect3D ERROR: d3dd=%x ret=%x\n", lpdd3dd, res); else{ OutTraceD3D("Device::GetDirect3D: d3dd=%x d3d=%x\n", lpdd3dd, *ppD3D9); // re-hook d3d session: neeeded for Need for Speed Underground // commented out: NFSU works also without it .... // HookDirect3D9(*ppD3D9, FALSE); } return res; } HRESULT WINAPI extCheckFullScreen(void) { HRESULT res; if(dxw.Windowize){ OutTraceD3D("CheckFullScreen: return OK\n"); res=0; } else{ res=(*pCheckFullScreen)(); OutTraceD3D("CheckFullScreen: return %x\n", res); } return res; } static void WINAPI extSetGammaRamp(SetGammaRamp_Type pSetGammaRamp, void *lpdd3dd, UINT iSwapChain, DWORD Flags, D3DGAMMARAMP *pRamp) { OutTraceD3D("SetGammaRamp: dd3dd=%x SwapChain=%d flags=%x\n", lpdd3dd, iSwapChain, Flags); if (dxw.dwFlags2 & DISABLEGAMMARAMP) return; (*pSetGammaRamp)(lpdd3dd, iSwapChain, Flags, pRamp); } void WINAPI extSetGammaRamp8(void *lpdd3dd, UINT iSwapChain, DWORD Flags, D3DGAMMARAMP *pRamp) { return extSetGammaRamp(pSetGammaRamp8, lpdd3dd, iSwapChain, Flags, pRamp); } void WINAPI extSetGammaRamp9(void *lpdd3dd, UINT iSwapChain, DWORD Flags, D3DGAMMARAMP *pRamp) { return extSetGammaRamp(pSetGammaRamp9, lpdd3dd, iSwapChain, Flags, pRamp); } static void WINAPI extGetGammaRamp(GetGammaRamp_Type pGetGammaRamp, void *lpdd3dd, UINT iSwapChain, D3DGAMMARAMP *pRamp) { OutTraceD3D("GetGammaRamp: dd3dd=%x SwapChain=%d\n", lpdd3dd, iSwapChain); (*pGetGammaRamp)(lpdd3dd, iSwapChain, pRamp); } void WINAPI extGetGammaRamp8(void *lpdd3dd, UINT iSwapChain, D3DGAMMARAMP *pRamp) { return extGetGammaRamp(pGetGammaRamp8, lpdd3dd, iSwapChain, pRamp); } void WINAPI extGetGammaRamp9(void *lpdd3dd, UINT iSwapChain, D3DGAMMARAMP *pRamp) { return extGetGammaRamp(pGetGammaRamp9, lpdd3dd, iSwapChain, pRamp); } void WINAPI extSetCursorPosition9(void *lpdd3dd, int X, int Y, DWORD Flags) { OutTraceD3D("SetCursorPosition: dd3dd=%x pos=(%d,%d) flags=%x\n", lpdd3dd, X, Y, Flags); if(dxw.dwFlags2 & KEEPCURSORFIXED) return; // to do: proper scaling..... //(*pSetCursorPosition9)(lpdd3dd, X, Y, Flags); } void WINAPI extSetCursorPosition8(void *lpdd3dd, int X, int Y, DWORD Flags) { OutTraceD3D("SetCursorPosition: dd3dd=%x pos=(%d,%d) flags=%x\n", lpdd3dd, X, Y, Flags); if(dxw.dwFlags2 & KEEPCURSORFIXED) return; // to do: proper scaling..... //(*pSetCursorPosition8)(lpdd3dd, X, Y, Flags); } //ULONG WINAPI extCreateRenderTarget8(void *lpdd3dd, UINT Width, UINT Height, D3DFORMAT Format, D3DMULTISAMPLE_TYPE MultiSample, BOOL Lockable, IDirect3DSurface8** ppSurface) ULONG WINAPI extCreateRenderTarget8(void *lpdd3dd, UINT Width, UINT Height, D3DFORMAT Format, D3DMULTISAMPLE_TYPE MultiSample, BOOL Lockable, void** ppSurface) { ULONG res; OutTraceD3D("Device::CreateRenderTarget(8): dd3dd=%x dim=(%dx%d) Format=%x Lockable=%x\n", lpdd3dd, Width, Height, Format, Lockable); res=(*pCreateRenderTarget8)(lpdd3dd, Width, Height, Format, MultiSample, Lockable, ppSurface); OutTraceD3D("Device::CreateRenderTarget(8): res=%x\n", res); return res; } ULONG WINAPI extBeginScene8(void *lpdd3dd) { ULONG res; OutTraceB("Device::BeginScene(8): d3dd=%x\n", lpdd3dd); res=(*pBeginScene8)(lpdd3dd); if (res) OutTraceE("Device::BeginScene(8) ERROR: err=%x\n", res); //if(dxw.dwFlags5 & TEXTURETRANSP) (*pSetRenderState8)(lpdd3dd, D3DRS_ALPHABLENDENABLE, TRUE); return res; } ULONG WINAPI extBeginScene9(void *lpdd3dd) { ULONG res; OutTraceB("Device::BeginScene(9): d3dd=%x\n", lpdd3dd); res=(*pBeginScene9)(lpdd3dd); if (res) OutTraceE("Device::BeginScene(9) ERROR: err=%x\n", res); //if(dxw.dwFlags5 & TEXTURETRANSP) (*pSetRenderState9)(lpdd3dd, D3DRS_ALPHABLENDENABLE, TRUE); return res; } ULONG WINAPI extEndScene8(void *lpdd3dd) { ULONG res; OutTraceB("Device::EndScene(8): d3dd=%x\n", lpdd3dd); res=(*pEndScene8)(lpdd3dd); if (res) OutTraceE("Device::EndScene(8) ERROR: err=%x\n", res); return res; } ULONG WINAPI extEndScene9(void *lpdd3dd) { ULONG res; OutTraceB("Device::EndScene(9): d3dd=%x\n", lpdd3dd); res=(*pEndScene9)(lpdd3dd); if (res) OutTraceE("Device::EndScene(9) ERROR: err=%x\n", res); return res; } ULONG WINAPI extSetTexture8(void *lpd3dd, DWORD Stage, void* pTexture) { ULONG ret; if (dxw.dwFlags4 & NOTEXTURES) { (*pSetTexture8)(lpd3dd, Stage, NULL); OutTraceD3D("Device::SetTexture(8): d3dd=%x stage=%x\n", lpd3dd, Stage); return DD_OK; } ret = (*pSetTexture8)(lpd3dd, Stage, pTexture); OutTraceD3D("Device::SetTexture(8): d3dd=%x stage=%x texture=%x ret=%x\n", lpd3dd, Stage, pTexture, ret); if(pTexture) D3D8TextureHandling((void *)pTexture, Stage); return ret; } ULONG WINAPI extSetTexture9(void *lpd3dd, DWORD Stage, void* pTexture) { ULONG ret; if (dxw.dwFlags4 & NOTEXTURES) { (*pSetTexture9)(lpd3dd, Stage, NULL); OutTraceD3D("Device::SetTexture(9): d3dd=%x stage=%x\n", lpd3dd, Stage); return DD_OK; } ret = (*pSetTexture9)(lpd3dd, Stage, pTexture); OutTraceD3D("Device::SetTexture(9): d3dd=%x stage=%x texture=%x ret=%x\n", lpd3dd, Stage, pTexture, ret); if(pTexture) D3D9TextureHandling((void *)pTexture, (int)Stage); return ret; } BOOL WINAPI extShowCursor8(void *lpd3dd, BOOL bShow) { BOOL res, bNew; bNew=bShow; if(dxw.dwFlags2 & SHOWHWCURSOR) bNew=TRUE; if(dxw.dwFlags1 & HIDEHWCURSOR) bNew=FALSE; res=(*pShowCursor8)(lpd3dd, bNew); if(bNew==bShow) OutTraceD3D("Device::ShowCursor(8): d3dd=%x show=%x res=%x\n", lpd3dd, bNew, res); else OutTraceD3D("Device::ShowCursor(8): d3dd=%x show=%x->%x res=%x\n", lpd3dd, bShow, bNew, res); return res; } BOOL WINAPI extShowCursor9(void *lpd3dd, BOOL bShow) { BOOL res, bNew; bNew=bShow; if(dxw.dwFlags2 & SHOWHWCURSOR) bNew=TRUE; if(dxw.dwFlags1 & HIDEHWCURSOR) bNew=FALSE; res=(*pShowCursor9)(lpd3dd, bNew); if(bNew==bShow) OutTraceD3D("Device::ShowCursor(9): d3dd=%x show=%x res=%x\n", lpd3dd, bNew, res); else OutTraceD3D("Device::ShowCursor(9): d3dd=%x show=%x->%x res=%x\n", lpd3dd, bShow, bNew, res); return res; } void WINAPI voidDebugSetLevel(void) { OutTraceD3D("DebugSetLevel: SUPPRESS\n"); } void WINAPI voidDebugSetMute(void) { OutTraceD3D("DebugSetMute: SUPPRESS\n"); } BOOL WINAPI voidDisableD3DSpy(void) { OutTraceD3D("DisableD3DSpy: SUPPRESS\n"); return FALSE; } HRESULT WINAPI voidDirect3DShaderValidatorCreate9(void) { OutTraceD3D("Direct3DShaderValidatorCreate9: SUPPRESS\n"); return 0; } static char *ExplainD3DDeviceType(D3DDEVTYPE DeviceType) { char *s; switch(DeviceType){ case D3DDEVTYPE_HAL: s="HAL"; break; case D3DDEVTYPE_NULLREF: s="NULLREF"; break; case D3DDEVTYPE_REF: s="REF"; break; case D3DDEVTYPE_SW: s="SW"; break; default: s="unknown"; break; } return s; } static HRESULT WINAPI extCheckDeviceType(int d3dversion, CheckDeviceType_Type pCheckDeviceType, void *lpd3d, UINT Adapter, D3DDEVTYPE DevType, D3DFORMAT AdapterFormat, D3DFORMAT BackBufferFormat, BOOL bWindowed) { HRESULT res; OutTraceD3D("CheckDeviceType(%d): d3d=%x adapter=%d devtype=%x(%s) backbufferformat=%d(%s) windowed=%x\n", d3dversion, lpd3d, Adapter, DevType, ExplainD3DDeviceType(DevType), AdapterFormat, ExplainD3DSurfaceFormat(AdapterFormat), bWindowed); if(dxw.Windowize) bWindowed = TRUE; res = (*pCheckDeviceType)(lpd3d, Adapter, DevType, AdapterFormat, BackBufferFormat, bWindowed); OutTraceD3D("CheckDeviceType: res=%x(%s)\n", res, ExplainDDError(res)); return res; } HRESULT WINAPI extCheckDeviceType8(void *lpd3d, UINT Adapter, D3DDEVTYPE DevType, D3DFORMAT AdapterFormat, D3DFORMAT BackBufferFormat, BOOL bWindowed) { return extCheckDeviceType(8, pCheckDeviceType8, lpd3d, Adapter, DevType, AdapterFormat, BackBufferFormat, bWindowed); } HRESULT WINAPI extCheckDeviceType9(void *lpd3d, UINT Adapter, D3DDEVTYPE DevType, D3DFORMAT AdapterFormat, D3DFORMAT BackBufferFormat, BOOL bWindowed) { return extCheckDeviceType(9, pCheckDeviceType9, lpd3d, Adapter, DevType, AdapterFormat, BackBufferFormat, bWindowed); } HRESULT WINAPI extD3DGetDeviceCaps(int version, void *lpd3d, UINT Adapter, D3DDEVTYPE DeviceType, D3DCAPS9* pCaps) { HRESULT res; OutTraceD3D("GetDeviceCaps(%d): d3d=%x adapter=%d devtype=%x(%s)\n", version, lpd3d, Adapter, DeviceType, ExplainD3DDeviceType(DeviceType)); if(version == 8) res=(*pD3DGetDeviceCaps8)(lpd3d, Adapter, DeviceType, (D3DCAPS8 *)pCaps); else res=(*pD3DGetDeviceCaps9)(lpd3d, Adapter, DeviceType, pCaps); if(res){ OutTraceE("GetDeviceCaps: ERROR: err=%x\n", res); } else{ if(IsDebug){ OutTrace("GetDeviceCaps:\n\t" "DeviceType=%x(%s)\n\t" "Caps=%x Caps2=%x Caps3=%x\n\t" "PresentationIntervals=%x\n\t" "CursorCaps=%x DevCaps=%x\n\t" "PrimitiveMiscCaps=%x\n\t" "RasterCaps=%x\n\t" "ZCmpCaps=%x\n\t" "SrcBlendCaps=%x\n\t" "DestBlendCaps=%x\n\t" "AlphaCmpCaps=%x\n\t" "ShadeCaps=%x\n\t" "TextureCaps=%x\n\t", pCaps->DeviceType, ExplainD3DDeviceType(pCaps->DeviceType), pCaps->Caps, pCaps->Caps2, pCaps->Caps3, pCaps->PresentationIntervals, pCaps->CursorCaps, pCaps->DevCaps, pCaps->PrimitiveMiscCaps, pCaps->RasterCaps, pCaps->ZCmpCaps, pCaps->SrcBlendCaps, pCaps->DestBlendCaps, pCaps->AlphaCmpCaps, pCaps->ShadeCaps, pCaps->TextureCaps); OutTrace( "TextureFilterCaps=%x\n\t" "CubeTextureFilterCaps=%x\n\t" "VolumeTextureFilterCaps=%x\n\t" "TextureAddressCaps=%x\n\t" "VolumeTextureAddressCaps=%x\n\t" "LineCaps=%x\n\t" "StencilCaps=%x\n\t" "FVFCaps=%x\n\t" "TextureOpCaps=%x\n\t" "VertexProcessingCaps=%x\n\t", pCaps->TextureFilterCaps, pCaps->CubeTextureFilterCaps, pCaps->VolumeTextureFilterCaps, pCaps->TextureAddressCaps, pCaps->VolumeTextureAddressCaps, pCaps->LineCaps, pCaps->StencilCaps, pCaps->FVFCaps, pCaps->TextureOpCaps, pCaps->VertexProcessingCaps); OutTrace( "MaxTexture(Width x Height)=(%dx%d)\n\t" "MaxVolumeExtent=%d\n\t" "MaxTextureRepeat=%d\n\t" "MaxTextureAspectRatio=%d\n\t" "MaxAnisotropy=%d\n\t" "MaxActiveLights=%d\n\t" "MaxUserClipPlanes=%x\n\t" "MaxUserClipPlanes=%x\n\t" "MaxVertexW=%f\n\t" "GuardBandLeft=%f\n\t" "GuardBandTop=%f\n\t" "GuardBandRight=%f\n\t" "GuardBandBottom=%f\n\t" "ExtentsAdjust=%f\n\t" "MaxPointSize=%f\n\t" "MaxTextureBlendStages=%d\n\t" "MaxSimultaneousTextures=%x\n\t" "MaxVertexBlendMatrices=%x\n\t" "MaxVertexBlendMatrixIndex=%x\n\t" "MaxPrimitiveCount=%d\n\t" "MaxVertexIndex=%x\n\t" "MaxStreams=%x\n\t" "MaxStreamStride=%x\n\t" "VertexShaderVersion=%x\n\t" "MaxVertexShaderConst=%d\n\t" "PixelShaderVersion=%x\n\t" "PixelShader1xMaxValue=%f\n", pCaps->MaxTextureWidth, pCaps->MaxTextureHeight, pCaps->MaxVolumeExtent, pCaps->MaxTextureRepeat, pCaps->MaxTextureAspectRatio, pCaps->MaxAnisotropy, pCaps->MaxActiveLights, pCaps->MaxUserClipPlanes, pCaps->MaxUserClipPlanes, pCaps->MaxVertexW, pCaps->GuardBandLeft, pCaps->GuardBandTop, pCaps->GuardBandRight, pCaps->GuardBandBottom, pCaps->ExtentsAdjust, pCaps->MaxPointSize, pCaps->MaxTextureBlendStages, pCaps->MaxSimultaneousTextures, pCaps->MaxVertexBlendMatrices, pCaps->MaxVertexBlendMatrixIndex, pCaps->MaxPrimitiveCount, pCaps->MaxVertexIndex, pCaps->MaxStreams, pCaps->MaxStreamStride, pCaps->VertexShaderVersion, pCaps->MaxVertexShaderConst, pCaps->PixelShaderVersion, pCaps->PixelShader1xMaxValue); if(version == 9) OutTrace( "\tDevCaps2=%x Reserved5=%x\n\t" "MaxNpatchTessellationLevel=%f\n\t" "MasterAdapterOrdinal=%i\n\t" "AdapterOrdinalInGroup=%i\n\t" "NumberOfAdaptersInGroup=%i\n\t" "DeclTypes=%x\n\t" "NumSimultaneousRTs=%x\n\t" "StretchRectFilterCaps=%x\n\t" "VertexTextureFilterCaps=%x\n\t" "MaxVShaderInstructionsExecuted=%x\n\t" "MaxPShaderInstructionsExecuted=%x\n\t" "MaxVertexShader30InstructionSlots=%x\n\t" "MaxPixelShader30InstructionSlots=%x\n", pCaps->DevCaps2, pCaps->Reserved5, pCaps->MaxNpatchTessellationLevel, pCaps->MasterAdapterOrdinal, pCaps->AdapterOrdinalInGroup, pCaps->NumberOfAdaptersInGroup, pCaps->DeclTypes, pCaps->NumSimultaneousRTs, pCaps->StretchRectFilterCaps, pCaps->VertexTextureFilterCaps, pCaps->MaxVShaderInstructionsExecuted, pCaps->MaxPShaderInstructionsExecuted, pCaps->MaxVertexShader30InstructionSlots, pCaps->MaxPixelShader30InstructionSlots); } } if(dxw.dwFlags7 & SUPPRESSOVERLAY){ if(pCaps->Caps & D3DCAPS_OVERLAY) OutTraceDW("GetDeviceCaps(%d): SUPPRESS OVERLAY CAP\n", version); pCaps->Caps &= ~D3DCAPS_OVERLAY; } return res; } HRESULT WINAPI extD3DGetDeviceCaps8(void *lpd3d, UINT Adapter, D3DDEVTYPE DeviceType, D3DCAPS8 *pCaps) { return extD3DGetDeviceCaps(8, lpd3d, Adapter, DeviceType, (D3DCAPS9 *)pCaps); } HRESULT WINAPI extD3DGetDeviceCaps9(void *lpd3d, UINT Adapter, D3DDEVTYPE DeviceType, D3DCAPS9 *pCaps) { return extD3DGetDeviceCaps(9, lpd3d, Adapter, DeviceType, pCaps); } static HMONITOR WINAPI extGetAdapterMonitor(GetAdapterMonitor_Type pGetAdapterMonitor, void *lpd3d, UINT Adapter) { OutTraceD3D("GetAdapterMonitor: d3d=%x adapter=%d\n", lpd3d, Adapter); if((dxw.dwFlags2 & HIDEMULTIMONITOR) && (Adapter != D3DADAPTER_DEFAULT)){ OutTraceD3D("GetAdapterMonitor: HIDE adapter=%d\n", Adapter); return NULL; } return (*pGetAdapterMonitor)(lpd3d, Adapter); } HMONITOR WINAPI extGetAdapterMonitor8(void *lpd3d, UINT Adapter) { return extGetAdapterMonitor(pGetAdapterMonitor8, lpd3d, Adapter); } HMONITOR WINAPI extGetAdapterMonitor9(void *lpd3d, UINT Adapter) { return extGetAdapterMonitor(pGetAdapterMonitor9, lpd3d, Adapter); } static UINT WINAPI extGetAvailableTextureMem(GetAvailableTextureMem_Type pGetAvailableTextureMem, void *lpd3dd) { const UINT TextureMemoryLimit = 1024 * 1024 * 1024; // 1GB // const DWORD dwMaxMem = 0x70000000; = 1.8G UINT AvailableTextureMem = (*pGetAvailableTextureMem)(lpd3dd); OutTraceD3D("GetAvailableTextureMem: lpd3dd=%x AvailableTextureMem=%u(%dMB)\n", lpd3dd, AvailableTextureMem, AvailableTextureMem>>20); if(dxw.bHintActive && (AvailableTextureMem > TextureMemoryLimit)) ShowHint(HINT_LIMITMEM); if((dxw.dwFlags2 & LIMITRESOURCES) && (AvailableTextureMem > TextureMemoryLimit)){ OutTraceDW("GetAvailableTextureMem: LIMIT AvailableTextureMem=%u->%u\n", AvailableTextureMem, TextureMemoryLimit); AvailableTextureMem = TextureMemoryLimit; } if(dxw.dwFlags5 & STRESSRESOURCES) AvailableTextureMem = 0xFFFFFFFF; return AvailableTextureMem; } UINT WINAPI extGetAvailableTextureMem8(void *lpd3dd) { return extGetAvailableTextureMem(pGetAvailableTextureMem8, lpd3dd); } UINT WINAPI extGetAvailableTextureMem9(void *lpd3dd) { return extGetAvailableTextureMem(pGetAvailableTextureMem9, lpd3dd); } static HRESULT WINAPI extTestCooperativeLevel(TestCooperativeLevel_Type pTestCooperativeLevel, void *lpd3dd) { HRESULT res; res = (*pTestCooperativeLevel)(lpd3dd); OutTraceB("TestCooperativeLevel: d3dd=%x res=%x\n", lpd3dd, res); return res; } HRESULT WINAPI extTestCooperativeLevel8(void *lpd3dd) { return extTestCooperativeLevel(pTestCooperativeLevel8, lpd3dd); } HRESULT WINAPI extTestCooperativeLevel9(void *lpd3dd) { return extTestCooperativeLevel(pTestCooperativeLevel9, lpd3dd); } HRESULT WINAPI extGetSwapChain(void *lpd3dd, UINT iSwapChain, IDirect3DSwapChain9** pSwapChain) { HRESULT res; OutTraceD3D("GetSwapChain: d3dd=%x SwapChain=%d\n", lpd3dd, iSwapChain); res = (*pGetSwapChain)(lpd3dd, iSwapChain, pSwapChain); if(res) OutTraceE("GetSwapChain ERROR: res=%x(%s)\n", res, ExplainDDError(res)); return res; } UINT WINAPI extGetNumberOfSwapChains(void *lpd3dd) { UINT res; res = (*pGetNumberOfSwapChains)(lpd3dd); OutTraceD3D("GetNumberOfSwapChains: d3dd=%x res=%d\n", lpd3dd, res); return res; } HRESULT WINAPI extBeginStateBlock8(void *lpd3dd) { HRESULT res; OutTraceD3D("BeginStateBlock(8): d3dd=%x\n", lpd3dd); res = (*pBeginStateBlock8)(lpd3dd); HookD3DDevice8(&lpd3dd); return res; } HRESULT WINAPI extBeginStateBlock9(void *lpd3dd) { // v2.02.78: D3DDevice9::BeginStateBlock refreshes the COM D3DDevice9 method pointers, so that // you need to hook the device object again. This operation fixes the switch to fullscreen mode // in "Freedom Force vs. the Third Reich". HRESULT res; OutTraceD3D("BeginStateBlock(9): d3dd=%x\n", lpd3dd); res = (*pBeginStateBlock9)(lpd3dd); HookD3DDevice9(&lpd3dd); return res; } HRESULT WINAPI extEndStateBlock8(void *lpd3dd, DWORD *pToken) { HRESULT res; OutTraceD3D("EndStateBlock(8): d3dd=%x\n", lpd3dd); res = (*pEndStateBlock8)(lpd3dd, pToken); return res; } HRESULT WINAPI extEndStateBlock9(void *lpd3dd, IDirect3DStateBlock9** ppSB) { HRESULT res; OutTraceD3D("EndStateBlock(9): d3dd=%x\n", lpd3dd); res = (*pEndStateBlock9)(lpd3dd, ppSB); return res; } HRESULT WINAPI extCreateTexture8(void *lpd3dd, UINT Width, UINT Height, UINT Levels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, void **ppTexture) { HRESULT res; OutTraceD3D("CreateTexture(8): lpd3dd=%x size=(%dx%d) levels=%d usage=%x format=%d pool=%x\n", lpd3dd, Width, Height, Levels, Usage, Format, Pool); res=(*pCreateTexture8)(lpd3dd, Width, Height, Levels, Usage, Format, Pool, ppTexture); if (res) OutTraceE("CreateTexture(8) ERROR: err=%x\n", res); else { OutTraceD3D("CreateTexture(8): lpTexture=%x\n", *ppTexture); HookD3DTexture8(ppTexture); } return res; } HRESULT WINAPI extCreateTexture9(void *lpd3dd, UINT Width, UINT Height, UINT Levels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, void **ppTexture, HANDLE *pSharedHandle) { HRESULT res; OutTraceD3D("CreateTexture(9): lpd3dd=%x size=(%dx%d) levels=%d usage=%x format=%d pool=%x\n", lpd3dd, Width, Height, Levels, Usage, Format, Pool, ppTexture, pSharedHandle); res=(*pCreateTexture9)(lpd3dd, Width, Height, Levels, Usage, Format, Pool, ppTexture, pSharedHandle); if (res) OutTraceE("CreateTexture(9) ERROR: err=%x\n", res); else { OutTraceD3D("CreateTexture(9): lpTexture=%x\n", *ppTexture); HookD3DTexture9(ppTexture); } return res; } static HRESULT WINAPI extLockRect(LockRect_Type pLockRect, void *lpd3dtex, UINT Level, D3DLOCKED_RECT *pLockedRect, CONST RECT *pRect, DWORD Flags) { HRESULT res; if(IsTraceD3D){ char sRect[81]; if(pRect) sprintf_s(sRect, 80, "(%d,%d)-(%d,%d)", pRect->left, pRect->top, pRect->right, pRect->bottom); else strcpy_s(sRect, 80, "NULL"); OutTrace("Texture::LockRect: lpd3dtex=%x level=%d rect=%s flags=%x\n", lpd3dtex, Level, sRect, Flags); } res=(*pLockRect)(lpd3dtex, Level, pLockedRect, pRect, Flags); if (res) OutTraceE("Device::LockRect ERROR: err=%x\n", res); else { OutTraceD3D("Device::LockRect: pBits=%x pitch=%d\n", pLockedRect->pBits, pLockedRect->Pitch); } return res; } HRESULT WINAPI extLockRect8(void *lpd3dtex, UINT Level, D3DLOCKED_RECT *pLockedRect, CONST RECT *pRect, DWORD Flags) { return extLockRect(pLockRect8, lpd3dtex, Level, pLockedRect, pRect, Flags); } HRESULT WINAPI extLockRect9(void *lpd3dtex, UINT Level, D3DLOCKED_RECT *pLockedRect, CONST RECT *pRect, DWORD Flags) { return extLockRect(pLockRect9, lpd3dtex, Level, pLockedRect, pRect, Flags); } typedef void (*TextureHandling_Type)(void *, int); static HRESULT WINAPI extUnlockRect(UnlockRect_Type pUnlockRect, void *lpd3dtex, UINT Level, TextureHandling_Type TextureHandling) { HRESULT res; OutTraceD3D("Texture::UnlockRect: lpd3dtex=%x level=%d\n", lpd3dtex, Level); res=(*pUnlockRect)(lpd3dtex, Level); if (res) OutTraceE("Device::UnlockRect ERROR: err=%x\n", res); else { OutTraceD3D("Device::UnlockRect: D3D_OK\n"); } if(TextureHandling) TextureHandling(lpd3dtex, Level); return res; } HRESULT WINAPI extUnlockRect8(void *lpd3dtex, UINT Level) { return extUnlockRect(pUnlockRect8, lpd3dtex, Level, D3D8TextureHandling); } HRESULT WINAPI extUnlockRect9(void *lpd3dtex, UINT Level) { return extUnlockRect(pUnlockRect9, lpd3dtex, Level, D3D9TextureHandling); } void WINAPI extD3DPERF_SetOptions(DWORD dwOptions) { if(dwOptions) OutTraceD3D("circumvent D3DPERF_SetOptions\n"); pD3DPERF_SetOptions(0); } void RestoreD3DSurfaces(BOOL bFullScreen) { //DWORD param[64]; //HRESULT res; // a well programmed D3D game should provide to Reset by itself, so the best thing to do is NOTHING return; //if(lpD3DActiveDevice){ // OutTrace("RestoreD3DSurfaces(%d): reset device %x fullscreen=%x\n", dwD3DVersion, lpD3DActiveDevice, bFullScreen); // RECT Desktop; // memcpy(param, gActiveDeviceParams, sizeof(param)); // if(bFullScreen){ // (*pGetClientRect)(0, &Desktop); // param[0] = Desktop.right; // BackBufferWidth // param[1] = Desktop.bottom; // BackBufferHeight // } // res=(*pReset)(lpD3DActiveDevice, (D3DPRESENT_PARAMETERS *)param); // if(res != DD_OK) OutTraceE("RestoreD3DSurfaces: Reset size=(%dx%d) err=%x(%s)\n", // param[0], param[1], res, ExplainDDError(res)); //} } UINT WINAPI extGetAdapterModeCount8(void *lpd3d, UINT Adapter) { UINT ret; OutTraceD3D("GetAdapterModeCount(8): d3d=%x adapter=%d\n", lpd3d, Adapter); ret = (*pGetAdapterModeCount8)(lpd3d, Adapter); if(dxw.dwFlags7 & ENUM16BITMODES){ OutTraceDW("GetAdapterModeCount(8): DOUBLED MODES %d->%d\n", ret, ret*2); ret = ret * 2; } OutTraceD3D("GetAdapterModeCount(8): ret=%d\n", ret); return ret; } UINT WINAPI extGetAdapterModeCount9(void *lpd3d, UINT Adapter, D3DFORMAT Format) { UINT ret; OutTraceD3D("GetAdapterModeCount(9): d3d=%x adapter=%d format=%d(%s)\n", lpd3d, Adapter, Format, ExplainD3DSurfaceFormat(Format)); ret = (*pGetAdapterModeCount9)(lpd3d, Adapter, Format); if(dxw.dwFlags7 & ENUM16BITMODES){ OutTraceDW("GetAdapterModeCount(9): DOUBLED MODES %d->%d\n", ret, ret*2); ret = ret * 2; } OutTraceD3D("GetAdapterModeCount(9): ret=%d\n", ret); return ret; } HRESULT WINAPI extGetFrontBuffer(void *lpd3dd, LPDIRECTDRAWSURFACE pDestSurface) { HRESULT res; OutTraceD3D("GetFrontBuffer(8): d3d=%x dest=%x\n", lpd3dd, pDestSurface); res = (*pGetFrontBuffer)(lpd3dd, pDestSurface); // v2.04.02: Fix for "Dirt Track Racing 2": GetFrontBuffer in windowed mode through DxWnd intervention may yterminate in error // since the Front Buffer size is the whole screen and the surface provided by the application only maps the virtual coordinates. // So, the dxGetFrontBuffer() routine tries to match the surfaces, but in any case, also if an error happens, better return a // fake D3D_OK condition. if(res == D3DERR_INVALIDCALL) { res = dxGetFrontBuffer(lpd3dd, pDestSurface); if(res) OutTraceDW("GetFrontBuffer(8): ret=%x return FAKE D3D_OK\n", res); res = D3D_OK; } OutTraceD3D("GetFrontBuffer(8): ret=%x\n", res); return res; } HRESULT WINAPI extCopyRects(void *lpd3dd, LPDIRECTDRAWSURFACE pSourceSurface, CONST RECT *pSourceRectsArray, UINT cRects, LPDIRECTDRAWSURFACE pDestinationSurface, CONST POINT *pDestPointsArray) { HRESULT res; OutTraceD3D("CopyRects(8): d3d=%x source=%x dest=%x rects=%d\n", lpd3dd, pSourceSurface, pDestinationSurface, cRects); // v2.04.02: Fix for "Dirt Track Racing 2": in early D3D8 implementation it seems that invoking this Copyrects method for 0 rects count didn't hurt, // but now the method returns an error. // added a patch for handling the "if(cRects==0)" case - it is not worth a flag, it seems good for all circumstances, isn't it? // Beware: it seems (from some code snippet) that lpDevice->CopyRects(lpSrcSurface, NULL, 0, lpDestSurface, NULL) means copy the whole lpSrcSurface // to lpDestSurface. In windowized mode the peration may fail because of the different sizing! res = (*pCopyRects)(lpd3dd, pSourceSurface, pSourceRectsArray, cRects, pDestinationSurface, pDestPointsArray); if((res == D3DERR_INVALIDCALL) && (cRects==0)) { res = dxCopyRects(lpd3dd, pSourceSurface, pDestinationSurface); if(res) OutTraceDW("CopyRects(8): res=%x FAKE D3D_OK on 0 rects\n", res); res = D3D_OK; } OutTraceD3D("CopyRects(8): ret=%x\n", res); return res; } // STDMETHOD(GetBackBuffer)(THIS_ UINT iSwapChain,UINT iBackBuffer,D3DBACKBUFFER_TYPE Type,IDirect3DSurface9** ppBackBuffer) PURE; HRESULT WINAPI extGetBackBuffer8(void *lpd3dd, UINT BackBuffer, D3DBACKBUFFER_TYPE Type, LPDIRECTDRAWSURFACE *ppBackBuffer) { HRESULT res; OutTraceD3D("GetBackBuffer(8): d3d=%x backbuffer=%x type=%x\n", lpd3dd, BackBuffer, Type); if((dxw.dwFlags8 & D3D8BACK16) && (dwD3DVersion == 8)){ if ((BackBuffer != 0) || (Type != D3DBACKBUFFER_TYPE_MONO)) { return D3DERR_INVALIDCALL; } *ppBackBuffer = dwGetVirtualBackBuffer(); (*ppBackBuffer)->AddRef(); OutTraceD3D("GetBackBuffer(8): EMULATION OK\n"); return D3D_OK; } res = (*pGetBackBuffer8)(lpd3dd, BackBuffer, Type, ppBackBuffer); if(res) OutTraceE("GetBackBuffer(8): ret=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); if(res) OutTraceE("GetBackBuffer(8): ret=%x(%s)\n", res, ExplainDDError(res)); return res; } ================================================ FILE: dll/hd3d.doc.hpp ================================================ #if 0 from http://msdn.microsoft.com/en-us/library/windows/desktop/bb172588%28v=vs.85%29.aspx D3DPRESENT_PARAMETERS structure Describes the presentation parameters. Syntax C++ typedef struct D3DPRESENT_PARAMETERS { UINT BackBufferWidth; UINT BackBufferHeight; D3DFORMAT BackBufferFormat; UINT BackBufferCount; D3DMULTISAMPLE_TYPE MultiSampleType; DWORD MultiSampleQuality; D3DSWAPEFFECT SwapEffect; HWND hDeviceWindow; BOOL Windowed; BOOL EnableAutoDepthStencil; D3DFORMAT AutoDepthStencilFormat; DWORD Flags; UINT FullScreen_RefreshRateInHz; UINT PresentationInterval; } D3DPRESENT_PARAMETERS, *LPD3DPRESENT_PARAMETERS; BackBufferFormat Type: D3DFORMAT The back buffer format. For more information about formats, see D3DFORMAT. This value must be one of the render-target formats as validated by CheckDeviceType. You can use GetDisplayMode to obtain the current format. In fact, D3DFMT_UNKNOWN can be specified for the BackBufferFormat while in windowed mode. This tells the runtime to use the current display-mode format and eliminates the need to call GetDisplayMode. For windowed applications, the back buffer format no longer needs to match the display-mode format because color conversion can now be done by the hardware (if the hardware supports color conversion). The set of possible back buffer formats is constrained, but the runtime will allow any valid back buffer format to be presented to any desktop format. (There is the additional requirement that the device be operable in the desktop; devices typically do not operate in 8 bits per pixel modes.) Full-screen applications cannot do color conversion. #endif ================================================ FILE: dll/hd3d.h ================================================ ================================================ FILE: dll/hd3d7.cpp ================================================ #define _CRT_SECURE_NO_WARNINGS #include #include #include #include "dxwnd.h" #include "dxwcore.hpp" #include "dxhook.h" #include "syslibs.h" #include "dxhelper.h" //#undef OutTraceD3D //#define OutTraceD3D OutTrace extern LPDIRECTDRAW lpPrimaryDD; typedef HRESULT (WINAPI *QueryInterface_Type)(void *, REFIID, LPVOID *); extern HRESULT WINAPI extQueryInterfaceDX(int, QueryInterface_Type, void *, REFIID, LPVOID *); // exported API typedef HRESULT (WINAPI *Direct3DCreateDevice_Type)(GUID FAR *, LPDIRECT3D, LPDIRECTDRAWSURFACE, LPDIRECT3D *, LPUNKNOWN); typedef HRESULT (WINAPI *Direct3DCreate_Type)(UINT, LPDIRECT3D *, LPUNKNOWN); Direct3DCreateDevice_Type pDirect3DCreateDevice = NULL; Direct3DCreate_Type pDirect3DCreate = NULL; HRESULT WINAPI extDirect3DCreateDevice(GUID FAR *, LPDIRECT3D, LPDIRECTDRAWSURFACE, LPDIRECT3D *, LPUNKNOWN); HRESULT WINAPI extDirect3DCreate(UINT, LPDIRECT3D *, LPUNKNOWN); // IDirect3D-n interfaces typedef HRESULT (WINAPI *QueryInterfaceD3_Type)(void *, REFIID, LPVOID *); typedef HRESULT (WINAPI *Initialize_Type)(void *); typedef HRESULT (WINAPI *EnumDevices_Type)(void *, LPD3DENUMDEVICESCALLBACK, LPVOID); typedef HRESULT (WINAPI *EnumDevices7_Type)(void *, LPD3DENUMDEVICESCALLBACK7, LPVOID); typedef HRESULT (WINAPI *CreateLight_Type)(void *, LPDIRECT3DLIGHT *, IUnknown *); #ifdef TRACEMATERIAL typedef HRESULT (WINAPI *CreateMaterial1_Type)(void *, LPDIRECT3DMATERIAL *, IUnknown *); typedef HRESULT (WINAPI *CreateMaterial2_Type)(void *, LPDIRECT3DMATERIAL2 *, IUnknown *); typedef HRESULT (WINAPI *CreateMaterial3_Type)(void *, LPDIRECT3DMATERIAL3 *, IUnknown *); #endif typedef HRESULT (WINAPI *CreateViewport1_Type)(void *, LPDIRECT3DVIEWPORT *, IUnknown *); typedef HRESULT (WINAPI *CreateViewport2_Type)(void *, LPDIRECT3DVIEWPORT2 *, IUnknown *); typedef HRESULT (WINAPI *CreateViewport3_Type)(void *, LPDIRECT3DVIEWPORT3 *, IUnknown *); typedef HRESULT (WINAPI *FindDevice_Type)(void *, LPD3DFINDDEVICESEARCH, LPD3DFINDDEVICERESULT); typedef HRESULT (WINAPI *CreateDevice2_Type)(void *, REFCLSID, LPDIRECTDRAWSURFACE, LPDIRECT3DDEVICE2 *); typedef HRESULT (WINAPI *CreateDevice3_Type)(void *, REFCLSID, LPDIRECTDRAWSURFACE4, LPDIRECT3DDEVICE3 *, LPUNKNOWN); typedef HRESULT (WINAPI *CreateDevice7_Type)(void *, REFCLSID, LPDIRECTDRAWSURFACE7, LPDIRECT3DDEVICE7 *); typedef HRESULT (WINAPI *EnumZBufferFormats_Type)(void *, REFCLSID, LPD3DENUMPIXELFORMATSCALLBACK, LPVOID); typedef HRESULT (WINAPI *EnumTextureFormats_Type)(void *, LPD3DENUMPIXELFORMATSCALLBACK, LPVOID); QueryInterfaceD3_Type pQueryInterfaceD31 = NULL; QueryInterfaceD3_Type pQueryInterfaceD32 = NULL; QueryInterfaceD3_Type pQueryInterfaceD33 = NULL; QueryInterfaceD3_Type pQueryInterfaceD37 = NULL; Initialize_Type pInitialize = NULL; EnumDevices_Type pEnumDevices1 = NULL; EnumDevices_Type pEnumDevices2 = NULL; EnumDevices_Type pEnumDevices3 = NULL; EnumDevices7_Type pEnumDevices7 = NULL; CreateLight_Type pCreateLight1 = NULL; CreateLight_Type pCreateLight2 = NULL; CreateLight_Type pCreateLight3 = NULL; #ifdef TRACEMATERIAL CreateMaterial1_Type pCreateMaterial1 = NULL; CreateMaterial2_Type pCreateMaterial2 = NULL; CreateMaterial3_Type pCreateMaterial3 = NULL; #endif CreateViewport1_Type pCreateViewport1 = NULL; CreateViewport2_Type pCreateViewport2 = NULL; CreateViewport3_Type pCreateViewport3 = NULL; FindDevice_Type pFindDevice1, pFindDevice2, pFindDevice3; CreateDevice2_Type pCreateDevice2 = NULL; CreateDevice3_Type pCreateDevice3 = NULL; CreateDevice7_Type pCreateDevice7 = NULL; EnumZBufferFormats_Type pEnumZBufferFormats3 = NULL; EnumZBufferFormats_Type pEnumZBufferFormats7 = NULL; EnumTextureFormats_Type pEnumTextureFormats1, pEnumTextureFormats2, pEnumTextureFormats3, pEnumTextureFormats7; HRESULT WINAPI extQueryInterfaceD31(void *, REFIID, LPVOID *); HRESULT WINAPI extQueryInterfaceD32(void *, REFIID, LPVOID *); HRESULT WINAPI extQueryInterfaceD33(void *, REFIID, LPVOID *); HRESULT WINAPI extQueryInterfaceD37(void *, REFIID, LPVOID *); HRESULT WINAPI extEnumDevices1(void *, LPD3DENUMDEVICESCALLBACK, LPVOID); HRESULT WINAPI extEnumDevices2(void *, LPD3DENUMDEVICESCALLBACK, LPVOID); HRESULT WINAPI extEnumDevices3(void *, LPD3DENUMDEVICESCALLBACK, LPVOID); HRESULT WINAPI extEnumDevices7(void *, LPD3DENUMDEVICESCALLBACK7, LPVOID); HRESULT WINAPI extCreateLight1(void *, LPDIRECT3DLIGHT *, IUnknown *); HRESULT WINAPI extCreateLight2(void *, LPDIRECT3DLIGHT *, IUnknown *); HRESULT WINAPI extCreateLight3(void *, LPDIRECT3DLIGHT *, IUnknown *); HRESULT WINAPI extEnumZBufferFormats3(void *, REFCLSID, LPD3DENUMPIXELFORMATSCALLBACK, LPVOID); HRESULT WINAPI extEnumZBufferFormats7(void *, REFCLSID, LPD3DENUMPIXELFORMATSCALLBACK, LPVOID); HRESULT WINAPI extEnumTextureFormats1(void *, LPD3DENUMPIXELFORMATSCALLBACK, LPVOID); HRESULT WINAPI extEnumTextureFormats2(void *, LPD3DENUMPIXELFORMATSCALLBACK, LPVOID); HRESULT WINAPI extEnumTextureFormats3(void *, LPD3DENUMPIXELFORMATSCALLBACK, LPVOID); HRESULT WINAPI extEnumTextureFormats7(void *, LPD3DENUMPIXELFORMATSCALLBACK, LPVOID); // Direct3DDevice-n interfaces typedef ULONG (WINAPI *ReleaseD3D_Type)(LPDIRECT3DDEVICE); typedef HRESULT (WINAPI *QueryInterfaceD3D_Type)(void *, REFIID, LPVOID *); typedef HRESULT (WINAPI *D3DInitialize_Type)(void *, LPDIRECT3D , LPGUID, LPD3DDEVICEDESC); typedef HRESULT (WINAPI *D3DGetCaps_Type)(void *, LPD3DDEVICEDESC ,LPD3DDEVICEDESC); typedef HRESULT (WINAPI *D3DGetCaps7_Type)(void *, LPD3DDEVICEDESC7); typedef HRESULT (WINAPI *AddViewport1_Type)(void *, LPDIRECT3DVIEWPORT); typedef HRESULT (WINAPI *AddViewport2_Type)(void *, LPDIRECT3DVIEWPORT2); typedef HRESULT (WINAPI *AddViewport3_Type)(void *, LPDIRECT3DVIEWPORT3); typedef HRESULT (WINAPI *Scene_Type)(void *); // BeginScene, EndScene typedef HRESULT (WINAPI *SetRenderState3_Type)(void *, D3DRENDERSTATETYPE, DWORD); typedef HRESULT (WINAPI *GetViewport7_Type)(void *, LPD3DVIEWPORT7); typedef HRESULT (WINAPI *SetViewport7_Type)(void *, LPD3DVIEWPORT7); typedef HRESULT (WINAPI *SetLightState_Type)(void *, D3DLIGHTSTATETYPE, DWORD); typedef HRESULT (WINAPI *GetCurrentViewport2_Type)(void *, LPDIRECT3DVIEWPORT2 *); typedef HRESULT (WINAPI *SetCurrentViewport2_Type)(void *, LPDIRECT3DVIEWPORT2); typedef HRESULT (WINAPI *GetCurrentViewport3_Type)(void *, LPDIRECT3DVIEWPORT3 *); typedef HRESULT (WINAPI *SetCurrentViewport3_Type)(void *, LPDIRECT3DVIEWPORT3); typedef HRESULT (WINAPI *SetTexture3_Type)(void *, DWORD, LPDIRECT3DTEXTURE2); typedef HRESULT (WINAPI *SetTexture7_Type)(void *, DWORD, LPDIRECTDRAWSURFACE7); typedef HRESULT (WINAPI *SwapTextureHandles_Type)(void *, LPDIRECT3DTEXTURE, LPDIRECT3DTEXTURE); typedef HRESULT (WINAPI *SwapTextureHandles2_Type)(void *, LPDIRECT3DTEXTURE2, LPDIRECT3DTEXTURE2); typedef HRESULT (WINAPI *SetTransform_Type)(void *, D3DTRANSFORMSTATETYPE, LPD3DMATRIX); QueryInterfaceD3_Type pQueryInterfaceD3D1, pQueryInterfaceD3D2, pQueryInterfaceD3D3, pQueryInterfaceD3D7; ReleaseD3D_Type pReleaseD3D1, pReleaseD3D2, pReleaseD3D3, pReleaseD3D7; D3DInitialize_Type pD3DInitialize = NULL; D3DGetCaps_Type pD3DGetCaps1, pD3DGetCaps2, pD3DGetCaps3; D3DGetCaps7_Type pD3DGetCaps7; AddViewport1_Type pAddViewport1 = NULL; AddViewport2_Type pAddViewport2 = NULL; AddViewport3_Type pAddViewport3 = NULL; Scene_Type pBeginScene1 = NULL; Scene_Type pBeginScene2 = NULL; Scene_Type pBeginScene3 = NULL; Scene_Type pBeginScene7 = NULL; Scene_Type pEndScene1 = NULL; Scene_Type pEndScene2 = NULL; Scene_Type pEndScene3 = NULL; Scene_Type pEndScene7 = NULL; SetRenderState3_Type pSetRenderState2 = NULL; SetRenderState3_Type pSetRenderState3 = NULL; SetRenderState3_Type pSetRenderState7 = NULL; GetViewport7_Type pGetViewport7 = NULL; SetViewport7_Type pSetViewport7 = NULL; SetLightState_Type pSetLightState3 = NULL; GetCurrentViewport2_Type pGetCurrentViewport2 = NULL; SetCurrentViewport2_Type pSetCurrentViewport2 = NULL; GetCurrentViewport3_Type pGetCurrentViewport3 = NULL; SetCurrentViewport3_Type pSetCurrentViewport3 = NULL; SetTexture3_Type pSetTexture3 = NULL; SetTexture7_Type pSetTexture7 = NULL; SwapTextureHandles_Type pSwapTextureHandles = NULL; SwapTextureHandles2_Type pSwapTextureHandles2 = NULL; SetTransform_Type pSetTransform2, pSetTransform3, pSetTransform7; // IDirect3DViewport-n interfaces typedef HRESULT (WINAPI *InitializeVP_Type)(void *, LPDIRECT3D); typedef HRESULT (WINAPI *SetViewport_Type)(void *, LPD3DVIEWPORT); typedef HRESULT (WINAPI *GetViewport_Type)(void *, LPD3DVIEWPORT); typedef HRESULT (WINAPI *GetViewport2_Type)(void *, LPD3DVIEWPORT); typedef HRESULT (WINAPI *SetViewport2_Type)(void *, LPD3DVIEWPORT); typedef HRESULT (WINAPI *GetViewport3_Type)(void *, LPD3DVIEWPORT); typedef HRESULT (WINAPI *SetViewport3_Type)(void *, LPD3DVIEWPORT); typedef HRESULT (WINAPI *GetViewport2_3_Type)(void *, LPD3DVIEWPORT2); typedef HRESULT (WINAPI *SetViewport2_3_Type)(void *, LPD3DVIEWPORT2); typedef HRESULT (WINAPI *DeleteViewport1_Type)(void *, LPDIRECT3DVIEWPORT); typedef HRESULT (WINAPI *NextViewport1_Type)(void *, LPDIRECT3DVIEWPORT, LPDIRECT3DVIEWPORT *, DWORD); typedef HRESULT (WINAPI *DeleteViewport2_Type)(void *, LPDIRECT3DVIEWPORT2); typedef HRESULT (WINAPI *NextViewport2_Type)(void *, LPDIRECT3DVIEWPORT2, LPDIRECT3DVIEWPORT2 *, DWORD); typedef HRESULT (WINAPI *ViewportClear_Type)(void *, DWORD, LPD3DRECT, DWORD); #ifdef TRACEMATERIAL // IDirect3DMaterial interfaces typedef HRESULT (WINAPI *SetMaterial_Type)(void *, LPD3DMATERIAL); typedef HRESULT (WINAPI *GetMaterial_Type)(void *, LPD3DMATERIAL); #endif InitializeVP_Type pInitializeVP = NULL; SetViewport_Type pSetViewport1 = NULL; GetViewport_Type pGetViewport1 = NULL; GetViewport2_Type pGetViewport2 = NULL; SetViewport2_Type pSetViewport2 = NULL; GetViewport2_3_Type pGetViewport2_2 = NULL; SetViewport2_3_Type pSetViewport2_2 = NULL; GetViewport2_3_Type pGetViewport2_3 = NULL; SetViewport2_3_Type pSetViewport2_3 = NULL; GetViewport3_Type pGetViewport3 = NULL; SetViewport3_Type pSetViewport3 = NULL; DeleteViewport1_Type pDeleteViewport1 = NULL; NextViewport1_Type pNextViewport1 = NULL; DeleteViewport2_Type pDeleteViewport2 = NULL; NextViewport2_Type pNextViewport2 = NULL; ViewportClear_Type pViewportClear = NULL; #ifdef TRACEMATERIAL SetMaterial_Type pSetMaterial = NULL; GetMaterial_Type pGetMaterial = NULL; #endif HRESULT WINAPI extInitialize(void *); #ifdef TRACEMATERIAL HRESULT WINAPI extCreateMaterial1(void *, LPDIRECT3DMATERIAL *, IUnknown *); HRESULT WINAPI extCreateMaterial2(void *, LPDIRECT3DMATERIAL2 *, IUnknown *); HRESULT WINAPI extCreateMaterial3(void *, LPDIRECT3DMATERIAL3 *, IUnknown *); #endif HRESULT WINAPI extCreateViewport1(void *, LPDIRECT3DVIEWPORT *, IUnknown *); HRESULT WINAPI extCreateViewport2(void *, LPDIRECT3DVIEWPORT2 *, IUnknown *); HRESULT WINAPI extCreateViewport3(void *, LPDIRECT3DVIEWPORT3 *, IUnknown *); HRESULT WINAPI extFindDevice1(void *, LPD3DFINDDEVICESEARCH, LPD3DFINDDEVICERESULT); HRESULT WINAPI extFindDevice2(void *, LPD3DFINDDEVICESEARCH, LPD3DFINDDEVICERESULT); HRESULT WINAPI extFindDevice3(void *, LPD3DFINDDEVICESEARCH, LPD3DFINDDEVICERESULT); HRESULT WINAPI extCreateDevice2(void *, REFCLSID, LPDIRECTDRAWSURFACE, LPDIRECT3DDEVICE2 *); HRESULT WINAPI extCreateDevice3(void *, REFCLSID, LPDIRECTDRAWSURFACE4, LPDIRECT3DDEVICE3 *, LPUNKNOWN); HRESULT WINAPI extCreateDevice7(void *, REFCLSID, LPDIRECTDRAWSURFACE7, LPDIRECT3DDEVICE7 *); HRESULT WINAPI extDeleteViewport1(void *, LPDIRECT3DVIEWPORT); HRESULT WINAPI extNextViewport1(void *, LPDIRECT3DVIEWPORT, LPDIRECT3DVIEWPORT *, DWORD); HRESULT WINAPI extDeleteViewport2(void *, LPDIRECT3DVIEWPORT2); HRESULT WINAPI extNextViewport2(void *, LPDIRECT3DVIEWPORT2, LPDIRECT3DVIEWPORT2 *, DWORD); HRESULT WINAPI extViewportClear(void *, DWORD, LPD3DRECT, DWORD); HRESULT WINAPI extInitializeVP(void *, LPDIRECT3D); HRESULT WINAPI extSetViewport1(void *, LPD3DVIEWPORT); HRESULT WINAPI extGetViewport1(void *, LPD3DVIEWPORT); HRESULT WINAPI extSetViewport2(void *, LPD3DVIEWPORT); HRESULT WINAPI extGetViewport2(void *, LPD3DVIEWPORT); HRESULT WINAPI extSetViewport3(void *, LPD3DVIEWPORT); HRESULT WINAPI extGetViewport3(void *, LPD3DVIEWPORT); #ifdef TRACEMATERIAL HRESULT WINAPI extSetMaterial(void *, LPD3DMATERIAL); HRESULT WINAPI extGetMaterial(void *, LPD3DMATERIAL); #endif HRESULT WINAPI extQueryInterfaceD3(void *, REFIID, LPVOID *); HRESULT WINAPI extQueryInterfaceD3D1(void *, REFIID, LPVOID *); HRESULT WINAPI extQueryInterfaceD3D2(void *, REFIID, LPVOID *); HRESULT WINAPI extQueryInterfaceD3D3(void *, REFIID, LPVOID *); HRESULT WINAPI extQueryInterfaceD3D7(void *, REFIID, LPVOID *); ULONG WINAPI extReleaseD3D1(LPDIRECT3DDEVICE); ULONG WINAPI extReleaseD3D2(LPDIRECT3DDEVICE); ULONG WINAPI extReleaseD3D3(LPDIRECT3DDEVICE); ULONG WINAPI extReleaseD3D7(LPDIRECT3DDEVICE); HRESULT WINAPI extBeginScene1(void *); HRESULT WINAPI extEndScene1(void *); HRESULT WINAPI extBeginScene2(void *); HRESULT WINAPI extEndScene2(void *); HRESULT WINAPI extBeginScene3(void *); HRESULT WINAPI extEndScene3(void *); HRESULT WINAPI extBeginScene7(void *); HRESULT WINAPI extEndScene7(void *); HRESULT WINAPI extSetRenderState2(void *, D3DRENDERSTATETYPE, DWORD); HRESULT WINAPI extSetRenderState3(void *, D3DRENDERSTATETYPE, DWORD); HRESULT WINAPI extSetRenderState7(void *, D3DRENDERSTATETYPE, DWORD); HRESULT WINAPI extD3DGetCaps1(void *, LPD3DDEVICEDESC, LPD3DDEVICEDESC); HRESULT WINAPI extD3DGetCaps2(void *, LPD3DDEVICEDESC, LPD3DDEVICEDESC); HRESULT WINAPI extD3DGetCaps3(void *, LPD3DDEVICEDESC, LPD3DDEVICEDESC); HRESULT WINAPI extD3DGetCaps7(void *, LPD3DDEVICEDESC7); HRESULT WINAPI extSetLightState3(void *d3dd, D3DLIGHTSTATETYPE d3dls, DWORD t); HRESULT WINAPI extSetViewport3(void *, LPD3DVIEWPORT); HRESULT WINAPI extGetViewport3(void *, LPD3DVIEWPORT); HRESULT WINAPI extAddViewport1(void *, LPDIRECT3DVIEWPORT); HRESULT WINAPI extAddViewport2(void *, LPDIRECT3DVIEWPORT2); HRESULT WINAPI extAddViewport3(void *, LPDIRECT3DVIEWPORT3); HRESULT WINAPI extGetViewport2(void *, LPD3DVIEWPORT); HRESULT WINAPI extSetViewport2(void *, LPD3DVIEWPORT); HRESULT WINAPI extGetViewport2_2(void *, LPD3DVIEWPORT2); HRESULT WINAPI extSetViewport2_2(void *, LPD3DVIEWPORT2); HRESULT WINAPI extGetViewport2_3(void *, LPD3DVIEWPORT2); HRESULT WINAPI extSetViewport2_3(void *, LPD3DVIEWPORT2); HRESULT WINAPI extSetCurrentViewport2(void *, LPDIRECT3DVIEWPORT2); HRESULT WINAPI extGetCurrentViewport2(void *, LPDIRECT3DVIEWPORT2 *); HRESULT WINAPI extSetCurrentViewport3(void *, LPDIRECT3DVIEWPORT3); HRESULT WINAPI extGetCurrentViewport3(void *, LPDIRECT3DVIEWPORT3 *); HRESULT WINAPI extSetViewport7(void *, LPD3DVIEWPORT7); HRESULT WINAPI extGetViewport7(void *, LPD3DVIEWPORT7); HRESULT WINAPI extSetTexture3(void *, DWORD, LPDIRECT3DTEXTURE2); HRESULT WINAPI extSetTexture7(void *, DWORD, LPDIRECTDRAWSURFACE7); HRESULT WINAPI extSwapTextureHandles(void *, LPDIRECT3DTEXTURE, LPDIRECT3DTEXTURE); HRESULT WINAPI extSwapTextureHandles2(void *, LPDIRECT3DTEXTURE2, LPDIRECT3DTEXTURE2); HRESULT WINAPI extSetTransform2(void *, D3DTRANSFORMSTATETYPE, LPD3DMATRIX); HRESULT WINAPI extSetTransform3(void *, D3DTRANSFORMSTATETYPE, LPD3DMATRIX); HRESULT WINAPI extSetTransform7(void *, D3DTRANSFORMSTATETYPE, LPD3DMATRIX); // Texture typedef HRESULT (WINAPI *TexInitialize_Type)(void *, LPDIRECT3DDEVICE, LPDIRECTDRAWSURFACE); typedef HRESULT (WINAPI *TexGetHandle_Type)(void *, LPDIRECT3DDEVICE, LPD3DTEXTUREHANDLE); typedef HRESULT (WINAPI *TexPaletteChanged_Type)(void *, DWORD, DWORD); typedef HRESULT (WINAPI *TexLoad_Type)(void *, LPDIRECT3DTEXTURE); typedef HRESULT (WINAPI *TexUnload_Type)(void *); TexInitialize_Type pTInitialize = NULL; TexGetHandle_Type pTGetHandle1, pTGetHandle2; TexPaletteChanged_Type pTPaletteChanged1, pTPaletteChanged2; TexLoad_Type pTLoad1, pTLoad2; TexUnload_Type pTUnload = NULL; HRESULT WINAPI extTexInitialize(void *, LPDIRECT3DDEVICE, LPDIRECTDRAWSURFACE); HRESULT WINAPI extTexGetHandle1(void *, LPDIRECT3DDEVICE, LPD3DTEXTUREHANDLE); HRESULT WINAPI extTexGetHandle2(void *, LPDIRECT3DDEVICE2, LPD3DTEXTUREHANDLE); HRESULT WINAPI extTexPaletteChanged1(void *, DWORD, DWORD); HRESULT WINAPI extTexPaletteChanged2(void *, DWORD, DWORD); HRESULT WINAPI extTexLoad1(void *, LPDIRECT3DTEXTURE); HRESULT WINAPI extTexLoad2(void *, LPDIRECT3DTEXTURE); HRESULT WINAPI extTexUnload(void *); typedef HRESULT (WINAPI *Execute_Type)(void *, LPDIRECT3DEXECUTEBUFFER, LPDIRECT3DVIEWPORT, DWORD); HRESULT WINAPI extExecute(void *, LPDIRECT3DEXECUTEBUFFER, LPDIRECT3DVIEWPORT, DWORD); Execute_Type pExecute = NULL; extern char *ExplainDDError(DWORD); static char *sFourCC(DWORD fcc) { static char sRet[5]; char c; int i; char *t=&sRet[0]; for(i=0; i<4; i++){ c = fcc & (0xFF); *t++ = isprint(c) ? c : '.'; c = c >> 8; } *t = 0; return sRet; } char *DumpPixelFormat(LPDDPIXELFORMAT ddpfPixelFormat) { static char sBuf[512]; char sItem[256]; DWORD flags=ddpfPixelFormat->dwFlags; sprintf(sBuf, " PixelFormat flags=%x(%s) BPP=%d", flags, ExplainPixelFormatFlags(flags), ddpfPixelFormat->dwRGBBitCount); if (flags & DDPF_RGB) { if (flags & DDPF_ALPHAPIXELS) { sprintf(sItem, " RGBA=(%x,%x,%x,%x)", ddpfPixelFormat->dwRBitMask, ddpfPixelFormat->dwGBitMask, ddpfPixelFormat->dwBBitMask, ddpfPixelFormat->dwRGBAlphaBitMask); } else { sprintf(sItem, " RGB=(%x,%x,%x)", ddpfPixelFormat->dwRBitMask, ddpfPixelFormat->dwGBitMask, ddpfPixelFormat->dwBBitMask); } strcat(sBuf, sItem); } if (flags & DDPF_YUV) { sprintf(sItem, " YUVA=(%x,%x,%x,%x)", ddpfPixelFormat->dwYBitMask, ddpfPixelFormat->dwUBitMask, ddpfPixelFormat->dwVBitMask, ddpfPixelFormat->dwYUVAlphaBitMask); strcat(sBuf, sItem); } if (flags & DDPF_ZBUFFER) { sprintf(sItem, " SdZSbL=(%x,%x,%x,%x)", ddpfPixelFormat->dwStencilBitDepth, ddpfPixelFormat->dwZBitMask, ddpfPixelFormat->dwStencilBitMask, ddpfPixelFormat->dwLuminanceAlphaBitMask); strcat(sBuf, sItem); } if (flags & DDPF_ALPHA) { sprintf(sItem, " LBdBlZ=(%x,%x,%x,%x)", ddpfPixelFormat->dwLuminanceBitMask, ddpfPixelFormat->dwBumpDvBitMask, ddpfPixelFormat->dwBumpLuminanceBitMask, ddpfPixelFormat->dwRGBZBitMask); strcat(sBuf, sItem); } if (flags & DDPF_LUMINANCE) { sprintf(sItem, " BMbMF=(%x,%x,%x,%x)", ddpfPixelFormat->dwBumpDuBitMask, ddpfPixelFormat->MultiSampleCaps.wBltMSTypes, ddpfPixelFormat->MultiSampleCaps.wFlipMSTypes, ddpfPixelFormat->dwYUVZBitMask); strcat(sBuf, sItem); } if (flags & DDPF_BUMPDUDV) { sprintf(sItem, " O=(%x)", ddpfPixelFormat->dwOperations); strcat(sBuf, sItem); } if (flags & DDPF_FOURCC) { sprintf(sItem, " FourCC=%x(%s)", ddpfPixelFormat->dwFourCC, sFourCC(ddpfPixelFormat->dwFourCC)); strcat(sBuf, sItem); } return sBuf; } int HookDirect3D7(HMODULE module, int version){ void *tmp; HINSTANCE hinst; LPDIRECT3D lpd3d=NULL; HRESULT res; OutTraceDW("HookDirect3D7: module=%x version=%d\n", module, version); switch(version){ case 0: case 1: tmp = HookAPI(module, "d3dim.dll", NULL, "Direct3DCreate", extDirect3DCreate); if(tmp) pDirect3DCreate = (Direct3DCreate_Type)tmp; tmp = HookAPI(module, "d3dim.dll", NULL, "Direct3DCreateDevice", extDirect3DCreateDevice); if(tmp) pDirect3DCreateDevice = (Direct3DCreateDevice_Type)tmp; tmp = HookAPI(module, "d3dim700.dll", NULL, "Direct3DCreate", extDirect3DCreate); if(tmp) pDirect3DCreate = (Direct3DCreate_Type)tmp; tmp = HookAPI(module, "d3dim700.dll", NULL, "Direct3DCreateDevice", extDirect3DCreateDevice); if(tmp) pDirect3DCreateDevice = (Direct3DCreateDevice_Type)tmp; break; case 7: hinst = (*pLoadLibraryA)("d3dim.dll"); if (hinst){ pDirect3DCreate = (Direct3DCreate_Type)(*pGetProcAddress)(hinst, "Direct3DCreate"); if(pDirect3DCreate){ res = extDirect3DCreate(0x0700, &lpd3d, NULL); if(res == DD_OK) lpd3d->Release(); } } else { hinst = (*pLoadLibraryA)("d3dim700.dll"); pDirect3DCreate = (Direct3DCreate_Type)(*pGetProcAddress)(hinst, "Direct3DCreate"); if(pDirect3DCreate){ res = extDirect3DCreate(0x0700, &lpd3d, NULL); if(res == DD_OK) lpd3d->Release(); } } break; } return 0; } FARPROC Remap_d3d7_ProcAddress(LPCSTR proc, HMODULE hModule) { if (!strcmp(proc,"Direct3DCreate") && !pDirect3DCreate){ pDirect3DCreate=(Direct3DCreate_Type)(*pGetProcAddress)(hModule, proc); OutTraceD3D("GetProcAddress: hooking proc=%s at addr=%x\n", ProcToString(proc), pDirect3DCreate); return (FARPROC)extDirect3DCreate; } if (!strcmp(proc,"Direct3DCreateDevice") && !pDirect3DCreateDevice){ pDirect3DCreateDevice=(Direct3DCreateDevice_Type)(*pGetProcAddress)(hModule, proc); OutTraceD3D("GetProcAddress: hooking proc=%s at addr=%x\n", ProcToString(proc), pDirect3DCreateDevice); return (FARPROC)extDirect3DCreateDevice; } // NULL -> keep the original call address return NULL; } void HookDirect3DSession(LPDIRECTDRAW *lplpdd, int d3dversion) { OutTraceD3D("HookDirect3DSession: d3d=%x d3dversion=%d\n", *lplpdd, d3dversion); switch(d3dversion){ case 1: SetHook((void *)(**(DWORD **)lplpdd + 0), extQueryInterfaceD31, (void **)&pQueryInterfaceD31, "QueryInterface(D3S1)"); SetHook((void *)(**(DWORD **)lplpdd + 12), extInitialize, (void **)&pInitialize, "Initialize(1)"); SetHook((void *)(**(DWORD **)lplpdd + 16), extEnumDevices1, (void **)&pEnumDevices1, "EnumDevices(1)"); SetHook((void *)(**(DWORD **)lplpdd + 20), extCreateLight1, (void **)&pCreateLight1, "CreateLight(1)"); #ifdef TRACEMATERIAL SetHook((void *)(**(DWORD **)lplpdd + 24), extCreateMaterial1, (void **)&pCreateMaterial1, "CreateMaterial(1)"); #endif SetHook((void *)(**(DWORD **)lplpdd + 28), extCreateViewport1, (void **)&pCreateViewport1, "CreateViewport(1)"); SetHook((void *)(**(DWORD **)lplpdd + 32), extFindDevice1, (void **)&pFindDevice1, "FindDevice(1)"); break; case 2: SetHook((void *)(**(DWORD **)lplpdd + 0), extQueryInterfaceD32, (void **)&pQueryInterfaceD32, "QueryInterface(D3S2)"); SetHook((void *)(**(DWORD **)lplpdd + 12), extEnumDevices2, (void **)&pEnumDevices2, "EnumDevices(2)"); SetHook((void *)(**(DWORD **)lplpdd + 16), extCreateLight2, (void **)&pCreateLight2, "CreateLight(2)"); #ifdef TRACEMATERIAL SetHook((void *)(**(DWORD **)lplpdd + 20), extCreateMaterial2, (void **)&pCreateMaterial2, "CreateMaterial(2)"); #endif SetHook((void *)(**(DWORD **)lplpdd + 24), extCreateViewport2, (void **)&pCreateViewport2, "CreateViewport(2)"); SetHook((void *)(**(DWORD **)lplpdd + 28), extFindDevice2, (void **)&pFindDevice2, "FindDevice(2)"); SetHook((void *)(**(DWORD **)lplpdd + 32), extCreateDevice2, (void **)&pCreateDevice2, "CreateDevice(D3D2)"); break; case 3: SetHook((void *)(**(DWORD **)lplpdd + 0), extQueryInterfaceD33, (void **)&pQueryInterfaceD33, "QueryInterface(D3S3)"); SetHook((void *)(**(DWORD **)lplpdd + 12), extEnumDevices3, (void **)&pEnumDevices3, "EnumDevices(3)"); SetHook((void *)(**(DWORD **)lplpdd + 16), extCreateLight3, (void **)&pCreateLight3, "CreateLight(3)"); #ifdef TRACEMATERIAL SetHook((void *)(**(DWORD **)lplpdd + 20), extCreateMaterial3, (void **)&pCreateMaterial3, "CreateMaterial(3)"); #endif SetHook((void *)(**(DWORD **)lplpdd + 24), extCreateViewport3, (void **)&pCreateViewport3, "CreateViewport(3)"); SetHook((void *)(**(DWORD **)lplpdd + 28), extFindDevice3, (void **)&pFindDevice3, "FindDevice(3)"); SetHook((void *)(**(DWORD **)lplpdd + 32), extCreateDevice3, (void **)&pCreateDevice3, "CreateDevice(D3D3)"); SetHook((void *)(**(DWORD **)lplpdd + 40), extEnumZBufferFormats3, (void **)&pEnumZBufferFormats3, "EnumZBufferFormats(D3D3)"); break; case 7: SetHook((void *)(**(DWORD **)lplpdd + 0), extQueryInterfaceD37, (void **)&pQueryInterfaceD37, "QueryInterface(D3S7)"); SetHook((void *)(**(DWORD **)lplpdd + 12), extEnumDevices7, (void **)&pEnumDevices7, "EnumDevices(7)"); SetHook((void *)(**(DWORD **)lplpdd + 16), extCreateDevice7, (void **)&pCreateDevice7, "CreateDevice(D3D7)"); SetHook((void *)(**(DWORD **)lplpdd + 24), extEnumZBufferFormats7, (void **)&pEnumZBufferFormats7, "EnumZBufferFormats(D3D7)"); break; } } void HookDirect3DDevice(void **lpd3ddev, int d3dversion) { OutTraceD3D("HookDirect3DDevice: d3ddev=%x d3dversion=%d\n", lpd3ddev, d3dversion); switch(d3dversion){ case 1: SetHook((void *)(**(DWORD **)lpd3ddev + 0), extQueryInterfaceD3D1, (void **)&pQueryInterfaceD3D1, "QueryInterface(D3DD1)"); SetHook((void *)(**(DWORD **)lpd3ddev + 8), extReleaseD3D1, (void **)&pReleaseD3D1, "ReleaseD3D(1)"); SetHook((void *)(**(DWORD **)lpd3ddev + 16), extD3DGetCaps1, (void **)&pD3DGetCaps1, "GetCaps(1)"); SetHook((void *)(**(DWORD **)lpd3ddev + 20), extSwapTextureHandles, (void **)&pSwapTextureHandles, "SwapTextureHandles(1)"); SetHook((void *)(**(DWORD **)lpd3ddev + 32), extExecute, (void **)&pExecute, "Execute(1)"); SetHook((void *)(**(DWORD **)lpd3ddev + 36), extAddViewport1, (void **)&pAddViewport1, "AddViewport(1)"); SetHook((void *)(**(DWORD **)lpd3ddev + 40), extDeleteViewport1, (void **)&pDeleteViewport1, "DeleteViewport(1)"); SetHook((void *)(**(DWORD **)lpd3ddev + 44), extNextViewport1, (void **)&pNextViewport1, "NextViewport(1)"); SetHook((void *)(**(DWORD **)lpd3ddev + 56), extEnumTextureFormats1, (void **)&pEnumTextureFormats1, "EnumTextureFormats(1)"); SetHook((void *)(**(DWORD **)lpd3ddev + 76), extBeginScene1, (void **)&pBeginScene1, "BeginScene(1)"); SetHook((void *)(**(DWORD **)lpd3ddev + 80), extEndScene1, (void **)&pEndScene1, "EndScene(1)"); break; case 2: SetHook((void *)(**(DWORD **)lpd3ddev + 0), extQueryInterfaceD3D2, (void **)&pQueryInterfaceD3D2, "QueryInterface(D3DD2)"); SetHook((void *)(**(DWORD **)lpd3ddev + 8), extReleaseD3D2, (void **)&pReleaseD3D2, "ReleaseD3D(2)"); SetHook((void *)(**(DWORD **)lpd3ddev + 12), extD3DGetCaps2, (void **)&pD3DGetCaps2, "GetCaps(2)"); SetHook((void *)(**(DWORD **)lpd3ddev + 16), extSwapTextureHandles2, (void **)&pSwapTextureHandles2, "SwapTextureHandles(2)"); SetHook((void *)(**(DWORD **)lpd3ddev + 24), extAddViewport2, (void **)&pAddViewport2, "AddViewport(2)"); SetHook((void *)(**(DWORD **)lpd3ddev + 28), extDeleteViewport2, (void **)&pDeleteViewport2, "DeleteViewport(2)"); SetHook((void *)(**(DWORD **)lpd3ddev + 32), extNextViewport2, (void **)&pNextViewport2, "NextViewport(2)"); SetHook((void *)(**(DWORD **)lpd3ddev + 36), extEnumTextureFormats2, (void **)&pEnumTextureFormats2, "EnumTextureFormats(2)"); SetHook((void *)(**(DWORD **)lpd3ddev + 40), extBeginScene2, (void **)&pBeginScene2, "BeginScene(2)"); SetHook((void *)(**(DWORD **)lpd3ddev + 44), extEndScene2, (void **)&pEndScene2, "EndScene(2)"); SetHook((void *)(**(DWORD **)lpd3ddev + 52), extSetCurrentViewport2, (void **)&pSetCurrentViewport2, "SetCurrentViewport(2)"); SetHook((void *)(**(DWORD **)lpd3ddev + 56), extGetCurrentViewport2, (void **)&pGetCurrentViewport2, "GetCurrentViewport(2)"); SetHook((void *)(**(DWORD **)lpd3ddev + 92), extSetRenderState2, (void **)&pSetRenderState2, "SetRenderState(2)"); //SetHook((void *)(**(DWORD **)lpd3ddev + 100), extSetTransform2, (void **)&pSetTransform2, "SetTransform(2)"); if(pSetRenderState2){ if(dxw.dwFlags2 & WIREFRAME)(*pSetRenderState2)(*lpd3ddev, D3DRENDERSTATE_FILLMODE, D3DFILL_WIREFRAME); if(dxw.dwFlags4 & DISABLEFOGGING) (*pSetRenderState2)(*lpd3ddev, D3DRENDERSTATE_FOGENABLE, FALSE); if(dxw.dwFlags4 & ZBUFFERALWAYS) (*pSetRenderState2)(*lpd3ddev, D3DRENDERSTATE_ZFUNC, D3DCMP_ALWAYS); } break; case 3: SetHook((void *)(**(DWORD **)lpd3ddev + 0), extQueryInterfaceD3D3, (void **)&pQueryInterfaceD3D3, "QueryInterface(D3DD3)"); SetHook((void *)(**(DWORD **)lpd3ddev + 8), extReleaseD3D3, (void **)&pReleaseD3D3, "ReleaseD3D(3)"); SetHook((void *)(**(DWORD **)lpd3ddev + 12), extD3DGetCaps3, (void **)&pD3DGetCaps3, "GetCaps(3)"); SetHook((void *)(**(DWORD **)lpd3ddev + 20), extAddViewport3, (void **)&pAddViewport3, "AddViewport(3)"); SetHook((void *)(**(DWORD **)lpd3ddev + 32), extEnumTextureFormats3, (void **)&pEnumTextureFormats3, "EnumTextureFormats(3)"); SetHook((void *)(**(DWORD **)lpd3ddev + 36), extBeginScene3, (void **)&pBeginScene3, "BeginScene(3)"); SetHook((void *)(**(DWORD **)lpd3ddev + 40), extEndScene3, (void **)&pEndScene3, "EndScene(3)"); SetHook((void *)(**(DWORD **)lpd3ddev + 48), extSetCurrentViewport3, (void **)&pSetCurrentViewport3, "SetCurrentViewport(3)"); SetHook((void *)(**(DWORD **)lpd3ddev + 52), extGetCurrentViewport3, (void **)&pGetCurrentViewport3, "GetCurrentViewport(3)"); SetHook((void *)(**(DWORD **)lpd3ddev + 88), extSetRenderState3, (void **)&pSetRenderState3, "SetRenderState(3)"); SetHook((void *)(**(DWORD **)lpd3ddev + 96), extSetLightState3, (void **)&pSetLightState3, "SetLightState(3)"); //SetHook((void *)(**(DWORD **)lpd3ddev + 100), extSetTransform3, (void **)&pSetTransform3, "SetTransform(3)"); if (dxw.dwFlags4 & NOTEXTURES) SetHook((void *)(**(DWORD **)lpd3ddev + 152), extSetTexture3, (void **)&pSetTexture3, "SetTexture(D3)"); if(pSetRenderState3){ if(dxw.dwFlags2 & WIREFRAME)(*pSetRenderState3)(*lpd3ddev, D3DRENDERSTATE_FILLMODE, D3DFILL_WIREFRAME); if(dxw.dwFlags4 & DISABLEFOGGING) (*pSetRenderState3)(*lpd3ddev, D3DRENDERSTATE_FOGENABLE, FALSE); if(dxw.dwFlags4 & ZBUFFERALWAYS) (*pSetRenderState3)(*lpd3ddev, D3DRENDERSTATE_ZFUNC, D3DCMP_ALWAYS); } break; case 7: SetHook((void *)(**(DWORD **)lpd3ddev + 0), extQueryInterfaceD3D7, (void **)&pQueryInterfaceD3D7, "QueryInterface(D3DD7)"); SetHook((void *)(**(DWORD **)lpd3ddev + 8), extReleaseD3D7, (void **)&pReleaseD3D7, "ReleaseD3D(7)"); SetHook((void *)(**(DWORD **)lpd3ddev + 12), extD3DGetCaps7, (void **)&pD3DGetCaps7, "GetCaps(7)"); SetHook((void *)(**(DWORD **)lpd3ddev + 16), extEnumTextureFormats7, (void **)&pEnumTextureFormats7, "EnumTextureFormats(7)"); SetHook((void *)(**(DWORD **)lpd3ddev + 20), extBeginScene7, (void **)&pBeginScene7, "BeginScene(7)"); SetHook((void *)(**(DWORD **)lpd3ddev + 24), extEndScene7, (void **)&pEndScene7, "EndScene(7)"); //SetHook((void *)(**(DWORD **)lpd3ddev + 44), extSetTransform7, (void **)&pSetTransform7, "SetTransform(7)"); //SetHook((void *)(**(DWORD **)lpd3ddev + 52), extSetViewport7, (void **)&pSetViewport7, "SetViewport(7)"); //SetHook((void *)(**(DWORD **)lpd3ddev + 60), extGetViewport7, (void **)&pGetViewport7, "GetViewport(7)"); SetHook((void *)(**(DWORD **)lpd3ddev + 80), extSetRenderState7, (void **)&pSetRenderState7, "SetRenderState(7)"); if (dxw.dwFlags4 & NOTEXTURES) SetHook((void *)(**(DWORD **)lpd3ddev + 140), extSetTexture7, (void **)&pSetTexture7, "SetTexture(D7)"); if(pSetRenderState7){ if(dxw.dwFlags2 & WIREFRAME)(*pSetRenderState7)(*lpd3ddev, D3DRENDERSTATE_FILLMODE, D3DFILL_WIREFRAME); if(dxw.dwFlags4 & DISABLEFOGGING) (*pSetRenderState7)(*lpd3ddev, D3DRENDERSTATE_FOGENABLE, FALSE); if(dxw.dwFlags4 & ZBUFFERALWAYS) (*pSetRenderState7)(*lpd3ddev, D3DRENDERSTATE_ZFUNC, D3DCMP_ALWAYS); } break; } } HRESULT WINAPI extDirect3DCreate(UINT SDKVersion, LPDIRECT3D *lplpd3d, LPUNKNOWN pUnkOuter) { HRESULT res; UINT d3dversion; d3dversion = 1; if(SDKVersion >= 0x0500) d3dversion = 2; if(SDKVersion >= 0x0600) d3dversion = 3; if(SDKVersion >= 0x0700) d3dversion = 7; OutTraceD3D("Direct3DCreate(D3D%d): SDKVersion=%x UnkOuter=%x\n", d3dversion, SDKVersion, pUnkOuter); res=(*pDirect3DCreate)(SDKVersion, lplpd3d, pUnkOuter); if(res) { OutTraceE("Direct3DCreate ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); return res; } HookDirect3DSession((LPDIRECTDRAW *)lplpd3d, d3dversion); OutTraceD3D("Direct3DCreate: d3d=%x\n", *lplpd3d); return res; } HRESULT WINAPI extDirect3DCreateDevice(GUID FAR *lpGUID, LPDIRECT3D lpd3ddevice, LPDIRECTDRAWSURFACE surf, LPDIRECT3D *lplpd3ddevice, LPUNKNOWN pUnkOuter) { HRESULT res; int d3dversion = 0; switch(lpGUID->Data1){ case 0x64108800: // IID_IDirect3DDevice d3dversion = 1; break; case 0x93281501: // IID_IDirect3DDevice2 d3dversion = 2; break; case 0xb0ab3b60: // IID_IDirect3DDevice3 d3dversion = 3; break; case 0xf5049e79: // IID_IDirect3DDevice7 d3dversion = 7; break; } OutTraceD3D("Direct3DCreateDevice: guid=%x(%s) d3ddevice=%x dds=%x%s UnkOuter=%x\n", lpGUID, ExplainGUID(lpGUID), lpd3ddevice, surf, dxwss.ExplainSurfaceRole(surf), pUnkOuter); res=(*pDirect3DCreateDevice)(lpGUID, lpd3ddevice, surf, lplpd3ddevice, pUnkOuter); if(res) OutTraceE("Direct3DCreateDevice ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); else { OutTraceD3D("Direct3DCreateDevice: d3ddevice=%x\n", *lplpd3ddevice); if(d3dversion) HookDirect3DDevice((void **)lplpd3ddevice, d3dversion); } return res; } void HookViewport(LPDIRECT3DVIEWPORT *lpViewport, int d3dversion) { OutTraceD3D("HookViewport: Viewport=%x d3dversion=%d\n", *lpViewport, d3dversion); switch(d3dversion){ case 1: SetHook((void *)(**(DWORD **)lpViewport + 12), extInitializeVP, (void **)&pInitializeVP, "Initialize(VP1)"); SetHook((void *)(**(DWORD **)lpViewport + 16), extGetViewport1, (void **)&pGetViewport1, "GetViewport(1)"); SetHook((void *)(**(DWORD **)lpViewport + 20), extSetViewport1, (void **)&pSetViewport1, "SetViewport(1)"); // to do: why Clear method crashes in "Forsaken" in emulation and GDI mode??? // SetHook((void *)(**(DWORD **)lpViewport + 48), extViewportClear, (void **)&pViewportClear, "Clear(1)"); break; case 2: SetHook((void *)(**(DWORD **)lpViewport + 12), extInitializeVP, (void **)&pInitializeVP, "Initialize(VP2)"); SetHook((void *)(**(DWORD **)lpViewport + 16), extGetViewport2, (void **)&pGetViewport2, "GetViewport(2)"); SetHook((void *)(**(DWORD **)lpViewport + 20), extSetViewport2, (void **)&pSetViewport2, "SetViewport(2)"); SetHook((void *)(**(DWORD **)lpViewport + 64), extGetViewport2_2, (void **)&pGetViewport2_2, "GetViewport2(2)"); SetHook((void *)(**(DWORD **)lpViewport + 68), extSetViewport2_2, (void **)&pSetViewport2_2, "SetViewport2(2)"); break; case 3: SetHook((void *)(**(DWORD **)lpViewport + 12), extInitializeVP, (void **)&pInitializeVP, "Initialize(VP3)"); SetHook((void *)(**(DWORD **)lpViewport + 16), extGetViewport3, (void **)&pGetViewport3, "GetViewport(3)"); SetHook((void *)(**(DWORD **)lpViewport + 20), extSetViewport3, (void **)&pSetViewport3, "SetViewport(3)"); SetHook((void *)(**(DWORD **)lpViewport + 64), extGetViewport2_3, (void **)&pGetViewport2_3, "GetViewport2(3)"); SetHook((void *)(**(DWORD **)lpViewport + 68), extSetViewport2_3, (void **)&pSetViewport2_3, "SetViewport2(3)"); break; case 7: break; } } #ifdef TRACEMATERIAL void HookMaterial(LPDIRECT3DMATERIAL *lpMaterial, int d3dversion) { OutTraceD3D("HookMaterial: Material=%x d3dversion=%d\n", *lpMaterial, d3dversion); switch(d3dversion){ case 1: SetHook((void *)(**(DWORD **)lpMaterial + 16), extSetMaterial, (void **)&pSetMaterial, "SetMaterial"); SetHook((void *)(**(DWORD **)lpMaterial + 20), extGetMaterial, (void **)&pGetMaterial, "GetMaterial"); break; default: SetHook((void *)(**(DWORD **)lpMaterial + 12), extSetMaterial, (void **)&pSetMaterial, "SetMaterial"); SetHook((void *)(**(DWORD **)lpMaterial + 16), extGetMaterial, (void **)&pGetMaterial, "GetMaterial"); break; } } #endif void HookTexture(LPVOID *lpTexture, int version) { OutTraceD3D("HookTexture: Texture=%x version=%d\n", *lpTexture, version); switch(version){ case 1: SetHook((void *)(**(DWORD **)lpTexture + 12), extTexInitialize, (void **)&pTInitialize, "Initialize(T1)"); SetHook((void *)(**(DWORD **)lpTexture + 16), extTexGetHandle1, (void **)&pTGetHandle1, "GetHandle(T1)"); SetHook((void *)(**(DWORD **)lpTexture + 20), extTexPaletteChanged1, (void **)&pTPaletteChanged1, "PaletteChanged(T1)"); SetHook((void *)(**(DWORD **)lpTexture + 24), extTexLoad1, (void **)&pTLoad1, "Load(T1)"); SetHook((void *)(**(DWORD **)lpTexture + 28), extTexUnload, (void **)&pTUnload, "Unload(T1)"); break; case 2: SetHook((void *)(**(DWORD **)lpTexture + 12), extTexGetHandle2, (void **)&pTGetHandle2, "GetHandle(T2)"); SetHook((void *)(**(DWORD **)lpTexture + 16), extTexPaletteChanged2, (void **)&pTPaletteChanged2, "PaletteChanged(T2)"); SetHook((void *)(**(DWORD **)lpTexture + 20), extTexLoad2, (void **)&pTLoad2, "Load(T2)"); break; } } HRESULT WINAPI extQueryInterfaceD31(void *lpd3d, REFIID riid, LPVOID *ppvObj) { return extQueryInterfaceDX(1, pQueryInterfaceD31, lpd3d, riid, ppvObj); } HRESULT WINAPI extQueryInterfaceD32(void *lpd3d, REFIID riid, LPVOID *ppvObj) { return extQueryInterfaceDX(2, pQueryInterfaceD32, lpd3d, riid, ppvObj); } HRESULT WINAPI extQueryInterfaceD33(void *lpd3d, REFIID riid, LPVOID *ppvObj) { return extQueryInterfaceDX(3, pQueryInterfaceD33, lpd3d, riid, ppvObj); } HRESULT WINAPI extQueryInterfaceD37(void *lpd3d, REFIID riid, LPVOID *ppvObj) { return extQueryInterfaceDX(7, pQueryInterfaceD37, lpd3d, riid, ppvObj); } HRESULT WINAPI extQueryInterfaceD3D1(void *lpd3ddev, REFIID riid, LPVOID *ppvObj) { return extQueryInterfaceDX(1, pQueryInterfaceD3D1, lpd3ddev, riid, ppvObj); } HRESULT WINAPI extQueryInterfaceD3D2(void *lpd3ddev, REFIID riid, LPVOID *ppvObj) { return extQueryInterfaceDX(2, pQueryInterfaceD3D2, lpd3ddev, riid, ppvObj); } HRESULT WINAPI extQueryInterfaceD3D3(void *lpd3ddev, REFIID riid, LPVOID *ppvObj) { return extQueryInterfaceDX(3, pQueryInterfaceD3D3, lpd3ddev, riid, ppvObj); } HRESULT WINAPI extQueryInterfaceD3D7(void *lpd3ddev, REFIID riid, LPVOID *ppvObj) { return extQueryInterfaceDX(7, pQueryInterfaceD3D7, lpd3ddev, riid, ppvObj); } ULONG WINAPI extReleaseD3D(int d3dversion, ReleaseD3D_Type pReleaseD3D, LPDIRECT3DDEVICE lpd3dd) { ULONG ref; OutTraceD3D("Release(D3DD%d): d3ddev=%x \n", d3dversion, lpd3dd); ref = (*pReleaseD3D)(lpd3dd); OutTraceD3D("Release(D3DD): ref=%d\n", ref); return ref; } ULONG WINAPI extReleaseD3D1(LPDIRECT3DDEVICE lpd3d) { return extReleaseD3D(1, pReleaseD3D1, lpd3d); } ULONG WINAPI extReleaseD3D2(LPDIRECT3DDEVICE lpd3d) { return extReleaseD3D(2, pReleaseD3D2, lpd3d); } ULONG WINAPI extReleaseD3D3(LPDIRECT3DDEVICE lpd3d) { return extReleaseD3D(3, pReleaseD3D3, lpd3d); } ULONG WINAPI extReleaseD3D7(LPDIRECT3DDEVICE lpd3d) { return extReleaseD3D(7, pReleaseD3D7, lpd3d); } HRESULT WINAPI extInitialize(void *lpd3d) { HRESULT res; // the Initialize method is present in D3D interface version 1 only... OutTraceD3D("Initialize(D3D1): d3d=%x\n", lpd3d); res=(*pInitialize)(lpd3d); if(res) OutTraceE("Initialize ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); else OutTraceD3D("Initialize: OK\n"); return res; } typedef struct { LPD3DENUMDEVICESCALLBACK *cb; LPVOID arg; } CallbackArg; typedef struct { LPD3DENUMDEVICESCALLBACK7 *cb; LPVOID arg; } CallbackArg7; static void DumpD3DDeviceDesc(LPD3DDEVICEDESC d3, char *label) { if(IsTraceD3D){ if(d3){ OutTrace("EnumDevices: CALLBACK dev=%s Size=%d Flags=%x ", label, d3->dwSize, d3->dwFlags); if(d3->dwFlags & D3DDD_COLORMODEL) OutTrace("ColorModel=%x ", d3->dcmColorModel); if(d3->dwFlags & D3DDD_DEVCAPS) OutTrace("DevCaps=%x ", d3->dwDevCaps); if(d3->dwFlags & D3DDD_TRANSFORMCAPS) OutTrace("TransformCaps=%x ", d3->dtcTransformCaps.dwCaps); if(d3->dwFlags & D3DDD_LIGHTINGCAPS) OutTrace("LightingCaps=%x ", d3->dlcLightingCaps); if(d3->dwFlags & D3DDD_BCLIPPING) OutTrace("Clipping=%x ", d3->bClipping); if(d3->dwFlags & D3DDD_LINECAPS) OutTrace("LineCaps=%x ", d3->dpcLineCaps); if(d3->dwFlags & D3DDD_TRICAPS) OutTrace("TriCaps=%x ", d3->dpcTriCaps); if(d3->dwFlags & D3DDD_DEVICERENDERBITDEPTH) OutTrace("DeviceRenderBitDepth=%d ", d3->dwDeviceRenderBitDepth); if(d3->dwFlags & D3DDD_DEVICEZBUFFERBITDEPTH) OutTrace("DeviceZBufferBitDepth=%d ", d3->dwDeviceZBufferBitDepth); if(d3->dwFlags & D3DDD_MAXBUFFERSIZE) OutTrace("MaxBufferSize=%d ", d3->dwMaxBufferSize); if(d3->dwFlags & D3DDD_MAXVERTEXCOUNT) OutTrace("MaxVertexCount=%d ", d3->dwMaxVertexCount); OutTrace("Texture min=(%dx%d) max=(%dx%d)\n", d3->dwMinTextureWidth, d3->dwMinTextureHeight, d3->dwMaxTextureWidth, d3->dwMaxTextureHeight); if(IsTraceHex) HexTrace((unsigned char *)d3, d3->dwSize); } else OutTrace("EnumDevices: CALLBACK dev=%s ddesc=NULL\n", label); } } static void DumpD3DPrimCaps(char *label, D3DPRIMCAPS *pc) { OutTrace("%s={siz=%d Misc=%x Raster=%x ZCmp=%x SrcBlend=%x DestBlend=%x AlphaCmp=%x Shade=%x Tex=%x TexFil=%x TexBlend=%x TexAddr=%x Stipple=(%dx%d)} ", label, pc->dwSize, pc->dwMiscCaps, pc->dwRasterCaps, pc->dwZCmpCaps, pc->dwSrcBlendCaps, pc->dwDestBlendCaps, pc->dwAlphaCmpCaps, pc->dwShadeCaps, pc->dwTextureCaps, pc->dwTextureFilterCaps, pc->dwTextureBlendCaps, pc->dwTextureAddressCaps, pc->dwStippleWidth, pc->dwStippleHeight); } static void DumpD3DDeviceDesc7(LPD3DDEVICEDESC7 d3, char *label) { if(IsTraceD3D){ if(d3){ OutTrace("EnumDevices: CALLBACK dev=%s DevCaps=%x ", label, d3->dwDevCaps); DumpD3DPrimCaps("LineCaps", &d3->dpcLineCaps); DumpD3DPrimCaps("TriCaps", &d3->dpcLineCaps); OutTrace("RenderBitDepth=%d ZBufferBitDepth", d3->dwDeviceRenderBitDepth, d3->dwDeviceZBufferBitDepth); OutTrace("Texture min=(%dx%d) max=(%dx%d)\n", d3->dwMinTextureWidth, d3->dwMinTextureHeight, d3->dwMaxTextureWidth, d3->dwMaxTextureHeight); // to be completed .... //OutTrace("\n"); if(IsTraceHex) HexTrace((unsigned char *)d3, sizeof(D3DDEVICEDESC7)); } else OutTrace("EnumDevices: CALLBACK dev=%s ddesc=NULL\n", label); } } HRESULT WINAPI extDeviceProxy(GUID FAR *lpGuid, LPSTR lpDeviceDescription, LPSTR lpDeviceName, LPD3DDEVICEDESC lpd3ddd1, LPD3DDEVICEDESC lpd3ddd2, LPVOID arg) { HRESULT res; OutTraceD3D("EnumDevices: CALLBACK GUID=%x(%s) DeviceDescription=\"%s\", DeviceName=\"%s\", arg=%x\n", lpGuid->Data1, ExplainGUID(lpGuid), lpDeviceDescription, lpDeviceName, ((CallbackArg *)arg)->arg); DumpD3DDeviceDesc(lpd3ddd1, "HWDEV"); DumpD3DDeviceDesc(lpd3ddd2, "SWDEV"); // IID_IDirect3DHALDevice = 0x84e63de0.... if((dxw.dwFlags8 & NOHALDEVICE) && (lpGuid->Data1 == 0x84e63de0)) { OutTraceDW("EnumDevices: D3DHALDEVICE SKIP\n"); return TRUE; } if(dxw.dwFlags4 & NOPOWER2FIX){ D3DDEVICEDESC lpd3ddd1fix, lpd3ddd2fix; if(lpd3ddd1) memcpy(&lpd3ddd1fix, lpd3ddd1, sizeof(D3DDEVICEDESC)); if(lpd3ddd2) memcpy(&lpd3ddd2fix, lpd3ddd2, sizeof(D3DDEVICEDESC)); lpd3ddd1fix.dpcLineCaps.dwTextureCaps|=D3DPTEXTURECAPS_NONPOW2CONDITIONAL|D3DPTEXTURECAPS_POW2; lpd3ddd1fix.dpcTriCaps.dwTextureCaps|=D3DPTEXTURECAPS_NONPOW2CONDITIONAL|D3DPTEXTURECAPS_POW2; lpd3ddd2fix.dpcLineCaps.dwTextureCaps|=D3DPTEXTURECAPS_NONPOW2CONDITIONAL|D3DPTEXTURECAPS_POW2; lpd3ddd2fix.dpcTriCaps.dwTextureCaps|=D3DPTEXTURECAPS_NONPOW2CONDITIONAL|D3DPTEXTURECAPS_POW2; res = (*(((CallbackArg *)arg)->cb))(lpGuid, lpDeviceDescription, lpDeviceName, lpd3ddd1?&lpd3ddd1fix:NULL, lpd3ddd2?&lpd3ddd2fix:NULL, ((CallbackArg *)arg)->arg); } else { res = (*(((CallbackArg *)arg)->cb))(lpGuid, lpDeviceDescription, lpDeviceName, lpd3ddd1, lpd3ddd2, ((CallbackArg *)arg)->arg); } OutTraceD3D("EnumDevices: CALLBACK ret=%x\n", res); return res; } HRESULT WINAPI extDeviceProxy7(LPSTR lpDeviceDescription, LPSTR lpDeviceName, LPD3DDEVICEDESC7 lpd3ddd, LPVOID arg) { HRESULT res; OutTraceD3D("EnumDevices(D3D7): CALLBACK DeviceDescription=\"%s\", DeviceName=\"%s\", arg=%x\n", lpDeviceDescription, lpDeviceName, ((CallbackArg *)arg)->arg); DumpD3DDeviceDesc7(lpd3ddd, "DX7DEV"); // to do: NOHALDEVICE handling, we have no GUID here! if(dxw.dwFlags4 & NOPOWER2FIX){ D3DDEVICEDESC7 lpd3dddfix; if(lpd3ddd) memcpy(&lpd3dddfix, lpd3ddd, sizeof(D3DDEVICEDESC7)); lpd3dddfix.dpcLineCaps.dwTextureCaps|=D3DPTEXTURECAPS_NONPOW2CONDITIONAL|D3DPTEXTURECAPS_POW2; lpd3dddfix.dpcTriCaps.dwTextureCaps|=D3DPTEXTURECAPS_NONPOW2CONDITIONAL|D3DPTEXTURECAPS_POW2; res = (*(((CallbackArg7 *)arg)->cb))(lpDeviceDescription, lpDeviceName, lpd3ddd?&lpd3dddfix:NULL, ((CallbackArg7 *)arg)->arg); } else { res = (*(((CallbackArg7 *)arg)->cb))(lpDeviceDescription, lpDeviceName, lpd3ddd, ((CallbackArg7 *)arg)->arg); } OutTraceD3D("EnumDevices: CALLBACK ret=%x\n", res); return res; } HRESULT WINAPI extEnumDevices(int d3dversion, EnumDevices_Type pEnumDevices, void *lpd3d, LPD3DENUMDEVICESCALLBACK cb, LPVOID arg) { HRESULT res; CallbackArg Arg; OutTraceD3D("EnumDevices(D3D%d): d3d=%x arg=%x\n", d3dversion, lpd3d, arg); Arg.cb= &cb; Arg.arg=arg; res=(*pEnumDevices)(lpd3d, (LPD3DENUMDEVICESCALLBACK)extDeviceProxy, (LPVOID)&Arg); if(res) OutTraceE("EnumDevices ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); else OutTraceD3D("EnumDevices: OK\n"); return res; } HRESULT WINAPI extEnumDevices1(void *lpd3d, LPD3DENUMDEVICESCALLBACK cb, LPVOID arg) { return extEnumDevices(1, pEnumDevices1, lpd3d, cb, arg); } HRESULT WINAPI extEnumDevices2(void *lpd3d, LPD3DENUMDEVICESCALLBACK cb, LPVOID arg) { return extEnumDevices(2, pEnumDevices2, lpd3d, cb, arg); } HRESULT WINAPI extEnumDevices3(void *lpd3d, LPD3DENUMDEVICESCALLBACK cb, LPVOID arg) { return extEnumDevices(3, pEnumDevices3, lpd3d, cb, arg); } HRESULT WINAPI extEnumDevices7(void *lpd3d, LPD3DENUMDEVICESCALLBACK7 cb, LPVOID arg) { HRESULT res; CallbackArg7 Arg; OutTraceD3D("EnumDevices(D3D7): d3d=%x arg=%x\n", lpd3d, arg); Arg.cb= &cb; Arg.arg=arg; res=(*pEnumDevices7)(lpd3d, (LPD3DENUMDEVICESCALLBACK7)extDeviceProxy7, (LPVOID)&Arg); if(res) OutTraceE("EnumDevices ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); else OutTraceD3D("EnumDevices: OK\n"); return res; } HRESULT WINAPI extCreateLight(int d3dversion, CreateLight_Type pCreateLight, void *lpd3d, LPDIRECT3DLIGHT *lpLight, IUnknown *p0) { HRESULT res; OutTraceD3D("CreateLight(D3D%d): d3d=%x\n", d3dversion, lpd3d); res=(*pCreateLight)(lpd3d, lpLight, p0); if(res) OutTraceE("CreateLight ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); else OutTraceD3D("CreateLight: OK\n"); return res; } HRESULT WINAPI extCreateLight1(void *lpd3d, LPDIRECT3DLIGHT *lpLight, IUnknown *p0) { return extCreateLight(1, pCreateLight1, lpd3d, lpLight, p0); } HRESULT WINAPI extCreateLight2(void *lpd3d, LPDIRECT3DLIGHT *lpLight, IUnknown *p0) { return extCreateLight(2, pCreateLight2, lpd3d, lpLight, p0); } HRESULT WINAPI extCreateLight3(void *lpd3d, LPDIRECT3DLIGHT *lpLight, IUnknown *p0) { return extCreateLight(3, pCreateLight3, lpd3d, lpLight, p0); } #ifdef TRACEMATERIAL HRESULT WINAPI extCreateMaterial1(void *lpd3d, LPDIRECT3DMATERIAL *lpMaterial, IUnknown *p0) { HRESULT res; OutTraceD3D("CreateMaterial(D3D1): d3d=%x\n", lpd3d); res=(*pCreateMaterial1)(lpd3d, lpMaterial, p0); if(res) OutTraceE("CreateMaterial ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); else OutTraceD3D("CreateMaterial: OK\n"); HookMaterial(lpMaterial, 0); return res; } HRESULT WINAPI extCreateMaterial2(void *lpd3d, LPDIRECT3DMATERIAL2 *lpMaterial, IUnknown *p0) { HRESULT res; OutTraceD3D("CreateMaterial(D3D2): d3d=%x\n", lpd3d); res=(*pCreateMaterial2)(lpd3d, lpMaterial, p0); if(res) OutTraceE("CreateMaterial ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); else OutTraceD3D("CreateMaterial: OK\n"); //HookMaterial(lpMaterial, 0); return res; } HRESULT WINAPI extCreateMaterial3(void *lpd3d, LPDIRECT3DMATERIAL3 *lpMaterial, IUnknown *p0) { HRESULT res; OutTraceD3D("CreateMaterial(D3D3): d3d=%x\n", lpd3d); res=(*pCreateMaterial3)(lpd3d, lpMaterial, p0); if(res) OutTraceE("CreateMaterial ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); else OutTraceD3D("CreateMaterial: OK\n"); //HookMaterial(lpMaterial, 0); return res; } #endif HRESULT WINAPI extCreateViewport1(void *lpd3d, LPDIRECT3DVIEWPORT *lpViewport, IUnknown *p0) { HRESULT res; OutTraceD3D("CreateViewport(D3D1): d3d=%x\n", lpd3d); res=(*pCreateViewport1)(lpd3d, lpViewport, p0); if(res) OutTraceE("CreateViewport ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); else OutTraceD3D("CreateViewport: Viewport=%x\n", *lpViewport); HookViewport(lpViewport, 1); return res; } HRESULT WINAPI extCreateViewport2(void *lpd3d, LPDIRECT3DVIEWPORT2 *lpViewport, IUnknown *p0) { HRESULT res; OutTraceD3D("CreateViewport(D3D2): d3d=%x\n", lpd3d); res=(*pCreateViewport2)(lpd3d, lpViewport, p0); if(res) OutTraceE("CreateViewport ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); else OutTraceD3D("CreateViewport: Viewport=%x\n", *lpViewport); HookViewport((LPDIRECT3DVIEWPORT *)lpViewport, 2); return res; } HRESULT WINAPI extCreateViewport3(void *lpd3d, LPDIRECT3DVIEWPORT3 *lpViewport, IUnknown *p0) { HRESULT res; OutTraceD3D("CreateViewport(D3D3): d3d=%x\n", lpd3d); res=(*pCreateViewport3)(lpd3d, lpViewport, p0); if(res) OutTraceE("CreateViewport ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); else OutTraceD3D("CreateViewport: Viewport=%x\n", *lpViewport); HookViewport((LPDIRECT3DVIEWPORT *)lpViewport, 3); if(IsDebug){ HRESULT res2; D3DVIEWPORT2 vpdesc; vpdesc.dwSize = sizeof(D3DVIEWPORT2); res2=(*pGetViewport2_3)(*lpViewport, &vpdesc); if(res) OutTraceE("CreateViewport ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); else OutTraceD3D("CreateViewport: size=%d pos=(%d,%d) dim=(%dx%d)\n", vpdesc.dwSize, vpdesc.dwX, vpdesc.dwY, vpdesc.dwWidth, vpdesc.dwHeight); } return res; } static HRESULT WINAPI extFindDevice(int d3dversion, FindDevice_Type pFindDevice, void *lpd3d, LPD3DFINDDEVICESEARCH p1, LPD3DFINDDEVICERESULT p2) { HRESULT res; OutTraceD3D("FindDevice(D3D%d): d3d=%x devsearch=%x (size=%d flags=%x caps=%x primcaps=%x colormodel=%x hw=%x guid=%x) p2=%x\n", d3dversion, lpd3d, p1, p1->dwSize, p1->dwFlags, p1->dwCaps, p1->dpcPrimCaps, p1->dcmColorModel, p1->bHardware, p1->guid, p2); res=(*pFindDevice)(lpd3d, p1, p2); if(res) OutTraceE("FindDevice ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); else { OutTraceD3D("FindDevice: GUID=%x.%x.%x.%x\n", p2->guid.Data1, p2->guid.Data2, p2->guid.Data3, p2->guid.Data4); DumpD3DDeviceDesc(&(p2->ddHwDesc), "HWDEV"); DumpD3DDeviceDesc(&(p2->ddSwDesc), "SWDEV"); } return res; } HRESULT WINAPI extFindDevice1(void *lpd3d, LPD3DFINDDEVICESEARCH p1, LPD3DFINDDEVICERESULT p2) { return extFindDevice(1, pFindDevice1, lpd3d, p1, p2); } HRESULT WINAPI extFindDevice2(void *lpd3d, LPD3DFINDDEVICESEARCH p1, LPD3DFINDDEVICERESULT p2) { return extFindDevice(2, pFindDevice2, lpd3d, p1, p2); } HRESULT WINAPI extFindDevice3(void *lpd3d, LPD3DFINDDEVICESEARCH p1, LPD3DFINDDEVICERESULT p2) { return extFindDevice(3, pFindDevice3, lpd3d, p1, p2); } HRESULT WINAPI extSetViewport(int dxversion, SetViewport_Type pSetViewport, void *lpvp, LPD3DVIEWPORT vpd) { HRESULT res; OutTraceD3D("SetViewport(D3D%d): viewport=%x viewportd=%x size=%d pos=(%d,%d) dim=(%dx%d) scale=(%fx%f) maxXYZ=(%f,%f,%f) minZ=%f\n", dxversion, lpvp, vpd, vpd->dwSize, vpd->dwX, vpd->dwY, vpd->dwWidth, vpd->dwHeight, vpd->dvScaleX, vpd->dvScaleY, vpd->dvMaxX, vpd->dvMaxY, vpd->dvMaxZ, vpd->dvMinZ); // v2.03.48: scaled dvScaleX/Y fields. Fixes "Dark Vengeance" viewport size when using D3D interface. // no.... see Forsaken // no good (useless) also for "Spearhead" //if(dxw.Windowize){ // dxw.MapClient(&vpd->dvScaleX, &vpd->dvScaleY); // OutTraceDW("SetViewport: FIXED scale=(%fx%f)\n", vpd->dvScaleX, vpd->dvScaleY); // int w = (int) vpd->dwWidth; // int h = (int) vpd->dwHeight; // dxw.MapClient(&w, &h); // vpd->dwWidth = (DWORD) w; // vpd->dwHeight = (DWORD) h; // OutTraceDW("SetViewport: FIXED scale=(%dx%d)\n", vpd->dwWidth, vpd->dwHeight); //} res=(*pSetViewport)(lpvp, vpd); if(res) OutTraceE("SetViewport ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); else OutTraceD3D("SetViewport: OK\n"); return res; } HRESULT WINAPI extSetViewport1(void *lpvp, LPD3DVIEWPORT vpd) { return extSetViewport(1, pSetViewport1, lpvp, vpd); } HRESULT WINAPI extSetViewport2(void *lpvp, LPD3DVIEWPORT vpd) { return extSetViewport(2, pSetViewport2, lpvp, vpd); } HRESULT WINAPI extSetViewport3(void *lpvp, LPD3DVIEWPORT vpd) { return extSetViewport(3, pSetViewport3, lpvp, vpd); } HRESULT WINAPI extGetViewport(int d3dversion, GetViewport_Type pGetViewport, void *lpvp, LPD3DVIEWPORT vpd) { HRESULT res; OutTraceD3D("GetViewport(D3D%d): viewport=%x viewportd=%x\n", d3dversion, lpvp, vpd); res=(*pGetViewport)(lpvp, vpd); // v2.03.48: should the dvScaleX/Y fields be unscaled? if(res) OutTraceE("GetViewport ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); else OutTraceD3D("GetViewport: OK size=%d pos=(%d,%d) dim=(%dx%d) scale=(%fx%f) maxXYZ=(%f,%f,%f) minZ=%f\n", vpd->dwSize, vpd->dwX, vpd->dwY, vpd->dwWidth, vpd->dwHeight, vpd->dvScaleX, vpd->dvScaleY, vpd->dvMaxX, vpd->dvMaxY, vpd->dvMaxZ, vpd->dvMinZ); return res; } HRESULT WINAPI extGetViewport1(void *lpvp, LPD3DVIEWPORT vpd) { return extGetViewport(1, pGetViewport1, lpvp, vpd); } HRESULT WINAPI extGetViewport2(void *lpvp, LPD3DVIEWPORT vpd) { return extGetViewport(2, pGetViewport2, lpvp, vpd); } HRESULT WINAPI extGetViewport3(void *lpvp, LPD3DVIEWPORT vpd) { return extGetViewport(3, pGetViewport3, lpvp, vpd); } HRESULT WINAPI extInitializeVP(void *lpvp, LPDIRECT3D lpd3d) { HRESULT res; OutTraceD3D("Initialize(VP): viewport=%x d3d=%x\n", lpvp, lpd3d); res=(*pInitializeVP)(lpvp, lpd3d); if(res) OutTraceE("Initialize(VP) ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); else OutTraceD3D("Initialize(VP): OK \n"); return res; } #ifndef D3DERR_NOTAVAILABLE #define _FACD3D 0x876 #define D3DERR_NOTAVAILABLE MAKE_HRESULT(1, _FACD3D, 2154) #endif HRESULT WINAPI extCreateDevice2(void *lpd3d, REFCLSID Guid, LPDIRECTDRAWSURFACE lpdds, LPDIRECT3DDEVICE2 *lplpd3dd) { HRESULT res; OutTraceD3D("CreateDevice(D3D2): d3d=%x GUID=%x(%s) lpdds=%x%s\n", lpd3d, Guid.Data1, ExplainGUID((GUID *)&Guid), lpdds, dxwss.ExplainSurfaceRole((LPDIRECTDRAWSURFACE)lpdds)); if((dxw.dwFlags8 & NOHALDEVICE) && (Guid.Data1 == 0x84e63de0)) { OutTraceDW("CreateDevice(D3D2): D3DHALDEVICE SKIP\n"); return D3DERR_NOTAVAILABLE; } res=(*pCreateDevice2)(lpd3d, Guid, lpdds, lplpd3dd); if(res!=DD_OK) { OutTraceE("CreateDevice(D3D2) ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); } else{ OutTraceD3D("CreateDevice(D3D2): lpd3dd=%x\n", lpd3d, *lplpd3dd); HookDirect3DDevice((void **)lplpd3dd, 2); } return res; } HRESULT WINAPI extCreateDevice3(void *lpd3d, REFCLSID Guid, LPDIRECTDRAWSURFACE4 lpdds, LPDIRECT3DDEVICE3 *lplpd3dd, LPUNKNOWN unk) { HRESULT res; OutTraceD3D("CreateDevice(D3D3): d3d=%x GUID=%x(%s) lpdds=%x%s\n", lpd3d, Guid.Data1, ExplainGUID((GUID *)&Guid), lpdds, dxwss.ExplainSurfaceRole((LPDIRECTDRAWSURFACE)lpdds)); if((dxw.dwFlags8 & NOHALDEVICE) && (Guid.Data1 == 0x84e63de0)) { OutTraceDW("CreateDevice(D3D3): D3DHALDEVICE SKIP\n"); return D3DERR_NOTAVAILABLE; } res=(*pCreateDevice3)(lpd3d, Guid, lpdds, lplpd3dd, unk); if(res!=DD_OK) { OutTraceE("CreateDevice(D3D3) ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); } else{ OutTraceD3D("CreateDevice(D3D3): lpd3dd=%x\n", lpd3d, *lplpd3dd); HookDirect3DDevice((void **)lplpd3dd, 3); } return res; } HRESULT WINAPI extCreateDevice7(void *lpd3d, REFCLSID Guid, LPDIRECTDRAWSURFACE7 lpdds, LPDIRECT3DDEVICE7 *lplpd3dd) { // v2.02.83: D3D CreateDevice (version 7? all versions?) internally calls the Release method upon the backbuffer // surface, and this has to be avoided since it causes a crash. HRESULT res; OutTraceD3D("CreateDevice(D3D7): d3d=%x GUID=%x(%s) lpdds=%x%s\n", lpd3d, Guid.Data1, ExplainGUID((GUID *)&Guid), lpdds, dxwss.ExplainSurfaceRole((LPDIRECTDRAWSURFACE)lpdds)); res=(*pCreateDevice7)(lpd3d, Guid, lpdds, lplpd3dd); if(res == DD_OK){ OutTraceD3D("CreateDevice(D3D7): lpd3dd=%x\n", lpd3d, *lplpd3dd); HookDirect3DDevice((void **)lplpd3dd, 7); } else OutTraceE("CreateDevice(D3D7) ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); return res; } HRESULT WINAPI extSetRenderState(int version, SetRenderState3_Type pSetRenderState, void *d3dd, D3DRENDERSTATETYPE State, DWORD Value) { HRESULT res; OutTraceB("SetRenderState(D3D%d): d3dd=%x State=%x(%s) Value=%x\n", version, d3dd, State, ExplainD3DRenderState(State), Value); if((dxw.dwFlags4 & ZBUFFERALWAYS) && (State == D3DRENDERSTATE_ZFUNC)) { OutTraceD3D("SetRenderState: FIXED State=ZFUNC Value=%s->D3DCMP_ALWAYS\n", ExplainRenderstateValue(Value)); Value = D3DCMP_ALWAYS; } if((dxw.dwFlags2 & WIREFRAME) && (State == D3DRENDERSTATE_FILLMODE)){ OutTraceD3D("SetRenderState: FIXED State=FILLMODE Value=%x->D3DFILL_WIREFRAME\n", Value); Value = D3DFILL_WIREFRAME; } if((dxw.dwFlags4 & DISABLEFOGGING) && (State == D3DRENDERSTATE_FOGENABLE)){ OutTraceD3D("SetRenderState: FIXED State=FOGENABLE Value=%x->FALSE\n", Value); Value = FALSE; } if((dxw.dwFlags5 & TEXTURETRANSP) && (State == D3DRENDERSTATE_ALPHABLENDENABLE)){ OutTraceD3D("SetRenderState: FIXED State=ALPHABLENDENABLE Value=%x->TRUE\n", Value); Value = TRUE; } // beware!!! likely this code would work for interface version 3 only !!! if((State==D3DRENDERSTATE_ZWRITEENABLE) && (Value==TRUE) && (dxw.dwFlags8 & DYNAMICZCLEAN)){ //if((State==D3DRENDERSTATE_ZWRITEENABLE) && (Value==FALSE) && (dxw.dwFlags8 & DYNAMICZCLEAN)){ //if((State==D3DRENDERSTATE_ZWRITEENABLE) && (dxw.dwFlags8 & DYNAMICZCLEAN)){ HRESULT res2; LPDIRECT3DVIEWPORT3 vp; D3DVIEWPORT vpd; res2=((LPDIRECT3DDEVICE3)d3dd)->GetCurrentViewport(&vp); if(!res2){ D3DRECT d3dRect; vpd.dwSize=sizeof(D3DVIEWPORT); vp->GetViewport(&vpd); d3dRect.x1 = vpd.dwX; d3dRect.y1 = vpd.dwY; d3dRect.x2 = vpd.dwX + vpd.dwWidth; d3dRect.y2 = vpd.dwY + vpd.dwHeight; OutTraceD3D("d3dRect=(%d,%d)-(%d,%d)\n", d3dRect.x1, d3dRect.y1, d3dRect.x2, d3dRect.y2); if(dxw.dwFlags4 & ZBUFFERCLEAN )vp->Clear2(1, &d3dRect, D3DCLEAR_ZBUFFER, 0, 1.0, 0); if(dxw.dwFlags4 & ZBUFFER0CLEAN)vp->Clear2(1, &d3dRect, D3DCLEAR_ZBUFFER, 0, 0.0, 0); if(dxw.dwFlags5 & CLEARTARGET) vp->Clear(1, &d3dRect, D3DCLEAR_TARGET); } } res=(*pSetRenderState)(d3dd, State, Value); if(res) OutTraceE("SetRenderState: res=%x(%s)\n", res, ExplainDDError(res)); return res; } HRESULT WINAPI extSetRenderState2(void *d3dd, D3DRENDERSTATETYPE State, DWORD Value) { return extSetRenderState(2, pSetRenderState2, d3dd, State, Value); } HRESULT WINAPI extSetRenderState3(void *d3dd, D3DRENDERSTATETYPE State, DWORD Value) { return extSetRenderState(3, pSetRenderState3, d3dd, State, Value); } HRESULT WINAPI extSetRenderState7(void *d3dd, D3DRENDERSTATETYPE State, DWORD Value) { return extSetRenderState(7, pSetRenderState7, d3dd, State, Value); } static HRESULT WINAPI dxwRestoreCallback(LPDIRECTDRAWSURFACE lpDDSurface, LPDDSURFACEDESC lpDDSurfaceDesc, LPVOID lpContext) { HRESULT res; OutTrace("dxwRestoreCallback: ANALYZING lpdds=%x\n", lpDDSurface); if(lpDDSurface->IsLost()){ if(res=lpDDSurface->Restore()){ OutTrace("dxwRestoreCallback: RESTORE FAILED lpdds=%x err=%x(%s)\n", lpDDSurface, res, ExplainDDError(res)); return DDENUMRET_CANCEL; } OutTrace("dxwRestoreCallback: RESTORED lpdds=%x\n", lpDDSurface); } return DDENUMRET_OK; } HRESULT WINAPI extBeginScene1(void *d3dd) { HRESULT res; OutTraceD3D("BeginScene(D3D1): d3dd=%x\n", d3dd); res=(*pBeginScene1)(d3dd); if(res == DDERR_SURFACELOST){ OutTraceDW("BeginScene: recovering from DDERR_SURFACELOST\n"); lpPrimaryDD->EnumSurfaces(DDENUMSURFACES_DOESEXIST|DDENUMSURFACES_ALL, NULL, NULL, (LPDDENUMSURFACESCALLBACK)dxwRestoreCallback); res=(*pBeginScene1)(d3dd); } if(res) OutTraceE("BeginScene: res=%x(%s)\n", res, ExplainDDError(res)); return res; } static HRESULT WINAPI dxwRestoreCallback2(LPDIRECTDRAWSURFACE4 lpDDSurface, LPDDSURFACEDESC2 lpDDSurfaceDesc, LPVOID lpContext) { HRESULT res; OutTrace("dxwRestoreCallback2: ANALYZING lpdds=%x\n", lpDDSurface); if(lpDDSurface->IsLost()){ if(res=lpDDSurface->Restore()){ OutTrace("dxwRestoreCallback2: RESTORE FAILED lpdds=%x err=%x(%s)\n", lpDDSurface, res, ExplainDDError(res)); return DDENUMRET_CANCEL; } OutTrace("dxwRestoreCallback2: RESTORED lpdds=%x\n", lpDDSurface); } return DDENUMRET_OK; } HRESULT WINAPI extBeginScene2(void *d3dd) { HRESULT res; OutTraceD3D("BeginScene(D3D2): d3dd=%x\n", d3dd); if((dxw.dwFlags4 & (ZBUFFERCLEAN|ZBUFFER0CLEAN)) || (dxw.dwFlags5 & CLEARTARGET)){ HRESULT res2; LPDIRECT3DVIEWPORT2 vp; D3DVIEWPORT vpd; res2=((LPDIRECT3DDEVICE2)d3dd)->GetCurrentViewport(&vp); if(!res2){ D3DRECT d3dRect; vpd.dwSize=sizeof(D3DVIEWPORT); vp->GetViewport(&vpd); d3dRect.x1 = vpd.dwX; d3dRect.y1 = vpd.dwY; d3dRect.x2 = vpd.dwX + vpd.dwWidth; d3dRect.y2 = vpd.dwY + vpd.dwHeight; OutTraceD3D("d3dRect=(%d,%d)-(%d,%d)\n", d3dRect.x1, d3dRect.y1, d3dRect.x2, d3dRect.y2); if(dxw.dwFlags4 & (ZBUFFERCLEAN|ZBUFFER0CLEAN)) vp->Clear(1, &d3dRect, D3DCLEAR_ZBUFFER); if(dxw.dwFlags5 & CLEARTARGET) vp->Clear(1, &d3dRect, D3DCLEAR_TARGET); } } res=(*pBeginScene2)(d3dd); if(res == DDERR_SURFACELOST){ OutTraceDW("BeginScene: recovering from DDERR_SURFACELOST\n"); lpPrimaryDD->EnumSurfaces(DDENUMSURFACES_DOESEXIST|DDENUMSURFACES_ALL, NULL, NULL, (LPDDENUMSURFACESCALLBACK)dxwRestoreCallback2); res=(*pBeginScene2)(d3dd); } if(res) OutTraceE("BeginScene: res=%x(%s)\n", res, ExplainDDError(res)); return res; } HRESULT WINAPI extBeginScene3(void *d3dd) { HRESULT res; OutTraceD3D("BeginScene(D3D3): d3dd=%x\n", d3dd); if((dxw.dwFlags4 & (ZBUFFERCLEAN|ZBUFFER0CLEAN)) || (dxw.dwFlags5 & CLEARTARGET)){ HRESULT res2; LPDIRECT3DVIEWPORT3 vp; D3DVIEWPORT vpd; res2=((LPDIRECT3DDEVICE3)d3dd)->GetCurrentViewport(&vp); if(!res2){ D3DRECT d3dRect; vpd.dwSize=sizeof(D3DVIEWPORT); vp->GetViewport(&vpd); d3dRect.x1 = vpd.dwX; d3dRect.y1 = vpd.dwY; d3dRect.x2 = vpd.dwX + vpd.dwWidth; d3dRect.y2 = vpd.dwY + vpd.dwHeight; OutTraceD3D("d3dRect=(%d,%d)-(%d,%d)\n", d3dRect.x1, d3dRect.y1, d3dRect.x2, d3dRect.y2); if(dxw.dwFlags4 & ZBUFFERCLEAN )vp->Clear2(1, &d3dRect, D3DCLEAR_ZBUFFER, 0, 1.0, 0); if(dxw.dwFlags4 & ZBUFFER0CLEAN)vp->Clear2(1, &d3dRect, D3DCLEAR_ZBUFFER, 0, 0.0, 0); if(dxw.dwFlags5 & CLEARTARGET) vp->Clear(1, &d3dRect, D3DCLEAR_TARGET); } } res=(*pBeginScene3)(d3dd); if(res == DDERR_SURFACELOST){ OutTraceDW("BeginScene: recovering from DDERR_SURFACELOST\n"); lpPrimaryDD->EnumSurfaces(DDENUMSURFACES_DOESEXIST|DDENUMSURFACES_ALL, NULL, NULL, (LPDDENUMSURFACESCALLBACK)dxwRestoreCallback2); res=(*pBeginScene3)(d3dd); } if(res) OutTraceE("BeginScene: res=%x(%s)\n", res, ExplainDDError(res)); return res; } static HRESULT WINAPI dxwRestoreCallback7(LPDIRECTDRAWSURFACE7 lpDDSurface, LPDDSURFACEDESC2 lpDDSurfaceDesc, LPVOID lpContext) { HRESULT res; OutTrace("dxwRestoreCallback7: ANALYZING lpdds=%x\n", lpDDSurface); if(lpDDSurface->IsLost()){ if(res=lpDDSurface->Restore()){ OutTrace("dxwRestoreCallback7: RESTORE FAILED lpdds=%x err=%x(%s)\n", lpDDSurface, res, ExplainDDError(res)); return DDENUMRET_CANCEL; } OutTrace("dxwRestoreCallback7: RESTORED lpdds=%x\n", lpDDSurface); } return DDENUMRET_OK; } HRESULT WINAPI extBeginScene7(void *d3dd) { HRESULT res; OutTraceD3D("BeginScene(D3D7): d3dd=%x\n", d3dd); // there is no Clear method for Viewport object in D3D7 !!! res=(*pBeginScene7)(d3dd); if(res == DDERR_SURFACELOST){ OutTraceDW("BeginScene: recovering from DDERR_SURFACELOST\n"); lpPrimaryDD->EnumSurfaces(DDENUMSURFACES_DOESEXIST|DDENUMSURFACES_ALL, NULL, NULL, (LPDDENUMSURFACESCALLBACK)dxwRestoreCallback7); res=(*pBeginScene7)(d3dd); } if(res) OutTraceE("BeginScene: res=%x(%s)\n", res, ExplainDDError(res)); return res; } static HRESULT WINAPI extEndScene(int d3dversion, Scene_Type pEndScene, void *d3dd) { HRESULT res; OutTraceD3D("EndScene(D3D%d): d3dd=%x\n", d3dversion, d3dd); res=(*pEndScene)(d3dd); //dxw.ShowOverlay(); if(res) OutTraceE("EndScene: res=%x(%s)\n", res, ExplainDDError(res)); return res; } HRESULT WINAPI extEndScene1(void *d3dd) { return extEndScene(1, pEndScene1, d3dd); } HRESULT WINAPI extEndScene2(void *d3dd) { return extEndScene(2, pEndScene2, d3dd); } HRESULT WINAPI extEndScene3(void *d3dd) { return extEndScene(3, pEndScene3, d3dd); } HRESULT WINAPI extEndScene7(void *d3dd) { return extEndScene(7, pEndScene7, d3dd); } HRESULT WINAPI extD3DGetCaps(int d3dversion, D3DGetCaps_Type pD3DGetCaps, void *d3dd, LPD3DDEVICEDESC hd, LPD3DDEVICEDESC sd) { HRESULT res; OutTraceD3D("GetCaps(D3D%d): d3dd=%x hd=%x sd=%x\n", d3dversion, d3dd, hd, sd); res=(*pD3DGetCaps)(d3dd, hd, sd); if(res) { OutTraceE("GetCaps(D3D): ERROR res=%x(%s)\n", res, ExplainDDError(res)); return res; } DumpD3DDeviceDesc(hd, "HWDEV"); DumpD3DDeviceDesc(sd, "SWDEV"); if(dxw.dwFlags4 & NOPOWER2FIX){ if(hd) { OutTraceDW("GetCaps(D3D): Fixing NOPOWER2FIX hw caps\n"); hd->dpcLineCaps.dwTextureCaps|=D3DPTEXTURECAPS_NONPOW2CONDITIONAL|D3DPTEXTURECAPS_POW2; hd->dpcTriCaps.dwTextureCaps|=D3DPTEXTURECAPS_NONPOW2CONDITIONAL|D3DPTEXTURECAPS_POW2; } if(sd) { OutTraceDW("GetCaps(D3D): Fixing NOPOWER2FIX sw caps\n"); sd->dpcLineCaps.dwTextureCaps|=D3DPTEXTURECAPS_NONPOW2CONDITIONAL|D3DPTEXTURECAPS_POW2; sd->dpcTriCaps.dwTextureCaps|=D3DPTEXTURECAPS_NONPOW2CONDITIONAL|D3DPTEXTURECAPS_POW2; } } return res; } HRESULT WINAPI extD3DGetCaps1(void *d3dd, LPD3DDEVICEDESC hd, LPD3DDEVICEDESC sd) { return extD3DGetCaps(1, pD3DGetCaps1, d3dd, hd, sd); } HRESULT WINAPI extD3DGetCaps2(void *d3dd, LPD3DDEVICEDESC hd, LPD3DDEVICEDESC sd) { return extD3DGetCaps(2, pD3DGetCaps2, d3dd, hd, sd); } HRESULT WINAPI extD3DGetCaps3(void *d3dd, LPD3DDEVICEDESC hd, LPD3DDEVICEDESC sd) { return extD3DGetCaps(3, pD3DGetCaps3, d3dd, hd, sd); } HRESULT WINAPI extD3DGetCaps7(void *d3dd, LPD3DDEVICEDESC7 lpd3ddd) { HRESULT res; OutTraceD3D("GetCaps(D3D7): d3dd=%x lpd3ddd=%x\n", d3dd, lpd3ddd); res=(*pD3DGetCaps7)(d3dd, lpd3ddd); if(res) { OutTraceE("GetCaps(D3D): ERROR res=%x(%s)\n", res, ExplainDDError(res)); return res; } DumpD3DDeviceDesc7(lpd3ddd, "DEV7"); if(dxw.dwFlags4 & NOPOWER2FIX){ if(lpd3ddd) { OutTraceDW("GetCaps(D3D): Fixing NOPOWER2FIX hw caps\n"); lpd3ddd->dpcLineCaps.dwTextureCaps|=D3DPTEXTURECAPS_NONPOW2CONDITIONAL|D3DPTEXTURECAPS_POW2; lpd3ddd->dpcTriCaps.dwTextureCaps|=D3DPTEXTURECAPS_NONPOW2CONDITIONAL|D3DPTEXTURECAPS_POW2; } } return res; } HRESULT WINAPI extSetLightState3(void *d3dd, D3DLIGHTSTATETYPE d3dls, DWORD t) { HRESULT res; OutTraceD3D("SetLightState(D3D3): d3d=%x lightstate=%x t=%x\n", d3dd, d3dls, t); res=(*pSetLightState3)(d3dd, d3dls, t); if(res) OutTraceE("SetLightState: ERROR res=%x(%s)\n", res, ExplainDDError(res)); return res; } HRESULT WINAPI extSetViewport7(void *d3dd, LPD3DVIEWPORT7 lpd3dvp) { HRESULT res; OutTraceD3D("SetViewport(D3D7): d3d=%x d3dvp=%x\n", d3dd, lpd3dvp); res=(*pSetViewport7)(d3dd, lpd3dvp); if(res) OutTraceE("SetViewport: ERROR res=%x(%s)\n", res, ExplainDDError(res)); return res; } HRESULT WINAPI extGetViewport7(void *d3dd, LPD3DVIEWPORT7 lpd3dvp) { HRESULT res; OutTraceD3D("GetViewport(D3D7): d3d=%x d3dvp=%x\n", d3dd, lpd3dvp); res=(*pGetViewport7)(d3dd, lpd3dvp); if(res) OutTraceE("GetViewport: ERROR res=%x(%s)\n", res, ExplainDDError(res)); return res; } HRESULT WINAPI extAddViewport1(void *d3dd, LPDIRECT3DVIEWPORT lpd3dvp) { HRESULT res; static VOID *LastDevice = 0; OutTraceD3D("AddViewport(D3D1): d3d=%x d3dvp=%x\n", d3dd, lpd3dvp); res=(*pAddViewport1)(d3dd, lpd3dvp); if((res == DDERR_INVALIDPARAMS) && LastDevice) { // going through here fixes "Die hard trilogy" "DirectX error 15" caused by an AddViewport failure OutTraceE("AddViewport DDERR_INVALIDPARAMS: try to unlink from d3dd=%x\n", LastDevice); res=((LPDIRECT3DDEVICE)LastDevice)->DeleteViewport(lpd3dvp); if(res) OutTrace("DeleteViewport: ERROR res=%x(%s)\n", res, ExplainDDError(res)); res=(*pAddViewport1)(d3dd, lpd3dvp); } if(res){ OutTraceE("AddViewport: ERROR res=%x(%s)\n", res, ExplainDDError(res)); if(dxw.dwFlags1 & SUPPRESSDXERRORS) res=DD_OK; } else LastDevice = d3dd; return res; } HRESULT WINAPI extAddViewport2(void *d3dd, LPDIRECT3DVIEWPORT2 lpd3dvp) { HRESULT res; static VOID *LastDevice = 0; OutTraceD3D("AddViewport(D3D2): d3d=%x d3dvp=%x\n", d3dd, lpd3dvp); res=(*pAddViewport2)(d3dd, lpd3dvp); if((res == DDERR_INVALIDPARAMS) && LastDevice) { OutTraceE("AddViewport DDERR_INVALIDPARAMS: try to unlink from d3dd=%x\n", LastDevice); res=((LPDIRECT3DDEVICE2)LastDevice)->DeleteViewport(lpd3dvp); if(res) OutTrace("DeleteViewport: ERROR res=%x(%s)\n", res, ExplainDDError(res)); res=(*pAddViewport2)(d3dd, lpd3dvp); } if(res) { OutTraceE("AddViewport ERROR: res=%x(%s)\n", res, ExplainDDError(res)); if(dxw.dwFlags1 & SUPPRESSDXERRORS) res=DD_OK; } else LastDevice = d3dd; return res; } HRESULT WINAPI extAddViewport3(void *d3dd, LPDIRECT3DVIEWPORT3 lpd3dvp) { HRESULT res; static VOID *LastDevice = 0; OutTraceD3D("AddViewport(D3D3): d3d=%x d3dvp=%x\n", d3dd, lpd3dvp); res=(*pAddViewport3)(d3dd, lpd3dvp); if((res == DDERR_INVALIDPARAMS) && LastDevice) { OutTraceE("AddViewport DDERR_INVALIDPARAMS: try to unlink from d3dd=%x\n", LastDevice); res=((LPDIRECT3DDEVICE3)LastDevice)->DeleteViewport(lpd3dvp); if(res) OutTrace("DeleteViewport ERROR: res=%x(%s)\n", res, ExplainDDError(res)); res=(*pAddViewport3)(d3dd, lpd3dvp); } if(res) { OutTraceE("AddViewport ERROR: res=%x(%s)\n", res, ExplainDDError(res)); if(dxw.dwFlags1 & SUPPRESSDXERRORS) res=DD_OK; } else LastDevice = d3dd; return res; } HRESULT WINAPI extSetViewport2_2(void *lpvp, LPD3DVIEWPORT2 vpd) { HRESULT res; OutTraceD3D("SetViewport2(VP2): viewport=%x viewportd=%x size=%d pos=(%d,%d) dim=(%dx%d) Z=(%f-%f)\n", lpvp, vpd, vpd->dwSize, vpd->dwX, vpd->dwY, vpd->dwWidth, vpd->dwHeight, vpd->dvMinZ, vpd->dvMaxZ); res=(*pSetViewport2_2)(lpvp, vpd); if(res) OutTraceE("SetViewport2(VP2) ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); else OutTraceD3D("SetViewport2(VP2): OK\n"); return res; } HRESULT WINAPI extGetViewport2_2(void *lpvp, LPD3DVIEWPORT2 vpd) { HRESULT res; OutTraceD3D("GetViewport2(VP2): viewport=%x viewportd=%x\n", lpvp, vpd); res=(*pGetViewport2_2)(lpvp, vpd); if(res) OutTraceE("GetViewport2(VP2) ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); else OutTraceD3D("GetViewport2(VP2): OK size=%d pos=(%d,%d) dim=(%dx%d)\n", vpd->dwSize, vpd->dwX, vpd->dwY, vpd->dwWidth, vpd->dwHeight); return res; } HRESULT WINAPI extSetViewport2_3(void *lpvp, LPD3DVIEWPORT2 vpd) { HRESULT res; OutTraceD3D("SetViewport2(VP3): viewport=%x viewportd=%x size=%d pos=(%d,%d) dim=(%dx%d) Z=(%f-%f)\n", lpvp, vpd, vpd->dwSize, vpd->dwX, vpd->dwY, vpd->dwWidth, vpd->dwHeight, vpd->dvMinZ, vpd->dvMaxZ); res=(*pSetViewport2_3)(lpvp, vpd); if(res) OutTraceE("SetViewport2(VP3) ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); else OutTraceD3D("SetViewport2(VP3): OK\n"); return res; } HRESULT WINAPI extGetViewport2_3(void *lpvp, LPD3DVIEWPORT2 vpd) { HRESULT res; OutTraceD3D("GetViewport2(VP3): viewport=%x viewportd=%x\n", lpvp, vpd); res=(*pGetViewport2_3)(lpvp, vpd); if(res) OutTraceE("GetViewport2(VP3) ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); else OutTraceD3D("GetViewport2(VP3): OK size=%d pos=(%d,%d) dim=(%dx%d)\n", vpd->dwSize, vpd->dwX, vpd->dwY, vpd->dwWidth, vpd->dwHeight); return res; } HRESULT WINAPI extGetCurrentViewport2(void *d3dd, LPDIRECT3DVIEWPORT2 *lpd3dvp) { HRESULT res; OutTraceD3D("GetCurrentViewport(D3DD2): d3dd=%x viewportd=%x\n", d3dd, lpd3dvp); res=(*pGetCurrentViewport2)(d3dd, lpd3dvp); if(res) { OutTraceE("GetCurrentViewport(D3DD2) ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); return res; } HookViewport((LPDIRECT3DVIEWPORT *)lpd3dvp, 2); return res; } HRESULT WINAPI extSetCurrentViewport2(void *d3dd, LPDIRECT3DVIEWPORT2 lpd3dvp) { HRESULT res; OutTraceD3D("SetCurrentViewport(D3DD2): d3dd=%x viewportd=%x\n", d3dd, lpd3dvp); res=(*pSetCurrentViewport2)(d3dd, lpd3dvp); if(res) OutTraceE("SetCurrentViewport(D3DD2) ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); else OutTraceD3D("SetCurrentViewport(D3DD2): OK\n"); return res; } HRESULT WINAPI extGetCurrentViewport3(void *d3dd, LPDIRECT3DVIEWPORT3 *lpd3dvp) { HRESULT res; OutTraceD3D("GetCurrentViewport(D3DD3): d3dd=%x viewportd=%x\n", d3dd, lpd3dvp); res=(*pGetCurrentViewport3)(d3dd, lpd3dvp); if(res) { OutTraceE("GetCurrentViewport(D3DD3) ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); return res; } HookViewport((LPDIRECT3DVIEWPORT *)lpd3dvp, 3); if(IsDebug){ HRESULT res2; D3DVIEWPORT2 vpdesc; vpdesc.dwSize = sizeof(D3DVIEWPORT2); res2=(*pGetViewport2_3)(lpd3dvp, &vpdesc); if(res) OutTraceE("GetCurrentViewport(D3DD3) ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); else OutTraceD3D("GetCurrentViewport(D3DD3): size=%d pos=(%d,%d) dim=(%dx%d)\n", vpdesc.dwSize, vpdesc.dwX, vpdesc.dwY, vpdesc.dwWidth, vpdesc.dwHeight); } return res; } HRESULT WINAPI extSetCurrentViewport3(void *lpvp, LPDIRECT3DVIEWPORT3 lpd3dvp) { HRESULT res; OutTraceD3D("SetCurrentViewport(D3DD3): viewport=%x\n", lpvp, lpd3dvp); res=(*pSetCurrentViewport3)(lpvp, lpd3dvp); if(res) OutTraceE("SetCurrentViewport(D3DD3) ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); else OutTraceD3D("SetCurrentViewport(D3DD3): OK\n"); if(IsDebug){ HRESULT res2; D3DVIEWPORT2 vpdesc; vpdesc.dwSize = sizeof(D3DVIEWPORT2); res2=(*pGetViewport2_3)(lpd3dvp, &vpdesc); if(res) OutTraceE("SetCurrentViewport(D3DD3) ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); else OutTraceD3D("SetCurrentViewport(D3DD3): size=%d pos=(%d,%d) dim=(%dx%d)\n", vpdesc.dwSize, vpdesc.dwX, vpdesc.dwY, vpdesc.dwWidth, vpdesc.dwHeight); } return res; } HRESULT WINAPI extDeleteViewport1(void *d3dd, LPDIRECT3DVIEWPORT lpd3dvp) { HRESULT res; OutTraceD3D("DeletetViewport(D3DD1): d3dd=%x viewport=%x\n", d3dd, lpd3dvp); res=(*pDeleteViewport1)(d3dd, lpd3dvp); if(res) OutTraceE("DeletetViewport(D3DD1) ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); else OutTraceD3D("DeletetViewport(D3DD1): OK\n"); return res; } HRESULT WINAPI extNextViewport1(void *d3dd, LPDIRECT3DVIEWPORT lpd3dvp, LPDIRECT3DVIEWPORT *vpnext, DWORD dw) { HRESULT res; OutTraceD3D("NextViewport(D3DD1): d3dd=%x viewport=%x dw=%x\n", d3dd, lpd3dvp); res=(*pNextViewport1)(d3dd, lpd3dvp, vpnext, dw); if(res) OutTraceE("NextViewport(D3DD1) ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); else OutTraceD3D("NextViewport(D3DD1): next=%x\n", *vpnext); return res; } HRESULT WINAPI extDeleteViewport2(void *d3dd, LPDIRECT3DVIEWPORT2 lpd3dvp) { HRESULT res; OutTraceD3D("DeletetViewport(D3DD2): d3dd=%x viewport=%x\n", d3dd, lpd3dvp); res=(*pDeleteViewport2)(d3dd, lpd3dvp); if(res) OutTraceE("DeletetViewport(D3DD2) ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); else OutTraceD3D("DeletetViewport(D3DD2): OK\n"); return res; } HRESULT WINAPI extNextViewport2(void *d3dd, LPDIRECT3DVIEWPORT2 lpd3dvp, LPDIRECT3DVIEWPORT2 *vpnext, DWORD dw) { HRESULT res; OutTraceD3D("NextViewport(D3DD2): d3dd=%x viewport=%x dw=%x\n", d3dd, lpd3dvp); res=(*pNextViewport2)(d3dd, lpd3dvp, vpnext, dw); if(res) OutTraceE("NextViewport(D3DD2) ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); else OutTraceD3D("NextViewport(D3DD2): next=%x\n", *vpnext); return res; } HRESULT WINAPI extSetTexture3(void *d3dd, DWORD flags, LPDIRECT3DTEXTURE2 lptex) { HRESULT res; OutTraceD3D("SetTexture(D3D3): d3dd=%x flags=%x tex=%x\n", d3dd, flags, lptex); if (dxw.dwFlags4 & NOTEXTURES) return DD_OK; res=(*pSetTexture3)(d3dd, flags, lptex); if(res) OutTraceD3D("SetTexture: ERROR res=%x(%s)\n", res, ExplainDDError(res)); return res; } HRESULT WINAPI extSetTexture7(void *d3dd, DWORD flags, LPDIRECTDRAWSURFACE7 lptex) { HRESULT res; OutTraceD3D("SetTexture(D3D7): d3dd=%x, flags=%x, tex=%x\n", d3dd, flags, lptex); if (dxw.dwFlags4 & NOTEXTURES) return DD_OK; res=(*pSetTexture7)(d3dd, flags, lptex); if(res) OutTraceD3D("SetTexture: ERROR res=%x(%s)\n", res, ExplainDDError(res)); return res; } #ifdef TRACEMATERIAL HRESULT WINAPI extSetMaterial(void *d3dd, LPD3DMATERIAL lpMaterial) { HRESULT res; OutTraceD3D("SetMaterial: d3dd=%x material=%x\n", d3dd, lpMaterial); if(lpMaterial && IsDebug){ OutTraceD3D("Material: Size=%d Texture=%x diffuse=(%f,%f,%f,%f) ambient=(%f,%f,%f,%f) specular=(%f,%f,%f,%f) emissive=(%f,%f,%f,%f) power=%f\n", lpMaterial->dwSize, lpMaterial->hTexture, lpMaterial->diffuse.a, lpMaterial->diffuse.r, lpMaterial->diffuse.g, lpMaterial->diffuse.b, lpMaterial->ambient.a, lpMaterial->ambient.r, lpMaterial->ambient.g, lpMaterial->ambient.b, lpMaterial->specular.a, lpMaterial->specular.r, lpMaterial->specular.g, lpMaterial->specular.b, lpMaterial->emissive.a, lpMaterial->emissive.r, lpMaterial->emissive.g, lpMaterial->emissive.b, lpMaterial->power ); } res=(*pSetMaterial)(d3dd, lpMaterial); if(res) OutTraceD3D("SetMaterial: ERROR res=%x\n", res); return res; } HRESULT WINAPI extGetMaterial(void *d3dd, LPD3DMATERIAL lpMaterial) { HRESULT res; res=(*pGetMaterial)(d3dd, lpMaterial); OutTraceD3D("GetMaterial: d3dd=%x material=%x res=%x\n", d3dd, lpMaterial, res); if(lpMaterial && IsDebug && (res==DD_OK)){ OutTraceD3D("Material: Size=%d diffuse=(%f,%f,%f,%f) ambient=(%f,%f,%f,%f) specular=(%f,%f,%f,%f) emissive=(%f,%f,%f,%f) power=%f\n", lpMaterial->dwSize, lpMaterial->diffuse.a, lpMaterial->diffuse.r, lpMaterial->diffuse.g, lpMaterial->diffuse.b, lpMaterial->ambient.a, lpMaterial->ambient.r, lpMaterial->ambient.g, lpMaterial->ambient.b, lpMaterial->specular.a, lpMaterial->specular.r, lpMaterial->specular.g, lpMaterial->specular.b, lpMaterial->emissive.a, lpMaterial->emissive.r, lpMaterial->emissive.g, lpMaterial->emissive.b, lpMaterial->power ); } return res; } #endif HRESULT WINAPI extSwapTextureHandles(void *d3dd, LPDIRECT3DTEXTURE t1, LPDIRECT3DTEXTURE t2) { HRESULT res; OutTraceD3D("SwapTextureHandles(D3D1): d3dd=%x t1=%x t2=%x\n", d3dd, t1, t2); if (dxw.dwFlags4 & NOTEXTURES) return DD_OK; res=(*pSwapTextureHandles)(d3dd, t1, t2); if(res) OutTraceD3D("SwapTextureHandles: ERROR res=%x\n", res); return res; } HRESULT WINAPI extSwapTextureHandles2(void *d3dd, LPDIRECT3DTEXTURE2 t1, LPDIRECT3DTEXTURE2 t2) { HRESULT res; OutTraceD3D("SwapTextureHandles(D3D2): d3dd=%x t1=%x t2=%x\n", d3dd, t1, t2); if (dxw.dwFlags4 & NOTEXTURES) return DD_OK; res=(*pSwapTextureHandles2)(d3dd, t1, t2); if(res) OutTraceD3D("SwapTextureHandles: ERROR res=%x\n", res); return res; } HRESULT WINAPI extTexInitialize(void *t, LPDIRECT3DDEVICE lpd3dd, LPDIRECTDRAWSURFACE lpdds) { OutTrace("Texture::Initialize\n"); return (*pTInitialize)(t, lpd3dd, lpdds); } static HRESULT WINAPI extTexGetHandle(int version, TexGetHandle_Type pTGetHandle, void *t, LPDIRECT3DDEVICE lpd3dd, LPD3DTEXTUREHANDLE lpth) { HRESULT ret; OutTrace("Texture(%d)::GetHandle lpt=%x lpd3dd=%x lpth=%x\n", version, t, lpd3dd, lpth); ret = (*pTGetHandle)(t, lpd3dd, lpth); if(ret) OutTraceE("Texture::Load ERROR res=%x(%s)\n", ret, ExplainDDError(ret)); return ret; } HRESULT WINAPI extTexGetHandle1(void *t, LPDIRECT3DDEVICE lpd3dd, LPD3DTEXTUREHANDLE lpth) { return extTexGetHandle(1, pTGetHandle1, t, lpd3dd, lpth); } HRESULT WINAPI extTexGetHandle2(void *t, LPDIRECT3DDEVICE2 lpd3dd, LPD3DTEXTUREHANDLE lpth) { return extTexGetHandle(2, pTGetHandle2, t, (LPDIRECT3DDEVICE)lpd3dd, lpth); } static HRESULT WINAPI extTexPaletteChanged(int version, TexPaletteChanged_Type pTPaletteChanged, void *t, DWORD dw1, DWORD dw2) { HRESULT ret; OutTrace("Texture(%d)::PaletteChanged lpt=%x dw1=%x dw2=%x\n", version, t, dw1, dw2); ret = (*pTPaletteChanged)(t, dw1, dw2); if(ret) OutTraceE("Texture::PaletteChanged ERROR res=%x(%s)\n", ret, ExplainDDError(ret)); return ret; } HRESULT WINAPI extTexPaletteChanged1(void *t, DWORD dw1, DWORD dw2) { return extTexPaletteChanged(1, pTPaletteChanged1, t, dw1, dw2); } HRESULT WINAPI extTexPaletteChanged2(void *t, DWORD dw1, DWORD dw2) { return extTexPaletteChanged(2, pTPaletteChanged2, t, dw1, dw2); } HRESULT WINAPI extTexLoad(int version, TexLoad_Type pTLoad, void *t, LPDIRECT3DTEXTURE lpt) { HRESULT ret; OutTrace("Texture(%d)::Load lpt=%x lpd3dt=%x\n", version, t, lpt); ret = (*pTLoad)(t, lpt); if(ret) OutTraceE("Texture::Load ERROR res=%x(%s)\n", ret, ExplainDDError(ret)); return ret; } HRESULT WINAPI extTexLoad1(void *t, LPDIRECT3DTEXTURE lpt) { return extTexLoad(1, pTLoad1, t, lpt); } HRESULT WINAPI extTexLoad2(void *t, LPDIRECT3DTEXTURE lpt) { return extTexLoad(2, pTLoad2, t, lpt); } HRESULT WINAPI extTexUnload(void *t) { HRESULT ret; OutTrace("Texture::Unload lpt=%x\n", t); ret = (*pTUnload)(t); if(ret) OutTraceE("Texture::Load ERROR res=%x(%s)\n", ret, ExplainDDError(ret)); return ret; } typedef struct { LPD3DENUMPIXELFORMATSCALLBACK *cb; LPVOID arg; } CallbackPixFmtArg; HRESULT WINAPI extZBufferProxy(LPDDPIXELFORMAT lpDDPixFmt, LPVOID lpContext) { HRESULT res; OutTraceD3D("EnumZBufferFormats: CALLBACK context=%x %s \n", ((CallbackPixFmtArg *)lpContext)->arg, ExplainPixelFormat(lpDDPixFmt)); res = (*(((CallbackPixFmtArg *)lpContext)->cb))(lpDDPixFmt, ((CallbackPixFmtArg *)lpContext)->arg); OutTraceD3D("EnumZBufferFormats: CALLBACK ret=%x\n", res); return res; } #define MAXPFTABLESIZE 50 #define MAXTRIMMEDENTRIES 3 typedef struct { int nEntries; // LPDDPIXELFORMAT lpPixelFormatEntries; DDPIXELFORMAT lpPixelFormatEntries[MAXPFTABLESIZE]; } PixelFormatTable_Type; HRESULT WINAPI FillPixelFormatTable(LPDDPIXELFORMAT lpDDPixFmt, LPVOID Arg) { PixelFormatTable_Type *lpPixelFormatTable = (PixelFormatTable_Type *)Arg; OutTraceD3D("EnumZBufferFormats: FILL CALLBACK entry=%d %s\n", lpPixelFormatTable->nEntries, ExplainPixelFormat(lpDDPixFmt)); if(lpPixelFormatTable->nEntries >= MAXPFTABLESIZE) return FALSE; memcpy((LPVOID)&(lpPixelFormatTable->lpPixelFormatEntries[lpPixelFormatTable->nEntries]), (LPVOID)lpDDPixFmt, sizeof(DDPIXELFORMAT)); lpPixelFormatTable->nEntries ++; //lpPixelFormatTable->lpPixelFormatEntries = (LPDDPIXELFORMAT)realloc((LPVOID)(lpPixelFormatTable->lpPixelFormatEntries), lpPixelFormatTable->nEntries * sizeof(DDPIXELFORMAT)); //OutTrace("lp=%x err=%s\n", lpPixelFormatTable->lpPixelFormatEntries, GetLastError()); return TRUE; } static HRESULT WINAPI extEnumZBufferFormats(int d3dversion, EnumZBufferFormats_Type pEnumZBufferFormats, void *lpd3d, REFCLSID riidDevice, LPD3DENUMPIXELFORMATSCALLBACK lpEnumCallback, LPVOID lpContext) { HRESULT ret; OutTraceD3D("Direct3D::EnumZBufferFormats(D3D%d) d3d=%x clsid=%x context=%x\n", d3dversion, lpd3d, riidDevice.Data1, lpContext); if(dxw.dwFlags8 & TRIMTEXTUREFORMATS){ int iIndex; int iEnumerated; PixelFormatTable_Type PixelFormatTable; PixelFormatTable.nEntries = 0; //PixelFormatTable.lpPixelFormatEntries = (LPDDPIXELFORMAT)malloc(sizeof(DDPIXELFORMAT)); ret = (*pEnumZBufferFormats)(lpd3d, riidDevice, (LPD3DENUMPIXELFORMATSCALLBACK)FillPixelFormatTable, (LPVOID)&PixelFormatTable); OutTraceD3D("EnumZBufferFormats: collected entries=%d\n", PixelFormatTable.nEntries); // bubble sorting; while(TRUE){ BOOL bSorted = FALSE; for(iIndex=0; iIndex PixelFormatTable.lpPixelFormatEntries[iIndex+1].dwRGBBitCount){ DDPIXELFORMAT tmp; tmp = PixelFormatTable.lpPixelFormatEntries[iIndex]; PixelFormatTable.lpPixelFormatEntries[iIndex] = PixelFormatTable.lpPixelFormatEntries[iIndex+1]; PixelFormatTable.lpPixelFormatEntries[iIndex+1] = tmp; bSorted = TRUE; } } if(!bSorted) break; } for(iIndex=0, iEnumerated=0; (iIndex < PixelFormatTable.nEntries) && (iEnumerated < MAXTRIMMEDENTRIES); iIndex++){ if(PixelFormatTable.lpPixelFormatEntries[iIndex].dwRGBBitCount >= 32) break; if((dxw.dwFlags7 & CLEARTEXTUREFOURCC) && (PixelFormatTable.lpPixelFormatEntries[iIndex].dwFlags & DDPF_FOURCC)) continue; ret = (*lpEnumCallback)(&(PixelFormatTable.lpPixelFormatEntries[iIndex]), lpContext); OutTraceD3D("Direct3D::EnumZBufferFormats: CALLBACK entry=%d ret=%x %s\n", iIndex, ret, ExplainPixelFormat(&PixelFormatTable.lpPixelFormatEntries[iIndex])); if(!ret) break; iEnumerated++; } //free((LPVOID)(PixelFormatTable.lpPixelFormatEntries)); ret = DD_OK; } else { CallbackPixFmtArg Arg; Arg.cb= &lpEnumCallback; Arg.arg=lpContext; ret = (*pEnumZBufferFormats)(lpd3d, riidDevice, (LPD3DENUMPIXELFORMATSCALLBACK)extZBufferProxy, (LPVOID)&Arg); } OutTraceE("Direct3D::EnumZBufferFormats res=%x(%s)\n", ret, ExplainDDError(ret)); return ret; } HRESULT WINAPI extEnumZBufferFormats3(void *lpd3d, REFCLSID riidDevice, LPD3DENUMPIXELFORMATSCALLBACK lpEnumCallback, LPVOID lpContext) { return extEnumZBufferFormats(3, pEnumZBufferFormats3, lpd3d, riidDevice, lpEnumCallback, lpContext); } HRESULT WINAPI extEnumZBufferFormats7(void *lpd3d, REFCLSID riidDevice, LPD3DENUMPIXELFORMATSCALLBACK lpEnumCallback, LPVOID lpContext) { return extEnumZBufferFormats(7, pEnumZBufferFormats7, lpd3d, riidDevice, lpEnumCallback, lpContext); } // Beware: using service surfaces with DDSCAPS_SYSTEMMEMORY capability may lead to crashes in D3D operations // like Vievport::Clear() in "Forsaken" set in emulation AERO-friendly mode. To avoid the problem, you can // suppress the offending cap by use of the NOSYSMEMPRIMARY or NOSYSMEMBACKBUF flags HRESULT WINAPI extViewportClear(void *lpd3dvp, DWORD p1, LPD3DRECT lpRect, DWORD p2) { HRESULT ret; if(IsTraceD3D){ char sRect[81]; if (lpRect) sprintf(sRect, "(%d,%d)-(%d,%d)", lpRect->x1, lpRect->y1, lpRect->x2, lpRect->y2); else strcpy(sRect, "(NULL)"); OutTrace("Viewport::Clear lpd3dvp=%x p1=%x p2=%x rect=%s\n", lpd3dvp, p1, p2, sRect); } // proxying the call .... ret = (*pViewportClear)(lpd3dvp, p1, lpRect, p2); OutTraceD3D("Viewport::Clear ret=%x\n", ret); return ret; } HRESULT WINAPI extExecute(void *lpd3d, LPDIRECT3DEXECUTEBUFFER eb, LPDIRECT3DVIEWPORT vp, DWORD dw) { HRESULT ret; OutTraceD3D("Direct3DDevice::Execute\n"); ret=(*pExecute)(lpd3d, eb, vp, dw); if (ret) OutTraceE("Direct3DDevice::Execute res=%x(%s)\n", ret, ExplainDDError(ret)); return DD_OK; } static HRESULT CALLBACK lpTextureTrimmer(LPDDPIXELFORMAT lpDDPixFmt, LPVOID lpContext) { HRESULT res; OutTraceD3D("EnumTextureFormats: CALLBACK context=%x %s \n", lpContext, ExplainPixelFormat(lpDDPixFmt)); if(lpDDPixFmt->dwFlags & DDPF_FOURCC) res = DD_OK; else res = (*(((CallbackPixFmtArg *)lpContext)->cb))(lpDDPixFmt, ((CallbackPixFmtArg *)lpContext)->arg); return res; } static HRESULT CALLBACK lpTextureDumper(LPDDPIXELFORMAT lpDDPixFmt, LPVOID lpContext) { OutTraceD3D("EnumTextureFormats: CALLBACK context=%x %s \n", lpContext, ExplainPixelFormat(lpDDPixFmt)); return TRUE; } HRESULT WINAPI extEnumTextureFormats(int d3dversion, EnumTextureFormats_Type pEnumTextureFormats, void *lpd3dd, LPD3DENUMPIXELFORMATSCALLBACK lptfcallback, LPVOID arg) { HRESULT res; OutTraceD3D("EnumTextureFormats(%d): lpd3dd=%x cb=%x arg=%x\n", d3dversion, lpd3dd, lptfcallback, arg); if(IsDebug) (*pEnumTextureFormats)(lpd3dd, lpTextureDumper, arg); if(dxw.dwFlags7 & CLEARTEXTUREFOURCC){ CallbackPixFmtArg Arg; Arg.cb= &lptfcallback; Arg.arg=arg; res = (*pEnumTextureFormats)(lpd3dd, lpTextureTrimmer, (LPVOID)&Arg); } else{ res = (*pEnumTextureFormats)(lpd3dd, lptfcallback, arg); } if(res) OutTraceD3D("EnumTextureFormats: res=%x(%s)\n", res, ExplainDDError(res)); return res; } HRESULT WINAPI extEnumTextureFormats1(void *lpd3dd, LPD3DENUMPIXELFORMATSCALLBACK lptfcallback, LPVOID arg) { return extEnumTextureFormats(1, pEnumTextureFormats1, lpd3dd, lptfcallback, arg); } HRESULT WINAPI extEnumTextureFormats2(void *lpd3dd, LPD3DENUMPIXELFORMATSCALLBACK lptfcallback, LPVOID arg) { return extEnumTextureFormats(2, pEnumTextureFormats2, lpd3dd, lptfcallback, arg); } HRESULT WINAPI extEnumTextureFormats3(void *lpd3dd, LPD3DENUMPIXELFORMATSCALLBACK lptfcallback, LPVOID arg) { return extEnumTextureFormats(3, pEnumTextureFormats3, lpd3dd, lptfcallback, arg); } HRESULT WINAPI extEnumTextureFormats7(void *lpd3dd, LPD3DENUMPIXELFORMATSCALLBACK lptfcallback, LPVOID arg) { return extEnumTextureFormats(7, pEnumTextureFormats7, lpd3dd, lptfcallback, arg); } static char *sTransformType(D3DTRANSFORMSTATETYPE tstype) { char *s; switch(tstype){ case D3DTRANSFORMSTATE_WORLD: s = "WORLD"; break; case D3DTRANSFORMSTATE_VIEW: s = "VIEW"; break; case D3DTRANSFORMSTATE_PROJECTION: s = "PROJECTION"; break; case D3DTRANSFORMSTATE_WORLD1: s = "WORLD1"; break; case D3DTRANSFORMSTATE_WORLD2: s = "WORLD2"; break; case D3DTRANSFORMSTATE_WORLD3: s = "WORLD3"; break; case D3DTRANSFORMSTATE_TEXTURE0: s = "TEXTURE0"; break; case D3DTRANSFORMSTATE_TEXTURE1: s = "TEXTURE1"; break; case D3DTRANSFORMSTATE_TEXTURE2: s = "TEXTURE2"; break; case D3DTRANSFORMSTATE_TEXTURE3: s = "TEXTURE3"; break; case D3DTRANSFORMSTATE_TEXTURE4: s = "TEXTURE4"; break; case D3DTRANSFORMSTATE_TEXTURE5: s = "TEXTURE5"; break; case D3DTRANSFORMSTATE_TEXTURE6: s = "TEXTURE6"; break; case D3DTRANSFORMSTATE_TEXTURE7: s = "TEXTURE7"; break; default: s = "unknown"; break; } return s; } static HRESULT WINAPI SetTransform(int d3dversion, SetTransform_Type pSetTransform, void *lpd3dd, D3DTRANSFORMSTATETYPE tstype, LPD3DMATRIX matrix) { HRESULT res; OutTrace("SetTransform(D3D%d): lpd3dd=%x tstype=%x(%s) matrix={\n%f %f %f %f\n%f %f %f %f\n%f %f %f %f\n%f %f %f %f\n}\n", d3dversion, lpd3dd, tstype, sTransformType(tstype), matrix->_11, matrix->_12, matrix->_13, matrix->_14, matrix->_21, matrix->_22, matrix->_23, matrix->_24, matrix->_31, matrix->_32, matrix->_33, matrix->_34, matrix->_41, matrix->_42, matrix->_43, matrix->_44); res = (*pSetTransform)(lpd3dd, tstype, matrix); if(res) OutTraceE("SetTransform ERROR: ret=%x\n", res); return res; } HRESULT WINAPI extSetTransform2(void *lpd3dd, D3DTRANSFORMSTATETYPE tstype, LPD3DMATRIX matrix) { return SetTransform(2, pSetTransform2, lpd3dd, tstype, matrix); } HRESULT WINAPI extSetTransform3(void *lpd3dd, D3DTRANSFORMSTATETYPE tstype, LPD3DMATRIX matrix) { return SetTransform(3, pSetTransform3, lpd3dd, tstype, matrix); } HRESULT WINAPI extSetTransform7(void *lpd3dd, D3DTRANSFORMSTATETYPE tstype, LPD3DMATRIX matrix) { return SetTransform(7, pSetTransform7, lpd3dd, tstype, matrix); } ================================================ FILE: dll/hd3d8.cpp ================================================ #include #include "dxwnd.h" #include "dxwcore.hpp" #include "dxhook.h" #include "dxhelper.h" #include "syslibs.h" #include "stdio.h" extern void TextureHandling(LPDIRECTDRAWSURFACE); typedef HRESULT (WINAPI *LockRect_Type)(void *, UINT, D3DLOCKED_RECT *, CONST RECT *, DWORD); typedef HRESULT (WINAPI *UnlockRect_Type)(void *, UINT); typedef HRESULT (WINAPI *GetFrontBuffer_Type)(void *, LPDIRECTDRAWSURFACE); typedef HRESULT (WINAPI *GetAdapterDisplayMode_Type)(void *, UINT, D3DDISPLAYMODE *); typedef HRESULT (WINAPI *CopyRects_Type)(void *, LPDIRECTDRAWSURFACE, CONST RECT *, UINT, LPDIRECTDRAWSURFACE, CONST POINT *); typedef HRESULT (WINAPI *GetDirect3D8_Type)(void *, void **); extern LockRect_Type pLockRect8; extern UnlockRect_Type pUnlockRect8; extern GetAdapterDisplayMode_Type pGetAdapterDisplayMode8; extern CopyRects_Type pCopyRects; extern GetFrontBuffer_Type pGetFrontBuffer; extern GetDirect3D8_Type pGetDirect3D8; extern void D3DTextureDump(D3DSURFACE_DESC, D3DLOCKED_RECT); extern void D3DTextureHighlight(D3DSURFACE_DESC, D3DLOCKED_RECT); extern void D3DTextureHack(D3DSURFACE_DESC, D3DLOCKED_RECT); extern void D3DTextureTransp(D3DSURFACE_DESC, D3DLOCKED_RECT); extern char *ExplainD3DSurfaceFormat(DWORD); void D3D8TextureHandling(void *arg, int Level) { HRESULT res; LPDIRECT3DTEXTURE8 lpd3dtex = (LPDIRECT3DTEXTURE8)arg; IDirect3DSurface8 *pSurfaceLevel; D3DSURFACE_DESC Desc; D3DLOCKED_RECT LockedRect; OutTraceB("D3D8TextureHandling: arg=%x level=%d\n", (DWORD)arg, Level); // Beware: attempts to dump surfaces at level > 0 result in stack corruption!!! if(Level > 0) return; if(res=lpd3dtex->GetSurfaceLevel(Level, &pSurfaceLevel)){ OutTraceE("Texture::GetSurfaceLevel ERROR: res=%d(%s)\n", res, ExplainDDError(res)); return; } if(res=lpd3dtex->GetLevelDesc(Level, &Desc)){ OutTraceE("Texture::GetLevelDesc ERROR: res=%d(%s)\n", res, ExplainDDError(res)); return; } pSurfaceLevel->Release(); OutTraceB("D3D8TextureHandling: level=%d type=%x usage=%x\n", Level, Desc.Type, Desc.Usage); switch(Desc.Type){ case D3DRTYPE_SURFACE: case D3DRTYPE_TEXTURE: break; default: OutTraceB("D3D88TextureHandling: SKIP type=%x\n", Desc.Type); return; break; } if(Desc.Usage == D3DUSAGE_RENDERTARGET){ OutTraceB("D3D8TextureHandling: SKIP usage=%x\n", Desc.Usage); return; } //pSurfaceLevel->GetRenderTargetData(&pRenderTarget, &pDestSurface); res=(*pLockRect8)(lpd3dtex, Level, &LockedRect, NULL, 0); OutTrace("D3D8TextureHandling: lpd3dtex=%x level=%d format=0x%x(%s) size=(%dx%d) bits=%x pitch=%d\n", lpd3dtex, Level, Desc.Format, ExplainD3DSurfaceFormat(Desc.Format), Desc.Width, Desc.Height, LockedRect.pBits, LockedRect.Pitch); switch(dxw.dwFlags5 & TEXTUREMASK){ case TEXTUREHIGHLIGHT: D3DTextureHighlight(Desc, LockedRect); break; case TEXTUREDUMP: D3DTextureDump(Desc, LockedRect); break; case TEXTUREHACK: D3DTextureHack(Desc, LockedRect); break; case TEXTURETRANSP: D3DTextureTransp(Desc, LockedRect); break; } res=(*pUnlockRect8)(lpd3dtex, Level); } /* from http://realmike.org/blog/projects/taking-screenshots-with-direct3d-8/ Accessing the Front Buffer The IDirect3DDevice8 interface provides the GetFrontBuffer and GetBackBuffer methods to gain access to the swap chain of a Direct3D 8 application. These methods have the following characteristics: GetBackBuffer By using this method you can obtain an IDirect3DSurface8 interface pointer for each of the buffers in the swap chain. However, unless you explicitily requested a lockable back buffer when creating the device (by using the D3DPRESENTFLAG_LOCKABLE_BACKBUFFER flag), you are not allowed to lock the surface. The SDK docs mention a performance cost when using lockable back buffers, even if theyre not actually locked. Our Screenshot function should not require you to rewrite your device creation code, let alone degrade performance, therefore we wont use the GetBackBuffer method here. GetFrontBuffer This method copies the contents of the front buffer to a system-memory surface that is provided by the application. What makes the GetFrontBuffer method especially useful for our purposes is that it converts the data into a 32-bit ARGB format so that we dont have to handle different formats manually. Note: When using the GetFrontBuffer method, well always capture the entire screen, which might be undesired in a windowed application. However, the majority of applications are full-screen. Therefore, well ignore this issue. The GetFrontBuffer method requires us to provide a system-memory surface of the same dimensions as the screen. This surface will be filled with a copy of the front buffers contents. So, how do we retrieve the screen dimensions when all we have is a pointer to the IDirect3DDevice8 interface? We can use the GetAdapterDisplayMode method of the IDirect3D8 interface to query information about the current display mode of a given adapter. A pointer to the IDirect3D8 interface can be obtained by calling the GetDirect3D method of the IDirect3DDevice8 interface. The adapter identifier that is expected by the GetAdapterDisplayMode method can be obtained by using the IDirect3DDevice8::GetCreationParameters method. To summarize, these are the required steps to retrieve the screen dimensions: Call the IDirect3DDevice8::GetDirect3D method to retrieve a pointer to an IDirect3D8 interface. Call the IDirect3DDevice8::GetCreationParameters method, which returns the identifier of the adapter that the Direct3D device uses. Call the IDirect3D8::GetAdapterDisplayMode with the adapter identifier that we retrieved in Step 2. The following code snippet performs these three steps: D3DDEVICE_CREATION_PARAMETERS dcp; dcp.AdapterOrdinal = D3DADAPTER_DEFAULT; lpDevice->GetCreationParameters(&dcp); D3DDISPLAYMODE dm; dm.Width = dm.Height = 0; // retrieve pointer to IDirect3D8 interface, // which provides the GetAdapterDisplayMode method LPDIRECT3D8 lpD3D = NULL; lpDevice->GetDirect3D(&lpD3D); if (lpD3D) { // query the screen dimensions of the current adapter lpD3D->GetAdapterDisplayMode(dcp.AdapterOrdinal, &dm); SAFERELEASE(lpD3D); } Now we can pass the values in dm.Width and dm.Height to the IDirect3DDevice8::CreateImageSurface method to create a system-memory surface that can be used by the GetFrontBuffer method. The expected format of the surface is D3DFMT_A8R8G8B8, which means that there are 8 bits each for the blue, green, red, and alpha components of the colors. The following code snippet creates the surface and calls the GetFrontBuffer method to fill the surface: LPDIRECT3DSURFACE8 lpSurface = NULL; lpDevice->CreateImageSurface( dm.Width, dm.Height, D3DFMT_A8R8G8B8, &lpSurface ); lpDevice->GetFrontBuffer(lpSurface); */ HRESULT dxGetFrontBuffer(void *lpd3dd, LPDIRECTDRAWSURFACE xdest) { HRESULT res; D3DDEVICE_CREATION_PARAMETERS dcp; LPDIRECT3DSURFACE8 lpSurface = NULL; IDirect3DDevice8 *lpDevice = (IDirect3DDevice8 *)lpd3dd; IDirect3DSurface8 *dest = (IDirect3DSurface8 *)xdest; dcp.AdapterOrdinal = D3DADAPTER_DEFAULT; lpDevice->GetCreationParameters(&dcp); D3DDISPLAYMODE dm; dm.Width = dm.Height = 0; // retrieve pointer to IDirect3D8 interface, // which provides the GetAdapterDisplayMode method LPDIRECT3D8 lpD3D = NULL; //res = lpDevice->GetDirect3D(&lpD3D); res = (*pGetDirect3D8)(lpDevice, (void **)&lpD3D); if(res) { OutTraceE("GetFrontBuffer: GetDirect3D ERROR res=%x at %d\n", res, __LINE__); return res; } // query the screen dimensions of the current adapter //res = lpD3D->GetAdapterDisplayMode(dcp.AdapterOrdinal, &dm); res = (*pGetAdapterDisplayMode8)(lpD3D, dcp.AdapterOrdinal, &dm); lpD3D->Release(); if(res) { OutTraceE("GetFrontBuffer: GetAdapterDisplayMode ERROR res=%x at %d\n", res, __LINE__); return res; } else { OutTraceB("GetFrontBuffer: screen size=(%dx%d)\n", dm.Width, dm.Height); } res = lpDevice->CreateImageSurface(dm.Width, dm.Height, D3DFMT_A8R8G8B8, &lpSurface); if(res) { OutTraceE("GetFrontBuffer: CreateImageSurface ERROR res=%x at %d\n", res, __LINE__); return res; } //res = lpDevice->GetFrontBuffer(lpSurface); res = (*pGetFrontBuffer)(lpDevice, (LPDIRECTDRAWSURFACE)lpSurface); if(res) { OutTraceE("GetFrontBuffer: GetFrontBuffer ERROR res=%x at %d\n", res, __LINE__); lpSurface->Release(); return res; } RECT p0 = dxw.GetUnmappedScreenRect(); RECT srcrect = dxw.GetScreenRect(); OffsetRect(&srcrect, p0.left, p0.top); OutTraceB("GetFrontBuffer: screen rect=(%d,%d)-(%d,%d)\n", srcrect.left, srcrect.top, srcrect.right, srcrect.bottom); POINT destpoint = {0, 0}; //res = lpDevice->CopyRects(lpSurface, (CONST RECT *)&srcrect, 1, dest, (CONST POINT *)&destpoint); res = (*pCopyRects)(lpDevice, (LPDIRECTDRAWSURFACE)lpSurface, &srcrect, 1, (LPDIRECTDRAWSURFACE)dest, &destpoint); lpSurface->Release(); if(res) { OutTraceE("GetFrontBuffer: CopyRects ERROR res=%x at %d\n", res, __LINE__); return res; } return DD_OK; } HRESULT exCreateImageSurface8(void *lpd3dd, UINT w, UINT h, D3DFORMAT Format, LPDIRECTDRAWSURFACE *ppBackBuffer) { return ((IDirect3DDevice8 *)lpd3dd)->CreateImageSurface(w, h, Format, (IDirect3DSurface8 **)ppBackBuffer); } HRESULT dxCopyRects(void *lpd3dd, LPDIRECTDRAWSURFACE psrc, LPDIRECTDRAWSURFACE pdst) { HRESULT res; IDirect3DSurface8 *lpsrc = (IDirect3DSurface8 *)psrc; IDirect3DSurface8 *lpdst = (IDirect3DSurface8 *)pdst; IDirect3DDevice8 *lpDevice = (IDirect3DDevice8 *)lpd3dd; LPDIRECT3DSURFACE8 lpImageSrc = NULL; LPDIRECT3DSURFACE8 lpImageDst = NULL; D3DSURFACE_DESC SrcDesc, DstDesc; D3DLOCKED_RECT SrcLockedRect, DstLockedRect; // first, build source image if(res = lpsrc->GetDesc(&SrcDesc)){ OutTraceE("dxCopyRects: GetDesc ERROR res=%x at %d\n", res, __LINE__); return res; } else{ OutTraceB("dxCopyRects: source size=(%dx%d) format=%d\n", SrcDesc.Width, SrcDesc.Height, SrcDesc.Format); } if(res = lpDevice->CreateImageSurface(SrcDesc.Width, SrcDesc.Height, SrcDesc.Format, &lpImageSrc)){ OutTraceE("dxCopyRects: CreateImageSurface ERROR res=%x at %d\n", res, __LINE__); return res; } // get source image if(res = (*pCopyRects)(lpDevice, (LPDIRECTDRAWSURFACE)psrc, NULL, 0, (LPDIRECTDRAWSURFACE)lpImageSrc, NULL)){ OutTraceE("dxCopyRects: CopyRects ERROR res=%x at %d\n", res, __LINE__); return res; } // build a target image similar to destination if(res = lpdst->GetDesc(&DstDesc)){ OutTraceE("dxCopyRects: GetDesc ERROR res=%x at %d\n", res, __LINE__); return res; } else{ OutTraceB("dxCopyRects: dest size=(%dx%d) format=%d\n", DstDesc.Width, DstDesc.Height, DstDesc.Format); } if(res = lpDevice->CreateImageSurface(DstDesc.Width, DstDesc.Height, DstDesc.Format, &lpImageDst)){ OutTraceE("dxCopyRects: GetDesc ERROR res=%x at %d\n", res, __LINE__); return res; } // make the conversion here .... if (res=lpImageSrc->LockRect(&SrcLockedRect, NULL, D3DLOCK_READONLY)){ OutTraceE("dxCopyRects: LockRect ERROR res=%x at %d\n", res, __LINE__); return res; } if(res = lpImageDst->LockRect(&DstLockedRect, NULL, 0)){ OutTraceE("dxCopyRects: LockRect ERROR res=%x at %d\n", res, __LINE__); return res; } // pixel conversion here switch(SrcDesc.Format){ case D3DFMT_A8R8G8B8: case D3DFMT_X8R8G8B8: switch(DstDesc.Format){ case D3DFMT_R5G6B5: { OutTraceB("dxCopyRects: converting 32 to 16 BPP\n", res, __LINE__); DWORD *srcpix; WORD *dstpix; for(unsigned int y=0; yUnlockRect(); lpImageDst->UnlockRect(); // copy to target surface if(res = (*pCopyRects)(lpDevice, (LPDIRECTDRAWSURFACE)lpImageDst, NULL, 0, (LPDIRECTDRAWSURFACE)lpdst, NULL)){ OutTraceE("dxCopyRects: CopyRects ERROR res=%x at %d\n", res, __LINE__); return res; } // clean up lpImageSrc->Release(); lpImageDst->Release(); return res; } LPDIRECT3DSURFACE8 D3D8EmulatedBackBuffer; LPDIRECT3DSURFACE8 D3D8RealBackBuffer; LPDIRECT3DSURFACE8 RealDepthBuffer; LPDIRECT3DTEXTURE8 D3D8EmulatedBackBufferTexture; IDirect3DSurface8* EmulatedBackBufferTextureLevel0; LPDIRECTDRAWSURFACE dwGetVirtualBackBuffer() { return (LPDIRECTDRAWSURFACE)D3D8EmulatedBackBuffer; } HRESULT dwD3D8InitEmulation(void *lpd3ddx) { HRESULT res; LPDIRECT3DDEVICE8 lpd3dd = (LPDIRECT3DDEVICE8)lpd3ddx; // Create the render target which will be used as the real back buffer. res = lpd3dd->CreateRenderTarget(dxw.GetScreenWidth(), dxw.GetScreenHeight(), D3DFMT_R5G6B5, D3DMULTISAMPLE_NONE, TRUE, &D3D8EmulatedBackBuffer); if(res) OutTraceE("dwD3D8InitEmulation: CreateRenderTarget ERROR res=%x at %d\n", res, __LINE__); res = lpd3dd->CreateTexture(dxw.GetScreenWidth(), dxw.GetScreenHeight(), 1, 0, D3DFMT_R5G6B5, D3DPOOL_DEFAULT, &D3D8EmulatedBackBufferTexture); if(res) OutTraceE("dwD3D8InitEmulation: CreateTexture ERROR res=%x at %d\n", res, __LINE__); res = D3D8EmulatedBackBufferTexture->GetSurfaceLevel(0, &EmulatedBackBufferTextureLevel0); if(res) OutTraceE("dwD3D8InitEmulation: GetSurfaceLevel ERROR res=%x at %d\n", res, __LINE__); // Locate the real buffers. res = lpd3dd->GetBackBuffer(0, D3DBACKBUFFER_TYPE_MONO, &D3D8RealBackBuffer); if(res) OutTraceE("dwD3D8InitEmulation: GetBackBuffer ERROR res=%x at %d\n", res, __LINE__); res = lpd3dd->GetDepthStencilSurface(&RealDepthBuffer); if(res) OutTraceE("dwD3D8InitEmulation: GetDepthStencilSurface ERROR res=%x at %d\n", res, __LINE__); // Switch the render target to the emulated one by default. res = lpd3dd->SetRenderTarget(D3D8EmulatedBackBuffer, RealDepthBuffer); if(res) OutTraceE("dwD3D8InitEmulation: SetRenderTarget ERROR res=%x at %d\n", res, __LINE__); return D3D_OK; } void dwD3D8ShutdownEmulation(void *lpd3ddx) { HRESULT res; LPDIRECT3DDEVICE8 lpd3dd = (LPDIRECT3DDEVICE8)lpd3ddx; // Restore targets. res=lpd3dd->SetRenderTarget(D3D8RealBackBuffer, RealDepthBuffer); if(res) OutTraceE("dwD3D8ShutdownEmulation: SetRenderTarget ERROR res=%x at %d\n", res, __LINE__); res=D3D8RealBackBuffer->Release(); res=RealDepthBuffer->Release(); // Destroy emulation objects. res=EmulatedBackBufferTextureLevel0->Release(); res=D3D8EmulatedBackBufferTexture->Release(); res=D3D8EmulatedBackBuffer->Release(); } static DWORD set_rs(LPDIRECT3DDEVICE8 lpd3dd, const D3DRENDERSTATETYPE type, const DWORD value) { DWORD old_value; lpd3dd->GetRenderState(type, &old_value); lpd3dd->SetRenderState(type, value); return old_value; } static DWORD set_tss(LPDIRECT3DDEVICE8 lpd3dd, const DWORD stage, const D3DTEXTURESTAGESTATETYPE type, const DWORD value) { DWORD old_value; lpd3dd->GetTextureStageState(stage, type, &old_value); lpd3dd->SetTextureStageState(stage, type, value); return old_value; } HRESULT dwD3D8Present(void *lpd3ddx, CONST RECT *pSourceRect, CONST RECT* pDestRect, HWND hDestWindowOverride, CONST RGNDATA* pDirtyRegion) { HRESULT res; LPDIRECT3DDEVICE8 lpd3dd = (LPDIRECT3DDEVICE8)lpd3ddx; if (pSourceRect || pDestRect || hDestWindowOverride || pDirtyRegion) { OutTraceE("dwD3D8Present: ERROR only parameter-less Present is supported\n"); return D3DERR_INVALIDCALL; } // Blit the render target to the texture. res = lpd3dd->CopyRects(D3D8EmulatedBackBuffer, NULL, 0, EmulatedBackBufferTextureLevel0, NULL); if(res) OutTraceE("dwD3D8Present: CopyRects ERROR res=%x at %d\n", res, __LINE__); // Render the texture to the real back buffer. res = lpd3dd->BeginScene(); if(res) { OutTraceE("dwD3D8Present: CopyRects ERROR res=%x at %d\n", res, __LINE__); return D3DERR_INVALIDCALL; } LPDIRECT3DSURFACE8 old_back_buffer; LPDIRECT3DSURFACE8 old_depth_buffer; lpd3dd->GetRenderTarget(&old_back_buffer); lpd3dd->GetDepthStencilSurface(&old_depth_buffer); lpd3dd->SetRenderTarget(D3D8RealBackBuffer, RealDepthBuffer); LPDIRECT3DBASETEXTURE8 old_txt; lpd3dd->GetTexture(0, &old_txt); lpd3dd->SetTexture(0, D3D8EmulatedBackBufferTexture); DWORD old_vs; lpd3dd->GetVertexShader(&old_vs); lpd3dd->SetVertexShader(D3DFVF_XYZRHW | D3DFVF_TEX1); IDirect3DVertexBuffer8 *old_stream_0; UINT old_stream_0_stride; lpd3dd->GetStreamSource(0, &old_stream_0, &old_stream_0_stride); const DWORD old_cull = set_rs(lpd3dd, D3DRS_CULLMODE, D3DCULL_NONE); const DWORD old_atest = set_rs(lpd3dd, D3DRS_ALPHATESTENABLE, FALSE); const DWORD old_blend = set_rs(lpd3dd, D3DRS_ALPHABLENDENABLE, FALSE); const DWORD old_z_enable = set_rs(lpd3dd, D3DRS_ZENABLE, FALSE); const DWORD old_z_write = set_rs(lpd3dd, D3DRS_ZWRITEENABLE, FALSE); const DWORD old_stencil = set_rs(lpd3dd, D3DRS_STENCILENABLE, FALSE); const DWORD old_fog = set_rs(lpd3dd, D3DRS_FOGENABLE, FALSE); const DWORD old_specular = set_rs(lpd3dd, D3DRS_SPECULARENABLE, FALSE); const DWORD old_zbias = set_rs(lpd3dd, D3DRS_ZBIAS, 0); const DWORD old_colorop_0 = set_tss(lpd3dd, 0, D3DTSS_COLOROP, D3DTOP_SELECTARG1); const DWORD old_colorarg_0 = set_tss(lpd3dd, 0, D3DTSS_COLORARG0, D3DTA_TEXTURE); const DWORD old_colorop_1 = set_tss(lpd3dd, 1, D3DTSS_COLOROP, D3DTOP_DISABLE); const DWORD old_mag_filter_0 = set_tss(lpd3dd, 0, D3DTSS_MAGFILTER, D3DTEXF_POINT); const DWORD old_min_filter_0 = set_tss(lpd3dd, 0, D3DTSS_MINFILTER, D3DTEXF_POINT); const float right = static_cast(dxw.GetScreenWidth()); const float bottom = static_cast(dxw.GetScreenHeight()); const struct QuadVertex { float x, y, z, w; float u, v; } quad[] = { {-0.5f + 0.0f, -0.5f + 0.0f, 0.5f, 1.0f, 0.0f, 0.0f}, {-0.5f + right, -0.5f + 0.0f, 0.5f, 1.0f, 1.0f, 0.0f}, {-0.5f + right, -0.5f + bottom, 0.5f, 1.0f, 1.0f, 1.0f}, {-0.5f + 0.0f, -0.5f + bottom, 0.5f, 1.0f, 0.0f, 1.0f}, }; lpd3dd->DrawPrimitiveUP(D3DPT_TRIANGLEFAN, 2, quad, sizeof(QuadVertex)); // Restore whatever parts of the state are necessary. // Currently we do not restore viewport. lpd3dd->SetRenderTarget(old_back_buffer, old_depth_buffer); lpd3dd->SetTexture(0, old_txt); lpd3dd->SetVertexShader(old_vs); lpd3dd->SetRenderState(D3DRS_CULLMODE, old_cull); lpd3dd->SetRenderState(D3DRS_ALPHATESTENABLE, old_atest); lpd3dd->SetRenderState(D3DRS_ALPHABLENDENABLE, old_blend); lpd3dd->SetRenderState(D3DRS_ZENABLE, old_z_enable); lpd3dd->SetRenderState(D3DRS_ZWRITEENABLE, old_z_write); lpd3dd->SetRenderState(D3DRS_STENCILENABLE, old_stencil); lpd3dd->SetRenderState(D3DRS_FOGENABLE, old_fog); lpd3dd->SetRenderState(D3DRS_SPECULARENABLE, old_specular); lpd3dd->SetRenderState(D3DRS_ZBIAS, old_zbias); lpd3dd->SetTextureStageState(0, D3DTSS_COLOROP, old_colorop_0); lpd3dd->SetTextureStageState(0, D3DTSS_COLORARG0, old_colorarg_0); lpd3dd->SetTextureStageState(1, D3DTSS_COLOROP, old_colorop_1); lpd3dd->SetTextureStageState(0, D3DTSS_MAGFILTER, old_mag_filter_0); lpd3dd->SetTextureStageState(0, D3DTSS_MINFILTER, old_min_filter_0); lpd3dd->SetStreamSource(0, old_stream_0, old_stream_0_stride); lpd3dd->EndScene(); return D3D_OK; } ================================================ FILE: dll/hd3d9.cpp ================================================ #include #include "dxwnd.h" #include "dxwcore.hpp" #include "dxhook.h" #include "dxhelper.h" #include "syslibs.h" #include "stdio.h" extern void TextureHandling(LPDIRECTDRAWSURFACE); typedef HRESULT (WINAPI *LockRect_Type)(void *, UINT, D3DLOCKED_RECT *, CONST RECT *, DWORD); typedef HRESULT (WINAPI *UnlockRect_Type)(void *, UINT); extern LockRect_Type pLockRect9; extern UnlockRect_Type pUnlockRect9; extern void D3DTextureDump(D3DSURFACE_DESC, D3DLOCKED_RECT); extern void D3DTextureHighlight(D3DSURFACE_DESC, D3DLOCKED_RECT); extern void D3DTextureHack(D3DSURFACE_DESC, D3DLOCKED_RECT); extern void D3DTextureTransp(D3DSURFACE_DESC, D3DLOCKED_RECT); extern char *ExplainD3DSurfaceFormat(DWORD); void D3D9TextureHandling(void *arg, int Level) { HRESULT res; LPDIRECT3DTEXTURE9 lpd3dtex = (LPDIRECT3DTEXTURE9)arg; IDirect3DSurface9 *pSurfaceLevel; D3DSURFACE_DESC Desc; D3DLOCKED_RECT LockedRect; OutTraceB("D3D9TextureHandling: arg=%x level=%d\n", (DWORD)arg, Level); // Beware: attempts to dump surfaces at level > 0 result in stack corruption!!! if(Level > 0) return; if(res=lpd3dtex->GetSurfaceLevel(Level, &pSurfaceLevel)){ OutTraceE("Texture::GetSurfaceLevel ERROR: res=%d(%s)\n", res, ExplainDDError(res)); return; } pSurfaceLevel->Release(); if(res=lpd3dtex->GetLevelDesc(Level, &Desc)){ OutTraceE("Texture::GetLevelDesc ERROR: res=%d(%s)\n", res, ExplainDDError(res)); return; } OutTraceB("D3D9TextureHandling: level=%d type=%x usage=%x\n", Level, Desc.Type, Desc.Usage); switch(Desc.Type){ case D3DRTYPE_SURFACE: case D3DRTYPE_TEXTURE: break; default: OutTraceB("D3D9TextureHandling: SKIP type=%x usage=%x\n", Desc.Type); return; break; } if(Desc.Usage == D3DUSAGE_RENDERTARGET){ OutTraceB("D3D9TextureHandling: SKIP usage=%x\n", Desc.Usage); return; } //pSurfaceLevel->GetRenderTargetData(&pRenderTarget, &pDestSurface); res=(*pLockRect9)(lpd3dtex, Level, &LockedRect, NULL, D3DLOCK_READONLY); OutTrace("D3D9TextureHandling: lpd3dtex=%x level=%d format=0x%x(%s) size=(%dx%d) bits=%x pitch=%d\n", lpd3dtex, Level, Desc.Format, ExplainD3DSurfaceFormat(Desc.Format), Desc.Width, Desc.Height, LockedRect.pBits, LockedRect.Pitch); switch(dxw.dwFlags5 & TEXTUREMASK){ case TEXTUREHIGHLIGHT: D3DTextureHighlight(Desc, LockedRect); break; case TEXTUREDUMP: D3DTextureDump(Desc, LockedRect); break; case TEXTUREHACK: D3DTextureHack(Desc, LockedRect); break; case TEXTURETRANSP: D3DTextureTransp(Desc, LockedRect); break; } res=(*pUnlockRect9)(lpd3dtex, Level); } ================================================ FILE: dll/hddraw.h ================================================ #include typedef HRESULT (WINAPI *DirectDrawCreate_Type)(GUID *, LPDIRECTDRAW *, IUnknown *); typedef HRESULT (WINAPI *DirectDrawCreateEx_Type)(GUID *, LPDIRECTDRAW *, REFIID, IUnknown *); typedef HRESULT (WINAPI *DirectDrawEnumerateA_Type)(LPDDENUMCALLBACKA, LPVOID); typedef HRESULT (WINAPI *DirectDrawEnumerateExA_Type)(LPDDENUMCALLBACKEXA, LPVOID, DWORD); typedef HRESULT (WINAPI *DirectDrawEnumerateW_Type)(LPDDENUMCALLBACKW, LPVOID); typedef HRESULT (WINAPI *DirectDrawEnumerateExW_Type)(LPDDENUMCALLBACKEXW, LPVOID, DWORD); typedef HRESULT (WINAPI *DirectDrawCreateClipper_Type)(DWORD, LPDIRECTDRAWCLIPPER *, IUnknown *); typedef void (WINAPI *HandleDDThreadLock_Type)(void); typedef HDC (WINAPI *GDIGetDC_Type)(HWND); typedef int (WINAPI *GDIReleaseDC_Type)(HWND, HDC); // COM generic types typedef HRESULT (WINAPI *QueryInterface_Type)(void *, REFIID, LPVOID *); // DirectDraw // STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE; typedef ULONG (WINAPI *AddRefD_Type)(LPDIRECTDRAW); typedef ULONG (WINAPI *ReleaseD_Type)(LPDIRECTDRAW); /*** IDirectDraw methods ***/ typedef ULONG (WINAPI *Compact_Type)(LPDIRECTDRAW); typedef HRESULT (WINAPI *CreateClipper_Type)(LPDIRECTDRAW, DWORD, LPDIRECTDRAWCLIPPER FAR* , IUnknown FAR*); typedef HRESULT (WINAPI *CreatePalette_Type)(LPDIRECTDRAW, DWORD, LPPALETTEENTRY, LPDIRECTDRAWPALETTE *, IUnknown *); typedef HRESULT (WINAPI *CreateSurface1_Type)(LPDIRECTDRAW, DDSURFACEDESC *, LPDIRECTDRAWSURFACE *, void *); typedef HRESULT (WINAPI *CreateSurface2_Type)(LPDIRECTDRAW, DDSURFACEDESC2 *, LPDIRECTDRAWSURFACE *, void *); typedef HRESULT (WINAPI *CreateSurface_Type)(LPDIRECTDRAW, DDSURFACEDESC2 *, LPDIRECTDRAWSURFACE *, void *); typedef HRESULT (WINAPI *DuplicateSurface_Type)(LPDIRECTDRAW, LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE FAR *); typedef HRESULT (WINAPI *DuplicateSurface4_Type)(LPDIRECTDRAW, LPDIRECTDRAWSURFACE4, LPDIRECTDRAWSURFACE4 FAR *); typedef HRESULT (WINAPI *DuplicateSurface7_Type)(LPDIRECTDRAW, LPDIRECTDRAWSURFACE7, LPDIRECTDRAWSURFACE7 FAR *); typedef HRESULT (WINAPI *EnumDisplayModes1_Type)(LPDIRECTDRAW, DWORD, LPDDSURFACEDESC, LPVOID, LPDDENUMMODESCALLBACK); typedef HRESULT (WINAPI *EnumDisplayModes4_Type)(LPDIRECTDRAW, DWORD, LPDDSURFACEDESC2, LPVOID, LPDDENUMMODESCALLBACK2); typedef HRESULT (WINAPI *EnumSurfaces1_Type)(LPDIRECTDRAW, DWORD, LPDDSURFACEDESC, LPVOID, LPDDENUMSURFACESCALLBACK); typedef HRESULT (WINAPI *EnumSurfaces4_Type)(LPDIRECTDRAW, DWORD, LPDDSURFACEDESC2, LPVOID, LPDDENUMSURFACESCALLBACK2); typedef HRESULT (WINAPI *FlipToGDISurface_Type)(LPDIRECTDRAW); typedef HRESULT (WINAPI *GetCapsD_Type)(LPDIRECTDRAW, LPDDCAPS, LPDDCAPS); typedef HRESULT (WINAPI *GetDisplayMode_Type)(LPDIRECTDRAW, LPDDSURFACEDESC); typedef HRESULT (WINAPI *GetDisplayMode4_Type)(LPDIRECTDRAW, LPDDSURFACEDESC2); typedef HRESULT (WINAPI *GetFourCCCodes_Type)(LPDIRECTDRAW, LPDWORD, LPDWORD); typedef HRESULT (WINAPI *GetGDISurface_Type)(LPDIRECTDRAW, LPDIRECTDRAWSURFACE *); typedef HRESULT (WINAPI *GetMonitorFrequency_Type)(LPDIRECTDRAW, LPDWORD); typedef HRESULT (WINAPI *GetScanLine_Type)(LPDIRECTDRAW, LPDWORD); typedef HRESULT (WINAPI *GetVerticalBlankStatus_Type)(LPDIRECTDRAW, LPBOOL); typedef HRESULT (WINAPI *Initialize_Type)(LPDIRECTDRAW, GUID FAR *); typedef HRESULT (WINAPI *RestoreDisplayMode_Type)(LPDIRECTDRAW); typedef HRESULT (WINAPI *SetCooperativeLevel_Type)(void *, HWND, DWORD); typedef HRESULT (WINAPI *SetDisplayMode2_Type)(LPDIRECTDRAW, DWORD, DWORD, DWORD, DWORD, DWORD); typedef HRESULT (WINAPI *SetDisplayMode1_Type)(LPDIRECTDRAW, DWORD, DWORD, DWORD); typedef HRESULT (WINAPI *WaitForVerticalBlank_Type)(LPDIRECTDRAW, DWORD, HANDLE); typedef HRESULT (WINAPI *GetAvailableVidMem_Type)(LPDIRECTDRAW, LPDDSCAPS, LPDWORD, LPDWORD); typedef HRESULT (WINAPI *GetAvailableVidMem4_Type)(LPDIRECTDRAW, LPDDSCAPS2, LPDWORD, LPDWORD); typedef HRESULT (WINAPI *GetSurfaceFromDC_Type)(LPDIRECTDRAW, HDC, LPDIRECTDRAWSURFACE*); typedef HRESULT (WINAPI *RestoreAllSurfaces_Type)(LPDIRECTDRAW); typedef HRESULT (WINAPI *TestCooperativeLevel_Type)(LPDIRECTDRAW); typedef HRESULT (WINAPI *GetDeviceIdentifier_Type)(LPDIRECTDRAW, LPDDDEVICEIDENTIFIER, DWORD); typedef HRESULT (WINAPI *GetScanLine_Type)(LPDIRECTDRAW, LPDWORD); typedef HRESULT (WINAPI *StartModeTest_Type)(LPDIRECTDRAW, LPSIZE, DWORD, DWORD); typedef HRESULT (WINAPI *EvaluateMode_Type)(LPDIRECTDRAW, DWORD, DWORD *); // DirectDrawSurface typedef ULONG (WINAPI *AddRefS_Type)(LPDIRECTDRAWSURFACE); typedef HRESULT (WINAPI *ReleaseS_Type)(LPDIRECTDRAWSURFACE); typedef HRESULT (WINAPI *AddAttachedSurface_Type)(LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE); typedef HRESULT (WINAPI *AddOverlayDirtyRect_Type)(LPDIRECTDRAWSURFACE, LPRECT); typedef HRESULT (WINAPI *Blt_Type)(LPDIRECTDRAWSURFACE, LPRECT, LPDIRECTDRAWSURFACE, LPRECT, DWORD, LPDDBLTFX); typedef HRESULT (WINAPI *BltBatch_Type)(LPDIRECTDRAWSURFACE, LPDDBLTBATCH, DWORD, DWORD); typedef HRESULT (WINAPI *BltFast_Type)(LPDIRECTDRAWSURFACE, DWORD, DWORD, LPDIRECTDRAWSURFACE, LPRECT, DWORD); typedef HRESULT (WINAPI *DeleteAttachedSurface_Type)(LPDIRECTDRAWSURFACE, DWORD, LPDIRECTDRAWSURFACE); typedef HRESULT (WINAPI *EnumAttachedSurfaces_Type)(LPDIRECTDRAWSURFACE, LPVOID, LPDDENUMSURFACESCALLBACK); typedef HRESULT (WINAPI *EnumOverlayZOrders_Type)(LPDIRECTDRAWSURFACE, DWORD, LPVOID, LPDDENUMSURFACESCALLBACK); typedef HRESULT (WINAPI *Flip_Type)(LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE, DWORD); typedef HRESULT (WINAPI *GetAttachedSurface_Type)(LPDIRECTDRAWSURFACE, DDSCAPS *, LPDIRECTDRAWSURFACE *); typedef HRESULT (WINAPI *GetBltStatus_Type)(LPDIRECTDRAWSURFACE, DWORD); typedef HRESULT (WINAPI *GetCapsS_Type)(LPDIRECTDRAWSURFACE, LPDDSCAPS); typedef HRESULT (WINAPI *GetCaps2S_Type)(LPDIRECTDRAWSURFACE, LPDDSCAPS2); typedef HRESULT (WINAPI *GetClipper_Type)(LPDIRECTDRAWSURFACE, LPDIRECTDRAWCLIPPER FAR*); typedef HRESULT (WINAPI *GetColorKey_Type)(LPDIRECTDRAWSURFACE, DWORD, LPDDCOLORKEY); typedef HRESULT (WINAPI *GetDC_Type) (LPDIRECTDRAWSURFACE, HDC FAR *); typedef HRESULT (WINAPI *GetFlipStatus_Type)(LPDIRECTDRAWSURFACE, DWORD); typedef HRESULT (WINAPI *GetOverlayPosition_Type)(LPDIRECTDRAWSURFACE, LPLONG, LPLONG); typedef HRESULT (WINAPI *GetPalette_Type)(LPDIRECTDRAWSURFACE, LPDIRECTDRAWPALETTE *); typedef HRESULT (WINAPI *GetPixelFormat_Type)(LPDIRECTDRAWSURFACE, LPDDPIXELFORMAT); typedef HRESULT (WINAPI *GetSurfaceDesc_Type)(LPDIRECTDRAWSURFACE, LPDDSURFACEDESC); typedef HRESULT (WINAPI *GetSurfaceDesc2_Type)(LPDIRECTDRAWSURFACE2, LPDDSURFACEDESC2); typedef HRESULT (WINAPI *InitializeC_Type)(LPDIRECTDRAWCLIPPER, LPDIRECTDRAW, DWORD); typedef HRESULT (WINAPI *IsLost_Type)(LPDIRECTDRAWSURFACE); typedef HRESULT (WINAPI *Lock_Type)(LPDIRECTDRAWSURFACE, LPRECT, LPDDSURFACEDESC, DWORD, HANDLE); typedef HRESULT (WINAPI *ReleaseDC_Type)(LPDIRECTDRAWSURFACE, HDC); typedef HRESULT (WINAPI *Restore_Type)(LPDIRECTDRAWSURFACE); typedef HRESULT (WINAPI *SetClipper_Type)(LPDIRECTDRAWSURFACE, LPDIRECTDRAWCLIPPER); typedef HRESULT (WINAPI *SetColorKey_Type)(LPDIRECTDRAWSURFACE, DWORD, LPDDCOLORKEY); typedef HRESULT (WINAPI *SetOverlayPosition_Type)(LPDIRECTDRAWSURFACE, LONG, LONG); typedef HRESULT (WINAPI *SetPalette_Type)(LPDIRECTDRAWSURFACE, LPDIRECTDRAWPALETTE); typedef HRESULT (WINAPI *Unlock1_Type)(LPDIRECTDRAWSURFACE, LPVOID); typedef HRESULT (WINAPI *Unlock4_Type)(LPDIRECTDRAWSURFACE, LPRECT); typedef HRESULT (WINAPI *UpdateOverlay_Type)(LPDIRECTDRAWSURFACE, LPRECT, LPDIRECTDRAWSURFACE, LPRECT, DWORD, LPDDOVERLAYFX); typedef HRESULT (WINAPI *UpdateOverlayDisplay_Type) (LPDIRECTDRAWSURFACE, DWORD); typedef HRESULT (WINAPI *UpdateOverlayZOrder_Type)(LPDIRECTDRAWSURFACE, DWORD, LPDIRECTDRAWSURFACE); typedef HRESULT (WINAPI *SetSurfaceDesc_Type)(LPDIRECTDRAWSURFACE, LPDDSURFACEDESC, DWORD); // DirectDrawClipper typedef HRESULT (WINAPI *AddRefC_Type)(LPDIRECTDRAWCLIPPER); typedef HRESULT (WINAPI *ReleaseC_Type)(LPDIRECTDRAWCLIPPER); typedef HRESULT (WINAPI *GetClipList_Type)(LPDIRECTDRAWCLIPPER, LPRECT, LPRGNDATA, LPDWORD); typedef HRESULT (WINAPI *SetClipList_Type)(LPDIRECTDRAWCLIPPER, LPRGNDATA, DWORD); typedef HRESULT (WINAPI *GetHWnd_Type)(LPDIRECTDRAWCLIPPER, HWND FAR *); typedef HRESULT (WINAPI *IsClipListChanged_Type)(LPDIRECTDRAWCLIPPER, BOOL FAR *); typedef HRESULT (WINAPI *SetHWnd_Type)(LPDIRECTDRAWCLIPPER, DWORD, HWND); // DirectDraw Palette /*** IUnknown methods ***/ typedef HRESULT (WINAPI *QueryInterfaceP_Type)(void *, REFIID, LPVOID *); typedef HRESULT (WINAPI *AddRefP_Type)(LPDIRECTDRAWPALETTE); typedef HRESULT (WINAPI *ReleaseP_Type)(LPDIRECTDRAWPALETTE); /*** IDirectDrawPalette methods ***/ typedef HRESULT (WINAPI *GetCapsP_Type)(LPDIRECTDRAWPALETTE, LPDWORD); typedef HRESULT (WINAPI *GetEntries_Type)(LPDIRECTDRAWPALETTE, DWORD, DWORD, DWORD, LPPALETTEENTRY); // STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW, DWORD, LPPALETTEENTRY) PURE; typedef HRESULT (WINAPI *SetEntries_Type)(LPDIRECTDRAWPALETTE, DWORD, DWORD, DWORD, LPPALETTEENTRY); // // GammaRamp typedef HRESULT (WINAPI *GammaRamp_Type)(LPDIRECTDRAWSURFACE, DWORD, LPDDGAMMARAMP); // extern procedures extern void HookTexture(LPVOID *, int); extern int Set_dwSize_From_Surface(); extern void SetBltTransformations(int); extern HRESULT WINAPI PrimaryBlt(int, Blt_Type, LPDIRECTDRAWSURFACE, LPRECT, LPDIRECTDRAWSURFACE, LPRECT, LPDDBLTFX); extern HRESULT WINAPI PrimaryNoBlt(int, Blt_Type, LPDIRECTDRAWSURFACE, LPRECT, LPDIRECTDRAWSURFACE, LPRECT, LPDDBLTFX); extern HRESULT WINAPI PrimaryStretchBlt(int, Blt_Type, LPDIRECTDRAWSURFACE, LPRECT, LPDIRECTDRAWSURFACE, LPRECT, LPDDBLTFX); extern HRESULT WINAPI PrimaryFastBlt(int, Blt_Type, LPDIRECTDRAWSURFACE, LPRECT, LPDIRECTDRAWSURFACE, LPRECT, LPDDBLTFX); extern HRESULT WINAPI PrimaryBilinearBlt(int, Blt_Type, LPDIRECTDRAWSURFACE, LPRECT, LPDIRECTDRAWSURFACE, LPRECT, LPDDBLTFX); typedef HRESULT (WINAPI *EmuBlt_Type)(int, Blt_Type, LPDIRECTDRAWSURFACE, LPRECT, LPDIRECTDRAWSURFACE, LPRECT, DWORD, LPVOID); typedef HRESULT (WINAPI *RevBlt_Type)(int, Blt_Type, LPDIRECTDRAWSURFACE, LPRECT, LPDIRECTDRAWSURFACE, LPRECT); typedef HRESULT (WINAPI *PrimaryBlt_Type)(int, Blt_Type, LPDIRECTDRAWSURFACE, LPRECT, LPDIRECTDRAWSURFACE, LPRECT, LPDDBLTFX); extern EmuBlt_Type pEmuBlt; extern RevBlt_Type pRevBlt; ================================================ FILE: dll/hdinput.cpp ================================================ #include #include #include "dxwnd.h" #include "dxwcore.hpp" #include "syslibs.h" typedef HRESULT (WINAPI *QueryInterface_Type)(void *, REFIID, LPVOID *); typedef HRESULT (WINAPI *DirectInputCreate_Type)(HINSTANCE, DWORD, LPDIRECTINPUT *, LPUNKNOWN); typedef HRESULT (WINAPI *DirectInputCreateEx_Type)(HINSTANCE, DWORD, REFIID, LPVOID *, LPUNKNOWN); typedef HRESULT (WINAPI *DICreateDevice_Type)(LPDIRECTINPUT, REFGUID, LPDIRECTINPUTDEVICE *, LPUNKNOWN); typedef HRESULT (WINAPI *DICreateDeviceEx_Type)(LPDIRECTINPUT, REFGUID, REFIID, LPVOID *, LPUNKNOWN); typedef HRESULT (WINAPI *GetDeviceData_Type)(LPDIRECTINPUTDEVICE, DWORD, LPVOID, LPDWORD, DWORD); typedef HRESULT (WINAPI *GetDeviceState_Type)(LPDIRECTINPUTDEVICE, DWORD, LPDIMOUSESTATE); typedef HRESULT (WINAPI *DISetCooperativeLevel_Type)(LPDIRECTINPUTDEVICE, HWND, DWORD); typedef HRESULT (WINAPI *SetDataFormat_Type)(LPDIRECTINPUTDEVICE, LPCDIDATAFORMAT); HRESULT WINAPI extDirectInputCreate(HINSTANCE, DWORD, LPDIRECTINPUT *, LPUNKNOWN); HRESULT WINAPI extDirectInputCreateEx(HINSTANCE, DWORD, REFIID, LPVOID *, LPUNKNOWN); HRESULT WINAPI extDirectInput8Create(HINSTANCE, DWORD, REFIID, LPVOID *, LPUNKNOWN); HRESULT WINAPI extDICreateDevice(LPDIRECTINPUT, REFGUID, LPDIRECTINPUTDEVICE *, LPUNKNOWN); HRESULT WINAPI extDICreateDeviceEx(LPDIRECTINPUT, REFGUID, REFIID, LPVOID *, LPUNKNOWN); HRESULT WINAPI extGetDeviceData(LPDIRECTINPUTDEVICE, DWORD, LPVOID, LPDWORD, DWORD); HRESULT WINAPI extGetDeviceState(LPDIRECTINPUTDEVICE, DWORD, LPDIMOUSESTATE); HRESULT WINAPI extDISetCooperativeLevel(LPDIRECTINPUTDEVICE, HWND, DWORD); HRESULT WINAPI extSetDataFormat(LPDIRECTINPUTDEVICE, LPCDIDATAFORMAT); HRESULT WINAPI extQueryInterfaceI(void *, REFIID, LPVOID *); void GetMousePosition(int *, int *); void InitPosition(int, int, int, int, int, int); DirectInputCreate_Type pDirectInputCreate = 0; DirectInputCreateEx_Type pDirectInputCreateEx = 0; DICreateDevice_Type pDICreateDevice = 0; DICreateDeviceEx_Type pDICreateDeviceEx = 0; GetDeviceData_Type pGetDeviceData; GetDeviceState_Type pGetDeviceState; DISetCooperativeLevel_Type pDISetCooperativeLevel; SetDataFormat_Type pSetDataFormat; QueryInterface_Type pQueryInterfaceI; int iCursorX; int iCursorY; int iCursorXBuf; int iCursorYBuf; int iCurMinX; int iCurMinY; int iCurMaxX; int iCurMaxY; int HookDirectInput(HMODULE module, int version) { HINSTANCE hinst; void *tmp; LPDIRECTINPUT lpdi; const GUID di7 = {0x9A4CB684,0x236D,0x11D3,0x8E,0x9D,0x00,0xC0,0x4F,0x68,0x44,0xAE}; const GUID di8 = {0xBF798030,0x483A,0x4DA2,0xAA,0x99,0x5D,0x64,0xED,0x36,0x97,0x00}; tmp = HookAPI(module, "dinput.dll", NULL, "DirectInputCreateA", extDirectInputCreate); if(tmp) pDirectInputCreate = (DirectInputCreate_Type)tmp; tmp = HookAPI(module, "dinput.dll", NULL, "DirectInputCreateW", extDirectInputCreate); if(tmp) pDirectInputCreate = (DirectInputCreate_Type)tmp; tmp = HookAPI(module, "dinput.dll", NULL, "DirectInputCreateEx", extDirectInputCreateEx); if(tmp) pDirectInputCreateEx = (DirectInputCreateEx_Type)tmp; tmp = HookAPI(module, "dinput8.dll", NULL, "DirectInput8Create", extDirectInput8Create); if(tmp) pDirectInputCreateEx = (DirectInputCreateEx_Type)tmp; if(!pDirectInputCreate && !pDirectInputCreateEx){ if(version < 8){ hinst = LoadLibrary("dinput.dll"); pDirectInputCreate = (DirectInputCreate_Type)GetProcAddress(hinst, "DirectInputCreateA"); if(pDirectInputCreate) if(!extDirectInputCreate(GetModuleHandle(0), DIRECTINPUT_VERSION, &lpdi, 0)) lpdi->Release(); pDirectInputCreateEx = (DirectInputCreateEx_Type)GetProcAddress(hinst, "DirectInputCreateEx"); if(pDirectInputCreateEx) if(!extDirectInputCreateEx(GetModuleHandle(0), DIRECTINPUT_VERSION, di7, (void **)&lpdi, 0)) lpdi->Release(); } else{ hinst = LoadLibrary("dinput8.dll"); pDirectInputCreateEx = (DirectInputCreateEx_Type)GetProcAddress(hinst, "DirectInput8Create"); if(pDirectInputCreateEx) if(!extDirectInputCreateEx(GetModuleHandle(0), DIRECTINPUT_VERSION, di8, (void **)&lpdi, 0)) lpdi->Release(); } } if(pDirectInputCreate || pDirectInputCreateEx) return 1; return 0; } HRESULT WINAPI extDirectInputCreate(HINSTANCE hinst, DWORD dwversion, LPDIRECTINPUT *lplpdi, LPUNKNOWN pu) { HRESULT res; OutTraceD("DirectInputCreate: dwVersion = %x\n", dwversion); res = (*pDirectInputCreate)(hinst, dwversion, lplpdi, pu); if(res) return res; SetHook((void *)(**(DWORD **)lplpdi + 12), extDICreateDevice, (void **)&pDICreateDevice, "CreateDevice(I)"); SetHook((void *)(**(DWORD **)lplpdi), extQueryInterfaceI, (void **)&pQueryInterfaceI, "QueryInterface(I)"); return 0; } HRESULT WINAPI extDirectInputCreateEx(HINSTANCE hinst, DWORD dwversion, REFIID riidltf, LPVOID *ppvout, LPUNKNOWN pu) { HRESULT res; OutTraceD("DirectInputCreateEx: dwVersion = %x REFIID = %x\n", dwversion, riidltf.Data1); res = (*pDirectInputCreateEx)(hinst, dwversion, riidltf, ppvout, pu); if(res) return res; SetHook((void *)(**(DWORD **)ppvout + 12), extDICreateDevice, (void **)&pDICreateDevice, "CreateDevice(I)"); SetHook((void *)(**(DWORD **)ppvout + 36), extDICreateDeviceEx, (void **)pDICreateDeviceEx, "DICreateDeviceEx(I)"); return 0; } HRESULT WINAPI extQueryInterfaceI(void * lpdi, REFIID riid, LPVOID *obp) { HRESULT res; OutTraceD("lpDI->QueryInterface: REFIID = %x\n", riid.Data1); res = (*pQueryInterfaceI)(lpdi, riid, obp); if(res) return res; switch(riid.Data1){ case 0x5944E662: //DirectInput2A case 0x5944E663: //DirectInput2W SetHook((void *)(**(DWORD **)obp + 12), extDICreateDevice, (void **)pDICreateDevice, "CreateDevice(I)"); break; } return 0; } HRESULT WINAPI extDirectInput8Create(HINSTANCE hinst, DWORD dwversion, REFIID riidltf, LPVOID *ppvout, LPUNKNOWN pu) { HRESULT res; OutTraceD("DirectInput8Create: dwVersion = %x REFIID = %x\n", dwversion, riidltf.Data1); res = (*pDirectInputCreateEx)(hinst, dwversion, riidltf, ppvout, pu); if(res) return res; SetHook((void *)(**(DWORD **)ppvout + 12), extDICreateDevice, (void **)&pDICreateDevice, "CreateDevice(I8)"); return 0; } HRESULT WINAPI extDICreateDevice(LPDIRECTINPUT lpdi, REFGUID rguid, LPDIRECTINPUTDEVICE *lplpdid, LPUNKNOWN pu) { HRESULT res; OutTraceD("lpDI->CreateDevice: REFGUID = %x\n", rguid.Data1); res = (*pDICreateDevice)(lpdi, rguid, lplpdid, pu); if(res) return res; SetHook((void *)(**(DWORD **)lplpdid + 36), extGetDeviceState, (void **)&pGetDeviceState, "GetDeviceState(I)"); SetHook((void *)(**(DWORD **)lplpdid + 40), extGetDeviceData, (void **)&pGetDeviceData, "GetDeviceData(I)"); SetHook((void *)(**(DWORD **)lplpdid + 44), extSetDataFormat, (void **)&pSetDataFormat, "SetDataFormat(I)"); SetHook((void *)(**(DWORD **)lplpdid + 52), extDISetCooperativeLevel, (void **)&pDISetCooperativeLevel, "SetCooperativeLevel(I)"); return 0; } HRESULT WINAPI extDICreateDeviceEx(LPDIRECTINPUT lpdi, REFGUID rguid, REFIID riid, LPVOID *pvout, LPUNKNOWN pu) { HRESULT res; OutTraceD("lpDI->CreateDeviceEx: GUID = %x REFIID = %x\n", rguid.Data1, riid.Data1); res = (*pDICreateDeviceEx)(lpdi, rguid, riid, pvout, pu); if(res) return res; SetHook((void *)(**(DWORD **)pvout + 36), extGetDeviceState, (void **)&pGetDeviceState, "GetDeviceState(I)"); SetHook((void *)(**(DWORD **)pvout + 40), extGetDeviceData, (void **)&pGetDeviceData, "GetDeviceData(I)"); SetHook((void *)(**(DWORD **)pvout + 44), extSetDataFormat, (void **)&pSetDataFormat, "SetDataFormat(I)"); SetHook((void *)(**(DWORD **)pvout + 52), extDISetCooperativeLevel, (void **)&pDISetCooperativeLevel, "SetCooperativeLevel(I)"); return 0; } HRESULT WINAPI extGetDeviceData(LPDIRECTINPUTDEVICE lpdid, DWORD cbdata, LPVOID rgdod, LPDWORD pdwinout, DWORD dwflags) { HRESULT res; BYTE *tmp; unsigned int i; POINT p; OutTraceD("GetDeviceData cbdata:%i\n", cbdata); res = (*pGetDeviceData)(lpdid, cbdata, rgdod, pdwinout, dwflags); if(res) return res; if(!dxw.bActive) *pdwinout = 0; GetMousePosition((int *)&p.x, (int *)&p.y); if(cbdata == 20 || cbdata == 24){ tmp = (BYTE *)rgdod; for(i = 0; i < *pdwinout; i ++){ if(((LPDIDEVICEOBJECTDATA)tmp)->dwOfs == DIMOFS_X){ ((LPDIDEVICEOBJECTDATA)tmp)->dwData = p.x; if(!dxw.bDInputAbs){ if(p.x < iCurMinX) p.x = iCurMinX; if(p.x > iCurMaxX) p.x = iCurMaxX; ((LPDIDEVICEOBJECTDATA)tmp)->dwData = p.x - iCursorXBuf; iCursorXBuf = p.x; } } if(((LPDIDEVICEOBJECTDATA)tmp)->dwOfs == DIMOFS_Y){ ((LPDIDEVICEOBJECTDATA)tmp)->dwData = p.y; if(!dxw.bDInputAbs){ if(p.y < iCurMinY) p.y = iCurMinY; if(p.y > iCurMaxY) p.y = iCurMaxY; ((LPDIDEVICEOBJECTDATA)tmp)->dwData = p.y - iCursorYBuf; iCursorYBuf = p.y; } } tmp += cbdata; } OutTraceD("DEBUG: directinput mousedata=(%d,%d)\n", p.x, p.y); } return 0; } HRESULT WINAPI extGetDeviceState(LPDIRECTINPUTDEVICE lpdid, DWORD cbdata, LPDIMOUSESTATE lpvdata) { HRESULT res; POINT p = {0, 0}; OutTraceD("GetDeviceState cbData:%i %i\n", cbdata, dxw.bActive); res = (*pGetDeviceState)(lpdid, cbdata, lpvdata); if(res) return res; if(cbdata == sizeof(DIMOUSESTATE) || cbdata == sizeof(DIMOUSESTATE2)){ GetMousePosition((int *)&p.x, (int *)&p.y); lpvdata->lX = p.x; lpvdata->lY = p.y; if(!dxw.bDInputAbs){ if(p.x < iCurMinX) p.x = iCurMinX; if(p.x > iCurMaxX) p.x = iCurMaxX; if(p.y < iCurMinY) p.y = iCurMinY; if(p.y > iCurMaxY) p.y = iCurMaxY; lpvdata->lX = p.x - iCursorX; lpvdata->lY = p.y - iCursorY; iCursorX = p.x; iCursorY = p.y; } if(!dxw.bActive){ lpvdata->lZ = 0; *(DWORD *)lpvdata->rgbButtons = 0; } OutTraceD("DEBUG: directinput mousestate=(%d,%d)\n", p.x, p.y); } if(cbdata == 256 && !dxw.bActive) ZeroMemory(lpvdata, 256); return 0; } HRESULT WINAPI extSetDataFormat(LPDIRECTINPUTDEVICE lpdid, LPCDIDATAFORMAT lpdf) { OutTraceD("SetDataFormat: flags = 0x%x\n", lpdf->dwFlags); if(lpdf->dwFlags & DIDF_ABSAXIS) dxw.bDInputAbs = 1; if(lpdf->dwFlags & DIDF_RELAXIS) dxw.bDInputAbs = 0; return (*pSetDataFormat)(lpdid, lpdf); } HRESULT WINAPI extDISetCooperativeLevel(LPDIRECTINPUTDEVICE lpdid, HWND hwnd, DWORD dwflags) { OutTraceD("lpDI->SetCooperativeLevel\n"); dwflags = DISCL_NONEXCLUSIVE | DISCL_BACKGROUND; return (*pDISetCooperativeLevel)(lpdid, hwnd, dwflags); } // Simplified version, taking in proper account the GetCursorPos API hooking & coordinate processing void GetMousePosition(int *x, int *y) { POINT p; //GetCursorPos(&p); extern BOOL WINAPI extGetCursorPos(LPPOINT); extGetCursorPos(&p); *x = p.x; *y = p.y; OutTraceD("GetMousePosition: x,y=(%d,%d)\n", *x, *y); } void InitPosition(int x, int y, int minx, int miny, int maxx, int maxy) { iCursorX = x; iCursorY = y; iCursorXBuf = x; iCursorYBuf = y; iCurMinX = minx; iCurMinY = miny; iCurMaxX = maxx; iCurMaxY = maxy; } ================================================ FILE: dll/hdinput.h ================================================ ================================================ FILE: dll/hexdump.cpp ================================================ #define _CRT_SECURE_NO_WARNINGS #include "stdio.h" #include "string.h" #define MAX_HEXDUMP 512 char *hexdump(unsigned char *Buffer, int len) { static char sHexBuffer[3*MAX_HEXDUMP+12]; char *s; int iMaxI; if(!Buffer) return "(NULL)"; s=sHexBuffer; iMaxI = len; if(iMaxI > MAX_HEXDUMP) iMaxI = MAX_HEXDUMP; for (int i=0; i iMaxI) strcpy(s, ",..."); return sHexBuffer; } ================================================ FILE: dll/hint.cpp ================================================ #define _CRT_SECURE_NO_WARNINGS #include "windows.h" #include "dxwnd.h" #include "dxwcore.hpp" typedef struct { BOOL bShowed; char *sHintText; } HintEntry_Type; HintEntry_Type HintTable[]={ {FALSE, "Automatic configuration hints enabled. Uncheck SHOWHINTS to turn off"}, {FALSE, "DirectDraw dependency detected. Check DirectX flags"}, {FALSE, "Direct3D8 dependency detected. Check DirectX8 flags"}, {FALSE, "Direct3D9 dependency detected. Check DirectX9 flags"}, {FALSE, "Direct3D10 dependency detected. Check DirectX10 flags"}, {FALSE, "Direct3D11 dependency detected. Check DirectX11 flags"}, {FALSE, "OpenGL dependency detected. Check OpenGL hook and flags"}, {FALSE, "DirectSound dependency detected. Check DirectSound hook in case of sound problems"}, {FALSE, "DirectInput dependency detected. Check DirectInput hook in case of input problems"}, {FALSE, "DirectInput8 dependency detected. Check DirectInput8 hook in case of input problems"}, {FALSE, "Movie libraries detected. Check multimedia section"}, {FALSE, "D3D libraries detected. Check DirectX version hook (DirectX7 ?)"}, {FALSE, "IMAGEHLP dependency detected. In case of error, check NOIMAGEHLP flag"}, {FALSE, "Compatibility settings for a dfferent OS detected. You may need to clear them"}, {FALSE, "Executable obfuscation detected. Impossible to hook this file"}, {FALSE, "SafeDisk dependency detected. Check for compatibility with current OS"}, {FALSE, "SecuRom dependency detected. Check for compatibility with current OS"}, {FALSE, "Integer32 memory size overflow. May need limit resources flag"}, {FALSE, "Hooked address update. May need to check the \"No hook update\" (HOOKNOUPDATE) flag"}, {FALSE, ""} }; void ShowHint(int HintId) { //if(!dxw.bHintActive) return; // boundary checks if ((HintId < HINT_HINT) || (HintId >= HINT_LAST)) return; // show hints just once if(HintTable[HintId].bShowed) return; HintTable[HintId].bShowed = TRUE; // show hint char sMessage[1024]; strcpy(sMessage, HintTable[HintId].sHintText); strcat(sMessage, "\n\nShow next hints?"); if(MessageBox(NULL, sMessage, "DxWnd hint", MB_OKCANCEL|MB_ICONWARNING|MB_TOPMOST)==IDCANCEL) dxw.bHintActive = FALSE; } ================================================ FILE: dll/hotpatch.cpp ================================================ // hotpatch compiled system dlls come with Windows XP SP2 or later // return: // 0 = patch failed // 1 = already patched // addr = address of the original function #define USEMINHOOK #include #include "dxwnd.h" #include "dxwcore.hpp" #ifdef USEMINHOOK #include "MinHook.h" #endif void *HotPatch(void *apiproc, const char *apiname, void *hookproc) { #ifdef USEMINHOOK void *pProc; static BOOL DoOnce = TRUE; if(DoOnce){ if (MH_Initialize() != MH_OK) { OutTraceE("HotPatch: MH_Initialize FAILED\n"); // What to do here? No recovery action ... return 0; } DoOnce = FALSE; } OutTraceH("HotPatch: api=%s addr=%x hook=%x\n", apiname, apiproc, hookproc); if(!strcmp(apiname, "GetProcAddress")) return 0; // do not mess with this one! if (MH_CreateHook(apiproc, hookproc, reinterpret_cast(&pProc)) != MH_OK){ OutTraceH("HotPatch: MH_CreateHook FAILED\n"); return 0; } if (MH_EnableHook(apiproc) != MH_OK){ OutTraceH("HotPatch: MH_EnableHook FAILED\n"); return 0; } OutTrace("HotPatch: api=%s addr=%x->%x hook=%x\n", apiname, apiproc, pProc, hookproc); return pProc; #else DWORD dwPrevProtect; BYTE* patch_address; void *orig_address; OutTraceH("HotPatch: api=%s addr=%x hook=%x\n", apiname, apiproc, hookproc); if(!strcmp(apiname, "GetProcAddress")) return 0; // do not mess with this one! patch_address = ((BYTE *)apiproc) - 5; orig_address = (BYTE *)apiproc + 2; // entry point could be at the top of a page? so VirtualProtect first to make sure patch_address is readable //if(!VirtualProtect(patch_address, 7, PAGE_EXECUTE_READWRITE, &dwPrevProtect)){ if(!VirtualProtect(patch_address, 12, PAGE_EXECUTE_WRITECOPY, &dwPrevProtect)){ OutTraceH("HotPatch: access denied. err=%x\n", GetLastError()); return (void *)0; // access denied } // some calls (QueryPerformanceCounter) are sort of hot patched already.... if(!memcmp( "\x90\x90\x90\x90\x90\xEB\x05\x90\x90\x90\x90\x90", patch_address, 12)){ *patch_address = 0xE9; // jmp (4-byte relative) *((DWORD *)(patch_address + 1)) = (DWORD)hookproc - (DWORD)patch_address - 5; // relative address *((WORD *)apiproc) = 0xF9EB; // should be atomic write (jmp $-5) VirtualProtect( patch_address, 12, dwPrevProtect, &dwPrevProtect ); // restore protection OutTrace("HotPatch: api=%s addr=%x->%x hook=%x\n", apiname, apiproc, orig_address, hookproc); return orig_address; } // make sure it is a hotpatchable image... check for 5 nops followed by mov edi,edi if(memcmp( "\x90\x90\x90\x90\x90\x8B\xFF", patch_address, 7) && memcmp( "\x90\x90\x90\x90\x90\x89\xFF", patch_address, 7)){ VirtualProtect( patch_address, 12, dwPrevProtect, &dwPrevProtect ); // restore protection // check it wasn't patched already if((*patch_address==0xE9) && (*(WORD *)apiproc == 0xF9EB)){ // should never go through here ... OutTraceH("HotPatch: patched already\n"); return (void *)1; } else{ OutTraceH("HotPatch: not patch aware.\n"); return (void *)0; // not hot patch "aware" } } *patch_address = 0xE9; // jmp (4-byte relative) *((DWORD *)(patch_address + 1)) = (DWORD)hookproc - (DWORD)patch_address - 5; // relative address *((WORD *)apiproc) = 0xF9EB; // should be atomic write (jmp $-5) VirtualProtect( patch_address, 12, dwPrevProtect, &dwPrevProtect ); // restore protection OutTrace("HotPatch: api=%s addr=%x->%x hook=%x\n", apiname, apiproc, orig_address, hookproc); return orig_address; #endif } ================================================ FILE: dll/iatpatch.cpp ================================================ #include #include "dxwnd.h" #include "dxwcore.hpp" void *IATPatchDefault(HMODULE module, DWORD ordinal, char *dll, void *apiproc, const char *apiname, void *hookproc) { PIMAGE_NT_HEADERS pnth; PIMAGE_IMPORT_DESCRIPTOR pidesc; DWORD base, rva; PSTR impmodule; PIMAGE_THUNK_DATA ptaddr; PIMAGE_THUNK_DATA ptname; PIMAGE_IMPORT_BY_NAME piname; DWORD oldprotect; void *org; OutTraceH("IATPatch: module=%x ordinal=%x name=%s dll=%s\n", module, ordinal, apiname, dll); base = (DWORD)module; org = 0; // by default, ret = 0 => API not found __try{ pnth = PIMAGE_NT_HEADERS(PBYTE(base) + PIMAGE_DOS_HEADER(base)->e_lfanew); if(!pnth) { OutTraceH("IATPatch: ERROR no PNTH at %d\n", __LINE__); return 0; } rva = pnth->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress; if(!rva) { OutTraceH("IATPatch: ERROR no RVA at %d\n", __LINE__); return 0; } pidesc = (PIMAGE_IMPORT_DESCRIPTOR)(base + rva); while(pidesc->FirstThunk){ impmodule = (PSTR)(base + pidesc->Name); //OutTraceH("IATPatch: analyze impmodule=%s\n", impmodule); char *fname = impmodule; for(; *fname; fname++); for(; !*fname; fname++); if(!lstrcmpi(dll, impmodule)) { OutTraceH("IATPatch: dll=%s found at %x\n", dll, impmodule); ptaddr = (PIMAGE_THUNK_DATA)(base + (DWORD)pidesc->FirstThunk); ptname = (pidesc->OriginalFirstThunk) ? (PIMAGE_THUNK_DATA)(base + (DWORD)pidesc->OriginalFirstThunk) : NULL; while(ptaddr->u1.Function){ // OutTraceH("IATPatch: address=%x ptname=%x\n", ptaddr->u1.AddressOfData, ptname); if (ptname){ // examining by function name if(!IMAGE_SNAP_BY_ORDINAL(ptname->u1.Ordinal)){ piname = (PIMAGE_IMPORT_BY_NAME)(base + (DWORD)ptname->u1.AddressOfData); OutTraceH("IATPatch: BYNAME ordinal=%x address=%x name=%s hint=%x\n", ptaddr->u1.Ordinal, ptaddr->u1.AddressOfData, (char *)piname->Name, piname->Hint); if(!lstrcmpi(apiname, (char *)piname->Name)) break; } else{ // OutTraceH("IATPatch: BYORD target=%x ord=%x\n", ordinal, IMAGE_ORDINAL32(ptname->u1.Ordinal)); if(ordinal && (IMAGE_ORDINAL32(ptname->u1.Ordinal) == ordinal)) { // skip unknow ordinal 0 OutTraceH("IATPatch: BYORD ordinal=%x addr=%x\n", ptname->u1.Ordinal, ptaddr->u1.Function); //OutTraceH("IATPatch: BYORD GetProcAddress=%x\n", GetProcAddress(GetModuleHandle(dll), MAKEINTRESOURCE(IMAGE_ORDINAL32(ptname->u1.Ordinal)))); break; } } } else { // OutTraceH("IATPatch: fname=%s\n", fname); if(!lstrcmpi(apiname, fname)) { OutTraceH("IATPatch: BYSCAN ordinal=%x address=%x name=%s\n", ptaddr->u1.Ordinal, ptaddr->u1.AddressOfData, fname); break; } for(; *fname; fname++); for(; !*fname; fname++); } if (apiproc){ // examining by function addr if(ptaddr->u1.Function == (DWORD)apiproc) break; } ptaddr ++; if (ptname) ptname ++; } if(ptaddr->u1.Function) { org = (void *)ptaddr->u1.Function; if(org == hookproc) return 0; // already hooked if(!VirtualProtect(&ptaddr->u1.Function, 4, PAGE_EXECUTE_READWRITE, &oldprotect)) { OutTraceDW("IATPatch: VirtualProtect error %d at %d\n", GetLastError(), __LINE__); return 0; } ptaddr->u1.Function = (DWORD)hookproc; if(!VirtualProtect(&ptaddr->u1.Function, 4, oldprotect, &oldprotect)) { OutTraceDW("IATPatch: VirtualProtect error %d at %d\n", GetLastError(), __LINE__); return 0; } if (!FlushInstructionCache(GetCurrentProcess(), &ptaddr->u1.Function, 4)) { OutTraceDW("IATPatch: FlushInstructionCache error %d at %d\n", GetLastError(), __LINE__); return 0; } OutTraceH("IATPatch hook=%s address=%x->%x\n", apiname, org, hookproc); return org; } } pidesc ++; } if(!pidesc->FirstThunk) { OutTraceH("IATPatch: PE unreferenced function %s:%s\n", dll, apiname); return 0; } } __except(EXCEPTION_EXECUTE_HANDLER) { OutTraceH("IATPatch: EXCEPTION hook=%s:%s Hook Failed.\n", dll, apiname); } return org; } void *IATPatchSequential(HMODULE module, DWORD ordinal, char *dll, void *apiproc, const char *apiname, void *hookproc) { PIMAGE_NT_HEADERS pnth; PIMAGE_IMPORT_DESCRIPTOR pidesc; DWORD base, rva; PSTR impmodule; PIMAGE_THUNK_DATA ptaddr; PIMAGE_THUNK_DATA ptname; PIMAGE_IMPORT_BY_NAME piname; DWORD oldprotect; void *org; OutTraceH("IATPatch: module=%x ordinal=%x name=%s dll=%s\n", module, ordinal, apiname, dll); base = (DWORD)module; org = 0; // by default, ret = 0 => API not found __try{ pnth = PIMAGE_NT_HEADERS(PBYTE(base) + PIMAGE_DOS_HEADER(base)->e_lfanew); if(!pnth) { OutTraceH("IATPatch: ERROR no PNTH at %d\n", __LINE__); return 0; } rva = pnth->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress; if(!rva) { OutTraceH("IATPatch: ERROR no RVA at %d\n", __LINE__); return 0; } pidesc = (PIMAGE_IMPORT_DESCRIPTOR)(base + rva); // move fname pointer to first API name char *fname; while(pidesc->FirstThunk){ impmodule = (PSTR)(base + pidesc->Name); fname = impmodule; for(; *fname; fname++); for(; !*fname; fname++); pidesc ++; } pidesc = (PIMAGE_IMPORT_DESCRIPTOR)(base + rva); //OutTraceB("IATPatch: first call=%s\n", fname); while(pidesc->FirstThunk){ impmodule = (PSTR)(base + pidesc->Name); if(!lstrcmpi(dll, impmodule)) { OutTraceH("IATPatch: dll=%s found at %x\n", dll, impmodule); //OutTraceH("IATPatch: first call=%s\n", fname); ptaddr = (PIMAGE_THUNK_DATA)(base + (DWORD)pidesc->FirstThunk); ptname = (pidesc->OriginalFirstThunk) ? (PIMAGE_THUNK_DATA)(base + (DWORD)pidesc->OriginalFirstThunk) : NULL; while(ptaddr->u1.Function){ // OutTraceH("IATPatch: address=%x ptname=%x\n", ptaddr->u1.AddressOfData, ptname); if (ptname){ // examining by function name if(!IMAGE_SNAP_BY_ORDINAL(ptname->u1.Ordinal)){ piname = (PIMAGE_IMPORT_BY_NAME)(base + (DWORD)ptname->u1.AddressOfData); OutTraceH("IATPatch: BYNAME ordinal=%x address=%x name=%s hint=%x\n", ptaddr->u1.Ordinal, ptaddr->u1.AddressOfData, (char *)piname->Name, piname->Hint); if(!lstrcmpi(apiname, (char *)piname->Name)) break; } else{ // OutTraceH("IATPatch: BYORD target=%x ord=%x\n", ordinal, IMAGE_ORDINAL32(ptname->u1.Ordinal)); if(ordinal && (IMAGE_ORDINAL32(ptname->u1.Ordinal) == ordinal)) { // skip unknow ordinal 0 OutTraceH("IATPatch: BYORD ordinal=%x addr=%x\n", ptname->u1.Ordinal, ptaddr->u1.Function); //OutTraceH("IATPatch: BYORD GetProcAddress=%x\n", GetProcAddress(GetModuleHandle(dll), MAKEINTRESOURCE(IMAGE_ORDINAL32(ptname->u1.Ordinal)))); break; } } } else { // OutTraceH("IATPatch: fname=%s\n", fname); if(!lstrcmpi(apiname, fname)) { OutTraceH("IATPatch: BYSCAN ordinal=%x address=%x name=%s\n", ptaddr->u1.Ordinal, ptaddr->u1.AddressOfData, fname); break; } for(; *fname; fname++); for(; !*fname; fname++); } if (apiproc){ // examining by function addr if(ptaddr->u1.Function == (DWORD)apiproc) break; } ptaddr ++; if (ptname) ptname ++; } if(ptaddr->u1.Function) { OutTraceDW("IATPatch: hooking %s\n", apiname); org = (void *)ptaddr->u1.Function; if(org == hookproc) return 0; // already hooked if(!VirtualProtect(&ptaddr->u1.Function, 4, PAGE_EXECUTE_READWRITE, &oldprotect)) { OutTraceDW("IATPatch: VirtualProtect error %d at %d\n", GetLastError(), __LINE__); return 0; } ptaddr->u1.Function = (DWORD)hookproc; if(!VirtualProtect(&ptaddr->u1.Function, 4, oldprotect, &oldprotect)) { OutTraceDW("IATPatch: VirtualProtect error %d at %d\n", GetLastError(), __LINE__); return 0; } if (!FlushInstructionCache(GetCurrentProcess(), &ptaddr->u1.Function, 4)) { OutTraceDW("IATPatch: FlushInstructionCache error %d at %d\n", GetLastError(), __LINE__); return 0; } OutTraceH("IATPatch hook=%s address=%x->%x\n", apiname, org, hookproc); return org; } } else{ //OutTraceDW("IATPatch: skip dll=%s first call=%s\n", impmodule, fname); // skip dll fnames ... ptaddr = (PIMAGE_THUNK_DATA)(base + (DWORD)pidesc->FirstThunk); //ptname = (pidesc->OriginalFirstThunk) ? (PIMAGE_THUNK_DATA)(base + (DWORD)pidesc->OriginalFirstThunk) : NULL; while(ptaddr->u1.Function){ ptaddr ++; for(; *fname; fname++); for(; !*fname; fname++); } } pidesc ++; } if(!pidesc->FirstThunk) { OutTraceH("IATPatch: PE unreferenced function %s:%s\n", dll, apiname); return 0; } } __except(EXCEPTION_EXECUTE_HANDLER) { OutTraceH("IATPatch: EXCEPTION hook=%s:%s Hook Failed.\n", dll, apiname); } return org; } // Note: when pidesc->OriginalFirstThunk is NULL, the pidesc->FirstThunk points to an array of // RVA for imported function names in the PE file, but when the loader loads the program these // values gets replaced by the function addresses. The only way to retrieve the function names // after that event is to point to the dll name and get the list of the following strings sequentially // taking in account that the function names have variable length and are aligned to a DWORD // boundary, so that a practical way to retrieve the next name is this piece of code: // for(; *fname; fname++); for(; !*fname; fname++); // Note (2): the above condition is not always true. The original version of "Al Unser Jr Arcade Racing" // executable ALUNSER.EXE seems to have all dll names first, then followed by the names of all the dll // entries, so that it is still possible to retrieve the function name, but a different schema must be used. void DumpImportTableDefault(HMODULE module) { PIMAGE_NT_HEADERS pnth; PIMAGE_IMPORT_DESCRIPTOR pidesc; DWORD base, rva; PSTR impmodule; PIMAGE_THUNK_DATA ptaddr; PIMAGE_THUNK_DATA ptname; PIMAGE_IMPORT_BY_NAME piname; base=(DWORD)module; // OutTrace("DumpImportTable: base=%x\n", base); __try{ pnth = PIMAGE_NT_HEADERS(PBYTE(base) + PIMAGE_DOS_HEADER(base)->e_lfanew); if(!pnth) { OutTrace("DumpImportTable: ERROR no pnth at %d\n", __LINE__); return; } rva = pnth->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress; if(!rva) { OutTrace("DumpImportTable: ERROR no rva at %d\n", __LINE__); return; } pidesc = (PIMAGE_IMPORT_DESCRIPTOR)(base + rva); while(pidesc->FirstThunk){ char *fname; impmodule = (PSTR)(base + pidesc->Name); OutTrace("DumpImportTable: ENTRY timestamp=%x module=%s forwarderchain=%x\n", pidesc->TimeDateStamp, impmodule, pidesc->ForwarderChain); if(pidesc->OriginalFirstThunk) { ptname = (PIMAGE_THUNK_DATA)(base + (DWORD)pidesc->OriginalFirstThunk); } else{ ptname = 0; fname = impmodule; for(; *fname; fname++); for(; !*fname; fname++); OutTrace("DumpImportTable: no PE OFTs - stripped module=%s\n", impmodule); } ptaddr = (PIMAGE_THUNK_DATA)(base + (DWORD)pidesc->FirstThunk); while(ptaddr->u1.Function){ OutTrace("addr=%x", ptaddr->u1.Function); ptaddr ++; if(ptname){ if(!IMAGE_SNAP_BY_ORDINAL(ptname->u1.Ordinal)){ piname = (PIMAGE_IMPORT_BY_NAME)(base + (DWORD)ptname->u1.AddressOfData); OutTrace(" hint=%x name=%s", piname->Hint, piname->Name); ptname ++; } } else { OutTrace(" name=%s", fname); for(; *fname; fname++); for(; !*fname; fname++); } OutTrace("\n"); } OutTrace("*** EOT ***\n", ptaddr->u1.Function); pidesc ++; } } __except(EXCEPTION_EXECUTE_HANDLER) { OutTraceDW("DumpImportTable: EXCEPTION\n"); } return; } void DumpImportTableSequential(HMODULE module) { PIMAGE_NT_HEADERS pnth; PIMAGE_IMPORT_DESCRIPTOR pidesc; DWORD base, rva; PSTR impmodule; PIMAGE_THUNK_DATA ptaddr; PIMAGE_THUNK_DATA ptname; PIMAGE_IMPORT_BY_NAME piname; base=(DWORD)module; // OutTrace("DumpImportTable: base=%x\n", base); __try{ pnth = PIMAGE_NT_HEADERS(PBYTE(base) + PIMAGE_DOS_HEADER(base)->e_lfanew); if(!pnth) { OutTrace("DumpImportTable: ERROR no pnth at %d\n", __LINE__); return; } rva = pnth->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress; if(!rva) { OutTrace("DumpImportTable: ERROR no rva at %d\n", __LINE__); return; } pidesc = (PIMAGE_IMPORT_DESCRIPTOR)(base + rva); OutTrace("DumpImportTable: pidesc=%x\n", pidesc); char *fname; PIMAGE_IMPORT_DESCRIPTOR savepidesc = pidesc; while(pidesc->FirstThunk){ impmodule = (PSTR)(base + pidesc->Name); fname = impmodule; for(; *fname; fname++); for(; !*fname; fname++); pidesc ++; } pidesc = savepidesc; OutTrace("DumpImportTable: no PE OFTs - first call=%s\n", fname); while(pidesc->FirstThunk){ //char *fname; impmodule = (PSTR)(base + pidesc->Name); OutTrace("DumpImportTable: ENTRY timestamp=%x module=%s forwarderchain=%x\n", pidesc->TimeDateStamp, impmodule, pidesc->ForwarderChain); if(pidesc->OriginalFirstThunk) { ptname = (PIMAGE_THUNK_DATA)(base + (DWORD)pidesc->OriginalFirstThunk); } else{ ptname = 0; //fname = impmodule; //for(; *fname; fname++); for(; !*fname; fname++); OutTrace("DumpImportTable: no PE OFTs - stripped module=%s\n", impmodule); } ptaddr = (PIMAGE_THUNK_DATA)(base + (DWORD)pidesc->FirstThunk); while(ptaddr->u1.Function){ OutTrace("addr=%x", ptaddr->u1.Function); ptaddr ++; if(ptname){ if(!IMAGE_SNAP_BY_ORDINAL(ptname->u1.Ordinal)){ piname = (PIMAGE_IMPORT_BY_NAME)(base + (DWORD)ptname->u1.AddressOfData); OutTrace(" hint=%x name=%s", piname->Hint, piname->Name); ptname ++; } } else { OutTrace(" name=%s", fname); for(; *fname; fname++); for(; !*fname; fname++); } OutTrace("\n"); } OutTrace("*** EOT ***\n", ptaddr->u1.Function); pidesc ++; } } __except(EXCEPTION_EXECUTE_HANDLER) { OutTraceDW("DumpImportTable: EXCEPTION\n"); } return; } static char* stristr(char* str1, const char* str2) { char* p1 = str1 ; const char* p2 = str2 ; char* r = *p2 == 0 ? str1 : 0 ; while(*p1 != 0 && *p2 != 0) { if(tolower(*p1) == tolower(*p2)){ if(r == 0) r = p1; p2++ ; } else { p2 = str2; if(tolower(*p1) == tolower(*p2)){ r = p1; p2++ ; } else{ r = 0; } } p1++ ; } return *p2 == 0 ? r : 0 ; } BOOL IsIATSequential(HMODULE module) { PIMAGE_NT_HEADERS pnth; PIMAGE_IMPORT_DESCRIPTOR pidesc; DWORD base, rva; base=(DWORD)module; __try{ pnth = PIMAGE_NT_HEADERS(PBYTE(base) + PIMAGE_DOS_HEADER(base)->e_lfanew); if(!pnth) { OutTrace("IsIATSequential: ERROR no pnth at %d\n", __LINE__); return FALSE; } rva = pnth->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress; if(!rva) { OutTrace("IsIATSequential: ERROR no rva at %d\n", __LINE__); return FALSE; } pidesc = (PIMAGE_IMPORT_DESCRIPTOR)(base + rva); //OutTrace("IsIATSequential: pidesc=%x\n", pidesc); char *fname = (PSTR)(base + pidesc->Name); // first string should be a DLL in both cases if(!stristr(fname, ".DLL")) { OutTrace("IsIATSequential: ERROR no .DLL at %d\n", __LINE__); return FALSE; } // skip first string for(; *fname; fname++); for(; !*fname; fname++); // if second string is another DLL it is sequential, otherwise not. //OutTraceB("IsIATSequential: second entry=%s\n", fname); return (BOOL)stristr(fname, ".DLL"); } __except(EXCEPTION_EXECUTE_HANDLER) { OutTraceDW("IsIATSequential: EXCEPTION\n"); } return FALSE; } ================================================ FILE: dll/imagehlp.cpp ================================================ #include "dxwnd.h" #include "dxwcore.hpp" #include "syslibs.h" #include "dxhook.h" #include "dxhelper.h" #include "stdio.h" #include "Dbghelp.h" typedef PIMAGE_DEBUG_INFORMATION (WINAPI *MapDebugInformation_Type)(HANDLE, PCSTR, PCSTR, ULONG); typedef BOOL (WINAPI *UnmapDebugInformation_Type)(PIMAGE_DEBUG_INFORMATION); typedef BOOL (WINAPI *SymInitialize_Type)(HANDLE, PCTSTR, BOOL); typedef BOOL (WINAPI *SymCleanup_Type)(HANDLE); typedef BOOL (WINAPI *StackWalk_Type)(DWORD, HANDLE, HANDLE, LPSTACKFRAME, LPVOID, PREAD_PROCESS_MEMORY_ROUTINE, PFUNCTION_TABLE_ACCESS_ROUTINE, PGET_MODULE_BASE_ROUTINE, PTRANSLATE_ADDRESS_ROUTINE); typedef LPVOID (WINAPI *SymFunctionTableAccess_Type)(HANDLE, DWORD); typedef LPVOID (WINAPI *SymGetModuleBase_Type)(HANDLE, DWORD); typedef BOOL (WINAPI *SymGetSymFromAddr_Type)(HANDLE, DWORD, LPDWORD, PIMAGEHLP_SYMBOL); PIMAGE_DEBUG_INFORMATION WINAPI extMapDebugInformation(HANDLE, PCSTR, PCSTR, ULONG); BOOL WINAPI extUnmapDebugInformation(PIMAGE_DEBUG_INFORMATION); BOOL WINAPI extSymInitialize(HANDLE, PCTSTR, BOOL); BOOL WINAPI extSymCleanup(HANDLE); BOOL WINAPI extStackWalk(DWORD, HANDLE, HANDLE, LPSTACKFRAME, LPVOID, PREAD_PROCESS_MEMORY_ROUTINE, PFUNCTION_TABLE_ACCESS_ROUTINE, PGET_MODULE_BASE_ROUTINE, PTRANSLATE_ADDRESS_ROUTINE); LPVOID WINAPI extSymFunctionTableAccess(HANDLE, DWORD); LPVOID WINAPI extSymGetModuleBase(HANDLE, DWORD); BOOL WINAPI extSymGetSymFromAddr(HANDLE, DWORD, LPDWORD, PIMAGEHLP_SYMBOL); MapDebugInformation_Type pMapDebugInformation = NULL; UnmapDebugInformation_Type pUnmapDebugInformation = NULL; SymInitialize_Type pSymInitialize; SymCleanup_Type pSymCleanup; StackWalk_Type pStackWalk; SymFunctionTableAccess_Type pSymFunctionTableAccess; SymGetModuleBase_Type pSymGetModuleBase; SymGetSymFromAddr_Type pSymGetSymFromAddr; static HookEntryEx_Type Hooks[]={ {HOOK_IAT_CANDIDATE, 0, "MapDebugInformation", (FARPROC)NULL, (FARPROC *)&pMapDebugInformation, (FARPROC)extMapDebugInformation}, {HOOK_IAT_CANDIDATE, 0, "UnmapDebugInformation", (FARPROC)NULL, (FARPROC *)&pUnmapDebugInformation, (FARPROC)extUnmapDebugInformation}, {HOOK_IAT_CANDIDATE, 0, "SymInitialize", (FARPROC)NULL, (FARPROC *)&pSymInitialize, (FARPROC)extSymInitialize}, {HOOK_IAT_CANDIDATE, 0, "SymCleanup", (FARPROC)NULL, (FARPROC *)&pSymCleanup, (FARPROC)extSymCleanup}, {HOOK_IAT_CANDIDATE, 0, "StackWalk", (FARPROC)NULL, (FARPROC *)&pStackWalk, (FARPROC)extStackWalk}, {HOOK_IAT_CANDIDATE, 0, "SymFunctionTableAccess", (FARPROC)NULL, (FARPROC *)&pSymFunctionTableAccess, (FARPROC)extSymFunctionTableAccess}, {HOOK_IAT_CANDIDATE, 0, "SymGetModuleBase", (FARPROC)NULL, (FARPROC *)&pSymGetModuleBase, (FARPROC)extSymGetModuleBase}, {HOOK_IAT_CANDIDATE, 0, "SymGetSymFromAddr", (FARPROC)NULL, (FARPROC *)&pSymGetSymFromAddr, (FARPROC)extSymGetSymFromAddr}, {HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator }; static char *libname = "IMAGEHLP.DLL"; void HookImagehlpInit() { HookLibInitEx(Hooks); } void HookImagehlp(HMODULE module) { if(dxw.dwFlags5 & NOIMAGEHLP) HookLibraryEx(module, Hooks, libname); } FARPROC Remap_Imagehlp_ProcAddress(LPCSTR proc, HMODULE hModule) { FARPROC addr; if(dxw.dwFlags5 & NOIMAGEHLP) { if(addr=RemapLibraryEx(proc, hModule, Hooks)) return addr; } return NULL; } // =================== rerouted calls ========================== IMAGE_DEBUG_INFORMATION DummyDebugInfo; PIMAGE_DEBUG_INFORMATION WINAPI extMapDebugInformation(HANDLE FileHandle, PCSTR FileName, PCSTR SymbolPath, ULONG ImageBase) { OutTrace("MapDebugInformation: FileHandle=%x FileName=%s SymbolPath=%s ImageBase=%x\n", FileHandle, FileName, SymbolPath, ImageBase); memset(&DummyDebugInfo, 0, sizeof(IMAGE_DEBUG_INFORMATION)); return &DummyDebugInfo; } BOOL WINAPI extUnmapDebugInformation(PIMAGE_DEBUG_INFORMATION DebugInfo) { OutTrace("UnmapDebugInformation: DebugInfo=%x\n", DebugInfo); return TRUE; } BOOL WINAPI extSymInitialize(HANDLE hProcess, PCTSTR UserSearchPath, BOOL fInvadeProcess) { OutTrace("SymInitialize: hprocess=%x usrsearchpath=\"%s\" invadeproc=%x\n", hProcess, UserSearchPath, fInvadeProcess); return TRUE; } BOOL WINAPI extSymCleanup(HANDLE hProcess) { OutTrace("SymCleanup: hprocess=%x\n", hProcess); return TRUE; } BOOL WINAPI extStackWalk(DWORD MachineType, HANDLE hProcess, HANDLE hThread, LPSTACKFRAME StackFrame, LPVOID ContextRecord, PREAD_PROCESS_MEMORY_ROUTINE ReadMemoryRoutine, PFUNCTION_TABLE_ACCESS_ROUTINE FunctionTableAccessRoutine, PGET_MODULE_BASE_ROUTINE GetModuleBaseRoutine, PTRANSLATE_ADDRESS_ROUTINE TranslateAddress) { OutTrace("SymCleanup: hprocess=%x\n", hProcess); // too complex, pretend we have an error return FALSE; } LPVOID WINAPI extSymFunctionTableAccess(HANDLE hProcess, DWORD AddrBase) { OutTrace("SymFunctionTableAccess: hprocess=%x addrbase=%x\n", hProcess, AddrBase); // too dangerous, pretend we have an error return NULL; } LPVOID WINAPI extSymGetModuleBase(HANDLE hProcess, DWORD AddrBase) { OutTrace("SymGetModuleBase: hprocess=%x addrbase=%x\n", hProcess, AddrBase); // too dangerous, pretend we have an error return NULL; } BOOL WINAPI extSymGetSymFromAddr(HANDLE hProcess, DWORD Address, LPDWORD Displacement, PIMAGEHLP_SYMBOL Symbol) { OutTrace("SymGetSymFromAddr: hprocess=%x address=%x\n", hProcess, Address); // too dangerous, pretend we have an error return NULL; } ================================================ FILE: dll/imelib.cpp ================================================ #define _WIN32_WINNT 0x0600 #define WIN32_LEAN_AND_MEAN #include #include #include #include "dxwnd.h" #include "dxwcore.hpp" #include "dxhook.h" #include "syslibs.h" #include "dxhelper.h" static HookEntryEx_Type Hooks[]={ {HOOK_IAT_CANDIDATE, 0, "ImmNotifyIME", NULL, (FARPROC *)&pImmNotifyIME, (FARPROC)extImmNotifyIME}, {HOOK_IAT_CANDIDATE, 0, "ImmCreateContext", NULL, (FARPROC *)&pImmCreateContext, (FARPROC)extImmCreateContext}, {HOOK_IAT_CANDIDATE, 0, "ImmDestroyContext", NULL, (FARPROC *)&pImmDestroyContext, (FARPROC)extImmDestroyContext}, {HOOK_IAT_CANDIDATE, 0, "ImmSetOpenStatus", NULL, (FARPROC *)&pImmSetOpenStatus, (FARPROC)extImmSetOpenStatus}, {HOOK_IAT_CANDIDATE, 0, "ImmAssociateContext", NULL, (FARPROC *)&pImmAssociateContext, (FARPROC)extImmAssociateContext}, {HOOK_IAT_CANDIDATE, 0, "ImmSetCompositionWindow", NULL, (FARPROC *)&pImmSetCompositionWindow, (FARPROC)extImmSetCompositionWindow}, {HOOK_IAT_CANDIDATE, 0, "ImmSetCompositionStringA", NULL, (FARPROC *)&pImmSetCompositionString, (FARPROC)extImmSetCompositionString}, {HOOK_IAT_CANDIDATE, 0, "ImmGetOpenStatus", NULL, (FARPROC *)&pImmGetOpenStatus, (FARPROC)extImmGetOpenStatus}, {HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator }; void HookImeLib(HMODULE module) { if(!(dxw.dwFlags2 & SUPPRESSIME)) return; HookLibraryEx(module, Hooks, "IMM32.dll"); } FARPROC Remap_ImeLib_ProcAddress(LPCSTR proc, HMODULE hModule) { FARPROC addr; if(!(dxw.dwFlags2 & SUPPRESSIME)) return NULL; if (addr=RemapLibraryEx(proc, hModule, Hooks)) return addr; return NULL; } BOOL WINAPI extImmNotifyIME(HIMC hIMC, DWORD dwAction, DWORD dwIndex, DWORD dwValue) { OutTraceDW("ImmNotifyIME: hIMC=%x dwAction=%x dwIndex=%x dwValue=%x\n", hIMC, dwAction, dwIndex, dwValue); return(*pImmNotifyIME)(hIMC, dwAction, dwIndex, dwValue); } HIMC WINAPI extImmCreateContext(void) { OutTraceDW("ImmCreateContext\n"); return(*pImmCreateContext)(); } BOOL WINAPI extImmDestroyContext(HIMC hIMC) { OutTraceDW("ImmDestroyContext: hIMC=%x\n", hIMC); return(*pImmDestroyContext)(hIMC); } BOOL WINAPI extImmSetOpenStatus(HIMC hIMC, BOOL fOpen) { OutTraceDW("ImmSetOpenStatus: hIMC=%x fOpen=%x\n", hIMC, fOpen); return(*pImmSetOpenStatus)(hIMC, fOpen); } HIMC WINAPI extImmAssociateContext(HWND hwnd, HIMC hIMC) { OutTraceDW("ImmAssociateContext: hwnd=%x hIMC=%x\n", hwnd, hIMC); //return NULL; return(*pImmAssociateContext)(hwnd, hIMC); } BOOL WINAPI extImmSetCompositionWindow(HIMC hIMC, LPCOMPOSITIONFORM lpCompForm) { OutTraceDW("ImmSetCompositionWindow: hIMC=%x lpCompForm=%x\n", hIMC, lpCompForm); return(*pImmSetCompositionWindow)(hIMC, lpCompForm); } BOOL WINAPI extImmSetCompositionString(HIMC hIMC, DWORD dwIndex, LPVOID lpComp, DWORD dwCompLen, LPVOID lpRead, DWORD dwReadLen) { OutTraceDW("ImmSetCompositionString: hIMC=%x dwIndex=%x lpComp=%x dwCompLen=%x dwRead=%x dwReadLen=%x\n", hIMC, dwIndex, lpComp, dwCompLen, lpRead, dwReadLen); return (*pImmSetCompositionString)(hIMC, dwIndex, lpComp, dwCompLen, lpRead, dwReadLen); } BOOL WINAPI extImmGetOpenStatus(HIMC hIMC) { OutTraceDW("ImmGetOpenStatus: hIMC=%x\n", hIMC); return(*pImmGetOpenStatus)(hIMC); } ================================================ FILE: dll/kernel32.cpp ================================================ #define _CRT_SECURE_NO_WARNINGS #include "dxwnd.h" #include "dxwcore.hpp" #include "syslibs.h" #include "dxhook.h" #include "dxhelper.h" #include "hddraw.h" #include "stdio.h" //#undef IsTraceDW //#define IsTraceDW TRUE //#define LOCKINJECTIONTHREADS #define TRYFATNAMES TRUE extern HRESULT WINAPI extDirectDrawEnumerateA(LPDDENUMCALLBACK, LPVOID); extern HRESULT WINAPI extDirectDrawEnumerateExA(LPDDENUMCALLBACKEX, LPVOID, DWORD); BOOL WINAPI extCheckRemoteDebuggerPresent(HANDLE, PBOOL); LPVOID WINAPI extVirtualAlloc(LPVOID, SIZE_T, DWORD, DWORD); UINT WINAPI extWinExec(LPCSTR, UINT); BOOL WINAPI extSetPriorityClass(HANDLE, DWORD); BOOL WINAPI extGlobalUnlock(HGLOBAL); LPVOID WINAPI extHeapAlloc(HANDLE, DWORD, SIZE_T); LPVOID WINAPI extHeapReAlloc(HANDLE, DWORD, LPVOID, SIZE_T); HANDLE WINAPI extHeapCreate(DWORD, SIZE_T, SIZE_T); BOOL WINAPI extHeapFree(HANDLE, DWORD, LPVOID); BOOL WINAPI extHeapValidate(HANDLE, DWORD, LPVOID); SIZE_T WINAPI extHeapCompact(HANDLE, DWORD); HANDLE WINAPI extGetProcessHeap(void); BOOL WINAPI extHeapDestroy(HANDLE); typedef LPVOID (WINAPI *VirtualAlloc_Type)(LPVOID, SIZE_T, DWORD, DWORD); typedef BOOL (WINAPI *CreateProcessA_Type)(LPCTSTR, LPTSTR, LPSECURITY_ATTRIBUTES, LPSECURITY_ATTRIBUTES, BOOL, DWORD, LPVOID, LPCTSTR, LPSTARTUPINFO, LPPROCESS_INFORMATION); typedef BOOL (WINAPI *SetPriorityClass_Type)(HANDLE, DWORD); typedef UINT (WINAPI *WinExec_Type)(LPCSTR, UINT); typedef BOOL (WINAPI *GlobalUnlock_Type)(HGLOBAL); typedef LPVOID (WINAPI *HeapAlloc_Type)(HANDLE, DWORD, SIZE_T); typedef LPVOID (WINAPI *HeapReAlloc_Type)(HANDLE, DWORD, LPVOID, SIZE_T); typedef HANDLE (WINAPI *HeapCreate_Type)(DWORD, SIZE_T, SIZE_T); typedef BOOL (WINAPI *HeapFree_Type)(HANDLE, DWORD, LPVOID); typedef SIZE_T (WINAPI *HeapCompact_Type)(HANDLE, DWORD); typedef HANDLE (WINAPI *GetProcessHeap_Type)(void); typedef BOOL (WINAPI *HeapDestroy_Type)(HANDLE); CreateProcessA_Type pCreateProcessA = NULL; VirtualAlloc_Type pVirtualAlloc = NULL; WinExec_Type pWinExec = NULL; SetPriorityClass_Type pSetPriorityClass = NULL; GlobalUnlock_Type pGlobalUnlock = NULL; HeapAlloc_Type pHeapAlloc; HeapReAlloc_Type pHeapReAlloc; HeapCreate_Type pHeapCreate; HeapFree_Type pHeapFree, pHeapValidate; HeapCompact_Type pHeapCompact; GetProcessHeap_Type pGetProcessHeap; HeapDestroy_Type pHeapDestroy; // v2.02.96: the GetSystemInfo API is NOT hot patchable on Win7. This can cause problems because it can't be hooked by simply // enabling hot patch. A solution is making all LoadLibrary* calls hot patchable, so that when loading the module, the call // can be hooked by the IAT lookup. This fixes a problem after movie playing in Wind Fantasy SP. static HookEntryEx_Type Hooks[]={ {HOOK_IAT_CANDIDATE, 0, "IsDebuggerPresent", (FARPROC)NULL, (FARPROC *)NULL, (FARPROC)extIsDebuggerPresent}, {HOOK_IAT_CANDIDATE, 0, "CheckRemoteDebuggerPresent", (FARPROC)NULL, (FARPROC *)NULL, (FARPROC)extCheckRemoteDebuggerPresent}, {HOOK_IAT_CANDIDATE, 0, "GetProcAddress", (FARPROC)GetProcAddress, (FARPROC *)&pGetProcAddress, (FARPROC)extGetProcAddress}, {HOOK_HOT_CANDIDATE, 0, "LoadLibraryA", (FARPROC)LoadLibraryA, (FARPROC *)&pLoadLibraryA, (FARPROC)extLoadLibraryA}, {HOOK_HOT_CANDIDATE, 0, "LoadLibraryExA", (FARPROC)LoadLibraryExA, (FARPROC *)&pLoadLibraryExA, (FARPROC)extLoadLibraryExA}, {HOOK_HOT_CANDIDATE, 0, "LoadLibraryW", (FARPROC)LoadLibraryW, (FARPROC *)&pLoadLibraryW, (FARPROC)extLoadLibraryW}, {HOOK_HOT_CANDIDATE, 0, "LoadLibraryExW", (FARPROC)LoadLibraryExW, (FARPROC *)&pLoadLibraryExW, (FARPROC)extLoadLibraryExW}, {HOOK_IAT_CANDIDATE, 0, "GetDriveTypeA", (FARPROC)NULL, (FARPROC *)&pGetDriveType, (FARPROC)extGetDriveType}, {HOOK_IAT_CANDIDATE, 0, "GetLogicalDrives", (FARPROC)NULL, (FARPROC *)&pGetLogicalDrives, (FARPROC)extGetLogicalDrives}, {HOOK_IAT_CANDIDATE, 0, "GetTempFileNameA", (FARPROC)GetTempFileNameA, (FARPROC *)&pGetTempFileName, (FARPROC)extGetTempFileName}, {HOOK_IAT_CANDIDATE, 0, "CreateProcessA", (FARPROC)NULL, (FARPROC *)&pCreateProcessA, (FARPROC)extCreateProcessA}, //{HOOK_IAT_CANDIDATE, 0, "WinExec", (FARPROC)NULL, (FARPROC *)&pWinExec, (FARPROC)extWinExec}, {HOOK_HOT_CANDIDATE, 0, "SetPriorityClass", (FARPROC)SetPriorityClass, (FARPROC *)&pSetPriorityClass, (FARPROC)extSetPriorityClass}, {HOOK_HOT_CANDIDATE, 0, "GlobalUnlock", (FARPROC)GlobalUnlock, (FARPROC *)&pGlobalUnlock, (FARPROC)extGlobalUnlock}, {HOOK_HOT_CANDIDATE, 0, "FreeLibrary", (FARPROC)FreeLibrary, (FARPROC *)&pFreeLibrary, (FARPROC)extFreeLibrary}, {HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator }; static HookEntryEx_Type HeapHooks[]={ {HOOK_IAT_CANDIDATE, 0, "HeapCreate", (FARPROC)HeapCreate, (FARPROC *)&pHeapCreate, (FARPROC)extHeapCreate}, {HOOK_IAT_CANDIDATE, 0, "HeapAlloc", (FARPROC)HeapAlloc, (FARPROC *)&pHeapAlloc, (FARPROC)extHeapAlloc}, {HOOK_IAT_CANDIDATE, 0, "HeapReAlloc", (FARPROC)HeapReAlloc, (FARPROC *)&pHeapReAlloc, (FARPROC)extHeapReAlloc}, {HOOK_IAT_CANDIDATE, 0, "HeapFree", (FARPROC)HeapFree, (FARPROC *)&pHeapFree, (FARPROC)extHeapFree}, {HOOK_IAT_CANDIDATE, 0, "HeapValidate", (FARPROC)HeapFree, (FARPROC *)&pHeapFree, (FARPROC)extHeapFree}, {HOOK_IAT_CANDIDATE, 0, "HeapCompact", (FARPROC)HeapCompact, (FARPROC *)&pHeapCompact, (FARPROC)extHeapCompact}, {HOOK_IAT_CANDIDATE, 0, "HeapDestroy", (FARPROC)HeapDestroy, (FARPROC *)&pHeapDestroy, (FARPROC)extHeapDestroy}, {HOOK_IAT_CANDIDATE, 0, "GetProcessHeap", (FARPROC)GetProcessHeap, (FARPROC *)&pGetProcessHeap, (FARPROC)extGetProcessHeap}, {HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator }; static HookEntryEx_Type FixAllocHooks[]={ {HOOK_IAT_CANDIDATE, 0, "VirtualAlloc", (FARPROC)VirtualAlloc, (FARPROC *)&pVirtualAlloc, (FARPROC)extVirtualAlloc}, {HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator }; static HookEntryEx_Type FixIOHooks[]={ {HOOK_IAT_CANDIDATE, 0, "ReadFile", (FARPROC)NULL, (FARPROC *)&pReadFile, (FARPROC)extReadFile}, {HOOK_IAT_CANDIDATE, 0, "CreateFileA", (FARPROC)NULL, (FARPROC *)&pCreateFile, (FARPROC)extCreateFile}, {HOOK_IAT_CANDIDATE, 0, "SetFilePointer", (FARPROC)NULL, (FARPROC *)&pSetFilePointer, (FARPROC)extSetFilePointer}, {HOOK_IAT_CANDIDATE, 0, "CloseHandle", (FARPROC)NULL, (FARPROC *)&pCloseHandle, (FARPROC)extCloseHandle}, {HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator }; static HookEntryEx_Type LimitHooks[]={ {HOOK_HOT_CANDIDATE, 0, "GetDiskFreeSpaceA", (FARPROC)GetDiskFreeSpaceA, (FARPROC *)&pGetDiskFreeSpaceA, (FARPROC)extGetDiskFreeSpaceA}, {HOOK_HOT_CANDIDATE, 0, "GlobalMemoryStatus", (FARPROC)GlobalMemoryStatus, (FARPROC *)&pGlobalMemoryStatus, (FARPROC)extGlobalMemoryStatus}, {HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator }; static HookEntryEx_Type TimeHooks[]={ {HOOK_HOT_CANDIDATE, 0, "GetTickCount", (FARPROC)GetTickCount, (FARPROC *)&pGetTickCount, (FARPROC)extGetTickCount}, {HOOK_HOT_CANDIDATE, 0, "GetLocalTime", (FARPROC)GetLocalTime, (FARPROC *)&pGetLocalTime, (FARPROC)extGetLocalTime}, {HOOK_HOT_CANDIDATE, 0, "GetSystemTime", (FARPROC)GetSystemTime, (FARPROC *)&pGetSystemTime, (FARPROC)extGetSystemTime}, {HOOK_HOT_CANDIDATE, 0, "GetSystemTimeAsFileTime", (FARPROC)GetSystemTimeAsFileTime, (FARPROC *)&pGetSystemTimeAsFileTime, (FARPROC)extGetSystemTimeAsFileTime}, {HOOK_HOT_CANDIDATE, 0, "Sleep", (FARPROC)Sleep, (FARPROC *)&pSleep, (FARPROC)extSleep}, {HOOK_HOT_CANDIDATE, 0, "SleepEx", (FARPROC)SleepEx, (FARPROC *)&pSleepEx, (FARPROC)extSleepEx}, {HOOK_HOT_CANDIDATE, 0, "QueryPerformanceCounter", (FARPROC)QueryPerformanceCounter, (FARPROC *)&pQueryPerformanceCounter, (FARPROC)extQueryPerformanceCounter}, {HOOK_HOT_CANDIDATE, 0, "QueryPerformanceFrequency", (FARPROC)QueryPerformanceFrequency, (FARPROC *)&pQueryPerformanceFrequency, (FARPROC)extQueryPerformanceFrequency}, {HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator }; static HookEntryEx_Type VersionHooks[]={ {HOOK_HOT_CANDIDATE, 0, "GetVersion", (FARPROC)GetVersion, (FARPROC *)&pGetVersion, (FARPROC)extGetVersion}, {HOOK_HOT_CANDIDATE, 0, "GetVersionExA", (FARPROC)GetVersionExA, (FARPROC *)&pGetVersionExA, (FARPROC)extGetVersionExA}, {HOOK_HOT_CANDIDATE, 0, "GetVersionExW", (FARPROC)GetVersionExW, (FARPROC *)&pGetVersionExW, (FARPROC)extGetVersionExW}, {HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator }; static char *libname = "kernel32.dll"; void HookKernel32(HMODULE module) { HookLibraryEx(module, Hooks, libname); if(dxw.dwFlags3 & BUFFEREDIOFIX) HookLibraryEx(module, FixIOHooks, libname); if(dxw.dwFlags2 & LIMITRESOURCES) HookLibraryEx(module, LimitHooks, libname); if(dxw.dwFlags2 & TIMESTRETCH) HookLibraryEx(module, TimeHooks, libname); if(dxw.dwFlags2 & FAKEVERSION) HookLibraryEx(module, VersionHooks, libname); if(dxw.dwFlags6 & LEGACYALLOC) HookLibraryEx(module, FixAllocHooks, libname); if(dxw.dwFlags8 & VIRTUALHEAP) HookLibraryEx(module, HeapHooks, libname); } void HookKernel32Init() { HookLibInitEx(Hooks); HookLibInitEx(FixIOHooks); HookLibInitEx(LimitHooks); HookLibInitEx(TimeHooks); HookLibInitEx(VersionHooks); HookLibInitEx(FixAllocHooks); HookLibInitEx(HeapHooks); } FARPROC Remap_kernel32_ProcAddress(LPCSTR proc, HMODULE hModule) { FARPROC addr; if (dxw.dwFlags4 & NOPERFCOUNTER){ if( !strcmp(proc, "QueryPerformanceCounter") || !strcmp(proc, "QueryPerformanceFrequency")){ OutTraceDW("GetProcAddress: HIDING proc=%s\n", proc); return NULL; } } if (addr=RemapLibraryEx(proc, hModule, Hooks)) return addr; if(dxw.dwFlags3 & BUFFEREDIOFIX) if (addr=RemapLibraryEx(proc, hModule, FixIOHooks)) return addr; if(dxw.dwFlags2 & LIMITRESOURCES) if (addr=RemapLibraryEx(proc, hModule, LimitHooks)) return addr; if(dxw.dwFlags2 & TIMESTRETCH) if (addr=RemapLibraryEx(proc, hModule, TimeHooks)) return addr; if(dxw.dwFlags2 & FAKEVERSION) if (addr=RemapLibraryEx(proc, hModule, VersionHooks)) return addr; if(dxw.dwFlags6 & LEGACYALLOC) if (addr=RemapLibraryEx(proc, hModule, FixAllocHooks)) return addr; if(dxw.dwFlags8 & VIRTUALHEAP) if (addr=RemapLibraryEx(proc, hModule, HeapHooks)) return addr; return NULL; } extern DirectDrawEnumerateA_Type pDirectDrawEnumerateA; extern DirectDrawEnumerateExA_Type pDirectDrawEnumerateExA; extern void HookModule(HMODULE, int); int WINAPI extIsDebuggerPresent(void) { OutTraceDW("extIsDebuggerPresent: return FALSE\n"); return FALSE; } BOOL WINAPI extGetDiskFreeSpaceA(LPCSTR lpRootPathName, LPDWORD lpSectorsPerCluster, LPDWORD lpBytesPerSector, LPDWORD lpNumberOfFreeClusters, LPDWORD lpTotalNumberOfClusters) { BOOL ret; OutTraceDW("GetDiskFreeSpace: RootPathName=\"%s\"\n", lpRootPathName); ret=(*pGetDiskFreeSpaceA)(lpRootPathName, lpSectorsPerCluster, lpBytesPerSector, lpNumberOfFreeClusters, lpTotalNumberOfClusters); if(ret) { OutTraceDW("GetDiskFreeSpace: SectXCluster=%d BytesXSect=%d FreeClusters=%d TotalClusters=%d\n", *lpSectorsPerCluster, *lpBytesPerSector, *lpNumberOfFreeClusters, *lpTotalNumberOfClusters); } else { OutTraceE("GetDiskFreeSpace: ERROR err=%d at %d\n", GetLastError(), __LINE__); } // try to define 100MB free space in a 120MB hard disk DWORD BytesXCluster = *lpBytesPerSector * *lpSectorsPerCluster; if(BytesXCluster){ *lpNumberOfFreeClusters = 100000000 / BytesXCluster; *lpTotalNumberOfClusters = 120000000 / BytesXCluster; OutTraceDW("GetDiskFreeSpace: FIXED SectXCluster=%d BytesXSect=%d FreeClusters=%d TotalClusters=%d\n", *lpSectorsPerCluster, *lpBytesPerSector, *lpNumberOfFreeClusters, *lpTotalNumberOfClusters); } return ret; } /* ------------------------------------------------------------------------------- GlobalMemoryStatus: MSDN documents that on modern PCs that have more than DWORD memory values the GlobalMemoryStatus sets the fields to -1 (0xFFFFFFFF) and you should use GlobalMemoryStatusEx instead. But in some cases the value is less that DWORD max, but greater that DWORD>>1, that is the calling application may get a big value and see it as a signed negative value, as it happened to Nocturne on my PC. That's why it's not adviseable to write: if(lpBuffer->dwTotalPhys== -1) ... but this way: if ((int)lpBuffer->dwTotalPhys < 0) ... and also don't set BIGENOUGH 0x80000000 // possibly negative!!! but: BIGENOUGH 0x60000000 // surely positive !!! v2.03.08: the "Jeff Gordon XS Racing demo" adds the dwAvailPhys to the dwAvailPageFile value, so that the sum is negative. To avoid this, all available memory values are divided by 2 (HALFBIG macro). /* ---------------------------------------------------------------------------- */ #define BIGENOUGH 0x60000000 #define HALFBIG (BIGENOUGH >> 1) #define TOOBIG 0xFFFFFFFF void WINAPI extGlobalMemoryStatus(LPMEMORYSTATUS lpBuffer) { (*pGlobalMemoryStatus)(lpBuffer); OutTraceDW("GlobalMemoryStatus: Length=%d MemoryLoad=%d%c " "TotalPhys=%x AvailPhys=%x TotalPageFile=%x AvailPageFile=%x TotalVirtual=%x AvailVirtual=%x\n", lpBuffer->dwLength, lpBuffer->dwMemoryLoad, '%', lpBuffer->dwTotalPhys, lpBuffer->dwAvailPhys, lpBuffer->dwTotalPageFile, lpBuffer->dwAvailPageFile, lpBuffer->dwTotalVirtual, lpBuffer->dwAvailVirtual); if(lpBuffer->dwLength==sizeof(MEMORYSTATUS)){ MEMORYSTATUS PrevMemoryStatus; memcpy(&PrevMemoryStatus, lpBuffer, sizeof(MEMORYSTATUS)); if (((int)lpBuffer->dwTotalPhys < 0) || ((int)lpBuffer->dwTotalPhys > BIGENOUGH)) lpBuffer->dwTotalPhys = BIGENOUGH; if (((int)lpBuffer->dwAvailPhys < 0) || ((int)lpBuffer->dwAvailPhys > HALFBIG)) lpBuffer->dwAvailPhys = HALFBIG; if (((int)lpBuffer->dwTotalPageFile < 0) || ((int)lpBuffer->dwTotalPageFile > BIGENOUGH)) lpBuffer->dwTotalPageFile = BIGENOUGH; if (((int)lpBuffer->dwAvailPageFile < 0) || ((int)lpBuffer->dwAvailPageFile > HALFBIG)) lpBuffer->dwAvailPageFile = HALFBIG; if (((int)lpBuffer->dwTotalVirtual < 0) || ((int)lpBuffer->dwTotalVirtual > BIGENOUGH)) lpBuffer->dwTotalVirtual = BIGENOUGH; if (((int)lpBuffer->dwAvailVirtual < 0) || ((int)lpBuffer->dwAvailVirtual > HALFBIG)) lpBuffer->dwAvailVirtual = HALFBIG; if(dxw.dwFlags5 & STRESSRESOURCES){ lpBuffer->dwTotalPhys = TOOBIG; lpBuffer->dwAvailPhys = TOOBIG; lpBuffer->dwTotalPageFile = TOOBIG; lpBuffer->dwAvailPageFile = TOOBIG; lpBuffer->dwTotalVirtual = TOOBIG; lpBuffer->dwAvailVirtual = TOOBIG; } if(memcmp(&PrevMemoryStatus, lpBuffer, sizeof(MEMORYSTATUS))) OutTraceDW("GlobalMemoryStatus UPDATED: Length=%d MemoryLoad=%d%c " "TotalPhys=%x AvailPhys=%x TotalPageFile=%x AvailPageFile=%x TotalVirtual=%x AvailVirtual=%x\n", lpBuffer->dwLength, lpBuffer->dwMemoryLoad, '%', lpBuffer->dwTotalPhys, lpBuffer->dwAvailPhys, lpBuffer->dwTotalPageFile, lpBuffer->dwAvailPageFile, lpBuffer->dwTotalVirtual, lpBuffer->dwAvailVirtual); } else{ OutTraceDW("GlobalMemoryStatus WARNING: Length=%d sizeof(LPMEMORYSTATUS)=%d\n", lpBuffer->dwLength, sizeof(LPMEMORYSTATUS)); } } /* From MSDN: Operating system Version number dwMajorVersion dwMinorVersion Other Windows 8 6.2 6 2 OSVERSIONINFOEX.wProductType == VER_NT_WORKSTATION Windows Server 2012 6.2 6 2 OSVERSIONINFOEX.wProductType != VER_NT_WORKSTATION Windows 7 6.1 6 1 OSVERSIONINFOEX.wProductType == VER_NT_WORKSTATION Windows Server 2008 R2 6.1 6 1 OSVERSIONINFOEX.wProductType != VER_NT_WORKSTATION Windows Server 2008 6.0 6 0 OSVERSIONINFOEX.wProductType != VER_NT_WORKSTATION Windows Vista 6.0 6 0 OSVERSIONINFOEX.wProductType == VER_NT_WORKSTATION Windows Server 2003 R2 5.2 5 2 GetSystemMetrics(SM_SERVERR2) != 0 Windows Home Server 5.2 5 2 OSVERSIONINFOEX.wSuiteMask & VER_SUITE_WH_SERVER Windows Server 2003 5.2 5 2 GetSystemMetrics(SM_SERVERR2) == 0 Windows XP Pro x64 Ed. 5.2 5 2 (OSVERSIONINFOEX.wProductType == VER_NT_WORKSTATION) && (SYSTEM_INFO.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_AMD64) Windows XP 5.1 5 1 Not applicable Windows 2000 5.0 5 0 Not applicable From http://delphi.about.com/cs/adptips2000/a/bltip1100_2.htm Windows 95 4.0 4 0 Windows 98/SE" 4.10 4 10 if osVerInfo.szCSDVersion[1] = 'A' then Windows98SE Windows ME 4.90 4 90 */ /* Differences with older Windows versions This function is provided even with older Windows versions with some significant differences than stated above: The high order bit determins if it's NT based (NT, 2000, XP and newer) or not (Win 3.1, 95, 98, ME) The remaining bits of the high order word specify the build number only on NT based Windows verions. From older MSDN: To distinguish between operating system platforms, use the high order bit and the low order byte, as shown in the following table: Windows NT High order bit: 0 Low order byte (major version number): 3 or 4 Windows 95 and Windows 98 High order bit: 1 Low order byte (major version number): 4 Win32s with Windows 3.1 High order bit: 1 Low order byte (major version number): 3 For Windows NT and Win32s, the remaining bits in the high order word specify the build number. For Windows 95 and Windows 98, the remaining bits of the high order word are reserved. */ // v2.03.20: "Talonsoft's Operational Art of War II" checks the dwPlatformId field // v2.03.20: list revised according to Microsoft compatibility settings static struct {DWORD bMajor; DWORD bMinor; DWORD dwPlatformId; DWORD build; char *sName;} WinVersions[9]= { {4, 0, VER_PLATFORM_WIN32_WINDOWS, 950, "Windows 95"}, {4,10, VER_PLATFORM_WIN32_WINDOWS, 67766446, "Windows 98/SE"}, {4,90, VER_PLATFORM_WIN32_WINDOWS, 0, "Windows ME"}, // {4, 0, VER_PLATFORM_WIN32_NT, 1381, "Windows NT4.0(sp5)"}, {5, 0, VER_PLATFORM_WIN32_NT, 2195, "Windows 2000"}, // {5, 1, VER_PLATFORM_WIN32_NT, 2600, "Windows XP(sp2)"}, {5, 1, VER_PLATFORM_WIN32_NT, 2600, "Windows XP(sp3)"}, {5, 2, VER_PLATFORM_WIN32_NT, 3790, "Windows Server 2003(sp1)"}, // {6, 0, VER_PLATFORM_WIN32_NT, 6001, "Windows Server 2008(sp1)"}, // {6, 0, VER_PLATFORM_WIN32_NT, 6000, "Windows Vista"}, // {6, 0, VER_PLATFORM_WIN32_NT, 6001, "Windows Vista(sp1)"}, {6, 0, VER_PLATFORM_WIN32_NT, 6002, "Windows Vista(sp2)"}, {6, 1, VER_PLATFORM_WIN32_NT, 7600, "Windows 7"}, {6, 2, VER_PLATFORM_WIN32_NT, 0, "Windows 8"} }; BOOL WINAPI extGetVersionExA(LPOSVERSIONINFOA lpVersionInfo) { BOOL ret; ret=(*pGetVersionExA)(lpVersionInfo); if(!ret) { OutTraceE("GetVersionExA: ERROR err=%d\n", GetLastError()); return ret; } OutTraceDW("GetVersionExA: version=%d.%d platform=%x build=(%d)\n", lpVersionInfo->dwMajorVersion, lpVersionInfo->dwMinorVersion, lpVersionInfo->dwPlatformId, lpVersionInfo->dwBuildNumber); if(dxw.dwFlags2 & FAKEVERSION) { // fake Win XP build 0 lpVersionInfo->dwMajorVersion = WinVersions[dxw.FakeVersionId].bMajor; lpVersionInfo->dwMinorVersion = WinVersions[dxw.FakeVersionId].bMinor; lpVersionInfo->dwPlatformId = WinVersions[dxw.FakeVersionId].dwPlatformId; lpVersionInfo->dwBuildNumber = 0; OutTraceDW("GetVersionExA: FIXED version=%d.%d platform=%x build=(%d) os=\"%s\"\n", lpVersionInfo->dwMajorVersion, lpVersionInfo->dwMinorVersion, lpVersionInfo->dwPlatformId, lpVersionInfo->dwBuildNumber, WinVersions[dxw.FakeVersionId].sName); } return TRUE; } BOOL WINAPI extGetVersionExW(LPOSVERSIONINFOW lpVersionInfo) { BOOL ret; ret=(*pGetVersionExW)(lpVersionInfo); if(!ret) { OutTraceE("GetVersionExW: ERROR err=%d\n", GetLastError()); return ret; } OutTraceDW("GetVersionExW: version=%d.%d platform=%x build=(%d)\n", lpVersionInfo->dwMajorVersion, lpVersionInfo->dwMinorVersion, lpVersionInfo->dwPlatformId, lpVersionInfo->dwBuildNumber); if(dxw.dwFlags2 & FAKEVERSION) { // fake Win XP build 0 lpVersionInfo->dwMajorVersion = WinVersions[dxw.FakeVersionId].bMajor; lpVersionInfo->dwMinorVersion = WinVersions[dxw.FakeVersionId].bMinor; lpVersionInfo->dwPlatformId = WinVersions[dxw.FakeVersionId].dwPlatformId; lpVersionInfo->dwBuildNumber = 0; OutTraceDW("GetVersionExW: FIXED version=%d.%d platform=%x build=(%d) os=\"%s\"\n", lpVersionInfo->dwMajorVersion, lpVersionInfo->dwMinorVersion, lpVersionInfo->dwPlatformId, lpVersionInfo->dwBuildNumber, WinVersions[dxw.FakeVersionId].sName); } return TRUE; } DWORD WINAPI extGetVersion(void) { DWORD dwVersion; DWORD dwMajorVersion; DWORD dwMinorVersion; DWORD dwBuild = 0; dwVersion = (*pGetVersion)(); // Get the Windows version. dwMajorVersion = (DWORD)(LOBYTE(LOWORD(dwVersion))); dwMinorVersion = (DWORD)(HIBYTE(LOWORD(dwVersion))); // Get the build number. if (dwVersion < 0x80000000) dwBuild = (DWORD)(HIWORD(dwVersion)); OutTraceDW("GetVersion: version=%d.%d build=(%d)\n", dwMajorVersion, dwMinorVersion, dwBuild); if(dxw.dwFlags2 & FAKEVERSION) { dwVersion = WinVersions[dxw.FakeVersionId].bMajor | (WinVersions[dxw.FakeVersionId].bMinor << 8); dwMajorVersion = (DWORD)(LOBYTE(LOWORD(dwVersion))); dwMinorVersion = (DWORD)(HIBYTE(LOWORD(dwVersion))); dwBuild = (DWORD)(HIWORD(dwVersion)); if(WinVersions[dxw.FakeVersionId].bMajor == 4) dwVersion |= 0x80000000; // v2.03.11: fixes "Warhead" OutTraceDW("GetVersion: FIXED version=%x: Win%d.%d build=(%d) os=\"%s\"\n", dwVersion, dwMajorVersion, dwMinorVersion, dwBuild, WinVersions[dxw.FakeVersionId].sName); } return dwVersion; } /* ------------------------------------------------------------------------------- time related APIs /* ---------------------------------------------------------------------------- */ DWORD WINAPI extGetTickCount(void) { DWORD ret; ret=dxw.GetTickCount(); //OutTraceB("GetTickCount: ret=%x\n", ret); return ret; } void WINAPI extGetSystemTime(LPSYSTEMTIME lpSystemTime) { dxw.GetSystemTime(lpSystemTime); OutTraceB("GetSystemTime: %02d:%02d:%02d.%03d\n", lpSystemTime->wHour, lpSystemTime->wMinute, lpSystemTime->wSecond, lpSystemTime->wMilliseconds); } void WINAPI extGetLocalTime(LPSYSTEMTIME lpLocalTime) { SYSTEMTIME SystemTime; dxw.GetSystemTime(&SystemTime); SystemTimeToTzSpecificLocalTime(NULL, &SystemTime, lpLocalTime); OutTraceB("GetLocalTime: %02d:%02d:%02d.%03d\n", lpLocalTime->wHour, lpLocalTime->wMinute, lpLocalTime->wSecond, lpLocalTime->wMilliseconds); } VOID WINAPI extSleep(DWORD dwMilliseconds) { DWORD dwNewDelay; dwNewDelay=dwMilliseconds; if ((dwMilliseconds!=INFINITE) && (dwMilliseconds!=0)){ dwNewDelay = dxw.StretchTime(dwMilliseconds); if (dwNewDelay==0) dwNewDelay=1; // minimum allowed... } OutTraceB("Sleep: msec=%d->%d timeshift=%d\n", dwMilliseconds, dwNewDelay, dxw.TimeShift); (*pSleep)(dwNewDelay); while(dxw.TimeFreeze)(*pSleep)(40); } DWORD WINAPI extSleepEx(DWORD dwMilliseconds, BOOL bAlertable) { DWORD ret; DWORD dwNewDelay; dwNewDelay=dwMilliseconds; if ((dwMilliseconds!=INFINITE) && (dwMilliseconds!=0)){ dwNewDelay = dxw.StretchTime(dwMilliseconds); if (dwNewDelay==0) dwNewDelay=1; // minimum allowed... } OutTraceB("SleepEx: msec=%d->%d alertable=%x, timeshift=%d\n", dwMilliseconds, dwNewDelay, bAlertable, dxw.TimeShift); ret = (*pSleepEx)(dwNewDelay, bAlertable); while(dxw.TimeFreeze)(*pSleep)(40); return ret; } void WINAPI extGetSystemTimeAsFileTime(LPFILETIME lpSystemTimeAsFileTime) { OutTraceB("GetSystemTimeAsFileTime\n"); dxw.GetSystemTimeAsFileTime(lpSystemTimeAsFileTime); } BOOL WINAPI extQueryPerformanceCounter(LARGE_INTEGER *lpPerformanceCount) { BOOL ret; if(dxw.dwFlags4 & NOPERFCOUNTER){ ret=0; (*lpPerformanceCount).QuadPart = 0; } else{ LARGE_INTEGER CurrentInCount; ret=(*pQueryPerformanceCounter)(&CurrentInCount); if(dxw.dwFlags5 & NORMALIZEPERFCOUNT) { LARGE_INTEGER PerfFrequency; static LARGE_INTEGER StartCounter = {0LL}; if (StartCounter.QuadPart == 0LL) StartCounter.QuadPart = CurrentInCount.QuadPart; (*pQueryPerformanceFrequency)(&PerfFrequency); CurrentInCount.QuadPart = ((CurrentInCount.QuadPart - StartCounter.QuadPart) * 1000000LL) / PerfFrequency.QuadPart; } *lpPerformanceCount = dxw.StretchLargeCounter(CurrentInCount); } OutTraceB("QueryPerformanceCounter: ret=%x Count=[%x-%x]\n", ret, lpPerformanceCount->HighPart, lpPerformanceCount->LowPart); return ret; } BOOL WINAPI extQueryPerformanceFrequency(LARGE_INTEGER *lpPerformanceFrequency) { BOOL ret; if(dxw.dwFlags4 & NOPERFCOUNTER){ LARGE_INTEGER myPerfFrequency; myPerfFrequency.LowPart = 0L; myPerfFrequency.HighPart = 0L; *lpPerformanceFrequency=myPerfFrequency; ret = 0; } else{ if(dxw.dwFlags5 & NORMALIZEPERFCOUNT){ lpPerformanceFrequency->QuadPart = 1000000LL; ret = TRUE; } else{ ret = (*pQueryPerformanceFrequency)(lpPerformanceFrequency); } } OutTraceDW("QueryPerformanceFrequency: ret=%x Frequency=%x-%x\n", ret, lpPerformanceFrequency->HighPart, lpPerformanceFrequency->LowPart); return ret; } /* ------------------------------------------------------------------------------- LoadLibrary (hooking) related APIs /* ---------------------------------------------------------------------------- */ HMODULE SysLibs[SYSLIBIDX_MAX]; HMODULE WINAPI LoadLibraryExWrapper(LPVOID lpFileName, BOOL IsWidechar, HANDLE hFile, DWORD dwFlags, char *api) { HMODULE libhandle; int idx; // recursion control: this is necessary so far only on WinXP while other OS like Win7,8,10 don't get into // recursion problems, but in any case better to leave it here, you never know .... static BOOL Recursed = FALSE; if(IsWidechar){ OutTraceB("%s: file=%ls flags=%x\n", api, lpFileName, dwFlags); libhandle=(*pLoadLibraryExW)((LPCWSTR)lpFileName, hFile, dwFlags); } else{ OutTraceB("%s: file=%s flags=%x\n", api, lpFileName, dwFlags); libhandle=(*pLoadLibraryExA)((LPCTSTR)lpFileName, hFile, dwFlags); } if(Recursed) { // v2.03.97.fx2: clear Recursed flag when exiting! Recursed = FALSE; return libhandle; } Recursed = TRUE; // found in "The Rage" (1996): loading a module with relative path after a SetCurrentDirectory may fail, though // the module is present in the current directory folder. To fix this problem in case of failure it is possible // to retry the operation using a full pathname composed concatenating current dir and module filename. if(!libhandle){ char lpBuffer[MAX_PATH+1]; GetCurrentDirectory(MAX_PATH, lpBuffer); if(IsWidechar) sprintf_s(lpBuffer, MAX_PATH, "%s/%ls", lpBuffer, lpFileName); else sprintf_s(lpBuffer, MAX_PATH, "%s/%s", lpBuffer, lpFileName); OutTrace("LoadLibrary: RETRY fullpath=\"%s\"\n", lpBuffer); libhandle=(*pLoadLibraryExA)(lpBuffer, hFile, dwFlags); } if(IsWidechar) OutTraceDW("%s: FileName=%ls hFile=%x Flags=%x(%s) hmodule=%x\n", api, lpFileName, hFile, dwFlags, ExplainLoadLibFlags(dwFlags), libhandle); else OutTraceDW("%s: FileName=%s hFile=%x Flags=%x(%s) hmodule=%x\n", api, lpFileName, hFile, dwFlags, ExplainLoadLibFlags(dwFlags), libhandle); if(!libhandle){ OutTraceE("%s: ERROR FileName=%s err=%d\n", api, lpFileName, GetLastError()); Recursed = FALSE; // compatibility issue: some games (Nightmare Creatures) check for the ERROR_DLL_NOT_FOUND // errorcode or assume the library is there, hence the dialog box about a SDL.DLL file to delete. if((dxw.dwFlags8 & LOADLIBRARYERR) && (GetLastError()==ERROR_MOD_NOT_FOUND)) SetLastError(ERROR_DLL_NOT_FOUND); return libhandle; } // when loaded with LOAD_LIBRARY_AS_DATAFILE or LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE flags, // there's no symbol map, then its no possible to hook function calls. if(dwFlags & (LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE|LOAD_LIBRARY_AS_DATAFILE)) return libhandle; char *AnsiFileName; if(IsWidechar){ static char sFileName[256+1]; wcstombs_s(NULL, sFileName, (LPCWSTR)lpFileName, 80); AnsiFileName = sFileName; } else AnsiFileName = (char *)lpFileName; idx=dxw.GetDLLIndex((char *)lpFileName); if(idx != -1) { OutTraceDW("%s: push idx=%x library=%s hdl=%x\n", api, idx, AnsiFileName, libhandle); SysLibs[idx]=libhandle; } // handle custom OpenGL library if(!lstrcmpi(AnsiFileName,dxw.CustomOpenGLLib)){ idx=SYSLIBIDX_OPENGL; SysLibs[idx]=libhandle; } if (idx == -1) { OutTraceDW("%s: hooking lib=\"%s\" handle=%x\n", api, AnsiFileName, libhandle); HookModule(libhandle, 0); } Recursed = FALSE; return libhandle; } HMODULE WINAPI extLoadLibraryA(LPCTSTR lpFileName) { return LoadLibraryExWrapper((LPVOID)lpFileName, FALSE, NULL, 0, "LoadLibraryA"); } HMODULE WINAPI extLoadLibraryW(LPCWSTR lpFileName) { return LoadLibraryExWrapper((LPVOID)lpFileName, TRUE, NULL, 0, "LoadLibraryW"); } HMODULE WINAPI extLoadLibraryExA(LPCTSTR lpFileName, HANDLE hFile, DWORD dwFlags) { return LoadLibraryExWrapper((LPVOID)lpFileName, FALSE, hFile, dwFlags, "LoadLibraryExA"); } HMODULE WINAPI extLoadLibraryExW(LPCWSTR lpFileName, HANDLE hFile, DWORD dwFlags) { return LoadLibraryExWrapper((LPVOID)lpFileName, TRUE, hFile, dwFlags, "LoadLibraryExW"); } BOOL WINAPI extFreeLibrary(HMODULE hModule) { BOOL ret; static HMODULE hLastModule; OutTraceB("FreeLibrary: hModule=%x\n", hModule); ret = (*pFreeLibrary)(hModule); if(ret){ OutTrace("FreeLibrary: ret=%x\n", ret); if((hModule == hLastModule) && (dxw.dwFlags7 & FIXFREELIBRARY)) { OutTraceDW("FreeLibrary: FIXFREELIBRARY hack ret=0\n"); ret = 0; } hLastModule = hModule; } else { OutTraceE("FreeLibrary ERROR: err=%d\n", GetLastError()); } return ret; } extern DirectDrawCreate_Type pDirectDrawCreate; extern DirectDrawCreateEx_Type pDirectDrawCreateEx; extern HRESULT WINAPI extDirectDrawCreate(GUID FAR *, LPDIRECTDRAW FAR *, IUnknown FAR *); extern HRESULT WINAPI extDirectDrawCreateEx(GUID FAR *, LPDIRECTDRAW FAR *, REFIID, IUnknown FAR *); extern GetProcAddress_Type pGetProcAddress; //extern HRESULT STDAPICALLTYPE extCoCreateInstance(REFCLSID, LPUNKNOWN, DWORD, REFIID, LPVOID FAR*); FARPROC WINAPI extGetProcAddress(HMODULE hModule, LPCSTR proc) { FARPROC ret; int idx; // WARNING: seems to be called with bad LPCSTR value.... // from MSDN: // The function or variable name, or the function's ordinal value. // If this parameter is an ordinal value, it must be in the low-order word; // the high-order word must be zero. OutTraceDW("GetProcAddress: hModule=%x proc=%s\n", hModule, ProcToString(proc)); for(idx=0; idx(Offset=0x%x OffsetHigh=0x%x)", lpOverlapped->Offset, lpOverlapped->OffsetHigh); OutTrace("\n"); } ret = (*pReadFile)(hFile, lpBuffer, nNumberOfBytesToRead, lpNumberOfBytesRead, lpOverlapped); if(IsTraceDW){ if(ret){ OutTrace("ReadFile: NumberOfBytesRead=%d\n", *lpNumberOfBytesRead); OutTrace("ReadFile: "); for(unsigned int i=0; i<*lpNumberOfBytesRead; i++) OutTrace("%02X,", *((unsigned char *)lpBuffer+i)); OutTrace("\n"); } else OutTrace("ReadFile: ERROR err=%d\n", GetLastError()); } return ret; } static char *ExplainFlagsAndAttributes(DWORD c) { static char eb[256]; unsigned int l; strcpy(eb,""); if (c & FILE_ATTRIBUTE_ARCHIVE) strcat(eb, "FILE_ATTRIBUTE_ARCHIVE+"); if (c & FILE_ATTRIBUTE_ENCRYPTED) strcat(eb, "FILE_ATTRIBUTE_ENCRYPTED+"); if (c & FILE_ATTRIBUTE_HIDDEN) strcat(eb, "FILE_ATTRIBUTE_HIDDEN+"); if (c & FILE_ATTRIBUTE_NORMAL) strcat(eb, "FILE_ATTRIBUTE_NORMAL+"); if (c & FILE_ATTRIBUTE_OFFLINE) strcat(eb, "FILE_ATTRIBUTE_OFFLINE+"); if (c & FILE_ATTRIBUTE_READONLY) strcat(eb, "FILE_ATTRIBUTE_READONLY+"); if (c & FILE_ATTRIBUTE_SYSTEM) strcat(eb, "FILE_ATTRIBUTE_SYSTEM+"); if (c & FILE_ATTRIBUTE_TEMPORARY) strcat(eb, "FILE_ATTRIBUTE_TEMPORARY+"); if (c & FILE_FLAG_BACKUP_SEMANTICS) strcat(eb, "FILE_FLAG_BACKUP_SEMANTICS+"); if (c & FILE_FLAG_DELETE_ON_CLOSE) strcat(eb, "FILE_FLAG_DELETE_ON_CLOSE+"); if (c & FILE_FLAG_NO_BUFFERING) strcat(eb, "FILE_FLAG_NO_BUFFERING+"); if (c & FILE_FLAG_OPEN_NO_RECALL) strcat(eb, "FILE_FLAG_OPEN_NO_RECALL+"); if (c & FILE_FLAG_OPEN_REPARSE_POINT) strcat(eb, "FILE_FLAG_OPEN_REPARSE_POINT+"); if (c & FILE_FLAG_OVERLAPPED) strcat(eb, "FILE_FLAG_OVERLAPPED+"); if (c & FILE_FLAG_POSIX_SEMANTICS) strcat(eb, "FILE_FLAG_POSIX_SEMANTICS+"); if (c & FILE_FLAG_RANDOM_ACCESS) strcat(eb, "FILE_FLAG_RANDOM_ACCESS+"); //if (c & FILE_FLAG_SESSION_AWARE) strcat(eb, "FILE_FLAG_SESSION_AWARE+"); if (c & FILE_FLAG_SEQUENTIAL_SCAN) strcat(eb, "FILE_FLAG_SEQUENTIAL_SCAN+"); if (c & FILE_FLAG_WRITE_THROUGH) strcat(eb, "FILE_FLAG_WRITE_THROUGH+"); if (c & SECURITY_ANONYMOUS) strcat(eb, "SECURITY_ANONYMOUS+"); if (c & SECURITY_CONTEXT_TRACKING) strcat(eb, "SECURITY_CONTEXT_TRACKING+"); if (c & SECURITY_DELEGATION) strcat(eb, "SECURITY_DELEGATION+"); if (c & SECURITY_EFFECTIVE_ONLY) strcat(eb, "SECURITY_EFFECTIVE_ONLY+"); if (c & SECURITY_IDENTIFICATION) strcat(eb, "SECURITY_IDENTIFICATION+"); if (c & SECURITY_IMPERSONATION) strcat(eb, "SECURITY_IMPERSONATION+"); l=strlen(eb); if (l>strlen("")) eb[l-1]=0; // delete last '+' if any return(eb); } static char *ExplainDesiredAccess(DWORD c) { static char eb[256]; unsigned int l; strcpy(eb,"GENERIC_"); if (c & GENERIC_READ) strcat(eb, "READ+"); if (c & GENERIC_WRITE) strcat(eb, "WRITE+"); if (c & GENERIC_EXECUTE) strcat(eb, "EXECUTE+"); if (c & GENERIC_ALL) strcat(eb, "ALL+"); l=strlen(eb); if (l>strlen("GENERIC_")) eb[l-1]=0; // delete last '+' if any else eb[0]=0; return(eb); } HANDLE WINAPI extCreateFile(LPCTSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile) { HANDLE ret; int err=0; OutTraceDW("CreateFile: FileName=%s DesiredAccess=%x(%s) SharedMode=%x Disposition=%x Flags=%x(%s)\n", lpFileName, dwDesiredAccess, ExplainDesiredAccess(dwDesiredAccess), dwShareMode, dwCreationDisposition, dwFlagsAndAttributes, ExplainFlagsAndAttributes(dwFlagsAndAttributes)); // just proxy if(!(dxw.dwFlags3 & BUFFEREDIOFIX)) return (*pCreateFile)(lpFileName, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile); if((dxw.dwFlags3 & BUFFEREDIOFIX) && (dwFlagsAndAttributes & FILE_FLAG_NO_BUFFERING)){ OutTraceDW("CreateFile: suppress FILE_FLAG_NO_BUFFERING\n"); dwFlagsAndAttributes &= ~FILE_FLAG_NO_BUFFERING; } ret=(*pCreateFile)(lpFileName, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile); if(IsTraceDW){ if(ret && (ret != (HANDLE)INVALID_SET_FILE_POINTER)) OutTrace("CreateFile: ret=%x\n", ret); else OutTrace("CreateFile ERROR: err=%d\n", err=GetLastError()); } #if 0 if(TRYFATNAMES && (!ret) && (err==ERROR_FILE_NOT_FOUND)){ char ShortPath[MAX_PATH+1]; int iLastBackSlash, iFnameLength; char *sFileName; strncpy(ShortPath, lpFileName, MAX_PATH); iLastBackSlash = -1; for(size_t i=0; i 8){ sFileName[6] = '~'; sFileName[7] = '1'; strcpy(&sFileName[8], &sFileName[iFnameLength]); } OutTrace("CreateFile: try FAT path=\"%s\"\n", ShortPath); ret=(*pCreateFile)(ShortPath, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile); } #endif return ret; } BOOL WINAPI extCloseHandle(HANDLE hObject) { BOOL ret; if (hObject && (hObject != (HANDLE)-1)) { OutTraceB("CloseHandle: hFile=%x\n", hObject); __try {ret=CloseHandle(hObject); } __except(EXCEPTION_EXECUTE_HANDLER){}; } else{ OutTraceDW("CloseHandle: BYPASS hFile=%x\n", hObject); } return ret; } DWORD WINAPI extSetFilePointer(HANDLE hFile, LONG lDistanceToMove, PLONG lpDistanceToMoveHigh, DWORD dwMoveMethod) { OutTrace("SetFilePointer: hFile=%x DistanceToMove=0x%lx DistanceToMoveHigh=0x%x MoveMethod=%x\n", hFile, lDistanceToMove, lpDistanceToMoveHigh, dwMoveMethod); return (*pSetFilePointer)(hFile, lDistanceToMove, lpDistanceToMoveHigh, dwMoveMethod); } static char *ExplainDebugEvent(DWORD ec) { char *e; switch(ec){ case EXCEPTION_DEBUG_EVENT: e="EXCEPTION"; break; case CREATE_THREAD_DEBUG_EVENT: e="CREATE_THREAD"; break; case CREATE_PROCESS_DEBUG_EVENT: e="CREATE_PROCESS"; break; case EXIT_THREAD_DEBUG_EVENT: e="EXIT_THREAD"; break; case EXIT_PROCESS_DEBUG_EVENT: e="EXIT_PROCESS"; break; case LOAD_DLL_DEBUG_EVENT: e="LOAD_DLL"; break; case UNLOAD_DLL_DEBUG_EVENT: e="UNLOAD_DLL"; break; case OUTPUT_DEBUG_STRING_EVENT: e="OUTPUT_DEBUG"; break; case RIP_EVENT: e="RIP"; break; default: e="unknown"; break; } return e; } static BOOL CreateProcessDebug( LPCTSTR lpApplicationName, LPTSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCTSTR lpCurrentDirectory, LPSTARTUPINFO lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation ) { BOOL res; DEBUG_EVENT debug_event ={0}; char path[MAX_PATH]; DWORD dwContinueStatus = DBG_CONTINUE; extern BOOL Inject(DWORD, const char *); LPVOID LastExceptionPtr = 0; dwCreationFlags |= DEBUG_ONLY_THIS_PROCESS; res=(*pCreateProcessA)( lpApplicationName, lpCommandLine, lpProcessAttributes, lpThreadAttributes, bInheritHandles, dwCreationFlags, lpEnvironment, lpCurrentDirectory, lpStartupInfo, lpProcessInformation ); OutTrace("CreateProcess res=%x\n", res); BOOL bContinueDebugging = TRUE; while(bContinueDebugging) { if (!WaitForDebugEvent(&debug_event, INFINITE)) break; OutTraceB("CreateProcess: WaitForDebugEvent pid=%x tid=%x event=%x(%s)\n", debug_event.dwProcessId, debug_event.dwThreadId, debug_event.dwDebugEventCode, ExplainDebugEvent(debug_event.dwDebugEventCode)); switch(debug_event.dwDebugEventCode){ case EXIT_PROCESS_DEBUG_EVENT: bContinueDebugging=false; break; case CREATE_PROCESS_DEBUG_EVENT: GetModuleFileName(GetModuleHandle("dxwnd"), path, MAX_PATH); OutTrace("CreateProcess: injecting path=%s\n", path); if(!Inject(lpProcessInformation->dwProcessId, path)){ OutTrace("CreateProcess: Injection ERROR pid=%x dll=%s\n", lpProcessInformation->dwProcessId, path); } #ifdef LOCKINJECTIONTHREADS HANDLE TargetHandle; extern LPVOID GetThreadStartAddress(HANDLE); DWORD EndlessLoop; EndlessLoop=0x9090FEEB; // assembly for JMP to here, NOP, NOP SIZE_T BytesCount; TargetHandle = (DWORD)OpenProcess( PROCESS_QUERY_INFORMATION|PROCESS_VM_OPERATION|PROCESS_VM_READ|PROCESS_VM_WRITE, FALSE, lpProcessInformation->dwProcessId); if(TargetHandle){ StartAddress = GetThreadStartAddress(lpProcessInformation->hThread); OutTrace("CreateProcess: StartAddress=%x\n", StartAddress); if(StartAddress){ if(!ReadProcessMemory(lpProcessInformation->hProcess, StartAddress, &StartingCode, 4, &BytesCount)){ OutTrace("CreateProcess: ReadProcessMemory error=%d\n", GetLastError()); } OutTrace("CreateProcess: StartCode=%x\n", StartingCode); if(!WriteProcessMemory(lpProcessInformation->hProcess, StartAddress, &EndlessLoop, 4, &BytesCount)){ OutTrace("CreateProcess: WriteProcessMemory error=%d\n", GetLastError()); } } } #endif OutTrace("CreateProcess: injection started\n", res); CloseHandle(debug_event.u.CreateProcessInfo.hFile); break; case EXCEPTION_DEBUG_EVENT: { LPEXCEPTION_DEBUG_INFO ei; ei=(LPEXCEPTION_DEBUG_INFO)&debug_event.u; OutTraceE("CreateProcess: EXCEPTION code=%x flags=%x addr=%x firstchance=%x\n", ei->ExceptionRecord.ExceptionCode, ei->ExceptionRecord.ExceptionFlags, ei->ExceptionRecord.ExceptionAddress, debug_event.u.Exception.dwFirstChance); // exception twice in same address, then do not continue. if(LastExceptionPtr == ei->ExceptionRecord.ExceptionAddress) bContinueDebugging = FALSE; //if(ei->dwFirstChance == 0) bContinueDebugging = FALSE; LastExceptionPtr = ei->ExceptionRecord.ExceptionAddress; } bContinueDebugging=false; break; case LOAD_DLL_DEBUG_EVENT: //OutTrace("CreateProcess: event=%x(%s) dll=%s address=%x\n", // debug_event.dwDebugEventCode, ExplainDebugEvent(debug_event.dwDebugEventCode), // ((LOAD_DLL_DEBUG_INFO *)&debug_event.u)->lpImageName, ((LOAD_DLL_DEBUG_INFO *)&debug_event.u)->lpBaseOfDll); CloseHandle(debug_event.u.LoadDll.hFile); break; case CREATE_THREAD_DEBUG_EVENT: OutTraceB("CreateProcess: THREAD %x\n", debug_event.u.CreateThread.hThread); break; case EXIT_THREAD_DEBUG_EVENT: #ifdef LOCKINJECTIONTHREADS if(TargetHandle && StartAddress){ if(dxw.dwFlags5 & FREEZEINJECTEDSON){ OutTrace("CreateProcess: FREEZEINJECTEDSON leaving son process in endless loop\n", GetLastError()); } else{ if(!WriteProcessMemory(lpProcessInformation->hProcess, StartAddress, &StartingCode, 4, &BytesCount)){ OutTrace("CreateProcess: WriteProcessMemory error=%d\n", GetLastError()); } } CloseHandle((HANDLE)TargetHandle); OutTrace("CreateProcess: injection terminated\n", res); } #endif OutTraceB("CreateProcess: thread exit code=%x\n", debug_event.u.ExitThread.dwExitCode); bContinueDebugging=false; default: break; } if(bContinueDebugging){ ContinueDebugEvent(debug_event.dwProcessId, debug_event.dwThreadId, dwContinueStatus); } else{ ContinueDebugEvent(debug_event.dwProcessId, debug_event.dwThreadId, DBG_CONTINUE); if(!DebugSetProcessKillOnExit(FALSE)){ OutTraceE("CreateProcess: DebugSetProcessKillOnExit ERROR err=%d\n", GetLastError()); } if(!DebugActiveProcessStop(debug_event.dwProcessId)){ OutTraceE("CreateProcess: DebugActiveProcessStop ERROR err=%d\n", GetLastError()); MessageBox(NULL, "Error in DebugActiveProcessStop", "dxwnd", MB_OK); } } } OutTrace("CreateProcess: detached\n"); return res; } static BOOL CreateProcessSuspended( LPCTSTR lpApplicationName, LPTSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCTSTR lpCurrentDirectory, LPSTARTUPINFO lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation ) { BOOL res; extern BOOL Inject(DWORD, const char *); char StartingCode[4]; DWORD EndlessLoop; EndlessLoop=0x9090FEEB; // careful: it's BIG ENDIAN: EB FE 90 90 DWORD BytesCount; DWORD OldProt; DWORD PEHeader[0x70]; char dllpath[MAX_PATH]; LPVOID StartAddress; HANDLE TargetHandle; FILE *fExe = NULL; BOOL bKillProcess = FALSE; OutTrace("CreateProcessSuspended: appname=\"%s\" commandline=\"%s\" dir=\"%s\"\n", lpApplicationName, lpCommandLine, lpCurrentDirectory); // attempt to load the specified target res=(*pCreateProcessA)( lpApplicationName, lpCommandLine, lpProcessAttributes, lpThreadAttributes, false, dwCreationFlags|CREATE_SUSPENDED, lpEnvironment, lpCurrentDirectory, lpStartupInfo, lpProcessInformation); if (!res){ OutTraceE("CreateProcess(CREATE_SUSPENDED) ERROR: err=%d\n", GetLastError()); res=(*pCreateProcessA)(NULL, lpCommandLine, 0, 0, false, dwCreationFlags, NULL, lpCurrentDirectory, lpStartupInfo, lpProcessInformation); if(!res){ OutTraceE("CreateProcess ERROR: err=%d\n", GetLastError()); } return res; } while(TRUE){ // fake loop bKillProcess = TRUE; // locate the entry point TargetHandle = OpenProcess( PROCESS_QUERY_INFORMATION|PROCESS_VM_OPERATION|PROCESS_VM_READ|PROCESS_VM_WRITE|PROCESS_SUSPEND_RESUME, FALSE, lpProcessInformation->dwProcessId); FILE *fExe = fopen(lpCommandLine ? lpCommandLine : lpApplicationName, "rb"); if(fExe==NULL){ OutTraceE("CreateProcess: fopen %s error=%d\n", lpCommandLine, GetLastError()); break; } // read DOS header if(fread((void *)PEHeader, sizeof(DWORD), 0x10, fExe)!=0x10){ OutTraceE("CreateProcess: fread DOSHDR error=%d\n", GetLastError()); break; } OutTraceB("CreateProcess: NT Header offset=%X\n", PEHeader[0xF]); fseek(fExe, PEHeader[0xF], 0); // read File header + Optional header if(fread((void *)PEHeader, sizeof(DWORD), 0x70, fExe)!=0x70){ OutTraceE("CreateProcess: fread NTHDR error=%d\n", GetLastError()); break; } StartAddress = (LPVOID)(PEHeader[0xA] + PEHeader[0xD]); OutTraceB("CreateProcess: AddressOfEntryPoint=%X ImageBase=%X startaddr=%X\n", PEHeader[0xA], PEHeader[0xD], StartAddress); // patch the entry point with infinite loop if(!VirtualProtectEx(TargetHandle, StartAddress, 4, PAGE_EXECUTE_READWRITE, &OldProt )){ OutTraceE("CreateProcess: VirtualProtectEx error=%d\n", GetLastError()); break; } if(!ReadProcessMemory(TargetHandle, StartAddress, &StartingCode, 4, &BytesCount)){ OutTraceE("CreateProcess: ReadProcessMemory error=%d\n", GetLastError()); break; } if(!WriteProcessMemory(TargetHandle, StartAddress, &EndlessLoop, 4, &BytesCount)){ OutTraceE("CreateProcess: WriteProcessMemory error=%d\n", GetLastError()); break; } if(!FlushInstructionCache(TargetHandle, StartAddress, 4)){ OutTrace("CreateProcess: FlushInstructionCache ERROR err=%x\n", GetLastError()); break; // error condition } // resume the main thread if(ResumeThread(lpProcessInformation->hThread)==(DWORD)-1){ OutTraceE("CreateProcess: ResumeThread error=%d at:%d\n", GetLastError(), __LINE__); break; } // wait until the thread stuck at entry point CONTEXT context; context.Eip = (DWORD)0; // initialize to impossible value for ( unsigned int i = 0; i < 80 && context.Eip != (DWORD)StartAddress; ++i ){ // patience. Sleep(50); // read the thread context context.ContextFlags = CONTEXT_CONTROL; if(!GetThreadContext(lpProcessInformation->hThread, &context)){ OutTraceE("CreateProcess: GetThreadContext error=%d\n", GetLastError()); break; } OutTraceB("wait cycle %d eip=%x\n", i, context.Eip); } if (context.Eip != (DWORD)StartAddress){ // wait timed out OutTraceE("CreateProcess: thread blocked eip=%x addr=%x", context.Eip, StartAddress); break; } // inject DLL payload into remote process GetFullPathName("dxwnd.dll", MAX_PATH, dllpath, NULL); if(!Inject(lpProcessInformation->dwProcessId, dllpath)){ // DXW_STRING_INJECTION OutTraceE("CreateProcess: Injection error: pid=%x dll=%s\n", lpProcessInformation->dwProcessId, dllpath); break; } // pause if(SuspendThread(lpProcessInformation->hThread)==(DWORD)-1){ OutTraceE("CreateProcess: SuspendThread error=%d\n", GetLastError()); break; } // restore original entry point if(!WriteProcessMemory(TargetHandle, StartAddress, &StartingCode, 4, &BytesCount)){ OutTraceE("CreateProcess: WriteProcessMemory error=%d\n", GetLastError()); break; } if(!FlushInstructionCache(TargetHandle, StartAddress, 4)){ OutTrace("CreateProcess: FlushInstructionCache ERROR err=%x\n", GetLastError()); break; // error condition } // you are ready to go // pause and restore original entry point if(ResumeThread(lpProcessInformation->hThread)==(DWORD)-1){ OutTraceE("CreateProcess: ResumeThread error=%d at:%d\n", GetLastError(), __LINE__); break; } bKillProcess = FALSE; break; // exit fake loop } // cleanup .... if(fExe) fclose(fExe); if(TargetHandle) CloseHandle(TargetHandle); // terminate the newly spawned process if(bKillProcess){ OutTraceDW("CreateProcess: Kill son process hproc=%x pid=%x\n", lpProcessInformation->hProcess, lpProcessInformation->dwProcessId); if(!TerminateProcess( lpProcessInformation->hProcess, -1 )){ OutTraceE("CreateProcess: failed to kill hproc=%x err=%d\n", lpProcessInformation->hProcess, GetLastError()); } } OutTraceB("CreateProcess: resumed\n"); return res; } BOOL WINAPI extCreateProcessA( LPCTSTR lpApplicationName, LPTSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCTSTR lpCurrentDirectory, LPSTARTUPINFO lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation ) { BOOL res; #ifdef LOCKINJECTIONTHREADS DWORD StartingCode; LPVOID StartAddress = 0; extern LPVOID GetThreadStartAddress(HANDLE); #endif OutTraceDW("CreateProcess: ApplicationName=\"%s\" CommandLine=\"%s\" CreationFlags=%x CurrentDir=\"%s\"\n", lpApplicationName, lpCommandLine, dwCreationFlags, lpCurrentDirectory); if(dxw.dwFlags4 & SUPPRESSCHILD) { OutTraceDW("CreateProcess: SUPPRESS\n"); return TRUE; } if(dxw.dwFlags5 & (INJECTSON|ENABLESONHOOK)) { extern HANDLE hLockMutex; ReleaseMutex(hLockMutex); } if(dxw.dwFlags5 & INJECTSON) { res=CreateProcessDebug( lpApplicationName, lpCommandLine, lpProcessAttributes, lpThreadAttributes, bInheritHandles, dwCreationFlags, lpEnvironment, lpCurrentDirectory, lpStartupInfo, lpProcessInformation ); } else if(dxw.dwFlags7 & INJECTSUSPENDED) { res=CreateProcessSuspended( lpApplicationName, lpCommandLine, lpProcessAttributes, lpThreadAttributes, bInheritHandles, dwCreationFlags, lpEnvironment, lpCurrentDirectory, lpStartupInfo, lpProcessInformation ); } else{ res=(*pCreateProcessA)( lpApplicationName, lpCommandLine, lpProcessAttributes, lpThreadAttributes, bInheritHandles, dwCreationFlags, lpEnvironment, lpCurrentDirectory, lpStartupInfo, lpProcessInformation ); } if(!res) OutTraceE("CreateProcess: ERROR err=%d\n", GetLastError()); return res; } BOOL WINAPI extGetExitCodeProcess(HANDLE hProcess, LPDWORD lpExitCode) { BOOL res; OutTraceDW("GetExitCodeProcess: hProcess=%x\n", hProcess); if(dxw.dwFlags4 & SUPPRESSCHILD) { OutTraceDW("GetExitCodeProcess: FAKE exit code=0\n"); lpExitCode = 0; return TRUE; } res=(*pGetExitCodeProcess)(hProcess, lpExitCode); if(dxw.dwFlags5 & (INJECTSON|ENABLESONHOOK)) { if(*lpExitCode != STILL_ACTIVE){ OutTraceDW("GetExitCodeProcess: locking mutex\n"); extern HANDLE hLockMutex; WaitForSingleObject(hLockMutex, 0); } } OutTraceDW("GetExitCodeProcess: hProcess=%x ExitCode=%x res=%x\n", hProcess, *lpExitCode, res); return res; } BOOL WINAPI extCheckRemoteDebuggerPresent(HANDLE hProcess, PBOOL pbDebuggerPresent) { BOOL ret; if(pbDebuggerPresent) *pbDebuggerPresent = FALSE; ret= (hProcess==(HANDLE)0xFFFFFFFF) ? FALSE : TRUE; OutTraceDW("CheckRemoteDebuggerPresent: hProcess=%x ret=%x\n", hProcess, ret); return ret; } UINT WINAPI extGetTempFileName(LPCTSTR lpPathName, LPCTSTR lpPrefixString, UINT uUnique, LPTSTR lpTempFileName) { UINT ret; OutTraceDW("GetTempFileName: PathName=\"%s\" PrefixString=%s Unique=%d\n", lpPathName, lpPrefixString, uUnique); ret = (*pGetTempFileName)(lpPathName, lpPrefixString, uUnique, lpTempFileName); if(ret == 0){ // GetTempFileName patch to make "Powerslide" working OutTraceDW("GetTempFileName FAILED: error=%d at %d\n", GetLastError(), __LINE__); char sTmpDir[MAX_PATH+1]; GetTempPath(sizeof(sTmpDir), sTmpDir); ret = (*pGetTempFileName)(sTmpDir, lpPrefixString, uUnique, lpTempFileName); if(ret == 0) OutTraceDW("GetTempFileName FAILED: PathName=\"%s\" error=%d line %d\n", sTmpDir, GetLastError(), __LINE__); } if(ret){ OutTraceDW("GetTempFileName: TempFileName=\"%s\" ret=%d\n", lpTempFileName, ret); } return ret; } LPVOID WINAPI extVirtualAlloc(LPVOID lpAddress, SIZE_T dwSize, DWORD flAllocationType, DWORD flProtect) { // v2.03.20: handling of legacy memory segments. // Some games (Crusaders of Might and Magic, the demo and the GOG release) rely on the fact that the // program can VirtualAlloc-ate memory on certain tipically free segments (0x4000000, 0x5000000, // 0x6000000, 0x7000000 and 0x8000000) but when the program is hooked by DxWnd these segments could // be allocated to extra dlls or allocated memory. // The trick is ti pre-allocate this memory and free it upon error to make it certainly available to // the calling program. LPVOID ret; OutTraceB("VirtualAlloc: lpAddress=%x size=%x flag=%x protect=%x\n", lpAddress, dwSize, flAllocationType, flProtect); ret = (*pVirtualAlloc)(lpAddress, dwSize, flAllocationType, flProtect); if((ret == NULL) && lpAddress){ OutTraceE("VirtualAlloc: RECOVERY lpAddress=%x size=%x flag=%x protect=%x\n", lpAddress, dwSize, flAllocationType, flProtect); if (((DWORD)lpAddress & 0xF0FFFFFF) == 0){ BOOL bret; bret = VirtualFree(lpAddress, 0x00000000, MEM_RELEASE); if(!bret) OutTraceE("VirtualFree: MEM_RELEASE err=%d\n", GetLastError()); ret = (*pVirtualAlloc)(lpAddress, dwSize, flAllocationType, flProtect); if (ret == NULL) OutTraceE("VirtualAlloc: addr=%x err=%d\n", lpAddress, GetLastError()); } if (!ret) ret = (*pVirtualAlloc)((LPVOID)0x00000000, dwSize, flAllocationType, flProtect); if(ret == NULL) OutTraceE("VirtualAlloc: addr=NULL err=%d\n", GetLastError()); } OutTrace("VirtualAlloc: ret=%x\n", ret); return ret; } // WinExec: used by "Star Wars X-Wings Alliance" frontend, but fortunately it's not essential to hook it.... UINT WINAPI extWinExec(LPCSTR lpCmdLine, UINT uCmdShow) { UINT ret; OutTraceDW("WinExec: lpCmdLine=%s CmdShow=%x\n", lpCmdLine, uCmdShow); ret=(*pWinExec)(lpCmdLine, uCmdShow); if(ret<31) OutTraceE("WinExec: ERROR ret=%x\n", ret); return ret; } BOOL WINAPI extSetPriorityClass(HANDLE hProcess, DWORD dwPriorityClass) { OutTraceDW("SetPriorityClass: hProcess=%x class=%x\n", hProcess, dwPriorityClass); if(dxw.dwFlags7 & BLOCKPRIORITYCLASS) { OutTraceDW("SetPriorityClass: BLOCKED\n"); return TRUE; } return (*pSetPriorityClass)(hProcess, dwPriorityClass); } BOOL WINAPI extGlobalUnlock(HGLOBAL hMem) { BOOL ret; ret = (*pGlobalUnlock)(hMem); if((dxw.dwFlags7 & FIXGLOBALUNLOCK) && (ret == 1)){ static HGLOBAL hLastMem = NULL; if(hMem == hLastMem){ ret = 0; OutTraceDW("GlobalUnlock: FIXED RETCODE hMem=%x\n", hMem); } hLastMem = hMem; } return ret; } // --------------------------------------------------------------------- // Virtual Heap // --------------------------------------------------------------------- static LPVOID VHeapMin = (LPVOID)0xFFFFFFFF; static LPVOID VHeapMax = (LPVOID)0x00000000; static int iProg = 1; #if 0 LPVOID WINAPI extHeapAlloc(HANDLE hHeap, DWORD dwFlags, SIZE_T dwBytes) { LPVOID ret; OutTraceB("HeapAlloc: heap=%x flags=%x bytes=%d\n", hHeap, dwFlags, dwBytes); if(((DWORD)hHeap >= 0xDEADBEEF) && ((DWORD)hHeap < 0xDEADBEEF + iProg)){ ret = malloc(dwBytes); if(ret){ if(ret > VHeapMax) VHeapMax = ret; if(ret < VHeapMin) VHeapMin = ret; } OutTraceB("HeapAlloc: (virtual) ret=%x\n", ret); } else { ret = (*pHeapAlloc)(hHeap, dwFlags, dwBytes); OutTraceB("HeapAlloc: ret=%x\n", ret); } return ret; } LPVOID WINAPI extHeapReAlloc(HANDLE hHeap, DWORD dwFlags, LPVOID lpMem, SIZE_T dwBytes) { LPVOID ret; OutTraceB("HeapReAlloc: heap=%x flags=%x mem=%x bytes=%d\n", hHeap, dwFlags, lpMem, dwBytes); if(((DWORD)hHeap >= 0xDEADBEEF) && ((DWORD)hHeap < 0xDEADBEEF + iProg)){ ret = realloc(lpMem, dwBytes); if(ret){ if(ret > VHeapMax) VHeapMax = ret; if(ret < VHeapMin) VHeapMin = ret; } OutTraceB("HeapReAlloc: (virtual) ret=%x\n", ret); } else { ret = (*pHeapReAlloc)(hHeap, dwFlags, lpMem, dwBytes); OutTraceB("HeapReAlloc: ret=%X\n", ret); } return ret; } BOOL WINAPI extHeapFree(HANDLE hHeap, DWORD dwFlags, LPVOID lpMem) { BOOL ret; OutTraceB("HeapFree: heap=%x flags=%x mem=%x\n", hHeap, dwFlags, lpMem); if((lpMem >= VHeapMin) && (lpMem <= VHeapMax)){ free(lpMem); ret = TRUE; OutTraceB("HeapFree: (virtual) ret=%x\n", ret); } else { ret = (*pHeapFree)(hHeap, dwFlags, lpMem); OutTraceB("HeapFree: ret=%x\n", ret); } return ret; } BOOL WINAPI extHeapValidate(HANDLE hHeap, DWORD dwFlags, LPVOID lpMem) { BOOL ret; OutTraceB("HeapValidate: heap=%x flags=%x mem=%x\n", hHeap, dwFlags, lpMem); if((lpMem >= VHeapMin) && (lpMem <= VHeapMax)){ ret = TRUE; OutTraceB("HeapValidate: (virtual) ret=%x\n", ret); } else { ret = (*pHeapValidate)(hHeap, dwFlags, lpMem); OutTraceB("HeapValidate: ret=%x\n", ret); } return ret; } SIZE_T WINAPI extHeapCompact(HANDLE hHeap, DWORD dwFlags) { SIZE_T ret; OutTraceB("HeapCompact: heap=%x flags=%x\n", hHeap, dwFlags); if(((DWORD)hHeap >= 0xDEADBEEF) && ((DWORD)hHeap < 0xDEADBEEF + iProg)){ ret = 100000; // just a number .... OutTraceB("HeapCompact: (virtual) ret=%d\n", ret); } else { ret = (*pHeapCompact)(hHeap, dwFlags); OutTraceB("HeapCompact: ret=%d\n", ret); } return ret; } HANDLE WINAPI extHeapCreate(DWORD flOptions, SIZE_T dwInitialSize, SIZE_T dwMaximumSize) { HANDLE ret; OutTraceB("HeapCreate: flags=%x size(init-max)=(%d-%d)\n", flOptions, dwInitialSize, dwMaximumSize); //flOptions &= ~HEAP_NO_SERIALIZE; //ret = (*pHeapCreate)(flOptions, dwInitialSize, dwMaximumSize); ret = (HANDLE)(0xDEADBEEF + iProg++); OutTraceB("HeapCreate: (virtual) ret=%X\n", ret); return ret; } HANDLE WINAPI extGetProcessHeap(void) { OutTraceB("GetProcessHeap: (virtual) ret=0xDEADBEEF\n"); return (HANDLE)0xDEADBEEF; } BOOL WINAPI extHeapDestroy(HANDLE hHeap) { BOOL ret; OutTraceB("HeapDestroy: heap=%x\n", hHeap); if(((DWORD)hHeap >= 0xDEADBEEF) && ((DWORD)hHeap < 0xDEADBEEF + iProg)) ret = TRUE; else ret = (*pHeapDestroy)(hHeap); OutTraceB("HeapDestroy: ret=%x\n", ret); return ret; } #else #define HEAPTRACE FALSE LPVOID WINAPI extHeapAlloc(HANDLE hHeap, DWORD dwFlags, SIZE_T dwBytes) { LPVOID ret; OutTraceB("HeapAlloc: heap=%x flags=%x bytes=%d\n", hHeap, dwFlags, dwBytes); if(HEAPTRACE) return (*pHeapAlloc)(hHeap, dwFlags, dwBytes); ret = malloc(dwBytes); if(ret){ if(ret > VHeapMax) VHeapMax = ret; if(ret < VHeapMin) VHeapMin = ret; } OutTraceB("HeapAlloc: (virtual) ret=%x\n", ret); return ret; } LPVOID WINAPI extHeapReAlloc(HANDLE hHeap, DWORD dwFlags, LPVOID lpMem, SIZE_T dwBytes) { LPVOID ret; OutTraceB("HeapReAlloc: heap=%x flags=%x mem=%x bytes=%d\n", hHeap, dwFlags, lpMem, dwBytes); if(HEAPTRACE) return (*pHeapReAlloc)(hHeap, dwFlags, lpMem, dwBytes); ret = realloc(lpMem, dwBytes); if(ret){ if(ret > VHeapMax) VHeapMax = ret; if(ret < VHeapMin) VHeapMin = ret; } OutTraceB("HeapReAlloc: (virtual) ret=%x\n", ret); return ret; } BOOL WINAPI extHeapFree(HANDLE hHeap, DWORD dwFlags, LPVOID lpMem) { BOOL ret; OutTraceB("HeapFree: heap=%x flags=%x mem=%x\n", hHeap, dwFlags, lpMem); if(HEAPTRACE) return (*pHeapFree)(hHeap, dwFlags, lpMem); if((lpMem >= VHeapMin) && (lpMem <= VHeapMax)){ free(lpMem); ret = TRUE; OutTraceB("HeapFree: (virtual) ret=%x\n", ret); } else { ret = (*pHeapFree)(hHeap, dwFlags, lpMem); OutTraceB("HeapFree: ret=%x\n", ret); } return ret; } BOOL WINAPI extHeapValidate(HANDLE hHeap, DWORD dwFlags, LPVOID lpMem) { BOOL ret; OutTraceB("HeapValidate: heap=%x flags=%x mem=%x\n", hHeap, dwFlags, lpMem); if(HEAPTRACE) return (*pHeapValidate)(hHeap, dwFlags, lpMem); if((lpMem >= VHeapMin) && (lpMem <= VHeapMax)){ ret = TRUE; OutTraceB("HeapValidate: (virtual) ret=%x\n", ret); } else { ret = (*pHeapValidate)(hHeap, dwFlags, lpMem); OutTraceB("HeapValidate: ret=%x\n", ret); } return ret; } SIZE_T WINAPI extHeapCompact(HANDLE hHeap, DWORD dwFlags) { SIZE_T ret; OutTraceB("HeapCompact: heap=%x flags=%x\n", hHeap, dwFlags); if(HEAPTRACE) return (*pHeapCompact)(hHeap, dwFlags); if(((DWORD)hHeap >= 0xDEADBEEF) && ((DWORD)hHeap < 0xDEADBEEF + iProg)){ ret = 100000; // just a number .... OutTraceB("HeapCompact: (virtual) ret=%d\n", ret); } else { ret = (*pHeapCompact)(hHeap, dwFlags); OutTraceB("HeapCompact: ret=%d\n", ret); } return ret; } HANDLE WINAPI extHeapCreate(DWORD flOptions, SIZE_T dwInitialSize, SIZE_T dwMaximumSize) { HANDLE ret; OutTraceB("HeapCreate: flags=%x size(init-max)=(%d-%d)\n", flOptions, dwInitialSize, dwMaximumSize); if(HEAPTRACE) return (*pHeapCreate)(flOptions, dwInitialSize, dwMaximumSize); ret = (HANDLE)(0xDEADBEEF + iProg++); OutTraceB("HeapCreate: (virtual) ret=%X\n", ret); return ret; } HANDLE WINAPI extGetProcessHeap(void) { OutTraceB("GetProcessHeap: (virtual) ret=0xDEADBEEF\n"); if(HEAPTRACE) return (*pGetProcessHeap)(); return (HANDLE)0xDEADBEEF; } BOOL WINAPI extHeapDestroy(HANDLE hHeap) { BOOL ret; OutTraceB("HeapDestroy: heap=%x\n", hHeap); if(HEAPTRACE) return (*pHeapDestroy)(hHeap); if(((DWORD)hHeap >= 0xDEADBEEF) && ((DWORD)hHeap < 0xDEADBEEF + iProg)) ret = TRUE; else ret = (*pHeapDestroy)(hHeap); OutTraceB("HeapDestroy: ret=%x\n", ret); return ret; } #endif ================================================ FILE: dll/logall.h ================================================ #ifdef OutTraceB #undef OutTraceB #define OutTraceB OutTrace #endif #ifdef OutTraceDW #undef OutTraceDW #define OutTraceDW OutTrace #endif #ifdef OutTraceC #undef OutTraceC #define OutTraceC OutTrace #endif #ifdef OutTraceE #undef OutTraceE #define OutTraceE OutTrace #endif #ifdef IsTraceB #undef IsTraceB #define IsTraceB TRUE #endif #ifdef IsTraceDW #undef IsTraceDW #define IsTraceDW TRUE #endif #ifdef IsTraceC #undef IsTraceC #define IsTraceC TRUE #endif #ifdef IsTraceE #undef IsTraceE #define IsTraceE TRUE #endif #ifdef IsDebug #undef IsDebug #define IsDebug TRUE #endif ================================================ FILE: dll/mincaps.cpp ================================================ #define _CRT_SECURE_NO_WARNINGS #define INITGUID #include #include #include "dxwnd.h" #include "dxhook.h" #include "ddrawi.h" #include "dxwcore.hpp" #include "stdio.h" #include "hddraw.h" #include "dxhelper.h" #include "syslibs.h" #define VIRTUAL_CAPS_VIRTUALPC TRUE #if 0 typedef struct _DDCAPS_DX7 { /* 0*/ DWORD dwSize; // size of the DDDRIVERCAPS structure /* 4*/ DWORD dwCaps; // driver specific capabilities /* 8*/ DWORD dwCaps2; // more driver specific capabilites /* c*/ DWORD dwCKeyCaps; // color key capabilities of the surface /* 10*/ DWORD dwFXCaps; // driver specific stretching and effects capabilites /* 14*/ DWORD dwFXAlphaCaps; // alpha driver specific capabilities /* 18*/ DWORD dwPalCaps; // palette capabilities /* 1c*/ DWORD dwSVCaps; // stereo vision capabilities /* 20*/ DWORD dwAlphaBltConstBitDepths; // DDBD_2,4,8 /* 24*/ DWORD dwAlphaBltPixelBitDepths; // DDBD_1,2,4,8 /* 28*/ DWORD dwAlphaBltSurfaceBitDepths; // DDBD_1,2,4,8 /* 2c*/ DWORD dwAlphaOverlayConstBitDepths; // DDBD_2,4,8 /* 30*/ DWORD dwAlphaOverlayPixelBitDepths; // DDBD_1,2,4,8 /* 34*/ DWORD dwAlphaOverlaySurfaceBitDepths; // DDBD_1,2,4,8 /* 38*/ DWORD dwZBufferBitDepths; // DDBD_8,16,24,32 /* 3c*/ DWORD dwVidMemTotal; // total amount of video memory /* 40*/ DWORD dwVidMemFree; // amount of free video memory /* 44*/ DWORD dwMaxVisibleOverlays; // maximum number of visible overlays /* 48*/ DWORD dwCurrVisibleOverlays; // current number of visible overlays /* 4c*/ DWORD dwNumFourCCCodes; // number of four cc codes /* 50*/ DWORD dwAlignBoundarySrc; // source rectangle alignment /* 54*/ DWORD dwAlignSizeSrc; // source rectangle byte size /* 58*/ DWORD dwAlignBoundaryDest; // dest rectangle alignment /* 5c*/ DWORD dwAlignSizeDest; // dest rectangle byte size /* 60*/ DWORD dwAlignStrideAlign; // stride alignment /* 64*/ DWORD dwRops[DD_ROP_SPACE]; // ROPS supported /* 84*/ DDSCAPS ddsOldCaps; // Was DDSCAPS ddsCaps. ddsCaps is of type DDSCAPS2 for DX6 /* 88*/ DWORD dwMinOverlayStretch; // minimum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 /* 8c*/ DWORD dwMaxOverlayStretch; // maximum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 /* 90*/ DWORD dwMinLiveVideoStretch; // minimum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 /* 94*/ DWORD dwMaxLiveVideoStretch; // maximum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 /* 98*/ DWORD dwMinHwCodecStretch; // minimum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 /* 9c*/ DWORD dwMaxHwCodecStretch; // maximum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 /* a0*/ DWORD dwReserved1; // reserved /* a4*/ DWORD dwReserved2; // reserved /* a8*/ DWORD dwReserved3; // reserved /* ac*/ DWORD dwSVBCaps; // driver specific capabilities for System->Vmem blts /* b0*/ DWORD dwSVBCKeyCaps; // driver color key capabilities for System->Vmem blts /* b4*/ DWORD dwSVBFXCaps; // driver FX capabilities for System->Vmem blts /* b8*/ DWORD dwSVBRops[DD_ROP_SPACE];// ROPS supported for System->Vmem blts /* d8*/ DWORD dwVSBCaps; // driver specific capabilities for Vmem->System blts /* dc*/ DWORD dwVSBCKeyCaps; // driver color key capabilities for Vmem->System blts /* e0*/ DWORD dwVSBFXCaps; // driver FX capabilities for Vmem->System blts /* e4*/ DWORD dwVSBRops[DD_ROP_SPACE];// ROPS supported for Vmem->System blts /*104*/ DWORD dwSSBCaps; // driver specific capabilities for System->System blts /*108*/ DWORD dwSSBCKeyCaps; // driver color key capabilities for System->System blts /*10c*/ DWORD dwSSBFXCaps; // driver FX capabilities for System->System blts /*110*/ DWORD dwSSBRops[DD_ROP_SPACE];// ROPS supported for System->System blts /*130*/ DWORD dwMaxVideoPorts; // maximum number of usable video ports /*134*/ DWORD dwCurrVideoPorts; // current number of video ports used /*138*/ DWORD dwSVBCaps2; // more driver specific capabilities for System->Vmem blts /*13c*/ DWORD dwNLVBCaps; // driver specific capabilities for non-local->local vidmem blts /*140*/ DWORD dwNLVBCaps2; // more driver specific capabilities non-local->local vidmem blts /*144*/ DWORD dwNLVBCKeyCaps; // driver color key capabilities for non-local->local vidmem blts /*148*/ DWORD dwNLVBFXCaps; // driver FX capabilities for non-local->local blts /*14c*/ DWORD dwNLVBRops[DD_ROP_SPACE]; // ROPS supported for non-local->local blts // Members added for DX6 release /*16c*/ DDSCAPS2 ddsCaps; // Surface Caps } DDCAPS_DX7; typedef DDCAPS_DX7 FAR* LPDDCAPS_DX7; #endif void SetMinimalCaps(int dxversion, LPDDCAPS c1, LPDDCAPS c2) { DWORD dwMaxSize; switch(dxversion){ case 1: case 2: case 3: dwMaxSize=sizeof(DDCAPS_DX3); break; case 4: case 5: dwMaxSize=sizeof(DDCAPS_DX5); break; case 6: dwMaxSize=sizeof(DDCAPS_DX6); break; case 7: dwMaxSize=sizeof(DDCAPS_DX7); break; } #ifdef VIRTUAL_CAPS_VMWARE if(c1){ int dwSize = c1->dwSize; //memset(&c1, 0, dwSize); c1->dwSize = dwSize; c1->dwCaps = (DDCAPS_3D|DDCAPS_BLT|DDCAPS_BLTQUEUE|DDCAPS_OVERLAY|DDCAPS_OVERLAYFOURCC|DDCAPS_OVERLAYSTRETCH|DDCAPS_COLORKEY|DDCAPS_BLTDEPTHFILL|DDCAPS_CANBLTSYSMEM); c1->dwCaps2 = (DDCAPS2_WIDESURFACES|DDCAPS2_CANRENDERWINDOWED|DDCAPS2_FLIPNOVSYNC); c1->dwCKeyCaps = (DDCKEYCAPS_DESTOVERLAY); c1->dwFXCaps = (DDFXCAPS_OVERLAYSHRINKX|DDFXCAPS_OVERLAYSHRINKY|DDFXCAPS_OVERLAYSTRETCHX|DDFXCAPS_OVERLAYSTRETCHY); c1->dwZBufferBitDepths = 0x600; c1->dwMaxVisibleOverlays = 0x20; for(int j=0; jdwRops[j]=0; c1->dwRops[6] = 0x100; if(dwSize >= (int)(0x16C)) { c1->ddsCaps.dwCaps = 0x42727A; c1->ddsCaps.dwCaps2 = 0x200200; } // c1->dwNumFourCCCodes - untouched (03 in VmWare) } if(c2){ int dwSize = c2->dwSize; //memset(&c2, 0, dwSize); c2->dwSize = dwSize; c2->dwCaps = (DDCAPS_3D|DDCAPS_BLT|DDCAPS_BLTSTRETCH|DDCAPS_PALETTE|DDCAPS_COLORKEY|DDCAPS_ALPHA|DDCAPS_BLTCOLORFILL|DDCAPS_BLTDEPTHFILL|DDCAPS_CANCLIP|DDCAPS_CANCLIPSTRETCHED|DDCAPS_CANBLTSYSMEM); c2->dwCaps2 = (DDCAPS2_CERTIFIED); c2->dwCKeyCaps =(DDCKEYCAPS_SRCBLT); c2->dwPalCaps = 0x347; // ??? c2->dwFXCaps = (DDFXCAPS_BLTARITHSTRETCHY|DDFXCAPS_BLTMIRRORLEFTRIGHT|DDFXCAPS_BLTMIRRORUPDOWN|DDFXCAPS_BLTSHRINKX|DDFXCAPS_BLTSHRINKXN|DDFXCAPS_BLTSHRINKY|DDFXCAPS_BLTSHRINKYN|DDFXCAPS_BLTSTRETCHX|DDFXCAPS_BLTSTRETCHXN|DDFXCAPS_BLTSTRETCHY|DDFXCAPS_BLTSTRETCHYN|DDFXCAPS_BLTALPHA|DDFXCAPS_BLTFILTER|DDFXCAPS_BLTARITHSTRETCHY); for(int j=0; jdwRops[j]=0; c2->dwRops[0] = 0x1; c2->dwRops[6] = 0x100; c2->dwRops[7] = 0x8000000; c2->ddsOldCaps.dwCaps = 0x421350; // VMWare specific? c2->dwSVBCaps = 0xF4C08241; c2->dwSVBCKeyCaps = 0x200; c2->dwSVBFXCaps = 0x3FCE3 ; for(int j=0; jdwSVBRops[j]=0; c2->dwSVBRops[0] = 0x1; c2->dwSVBRops[6] = 0x100; c2->dwSVBRops[7] = 0x8000000; c2->dwVSBCaps = 0xF4C08241; c2->dwVSBCKeyCaps = 0x200; c2->dwVSBFXCaps = 0x3FCE3; for(int j=0; jdwVSBRops[j]=0; c2->dwVSBRops[0] = 0x1; c2->dwVSBRops[6] = 0x100; c2->dwVSBRops[7] = 0x8000000; c2->dwSSBCaps = 0xF4C08241; c2->dwSSBFXCaps = 0x3FCE3; for(int j=0; jdwSSBRops[j]=0; c2->dwSSBRops[0] = 1; c2->dwSSBRops[6] = 0x100; c2->dwSSBRops[7] = 0x8000000; if(dwSize > (int)0x16C) { c2->ddsCaps.dwCaps = 0x421350; c2->ddsCaps.dwCaps2 = 0x200; } } #endif #ifdef VIRTUAL_CAPS_VIRTUALPC /* CapsDump(c1:HW)= ------- 00 -------- 04 -------- 08 -------- 0c -------- 0x0000: 7C,01,00,00,C1,68,40,90,00,10,48,00,10,00,00,00, 0x0010: 00,00,A8,02,00,00,00,00,00,00,00,00,00,00,00,00, 0x0020: 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00, 0x0030: 00,00,00,00,00,00,00,00,00,06,00,00,C0,21,55,00, 0x0040: C0,21,55,00,20,00,00,00,00,00,00,00,00,00,00,00, 0x0050: 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00, 0x0060: 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00, 0x0070: 00,00,00,00,00,00,00,00,00,00,00,00,00,01,00,00, 0x0080: 00,00,00,00,50,02,00,00,00,00,00,00,00,00,00,00, 0x0090: 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00, 0x00a0: 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00, 0x00b0: 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00, 0x00c0: 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00, 0x00d0: 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00, 0x00e0: 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00, 0x00f0: 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00, 0x0100: 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00, 0x0110: 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00, 0x0120: 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00, 0x0130: 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00, 0x0140: 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00, 0x0150: 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00, 0x0160: 00,00,00,00,00,00,00,00,00,00,00,00,7A,72,42,00, 0x0170: 00,02,20,00,00,00,00,00,00,00,00,00, CapsDump(c2:SW)= ------- 00 -------- 04 -------- 08 -------- 0c -------- 0x0000: 7C,01,00,00,41,82,C0,F4,01,00,00,00,00,02,00,00, 0x0010: E1,FC,03,00,00,00,00,00,47,03,00,00,00,00,00,00, 0x0020: 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00, 0x0030: 00,00,00,00,00,00,00,00,00,04,00,00,00,00,00,00, 0x0040: 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00, 0x0050: 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00, 0x0060: 00,00,00,00,01,00,00,00,00,00,00,00,00,00,00,00, 0x0070: 00,00,00,00,00,00,00,00,00,00,00,00,00,01,00,00, 0x0080: 00,00,00,08,50,13,42,00,00,00,00,00,00,00,00,00, 0x0090: 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00, 0x00a0: 00,00,00,00,00,00,00,00,00,00,00,00,41,82,C0,F4, 0x00b0: 00,02,00,00,E3,FC,03,00,01,00,00,00,00,00,00,00, 0x00c0: 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00, 0x00d0: 00,01,00,00,00,00,00,08,41,82,C0,F4,00,02,00,00, 0x00e0: E3,FC,03,00,01,00,00,00,00,00,00,00,00,00,00,00, 0x00f0: 00,00,00,00,00,00,00,00,00,00,00,00,00,01,00,00, 0x0100: 00,00,00,08,41,82,C0,F4,00,02,00,00,E3,FC,03,00, 0x0110: 01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00, 0x0120: 00,00,00,00,00,00,00,00,00,01,00,00,00,00,00,08, 0x0130: 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00, 0x0140: 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00, 0x0150: 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00, 0x0160: 00,00,00,00,00,00,00,00,00,00,00,00,50,13,42,00, 0x0170: 00,02,00,00,00,00,00,00,00,00,00,00, */ if(c1){ DWORD dwSize = c1->dwSize; if(dwSize > dwMaxSize) dwSize = dwMaxSize; DWORD dwVidMemTotal = c1->dwVidMemTotal; DWORD dwVidMemFree = c1->dwVidMemFree; memset((void *)c1, 0, dwSize); c1->dwSize = dwSize; c1->dwCaps = 0x904068c1; c1->dwCaps2 = 0x481000; c1->dwCKeyCaps = 0x1; c1->dwFXCaps = 0x2a80000; c1->dwZBufferBitDepths = 0x600; c1->dwVidMemTotal = dwVidMemTotal; c1->dwVidMemFree = dwVidMemFree; c1->dwMaxVisibleOverlays = 0x20; //for(int j=0; jdwRops[j]=0; c1->dwRops[6] = 0x100; c1->ddsOldCaps.dwCaps = 0x250; if(dwSize >= (int)(0x16C)) { c1->ddsCaps.dwCaps = 0x42727A; c1->ddsCaps.dwCaps2 = 0x200200; } } if(c2){ DWORD dwSize = c2->dwSize; if(dwSize > dwMaxSize) dwSize = dwMaxSize; DWORD dwVidMemTotal = c2->dwVidMemTotal; DWORD dwVidMemFree = c2->dwVidMemFree; memset((void *)c2, 0, dwSize); c2->dwSize = dwSize; c2->dwCaps = 0xf4c08241; c2->dwCaps2 = 0x1; c2->dwCKeyCaps = 0x200; c2->dwFXCaps = 0x3fce1; c2->dwPalCaps = 0x347; c2->dwVidMemTotal = dwVidMemTotal; c2->dwVidMemFree = dwVidMemFree; if(dwSize > (int)0xac){ //for(int j=0; jdwRops[j]=0; c2->dwRops[0] = 0x1; c1->dwRops[6] = 0x100; c2->dwRops[7] = 0x8000000; c2->ddsOldCaps.dwCaps = 0x421350; c2->dwSVBCaps = 0xF4C08241; c2->dwSVBCKeyCaps = 0x200; c2->dwSVBFXCaps = 0x3FCE3; //for(int j=0; jdwSVBRops[j]=0; c2->dwSVBRops[0] = 0x1; c2->dwSVBRops[6] = 0x100; c2->dwSVBRops[7] = 0x8000000; c2->dwVSBCaps = 0xF4C08241; c2->dwVSBCKeyCaps = 0x200; c2->dwVSBFXCaps = 0x3FCE3; //for(int j=0; jdwVSBRops[j]=0; c2->dwVSBRops[0] = 0x1; c2->dwVSBRops[6] = 0x100; c2->dwVSBRops[7] = 0x8000000; c2->dwSSBCaps = 0xF4C08241; c2->dwSSBCKeyCaps = 0x200; c2->dwSSBFXCaps = 0x3FCE3; } if(dwSize > (int)0x13c) { //for(int j=0; jdwSSBRops[j]=0; c2->dwSSBRops[0] = 1; c2->dwSSBRops[6] = 0x100; c2->dwSSBRops[7] = 0x8000000; } if(dwSize > (int)0x16C) { c2->ddsCaps.dwCaps = 0x421350; c2->ddsCaps.dwCaps2 = 0x200; } } #endif } ================================================ FILE: dll/msghook.cpp ================================================ #define _WIN32_WINNT 0x0600 #define WIN32_LEAN_AND_MEAN #define _CRT_SECURE_NO_DEPRECATE 1 #include #include #include #include "dxwnd.h" #include "dxwcore.hpp" #include "dxhelper.h" extern HHOOK hMouseHook; /* typedef struct tagMSG { HWND hwnd; // A handle to the window whose window procedure receives the message. This member is NULL when the message is a thread message. UINT message; // The message identifier. Applications can only use the low word; the high word is reserved by the system. WPARAM wParam; // Additional information about the message. The exact meaning depends on the value of the message member. LPARAM lParam; // Additional information about the message. The exact meaning depends on the value of the message member. DWORD time; // The time at which the message was posted. POINT pt; // The cursor position, in screen coordinates, when the message was posted. } MSG, *PMSG, *LPMSG; */ LRESULT CALLBACK MessageHook(int code, WPARAM wParam, LPARAM lParam) { static BOOL SizeMoving = FALSE; if(code == HC_ACTION){ if(dxw.IsFullScreen()){ MSG *msg; msg = (MSG *)lParam; OutTraceC("MessageHook: hwnd=%x message=%d(%s) remove=%d params=(L:%x,R:%x) pt=(%d,%d)\n", msg->hwnd, msg->message, ExplainWinMessage(msg->message), wParam, msg->lParam, msg->wParam, msg->pt.x, msg->pt.y); switch(msg->message){ case WM_ENTERSIZEMOVE: SizeMoving = TRUE; break; case WM_EXITSIZEMOVE: SizeMoving = FALSE; break; } // do not try to fix coordinates for points outside the client area!! // in theory, that should primarily depend on the message type, but this is the way it works ... // do not do the fixing also when in sizemove mode RECT client; client=dxw.GetUnmappedScreenRect(); if ((SizeMoving) || (msg->pt.x < client.left) || (msg->pt.y < client.top) || (msg->pt.x > client.right) || (msg->pt.y > client.bottom)){ // do nothing } else { // fix the message point coordinates POINT upleft={0,0}; POINT pt; HWND hwnd; // v2.03.36: offset to be calculated from target window // v2-03.70: unless is a thread message (hwnd == NULL) !! hwnd=(msg->hwnd)?msg->hwnd:dxw.GethWnd(); (*pClientToScreen)(hwnd, &upleft); pt = msg->pt; pt = dxw.SubCoordinates(pt, upleft); pt=dxw.FixCursorPos(pt); msg->pt = pt; // beware: needs fix for mousewheel? // if NOMOUSEPROC fix point x,y coordinates only to NON MOUSE messages that won't be fixed by WindowProc hooker // NOMOUSEPROC is required by "X-Files", must be off for "Star Trek Armada" !!! // if((msg->message <= WM_MOUSELAST) && (msg->message >= WM_MOUSEFIRST) && !(dxw.dwFlags6 & NOMOUSEPROC)) msg->lParam = MAKELPARAM(pt.x, pt.y); if((msg->message <= WM_MOUSELAST) && (msg->message >= WM_MOUSEFIRST)) msg->lParam = MAKELPARAM(pt.x, pt.y); OutTraceC("MessageHook: fixed hwnd=%x lparam/pt=(%d,%d)\n", msg->hwnd, pt.x, pt.y); GetHookInfo()->CursorX=(short)pt.x; GetHookInfo()->CursorY=(short)pt.y; } } } return CallNextHookEx(hMouseHook, code, wParam, lParam); } ================================================ FILE: dll/msims32.cpp ================================================ #define _CRT_SECURE_NO_WARNINGS #include "dxwnd.h" #include "dxwcore.hpp" #include "syslibs.h" #include "hddraw.h" #include "dxhook.h" #include "dxhelper.h" #include "shareddc.hpp" #include "stdio.h" static BOOL bGDIRecursionFlag = FALSE; #define _Warn(s) MessageBox(0, s, "to do", MB_ICONEXCLAMATION) typedef BOOL (WINAPI *AlphaBlend_Type)(HDC hdcDest, int xoriginDest, int yoriginDest, int wDest, int hDest, HDC hdcSrc, int xoriginSrc, int yoriginSrc, int wSrc, int hSrc, BLENDFUNCTION ftn); AlphaBlend_Type pAlphaBlend = NULL; BOOL WINAPI extAlphaBlend(HDC hdcDest, int xoriginDest, int yoriginDest, int wDest, int hDest, HDC hdcSrc, int xoriginSrc, int yoriginSrc, int wSrc, int hSrc, BLENDFUNCTION ftn); typedef BOOL (WINAPI *GradientFill_Type)(HDC, PTRIVERTEX, ULONG, PVOID, ULONG, ULONG); GradientFill_Type pGradientFill = NULL; BOOL WINAPI extGradientFill(HDC, PTRIVERTEX, ULONG, PVOID, ULONG, ULONG); typedef BOOL (WINAPI *TransparentBlt_Type)(HDC, int, int, int, int, HDC, int, int, int, int, UINT); TransparentBlt_Type pTransparentBlt = NULL; BOOL WINAPI extTransparentBlt(HDC, int, int, int, int, HDC, int, int, int, int, UINT); static HookEntryEx_Type Hooks[]={ {HOOK_IAT_CANDIDATE, 0, "AlphaBlend", (FARPROC)NULL, (FARPROC *)&pAlphaBlend, (FARPROC)extAlphaBlend}, {HOOK_IAT_CANDIDATE, 0, "GradientFill", (FARPROC)NULL, (FARPROC *)&pGradientFill, (FARPROC)extGradientFill}, {HOOK_IAT_CANDIDATE, 0, "TransparentBlt", (FARPROC)NULL, (FARPROC *)&pTransparentBlt, (FARPROC)extTransparentBlt}, {HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator }; static char *libname = "msimg32.dll"; void HookMSIMG32Init() { HookLibInitEx(Hooks); } void HookMSIMG32(HMODULE module) { HookLibraryEx(module, Hooks, libname); } FARPROC Remap_MSIMG32_ProcAddress(LPCSTR proc, HMODULE hModule) { FARPROC addr; if(addr=RemapLibraryEx(proc, hModule, Hooks)) return addr; return NULL; } BOOL WINAPI extAlphaBlend(HDC hdcDest, int xoriginDest, int yoriginDest, int wDest, int hDest, HDC hdcSrc, int xoriginSrc, int yoriginSrc, int wSrc, int hSrc, BLENDFUNCTION ftn) { _Warn("AlphaBlend"); return TRUE; } BOOL WINAPI extGradientFill(HDC hdc, PTRIVERTEX pVertex, ULONG nVertex, PVOID pMesh, ULONG nMesh, ULONG ulMode) { _Warn("GradientFill"); return TRUE; } BOOL WINAPI extTransparentBlt(HDC hdcDest, int xoriginDest, int yoriginDest, int wDest, int hDest, HDC hdcSrc, int xoriginSrc, int yoriginSrc, int wSrc, int hSrc, UINT crTransparent) { _Warn("TransparentBlt"); return TRUE; } ================================================ FILE: dll/msvfw.cpp ================================================ #define _CRT_SECURE_NO_WARNINGS 1 #include "dxwnd.h" #include "dxwcore.hpp" #include "syslibs.h" #include "dxhook.h" #include "Vfw.h" #define DXWDECLARATIONS TRUE #include "msvfwhook.h" #undef DXWDECLARATIONS typedef DWORD (WINAPIV *ICDrawBegin_Type)(HIC, DWORD, HPALETTE, HWND, HDC, int, int, int, int, LPBITMAPINFOHEADER, int, int, int, int, DWORD, DWORD); ICDrawBegin_Type pICDrawBegin = NULL; DWORD WINAPIV extICDrawBegin(HIC, DWORD, HPALETTE, HWND, HDC, int, int, int, int, LPBITMAPINFOHEADER, int, int, int, int, DWORD, DWORD); typedef BOOL (WINAPI *DrawDibDraw_Type)(HDRAWDIB, HDC, int, int, int, int, LPBITMAPINFOHEADER, LPVOID, int, int, int, int, UINT); DrawDibDraw_Type pDrawDibDraw = NULL; BOOL WINAPI extDrawDibDraw(HDRAWDIB, HDC, int, int, int, int, LPBITMAPINFOHEADER, LPVOID, int, int, int, int, UINT); typedef BOOL (WINAPI *DrawDibBegin_Type)(HDRAWDIB, HDC, int, int, LPBITMAPINFOHEADER, int, int, UINT); DrawDibBegin_Type pDrawDibBegin = NULL; BOOL WINAPI extDrawDibBegin(HDRAWDIB, HDC, int, int, LPBITMAPINFOHEADER, int, int, UINT); typedef BOOL (WINAPI *DrawDibStart_Type)(HDRAWDIB, LONG); DrawDibStart_Type pDrawDibStart = NULL; BOOL WINAPI extDrawDibStart(HDRAWDIB, LONG); typedef BOOL (WINAPI *DrawDibStop_Type)(HDRAWDIB); DrawDibStop_Type pDrawDibStop = NULL; BOOL WINAPI extDrawDibStop(HDRAWDIB); typedef BOOL (WINAPI *DrawDibEnd_Type)(HDRAWDIB); DrawDibEnd_Type pDrawDibEnd = NULL; BOOL WINAPI extDrawDibEnd(HDRAWDIB); static HookEntryEx_Type Hooks[]={ //{HOOK_HOT_CANDIDATE, 0, "ICSendMessage", (FARPROC)NULL, (FARPROC *)&pICSendMessage, (FARPROC)extICSendMessage}, //{HOOK_HOT_CANDIDATE, 0, "ICOpen", (FARPROC)NULL, (FARPROC *)&pICOpen, (FARPROC)extICOpen}, {HOOK_HOT_CANDIDATE, 0, "MCIWndCreateA", (FARPROC)NULL, (FARPROC *)&pMCIWndCreateA, (FARPROC)extMCIWndCreateA}, // "Man in Black" - beware: this is NOT STDCALL!!! {HOOK_HOT_CANDIDATE, 0, "ICGetDisplayFormat", (FARPROC)NULL, (FARPROC *)&pICGetDisplayFormat, (FARPROC)extICGetDisplayFormat}, // "Man in Black" - beware: this is NOT STDCALL!!! {HOOK_HOT_CANDIDATE, 0, "ICDrawBegin", (FARPROC)NULL, (FARPROC *)&pICDrawBegin, (FARPROC)extICDrawBegin}, // AoE demo: not a STDCALL !! {HOOK_HOT_CANDIDATE, 0, "DrawDibDraw", (FARPROC)NULL, (FARPROC *)&pDrawDibDraw, (FARPROC)extDrawDibDraw}, {HOOK_HOT_CANDIDATE, 0, "DrawDibBegin", (FARPROC)NULL, (FARPROC *)&pDrawDibBegin, (FARPROC)extDrawDibBegin}, {HOOK_HOT_CANDIDATE, 0, "DrawDibStart", (FARPROC)NULL, (FARPROC *)&pDrawDibStart, (FARPROC)extDrawDibStart}, {HOOK_HOT_CANDIDATE, 0, "DrawDibStop", (FARPROC)NULL, (FARPROC *)&pDrawDibStop, (FARPROC)extDrawDibStop}, {HOOK_HOT_CANDIDATE, 0, "DrawDibEnd", (FARPROC)NULL, (FARPROC *)&pDrawDibEnd, (FARPROC)extDrawDibEnd}, {HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator }; FARPROC Remap_vfw_ProcAddress(LPCSTR proc, HMODULE hModule) { FARPROC addr; if (addr=RemapLibraryEx(proc, hModule, Hooks)) return addr; // NULL -> keep the original call address return NULL; } void HookMSV4WLibs(HMODULE module) { HookLibraryEx(module, Hooks, "MSVFW32.dll"); } LRESULT WINAPI extICSendMessage(HIC hic, UINT wMsg, DWORD_PTR dw1, DWORD_PTR dw2) { LRESULT res; OutTraceDW("ICSendMessage: hic=%x wMsg=%x dw1=%x dw2=%x\n", hic, wMsg, dw1, dw2); res=(*pICSendMessage)(hic, wMsg, dw1, dw2); OutTraceDW("ICSendMessage: ret=%x\n", res); return res; } HIC WINAPI extICOpen(DWORD fccType, DWORD fccHandler, UINT wMode) { HIC res; OutTraceDW("ICOpen: fccType=%x fccHandler=%x wMode=%x\n", fccType, fccHandler, wMode); res=(*pICOpen)(fccType, fccHandler, wMode); OutTraceDW("ICOpen: ret=%x\n", res); return res; } /* ICDrawBegin function The ICDrawBegin function initializes the renderer and prepares the drawing destination for drawing. Syntax DWORD ICDrawBegin( HIC hic, DWORD dwFlags, HPALETTE hpal, HWND hwnd, HDC hdc, int xDst, int yDst, int dxDst, int dyDst, LPBITMAPINFOHEADER lpbi, int xSrc, int ySrc, int dxSrc, int dySrc, DWORD dwRate, DWORD dwScale ); Parameters hic Handle to the decompressor to use. dwFlags Decompression flags. The following values are defined. Value Meaning ICDRAW_ANIMATE Application can animate the palette. ICDRAW_CONTINUE Drawing is a continuation of the previous frame. ICDRAW_FULLSCREEN Draws the decompressed data on the full screen. ICDRAW_HDC Draws the decompressed data to a window or a DC. ICDRAW_MEMORYDC DC is off-screen. ICDRAW_QUERY Determines if the decompressor can decompress the data. The driver does not decompress the data. ICDRAW_UPDATING Current frame is being updated rather than played. hpal Handle to the palette used for drawing. hwnd Handle to the window used for drawing. hdc DC used for drawing. xDst The x-coordinate of the upper right corner of the destination rectangle. yDst The y-coordinate of the upper right corner of the destination rectangle. dxDst Width of the destination rectangle. dyDst Height of the destination rectangle. lpbi Pointer to a BITMAPINFOHEADER structure containing the format of the input data to be decompressed. xSrc The x-coordinate of the upper right corner of the source rectangle. ySrc The y-coordinate of the upper right corner of the source rectangle. dxSrc Width of the source rectangle. dySrc Height of the source rectangle. dwRate Frame rate numerator. The frame rate, in frames per second, is obtained by dividing dwRate by dwScale. dwScale Frame rate denominator. The frame rate, in frames per second, is obtained by dividing dwRate by dwScale. Return value Returns ICERR_OK if the renderer can decompress the data or ICERR_UNSUPPORTED otherwise. Remarks The ICDRAW_HDC and ICDRAW_FULLSCREEN flags are mutually exclusive. If an application sets the ICDRAW_HDC flag in dwFlags, the decompressor uses hwnd, hdc, and the parameters defining the destination rectangle (xDst, yDst, dxDst, and dyDst). Your application should set these parameters to the size of the destination rectangle. Specify destination rectangle values relative to the current window or DC. If an application sets the ICDRAW_FULLSCREEN flag in dwFlags, the hwnd and hdc parameters are not used and should be set to NULL. Also, the destination rectangle is not used and its parameters can be set to zero. The source rectangle is relative to the full video frame. The portion of the video frame specified by the source rectangle is stretched or shrunk to fit the destination rectangle. The dwRate and dwScale parameters specify the decompression rate. The integer value specified for dwRate divided by the integer value specified for dwScale defines the frame rate in frames per second. This value is used by the renderer when it is responsible for timing frames during playback. Requirements Minimum supported client Windows 2000 Professional [desktop apps only] Minimum supported server Windows 2000 Server [desktop apps only] Header Vfw.h Library Vfw32.lib DLL Msvfw32.dll */ static char *ExplainMCIWndCreateFlags(DWORD c) { static char eb[256]; unsigned int l; strcpy(eb,"MCIWNDF_"); if (c & MCIWNDF_NOAUTOSIZEWINDOW) strcat(eb, "NOAUTOSIZEWINDOW+"); if (c & MCIWNDF_NOPLAYBAR) strcat(eb, "NOPLAYBAR+"); if (c & MCIWNDF_NOAUTOSIZEMOVIE) strcat(eb, "NOAUTOSIZEMOVIE+"); if (c & MCIWNDF_NOMENU) strcat(eb, "NOMENU+"); if (c & MCIWNDF_SHOWNAME) strcat(eb, "SHOWNAME+"); if (c & MCIWNDF_SHOWPOS) strcat(eb, "SHOWPOS+"); if (c & MCIWNDF_SHOWMODE) strcat(eb, "SHOWMODE+"); if (c & MCIWNDF_NOTIFYMODE) strcat(eb, "NOTIFYMODE+"); if (c & MCIWNDF_NOTIFYPOS) strcat(eb, "NOTIFYPOS+"); if (c & MCIWNDF_NOTIFYSIZE) strcat(eb, "NOTIFYSIZE+"); if (c & MCIWNDF_NOTIFYERROR) strcat(eb, "NOTIFYERROR+"); if (c & MCIWNDF_NOTIFYMEDIAW) strcat(eb, "NOTIFYMEDIAW+"); if (c & MCIWNDF_NOTIFYANSI) strcat(eb, "NOTIFYANSI+"); if (c & MCIWNDF_RECORD) strcat(eb, "RECORD+"); if (c & MCIWNDF_NOERRORDLG) strcat(eb, "NOERRORDLG+"); if (c & MCIWNDF_NOOPEN) strcat(eb, "NOOPEN+"); l=strlen(eb); if (l>strlen("MCIWNDF_")) eb[l-1]=0; // delete last '+' if any else eb[0]=0; return(eb); } HWND extMCIWndCreateA(HWND hwndParent, HINSTANCE hInstance, DWORD dwStyle, LPCTSTR szFile) { HWND g_hwndMCIWnd; OutTraceDW("MCIWndCreateA: hwnd=%x hInst=%x style=%x(%s) file=%s\n", hwndParent, hInstance, dwStyle, ExplainMCIWndCreateFlags(dwStyle), szFile); if(dxw.dwFlags6 & NOMOVIES) { OutTraceDW("MCIWndCreateA: SUPPRESSED\n"); return NULL; } g_hwndMCIWnd = (*pMCIWndCreateA)(hwndParent, hInstance, dwStyle, szFile); // look at https://msdn.microsoft.com/en-us/library/windows/desktop/dd757178%28v=vs.85%29.aspx if(dxw.dwFlags5 & REMAPMCI){ // since there seem to be no way to stretch the movie, we do an attempt to center // the movie on the screen by shifting the video window. // We assume (but we don't really know for sure ...) that the movie was to be rendered // fulscreen using the size of the virtual desktop RECT client; OutTraceDW("MCIWndCreateA: CENTERED\n"); (*pGetClientRect)(dxw.GethWnd(), &client); (*pSetWindowPos)(g_hwndMCIWnd, // window to resize NULL, // z-order: don't care (client.right - dxw.GetScreenWidth()) / 2, // X pos (client.bottom - dxw.GetScreenHeight()) / 2, // Y pos dxw.GetScreenWidth(), // width dxw.GetScreenHeight(), // height SWP_NOZORDER | SWP_NOACTIVATE); //(*pUpdateWindow)(g_hwndMCIWnd); } return g_hwndMCIWnd; } HIC WINAPI extICGetDisplayFormat(HIC hic, LPBITMAPINFOHEADER lpbiIn, LPBITMAPINFOHEADER lpbiOut, int BitDepth, int dx, int dy) { HIC ret; OutTraceDW("ICGetDisplayFormat: hic=%x bitdepth=%d dx=%d dy=%d indepth=%d\n", hic, BitDepth, dx, dy, lpbiIn->biBitCount); ret=(*pICGetDisplayFormat)(hic, lpbiIn, lpbiOut, BitDepth, dx, dy); if(ret){ OutTraceDW("ICGetDisplayFormat: ret=%x outdepth=%d\n", hic, lpbiOut->biBitCount); if(dxw.dwFlags6 & FIXMOVIESCOLOR){ lpbiOut->biBitCount = (WORD)dxw.VirtualPixelFormat.dwRGBBitCount; OutTraceDW("ICGetDisplayFormat: FIXED outdepth=%d\n", lpbiOut->biBitCount); } } else { OutTraceDW("ICGetDisplayFormat ERROR: err=%d\n", GetLastError()); } return ret; } DWORD WINAPIV extICDrawBegin(HIC hic, DWORD dwFlags, HPALETTE hpal, HWND hwnd, HDC hdc, int xDst, int yDst, int dxDst, int dyDst, LPBITMAPINFOHEADER lpbi, int xSrc, int ySrc, int dxSrc, int dySrc, DWORD dwRate, DWORD dwScale) { OutTrace("ICDrawBegin\n"); return (*pICDrawBegin)(hic, dwFlags, hpal, hwnd, hdc, xDst, yDst, dxDst, dyDst, lpbi, xSrc, ySrc, dxSrc, dySrc, dwRate, dwScale); } BOOL WINAPI extDrawDibDraw(HDRAWDIB hdd, HDC hdc, int xDst, int yDst, int dxDst, int dyDst, LPBITMAPINFOHEADER lpbi, LPVOID lpBits, int xSrc, int ySrc, int dxSrc, int dySrc, UINT wFlags) { // Reah intro movie BOOL ret; OutTrace("DrawDibDraw: hdd=%x hdc=%x DEST pos=(%d,%d) size=(%d,%d) SRC pos=(%d,%d) size=(%d,%d) flags=%x\n", hdd, hdc, xDst, yDst, dxDst, dyDst, xSrc, ySrc, dxSrc, dySrc, wFlags); ret = (*pDrawDibDraw)(hdd, hdc, xDst, yDst, dxDst, dyDst, lpbi, lpBits, xSrc, ySrc, dxSrc, dySrc, wFlags); return ret; } BOOL WINAPI extDrawDibBegin(HDRAWDIB hdd, HDC hdc, int dxDest, int dyDest, LPBITMAPINFOHEADER lpbi, int dxSrc, int dySrc, UINT wFlags) { // Reah game transitions BOOL ret; OutTrace("DrawDibBegin: hdd=%x hdc=%x DEST size=(%d,%d) SRC size=(%d,%d) flags=%x\n", hdd, hdc, dxDest, dyDest, dxSrc, dySrc, wFlags); ret = (*pDrawDibBegin)(hdd, hdc, dxDest, dyDest, lpbi, dxSrc, dySrc, wFlags); return ret; } BOOL WINAPI extDrawDibStart(HDRAWDIB hdd, LONG rate) { // Reah game transitions BOOL ret; OutTrace("DrawDibStart: hdd=%x rate=%x\n", hdd, rate); ret = (*pDrawDibStart)(hdd, rate); return ret; } BOOL WINAPI extDrawDibStop(HDRAWDIB hdd) { // Reah game transitions BOOL ret; OutTrace("DrawDibStop: hdd=%x\n", hdd); ret = (*pDrawDibStop)(hdd); return ret; } BOOL WINAPI extDrawDibEnd(HDRAWDIB hdd) { // Reah game transitions BOOL ret; OutTrace("DrawDibEnd: hdd=%x\n", hdd); ret = (*pDrawDibEnd)(hdd); return ret; } ================================================ FILE: dll/msvfwhook.h ================================================ #include "Vfw.h" extern FARPROC Remap_vfw_ProcAddress(LPCSTR, HMODULE); extern void HookMSV4WLibs(HMODULE); typedef LRESULT (WINAPI * ICSendMessage_Type)(HIC, UINT, DWORD_PTR, DWORD_PTR); typedef HIC (WINAPI *ICOpen_Type)(DWORD, DWORD, UINT); typedef HIC (WINAPI *ICGetDisplayFormat_Type)(HIC, LPBITMAPINFOHEADER, LPBITMAPINFOHEADER, int, int, int); //typedef HWND (WINAPI *MCIWndCreateA_Type)(HWND, HINSTANCE, DWORD, LPCTSTR); typedef HWND (*MCIWndCreateA_Type)(HWND, HINSTANCE, DWORD, LPCTSTR); extern LRESULT WINAPI extICSendMessage(HIC, UINT, DWORD_PTR, DWORD_PTR); extern HIC WINAPI extICOpen(DWORD, DWORD, UINT); extern HIC WINAPI extICGetDisplayFormat(HIC, LPBITMAPINFOHEADER, LPBITMAPINFOHEADER, int, int, int); //extern HWND WINAPI extMCIWndCreateA(HWND, HINSTANCE, DWORD, LPCTSTR); extern HWND extMCIWndCreateA(HWND, HINSTANCE, DWORD, LPCTSTR); #ifdef DXWDECLARATIONS #undef DXWEXTERN #undef DXWINITIALIZED #define DXWEXTERN #define DXWINITIALIZED = NULL #else #undef DXWEXTERN #undef DXWINITIALIZED #define DXWEXTERN extern #define DXWINITIALIZED #endif // MSVFW32.dll: DXWEXTERN ICSendMessage_Type pICSendMessage DXWINITIALIZED; DXWEXTERN ICOpen_Type pICOpen DXWINITIALIZED; DXWEXTERN ICGetDisplayFormat_Type pICGetDisplayFormat; DXWEXTERN MCIWndCreateA_Type pMCIWndCreateA DXWINITIALIZED; ================================================ FILE: dll/ole32.cpp ================================================ #include #include #include "dxwnd.h" #include "dxwcore.hpp" #include "syslibs.h" #include "dxhook.h" #include "dxhelper.h" extern void HookModule(HMODULE, int); extern void HookDirectSoundObj(LPDIRECTSOUND *); extern void HookDirectDrawFactory(void *); static BOOL bRecursedHook = FALSE; static HookEntryEx_Type Hooks[]={ {HOOK_HOT_CANDIDATE, 0, "CoCreateInstance", NULL, (FARPROC *)&pCoCreateInstance, (FARPROC)extCoCreateInstance}, {HOOK_HOT_CANDIDATE, 0, "CoCreateInstanceEx", NULL, (FARPROC *)&pCoCreateInstanceEx, (FARPROC)extCoCreateInstanceEx}, //{HOOK_HOT_CANDIDATE, 0, "CoInitialize", NULL, (FARPROC *)&pCoInitialize, (FARPROC)extCoInitialize}, //{HOOK_HOT_CANDIDATE, 0, "CoUninitialize", NULL, (FARPROC *)&pCoUninitialize, (FARPROC)extCoUninitialize}, {HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator }; extern HRESULT WINAPI extDirectDrawCreate(GUID FAR *, LPDIRECTDRAW FAR *, IUnknown FAR *); extern HRESULT WINAPI extDirectDrawCreateEx(GUID FAR *, LPDIRECTDRAW FAR *, REFIID, IUnknown FAR *); void HookOle32(HMODULE module) { HookLibraryEx(module, Hooks, "ole32.dll"); } FARPROC Remap_ole32_ProcAddress(LPCSTR proc, HMODULE hModule) { FARPROC addr; if (addr=RemapLibraryEx(proc, hModule, Hooks)) return addr; return NULL; } // so far, there are 4 additional libraries that could be loaded by means of a CoCreateInstance call.... #define ADDITIONAL_MODULE_COUNT 4 struct { BOOL Hooked; char *ModuleName; } AddedModules[ADDITIONAL_MODULE_COUNT]= { {FALSE, "quartz"}, //{FALSE, "ddrawex"}, //v2.03.71: hooking this library makes "WhiteOut" crash {FALSE, "amstream"}, {FALSE, "dplayx"}, {0, 0} // it seems necessary to also repeat the hook the main module .... }; static void HookAdditionalModules() { for(int i=0; i%x\n", *ppv, *(DWORD *)*ppv); switch (rclsid.Data1) { case 0xD7B70EE0: // CLSID_DirectDraw: // v2.03.18: fixed OutTraceDW("CoCreateInstance: CLSID_DirectDraw object\n"); switch (*(DWORD *)&riid){ LPDIRECTDRAW lpOldDDraw; case 0x6C14DB80: // must go through DirectDrawCreate: needed for "Darius Gaiden" OutTraceDW("CoCreateInstance: IID_DirectDraw RIID\n"); res=extDirectDrawCreate(NULL, &lpOldDDraw, 0); if(res)OutTraceDW("DirectDrawCreate: res=%x(%s)\n", res, ExplainDDError(res)); res=lpOldDDraw->QueryInterface(IID_IDirectDraw, (LPVOID *)ppv); if(res)OutTraceDW("QueryInterface: res=%x(%s)\n", res, ExplainDDError(res)); lpOldDDraw->Release(); break; case 0xB3A6F3E0: OutTraceDW("CoCreateInstance: IID_DirectDraw2 RIID\n"); res=extDirectDrawCreate(NULL, &lpOldDDraw, 0); if(res)OutTraceDW("DirectDrawCreate: res=%x(%s)\n", res, ExplainDDError(res)); res=lpOldDDraw->QueryInterface(IID_IDirectDraw2, (LPVOID *)ppv); if(res)OutTraceDW("QueryInterface: res=%x(%s)\n", res, ExplainDDError(res)); lpOldDDraw->Release(); break; case 0x9C59509A: OutTraceDW("CoCreateInstance: IID_DirectDraw4 RIID\n"); res=extDirectDrawCreate(NULL, &lpOldDDraw, 0); if(res)OutTraceDW("DirectDrawCreate: res=%x(%s)\n", res, ExplainDDError(res)); res=lpOldDDraw->QueryInterface(IID_IDirectDraw4, (LPVOID *)ppv); if(res)OutTraceDW("QueryInterface: res=%x(%s)\n", res, ExplainDDError(res)); lpOldDDraw->Release(); break; case 0x15E65EC0: OutTraceDW("CoCreateInstance: IID_DirectDraw7 RIID\n"); res=extDirectDrawCreateEx(NULL, (LPDIRECTDRAW *)ppv, IID_IDirectDraw7, 0); if(res)OutTraceDW("DirectDrawCreateEx: res=%x(%s)\n", res, ExplainDDError(res)); break; case 0xE436EBB3: break; } break; case 0xA65B8071: // CLSID_DxDiagProvider: if ((rclsid.Data2==0x3BFE) && (rclsid.Data3 == 0x4213)){ OutTraceDW("CoCreateInstance: CLSID_DxDiagProvider object\n"); res=HookDxDiag(riid, ppv); } break; case 0x47d4d946: // CLSID_DirectSound OutTraceDW("CoCreateInstance: CLSID_DirectSound object\n"); HookDirectSoundObj((LPDIRECTSOUND *)ppv); break; case 0x4fd2a832: // CLSID_DirectDrawFactory if ((rclsid.Data2==0x86c8) && (rclsid.Data3 == 0x11d0)){ OutTraceDW("CoCreateInstance: CLSID_DirectDrawFactory object\n"); HookDirectDrawFactory((void *)ppv); } break; default: break; } HookAdditionalModules(); OutTraceDW("CoCreateInstance: res=%x ppv=%x->%x\n", res, *ppv, *(DWORD *)*ppv); return S_OK; } HRESULT STDAPICALLTYPE extCoCreateInstanceEx(REFCLSID rclsid, IUnknown *punkOuter, DWORD dwClsCtx, COSERVERINFO *pServerInfo, DWORD dwCount, MULTI_QI *pResults) { HRESULT res; DWORD i; OutTraceDW("CoCreateInstanceEx: rclsid=%x UnkOuter=%x ClsContext=%x Count=%d\n", rclsid.Data1, punkOuter, dwClsCtx, dwCount); res=(*pCoCreateInstanceEx)(rclsid, punkOuter, dwClsCtx, pServerInfo, dwCount, pResults); if(res) { OutTraceE("CoCreateInstanceEx: ERROR res=%x\n", res); return res; } if(bRecursedHook) return res; for(i=0; iQueryInterface(IID_IDirectDraw2, (LPVOID *)ppv); if(res)OutTraceDW("QueryInterface: res=%x(%s)\n", res, ExplainDDError(res)); lpOldDDraw->Release(); break; case 0x9C59509A: OutTraceDW("CoCreateInstanceEx: IID_DirectDraw4 RIID\n"); res=extDirectDrawCreate(NULL, &lpOldDDraw, 0); if(res)OutTraceDW("DirectDrawCreate: res=%x(%s)\n", res, ExplainDDError(res)); res=lpOldDDraw->QueryInterface(IID_IDirectDraw4, (LPVOID *)ppv); if(res)OutTraceDW("QueryInterface: res=%x(%s)\n", res, ExplainDDError(res)); lpOldDDraw->Release(); break; case 0x15E65EC0: OutTraceDW("CoCreateInstanceEx: IID_DirectDraw7 RIID\n"); res=extDirectDrawCreateEx(NULL, (LPDIRECTDRAW *)ppv, IID_IDirectDraw7, 0); if(res)OutTraceDW("DirectDrawCreateEx: res=%x(%s)\n", res, ExplainDDError(res)); break; case 0xE436EBB3: break; } break; case 0xA65B8071: // CLSID_DxDiagProvider: if ((rclsid.Data2==0x3BFE) && (rclsid.Data3 == 0x4213)){ OutTraceDW("CoCreateInstanceEx: CLSID_DxDiagProvider object\n"); res=HookDxDiag(riid, ppv); } break; case 0x4fd2a832: // CLSID_DirectDrawFactory if ((rclsid.Data2==0x86c8) && (rclsid.Data3 == 0x11d0)){ OutTraceDW("CoCreateInstanceEx: CLSID_DirectDrawFactory object\n"); HookDirectDrawFactory((LPDIRECTSOUND *)ppv); } break; } } HookAdditionalModules(); OutTraceDW("CoCreateInstanceEx: res=%x\n", res); return res; } HRESULT WINAPI extCoInitialize(LPVOID pvReserved) { HRESULT res; OutTraceDW("CoInitialize: Reserved=%x\n", pvReserved); res=(*pCoInitialize)(pvReserved); return res; } void WINAPI extCoUninitialize(void) { OutTraceDW("CoUninitialize\n"); (*pCoUninitialize)(); } ================================================ FILE: dll/opengl.cpp ================================================ #define _CRT_SECURE_NO_WARNINGS #include "stdio.h" #include "dxwnd.h" #include "dxwcore.hpp" #include "syslibs.h" #include "dxhook.h" #include "gl\gl.h" #include "gl\wglext.h" #include "gl\glext.h" #define DXWDECLARATIONS TRUE #include "glhook.h" #undef DXWDECLARATIONS #ifndef COMPRESSED_RGB_S3TC_DXT1_EXT #define COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0 #define COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1 #define COMPRESSED_RGBA_S3TC_DXT3_EXT 0x83F2 #define COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3 #endif //#include "logall.h" typedef void (WINAPI *glutFullScreen_Type)(void); glutFullScreen_Type pglutFullScreen; void WINAPI extglutFullScreen(void); typedef void (WINAPI *glutInitWindowSize_Type)(int, int); glutInitWindowSize_Type pglutInitWindowSize; void extglutInitWindowSize(int, int); typedef void (WINAPI *glutInitWindowPosition_Type)(int, int); glutInitWindowPosition_Type pglutInitWindowPosition; void extglutInitWindowPosition(int, int); typedef void (WINAPI *glutSetWindow_Type)(HWND); glutSetWindow_Type pglutSetWindow; void WINAPI extglutSetWindow(HWND); typedef const GLubyte* (WINAPI *glGetString_Type)(GLenum); glGetString_Type pglGetString; const GLubyte* WINAPI extglGetString(GLenum); typedef char* (WINAPI *wglGetExtensionsStringEXT_Type)(void); wglGetExtensionsStringEXT_Type pwglGetExtensionsStringEXT; char* WINAPI extwglGetExtensionsStringEXT(void); typedef const GLubyte* (WINAPI *gluGetString_Type)(GLenum); gluGetString_Type pgluGetString; const GLubyte* WINAPI extgluGetString(GLenum); //void WINAPI extglDrawPixels(GLsizei, GLsizei, GLenum, GLenum, const GLvoid *); //typedef void (WINAPI *glDrawPixels_Type)(GLsizei, GLsizei, GLenum, GLenum, const GLvoid *); //glDrawPixels_Type pglDrawPixels = NULL; static HookEntryEx_Type Hooks[]={ {HOOK_IAT_CANDIDATE, 0, "glGetError", NULL, (FARPROC *)&pglGetError, (FARPROC)extglGetError}, {HOOK_IAT_CANDIDATE, 0, "glViewport", NULL, (FARPROC *)&pglViewport, (FARPROC)extglViewport}, {HOOK_IAT_CANDIDATE, 0, "glScissor", NULL, (FARPROC *)&pglScissor, (FARPROC)extglScissor}, {HOOK_IAT_CANDIDATE, 0, "glGetIntegerv", NULL, (FARPROC *)&pglGetIntegerv, (FARPROC)&extglGetIntegerv}, {HOOK_IAT_CANDIDATE, 0, "glDrawBuffer", NULL, (FARPROC *)&pglDrawBuffer, (FARPROC)extglDrawBuffer}, {HOOK_IAT_CANDIDATE, 0, "glPolygonMode", NULL, (FARPROC *)&pglPolygonMode, (FARPROC)extglPolygonMode}, {HOOK_IAT_CANDIDATE, 0, "glGetFloatv", NULL, (FARPROC *)&pglGetFloatv, (FARPROC)extglGetFloatv}, {HOOK_IAT_CANDIDATE, 0, "glClear", NULL, (FARPROC *)&pglClear, (FARPROC)extglClear}, {HOOK_IAT_CANDIDATE, 0, "glTexImage2D", NULL, (FARPROC *)&pglTexImage2D, (FARPROC)extglTexImage2D}, //{HOOK_IAT_CANDIDATE, 0, "glDrawPixels", NULL, (FARPROC *)&pglDrawPixels, (FARPROC)extglDrawPixels}, {HOOK_IAT_CANDIDATE, 0, "glPixelZoom", NULL, (FARPROC *)&pglPixelZoom, (FARPROC)extglPixelZoom}, //{HOOK_IAT_CANDIDATE, 0, "glBegin", NULL, (FARPROC *)&pglBegin, (FARPROC)extglBegin}, {HOOK_IAT_CANDIDATE, 0, "glBindTexture", NULL, (FARPROC *)&pglBindTexture, (FARPROC)extglBindTexture}, //{HOOK_IAT_CANDIDATE, 0, "glCopyTexImage2D", NULL, (FARPROC *)&pglCopyTexImage2D, (FARPROC)extglCopyTexImage2D}, //{HOOK_IAT_CANDIDATE, 0, "glPixelStorei", NULL, (FARPROC *)&pglPixelStorei, (FARPROC)extglPixelStorei}, {HOOK_IAT_CANDIDATE, 0, "glGetString", NULL, (FARPROC *)&pglGetString, (FARPROC)extglGetString}, {HOOK_IAT_CANDIDATE, 0, "wglCreateContext", NULL, (FARPROC *)&pwglCreateContext, (FARPROC)extwglCreateContext}, {HOOK_IAT_CANDIDATE, 0, "wglMakeCurrent", NULL, (FARPROC *)&pwglMakeCurrent, (FARPROC)extwglMakeCurrent}, {HOOK_IAT_CANDIDATE, 0, "wglGetProcAddress", NULL, (FARPROC *)&pwglGetProcAddress, (FARPROC)extwglGetProcAddress}, {HOOK_IAT_CANDIDATE, 0, "wglGetExtensionsStringEXT", NULL, (FARPROC *)&pwglGetExtensionsStringEXT, (FARPROC)extwglGetExtensionsStringEXT}, {HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator }; // to do: // glutInitDisplayMode // glutCreateWindow, glutCreateSubWindow // glutPositionWindow, glutReshapeWindow // glGetFloatv ( GL_SCISSOR_BOX - GL_VIEWPORT ) static HookEntryEx_Type GlutHooks[]={ {HOOK_IAT_CANDIDATE, 0, "glutFullScreen", NULL, (FARPROC *)&pglutFullScreen, (FARPROC)extglutFullScreen}, {HOOK_IAT_CANDIDATE, 0, "glutInitWindowSize", NULL, (FARPROC *)&pglutInitWindowSize, (FARPROC)extglutInitWindowSize}, {HOOK_IAT_CANDIDATE, 0, "glutInitWindowPosition", NULL, (FARPROC *)&pglutInitWindowPosition, (FARPROC)extglutInitWindowPosition}, {HOOK_IAT_CANDIDATE, 0, "glutSetWindow", NULL, (FARPROC *)&pglutSetWindow, (FARPROC)extglutSetWindow}, {HOOK_IAT_CANDIDATE, 0, "gluGetString", NULL, (FARPROC *)&pgluGetString, (FARPROC)extgluGetString}, {HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator }; FARPROC Remap_gl_ProcAddress(LPCSTR proc, HMODULE hModule) { FARPROC addr; if(!(dxw.dwFlags2 & HOOKOPENGL)) return NULL; if (addr=RemapLibraryEx(proc, hModule, Hooks)) return addr; if (dxw.dwFlags7 & HOOKGLUT32) if(addr=RemapLibraryEx(proc, hModule, GlutHooks)) return addr; // NULL -> keep the original call address return NULL; } PROC Remap_wgl_ProcAddress(LPCSTR proc) { int i; HookEntryEx_Type *Hook; if(!(dxw.dwFlags2 & HOOKOPENGL)) return NULL; for(i=0; Hooks[i].APIName; i++){ Hook=&Hooks[i]; if (!strcmp(proc,Hook->APIName)){ if (Hook->StoreAddress) { // avoid clearing function pointers PROC Addr = (*pwglGetProcAddress)(proc); if(Addr) *(Hook->StoreAddress)=Addr; } OutTraceDW("GetProcAddress: hooking proc=%s at addr=%x\n", ProcToString(proc), (Hook->StoreAddress) ? *(Hook->StoreAddress) : 0); return Hook->HookerAddress; } } // NULL -> keep the original call address return NULL; } void ForceHookOpenGL(HMODULE base) // to do ..... { HMODULE hGlLib; static int DoOnce=FALSE; if(DoOnce) return; DoOnce = TRUE; hGlLib=(*pLoadLibraryA)("OpenGL32.dll"); OutTrace("hGlLib=%x\n",hGlLib); if(!hGlLib){ OutTraceE("LoadLibrary(\"OpenGL32.dll\") ERROR: err=%d at %d\n", GetLastError(), __LINE__); return; } int i; HookEntryEx_Type *Hook; for(i=0; Hooks[i].APIName; i++){ Hook=&Hooks[i]; Hook->OriginalAddress = GetProcAddress(hGlLib, Hook->APIName); if(Hook->OriginalAddress) { HookAPI(base, "opengl32", Hook->StoreAddress, Hook->APIName, Hook->HookerAddress); } } return; } void HookOpenGL(HMODULE module, char *customlib) { if(!(dxw.dwFlags2 & HOOKOPENGL)) return; char *DefOpenGLModule="OpenGL32.dll"; if (!customlib) customlib=DefOpenGLModule; OutTraceDW("HookOpenGL module=%x lib=\"%s\" forced=%x\n", module, customlib, (dxw.dwFlags3 & FORCEHOOKOPENGL)?1:0); if (dxw.dwFlags3 & FORCEHOOKOPENGL) ForceHookOpenGL(module); else HookLibraryEx(module, Hooks, customlib); if(dxw.dwFlags7 & HOOKGLUT32) HookLibraryEx(module, GlutHooks, "glut32.dll"); return; } static char *ExplainTarget(GLint t) { char *p; switch(t){ case GL_TEXTURE_1D: p="GL_TEXTURE_1D"; break; case GL_TEXTURE_2D: p="GL_TEXTURE_2D"; break; case GL_TEXTURE_3D: p="GL_TEXTURE_3D"; break; case GL_PROXY_TEXTURE_2D: p="GL_PROXY_TEXTURE_2D"; break; case GL_TEXTURE_1D_ARRAY: p="GL_TEXTURE_1D_ARRAY"; break; case GL_PROXY_TEXTURE_1D_ARRAY: p="GL_PROXY_TEXTURE_1D_ARRAY"; break; case GL_TEXTURE_RECTANGLE: p="GL_TEXTURE_RECTANGLE"; break; case GL_PROXY_TEXTURE_RECTANGLE: p="GL_PROXY_TEXTURE_RECTANGLE"; break; case GL_TEXTURE_CUBE_MAP_POSITIVE_X: p="GL_TEXTURE_CUBE_MAP_POSITIVE_X"; break; case GL_TEXTURE_CUBE_MAP_NEGATIVE_X: p="GL_TEXTURE_CUBE_MAP_NEGATIVE_X"; break; case GL_TEXTURE_CUBE_MAP_POSITIVE_Y: p="GL_TEXTURE_CUBE_MAP_POSITIVE_Y"; break; case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y: p="GL_TEXTURE_CUBE_MAP_NEGATIVE_Y"; break; case GL_TEXTURE_CUBE_MAP_POSITIVE_Z: p="GL_TEXTURE_CUBE_MAP_POSITIVE_Z"; break; case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z: p="GL_TEXTURE_CUBE_MAP_NEGATIVE_Z"; break; case GL_TEXTURE_CUBE_MAP: p="GL_TEXTURE_CUBE_MAP"; break; default: p="???"; break; } return p; } GLenum WINAPI extglGetError() { // to avoid dependencies on opengl32.dll if (pglGetError) return (*pglGetError)(); return GL_NO_ERROR; } void WINAPI extglViewport(GLint x, GLint y, GLsizei width, GLsizei height) { RECT client; POINT p={0,0}; HWND hwnd; OutTraceOGL("glViewport: pos=(%d,%d) size=(%d,%d)\n", x, y, width, height); hwnd=dxw.GethWnd(); (*pGetClientRect)(hwnd, &client); if(IsDebug) OutTrace("glViewport: DEBUG hwnd=%x win=(%d,%d) screen=(%d,%d)\n", hwnd, client.right, client.bottom, dxw.GetScreenWidth(), dxw.GetScreenHeight()); if(x==CW_USEDEFAULT) x=0; if(y==CW_USEDEFAULT) y=0; x = (x * (GLint)client.right) / (GLint)dxw.GetScreenWidth(); y = (y * (GLint)client.bottom) / (GLint)dxw.GetScreenHeight(); width = (width * (GLint)client.right) / (GLint)dxw.GetScreenWidth(); height = (height * (GLint)client.bottom) / (GLint)dxw.GetScreenHeight(); OutTraceDW("glViewport: remapped pos=(%d,%d) size=(%d,%d)\n", x, y, width, height); (*pglViewport)(x, y, width, height); } void WINAPI extglScissor(GLint x, GLint y, GLsizei width, GLsizei height) { RECT client; POINT p={0,0}; //if (dxw.dwFlags2 & HANDLEFPS) if(dxw.HandleFPS()) return; (*pGetClientRect)(dxw.GethWnd(), &client); OutTraceOGL("glScissor: pos=(%d,%d) size=(%d,%d)\n", x, y, width, height); x = (x * (GLint)client.right) / (GLint)dxw.GetScreenWidth(); y = (y * (GLint)client.bottom) / (GLint)dxw.GetScreenHeight(); width = (width * (GLint)client.right) / (GLint)dxw.GetScreenWidth(); height = (height * (GLint)client.bottom) / (GLint)dxw.GetScreenHeight(); OutTraceDW("glScissor: remapped pos=(%d,%d) size=(%d,%d)\n", x, y, width, height); (*pglScissor)(x, y, width, height); } void WINAPI extglGetIntegerv(GLenum pname, GLint *params) { (*pglGetIntegerv)(pname, params); OutTraceB("glGetIntegerv: pname=%d\n", pname); if(pname == GL_VIEWPORT){ RECT client; OutTraceDW("glGetIntegerv(GL_VIEWPORT): pos=(%i,%i) siz=(%i,%i)\n", params[0], params[1], params[2], params[3]); (*pGetClientRect)(dxw.GethWnd(), &client); params[0] = (params[0] * dxw.GetScreenWidth()) / client.right; params[1] = (params[1] * dxw.GetScreenHeight()) / client.bottom; params[2] = (params[2] * dxw.GetScreenWidth()) / client.right; params[3] = (params[3] * dxw.GetScreenHeight()) / client.bottom; OutTraceDW("glGetIntegerv(GL_VIEWPORT): FIXED pos=(%i,%i) siz=(%i,%i)\n", params[0], params[1], params[2], params[3]); } } void WINAPI extglDrawBuffer(GLenum mode) { if (IsDebug) OutTrace("glDrawBuffer: mode=%x\n", mode); if(dxw.dwFlags2 & WIREFRAME) (*pglClear)(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_STENCIL_BUFFER_BIT) ; // clear screen for wireframe mode.... // handle FPS only to backbuffer updates (if stereo, on left backbuffer...) // using the frontbuffer seems less reliable: Return to Castle Wolfenstein doesn't use it at all! if (dxw.dwFlags2 & HANDLEFPS){ switch (mode){ //case GL_FRONT_LEFT: case GL_BACK_LEFT: //case GL_FRONT: case GL_BACK: case GL_LEFT: case GL_FRONT_AND_BACK: if(dxw.HandleFPS()) return; } } (*pglDrawBuffer)(mode); dxw.ShowOverlay(); } void WINAPI extglPolygonMode(GLenum face, GLenum mode) { OutTraceOGL("glPolygonMode: face=%x mode=%x\n", face, mode); //OutTraceDW("glPolygonMode: extglPolygonMode=%x pglPolygonMode=%x\n", extglPolygonMode, pglPolygonMode); if(dxw.dwFlags2 & WIREFRAME) { OutTraceDW("glPolygonMode: WIREFRAME forcind mode=GL_LINE\n"); mode = GL_LINE; // trick to set wireframe mode.... } (*pglPolygonMode)(face, mode); return; } void WINAPI extglGetFloatv(GLenum pname, GLboolean *params) { OutTraceOGL("glGetFloatv: pname=%x\n", pname); (*pglGetFloatv)(pname, params); return; } void WINAPI extglClear(GLbitfield mask) { (*pglClear)(mask); return; } //BEWARE: SetPixelFormat must be issued on the same hdc used by OpenGL wglCreateContext, otherwise // a failure err=2000 ERROR INVALID PIXEL FORMAT occurs!! HGLRC WINAPI extwglCreateContext(HDC hdc) { HGLRC ret; OutTraceOGL("wglCreateContext: hdc=%x\n", hdc); // v2.02.31: don't let it use desktop hdc if(dxw.IsRealDesktop(WindowFromDC(hdc))){ HDC oldhdc = hdc; hdc=(*pGDIGetDC)(dxw.GethWnd()); OutTraceDW("wglCreateContext: remapped desktop hdc=%x->%x hWnd=%x\n", oldhdc, hdc, dxw.GethWnd()); } ret=(*pwglCreateContext)(hdc); if(ret){ HWND hwnd; hwnd=WindowFromDC(hdc); dxw.SethWnd(hwnd); OutTraceDW("wglCreateContext: SET hwnd=%x\n", hwnd); } else { OutTraceDW("wglCreateContext: ERROR err=%d\n", GetLastError()); } return ret; } PROC WINAPI extwglGetProcAddress(LPCSTR proc) { PROC procaddr; OutTraceOGL("wglGetProcAddress: proc=%s\n", proc); procaddr=Remap_wgl_ProcAddress(proc); if (!procaddr) procaddr=(*pwglGetProcAddress)(proc); return procaddr; } BOOL WINAPI extwglMakeCurrent(HDC hdc, HGLRC hglrc) { BOOL ret; OutTraceOGL("wglMakeCurrent: hdc=%x hglrc=%x\n", hdc, hglrc); // v2.02.31: don't let it use desktop hdc if(dxw.IsDesktop(WindowFromDC(hdc))){ HDC oldhdc = hdc; hdc=(*pGDIGetDC)(dxw.GethWnd()); OutTraceDW("wglMakeCurrent: remapped desktop hdc=%x->%x\n", oldhdc, hdc); } ret=(*pwglMakeCurrent)(hdc, hglrc); if(ret){ HWND hWnd; hWnd = WindowFromDC(hdc); OutTraceDW("wglMakeCurrent: setting hwnd=%x\n", hWnd); dxw.SethWnd(hWnd); } return ret; } static unsigned int Hash(BYTE *buf, int len) { unsigned int b = 378551; unsigned int a = 63689; DWORD hash = 0; for(int i = 0; i < len; i++){ hash = hash * a + buf[i]; a = a * b; } return hash; } static void glTextureDump(GLint internalFormat, GLenum Format, GLsizei w, GLsizei h, GLenum type, const GLvoid * data) { int iSurfaceSize, iScanLineSize; static int MinTexX, MinTexY, MaxTexX, MaxTexY; static BOOL DoOnce = TRUE; char pszFile[MAX_PATH]; WORD dwRGBBitCount; DWORD dwRBitMask, dwGBitMask, dwBBitMask, dwABitMask; char *sType; if(DoOnce){ char sProfilePath[MAX_PATH]; sprintf_s(sProfilePath, MAX_PATH, "%s\\dxwnd.ini", GetDxWndPath()); MinTexX=GetPrivateProfileInt("Texture", "MinTexX", 0, sProfilePath); MaxTexX=GetPrivateProfileInt("Texture", "MaxTexX", 0, sProfilePath); MinTexY=GetPrivateProfileInt("Texture", "MinTexY", 0, sProfilePath); MaxTexY=GetPrivateProfileInt("Texture", "MaxTexY", 0, sProfilePath); OutTrace("TextureDump: size min=(%dx%d) max=(%dx%d)\n", MinTexX, MinTexY, MaxTexX, MaxTexY); sprintf_s(pszFile, MAX_PATH, "%s\\texture.out", GetDxWndPath()); CreateDirectory(pszFile, NULL); DoOnce = FALSE; } if((MinTexX && (wMaxTexX)) || (MaxTexY && (h>MaxTexY))) { OutTrace("TextureDump: SKIP big texture\n"); return; } switch(internalFormat){ case GL_TRIANGLES: break; // the only safe for now .... case GL_QUADS: case GL_RGB: // from "Alone in the Dark the new nightmare" ..... case GL_RGBA: default: return; } // temporary .... dwRBitMask = 0x000000FF; dwGBitMask = 0x0000FF00; dwBBitMask = 0x00FF0000; dwABitMask = 0xFF000000; dwRGBBitCount = 32; // format: GL_RED?, GL_GREEN?, GL_BLUE?, GL_RG?, GL_RGB?, GL_BGR?, GL_RGBA?, GL_BGRA // type: GL_UNSIGNED_BYTE?, GL_BYTE?, GL_UNSIGNED_SHORT?, GL_SHORT?, GL_UNSIGNED_INT?, GL_INT?, // GL_FLOAT?, GL_UNSIGNED_BYTE_3_3_2?, GL_UNSIGNED_BYTE_2_3_3_REV?, GL_UNSIGNED_SHORT_5_6_5?, GL_UNSIGNED_SHORT_5_6_5_REV?, // GL_UNSIGNED_SHORT_4_4_4_4?, GL_UNSIGNED_SHORT_4_4_4_4_REV?, GL_UNSIGNED_SHORT_5_5_5_1?, GL_UNSIGNED_SHORT_1_5_5_5_REV?, // GL_UNSIGNED_INT_8_8_8_8?, GL_UNSIGNED_INT_8_8_8_8_REV?, GL_UNSIGNED_INT_10_10_10_2?, GL_UNSIGNED_INT_2_10_10_10_REV sType = "unknown"; dwRGBBitCount = 0; switch(Format){ case GL_RGB: case GL_RGBA: switch(type){ case GL_BYTE: case GL_UNSIGNED_BYTE: // Daikatana, Doom 3 dwRBitMask = 0x000000FF; dwGBitMask = 0x0000FF00; dwBBitMask = 0x00FF0000; dwABitMask = (Format == GL_RGBA) ? 0xFF000000 : 0x00000000; dwRGBBitCount = 32; sType = (Format == GL_RGBA) ? "RGBA888" : "RGB888"; break; } break; case GL_BGR: case GL_BGRA: switch(type){ case GL_BYTE: case GL_UNSIGNED_BYTE: // ??? dwRBitMask = 0x00FF0000; dwGBitMask = 0x0000FF00; dwBBitMask = 0x000000FF; dwABitMask = (Format == GL_RGBA) ? 0xFF000000 : 0x00000000; dwRGBBitCount = 32; sType = (Format == GL_RGBA) ? "RGBA888" : "RGB888"; break; } break; } if(!dwRGBBitCount) return; iSurfaceSize = w * h; while (TRUE) { FILE *hf; BITMAPFILEHEADER hdr; // bitmap file-header BITMAPV4HEADER pbi; // bitmap info-header memset((void *)&pbi, 0, sizeof(BITMAPV4HEADER)); pbi.bV4Size = sizeof(BITMAPV4HEADER); pbi.bV4Width = w; pbi.bV4Height = h; pbi.bV4BitCount = dwRGBBitCount; pbi.bV4SizeImage = ((w * dwRGBBitCount + 0x1F) & ~0x1F)/8 * h; pbi.bV4Height = - h; pbi.bV4Planes = 1; pbi.bV4V4Compression = BI_BITFIELDS; if(pbi.bV4BitCount == 8) pbi.bV4V4Compression = BI_RGB; pbi.bV4XPelsPerMeter = 1; pbi.bV4YPelsPerMeter = 1; pbi.bV4ClrUsed = 0; if(pbi.bV4BitCount == 8) pbi.bV4ClrUsed = 256; pbi.bV4ClrImportant = 0; pbi.bV4RedMask = dwRBitMask; pbi.bV4GreenMask = dwGBitMask; pbi.bV4BlueMask = dwBBitMask; pbi.bV4AlphaMask = dwABitMask; pbi.bV4CSType = LCS_CALIBRATED_RGB; iScanLineSize = ((w * dwRGBBitCount + 0x1F) & ~0x1F)/8; // calculate the bitmap hash OutTraceB("glTextureDump: hash linesize=%d h=%d\n", iScanLineSize, h); DWORD hash = Hash((BYTE *)data, iScanLineSize * h); // Create the .BMP file. //sprintf_s(pszFile, MAX_PATH, "%s\\texture.out\\texture.%03d.%03d.%s.%08X.bmp", // GetDxWndPath(), w, h, sType, hash); sprintf_s(pszFile, MAX_PATH, "%s\\texture.out\\texture.I%x.F%x.T%x.%03d.%03d.%08X.bmp", GetDxWndPath(), internalFormat, Format, type, w, h, hash); OutTrace("writing to %s\n", pszFile); hf = fopen(pszFile, "wb"); if(!hf) break; hdr.bfType = 0x4d42; // 0x42 = "B" 0x4d = "M" // Compute the size of the entire file. hdr.bfSize = (DWORD) (sizeof(BITMAPFILEHEADER) + pbi.bV4Size + pbi.bV4ClrUsed * sizeof(RGBQUAD) + pbi.bV4SizeImage); hdr.bfReserved1 = 0; hdr.bfReserved2 = 0; // Compute the offset to the array of color indices. hdr.bfOffBits = (DWORD) sizeof(BITMAPFILEHEADER) + pbi.bV4Size + pbi.bV4ClrUsed * sizeof (RGBQUAD); // Copy the BITMAPFILEHEADER into the .BMP file. fwrite((LPVOID)&hdr, sizeof(BITMAPFILEHEADER), 1, hf); // Copy the BITMAPINFOHEADER array into the file. fwrite((LPVOID)&pbi, sizeof(BITMAPV4HEADER), 1, hf); // Copy the array of color indices into the .BMP file. //for(int y=0; y<(int)ddsd.dwHeight; y++) // fwrite((BYTE *)ddsd.lpSurface + (y*ddsd.lPitch), iScanLineSize, 1, hf); fwrite((BYTE *)data, iScanLineSize, h, hf); // Close the .BMP file. fclose(hf); break; } } void WINAPI extglTexImage2D( GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid * data) { OutTraceOGL("glTexImage2D: TEXTURE target=%x(%s) level=%x internalformat=%x format=%x type=%x size=(%dx%d)\n", target, ExplainTarget(target), level, internalFormat, format, type, width, height); switch(target){ //case GL_PROXY_TEXTURE_RECTANGLE: //case GL_PROXY_TEXTURE_2D: case GL_TEXTURE_2D: case GL_TEXTURE_RECTANGLE: switch(dxw.dwFlags5 & TEXTUREMASK){ default: case TEXTUREHIGHLIGHT: //glTextureHighlight(s); break; case TEXTUREDUMP: glTextureDump(internalFormat, format, width, height, type, data); break; case TEXTUREHACK: //glTextureHack(...); break; case TEXTURETRANSP: //glTextureTransp(...); break; } break; } if(dxw.dwFlags4 & NOTEXTURES) return; return (*pglTexImage2D)(target, level, internalFormat, width, height, border, format, type, data); } void WINAPI extglCopyTexImage2D( GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) { OutTraceOGL("glCopyTexImage2D: TEXTURE target=%x(%s) level=%x internalformat=%x pos=(%d,%d) size=(%dx%d) border=%d\n", target, ExplainTarget(target), level, internalFormat, x, y, width, height, border); switch(target){ //case GL_PROXY_TEXTURE_RECTANGLE: //case GL_PROXY_TEXTURE_2D: case GL_TEXTURE_2D: case GL_TEXTURE_RECTANGLE: switch(dxw.dwFlags5 & TEXTUREMASK){ default: case TEXTUREHIGHLIGHT: //glTextureHighlight(s); break; case TEXTUREDUMP: //glTextureDump(internalFormat, 0, width, height, 0, glGet(GL_READ_BUFFER)); break; case TEXTUREHACK: //glTextureHack(...); break; case TEXTURETRANSP: //glTextureTransp(...); break; } break; } if(dxw.dwFlags4 & NOTEXTURES) return; return (*pglCopyTexImage2D)(target, level, internalFormat, x, y, width, height, border); } #if 0 char *ExplainDrawPixelsFormat(DWORD c) { static char *eb; switch(c) { case GL_COLOR_INDEX: eb="GL_COLOR_INDEX"; break; case GL_STENCIL_INDEX: eb="GL_STENCIL_INDEX"; break; case GL_DEPTH_COMPONENT: eb="GL_DEPTH_COMPONENT"; break; case GL_RGB: eb="GL_RGB"; break; case GL_BGR: eb="GL_BGR"; break; case GL_RGBA: eb="GL_RGBA"; break; case GL_BGRA: eb="GL_BGRA"; break; case GL_RED: eb="GL_RED"; break; case GL_GREEN: eb="GL_GREEN"; break; case GL_BLUE: eb="GL_BLUE"; break; case GL_ALPHA: eb="GL_ALPHA"; break; case GL_LUMINANCE: eb="GL_LUMINANCE"; break; case GL_LUMINANCE_ALPHA: eb="GL_LUMINANCE_ALPHA"; break; default: eb="unknown"; break; } return eb; } void WINAPI extglDrawPixels(GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *data) { GLenum glerr; OutTraceDW("glDrawPixels: size=(%dx%d) format=%x(%s) type=%d data=%x\n", width, height, format, ExplainDrawPixelsFormat(format), type, data); (*pglDrawPixels)(width, height, format, type, data); if ((glerr=extglGetError())!= GL_NO_ERROR) OutTraceE("GLERR %d ad %d\n", glerr, __LINE__); return; } #endif void WINAPI extglPixelZoom(GLfloat xfactor, GLfloat yfactor) { GLenum glerr; OutTraceOGL("glPixelZoom: x,y factor=(%f,%f)\n", xfactor, yfactor); if(dxw.dwFlags6 & FIXPIXELZOOM){ RECT desktop; (*pGetClientRect)(dxw.GethWnd(), &desktop); xfactor = (xfactor * desktop.right) / dxw.GetScreenWidth(); yfactor = (yfactor * desktop.bottom) / dxw.GetScreenHeight(); OutTraceDW("glPixelZoom: FIXED x,y factor=(%f,%f)\n", xfactor, yfactor); } (*pglPixelZoom)(xfactor, yfactor); if ((glerr=extglGetError())!= GL_NO_ERROR) OutTraceE("GLERR %d ad %d\n", glerr, __LINE__); return; } void WINAPI extglBegin(GLenum mode) { GLenum glerr; OutTraceOGL("glBegin: mode=%x\n", mode); //if(mode == GL_QUADS) mode = GL_TRIANGLES; (*pglBegin)(mode); if ((glerr=extglGetError())!= GL_NO_ERROR) OutTraceE("GLERR %d ad %d\n", glerr, __LINE__); return; } void WINAPI extglBindTexture(GLenum target, GLuint texture) { GLenum glerr; OutTraceOGL("glBindTexture: target=%x(%s) texture=%x\n", target, ExplainTarget(target), texture); if(dxw.dwFlags7 & FIXBINDTEXTURE) { static GLuint uiLastTex = 0; if(uiLastTex) (*pglBindTexture)(target, 0); uiLastTex = texture; } (*pglBindTexture)(target, texture); if ((glerr=extglGetError())!= GL_NO_ERROR) OutTraceE("GLERR %d ad %d\n", glerr, __LINE__); return; } void WINAPI extglPixelStorei(GLenum pname, GLint param) { GLenum glerr; OutTraceOGL("glPixelStorei: pname=%x param=%x\n", pname, param); (*pglPixelStorei)(pname, param); if ((glerr=extglGetError())!= GL_NO_ERROR) OutTrace("GLERR %d ad %d\n", glerr, __LINE__); return; } void WINAPI extglutFullScreen(void) { OutTraceOGL("glutFullScreen: void\n"); if(!dxw.Windowize) return (*pglutFullScreen)(); OutTraceDW("glutFullScreen BYPASS\n"); dxw.SetFullScreen(TRUE); } void extglutInitWindowSize(int width, int height) { int dummy1, dummy2; OutTraceOGL("glutInitWindowSize: size=(%dx%d)\n", width, height); if(dxw.Windowize){ dummy1=0; dummy2=0; dxw.MapWindow(&dummy1, &dummy2, &width, &height); OutTraceDW("glutInitWindowSize: FIXED width=%d height=%d\n", width, height); } (*pglutInitWindowSize)(width, height); } void extglutInitWindowPosition(int x, int y) { int dummy1, dummy2; OutTraceOGL("glutInitWindowPosition: pos=(%d,%d)\n", x, y); if(dxw.Windowize){ dummy1=0; dummy2=0; dxw.MapWindow(&x, &y, &dummy1, &dummy2); OutTraceDW("glutInitWindowPosition: FIXED pos=(%d,%d)\n", x, y); } (*pglutInitWindowPosition)(x, y); } void WINAPI extglutSetWindow(HWND win) { OutTraceOGL("glutSetWindow: win=%x\n", win); if(dxw.Windowize && dxw.IsRealDesktop(win)) win=dxw.GethWnd(); (*pglutSetWindow)(win); } static char *glStringName(GLenum name) { char *ret; switch(name){ case GL_VENDOR: ret="GL_VENDOR"; break; case GL_RENDERER: ret="GL_RENDERER"; break; case GL_VERSION: ret="GL_VERSION"; break; case GL_SHADING_LANGUAGE_VERSION: ret="GL_SHADING_LANGUAGE_VERSION"; break; case GL_EXTENSIONS: ret="GL_EXTENSIONS"; break; default: ret="unknown"; break; } return ret; } const GLubyte* WINAPI extglGetString(GLenum name) { const GLubyte* ret; OutTraceOGL("glGetString: name=%s\n", name); ret = (*pglGetString)(name); if(IsTraceDW){ if(strlen((const char *)ret)<80) OutTrace("glGetString: name=%x(%s) ret=\"%.80s\"\n", name, glStringName(name), ret); else{ const GLubyte *p = ret; OutTrace("glGetString: name=%x(%s) ret=(%d)\n", name, glStringName(name), strlen((const char *)ret)); while(strlen((const char *)p)>80){ OutTrace("glGetString: \"%.80s\" +\n", p); p += 80; } OutTrace("glGetString: \"%.80s\"\n", p); } } return ret; } char* WINAPI extwglGetExtensionsStringEXT(void) { char *ret; OutTraceOGL("wglGetExtensionsStringEXT: void\n"); ret = (*pwglGetExtensionsStringEXT)(); if(IsTraceDW){ if(strlen((const char *)ret)<80) OutTrace("wglGetExtensionsStringEXT: ret=\"%.80s\"\n", ret); else{ const char *p = ret; OutTrace("wglGetExtensionsStringEXT: ret=(%d)\n", strlen((const char *)ret)); while(strlen((const char *)p)>80){ OutTrace("wglGetExtensionsStringEXT: \"%.80s\" +\n", p); p += 80; } OutTrace("wglGetExtensionsStringEXT: \"%.80s\"\n", p); } } return ret; } const GLubyte* WINAPI extgluGetString(GLenum name) { const GLubyte* ret; OutTraceOGL("gluGetString: name=%s\n", name); ret = (*pgluGetString)(name); if(IsTraceDW){ if(strlen((const char *)ret)<80) OutTrace("gluGetString: name=%x(%s) ret=\"%.80s\"\n", name, glStringName(name), ret); else{ const GLubyte *p = ret; OutTrace("gluGetString: name=%x(%s) ret=(%d)\n", name, glStringName(name), strlen((const char *)ret)); while(strlen((const char *)p)>80){ OutTrace("gluGetString: \"%.80s\" +\n", p); p += 80; } OutTrace("gluGetString: \"%.80s\"\n", p); } } return ret; } ================================================ FILE: dll/queryint.cpp ================================================ #define _CRT_SECURE_NO_WARNINGS #include #include #include #include "dxwnd.h" #include "dxwcore.hpp" #include "dxhook.h" #include "syslibs.h" #include "dxhelper.h" #include "hddraw.h" extern void HookDDSurface(LPDIRECTDRAWSURFACE *, int, BOOL); extern void HookGammaControl(LPVOID *); extern void HookDDSession(LPDIRECTDRAW *, int); extern void HookDirect3DSession(LPDIRECTDRAW *, int); extern void HookDirect3DDevice(LPVOID *, int); extern void HookViewport(LPDIRECT3DVIEWPORT *, int); extern void HookDDClipper(LPDIRECTDRAWCLIPPER FAR *); // extQueryInterfaceDX: this is the single procedure that manages all QueryInterface methods within the DirectX classes // it is better to have it unique because of the transitive and reflexive properties of QueryInterface, that means // that every DirectX COM object can QueryInterface itself to become another object type belonging to this family. // some unhandled interfaces in emulation mode: // REFIID={84e63de0-46aa-11cf-816f-0000c020156e}: IID_IDirect3DHALDevice typedef enum { TYPE_OBJECT_UNKNOWN = 0, TYPE_OBJECT_DIRECTDRAW, TYPE_OBJECT_DDRAWSURFACE, TYPE_OBJECT_CLIPPER, TYPE_OBJECT_DIRECT3D, TYPE_OBJECT_D3DDEVICE, TYPE_OBJECT_GAMMARAMP, TYPE_OBJECT_TEXTURE, TYPE_OBJECT_VIEWPORT }; HRESULT WINAPI extQueryInterfaceDX(int dxversion, QueryInterface_Type pQueryInterface, void *lpdds, REFIID riid, LPVOID *obp) { HRESULT res; BOOL IsPrim; BOOL IsBack; int iObjectType; int iObjectVersion; extern LPDIRECTDRAWSURFACE lpDDSEmu_Prim; DWORD caps; IsPrim=dxwss.IsAPrimarySurface((LPDIRECTDRAWSURFACE)lpdds); IsBack=dxwss.IsABackBufferSurface((LPDIRECTDRAWSURFACE)lpdds); OutTraceDDRAW("QueryInterface(%d): lpdds=%x%s REFIID=%x(%s)\n", dxversion, lpdds, dxwss.ExplainSurfaceRole((LPDIRECTDRAWSURFACE)lpdds), riid.Data1, ExplainGUID((GUID *)&riid)); iObjectVersion = 0; iObjectType = TYPE_OBJECT_UNKNOWN; switch(riid.Data1){ // DirectDraw case 0xD7B70EE0: // CLSID_DirectDraw iObjectType=TYPE_OBJECT_DIRECTDRAW; iObjectVersion=1; break; case 0x3c305196: // CLSID_DirectDraw7 iObjectType=TYPE_OBJECT_DIRECTDRAW; iObjectVersion=7; break; case 0x6C14DB80: // IID_IDirectDraw iObjectType=TYPE_OBJECT_DIRECTDRAW; iObjectVersion=1; break; case 0xB3A6F3E0: // IID_IDirectDraw2 iObjectType=TYPE_OBJECT_DIRECTDRAW; iObjectVersion=2; break; case 0x618f8ad4: // IID_IDirectDraw3 iObjectType=TYPE_OBJECT_DIRECTDRAW; iObjectVersion=3; break; case 0x9c59509a: // IID_IDirectDraw4 iObjectType=TYPE_OBJECT_DIRECTDRAW; iObjectVersion=4; break; case 0x15e65ec0: // IID_IDirectDraw7 iObjectType=TYPE_OBJECT_DIRECTDRAW; iObjectVersion=7; break; // DirectDrawSurface case 0x6C14DB81: iObjectType=TYPE_OBJECT_DDRAWSURFACE; iObjectVersion=1; break; case 0x57805885: //DDSurface2 - WIP (Dark Reign) iObjectType=TYPE_OBJECT_DDRAWSURFACE; iObjectVersion=2; break; case 0xDA044E00: iObjectType=TYPE_OBJECT_DDRAWSURFACE; iObjectVersion=3; break; case 0x0B2B8630: iObjectType=TYPE_OBJECT_DDRAWSURFACE; iObjectVersion=4; break; case 0x06675a80: iObjectType=TYPE_OBJECT_DDRAWSURFACE; iObjectVersion=7; break; case 0x6C14DB84: OutTraceDW("QueryInterface: IID_IDirectDrawPalette\n"); break; // Direct3D case 0x3BBA0080: // IID_IDirect3D iObjectType=TYPE_OBJECT_DIRECT3D; iObjectVersion=1; break; case 0x6aae1ec1: // IID_IDirect3D2 iObjectType=TYPE_OBJECT_DIRECT3D; iObjectVersion=2; break; case 0xbb223240: // IID_IDirect3D3 iObjectType=TYPE_OBJECT_DIRECT3D; iObjectVersion=3; break; case 0xf5049e77: // IID_IDirect3D7 iObjectType=TYPE_OBJECT_DIRECT3D; iObjectVersion=7; break; // Direct3DDevice case 0x84e63de0: // IID_IDirect3DHALDevice iObjectType=TYPE_OBJECT_D3DDEVICE; iObjectVersion=1; break; case 0xA4665C60: // IID_IDirect3DRGBDevice iObjectType=TYPE_OBJECT_D3DDEVICE; iObjectVersion=1; break; case 0xF2086B20: // IID_IDirect3DRampDevice iObjectType=TYPE_OBJECT_D3DDEVICE; iObjectVersion=1; break; case 0x881949a1: // IID_IDirect3DMMXDevice iObjectType=TYPE_OBJECT_D3DDEVICE; iObjectVersion=1; break; case 0x50936643: // IID_IDirect3DRefDevice iObjectType=TYPE_OBJECT_D3DDEVICE; iObjectVersion=2; break; case 0x8767df22: // IID_IDirect3DNullDevice iObjectType=TYPE_OBJECT_D3DDEVICE; iObjectVersion=2; break; case 0xf5049e78: // IID_IDirect3DTnLHalDevice, iObjectType=TYPE_OBJECT_D3DDEVICE; iObjectVersion=3; break; case 0x64108800: // IID_IDirect3DDevice iObjectType=TYPE_OBJECT_D3DDEVICE; iObjectVersion=1; break; case 0x93281501: // IID_IDirect3DDevice2 iObjectType=TYPE_OBJECT_D3DDEVICE; iObjectVersion=2; break; case 0xb0ab3b60: // IID_IDirect3DDevice3 iObjectType=TYPE_OBJECT_D3DDEVICE; iObjectVersion=3; break; case 0xf5049e79: // IID_IDirect3DDevice7 iObjectType=TYPE_OBJECT_D3DDEVICE; iObjectVersion=7; break; case 0x4B9F0EE0: OutTraceDW("QueryInterface: IID_IDirectDrawColorControl\n"); break; case 0x6C14DB85: OutTraceDW("QueryInterface: IID_IDirectDrawClipper\n"); break; case 0x69C11C3E: iObjectType=TYPE_OBJECT_GAMMARAMP; iObjectVersion=1; break; // textures case 0x2CDCD9E0: iObjectType=TYPE_OBJECT_TEXTURE; iObjectVersion=1; break; case 0x93281502: iObjectType=TYPE_OBJECT_TEXTURE; iObjectVersion=2; break; case 0x4417C146: //IID_IDirect3DViewport iObjectType=TYPE_OBJECT_VIEWPORT; iObjectVersion=1; break; case 0x93281500: //IID_IDirect3DViewport2 iObjectType=TYPE_OBJECT_VIEWPORT; iObjectVersion=2; break; case 0xb0ab3b61: //IID_IDirect3DViewport3 iObjectType=TYPE_OBJECT_VIEWPORT; iObjectVersion=3; break; case 0x593817A0: //CLSID_DirectDrawClipper iObjectType=TYPE_OBJECT_CLIPPER; iObjectVersion=1; break; } char *sLabel; switch(iObjectType){ case TYPE_OBJECT_UNKNOWN: sLabel = "(unknown)"; break; case TYPE_OBJECT_DIRECTDRAW: sLabel = "IID_IDirectDraw"; break; case TYPE_OBJECT_DDRAWSURFACE: sLabel = "IID_IDirectDrawSurface"; break; case TYPE_OBJECT_CLIPPER: sLabel = "CLSID_DirectDrawClipper"; break; case TYPE_OBJECT_DIRECT3D: sLabel = "IID_IDirect3D"; break; case TYPE_OBJECT_D3DDEVICE: sLabel = "IID_IDirect3DDevice"; break; case TYPE_OBJECT_GAMMARAMP: sLabel = "IID_IDirectDrawGammaRamp"; break; case TYPE_OBJECT_TEXTURE: sLabel = "IID_IDirect3DTexture"; break; case TYPE_OBJECT_VIEWPORT: sLabel = "IID_IDirect3DViewport"; break; } OutTraceDW("QueryInterface: Got interface for %s version %d\n", sLabel, iObjectVersion); switch(iObjectType){ // simulate unavailable interfaces (useful?) case TYPE_OBJECT_DIRECTDRAW: if (iObjectVersion > (int)dxw.dwMaxDDVersion) { *obp = NULL; OutTraceDW("QueryInterface: DDVersion=%d SUPPRESS lpdds=%x(%s) REFIID=%x obp=(NULL) ret=0 at %d\n", iObjectVersion, lpdds, IsPrim?"":"(PRIM)", riid.Data1, __LINE__); return(0); } break; case TYPE_OBJECT_DDRAWSURFACE: if (iObjectVersion > (int)dxw.dwMaxDDVersion) { *obp = NULL; OutTraceDW("QueryInterface: DDSVersion=%d SUPPRESS lpdds=%x(%s) REFIID=%x obp=(NULL) ret=0 at %d\n", iObjectVersion, lpdds, IsPrim?"":"(PRIM)", riid.Data1, __LINE__); return(0); } break; case TYPE_OBJECT_GAMMARAMP: // fix the target for gamma ramp creation: if it is a primary surface, use the real one!! // v2.03.37: do this just when in esurface emulated mode!! if((dxw.dwFlags1 & EMULATESURFACE) && dxwss.IsAPrimarySurface((LPDIRECTDRAWSURFACE)lpdds)) lpdds = lpDDSEmu_Prim; break; #ifdef YEARDEAD //case TYPE_OBJECT_UNKNOWN: // OutTraceDW("QueryInterface: returning same object\n"); // ((LPDIRECTDRAWSURFACE)lpdds)->AddRef(); // *obp = lpdds; // return DD_OK; #endif } res = (*pQueryInterface)(lpdds, riid, obp); if(res) { OutTraceDW("QueryInterface: ERROR lpdds=%x%s REFIID=%x obp=%x ret=%x(%s) at %d\n", lpdds, IsPrim?"(PRIM)":"", riid.Data1, *obp, res, ExplainDDError(res), __LINE__); return res; } if (! *obp) { OutTraceDW("QueryInterface: Interface for object %x not found\n", riid.Data1); return res; } // added trace OutTraceDW("QueryInterface: lpdds=%x REFIID=%x obp=%x obj=%s version=%d ret=0\n", lpdds, riid.Data1, *obp, sLabel, iObjectVersion); // v2.04.19.fx1: Beware! "Need for Speed 5" performs QueryInterface of one sorface on top of itself! // This is allowed, but in this case calling dxwss.PopSurface before dxwss.DuplicateSurface would // clear the capabilities to be copied over to the (not) new surface. // fixed by inserting an "if" statement before PopSurface switch(iObjectType){ case TYPE_OBJECT_UNKNOWN: if(caps=dxwss.DuplicateSurface((LPDIRECTDRAWSURFACE)lpdds, (LPDIRECTDRAWSURFACE)*obp, iObjectVersion)){ OutTraceDW("QueryInterface: MOVE caps=%x(%s)\n", caps, ExplainDDSCaps(caps)); } break; case TYPE_OBJECT_DIRECTDRAW: HookDDSession((LPDIRECTDRAW *)obp, iObjectVersion); break; case TYPE_OBJECT_DDRAWSURFACE: dxw.dwDDVersion=iObjectVersion; if(caps=dxwss.DuplicateSurface((LPDIRECTDRAWSURFACE)lpdds, (LPDIRECTDRAWSURFACE)*obp, iObjectVersion)){ OutTraceDW("QueryInterface: MOVE caps=%x(%s)\n", caps, ExplainDDSCaps(caps)); } if(IsPrim){ OutTraceDW("QueryInterface(S): primary=%x new=%x\n", lpdds, *obp); HookDDSurface((LPDIRECTDRAWSURFACE *)obp, dxw.dwDDVersion, TRUE); } else{ // v2.02.13: seems that hooking inconditionally gives troubles. What is the proper safe hook condition? HookDDSurface((LPDIRECTDRAWSURFACE *)obp, dxw.dwDDVersion, FALSE); } break; case TYPE_OBJECT_CLIPPER: HookDDClipper((LPDIRECTDRAWCLIPPER *)obp); // there is a single Clipper intrface! break; case TYPE_OBJECT_DIRECT3D: HookDirect3DSession((LPDIRECTDRAW *)obp, iObjectVersion); break; case TYPE_OBJECT_D3DDEVICE: HookDirect3DDevice(obp, iObjectVersion); break; case TYPE_OBJECT_GAMMARAMP: HookGammaControl(obp); break; case TYPE_OBJECT_TEXTURE: HookTexture(obp, iObjectVersion); break; case TYPE_OBJECT_VIEWPORT: HookViewport((LPDIRECT3DVIEWPORT *)obp, iObjectVersion); break; } return res; } ================================================ FILE: dll/rad.h ================================================ #ifndef __RAD__ #define __RAD__ #define RADCOPYRIGHT "Copyright (C) 1994-98 RAD Game Tools, Inc." #ifndef __RADRES__ // __RADDOS__ means DOS code (16 or 32 bit) // __RAD16__ means 16 bit code (Win16) // __RAD32__ means 32 bit code (DOS, Win386, Win32s, Mac) // __RADWIN__ means Windows code (Win16, Win386, Win32s) // __RADWINEXT__ means Windows 386 extender (Win386) // __RADNT__ means Win32s code // __RADMAC__ means Macintosh // __RAD68K__ means 68K Macintosh // __RADPPC__ means PowerMac #if (defined(__MWERKS__) && !defined(__INTEL__)) || defined(THINK_C) || defined(powerc) || defined(macintosh) || defined(__powerc) #define __RADMAC__ #if defined(powerc) || defined(__powerc) #define __RADPPC__ #else #define __RAD68K__ #endif #define __RAD32__ #else #ifdef __DOS__ #define __RADDOS__ #endif #ifdef __386__ #define __RAD32__ #endif #ifdef _Windows //For Borland #ifdef __WIN32__ #define WIN32 #else #define __WINDOWS__ #endif #endif #ifdef _WINDOWS //For MS #ifndef _WIN32 #define __WINDOWS__ #endif #endif #ifdef _WIN32 #define __RADWIN__ #define __RADNT__ #define __RAD32__ #else #ifdef __NT__ #define __RADWIN__ #define __RADNT__ #define __RAD32__ #else #ifdef __WINDOWS_386__ #define __RADWIN__ #define __RADWINEXT__ #define __RAD32__ #else #ifdef __WINDOWS__ #define __RADWIN__ #define __RAD16__ #else #ifdef WIN32 #define __RADWIN__ #define __RADNT__ #define __RAD32__ #endif #endif #endif #endif #endif #endif #if (!defined(__RADDOS__) && !defined(__RADWIN__) && !defined(__RADMAC__)) #error RAD.H did not detect your platform. Define __DOS__, __WINDOWS__, WIN32, macintosh, or powerc. #endif #ifdef __RADMAC__ // this define is for CodeWarrior 11's stupid new libs (even though // we don't use longlong's). #define __MSL_LONGLONG_SUPPORT__ #define RADLINK #define RADEXPLINK #ifdef __CFM68K__ #ifdef __RADINDLL__ #define RADEXPFUNC RADDEFFUNC __declspec(export) #else #define RADEXPFUNC RADDEFFUNC __declspec(import) #endif #else #define RADEXPFUNC RADDEFFUNC #endif #define RADASMLINK #else #ifdef __RADNT__ #ifndef _WIN32 #define _WIN32 #endif #ifndef WIN32 #define WIN32 #endif #endif #ifdef __RADWIN__ #ifdef __RAD32__ #ifdef __RADNT__ #define RADLINK __stdcall #define RADEXPLINK __stdcall #ifdef __RADINEXE__ #define RADEXPFUNC RADDEFFUNC #else #ifndef __RADINDLL__ #define RADEXPFUNC RADDEFFUNC __declspec(dllimport) #ifdef __BORLANDC__ #if __BORLANDC__<=0x460 #undef RADEXPFUNC #define RADEXPFUNC RADDEFFUNC #endif #endif #else #define RADEXPFUNC RADDEFFUNC __declspec(dllexport) #endif #endif #else #define RADLINK __pascal #define RADEXPLINK __far __pascal #define RADEXPFUNC RADDEFFUNC #endif #else #define RADLINK __pascal #define RADEXPLINK __far __pascal __export #define RADEXPFUNC RADDEFFUNC #endif #else #define RADLINK __pascal #define RADEXPLINK __pascal #define RADEXPFUNC RADDEFFUNC #endif #define RADASMLINK __cdecl #endif #ifdef __RADWIN__ #ifndef _WINDOWS #define _WINDOWS #endif #endif #ifdef __cplusplus #define RADDEFFUNC extern "C" #define RADDEFSTART extern "C" { #define RADDEFEND } #else #define RADDEFFUNC #define RADDEFSTART #define RADDEFEND #endif RADDEFSTART #define s8 signed char #define u8 unsigned char #define u32 unsigned long #define s32 signed long #define u64 unsigned __int64 #define s64 signed __int64 #ifdef __RAD32__ #define PTR4 #define u16 unsigned short #define s16 signed short #ifdef __RADMAC__ #include #include #include #define radstrlen strlen #define radmemset memset #define radmemcmp memcmp #define radmemcpy(dest,source,size) BlockMoveData((Ptr)(source),(Ptr)(dest),size) #define radmemcpydb(dest,source,size) BlockMoveData((Ptr)(source),(Ptr)(dest),size) #define radstrcat strcat #define radstrcpy strcpy static u32 inline radsqr(s32 a) { return(a*a); } #ifdef __RAD68K__ #pragma parameter __D0 mult64anddiv(__D0,__D1,__D2) u32 mult64anddiv(u32 m1,u32 m2,u32 d) ={0x4C01,0x0C01,0x4C42,0x0C01}; // muls.l d1,d1:d0 divs.l d2,d1:d0 #pragma parameter radconv32a(__A0,__D0) void radconv32a(void* p,u32 n) ={0x4A80,0x600C,0x2210,0xE059,0x4841,0xE059,0x20C1,0x5380,0x6EF2}; // tst.l d0 bra.s @loope @loop: move.l (a0),d1 ror.w #8,d1 swap d1 ror.w #8,d1 move.l d1,(a0)+ sub.l #1,d0 bgt.s @loop @loope: #else u32 mult64anddiv(u32 m1,u32 m2,u32 d); void radconv32a(void* p,u32 n); #endif #else #ifdef __WATCOMC__ u32 radsqr(s32 a); #pragma aux radsqr = "mul eax" parm [eax] modify [EDX eax]; u32 mult64anddiv(u32 m1,u32 m2,u32 d); #pragma aux mult64anddiv = "mul ecx" "div ebx" parm [eax] [ecx] [ebx] modify [EDX eax]; s32 radabs(s32 ab); #pragma aux radabs = "test eax,eax" "jge skip" "neg eax" "skip:" parm [eax]; #define radabs32 radabs u32 DOSOut(const char* str); #pragma aux DOSOut = "cld" "mov ecx,0xffffffff" "xor eax,eax" "mov edx,edi" "repne scasb" "not ecx" "dec ecx" "mov ebx,1" "mov ah,0x40" "int 0x21" parm [EDI] modify [EAX EBX ECX EDX EDI] value [ecx]; void DOSOutNum(const char* str,u32 len); #pragma aux DOSOutNum = "mov ah,0x40" "mov ebx,1" "int 0x21" parm [edx] [ecx] modify [eax ebx]; u32 ErrOut(const char* str); #pragma aux ErrOut = "cld" "mov ecx,0xffffffff" "xor eax,eax" "mov edx,edi" "repne scasb" "not ecx" "dec ecx" "xor ebx,ebx" "mov ah,0x40" "int 0x21" parm [EDI] modify [EAX EBX ECX EDX EDI] value [ecx]; void ErrOutNum(const char* str,u32 len); #pragma aux ErrOutNum = "mov ah,0x40" "xor ebx,ebx" "int 0x21" parm [edx] [ecx] modify [eax ebx]; void radmemset16(void* dest,u16 value,u32 size); #pragma aux radmemset16 = "cld" "mov bx,ax" "shl eax,16" "mov ax,bx" "mov bl,cl" "shr ecx,1" "rep stosd" "mov cl,bl" "and cl,1" "rep stosw" parm [EDI] [EAX] [ECX] modify [EAX EDX EBX ECX EDI]; void radmemset(void* dest,u8 value,u32 size); #pragma aux radmemset = "cld" "mov ah,al" "mov bx,ax" "shl eax,16" "mov ax,bx" "mov bl,cl" "shr ecx,2" "and bl,3" "rep stosd" "mov cl,bl" "rep stosb" parm [EDI] [AL] [ECX] modify [EAX EDX EBX ECX EDI]; void radmemset32(void* dest,u32 value,u32 size); #pragma aux radmemset32 = "cld" "rep stosd" parm [EDI] [EAX] [ECX] modify [EAX EDX EBX ECX EDI]; void radmemcpy(void* dest,const void* source,u32 size); #pragma aux radmemcpy = "cld" "mov bl,cl" "shr ecx,2" "rep movsd" "mov cl,bl" "and cl,3" "rep movsb" parm [EDI] [ESI] [ECX] modify [EBX ECX EDI ESI]; void __far *radfmemcpy(void __far* dest,const void __far* source,u32 size); #pragma aux radfmemcpy = "cld" "push es" "push ds" "mov es,cx" "mov ds,dx" "mov ecx,eax" "shr ecx,2" "rep movsd" "mov cl,al" "and cl,3" "rep movsb" "pop ds" "pop es" parm [CX EDI] [DX ESI] [EAX] modify [ECX EDI ESI] value [CX EDI]; void radmemcpydb(void* dest,const void* source,u32 size); //Destination bigger #pragma aux radmemcpydb = "std" "mov bl,cl" "lea esi,[esi+ecx-4]" "lea edi,[edi+ecx-4]" "shr ecx,2" "rep movsd" "and bl,3" "jz dne" "add esi,3" "add edi,3" "mov cl,bl" "rep movsb" "dne:" "cld" parm [EDI] [ESI] [ECX] modify [EBX ECX EDI ESI]; char* radstrcpy(void* dest,const void* source); #pragma aux radstrcpy = "cld" "mov edx,edi" "lp:" "mov al,[esi]" "inc esi" "mov [edi],al" "inc edi" "cmp al,0" "jne lp" parm [EDI] [ESI] modify [EAX EDX EDI ESI] value [EDX]; char __far* radfstrcpy(void __far* dest,const void __far* source); #pragma aux radfstrcpy = "cld" "push es" "push ds" "mov es,cx" "mov ds,dx" "mov edx,edi" "lp:" "lodsb" "stosb" "test al,0xff" "jnz lp" "pop ds" "pop es" parm [CX EDI] [DX ESI] modify [EAX EDX EDI ESI] value [CX EDX]; char* radstpcpy(void* dest,const void* source); #pragma aux radstpcpy = "cld" "lp:" "mov al,[esi]" "inc esi" "mov [edi],al" "inc edi" "cmp al,0" "jne lp" "dec edi" parm [EDI] [ESI] modify [EAX EDI ESI] value [EDI]; char* radstpcpyrs(void* dest,const void* source); #pragma aux radstpcpyrs = "cld" "lp:" "mov al,[esi]" "inc esi" "mov [edi],al" "inc edi" "cmp al,0" "jne lp" "dec esi" parm [EDI] [ESI] modify [EAX EDI ESI] value [ESI]; u32 radstrlen(const void* dest); #pragma aux radstrlen = "cld" "mov ecx,0xffffffff" "xor eax,eax" "repne scasb" "not ecx" "dec ecx" parm [EDI] modify [EAX ECX EDI] value [ECX]; char* radstrcat(void* dest,const void* source); #pragma aux radstrcat = "cld" "mov ecx,0xffffffff" "mov edx,edi" "xor eax,eax" "repne scasb" "dec edi" "lp:" "lodsb" "stosb" "test al,0xff" "jnz lp" \ parm [EDI] [ESI] modify [EAX ECX EDI ESI] value [EDX]; char* radstrchr(const void* dest,char chr); #pragma aux radstrchr = "cld" "lp:" "lodsb" "cmp al,dl" "je fnd" "cmp al,0" "jnz lp" "mov esi,1" "fnd:" "dec esi" parm [ESI] [DL] modify [EAX ESI] value [esi]; s8 radmemcmp(const void* s1,const void* s2,u32 len); #pragma aux radmemcmp = "cld" "rep cmpsb" "setne al" "jbe end" "neg al" "end:" parm [EDI] [ESI] [ECX] modify [ECX EDI ESI]; s8 radstrcmp(const void* s1,const void* s2); #pragma aux radstrcmp = "lp:" "mov al,[esi]" "mov ah,[edi]" "cmp al,ah" "jne set" "cmp al,0" "je set" "inc esi" "inc edi" "jmp lp" "set:" "setne al" "jbe end" "neg al" "end:" \ parm [EDI] [ESI] modify [EAX EDI ESI]; s8 radstricmp(const void* s1,const void* s2); #pragma aux radstricmp = "lp:" "mov al,[esi]" "mov ah,[edi]" "cmp al,'a'" "jb c1" "cmp al,'z'" "ja c1" "sub al,32" "c1:" "cmp ah,'a'" "jb c2" "cmp ah,'z'" "ja c2" "sub ah,32" "c2:" "cmp al,ah" "jne set" "cmp al,0" "je set" \ "inc esi" "inc edi" "jmp lp" "set:" "setne al" "jbe end" "neg al" "end:" \ parm [EDI] [ESI] modify [EAX EDI ESI]; s8 radstrnicmp(const void* s1,const void* s2,u32 len); #pragma aux radstrnicmp = "lp:" "mov al,[esi]" "mov ah,[edi]" "cmp al,'a'" "jb c1" "cmp al,'z'" "ja c1" "sub al,32" "c1:" "cmp ah,'a'" "jb c2" "cmp ah,'z'" "ja c2" "sub ah,32" "c2:" "cmp al,ah" "jne set" "cmp al,0" "je set" \ "dec ecx" "jz set" "inc esi" "inc edi" "jmp lp" "set:" "setne al" "jbe end" "neg al" "end:" \ parm [EDI] [ESI] [ECX] modify [EAX ECX EDI ESI]; char* radstrupr(void* s1); #pragma aux radstrupr = "mov ecx,edi" "lp:" "mov al,[edi]" "cmp al,'a'" "jb c1" "cmp al,'z'" "ja c1" "sub [edi],32" "c1:" "inc edi" "cmp al,0" "jne lp" parm [EDI] modify [EAX EDI] value [ecx]; char* radstrlwr(void* s1); #pragma aux radstrlwr = "mov ecx,edi" "lp:" "mov al,[edi]" "cmp al,'A'" "jb c1" "cmp al,'Z'" "ja c1" "add [edi],32" "c1:" "inc edi" "cmp al,0" "jne lp" parm [EDI] modify [EAX EDI] value [ecx]; u32 radstru32(const void* dest); #pragma aux radstru32 = "cld" "xor ecx,ecx" "xor ebx,ebx" "xor edi,edi" "lodsb" "cmp al,45" "jne skip2" "mov edi,1" "jmp skip" "lp:" "mov eax,10" "mul ecx" "lea ecx,[eax+ebx]" \ "skip:" "lodsb" "skip2:" "cmp al,0x39" "ja dne" "cmp al,0x30" "jb dne" "mov bl,al" "sub bl,0x30" "jmp lp" "dne:" "test edi,1" "jz pos" "neg ecx" "pos:" \ parm [ESI] modify [EAX EBX EDX EDI ESI] value [ecx]; u16 GetDS(); #pragma aux GetDS = "mov ax,ds" value [ax]; #ifdef __RADWINEXT__ #define _16To32(ptr16) ((void*)(((GetSelectorBase((u16)(((u32)(ptr16))>>16))+((u16)(u32)(ptr16)))-GetSelectorBase(GetDS())))) #endif #ifndef __RADWIN__ #define int86 int386 #define int86x int386x #endif #define u32regs x #define u16regs w #else #define radstrcpy strcpy #define radstrcat strcat #define radmemcpy memcpy #define radmemcpydb memmove #define radmemcmp memcmp #define radmemset memset #define radstrlen strlen #define radstrchr strchr #define radtoupper toupper #define radstru32(s) ((u32)atol(s)) #define radstricmp _stricmp #define radstrcmp strcmp #define radstrupr _strupr #define radstrlwr _strlwr #define BreakPoint() _asm {int 3} #ifdef _MSC_VER #pragma warning( disable : 4035) typedef char* RADPCHAR; u32 __inline radsqr(u32 m) { _asm { mov eax,[m] mul eax } } u32 __inline mult64anddiv(u32 m1,u32 m2, u32 d) { _asm { mov eax,[m1] mov ecx,[m2] mul ecx mov ecx,[d] div ecx } } s32 __inline radabs(s32 ab) { _asm { mov eax,[ab] test eax,eax jge skip neg eax skip: } } u8 __inline radinp(u16 p) { _asm { mov dx,[p] in al,dx } } void __inline radoutp(u16 p,u8 v) { _asm { mov dx,[p] mov al,[v] out dx,al } } RADPCHAR __inline radstpcpy(char* p1, char* p2) { _asm { mov edx,[p1] mov ecx,[p2] cld lp: mov al,[ecx] inc ecx mov [edx],al inc edx cmp al,0 jne lp dec edx mov eax,edx } } RADPCHAR __inline radstpcpyrs(char* p1, char* p2) { _asm { mov edx,[p1] mov ecx,[p2] cld lp: mov al,[ecx] inc ecx mov [edx],al inc edx cmp al,0 jne lp dec ecx mov eax,ecx } } void __inline radmemset16(void* dest,u16 value,u32 sizeb) { _asm { mov edi,[dest] mov ax,[value] mov ecx,[sizeb] shl eax,16 cld mov ax,[value] mov bl,cl shr ecx,1 rep stosd mov cl,bl and cl,1 rep stosw } } void __inline radmemset32(void* dest,u32 value,u32 sizeb) { _asm { mov edi,[dest] mov eax,[value] mov ecx,[sizeb] cld rep stosd } } u32 __inline __stdcall RADsqrt(u32 sq) { _asm { fild dword ptr [sq] fsqrt fistp word ptr [sq] movzx eax,word ptr [sq] } } void __inline RADCycleTimerStartAddr(u32* addr) { _asm { mov ecx,[addr] __asm __emit 0fh __asm __emit 031h mov [ecx],eax } } u32 __inline RADCycleTimerDeltaAddr(u32* addr) { _asm { __asm __emit 0fh __asm __emit 031h mov ecx,[addr] sub eax,[ecx] } } #define RADCycleTimerStart(var) RADCycleTimerStartAddr(&var) #define RADCycleTimerDelta(var) RADCycleTimerDeltaAddr(&var) #pragma warning( default : 4035) #endif #endif #endif #else #define PTR4 __far #define u16 unsigned int #define s16 signed int #ifdef __WATCOMC__ u32 radsqr(s32 a); #pragma aux radsqr = "shl edx,16" "mov dx,ax" "mov eax,edx" "xor edx,edx" "mul eax" "shld edx,eax,16" parm [dx ax] modify [DX ax] value [dx ax]; s16 radabs(s16 ab); #pragma aux radabs = "test ax,ax" "jge skip" "neg ax" "skip:" parm [ax] value [ax]; s32 radabs32(s32 ab); #pragma aux radabs32 = "test dx,dx" "jge skip" "neg dx" "neg ax" "sbb dx,0" "skip:" parm [dx ax] value [dx ax]; u32 DOSOut(const char far* dest); #pragma aux DOSOut = "cld" "and edi,0xffff" "mov dx,di" "mov ecx,0xffffffff" "xor eax,eax" 0x67 "repne scasb" "not ecx" "dec ecx" "mov bx,1" "push ds" "push es" "pop ds" "mov ah,0x40" "int 0x21" "pop ds" "movzx eax,cx" "shr ecx,16" \ parm [ES DI] modify [AX BX CX DX DI ES] value [CX AX]; void DOSOutNum(const char far* str,u16 len); #pragma aux DOSOutNum = "push ds" "mov ds,cx" "mov cx,bx" "mov ah,0x40" "mov bx,1" "int 0x21" "pop ds" parm [cx dx] [bx] modify [ax bx cx]; u32 ErrOut(const char far* dest); #pragma aux ErrOut = "cld" "and edi,0xffff" "mov dx,di" "mov ecx,0xffffffff" "xor eax,eax" 0x67 "repne scasb" "not ecx" "dec ecx" "xor bx,bx" "push ds" "push es" "pop ds" "mov ah,0x40" "int 0x21" "pop ds" "movzx eax,cx" "shr ecx,16" \ parm [ES DI] modify [AX BX CX DX DI ES] value [CX AX]; void ErrOutNum(const char far* str,u16 len); #pragma aux ErrOutNum = "push ds" "mov ds,cx" "mov cx,bx" "mov ah,0x40" "xor bx,bx" "int 0x21" "pop ds" parm [cx dx] [bx] modify [ax bx cx]; void radmemset(void far *dest,u8 value,u32 size); #pragma aux radmemset = "cld" "and edi,0ffffh" "shl ecx,16" "mov cx,bx" "mov ah,al" "mov bx,ax" "shl eax,16" "mov ax,bx" "mov bl,cl" "shr ecx,2" 0x67 "rep stosd" "mov cl,bl" "and cl,3" "rep stosb" parm [ES DI] [AL] [CX BX]; void radmemset16(void far* dest,u16 value,u32 size); #pragma aux radmemset16 = "cld" "and edi,0ffffh" "shl ecx,16" "mov cx,bx" "mov bx,ax" "shl eax,16" "mov ax,bx" "mov bl,cl" "shr ecx,1" "rep stosd" "mov cl,bl" "and cl,1" "rep stosw" parm [ES DI] [AX] [CX BX]; void radmemcpy(void far* dest,const void far* source,u32 size); #pragma aux radmemcpy = "cld" "push ds" "mov ds,dx" "and esi,0ffffh" "and edi,0ffffh" "shl ecx,16" "mov cx,bx" "shr ecx,2" 0x67 "rep movsd" "mov cl,bl" "and cl,3" "rep movsb" "pop ds" parm [ES DI] [DX SI] [CX BX] modify [CX SI DI ES]; s8 radmemcmp(const void far* s1,const void far* s2,u32 len); #pragma aux radmemcmp = "cld" "push ds" "mov ds,dx" "shl ecx,16" "mov cx,bx" "rep cmpsb" "setne al" "jbe end" "neg al" "end:" "pop ds" parm [ES DI] [DX SI] [CX BX] modify [CX SI DI ES]; char far* radstrcpy(void far* dest,const void far* source); #pragma aux radstrcpy = "cld" "push ds" "mov ds,dx" "and esi,0xffff" "and edi,0xffff" "mov dx,di" "lp:" "lodsb" "stosb" "test al,0xff" "jnz lp" "pop ds" parm [ES DI] [DX SI] modify [AX DX DI SI ES] value [es dx]; char far* radstpcpy(void far* dest,const void far* source); #pragma aux radstpcpy = "cld" "push ds" "mov ds,dx" "and esi,0xffff" "and edi,0xffff" "lp:" "lodsb" "stosb" "test al,0xff" "jnz lp" "dec di" "pop ds" parm [ES DI] [DX SI] modify [DI SI ES] value [es di]; u32 radstrlen(const void far* dest); #pragma aux radstrlen = "cld" "and edi,0xffff" "mov ecx,0xffffffff" "xor eax,eax" 0x67 "repne scasb" "not ecx" "dec ecx" "movzx eax,cx" "shr ecx,16" parm [ES DI] modify [AX CX DI ES] value [CX AX]; char far* radstrcat(void far* dest,const void far* source); #pragma aux radstrcat = "cld" "and edi,0xffff" "mov ecx,0xffffffff" "and esi,0xffff" "push ds" "mov ds,dx" "mov dx,di" "xor eax,eax" 0x67 "repne scasb" "dec edi" "lp:" "lodsb" "stosb" "test al,0xff" "jnz lp" "pop ds" \ parm [ES DI] [DX SI] modify [AX CX DI SI ES] value [es dx]; char far* radstrchr(const void far* dest,char chr); #pragma aux radstrchr = "cld" "lp:" 0x26 "lodsb" "cmp al,dl" "je fnd" "cmp al,0" "jnz lp" "xor ax,ax" "mov es,ax" "mov si,1" "fnd:" "dec si" parm [ES SI] [DL] modify [AX SI ES] value [es si]; s8 radstricmp(const void far* s1,const void far* s2); #pragma aux radstricmp = "and edi,0xffff" "push ds" "mov ds,dx" "and esi,0xffff" "lp:" "mov al,[esi]" "mov ah,[edi]" "cmp al,'a'" "jb c1" "cmp al,'z'" "ja c1" "sub al,32" "c1:" \ "cmp ah,'a'" "jb c2" "cmp ah,'z'" "ja c2" "sub ah,32" "c2:" "cmp al,ah" "jne set" "cmp al,0" "je set" \ "inc esi" "inc edi" "jmp lp" "set:" "setne al" "jbe end" "neg al" "end:" "pop ds" \ parm [ES DI] [DX SI] modify [AX DI SI]; u32 radstru32(const void far* dest); #pragma aux radstru32 = "cld" "xor ecx,ecx" "xor ebx,ebx" "xor edi,edi" 0x26 "lodsb" "cmp al,45" "jne skip2" "mov edi,1" "jmp skip" "lp:" "mov eax,10" "mul ecx" "lea ecx,[eax+ebx]" \ "skip:" 0x26 "lodsb" "skip2:" "cmp al,0x39" "ja dne" "cmp al,0x30" "jb dne" "mov bl,al" "sub bl,0x30" "jmp lp" "dne:" "test edi,1" "jz pos" "neg ecx" "pos:" \ "movzx eax,cx" "shr ecx,16" parm [ES SI] modify [AX BX DX DI SI] value [cx ax]; u32 mult64anddiv(u32 m1,u32 m2,u32 d); #pragma aux mult64anddiv = "shl ecx,16" "mov cx,ax" "shrd eax,edx,16" "mov ax,si" "mul ecx" "shl edi,16" "mov di,bx" "div edi" "shld edx,eax,16" "and edx,0xffff" "and eax,0xffff" parm [cx ax] [dx si] [di bx] \ modify [ax bx cx dx si di] value [dx ax]; #endif #endif RADDEFEND #define u32neg1 ((u32)(s32)-1) #define RAD_align(var) var; u8 junk##var[4-(sizeof(var)&3)]; #define RAD_align_after(var) u8 junk##var[4-(sizeof(var)&3)]={0}; #define RAD_align_init(var,val) var=val; u8 junk##var[4-(sizeof(var)&3)]={0}; #define RAD_align_array(var,num) var[num]; u8 junk##var[4-(sizeof(var)&3)]; #define RAD_align_string(var,str) char var[]=str; u8 junk##var[4-(sizeof(var)&3)]={0}; RADEXPFUNC void PTR4* RADEXPLINK radmalloc(u32 numbytes); RADEXPFUNC void RADEXPLINK radfree(void PTR4* ptr); #ifdef __WATCOMC__ char bkbhit(); #pragma aux bkbhit = "mov ah,1" "int 0x16" "lahf" "shr eax,14" "and eax,1" "xor al,1" ; char bgetch(); #pragma aux bgetch = "xor ah,ah" "int 0x16" "test al,0xff" "jnz done" "mov al,ah" "or al,0x80" "done:" modify [AX]; void BreakPoint(); #pragma aux BreakPoint = "int 3"; u8 radinp(u16 p); #pragma aux radinp = "in al,dx" parm [DX]; u8 radtoupper(u8 p); #pragma aux radtoupper = "cmp al,'a'" "jb c1" "cmp al,'z'" "ja c1" "sub al,32" "c1:" parm [al] value [al]; void radoutp(u16 p,u8 v); #pragma aux radoutp = "out dx,al" parm [DX] [AL]; #endif // for multi-processor machines #ifdef __RADNT__ #define LockedIncrement(var) _asm { lock inc [var] } #define LockedDecrement(var) _asm { lock dec [var] } #else #define LockedIncrement(var) _asm { inc [var] } #define LockedDecrement(var) _asm { dec [var] } #endif #endif #endif ================================================ FILE: dll/resource.h ================================================ //{{NO_DEPENDENCIES}} // Microsoft Visual C++ generated include file. // Used by dxwnd.rc // #define IDB_BANNER 101 #define IDB_CROSS 102 #define IDB_FIRE1 103 #define IDB_FIRE2 104 #define IDB_FIRE3 105 #define IDB_JOYCENTER 106 // Next default values for new objects // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 106 #define _APS_NEXT_COMMAND_VALUE 40001 #define _APS_NEXT_CONTROL_VALUE 1001 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif ================================================ FILE: dll/shareddc.cpp ================================================ #define _CRT_SECURE_NO_WARNINGS #include #include #include "dxwnd.h" #include "dxwcore.hpp" #include "syslibs.h" #include "dxhelper.h" #include "resource.h" #include "hddraw.h" #include "shareddc.hpp" //#define D3D9TRY #define SHAREDDCDEBUG FALSE #if SHAREDDCDEBUG #define _Warn(s) {char cap[80]; sprintf(cap, "Warn at %d", __LINE__); MessageBox(NULL, (s), cap, MB_OK);} #else #define _Warn(s) #endif extern HandleDDThreadLock_Type pReleaseDDThreadLock; extern GetDC_Type pGetDCMethod(); extern ReleaseDC_Type pReleaseDCMethod(); /*---------------------------------------------------------------------------------+ | | | Constructor, Desctructor | | | +---------------------------------------------------------------------------------*/ dxwSDC::dxwSDC() { OutTraceB("dxwSDC::dxwSDC: Initialize\n"); PrimaryDC = NULL; lpDDSPrimary = NULL; LastScreenWidth = LastScreenHeight = 0; LastHDC = NULL; CurrenthWnd = NULL; } dxwSDC::~dxwSDC() { //OutTraceB("dxwSDC::~dxwSDC: Destroy\n"); } /*---------------------------------------------------------------------------------+ | | | GetPrimaryDC: builds a suitable DC to write to, according to the input DC | | | +---------------------------------------------------------------------------------*/ static IDirect3DSurface9 *pDestSurface = NULL; HDC dxwSDC::GetPrimaryDC(HDC hdc) { return GetPrimaryDC(hdc, NULL); } HDC dxwSDC::GetPrimaryDC(HDC hdc, HDC hdcsrc) { HRESULT res; extern HandleDDThreadLock_Type pReleaseDDThreadLock; extern void *lpD3DActiveDevice; OutTraceB("dxwSDC::GetPrimaryDC: hdc=%x\n", hdc); CurrentHDCSrc = hdcsrc; CurrentHDC = hdc; // look for ddraw first //if(pReleaseDDThreadLock)(*pReleaseDDThreadLock)(); lpDDSPrimary = dxwss.GetPrimarySurface(); if (lpDDSPrimary) { if(pReleaseDDThreadLock)(*pReleaseDDThreadLock)(); res=((*pGetDCMethod())(lpDDSPrimary, &PrimaryDC)); while((PrimaryDC == NULL) && lpDDSPrimary) { OutTraceB("dxwSDC::GetPrimaryDC: found primary surface with no DC, unref lpdds=%x\n", lpDDSPrimary); dxwss.UnrefSurface(lpDDSPrimary); lpDDSPrimary = dxwss.GetPrimarySurface(); if (lpDDSPrimary) (*pGetDCMethod())(lpDDSPrimary, &PrimaryDC); } if (!PrimaryDC) { _Warn("No primary DC"); OutTraceB("dxwSDC::GetPrimaryDC: no ddraw primary DC\n"); return NULL; } // avoid double Getdc on same hdc and lock // if(PrimaryDC == hdc) (*pReleaseDC)(lpDDSPrimary, PrimaryDC); OutTraceB("dxwSDC::GetPrimaryDC: ddraw PrimaryDC=%x\n", PrimaryDC); VirtualSurfaceType = VIRTUAL_ON_DDRAW; } else { // finally, search GDI DC PrimaryDC = (*pGDIGetDC)(dxw.GethWnd()); if (!PrimaryDC) { _Warn("No window DC"); OutTraceB("dxwSDC::GetPrimaryDC: no windows DC\n"); return NULL; } OutTraceB("dxwSDC::GetPrimaryDC: gdi PrimaryDC=%x\n", PrimaryDC); VirtualSurfaceType = VIRTUAL_ON_WINDOW; } // whenever the hdc changes, rebuild the virtual DC if(hdc != LastHDC) do { LastHDC = hdc; RECT client; if(VirtualHDC){ //(*pGDIReleaseDC)(dxw.GethWnd(), VirtualHDC); DeleteObject(VirtualHDC); } if(!(VirtualHDC=(*pGDICreateCompatibleDC)(PrimaryDC))){ OutTraceE("CreateCompatibleDC: ERROR err=%d at=%d\n", GetLastError(), __LINE__); _Warn("CreateCompatibleDC ERROR"); break; } if(!(CurrenthWnd = WindowFromDC(hdc))){ OutTraceE("dxwSDC::GetPrimaryDC: WindowFromDC ERROR err=%d at=%d\n", GetLastError(), __LINE__); _Warn("WindowFromDC ERROR"); break; } if(!(*pGetClientRect)(CurrenthWnd, &client)){ OutTraceE("dxwSDC::GetPrimaryDC: GetClietError ERROR err=%d at=%d\n", GetLastError(), __LINE__); _Warn("GetClietError ERROR"); break; } dxw.UnmapClient(&client); ScreenWidth = client.right; ScreenHeight = client.bottom; OutTraceB("dxwSDC::GetPrimaryDC: VirtualHDC INITIALIZE size=(%dx%d)\n", LastScreenWidth, LastScreenHeight); if(!(VirtualPic=(*pCreateCompatibleBitmap)(PrimaryDC, ScreenWidth, ScreenHeight))){ OutTraceE("dxwSDC::GetPrimaryDC: CreateCompatibleBitmap ERROR err=%d at=%d\n", GetLastError(), __LINE__); _Warn("CreateCompatibleBitmap ERROR"); } if(!(*pSelectObject)(VirtualHDC, VirtualPic)){ OutTraceE("dxwSDC::GetPrimaryDC: SelectObject ERROR err=%d at=%d\n", GetLastError(), __LINE__); _Warn("SelectObject ERROR"); } DeleteObject(VirtualPic); VirtualPic = 0; } while(0); if(CurrenthWnd && CurrenthWnd!=dxw.GethWnd()){ POINT zero1 = {0, 0}; POINT zero2 = {0, 0}; (*pClientToScreen)(CurrenthWnd, &zero1); (*pClientToScreen)(dxw.GethWnd(), &zero2); WinOffset.x = zero1.x - zero2.x; WinOffset.y = zero1.y - zero2.y; VirtualOffset = WinOffset; dxw.UnmapClient(&VirtualOffset); OutTraceB("dxwSDC::GetPrimaryDC: WinOffset=(%d,%d)->(%d,%d)\n", WinOffset.x, WinOffset.y, VirtualOffset.x, VirtualOffset.y); } else { WinOffset.x = 0; WinOffset.y = 0; VirtualOffset.x = 0; VirtualOffset.y = 0; OutTraceB("dxwSDC::GetPrimaryDC: same window\n"); } if(PrimaryDC){ switch(VirtualSurfaceType){ case VIRTUAL_ON_DDRAW: if(!(*pGDIBitBlt)(VirtualHDC, 0, 0, ScreenWidth, ScreenHeight, PrimaryDC, VirtualOffset.x, VirtualOffset.y, SRCCOPY)){ OutTraceE("dxwSDC::GetPrimaryDC: BitBlt ERROR err=%d at=%d\n", GetLastError(), __LINE__); _Warn("BitBlt ERROR"); } OutTraceB("dxwSDC::GetPrimaryDC: fill=(0,0)-(%dx%d) from=(%d,%d)\n", ScreenWidth, ScreenHeight, VirtualOffset.x, VirtualOffset.y); break; case VIRTUAL_ON_WINDOW: int w, h; dxw.MapClient(&VirtualOffset); w = ScreenWidth; h = ScreenHeight; dxw.MapClient(&w, &h); if(!(*pGDIStretchBlt)(VirtualHDC, 0, 0, ScreenWidth, ScreenHeight, PrimaryDC, VirtualOffset.x, VirtualOffset.y, w, h, SRCCOPY)){ OutTraceE("dxwSDC::GetPrimaryDC: StretchBlt ERROR err=%d at=%d\n", GetLastError(), __LINE__); _Warn("StretchBlt ERROR"); } OutTraceB("dxwSDC::GetPrimaryDC: fill=(0,0)-(%dx%d) from=(%d,%d)-(%dx%d)\n", ScreenWidth, ScreenHeight, VirtualOffset.x, VirtualOffset.y, w, h); break; } } POINT origin = {}; POINT mainwin = {}; (*pGetDCOrgEx)(hdc, &origin); (*pGetDCOrgEx)((*pGDIGetDC)(dxw.GethWnd()), &mainwin); origin.x -= mainwin.x; origin.y -= mainwin.y; OutTraceB("dxwSDC::GetPrimaryDC: origin=(%d,%d)\n", origin.x, origin.y); copyDcAttributes(VirtualHDC, hdc, origin); setClippingRegion(VirtualHDC, hdc, origin); return VirtualHDC; } void dxwSDC::SetOrigin(int x, int y) { HybridX = x; HybridY = y; } /*---------------------------------------------------------------------------------+ | | | GetHdc: returns the DC to write for the GDI call | | | +---------------------------------------------------------------------------------*/ HDC dxwSDC::GetHdc(void) { return VirtualHDC; } /*---------------------------------------------------------------------------------+ | | | PutPrimaryDC: transfers the DC content to the primary surface and the screen | | | +---------------------------------------------------------------------------------*/ BOOL dxwSDC::PutPrimaryDC(HDC hdc, BOOL UpdateScreen, int XDest, int YDest, int nDestWidth, int nDestHeight) { extern Unlock1_Type pUnlock1; BOOL ret; HRESULT res; ret = TRUE; if (nDestWidth == 0) nDestWidth=ScreenWidth-XDest; if (nDestHeight == 0) nDestHeight=ScreenHeight-YDest; if (IsDebug){ char sRect[81]; if(UpdateScreen) sprintf(sRect, "pos=(%d,%d) size=(%dx%d) winoffset=(%d,%d) virtoffset=(%d,%d)", XDest, YDest, nDestWidth, nDestHeight, WinOffset.x, WinOffset.y, VirtualOffset.x, VirtualOffset.y); else strcpy(sRect, ""); char *sType; switch(VirtualSurfaceType){ case VIRTUAL_ON_D3D: sType="D3D"; break; case VIRTUAL_ON_DDRAW: sType="DDRAW"; break; case VIRTUAL_ON_WINDOW: sType="WINDOW"; break; default: sType="???"; break; } OutTrace("dxwSDC::PutPrimaryDC: hdc=%x type=%s update=%x %s\n", hdc, sType, UpdateScreen, sRect); } if(UpdateScreen){ switch(VirtualSurfaceType){ case VIRTUAL_ON_DDRAW: ret=(*pGDIBitBlt)(PrimaryDC, XDest+VirtualOffset.x, YDest+VirtualOffset.y, nDestWidth, nDestHeight, VirtualHDC, XDest, YDest, SRCCOPY); if(!ret || (ret==GDI_ERROR)) { OutTraceE("dxwSDC::PutPrimaryDC: BitBlt ERROR ret=%x err=%d\n", ret, GetLastError()); } res=(*pReleaseDCMethod())(lpDDSPrimary, PrimaryDC); if(res){ OutTraceE("dxwSDC::PutPrimaryDC: ReleaseDC ERROR res=%x\n", res); } dxw.ScreenRefresh(); // trick: duplicate the operation using the stretched mode to blit over clipped areas. // good for "Star Treck: Armada". if((dxw.dwFlags8 & SHAREDDCHYBRID) && CurrentHDCSrc && (WindowFromDC(CurrentHDC)!=dxw.GethWnd())){ int nWDest, nHDest, nXDest, nYDest; OutTraceB("dxwSDC::PutPrimaryDC: StretchBlt over ddraw\n"); nXDest= XDest; nYDest= YDest; nWDest= nDestWidth; nHDest= nDestHeight; dxw.MapClient(&nXDest, &nYDest, &nWDest, &nHDest); res=(*pGDIStretchBlt)( CurrentHDC, nXDest, nYDest, nWDest, nHDest, CurrentHDCSrc, HybridX, HybridY, nDestWidth, nDestHeight, SRCCOPY); if(!res) OutTraceE("dxwSDC::PutPrimaryDC: StretchBlt ERROR err=%d\n", GetLastError()); //RECT rect = {nXDest, nYDest, nXDest+nWDest, nYDest+nHDest}; //res = (*pFrameRect)(CurrentHDC, &rect, 0); } break; case VIRTUAL_ON_WINDOW: SetStretchBltMode(PrimaryDC, HALFTONE); RECT RealArea, VirtualArea; // some fullscreen games ("Imperialism II") blitted from negative coordinates -2,-2 !! if(XDest < 0) { nDestWidth += XDest; XDest=0; } if(YDest < 0) { nDestHeight += YDest; YDest=0; } VirtualArea.left = XDest; VirtualArea.top = YDest; VirtualArea.right = nDestWidth; VirtualArea.bottom = nDestHeight; RealArea = VirtualArea; dxw.MapClient(&RealArea); OffsetRect(&RealArea, WinOffset.x, WinOffset.y); ret=TRUE; if(PrimaryDC)ret=(*pGDIStretchBlt)(PrimaryDC, RealArea.left, RealArea.top, RealArea.right, RealArea.bottom, VirtualHDC, VirtualArea.left, VirtualArea.top, VirtualArea.right, VirtualArea.bottom, SRCCOPY); ret=(*pGDIReleaseDC)(dxw.GethWnd(), PrimaryDC); break; } } else { switch(VirtualSurfaceType){ case VIRTUAL_ON_DDRAW: res=(*pReleaseDCMethod())(lpDDSPrimary, PrimaryDC); if(res){ OutTraceE("dxwSDC::PutPrimaryDC: ReleaseDC ERROR res=%x\n", res); } break; case VIRTUAL_ON_WINDOW: ret=(*pGDIReleaseDC)(dxw.GethWnd(), PrimaryDC); if(!ret){ OutTraceE("dxwSDC::PutPrimaryDC: ReleaseDC ERROR err=%d\n", GetLastError()); } break; } } OutTraceB("dxwSDC::PutPrimaryDC: hdc=%x PrimaryDC=%x ret=%x\n", hdc, PrimaryDC, ret); return ret; } BOOL dxwSDC::PutPrimaryDC(HDC hdc, BOOL UpdateScreen) { return PutPrimaryDC(hdc, UpdateScreen, 0, 0, LastScreenWidth, LastScreenHeight); } /*---------------------------------------------------------------------------------+ | | | Service routines | | | +---------------------------------------------------------------------------------*/ void dxwSDC::copyDcAttributes(HDC destDC, HDC origDc, POINT origin) { origFont = (*pSelectObject)(destDC, GetCurrentObject(origDc, OBJ_FONT)); origBrush = (*pSelectObject)(destDC, GetCurrentObject(origDc, OBJ_BRUSH)); origPen = (*pSelectObject)(destDC, GetCurrentObject(origDc, OBJ_PEN)); if (GM_ADVANCED == GetGraphicsMode(origDc)){ SetGraphicsMode(destDC, GM_ADVANCED); XFORM transform = {}; GetWorldTransform(origDc, &transform); SetWorldTransform(destDC, &transform); } SetMapMode(destDC, GetMapMode(origDc)); POINT viewportOrg = {}; GetViewportOrgEx(origDc, &viewportOrg); SetViewportOrgEx(destDC, viewportOrg.x + origin.x, viewportOrg.y + origin.y, NULL); SIZE viewportExt = {}; GetViewportExtEx(origDc, &viewportExt); SetViewportExtEx(destDC, viewportExt.cx, viewportExt.cy, NULL); POINT windowOrg = {}; GetWindowOrgEx(origDc, &windowOrg); SetWindowOrgEx(destDC, windowOrg.x, windowOrg.y, NULL); SIZE windowExt = {}; GetWindowExtEx(origDc, &windowExt); SetWindowExtEx(destDC, windowExt.cx, windowExt.cy, NULL); SetArcDirection(destDC, GetArcDirection(origDc)); SetBkColor(destDC, GetBkColor(origDc)); SetBkMode(destDC, GetBkMode(origDc)); SetDCBrushColor(destDC, GetDCBrushColor(origDc)); SetDCPenColor(destDC, GetDCPenColor(origDc)); SetLayout(destDC, GetLayout(origDc)); SetPolyFillMode(destDC, GetPolyFillMode(origDc)); SetROP2(destDC, GetROP2(origDc)); SetStretchBltMode(destDC, GetStretchBltMode(origDc)); SetTextAlign(destDC, GetTextAlign(origDc)); SetTextCharacterExtra(destDC, GetTextCharacterExtra(origDc)); SetTextColor(destDC, GetTextColor(origDc)); OutTraceB("dxwSDC::copyDcAttributes: orig=(%d,%d)\n", origin.x, origin.y); if(!(*pSetWindowOrgEx)(destDC, -origin.x, -origin.y, NULL)) OutTraceE("dxwSDC::copyDcAttributes: SetWindowOrgEx ERROR orig=(%d,%d) err=%d\n", origin.x, origin.y, GetLastError()); POINT brushOrg = {}; GetBrushOrgEx(origDc, &brushOrg); SetBrushOrgEx(destDC, brushOrg.x, brushOrg.y, NULL); POINT currentPos = {}; (*pGetCurrentPositionEx)(origDc, ¤tPos); dxw.MapClient(¤tPos); (*pMoveToEx)(destDC, currentPos.x, currentPos.y, NULL); } typedef struct { HDC compatDc; POINT origin; HWND rootWnd; } ExcludeClipRectsData_Type; static BOOL CALLBACK excludeClipRectsForOverlappingWindows(HWND hwnd, LPARAM lParam) { ExcludeClipRectsData_Type *excludeClipRectsData = (ExcludeClipRectsData_Type *)lParam; if (!IsWindowVisible(hwnd)) return TRUE; // go ahead if (hwnd == excludeClipRectsData->rootWnd) return FALSE; // stop if(dxw.IsDesktop(hwnd)) return FALSE; RECT rect = {}; (*pGetClientRect)(hwnd, &rect); OffsetRect(&rect, -excludeClipRectsData->origin.x, -excludeClipRectsData->origin.y); ExcludeClipRect(excludeClipRectsData->compatDc, rect.left, rect.top, rect.right, rect.bottom); OutTraceB("dxwSDC::excludeClipRects: hwnd=%x rect=(%d,%d)-(%d,%d)\n", hwnd, rect.left, rect.top, rect.right, rect.bottom); return TRUE; } void dxwSDC::setClippingRegion(HDC compatDc, HDC origDc, POINT origin) { OutTraceB("dxwSDC::setClippingRegion: compdc=%x origdc=%x origin=(%d,%d)\n", compatDc, origDc, origin.x, origin.y); HRGN clipRgn = CreateRectRgn(0, 0, 0, 0); const bool isEmptyClipRgn = (1 != GetRandomRgn(origDc, clipRgn, SYSRGN)); OutTraceB("dxwSDC::setClippingRegion: isEmptyClipRgn=%x\n", isEmptyClipRgn); // scale clip region POINT upleft={0, 0}; //(*pClientToScreen)(dxw.GethWnd(), &upleft); (*pClientToScreen)(CurrenthWnd, &upleft); if(IsDebug){ OutTraceB("dxwSDC::setClippingRegion: hwnd=%x upleft=(%d,%d)\n", CurrenthWnd, upleft.x, upleft.y); } OffsetRgn(clipRgn, -upleft.x, -upleft.y); if(IsDebug){ RECT RgnBox; GetRgnBox(clipRgn, &RgnBox); OutTraceB("dxwSDC::setClippingRegion: RgnBox=(%d,%d)-(%d,%d) size=(%dx%d)\n", RgnBox.left, RgnBox.top, RgnBox.right, RgnBox.bottom, RgnBox.right-RgnBox.left, RgnBox.bottom-RgnBox.top); } // end of scaling (*pSelectClipRgn)(compatDc, isEmptyClipRgn ? NULL : clipRgn); DeleteObject(clipRgn); HRGN origClipRgn = (*pCreateRectRgn)(0, 0, 0, 0); if (1 == GetClipRgn(origDc, origClipRgn)) { OutTraceB("dxwSDC::setClippingRegion: GetClipRgn==1\n"); OffsetRgn(origClipRgn, origin.x, origin.y); ExtSelectClipRgn(compatDc, origClipRgn, RGN_AND); if(IsDebug){ RECT RgnBox; GetRgnBox(origClipRgn, &RgnBox); // for logging only OutTraceB("dxwSDC::setClippingRegion: OrigRgnBox=(%d,%d)-(%d,%d)\n", RgnBox.left, RgnBox.top, RgnBox.right, RgnBox.bottom); } } DeleteObject(origClipRgn); if(dxw.dwFlags7 & FIXCLIPPERAREA){ // to finish ..... // on Win10 this part seems unnecessary and giving troubles ..... if (!isEmptyClipRgn){ OutTraceB("dxwSDC::setClippingRegion: isEmptyClipRgn FALSE\n"); HWND hwnd = WindowFromDC(origDc); if (hwnd && (!dxw.IsDesktop(hwnd))){ ExcludeClipRectsData_Type excludeClipRectsData = { compatDc, origin, dxw.GethWnd() }; //ExcludeClipRectsData_Type excludeClipRectsData = { compatDc, origin, GetAncestor(hwnd, GA_ROOT) }; OutTraceB("dxwSDC::setClippingRegion: compatdc=%x origin=(%d,%d) ancestor=%x\n", compatDc, origin.x, origin.y, dxw.GethWnd()); EnumWindows(&excludeClipRectsForOverlappingWindows,(LPARAM)(&excludeClipRectsData)); } } } } ================================================ FILE: dll/shareddc.hpp ================================================ #include #include "syslibs.h" typedef enum { VIRTUAL_UNDEFINED = 0, VIRTUAL_ON_WINDOW, VIRTUAL_ON_DDRAW, VIRTUAL_ON_D3D, VIRTUAL_ON_OPENGL, VIRTUAL_ERROR } Virtual_type; class dxwSDC { // Construction/destruction public: dxwSDC(); virtual ~dxwSDC(); // Operations public: // methods HDC GetPrimaryDC(HDC); HDC GetPrimaryDC(HDC, HDC); HDC GetHdc(void); BOOL PutPrimaryDC(HDC, BOOL, int, int, int, int); BOOL PutPrimaryDC(HDC, BOOL); void SetOrigin(int, int); private: void copyDcAttributes(HDC, HDC, POINT); void setClippingRegion(HDC, HDC, POINT); HDC PrimaryDC; HDC VirtualHDC; HDC CurrentHDC; HDC CurrentHDCSrc; HWND CurrenthWnd; LPDIRECTDRAWSURFACE lpDDSPrimary; HBITMAP VirtualPic; HGDIOBJ origFont; HGDIOBJ origBrush; HGDIOBJ origPen; POINT WinOffset; POINT VirtualOffset; int ScreenWidth, ScreenHeight; int LastScreenWidth, LastScreenHeight; HDC LastHDC; Virtual_type VirtualSurfaceType; struct ExcludeClipRectsData { HDC compatDc; POINT origin; HWND rootWnd; }; int HybridX; int HybridY; }; extern dxwSDC sdc; ================================================ FILE: dll/smack.cpp ================================================ #define _CRT_SECURE_NO_WARNINGS #include #include "dxwnd.h" #include "dxwcore.hpp" #include "syslibs.h" #include "dxhook.h" #include "smack.h" typedef Smack * (WINAPI *SmackOpen_Type)(HANDLE, UINT32, INT32); typedef Smack * (WINAPI *Smacker_Type)(Smack *); typedef Smack * (WINAPI *Smacker2_Type)(Smack *, UINT32); typedef Smack * (WINAPI *SmackColorRemap_Type)(Smack *, const void PTR4 *, u32, u32); typedef Smack * (WINAPI *SmackColorRemapWithTrans_Type)(Smack *, const void PTR4 *, u32, u32, u32); typedef u32 (RADEXPLINK *SmackSetSystemRes_Type)(u32); SmackOpen_Type pSmackOpen; Smacker_Type pSmackClose, pSmackWait, pSmackDoFrame, pSmackNextFrame, pSmackSoundUseMSS, pSmackSoundUseDirectSound; Smacker2_Type pSmackSoundOnOff, pSmackGoto; SmackColorRemap_Type pSmackColorRemap; SmackColorRemapWithTrans_Type pSmackColorRemapWithTrans; SmackSetSystemRes_Type pSmackSetSystemRes; Smack * WINAPI extSmackOpen(HANDLE, UINT32, INT32); Smack * WINAPI extSmackClose(Smack *); Smack * WINAPI extSmackWait(Smack *); Smack * WINAPI extSmackDoFrame(Smack *); Smack * WINAPI extSmackNextFrame(Smack *); Smack * WINAPI extSmackSoundUseMSS(Smack *); Smack * WINAPI extSmackSoundUseDirectSound(Smack *); Smack * WINAPI extSmackSoundOnOff(Smack *, UINT32); Smack * WINAPI extSmackGoto(Smack *, UINT32); Smack * WINAPI extSmackColorRemap(Smack *, const void PTR4 *, u32, u32); Smack * WINAPI extSmackColorRemapWithTrans(Smack *, const void PTR4 *, u32, u32, u32); u32 RADEXPLINK extSmackSetSystemRes(u32 mode); static HookEntryEx_Type Hooks[]={ {HOOK_IAT_CANDIDATE, 0x000E, "_SmackOpen@12", (FARPROC)NULL, (FARPROC *)&pSmackOpen, (FARPROC)extSmackOpen}, {HOOK_IAT_CANDIDATE, 0x0012, "_SmackClose@4", (FARPROC)NULL, (FARPROC *)&pSmackClose, (FARPROC)extSmackClose}, //{HOOK_IAT_CANDIDATE, 0x0020, "_SmackWait@4", (FARPROC)NULL, (FARPROC *)&pSmackWait, (FARPROC)extSmackWait}, {HOOK_IAT_CANDIDATE, 0x0013, "_SmackDoFrame@4", (FARPROC)NULL, (FARPROC *)&pSmackDoFrame, (FARPROC)extSmackDoFrame}, {HOOK_IAT_CANDIDATE, 0x0021, "_SmackSoundUseMSS@4", (FARPROC)NULL, (FARPROC *)&pSmackSoundUseMSS, (FARPROC)extSmackSoundUseMSS}, {HOOK_IAT_CANDIDATE, 0x0011, "_SmackSoundOnOff@8", (FARPROC)NULL, (FARPROC *)&pSmackSoundOnOff, (FARPROC)extSmackSoundOnOff}, {HOOK_IAT_CANDIDATE, 0x001B, "_SmackGoto@8", (FARPROC)NULL, (FARPROC *)&pSmackGoto, (FARPROC)extSmackGoto}, {HOOK_IAT_CANDIDATE, 0x0015, "_SmackNextFrame@4", (FARPROC)NULL, (FARPROC *)&pSmackNextFrame, (FARPROC)extSmackNextFrame}, {HOOK_IAT_CANDIDATE, 0x0026, "_SmackSoundUseDirectSound@4", (FARPROC)NULL, (FARPROC *)&pSmackSoundUseDirectSound, (FARPROC)extSmackSoundUseDirectSound}, {HOOK_IAT_CANDIDATE, 0x0000, "_SmackColorRemap@16", (FARPROC)NULL, (FARPROC *)&pSmackColorRemap, (FARPROC)extSmackColorRemap}, {HOOK_IAT_CANDIDATE, 0x0000, "_SmackColorRemapWithTrans@20", (FARPROC)NULL, (FARPROC *)&pSmackColorRemapWithTrans, (FARPROC)extSmackColorRemapWithTrans}, {HOOK_IAT_CANDIDATE, 0x0000, "_SmackSetSystemRes@4", (FARPROC)NULL, (FARPROC *)&pSmackSetSystemRes, (FARPROC)extSmackSetSystemRes}, {HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator }; FARPROC Remap_smack_ProcAddress(LPCSTR proc, HMODULE hModule) { FARPROC addr; if(!(dxw.dwFlags7 & HOOKSMACKW32)) return NULL; if (addr=RemapLibraryEx(proc, hModule, Hooks)) return addr; // NULL -> keep the original call address return NULL; } static char *libname = "smackw32.dll"; void HookSmackW32(HMODULE hModule) { if(!(dxw.dwFlags7 & HOOKSMACKW32)) return; HookLibraryEx(hModule, Hooks, libname); return; } char *ExplainSmackFlags(DWORD c) { static char eb[256]; unsigned int l; strcpy(eb,"SMACK"); if (c & SMACKNEEDPAN) strcat(eb, "NEEDPAN+"); if (c & SMACKNEEDVOLUME) strcat(eb, "NEEDVOLUME+"); if (c & SMACKFRAMERATE) strcat(eb, "FRAMERATE+"); if (c & SMACKLOADEXTRA) strcat(eb, "LOADEXTRA+"); if (c & SMACKPRELOADALL) strcat(eb, "PRELOADALL+"); if (c & SMACKNOSKIP) strcat(eb, "NOSKIP+"); if (c & SMACKSIMULATE) strcat(eb, "SIMULATE+"); if (c & SMACKTRACK1) strcat(eb, "TRACK1+"); if (c & SMACKTRACK2) strcat(eb, "TRACK2+"); if (c & SMACKTRACK3) strcat(eb, "TRACK3+"); if (c & SMACKTRACK4) strcat(eb, "TRACK4+"); if (c & SMACKTRACK5) strcat(eb, "TRACK5+"); if (c & SMACKTRACK6) strcat(eb, "TRACK6+"); if (c & SMACKTRACK7) strcat(eb, "TRACK7+"); if (c & SMACKBUFFERREVERSED) strcat(eb, "BUFFERREVERSED+"); if (c & SMACKFILEISSMK) strcat(eb, "FILEISSMK+"); if ((c & SMACKBUFFER16) == SMACKBUFFER555) strcat(eb, "BUFFER555+"); if ((c & SMACKBUFFER16) == SMACKBUFFER565) strcat(eb, "BUFFER565+"); if ((c & SMACKYNONE) == SMACKYNONE) strcat(eb, "YNONE+"); if ((c & SMACKYNONE) == SMACKYDOUBLE) strcat(eb, "YDOUBLE+"); if ((c & SMACKYNONE) == SMACKYINTERLACE) strcat(eb, "YINTERLACE+"); l=strlen(eb); if (l>strlen("SMACK")) eb[l-1]=0; // delete last '+' if any else eb[0]=0; return(eb); } static void DumpSmack(Smack *s) { if(!IsDebug) return; OutTrace("Smack_%x: size=(%dx%d) frame=%d/%d rate=%d type=%x palette=%x rect=(%d,%d)(%d-%d) offset=(%d,%d) err=%x\n", s, s->Width, s->Height, s->FrameNum, s->Frames, s->MSPerFrame, s->SmackerType, s->NewPalette, s->LastRectx, s->LastRecty, s->LastRectw, s->LastRecth, s->LeftOfs, s->TopOfs, s->ReadError); } Smack * WINAPI extSmackOpen(HANDLE SmackFile, UINT32 flags, INT32 extrabuf) { Smack *h; OutTraceDW("SmackOpen: SmackFile=%x flags=%x(%s) extrabuf=%x\n", SmackFile, flags, ExplainSmackFlags(flags), extrabuf); if(!pSmackOpen) OutTraceE("ASSERT: NULL pSmackOpen\n"); h=(*pSmackOpen)(SmackFile, flags, extrabuf); OutTraceDW("SmackOpen: ret=%x\n", h); if (!h) return NULL; DumpSmack(h); if(dxw.dwFlags6 & NOMOVIES) { OutTraceDW("SmackOpen: NOMOVIES\n"); h->Frames = 1; // returning NULL or a frame counter below 1 is risky! return h; } return h; } Smack * WINAPI extSmackClose(Smack *h) { OutTraceDW("SmackClose: h=%x\n", h); return (*pSmackClose)(h); } Smack * WINAPI extSmackWait(Smack *h) { OutTraceDW("SmackWait: h=%x\n", h); DumpSmack((Smack *)h); return (*pSmackWait)(h); } Smack * WINAPI extSmackDoFrame(Smack *h) { Smack *ret; OutTraceDW("SmackDoFrame: h=%x\n", h); DumpSmack((Smack *)h); ret = (*pSmackDoFrame)(h); if(dxw.dwFlags7 & FIXSMACKLOOP){ dxw.MessagePump(); dxw.ScreenRefresh(); } return ret; } Smack * WINAPI extSmackNextFrame(Smack *h) { OutTraceDW("SmackNextFrame: h=%x\n", h); DumpSmack(h); return (*pSmackNextFrame)(h); } Smack * WINAPI extSmackSoundUseMSS(Smack *h) { OutTraceDW("SmackSoundUseMSS: h=%x\n", h); DumpSmack(h); return (*pSmackSoundUseMSS)(h); } Smack * WINAPI extSmackSoundUseDirectSound(Smack *h) { OutTraceDW("SmackSoundUseDirectSound: h=%x\n", h); DumpSmack(h); return (*pSmackSoundUseDirectSound)(h); } Smack * WINAPI extSmackSoundOnOff(Smack *h, UINT32 flag) { OutTraceDW("SmackSoundOnOff: h=%x flag=%x\n", h, flag); DumpSmack(h); return (*pSmackSoundOnOff)(h, flag); } Smack * WINAPI extSmackGoto(Smack *h, UINT32 flag) { OutTraceDW("SmackGoto: h=%x flag=%x\n", h, flag); DumpSmack(h); return (*pSmackGoto)(h, flag); } Smack * WINAPI extSmackColorRemap(Smack *h, const void PTR4 *remappal, u32 numcolors, u32 paltype) { OutTraceDW("SmackColorRemap: h=%x numcolors=%d paltype=%d\n", h, numcolors, paltype); DumpSmack(h); // BYPASS the call to avoid resolution changes //return (*pSmackColorRemap)(h, remappal, numcolors, paltype); return h; } Smack * WINAPI extSmackColorRemapWithTrans(Smack *h, const void PTR4 *remappal, u32 numcolors, u32 paltype, u32 transindex) { OutTraceDW("SmackColorRemapWithTrans: h=%x numcolors=%d paltype=%d transindex=%d\n", h, numcolors, paltype, transindex); DumpSmack(h); // BYPASS the call to avoid resolution changes //return (*pSmackColorRemapWithTrans)(h, remappal, numcolors, paltype); return h; } /* --------------------------------------------------------------- #define SMACKRESRESET 0 #define SMACKRES640X400 1 #define SMACKRES640X480 2 #define SMACKRES800X600 3 #define SMACKRES1024X768 4 RADEXPFUNC u32 RADEXPLINK SmackSetSystemRes(u32 mode); // use SMACKRES* values #define SMACKNOCUSTOMBLIT 128 #define SMACKSMOOTHBLIT 256 #define SMACKINTERLACEBLIT 512 /* ------------------------------------------------------------ */ u32 RADEXPLINK extSmackSetSystemRes(u32 mode) { char *modes[5]={"reset", "640X400", "640X480", "800X600", "1024X768"}; int width, height; static int prevwidth, prevheight; OutTraceDW("SmackSetSystemRes: mode=%x(%s)\n", mode, modes[mode % 5]); // BYPASS the call to avoid resolution changes //return (*pSmackSetSystemRes)(h); mode = mode % 5; // save previous screen resolution for later mode=0 usage if(mode){ prevwidth=dxw.GetScreenWidth(); prevheight=dxw.GetScreenHeight(); dxw.SetFullScreen(TRUE); } switch(mode){ case 0: width=prevwidth; height=prevheight; break; case 1: width=640; height=400; break; case 2: width=640; height=480; break; case 3: width=800; height=600; break; case 4: width=1024; height=768; break; } dxw.SetScreenSize(width, height); if(dxw.Windowize && dxw.GethWnd()) AdjustWindowFrame(dxw.GethWnd(), width, height); return 0; } /* --------------------------------------------------------------- Used by M2 Tank Platoon II: Ordinal 0x0015 name _SmackNextFrame@4 Ordinal 0x000E name _SmackOpen@12 Ordinal 0x0026 name _SmackSoundUseDirectSound@4 Ordinal 0x0012 name _SmackClose@4 Ordinal 0x0013 name _SmackDoFrame@4 Ordinal 0x0017 name _SmackToBuffer@28 Ordinal 0x0020 name _SmackWait@4 /* ------------------------------------------------------------ */ ================================================ FILE: dll/smack.h ================================================ #ifndef SMACKH #define SMACKH #define SMACKVERSION "3.2f" #ifndef __RADRES__ #include "rad.h" RADDEFSTART typedef struct SmackTag { u32 Version; // SMK2 only right now u32 Width; // Width (1 based, 640 for example) u32 Height; // Height (1 based, 480 for example) u32 Frames; // Number of frames (1 based, 100 = 100 frames) u32 MSPerFrame; // Frame Rate u32 SmackerType; // bit 0 set=ring frame u32 LargestInTrack[7]; // Largest single size for each track u32 tablesize; // Size of the init tables u32 codesize; // Compression info u32 absize; // ditto u32 detailsize; // ditto u32 typesize; // ditto u32 TrackType[7]; // high byte=0x80-Comp,0x40-PCM data,0x20-16 bit,0x10-stereo u32 extra; // extra value (should be zero) u32 NewPalette; // set to one if the palette changed u8 Palette[772]; // palette data u32 PalType; // type of palette u32 FrameNum; // Frame Number to be displayed u32 FrameSize; // The current frame's size in bytes u32 SndSize; // The current frame sound tracks' size in bytes s32 LastRectx; // Rect set in from SmackToBufferRect (X coord) s32 LastRecty; // Rect set in from SmackToBufferRect (Y coord) s32 LastRectw; // Rect set in from SmackToBufferRect (Width) s32 LastRecth; // Rect set in from SmackToBufferRect (Height) u32 OpenFlags; // flags used on open u32 LeftOfs; // Left Offset used in SmackTo u32 TopOfs; // Top Offset used in SmackTo u32 LargestFrameSize; // Largest frame size u32 Highest1SecRate; // Highest 1 sec data rate u32 Highest1SecFrame; // Highest 1 sec data rate starting frame u32 ReadError; // Set to non-zero if a read error has ocurred u32 addr32; // translated address for 16 bit interface } Smack; #define SmackHeaderSize(smk) ((((u8*)&((smk)->extra))-((u8*)(smk)))+4) typedef struct SmackSumTag { u32 TotalTime; // total time u32 MS100PerFrame; // MS*100 per frame (100000/MS100PerFrame=Frames/Sec) u32 TotalOpenTime; // Time to open and prepare for decompression u32 TotalFrames; // Total Frames displayed u32 SkippedFrames; // Total number of skipped frames u32 SoundSkips; // Total number of sound skips u32 TotalBlitTime; // Total time spent blitting u32 TotalReadTime; // Total time spent reading u32 TotalDecompTime; // Total time spent decompressing u32 TotalBackReadTime; // Total time spent reading in background u32 TotalReadSpeed; // Total io speed (bytes/second) u32 SlowestFrameTime; // Slowest single frame time u32 Slowest2FrameTime; // Second slowest single frame time u32 SlowestFrameNum; // Slowest single frame number u32 Slowest2FrameNum; // Second slowest single frame number u32 AverageFrameSize; // Average size of the frame u32 HighestMemAmount; // Highest amount of memory allocated u32 TotalExtraMemory; // Total extra memory allocated u32 HighestExtraUsed; // Highest extra memory actually used } SmackSum; //======================================================================= #define SMACKNEEDPAN 0x00020L // Will be setting the pan #define SMACKNEEDVOLUME 0x00040L // Will be setting the volume #define SMACKFRAMERATE 0x00080L // Override fr (call SmackFrameRate first) #define SMACKLOADEXTRA 0x00100L // Load the extra buffer during SmackOpen #define SMACKPRELOADALL 0x00200L // Preload the entire animation #define SMACKNOSKIP 0x00400L // Don't skip frames if falling behind #define SMACKSIMULATE 0x00800L // Simulate the speed (call SmackSim first) #define SMACKFILEHANDLE 0x01000L // Use when passing in a file handle #define SMACKTRACK1 0x02000L // Play audio track 1 #define SMACKTRACK2 0x04000L // Play audio track 2 #define SMACKTRACK3 0x08000L // Play audio track 3 #define SMACKTRACK4 0x10000L // Play audio track 4 #define SMACKTRACK5 0x20000L // Play audio track 5 #define SMACKTRACK6 0x40000L // Play audio track 6 #define SMACKTRACK7 0x80000L // Play audio track 7 #define SMACKTRACKS (SMACKTRACK1|SMACKTRACK2|SMACKTRACK3|SMACKTRACK4|SMACKTRACK5|SMACKTRACK6|SMACKTRACK7) #define SMACKBUFFERREVERSED 0x00000001 #define SMACKBUFFER555 0x80000000 #define SMACKBUFFER565 0xc0000000 #define SMACKBUFFER16 (SMACKBUFFER555|SMACKBUFFER565) #define SMACKYINTERLACE 0x100000L // Force interleaving Y scaling #define SMACKYDOUBLE 0x200000L // Force doubling Y scaling #define SMACKYNONE (SMACKYINTERLACE|SMACKYDOUBLE) // Force normal Y scaling #define SMACKFILEISSMK 0x2000000L // Internal flag for 16 to 32 bit thunking #define SMACKAUTOEXTRA 0xffffffffL // NOT A FLAG! - Use as extrabuf param //======================================================================= #define SMACKSURFACEFAST 0 #define SMACKSURFACESLOW 1 #define SMACKSURFACEDIRECT 2 RADEXPFUNC Smack PTR4* RADEXPLINK SmackOpen(const char PTR4* name,u32 flags,u32 extrabuf); #ifdef __RADMAC__ #include RADEXPFUNC Smack PTR4* RADEXPLINK SmackMacOpen(FSSpec* fsp,u32 flags,u32 extrabuf); #endif RADEXPFUNC u32 RADEXPLINK SmackDoFrame(Smack PTR4* smk); RADEXPFUNC void RADEXPLINK SmackNextFrame(Smack PTR4* smk); RADEXPFUNC u32 RADEXPLINK SmackWait(Smack PTR4* smk); RADEXPFUNC void RADEXPLINK SmackClose(Smack PTR4* smk); RADEXPFUNC void RADEXPLINK SmackVolumePan(Smack PTR4* smk, u32 trackflag,u32 volume,u32 pan); RADEXPFUNC void RADEXPLINK SmackSummary(Smack PTR4* smk,SmackSum PTR4* sum); RADEXPFUNC u32 RADEXPLINK SmackSoundInTrack(Smack PTR4* smk,u32 trackflags); RADEXPFUNC u32 RADEXPLINK SmackSoundOnOff(Smack PTR4* smk,u32 on); #ifndef __RADMAC__ RADEXPFUNC void RADEXPLINK SmackToScreen(Smack PTR4* smk,u32 left,u32 top,u32 BytePS,const u16 PTR4* WinTbl,void* SetBank,u32 Flags); #endif RADEXPFUNC void RADEXPLINK SmackToBuffer(Smack PTR4* smk,u32 left,u32 top,u32 Pitch,u32 destheight,const void PTR4* buf,u32 Flags); RADEXPFUNC u32 RADEXPLINK SmackToBufferRect(Smack PTR4* smk, u32 SmackSurface); RADEXPFUNC void RADEXPLINK SmackGoto(Smack PTR4* smk,u32 frame); RADEXPFUNC void RADEXPLINK SmackColorRemapWithTrans(Smack PTR4* smk,const void PTR4* remappal,u32 numcolors,u32 paltype,u32 transindex); #define SmackColorRemap(smk,remappal,numcolors,paltype) SmackColorRemapWithTrans(smk,remappal,numcolors,paltype,1000) RADEXPFUNC void RADEXPLINK SmackColorTrans(Smack PTR4* smk,const void PTR4* trans); RADEXPFUNC void RADEXPLINK SmackFrameRate(u32 forcerate); RADEXPFUNC void RADEXPLINK SmackSimulate(u32 sim); RADEXPFUNC u32 RADEXPLINK SmackGetTrackData(Smack PTR4* smk,void PTR4* dest,u32 trackflag); RADEXPFUNC void RADEXPLINK SmackSoundCheck(void); //====================================================================== // the functions for the new SmackBlit API typedef struct _SMACKBLIT PTR4* HSMACKBLIT; typedef struct _SMACKBLIT { u32 Flags; u8 PTR4* Palette; u32 PalType; u16 PTR4* SmoothTable; u16 PTR4* Conv8to16Table; u32 whichmode; u32 palindex; u32 t16index; u32 smoothindex; u32 smoothtype; u32 firstpalette; } SMACKBLIT; #define SMACKBLIT1X 1 #define SMACKBLIT2X 2 #define SMACKBLIT2XSMOOTHING 4 #define SMACKBLIT2XINTERLACE 8 RADEXPFUNC HSMACKBLIT RADEXPLINK SmackBlitOpen(u32 flags); RADEXPFUNC void RADEXPLINK SmackBlitSetPalette(HSMACKBLIT sblit, void PTR4* Palette,u32 PalType); RADEXPFUNC u32 RADEXPLINK SmackBlitSetFlags(HSMACKBLIT sblit,u32 flags); RADEXPFUNC void RADEXPLINK SmackBlit(HSMACKBLIT sblit,void PTR4* dest, u32 destpitch, u32 destx, u32 desty, void PTR4* src, u32 srcpitch, u32 srcx, u32 srcy, u32 srcw, u32 srch); RADEXPFUNC void RADEXPLINK SmackBlitClear(HSMACKBLIT sblit,void PTR4* dest, u32 destpitch, u32 destx, u32 desty, u32 destw, u32 desth, s32 color); RADEXPFUNC void RADEXPLINK SmackBlitClose(HSMACKBLIT sblit); RADEXPFUNC void RADEXPLINK SmackBlitTrans(HSMACKBLIT sblit,void PTR4* dest, u32 destpitch, u32 destx, u32 desty, void PTR4* src, u32 srcpitch, u32 srcx, u32 srcy, u32 srcw, u32 srch, u32 trans); RADEXPFUNC void RADEXPLINK SmackBlitMask(HSMACKBLIT sblit,void PTR4* dest, u32 destpitch, u32 destx, u32 desty, void PTR4* src, u32 srcpitch, u32 srcx, u32 srcy, u32 srcw, u32 srch, u32 trans,void PTR4* mask); RADEXPFUNC void RADEXPLINK SmackBlitMerge(HSMACKBLIT sblit,void PTR4* dest, u32 destpitch, u32 destx, u32 desty, void PTR4* src, u32 srcpitch, u32 srcx, u32 srcy, u32 srcw, u32 srch, u32 trans,void PTR4* back); RADEXPFUNC char PTR4* RADEXPLINK SmackBlitString(HSMACKBLIT sblit,char PTR4* dest); #ifndef __RADMAC__ RADEXPFUNC u32 RADEXPLINK SmackUseMMX(u32 flag); //0=off, 1=on, 2=query current #endif //====================================================================== #ifdef __RADDOS__ #define SMACKSOUNDNONE -1 extern void* SmackTimerSetupAddr; extern void* SmackTimerReadAddr; extern void* SmackTimerDoneAddr; typedef void RADEXPLINK (*SmackTimerSetupType)(void); typedef u32 RADEXPLINK (*SmackTimerReadType)(void); typedef void RADEXPLINK (*SmackTimerDoneType)(void); #define SmackTimerSetup() ((SmackTimerSetupType)(SmackTimerSetupAddr))() #define SmackTimerRead() ((SmackTimerReadType)(SmackTimerReadAddr))() #define SmackTimerDone() ((SmackTimerDoneType)(SmackTimerDoneAddr))() RADEXPFUNC u8 RADEXPLINK SmackSoundUseMSS(void* DigDriver); #ifndef AIL_startup #ifdef __SW_3R extern s32 cdecl AIL_startup_reg(void); #define AIL_startup AIL_startup_reg #else extern s32 cdecl AIL_startup_stack(void); #define AIL_startup AIL_startup_stack #endif #endif #define SmackSoundMSSLiteInit() SmackSoundMSSLiteInitWithStart(&AIL_startup); RADEXPFUNC void RADEXPLINK SmackSoundMSSLiteInitWithStart(void* start); RADEXPFUNC void RADEXPLINK SmackSoundMSSLiteDone(void); RADEXPFUNC u8 RADEXPLINK SmackSoundUseSOS3r(u32 SOSDriver,u32 MaxTimerSpeed); RADEXPFUNC u8 RADEXPLINK SmackSoundUseSOS3s(u32 SOSDriver,u32 MaxTimerSpeed); RADEXPFUNC u8 RADEXPLINK SmackSoundUseSOS4r(u32 SOSDriver,u32 MaxTimerSpeed); RADEXPFUNC u8 RADEXPLINK SmackSoundUseSOS4s(u32 SOSDriver,u32 MaxTimerSpeed); #ifdef __SW_3R #define SmackSoundUseSOS3 SmackSoundUseSOS3r #define SmackSoundUseSOS4 SmackSoundUseSOS4r #else #define SmackSoundUseSOS3 SmackSoundUseSOS3s #define SmackSoundUseSOS4 SmackSoundUseSOS4s #endif #else #define SMACKRESRESET 0 #define SMACKRES640X400 1 #define SMACKRES640X480 2 #define SMACKRES800X600 3 #define SMACKRES1024X768 4 RADEXPFUNC u32 RADEXPLINK SmackSetSystemRes(u32 mode); // use SMACKRES* values #define SMACKNOCUSTOMBLIT 128 #define SMACKSMOOTHBLIT 256 #define SMACKINTERLACEBLIT 512 #ifdef __RADMAC__ #include #include #include #define SmackTimerSetup() #define SmackTimerDone() RADEXPFUNC u32 RADEXPLINK SmackTimerRead(void); RADEXPFUNC s32 RADEXPLINK SmackGDSurfaceType( GDHandle gd ); #define SMACKAUTOBLIT 0 #define SMACKDIRECTBLIT 1 #define SMACKGWORLDBLIT 2 typedef struct SmackBufTag { u32 Reversed; u32 SurfaceType; // SMACKSURFACExxxxxx u32 BlitType; // SMACKxxxxxBLIT u32 Width; u32 Height; u32 Pitch; u32 Zoomed; u32 ZWidth; u32 ZHeight; u32 DispColors; // colors on screen u32 MaxPalColors; u32 PalColorsInUse; u32 StartPalColor; u32 EndPalColor; void* Buffer; void* Palette; u32 PalType; u32 SoftwareCursor; WindowPtr wp; GWorldPtr gwp; CTabHandle cth; PaletteHandle palh; GDHandle gd; u32 gdSurfaceType; HSMACKBLIT sblit; void * ScreenAddr; u32 ScreenPitch; s32 manyblits; s32 PTR4* blitrects; s32 PTR4* rectsptr; s32 maxrects; s32 numrects; } SmackBuf; #else #ifdef __RADWIN__ #define INCLUDE_MMSYSTEM_H #include "windows.h" #include "windowsx.h" #ifdef __RADNT__ // to combat WIN32_LEAN_AND_MEAN #include "mmsystem.h" RADEXPFUNC s32 RADEXPLINK SmackDDSurfaceType(void* lpDDS); #endif #define SMACKAUTOBLIT 0 #define SMACKFULL320X240BLIT 1 #define SMACKFULL320X200BLIT 2 #define SMACKFULL320X200DIRECTBLIT 3 #define SMACKSTANDARDBLIT 4 #define SMACKWINGBLIT 5 #define SMACKDIBSECTIONBLIT 5 #define WM_SMACKACTIVATE WM_USER+0x5678 typedef struct SmackBufTag { u32 Reversed; // 1 if the buffer is upside down u32 SurfaceType; // SMACKSURFACExxxx defines u32 BlitType; // SMACKxxxxBLIT defines u32 FullScreen; // 1 if full-screen u32 Width; u32 Height; u32 Pitch; u32 Zoomed; u32 ZWidth; u32 ZHeight; u32 DispColors; // colors on the screen u32 MaxPalColors; // total possible colors in palette (usually 256) u32 PalColorsInUse; // Used colors in palette (usually 236) u32 StartPalColor; // first usable color index (usually 10) u32 EndPalColor; // last usable color index (usually 246) RGBQUAD Palette[256]; u32 PalType; u32 forceredraw; // force a complete redraw on next blit (for >8bit) u32 didapalette; // force an invalidate on the next palette change void PTR4* Buffer; void PTR4* DIBRestore; u32 OurBitmap; u32 OrigBitmap; u32 OurPalette; u32 WinGDC; u32 FullFocused; u32 ParentHwnd; u32 OldParWndProc; u32 OldDispWndProc; u32 DispHwnd; u32 WinGBufHandle; void PTR4* lpDD; void PTR4* lpDDSP; u32 DDSurfaceType; HSMACKBLIT DDblit; s32 ddSoftwarecur; s32 didaddblit; s32 lastwasdd; RECT ddscreen; s32 manyblits; s32 PTR4* blitrects; s32 PTR4* rectsptr; s32 maxrects; s32 numrects; HDC lastdc; } SmackBuf; RADEXPFUNC void RADEXPLINK SmackGet(Smack PTR4* smk,void PTR4* dest); RADEXPFUNC void RADEXPLINK SmackBufferGet( SmackBuf PTR4* sbuf, void PTR4* dest); RADEXPFUNC u8 RADEXPLINK SmackSoundUseMSS(void PTR4* dd); RADEXPFUNC u8 RADEXPLINK SmackSoundUseDirectSound(void PTR4* dd); // NULL=Create RADEXPFUNC void RADEXPLINK SmackSoundSetDirectSoundHWND(HWND hw); RADEXPFUNC u8 RADEXPLINK SmackSoundUseDW(u32 openfreq, u32 openbits, u32 openchans); #define SmackTimerSetup() #define SmackTimerDone() #define SmackTimerRead timeGetTime #endif #endif #ifdef __RADMAC__ RADEXPFUNC SmackBuf PTR4* RADEXPLINK SmackBufferOpen( WindowPtr wp, u32 BlitType, u32 width, u32 height, u32 ZoomW, u32 ZoomH ); RADEXPFUNC u32 RADEXPLINK SmackBufferBlit( SmackBuf PTR4* sbuf, s32 hwndx, s32 hwndy, s32 subx, s32 suby, s32 subw, s32 subh ); RADEXPFUNC void RADEXPLINK SmackBufferFromScreen( SmackBuf PTR4* destbuf, s32 x, s32 y); RADEXPFUNC s32 RADEXPLINK SmackIsSoftwareCursor(GDHandle gd); RADEXPFUNC s32 RADEXPLINK SmackCheckCursor(WindowPtr wp,s32 x,s32 y,s32 w,s32 h); RADEXPFUNC void RADEXPLINK SmackRestoreCursor(s32 checkcount); #else RADEXPFUNC SmackBuf PTR4* RADEXPLINK SmackBufferOpen( HWND wnd, u32 BlitType, u32 width, u32 height, u32 ZoomW, u32 ZoomH ); RADEXPFUNC u32 RADEXPLINK SmackBufferBlit( SmackBuf PTR4* sbuf, HDC dc, s32 hwndx, s32 hwndy, s32 subx, s32 suby, s32 subw, s32 subh ); RADEXPFUNC void RADEXPLINK SmackBufferFromScreen( SmackBuf PTR4* destbuf, HWND hw, s32 x, s32 y); RADEXPFUNC s32 RADEXPLINK SmackIsSoftwareCursor(void* lpDDSP,HCURSOR cur); RADEXPFUNC s32 RADEXPLINK SmackCheckCursor(HWND wnd,s32 x,s32 y,s32 w,s32 h); RADEXPFUNC void RADEXPLINK SmackRestoreCursor(s32 checkcount); #endif RADEXPFUNC void RADEXPLINK SmackBufferStartMultipleBlits( SmackBuf PTR4* sbuf ); RADEXPFUNC void RADEXPLINK SmackBufferEndMultipleBlits( SmackBuf PTR4* sbuf ); RADEXPFUNC char PTR4* RADEXPLINK SmackBufferString(SmackBuf PTR4* sb,char PTR4* dest); RADEXPFUNC void RADEXPLINK SmackBufferNewPalette( SmackBuf PTR4* sbuf, const void PTR4* pal, u32 paltype ); RADEXPFUNC u32 RADEXPLINK SmackBufferSetPalette( SmackBuf PTR4* sbuf ); RADEXPFUNC void RADEXPLINK SmackBufferClose( SmackBuf PTR4* sbuf ); RADEXPFUNC void RADEXPLINK SmackBufferClear( SmackBuf PTR4* destbuf, u32 color); RADEXPFUNC void RADEXPLINK SmackBufferToBuffer( SmackBuf PTR4* destbuf, s32 destx, s32 desty, const SmackBuf PTR4* sourcebuf,s32 sourcex,s32 sourcey,s32 sourcew,s32 sourceh); RADEXPFUNC void RADEXPLINK SmackBufferToBufferTrans( SmackBuf PTR4* destbuf, s32 destx, s32 desty, const SmackBuf PTR4* sourcebuf,s32 sourcex,s32 sourcey,s32 sourcew,s32 sourceh,u32 TransColor); RADEXPFUNC void RADEXPLINK SmackBufferToBufferMask( SmackBuf PTR4* destbuf, s32 destx, s32 desty, const SmackBuf PTR4* sourcebuf,s32 sourcex,s32 sourcey,s32 sourcew,s32 sourceh,u32 TransColor,const SmackBuf PTR4* maskbuf); RADEXPFUNC void RADEXPLINK SmackBufferToBufferMerge( SmackBuf PTR4* destbuf, s32 destx, s32 desty, const SmackBuf PTR4* sourcebuf,s32 sourcex,s32 sourcey,s32 sourcew,s32 sourceh,u32 TransColor,const SmackBuf PTR4* mergebuf); RADEXPFUNC void RADEXPLINK SmackBufferCopyPalette( SmackBuf PTR4* destbuf, SmackBuf PTR4* sourcebuf, u32 remap); RADEXPFUNC u32 RADEXPLINK SmackBufferFocused( SmackBuf PTR4* sbuf); #endif RADDEFEND #endif #endif ================================================ FILE: dll/stb_dxt.h ================================================ // stb_dxt.h - Real-Time DXT1/DXT5 compressor // Based on original by fabian "ryg" giesen v1.04 // Custom version, modified by Yann Collet // /* BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php) Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. You can contact the author at : - RygsDXTc source repository : http://code.google.com/p/rygsdxtc/ */ // use '#define STB_DXT_IMPLEMENTATION' before including to create the implementation // // USAGE: // call stb_compress_dxt_block() for every block (you must pad) // source should be a 4x4 block of RGBA data in row-major order; // A is ignored if you specify alpha=0; you can turn on dithering // and "high quality" using mode. // // version history: // v1.06 - (cyan) implement Fabian Giesen's comments // v1.05 - (cyan) speed optimizations // v1.04 - (ryg) default to no rounding bias for lerped colors (as per S3TC/DX10 spec); // single color match fix (allow for inexact color interpolation); // optimal DXT5 index finder; "high quality" mode that runs multiple refinement steps. // v1.03 - (stb) endianness support // v1.02 - (stb) fix alpha encoding bug // v1.01 - (stb) fix bug converting to RGB that messed up quality, thanks ryg & cbloom // v1.00 - (stb) first release #ifndef STB_INCLUDE_STB_DXT_H #define STB_INCLUDE_STB_DXT_H //******************************************************************* // Enable custom Optimisations // Comment this define if you want to revert to ryg's original code #define NEW_OPTIMISATIONS //******************************************************************* // compression mode (bitflags) #define STB_DXT_NORMAL 0 #define STB_DXT_DITHER 1 // use dithering. dubious win. never use for normal maps and the like! #define STB_DXT_HIGHQUAL 2 // high quality mode, does two refinement steps instead of 1. ~30-40% slower. void rygCompress( unsigned char *dst, unsigned char *src, int w, int h, int isDxt5 ); // TODO remove these, not working properly.. void rygCompressYCoCg( unsigned char *dst, unsigned char *src, int w, int h ); void linearize( unsigned char * dst, const unsigned char * src, int n ); void stb_compress_dxt_block(unsigned char *dest, const unsigned char *src, int alpha, int mode); #define STB_COMPRESS_DXT_BLOCK #ifdef STB_DXT_IMPLEMENTATION // configuration options for DXT encoder. set them in the project/makefile or just define // them at the top. // STB_DXT_USE_ROUNDING_BIAS // use a rounding bias during color interpolation. this is closer to what "ideal" // interpolation would do but doesn't match the S3TC/DX10 spec. old versions (pre-1.03) // implicitly had this turned on. // // in case you're targeting a specific type of hardware (e.g. console programmers): // NVidia and Intel GPUs (as of 2010) as well as DX9 ref use DXT decoders that are closer // to STB_DXT_USE_ROUNDING_BIAS. AMD/ATI, S3 and DX10 ref are closer to rounding with no bias. // you also see "(a*5 + b*3) / 8" on some old GPU designs. // #define STB_DXT_USE_ROUNDING_BIAS #include #include #include #include // memset #include #include #include static unsigned char stb__Expand5[32]; static unsigned char stb__Expand6[64]; static unsigned char stb__OMatch5[256][2]; static unsigned char stb__OMatch6[256][2]; static unsigned char stb__QuantRBTab[256+16]; static unsigned char stb__QuantGTab[256+16]; static int stb__Mul8Bit(int a, int b) { int t = a*b + 128; return (t + (t >> 8)) >> 8; } static void stb__From16Bit(unsigned char *out, unsigned short v) { int rv = (v & 0xf800) >> 11; int gv = (v & 0x07e0) >> 5; int bv = (v & 0x001f) >> 0; out[0] = stb__Expand5[rv]; out[1] = stb__Expand6[gv]; out[2] = stb__Expand5[bv]; out[3] = 0; } static unsigned short stb__As16Bit(int r, int g, int b) { return (stb__Mul8Bit(r,31) << 11) + (stb__Mul8Bit(g,63) << 5) + stb__Mul8Bit(b,31); } // linear interpolation at 1/3 point between a and b, using desired rounding type static int stb__Lerp13(int a, int b) { #ifdef STB_DXT_USE_ROUNDING_BIAS // with rounding bias return a + stb__Mul8Bit(b-a, 0x55); #else // without rounding bias // replace "/ 3" by "* 0xaaab) >> 17" if your compiler sucks or you really need every ounce of speed. return (2*a + b) / 3; #endif } // lerp RGB color static void stb__Lerp13RGB(unsigned char *out, unsigned char *p1, unsigned char *p2) { out[0] = stb__Lerp13(p1[0], p2[0]); out[1] = stb__Lerp13(p1[1], p2[1]); out[2] = stb__Lerp13(p1[2], p2[2]); } /****************************************************************************/ // compute table to reproduce constant colors as accurately as possible static void stb__PrepareOptTable(unsigned char *Table,const unsigned char *expand,int size) { int i,mn,mx; for (i=0;i<256;i++) { int bestErr = 256; for (mn=0;mn> 4)]; ep1[0] = bp[ 0] - dp[ 0]; dp[ 4] = quant[bp[ 4] + ((7*ep1[0] + 3*ep2[2] + 5*ep2[1] + ep2[0]) >> 4)]; ep1[1] = bp[ 4] - dp[ 4]; dp[ 8] = quant[bp[ 8] + ((7*ep1[1] + 3*ep2[3] + 5*ep2[2] + ep2[1]) >> 4)]; ep1[2] = bp[ 8] - dp[ 8]; dp[12] = quant[bp[12] + ((7*ep1[2] + 5*ep2[3] + ep2[2]) >> 4)]; ep1[3] = bp[12] - dp[12]; bp += 16; dp += 16; et = ep1, ep1 = ep2, ep2 = et; // swap } } } // The color matching function static unsigned int stb__MatchColorsBlock(unsigned char *block, unsigned char *color,int dither) { unsigned int mask = 0; int dirr = color[0*4+0] - color[1*4+0]; int dirg = color[0*4+1] - color[1*4+1]; int dirb = color[0*4+2] - color[1*4+2]; int dots[16]; int stops[4]; int i; int c0Point, halfPoint, c3Point; for(i=0;i<16;i++) dots[i] = block[i*4+0]*dirr + block[i*4+1]*dirg + block[i*4+2]*dirb; for(i=0;i<4;i++) stops[i] = color[i*4+0]*dirr + color[i*4+1]*dirg + color[i*4+2]*dirb; // think of the colors as arranged on a line; project point onto that line, then choose // next color out of available ones. we compute the crossover points for "best color in top // half"/"best in bottom half" and then the same inside that subinterval. // // relying on this 1d approximation isn't always optimal in terms of euclidean distance, // but it's very close and a lot faster. // http://cbloomrants.blogspot.com/2008/12/12-08-08-dxtc-summary.html c0Point = (stops[1] + stops[3]) >> 1; halfPoint = (stops[3] + stops[2]) >> 1; c3Point = (stops[2] + stops[0]) >> 1; if(!dither) { // the version without dithering is straightforward #ifdef NEW_OPTIMISATIONS const int indexMap[8] = { 0 << 30,2 << 30,0 << 30,2 << 30,3 << 30,3 << 30,1 << 30,1 << 30 }; for(int i=0;i<16;i++) { int dot = dots[i]; mask >>= 2; int bits =( (dot < halfPoint) ? 4 : 0 ) | ( (dot < c0Point) ? 2 : 0 ) | ( (dot < c3Point) ? 1 : 0 ); mask |= indexMap[bits]; } #else for (i=15;i>=0;i--) { int dot = dots[i]; mask <<= 2; if(dot < halfPoint) mask |= (dot < c0Point) ? 1 : 3; else mask |= (dot < c3Point) ? 2 : 0; } #endif } else { // with floyd-steinberg dithering int err[8],*ep1 = err,*ep2 = err+4; int *dp = dots, y; c0Point <<= 4; halfPoint <<= 4; c3Point <<= 4; for(i=0;i<8;i++) err[i] = 0; for(y=0;y<4;y++) { int dot,lmask,step; dot = (dp[0] << 4) + (3*ep2[1] + 5*ep2[0]); if(dot < halfPoint) step = (dot < c0Point) ? 1 : 3; else step = (dot < c3Point) ? 2 : 0; ep1[0] = dp[0] - stops[step]; lmask = step; dot = (dp[1] << 4) + (7*ep1[0] + 3*ep2[2] + 5*ep2[1] + ep2[0]); if(dot < halfPoint) step = (dot < c0Point) ? 1 : 3; else step = (dot < c3Point) ? 2 : 0; ep1[1] = dp[1] - stops[step]; lmask |= step<<2; dot = (dp[2] << 4) + (7*ep1[1] + 3*ep2[3] + 5*ep2[2] + ep2[1]); if(dot < halfPoint) step = (dot < c0Point) ? 1 : 3; else step = (dot < c3Point) ? 2 : 0; ep1[2] = dp[2] - stops[step]; lmask |= step<<4; dot = (dp[3] << 4) + (7*ep1[2] + 5*ep2[3] + ep2[2]); if(dot < halfPoint) step = (dot < c0Point) ? 1 : 3; else step = (dot < c3Point) ? 2 : 0; ep1[3] = dp[3] - stops[step]; lmask |= step<<6; dp += 4; mask |= lmask << (y*8); { int *et = ep1; ep1 = ep2; ep2 = et; } // swap } } return mask; } // The color optimization function. (Clever code, part 1) static void stb__OptimizeColorsBlock(unsigned char *block, unsigned short *pmax16, unsigned short *pmin16) { unsigned char *minp, *maxp; double magn; int v_r,v_g,v_b; static const int nIterPower = 4; float covf[6],vfr,vfg,vfb; // determine color distribution int cov[6]; int mu[3],min[3],max[3]; int ch,i,iter; for(ch=0;ch<3;ch++) { const unsigned char *bp = ((const unsigned char *) block) + ch; int muv,minv,maxv; #ifdef NEW_OPTIMISATIONS # define MIN(a,b) (int)a + ( ((int)b-a) & ( ((int)b-a) >> 31 ) ) # define MAX(a,b) (int)a + ( ((int)b-a) & ( ((int)a-b) >> 31 ) ) # define RANGE(a,b,n) int min##n = MIN(a,b); int max##n = a+b - min##n; muv += a+b; # define MINMAX(a,b,n) int min##n = MIN(min##a, min##b); int max##n = MAX(max##a, max##b); muv = 0; RANGE(bp[0], bp[4], 1); RANGE(bp[8], bp[12], 2); RANGE(bp[16], bp[20], 3); RANGE(bp[24], bp[28], 4); RANGE(bp[32], bp[36], 5); RANGE(bp[40], bp[44], 6); RANGE(bp[48], bp[52], 7); RANGE(bp[56], bp[60], 8); MINMAX(1,2,9); MINMAX(3,4,10); MINMAX(5,6,11); MINMAX(7,8,12); MINMAX(9,10,13); MINMAX(11,12,14); minv = MIN(min13,min14); maxv = MAX(max13,max14); #else muv = minv = maxv = bp[0]; for(i=4;i<64;i+=4) { muv += bp[i]; if (bp[i] < minv) minv = bp[i]; else if (bp[i] > maxv) maxv = bp[i]; } #endif mu[ch] = (muv + 8) >> 4; min[ch] = minv; max[ch] = maxv; } // determine covariance matrix for (i=0;i<6;i++) cov[i] = 0; for (i=0;i<16;i++) { int r = block[i*4+0] - mu[0]; int g = block[i*4+1] - mu[1]; int b = block[i*4+2] - mu[2]; cov[0] += r*r; cov[1] += r*g; cov[2] += r*b; cov[3] += g*g; cov[4] += g*b; cov[5] += b*b; } // convert covariance matrix to float, find principal axis via power iter for(i=0;i<6;i++) covf[i] = cov[i] / 255.0f; vfr = (float) (max[0] - min[0]); vfg = (float) (max[1] - min[1]); vfb = (float) (max[2] - min[2]); for(iter=0;iter magn) magn = fabs(vfg); if (fabs(vfb) > magn) magn = fabs(vfb); if(magn < 4.0f) { // too small, default to luminance v_r = 299; // JPEG YCbCr luma coefs, scaled by 1000. v_g = 587; v_b = 114; } else { magn = 512.0 / magn; v_r = (int) (vfr * magn); v_g = (int) (vfg * magn); v_b = (int) (vfb * magn); } #ifdef NEW_OPTIMISATIONS // Pick colors at extreme points int mind, maxd; mind = maxd = block[0]*v_r + block[1]*v_g + block[2]*v_b; minp = maxp = block; for(i=1;i<16;i++) { int dot = block[i*4+0]*v_r + block[i*4+1]*v_g + block[i*4+2]*v_b; if (dot < mind) { mind = dot; minp = block+i*4; continue; } if (dot > maxd) { maxd = dot; maxp = block+i*4; } } #else int mind = 0x7fffffff,maxd = -0x7fffffff; // Pick colors at extreme points for(i=0;i<16;i++) { int dot = block[i*4+0]*v_r + block[i*4+1]*v_g + block[i*4+2]*v_b; if (dot < mind) { mind = dot; minp = block+i*4; } if (dot > maxd) { maxd = dot; maxp = block+i*4; } } #endif *pmax16 = stb__As16Bit(maxp[0],maxp[1],maxp[2]); *pmin16 = stb__As16Bit(minp[0],minp[1],minp[2]); } inline static int stb__sclamp(float y, int p0, int p1) { int x = (int) y; #ifdef NEW_OPTIMISATIONS x = x>p1 ? p1 : x; return x p1) return p1; return x; #endif } // The refinement function. (Clever code, part 2) // Tries to optimize colors to suit block contents better. // (By solving a least squares system via normal equations+Cramer's rule) static int stb__RefineBlock(unsigned char *block, unsigned short *pmax16, unsigned short *pmin16, unsigned int mask) { static const int w1Tab[4] = { 3,0,2,1 }; static const int prods[4] = { 0x090000,0x000900,0x040102,0x010402 }; // ^some magic to save a lot of multiplies in the accumulating loop... // (precomputed products of weights for least squares system, accumulated inside one 32-bit register) float frb,fg; unsigned short oldMin, oldMax, min16, max16; int i, akku = 0, xx,xy,yy; int At1_r,At1_g,At1_b; int At2_r,At2_g,At2_b; unsigned int cm = mask; oldMin = *pmin16; oldMax = *pmax16; if((mask ^ (mask<<2)) < 4) // all pixels have the same index? { // yes, linear system would be singular; solve using optimal // single-color match on average color int r = 8, g = 8, b = 8; for (i=0;i<16;++i) { r += block[i*4+0]; g += block[i*4+1]; b += block[i*4+2]; } r >>= 4; g >>= 4; b >>= 4; max16 = (stb__OMatch5[r][0]<<11) | (stb__OMatch6[g][0]<<5) | stb__OMatch5[b][0]; min16 = (stb__OMatch5[r][1]<<11) | (stb__OMatch6[g][1]<<5) | stb__OMatch5[b][1]; } else { At1_r = At1_g = At1_b = 0; At2_r = At2_g = At2_b = 0; for (i=0;i<16;++i,cm>>=2) { int step = cm&3; int w1 = w1Tab[step]; int r = block[i*4+0]; int g = block[i*4+1]; int b = block[i*4+2]; akku += prods[step]; At1_r += w1*r; At1_g += w1*g; At1_b += w1*b; At2_r += r; At2_g += g; At2_b += b; } At2_r = 3*At2_r - At1_r; At2_g = 3*At2_g - At1_g; At2_b = 3*At2_b - At1_b; // extract solutions and decide solvability xx = akku >> 16; yy = (akku >> 8) & 0xff; xy = (akku >> 0) & 0xff; frb = 3.0f * 31.0f / 255.0f / (xx*yy - xy*xy); fg = frb * 63.0f / 31.0f; // solve. max16 = stb__sclamp((At1_r*yy - At2_r*xy)*frb+0.5f,0,31) << 11; max16 |= stb__sclamp((At1_g*yy - At2_g*xy)*fg +0.5f,0,63) << 5; max16 |= stb__sclamp((At1_b*yy - At2_b*xy)*frb+0.5f,0,31) << 0; min16 = stb__sclamp((At2_r*xx - At1_r*xy)*frb+0.5f,0,31) << 11; min16 |= stb__sclamp((At2_g*xx - At1_g*xy)*fg +0.5f,0,63) << 5; min16 |= stb__sclamp((At2_b*xx - At1_b*xy)*frb+0.5f,0,31) << 0; } *pmin16 = min16; *pmax16 = max16; return oldMin != min16 || oldMax != max16; } // Color block compression static void stb__CompressColorBlock(unsigned char *dest, unsigned char *block, int mode) { unsigned int mask; int i; int dither; int refinecount; unsigned short max16, min16; unsigned char dblock[16*4],color[4*4]; dither = mode & STB_DXT_DITHER; refinecount = (mode & STB_DXT_HIGHQUAL) ? 2 : 1; // check if block is constant for (i=1;i<16;i++) if (((unsigned int *) block)[i] != ((unsigned int *) block)[0]) break; if(i == 16) { // constant color int r = block[0], g = block[1], b = block[2]; mask = 0xaaaaaaaa; max16 = (stb__OMatch5[r][0]<<11) | (stb__OMatch6[g][0]<<5) | stb__OMatch5[b][0]; min16 = (stb__OMatch5[r][1]<<11) | (stb__OMatch6[g][1]<<5) | stb__OMatch5[b][1]; } else { // first step: compute dithered version for PCA if desired if(dither) stb__DitherBlock(dblock,block); // second step: pca+map along principal axis stb__OptimizeColorsBlock(dither ? dblock : block,&max16,&min16); if (max16 != min16) { stb__EvalColors(color,max16,min16); mask = stb__MatchColorsBlock(block,color,dither); } else mask = 0; // third step: refine (multiple times if requested) for (i=0;i> 8); dest[2] = (unsigned char) (min16); dest[3] = (unsigned char) (min16 >> 8); dest[4] = (unsigned char) (mask); dest[5] = (unsigned char) (mask >> 8); dest[6] = (unsigned char) (mask >> 16); dest[7] = (unsigned char) (mask >> 24); } // Alpha block compression (this is easy for a change) static void stb__CompressAlphaBlock(unsigned char *dest,unsigned char *src,int mode) { int i,dist,bias,dist4,dist2,bits,mask; // find min/max color int mn,mx; mn = mx = src[3]; for (i=1;i<16;i++) { if (src[i*4+3] < mn) mn = src[i*4+3]; else if (src[i*4+3] > mx) mx = src[i*4+3]; } // encode them ((unsigned char *)dest)[0] = mx; ((unsigned char *)dest)[1] = mn; dest += 2; #ifdef NEW_OPTIMISATIONS // mono-alpha shortcut if (mn==mx) { *(unsigned short*)dest = 0; dest += 2; *(unsigned int*)dest = 0; return; } #endif // determine bias and emit color indices // given the choice of mx/mn, these indices are optimal: // http://fgiesen.wordpress.com/2009/12/15/dxt5-alpha-block-index-determination/ dist = mx-mn; //printf("mn = %i; mx = %i; dist = %i\n", mn, mx, dist); dist4 = dist*4; dist2 = dist*2; bias = (dist < 8) ? (dist - 1) : (dist/2 + 2); bias -= mn * 7; bits = 0, mask=0; for (i=0;i<16;i++) { int a = src[i*4+3]*7 + bias; int ind,t; // select index. this is a "linear scale" lerp factor between 0 (val=min) and 7 (val=max). t = (a >= dist4) ? -1 : 0; ind = t & 4; a -= dist4 & t; t = (a >= dist2) ? -1 : 0; ind += t & 2; a -= dist2 & t; ind += (a >= dist); // turn linear scale into DXT index (0/1 are extremal pts) ind = -ind & 7; ind ^= (2 > ind); // write index mask |= ind << bits; if((bits += 3) >= 8) { *dest++ = mask; mask >>= 8; bits -= 8; } } } static void stb__InitDXT() { int i; for(i=0;i<32;i++) stb__Expand5[i] = (i<<3)|(i>>2); for(i=0;i<64;i++) stb__Expand6[i] = (i<<2)|(i>>4); for(i=0;i<256+16;i++) { int v = i-8 < 0 ? 0 : i-8 > 255 ? 255 : i-8; stb__QuantRBTab[i] = stb__Expand5[stb__Mul8Bit(v,31)]; stb__QuantGTab[i] = stb__Expand6[stb__Mul8Bit(v,63)]; } stb__PrepareOptTable(&stb__OMatch5[0][0],stb__Expand5,32); stb__PrepareOptTable(&stb__OMatch6[0][0],stb__Expand6,64); } void stb_compress_dxt_block(unsigned char *dest, const unsigned char *src, int alpha, int mode) { static int init=1; if (init) { stb__InitDXT(); init=0; } if (alpha) { stb__CompressAlphaBlock(dest,(unsigned char*) src,mode); dest += 8; } stb__CompressColorBlock(dest,(unsigned char*) src,mode); } int imin(int x, int y) { return (x < y) ? x : y; } static void extractBlock(const unsigned char *src, int x, int y, int w, int h, unsigned char *block) { int i, j; #ifdef NEW_OPTIMISATIONS if ((w-x >=4) && (h-y >=4)) { // Full Square shortcut src += x*4; src += y*w*4; for (i=0; i < 4; ++i) { *(unsigned int*)block = *(unsigned int*) src; block += 4; src += 4; *(unsigned int*)block = *(unsigned int*) src; block += 4; src += 4; *(unsigned int*)block = *(unsigned int*) src; block += 4; src += 4; *(unsigned int*)block = *(unsigned int*) src; block += 4; src += (w*4) - 12; } return; } #endif int bw = imin(w - x, 4); int bh = imin(h - y, 4); int bx, by; const int rem[] = { 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 2, 0, 0, 1, 2, 3 }; for(i = 0; i < 4; ++i) { by = rem[(bh - 1) * 4 + i] + y; for(j = 0; j < 4; ++j) { bx = rem[(bw - 1) * 4 + j] + x; block[(i * 4 * 4) + (j * 4) + 0] = src[(by * (w * 4)) + (bx * 4) + 0]; block[(i * 4 * 4) + (j * 4) + 1] = src[(by * (w * 4)) + (bx * 4) + 1]; block[(i * 4 * 4) + (j * 4) + 2] = src[(by * (w * 4)) + (bx * 4) + 2]; block[(i * 4 * 4) + (j * 4) + 3] = src[(by * (w * 4)) + (bx * 4) + 3]; } } } // should be a pretty optimized 0-255 clamper inline static unsigned char clamp255( int n ) { if( n > 255 ) n = 255; if( n < 0 ) n = 0; return n; } void rgbToYCoCgBlock( unsigned char * dst, const unsigned char * src ) { // Calculate Co and Cg extents int extents = 0; int n = 0; int iY, iCo, iCg; //, r, g, b; int blockCo[16]; int blockCg[16]; int i; const unsigned char *px = src; for(i=0;i extents) extents = -iCo; if( iCo > extents) extents = iCo; if(-iCg > extents) extents = -iCg; if( iCg > extents) extents = iCg; blockCo[n] = iCo; blockCg[n++] = iCg; px += 4; } // Co = -510..510 // Cg = -510..510 float scaleFactor = 1.0f; if(extents > 127) scaleFactor = (float)extents * 4.0f / 510.0f; // Convert to quantized scalefactor unsigned char scaleFactorQuantized = (unsigned char)(ceil((scaleFactor - 1.0f) * 31.0f / 3.0f)); // Unquantize scaleFactor = 1.0f + (float)(scaleFactorQuantized / 31.0f) * 3.0f; unsigned char bVal = (unsigned char)((scaleFactorQuantized << 3) | (scaleFactorQuantized >> 2)); unsigned char *outPx = dst; n = 0; px = src; /* for(i=0;i<16;i++) { // Calculate components iY = ( px[0] + (px[1]<<1) + px[2] + 2 ) / 4; iCo = ((blockCo[n] / scaleFactor) + 128); iCg = ((blockCg[n] / scaleFactor) + 128); if(iCo < 0) iCo = 0; else if(iCo > 255) iCo = 255; if(iCg < 0) iCg = 0; else if(iCg > 255) iCg = 255; if(iY < 0) iY = 0; else if(iY > 255) iY = 255; px += 4; outPx[0] = (unsigned char)iCo; outPx[1] = (unsigned char)iCg; outPx[2] = bVal; outPx[3] = (unsigned char)iY; outPx += 4; }*/ for(i=0;i<16;i++) { // Calculate components int r = px[0]; int g = (px[1] + 1) >> 1; int b = px[2]; int tmp = (2 + r + b) >> 2; // Co iCo = clamp255( 128 + ((r - b + 1) >> 1) ); // Y iY = clamp255( g + tmp ); // Cg iCg = clamp255( 128 + g - tmp ); px += 4; outPx[0] = (unsigned char)iCo; outPx[1] = (unsigned char)iCg; outPx[2] = bVal; outPx[3] = (unsigned char)iY; outPx += 4; } } void rygCompress( unsigned char *dst, unsigned char *src, int w, int h, int isDxt5 ) { unsigned char block[64]; int x, y; for(y = 0; y < h; y += 4) { for(x = 0; x < w; x += 4) { extractBlock(src, x, y, w, h, block); stb_compress_dxt_block(dst, block, isDxt5, 10); dst += isDxt5 ? 16 : 8; } } } void rygCompressYCoCg( unsigned char *dst, unsigned char *src, int w, int h ) { unsigned char block[64]; unsigned char ycocgblock[64]; int x, y; for(y = 0; y < h; y += 4) { for(x = 0; x < w; x += 4) { extractBlock(src, x, y, w, h, block); rgbToYCoCgBlock(ycocgblock,block); stb_compress_dxt_block(dst, ycocgblock, 1, 10); dst += 16; } } } static void stbgl__compress(unsigned char *p, unsigned char *rgba, int w, int h, int isDxt5) { int i,j,y,y2; int alpha = isDxt5; for (j=0; j < w; j += 4) { int x=4; for (i=0; i < h; i += 4) { unsigned char block[16*4]; if (i+3 >= w) x = w-i; for (y=0; y < 4; ++y) { if (j+y >= h) break; memcpy(block+y*16, rgba + w*4*(j+y) + i*4, x*4); } if (x < 4) { switch (x) { case 0: assert(0); case 1: for (y2=0; y2 < y; ++y2) { memcpy(block+y2*16+1*4, block+y2*16+0*4, 4); memcpy(block+y2*16+2*4, block+y2*16+0*4, 8); } break; case 2: for (y2=0; y2 < y; ++y2) memcpy(block+y2*16+2*4, block+y2*16+0*4, 8); break; case 3: for (y2=0; y2 < y; ++y2) memcpy(block+y2*16+3*4, block+y2*16+1*4, 4); break; } } y2 = 0; for(; y<4; ++y,++y2) memcpy(block+y*16, block+y2*16, 4*4); stb_compress_dxt_block(p, block, alpha, 10); p += alpha ? 16 : 8; } } // assert(p <= end); } static inline unsigned char linearize(unsigned char inByte) { float srgbVal = ((float)inByte) / 255.0f; float linearVal; if(srgbVal < 0.04045) linearVal = srgbVal / 12.92f; else linearVal = pow( (srgbVal + 0.055f) / 1.055f, 2.4f); return (unsigned char)(floor(sqrt(linearVal)* 255.0 + 0.5)); } void linearize( unsigned char * dst, const unsigned char * src, int n ) { n*=4; for( int i = 0; i < n; i++ ) dst[i] = linearize(src[i]); } #endif // STB_DXT_IMPLEMENTATION #endif // STB_INCLUDE_STB_DXT_H ================================================ FILE: dll/supmodes.cpp ================================================ #include "dxwnd.h" SupportedRes_Type SupportedSVGARes[12]= { {320,200}, {320,240}, {512,384}, // needed by "Outcast" loading screen {640,400}, {640,480}, {720,480}, {800,600}, {1024,768}, // XGA {1280,800}, // WXGA {1280,1024}, {1600,1200}, // UXGA, needed by "LEGO Star Wars" in high res mode {0,0} }; SupportedRes_Type SupportedHDTVRes[11]= { {640,360}, // nHD {720,480}, // DVD {720,576}, // DV-PAL {960,540}, // qHD {1176,1000}, {1280,720}, // HD {1440,900}, // Swat 3 hack {1440,960}, {1600,900}, // HD+ {1920,1080}, // FHD {0,0} }; int SupportedDepths[5]={8,16,24,32,0}; ================================================ FILE: dll/syslibs.h ================================================ /* =================================================================== syslibs.h: contains typedef definition and extern pointer declarations for all system calls hooked by DxWnd: GDI32.dll Kernel32.dll ole32.dll user32.dll ====================================================================*/ #include "Mmsystem.h" /* =================================================================== type definitions ====================================================================*/ // advapi32.dll typedef LONG (WINAPI *RegCloseKey_Type)(HKEY); typedef LONG (WINAPI *RegCreateKey_Type)(HKEY, LPCTSTR, PHKEY); typedef LONG (WINAPI *RegCreateKeyEx_Type)(HKEY, LPCTSTR, DWORD, LPTSTR, DWORD, REGSAM, LPSECURITY_ATTRIBUTES, PHKEY, LPDWORD); typedef LONG (WINAPI *RegOpenKeyEx_Type)(HKEY, LPCTSTR, DWORD, REGSAM, PHKEY); typedef LONG (WINAPI *RegQueryValue_Type)(HKEY, LPCTSTR, LPTSTR, PLONG); typedef LONG (WINAPI *RegQueryValueEx_Type)(HKEY, LPCTSTR, LPDWORD, LPDWORD, LPBYTE, LPDWORD); typedef LONG (WINAPI *RegSetValueEx_Type)(HKEY, LPCTSTR, DWORD, DWORD, const BYTE *, DWORD); // ImmLib.dll: typedef BOOL (WINAPI *ImmNotifyIME_Type)(HIMC, DWORD, DWORD, DWORD); typedef HIMC (WINAPI *ImmCreateContext_Type)(void); typedef BOOL (WINAPI *ImmDestroyContext_Type)(HIMC); typedef BOOL (WINAPI *ImmSetOpenStatus_Type)(HIMC, BOOL); typedef HIMC (WINAPI *ImmAssociateContext_Type)(HWND, HIMC); typedef BOOL (WINAPI *ImmSetCompositionWindow_Type)(HIMC, LPCOMPOSITIONFORM); typedef BOOL (WINAPI *ImmSetCompositionString_Type)(HIMC, DWORD, LPVOID, DWORD, LPVOID, DWORD); typedef BOOL (WINAPI *ImmGetOpenStatus_Type)(HIMC); // GDI32.dll: typedef BOOL (WINAPI *BitBlt_Type)(HDC, int, int, int, int, HDC, int, int, DWORD); typedef HDC (WINAPI *CreateCompatibleDC_Type)(HDC); typedef HDC (WINAPI *CreateDCA_Type)(LPCSTR, LPCSTR, LPCSTR, const DEVMODE *); typedef HDC (WINAPI *CreateDCW_Type)(LPWSTR, LPWSTR, LPWSTR, const DEVMODE *); typedef HFONT (WINAPI *CreateFont_Type)(int, int, int, int, int, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, LPCTSTR); typedef HFONT (WINAPI *CreateFontIndirect_Type)(const LOGFONT*); typedef HDC (WINAPI *CreateICA_Type)(LPCTSTR, LPCTSTR, LPCTSTR, const DEVMODE *); typedef HPALETTE(WINAPI *GDICreatePalette_Type)(CONST LOGPALETTE *); typedef HDWP (WINAPI *DeferWindowPos_Type)(HDWP, HWND, HWND, int, int, int, int, UINT); typedef BOOL (WINAPI *DeleteDC_Type)(HDC); typedef BOOL (WINAPI *ExtTextOutW_Type)(HDC, int, int, UINT, const RECT *, LPCWSTR, UINT, const INT *); typedef BOOL (WINAPI *ExtTextOutA_Type)(HDC, int, int, UINT, const RECT *, LPCSTR, UINT, const INT *); typedef int (WINAPI *GetClipBox_Type)(HDC, LPRECT); typedef BOOL (WINAPI *GetDCOrgEx_Type)(HDC, LPPOINT); typedef int (WINAPI *GetRgnBox_Type)(HRGN, LPRECT); typedef DWORD (WINAPI *GetRegionData_Type)(HRGN, DWORD, LPRGNDATA); typedef int (WINAPI *GetDeviceCaps_Type)(HDC, int); typedef BOOL (WINAPI *GetDeviceGammaRamp_Type)(HDC, LPVOID); typedef BOOL (WINAPI *GetSystemPaletteEntries_Type)(HDC, UINT, UINT, LPPALETTEENTRY); typedef UINT (WINAPI *GetPaletteEntries_Type)(HPALETTE, UINT, UINT, LPPALETTEENTRY); typedef int (WINAPI *IntersectClipRect_Type)(HDC, int, int, int, int); typedef UINT (WINAPI *GetSystemPaletteUse_Type)(HDC); typedef BOOL (WINAPI *PatBlt_Type)(HDC, int, int, int, int, DWORD); typedef BOOL (WINAPI *Polyline_Type)(HDC, const POINT *, int); typedef UINT (WINAPI *RealizePalette_Type)(HDC); typedef BOOL (WINAPI *Rectangle_Type)(HDC, int, int, int, int); typedef BOOL (WINAPI *RestoreDC_Type)(HDC, int); typedef int (WINAPI *SaveDC_Type)(HDC); typedef BOOL (WINAPI *ScaleWindowExtEx_Type)(HDC, int, int, int, int, LPSIZE); typedef HPALETTE(WINAPI *SelectPalette_Type)(HDC, HPALETTE, BOOL); typedef COLORREF (WINAPI *SetBkColor_Type)(HDC, COLORREF); typedef BOOL (WINAPI *SetDeviceGammaRamp_Type)(HDC, LPVOID); typedef COLORREF(WINAPI *SetTextColor_Type)(HDC, COLORREF); typedef BOOL (WINAPI *StretchBlt_Type)(HDC, int, int, int, int, HDC, int, int, int, int, DWORD); typedef int (WINAPI *StretchDIBits_Type)(HDC, int, int, int, int, int, int, int, int, const VOID *, const BITMAPINFO *, UINT, DWORD); typedef BOOL (WINAPI *TextOutA_Type)(HDC, int, int, LPCTSTR, int); typedef BOOL (WINAPI *TextOutW_Type)(HDC, int, int, LPCWSTR, int); typedef BOOL (WINAPI *PolyBezier_Type)(HDC, const POINT *, DWORD); typedef BOOL (WINAPI *PolyBezierTo_Type)(HDC, const POINT *, DWORD); typedef BOOL (WINAPI *PolylineTo_Type)(HDC, const POINT *, DWORD); typedef BOOL (WINAPI *PolyDraw_Type)(HDC, const POINT *, const BYTE *, int); typedef BOOL (WINAPI *MoveToEx_Type)(HDC, int, int, LPPOINT); typedef BOOL (WINAPI *ArcTo_Type)(HDC, int, int, int, int, int, int, int, int); typedef BOOL (WINAPI *LineTo_Type)(HDC, int, int); typedef int (WINAPI *SetDIBitsToDevice_Type)(HDC, int, int, DWORD, DWORD, int, int, UINT, UINT, const VOID *, const BITMAPINFO *, UINT); typedef BOOL (WINAPI *SetRectRgn_Type)(HRGN, int, int, int, int); typedef HBITMAP (WINAPI *CreateCompatibleBitmap_Type)(HDC, int, int); typedef COLORREF(WINAPI *SetPixel_Type)(HDC, int, int, COLORREF); typedef BOOL (WINAPI *Ellipse_Type)(HDC, int, int, int, int); typedef BOOL (WINAPI *Polygon_Type)(HDC, const POINT *, int); typedef BOOL (WINAPI *Arc_Type)(HDC, int, int, int, int, int, int, int, int); typedef HRGN (WINAPI *CreateEllipticRgn_Type)(int, int, int, int); typedef HRGN (WINAPI *CreateEllipticRgnIndirect_Type)(const RECT *); typedef HRGN (WINAPI *CreateRectRgn_Type)(int, int, int, int); typedef HRGN (WINAPI *CreateRectRgnIndirect_Type)(const RECT *); typedef HRGN (WINAPI *CreatePolygonRgn_Type)(const POINT *, int, int); typedef BOOL (WINAPI *MaskBlt_Type)(HDC, int, int, int, int, HDC, int, int, HBITMAP, int, int, DWORD); typedef BOOL (WINAPI *SetViewportOrgEx_Type)(HDC, int, int, LPPOINT); typedef BOOL (WINAPI *SetViewportExtEx_Type)(HDC, int, int, LPSIZE); typedef BOOL (WINAPI *GetViewportOrgEx_Type)(HDC, LPPOINT); typedef BOOL (WINAPI *GetViewportExtEx_Type)(HDC, LPPOINT); typedef BOOL (WINAPI *GetWindowOrgEx_Type)(HDC, LPPOINT); typedef BOOL (WINAPI *SetWindowExtEx_Type)(HDC, int, int, LPPOINT); typedef BOOL (WINAPI *SetWindowOrgEx_Type)(HDC, int, int, LPPOINT); typedef BOOL (WINAPI *GetCurrentPositionEx_Type)(HDC, LPPOINT); typedef BOOL (WINAPI *AnimatePalette_Type)(HPALETTE, UINT, UINT, const PALETTEENTRY *); typedef UINT (WINAPI *SetSystemPaletteUse_Type)(HDC, UINT); typedef BOOL (WINAPI *GDISetPixelFormat_Type)(HDC, int, const PIXELFORMATDESCRIPTOR *); typedef BOOL (WINAPI *GDIGetPixelFormat_Type)(HDC); typedef int (WINAPI *ChoosePixelFormat_Type)(HDC, const PIXELFORMATDESCRIPTOR *); typedef int (WINAPI *DescribePixelFormat_Type)(HDC, int, UINT, LPPIXELFORMATDESCRIPTOR); typedef DWORD (WINAPI *GetObjectType_Type)(HGDIOBJ); typedef int (WINAPI *SetDIBits_Type)(HDC, HBITMAP, UINT, UINT, const VOID *, const BITMAPINFO *, UINT); typedef int (WINAPI *OffsetRgn_Type)(HRGN, int, int); typedef COLORREF (WINAPI *GetPixel_Type)(HDC, int, int); typedef BOOL (WINAPI *PlgBlt_Type)(HDC, const POINT *, HDC, int, int, int, int, HBITMAP, int, int); typedef BOOL (WINAPI *SetPixelV_Type)(HDC, int, int, COLORREF); typedef BOOL (WINAPI *Chord_Type)(HDC, int, int, int, int, int, int, int, int); typedef BOOL (WINAPI *PolyTextOutA_Type)(HDC, const POLYTEXTA *, int); typedef BOOL (WINAPI *PolyTextOutW_Type)(HDC, const POLYTEXTW *, int); typedef int (WINAPI *GetDIBits_Type)(HDC, HBITMAP, UINT, UINT, LPVOID, LPBITMAPINFO, UINT); typedef HBITMAP (WINAPI *CreateDIBitmap_Type)(HDC, BITMAPINFOHEADER *, DWORD, const VOID *, const BITMAPINFO *, UINT); typedef HBITMAP (WINAPI *CreateDIBSection_Type)(HDC, const BITMAPINFO *, UINT, VOID **, HANDLE, DWORD); typedef HBITMAP (WINAPI *CreateDiscardableBitmap_Type)(HDC, int, int); typedef BOOL (WINAPI *ExtFloodFill_Type)(HDC, int, int, COLORREF, UINT); typedef BOOL (WINAPI *GdiAlphaBlend_Type)(HDC, int, int, int, int, HDC, int, int, int, int, BLENDFUNCTION); typedef BOOL (WINAPI *GdiGradientFill_Type)(HDC, PTRIVERTEX, ULONG, PVOID, ULONG, ULONG); typedef BOOL (WINAPI *GdiTransparentBlt_Type)(HDC, int, int, int, int, HDC, int, int, int, int, UINT); typedef BOOL (WINAPI *Pie_Type)(HDC, int, int, int, int, int, int, int, int); typedef BOOL (WINAPI *AngleArc_Type)(HDC, int, int, DWORD, FLOAT, FLOAT); typedef BOOL (WINAPI *PolyPolyline_Type)(HDC, const POINT *, const DWORD *, DWORD); typedef BOOL (WINAPI *FillRgn_Type)(HDC, HRGN, HBRUSH); typedef BOOL (WINAPI *FrameRgn_Type)(HDC, HRGN, HBRUSH, int, int); typedef BOOL (WINAPI *InvertRgn_Type)(HDC, HRGN); typedef BOOL (WINAPI *PaintRgn_Type)(HDC, HRGN); typedef int (WINAPI *SetMapMode_Type)(HDC, int); typedef BOOL (WINAPI *RoundRect_Type)(HDC, int, int, int, int, int, int); typedef BOOL (WINAPI *PolyPolygon_Type)(HDC, const POINT *, const INT *, int); //typedef BOOL (WINAPI *DPtoLP_Type)(HDC, LPPOINT, int); typedef BOOL (WINAPI *PlayEnhMetaFile_Type)(HDC, HENHMETAFILE, const RECT *); typedef UINT (WINAPI *SetPaletteEntries_Type)(HPALETTE, UINT, UINT, const PALETTEENTRY *); typedef int (WINAPI *SetROP2_Type)(HDC, int); typedef int (WINAPI *EnumFontsA_Type)(HDC, LPCSTR, FONTENUMPROC, LPARAM); typedef BOOL (WINAPI *GetTextExtentPointA_Type)(HDC, LPCTSTR, int, LPSIZE); typedef BOOL (WINAPI *GetTextExtentPoint32A_Type)(HDC, LPCTSTR, int, LPSIZE); typedef HGDIOBJ (WINAPI *SelectObject_Type)(HDC, HGDIOBJ); typedef BOOL (WINAPI *DeleteObject_Type)(HGDIOBJ); typedef int (WINAPI *SelectClipRgn_Type)(HDC, HRGN); // Kernel32.dll: typedef BOOL (WINAPI *GetDiskFreeSpaceA_Type)(LPCSTR, LPDWORD, LPDWORD, LPDWORD, LPDWORD); typedef UINT (WINAPI *GetDriveType_Type)(LPCSTR); typedef DWORD (WINAPI *GetLogicalDrives_Type)(void); typedef void (WINAPI *GetLocalTime_Type)(LPSYSTEMTIME); typedef FARPROC (WINAPI *GetProcAddress_Type)(HMODULE, LPCSTR); typedef void (WINAPI *GetSystemTime_Type)(LPSYSTEMTIME); typedef void (WINAPI *GetSystemTimeAsFileTime_Type)(LPFILETIME); typedef UINT (WINAPI *GetTempFileName_Type)(LPCTSTR, LPCTSTR, UINT, LPTSTR); typedef DWORD (WINAPI *GetTickCount_Type)(void); typedef DWORD (WINAPI *GetVersion_Type)(void); typedef BOOL (WINAPI *GetVersionExA_Type)(LPOSVERSIONINFOA); typedef BOOL (WINAPI *GetVersionExW_Type)(LPOSVERSIONINFOW); typedef void (WINAPI *GlobalMemoryStatus_Type)(LPMEMORYSTATUS); typedef HMODULE (WINAPI *LoadLibraryA_Type)(LPCTSTR); typedef HMODULE (WINAPI *LoadLibraryExA_Type)(LPCTSTR, HANDLE, DWORD); typedef HMODULE (WINAPI *LoadLibraryW_Type)(LPCWSTR); typedef HMODULE (WINAPI *LoadLibraryExW_Type)(LPCWSTR, HANDLE, DWORD); typedef BOOL (WINAPI *ReadFile_Type)(HANDLE, LPVOID, DWORD, LPDWORD, LPOVERLAPPED); typedef LPTOP_LEVEL_EXCEPTION_FILTER (WINAPI *SetUnhandledExceptionFilter_Type)(LPTOP_LEVEL_EXCEPTION_FILTER); typedef void (WINAPI *Sleep_Type)(DWORD); typedef DWORD (WINAPI *SleepEx_Type)(DWORD, BOOL); typedef BOOL (WINAPI *CreateScalableFontResourceA_Type)(DWORD, LPCTSTR, LPCTSTR, LPCTSTR); typedef BOOL (WINAPI *CreateScalableFontResourceW_Type)(DWORD, LPCWSTR, LPCWSTR, LPCWSTR); typedef int (WINAPI *AddFontResourceA_Type)(LPCTSTR); typedef int (WINAPI *AddFontResourceW_Type)(LPCWSTR); typedef HANDLE (WINAPI *CreateFile_Type)(LPCTSTR, DWORD, DWORD, LPSECURITY_ATTRIBUTES, DWORD, DWORD, HANDLE); typedef DWORD (WINAPI *SetFilePointer_Type)(HANDLE, LONG, PLONG, DWORD); typedef BOOL (WINAPI *CloseHandle_Type)(HANDLE); typedef BOOL (WINAPI *QueryPerformanceFrequency_Type)(LARGE_INTEGER *); typedef BOOL (WINAPI *QueryPerformanceCounter_Type)(LARGE_INTEGER *); typedef BOOL (WINAPI *QueryPerformanceFrequency_Type)(LARGE_INTEGER *); typedef BOOL (WINAPI *GetExitCodeProcess_Type)(HANDLE, LPDWORD); typedef BOOL (WINAPI *FreeLibrary_Type)(HMODULE); // ole32.dll: typedef HRESULT (STDAPICALLTYPE *CoCreateInstance_Type)(REFCLSID, LPUNKNOWN, DWORD, REFIID, LPVOID FAR*); typedef HRESULT (STDAPICALLTYPE *CoCreateInstanceEx_Type)(REFCLSID, IUnknown *, DWORD, COSERVERINFO *, DWORD, MULTI_QI *); typedef HRESULT (STDAPICALLTYPE *CoInitialize_Type)(LPVOID); typedef void (STDAPICALLTYPE *CoUninitialize_Type)(void); // user32.dll: typedef HDC (WINAPI *BeginPaint_Type)(HWND, LPPAINTSTRUCT); typedef LRESULT (WINAPI *CallWindowProc_Type)(WNDPROC, HWND, UINT, WPARAM, LPARAM); typedef LONG (WINAPI *ChangeDisplaySettingsA_Type)(DEVMODEA *, DWORD); typedef LONG (WINAPI *ChangeDisplaySettingsExA_Type)(LPCTSTR, DEVMODEA *, HWND, DWORD, LPVOID); typedef LONG (WINAPI *ChangeDisplaySettingsW_Type)(DEVMODEW *, DWORD); typedef LONG (WINAPI *ChangeDisplaySettingsExW_Type)(LPCTSTR, DEVMODEW *, HWND, DWORD, LPVOID); typedef BOOL (WINAPI *ClientToScreen_Type)(HWND, LPPOINT); typedef BOOL (WINAPI *ClipCursor_Type)(const RECT *); typedef HWND (WINAPI *CreateDialogIndirectParam_Type)(HINSTANCE, LPCDLGTEMPLATE, HWND, DLGPROC, LPARAM); typedef HWND (WINAPI *CreateDialogParam_Type)(HINSTANCE, LPCTSTR, HWND, DLGPROC, LPARAM); typedef HWND (WINAPI *CreateWindowExA_Type)(DWORD, LPCTSTR, LPCTSTR, DWORD, int, int, int, int, HWND, HMENU, HINSTANCE, LPVOID); typedef HWND (WINAPI *CreateWindowExW_Type)(DWORD, LPCWSTR, LPCWSTR, DWORD, int, int, int, int, HWND, HMENU, HINSTANCE, LPVOID); typedef LRESULT (WINAPI *DefWindowProc_Type)(HWND, UINT, WPARAM, LPARAM); typedef int (WINAPI *DrawTextA_Type)(HDC, LPCTSTR, int, LPRECT, UINT); typedef int (WINAPI *DrawTextW_Type)(HDC, LPCWSTR, int, LPRECT, UINT); typedef int (WINAPI *DrawTextExA_Type)(HDC, LPCTSTR, int, LPRECT, UINT, LPDRAWTEXTPARAMS); typedef int (WINAPI *DrawTextExW_Type)(HDC, LPCWSTR, int, LPRECT, UINT, LPDRAWTEXTPARAMS); typedef BOOL (WINAPI *EndPaint_Type)(HWND, const PAINTSTRUCT *); typedef LONG (WINAPI *EnumDisplaySettings_Type)(LPCTSTR, DWORD, LPDEVMODEA); typedef int (WINAPI *FillRect_Type)(HDC, const RECT *, HBRUSH); typedef int (WINAPI *FrameRect_Type)(HDC, const RECT *, HBRUSH); typedef BOOL (WINAPI *GetClientRect_Type)(HWND, LPRECT); typedef BOOL (WINAPI *GetClipCursor_Type)(LPRECT); typedef BOOL (WINAPI *GetCursorPos_Type)(LPPOINT); typedef HDC (WINAPI *GDIGetDC_Type)(HWND); typedef HWND (WINAPI *GetDesktopWindow_Type)(void); typedef BOOL (WINAPI *GetMessage_Type)(LPMSG, HWND, UINT, UINT); typedef BOOL (WINAPI *GetMonitorInfo_Type)(HMONITOR, LPMONITORINFO); typedef int (WINAPI *GetSystemMetrics_Type)(int); typedef HWND (WINAPI *GetTopWindow_Type)(HWND); typedef int (WINAPI *GetUpdateRgn_Type)(HWND, HRGN, BOOL); typedef LONG (WINAPI *GetWindowLong_Type)(HWND, int); typedef BOOL (WINAPI *GetWindowRect_Type)(HWND, LPRECT); typedef BOOL (WINAPI *InvalidateRect_Type)(HWND, CONST RECT *, BOOL); typedef int (WINAPI *MapWindowPoints_Type)(HWND, HWND, LPPOINT, UINT); typedef BOOL (WINAPI *MoveWindow_Type)(HWND, int, int, int, int, BOOL); typedef BOOL (WINAPI *PeekMessage_Type)(LPMSG, HWND, UINT, UINT, UINT); typedef BOOL (WINAPI *RedrawWindow_Type)(HWND, const RECT *, HRGN, UINT); typedef ATOM (WINAPI *RegisterClassExA_Type)(WNDCLASSEXA *); typedef ATOM (WINAPI *RegisterClassA_Type)(WNDCLASSA *); typedef ATOM (WINAPI *RegisterClassExW_Type)(WNDCLASSEXW *); typedef ATOM (WINAPI *RegisterClassW_Type)(WNDCLASSW *); typedef int (WINAPI *GDIReleaseDC_Type)(HWND, HDC); typedef BOOL (WINAPI *ScreenToClient_Type)(HWND, LPPOINT); typedef LRESULT (WINAPI *SendMessage_Type)(HWND, UINT, WPARAM, LPARAM); typedef HCURSOR (WINAPI *SetCursor_Type)(HCURSOR); typedef BOOL (WINAPI *SetCursorPos_Type)(int, int); typedef UINT_PTR(WINAPI *SetTimer_Type)(HWND, UINT_PTR, UINT, TIMERPROC); typedef LONG (WINAPI *SetWindowLong_Type)(HWND, int, LONG); typedef BOOL (WINAPI *SetWindowPos_Type)(HWND, HWND, int, int, int, int, UINT); typedef int (WINAPI *ShowCursor_Type)(BOOL); typedef BOOL (WINAPI *ShowWindow_Type)(HWND, int); typedef LONG (WINAPI *TabbedTextOutA_Type)(HDC, int, int, LPCTSTR, int, int, const LPINT, int); typedef LONG (WINAPI *TabbedTextOutW_Type)(HDC, int, int, LPCWSTR, int, int, const LPINT, int); typedef BOOL (WINAPI *DestroyWindow_Type)(HWND); typedef BOOL (WINAPI *CloseWindow_Type)(HWND); typedef BOOL (WINAPI *SetSysColors_Type)(int, const INT *, const COLORREF *); typedef HDC (WINAPI *GetDCEx_Type)(HWND, HRGN, DWORD); typedef BOOL (WINAPI *UpdateWindow_Type)(HWND); typedef BOOL (WINAPI *GetWindowPlacement_Type)(HWND, WINDOWPLACEMENT *); typedef BOOL (WINAPI *SetWindowPlacement_Type)(HWND, WINDOWPLACEMENT *); typedef HWND (WINAPI *SetCapture_Type)(HWND); typedef HWND (WINAPI *GetForegroundWindow_Type)(void); typedef HWND (WINAPI *GetActiveWindow_Type)(void); typedef BOOL (WINAPI *IsWindowVisible_Type)(HWND); typedef BOOL (WINAPI *SystemParametersInfo_Type)(UINT, UINT, PVOID, UINT); typedef BOOL (WINAPI *KillTimer_Type)(HWND, UINT_PTR); typedef BOOL (WINAPI *GetUpdateRect_Type)(HWND, LPRECT, BOOL); typedef BOOL (WINAPI *GetCursorInfo_Type)(PCURSORINFO); typedef HWND (WINAPI *WindowFromPoint_Type)(POINT); typedef HWND (WINAPI *ChildWindowFromPoint_Type)(HWND, POINT); typedef HWND (WINAPI *ChildWindowFromPointEx_Type)(HWND, POINT, UINT); typedef int (WINAPI *GetWindowTextA_Type)(HWND, LPTSTR, int); typedef BOOL (WINAPI *BringWindowToTop_Type)(HWND); typedef BOOL (WINAPI *SetForegroundWindow_Type)(HWND); typedef HHOOK (WINAPI *SetWindowsHookEx_Type)(int, HOOKPROC, HINSTANCE, DWORD); typedef HRESULT (WINAPI *MessageBoxTimeoutA_Type)(HWND, LPCSTR, LPCSTR, UINT, WORD, DWORD); typedef HRESULT (WINAPI *MessageBoxTimeoutW_Type)(HWND, LPCWSTR, LPCWSTR, UINT, WORD, DWORD); typedef BOOL (WINAPI *IsIconic_Type)(HWND); typedef BOOL (WINAPI *IsZoomed_Type)(HWND); typedef HDESK (WINAPI *CreateDesktop_Type)(LPCTSTR, LPCTSTR, DEVMODE *, DWORD, ACCESS_MASK, LPSECURITY_ATTRIBUTES); typedef BOOL (WINAPI *SwitchDesktop_Type)(HDESK); typedef HDESK (WINAPI *OpenDesktop_Type)(LPTSTR, DWORD, BOOL, ACCESS_MASK); typedef BOOL (WINAPI *CloseDesktop_Type)(HDESK); typedef int (WINAPI *ValidateRect_Type)(HWND, const RECT *); typedef BOOL (WINAPI *ScrollWindow_Type)(HWND, int, int, const RECT *, const RECT *); typedef INT_PTR (WINAPI *DialogBoxParamA_Type)(HINSTANCE, LPCTSTR, HWND, DLGPROC, LPARAM); typedef HWND (WINAPI *GetParent_Type)(HWND); typedef BOOL (WINAPI *InvalidateRgn_Type)(HWND, HRGN, BOOL); typedef BOOL (WINAPI *InvertRect_Type)(HDC, const RECT *); typedef BOOL (WINAPI *ScrollDC_Type)(HDC, int, int, const RECT *, const RECT *, HRGN, LPRECT); typedef BOOL (WINAPI *DrawIcon_Type)(HDC hDC, int X, int Y, HICON hIcon); typedef BOOL (WINAPI *DrawIconEx_Type)(HDC, int, int, HICON, int, int, UINT, HBRUSH, UINT); typedef BOOL (WINAPI *DrawCaption_Type)(HWND, HDC, LPCRECT, UINT); typedef BOOL (WINAPI *PaintDesktop_Type)(HDC); typedef VOID (WINAPI *mouse_event_Type)(DWORD, DWORD, DWORD, DWORD, ULONG_PTR); typedef BOOL (WINAPI *ShowScrollBar_Type)(HWND, int, BOOL); typedef BOOL (WINAPI *DrawMenuBar_Type)(HWND); //typedef BOOL (WINAPI *TranslateMessage_Type)(MSG *); typedef BOOL (WINAPI *EnumDisplayDevicesA_Type)(LPCSTR, DWORD, PDISPLAY_DEVICE, DWORD); typedef BOOL (WINAPI *EnumDisplayDevicesW_Type)(LPCWSTR, DWORD, PDISPLAY_DEVICEW, DWORD); typedef INT_PTR (WINAPI *DialogBoxIndirectParamA_Type)(HINSTANCE, LPCDLGTEMPLATE, HWND, DLGPROC, LPARAM); typedef HWND (WINAPI *GetFocus_Type)(void); //typedef HWND (WINAPI *GetTopWindow_Type)(HWND); typedef DWORD (WINAPI *GetWindowThreadProcessId_Type)(HWND, LPDWORD); typedef HWND (WINAPI *GetWindow_Type)(HWND, UINT); typedef BOOL (WINAPI *IsWindow_Type)(HWND); typedef HWND (WINAPI *SetFocus_Type)(HWND); typedef HBITMAP (WINAPI *LoadBitmapA_Type)(HINSTANCE, LPCSTR); typedef BOOL (WINAPI *EnumWindows_Type)(WNDENUMPROC, LPARAM); typedef BOOL (WINAPI *GetMessage_Type)(LPMSG, HWND, UINT, UINT); typedef BOOL (WINAPI *PostMessage_Type)(HWND, UINT, WPARAM, LPARAM); typedef BOOL (WINAPI *AdjustWindowRect_Type)(LPRECT, DWORD, BOOL); typedef BOOL (WINAPI *AdjustWindowRectEx_Type)(LPRECT, DWORD, BOOL, DWORD); // Winmm.dll: typedef MCIERROR(WINAPI *mciSendCommand_Type)(MCIDEVICEID, UINT, DWORD_PTR, DWORD_PTR); typedef MCIERROR(WINAPI *mciSendStringA_Type)(LPCTSTR, LPTSTR, UINT, HANDLE); typedef MCIERROR(WINAPI *mciSendStringW_Type)(LPCWSTR, LPWSTR, UINT, HANDLE); typedef DWORD (WINAPI *timeGetTime_Type)(void); typedef MMRESULT(WINAPI *timeKillEvent_Type)(UINT); typedef MMRESULT(WINAPI *timeSetEvent_Type)(UINT, UINT, LPTIMECALLBACK, DWORD_PTR, UINT); /* =================================================================== hooked APIs real pointers ====================================================================*/ #ifdef DXWDECLARATIONS #undef DXWEXTERN #undef DXWINITIALIZED #define DXWEXTERN //#define DXWINITIALIZED = NULL #define DXWINITIALIZED #else #undef DXWEXTERN #undef DXWINITIALIZED #define DXWEXTERN extern #define DXWINITIALIZED #endif // advapi32.dll DXWEXTERN RegCloseKey_Type pRegCloseKey DXWINITIALIZED; DXWEXTERN RegCreateKey_Type pRegCreateKey DXWINITIALIZED; DXWEXTERN RegCreateKeyEx_Type pRegCreateKeyEx DXWINITIALIZED; DXWEXTERN RegOpenKeyEx_Type pRegOpenKeyEx DXWINITIALIZED; DXWEXTERN RegQueryValue_Type pRegQueryValue DXWINITIALIZED; DXWEXTERN RegQueryValueEx_Type pRegQueryValueEx DXWINITIALIZED; DXWEXTERN RegSetValueEx_Type pRegSetValueEx DXWINITIALIZED; // ImmLib.dll DXWEXTERN ImmNotifyIME_Type pImmNotifyIME DXWINITIALIZED; DXWEXTERN ImmCreateContext_Type pImmCreateContext DXWINITIALIZED; DXWEXTERN ImmDestroyContext_Type pImmDestroyContext DXWINITIALIZED; DXWEXTERN ImmSetOpenStatus_Type pImmSetOpenStatus DXWINITIALIZED; DXWEXTERN ImmAssociateContext_Type pImmAssociateContext DXWINITIALIZED; DXWEXTERN ImmSetCompositionWindow_Type pImmSetCompositionWindow DXWINITIALIZED; DXWEXTERN ImmSetCompositionString_Type pImmSetCompositionString DXWINITIALIZED; DXWEXTERN ImmGetOpenStatus_Type pImmGetOpenStatus DXWINITIALIZED; // GDI32.dll: DXWEXTERN BitBlt_Type pGDIBitBlt DXWINITIALIZED; DXWEXTERN CreateCompatibleDC_Type pGDICreateCompatibleDC DXWINITIALIZED; DXWEXTERN CreateDCA_Type pGDICreateDCA DXWINITIALIZED; DXWEXTERN CreateDCW_Type pGDICreateDCW DXWINITIALIZED; DXWEXTERN CreateFont_Type pGDICreateFont DXWINITIALIZED; DXWEXTERN CreateFontIndirect_Type pGDICreateFontIndirect DXWINITIALIZED; DXWEXTERN CreateICA_Type pCreateICA DXWINITIALIZED; DXWEXTERN GDICreatePalette_Type pGDICreatePalette DXWINITIALIZED; DXWEXTERN DeferWindowPos_Type pGDIDeferWindowPos DXWINITIALIZED; DXWEXTERN DeleteDC_Type pGDIDeleteDC DXWINITIALIZED; DXWEXTERN ExtTextOutW_Type pExtTextOutW DXWINITIALIZED; DXWEXTERN ExtTextOutA_Type pExtTextOutA DXWINITIALIZED; DXWEXTERN GetClipBox_Type pGDIGetClipBox DXWINITIALIZED; DXWEXTERN GetRgnBox_Type pGetRgnBox DXWINITIALIZED; DXWEXTERN GetRegionData_Type pGetRegionData DXWINITIALIZED; DXWEXTERN GetDCOrgEx_Type pGetDCOrgEx DXWINITIALIZED; DXWEXTERN GetDeviceCaps_Type pGDIGetDeviceCaps DXWINITIALIZED; DXWEXTERN GetDeviceGammaRamp_Type pGDIGetDeviceGammaRamp DXWINITIALIZED; DXWEXTERN GetSystemPaletteEntries_Type pGDIGetSystemPaletteEntries DXWINITIALIZED; DXWEXTERN GetPaletteEntries_Type pGetPaletteEntries DXWINITIALIZED; DXWEXTERN GetSystemPaletteUse_Type pGetSystemPaletteUse DXWINITIALIZED; DXWEXTERN IntersectClipRect_Type pIntersectClipRect DXWINITIALIZED; DXWEXTERN PatBlt_Type pGDIPatBlt DXWINITIALIZED; DXWEXTERN Polyline_Type pPolyline DXWINITIALIZED; DXWEXTERN RealizePalette_Type pGDIRealizePalette DXWINITIALIZED; DXWEXTERN Rectangle_Type pGDIRectangle DXWINITIALIZED; DXWEXTERN RestoreDC_Type pGDIRestoreDC DXWINITIALIZED; DXWEXTERN SaveDC_Type pGDISaveDC DXWINITIALIZED; DXWEXTERN ScaleWindowExtEx_Type pGDIScaleWindowExtEx DXWINITIALIZED; DXWEXTERN SelectPalette_Type pGDISelectPalette DXWINITIALIZED; DXWEXTERN SetBkColor_Type pGDISetBkColor DXWINITIALIZED; DXWEXTERN SetDeviceGammaRamp_Type pGDISetDeviceGammaRamp DXWINITIALIZED; DXWEXTERN SetTextColor_Type pGDISetTextColor DXWINITIALIZED; DXWEXTERN StretchBlt_Type pGDIStretchBlt DXWINITIALIZED; DXWEXTERN StretchDIBits_Type pStretchDIBits DXWINITIALIZED; DXWEXTERN TextOutA_Type pGDITextOutA DXWINITIALIZED; DXWEXTERN TextOutW_Type pGDITextOutW DXWINITIALIZED; DXWEXTERN LineTo_Type pLineTo DXWINITIALIZED; DXWEXTERN ArcTo_Type pArcTo DXWINITIALIZED; DXWEXTERN MoveToEx_Type pMoveToEx DXWINITIALIZED; DXWEXTERN PolyDraw_Type pPolyDraw DXWINITIALIZED; DXWEXTERN PolylineTo_Type pPolylineTo DXWINITIALIZED; DXWEXTERN PolyBezier_Type pPolyBezier DXWINITIALIZED; DXWEXTERN PolyBezierTo_Type pPolyBezierTo DXWINITIALIZED; DXWEXTERN SetDIBitsToDevice_Type pSetDIBitsToDevice DXWINITIALIZED; DXWEXTERN CreateCompatibleBitmap_Type pCreateCompatibleBitmap DXWINITIALIZED; DXWEXTERN SetPixel_Type pSetPixel DXWINITIALIZED; DXWEXTERN Ellipse_Type pEllipse DXWINITIALIZED; DXWEXTERN Polygon_Type pPolygon DXWINITIALIZED; DXWEXTERN Arc_Type pArc DXWINITIALIZED; DXWEXTERN CreateEllipticRgn_Type pCreateEllipticRgn DXWINITIALIZED; DXWEXTERN CreateEllipticRgnIndirect_Type pCreateEllipticRgnIndirect DXWINITIALIZED; DXWEXTERN CreateRectRgn_Type pCreateRectRgn DXWINITIALIZED; DXWEXTERN CreateRectRgnIndirect_Type pCreateRectRgnIndirect DXWINITIALIZED; DXWEXTERN CreatePolygonRgn_Type pCreatePolygonRgn DXWINITIALIZED; DXWEXTERN MaskBlt_Type pMaskBlt DXWINITIALIZED; DXWEXTERN SetRectRgn_Type pSetRectRgn DXWINITIALIZED; DXWEXTERN SetViewportOrgEx_Type pSetViewportOrgEx DXWINITIALIZED; DXWEXTERN SetViewportExtEx_Type pSetViewportExtEx DXWINITIALIZED; DXWEXTERN GetViewportOrgEx_Type pGetViewportOrgEx DXWINITIALIZED; DXWEXTERN GetViewportExtEx_Type pGetViewportExtEx DXWINITIALIZED; DXWEXTERN SetWindowOrgEx_Type pSetWindowExtEx DXWINITIALIZED; DXWEXTERN GetWindowOrgEx_Type pGetWindowOrgEx DXWINITIALIZED; DXWEXTERN SetWindowOrgEx_Type pSetWindowOrgEx DXWINITIALIZED; DXWEXTERN GetCurrentPositionEx_Type pGetCurrentPositionEx DXWINITIALIZED; DXWEXTERN CreateScalableFontResourceA_Type pCreateScalableFontResourceA DXWINITIALIZED; DXWEXTERN CreateScalableFontResourceW_Type pCreateScalableFontResourceW DXWINITIALIZED; DXWEXTERN AddFontResourceA_Type pAddFontResourceA DXWINITIALIZED; DXWEXTERN AddFontResourceW_Type pAddFontResourceW DXWINITIALIZED; DXWEXTERN AddFontResourceA_Type pRemoveFontResourceA DXWINITIALIZED; DXWEXTERN AddFontResourceW_Type pRemoveFontResourceW DXWINITIALIZED; DXWEXTERN AnimatePalette_Type pAnimatePalette DXWINITIALIZED; DXWEXTERN SetSystemPaletteUse_Type pSetSystemPaletteUse DXWINITIALIZED; DXWEXTERN GDISetPixelFormat_Type pGDISetPixelFormat DXWINITIALIZED; DXWEXTERN GDIGetPixelFormat_Type pGDIGetPixelFormat DXWINITIALIZED; DXWEXTERN ChoosePixelFormat_Type pChoosePixelFormat DXWINITIALIZED; DXWEXTERN DescribePixelFormat_Type pDescribePixelFormat DXWINITIALIZED; DXWEXTERN GetObjectType_Type pGetObjectType DXWINITIALIZED; DXWEXTERN SetDIBits_Type pSetDIBits DXWINITIALIZED; DXWEXTERN OffsetRgn_Type pOffsetRgn DXWINITIALIZED; DXWEXTERN GetPixel_Type pGetPixel DXWINITIALIZED; DXWEXTERN PlgBlt_Type pPlgBlt DXWINITIALIZED; DXWEXTERN SetPixelV_Type pSetPixelV DXWINITIALIZED; DXWEXTERN Chord_Type pChord DXWINITIALIZED; DXWEXTERN PolyTextOutA_Type pPolyTextOutA DXWINITIALIZED; DXWEXTERN PolyTextOutW_Type pPolyTextOutW DXWINITIALIZED; DXWEXTERN GetDIBits_Type pGetDIBits DXWINITIALIZED; DXWEXTERN CreateDIBitmap_Type pCreateDIBitmap DXWINITIALIZED; DXWEXTERN CreateDIBSection_Type pCreateDIBSection DXWINITIALIZED; DXWEXTERN CreateDiscardableBitmap_Type pCreateDiscardableBitmap DXWINITIALIZED; DXWEXTERN ExtFloodFill_Type pExtFloodFill DXWINITIALIZED; DXWEXTERN GdiAlphaBlend_Type pGdiAlphaBlend DXWINITIALIZED; DXWEXTERN GdiGradientFill_Type pGdiGradientFill DXWINITIALIZED; DXWEXTERN GdiTransparentBlt_Type pGdiTransparentBlt DXWINITIALIZED; DXWEXTERN Pie_Type pPie DXWINITIALIZED; DXWEXTERN AngleArc_Type pAngleArc DXWINITIALIZED; DXWEXTERN PolyPolyline_Type pPolyPolyline DXWINITIALIZED; DXWEXTERN FillRgn_Type pFillRgn DXWINITIALIZED; DXWEXTERN FrameRgn_Type pFrameRgn DXWINITIALIZED; DXWEXTERN InvertRgn_Type pInvertRgn DXWINITIALIZED; DXWEXTERN PaintRgn_Type pPaintRgn DXWINITIALIZED; DXWEXTERN SetMapMode_Type pSetMapMode DXWINITIALIZED; DXWEXTERN RoundRect_Type pRoundRect DXWINITIALIZED; DXWEXTERN PolyPolygon_Type pPolyPolygon DXWINITIALIZED; //DXWEXTERN DPtoLP_Type pDPtoLP DXWINITIALIZED; DXWEXTERN PlayEnhMetaFile_Type pPlayEnhMetaFile DXWINITIALIZED; DXWEXTERN SetPaletteEntries_Type pSetPaletteEntries DXWINITIALIZED; DXWEXTERN SetROP2_Type pSetROP2 DXWINITIALIZED; DXWEXTERN EnumFontsA_Type pEnumFontsA DXWINITIALIZED; DXWEXTERN GetTextExtentPointA_Type pGetTextExtentPointA DXWINITIALIZED; DXWEXTERN GetTextExtentPoint32A_Type pGetTextExtentPoint32A DXWINITIALIZED; DXWEXTERN SelectObject_Type pSelectObject DXWINITIALIZED; DXWEXTERN DeleteObject_Type pDeleteObject DXWINITIALIZED; DXWEXTERN SelectClipRgn_Type pSelectClipRgn DXWINITIALIZED; // Kernel32.dll: DXWEXTERN GetDiskFreeSpaceA_Type pGetDiskFreeSpaceA DXWINITIALIZED; DXWEXTERN GetDriveType_Type pGetDriveType DXWINITIALIZED; DXWEXTERN GetLogicalDrives_Type pGetLogicalDrives DXWINITIALIZED; DXWEXTERN GetLocalTime_Type pGetLocalTime DXWINITIALIZED; DXWEXTERN GetProcAddress_Type pGetProcAddress DXWINITIALIZED; DXWEXTERN GetSystemTime_Type pGetSystemTime DXWINITIALIZED; DXWEXTERN GetSystemTimeAsFileTime_Type pGetSystemTimeAsFileTime DXWINITIALIZED; DXWEXTERN GetTempFileName_Type pGetTempFileName DXWINITIALIZED; DXWEXTERN GetTickCount_Type pGetTickCount DXWINITIALIZED; DXWEXTERN GetVersion_Type pGetVersion DXWINITIALIZED; DXWEXTERN GetVersionExA_Type pGetVersionExA DXWINITIALIZED; DXWEXTERN GetVersionExW_Type pGetVersionExW DXWINITIALIZED; DXWEXTERN GlobalMemoryStatus_Type pGlobalMemoryStatus DXWINITIALIZED; DXWEXTERN LoadLibraryA_Type pLoadLibraryA DXWINITIALIZED; DXWEXTERN LoadLibraryExA_Type pLoadLibraryExA DXWINITIALIZED; DXWEXTERN LoadLibraryW_Type pLoadLibraryW DXWINITIALIZED; DXWEXTERN LoadLibraryExW_Type pLoadLibraryExW DXWINITIALIZED; DXWEXTERN ReadFile_Type pReadFile DXWINITIALIZED; DXWEXTERN SetUnhandledExceptionFilter_Type pSetUnhandledExceptionFilter DXWINITIALIZED; DXWEXTERN Sleep_Type pSleep DXWINITIALIZED; DXWEXTERN SleepEx_Type pSleepEx DXWINITIALIZED; DXWEXTERN CreateFile_Type pCreateFile DXWINITIALIZED; DXWEXTERN SetFilePointer_Type pSetFilePointer DXWINITIALIZED; DXWEXTERN CloseHandle_Type pCloseHandle DXWINITIALIZED; DXWEXTERN QueryPerformanceFrequency_Type pQueryPerformanceFrequency DXWINITIALIZED; DXWEXTERN QueryPerformanceCounter_Type pQueryPerformanceCounter DXWINITIALIZED; DXWEXTERN GetExitCodeProcess_Type pGetExitCodeProcess DXWINITIALIZED; DXWEXTERN FreeLibrary_Type pFreeLibrary DXWINITIALIZED; // ole32.dll: DXWEXTERN CoCreateInstance_Type pCoCreateInstance DXWINITIALIZED; DXWEXTERN CoCreateInstanceEx_Type pCoCreateInstanceEx DXWINITIALIZED; DXWEXTERN CoInitialize_Type pCoInitialize DXWINITIALIZED; DXWEXTERN CoUninitialize_Type pCoUninitialize DXWINITIALIZED; // user32.dll: DXWEXTERN BeginPaint_Type pBeginPaint DXWINITIALIZED; DXWEXTERN CallWindowProc_Type pCallWindowProcA DXWINITIALIZED; DXWEXTERN CallWindowProc_Type pCallWindowProcW DXWINITIALIZED; DXWEXTERN ChangeDisplaySettingsA_Type pChangeDisplaySettingsA DXWINITIALIZED; DXWEXTERN ChangeDisplaySettingsExA_Type pChangeDisplaySettingsExA DXWINITIALIZED; DXWEXTERN ChangeDisplaySettingsW_Type pChangeDisplaySettingsW DXWINITIALIZED; DXWEXTERN ChangeDisplaySettingsExW_Type pChangeDisplaySettingsExW DXWINITIALIZED; DXWEXTERN ClientToScreen_Type pClientToScreen DXWINITIALIZED; DXWEXTERN ClipCursor_Type pClipCursor DXWINITIALIZED; DXWEXTERN CreateDialogIndirectParam_Type pCreateDialogIndirectParam DXWINITIALIZED; DXWEXTERN CreateDialogParam_Type pCreateDialogParam DXWINITIALIZED; DXWEXTERN CreateWindowExA_Type pCreateWindowExA DXWINITIALIZED; DXWEXTERN CreateWindowExW_Type pCreateWindowExW DXWINITIALIZED; DXWEXTERN DefWindowProc_Type pDefWindowProcA DXWINITIALIZED; DXWEXTERN DefWindowProc_Type pDefWindowProcW DXWINITIALIZED; DXWEXTERN DrawTextA_Type pDrawTextA DXWINITIALIZED; DXWEXTERN DrawTextW_Type pDrawTextW DXWINITIALIZED; DXWEXTERN DrawTextExA_Type pDrawTextExA DXWINITIALIZED; DXWEXTERN DrawTextExW_Type pDrawTextExW DXWINITIALIZED; DXWEXTERN EndPaint_Type pEndPaint DXWINITIALIZED; DXWEXTERN EnumDisplaySettings_Type pEnumDisplaySettings DXWINITIALIZED; DXWEXTERN FillRect_Type pFillRect DXWINITIALIZED; DXWEXTERN FrameRect_Type pFrameRect DXWINITIALIZED; DXWEXTERN GetClientRect_Type pGetClientRect DXWINITIALIZED; DXWEXTERN GetClipCursor_Type pGetClipCursor DXWINITIALIZED; DXWEXTERN GetCursorPos_Type pGetCursorPos DXWINITIALIZED; DXWEXTERN GDIGetDC_Type pGDIGetDC DXWINITIALIZED; DXWEXTERN GetDesktopWindow_Type pGetDesktopWindow DXWINITIALIZED; DXWEXTERN GetMonitorInfo_Type pGetMonitorInfoA DXWINITIALIZED; DXWEXTERN GetMonitorInfo_Type pGetMonitorInfoW DXWINITIALIZED; DXWEXTERN GetSystemMetrics_Type pGetSystemMetrics DXWINITIALIZED; DXWEXTERN GetTopWindow_Type pGetTopWindow DXWINITIALIZED; DXWEXTERN GDIGetDC_Type pGDIGetWindowDC DXWINITIALIZED; DXWEXTERN GetUpdateRgn_Type pGetUpdateRgn DXWINITIALIZED; DXWEXTERN GetWindowLong_Type pGetWindowLongA DXWINITIALIZED; DXWEXTERN GetWindowLong_Type pGetWindowLongW DXWINITIALIZED; DXWEXTERN GetWindowRect_Type pGetWindowRect DXWINITIALIZED; DXWEXTERN InvalidateRect_Type pInvalidateRect DXWINITIALIZED; DXWEXTERN MapWindowPoints_Type pMapWindowPoints DXWINITIALIZED; DXWEXTERN MoveWindow_Type pMoveWindow DXWINITIALIZED; DXWEXTERN PeekMessage_Type pPeekMessageA DXWINITIALIZED; DXWEXTERN PeekMessage_Type pPeekMessageW DXWINITIALIZED; DXWEXTERN RedrawWindow_Type pRedrawWindow DXWINITIALIZED; DXWEXTERN RegisterClassExA_Type pRegisterClassExA DXWINITIALIZED; DXWEXTERN RegisterClassA_Type pRegisterClassA DXWINITIALIZED; DXWEXTERN RegisterClassExW_Type pRegisterClassExW DXWINITIALIZED; DXWEXTERN RegisterClassW_Type pRegisterClassW DXWINITIALIZED; DXWEXTERN GDIReleaseDC_Type pGDIReleaseDC DXWINITIALIZED; DXWEXTERN ScreenToClient_Type pScreenToClient DXWINITIALIZED; DXWEXTERN SendMessage_Type pSendMessageA DXWINITIALIZED; DXWEXTERN SendMessage_Type pSendMessageW DXWINITIALIZED; DXWEXTERN SetCursor_Type pSetCursor DXWINITIALIZED; DXWEXTERN SetCursorPos_Type pSetCursorPos DXWINITIALIZED; DXWEXTERN SetTimer_Type pSetTimer DXWINITIALIZED; DXWEXTERN SetWindowLong_Type pSetWindowLongA DXWINITIALIZED; DXWEXTERN SetWindowLong_Type pSetWindowLongW DXWINITIALIZED; DXWEXTERN SetWindowPos_Type pSetWindowPos DXWINITIALIZED; DXWEXTERN ShowCursor_Type pShowCursor DXWINITIALIZED; DXWEXTERN ShowWindow_Type pShowWindow DXWINITIALIZED; DXWEXTERN TabbedTextOutA_Type pTabbedTextOutA DXWINITIALIZED; DXWEXTERN TabbedTextOutW_Type pTabbedTextOutW DXWINITIALIZED; DXWEXTERN DestroyWindow_Type pDestroyWindow DXWINITIALIZED; DXWEXTERN CloseWindow_Type pCloseWindow DXWINITIALIZED; DXWEXTERN SetSysColors_Type pSetSysColors DXWINITIALIZED; DXWEXTERN GetDCEx_Type pGDIGetDCEx DXWINITIALIZED; DXWEXTERN UpdateWindow_Type pUpdateWindow DXWINITIALIZED; DXWEXTERN GetWindowPlacement_Type pGetWindowPlacement DXWINITIALIZED; DXWEXTERN SetWindowPlacement_Type pSetWindowPlacement DXWINITIALIZED; DXWEXTERN SetCapture_Type pSetCapture DXWINITIALIZED; DXWEXTERN GetForegroundWindow_Type pGetForegroundWindow DXWINITIALIZED; DXWEXTERN GetActiveWindow_Type pGetActiveWindow DXWINITIALIZED; DXWEXTERN IsWindowVisible_Type pIsWindowVisible DXWINITIALIZED; DXWEXTERN SystemParametersInfo_Type pSystemParametersInfoA DXWINITIALIZED; DXWEXTERN SystemParametersInfo_Type pSystemParametersInfoW DXWINITIALIZED; DXWEXTERN KillTimer_Type pKillTimer DXWINITIALIZED; DXWEXTERN GetUpdateRect_Type pGetUpdateRect DXWINITIALIZED; DXWEXTERN GetCursorInfo_Type pGetCursorInfo DXWINITIALIZED; DXWEXTERN WindowFromPoint_Type pWindowFromPoint DXWINITIALIZED; DXWEXTERN ChildWindowFromPoint_Type pChildWindowFromPoint DXWINITIALIZED; DXWEXTERN ChildWindowFromPointEx_Type pChildWindowFromPointEx DXWINITIALIZED; DXWEXTERN GetWindowTextA_Type pGetWindowTextA DXWINITIALIZED; DXWEXTERN BringWindowToTop_Type pBringWindowToTop DXWINITIALIZED; DXWEXTERN SetForegroundWindow_Type pSetForegroundWindow DXWINITIALIZED; DXWEXTERN SetWindowsHookEx_Type pSetWindowsHookExA DXWINITIALIZED; DXWEXTERN SetWindowsHookEx_Type pSetWindowsHookExW DXWINITIALIZED; DXWEXTERN MessageBoxTimeoutA_Type pMessageBoxTimeoutA DXWINITIALIZED; DXWEXTERN MessageBoxTimeoutW_Type pMessageBoxTimeoutW DXWINITIALIZED; DXWEXTERN IsIconic_Type pIsIconic DXWINITIALIZED; DXWEXTERN IsZoomed_Type pIsZoomed DXWINITIALIZED; DXWEXTERN CreateDesktop_Type pCreateDesktop DXWINITIALIZED; DXWEXTERN SwitchDesktop_Type pSwitchDesktop DXWINITIALIZED; DXWEXTERN OpenDesktop_Type pOpenDesktop DXWINITIALIZED; DXWEXTERN CloseDesktop_Type pCloseDesktop DXWINITIALIZED; DXWEXTERN ValidateRect_Type pValidateRect DXWINITIALIZED; DXWEXTERN ScrollWindow_Type pScrollWindow DXWINITIALIZED; DXWEXTERN DialogBoxParamA_Type pDialogBoxParamA DXWINITIALIZED; DXWEXTERN GetParent_Type pGetParent DXWINITIALIZED; DXWEXTERN InvalidateRgn_Type pInvalidateRgn DXWINITIALIZED; DXWEXTERN InvertRect_Type pInvertRect DXWINITIALIZED; DXWEXTERN ScrollDC_Type pScrollDC DXWINITIALIZED; DXWEXTERN DrawIcon_Type pDrawIcon DXWINITIALIZED; DXWEXTERN DrawIconEx_Type pDrawIconEx DXWINITIALIZED; DXWEXTERN DrawCaption_Type pDrawCaption DXWINITIALIZED; DXWEXTERN PaintDesktop_Type pPaintDesktop DXWINITIALIZED; DXWEXTERN mouse_event_Type pmouse_event DXWINITIALIZED; DXWEXTERN ShowScrollBar_Type pShowScrollBar DXWINITIALIZED; DXWEXTERN DrawMenuBar_Type pDrawMenuBar DXWINITIALIZED; //TranslateMessage_Type pTranslateMessage DXWINITIALIZED; DXWEXTERN EnumDisplayDevicesA_Type pEnumDisplayDevicesA DXWINITIALIZED; DXWEXTERN EnumDisplayDevicesW_Type pEnumDisplayDevicesW DXWINITIALIZED; DXWEXTERN DialogBoxIndirectParamA_Type pDialogBoxIndirectParamA DXWINITIALIZED; DXWEXTERN GetFocus_Type pGetFocus DXWINITIALIZED; //GetTopWindow_Type pGetTopWindow DXWINITIALIZED; DXWEXTERN GetWindowThreadProcessId_Type pGetWindowThreadProcessId DXWINITIALIZED; DXWEXTERN GetWindow_Type pGetWindow DXWINITIALIZED; DXWEXTERN IsWindow_Type pIsWindow DXWINITIALIZED; DXWEXTERN SetFocus_Type pSetFocus DXWINITIALIZED; DXWEXTERN LoadBitmapA_Type pLoadBitmapA DXWINITIALIZED; DXWEXTERN EnumWindows_Type pEnumWindows DXWINITIALIZED; DXWEXTERN GetMessage_Type pGetMessageA, pGetMessageW DXWINITIALIZED; DXWEXTERN PostMessage_Type pPostMessageA, pPostMessageW DXWINITIALIZED; DXWEXTERN AdjustWindowRect_Type pAdjustWindowRect DXWINITIALIZED; DXWEXTERN AdjustWindowRectEx_Type pAdjustWindowRectEx DXWINITIALIZED; // Winmm.dll: DXWEXTERN mciSendCommand_Type pmciSendCommandA DXWINITIALIZED; DXWEXTERN mciSendCommand_Type pmciSendCommandW DXWINITIALIZED; DXWEXTERN mciSendStringA_Type pmciSendStringA DXWINITIALIZED; DXWEXTERN mciSendStringW_Type pmciSendStringW DXWINITIALIZED; DXWEXTERN timeGetTime_Type ptimeGetTime DXWINITIALIZED; DXWEXTERN timeKillEvent_Type ptimeKillEvent DXWINITIALIZED; DXWEXTERN timeSetEvent_Type ptimeSetEvent DXWINITIALIZED; /* =================================================================== hook procedures (possibly more tnan one per each API...) ====================================================================*/ // advapi32.dll extern LONG WINAPI extRegCloseKey(HKEY); extern LONG WINAPI extRegCreateKey(HKEY, LPCTSTR, PHKEY); extern LONG WINAPI extRegCreateKeyEx(HKEY, LPCTSTR, DWORD, LPTSTR, DWORD, REGSAM, LPSECURITY_ATTRIBUTES, PHKEY, LPDWORD); extern LONG WINAPI extRegOpenKeyEx(HKEY, LPCTSTR, DWORD, REGSAM, PHKEY); extern LONG WINAPI extRegQueryValue(HKEY, LPCTSTR, LPTSTR, PLONG); extern LONG WINAPI extRegQueryValueEx(HKEY, LPCTSTR, LPDWORD, LPDWORD, LPBYTE, LPDWORD); extern LONG WINAPI extRegSetValueEx(HKEY, LPCTSTR, DWORD, DWORD, const BYTE *, DWORD); // ImmLib.dll extern BOOL WINAPI extImmNotifyIME(HIMC, DWORD, DWORD, DWORD); extern HIMC WINAPI extImmCreateContext(void); extern BOOL WINAPI extImmDestroyContext(HIMC); extern BOOL WINAPI extImmSetOpenStatus(HIMC, BOOL); extern HIMC WINAPI extImmAssociateContext(HWND, HIMC); extern BOOL WINAPI extImmSetCompositionWindow(HIMC, LPCOMPOSITIONFORM); extern BOOL WINAPI extImmSetCompositionString(HIMC, DWORD, LPVOID, DWORD, LPVOID, DWORD); extern BOOL WINAPI extImmGetOpenStatus(HIMC); // GDI32.dll: extern BOOL WINAPI extGDIBitBlt(HDC, int, int, int, int, HDC, int, int, DWORD); extern HDC WINAPI extGDICreateCompatibleDC(HDC); extern HDC WINAPI extGDICreateDCA(LPSTR, LPSTR, LPSTR, CONST DEVMODE *); extern HDC WINAPI extGDICreateDCW(LPWSTR, LPWSTR, LPWSTR, CONST DEVMODE *); extern HFONT WINAPI extCreateFont(int, int, int, int, int, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, LPCTSTR); extern HFONT WINAPI extCreateFontIndirect(const LOGFONT*); extern HDC WINAPI extCreateICA(LPCTSTR, LPCTSTR, LPCTSTR, const DEVMODE *); extern HPALETTE WINAPI extGDICreatePalette(CONST LOGPALETTE *); extern HDWP WINAPI extDeferWindowPos(HDWP, HWND, HWND, int, int, int, int, UINT); extern BOOL WINAPI extExtTextOutW(HDC, int, int, UINT, const RECT *, LPCWSTR, UINT, const INT *); extern BOOL WINAPI extExtTextOutA(HDC, int, int, UINT, const RECT *, LPCSTR, UINT, const INT *); extern BOOL WINAPI extGDIDeleteDC(HDC); extern int WINAPI extGetClipBox(HDC, LPRECT); extern BOOL WINAPI extGetDCOrgEx(HDC, LPPOINT); extern int WINAPI extGetRgnBox(HRGN, LPRECT); extern DWORD WINAPI extGetRegionData(HRGN, DWORD, LPRGNDATA); extern int WINAPI extGetDeviceCaps(HDC, int); extern BOOL WINAPI extGetDeviceGammaRamp(HDC, LPVOID); extern UINT WINAPI extGetSystemPaletteEntries(HDC, UINT, UINT, LPPALETTEENTRY); extern UINT WINAPI extGetPaletteEntries(HPALETTE, UINT, UINT, LPPALETTEENTRY); extern UINT WINAPI extGetSystemPaletteUse(HDC); extern BOOL WINAPI extGDIPatBlt(HDC, int, int, int, int, DWORD); extern int WINAPI extIntersectClipRect(HDC, int, int, int, int); extern BOOL WINAPI extPolyline(HDC, const POINT *, int); extern UINT WINAPI extRealizePalette(HDC); extern BOOL WINAPI extRectangle(HDC, int, int, int, int); extern BOOL WINAPI extGDIRestoreDC(HDC, int); extern int WINAPI extGDISaveDC(HDC); extern BOOL WINAPI extScaleWindowExtEx(HDC, int, int, int, int, LPSIZE); extern HPALETTE WINAPI extSelectPalette(HDC, HPALETTE, BOOL); extern BOOL WINAPI extSetDeviceGammaRamp(HDC, LPVOID); extern BOOL WINAPI extGDIStretchBlt(HDC, int, int, int, int, HDC, int, int, int, int, DWORD); extern int WINAPI extStretchDIBits(HDC, int, int, int, int, int, int, int, int, const VOID *, const BITMAPINFO *, UINT, DWORD); extern BOOL WINAPI extTextOutA(HDC, int, int, LPCTSTR, int); extern BOOL WINAPI extTextOutW(HDC, int, int, LPCWSTR, int); extern BOOL WINAPI extPolyBezier(HDC, const POINT *, DWORD); extern BOOL WINAPI extPolyBezierTo(HDC, const POINT *, DWORD); extern BOOL WINAPI extPolylineTo(HDC, const POINT *, DWORD); extern BOOL WINAPI extPolyDraw(HDC, const POINT *, const BYTE *, int); extern BOOL WINAPI extMoveToEx(HDC, int, int, LPPOINT); extern BOOL WINAPI extArcTo(HDC, int, int, int, int, int, int, int, int); extern BOOL WINAPI extLineTo(HDC, int, int); extern int WINAPI extSetDIBitsToDevice(HDC, int, int, DWORD, DWORD, int, int, UINT, UINT, const VOID *, const BITMAPINFO *, UINT); extern HBITMAP WINAPI extCreateCompatibleBitmap(HDC, int, int); extern COLORREF WINAPI extSetPixel(HDC, int, int, COLORREF); extern BOOL WINAPI extEllipse(HDC, int, int, int, int); extern BOOL WINAPI extPolygon(HDC, const POINT *, int); extern BOOL WINAPI extArc(HDC, int, int, int, int, int, int, int, int); extern HRGN WINAPI extCreateEllipticRgn(int, int, int, int); extern HRGN WINAPI extCreateEllipticRgnIndirect(const RECT *); extern HRGN WINAPI extCreateRectRgn(int, int, int, int); extern HRGN WINAPI extCreateRectRgnIndirect(const RECT *); extern HRGN WINAPI extCreatePolygonRgn(const POINT *, int, int); extern BOOL WINAPI extMaskBlt(HDC, int, int, int, int, HDC, int, int, HBITMAP, int, int, DWORD); extern BOOL WINAPI extSetRectRgn(HRGN, int, int, int, int); extern BOOL WINAPI extSetViewportOrgEx(HDC, int, int, LPPOINT); extern BOOL WINAPI extSetViewportExtEx(HDC, int, int, LPSIZE); extern BOOL WINAPI extGetViewportOrgEx(HDC, LPPOINT); extern BOOL WINAPI extGetViewportExtEx(HDC, LPPOINT); extern BOOL WINAPI extGetWindowOrgEx(HDC, LPPOINT); extern BOOL WINAPI extSetWindowExtEx(HDC, int, int, LPPOINT); extern BOOL WINAPI extSetWindowOrgEx(HDC, int, int, LPPOINT); extern BOOL WINAPI extGetCurrentPositionEx(HDC, LPPOINT); extern BOOL WINAPI extCreateScalableFontResourceA(DWORD, LPCTSTR, LPCTSTR, LPCTSTR); extern int WINAPI extAddFontResourceA(LPCTSTR); extern int WINAPI extAddFontResourceW(LPCWSTR); extern int WINAPI extRemoveFontResourceA(LPCTSTR); extern int WINAPI extRemoveFontResourceW(LPCWSTR); extern BOOL WINAPI extCreateScalableFontResourceW(DWORD, LPCWSTR, LPCWSTR, LPCWSTR); extern BOOL WINAPI extAnimatePalette(HPALETTE, UINT, UINT, const PALETTEENTRY *); extern UINT WINAPI extSetSystemPaletteUse(HDC, UINT); extern BOOL WINAPI extGDISetPixelFormat(HDC, int, const PIXELFORMATDESCRIPTOR *); extern int WINAPI extGDIGetPixelFormat(HDC); extern int WINAPI extChoosePixelFormat(HDC, const PIXELFORMATDESCRIPTOR *); extern int WINAPI extDescribePixelFormat(HDC, int, UINT, LPPIXELFORMATDESCRIPTOR); extern DWORD WINAPI extGetObjectType(HGDIOBJ); extern int WINAPI extSetDIBits(HDC, HBITMAP, UINT, UINT, const VOID *, const BITMAPINFO *, UINT); extern int WINAPI extOffsetRgn(HRGN, int, int); extern COLORREF WINAPI extGetPixel(HDC, int, int); extern BOOL WINAPI extPlgBlt(HDC, const POINT *, HDC, int, int, int, int, HBITMAP, int, int); extern BOOL WINAPI extSetPixelV(HDC, int, int, COLORREF); extern BOOL WINAPI extChord(HDC, int, int, int, int, int, int, int, int); extern BOOL WINAPI extPolyTextOutA(HDC, const POLYTEXTA *, int); extern BOOL WINAPI extPolyTextOutW(HDC, const POLYTEXTW *, int); extern int WINAPI extGetDIBits(HDC, HBITMAP, UINT, UINT, LPVOID, LPBITMAPINFO, UINT); extern HBITMAP WINAPI extCreateDIBitmap(HDC, BITMAPINFOHEADER *, DWORD, const VOID *, const BITMAPINFO *, UINT); extern HBITMAP WINAPI extCreateDIBSection(HDC, const BITMAPINFO *, UINT, VOID **, HANDLE, DWORD); extern BOOL WINAPI extExtFloodFill(HDC, int, int, COLORREF, UINT); extern HBITMAP WINAPI extCreateDiscardableBitmap(HDC, int, int); extern BOOL WINAPI extGdiAlphaBlend(HDC, int, int, int, int, HDC, int, int, int, int, BLENDFUNCTION); extern BOOL WINAPI extGdiGradientFill(HDC, PTRIVERTEX, ULONG, PVOID, ULONG, ULONG); extern BOOL WINAPI extGdiTransparentBlt(HDC, int, int, int, int, HDC, int, int, int, int, UINT); extern BOOL WINAPI extPie(HDC, int, int, int, int, int, int, int, int); extern BOOL WINAPI extAngleArc(HDC, int, int, DWORD, FLOAT, FLOAT); extern BOOL WINAPI extPolyPolyline(HDC, const POINT *, const DWORD *, DWORD); extern BOOL WINAPI extFillRgn(HDC, HRGN, HBRUSH); extern BOOL WINAPI extFrameRgn(HDC, HRGN, HBRUSH, int, int); extern BOOL WINAPI extInvertRgn(HDC, HRGN); extern BOOL WINAPI extPaintRgn(HDC, HRGN); extern int WINAPI extSetMapMode(HDC, int); extern BOOL WINAPI extRoundRect(HDC, int, int, int, int, int, int); extern BOOL WINAPI extPolyPolygon(HDC, const POINT *, const INT *, int); //extern BOOL WINAPI extDPtoLP(HDC, LPPOINT, int); extern BOOL WINAPI extPlayEnhMetaFile(HDC, HENHMETAFILE, const RECT *); extern UINT WINAPI extSetPaletteEntries(HPALETTE, UINT, UINT, const PALETTEENTRY *); extern int WINAPI extSetROP2(HDC, int); extern int WINAPI extEnumFontsA(HDC, LPCSTR, FONTENUMPROC, LPARAM); extern BOOL WINAPI extGetTextExtentPointA(HDC, LPCTSTR, int, LPSIZE); extern BOOL WINAPI extGetTextExtentPoint32A(HDC, LPCTSTR, int, LPSIZE); extern HGDIOBJ WINAPI extSelectObject(HDC, HGDIOBJ); extern BOOL WINAPI extDeleteObject(HGDIOBJ); extern int WINAPI extSelectClipRgn(HDC, HRGN); // Kernel32.dll: extern BOOL WINAPI extGetDiskFreeSpaceA(LPCSTR, LPDWORD, LPDWORD, LPDWORD, LPDWORD); extern UINT WINAPI extGetDriveType(LPCSTR); extern DWORD WINAPI extGetLogicalDrives(void); extern void WINAPI extGetLocalTime(LPSYSTEMTIME); extern FARPROC WINAPI extGetProcAddress(HMODULE, LPCSTR); extern void WINAPI extGetSystemTime(LPSYSTEMTIME); extern void WINAPI extGetSystemTimeAsFileTime(LPFILETIME); extern UINT WINAPI extGetTempFileName(LPCTSTR, LPCTSTR, UINT, LPTSTR); extern DWORD WINAPI extGetTickCount(void); extern DWORD WINAPI extGetVersion(void); extern BOOL WINAPI extGetVersionExA(LPOSVERSIONINFOA); extern BOOL WINAPI extGetVersionExW(LPOSVERSIONINFOW); extern void WINAPI extGlobalMemoryStatus(LPMEMORYSTATUS); extern int WINAPI extIsDebuggerPresent(void); extern BOOL WINAPI extCheckRemoteDebuggerPresent(HANDLE, PBOOL); extern HMODULE WINAPI extLoadLibraryA(LPCTSTR); extern HMODULE WINAPI extLoadLibraryExA(LPCTSTR, HANDLE, DWORD); extern HMODULE WINAPI extLoadLibraryW(LPCWSTR); extern HMODULE WINAPI extLoadLibraryExW(LPCWSTR, HANDLE, DWORD); extern BOOL WINAPI extReadFile(HANDLE, LPVOID, DWORD, LPDWORD, LPOVERLAPPED); extern LPTOP_LEVEL_EXCEPTION_FILTER WINAPI extSetUnhandledExceptionFilter(LPTOP_LEVEL_EXCEPTION_FILTER); extern void WINAPI extSleep(DWORD); extern DWORD WINAPI extSleepEx(DWORD, BOOL); extern HANDLE WINAPI extCreateFile(LPCTSTR, DWORD, DWORD, LPSECURITY_ATTRIBUTES, DWORD, DWORD, HANDLE); extern DWORD WINAPI extSetFilePointer(HANDLE, LONG, PLONG, DWORD); extern BOOL WINAPI extCloseHandle(HANDLE); extern BOOL WINAPI extCreateProcessA(LPCTSTR, LPTSTR, LPSECURITY_ATTRIBUTES, LPSECURITY_ATTRIBUTES, BOOL, DWORD, LPVOID, LPCTSTR, LPSTARTUPINFO, LPPROCESS_INFORMATION); extern BOOL WINAPI extGetExitCodeProcess(HANDLE, LPDWORD); extern BOOL WINAPI extQueryPerformanceFrequency(LARGE_INTEGER *); extern BOOL WINAPI extQueryPerformanceCounter(LARGE_INTEGER *); extern BOOL WINAPI extFreeLibrary(HMODULE); // ole32.dll: extern HRESULT STDAPICALLTYPE extCoCreateInstance(REFCLSID, LPUNKNOWN, DWORD, REFIID, LPVOID FAR*); extern HRESULT STDAPICALLTYPE extCoCreateInstanceEx(REFCLSID, IUnknown *, DWORD, COSERVERINFO *, DWORD, MULTI_QI *); extern HRESULT STDAPICALLTYPE extCoInitialize(LPVOID); extern void STDAPICALLTYPE extCoUninitialize(void); // user32.dll: extern HDC WINAPI extBeginPaint(HWND, LPPAINTSTRUCT); extern LRESULT WINAPI extCallWindowProcA(WNDPROC, HWND, UINT, WPARAM, LPARAM); extern LRESULT WINAPI extCallWindowProcW(WNDPROC, HWND, UINT, WPARAM, LPARAM); extern LONG WINAPI extChangeDisplaySettingsA(DEVMODEA *, DWORD); extern LONG WINAPI extChangeDisplaySettingsExA(LPCTSTR, DEVMODEA *, HWND, DWORD, LPVOID); extern LONG WINAPI extChangeDisplaySettingsW(DEVMODEW *, DWORD); extern LONG WINAPI extChangeDisplaySettingsExW(LPCTSTR, DEVMODEW *, HWND, DWORD, LPVOID); extern BOOL WINAPI extClientToScreen(HWND, LPPOINT); extern BOOL WINAPI extClipCursor(LPRECT); extern HWND WINAPI extCreateDialogIndirectParam(HINSTANCE, LPCDLGTEMPLATE, HWND, DLGPROC, LPARAM); extern HWND WINAPI extCreateDialogParam(HINSTANCE, LPCSTR, HWND, DLGPROC, LPARAM); extern HWND WINAPI extCreateWindowExA(DWORD, LPCTSTR, LPCTSTR, DWORD, int, int, int, int, HWND, HMENU, HINSTANCE, LPVOID); extern HWND WINAPI extCreateWindowExW(DWORD, LPCWSTR, LPCWSTR, DWORD, int, int, int, int, HWND, HMENU, HINSTANCE, LPVOID); extern LRESULT WINAPI extDefWindowProcA(HWND, UINT, WPARAM, LPARAM); extern LRESULT WINAPI extDefWindowProcW(HWND, UINT, WPARAM, LPARAM); extern int WINAPI extDrawTextA(HDC, LPCTSTR, int, LPRECT, UINT); extern int WINAPI extDrawTextExA(HDC, LPTSTR, int, LPRECT, UINT, LPDRAWTEXTPARAMS); extern int WINAPI extDrawTextW(HDC, LPCWSTR, int, LPRECT, UINT); extern int WINAPI extDrawTextExW(HDC, LPCWSTR, int, LPRECT, UINT, LPDRAWTEXTPARAMS); extern BOOL WINAPI extEndPaint(HWND, const PAINTSTRUCT *); extern LONG WINAPI extEnumDisplaySettings(LPCTSTR, DWORD, DEVMODE *); extern int WINAPI extFillRect(HDC, const RECT *, HBRUSH); extern int WINAPI extFrameRect(HDC, const RECT *, HBRUSH); extern BOOL WINAPI extGetClientRect(HWND, LPRECT); extern BOOL WINAPI extGetClipCursor(LPRECT); extern BOOL WINAPI extGetCursorPos(LPPOINT); extern HDC WINAPI extGDIGetDC(HWND); extern HWND WINAPI extGetDesktopWindow(void); extern BOOL WINAPI extGetMonitorInfoA(HMONITOR, LPMONITORINFO); extern BOOL WINAPI extGetMonitorInfoW(HMONITOR, LPMONITORINFO); extern int WINAPI extGetSystemMetrics(int); extern HWND WINAPI extGetTopWindow(HWND); extern int WINAPI extGetUpdateRgn(HWND, HRGN, BOOL); extern HDC WINAPI extGDIGetWindowDC(HWND); extern LONG WINAPI extGetWindowLongA(HWND, int); extern LONG WINAPI extGetWindowLongW(HWND, int); extern BOOL WINAPI extGetWindowRect(HWND, LPRECT); extern BOOL WINAPI extInvalidateRect(HWND, RECT *, BOOL); extern int WINAPI extMapWindowPoints(HWND, HWND, LPPOINT, UINT); extern BOOL WINAPI extMoveWindow(HWND, int, int, int, int, BOOL); extern BOOL WINAPI extPeekMessageA(LPMSG, HWND, UINT, UINT, UINT); extern BOOL WINAPI extPeekMessageW(LPMSG, HWND, UINT, UINT, UINT); extern BOOL WINAPI extRedrawWindow(HWND, const RECT *, HRGN, UINT); extern ATOM WINAPI extRegisterClassExA(WNDCLASSEXA *); extern ATOM WINAPI extRegisterClassA(WNDCLASSA *); extern ATOM WINAPI extRegisterClassExW(WNDCLASSEXW *); extern ATOM WINAPI extRegisterClassW(WNDCLASSW *); extern int WINAPI extGDIReleaseDC(HWND, HDC); extern BOOL WINAPI extScreenToClient(HWND, LPPOINT); extern LRESULT WINAPI extSendMessageA(HWND, UINT, WPARAM, LPARAM); extern LRESULT WINAPI extSendMessageW(HWND, UINT, WPARAM, LPARAM); extern HCURSOR WINAPI extSetCursor(HCURSOR); extern BOOL WINAPI extSetCursorPos(int, int); extern UINT_PTR WINAPI extSetTimer(HWND, UINT_PTR, UINT, TIMERPROC); extern LONG WINAPI extSetWindowLongA(HWND, int, LONG); extern LONG WINAPI extSetWindowLongW(HWND, int, LONG); extern BOOL WINAPI extSetWindowPos(HWND, HWND, int, int, int, int, UINT); extern int WINAPI extShowCursor(BOOL); extern BOOL WINAPI extShowWindow(HWND, int); extern LONG WINAPI extTabbedTextOutA(HDC, int, int, LPCTSTR, int, int, const LPINT, int); extern LONG WINAPI extTabbedTextOutW(HDC, int, int, LPCWSTR, int, int, const LPINT, int); extern BOOL WINAPI extDestroyWindow(HWND); extern BOOL WINAPI extCloseWindow(HWND); extern BOOL WINAPI extSetSysColors(int, const INT *, const COLORREF *); extern HDC WINAPI extGDIGetDCEx(HWND, HRGN, DWORD); extern BOOL WINAPI extUpdateWindow(HWND); extern BOOL WINAPI extGetWindowPlacement(HWND, WINDOWPLACEMENT *); extern BOOL WINAPI extSetWindowPlacement(HWND, WINDOWPLACEMENT *); extern HWND WINAPI extSetCapture(HWND); extern HWND WINAPI extGetForegroundWindow(void); extern HWND WINAPI extGetActiveWindow(void); extern BOOL WINAPI extIsWindowVisible(HWND); extern BOOL WINAPI extSystemParametersInfoA(UINT, UINT, PVOID, UINT); extern BOOL WINAPI extSystemParametersInfoW(UINT, UINT, PVOID, UINT); extern BOOL WINAPI extKillTimer(HWND, UINT_PTR); extern BOOL WINAPI extGetUpdateRect(HWND, LPRECT, BOOL); extern BOOL WINAPI extGetCursorInfo(PCURSORINFO); extern HWND WINAPI extWindowFromPoint(POINT); extern HWND WINAPI extChildWindowFromPoint(HWND, POINT); extern HWND WINAPI extChildWindowFromPointEx(HWND, POINT, UINT); //extern int WINAPI extGetWindowTextA(HWND, LPTSTR, int); extern BOOL WINAPI extBringWindowToTop(HWND); extern BOOL WINAPI extSetForegroundWindow(HWND); extern HHOOK WINAPI extSetWindowsHookExA(int, HOOKPROC, HINSTANCE, DWORD); extern HHOOK WINAPI extSetWindowsHookExW(int, HOOKPROC, HINSTANCE, DWORD); extern HRESULT WINAPI extMessageBoxTimeoutA(HWND, LPCSTR, LPCSTR, UINT, WORD, DWORD); extern HRESULT WINAPI extMessageBoxTimeoutW(HWND, LPCWSTR, LPCWSTR, UINT, WORD, DWORD); extern BOOL WINAPI extIsIconic(HWND); extern BOOL WINAPI extIsZoomed(HWND); extern HDESK WINAPI extCreateDesktop(LPCTSTR, LPCTSTR, DEVMODE *, DWORD, ACCESS_MASK, LPSECURITY_ATTRIBUTES); extern BOOL WINAPI extSwitchDesktop(HDESK); extern HDESK WINAPI extOpenDesktop(LPTSTR, DWORD, BOOL, ACCESS_MASK); extern BOOL WINAPI extCloseDesktop(HDESK); extern int WINAPI extValidateRect(HWND, const RECT *); extern BOOL extScrollWindow(HWND, int, int, const RECT *, const RECT *); extern INT_PTR WINAPI extDialogBoxParamA(HINSTANCE, LPCTSTR, HWND, DLGPROC, LPARAM); extern HWND WINAPI extGetParent(HWND); extern BOOL WINAPI extInvalidateRgn(HWND, HRGN, BOOL); extern BOOL WINAPI extInvertRect(HDC, const RECT *); extern BOOL WINAPI extScrollDC(HDC, int, int, const RECT *, const RECT *, HRGN, LPRECT); extern BOOL WINAPI extDrawIcon(HDC hDC, int X, int Y, HICON hIcon); extern BOOL WINAPI extDrawIconEx(HDC, int, int, HICON, int, int, UINT, HBRUSH, UINT); extern BOOL WINAPI extDrawCaption(HWND, HDC, LPCRECT, UINT); extern BOOL WINAPI extPaintDesktop(HDC); extern VOID WINAPI extmouse_event(DWORD, DWORD, DWORD, DWORD, ULONG_PTR); extern BOOL WINAPI extShowScrollBar(HWND, int, BOOL); extern BOOL WINAPI extDrawMenuBar(HWND); //extern BOOL WINAPI extTranslateMessage(MSG *); extern BOOL WINAPI extEnumDisplayDevicesA(LPCSTR, DWORD, PDISPLAY_DEVICE, DWORD); extern BOOL WINAPI extEnumDisplayDevicesW(LPCWSTR, DWORD, PDISPLAY_DEVICEW, DWORD); extern INT_PTR WINAPI extDialogBoxIndirectParamA(HINSTANCE, LPCDLGTEMPLATE, HWND, DLGPROC, LPARAM); extern HWND WINAPI extGetFocus(void); //extern HWND WINAPI extGetTopWindow(HWND); extern DWORD WINAPI extGetWindowThreadProcessId(HWND, LPDWORD); extern HWND WINAPI extGetWindow(HWND, UINT); extern BOOL WINAPI extIsWindow(HWND); extern HWND WINAPI extSetFocus(HWND); extern HBITMAP WINAPI extLoadBitmapA(HINSTANCE, LPCSTR); extern BOOL WINAPI extEnumWindows(WNDENUMPROC, LPARAM); extern BOOL WINAPI extGetMessageA(LPMSG, HWND, UINT, UINT); extern BOOL WINAPI extGetMessageW(LPMSG, HWND, UINT, UINT); extern BOOL WINAPI extPostMessageA(HWND, UINT, WPARAM, LPARAM); extern BOOL WINAPI extPostMessageW(HWND, UINT, WPARAM, LPARAM); extern BOOL WINAPI extAdjustWindowRect(LPRECT, DWORD, BOOL); extern BOOL WINAPI extAdjustWindowRectEx(LPRECT, DWORD, BOOL, DWORD); // Winmm.dll: extern MCIERROR WINAPI extmciSendCommandA(MCIDEVICEID, UINT, DWORD_PTR, DWORD_PTR); extern MCIERROR WINAPI extmciSendCommandW(MCIDEVICEID, UINT, DWORD_PTR, DWORD_PTR); extern MCIERROR WINAPI extmciSendStringW(LPCWSTR, LPWSTR, UINT, HANDLE); extern MCIERROR WINAPI extmciSendStringA(LPCTSTR, LPTSTR, UINT, HANDLE); extern DWORD WINAPI exttimeGetTime(void); extern MMRESULT WINAPI exttimeSetEvent(UINT, UINT, LPTIMECALLBACK, DWORD_PTR, UINT); extern MMRESULT WINAPI exttimeKillEvent(UINT); // extern function declaration extern void HookKernel32Init(); extern void HookUser32Init(); extern void HookGDI32Init(); extern void HookWinG32Init(); extern void HookImagehlpInit(); /* eof */ ================================================ FILE: dll/toggle_fs.cpp ================================================ #define _WIN32_WINNT 0x0600 #define WIN32_LEAN_AND_MEAN #define _CRT_SECURE_NO_DEPRECATE 1 #include #include #include #include "dxwnd.h" #include "dxwcore.hpp" #include "dxhelper.h" extern void RecoverScreenMode(); extern void RestoreDDrawSurfaces(); extern void RestoreD3DSurfaces(BOOL); void dx_FullScreenToggle(HWND hwnd) { static BOOL bFullScreen = FALSE; static RECT WinRect = {0, 0, 0, 0}; static DWORD OldStyle, OldExtStyle; static DEVMODE oldDisplayMode; static DWORD OrigFlags; static char szDevice[32]; // toggle .... if (bFullScreen){ OutTraceDW("DxWnd: exiting fullscreen mode: style=%x extstyle=%x pos=(%d,%d)-(%d,%d)\n", OldStyle, OldExtStyle, WinRect.left, WinRect.top, WinRect.right, WinRect.bottom); int ChangeDisplayResult = (*pChangeDisplaySettingsExA)(szDevice, &oldDisplayMode, NULL, CDS_FULLSCREEN, NULL); if(ChangeDisplayResult != DISP_CHANGE_SUCCESSFUL){ OutTraceE("ChangeDisplaySettingsEx ERROR: res=%d at %d\n", ChangeDisplayResult, __LINE__); MessageBox(NULL,"Error: Failed to recover display mode.", "Error", 0); } // MoveWindow doesn't recover the exact position!!! (*pSetWindowLong)(hwnd, GWL_STYLE, OldStyle); (*pSetWindowLong)(hwnd, GWL_EXSTYLE, OldExtStyle); (*pSetWindowPos)(hwnd, HWND_TOP, WinRect.left, WinRect.top, (WinRect.right-WinRect.left), (WinRect.bottom-WinRect.top), SWP_DRAWFRAME|SWP_FRAMECHANGED|SWP_SHOWWINDOW); memset(&WinRect, 0, sizeof(WinRect)); } else { OutTraceDW("DxWnd: entering fullscreen mode\n"); int BestIndex, iCost, iBestCost; (*pGetWindowRect)(hwnd, &WinRect); OldStyle = (*pGetWindowLongA)(hwnd, GWL_STYLE); OldExtStyle = (*pGetWindowLongA)(hwnd, GWL_EXSTYLE); (*pSetWindowLong)(hwnd, GWL_STYLE, WS_VISIBLE|WS_CLIPSIBLINGS|WS_OVERLAPPED); (*pSetWindowLong)(hwnd, GWL_EXSTYLE, 0); DEVMODE DisplayMode; HMONITOR hBestMonitor; hBestMonitor = MonitorFromWindow(hwnd, MONITOR_DEFAULTTONEAREST); MONITORINFOEX mi; memset(&mi, 0, sizeof(mi)); mi.cbSize=sizeof(mi); GetMonitorInfo(hBestMonitor, &mi); OutTraceDW("Using monitor=\"%s\", rect=(%d,%d)-(%d,%d) type=%s\n", mi.szDevice, mi.rcMonitor.left, mi.rcMonitor.top, mi.rcMonitor.right, mi.rcMonitor.bottom, (mi.dwFlags & MONITORINFOF_PRIMARY) ? "PRIMARY" : "SECONDARY"); memset(&oldDisplayMode, 0, sizeof(DEVMODE)); if(!(*pEnumDisplaySettings)(mi.szDevice, ENUM_CURRENT_SETTINGS, &oldDisplayMode)){ MessageBox(NULL, "EnumDisplaySettings Failed ???", "Error!", 0); } iBestCost=1000000; // huge for (int i=0; ;i++){ iCost=0; memset(&DisplayMode, 0, sizeof(DEVMODE)); DisplayMode.dmSize = sizeof(DEVMODE); if(!(*pEnumDisplaySettings)(mi.szDevice, i, &DisplayMode))break; // no more modes if(DisplayMode.dmPelsWidth < dxw.GetScreenWidth()) continue; // bad: too narrow if(DisplayMode.dmPelsHeight < dxw.GetScreenHeight()) continue; // bad: too low if (DisplayMode.dmBitsPerPel != oldDisplayMode.dmBitsPerPel) continue; // bad: different color depth iCost = (DisplayMode.dmPelsWidth - dxw.GetScreenWidth()) + (DisplayMode.dmPelsHeight - dxw.GetScreenHeight()) + (DisplayMode.dmDisplayFrequency == oldDisplayMode.dmDisplayFrequency) ? 1 : 0; if(iCost < iBestCost){ iBestCost = iCost; BestIndex = i; } if(iBestCost == 0) break; // got the perfect one! } memset(&DisplayMode, 0, sizeof(DEVMODE)); strncpy(szDevice, mi.szDevice, 32); (*pEnumDisplaySettings)(mi.szDevice, BestIndex, &DisplayMode); OutTraceDW("DxWnd: selected mode bpp=%d size=(%dx%d) freq=%d\n", DisplayMode.dmBitsPerPel, DisplayMode.dmPelsWidth, DisplayMode.dmPelsHeight, DisplayMode.dmDisplayFrequency); DisplayMode.dmFields = DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT|DM_DISPLAYFLAGS|DM_DISPLAYFREQUENCY|DM_POSITION; int ChangeDisplayResult = (*pChangeDisplaySettingsExA)(mi.szDevice, &DisplayMode, NULL, CDS_FULLSCREEN, NULL); if(ChangeDisplayResult != DISP_CHANGE_SUCCESSFUL){ OutTraceE("ChangeDisplaySettingsEx ERROR: res=%d at %d\n", ChangeDisplayResult, __LINE__); MessageBox(NULL,"Error: Failed to change display mode.", "Error", 0); } // query again the NEW screen coordinates .... memset(&mi, 0, sizeof(mi)); mi.cbSize=sizeof(mi); GetMonitorInfo(hBestMonitor, &mi); OutTraceDW("Updated monitor=\"%s\", rect=(%d,%d)-(%d,%d) type=%s\n", mi.szDevice, mi.rcMonitor.left, mi.rcMonitor.top, mi.rcMonitor.right, mi.rcMonitor.bottom, (mi.dwFlags & MONITORINFOF_PRIMARY) ? "PRIMARY" : "SECONDARY"); (*pMoveWindow)(hwnd, mi.rcMonitor.left, mi.rcMonitor.top, // x, y DisplayMode.dmPelsWidth, // width DisplayMode.dmPelsHeight, // height TRUE); } (*pUpdateWindow)(hwnd); RestoreDDrawSurfaces(); //RestoreD3DSurfaces(bFullScreen); bFullScreen = !bFullScreen; // switch toggle } void dx_DesktopToggle(HWND hwnd, BOOL bWorkArea) { static BOOL bDesktopToggle = FALSE; static RECT WinRect = {0, 0, 0, 0}; static DWORD OldStyle, OldExtStyle; if (bDesktopToggle){ // toggle .... OutTraceDW("DxWnd: exiting desktop mode: style=%x extstyle=%x pos=(%d,%d)-(%d,%d)\n", OldStyle, OldExtStyle, WinRect.left, WinRect.top, WinRect.right, WinRect.bottom); (*pSetWindowLong)(hwnd, GWL_STYLE, OldStyle); (*pSetWindowLong)(hwnd, GWL_EXSTYLE, OldExtStyle); // MoveWindow doesn't recover the exact position!!! (*pSetWindowPos)(hwnd, HWND_TOP, WinRect.left, WinRect.top, (WinRect.right-WinRect.left), (WinRect.bottom-WinRect.top), SWP_DRAWFRAME|SWP_FRAMECHANGED|SWP_SHOWWINDOW); memset(&WinRect, 0, sizeof(WinRect)); } else { RECT DesktopRect; HWND DesktopWnd; HDC hClientDC; OutTraceDW("DxWnd: entering desktop mode\n"); if((WinRect.left==0) && (WinRect.right==0) && (WinRect.top==0) && (WinRect.bottom==0)) (*pGetWindowRect)(hwnd, &WinRect); OldStyle = (*pGetWindowLongA)(hwnd, GWL_STYLE); OldExtStyle = (*pGetWindowLongA)(hwnd, GWL_EXSTYLE); (*pSetWindowLong)(hwnd, GWL_STYLE, WS_VISIBLE|WS_CLIPSIBLINGS|WS_OVERLAPPED); (*pSetWindowLong)(hwnd, GWL_EXSTYLE, 0); (*pUpdateWindow)(hwnd); DesktopWnd = (*pGetDesktopWindow)(); hClientDC=(*pGDIGetDC)(hwnd); HMONITOR hBestMonitor; hBestMonitor = MonitorFromWindow(hwnd, MONITOR_DEFAULTTONEAREST); MONITORINFOEX mi; memset(&mi, 0, sizeof(mi)); mi.cbSize=sizeof(mi); GetMonitorInfo(hBestMonitor, &mi); OutTraceDW("Using monitor=\"%s\", rect=(%d,%d)-(%d,%d) type=%s\n", mi.szDevice, mi.rcMonitor.left, mi.rcMonitor.top, mi.rcMonitor.right, mi.rcMonitor.bottom, (mi.dwFlags & MONITORINFOF_PRIMARY) ? "PRIMARY" : "SECONDARY"); DesktopRect = bWorkArea ? mi.rcWork : mi.rcMonitor; OutTraceDW("DxWnd: desktop=(%d,%d)-(%d,%d)\n"); (*pSetWindowPos)(hwnd, HWND_TOP, DesktopRect.left, DesktopRect.top, (DesktopRect.right-DesktopRect.left), (DesktopRect.bottom-DesktopRect.top), SWP_DRAWFRAME|SWP_FRAMECHANGED|SWP_SHOWWINDOW); (*pGDIBitBlt)(hClientDC, DesktopRect.left, DesktopRect.top, DesktopRect.right, DesktopRect.bottom, NULL, 0, 0, BLACKNESS); } bDesktopToggle = !bDesktopToggle; // switch toggle (*pUpdateWindow)(hwnd); dxw.ScreenRefresh(); (*pInvalidateRect)(hwnd, NULL, FALSE); // force window update } ================================================ FILE: dll/user32.cpp ================================================ #define _WIN32_WINNT 0x0600 #define WIN32_LEAN_AND_MEAN #define _CRT_SECURE_NO_WARNINGS #define _CRT_NON_CONFORMING_SWPRINTFS #include #include #include "dxwnd.h" #include "dxwcore.hpp" #include "syslibs.h" #include "dxhook.h" #include "hddraw.h" #include "dxhelper.h" #include "shareddc.hpp" #include #include #define FIXCHILDSIZE FALSE //#define TRANSLATEMESSAGEHOOK #ifdef TRANSLATEMESSAGEHOOK typedef BOOL (WINAPI *TranslateMessage_Type)(MSG *); BOOL WINAPI extTranslateMessage(MSG *); TranslateMessage_Type pTranslateMessage; #endif #define _Warn(s) MessageBox(0, s, "to do", MB_ICONEXCLAMATION) BOOL IsChangeDisplaySettingsHotPatched = FALSE; BOOL InMainWinCreation = FALSE; extern BOOL bFlippedDC; extern HDC hFlippedDC; //typedef BOOL (WINAPI *EnumDisplayMonitors_Type)(HDC, LPCRECT, MONITORENUMPROC, LPARAM); //EnumDisplayMonitors_Type pEnumDisplayMonitors = NULL; //BOOL WINAPI extEnumDisplayMonitors(HDC, LPCRECT, MONITORENUMPROC, LPARAM); typedef BOOL (WINAPI *ValidateRgn_Type)(HWND, HRGN); ValidateRgn_Type pValidateRgn; BOOL WINAPI extValidateRgn(HWND, HRGN); #ifdef TRACEPALETTE typedef UINT (WINAPI *GetDIBColorTable_Type)(HDC, UINT, UINT, RGBQUAD *); GetDIBColorTable_Type pGetDIBColorTable = NULL; UINT WINAPI extGetDIBColorTable(HDC, UINT, UINT, RGBQUAD *); typedef UINT (WINAPI *SetDIBColorTable_Type)(HDC, UINT, UINT, const RGBQUAD *); SetDIBColorTable_Type pSetDIBColorTable = NULL; UINT WINAPI extSetDIBColorTable(HDC, UINT, UINT, const RGBQUAD *); #endif static HookEntryEx_Type Hooks[]={ #ifdef TRANSLATEMESSAGEHOOK {HOOK_IAT_CANDIDATE, 0, "TranslateMessage", (FARPROC)TranslateMessage, (FARPROC *)&pTranslateMessage, (FARPROC)extTranslateMessage}, #endif {HOOK_IAT_CANDIDATE, 0, "UpdateWindow", (FARPROC)UpdateWindow, (FARPROC *)&pUpdateWindow, (FARPROC)extUpdateWindow}, // v2.04.04: needed for "Hide Desktop" option //{HOOK_IAT_CANDIDATE, 0, "GetWindowPlacement", (FARPROC)NULL, (FARPROC *)&pGetWindowPlacement, (FARPROC)extGetWindowPlacement}, //{HOOK_IAT_CANDIDATE, 0, "SetWindowPlacement", (FARPROC)NULL, (FARPROC *)&pSetWindowPlacement, (FARPROC)extSetWindowPlacement}, {HOOK_HOT_CANDIDATE, 0x25, "ChangeDisplaySettingsA", (FARPROC)ChangeDisplaySettingsA, (FARPROC *)&pChangeDisplaySettingsA, (FARPROC)extChangeDisplaySettingsA}, {HOOK_HOT_CANDIDATE, 0x26, "ChangeDisplaySettingsExA", (FARPROC)ChangeDisplaySettingsExA, (FARPROC *)&pChangeDisplaySettingsExA, (FARPROC)extChangeDisplaySettingsExA}, {HOOK_HOT_CANDIDATE, 0x28, "ChangeDisplaySettingsW", (FARPROC)NULL, (FARPROC *)&pChangeDisplaySettingsW, (FARPROC)extChangeDisplaySettingsW}, // ref. by Knights of Honor {HOOK_HOT_CANDIDATE, 0x27, "ChangeDisplaySettingsExW", (FARPROC)NULL, (FARPROC *)&pChangeDisplaySettingsExW, (FARPROC)extChangeDisplaySettingsExW}, {HOOK_HOT_CANDIDATE, 0, "GetMonitorInfoA", (FARPROC)GetMonitorInfoA, (FARPROC *)&pGetMonitorInfoA, (FARPROC)extGetMonitorInfoA}, {HOOK_HOT_CANDIDATE, 0, "GetMonitorInfoW", (FARPROC)GetMonitorInfoW, (FARPROC *)&pGetMonitorInfoW, (FARPROC)extGetMonitorInfoW}, {HOOK_HOT_CANDIDATE, 0, "ShowCursor", (FARPROC)ShowCursor, (FARPROC *)&pShowCursor, (FARPROC)extShowCursor}, {HOOK_IAT_CANDIDATE, 0, "CreateDialogIndirectParamA", (FARPROC)CreateDialogIndirectParamA, (FARPROC *)&pCreateDialogIndirectParam, (FARPROC)extCreateDialogIndirectParam}, {HOOK_IAT_CANDIDATE, 0, "CreateDialogParamA", (FARPROC)CreateDialogParamA, (FARPROC *)&pCreateDialogParam, (FARPROC)extCreateDialogParam}, {HOOK_IAT_CANDIDATE, 0, "MoveWindow", (FARPROC)MoveWindow, (FARPROC *)&pMoveWindow, (FARPROC)extMoveWindow}, {HOOK_HOT_CANDIDATE, 0, "EnumDisplaySettingsA", (FARPROC)EnumDisplaySettingsA, (FARPROC *)&pEnumDisplaySettings, (FARPROC)extEnumDisplaySettings}, {HOOK_IAT_CANDIDATE, 0, "GetClipCursor", (FARPROC)GetClipCursor, (FARPROC*)&pGetClipCursor, (FARPROC)extGetClipCursor}, {HOOK_HOT_CANDIDATE, 0, "ClipCursor", (FARPROC)ClipCursor, (FARPROC *)&pClipCursor, (FARPROC)extClipCursor}, {HOOK_IAT_CANDIDATE, 0, "DefWindowProcA", (FARPROC)DefWindowProcA, (FARPROC *)&pDefWindowProcA, (FARPROC)extDefWindowProcA}, {HOOK_IAT_CANDIDATE, 0, "DefWindowProcW", (FARPROC)DefWindowProcW, (FARPROC *)&pDefWindowProcW, (FARPROC)extDefWindowProcW}, {HOOK_HOT_CANDIDATE, 0, "CreateWindowExA", (FARPROC)CreateWindowExA, (FARPROC *)&pCreateWindowExA, (FARPROC)extCreateWindowExA}, {HOOK_HOT_CANDIDATE, 0, "CreateWindowExW", (FARPROC)CreateWindowExW, (FARPROC *)&pCreateWindowExW, (FARPROC)extCreateWindowExW}, {HOOK_IAT_CANDIDATE, 0, "RegisterClassExA", (FARPROC)RegisterClassExA, (FARPROC *)&pRegisterClassExA, (FARPROC)extRegisterClassExA}, {HOOK_IAT_CANDIDATE, 0, "RegisterClassA", (FARPROC)RegisterClassA, (FARPROC *)&pRegisterClassA, (FARPROC)extRegisterClassA}, {HOOK_IAT_CANDIDATE, 0, "RegisterClassExW", (FARPROC)RegisterClassExW, (FARPROC *)&pRegisterClassExW, (FARPROC)extRegisterClassExW}, {HOOK_IAT_CANDIDATE, 0, "RegisterClassW", (FARPROC)RegisterClassW, (FARPROC *)&pRegisterClassW, (FARPROC)extRegisterClassW}, {HOOK_HOT_CANDIDATE, 0, "GetSystemMetrics", (FARPROC)GetSystemMetrics, (FARPROC *)&pGetSystemMetrics, (FARPROC)extGetSystemMetrics}, {HOOK_HOT_CANDIDATE, 0, "GetDesktopWindow", (FARPROC)GetDesktopWindow, (FARPROC *)&pGetDesktopWindow, (FARPROC)extGetDesktopWindow}, {HOOK_IAT_CANDIDATE, 0, "CloseWindow", (FARPROC)NULL, (FARPROC *)&pCloseWindow, (FARPROC)extCloseWindow}, {HOOK_IAT_CANDIDATE, 0, "DestroyWindow", (FARPROC)NULL, (FARPROC *)&pDestroyWindow, (FARPROC)extDestroyWindow}, {HOOK_IAT_CANDIDATE, 0, "SetSysColors", (FARPROC)NULL, (FARPROC *)&pSetSysColors, (FARPROC)extSetSysColors}, {HOOK_IAT_CANDIDATE, 0, "SetCapture", (FARPROC)NULL, (FARPROC *)&pSetCapture, (FARPROC)extSetCapture}, {HOOK_HOT_CANDIDATE, 0, "SetWindowLongA", (FARPROC)SetWindowLongA, (FARPROC *)&pSetWindowLongA, (FARPROC)extSetWindowLongA}, {HOOK_HOT_CANDIDATE, 0, "GetWindowLongA", (FARPROC)GetWindowLongA, (FARPROC *)&pGetWindowLongA, (FARPROC)extGetWindowLongA}, {HOOK_HOT_CANDIDATE, 0, "SetWindowLongW", (FARPROC)SetWindowLongW, (FARPROC *)&pSetWindowLongW, (FARPROC)extSetWindowLongW}, {HOOK_HOT_CANDIDATE, 0, "GetWindowLongW", (FARPROC)GetWindowLongW, (FARPROC *)&pGetWindowLongW, (FARPROC)extGetWindowLongW}, {HOOK_IAT_CANDIDATE, 0, "IsWindowVisible", (FARPROC)IsWindowVisible, (FARPROC *)&pIsWindowVisible, (FARPROC)extIsWindowVisible}, // ref. in dxw.SetClipper, CreateWindowCommon {HOOK_IAT_CANDIDATE, 0, "GetTopWindow", (FARPROC)GetTopWindow, (FARPROC *)&pGetTopWindow, (FARPROC)extGetTopWindow}, // hot by MinHook since v2.03.07 {HOOK_HOT_CANDIDATE, 0, "SystemParametersInfoA", (FARPROC)SystemParametersInfoA, (FARPROC *)&pSystemParametersInfoA, (FARPROC)extSystemParametersInfoA}, {HOOK_HOT_CANDIDATE, 0, "SystemParametersInfoW", (FARPROC)SystemParametersInfoW, (FARPROC *)&pSystemParametersInfoW, (FARPROC)extSystemParametersInfoW}, #ifdef GALAPAGOSTEST // test for Galapagos {HOOK_HOT_CANDIDATE, 0, "GetFocus", (FARPROC)GetFocus, (FARPROC *)&pGetFocus, (FARPROC)extGetFocus}, {HOOK_HOT_CANDIDATE, 0, "SetFocus", (FARPROC)SetFocus, (FARPROC *)&pSetFocus, (FARPROC)extSetFocus}, {HOOK_HOT_CANDIDATE, 0, "IsWindow", (FARPROC)IsWindow, (FARPROC *)&pIsWindow, (FARPROC)extIsWindow}, {HOOK_HOT_CANDIDATE, 0, "GetWindow", (FARPROC)GetWindow, (FARPROC *)&pGetWindow, (FARPROC)extGetWindow}, {HOOK_HOT_CANDIDATE, 0, "GetWindowThreadProcessId", (FARPROC)GetWindowThreadProcessId, (FARPROC *)&pGetWindowThreadProcessId, (FARPROC)extGetWindowThreadProcessId}, {HOOK_HOT_CANDIDATE, 0, "GetFocus", (FARPROC)GetFocus, (FARPROC *)&pGetFocus, (FARPROC)extGetFocus}, #endif //{HOOK_IAT_CANDIDATE, 0, "GetWindowTextA", (FARPROC)GetWindowTextA, (FARPROC *)&pGetWindowTextA, (FARPROC)extGetWindowTextA}, //{HOOK_HOT_CANDIDATE, 0, "EnumDisplayMonitors", (FARPROC)EnumDisplayMonitors, (FARPROC *)&pEnumDisplayMonitors, (FARPROC)extEnumDisplayMonitors}, #ifdef TRACEPALETTE {HOOK_HOT_CANDIDATE, 0, "GetDIBColorTable", (FARPROC)GetDIBColorTable, (FARPROC *)&pGetDIBColorTable, (FARPROC)extGetDIBColorTable}, {HOOK_HOT_CANDIDATE, 0, "SetDIBColorTable", (FARPROC)SetDIBColorTable, (FARPROC *)&pSetDIBColorTable, (FARPROC)extSetDIBColorTable}, #endif {HOOK_HOT_CANDIDATE, 0, "BringWindowToTop", (FARPROC)BringWindowToTop, (FARPROC *)&pBringWindowToTop, (FARPROC)extBringWindowToTop}, {HOOK_HOT_CANDIDATE, 0, "SetForegroundWindow", (FARPROC)SetForegroundWindow, (FARPROC *)&pSetForegroundWindow, (FARPROC)extSetForegroundWindow}, {HOOK_HOT_CANDIDATE, 0, "ChildWindowFromPoint", (FARPROC)ChildWindowFromPoint, (FARPROC *)&pChildWindowFromPoint, (FARPROC)extChildWindowFromPoint}, {HOOK_HOT_CANDIDATE, 0, "ChildWindowFromPointEx", (FARPROC)ChildWindowFromPointEx, (FARPROC *)&pChildWindowFromPointEx, (FARPROC)extChildWindowFromPointEx}, {HOOK_HOT_CANDIDATE, 0, "WindowFromPoint", (FARPROC)WindowFromPoint, (FARPROC *)&pWindowFromPoint, (FARPROC)extWindowFromPoint}, {HOOK_HOT_REQUIRED, 0 ,"SetWindowsHookExA", (FARPROC)SetWindowsHookExA, (FARPROC *)&pSetWindowsHookExA, (FARPROC)extSetWindowsHookExA}, {HOOK_HOT_REQUIRED, 0 ,"SetWindowsHookExW", (FARPROC)SetWindowsHookExW, (FARPROC *)&pSetWindowsHookExW, (FARPROC)extSetWindowsHookExW}, //{HOOK_HOT_CANDIDATE, 0, "MessageBoxTimeoutA", (FARPROC)NULL, (FARPROC *)&pMessageBoxTimeoutA, (FARPROC)extMessageBoxTimeoutA}, //{HOOK_HOT_CANDIDATE, 0, "MessageBoxTimeoutW", (FARPROC)NULL, (FARPROC *)&pMessageBoxTimeoutW, (FARPROC)extMessageBoxTimeoutW}, {HOOK_IAT_CANDIDATE, 0, "GetDC", (FARPROC)GetDC, (FARPROC *)&pGDIGetDC, (FARPROC)extGDIGetDC}, {HOOK_IAT_CANDIDATE, 0, "GetDCEx", (FARPROC)GetDCEx, (FARPROC *)&pGDIGetDCEx, (FARPROC)extGDIGetDCEx}, {HOOK_IAT_CANDIDATE, 0, "GetWindowDC", (FARPROC)GetWindowDC, (FARPROC *)&pGDIGetWindowDC, (FARPROC)extGDIGetWindowDC}, {HOOK_IAT_CANDIDATE, 0, "ReleaseDC", (FARPROC)ReleaseDC, (FARPROC *)&pGDIReleaseDC, (FARPROC)extGDIReleaseDC}, {HOOK_HOT_CANDIDATE, 0, "BeginPaint", (FARPROC)BeginPaint, (FARPROC *)&pBeginPaint, (FARPROC)extBeginPaint}, {HOOK_HOT_CANDIDATE, 0, "EndPaint", (FARPROC)EndPaint, (FARPROC *)&pEndPaint, (FARPROC)extEndPaint}, {HOOK_IAT_CANDIDATE, 0, "DialogBoxParamA", (FARPROC)NULL, (FARPROC *)&pDialogBoxParamA, (FARPROC)extDialogBoxParamA}, //{HOOK_IAT_CANDIDATE, 0, "IsZoomed", (FARPROC)NULL, (FARPROC *)&pIsZoomed, (FARPROC)extIsZoomed}, //{HOOK_HOT_CANDIDATE, 0, "IsIconic", (FARPROC)IsIconic, (FARPROC *)&pIsIconic, (FARPROC)extIsIconic}, {HOOK_HOT_CANDIDATE, 0, "ScrollDC", (FARPROC)NULL, (FARPROC *)&pScrollDC, (FARPROC)extScrollDC}, // both added to fix the Galapagos menu bar, but with no success !!!! {HOOK_HOT_CANDIDATE, 0, "ShowScrollBar", (FARPROC)ShowScrollBar, (FARPROC *)&pShowScrollBar, (FARPROC)extShowScrollBar}, {HOOK_HOT_CANDIDATE, 0, "DrawMenuBar", (FARPROC)DrawMenuBar, (FARPROC *)&pDrawMenuBar, (FARPROC)extDrawMenuBar}, // EnumDisplayDevicesW used by "Battleground Europe" ... {HOOK_HOT_CANDIDATE, 0, "EnumDisplayDevicesA", (FARPROC)EnumDisplayDevicesA, (FARPROC *)&pEnumDisplayDevicesA, (FARPROC)extEnumDisplayDevicesA}, {HOOK_HOT_CANDIDATE, 0, "EnumDisplayDevicesW", (FARPROC)EnumDisplayDevicesW, (FARPROC *)&pEnumDisplayDevicesW, (FARPROC)extEnumDisplayDevicesW}, //{HOOK_IAT_CANDIDATE, 0, "LoadBitmapA", (FARPROC)NULL, (FARPROC *)&pLoadBitmapA, (FARPROC)extLoadBitmapA}, {HOOK_IAT_CANDIDATE, 0, "EnumWindows", (FARPROC)NULL, (FARPROC *)&pEnumWindows, (FARPROC)extEnumWindows}, {HOOK_IAT_CANDIDATE, 0, "AdjustWindowRect", (FARPROC)NULL, (FARPROC *)&pAdjustWindowRect, (FARPROC)extAdjustWindowRect}, {HOOK_IAT_CANDIDATE, 0, "AdjustWindowRectEx", (FARPROC)AdjustWindowRectEx, (FARPROC *)&pAdjustWindowRectEx, (FARPROC)extAdjustWindowRectEx}, {HOOK_HOT_CANDIDATE, 0, "GetActiveWindow", (FARPROC)NULL, (FARPROC *)&pGetActiveWindow, (FARPROC)extGetActiveWindow}, {HOOK_HOT_CANDIDATE, 0, "GetForegroundWindow", (FARPROC)GetForegroundWindow, (FARPROC *)&pGetForegroundWindow, (FARPROC)extGetForegroundWindow}, {HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator }; static HookEntryEx_Type RemapHooks[]={ {HOOK_HOT_CANDIDATE, 0, "ScreenToClient", (FARPROC)ScreenToClient, (FARPROC *)&pScreenToClient, (FARPROC)extScreenToClient}, {HOOK_HOT_CANDIDATE, 0, "ClientToScreen", (FARPROC)ClientToScreen, (FARPROC *)&pClientToScreen, (FARPROC)extClientToScreen}, {HOOK_HOT_CANDIDATE, 0, "GetClientRect", (FARPROC)GetClientRect, (FARPROC *)&pGetClientRect, (FARPROC)extGetClientRect}, {HOOK_HOT_CANDIDATE, 0, "GetWindowRect", (FARPROC)GetWindowRect, (FARPROC *)&pGetWindowRect, (FARPROC)extGetWindowRect}, {HOOK_HOT_CANDIDATE, 0, "MapWindowPoints", (FARPROC)MapWindowPoints, (FARPROC *)&pMapWindowPoints, (FARPROC)extMapWindowPoints}, {HOOK_HOT_CANDIDATE, 0, "GetUpdateRgn", (FARPROC)GetUpdateRgn, (FARPROC *)&pGetUpdateRgn, (FARPROC)extGetUpdateRgn}, //{HOOK_IAT_CANDIDATE, 0, "GetUpdateRect", (FARPROC)GetUpdateRect, (FARPROC *)&pGetUpdateRect, (FARPROC)extGetUpdateRect}, {HOOK_IAT_CANDIDATE, 0, "RedrawWindow", (FARPROC)RedrawWindow, (FARPROC *)&pRedrawWindow, (FARPROC)extRedrawWindow}, {HOOK_HOT_CANDIDATE, 0, "InvalidateRect", (FARPROC)InvalidateRect, (FARPROC *)&pInvalidateRect, (FARPROC)extInvalidateRect}, {HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator }; static HookEntryEx_Type SyscallHooks[]={ {HOOK_IAT_CANDIDATE, 0, "FrameRect", (FARPROC)FrameRect, (FARPROC *)&pFrameRect, (FARPROC)extFrameRect}, // commented ot, dangerous: see comments {HOOK_IAT_CANDIDATE, 0, "GetParent", (FARPROC)GetParent, (FARPROC *)&pGetParent, (FARPROC)extGetParent}, {HOOK_HOT_CANDIDATE, 0, "InvalidateRgn", (FARPROC)InvalidateRgn, (FARPROC *)&pInvalidateRgn, (FARPROC)extInvalidateRgn}, {HOOK_IAT_CANDIDATE, 0, "TabbedTextOutA", (FARPROC)TabbedTextOutA, (FARPROC *)&pTabbedTextOutA, (FARPROC)extTabbedTextOutA}, {HOOK_IAT_CANDIDATE, 0, "TabbedTextOutW", (FARPROC)TabbedTextOutW, (FARPROC *)&pTabbedTextOutW, (FARPROC)extTabbedTextOutW}, {HOOK_IAT_CANDIDATE, 0, "ScrollDC", (FARPROC)ScrollDC, (FARPROC *)&pScrollDC, (FARPROC)extScrollDC}, {HOOK_IAT_CANDIDATE, 0, "DrawTextA", (FARPROC)DrawTextA, (FARPROC *)&pDrawTextA, (FARPROC)extDrawTextA}, {HOOK_IAT_CANDIDATE, 0, "DrawTextExA", (FARPROC)DrawTextExA, (FARPROC *)&pDrawTextExA, (FARPROC)extDrawTextExA}, {HOOK_IAT_CANDIDATE, 0, "DrawTextW", (FARPROC)DrawTextW, (FARPROC *)&pDrawTextW, (FARPROC)extDrawTextW}, {HOOK_IAT_CANDIDATE, 0, "DrawTextExW", (FARPROC)DrawTextExW, (FARPROC *)&pDrawTextExW, (FARPROC)extDrawTextExW}, {HOOK_HOT_CANDIDATE, 0, "FillRect", (FARPROC)NULL, (FARPROC *)&pFillRect, (FARPROC)extFillRect}, {HOOK_HOT_CANDIDATE, 0, "InvertRect", (FARPROC)NULL, (FARPROC *)&pInvertRect, (FARPROC)extInvertRect}, {HOOK_HOT_CANDIDATE, 0, "DrawIcon", (FARPROC)NULL, (FARPROC *)&pDrawIcon, (FARPROC)extDrawIcon}, {HOOK_IAT_CANDIDATE, 0, "DrawIconEx", (FARPROC)NULL, (FARPROC *)&pDrawIconEx, (FARPROC)extDrawIconEx}, {HOOK_HOT_CANDIDATE, 0, "DrawCaption", (FARPROC)NULL, (FARPROC *)&pDrawCaption, (FARPROC)extDrawCaption}, //TODO {HOOK_HOT_CANDIDATE, 0, "DrawEdge", (FARPROC)NULL, (FARPROC *)&pDrawEdge, (FARPROC)extDrawEdge}, //TODO {HOOK_HOT_CANDIDATE, 0, "DrawFocusRect", (FARPROC)NULL, (FARPROC *)&pDrawFocusRect, (FARPROC)extDrawFocusRect}, //TODO {HOOK_HOT_CANDIDATE, 0, "DrawFrameControl", (FARPROC)NULL, (FARPROC *)&pDrawFrameControl, (FARPROC)extDrawFrameControl}, //TODO {HOOK_HOT_CANDIDATE, 0, "DrawStateA", (FARPROC)NULL, (FARPROC *)&pDrawStateA, (FARPROC)extDrawStateA}, //TODO {HOOK_HOT_CANDIDATE, 0, "DrawStateW", (FARPROC)NULL, (FARPROC *)&pDrawStateW, (FARPROC)extDrawStateW}, //TODO {HOOK_HOT_CANDIDATE, 0, "GrayStringA", (FARPROC)NULL, (FARPROC *)&pGrayStringA, (FARPROC)extGrayStringA}, //TODO {HOOK_HOT_CANDIDATE, 0, "GrayStringW", (FARPROC)NULL, (FARPROC *)&pGrayStringW, (FARPROC)extGrayStringW}, //TODO {HOOK_HOT_CANDIDATE, 0, "PaintDesktop", (FARPROC)NULL, (FARPROC *)&pPaintDesktop, (FARPROC)extPaintDesktop}, {HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator }; static HookEntryEx_Type ScaledHooks[]={ {HOOK_HOT_CANDIDATE, 0, "ValidateRect", (FARPROC)ValidateRect, (FARPROC *)&pValidateRect, (FARPROC)extValidateRect}, {HOOK_HOT_CANDIDATE, 0, "ValidateRgn", (FARPROC)ValidateRgn, (FARPROC *)&pValidateRgn, (FARPROC)extValidateRgn}, {HOOK_IAT_CANDIDATE, 0, "ScrollWindow", (FARPROC)ScrollWindow, (FARPROC *)&pScrollWindow, (FARPROC)extScrollWindow}, {HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator }; static HookEntryEx_Type MouseHooks[]={ {HOOK_HOT_CANDIDATE, 0, "GetCursorPos", (FARPROC)GetCursorPos, (FARPROC *)&pGetCursorPos, (FARPROC)extGetCursorPos}, {HOOK_HOT_CANDIDATE, 0, "SetCursorPos", (FARPROC)SetCursorPos, (FARPROC *)&pSetCursorPos, (FARPROC)extSetCursorPos}, {HOOK_IAT_CANDIDATE, 0, "GetCursorInfo", (FARPROC)GetCursorInfo, (FARPROC *)&pGetCursorInfo, (FARPROC)extGetCursorInfo}, {HOOK_IAT_CANDIDATE, 0, "SetCursor", (FARPROC)SetCursor, (FARPROC *)&pSetCursor, (FARPROC)extSetCursor}, {HOOK_IAT_CANDIDATE, 0, "SendMessageA", (FARPROC)SendMessageA, (FARPROC *)&pSendMessageA, (FARPROC)extSendMessageA}, {HOOK_IAT_CANDIDATE, 0, "SendMessageW", (FARPROC)SendMessageW, (FARPROC *)&pSendMessageW, (FARPROC)extSendMessageW}, {HOOK_IAT_CANDIDATE, 0, "mouse_event", (FARPROC)mouse_event, (FARPROC *)&pmouse_event, (FARPROC)extmouse_event}, //{HOOK_IAT_CANDIDATE, 0, "SetPhysicalCursorPos", NULL, (FARPROC *)&pSetCursor, (FARPROC)extSetCursor}, // ??? {HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator }; static HookEntryEx_Type WinHooks[]={ {HOOK_HOT_CANDIDATE, 0, "ShowWindow", (FARPROC)ShowWindow, (FARPROC *)&pShowWindow, (FARPROC)extShowWindow}, {HOOK_HOT_CANDIDATE, 0, "SetWindowPos", (FARPROC)SetWindowPos, (FARPROC *)&pSetWindowPos, (FARPROC)extSetWindowPos}, {HOOK_HOT_CANDIDATE, 0, "DeferWindowPos", (FARPROC)DeferWindowPos, (FARPROC *)&pGDIDeferWindowPos, (FARPROC)extDeferWindowPos}, {HOOK_HOT_CANDIDATE, 0, "CallWindowProcA", (FARPROC)CallWindowProcA, (FARPROC *)&pCallWindowProcA, (FARPROC)extCallWindowProcA}, {HOOK_HOT_CANDIDATE, 0, "CallWindowProcW", (FARPROC)CallWindowProcW, (FARPROC *)&pCallWindowProcW, (FARPROC)extCallWindowProcW}, {HOOK_HOT_CANDIDATE, 0, "DialogBoxIndirectParamA", (FARPROC)DialogBoxIndirectParamA, (FARPROC *)&pDialogBoxIndirectParamA, (FARPROC)extDialogBoxIndirectParamA}, {HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator }; static HookEntryEx_Type TimeHooks[]={ {HOOK_IAT_CANDIDATE, 0, "SetTimer", (FARPROC)SetTimer, (FARPROC *)&pSetTimer, (FARPROC)extSetTimer}, {HOOK_IAT_CANDIDATE, 0, "KillTimer", (FARPROC)KillTimer, (FARPROC *)&pKillTimer, (FARPROC)extKillTimer}, {HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator }; static HookEntryEx_Type DesktopHooks[]={ // currently unused, needed for X-Files {HOOK_IAT_CANDIDATE, 0, "CreateDesktopA", (FARPROC)CreateDesktopA, (FARPROC *)&pCreateDesktop, (FARPROC)extCreateDesktop}, {HOOK_IAT_CANDIDATE, 0, "SwitchDesktop", (FARPROC)SwitchDesktop, (FARPROC *)&pSwitchDesktop, (FARPROC)extSwitchDesktop}, {HOOK_IAT_CANDIDATE, 0, "OpenDesktopA", (FARPROC)OpenDesktopA, (FARPROC *)&pOpenDesktop, (FARPROC)extOpenDesktop}, {HOOK_IAT_CANDIDATE, 0, "CloseDesktop", (FARPROC)CloseDesktop, (FARPROC *)&pCloseDesktop, (FARPROC)extCloseDesktop}, {HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator }; static HookEntryEx_Type MsgLoopHooks[]={ {HOOK_IAT_CANDIDATE, 0, "PeekMessageA", (FARPROC)PeekMessageA, (FARPROC *)&pPeekMessageA, (FARPROC)extPeekMessageA}, {HOOK_IAT_CANDIDATE, 0, "PeekMessageW", (FARPROC)PeekMessageW, (FARPROC *)&pPeekMessageW, (FARPROC)extPeekMessageW}, {HOOK_IAT_CANDIDATE, 0, "GetMessageA", (FARPROC)GetMessageA, (FARPROC *)&pGetMessageA, (FARPROC)extGetMessageA}, {HOOK_IAT_CANDIDATE, 0, "GetMessageW", (FARPROC)GetMessageW, (FARPROC *)&pGetMessageW, (FARPROC)extGetMessageW}, {HOOK_IAT_CANDIDATE, 0, "PostMessageA", (FARPROC)PostMessageA, (FARPROC *)&pPostMessageA, (FARPROC)extPostMessageA}, {HOOK_IAT_CANDIDATE, 0, "PostMessageW", (FARPROC)PostMessageW, (FARPROC *)&pPostMessageW, (FARPROC)extPostMessageW}, {HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator }; static char *libname = "user32.dll"; void HookUser32(HMODULE hModule) { HookLibraryEx(hModule, Hooks, libname); HookLibraryEx(hModule, WinHooks, libname); HookLibraryEx(hModule, MsgLoopHooks, libname); if (dxw.GDIEmulationMode != GDIMODE_NONE) HookLibraryEx(hModule, SyscallHooks, libname); if (dxw.dwFlags2 & GDISTRETCHED) HookLibraryEx(hModule, ScaledHooks, libname); if (dxw.dwFlags1 & CLIENTREMAPPING) HookLibraryEx(hModule, RemapHooks, libname); if ((dxw.dwFlags1 & (MODIFYMOUSE|SLOWDOWN|KEEPCURSORWITHIN)) || (dxw.dwFlags2 & KEEPCURSORFIXED)) HookLibraryEx(hModule, MouseHooks, libname); if (dxw.dwFlags2 & TIMESTRETCH) HookLibraryEx(hModule, TimeHooks, libname); IsChangeDisplaySettingsHotPatched = IsHotPatchedEx(Hooks, "ChangeDisplaySettingsExA") || IsHotPatchedEx(Hooks, "ChangeDisplaySettingsExW"); return; } void HookUser32Init() { HookLibInitEx(Hooks); HookLibInitEx(SyscallHooks); HookLibInitEx(ScaledHooks); HookLibInitEx(RemapHooks); HookLibInitEx(MouseHooks); HookLibInitEx(WinHooks); } FARPROC Remap_user32_ProcAddress(LPCSTR proc, HMODULE hModule) { FARPROC addr; if (addr=RemapLibraryEx(proc, hModule, Hooks)) return addr; if (addr=RemapLibraryEx(proc, hModule, WinHooks)) return addr; if (addr=RemapLibraryEx(proc, hModule, MsgLoopHooks)) return addr; if (dxw.dwFlags1 & CLIENTREMAPPING) if (addr=RemapLibraryEx(proc, hModule, RemapHooks)) return addr; if (dxw.GDIEmulationMode != GDIMODE_NONE) if(addr=RemapLibraryEx(proc, hModule, SyscallHooks)) return addr; if (dxw.dwFlags2 & GDISTRETCHED) if (addr=RemapLibraryEx(proc, hModule, ScaledHooks)) return addr; if ((dxw.dwFlags1 & (MODIFYMOUSE|SLOWDOWN|KEEPCURSORWITHIN)) || (dxw.dwFlags2 & KEEPCURSORFIXED)) if (addr=RemapLibraryEx(proc, hModule, MouseHooks)) return addr; if((dxw.dwFlags2 & TIMESTRETCH) && (dxw.dwFlags4 & STRETCHTIMERS)) if (addr=RemapLibraryEx(proc, hModule, TimeHooks)) return addr; return NULL; } /* ------------------------------------------------------------------------------ */ // auxiliary (static) functions /* ------------------------------------------------------------------------------ */ static void Stopper(char *s, int line) { char sMsg[81]; sprintf(sMsg,"break: \"%s\"", s); MessageBox(0, sMsg, "break", MB_OK | MB_ICONEXCLAMATION); } //#define STOPPER_TEST // comment out to eliminate #ifdef STOPPER_TEST #define STOPPER(s) Stopper(s, __LINE__) #else #define STOPPER(s) #endif static LPCSTR sTemplateName(LPCSTR tn) { static char sBuf[20+1]; if((DWORD)tn >> 16) return tn; else { sprintf(sBuf, "ID:(%x)", ((DWORD)tn & 0x0000FFFF)); return sBuf; } } // -------------------------------------------------------------------------- // // globals, externs, static functions... // // -------------------------------------------------------------------------- // PrimHDC: DC handle of the selected DirectDraw primary surface. NULL when invalid. HDC PrimHDC=NULL; LPRECT lpClipRegion=NULL; RECT ClipRegion; int LastCurPosX, LastCurPosY; extern GetDC_Type pGetDC; extern ReleaseDC_Type pReleaseDC1; extern HRESULT WINAPI sBlt(int, Blt_Type, char *, LPDIRECTDRAWSURFACE, LPRECT, LPDIRECTDRAWSURFACE, LPRECT, DWORD, LPDDBLTFX, BOOL); LONG WINAPI MyChangeDisplaySettings(char *fname, BOOL WideChar, void *lpDevMode, DWORD dwflags) { HRESULT res; DWORD dmFields, dmBitsPerPel, dmPelsWidth, dmPelsHeight; if(dwflags & CDS_TEST) { OutTraceDW("%s: TEST res=DISP_CHANGE_SUCCESSFUL\n", fname); return DISP_CHANGE_SUCCESSFUL; } // v2.02.32: reset the emulated DC used in GDIEMULATEDC mode dxw.ResetEmulatedDC(); if(lpDevMode){ if(WideChar){ dmFields=((DEVMODEW *)lpDevMode)->dmFields; dmPelsWidth=((DEVMODEW *)lpDevMode)->dmPelsWidth; dmPelsHeight=((DEVMODEW *)lpDevMode)->dmPelsHeight; dmBitsPerPel=((DEVMODEW *)lpDevMode)->dmBitsPerPel; } else{ dmFields=((DEVMODEA *)lpDevMode)->dmFields; dmPelsWidth=((DEVMODEA *)lpDevMode)->dmPelsWidth; dmPelsHeight=((DEVMODEA *)lpDevMode)->dmPelsHeight; dmBitsPerPel=((DEVMODEA *)lpDevMode)->dmBitsPerPel; } } // save desired settings first v.2.1.89 // v2.1.95 protect when lpDevMode is null (closing game... Jedi Outcast) // v2.2.23 consider new width/height only when dmFields flags are set. if(lpDevMode && (dmFields & (DM_PELSWIDTH | DM_PELSHEIGHT))){ RECT client; dxw.SetScreenSize(dmPelsWidth, dmPelsHeight); // v2.02.31: when main win is bigger that expected resolution, you're in windowed fullscreen mode //(*pGetClientRect)((dxw.dwFlags1 & FIXPARENTWIN) ? dxw.hParentWnd : dxw.GethWnd(), &client); (*pGetClientRect)(dxw.GethWnd(), &client); OutTraceDW("%s: current hWnd=%x size=(%d,%d)\n", fname, dxw.GethWnd(), client.right, client.bottom); if((client.right>=(LONG)dmPelsWidth) && (client.bottom>=(LONG)dmPelsHeight)) { OutTraceDW("%s: entering FULLSCREEN mode\n", fname); dxw.SetFullScreen(TRUE); } } // v2.03.61: bypass display mode changes also for CDS_UPDATEREGISTRY flag // used by "Severance: Blade of Darkness" OpenGL renderer if ((dwflags==0 || dwflags==CDS_FULLSCREEN || dwflags==CDS_UPDATEREGISTRY) && lpDevMode){ if (dxw.dwFlags1 & EMULATESURFACE || !(dmFields & DM_BITSPERPEL)){ OutTraceDW("%s: BYPASS res=DISP_CHANGE_SUCCESSFUL\n", fname); return DISP_CHANGE_SUCCESSFUL; } else{ DEVMODEA NewMode; if(dwflags==CDS_FULLSCREEN) dwflags=0; // no FULLSCREEN (*pEnumDisplaySettings)(NULL, ENUM_CURRENT_SETTINGS, &NewMode); OutTraceDW("ChangeDisplaySettings: CURRENT wxh=(%dx%d) BitsPerPel=%d -> %d\n", NewMode.dmPelsWidth, NewMode.dmPelsHeight, NewMode.dmBitsPerPel, dmBitsPerPel); NewMode.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT; NewMode.dmBitsPerPel = dmBitsPerPel; res=(*pChangeDisplaySettingsExA)(NULL, &NewMode, NULL, 0, NULL); if(res) OutTraceE("ChangeDisplaySettings: ERROR err=%d at %d\n", GetLastError(), __LINE__); return res; } } else{ if(WideChar) return (*pChangeDisplaySettingsExW)(NULL, (LPDEVMODEW)lpDevMode, NULL, dwflags, NULL); else return (*pChangeDisplaySettingsExA)(NULL, (LPDEVMODEA)lpDevMode, NULL, dwflags, NULL); } if(dxw.bAutoScale) dxw.AutoScale(); } void dxwFixWindowPos(char *ApiName, HWND hwnd, LPARAM lParam) { LPWINDOWPOS wp; int MaxX, MaxY; wp = (LPWINDOWPOS)lParam; MaxX = dxw.iSizX; MaxY = dxw.iSizY; if (!MaxX) MaxX = dxw.GetScreenWidth(); if (!MaxY) MaxY = dxw.GetScreenHeight(); static int iLastCX, iLastCY; static int BorderX=-1; static int BorderY=-1; int cx, cy; OutTraceDW("%s: GOT hwnd=%x pos=(%d,%d) dim=(%d,%d) Flags=%x(%s)\n", ApiName, hwnd, wp->x, wp->y, wp->cx, wp->cy, wp->flags, ExplainWPFlags(wp->flags)); // if nothing to be moved, do nothing if ((wp->flags & (SWP_NOMOVE|SWP_NOSIZE))==(SWP_NOMOVE|SWP_NOSIZE)) return; //v2.02.13 if (dxw.dwFlags1 & PREVENTMAXIMIZE){ int UpdFlag = 0; WINDOWPOS MaxPos; dxw.CalculateWindowPos(hwnd, MaxX, MaxY, &MaxPos); if(wp->cx>MaxPos.cx) { wp->cx=MaxPos.cx; UpdFlag=1; } if(wp->cy>MaxPos.cy) { wp->cy=MaxPos.cy; UpdFlag=1; } if (UpdFlag) OutTraceDW("%s: SET max size=(%dx%d)\n", ApiName, wp->cx, wp->cy); } if (dxw.IsFullScreen() && (hwnd==dxw.GethWnd())){ if (dxw.dwFlags1 & LOCKWINPOS){ dxw.CalculateWindowPos(hwnd, MaxX, MaxY, wp); OutTraceDW("%s: LOCK pos=(%d,%d) size=(%dx%d)\n", ApiName, wp->x, wp->y, wp->cx, wp->cy); } // v2.03.95: locked size if (dxw.dwFlags2 & LOCKEDSIZE){ WINDOWPOS MaxPos; dxw.CalculateWindowPos(hwnd, MaxX, MaxY, &MaxPos); wp->cx = MaxPos.cx; wp->cy = MaxPos.cy; OutTraceDW("%s: SET locked size=(%dx%d)\n", ApiName, wp->cx, wp->cy); } if (dxw.dwFlags7 & ANCHORED){ WINDOWPOS MaxPos; dxw.CalculateWindowPos(hwnd, MaxX, MaxY, &MaxPos); wp->cx = MaxPos.cx; wp->cy = MaxPos.cy; wp->x = MaxPos.x; wp->y = MaxPos.y; OutTraceDW("%s: SET anchored pos=(%d,%d) size=(%dx%d)\n", ApiName, wp->x, wp->y, wp->cx, wp->cy); } } if ((dxw.dwFlags2 & KEEPASPECTRATIO) && dxw.IsFullScreen() && (hwnd==dxw.GethWnd())){ // note: while keeping aspect ration, resizing from one corner doesn't tell // which coordinate is prevalent to the other. We made an arbitrary choice. // note: v2.1.93: compensation must refer to the client area, not the wp // window dimensions that include the window borders. if(BorderX==-1){ // v2.02.92: Fixed for AERO mode, where GetWindowRect substantially LIES! RECT client, full; LONG dwStyle, dwExStyle; HMENU hMenu; extern GetWindowLong_Type pGetWindowLong; (*pGetClientRect)(hwnd, &client); full=client; dwStyle=(*pGetWindowLong)(hwnd, GWL_STYLE); dwExStyle=(*pGetWindowLong)(hwnd, GWL_EXSTYLE); hMenu = (dwStyle & WS_CHILD) ? NULL : GetMenu(hwnd); (*pAdjustWindowRectEx)(&full, dwStyle, (hMenu!=NULL), dwExStyle); if (hMenu && (hMenu != (HMENU)-1)) __try {CloseHandle(hMenu);} __except(EXCEPTION_EXECUTE_HANDLER){}; BorderX= full.right - full.left - client.right; BorderY= full.bottom - full.top - client.bottom; OutTraceDW("%s: KEEPASPECTRATIO window borders=(%d,%d)\n", ApiName, BorderX, BorderY); } extern LRESULT LastCursorPos; switch (LastCursorPos){ case HTBOTTOM: case HTTOP: case HTBOTTOMLEFT: case HTBOTTOMRIGHT: case HTTOPLEFT: case HTTOPRIGHT: cx = BorderX + ((wp->cy - BorderY) * dxw.iRatioX) / dxw.iRatioY; if(cx!=wp->cx){ OutTraceDW("%s: KEEPASPECTRATIO adjusted cx=%d->%d\n", ApiName, wp->cx, cx); wp->cx = cx; } break; case HTLEFT: case HTRIGHT: cy = BorderY + ((wp->cx - BorderX) * dxw.iRatioY) / dxw.iRatioX; if(cy!=wp->cy){ OutTraceDW("%s: KEEPASPECTRATIO adjusted cy=%d->%d\n", ApiName, wp->cy, cy); wp->cy = cy; } break; } } if ((dxw.dwFlags5 & CENTERTOWIN) && dxw.IsFullScreen() && (hwnd==dxw.GethWnd())){ RECT wrect; LONG dwStyle, dwExStyle; HMENU hMenu; int minx, miny; wrect = dxw.GetScreenRect(); dwStyle=(*pGetWindowLong)(hwnd, GWL_STYLE); dwExStyle=(*pGetWindowLong)(hwnd, GWL_EXSTYLE); hMenu = (dwStyle & WS_CHILD) ? NULL : GetMenu(hwnd); (*pAdjustWindowRectEx)(&wrect, dwStyle, (hMenu!=NULL), dwExStyle); minx = wrect.right - wrect.left; miny = wrect.bottom - wrect.top; if(wp->cx < minx) wp->cx = minx; if(wp->cy < miny) wp->cy = miny; } iLastCX= wp->cx; iLastCY= wp->cy; } void dxwFixMinMaxInfo(char *ApiName, HWND hwnd, LPARAM lParam) { if (dxw.dwFlags1 & PREVENTMAXIMIZE){ LPMINMAXINFO lpmmi; lpmmi=(LPMINMAXINFO)lParam; OutTraceDW("%s: GOT MaxPosition=(%d,%d) MaxSize=(%d,%d)\n", ApiName, lpmmi->ptMaxPosition.x, lpmmi->ptMaxPosition.y, lpmmi->ptMaxSize.x, lpmmi->ptMaxSize.y); lpmmi->ptMaxPosition.x=0; lpmmi->ptMaxPosition.y=0; lpmmi->ptMaxSize.x = dxw.GetScreenWidth(); lpmmi->ptMaxSize.y = dxw.GetScreenHeight(); OutTraceDW("%s: SET PREVENTMAXIMIZE MaxPosition=(%d,%d) MaxSize=(%d,%d)\n", ApiName, lpmmi->ptMaxPosition.x, lpmmi->ptMaxPosition.y, lpmmi->ptMaxSize.x, lpmmi->ptMaxSize.y); } // v2.1.75: added logic to fix win coordinates to selected ones. // fixes the problem with "Achtung Spitfire", that can't be managed through PREVENTMAXIMIZE flag. if (dxw.dwFlags1 & LOCKWINPOS){ LPMINMAXINFO lpmmi; lpmmi=(LPMINMAXINFO)lParam; OutTraceDW("%s: GOT MaxPosition=(%d,%d) MaxSize=(%d,%d)\n", ApiName, lpmmi->ptMaxPosition.x, lpmmi->ptMaxPosition.y, lpmmi->ptMaxSize.x, lpmmi->ptMaxSize.y); lpmmi->ptMaxPosition.x=dxw.iPosX; lpmmi->ptMaxPosition.y=dxw.iPosY; lpmmi->ptMaxSize.x = dxw.iSizX ? dxw.iSizX : dxw.GetScreenWidth(); lpmmi->ptMaxSize.y = dxw.iSizY ? dxw.iSizY : dxw.GetScreenHeight(); OutTraceDW("%s: SET LOCKWINPOS MaxPosition=(%d,%d) MaxSize=(%d,%d)\n", ApiName, lpmmi->ptMaxPosition.x, lpmmi->ptMaxPosition.y, lpmmi->ptMaxSize.x, lpmmi->ptMaxSize.y); } } static LRESULT WINAPI FixWindowProc(char *ApiName, HWND hwnd, UINT Msg, WPARAM wParam, LPARAM *lpParam) { LPARAM lParam; lParam=*lpParam; OutTraceW("%s: hwnd=%x msg=[0x%x]%s(%x,%x)\n", ApiName, hwnd, Msg, ExplainWinMessage(Msg), wParam, lParam); switch(Msg){ case WM_NCHITTEST: // v2.02.71 fix: when processing WM_NCHITTEST messages whith fixed coordinates avoid calling // the *pDefWindowProc call // fixes "Microsoft Motocross Madness" mouse handling if((dxw.dwFlags2 & FIXNCHITTEST) && (dxw.dwFlags1 & MODIFYMOUSE)){ // mouse processing OutTraceDW("%s: suppress WM_NCHITTEST\n", ApiName); return TRUE; } break; case WM_ERASEBKGND: OutTraceDW("%s: prevent erase background\n", ApiName); return TRUE; // 1=erased break; // useless case WM_GETMINMAXINFO: dxwFixMinMaxInfo(ApiName, hwnd, lParam); break; case WM_WINDOWPOSCHANGING: case WM_WINDOWPOSCHANGED: dxwFixWindowPos(ApiName, hwnd, lParam); break; case WM_STYLECHANGING: case WM_STYLECHANGED: dxw.FixStyle(ApiName, hwnd, wParam, lParam); break; case WM_SIZE: if ((dxw.dwFlags1 & LOCKWINPOS) && dxw.IsFullScreen()) return 0; if (dxw.dwFlags1 & PREVENTMAXIMIZE){ if ((wParam == SIZE_MAXIMIZED)||(wParam == SIZE_MAXSHOW)){ OutTraceDW("%s: prevent screen SIZE to fullscreen wparam=%d(%s) size=(%d,%d)\n", ApiName, wParam, ExplainResizing(wParam), HIWORD(lParam), LOWORD(lParam)); return 0; // checked //lParam = MAKELPARAM(dxw.GetScreenWidth(), dxw.GetScreenHeight()); //OutTraceDW("%s: updated SIZE wparam=%d(%s) size=(%d,%d)\n", ApiName, // wParam, ExplainResizing(wParam), HIWORD(lParam), LOWORD(lParam)); } } break; default: break; } // marker to run hooked function return(-1); } // -------------------------------------------------------------------------- // // user32 API hookers // // -------------------------------------------------------------------------- BOOL WINAPI extInvalidateRect(HWND hwnd, RECT *lpRect, BOOL bErase) { if(IsTraceDW){ char sRect[81]; if(lpRect) sprintf(sRect, "(%d,%d)-(%d,%d)", lpRect->left, lpRect->top, lpRect->right, lpRect->bottom); else strcpy(sRect, "NULL"); OutTrace("InvalidateRect: hwnd=%x rect=%s erase=%x\n", hwnd, sRect, bErase); } if(dxw.Windowize){ if(dxw.IsRealDesktop(hwnd)){ hwnd = dxw.GethWnd(); } RECT ScaledRect; if(dxw.IsFullScreen()) { switch(dxw.GDIEmulationMode){ case GDIMODE_STRETCHED: case GDIMODE_SHAREDDC: case GDIMODE_EMULATED: if(lpRect) { // v2.03.55: the lpRect area must NOT be altered by the call // effect visible in partial updates of Deadlock 2 main menu buttons ScaledRect = *lpRect; dxw.MapClient(&ScaledRect); lpRect = &ScaledRect; } break; default: break; } } } return (*pInvalidateRect)(hwnd, lpRect, bErase); } BOOL WINAPI extShowWindow(HWND hwnd, int nCmdShow) { BOOL res; extern HWND hTrayWnd; static long iLastSizX, iLastSizY; int nOrigCmd; //static long iLastPosX, iLastPosY; OutTraceDW("ShowWindow: hwnd=%x, CmdShow=%x(%s)\n", hwnd, nCmdShow, ExplainShowCmd(nCmdShow)); if(dxw.Windowize && (hwnd == hTrayWnd) && (nCmdShow == SW_HIDE)){ // v2.03.85: suppress attempts to hide the tray window OutTraceDW("ShowWindow: suppress tray window hide\n"); return TRUE; } if(dxw.Windowize && dxw.IsFullScreen() && dxw.IsDesktop(hwnd)){ if(dxw.dwFlags1 & CLIPCURSOR){ OutTraceDW("ShowWindow: clipper on main win %s\n", (nCmdShow==SW_HIDE)?"OFF":"ON"); (nCmdShow==SW_HIDE) ? dxw.EraseClipCursor() : dxw.SetClipCursor(); } } nOrigCmd = nCmdShow; if (dxw.dwFlags1 & PREVENTMAXIMIZE){ if(nCmdShow==SW_MAXIMIZE){ OutTraceDW("ShowWindow: suppress SW_MAXIMIZE maximize\n"); nCmdShow=SW_SHOWNORMAL; } if(nCmdShow==SW_SHOWDEFAULT){ STARTUPINFO StartupInfo; GetStartupInfo(&StartupInfo); OutTraceDW("DEBUG: StartupInfo dwFlags=%x ShowWindow=%x\n", StartupInfo.dwFlags, StartupInfo.wShowWindow); if((StartupInfo.dwFlags & STARTF_USESHOWWINDOW) && (StartupInfo.wShowWindow == SW_MAXIMIZE)){ OutTraceDW("ShowWindow: suppress SW_SHOWDEFAULT maximize\n"); nCmdShow=SW_SHOWNORMAL; } } } res=(*pShowWindow)(hwnd, nCmdShow); // v2.03.95: force zero size when minimize and refresh window coordinates if(hwnd == dxw.GethWnd()){ if(nCmdShow==SW_MINIMIZE) { dxw.IsVisible = FALSE; iLastSizX = dxw.iSizX; iLastSizY = dxw.iSizY; dxw.iSizX = dxw.iSizY = 0; } else { dxw.IsVisible = TRUE; if((dxw.iSizX == 0) && (dxw.iSizY == 0)){ dxw.iSizX = iLastSizX; dxw.iSizY = iLastSizY; } } } //dxw.UpdateDesktopCoordinates(); OutTraceDW("ShowWindow: res=%x\n", res); return res; } LONG WINAPI extGetWindowLong(GetWindowLong_Type pGetWindowLong, char *ApiName, HWND hwnd, int nIndex) { LONG res; res=(*pGetWindowLong)(hwnd, nIndex); OutTraceB("%s: hwnd=%x, Index=%x(%s) res=%x\n", ApiName, hwnd, nIndex, ExplainSetWindowIndex(nIndex), res); if((nIndex==GWL_WNDPROC)||(nIndex==DWL_DLGPROC)){ WNDPROC wp; wp=dxwws.GetProc(hwnd); OutTraceDW("%s: remapping WindowProc res=%x -> %x\n", ApiName, res, (LONG)wp); if(wp) res=(LONG)wp; // if not found, don't alter the value. } return res; } LONG WINAPI extGetWindowLongA(HWND hwnd, int nIndex) { return extGetWindowLong(pGetWindowLongA, "GetWindowLongA", hwnd, nIndex); } LONG WINAPI extGetWindowLongW(HWND hwnd, int nIndex) { return extGetWindowLong(pGetWindowLongW, "GetWindowLongW", hwnd, nIndex); } LONG WINAPI extSetWindowLong(HWND hwnd, int nIndex, LONG dwNewLong, SetWindowLong_Type pSetWindowLong, GetWindowLong_Type pGetWindowLong) { LONG res; OutTraceDW("SetWindowLong: hwnd=%x, Index=%x(%s) Val=%x\n", hwnd, nIndex, ExplainSetWindowIndex(nIndex), dwNewLong); if (dxw.Windowize){ if(dxw.dwFlags1 & LOCKWINSTYLE){ if(nIndex==GWL_STYLE){ OutTraceDW("SetWindowLong: Lock GWL_STYLE=%x\n", dwNewLong); return (*pGetWindowLong)(hwnd, nIndex); } if(nIndex==GWL_EXSTYLE){ OutTraceDW("SetWindowLong: Lock GWL_EXSTYLE=%x\n", dwNewLong); return (*pGetWindowLong)(hwnd, nIndex); } } if (dxw.dwFlags1 & PREVENTMAXIMIZE){ if(nIndex==GWL_STYLE){ dwNewLong &= ~WS_MAXIMIZE; if(dxw.IsDesktop(hwnd)){ OutTraceDW("SetWindowLong: GWL_STYLE %x suppress MAXIMIZE\n", dwNewLong); dwNewLong |= WS_OVERLAPPEDWINDOW; dwNewLong &= ~(WS_DLGFRAME|WS_MAXIMIZE|WS_VSCROLL|WS_HSCROLL|WS_CLIPSIBLINGS); } } // v2.02.32: disable topmost for main window only if(dxw.IsDesktop(hwnd) && (nIndex==GWL_EXSTYLE)){ if(dxw.dwFlags5 & UNLOCKZORDER) { OutTraceDW("SetWindowLong: GWL_EXSTYLE %x suppress TOPMOST\n", dwNewLong); dwNewLong = dwNewLong & ~(WS_EX_TOPMOST); } } } if (dxw.dwFlags1 & FIXWINFRAME){ //if((nIndex==GWL_STYLE) && !(dwNewLong & WS_CHILD)){ if((nIndex==GWL_STYLE) && !(dwNewLong & WS_CHILD) && dxw.IsDesktop(hwnd)){ OutTraceDW("SetWindowLong: GWL_STYLE %x force OVERLAPPEDWINDOW\n", dwNewLong); dwNewLong |= WS_OVERLAPPEDWINDOW; dwNewLong &= ~WS_CLIPSIBLINGS; } } if (dxw.dwFlags1 & FIXTHINFRAME){ //if((nIndex==GWL_STYLE) && !(dwNewLong & WS_CHILD)){ if((nIndex==GWL_STYLE) && !(dwNewLong & WS_CHILD) && dxw.IsDesktop(hwnd)){ OutTraceDW("SetWindowLong: GWL_STYLE %x force OVERLAPPEDWINDOW\n", dwNewLong); dwNewLong |= WS_OVERLAPPEDTHIN; dwNewLong &= ~WS_CLIPSIBLINGS; } } } // v2.03.94.fx2: removed dxw.IsFullScreen() check here ... WinProc routine must be verified in all conditions // fixes "Nascar Racing 3" that was setting the WinProc while still in non fullscreen mode! if ((nIndex==GWL_WNDPROC)||(nIndex==DWL_DLGPROC)) { LONG lres; WNDPROC OldProc; DWORD WinStyle; BOOL bHooked = FALSE; // fix .... extern LRESULT CALLBACK dw_Hider_Message_Handler(HWND, UINT, WPARAM, LPARAM); if(dwNewLong==(LONG)dw_Hider_Message_Handler) { return (*pSetWindowLong)(hwnd, nIndex, (LONG)dw_Hider_Message_Handler); } // GPL fix // v2.03.94.fx2: moved dxw.IsFullScreen() check here ... if(dxw.IsRealDesktop(hwnd) && dxw.Windowize && dxw.IsFullScreen()) { hwnd=dxw.GethWnd(); OutTraceDW("SetWindowLong: DESKTOP hwnd, FIXING hwnd=%x\n",hwnd); } // end of GPL fix OldProc = (WNDPROC)(*pGetWindowLong)(hwnd, nIndex); WinStyle = (*pGetWindowLong)(hwnd, GWL_STYLE); while(TRUE){ // fake loop lres = -1; // initialize with not 0 value since 0 means error if(!(dxw.dwFlags6 & NOWINDOWHOOKS)){ // hook extWindowProc to main win .... if(dxw.IsDesktop(hwnd)){ if(OldProc==extWindowProc) OldProc=dxwws.GetProc(hwnd); dxwws.PutProc(hwnd, (WNDPROC)dwNewLong); res=(LONG)OldProc; SetLastError(0); lres=(*pSetWindowLong)(hwnd, nIndex, (LONG)extWindowProc); OutTraceDW("SetWindowLong: DESKTOP hooked %x->%x\n", dwNewLong, extWindowProc); break; } // hook extDlgWindowProc to dialog win .... if((WinStyle & DWL_DLGPROC) && (dxw.dwFlags8 & HOOKDLGWIN)){ if(OldProc==extDialogWindowProc) OldProc=dxwws.GetProc(hwnd); dxwws.PutProc(hwnd, (WNDPROC)dwNewLong); res=(LONG)OldProc; SetLastError(0); lres=(*pSetWindowLong)(hwnd, nIndex, (LONG)extDialogWindowProc); OutTraceDW("SetWindowLong: DIALOG hooked %x->%x\n", dwNewLong, extDialogWindowProc); break; } // hook extChildWindowProc to child win .... if((WinStyle & WS_CHILD) && (dxw.dwFlags1 & HOOKCHILDWIN)){ if(OldProc==extChildWindowProc) OldProc=dxwws.GetProc(hwnd); dxwws.PutProc(hwnd, (WNDPROC)dwNewLong); res=(LONG)OldProc; SetLastError(0); lres=(*pSetWindowLong)(hwnd, nIndex, (LONG)extChildWindowProc); OutTraceDW("SetWindowLong: CHILD hooked %x->%x\n", dwNewLong, extChildWindowProc); break; } } // hook dwNewLong if not done otherwise res = (*pSetWindowLong)(hwnd, nIndex, dwNewLong); break; } if(!lres && GetLastError()) OutTraceE("SetWindowLong: ERROR err=%d at %d\n", GetLastError(), __LINE__); } else{ // through here for any message different from GWL_WNDPROC or DWL_DLGPROC res=(*pSetWindowLong)(hwnd, nIndex, dwNewLong); } OutTraceDW("SetWindowLong: hwnd=%x, nIndex=%x, Val=%x, res=%x\n", hwnd, nIndex, dwNewLong, res); return res; } LONG WINAPI extSetWindowLongA(HWND hwnd, int nIndex, LONG dwNewLong) { return extSetWindowLong(hwnd, nIndex, dwNewLong, pSetWindowLongA, pGetWindowLongA); } LONG WINAPI extSetWindowLongW(HWND hwnd, int nIndex, LONG dwNewLong) { return extSetWindowLong(hwnd, nIndex, dwNewLong, pSetWindowLongW, pGetWindowLongW); } BOOL WINAPI extSetWindowPos(HWND hwnd, HWND hWndInsertAfter, int X, int Y, int cx, int cy, UINT uFlags) { BOOL res; OutTraceDW("SetWindowPos: hwnd=%x%s pos=(%d,%d) dim=(%d,%d) Flags=%x\n", hwnd, dxw.IsFullScreen()?"(FULLSCREEN)":"", X, Y, cx, cy, uFlags); // when not in fullscreen mode, just proxy the call if (!dxw.IsFullScreen()){ res=(*pSetWindowPos)(hwnd, hWndInsertAfter, X, Y, cx, cy, uFlags); if(!res)OutTraceE("SetWindowPos: ERROR err=%d at %d\n", GetLastError(), __LINE__); return res; } // in fullscreen, but a child window inside ..... if (!dxw.IsDesktop(hwnd) && !InMainWinCreation){ RECT r; r.left = X; r.right = X + cx; r.top = Y; r.bottom = Y + cy; if ((*pGetWindowLong)(hwnd, GWL_STYLE) & WS_CHILD){ r = dxw.MapClientRect(&r); } else { //r = dxw.MapWindowRect(&r); } X = r.left; Y = r.top; cx = r.right - r.left; cy = r.bottom - r.top; res=(*pSetWindowPos)(hwnd, hWndInsertAfter, X, Y, cx, cy, uFlags); if(!res)OutTraceE("SetWindowPos: ERROR err=%d at %d\n", GetLastError(), __LINE__); return res; } if (dxw.dwFlags1 & LOCKWINPOS){ // Note: any attempt to change the window position, no matter where and how, through the // SetWindowPos API is causing resizing to the default 1:1 pixed size in Commandos. // in such cases, there is incompatibility between LOCKWINPOS and LOCKWINSTYLE. OutTraceDW("SetWindowPos: locked position\n"); return 1; } if (dxw.dwFlags1 & PREVENTMAXIMIZE){ int UpdFlag =0; int MaxX, MaxY; // v2.03.96: in PREVENTMAXIMIZE mode don't exceed the initial size MaxX = dxw.iSiz0X; MaxY = dxw.iSiz0Y; if (!MaxX) MaxX = dxw.GetScreenWidth(); if (!MaxY) MaxY = dxw.GetScreenHeight(); if(cx>MaxX) { cx=MaxX; UpdFlag=1; } if(cy>MaxY) { cy=MaxY; UpdFlag=1; } if (UpdFlag) OutTraceDW("SetWindowPos: using max dim=(%d,%d)\n", cx, cy); } // useful??? to be demonstrated.... // when altering main window in fullscreen mode, fix the coordinates for borders DWORD dwCurStyle, dwExStyle; HMENU hMenu; RECT rect; rect.top=rect.left=0; rect.right=cx; rect.bottom=cy; dwCurStyle=(*pGetWindowLong)(hwnd, GWL_STYLE); dwExStyle=(*pGetWindowLong)(hwnd, GWL_EXSTYLE); // BEWARE: from MSDN - If the window is a child window, the return value is undefined. hMenu = (dwCurStyle & WS_CHILD) ? NULL : GetMenu(hwnd); (*pAdjustWindowRectEx)(&rect, dwCurStyle, (hMenu!=NULL), dwExStyle); if (hMenu && (hMenu != (HMENU)-1)) __try {CloseHandle(hMenu);} __except(EXCEPTION_EXECUTE_HANDLER){}; cx=rect.right; cy=rect.bottom; OutTraceDW("SetWindowPos: main form hwnd=%x fixed size=(%d,%d)\n", hwnd, cx, cy); res=(*pSetWindowPos)(hwnd, hWndInsertAfter, X, Y, cx, cy, uFlags); if(!res)OutTraceE("SetWindowPos: ERROR err=%d at %d\n", GetLastError(), __LINE__); if(dxw.bAutoScale) dxw.AutoScale(); return res; } HDWP WINAPI extDeferWindowPos(HDWP hWinPosInfo, HWND hwnd, HWND hWndInsertAfter, int X, int Y, int cx, int cy, UINT uFlags) { // v2.02.31: heavily used by "Imperialism II" !!! HDWP res; OutTraceDW("DeferWindowPos: hwnd=%x%s pos=(%d,%d) dim=(%d,%d) Flags=%x\n", hwnd, dxw.IsFullScreen()?"(FULLSCREEN)":"", X, Y, cx, cy, uFlags); if(dxw.IsFullScreen()){ dxw.MapClient(&X, &Y, &cx, &cy); OutTraceDW("DeferWindowPos: remapped pos=(%d,%d) dim=(%d,%d)\n", X, Y, cx, cy); } res=(*pGDIDeferWindowPos)(hWinPosInfo, hwnd, hWndInsertAfter, X, Y, cx, cy, uFlags); if(!res)OutTraceE("DeferWindowPos: ERROR err=%d at %d\n", GetLastError(), __LINE__); if(dxw.bAutoScale) dxw.AutoScale(); return res; } LRESULT WINAPI extSendMessage(char *apiname, SendMessage_Type pSendMessage, HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam) { LRESULT ret; OutTraceW("%s: hwnd=%x WinMsg=[0x%x]%s(%x,%x)\n", apiname, hwnd, Msg, ExplainWinMessage(Msg), wParam, lParam); if(dxw.dwFlags1 & MODIFYMOUSE){ switch (Msg){ case WM_MOUSEMOVE: case WM_MOUSEWHEEL: case WM_LBUTTONDOWN: case WM_LBUTTONUP: case WM_LBUTTONDBLCLK: case WM_RBUTTONDOWN: case WM_RBUTTONUP: case WM_RBUTTONDBLCLK: case WM_MBUTTONDOWN: case WM_MBUTTONUP: case WM_MBUTTONDBLCLK: // revert here the WindowProc mouse correction POINT prev, curr; RECT rect; prev.x = LOWORD(lParam); prev.y = HIWORD(lParam); (*pGetClientRect)(dxw.GethWnd(), &rect); curr.x = (prev.x * rect.right) / dxw.GetScreenWidth(); curr.y = (prev.y * rect.bottom) / dxw.GetScreenHeight(); if (Msg == WM_MOUSEWHEEL){ // v2.02.33 mousewheel fix POINT upleft={0,0}; (*pClientToScreen)(dxw.GethWnd(), &upleft); curr = dxw.AddCoordinates(curr, upleft); } lParam = MAKELPARAM(curr.x, curr.y); OutTraceC("%s: hwnd=%x pos XY=(%d,%d)->(%d,%d)\n", apiname, hwnd, prev.x, prev.y, curr.x, curr.y); break; case WM_FONTCHANGE: // suppress WM_FONTCHANGE avoids "Warhammer: Shadow of the Horned Rat" crash when entering battle return 0; break; default: break; } } ret=(*pSendMessage)(hwnd, Msg, wParam, lParam); OutTraceW("%s: lresult=%x\n", apiname, ret); return ret; } LRESULT WINAPI extSendMessageA(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam) { return extSendMessage("SendMessageA", pSendMessageA, hwnd, Msg, wParam, lParam); } LRESULT WINAPI extSendMessageW(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam) { return extSendMessage("SendMessageW", pSendMessageW, hwnd, Msg, wParam, lParam); } HCURSOR WINAPI extSetCursor(HCURSOR hCursor) { HCURSOR ret; ret=(*pSetCursor)(hCursor); OutTraceB("GDI.SetCursor: Cursor=%x, ret=%x\n", hCursor, ret); return ret; } BOOL WINAPI extGetCursorPos(LPPOINT lppoint) { HRESULT res; static int PrevX, PrevY; POINT prev; if(dxw.dwFlags1 & SLOWDOWN) dxw.DoSlow(2); if (pGetCursorPos) { res=(*pGetCursorPos)(lppoint); } else { lppoint->x =0; lppoint->y=0; res=1; } if(dxw.dwFlags1 & MODIFYMOUSE){ dxw.UpdateDesktopCoordinates(); prev=*lppoint; *lppoint=dxw.ScreenToClient(*lppoint); //OutTraceC("GetCursorPos: REMAPPED pos=(%d,%d)->(%d,%d)\n", prev.x, prev.y, lppoint->x, lppoint->y); *lppoint=dxw.FixCursorPos(*lppoint); OutTraceC("GetCursorPos: FIXED pos=(%d,%d)->(%d,%d)\n", prev.x, prev.y, lppoint->x, lppoint->y); } else { OutTraceC("GetCursorPos: pos=(%d,%d)\n", lppoint->x, lppoint->y); } GetHookInfo()->CursorX=(short)lppoint->x; GetHookInfo()->CursorY=(short)lppoint->y; if((dxw.dwFlags1 & HIDEHWCURSOR) && dxw.IsFullScreen()) while((*pShowCursor)(0) >= 0); if(dxw.dwFlags2 & SHOWHWCURSOR) while((*pShowCursor)(1) < 0); return res; } BOOL WINAPI extSetCursorPos(int x, int y) { BOOL res; int PrevX, PrevY; PrevX=x; PrevY=y; if(dxw.dwFlags2 & KEEPCURSORFIXED) { OutTraceC("SetCursorPos: FIXED pos=(%d,%d)\n", x, y); LastCurPosX=x; LastCurPosY=y; return 1; } if(dxw.dwFlags1 & SLOWDOWN) dxw.DoSlow(2); if(dxw.dwFlags1 & KEEPCURSORWITHIN){ // Intercept SetCursorPos outside screen boundaries (used as Cursor OFF in some games) if ((y<0)||(y>=(int)dxw.GetScreenHeight())||(x<0)||(x>=(int)dxw.GetScreenWidth())) return 1; } if(dxw.dwFlags1 & MODIFYMOUSE){ // v2.03.41 POINT cur; dxw.UpdateDesktopCoordinates(); cur.x = x; cur.y = y; dxw.MapWindow(&cur); x = cur.x; y = cur.y; } res=0; if (pSetCursorPos) res=(*pSetCursorPos)(x,y); OutTraceC("SetCursorPos: res=%x XY=(%d,%d)->(%d,%d)\n", res, PrevX, PrevY, x, y); return res; } static BOOL WINAPI extPeekMessage(PeekMessage_Type pPeekMessage, LPMSG lpMsg, HWND hwnd, UINT wMsgFilterMin, UINT wMsgFilterMax, UINT wRemoveMsg) { BOOL res; char *sLabel; if(dxw.dwFlags3 & PEEKALLMESSAGES){ sLabel="(ANY) "; if((wMsgFilterMin==0) && (wMsgFilterMax == 0)){ // no filtering, everything is good res=(*pPeekMessage)(lpMsg, hwnd, wMsgFilterMin, wMsgFilterMax, (wRemoveMsg & 0x000F)); } else { MSG Dummy; // better eliminate all messages before and after the selected range !!!! //if(wMsgFilterMin)(*pPeekMessage)(&Dummy, hwnd, 0, wMsgFilterMin-1, TRUE); if(wMsgFilterMin>0x0F)(*pPeekMessage)(&Dummy, hwnd, 0x0F, wMsgFilterMin-1, TRUE); res=(*pPeekMessage)(lpMsg, hwnd, wMsgFilterMin, wMsgFilterMax, (wRemoveMsg & 0x000F)); if(wMsgFilterMaxhwnd, wMsgFilterMin, wMsgFilterMax, wRemoveMsg, ExplainPeekRemoveMsg(wRemoveMsg), lpMsg->message, ExplainWinMessage(lpMsg->message & 0xFFFF), lpMsg->wParam, lpMsg->lParam, lpMsg->pt.x, lpMsg->pt.y, res); else OutTraceW("PeekMessage: %slpmsg=%x hwnd=%x filter=(%x-%x) remove=%x(%s) res=%x\n", sLabel, lpMsg, lpMsg->hwnd, wMsgFilterMin, wMsgFilterMax, wRemoveMsg, ExplainPeekRemoveMsg(wRemoveMsg), res); if((dxw.dwFlags1 & MODIFYMOUSE) && dxw.GethWnd()){ POINT point; //res=(*pGetCursorPos)(&point); // can't do this. Why? point = lpMsg->pt; point=dxw.ScreenToClient(point); point=dxw.FixCursorPos(point); OutTraceC("GetCursorPos: FIXED pos=(%d,%d)->(%d,%d)\n", lpMsg->pt.x, lpMsg->pt.y, point.x, point.y); lpMsg->pt = point; } // to do? syncronize with extWindowProc code .... //if(dxw.dwFlags2 & FORCEWINRESIZE){ // extern BOOL IsWindowMovingMessage(int); // if(IsWindowMovingMessage(lpMsg->message)){ // (*pGetMessageA)(lpMsg, hwnd, lpMsg->message, lpMsg->message); // TranslateMessage(lpMsg); // DispatchMessage(lpMsg); // return 0; // } //} if(dxw.dwFlags1 & SLOWDOWN) dxw.DoSlow(1); return res; } BOOL WINAPI extPeekMessageA(LPMSG lpMsg, HWND hwnd, UINT wMsgFilterMin, UINT wMsgFilterMax, UINT wRemoveMsg) { return extPeekMessage(pPeekMessageA, lpMsg, hwnd, wMsgFilterMin, wMsgFilterMax, wRemoveMsg); } BOOL WINAPI extPeekMessageW(LPMSG lpMsg, HWND hwnd, UINT wMsgFilterMin, UINT wMsgFilterMax, UINT wRemoveMsg) { return extPeekMessage(pPeekMessageW, lpMsg, hwnd, wMsgFilterMin, wMsgFilterMax, wRemoveMsg); } static BOOL WINAPI extGetMessage(GetMessage_Type pGetMessage, LPMSG lpMsg, HWND hwnd, UINT wMsgFilterMin, UINT wMsgFilterMax) { BOOL res; res=(*pGetMessage)(lpMsg, hwnd, wMsgFilterMin, wMsgFilterMax); OutTraceW("GetMessage: lpmsg=%x hwnd=%x filter=(%x-%x) msg=%x(%s) wparam=%x, lparam=%x pt=(%d,%d) res=%x\n", lpMsg, lpMsg->hwnd, wMsgFilterMin, wMsgFilterMax, lpMsg->message, ExplainWinMessage(lpMsg->message & 0xFFFF), lpMsg->wParam, lpMsg->lParam, lpMsg->pt.x, lpMsg->pt.y, res); if(dxw.dwFlags1 & MODIFYMOUSE){ extGetCursorPos(&(lpMsg->pt)); } return res; } BOOL WINAPI extGetMessageA(LPMSG lpMsg, HWND hwnd, UINT wMsgFilterMin, UINT wMsgFilterMax) { return extGetMessage(pGetMessageA, lpMsg, hwnd, wMsgFilterMin, wMsgFilterMax); } BOOL WINAPI extGetMessageW(LPMSG lpMsg, HWND hwnd, UINT wMsgFilterMin, UINT wMsgFilterMax) { return extGetMessage(pGetMessageW, lpMsg, hwnd, wMsgFilterMin, wMsgFilterMax); } BOOL WINAPI extPostMessage(PostMessage_Type pPostMessage, HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) { BOOL res; res = (*pPostMessage)(hWnd, Msg, wParam, lParam); OutTraceW("PostMessage: hwnd=%x msg=%x(%s) wparam=%x, lparam=%x res=%x\n", hWnd, Msg, ExplainWinMessage(Msg), wParam, lParam, res); return res; } BOOL WINAPI extPostMessageA(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam) { return extPostMessage(pPostMessageA, hwnd, Msg, wParam, lParam); } BOOL WINAPI extPostMessageW(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam) { return extPostMessage(pPostMessageW, hwnd, Msg, wParam, lParam); } BOOL WINAPI extClientToScreen(HWND hwnd, LPPOINT lppoint) { // v2.02.10: fully revised to handle scaled windows BOOL res; OutTraceB("ClientToScreen: hwnd=%x hWnd=%x FullScreen=%x point=(%d,%d)\n", hwnd, dxw.GethWnd(), dxw.IsFullScreen(), lppoint->x, lppoint->y); if (lppoint && dxw.IsFullScreen()){ // optimization: in fullscreen mode, coordinate conversion for the desktop window // should always keep the same values inaltered if(hwnd != dxw.GethWnd()){ *lppoint = dxw.AddCoordinates(*lppoint, dxw.ClientOffset(hwnd)); } OutTraceB("ClientToScreen: FIXED point=(%d,%d)\n", lppoint->x, lppoint->y); res=TRUE; } else { res=(*pClientToScreen)(hwnd, lppoint); } return res; } BOOL WINAPI extScreenToClient(HWND hwnd, LPPOINT lppoint) { // v2.02.10: fully revised to handle scaled windows BOOL res; OutTraceB("ScreenToClient: hwnd=%x hWnd=%x FullScreen=%x point=(%d,%d)\n", hwnd, dxw.GethWnd(), dxw.IsFullScreen(), lppoint->x, lppoint->y); if (lppoint && (lppoint->x == -32000) && (lppoint->y == -32000)) return 1; if (lppoint && dxw.IsFullScreen()){ // optimization: in fullscreen mode, coordinate conversion for the desktop window // should always keep the same values inaltered if(hwnd != dxw.GethWnd()){ *lppoint = dxw.SubCoordinates(*lppoint, dxw.ClientOffset(hwnd)); OutTraceB("ScreenToClient: FIXED point=(%d,%d)\n", lppoint->x, lppoint->y); } res=TRUE; } else { res=(*pScreenToClient)(hwnd, lppoint); } OutTraceB("ScreenToClient: returned point=(%d,%d)\n", lppoint->x, lppoint->y); return res; } BOOL WINAPI extGetClientRect(HWND hwnd, LPRECT lpRect) { BOOL ret; OutTraceB("GetClientRect: whnd=%x FullScreen=%x\n", hwnd, dxw.IsFullScreen()); if(!lpRect) return 0; // proxed call ret=(*pGetClientRect)(hwnd, lpRect); if(!ret) { OutTraceE("GetClientRect: ERROR hwnd=%x err=%d at %d\n", hwnd, GetLastError(), __LINE__); return ret; } OutTraceB("GetClientRect: actual rect=(%d,%d)-(%d,%d)\n", lpRect->left, lpRect->top, lpRect->right, lpRect->bottom); if (dxw.IsDesktop(hwnd)){ *lpRect = dxw.GetScreenRect(); OutTraceB("GetClientRect: desktop rect=(%d,%d)-(%d,%d)\n", lpRect->left, lpRect->top, lpRect->right, lpRect->bottom); } else if (dxw.IsFullScreen()){ int w, h; if(FIXCHILDSIZE){ if(dxwws.GetSize(hwnd, &w, &h)){ lpRect->top=lpRect->left=0; lpRect->right=w; lpRect->bottom=h; OutTraceB("GetClientRect: fixed rect=(%d,%d)-(%d,%d)\n", lpRect->left, lpRect->top, lpRect->right, lpRect->bottom); return TRUE; } } *lpRect=dxw.GetClientRect(*lpRect); OutTraceB("GetClientRect: fixed rect=(%d,%d)-(%d,%d)\n", lpRect->left, lpRect->top, lpRect->right, lpRect->bottom); } return ret; } BOOL WINAPI extGetWindowRect(HWND hwnd, LPRECT lpRect) { BOOL ret; OutTraceB("GetWindowRect: hwnd=%x hWnd=%x FullScreen=%x\n", hwnd, dxw.GethWnd(), dxw.IsFullScreen()); if(dxw.IsRealDesktop(hwnd)) { // v2.03.52, v2.03.61: fix for "Storm Angel" and "Geneforge" : // replace the real desktop with the virtual one only if that doesn't cause troubles. HWND hwnd_try = dxw.GethWnd(); if ((*pGetWindowRect)(hwnd, lpRect)) hwnd = hwnd_try; } ret=(*pGetWindowRect)(hwnd, lpRect); if(!ret) { OutTraceE("GetWindowRect: GetWindowRect hwnd=%x error %d at %d\n", hwnd, GetLastError(), __LINE__); return ret; } OutTraceB("GetWindowRect: rect=(%d,%d)-(%d,%d)\n", lpRect->left, lpRect->top, lpRect->right, lpRect->bottom); // minimized windows behaviour if((lpRect->left == -32000)||(lpRect->top == -32000)) return ret; if (dxw.IsDesktop(hwnd)){ // to avoid keeping track of window frame *lpRect = dxw.GetScreenRect(); OutTraceB("GetWindowRect: desktop rect=(%d,%d)-(%d,%d)\n", lpRect->left, lpRect->top, lpRect->right, lpRect->bottom); } else if (dxw.IsFullScreen()){ *lpRect=dxw.GetWindowRect(*lpRect); // Diablo fix: it retrieves coordinates for the explorer window, that are as big as the real desktop!!! if(lpRect->left < 0) lpRect->left=0; // if(lpRect->left > (LONG)dxw.GetScreenWidth()) lpRect->left=dxw.GetScreenWidth(); // if(lpRect->right < 0) lpRect->right=0; if(lpRect->right > (LONG)dxw.GetScreenWidth()) lpRect->right=dxw.GetScreenWidth(); if(lpRect->top < 0) lpRect->top=0; // if(lpRect->top > (LONG)dxw.GetScreenHeight()) lpRect->top=dxw.GetScreenHeight(); // if(lpRect->bottom < 0) lpRect->bottom=0; if(lpRect->bottom > (LONG)dxw.GetScreenHeight()) lpRect->bottom=dxw.GetScreenHeight(); OutTraceB("GetWindowRect: fixed rect=(%d,%d)-(%d,%d)\n", lpRect->left, lpRect->top, lpRect->right, lpRect->bottom); } return ret; } int WINAPI extMapWindowPoints(HWND hWndFrom, HWND hWndTo, LPPOINT lpPoints, UINT cPoints) { UINT pi; int ret; // a rarely used API, but responsible for a painful headache: needs hooking for "Commandos 2", "Alien Nations". // used also in "Full Pipe" activemovie // used also in "NBA Live 99" menu screen OutTraceDW("MapWindowPoints: hWndFrom=%x%s hWndTo=%x%s cPoints=%d FullScreen=%x\n", hWndFrom, dxw.IsDesktop(hWndFrom)?"(DESKTOP)":"", hWndTo, dxw.IsDesktop(hWndTo)?"(DESKTOP)":"", cPoints, dxw.IsFullScreen()); if(IsDebug){ OutTrace("Points: "); for(pi=0; pi>16, ret&0x0000FFFF); return ret; } HWND WINAPI extGetDesktopWindow(void) { HWND res; if((!dxw.Windowize) || (dxw.dwFlags5 & DIABLOTWEAK)) { HWND ret; ret = (*pGetDesktopWindow)(); OutTraceDW("GetDesktopWindow: BYPASS ret=%x\n", ret); return ret; } OutTraceDW("GetDesktopWindow: FullScreen=%x\n", dxw.IsFullScreen()); // v2.04.01.fx4: do not return the main window if we still don't have one (dxw.GethWnd() == NULL) if (dxw.IsFullScreen() && dxw.GethWnd()){ OutTraceDW("GetDesktopWindow: returning main window hwnd=%x\n", dxw.GethWnd()); return dxw.GethWnd(); } else{ res=(*pGetDesktopWindow)(); OutTraceDW("GetDesktopWindow: returning desktop window hwnd=%x\n", res); return res; } } int WINAPI extGetSystemMetrics(int nindex) { HRESULT res; res=(*pGetSystemMetrics)(nindex); OutTraceDW("GetSystemMetrics: index=%x(%s), res=%d\n", nindex, ExplainsSystemMetrics(nindex), res); if(!dxw.Windowize){ // v2.02.95: if not in window mode, just implement the HIDEMULTIMONITOR flag if( (nindex ==SM_CMONITORS) && (dxw.dwFlags2 & HIDEMULTIMONITOR) && res>1) { res=1; OutTraceDW("GetSystemMetrics: fix SM_CMONITORS=%d\n", res); } return res; } switch(nindex){ case SM_CXFULLSCREEN: case SM_CXSCREEN: case SM_CXVIRTUALSCREEN: // v2.02.31 res= dxw.GetScreenWidth(); OutTraceDW("GetSystemMetrics: fix SM_CXSCREEN=%d\n", res); break; case SM_CYFULLSCREEN: case SM_CYSCREEN: case SM_CYVIRTUALSCREEN: // v2.02.31 res= dxw.GetScreenHeight(); OutTraceDW("GetSystemMetrics: fix SM_CYSCREEN=%d\n", res); break; case SM_CMONITORS: if((dxw.dwFlags2 & HIDEMULTIMONITOR) && res>1) { res=1; OutTraceDW("GetSystemMetrics: fix SM_CMONITORS=%d\n", res); } break; } return res; } ATOM WINAPI extRegisterClassExA(WNDCLASSEXA *lpwcx) { ATOM ret; OutTraceDW("RegisterClassExA: PROXED ClassName=\"%s\" style=%x(%s) WndProc=%x cbClsExtra=%d cbWndExtra=%d hInstance=%x\n", lpwcx->lpszClassName, lpwcx->style, ExplainStyle(lpwcx->style), lpwcx->lpfnWndProc, lpwcx->cbClsExtra, lpwcx->cbWndExtra, lpwcx->hInstance); ret = (*pRegisterClassExA)(lpwcx); OutTraceDW("RegisterClassExA: atom=%x\n", ret); return ret; } ATOM WINAPI extRegisterClassA(WNDCLASSA *lpwcx) { ATOM ret; // referenced by Syberia, together with RegisterClassExA OutTraceDW("RegisterClassA: PROXED ClassName=\"%s\" style=%x(%s) WndProc=%x cbClsExtra=%d cbWndExtra=%d hInstance=%x\n", lpwcx->lpszClassName, lpwcx->style, ExplainStyle(lpwcx->style), lpwcx->lpfnWndProc, lpwcx->cbClsExtra, lpwcx->cbWndExtra, lpwcx->hInstance); ret = (*pRegisterClassA)(lpwcx); OutTraceDW("RegisterClassA: atom=%x\n", ret); return ret; } ATOM WINAPI extRegisterClassExW(WNDCLASSEXW *lpwcx) { ATOM ret; OutTraceDW("RegisterClassExW: PROXED ClassName=\"%ls\" style=%x(%s) WndProc=%x cbClsExtra=%d cbWndExtra=%d hInstance=%x\n", lpwcx->lpszClassName, lpwcx->style, ExplainStyle(lpwcx->style), lpwcx->lpfnWndProc, lpwcx->cbClsExtra, lpwcx->cbWndExtra, lpwcx->hInstance); ret = (*pRegisterClassExW)(lpwcx); OutTraceDW("RegisterClassExW: atom=%x\n", ret); return ret; } ATOM WINAPI extRegisterClassW(WNDCLASSW *lpwcx) { ATOM ret; OutTraceDW("RegisterClassW: PROXED ClassName=\"%ls\" style=%x(%s) WndProc=%x cbClsExtra=%d cbWndExtra=%d hInstance=%x\n", lpwcx->lpszClassName, lpwcx->style, ExplainStyle(lpwcx->style), lpwcx->lpfnWndProc, lpwcx->cbClsExtra, lpwcx->cbWndExtra, lpwcx->hInstance); ret = (*pRegisterClassW)(lpwcx); OutTraceDW("RegisterClassW: atom=%x\n", ret); return ret; } static void HookChildWndProc(HWND hwnd, DWORD dwStyle, LPCTSTR ApiName) { // child window inherit the father's windproc, so if it's redirected to // a hooker (either extWindowProc or extChildWindowProc) you have to retrieve // the correct value (dxwws.GetProc) before saving it (dxwws.PutProc). long res; WNDPROC pWindowProc; if(dxw.dwFlags6 & NOWINDOWHOOKS) return; pWindowProc = (WNDPROC)(*pGetWindowLong)(hwnd, GWL_WNDPROC); extern LRESULT CALLBACK dw_Hider_Message_Handler(HWND, UINT, WPARAM, LPARAM); if(pWindowProc==dw_Hider_Message_Handler) return; if((pWindowProc == extWindowProc) || (pWindowProc == extChildWindowProc) || (pWindowProc == extDialogWindowProc)){ // avoid recursions HWND Father; WNDPROC pFatherProc; Father=(*pGetParent)(hwnd); pFatherProc=dxwws.GetProc(Father); OutTraceDW("%s: WndProc=%s father=%x WndProc=%x\n", ApiName, (pWindowProc == extWindowProc) ? "extWindowProc" : ((pWindowProc == extChildWindowProc) ? "extChildWindowProc" : "extDialogWindowProc"), Father, pFatherProc); pWindowProc = pFatherProc; } dxwws.PutProc(hwnd, pWindowProc); if(dwStyle & WS_CHILD){ OutTraceDW("%s: Hooking CHILD hwnd=%x father WindowProc %x->%x\n", ApiName, hwnd, pWindowProc, extChildWindowProc); res=(*pSetWindowLong)(hwnd, GWL_WNDPROC, (LONG)extChildWindowProc); } else { // must be dwStyle & WS_DLGFRAME OutTraceDW("%s: Hooking DLGFRAME hwnd=%x father WindowProc %x->%x\n", ApiName, hwnd, pWindowProc, extDialogWindowProc); res=(*pSetWindowLong)(hwnd, GWL_WNDPROC, (LONG)extDialogWindowProc); } if(!res) OutTraceE("%s: SetWindowLong ERROR %x\n", ApiName, GetLastError()); } HWND hControlParentWnd = NULL; // see https://msdn.microsoft.com/en-us/library/windows/desktop/ms632679%28v=vs.85%29.aspx static BOOL IsFullscreenWindow( void *lpClassName, DWORD dwStyle, DWORD dwExStyle, HWND hWndParent, int x, int y, int nWidth, int nHeight) { if (dwExStyle & WS_EX_CONTROLPARENT) return FALSE; // "Diablo" fix if ((dwStyle & WS_CHILD) && (!dxw.IsDesktop(hWndParent))) return FALSE; // Diablo fix // if maximized. if(dwStyle & WS_MAXIMIZE) return TRUE; // go through here only when WS_CHILD of desktop window if((x == CW_USEDEFAULT) && (dwStyle & (WS_POPUP|WS_CHILD))) x = y = 0; if(nWidth == CW_USEDEFAULT){ if (dwStyle & (WS_POPUP|WS_CHILD)) nWidth = nHeight = 0; else nWidth = dxw.GetScreenWidth() - x; } // msdn undocumented case: x,y=(-1000, CW_USEDEFAULT) w,h=(CW_USEDEFAULT,CW_USEDEFAULT) in "Imperialism" if(nHeight == CW_USEDEFAULT){ y = 0; nHeight = dxw.GetScreenHeight(); } // if bigger than screen ... if((x<=0)&& (y<=0)&& (nWidth>=(int)dxw.GetScreenWidth())&& (nHeight>=(int)dxw.GetScreenHeight())) return TRUE; return FALSE; } static HWND hLastFullScrWin = 0; static DDPIXELFORMAT ddpLastPixelFormat; #define SAFEWINDOWCREATION TRUE typedef HWND (WINAPI *CreateWindow_Type)(DWORD, LPVOID, LPVOID, DWORD, int, int, int, int, HWND, HMENU, HINSTANCE, LPVOID); static HWND WINAPI CreateWindowCommon( LPCTSTR ApiName, CreateWindow_Type pCreateWindow, DWORD dwExStyle, void *lpClassName, void *lpWindowName, DWORD dwStyle, int x, int y, int nWidth, int nHeight, HWND hWndParent, HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam) { HWND hwnd; BOOL isValidHandle=TRUE; BOOL isNewDesktop; int iOrigW, iOrigH; extern void GetMonitorWorkarea(int, LPRECT, BOOL); int origx, origy, origw, origh; DWORD origstyle, origexstyle; origx = x; origy = y; origw = nWidth; origh = nHeight; origstyle = dwStyle; origexstyle = dwExStyle; iOrigW=nWidth; iOrigH=nHeight; if(!dxw.Windowize || (hWndParent == HWND_MESSAGE)){ // v2.02.87: don't process message windows (hWndParent == HWND_MESSAGE) hwnd= (*pCreateWindow)(dwExStyle, lpClassName, lpWindowName, dwStyle, x, y, nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam); if ((dxw.dwFlags1 & HOOKCHILDWIN) && (dwStyle & (WS_CHILD|WS_DLGFRAME))) HookChildWndProc(hwnd, dwStyle, ApiName); OutTraceDW("%s: ret=%x\n", ApiName, hwnd); return hwnd; } // no maximized windows in any case if (dxw.dwFlags1 & PREVENTMAXIMIZE){ OutTraceDW("%s: handling PREVENTMAXIMIZE mode\n", ApiName); dwStyle &= ~WS_MAXIMIZE; } // v2.1.92: fixes size & position for auxiliary big window, often used // for intro movies etc. : needed for ...... // evidently, this was supposed to be a fullscreen window.... // v2.1.100: fixes for "The Grinch": this game creates a new main window for OpenGL // rendering using CW_USEDEFAULT placement and 800x600 size while the previous // main win was 640x480 only! // v2.02.13: if it's a WS_CHILD window, don't reposition the x,y, placement for BIG win. // v2.02.30: fix (Fable - lost chapters) Fable creates a bigger win with negative x,y coordinates. // v2.03.53: revised code, logic moved to IsFullscreenWindow if(isNewDesktop=IsFullscreenWindow(lpClassName, dwStyle, dwExStyle, hWndParent, x, y, nWidth, nHeight)){ OutTraceB("%s: ASSERT IsFullscreenWindow==TRUE\n", ApiName); // if already in fullscreen mode, save previous settings if(dxw.IsFullScreen() && dxw.GethWnd()){ hLastFullScrWin = dxw.GethWnd(); ddpLastPixelFormat = dxw.VirtualPixelFormat; } // update virtual screen size if it has grown // v2.03.58 fix: don't consider CW_USEDEFAULT as a big unsigned integer!! Fixes "Imperialism". if((nWidth != CW_USEDEFAULT) && (nHeight != CW_USEDEFAULT)) dxw.SetScreenSize(nWidth, nHeight); // inserted some checks here, since the main window could be destroyed // or minimized (see "Jedi Outcast") so that you may get a dangerous // zero size. In this case, better renew the hWnd assignement and its coordinates. isValidHandle = dxw.IsValidMainWindow(); if (!(dwStyle & WS_CHILD) || (dxw.IsRealDesktop(hWndParent))){ x=dxw.iPosX; y=dxw.iPosY; } nWidth=dxw.iSizX; nHeight=dxw.iSizY; OutTraceDW("%s: fixed client pos=(%d,%d) size=(%d,%d) valid=%x\n", ApiName, x, y, nWidth, nHeight, isValidHandle); dxw.SetFullScreen(TRUE); } if(dxw.dwFlags5 & UNLOCKZORDER) dwExStyle &= ~WS_EX_TOPMOST ; if(!dxw.IsFullScreen()){ // v2.1.63: needed for "Monster Truck Madness" hwnd= (*pCreateWindow)(dwExStyle, lpClassName, lpWindowName, dwStyle, x, y, nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam); OutTraceDW("%s: windowed mode ret=%x\n", ApiName, hwnd); return hwnd; } // from here on, fullscreen is garanteed if(!isNewDesktop){ if ((dwStyle & WS_CHILD) && !dxw.IsRealDesktop(hWndParent)){ // tested on Gangsters: coordinates must be window-relative!!! // Age of Empires.... dxw.MapClient(&x, &y, &nWidth, &nHeight); OutTraceDW("%s: fixed WS_CHILD pos=(%d,%d) size=(%d,%d)\n", ApiName, x, y, nWidth, nHeight); } else { // needed for "Diablo", that creates a new WS_EX_CONTROLPARENT window that must be // overlapped to the directdraw surface. // needed for "Riven", that creates a new WS_POPUP window with the menu bar that must be // overlapped to the directdraw surface. dxw.MapWindow(&x, &y, &nWidth, &nHeight); OutTraceDW("%s: fixed ABSOLUTE pos=(%d,%d) size=(%d,%d)\n", ApiName, x, y, nWidth, nHeight); } } OutTraceB("%s: fixed pos=(%d,%d) size=(%d,%d) Style=%x(%s) ExStyle=%x(%s)\n", ApiName, x, y, nWidth, nHeight, dwStyle, ExplainStyle(dwStyle), dwExStyle, ExplainExStyle(dwExStyle)); // v2.04.02: InMainWinCreation semaphore, signals to the CreateWin callback that the window to be created will be a main window, // so rules about LOCKWINPOS etc. must be applied. Fixes "Civil War 2 Generals" main window displacement. // v2.04.05: the semaphore must be a counter, since within the CreateWin callback there could be other CreateWin calls. // happens in "Warhammer: Shadow of the Horned Rat" ! InMainWinCreation++; #if 1 // SAFEWINDOWCREATION mode: fixes problems of "Warhammer shadow of the Horned rat", but also allows "Diablo" to run in fake fullscreen high-res mode. // this way, any creation callback routine invoked within the window creation will receive only the original call parameters, while the new scaled // values and adjusted styles will be applied only after the creation. hwnd= (*pCreateWindow)(origexstyle, lpClassName, lpWindowName, origstyle, origx, origy, origw, origh, hWndParent, hMenu, hInstance, lpParam); if (hwnd) { (*pSetWindowLong)(hwnd, GWL_STYLE, dwStyle); (*pSetWindowLong)(hwnd, GWL_EXSTYLE, dwExStyle); (*pMoveWindow)(hwnd, x, y, nWidth, nHeight, FALSE); } #endif #if 0 hwnd= (*pCreateWindow)(dwExStyle, lpClassName, lpWindowName, dwStyle, origx, origy, origw, origh, hWndParent, hMenu, hInstance, lpParam); if (hwnd)(*pMoveWindow)(hwnd, x, y, nWidth, nHeight, FALSE); #endif #if 0 hwnd= (*pCreateWindow)(dwExStyle, lpClassName, lpWindowName, dwStyle, x, y, nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam); #endif InMainWinCreation--; if (hwnd==(HWND)NULL){ OutTraceE("%s: ERROR err=%d Style=%x(%s) ExStyle=%x\n", ApiName, GetLastError(), dwStyle, ExplainStyle(dwStyle), dwExStyle); return hwnd; } if (dwExStyle & WS_EX_CONTROLPARENT) hControlParentWnd=hwnd; // replace the invalid main win with the new one if ((!isValidHandle) && dxw.IsFullScreen()){ dxw.SethWnd(hwnd); extern void AdjustWindowPos(HWND, DWORD, DWORD); (*pSetWindowLong)(hwnd, GWL_STYLE, dxw.FixWinStyle(dwStyle)); (*pSetWindowLong)(hwnd, GWL_EXSTYLE, dxw.FixWinExStyle(dwExStyle)); OutTraceDW("%s: hwnd=%x, set style\n", ApiName, hwnd); AdjustWindowPos(hwnd, nWidth, nHeight); (*pShowWindow)(hwnd, SW_SHOWNORMAL); } //if (isNewDesktop) dxw.SethWnd(hwnd); if ((dxw.dwFlags1 & FIXWINFRAME) && !(dwStyle & WS_CHILD) && dxw.IsDesktop(hwnd)) dxw.FixWindowFrame(hwnd); if ((dxw.dwFlags1 & HOOKCHILDWIN) && (dwStyle & (WS_CHILD|WS_DLGFRAME))) HookChildWndProc(hwnd, dwStyle, ApiName); if ((FIXCHILDSIZE) && (dwStyle & (WS_CHILD|WS_DLGFRAME))) dxwws.PutSize(hwnd, iOrigW, iOrigH); // "Hoyle Casino Empire" needs to be in a maximized state to continue after the intro movie. // Sending a SW_MAXIMIZE message intercepted by the PREVENTMAXIMIZE handling fixes the problem. //if (dxw.IsFullScreen() && (dxw.dwFlags1 & PREVENTMAXIMIZE)){ if ((hwnd == dxw.GethWnd()) && dxw.IsFullScreen() && (dxw.dwFlags1 & PREVENTMAXIMIZE)){ OutTraceDW("%s: entering maximized state\n", ApiName); dxw.IsVisible = TRUE; (*pShowWindow)(hwnd, SW_MAXIMIZE); } if(dxw.dwFlags1 & CLIPCURSOR) dxw.SetClipCursor(); if(dxw.dwFlags4 & HIDEDESKTOP) dxw.HideDesktop(hwnd); OutTraceDW("%s: ret=%x\n", ApiName, hwnd); return hwnd; } static LPCSTR ClassToStr(LPCSTR Class) { static char AtomBuf[20+1]; if(((DWORD)Class & 0xFFFF0000) == 0){ sprintf(AtomBuf, "ATOM(%X)", (DWORD)Class); return AtomBuf; } return Class; } static LPCWSTR ClassToWStr(LPCWSTR Class) { static WCHAR AtomBuf[20+1]; if(((DWORD)Class & 0xFFFF0000) == 0){ swprintf(AtomBuf, L"ATOM(%X)", (DWORD)Class); return AtomBuf; } return Class; } // to do: implement and use ClassToWStr() for widechar call HWND WINAPI extCreateWindowExW( DWORD dwExStyle, LPCWSTR lpClassName, LPCWSTR lpWindowName, DWORD dwStyle, int x, int y, int nWidth, int nHeight, HWND hWndParent, HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam) { if(IsTraceDW){ char xString[20], yString[20], wString[20], hString[20]; if (x==CW_USEDEFAULT) strcpy(xString,"CW_USEDEFAULT"); else sprintf(xString,"%d", x); if (y==CW_USEDEFAULT) strcpy(yString,"CW_USEDEFAULT"); else sprintf(yString,"%d", y); if (nWidth==CW_USEDEFAULT) strcpy(wString,"CW_USEDEFAULT"); else sprintf(wString,"%d", nWidth); if (nHeight==CW_USEDEFAULT) strcpy(hString,"CW_USEDEFAULT"); else sprintf(hString,"%d", nHeight); OutTrace("CreateWindowExW: class=\"%ls\" wname=\"%ls\" pos=(%s,%s) size=(%s,%s) Style=%x(%s) ExStyle=%x(%s) hWndParent=%x%s hMenu=%x depth=%d\n", ClassToWStr(lpClassName), lpWindowName, xString, yString, wString, hString, dwStyle, ExplainStyle(dwStyle), dwExStyle, ExplainExStyle(dwExStyle), hWndParent, hWndParent==HWND_MESSAGE?"(HWND_MESSAGE)":"", hMenu, InMainWinCreation); } OutTraceB("CreateWindowExW: DEBUG fullscreen=%x mainwin=%x screen=(%d,%d)\n", dxw.IsFullScreen(), dxw.GethWnd(), dxw.GetScreenWidth(), dxw.GetScreenHeight()); if((dxw.dwFlags6 & STRETCHMOVIES) && !wcscmp(lpWindowName, L"ActiveMovie Window")){ RECT MainWin; (*pGetClientRect)(dxw.GethWnd(), &MainWin); nWidth = MainWin.right; nHeight = MainWin.bottom; } return CreateWindowCommon("CreateWindowExW", (CreateWindow_Type)pCreateWindowExW, dwExStyle, (void *)lpClassName, (void *)lpWindowName, dwStyle, x, y, nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam); } // GHO: pro Diablo HWND WINAPI extCreateWindowExA( DWORD dwExStyle, LPCTSTR lpClassName, LPCTSTR lpWindowName, DWORD dwStyle, int x, int y, int nWidth, int nHeight, HWND hWndParent, HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam) { if(IsTraceDW){ char xString[20], yString[20], wString[20], hString[20]; if (x==CW_USEDEFAULT) strcpy(xString,"CW_USEDEFAULT"); else sprintf(xString,"%d", x); if (y==CW_USEDEFAULT) strcpy(yString,"CW_USEDEFAULT"); else sprintf(yString,"%d", y); if (nWidth==CW_USEDEFAULT) strcpy(wString,"CW_USEDEFAULT"); else sprintf(wString,"%d", nWidth); if (nHeight==CW_USEDEFAULT) strcpy(hString,"CW_USEDEFAULT"); else sprintf(hString,"%d", nHeight); OutTrace("CreateWindowExA: class=\"%s\" wname=\"%s\" pos=(%s,%s) size=(%s,%s) Style=%x(%s) ExStyle=%x(%s) hWndParent=%x%s hMenu=%x depth=%d\n", ClassToStr(lpClassName), lpWindowName, xString, yString, wString, hString, dwStyle, ExplainStyle(dwStyle), dwExStyle, ExplainExStyle(dwExStyle), hWndParent, hWndParent==HWND_MESSAGE?"(HWND_MESSAGE)":"", hMenu, InMainWinCreation); } OutTraceB("CreateWindowExA: DEBUG fullscreen=%x mainwin=%x screen=(%d,%d)\n", dxw.IsFullScreen(), dxw.GethWnd(), dxw.GetScreenWidth(), dxw.GetScreenHeight()); if((dxw.dwFlags6 & STRETCHMOVIES) && !strcmp(lpWindowName, "ActiveMovie Window")){ RECT MainWin; (*pGetClientRect)(dxw.GethWnd(), &MainWin); nWidth = MainWin.right; nHeight = MainWin.bottom; } return CreateWindowCommon("CreateWindowExA", (CreateWindow_Type)pCreateWindowExA, dwExStyle, (void *)lpClassName, (void *)lpWindowName, dwStyle, x, y, nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam); } extern void ExplainMsg(char *, HWND, UINT, WPARAM, LPARAM); LRESULT WINAPI extCallWindowProcA(WNDPROC lpPrevWndFunc, HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam) { // v2.02.30: fix (Imperialism II): apply to main window only !!! HRESULT res; if(IsTraceW) ExplainMsg("CallWindowProcA", hwnd, Msg, wParam, lParam); res = -1; if(hwnd == dxw.GethWnd()) res=FixWindowProc("CallWindowProcA", hwnd, Msg, wParam, &lParam); if((dxw.dwFlags1 & FIXTEXTOUT) && (Msg == WM_SETFONT)){ wParam = (WPARAM)fontdb.GetScaledFont((HFONT)wParam); OutTraceDW("CallWindowProcA: replaced scaled font hfnt=%x\n", wParam); } if (res==(HRESULT)-1) return (*pCallWindowProcA)(lpPrevWndFunc, hwnd, Msg, wParam, lParam); else return res; } LRESULT WINAPI extCallWindowProcW(WNDPROC lpPrevWndFunc, HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam) { // v2.02.30: fix (Imperialism II): apply to main window only !!! HRESULT res; if(IsTraceW) ExplainMsg("CallWindowProcW", hwnd, Msg, wParam, lParam); res = -1; if(hwnd == dxw.GethWnd()) res=FixWindowProc("CallWindowProcW", hwnd, Msg, wParam, &lParam); if((dxw.dwFlags1 & FIXTEXTOUT) && (Msg == WM_SETFONT)){ wParam = (WPARAM)fontdb.GetScaledFont((HFONT)wParam); OutTraceDW("CallWindowProcA: replaced scaled font hfnt=%x\n", wParam); } if (res==(HRESULT)-1) return (*pCallWindowProcW)(lpPrevWndFunc, hwnd, Msg, wParam, lParam); else return res; } static LRESULT WINAPI DefWindowProcCommon(char *Label, DefWindowProc_Type pDefWindowProc, HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam) { // v2.02.30: fix (Imperialism II): apply to main window only !!! // v2.03.50: fix - do clip cursor only after the window has got focus // v2.04.14: fix - erase clip cursor when window loses focus !!! HRESULT res; res = (HRESULT)-1; if(IsTraceW) ExplainMsg(Label, hwnd, Msg, wParam, lParam); if(hwnd == dxw.GethWnd()) res=FixWindowProc(Label, hwnd, Msg, wParam, &lParam); if (res==(HRESULT)-1) res = (*pDefWindowProc)(hwnd, Msg, wParam, lParam); if(dxw.dwFlags1 & CLIPCURSOR){ switch(Msg){ case WM_SETFOCUS: dxw.SetClipCursor(); break; case WM_KILLFOCUS: dxw.EraseClipCursor(); break; // v2.04.14: forgotten case .... } } return res; } LRESULT WINAPI extDefWindowProcW(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam) { return DefWindowProcCommon("DefWindowProcW", pDefWindowProcW, hwnd, Msg, wParam, lParam); } LRESULT WINAPI extDefWindowProcA(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam) { return DefWindowProcCommon("DefWindowProcA", pDefWindowProcA, hwnd, Msg, wParam, lParam); } static int HandleRect(char *ApiName, void *pFun, HDC hdc, const RECT *lprc, HBRUSH hbr) { // used for both FillRect and FrameRect calls int res; RECT rc; OutTraceDW("%s: hdc=%x hbrush=%x rect=(%d,%d)-(%d,%d)\n", ApiName, hdc, hbr, lprc->left, lprc->top, lprc->right, lprc->bottom); if(dxw.dwFlags4 & NOFILLRECT) { OutTraceDW("%s: SUPPRESS\n", ApiName, hdc, hbr, lprc->left, lprc->top, lprc->right, lprc->bottom); return TRUE; } memcpy(&rc, lprc, sizeof(rc)); // Be careful: when you call CreateCompatibleDC with NULL DC, it is created a memory DC // with same characteristics as desktop. That would return true from the call to // dxw.IsRealDesktop(WindowFromDC(hdc)) because WindowFromDC(hdc) is null. // So, it's fundamental to check also the hdc type (OBJ_DC is a window's DC) if((dxw.IsRealDesktop(WindowFromDC(hdc)) && (OBJ_DC == (*pGetObjectType)(hdc)))) { HWND VirtualDesktop; VirtualDesktop=dxw.GethWnd(); if(VirtualDesktop==NULL){ OutTraceDW("%s: no virtual desktop\n", ApiName); return TRUE; } OutTraceDW("%s: remapped hdc to virtual desktop hwnd=%x\n", ApiName, dxw.GethWnd()); hdc=(*pGDIGetDC)(dxw.GethWnd()); } if(dxw.IsToRemap(hdc)) { if(rc.left < 0) rc.left = 0; if(rc.top < 0) rc.top = 0; if((DWORD)rc.right > dxw.GetScreenWidth()) rc.right = dxw.GetScreenWidth(); if((DWORD)rc.bottom > dxw.GetScreenHeight()) rc.bottom = dxw.GetScreenHeight(); switch(dxw.GDIEmulationMode){ case GDIMODE_SHAREDDC: sdc.GetPrimaryDC(hdc); res=(*(FillRect_Type)pFun)(sdc.GetHdc(), &rc, hbr); sdc.PutPrimaryDC(hdc, TRUE, rc.left, rc.top, rc.right-rc.left, rc.bottom-rc.top); return res; break; case GDIMODE_STRETCHED: dxw.MapClient(&rc); OutTraceDW("%s: fixed rect=(%d,%d)-(%d,%d)\n", ApiName, rc.left, rc.top, rc.right, rc.bottom); break; default: break; } } else { // when not in fullscreen mode, just proxy the call // but check coordinates: some games may use excessive coordinates: see "Premier Manager 98" RECT client; HWND hwnd; hwnd=WindowFromDC(hdc); // v2.03.76 fix: sometimes WindowFromDC returns NULL with unpredictable results // if NULL, try to bount within the main window rect if(!hwnd) hwnd=dxw.GethWnd(); // if still NULL, avoid doing changes if(hwnd){ (*pGetClientRect)(hwnd, &client); if(rc.left < client.left) rc.left=client.left; if(rc.top < client.top) rc.top=client.top; if(rc.right > client.right) rc.right=client.right; if(rc.bottom > client.bottom) rc.bottom=client.bottom; OutTraceDW("%s: remapped hdc from hwnd=%x to rect=(%d,%d)-(%d,%d)\n", ApiName, hwnd, rc.left, rc.top, rc.right, rc.bottom); } } res=(*(FillRect_Type)pFun)(hdc, &rc, hbr); return res; } int WINAPI extFillRect(HDC hdc, const RECT *lprc, HBRUSH hbr) { return HandleRect("FillRect", (void *)pFillRect, hdc, lprc, hbr); } int WINAPI extFrameRect(HDC hdc, const RECT *lprc, HBRUSH hbr) { return HandleRect("FrameRect", (void *)pFrameRect, hdc, lprc, hbr); } BOOL WINAPI extInvertRect(HDC hdc, const RECT *lprc) { int res; RECT rc; OutTraceDW("InvertRect: hdc=%x rect=(%d,%d)-(%d,%d)\n", hdc, lprc->left, lprc->top, lprc->right, lprc->bottom); memcpy(&rc, lprc, sizeof(rc)); if(dxw.IsToRemap(hdc)) { switch(dxw.GDIEmulationMode){ case GDIMODE_SHAREDDC: sdc.GetPrimaryDC(hdc); res=(*pInvertRect)(sdc.GetHdc(), &rc); sdc.PutPrimaryDC(hdc, TRUE, rc.left, rc.top, rc.right-rc.left, rc.bottom-rc.top); return res; break; case GDIMODE_STRETCHED: dxw.MapClient(&rc); OutTraceDW("InvertRect: fixed rect=(%d,%d)-(%d,%d)\n", rc.left, rc.top, rc.right, rc.bottom); break; default: break; } } res=(*pInvertRect)(hdc, &rc); return res; } int WINAPI extValidateRect(HWND hwnd, const RECT *lprc) { // v2.03.91: manages the possibility of a NULL lprc value int res; RECT rc; if(IsTraceDW){ if (lprc) OutTrace("ValidateRect: hwnd=%x rect=(%d,%d)-(%d,%d)\n", hwnd, lprc->left, lprc->top, lprc->right, lprc->bottom); else OutTrace("ValidateRect: hwnd=%x rect=(NULL)\n", hwnd); } if(lprc){ // avoid changing the pointed RECT structure!! memcpy(&rc, lprc, sizeof(rc)); lprc = &rc; } if(dxw.IsFullScreen()) { if(dxw.IsRealDesktop(hwnd)) hwnd=dxw.GethWnd(); if(lprc) dxw.MapClient((LPRECT)lprc); if (lprc) { OutTraceDW("ValidateRect: fixed rect=(%d,%d)-(%d,%d)\n", lprc->left, lprc->top, lprc->right, lprc->bottom); } } res=(*pValidateRect)(hwnd, lprc); return res; } BOOL WINAPI extClipCursor(RECT *lpRectArg) { // reference: hooking and setting ClipCursor is mandatori in "Emergency: Fighters for Life" // where the application expects the cursor to be moved just in a inner rect within the // main window surface. BOOL res; RECT *lpRect; RECT Rect; if(IsTraceC){ if (lpRectArg) OutTrace("ClipCursor: rect=(%d,%d)-(%d,%d)\n", lpRectArg->left,lpRectArg->top,lpRectArg->right,lpRectArg->bottom); else OutTrace("ClipCursor: rect=(NULL)\n"); } if (!(dxw.dwFlags1 & DISABLECLIPPING)) return TRUE; if ((dxw.dwFlags8 & CLIPLOCKED) && (lpRectArg == NULL)) return TRUE; if(lpRectArg){ Rect=*lpRectArg; lpRect=&Rect; } else lpRect=NULL; if(dxw.dwFlags1 & CLIENTREMAPPING){ //v2.03.61 // save desired clip region // v2.02.39: fix - do not attempt to write to NULL lpRect if (lpRect) { ClipRegion=*lpRectArg; lpClipRegion=&ClipRegion; *lpRect=dxw.MapWindowRect(lpRect); } else lpClipRegion=NULL; } if (pClipCursor) res=(*pClipCursor)(lpRect); if (lpRect) OutTraceDW("ClipCursor: REMAPPED rect=(%d,%d)-(%d,%d) res=%x\n", lpRect->left,lpRect->top,lpRect->right,lpRect->bottom, res); return TRUE; } BOOL WINAPI extGetClipCursor(LPRECT lpRect) { // v2.1.93: if DISABLECLIPPING, return the saved clip rect coordinates BOOL ret; // proxy.... if (!(dxw.dwFlags1 & DISABLECLIPPING)) { ret=(*pGetClipCursor)(lpRect); // v2.03.11: fix for "SubCulture" mouse movement if(lpRect && dxw.Windowize) *lpRect = dxw.GetScreenRect(); if(IsTraceDDRAW){ if (lpRect) OutTrace("GetClipCursor: rect=(%d,%d)-(%d,%d) ret=%d\n", lpRect->left,lpRect->top,lpRect->right,lpRect->bottom, ret); else OutTrace("GetClipCursor: rect=(NULL) ret=%d\n", ret); } return ret; } if(lpRect){ if(lpClipRegion) *lpRect=ClipRegion; else *lpRect=dxw.GetScreenRect(); OutTraceDW("GetClipCursor: rect=(%d,%d)-(%d,%d) ret=%d\n", lpRect->left,lpRect->top,lpRect->right,lpRect->bottom, TRUE); } return TRUE; } LONG WINAPI extEnumDisplaySettings(LPCTSTR lpszDeviceName, DWORD iModeNum, DEVMODE *lpDevMode) { LONG res; OSVERSIONINFO osinfo; osinfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); (*pGetVersionExA)(&osinfo); OutTraceDW("EnumDisplaySettings: Devicename=%s ModeNum=%x OS=%d.%d\n", lpszDeviceName, iModeNum, osinfo.dwMajorVersion, osinfo.dwMinorVersion); if(dxw.dwFlags4 & NATIVERES){ // lists video card native resolutions, though faking emulated color resolutions if((osinfo.dwMajorVersion >= 6) && (dxw.dwFlags1 & EMULATESURFACE)){ switch(iModeNum){ case ENUM_CURRENT_SETTINGS: case ENUM_REGISTRY_SETTINGS: // lie ... res=(*pEnumDisplaySettings)(lpszDeviceName, iModeNum, lpDevMode); if(dxw.dwFlags2 & INIT8BPP) lpDevMode->dmBitsPerPel = 8; if(dxw.dwFlags2 & INIT16BPP) lpDevMode->dmBitsPerPel = 16; if(dxw.dwFlags3 & FORCE16BPP) lpDevMode->dmBitsPerPel = 16; break; default: res=(*pEnumDisplaySettings)(lpszDeviceName, iModeNum / SUPPORTED_DEPTHS_NUMBER, lpDevMode); lpDevMode->dmBitsPerPel = (DWORD)SupportedDepths[iModeNum % SUPPORTED_DEPTHS_NUMBER]; break; } } else res=(*pEnumDisplaySettings)(lpszDeviceName, iModeNum, lpDevMode); } else { // simulated modes: VGA or HDTV //int SupportedDepths[5]={8,16,24,32,0}; SupportedRes_Type *SupportedRes; SupportedRes = (dxw.dwFlags4 & SUPPORTHDTV) ? &SupportedHDTVRes[0] : &SupportedSVGARes[0]; res=(*pEnumDisplaySettings)(lpszDeviceName, ENUM_CURRENT_SETTINGS, lpDevMode); switch(iModeNum){ case ENUM_CURRENT_SETTINGS: case ENUM_REGISTRY_SETTINGS: // lie ... lpDevMode->dmPelsHeight = 600; lpDevMode->dmPelsWidth = 800; if(dxw.dwFlags2 & INIT8BPP) lpDevMode->dmBitsPerPel = 8; if(dxw.dwFlags2 & INIT16BPP) lpDevMode->dmBitsPerPel = 16; if(dxw.dwFlags3 & FORCE16BPP) lpDevMode->dmBitsPerPel = 16; break; default: lpDevMode->dmPelsHeight = SupportedRes[iModeNum / 4].h; lpDevMode->dmPelsWidth = SupportedRes[iModeNum / 4].w; lpDevMode->dmBitsPerPel = SupportedDepths[iModeNum % 4]; if(lpDevMode->dmPelsHeight == 0) res = 0; // end of list break; } } if(dxw.dwFlags4 & LIMITSCREENRES){ #define HUGE 100000 DWORD maxw, maxh; maxw = maxh = HUGE; switch(dxw.MaxScreenRes){ case DXW_NO_LIMIT: maxw=HUGE; maxh=HUGE; break; case DXW_LIMIT_320x200: maxw=320; maxh=200; break; case DXW_LIMIT_640x480: maxw=640; maxh=480; break; case DXW_LIMIT_800x600: maxw=800; maxh=600; break; case DXW_LIMIT_1024x768: maxw=1024; maxh=768; break; case DXW_LIMIT_1280x960: maxw=1280; maxh=960; break; } if((lpDevMode->dmPelsWidth > maxw) || (lpDevMode->dmPelsHeight > maxh)){ OutTraceDW("EnumDisplaySettings: limit device size=(%d,%d)\n", maxw, maxh); lpDevMode->dmPelsWidth = maxw; lpDevMode->dmPelsHeight = maxh; } } if(dxw.dwFlags7 & MAXIMUMRES){ if((lpDevMode->dmPelsWidth > (DWORD)dxw.iMaxW) || (lpDevMode->dmPelsHeight > (DWORD)dxw.iMaxH)){ OutTraceDW("EnumDisplaySettings: limit device size=(%d,%d)\n", dxw.iMaxW, dxw.iMaxH); lpDevMode->dmPelsWidth = dxw.iMaxW; lpDevMode->dmPelsHeight = dxw.iMaxH; } } OutTraceDW("EnumDisplaySettings: color=%dBPP size=(%dx%d) refresh=%dHz\n", lpDevMode->dmBitsPerPel, lpDevMode->dmPelsWidth, lpDevMode->dmPelsHeight, lpDevMode->dmDisplayFrequency); return res; } LONG WINAPI extChangeDisplaySettingsA(DEVMODEA *lpDevMode, DWORD dwflags) { if(IsTraceDDRAW){ char sInfo[1024]; strcpy(sInfo, ""); // v2.04.04: dmDeviceName not printed since it could be not initialized (Warhammer SOTHR) if (lpDevMode) sprintf(sInfo, " fields=%x(%s) size=(%d x %d) bpp=%d", lpDevMode->dmFields, ExplainDevModeFields(lpDevMode->dmFields), lpDevMode->dmPelsWidth, lpDevMode->dmPelsHeight, lpDevMode->dmBitsPerPel); OutTrace("ChangeDisplaySettingsA: lpDevMode=%x flags=%x(%s)%s\n", lpDevMode, dwflags, ExplainChangeDisplaySettingsFlags(dwflags), sInfo); } if(dxw.Windowize) return MyChangeDisplaySettings("ChangeDisplaySettingsA", FALSE, lpDevMode, dwflags); else return (*pChangeDisplaySettingsExA)(NULL, lpDevMode, NULL, dwflags, NULL); } LONG WINAPI extChangeDisplaySettingsW(DEVMODEW *lpDevMode, DWORD dwflags) { if(IsTraceDDRAW){ char sInfo[1024]; strcpy(sInfo, ""); // v2.04.04: dmDeviceName not printed since it could be not initialized (Warhammer SOTHR) if (lpDevMode) sprintf(sInfo, "fields=%x(%s) size=(%d x %d) bpp=%d", lpDevMode->dmFields, ExplainDevModeFields(lpDevMode->dmFields), lpDevMode->dmPelsWidth, lpDevMode->dmPelsHeight, lpDevMode->dmBitsPerPel); OutTrace("ChangeDisplaySettingsW: lpDevMode=%x flags=%x(%s)%s\n", lpDevMode, dwflags, ExplainChangeDisplaySettingsFlags(dwflags), sInfo); } if(dxw.Windowize) return MyChangeDisplaySettings("ChangeDisplaySettingsW", TRUE, lpDevMode, dwflags); else return (*pChangeDisplaySettingsW)(lpDevMode, dwflags); } LONG WINAPI extChangeDisplaySettingsExA(LPCTSTR lpszDeviceName, DEVMODEA *lpDevMode, HWND hwnd, DWORD dwflags, LPVOID lParam) { if(IsTraceDDRAW){ char sInfo[1024]; strcpy(sInfo, ""); if (lpDevMode) sprintf(sInfo, " DeviceName=%s fields=%x(%s) size=(%d x %d) bpp=%d", lpDevMode->dmDeviceName, lpDevMode->dmFields, ExplainDevModeFields(lpDevMode->dmFields), lpDevMode->dmPelsWidth, lpDevMode->dmPelsHeight, lpDevMode->dmBitsPerPel); OutTrace("ChangeDisplaySettingsExA: DeviceName=%s lpDevMode=%x flags=%x(%s)%s\n", lpszDeviceName, lpDevMode, dwflags, ExplainChangeDisplaySettingsFlags(dwflags), sInfo); } if(dxw.Windowize) return MyChangeDisplaySettings("ChangeDisplaySettingsExA", FALSE, lpDevMode, dwflags); else return (*pChangeDisplaySettingsExA)(lpszDeviceName, lpDevMode, hwnd, dwflags, lParam); } LONG WINAPI extChangeDisplaySettingsExW(LPCTSTR lpszDeviceName, DEVMODEW *lpDevMode, HWND hwnd, DWORD dwflags, LPVOID lParam) { if(IsTraceDDRAW){ char sInfo[1024]; strcpy(sInfo, ""); if (lpDevMode) sprintf(sInfo, " DeviceName=%ls fields=%x(%s) size=(%d x %d) bpp=%d", lpDevMode->dmDeviceName, lpDevMode->dmFields, ExplainDevModeFields(lpDevMode->dmFields), lpDevMode->dmPelsWidth, lpDevMode->dmPelsHeight, lpDevMode->dmBitsPerPel); OutTrace("ChangeDisplaySettingsExW: DeviceName=%ls lpDevMode=%x flags=%x(%s)%s\n", lpszDeviceName, lpDevMode, dwflags, ExplainChangeDisplaySettingsFlags(dwflags), sInfo); } if(dxw.Windowize) return MyChangeDisplaySettings("ChangeDisplaySettingsExW", TRUE, lpDevMode, dwflags); else return (*pChangeDisplaySettingsExW)(lpszDeviceName, lpDevMode, hwnd, dwflags, lParam); } static HDC WINAPI sGetDC(HWND hwnd, char *ApiName) { // to do: add parameter and reference to pGDIGetDCEx to merge properly GetDC and GetDCEx HDC ret; HWND lochwnd; if(!dxw.IsFullScreen()) return(*pGDIGetDC)(hwnd); lochwnd=hwnd; if (dxw.IsRealDesktop(hwnd)) { OutTraceDW("%s: desktop remapping hwnd=%x->%x\n", ApiName, hwnd, dxw.GethWnd()); lochwnd=dxw.GethWnd(); } switch(dxw.GDIEmulationMode){ case GDIMODE_EMULATED: ret=dxw.AcquireEmulatedDC(lochwnd); break; case GDIMODE_SHAREDDC: case GDIMODE_STRETCHED: default: ret=(*pGDIGetDC)(lochwnd); break; } if(ret){ OutTraceDW("%s: hwnd=%x ret=%x\n", ApiName, lochwnd, ret); } else{ int err; err=GetLastError(); OutTraceE("%s ERROR: hwnd=%x err=%d at %d\n", ApiName, lochwnd, err, __LINE__); if((err==ERROR_INVALID_WINDOW_HANDLE) && (lochwnd!=hwnd)){ ret=(*pGDIGetDC)(hwnd); if(ret) OutTraceDW("%s: hwnd=%x ret=%x\n", ApiName, hwnd, ret); else OutTraceE("%s ERROR: hwnd=%x err=%d at %d\n", ApiName, hwnd, GetLastError(), __LINE__); } } return ret; } HDC WINAPI extGDIGetDC(HWND hwnd) { OutTraceDW("GDI.GetDC: hwnd=%x\n", hwnd); return sGetDC(hwnd, "GDI.GetDC"); } HDC WINAPI extGDIGetDCEx(HWND hwnd, HRGN hrgnClip, DWORD flags) { // used by Star Wars Shadow of the Empire OutTraceDW("GDI.GetDCEx: hwnd=%x hrgnClip=%x flags=%x(%s)\n", hwnd, hrgnClip, flags, ExplainGetDCExFlags(flags)); return sGetDC(hwnd, "GDI.GetDCEx"); } HDC WINAPI extGDIGetWindowDC(HWND hwnd) { OutTraceDW("GDI.GetWindowDC: hwnd=%x\n", hwnd); // if not fullscreen or not desktop win, just proxy the call if(!dxw.IsFullScreen() || !dxw.IsDesktop(hwnd)){ HDC ret; ret=(*pGDIGetWindowDC)(hwnd); OutTraceDW("GDI.GetWindowDC: hwnd=%x hdc=%x\n", hwnd, ret); return ret; } return sGetDC(hwnd, "GDI.GetWindowDC"); } int WINAPI extGDIReleaseDC(HWND hwnd, HDC hDC) { int res; OutTraceDW("GDI.ReleaseDC: hwnd=%x hdc=%x\n", hwnd, hDC); if (dxw.IsRealDesktop(hwnd)) hwnd=dxw.GethWnd(); if(hwnd == 0) return(TRUE); switch(dxw.GDIEmulationMode){ case GDIMODE_EMULATED: res=dxw.ReleaseEmulatedDC(hwnd); break; case GDIMODE_SHAREDDC: case GDIMODE_STRETCHED: default: res=(*pGDIReleaseDC)(hwnd, hDC); break; } if (!res) OutTraceE("GDI.ReleaseDC ERROR: err=%d at %d\n", GetLastError(), __LINE__); return(res); } HDC WINAPI extBeginPaint(HWND hwnd, LPPAINTSTRUCT lpPaint) { HDC hdc; OutTraceDW("GDI.BeginPaint: hwnd=%x lpPaint=%x FullScreen=%x\n", hwnd, lpPaint, dxw.IsFullScreen()); // avoid access to real desktop if(dxw.IsRealDesktop(hwnd)) hwnd=dxw.GethWnd(); hdc=(*pBeginPaint)(hwnd, lpPaint); // if not in fullscreen mode, that's all! if(!dxw.IsFullScreen()) return hdc; switch(dxw.GDIEmulationMode){ case GDIMODE_STRETCHED: if(dxw.dwFlags1 & CLIENTREMAPPING) dxw.UnmapClient(&(RECT)(lpPaint->rcPaint)); break; case GDIMODE_EMULATED: HDC EmuHDC; EmuHDC = dxw.AcquireEmulatedDC(hwnd); if(!DeleteObject(lpPaint->hdc)) OutTraceE("BeginPaint: DeleteObject ERROR hdc=%x err=%d at %d\n", lpPaint->hdc, GetLastError(), __LINE__); lpPaint->hdc=EmuHDC; hdc = EmuHDC; break; case GDIMODE_SHAREDDC: #if 0 sdc.GetPrimaryDC(hdc); lpPaint->hdc = sdc.GetHdc(); (*pBeginPaint)(hwnd, lpPaint); lpPaint->hdc = hdc; sdc.PutPrimaryDC(hdc, FALSE); #endif break; default: break; } OutTraceDW("GDI.BeginPaint: hdc=%x rcPaint=(%d,%d)-(%d,%d)\n", hdc, lpPaint->rcPaint.left, lpPaint->rcPaint.top, lpPaint->rcPaint.right, lpPaint->rcPaint.bottom); return hdc; } BOOL WINAPI extEndPaint(HWND hwnd, const PAINTSTRUCT *lpPaint) { BOOL ret; OutTraceDW("GDI.EndPaint: hwnd=%x lpPaint=%x lpPaint.hdc=%x lpPaint.rcpaint=(%d,%d)-(%d,%d)\n", hwnd, lpPaint, lpPaint->hdc, lpPaint->rcPaint.left, lpPaint->rcPaint.top, lpPaint->rcPaint.right, lpPaint->rcPaint.bottom); // if not fullscreen or not desktop win, just proxy the call if(!dxw.IsFullScreen()){ ret=(*pEndPaint)(hwnd, lpPaint); return ret; } // avoid access to real desktop if(dxw.IsRealDesktop(hwnd)) hwnd=dxw.GethWnd(); dxw.HandleFPS(); // handle refresh delays switch(dxw.GDIEmulationMode){ case GDIMODE_EMULATED: ret=dxw.ReleaseEmulatedDC(hwnd); break; case GDIMODE_SHAREDDC: #if 1 if(lpPaint) dxw.MapClient((LPRECT)&(lpPaint->rcPaint)); ret=(*pEndPaint)(hwnd, lpPaint); #else PAINTSTRUCT Paint; Paint = *lpPaint; Paint.hdc = sdc.GetHdc(); (*pEndPaint)(hwnd, &Paint); if(lpPaint) dxw.MapClient((LPRECT)&(lpPaint->rcPaint)); ret=(*pEndPaint)(hwnd, lpPaint); #endif break; default: ret=(*pEndPaint)(hwnd, lpPaint); break; } if(ret){ OutTraceDW("GDI.EndPaint: hwnd=%x ret=%x\n", hwnd, ret); } else{ OutTraceE("GDI.EndPaint ERROR: err=%d at %d\n", GetLastError(), __LINE__); } return ret; } HWND WINAPI extCreateDialogIndirectParam(HINSTANCE hInstance, LPCDLGTEMPLATE lpTemplate, HWND hWndParent, DLGPROC lpDialogFunc, LPARAM lParamInit) { HWND RetHWND; OutTraceDW("CreateDialogIndirectParam: hInstance=%x lpTemplate=(style=%x extstyle=%x items=%d pos=(%d,%d) size=(%dx%d)) hWndParent=%x lpDialogFunc=%x lParamInit=%x\n", hInstance, lpTemplate->style, lpTemplate->dwExtendedStyle, lpTemplate->cdit, lpTemplate->x, lpTemplate->y, lpTemplate->cx, lpTemplate->cy, hWndParent, lpDialogFunc, lParamInit); if(dxw.IsFullScreen() && dxw.IsRealDesktop(hWndParent)) hWndParent=dxw.GethWnd(); RetHWND=(*pCreateDialogIndirectParam)(hInstance, lpTemplate, hWndParent, lpDialogFunc, lParamInit); // v2.02.73: redirect lpDialogFunc only when it is nor NULL: fix for "LEGO Stunt Rally" if(lpDialogFunc && (dxw.dwFlags8 & HOOKDLGWIN)){ // v2.03.41 - debug option dxwws.PutProc(RetHWND, (WNDPROC)lpDialogFunc); if(!(*pSetWindowLong)(RetHWND, DWL_DLGPROC, (LONG)extDialogWindowProc)) OutTraceE("SetWindowLong: ERROR err=%d at %d\n", GetLastError(), __LINE__); } OutTraceDW("CreateDialogIndirectParam: hwnd=%x\n", RetHWND); return RetHWND; } HWND WINAPI extCreateDialogParam(HINSTANCE hInstance, LPCTSTR lpTemplateName, HWND hWndParent, DLGPROC lpDialogFunc, LPARAM lParamInit) { HWND RetHWND; OutTraceDW("CreateDialogParam: hInstance=%x lpTemplateName=%s hWndParent=%x lpDialogFunc=%x lParamInit=%x\n", hInstance, sTemplateName(lpTemplateName), hWndParent, lpDialogFunc, lParamInit); if(dxw.IsFullScreen() && dxw.IsRealDesktop(hWndParent)) hWndParent=dxw.GethWnd(); RetHWND=(*pCreateDialogParam)(hInstance, lpTemplateName, hWndParent, lpDialogFunc, lParamInit); // v2.02.73: redirect lpDialogFunc only when it is nor NULL: fix for "LEGO Stunt Rally" // v2.04.18: HOOKDLGWIN (not to be checked to fix "PBA Bowling 2") if(lpDialogFunc && (dxw.dwFlags8 & HOOKDLGWIN)){ // v2.03.41 - debug option dxwws.PutProc(RetHWND, (WNDPROC)lpDialogFunc); if(!(*pSetWindowLong)(RetHWND, DWL_DLGPROC, (LONG)extDialogWindowProc)) OutTraceE("SetWindowLong: ERROR err=%d at %d\n", GetLastError(), __LINE__); } OutTraceDW("CreateDialogParam: hwnd=%x\n", RetHWND); return RetHWND; } BOOL WINAPI extMoveWindow(HWND hwnd, int X, int Y, int nWidth, int nHeight, BOOL bRepaint) { BOOL ret; OutTraceDW("MoveWindow: hwnd=%x xy=(%d,%d) size=(%d,%d) repaint=%x fullscreen=%x\n", hwnd, X, Y, nWidth, nHeight, bRepaint, dxw.IsFullScreen()); if(dxw.Windowize && !InMainWinCreation){ if(dxw.IsDesktop(hwnd)){ // v2.1.93: happens in "Emergency Fighters for Life" ... // what is the meaning of this? is it related to video stretching? OutTraceDW("MoveWindow: prevent moving desktop win\n"); return TRUE; } if((hwnd==dxw.GethWnd()) || (hwnd==dxw.hParentWnd)){ OutTraceDW("MoveWindow: prevent moving main win\n"); return TRUE; } if (dxw.IsFullScreen() && (dxw.dwFlags1 & CLIENTREMAPPING)){ POINT upleft={0,0}; RECT client; BOOL isChild; (*pClientToScreen)(dxw.GethWnd(),&upleft); (*pGetClientRect)(dxw.GethWnd(),&client); if ((*pGetWindowLong)(hwnd, GWL_STYLE) & WS_CHILD){ isChild=TRUE; // child coordinate adjustement X = (X * client.right) / dxw.GetScreenWidth(); Y = (Y * client.bottom) / dxw.GetScreenHeight(); nWidth = (nWidth * client.right) / dxw.GetScreenWidth(); nHeight = (nHeight * client.bottom) / dxw.GetScreenHeight(); } else { isChild=FALSE; // regular win coordinate adjustement X = upleft.x + (X * client.right) / dxw.GetScreenWidth(); Y = upleft.y + (Y * client.bottom) / dxw.GetScreenHeight(); nWidth = (nWidth * client.right) / dxw.GetScreenWidth(); nHeight = (nHeight * client.bottom) / dxw.GetScreenHeight(); } OutTraceDW("MoveWindow: DEBUG client=(%d,%d) screen=(%d,%d)\n", client.right, client.bottom, dxw.GetScreenWidth(), dxw.GetScreenHeight()); OutTraceDW("MoveWindow: hwnd=%x child=%x relocated to xy=(%d,%d) size=(%d,%d)\n", hwnd, isChild, X, Y, nWidth, nHeight); } else{ if((X==0)&&(Y==0)&&(nWidth==dxw.GetScreenWidth())&&(nHeight==dxw.GetScreenHeight())){ // evidently, this was supposed to be a fullscreen window.... RECT screen; DWORD dwStyle; POINT upleft = {0,0}; char *sStyle; (*pGetClientRect)(dxw.GethWnd(),&screen); (*pClientToScreen)(dxw.GethWnd(),&upleft); if((dwStyle=(*pGetWindowLong)(hwnd, GWL_STYLE)) && WS_CHILDWINDOW){ // Big main child window: see "Reah" X=Y=0; sStyle="(child) "; } else{ // Regular big main window, usual case. X=upleft.x; Y=upleft.y; sStyle=""; } nWidth=screen.right; nHeight=screen.bottom; if (dxw.dwFlags7 & ANCHORED){ WINDOWPOS MaxPos; dxw.CalculateWindowPos(hwnd, dxw.iSizX, dxw.iSizY, &MaxPos); nWidth = MaxPos.cx; nHeight = MaxPos.cy; X = MaxPos.x; Y = MaxPos.y; } OutTraceDW("MoveWindow: fixed BIG %swin pos=(%d,%d) size=(%d,%d)\n", sStyle, X, Y, nWidth, nHeight); } } } ret=(*pMoveWindow)(hwnd, X, Y, nWidth, nHeight, bRepaint); if(!ret) OutTraceE("MoveWindow: ERROR err=%d at %d\n", GetLastError(), __LINE__); if(dxw.bAutoScale) dxw.AutoScale(); return ret; } int WINAPI extShowCursor(BOOL bShow) { static int iFakeCounter; int ret; OutTraceC("ShowCursor: bShow=%x\n", bShow); if (bShow){ if (dxw.dwFlags1 & HIDEHWCURSOR){ iFakeCounter++; OutTraceC("ShowCursor: HIDEHWCURSOR ret=%x\n", iFakeCounter); return iFakeCounter; } } else { if (dxw.dwFlags2 & SHOWHWCURSOR){ iFakeCounter--; OutTraceC("ShowCursor: SHOWHWCURSOR ret=%x\n", iFakeCounter); return iFakeCounter; } } ret=(*pShowCursor)(bShow); OutTraceC("ShowCursor: ret=%x\n", ret); return ret; } BOOL WINAPI extDrawFocusRect(HDC hDC, const RECT *lprc) { return TRUE; } BOOL WINAPI extScrollDC(HDC hdc, int dx, int dy, const RECT *lprcScroll, const RECT *lprcClip, HRGN hrgnUpdate, LPRECT lprcUpdate) { BOOL res; if(IsTraceDW){ char sRect[81]; if(lprcScroll) sprintf(sRect, "(%d,%d)-(%d,%d)", lprcScroll->left, lprcScroll->top, lprcScroll->right, lprcScroll->bottom); else strcpy(sRect, "NULL"); char sClip[81]; if(lprcClip) sprintf(sClip, "(%d,%d)-(%d,%d)", lprcClip->left, lprcClip->top, lprcClip->right, lprcClip->bottom); else strcpy(sClip, "NULL"); OutTraceDW("ScrollDC: hdc=%x dxy=(%d,%d) scrollrect=%s cliprect=%s hrgn=%x\n", hdc, dx, dy, sRect, sClip, hrgnUpdate); } if(dxw.IsToRemap(hdc)){ switch(dxw.GDIEmulationMode){ case GDIMODE_SHAREDDC: sdc.GetPrimaryDC(hdc); res=(*pScrollDC)(sdc.GetHdc(), dx, dy, lprcScroll, lprcClip, hrgnUpdate, lprcUpdate); sdc.PutPrimaryDC(hdc, TRUE, lprcUpdate->left, lprcUpdate->top, lprcUpdate->right-lprcUpdate->left, lprcUpdate->bottom-lprcUpdate->top); return res; break; case GDIMODE_EMULATED: #if 0 // not working with 688(I) sonar !!! if(dxw.IsVirtual(hdc)){ RECT rcScroll, rcClip; if(lprcScroll) { rcScroll = *lprcScroll; OffsetRect(&rcScroll, dxw.VirtualOffsetX, dxw.VirtualOffsetY); } if(lprcClip) { rcClip = *lprcClip; OffsetRect(&rcClip, dxw.VirtualOffsetX, dxw.VirtualOffsetY); } res=(*pScrollDC)(hdc, dx, dy, &rcScroll, &rcClip, hrgnUpdate, lprcUpdate); return res; } #endif break; default: break; } } res=(*pScrollDC)(hdc, dx, dy, lprcScroll, lprcClip, hrgnUpdate, lprcUpdate); return res; } HWND WINAPI extGetTopWindow(HWND hwnd) { HWND ret; OutTraceDW("GetTopWindow: hwnd=%x fullscreen=%x\n", hwnd, dxw.IsFullScreen()); // a fullscreen program is supposed to be always top Z-order on the desktop! ret = (dxw.IsFullScreen() && dxw.IsDesktop(hwnd) && (dxw.dwFlags8 & PRETENDVISIBLE)) ? dxw.GethWnd() : (*pGetTopWindow)(hwnd); OutTraceDW("GetTopWindow: ret=%x\n", ret); return ret; } LONG WINAPI extTabbedTextOutA(HDC hdc, int X, int Y, LPCTSTR lpString, int nCount, int nTabPositions, const LPINT lpnTabStopPositions, int nTabOrigin) { BOOL res; OutTraceDW("TabbedTextOut: hdc=%x xy=(%d,%d) nCount=%d nTP=%d nTOS=%d str=(%d)\"%s\"\n", hdc, X, Y, nCount, nTabPositions, nTabOrigin, lpString); if(dxw.IsToRemap(hdc)){ switch(dxw.GDIEmulationMode){ case GDIMODE_SHAREDDC: sdc.GetPrimaryDC(hdc); res=(*pTabbedTextOutA)(sdc.GetHdc(), X, Y, lpString, nCount, nTabPositions, lpnTabStopPositions, nTabOrigin); sdc.PutPrimaryDC(hdc, TRUE); return res; break; case GDIMODE_STRETCHED: dxw.MapClient(&X, &Y); break; case GDIMODE_EMULATED: if(dxw.IsVirtual(hdc)){ X+=dxw.VirtualOffsetX; Y+=dxw.VirtualOffsetY; } break; default: break; } OutTraceDW("TabbedTextOutA: fixed dest=(%d,%d)\n", X, Y); } res=(*pTabbedTextOutA)(hdc, X, Y, lpString, nCount, nTabPositions, lpnTabStopPositions, nTabOrigin); return res; } LONG WINAPI extTabbedTextOutW(HDC hdc, int X, int Y, LPCWSTR lpString, int nCount, int nTabPositions, const LPINT lpnTabStopPositions, int nTabOrigin) { BOOL res; OutTraceDW("TabbedTextOutW: hdc=%x xy=(%d,%d) nCount=%d nTP=%d nTOS=%d str=(%d)\"%ls\"\n", hdc, X, Y, nCount, nTabPositions, nTabOrigin, lpString); if(dxw.IsToRemap(hdc)){ switch(dxw.GDIEmulationMode){ case GDIMODE_SHAREDDC: sdc.GetPrimaryDC(hdc); res=(*pTabbedTextOutW)(sdc.GetHdc(), X, Y, lpString, nCount, nTabPositions, lpnTabStopPositions, nTabOrigin); sdc.PutPrimaryDC(hdc, TRUE); return res; break; case GDIMODE_STRETCHED: dxw.MapClient(&X, &Y); break; case GDIMODE_EMULATED: if(dxw.IsVirtual(hdc)){ X+=dxw.VirtualOffsetX; Y+=dxw.VirtualOffsetY; } break; default: break; } OutTraceDW("TabbedTextOutW: fixed dest=(%d,%d)\n", X, Y); } res=(*pTabbedTextOutW)(hdc, X, Y, lpString, nCount, nTabPositions, lpnTabStopPositions, nTabOrigin); return res; } BOOL WINAPI extDestroyWindow(HWND hWnd) { // v2.02.43: "Empire Earth" builds test surfaces that must be destroyed! // v2.03.20: "Prince of Persia 3D" destroys the main window that must be preserved! BOOL res; OutTraceB("DestroyWindow: hwnd=%x\n", hWnd); if (hWnd == dxw.GethWnd()) { OutTraceDW("DestroyWindow: destroy main hwnd=%x\n", hWnd); if(hLastFullScrWin){ OutTraceDW("DestroyWindow: revert to main hwnd=%x bpp=%d\n", hWnd, ddpLastPixelFormat.dwRGBBitCount); dxw.SethWnd(hLastFullScrWin); hLastFullScrWin = NULL; dxw.VirtualPixelFormat = ddpLastPixelFormat; extern int iBakBufferVersion; SetBltTransformations(iBakBufferVersion); } else { OutTraceDW("DestroyWindow: destroy main hwnd=%x\n", hWnd); dxw.SethWnd(NULL); } if(dxw.dwFlags6 & NODESTROYWINDOW) { OutTraceDW("DestroyWindow: do NOT destroy main hwnd=%x\n", hWnd); return TRUE; } } if (hControlParentWnd && (hWnd == hControlParentWnd)) { OutTraceDW("DestroyWindow: destroy control parent hwnd=%x\n", hWnd); hControlParentWnd = NULL; } res=(*pDestroyWindow)(hWnd); if(!res)OutTraceE("DestroyWindow: ERROR err=%d\n", GetLastError()); if(dxw.dwFlags7 & NOWINERRORS) return TRUE; // v2.03.69: suppress unessential errors return res; } static char *ExplainTAAlign(UINT c) { static char eb[256]; unsigned int l; strcpy(eb,"TA_"); strcat(eb, (c & TA_UPDATECP) ? "UPDATECP+" : "NOUPDATECP+"); strcat(eb, (c & TA_RIGHT) ? (((c & TA_CENTER) == TA_CENTER) ? "CENTER+" : "RIGHT+") : "LEFT+"); strcat(eb, (c & TA_BOTTOM) ? "BOTTOM+" : "TOP+"); if ((c & TA_BASELINE)==TA_BASELINE) strcat(eb, "BASELINE+"); if (c & TA_RTLREADING) strcat(eb, "RTLREADING+"); l=strlen(eb); eb[l-1]=0; return(eb); } static char *ExplainDTFormat(UINT c) { static char eb[256]; unsigned int l; strcpy(eb,"DT_"); if(!(c & (DT_CENTER|DT_RIGHT))) strcat(eb, "LEFT+"); if(c & DT_CENTER) strcat(eb, "CENTER+"); if(c & DT_RIGHT) strcat(eb, "RIGHT+"); if(!(c & (DT_VCENTER|DT_BOTTOM))) strcat(eb, "TOP+"); if(c & DT_VCENTER) strcat(eb, "VCENTER+"); if(c & DT_BOTTOM) strcat(eb, "BOTTOM+"); if(c & DT_WORDBREAK) strcat(eb, "WORDBREAK+"); if(c & DT_SINGLELINE) strcat(eb, "SINGLELINE+"); if(c & DT_EXPANDTABS) strcat(eb, "EXPANDTABS+"); if(c & DT_TABSTOP) strcat(eb, "TABSTOP+"); if(c & DT_NOCLIP) strcat(eb, "NOCLIP+"); if(c & DT_EXTERNALLEADING) strcat(eb, "EXTERNALLEADING+"); if(c & DT_CALCRECT) strcat(eb, "CALCRECT+"); if(c & DT_NOPREFIX) strcat(eb, "NOPREFIX+"); if(c & DT_INTERNAL) strcat(eb, "INTERNAL+"); l=strlen(eb); eb[l-1]=0; return(eb); } BOOL gFixed; int WINAPI extDrawTextA(HDC hdc, LPCTSTR lpchText, int nCount, LPRECT lpRect, UINT uFormat) { int ret; OutTraceDW("DrawTextA: hdc=%x rect=(%d,%d)-(%d,%d) Format=%x(%s) Text=(%d)\"%s\"\n", hdc, lpRect->left, lpRect->top, lpRect->right, lpRect->bottom, uFormat, ExplainDTFormat(uFormat), nCount, lpchText); gFixed = TRUE; // semaphore to avoid multiple scaling with HOT patching if(dxw.IsToRemap(hdc)){ switch(dxw.GDIEmulationMode){ case GDIMODE_SHAREDDC: sdc.GetPrimaryDC(hdc); ret=(*pDrawTextA)(sdc.GetHdc(), lpchText, nCount, lpRect, uFormat); if(nCount) sdc.PutPrimaryDC(hdc, TRUE, lpRect->left, lpRect->top, lpRect->right-lpRect->left, lpRect->bottom-lpRect->top); else { sdc.PutPrimaryDC(hdc, FALSE); // Diablo makes a DrawText of null string in the intro ... } return ret; break; case GDIMODE_STRETCHED: dxw.MapClient((RECT *)lpRect); OutTraceDW("DrawTextA: fixed rect=(%d,%d)-(%d,%d)\n", lpRect->left, lpRect->top, lpRect->right, lpRect->bottom); ret=(*pDrawTextA)(hdc, lpchText, nCount, lpRect, uFormat); dxw.UnmapClient((RECT *)lpRect); OutTraceDW("DrawTextA: fixed output rect=(%d,%d)-(%d,%d)\n", lpRect->left, lpRect->top, lpRect->right, lpRect->bottom); break; default: ret=(*pDrawTextA)(hdc, lpchText, nCount, lpRect, uFormat); break; } } else { ret=(*pDrawTextA)(hdc, lpchText, nCount, lpRect, uFormat); } gFixed = FALSE; // if nCount is zero, DrawRect returns 0 as text heigth, but this is not an error! (ref. "Imperialism II") if(nCount && !ret) OutTraceE("DrawTextA: ERROR ret=%x err=%d\n", ret, GetLastError()); return ret; } int WINAPI extDrawTextExA(HDC hdc, LPTSTR lpchText, int nCount, LPRECT lpRect, UINT dwDTFormat, LPDRAWTEXTPARAMS lpDTParams) { int ret; OutTraceDW("DrawTextExA: hdc=%x rect=(%d,%d)-(%d,%d) DTFormat=%x Text=(%d)\"%s\"\n", hdc, lpRect->left, lpRect->top, lpRect->right, lpRect->bottom, dwDTFormat, nCount, lpchText); if (IsDebug){ if(lpDTParams) OutTrace("DTParams: size=%d (L,R)margins=(%d,%d) TabLength=%d lDrawn=%d\n", lpDTParams->cbSize, lpDTParams->iLeftMargin, lpDTParams->iRightMargin, lpDTParams->iTabLength, lpDTParams->uiLengthDrawn); else OutTrace("DTParams: NULL\n"); } gFixed = TRUE; // semaphore to avoid multiple scaling with HOT patching if(dxw.IsToRemap(hdc)){ switch(dxw.GDIEmulationMode){ case GDIMODE_SHAREDDC: sdc.GetPrimaryDC(hdc); ret=(*pDrawTextExA)(sdc.GetHdc(), lpchText, nCount, lpRect, dwDTFormat, lpDTParams); if(nCount) sdc.PutPrimaryDC(hdc, TRUE, lpRect->left, lpRect->top, lpRect->right-lpRect->left, lpRect->bottom-lpRect->top); else sdc.PutPrimaryDC(hdc, FALSE); // in cases like Diablo that makes a DrawText of null string in the intro ... return ret; break; case GDIMODE_STRETCHED: dxw.MapClient((RECT *)lpRect); OutTraceDW("DrawTextA: fixed rect=(%d,%d)-(%d,%d)\n", lpRect->left, lpRect->top, lpRect->right, lpRect->bottom); ret=(*pDrawTextExA)(hdc, lpchText, nCount, lpRect, dwDTFormat, lpDTParams); dxw.UnmapClient((RECT *)lpRect); OutTraceDW("DrawTextA: fixed output rect=(%d,%d)-(%d,%d)\n", lpRect->left, lpRect->top, lpRect->right, lpRect->bottom); break; default: ret=(*pDrawTextExA)(hdc, lpchText, nCount, lpRect, dwDTFormat, lpDTParams); break; } } else { ret=(*pDrawTextExA)(hdc, lpchText, nCount, lpRect, dwDTFormat, lpDTParams); } gFixed = FALSE; // if nCount is zero, DrawRect returns 0 as text heigth, but this is not an error! (ref. "Imperialism II") if(nCount && !ret) OutTraceE("DrawTextA: ERROR ret=%x err=%d\n", ret, GetLastError()); return ret; } int WINAPI extDrawTextW(HDC hdc, LPCWSTR lpchText, int nCount, LPRECT lpRect, UINT uFormat) { int ret; OutTraceDW("DrawTextW: hdc=%x rect=(%d,%d)-(%d,%d) Format=%x(%s) Text=(%d)\"%ls\"\n", hdc, lpRect->left, lpRect->top, lpRect->right, lpRect->bottom, uFormat, ExplainDTFormat(uFormat), nCount, lpchText); gFixed = TRUE; // semaphore to avoid multiple scaling with HOT patching if(dxw.IsToRemap(hdc)){ switch(dxw.GDIEmulationMode){ case GDIMODE_SHAREDDC: sdc.GetPrimaryDC(hdc); ret=(*pDrawTextW)(sdc.GetHdc(), lpchText, nCount, lpRect, uFormat); sdc.PutPrimaryDC(hdc, TRUE, lpRect->left, lpRect->top, lpRect->right-lpRect->left, lpRect->bottom-lpRect->top); return ret; break; case GDIMODE_STRETCHED: dxw.MapClient((RECT *)lpRect); OutTraceDW("DrawTextW: fixed rect=(%d,%d)-(%d,%d)\n", lpRect->left, lpRect->top, lpRect->right, lpRect->bottom); ret=(*pDrawTextW)(hdc, lpchText, nCount, lpRect, uFormat); dxw.UnmapClient((RECT *)lpRect); OutTraceDW("DrawTextW: fixed output rect=(%d,%d)-(%d,%d)\n", lpRect->left, lpRect->top, lpRect->right, lpRect->bottom); break; default: ret=(*pDrawTextW)(hdc, lpchText, nCount, lpRect, uFormat); break; } } else { ret=(*pDrawTextW)(hdc, lpchText, nCount, lpRect, uFormat); } gFixed = FALSE; // if nCount is zero, DrawRect returns 0 as text heigth, but this is not an error! (ref. "Imperialism II") if(nCount && !ret) OutTraceE("DrawTextW: ERROR ret=%x err=%d\n", ret, GetLastError()); return ret; } int WINAPI extDrawTextExW(HDC hdc, LPCWSTR lpchText, int nCount, LPRECT lpRect, UINT dwDTFormat, LPDRAWTEXTPARAMS lpDTParams) { int ret; OutTraceDW("DrawTextExW: hdc=%x rect=(%d,%d)-(%d,%d) DTFormat=%x Text=(%d)\"%ls\"\n", hdc, lpRect->left, lpRect->top, lpRect->right, lpRect->bottom, dwDTFormat, nCount, lpchText); if (IsDebug){ if(lpDTParams) OutTrace("DTParams: size=%d (L,R)margins=(%d,%d) TabLength=%d lDrawn=%d\n", lpDTParams->cbSize, lpDTParams->iLeftMargin, lpDTParams->iRightMargin, lpDTParams->iTabLength, lpDTParams->uiLengthDrawn); else OutTrace("DTParams: NULL\n"); } gFixed = TRUE; // semaphore to avoid multiple scaling with HOT patching if(dxw.IsToRemap(hdc)){ switch(dxw.GDIEmulationMode){ case GDIMODE_SHAREDDC: sdc.GetPrimaryDC(hdc); ret=(*pDrawTextExW)(sdc.GetHdc(), lpchText, nCount, lpRect, dwDTFormat, lpDTParams); sdc.PutPrimaryDC(hdc, TRUE, lpRect->left, lpRect->top, lpRect->right-lpRect->left, lpRect->bottom-lpRect->top); return ret; break; case GDIMODE_STRETCHED: dxw.MapClient((RECT *)lpRect); OutTraceDW("DrawTextExW: fixed rect=(%d,%d)-(%d,%d)\n", lpRect->left, lpRect->top, lpRect->right, lpRect->bottom); ret=(*pDrawTextExW)(hdc, lpchText, nCount, lpRect, dwDTFormat, lpDTParams); dxw.UnmapClient((RECT *)lpRect); OutTraceDW("DrawTextExW: fixed output rect=(%d,%d)-(%d,%d)\n", lpRect->left, lpRect->top, lpRect->right, lpRect->bottom); break; default: ret=(*pDrawTextExW)(hdc, lpchText, nCount, lpRect, dwDTFormat, lpDTParams); break; } } else { ret=(*pDrawTextExW)(hdc, lpchText, nCount, lpRect, dwDTFormat, lpDTParams); } gFixed = FALSE; // if nCount is zero, DrawRect returns 0 as text heigth, but this is not an error! (ref. "Imperialism II") if(nCount && !ret) OutTraceE("DrawTextExW: ERROR ret=%x err=%d\n", ret, GetLastError()); return ret; } BOOL WINAPI extCloseWindow(HWND hWnd) { // from MSDN: Minimizes (but does not destroy) the specified window. BOOL res; OutTraceB("CloseWindow: hwnd=%x\n", hWnd); if (hWnd == dxw.GethWnd()) { OutTraceDW("CloseWindow: close main hwnd=%x\n", hWnd); // do not delete the reference to main hWnd. } res=(*pCloseWindow)(hWnd); if(!res)OutTraceE("CloseWindow: ERROR err=%d\n", GetLastError()); return res; } BOOL WINAPI extSetSysColors(int cElements, const INT *lpaElements, const COLORREF *lpaRgbValues) { // v2.02.32: added to avoid SysColors changes by "Western Front" BOOL ret; OutTraceDW("SetSysColors: Elements=%d\n", cElements); if(dxw.dwFlags3 & LOCKSYSCOLORS) return TRUE; ret=(*pSetSysColors)(cElements, lpaElements, lpaRgbValues); if(!ret) OutTraceE("SetSysColors: ERROR er=%d\n", GetLastError()); return ret; } BOOL WINAPI extUpdateWindow(HWND hwnd) { BOOL ret; OutTraceDW("UpdateWindow: hwnd=%x\n", hwnd); if(dxw.Windowize && dxw.IsRealDesktop(hwnd)){ OutTraceDW("UpdateWindow: remapping hwnd=%x->%x\n", hwnd, dxw.GethWnd()); hwnd=dxw.GethWnd(); } ret=(*pUpdateWindow)(hwnd); if(!ret) OutTraceE("UpdateWindow: ERROR err=%d\n", GetLastError()); return ret; } static char *sRedrawFlags(UINT flags) { static char s[256]; strcpy(s, "RDW_"); if(flags & RDW_ERASE) strcat(s, "ERASE+"); if(flags & RDW_FRAME) strcat(s, "FRAME+"); if(flags & RDW_INTERNALPAINT) strcat(s, "INTERNALPAINT+"); if(flags & RDW_INVALIDATE) strcat(s, "INVALIDATE+"); if(flags & RDW_NOERASE) strcat(s, "NOERASE+"); if(flags & RDW_NOFRAME) strcat(s, "NOFRAME+"); if(flags & RDW_NOINTERNALPAINT) strcat(s, "NOINTERNALPAINT+"); if(flags & RDW_VALIDATE) strcat(s, "VALIDATE+"); if(flags & RDW_ERASENOW) strcat(s, "ERASENOW+"); if(flags & RDW_UPDATENOW) strcat(s, "UPDATENOW+"); if(flags & RDW_ALLCHILDREN) strcat(s, "ALLCHILDREN+"); if(flags & RDW_NOCHILDREN) strcat(s, "NOCHILDREN+"); if(strlen(s)>strlen("RDW_")) s[strlen(s)-1]=0; else s[0]=0; return s; } BOOL WINAPI extRedrawWindow(HWND hWnd, const RECT *lprcUpdate, HRGN hrgnUpdate, UINT flags) { RECT rcUpdate; BOOL ret; OutTraceDW("RedrawWindow: hwnd=%x hrgn=%x flags=%x(%s)\n", hWnd, hrgnUpdate, flags, sRedrawFlags(flags)); // v2.03.64 fix: if hrgnUpdate is set, lprcUpdate is ignored, so it can't be scaled // beware: they both could be null, and that means the whole window if (!hrgnUpdate && lprcUpdate) rcUpdate = *lprcUpdate; // avoid redrawing the whole desktop if(dxw.Windowize && dxw.IsRealDesktop(hWnd)) hWnd=dxw.GethWnd(); if(dxw.IsFullScreen()){ // v2.03.64 fix: if hrgnUpdate is set, lprcUpdate is ignored, so it can't be scaled if (!hrgnUpdate && lprcUpdate) rcUpdate = dxw.MapClientRect((LPRECT)lprcUpdate); } ret = (*pRedrawWindow)(hWnd, lprcUpdate ? &rcUpdate : NULL, hrgnUpdate, flags); if(ret) OutTraceE("RedrawWindow ERROR: err=%d\n", GetLastError()); return ret; } BOOL WINAPI extGetWindowPlacement(HWND hwnd, WINDOWPLACEMENT *lpwndpl) { BOOL ret; OutTraceDW("GetWindowPlacement: hwnd=%x\n", hwnd); if(dxw.IsRealDesktop(hwnd)){ OutTraceDW("GetWindowPlacement: remapping hwnd=%x->%x\n", hwnd, dxw.GethWnd()); hwnd=dxw.GethWnd(); } ret=(*pGetWindowPlacement)(hwnd, lpwndpl); OutTraceDW("GetWindowPlacement: flags=%x showCmd=%x MinPosition=(%d,%d) MaxPosition=(%d,%d) NormalPosition=(%d,%d)-(%d,%d)\n", lpwndpl->flags, lpwndpl->showCmd, lpwndpl->ptMinPosition.x, lpwndpl->ptMinPosition.y, lpwndpl->ptMaxPosition.x, lpwndpl->ptMaxPosition.y, lpwndpl->rcNormalPosition.left, lpwndpl->rcNormalPosition.top, lpwndpl->rcNormalPosition.right, lpwndpl->rcNormalPosition.bottom); if (ret && dxw.Windowize && dxw.IsFullScreen()){ lpwndpl->showCmd = SW_SHOWNORMAL; lpwndpl->ptMinPosition.x = -1; lpwndpl->ptMinPosition.y = -1; lpwndpl->ptMaxPosition.x = -1; lpwndpl->ptMaxPosition.y = -1; OutTrace("GetWindowPlacement: FIXED showCmd=%x MinPosition=(%d,%d) MaxPosition=(%d,%d) NormalPosition=(%d,%d)-(%d,%d)\n", lpwndpl->showCmd, lpwndpl->ptMinPosition.x, lpwndpl->ptMinPosition.y, lpwndpl->ptMaxPosition.x, lpwndpl->ptMaxPosition.y, lpwndpl->rcNormalPosition.left, lpwndpl->rcNormalPosition.top, lpwndpl->rcNormalPosition.right, lpwndpl->rcNormalPosition.bottom); } if(!ret) OutTraceE("GetWindowPlacement: ERROR er=%d\n", GetLastError()); return ret; } BOOL WINAPI extSetWindowPlacement(HWND hwnd, WINDOWPLACEMENT *lpwndpl) { BOOL ret; OutTraceDW("SetWindowPlacement: hwnd=%x\n", hwnd); if(dxw.IsRealDesktop(hwnd)){ OutTraceDW("SetWindowPlacement: remapping hwnd=%x->%x\n", hwnd, dxw.GethWnd()); hwnd=dxw.GethWnd(); } OutTraceDW("SetWindowPlacement: flags=%x showCmd=%x MinPosition=(%d,%d) MaxPosition=(%d,%d) NormalPosition=(%d,%d)-(%d,%d)\n", lpwndpl->flags, lpwndpl->showCmd, lpwndpl->ptMinPosition.x, lpwndpl->ptMinPosition.y, lpwndpl->ptMaxPosition.x, lpwndpl->ptMaxPosition.y, lpwndpl->rcNormalPosition.left, lpwndpl->rcNormalPosition.top, lpwndpl->rcNormalPosition.right, lpwndpl->rcNormalPosition.bottom); switch (lpwndpl->showCmd){ case SW_MAXIMIZE: if (dxw.IsFullScreen()){ lpwndpl->showCmd = SW_SHOW; OutTraceDW("SetWindowPlacement: forcing SW_SHOW state\n"); } break; } ret=(*pSetWindowPlacement)(hwnd, lpwndpl); if(!ret) OutTraceE("SetWindowPlacement: ERROR er=%d\n", GetLastError()); return ret; } HWND WINAPI extSetCapture(HWND hwnd) { HWND ret; OutTraceDW("SetCapture: hwnd=%x\n", hwnd); ret=(*pSetCapture)(hwnd); OutTraceDW("SetCapture: ret=%x\n", ret); return ret; } HWND WINAPI extGetActiveWindow(void) { HWND ret; ret=(*pGetActiveWindow)(); OutTraceDW("GetActiveWindow: ret=%x\n", ret); if((dxw.dwFlags8 & WININSULATION) && dxw.Windowize && dxw.IsFullScreen()) { OutTraceDW("GetActiveWindow: ret=%x->%x\n", ret, dxw.GethWnd()); return dxw.GethWnd(); } return ret; } HWND WINAPI extGetForegroundWindow(void) { HWND ret; ret=(*pGetForegroundWindow)(); if((dxw.dwFlags8 & WININSULATION) && dxw.Windowize && dxw.IsFullScreen()) { OutTraceDW("GetForegroundWindow: ret=%x->%x\n", ret, dxw.GethWnd()); return dxw.GethWnd(); } return ret; } HWND WINAPI extGetFocus(void) { HWND ret; ret=(*pGetFocus)(); OutTraceDW("GetFocus: ret=%x\n", ret); return ret; } DWORD WINAPI extGetWindowThreadProcessId(HWND hWnd, LPDWORD lpdwProcessId) { DWORD ret; ret=(*pGetWindowThreadProcessId)(hWnd, lpdwProcessId); if(lpdwProcessId) OutTraceDW("GetWindowThreadProcessId: pid=%x\n", *lpdwProcessId); OutTraceDW("GetWindowThreadProcessId: hwnd=%x ret=%x\n", hWnd, ret); return ret; } HWND WINAPI extGetWindow(HWND hWnd, UINT uCmd) { HWND ret; ret=(*pGetWindow)(hWnd, uCmd); OutTraceDW("GetWindow: hwnd=%x cmd=%x ret=%x\n", hWnd, uCmd, ret); return ret; } BOOL WINAPI extIsWindow(HWND hWnd) { BOOL ret; ret=(*pIsWindow)(hWnd); OutTraceDW("IsWindow: hwnd=%x ret=%x\n", hWnd, ret); return ret; } HWND WINAPI extSetFocus(HWND hWnd) { HWND ret; ret=(*pSetFocus)(hWnd); OutTraceDW("SetFocus: hwnd=%x ret=%x\n", hWnd, ret); return ret; } BOOL WINAPI extIsWindowVisible(HWND hwnd) { BOOL ret; ret=(*pIsWindowVisible)(hwnd); OutTraceB("IsWindowVisible: hwnd=%x ret=%x\n", hwnd, ret); if(dxw.IsDesktop(hwnd) && (dxw.dwFlags8 & PRETENDVISIBLE) && !ret){ OutTraceDW("IsWindowVisible: FORCING ret=TRUE\n"); ret=TRUE; } return ret; } BOOL WINAPI extSystemParametersInfoA(UINT uiAction, UINT uiParam, PVOID pvParam, UINT fWinIni) { BOOL ret; OutTraceDW("SystemParametersInfoA: Action=%x Param=%x WinIni=%x\n", uiAction, uiParam, fWinIni); switch(uiAction){ case SPI_SETKEYBOARDDELAY: case SPI_SETKEYBOARDSPEED: case SPI_SETSCREENSAVERRUNNING: // v2.03.75 used by Dethkarz, but not really necessary OutTraceDW("SystemParametersInfoA: bypass action=%x\n", uiAction); return TRUE; break; } ret=(*pSystemParametersInfoA)(uiAction, uiParam, pvParam, fWinIni); if(uiAction==SPI_GETWORKAREA){ LPRECT cli = (LPRECT)pvParam; *cli = dxw.GetScreenRect(); OutTraceDW("SystemParametersInfoA: resized client workarea rect=(%d,%d)-(%d,%d)\n", cli->left, cli->top, cli->right, cli->bottom); } if(!ret) OutTraceE("SystemParametersInfoA ERROR: err=%d\n", GetLastError()); return ret; } BOOL WINAPI extSystemParametersInfoW(UINT uiAction, UINT uiParam, PVOID pvParam, UINT fWinIni) { BOOL ret; OutTraceDW("SystemParametersInfoW: Action=%x Param=%x WinIni=%x\n", uiAction, uiParam, fWinIni); switch(uiAction){ case SPI_SETKEYBOARDDELAY: case SPI_SETKEYBOARDSPEED: OutTraceDW("SystemParametersInfoW: bypass action=%x\n", uiAction); return TRUE; break; } ret=(*pSystemParametersInfoW)(uiAction, uiParam, pvParam, fWinIni); if(uiAction==SPI_GETWORKAREA){ LPRECT cli = (LPRECT)pvParam; *cli = dxw.GetScreenRect(); OutTraceDW("SystemParametersInfoW: resized client workarea rect=(%d,%d)-(%d,%d)\n", cli->left, cli->top, cli->right, cli->bottom); } if(!ret) OutTraceE("SystemParametersInfoW ERROR: err=%d\n", GetLastError()); return ret; } #undef OutTraceDW #define OutTraceDW OutTrace UINT_PTR WINAPI extSetTimer(HWND hWnd, UINT_PTR nIDEvent, UINT uElapse, TIMERPROC lpTimerFunc) { UINT uShiftedElapse; UINT_PTR ret; // beware: the quicker the time flows, the more the time clicks are incremented, // and the lesser the pauses must be lasting! Shift operations are reverted in // GetSystemTime vs. Sleep or SetTimer uShiftedElapse = dxw.StretchTime(uElapse); OutTraceDW("SetTimer: hwnd=%x TimerFunc=%x elapse=%d->%d timeshift=%d\n", hWnd, lpTimerFunc, uElapse, uShiftedElapse, dxw.TimeShift); ret = (*pSetTimer)(hWnd, nIDEvent, uShiftedElapse, lpTimerFunc); if(ret) dxw.PushTimer(hWnd, ret, uElapse, lpTimerFunc); OutTraceDW("SetTimer: IDEvent=%x ret=%x\n", nIDEvent, ret); return ret; } BOOL WINAPI extKillTimer(HWND hWnd, UINT_PTR uIDEvent) { BOOL ret; OutTraceDW("KillTimer: hwnd=%x IDEvent=%x\n", hWnd, uIDEvent); ret = (*pKillTimer)(hWnd, uIDEvent); OutTraceDW("KillTimer: ret=%x\n", ret); if(ret) dxw.PopTimer(hWnd, uIDEvent); return ret; } BOOL WINAPI extGetUpdateRect(HWND hWnd, LPRECT lpRect, BOOL bErase) { BOOL ret; OutTraceDW("GetUpdateRect: hwnd=%x Erase=%x\n", hWnd, bErase); ret = (*pGetUpdateRect)(hWnd, lpRect, bErase); if(ret){ OutTraceDW("GetUpdateRect: rect=(%d,%d)-(%d,%d)\n", lpRect->left, lpRect->top, lpRect->right, lpRect->bottom); if(dxw.IsFullScreen()){ dxw.UnmapClient(lpRect); OutTraceDW("GetUpdateRect: FIXED rect=(%d,%d)-(%d,%d)\n", lpRect->left, lpRect->top, lpRect->right, lpRect->bottom); } } else OutTraceE("GetUpdateRect ERROR: err=%d\n", GetLastError()); return ret; } BOOL WINAPI extGetCursorInfo(PCURSORINFO pci) { BOOL ret; OutTraceDW("GetCursorInfo\n"); ret = (*pGetCursorInfo)(pci); if(ret){ OutTraceDW("GetCursorInfo: flags=%x hcursor=%x pos=(%d,%d)\n", pci->flags, pci->hCursor, pci->ptScreenPos.x, pci->ptScreenPos.y); if(dxw.IsFullScreen()){ dxw.UnmapClient(&(pci->ptScreenPos)); OutTraceDW("GetCursorInfo: FIXED pos=(%d,%d)\n", pci->ptScreenPos.x, pci->ptScreenPos.y); } } else OutTraceE("GetCursorInfo ERROR: err=%d\n", GetLastError()); return ret; } HWND WINAPI extWindowFromPoint(POINT Point) { HWND ret; OutTraceDW("WindowFromPoint: point=(%d,%d)\n", Point.x, Point.y); if(dxw.IsFullScreen()){ dxw.MapWindow(&Point); // v2.03.69 fix OutTraceDW("WindowFromPoint: FIXED point=(%d,%d)\n", Point.x, Point.y); } ret = (*pWindowFromPoint)(Point); OutTraceDW("WindowFromPoint: hwnd=%x\n", ret); return ret; } HWND WINAPI extChildWindowFromPoint(HWND hWndParent, POINT Point) { HWND ret; OutTraceDW("ChildWindowFromPoint: hWndParent=%x point=(%d,%d)\n", hWndParent, Point.x, Point.y); if(dxw.IsDesktop(hWndParent) && dxw.IsFullScreen() && dxw.Windowize){ dxw.MapClient(&Point); OutTraceDW("ChildWindowFromPoint: FIXED point=(%d,%d)\n", Point.x, Point.y); } ret = (*pChildWindowFromPoint)(hWndParent, Point); OutTraceDW("ChildWindowFromPoint: hwnd=%x\n", ret); return ret; } HWND WINAPI extChildWindowFromPointEx(HWND hWndParent, POINT Point, UINT uFlags) { HWND ret; OutTraceDW("ChildWindowFromPoint: hWndParent=%x point=(%d,%d) flags=%x\n", hWndParent, Point.x, Point.y, uFlags); if(dxw.IsDesktop(hWndParent) && dxw.IsFullScreen() && dxw.Windowize){ dxw.UnmapClient(&Point); OutTraceDW("ChildWindowFromPointEx: FIXED point=(%d,%d)\n", Point.x, Point.y); } ret = (*pChildWindowFromPointEx)(hWndParent, Point, uFlags); OutTraceDW("ChildWindowFromPointEx: hwnd=%x\n", ret); return ret; } BOOL extGetMonitorInfo(HMONITOR hMonitor, LPMONITORINFO lpmi, GetMonitorInfo_Type pGetMonitorInfo) { BOOL res; OutTraceDW("GetMonitorInfo: hMonitor=%x mi=MONITORINFO%s\n", hMonitor, lpmi->cbSize==sizeof(MONITORINFO)?"":"EX"); res=(*pGetMonitorInfo)(hMonitor, lpmi); //v2.03.15 - must fix the coordinates also in case of error: that may depend on the windowed mode. if(dxw.Windowize){ OutTraceDW("GetMonitorInfo: FIX Work=(%d,%d)-(%d,%d) Monitor=(%d,%d)-(%d,%d) -> (%d,%d)-(%d,%d)\n", lpmi->rcWork.left, lpmi->rcWork.top, lpmi->rcWork.right, lpmi->rcWork.bottom, lpmi->rcMonitor.left, lpmi->rcMonitor.top, lpmi->rcMonitor.right, lpmi->rcMonitor.bottom, 0, 0, dxw.GetScreenWidth(), dxw.GetScreenHeight()); lpmi->rcWork = dxw.GetScreenRect(); lpmi->rcMonitor = dxw.GetScreenRect(); return TRUE; } if(res) { OutTraceDW("GetMonitorInfo: Work=(%d,%d)-(%d,%d) Monitor=(%d,%d)-(%d,%d)\n", lpmi->rcWork.left, lpmi->rcWork.top, lpmi->rcWork.right, lpmi->rcWork.bottom, lpmi->rcMonitor.left, lpmi->rcMonitor.top, lpmi->rcMonitor.right, lpmi->rcMonitor.bottom); } else { OutTraceE("GetMonitorInfo: ERROR err=%d\n", GetLastError()); } return res; } BOOL WINAPI extGetMonitorInfoA(HMONITOR hMonitor, LPMONITORINFO lpmi) { return extGetMonitorInfo(hMonitor, lpmi, pGetMonitorInfoA); } BOOL WINAPI extGetMonitorInfoW(HMONITOR hMonitor, LPMONITORINFO lpmi) { return extGetMonitorInfo(hMonitor, lpmi, pGetMonitorInfoW); } int WINAPI extGetUpdateRgn(HWND hWnd, HRGN hRgn, BOOL bErase) { int regionType; regionType=(*pGetUpdateRgn)(hWnd, hRgn, bErase); OutTraceDW("GetUpdateRgn: hwnd=%x hrgn=%x erase=%x regionType=%x(%s)\n", hWnd, hRgn, bErase, regionType, ExplainRegionType(regionType)); if(dxw.IsFullScreen()){ if(regionType == SIMPLEREGION){ RECT rc; if(!pGetRgnBox) pGetRgnBox=GetRgnBox; regionType = (*pGetRgnBox)(hRgn, &rc); OutTraceDW("GetUpdateRgn: regionType=%x(%s) box=(%d,%d)-(%d,%d)\n", regionType, ExplainRegionType(regionType), rc.left, rc.top, rc.right, rc.bottom); if(regionType == SIMPLEREGION){ dxw.UnmapClient(&rc); if(SetRectRgn(hRgn, rc.left, rc.top, rc.right, rc.bottom )){ // success OutTraceDW("GetUpdateRgn: FIXED box=(%d,%d)-(%d,%d)\n", rc.left, rc.top, rc.right, rc.bottom); } } } #if 0 if(regionType == COMPLEXREGION){ RECT rc; if(!pGetRgnBox) pGetRgnBox=GetRgnBox; regionType = (*pGetRgnBox)(hRgn, &rc); OutTraceDW("GetUpdateRgn: regionType=%x(%s) box=(%d,%d)-(%d,%d)\n", regionType, ExplainRegionType(regionType), rc.left, rc.top, rc.right, rc.bottom); if(regionType == COMPLEXREGION){ //dxw.UnmapClient(&rc); //if(SetRectRgn(hRgn, rc.left, rc.top, rc.right, rc.bottom )){ if(SetRectRgn(hRgn, 0, 0, dxw.GetScreenWidth(), dxw.GetScreenHeight())){ // success OutTraceDW("GetUpdateRgn: FIXED box=(%d,%d)-(%d,%d)\n", rc.left, rc.top, rc.right, rc.bottom); } } } #endif } return regionType; } #ifdef TRACEPALETTE UINT WINAPI extGetDIBColorTable(HDC hdc, UINT uStartIndex, UINT cEntries, RGBQUAD *pColors) { UINT ret; OutTraceDW("GetDIBColorTable: hdc=%x start=%d entries=%d\n", hdc, uStartIndex, cEntries); //if((OBJ_DC == (*pGetObjectType)(hdc)) && (dxw.dwFlags1 & EMULATESURFACE)){ // //extern PALETTEENTRY PalEntries[256]; // extern DWORD *PaletteEntries; // if((uStartIndex+cEntries) > 256) cEntries = 256 - uStartIndex; // for(UINT i=0; i 256) cEntries = 256 - uStartIndex; // for(UINT i=0; ileft, lpRect->top, lpRect->right, lpRect->bottom); else OutTrace("ValidateRect: hwnd=%x rect=NULL\n", hWnd); } ret = (*pValidateRect)(hWnd, lpRect); return ret; } int WINAPI extGetWindowTextA(HWND hWnd, LPTSTR lpString, int nMaxCount) { // purpose of this wrapped call is to clear the FPS indicator (format " ~ (%d FPS)") // from the window title, if present. It crashes games such as "Panzer General 3 Scorched Earth" // when FPS on window title is activated. int ret; OutTraceDW("GetWindowTextA: hwnd=%x MaxCount=%d\n", hWnd, nMaxCount); ret=(*pGetWindowTextA)(hWnd, lpString, nMaxCount); if(ret) OutTraceDW("GetWindowTextA: ret=%d String=\"%s\"\n", ret, lpString); if (ret && (dxw.dwFlags2 & SHOWFPS) && dxw.ishWndFPS(hWnd)){ char *p; p=strstr(lpString, " ~ ("); if(p){ *p = NULL; ret = strlen(lpString); OutTraceDW("GetWindowTextA: FIXED ret=%d String=\"%s\"\n", ret, lpString); } } return ret; } #endif BOOL WINAPI extBringWindowToTop(HWND hwnd) { BOOL res; OutTraceDW("BringWindowToTop: hwnd=%x\n", hwnd); if(dxw.dwFlags5 & UNLOCKZORDER) return TRUE; res=(*pBringWindowToTop)(hwnd); return res; } BOOL WINAPI extSetForegroundWindow(HWND hwnd) { BOOL res; OutTraceDW("SetForegroundWindow: hwnd=%x\n", hwnd); if(dxw.dwFlags5 & UNLOCKZORDER) return TRUE; res=(*pSetForegroundWindow)(hwnd); return res; } /* HOOKPROC glpMouseHookProcessFunction; LRESULT CALLBACK extMouseHookProc(int code, WPARAM wParam, LPARAM lParam) { LRESULT ret; OutTrace("HookProc intercepted: code=%x wParam=%x lParam=%x\n", code, wParam, lParam); MOUSEHOOKSTRUCT * pMouseStruct = (MOUSEHOOKSTRUCT *)lParam; if (pMouseStruct != NULL){ dxw.UnmapWindow(&(pMouseStruct->pt)); } ret= (*glpMouseHookProcessFunction)(code, wParam, lParam); return ret; } */ HOOKPROC glpMessageHookProcessFunction; HOOKPROC glpMouseHookProcessFunction; HOOKPROC glpMouseHookProcessFunctionLL; LRESULT CALLBACK extMessageHookProc(int code, WPARAM wParam, LPARAM lParam) { LRESULT ret; OutTrace("MessageHookProc: code=%x wParam=%x lParam=%x\n", code, wParam, lParam); MSG * pMessage = (MSG *)lParam; ret = NULL; if(pMessage){ UINT message = pMessage->message; if ((message >= 0x600) || // custom messages ((message >= WM_KEYFIRST) && (message <= WM_KEYLAST)) || // keyboard messages ((message >= WM_MOUSEFIRST) && (message <= WM_MOUSELAST)) // mouse messages ) ret = (*glpMessageHookProcessFunction)(code, wParam, lParam); } return ret; } static POINT FixMousePoint(POINT pt) { dxw.UnmapWindow(&pt); if(pt.x < 0) pt.x = 0; if(pt.x >= (LONG)dxw.GetScreenWidth()) pt.x = dxw.GetScreenWidth()-1; if(pt.y < 0) pt.y = 0; if(pt.y >= (LONG)dxw.GetScreenHeight()) pt.y = dxw.GetScreenHeight()-1; return pt; } LRESULT CALLBACK extMouseHookProc(int code, WPARAM wParam, LPARAM lParam) { OutTraceC("MouseHookProc: code=%x wParam=%x lParam=%x\n", code, wParam, lParam); if(code < 0) return CallNextHookEx(0, code, wParam, lParam); if(lParam){ MOUSEHOOKSTRUCT MouseStruct = *(MOUSEHOOKSTRUCT *)lParam; MouseStruct.pt = FixMousePoint(MouseStruct.pt); OutTraceC("MouseHookProc: event=%s pos=(%d,%d)->(%d,%d)\n", ExplainWinMessage(wParam), ((MOUSEHOOKSTRUCT *)lParam)->pt.x, ((MOUSEHOOKSTRUCT *)lParam)->pt.y, MouseStruct.pt.x, MouseStruct.pt.y); return (*glpMouseHookProcessFunction)(code, wParam, (LPARAM)&MouseStruct); } return (*glpMouseHookProcessFunction)(code, wParam, lParam); } LRESULT CALLBACK extMouseHookProcLL(int code, WPARAM wParam, LPARAM lParam) { OutTraceC("MouseHookProcLL: code=%x wParam=%x lParam=%x\n", code, wParam, lParam); if(code < 0) return CallNextHookEx(0, code, wParam, lParam); if(lParam){ MSLLHOOKSTRUCT MouseStruct = *(MSLLHOOKSTRUCT *)lParam; MouseStruct.pt = FixMousePoint(MouseStruct.pt); OutTraceC("MouseHookProcLL: event=%s pos=(%d,%d)->(%d,%d)\n", ExplainWinMessage(wParam), ((MSLLHOOKSTRUCT *)lParam)->pt.x, ((MSLLHOOKSTRUCT *)lParam)->pt.y, MouseStruct.pt.x, MouseStruct.pt.y); return (*glpMouseHookProcessFunctionLL)(code, wParam, (LPARAM)&MouseStruct); } return (*glpMouseHookProcessFunctionLL)(code, wParam, lParam); } static HHOOK WINAPI extSetWindowsHookEx(SetWindowsHookEx_Type pSetWindowsHookEx, int idHook, HOOKPROC lpfn, HINSTANCE hMod, DWORD dwThreadId) { HHOOK ret; OutTraceDW("SetWindowsHookEx: id=%x threadid=%x\n", idHook, dwThreadId); if(dxw.dwFlags5 & EASPORTSHACK){ OutTraceDW("SetWindowsHookEx: EASPORTSHACK bypass active\n"); if(idHook == WH_MOUSE) return NULL; if(idHook == WH_GETMESSAGE) { glpMessageHookProcessFunction = lpfn; lpfn=extMessageHookProc; } } // v2.03.39: "One Must Fall Battlegrounds" keyboard fix if((idHook == WH_KEYBOARD) && (dwThreadId == NULL)) { dwThreadId = GetCurrentThreadId(); OutTraceDW("SetWindowsHookEx: fixing WH_KEYBOARD thread=0->%x\n", dwThreadId); } // v2.04.13: "Starsiege" mouse control fix if((idHook == WH_CBT) && (dwThreadId == NULL)) { dwThreadId = GetCurrentThreadId(); OutTraceDW("SetWindowsHookEx: fixing WH_CBT thread=0->%x\n", dwThreadId); } // v2.03.54: disable the disable Alt-Tab fix if((dxw.dwFlags7 & DISABLEDISABLEALTTAB) && (idHook == WH_KEYBOARD_LL)) { OutTraceDW("SetWindowsHookEx: DISABLEDISABLEALTTAB bypass active\n"); return NULL; } if(dxw.dwFlags8 & FIXMOUSEHOOK){ if(idHook == WH_MOUSE){ OutTraceDW("SetWindowsHookEx: FIXMOUSEHOOK filter active on WH_MOUSE\n"); glpMouseHookProcessFunction = lpfn; lpfn=extMouseHookProc; } if (idHook == WH_MOUSE_LL){ OutTraceDW("SetWindowsHookEx: FIXMOUSEHOOK filter active on WH_MOUSE_LL\n"); glpMouseHookProcessFunctionLL = lpfn; lpfn=extMouseHookProcLL; } } ret=(*pSetWindowsHookEx)(idHook, lpfn, hMod, dwThreadId); return ret; } HHOOK WINAPI extSetWindowsHookExA(int idHook, HOOKPROC lpfn, HINSTANCE hMod, DWORD dwThreadId) { return extSetWindowsHookEx(pSetWindowsHookExA, idHook, lpfn, hMod, dwThreadId); } HHOOK WINAPI extSetWindowsHookExW(int idHook, HOOKPROC lpfn, HINSTANCE hMod, DWORD dwThreadId) { return extSetWindowsHookEx(pSetWindowsHookExW, idHook, lpfn, hMod, dwThreadId); } HRESULT WINAPI extMessageBoxTimeoutA(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType, WORD wLanguageId, DWORD dwMilliseconds) { HRESULT res; if(1) dwMilliseconds=1000; res=(*pMessageBoxTimeoutA)(hWnd, lpText, lpCaption, uType, wLanguageId, dwMilliseconds); return res; } HRESULT WINAPI extMessageBoxTimeoutW(HWND hWnd, LPCWSTR lpText, LPCWSTR lpCaption, UINT uType, WORD wLanguageId, DWORD dwMilliseconds) { HRESULT res; if(1) dwMilliseconds=1000; res=(*pMessageBoxTimeoutW)(hWnd, lpText, lpCaption, uType, wLanguageId, dwMilliseconds); return res; } HDESK WINAPI extCreateDesktop( LPCTSTR lpszDesktop, LPCTSTR lpszDevice, DEVMODE *pDevmode, DWORD dwFlags, ACCESS_MASK dwDesiredAccess, LPSECURITY_ATTRIBUTES lpsa) { //OutTrace("CreateDesktop: SUPPRESS Desktop=%s Device=%s flags=%x access=%x\n", lpszDesktop, lpszDevice, dwFlags, dwDesiredAccess); OutTraceDW("CreateDesktop: SUPPRESS flags=%x access=%x\n", dwFlags, dwDesiredAccess); return (HDESK)0xDEADBEEF; // fake handle //return (HDESK)NULL; // fake handle } BOOL WINAPI extSwitchDesktop(HDESK hDesktop) { OutTraceDW("SwitchDesktop: SUPPRESS hDesktop=%x\n", hDesktop); return TRUE; } HDESK WINAPI extOpenDesktop(LPTSTR lpszDesktop, DWORD dwFlags, BOOL fInherit, ACCESS_MASK dwDesiredAccess) { OutTraceDW("OpenDesktop: SUPPRESS flags=%x access=%x\n", dwFlags, dwDesiredAccess); return (HDESK)0xDEADBEEF; // fake handle //return (HDESK)NULL; // fake handle } BOOL WINAPI extCloseDesktop(HDESK hDesktop) { OutTraceDW("CloseDesktop: SUPPRESS hDesktop=%x\n", hDesktop); return TRUE; } INT_PTR WINAPI extDialogBoxParamA(HINSTANCE hInstance, LPCTSTR lpTemplateName, HWND hWndParent, DLGPROC lpDialogFunc, LPARAM dwInitParam) { BOOL ret; OutTraceDW("DialogBoxParamA: FullScreen=%x TemplateName=\"%s\" WndParent=%x\n", dxw.IsFullScreen(), sTemplateName(lpTemplateName), hWndParent); // attempt to fix "Colonial Project 2" dialog. Doesn't work, but it could be ok..... //if(FullScreen && dxw.IsRealDesktop(hWndParent)){ // OutTraceDW("DialogBoxParamA: remap WndParent=%x->%x\n", hWndParent, dxw.GethWnd()); // hWndParent = dxw.GethWnd(); //} //InMainWinCreation++; ret = (*pDialogBoxParamA)(hInstance, lpTemplateName, hWndParent, lpDialogFunc, dwInitParam); //InMainWinCreation--; OutTraceDW("DialogBoxParamA: ret=%x\n", ret); return ret; } BOOL WINAPI extIsZoomed(HWND hWnd) { BOOL ret; ret = (*pIsZoomed)(hWnd); OutTraceDW("IsZoomed: hwnd=%x ret=%x\n", hWnd, ret); //if(dxw.IsFullScreen()) ret = FALSE; return ret; } BOOL WINAPI extIsIconic(HWND hWnd) { BOOL ret; ret = (*pIsIconic)(hWnd); OutTraceDW("IsIconic: hwnd=%x ret=%x\n", hWnd, ret); //return FALSE; return ret; } BOOL extScrollWindow(HWND hWnd, int XAmount, int YAmount, const RECT *lpRect, const RECT *lpClipRect) { RECT Rect, ClipRect; BOOL res; OutTraceDW("ScrollWindow: hwnd=%x amount=(%d,%d) rect=(%d,%d)-(%d,%d) clip=(%d,%d)-(%d,%d)\n", hWnd, XAmount, YAmount, lpRect->left, lpRect->top, lpRect->right, lpRect->bottom, lpClipRect->left, lpClipRect->top, lpClipRect->right, lpClipRect->bottom); Rect = *lpRect; ClipRect = *lpClipRect; if(dxw.Windowize && dxw.IsFullScreen()){ dxw.MapClient(&XAmount, &YAmount); dxw.MapClient(&Rect); dxw.MapClient(&ClipRect); } res=(*pScrollWindow)(hWnd, XAmount, YAmount, (const RECT *)&Rect, (const RECT *)&ClipRect); if(!res) OutTraceE("ScrollWindow ERROR: err=%d\n", GetLastError()); return res; } // commented out, too dangerous. Known side effects: // 1) Recursion on HOT PATCH mode (or forever loop?) // 2) blanked dialog boxes in Galapagos // In any case, if useful somehow, it should not be hooked on GDImode != NONE condition #if 0 HWND WINAPI extGetParent(HWND hWnd) { // Beware: can cause recursion on HOT PATCH mode HWND ret; ret = (*pGetParent)(hWnd); OutTraceB("GetParent: hwnd=%x ret=%x\n", hWnd, ret); if(dxw.IsFullScreen()){ if(ret == dxw.GethWnd()) { OutTraceB("GetParent: setting desktop reached\n"); ret = 0; // simulate reaching the desktop } } return ret; } #else // just proxy, but the pGetParent pointer must stay initialized // P.s.so far, GetParent wrapping is useless, could be eliminated, but // replacing *pGetParent with unhooked GetParent invokations. HWND WINAPI extGetParent(HWND hWnd) { return (*pGetParent)(hWnd); } #endif BOOL WINAPI extInvalidateRgn(HWND hWnd, HRGN hRgn, BOOL bErase) { OutTraceDW("InvalidateRgn: hwnd=%x hrgn=%x erase=%x\n", hWnd, hRgn, bErase); if(dxw.IsFullScreen()){ if (dxw.IsRealDesktop(hWnd) && bErase) return true; } return (*pInvalidateRgn)(hWnd, hRgn, bErase); } BOOL WINAPI extDrawIcon(HDC hdc, int X, int Y, HICON hIcon) { BOOL ret; OutTraceDW("DrawIcon: hdcdest=%x pos=(%d,%d) hicon=%x\n", hdc, X, Y, hIcon); if(dxw.IsToRemap(hdc)){ switch(dxw.GDIEmulationMode){ case GDIMODE_STRETCHED: dxw.MapClient(&X, &Y); OutTraceDW("OffsetRgn: fixed STRETCHED pos=(%d,%d)\n", X, Y); break; case GDIMODE_SHAREDDC: sdc.GetPrimaryDC(hdc); ret=(*pDrawIcon)(sdc.GetHdc(), X, Y, hIcon); sdc.PutPrimaryDC(hdc, TRUE); return ret; break; default: break; } } ret = (*pDrawIcon)(hdc, X, Y, hIcon); if(!ret) OutTraceE("DrawIcon ERROR: err=%d\n", GetLastError()); return ret; } // not working in HOT PATCH mode BOOL WINAPI extDrawIconEx( HDC hdc, int xLeft, int yTop, HICON hIcon, int cxWidth, int cyWidth, UINT istepIfAniCur, HBRUSH hbrFlickerFreeDraw, UINT diFlags) { BOOL ret; OutTraceDW("DrawIconEx: hdc=%x pos=(%d,%d) hicon=%x size=(%d,%d) istep=%x flags=%x\n", hdc, xLeft, yTop, hIcon, cxWidth, cyWidth, istepIfAniCur, diFlags); if(dxw.IsToRemap(hdc)){ switch(dxw.GDIEmulationMode){ case GDIMODE_STRETCHED: dxw.MapClient(&xLeft, &yTop, &cxWidth, &cyWidth); OutTraceDW("DrawIconEx: fixed STRETCHED pos=(%d,%d) size=(%d,%d)\n", xLeft, yTop, cxWidth, cyWidth); break; case GDIMODE_SHAREDDC: sdc.GetPrimaryDC(hdc); ret=(*pDrawIconEx)(sdc.GetHdc(), xLeft, yTop, hIcon, cxWidth, cyWidth, istepIfAniCur, hbrFlickerFreeDraw, diFlags); sdc.PutPrimaryDC(hdc, TRUE, xLeft, yTop, cxWidth, cyWidth); return ret; break; default: break; } } ret = (*pDrawIconEx)(hdc, xLeft, yTop, hIcon, cxWidth, cyWidth, istepIfAniCur, hbrFlickerFreeDraw, diFlags); if(!ret) OutTraceE("DrawIconEx ERROR: err=%d\n", GetLastError()); return ret; } BOOL WINAPI extDrawCaption(HWND hwnd, HDC hdc, LPCRECT lprc, UINT uFlags) { BOOL ret; OutTraceDW("DrawCaption: hwnd=%x hdc=%x rect=(%d,%d)-(%d,%d) flags=%x\n", hwnd, hdc, lprc->left, lprc->top, lprc->right, lprc->bottom, uFlags); if(dxw.IsToRemap(hdc)){ switch(dxw.GDIEmulationMode){ case GDIMODE_STRETCHED: dxw.MapClient((LPRECT)lprc); OutTraceDW("DrawIconEx: fixed STRETCHED rect=(%d,%d)-(%d,%d)\n", lprc->left, lprc->top, lprc->right, lprc->bottom); break; case GDIMODE_SHAREDDC: sdc.GetPrimaryDC(hdc); ret=(*pDrawCaption)(hwnd, sdc.GetHdc(), lprc, uFlags); sdc.PutPrimaryDC(hdc, TRUE, lprc->left, lprc->top, lprc->right, lprc->bottom); return ret; break; default: break; } } ret = (*pDrawCaption)(hwnd, hdc, lprc, uFlags); if(!ret) OutTraceE("DrawCaption ERROR: err=%d\n", GetLastError()); return ret; } BOOL WINAPI extPaintDesktop(HDC hdc) { BOOL ret; OutTraceDW("PaintDesktop: hdc=%x\n", hdc); if(dxw.IsToRemap(hdc)){ switch(dxw.GDIEmulationMode){ case GDIMODE_SHAREDDC: sdc.GetPrimaryDC(hdc); ret=(*pPaintDesktop)(sdc.GetHdc()); sdc.PutPrimaryDC(hdc, TRUE); return ret; break; default: break; } } ret = (*pPaintDesktop)(hdc); if(!ret) OutTraceE("PaintDesktop ERROR: err=%d\n", GetLastError()); return ret; } char *ExplainMouseMoveFlags(DWORD c) { static char eb[256]; unsigned int l; strcpy(eb,"MOUSEEVENTF_"); if (c & MOUSEEVENTF_MOVE) strcat(eb, "MOVE+"); if (c & MOUSEEVENTF_LEFTDOWN) strcat(eb, "LEFTDOWN+"); if (c & MOUSEEVENTF_LEFTUP) strcat(eb, "LEFTUP+"); if (c & MOUSEEVENTF_RIGHTDOWN) strcat(eb, "RIGHTDOWN+"); if (c & MOUSEEVENTF_RIGHTUP) strcat(eb, "RIGHTUP+"); if (c & MOUSEEVENTF_MIDDLEDOWN) strcat(eb, "MIDDLEDOWN+"); if (c & MOUSEEVENTF_MIDDLEUP) strcat(eb, "MIDDLEUP+"); if (c & MOUSEEVENTF_XDOWN) strcat(eb, "XDOWN+"); if (c & MOUSEEVENTF_XUP) strcat(eb, "XUP+"); if (c & MOUSEEVENTF_WHEEL) strcat(eb, "WHEEL+"); if (c & MOUSEEVENTF_HWHEEL) strcat(eb, "HWHEEL+"); if (c & MOUSEEVENTF_ABSOLUTE) strcat(eb, "ABSOLUTE+"); l=strlen(eb); if (l>strlen("MOUSEEVENTF_")) eb[l-1]=0; // delete last '+' if any else eb[0]=0; return(eb); } VOID WINAPI extmouse_event(DWORD dwFlags, DWORD dx, DWORD dy, DWORD dwData, ULONG_PTR dwExtraInfo) { OutTrace("mouse_event: flags=%x(%s) xy=(%d,%d) data=%x, extrainfo=%lx\n", dwFlags, ExplainMouseMoveFlags(dwFlags), dx, dy, dwData, dwExtraInfo); if((dwFlags & MOUSEEVENTF_MOVE) && (dxw.dwFlags2 & KEEPCURSORFIXED)) { OutTraceDW("mouse_event: SUPPRESS mouse move\n"); return; } if((dwFlags & MOUSEEVENTF_ABSOLUTE) && dxw.Windowize && (dxw.dwFlags1 & MODIFYMOUSE)){ // ???? untested ...... //dxw.MapClient((int *)&dx, (int *)&dy); POINT cursor; cursor.x = dx; cursor.y = dy; cursor = dxw.FixCursorPos(cursor); dx = cursor.x; dy = cursor.y; } return (*pmouse_event)(dwFlags, dx, dy, dwData, dwExtraInfo); } BOOL WINAPI extShowScrollBar(HWND hWnd, int wBar, BOOL bShow) { BOOL ret; OutTraceDW("ShowScrollBar: hwnd=%x wBar=%x show=%x\n", hWnd, wBar, bShow); if(dxw.Windowize && dxw.IsRealDesktop(hWnd)) hWnd=dxw.GethWnd(); ret=(*pShowScrollBar)(hWnd, wBar, bShow); if(!ret) OutTraceE("ShowScrollBar ERROR: err=%d\n", GetLastError()); return ret; } BOOL WINAPI extDrawMenuBar(HWND hWnd) { BOOL ret; OutTraceDW("DrawMenuBar: hwnd=%x\n", hWnd); if(dxw.Windowize && dxw.IsRealDesktop(hWnd)) hWnd=dxw.GethWnd(); ret=(*pDrawMenuBar)(hWnd); if(!ret) OutTraceE("DrawMenuBar ERROR: err=%d\n", GetLastError()); return ret; } #ifdef TRANSLATEMESSAGEHOOK BOOL WINAPI extTranslateMessage(MSG *pMsg) { BOOL ret; OutTraceDW("TranslateMessage: type=%x pos=(%d,%d)\n", pMsg->message, pMsg->pt.x, pMsg->pt.y); if(dxw.Windowize){ pMsg->pt=dxw.ScreenToClient(pMsg->pt); pMsg->pt=dxw.FixCursorPos(pMsg->pt); //pMsg->pt.x *= 4; //pMsg->pt.y *= 4; //if((pMsg->message <= WM_MOUSELAST) && (pMsg->message >= WM_MOUSEFIRST)) // pMsg->lParam = MAKELPARAM(pMsg->pt.x, pMsg->pt.y); OutTraceDW("TranslateMessage: new pos=(%d,%d)\n", pMsg->pt.x, pMsg->pt.y); } ret=(*pTranslateMessage)(pMsg); return ret; } #endif BOOL WINAPI extEnumDisplayDevicesA(LPCSTR lpDevice, DWORD iDevNum, PDISPLAY_DEVICE lpDisplayDevice, DWORD dwFlags) { BOOL ret; OutTraceDW("EnumDisplayDevicesA: device=%s devnum=%i flags=%x\n", lpDevice, iDevNum, dwFlags); if((dxw.dwFlags2 & HIDEMULTIMONITOR) && (iDevNum > 0)) { OutTraceDW("EnumDisplayDevicesA: HIDEMULTIMONITOR devnum=%i\n", iDevNum); return 0; } ret = (*pEnumDisplayDevicesA)(lpDevice, iDevNum, lpDisplayDevice, dwFlags); if(ret){ OutTrace("EnumDisplayDevicesA: cb=%x devname=%s devstring=%s stateflags=%x\n", lpDisplayDevice->cb, lpDisplayDevice->DeviceName, lpDisplayDevice->DeviceString, lpDisplayDevice->StateFlags); } else{ OutTraceE("EnumDisplayDevicesA ERROR: err=%d\n", GetLastError()); } return ret; } BOOL WINAPI extEnumDisplayDevicesW(LPCWSTR lpDevice, DWORD iDevNum, PDISPLAY_DEVICEW lpDisplayDevice, DWORD dwFlags) { BOOL ret; OutTraceDW("EnumDisplayDevicesW: device=%ls devnum=%i flags=%x\n", lpDevice, iDevNum, dwFlags); if((dxw.dwFlags2 & HIDEMULTIMONITOR) && (iDevNum > 0)) { OutTraceDW("EnumDisplayDevicesW: HIDEMULTIMONITOR devnum=%i\n", iDevNum); return 0; } ret = (*pEnumDisplayDevicesW)(lpDevice, iDevNum, lpDisplayDevice, dwFlags); if(ret){ OutTraceDW("EnumDisplayDevicesW: cb=%x devname=%ls devstring=%ls stateflags=%x\n", lpDisplayDevice->cb, lpDisplayDevice->DeviceName, lpDisplayDevice->DeviceString, lpDisplayDevice->StateFlags); } else{ OutTraceE("EnumDisplayDevicesW ERROR: err=%d\n", GetLastError()); } return ret; } INT_PTR WINAPI extDialogBoxIndirectParamA(HINSTANCE hInstance, LPCDLGTEMPLATE hDialogTemplate, HWND hWndParent, DLGPROC lpDialogFunc, LPARAM dwInitParam) { //INT_PTR ret; // MessageBox(0, "DialogBoxIndirectParamA", "step", 0); OutTraceDW("DialogBoxIndirectParamA: hInstance=%x pos=(%d,%d) size=(%dx%d) hWndParent=%x, lpDialogFunc=%x dwInitParam=%x\n", hInstance, hDialogTemplate->x, hDialogTemplate->y, hDialogTemplate->cx, hDialogTemplate->cy, hWndParent, lpDialogFunc, dwInitParam); return (*pDialogBoxIndirectParamA)(hInstance, hDialogTemplate, hWndParent, lpDialogFunc, dwInitParam); } HBITMAP WINAPI extLoadBitmapA(HINSTANCE hInstance, LPCSTR lpBitmapName) { HBITMAP ret; OutTraceDW("LoadBitmapA: hinst=%x name=%s\n", hInstance, lpBitmapName); ret = (*pLoadBitmapA)(hInstance, lpBitmapName); if(ret){ OutTraceDW("LoadBitmapA: hbitmap=%x\n", ret); } else{ OutTraceE("LoadBitmapA: ERROR err=%d\n", GetLastError()); } return ret; } BOOL WINAPI extEnumWindows(WNDENUMPROC lpEnumFunc, LPARAM lParam) { OutTraceDW("EnumerateWindows\n"); if(dxw.dwFlags8 & WININSULATION){ OutTraceDW("EnumerateWindows: BYPASS\n"); return TRUE; } return (*pEnumWindows)(lpEnumFunc, lParam); } static void RedirectCoordinates(LPRECT lpRect) { WINDOWPOS wp; dxw.CalculateWindowPos(NULL, dxw.GetScreenWidth(), dxw.GetScreenHeight(), &wp); lpRect->left = wp.x; lpRect->right = wp.x + wp.cx; lpRect->top = wp.y; lpRect->bottom = wp.y + wp.cy; OutTraceDW("AdjustWindowRect: FIX rect=(%d,%d)-(%d,%d)\n", lpRect->left, lpRect->top, lpRect->right, lpRect->bottom); } BOOL WINAPI extAdjustWindowRect(LPRECT lpRect, DWORD dwStyle, BOOL bMenu) { BOOL ret; OutTraceDW("AdjustWindowRect: IN rect=(%d,%d)-(%d,%d) style=%x(%s) menu=%x\n", lpRect->left, lpRect->top, lpRect->right, lpRect->bottom, dwStyle, ExplainStyle(dwStyle), bMenu); if(dxw.Windowize && (dxw.dwFlags8 & FIXADJUSTWINRECT)) RedirectCoordinates(lpRect); ret = pAdjustWindowRect(lpRect, dwStyle, bMenu); if(ret){ OutTraceDW("AdjustWindowRect: OUT rect=(%d,%d)-(%d,%d)\n", lpRect->left, lpRect->top, lpRect->right, lpRect->bottom); } else{ OutTraceE("AdjustWindowRect ERROR: err=%d\n", GetLastError()); } return ret; } BOOL WINAPI extAdjustWindowRectEx(LPRECT lpRect, DWORD dwStyle, BOOL bMenu, DWORD dwExStyle) { BOOL ret; OutTraceDW("AdjustWindowRectEx: IN rect=(%d,%d)-(%d,%d) style=%x(%s) menu=%x exstyle=%x(%s)\n", lpRect->left, lpRect->top, lpRect->right, lpRect->bottom, dwStyle, ExplainStyle(dwStyle), bMenu, dwExStyle, ExplainExStyle(dwExStyle)); if(dxw.Windowize && (dxw.dwFlags8 & FIXADJUSTWINRECT)) RedirectCoordinates(lpRect); ret = pAdjustWindowRectEx(lpRect, dwStyle, bMenu, dwExStyle); if(ret){ OutTraceDW("AdjustWindowRectEx: OUT rect=(%d,%d)-(%d,%d)\n", lpRect->left, lpRect->top, lpRect->right, lpRect->bottom); } else{ OutTraceE("AdjustWindowRectEx ERROR: err=%d\n", GetLastError()); } return ret; } BOOL WINAPI extValidateRgn(HWND hwnd, HRGN hrgn) { BOOL ret; OutTraceDW("ValidateRgn: hwnd=%x hrgn=%x\n", hwnd, hrgn); ret = (*pValidateRgn)(hwnd, hrgn); return ret; } // To do: // GrayStringA // GrayStringW ================================================ FILE: dll/virtualdc.cpp ================================================ #define _CRT_SECURE_NO_WARNINGS #define SYSLIBNAMES_DEFINES #include #include "dxwnd.h" #include "dxwcore.hpp" #include "syslibs.h" #include "dxhelper.h" #include "resource.h" #include "hddraw.h" extern GetDC_Type pGetDC; extern ReleaseDC_Type pReleaseDC; extern HandleDDThreadLock_Type pReleaseDDThreadLock; #define OutTraceTMP OutTrace HDC dxwVDC::GetPrimaryDC() { HDC PrimaryDC; LPDIRECTDRAWSURFACE lpDDSPrim; PrimaryDC = NULL; lpDDSPrim = dxwss.GetPrimarySurface(); if (lpDDSPrim) { if(pReleaseDDThreadLock)(*pReleaseDDThreadLock)(); (*pGetDC)(lpDDSPrim, &PrimaryDC); while((PrimaryDC == NULL) && lpDDSPrim) { OutTraceDW("GetFlippedDC: found primary surface with no DC, unref lpdds=%x\n", lpDDSPrim); dxwss.UnrefSurface(lpDDSPrim); lpDDSPrim = dxwss.GetPrimarySurface(); if (lpDDSPrim) (*pGetDC)(lpDDSPrim, &PrimaryDC); } } OutTrace("GetFlippedDC: return primary surface dc=%x\n", PrimaryDC); return PrimaryDC; } HDC dxwVDC::AcquireEmulatedDC(HWND hwnd, HDC *PrimaryDC) { HDC wdc; RECT WinRect; HDC RealHDC; /*--------------------------------- extern HDC hFlippedDC; LPDIRECTDRAWSURFACE lpDDSPrim; hFlippedDC = GetPrimaryDC(); ----------------------------------*/ if(!(wdc=(*pGDIGetDC)(hwnd))){ OutTraceE("GetDC: ERROR err=%d at=%d\n", GetLastError(), __LINE__); return NULL; } RealHDC=wdc; RECT LastVRect; LastVRect = VirtualPicRect; if(!(hwnd=WindowFromDC(wdc))) OutTraceE("WindowFromDC: ERROR err=%d at=%d\n", GetLastError(), __LINE__); (*pGetClientRect)(hwnd, &WinRect); if(dxw.IsDesktop(hwnd)){ // when screen resolution changes, better renew service resources VirtualPicRect = dxw.GetScreenRect(); if((LastVRect.right != VirtualPicRect.right) || (LastVRect.bottom != VirtualPicRect.bottom)) { DeleteObject(VirtualHDC); VirtualHDC = NULL; DeleteObject(VirtualPic); VirtualPic = NULL; } } else { VirtualPicRect = WinRect; dxw.UnmapClient(&VirtualPicRect); } OutTraceB("AcquireEmulatedDC: hwnd=%x Desktop=%x WinRect=(%d,%d)(%d,%d) VirtRect=(%d,%d)(%d,%d)\n", hwnd, dxw.IsDesktop(hwnd), WinRect.left, WinRect.top, WinRect.right, WinRect.bottom, VirtualPicRect.left, VirtualPicRect.top, VirtualPicRect.right, VirtualPicRect.bottom); if (!VirtualHDC){ OutTraceB("AcquireEmulatedDC: INITIALIZE\n"); if(!(VirtualHDC=CreateCompatibleDC(wdc))) OutTraceE("CreateCompatibleDC: ERROR err=%d at=%d\n", GetLastError(), __LINE__); if(!(VirtualPic=CreateCompatibleBitmap(wdc, dxw.GetScreenWidth(), dxw.GetScreenHeight()))) OutTraceE("CreateCompatibleBitmap: ERROR err=%d at=%d\n", GetLastError(), __LINE__); if(!SelectObject(VirtualHDC, VirtualPic)) OutTraceE("SelectObject: ERROR err=%d at=%d\n", GetLastError(), __LINE__); /*---------------------------------*/ //HRGN hRgn; //RECT screen; //screen = dxw.GetScreenRect(); //hRgn = CreateRectRgnIndirect(&screen); //SelectClipRgn (VirtualHDC, hRgn); //screen = dxw.GetScreenRect(); //hRgn = CreateRectRgnIndirect(&screen); //SelectClipRgn (wdc, hRgn); /*---------------------------------*/ /*---------------------------------*/ if (!(hwnd == dxw.GethWnd())) { POINT father, child, offset; father.x = father.y = 0; child.x = child.y = 0; (*pClientToScreen)(dxw.GethWnd(),&father); (*pClientToScreen)(hwnd,&child); offset.x = child.x - father.x; offset.y = child.y - father.y; dxw.UnmapClient(&offset); OutTraceDW("AcquireEmulatedDC: child window hwnd=%x offset=(%d,%d)\n", hwnd, offset.x, offset.y); (*pSetViewportOrgEx)(VirtualHDC, offset.x, offset.y, NULL); } else (*pSetViewportOrgEx)(VirtualHDC, 0, 0, NULL); if(*PrimaryDC = GetPrimaryDC()){ // better copy from virtual primary .... OutTraceTMP("AcquireEmulatedDC: intialize from primary dc=%x\n", PrimaryDC); if(!(*pGDIBitBlt)(VirtualHDC, 0, 0, VirtualPicRect.right, VirtualPicRect.bottom, *PrimaryDC, 0, 0, SRCCOPY)) OutTraceE("StretchBlt: ERROR err=%d at=%d\n", GetLastError(), __LINE__); } else { // otherwise stretch from current windows DC OutTraceTMP("AcquireEmulatedDC: intialize from windows dc=%x\n", wdc); if(!(*pGDIStretchBlt)(VirtualHDC, 0, 0, VirtualPicRect.right, VirtualPicRect.bottom, wdc, 0, 0, WinRect.right, WinRect.bottom, SRCCOPY)) OutTraceE("StretchBlt: ERROR err=%d at=%d\n", GetLastError(), __LINE__); } } return VirtualHDC; } BOOL dxwVDC::ReleaseEmulatedDC(HWND hwnd) { HDC wdc; RECT WinRect; HDC PrimaryDC; (*pGetClientRect)(hwnd, &WinRect); OutTraceB("ReleaseEmulatedDC: hwnd=%x Desktop=%x WinRect=(%d,%d)(%d,%d) VirtRect=(%d,%d)(%d,%d)\n", hwnd, dxw.IsDesktop(hwnd), WinRect.left, WinRect.top, WinRect.right, WinRect.bottom, VirtualPicRect.left, VirtualPicRect.top, VirtualPicRect.right, VirtualPicRect.bottom); if(PrimaryDC = GetPrimaryDC()){ // better copy from virtual primary .... OutTraceTMP("AcquireEmulatedDC: flush to from primary dc=%x\n", PrimaryDC); if(!(*pGDIBitBlt)(PrimaryDC, VirtualPicRect.left, VirtualPicRect.top, VirtualPicRect.right, VirtualPicRect.bottom, VirtualHDC, 0, 0, SRCCOPY)) OutTraceE("StretchBlt: ERROR err=%d at=%d\n", GetLastError(), __LINE__); } else { if(!(wdc=(*pGDIGetDC)(hwnd))) OutTraceE("GetDC: ERROR err=%d at=%d\n", GetLastError(), __LINE__); OutTraceTMP("AcquireEmulatedDC: flush to windows dc=%x\n", wdc); SetStretchBltMode(wdc, HALFTONE); if(!(*pGDIStretchBlt)(wdc, 0, 0, WinRect.right, WinRect.bottom, VirtualHDC, 0, 0, VirtualPicRect.right, VirtualPicRect.bottom, SRCCOPY)) OutTraceE("StretchBlt: ERROR err=%d at=%d\n", GetLastError(), __LINE__); } (*pGDIReleaseDC)(hwnd, VirtualHDC); return TRUE; } void dxwVDC::ResetEmulatedDC() { VirtualHDC=NULL; VirtualPic=NULL; VirtualOffsetX=0; VirtualOffsetY=0; } BOOL dxwVDC::IsVirtual(HDC hdc) { return (hdc==VirtualHDC) /* && (dwFlags3 & GDIEMULATEDC)*/; } #if 0 BOOL dxwCore::ReleaseSharedDC(HWND hwnd, HDC hDC) { HRESULT ret; LPDIRECTDRAWSURFACE lpDDSPrim; lpDDSPrim = dxwss.GetPrimarySurface(); if(!lpDDSPrim) return(TRUE); OutTraceDW("GDI.ReleaseDC: releasing flipped GDI hdc=%x\n", hDC); ret=(*pReleaseDC)(dxwss.GetPrimarySurface(), hDC); if (!(hwnd == dxw.GethWnd())) { POINT father, child, offset; RECT rect; HDC hdc; father.x = father.y = 0; child.x = child.y = 0; (*pClientToScreen)(dxw.GethWnd(),&father); (*pClientToScreen)(hwnd,&child); offset.x = child.x - father.x; offset.y = child.y - father.y; if(offset.x || offset.y){ // if the graphis was blitted to primary but below a modal child window, // bring that up to the window surface to make it visible. BOOL ret2; (*pGetClientRect)(hwnd, &rect); hdc=(*pGDIGetDC)(hwnd); if(!hdc) OutTrace("GDI.ReleaseDC: GetDC ERROR=%d at %d\n", GetLastError(), __LINE__); ret2=(*pGDIBitBlt)(hdc, rect.left, rect.top, rect.right, rect.bottom, hDC, offset.x, offset.y, SRCCOPY); if(!ret2) OutTrace("GDI.ReleaseDC: BitBlt ERROR=%d at %d\n", GetLastError(), __LINE__); ret2=(*pGDIReleaseDC)(hwnd, hdc); if(!ret2)OutTrace("GDI.ReleaseDC: ReleaseDC ERROR=%d at %d\n", GetLastError(), __LINE__); // this may flicker .... (*pInvalidateRect)(hwnd, NULL, FALSE); } } if (ret) OutTraceE("GDI.ReleaseDC ERROR: err=%x(%s) at %d\n", ret, ExplainDDError(ret), __LINE__); else dxw.ScreenRefresh(); return (ret == DD_OK); } #endif ================================================ FILE: dll/walkmod.cpp ================================================ #include #include #include #include "dxwnd.h" #include "dxwcore.hpp" //#include #include //#include //#include "dxwnd.h" extern void HookModule(HMODULE, int); extern void HookOpenGLLibs(HMODULE, char *); extern void DumpImportTable(HMODULE); BOOL ListProcessModules(BOOL hook) { HANDLE hModuleSnap = INVALID_HANDLE_VALUE; MODULEENTRY32 me32; // Take a snapshot of all modules in the specified process. hModuleSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, GetCurrentProcessId()); if( hModuleSnap == INVALID_HANDLE_VALUE){ OutTraceD("CreateToolhelp32Snapshot ERROR: err=%d\n", GetLastError()); return false; } // Set the size of the structure before using it. me32.dwSize = sizeof( MODULEENTRY32 ); // Retrieve information about the first module, // and exit if unsuccessful if( !Module32First(hModuleSnap, &me32)){ OutTraceE("Module32First ERROR: err=%d\n", GetLastError()); // Show cause of failure CloseHandle(hModuleSnap); // Must clean up the snapshot object! return false; } // Now walk the module list of the process, // and display information about each module do { if(IsDebug){ OutTraceD("MODULE NAME:%s\n", me32.szModule ); OutTraceD(" executable = %s\n", me32.szExePath ); OutTraceD(" process ID = 0x%08X\n", me32.th32ProcessID ); OutTraceD(" ref count (g) = 0x%04X\n", me32.GlblcntUsage ); OutTraceD(" ref count (p) = 0x%04X\n", me32.ProccntUsage ); OutTraceD(" base address = 0x%08X\n", (DWORD) me32.modBaseAddr ); OutTraceD(" base size = %d\n", me32.modBaseSize ); } extern void HookSysLibs(HMODULE); if(hook) HookSysLibs((HMODULE)me32.modBaseAddr); if (IsDebug) DumpImportTable((HMODULE)me32.modBaseAddr); } while( Module32Next( hModuleSnap, &me32 ) ); // Do not forget to clean up the snapshot object. CloseHandle( hModuleSnap ); return true; } ================================================ FILE: dll/wing32.cpp ================================================ /* * WinG support * * Copyright 2007 Dmitry Timoshkov * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #define _CRT_SECURE_NO_WARNINGS #include "dxwnd.h" #include "dxwcore.hpp" #include "syslibs.h" #include "hddraw.h" #include "dxhook.h" #include "dxhelper.h" #include "shareddc.hpp" #include "stdio.h" extern int WINAPI extFrameRect(HDC, const RECT *, HBRUSH); typedef BOOL (WINAPI *WinGBitBlt_Type)(HDC, INT, INT, INT, INT, HDC, INT, INT); typedef BOOL (WINAPI *WinGStretchBlt_Type)(HDC, INT, INT, INT, INT, HDC, INT, INT, INT, INT); typedef HBITMAP (WINAPI *WinGCreateBitmap_Type)(HDC, BITMAPINFO *, void **); typedef HDC (WINAPI *WinGCreateDC_Type)(void); typedef BOOL (WINAPI *WinGRecommendDIBFormat_Type)(BITMAPINFO *); typedef void * (WINAPI *WinGGetDIBPointer_Type)(HBITMAP, BITMAPINFO *); typedef UINT (WINAPI *WinGSetDIBColorTable_Type)(HDC, UINT, UINT, RGBQUAD *); typedef UINT (WINAPI *WinGGetDIBColorTable_Type)(HDC, UINT, UINT, RGBQUAD *); typedef HPALETTE (WINAPI *WinGCreateHalfTonePalette_Type)(void); WinGBitBlt_Type pWinGBitBlt; WinGStretchBlt_Type pWinGStretchBlt; WinGCreateBitmap_Type pWinGCreateBitmap; WinGCreateDC_Type pWinGCreateDC; WinGRecommendDIBFormat_Type pWinGRecommendDIBFormat; WinGGetDIBPointer_Type pWinGGetDIBPointer; WinGSetDIBColorTable_Type pWinGSetDIBColorTable; WinGGetDIBColorTable_Type pWinGGetDIBColorTable; WinGCreateHalfTonePalette_Type pWinGCreateHalfTonePalette; BOOL WINAPI extWinGBitBlt(HDC, INT, INT, INT, INT, HDC, INT, INT); BOOL WINAPI extWinGStretchBlt(HDC, INT, INT, INT, INT, HDC, INT, INT, INT, INT); HBITMAP WINAPI extWinGCreateBitmap(HDC, BITMAPINFO *, void **); HDC WINAPI extWinGCreateDC(void); BOOL WINAPI extWinGRecommendDIBFormat(BITMAPINFO *); void * WINAPI extWinGGetDIBPointer(HBITMAP, BITMAPINFO *); UINT WINAPI extWinGSetDIBColorTable(HDC, UINT, UINT, RGBQUAD *); UINT WINAPI extWinGGetDIBColorTable(HDC, UINT, UINT, RGBQUAD *); HPALETTE WINAPI extWinGCreateHalfTonePalette(void); static HookEntryEx_Type Hooks[]={ {HOOK_IAT_CANDIDATE, 0, "WinGBitBlt", (FARPROC)NULL, (FARPROC *)&pWinGBitBlt, (FARPROC)extWinGBitBlt}, {HOOK_IAT_CANDIDATE, 0, "WinGStretchBlt", (FARPROC)NULL, (FARPROC *)&pWinGStretchBlt, (FARPROC)extWinGStretchBlt}, {HOOK_IAT_CANDIDATE, 0, "WinGCreateBitmap", (FARPROC)NULL, (FARPROC *)&pWinGCreateBitmap, (FARPROC)extWinGCreateBitmap}, {HOOK_IAT_CANDIDATE, 0, "WinGCreateDC", (FARPROC)NULL, (FARPROC *)&pWinGCreateDC, (FARPROC)extWinGCreateDC}, {HOOK_IAT_CANDIDATE, 0, "WinGRecommendDIBFormat", (FARPROC)NULL, (FARPROC *)&pWinGRecommendDIBFormat, (FARPROC)extWinGRecommendDIBFormat}, {HOOK_IAT_CANDIDATE, 0, "WinGGetDIBPointer", (FARPROC)NULL, (FARPROC *)&pWinGGetDIBPointer, (FARPROC)extWinGGetDIBPointer}, {HOOK_IAT_CANDIDATE, 0, "WinGSetDIBColorTable", (FARPROC)NULL, (FARPROC *)&pWinGSetDIBColorTable, (FARPROC)extWinGSetDIBColorTable}, {HOOK_IAT_CANDIDATE, 0, "WinGGetDIBColorTable", (FARPROC)NULL, (FARPROC *)&pWinGGetDIBColorTable, (FARPROC)extWinGGetDIBColorTable}, {HOOK_IAT_CANDIDATE, 0, "WinGCreateHalfTonePalette", (FARPROC)NULL, (FARPROC *)&pWinGCreateHalfTonePalette, (FARPROC)extWinGCreateHalfTonePalette}, {HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator }; static char *libname = "wing32.dll"; void HookWinG32Init() { //HookLibInitEx(Hooks); } void HookWinG32(HMODULE module) { if (dxw.GDIEmulationMode != GDIMODE_NONE) HookLibraryEx(module, Hooks, libname); } FARPROC Remap_WinG32_ProcAddress(LPCSTR proc, HMODULE hModule) { FARPROC addr; if (dxw.GDIEmulationMode != GDIMODE_NONE) if(addr=RemapLibraryEx(proc, hModule, Hooks)) return addr; return NULL; } // === wrappers === HDC WINAPI extWinGCreateDC(void) { OutTraceWG("WinGCreateDC\n"); return extGDICreateCompatibleDC(0); } HBITMAP WINAPI extWinGCreateBitmap(HDC hdc, BITMAPINFO *bmi, void **bits) { HBITMAP ret; OutTraceWG("WinGCreateBitmap: hdc=%x bmi=%x\n", hdc, bmi); ret = extCreateDIBSection(hdc, bmi, 0, bits, 0, 0); OutTraceWG("WinGCreateBitmap: ret=%x\n", ret); return ret; } BOOL WINAPI extWinGBitBlt(HDC hdcDst, INT xDst, INT yDst, INT width, INT height, HDC hdcSrc, INT xSrc, INT ySrc ) { BOOL ret; OutTraceWG("WinGBitBlt: hdcdest=%x pos=(%d,%d) size=(%dx%d) hdcsrc=%x pos=(%d,%d)\n", hdcDst, xDst, yDst, width, height, hdcSrc, xSrc, ySrc); ret = extGDIBitBlt(hdcDst, xDst, yDst, width, height, hdcSrc, xSrc, ySrc, SRCCOPY); if(dxw.dwFlags8 & MARKWING32) dxw.Mark(hdcDst, TRUE, RGB(0, 255, 0), xDst, yDst, width, height); return ret; } BOOL WINAPI extWinGStretchBlt(HDC hdcDst, INT xDst, INT yDst, INT widthDst, INT heightDst, HDC hdcSrc, INT xSrc, INT ySrc, INT widthSrc, INT heightSrc ) { INT old_blt_mode; BOOL ret; OutTraceWG("WinGStretchBlt: hdcdest=%x pos=(%d,%d) size=(%dx%d) hdcsrc=%x pos=(%d,%d) size=(%dx%d)\n", hdcDst, xDst, yDst, widthDst, heightDst, hdcSrc, xSrc, ySrc, widthSrc, heightSrc); // wing hdc is always a screen DC. old_blt_mode = SetStretchBltMode( hdcDst, COLORONCOLOR ); ret = extGDIStretchBlt( hdcDst, xDst, yDst, widthDst, heightDst, hdcSrc, xSrc, ySrc, widthSrc, heightSrc, SRCCOPY ); SetStretchBltMode( hdcDst, old_blt_mode ); if(dxw.dwFlags8 & MARKWING32) dxw.Mark(hdcDst, TRUE, RGB(255, 0, 0), xDst, yDst, widthDst, heightDst); return ret; } BOOL WINAPI extWinGRecommendDIBFormat(BITMAPINFO *bmi) { OutTraceWG("WinGRecommendDIBFormat\n"); if (!bmi) return FALSE; bmi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); bmi->bmiHeader.biWidth = 320; bmi->bmiHeader.biHeight = -1; bmi->bmiHeader.biPlanes = 1; bmi->bmiHeader.biBitCount = 8; bmi->bmiHeader.biCompression = BI_RGB; bmi->bmiHeader.biSizeImage = 0; bmi->bmiHeader.biXPelsPerMeter = 0; bmi->bmiHeader.biYPelsPerMeter = 0; bmi->bmiHeader.biClrUsed = 0; bmi->bmiHeader.biClrImportant = 0; return TRUE; } void * WINAPI extWinGGetDIBPointer(HBITMAP hbmp, BITMAPINFO *bmi) { DIBSECTION ds; OutTraceWG("WinGGetDIBPointer\n"); if (GetObjectW( hbmp, sizeof(ds), &ds ) == sizeof(ds)) { memcpy( &bmi->bmiHeader, &ds.dsBmih, sizeof(*bmi) ); return ds.dsBm.bmBits; } return NULL; } UINT WINAPI extWinGSetDIBColorTable(HDC hdc, UINT start, UINT end, RGBQUAD *colors) { OutTraceWG("WinGSetDIBColorTable: hdc=%x start=%d end=%d\n", hdc, start, end); (*pInvalidateRect)(dxw.GethWnd(), NULL, FALSE); return SetDIBColorTable( hdc, start, end, colors ); } UINT WINAPI extWinGGetDIBColorTable(HDC hdc, UINT start, UINT end, RGBQUAD *colors) { OutTraceWG("WinGGetDIBColorTable: hdc=%x start=%d end=%d\n", hdc, start, end); (*pInvalidateRect)(dxw.GethWnd(), NULL, FALSE); return GetDIBColorTable( hdc, start, end, colors ); } HPALETTE WINAPI extWinGCreateHalfTonePalette(void) { HDC hdc; HPALETTE hpal; OutTraceWG("WinGCreateHalfTonePalette: void\n"); hdc = GetDC(0); hpal = CreateHalftonePalette(hdc); ReleaseDC(0, hdc); (*pInvalidateRect)(dxw.GethWnd(), NULL, FALSE); return hpal; } HBRUSH WINAPI extWinGCreateHalfToneBrush(HDC hdc, COLORREF color, INT type) { OutTraceWG("WinGCreateHalfToneBrush: hdc=%x color=%x type=%d\n", hdc, color, type); return CreateSolidBrush(color); } ================================================ FILE: dll/winmm.cpp ================================================ #define _CRT_SECURE_NO_WARNINGS #define _CRT_NON_CONFORMING_SWPRINTFS #include "dxwnd.h" #include "dxwcore.hpp" #include "syslibs.h" #include "dxhook.h" #include "dxhelper.h" #include "resource.h" #include "MMSystem.h" #include #define SUPPRESSMCIERRORS FALSE #define EMULATEJOY TRUE #define INVERTJOYAXIS TRUE //#include "logall.h" // comment when not debugging BOOL IsWithinMCICall = FALSE; typedef MMRESULT (WINAPI *timeGetDevCaps_Type)(LPTIMECAPS, UINT); timeGetDevCaps_Type ptimeGetDevCaps = NULL; MMRESULT WINAPI exttimeGetDevCaps(LPTIMECAPS, UINT); typedef MCIDEVICEID (WINAPI *mciGetDeviceIDA_Type)(LPCTSTR); mciGetDeviceIDA_Type pmciGetDeviceIDA = NULL; MCIDEVICEID WINAPI extmciGetDeviceIDA(LPCTSTR); typedef MCIDEVICEID (WINAPI *mciGetDeviceIDW_Type)(LPCWSTR); mciGetDeviceIDW_Type pmciGetDeviceIDW = NULL; MCIDEVICEID WINAPI extmciGetDeviceIDW(LPCWSTR); typedef DWORD (WINAPI *joyGetNumDevs_Type)(void); joyGetNumDevs_Type pjoyGetNumDevs = NULL; DWORD WINAPI extjoyGetNumDevs(void); typedef MMRESULT (WINAPI *joyGetDevCapsA_Type)(DWORD, LPJOYCAPS, UINT); joyGetDevCapsA_Type pjoyGetDevCapsA = NULL; MMRESULT WINAPI extjoyGetDevCapsA(DWORD, LPJOYCAPS, UINT); typedef MMRESULT (WINAPI *joyGetPosEx_Type)(DWORD, LPJOYINFOEX); joyGetPosEx_Type pjoyGetPosEx = NULL; MMRESULT WINAPI extjoyGetPosEx(DWORD, LPJOYINFOEX); typedef MMRESULT (WINAPI *joyGetPos_Type)(DWORD, LPJOYINFO); joyGetPos_Type pjoyGetPos = NULL; MMRESULT WINAPI extjoyGetPos(DWORD, LPJOYINFO); typedef MMRESULT (WINAPI *auxGetNumDevs_Type)(void); auxGetNumDevs_Type pauxGetNumDevs = NULL; MMRESULT WINAPI extauxGetNumDevs(void); typedef BOOL (WINAPI *mciGetErrorStringA_Type)(DWORD, LPCSTR, UINT); mciGetErrorStringA_Type pmciGetErrorStringA; BOOL WINAPI extmciGetErrorStringA(DWORD, LPCSTR, UINT); typedef MMRESULT (WINAPI *mixerGetLineControlsA_Type)(HMIXEROBJ, LPMIXERLINECONTROLS, DWORD); mixerGetLineControlsA_Type pmixerGetLineControlsA; MMRESULT WINAPI extmixerGetLineControlsA(HMIXEROBJ, LPMIXERLINECONTROLS, DWORD); typedef UINT (WINAPI *waveOutGetNumDevs_Type)(void); waveOutGetNumDevs_Type pwaveOutGetNumDevs; UINT WINAPI extwaveOutGetNumDevs(void); typedef UINT (WINAPI *mixerGetNumDevs_Type)(void); mixerGetNumDevs_Type pmixerGetNumDevs; UINT WINAPI extmixerGetNumDevs(void); typedef UINT (WINAPI *timeBeginPeriod_Type)(UINT); timeBeginPeriod_Type ptimeBeginPeriod; UINT WINAPI exttimeBeginPeriod(UINT); typedef UINT (WINAPI *timeEndPeriod_Type)(UINT); timeEndPeriod_Type ptimeEndPeriod; UINT WINAPI exttimeEndPeriod(UINT); static HookEntryEx_Type Hooks[]={ {HOOK_IAT_CANDIDATE, 0, "mciSendCommandA", NULL, (FARPROC *)&pmciSendCommandA, (FARPROC)extmciSendCommandA}, {HOOK_IAT_CANDIDATE, 0, "mciSendCommandW", NULL, (FARPROC *)&pmciSendCommandW, (FARPROC)extmciSendCommandW}, {HOOK_HOT_CANDIDATE, 0, "mciGetDeviceIDA", NULL, (FARPROC *)&pmciGetDeviceIDA, (FARPROC)extmciGetDeviceIDA}, {HOOK_HOT_CANDIDATE, 0, "mciGetDeviceIDW", NULL, (FARPROC *)&pmciGetDeviceIDW, (FARPROC)extmciGetDeviceIDW}, //{HOOK_IAT_CANDIDATE, 0, "auxGetNumDevs", NULL, (FARPROC *)&pauxGetNumDevs, (FARPROC)extauxGetNumDevs}, {HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator }; static HookEntryEx_Type TimeHooks[]={ {HOOK_HOT_CANDIDATE, 0, "timeGetTime", NULL, (FARPROC *)&ptimeGetTime, (FARPROC)exttimeGetTime}, {HOOK_HOT_CANDIDATE, 0, "timeKillEvent", NULL, (FARPROC *)&ptimeKillEvent, (FARPROC)exttimeKillEvent}, {HOOK_HOT_CANDIDATE, 0, "timeSetEvent", NULL, (FARPROC *)&ptimeSetEvent, (FARPROC)exttimeSetEvent}, {HOOK_HOT_CANDIDATE, 0, "timeGetDevCaps", NULL, (FARPROC *)&ptimeGetDevCaps, (FARPROC)exttimeGetDevCaps}, {HOOK_HOT_CANDIDATE, 0, "timeBeginPeriod", NULL, (FARPROC *)&ptimeBeginPeriod, (FARPROC)exttimeBeginPeriod}, {HOOK_HOT_CANDIDATE, 0, "timeEndPeriod", NULL, (FARPROC *)&ptimeEndPeriod, (FARPROC)exttimeEndPeriod}, {HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator }; static HookEntryEx_Type RemapHooks[]={ {HOOK_HOT_CANDIDATE, 0, "mciSendStringA", NULL, (FARPROC *)&pmciSendStringA, (FARPROC)extmciSendStringA}, {HOOK_HOT_CANDIDATE, 0, "mciSendStringW", NULL, (FARPROC *)&pmciSendStringW, (FARPROC)extmciSendStringW}, {HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator }; static HookEntryEx_Type JoyHooks[]={ {HOOK_HOT_CANDIDATE, 0, "joyGetNumDevs", NULL, (FARPROC *)&pjoyGetNumDevs, (FARPROC)extjoyGetNumDevs}, {HOOK_HOT_CANDIDATE, 0, "joyGetDevCapsA", NULL, (FARPROC *)&pjoyGetDevCapsA, (FARPROC)extjoyGetDevCapsA}, {HOOK_HOT_CANDIDATE, 0, "joyGetPosEx", NULL, (FARPROC *)&pjoyGetPosEx, (FARPROC)extjoyGetPosEx}, {HOOK_HOT_CANDIDATE, 0, "joyGetPos", NULL, (FARPROC *)&pjoyGetPos, (FARPROC)extjoyGetPos}, {HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator }; static HookEntryEx_Type DebugHooks[]={ {HOOK_IAT_CANDIDATE, 0, "mciGetErrorStringA", NULL, (FARPROC *)&pmciGetErrorStringA, (FARPROC)extmciGetErrorStringA}, {HOOK_IAT_CANDIDATE, 0, "mixerGetLineControlsA", NULL, (FARPROC *)&pmixerGetLineControlsA, (FARPROC)extmixerGetLineControlsA}, {HOOK_IAT_CANDIDATE, 0, "waveOutGetNumDevs", NULL, (FARPROC *)&pwaveOutGetNumDevs, (FARPROC)extwaveOutGetNumDevs}, {HOOK_IAT_CANDIDATE, 0, "auxGetNumDevs", NULL, (FARPROC *)&pauxGetNumDevs, (FARPROC)extauxGetNumDevs}, {HOOK_IAT_CANDIDATE, 0, "mixerGetNumDevs", NULL, (FARPROC *)&pmixerGetNumDevs, (FARPROC)extmixerGetNumDevs}, {HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator }; void HookWinMM(HMODULE module, char *libname) { HookLibraryEx(module, Hooks, libname); if(dxw.dwFlags2 & TIMESTRETCH) HookLibraryEx(module, TimeHooks, libname); if(dxw.dwFlags5 & REMAPMCI) HookLibraryEx(module, RemapHooks, libname); if(dxw.dwFlags6 & VIRTUALJOYSTICK) HookLibraryEx(module, JoyHooks, libname); if(IsDebug) HookLibraryEx(module, DebugHooks, libname); } FARPROC Remap_WinMM_ProcAddress(LPCSTR proc, HMODULE hModule) { FARPROC addr; if (addr=RemapLibraryEx(proc, hModule, Hooks)) return addr; if(dxw.dwFlags2 & TIMESTRETCH) if (addr=RemapLibraryEx(proc, hModule, TimeHooks)) return addr; if(dxw.dwFlags5 & REMAPMCI) if (addr=RemapLibraryEx(proc, hModule, RemapHooks)) return addr; if(dxw.dwFlags6 & VIRTUALJOYSTICK) if (addr=RemapLibraryEx(proc, hModule, JoyHooks)) return addr; if(IsDebug) if (addr=RemapLibraryEx(proc, hModule, DebugHooks)) return addr; return NULL; } MMRESULT WINAPI exttimeGetDevCaps(LPTIMECAPS ptc, UINT cbtc) { MMRESULT res; res = (*ptimeGetDevCaps)(ptc, cbtc); if(res) { OutTraceE("timeGetDevCaps ERROR: res=%x err=%d\n", res, GetLastError()); } else { OutTraceDW("timeGetDevCaps: period min=%d max=%d\n", ptc->wPeriodMin, ptc->wPeriodMax); } return MMSYSERR_NOERROR; } DWORD WINAPI exttimeGetTime(void) { DWORD ret; ret = dxw.GetTickCount(); //OutTraceB("timeGetTime: time=%x\n", ret); return ret; } MMRESULT WINAPI exttimeSetEvent(UINT uDelay, UINT uResolution, LPTIMECALLBACK lpTimeProc, DWORD_PTR dwUser, UINT fuEvent) { MMRESULT res; UINT NewDelay; OutTraceDW("timeSetEvent: Delay=%d Resolution=%d Event=%x\n", uDelay, uResolution, fuEvent); if(dxw.dwFlags4 & STRETCHTIMERS) NewDelay = dxw.StretchTime(uDelay); else NewDelay = uDelay; res=(*ptimeSetEvent)(NewDelay, uResolution, lpTimeProc, dwUser, fuEvent); if(res) dxw.PushTimer(res, uDelay, uResolution, lpTimeProc, dwUser, fuEvent); OutTraceDW("timeSetEvent: ret=%x\n", res); return res; } MMRESULT WINAPI exttimeKillEvent(UINT uTimerID) { MMRESULT res; OutTraceDW("timeKillEvent: TimerID=%x\n", uTimerID); res=(*ptimeKillEvent)(uTimerID); if(res==TIMERR_NOERROR) dxw.PopTimer(uTimerID); OutTraceDW("timeKillEvent: ret=%x\n", res); return res; } MMRESULT WINAPI exttimeBeginPeriod(UINT uPeriod) { MMRESULT res; OutTraceDW("timeBeginPeriod: period=%d\n", uPeriod); res=(*ptimeBeginPeriod)(uPeriod); OutTraceDW("timeBeginPeriod: ret=%x\n", res); return res; } MMRESULT WINAPI exttimeEndPeriod(UINT uPeriod) { MMRESULT res; OutTraceDW("timeEndPeriod: period=%d\n", uPeriod); res=(*ptimeEndPeriod)(uPeriod); OutTraceDW("timeEndPeriod: ret=%x\n", res); return res; } /* MCI_DGV_PUT_FRAME The rectangle defined for MCI_DGV_RECT applies to the frame rectangle. The frame rectangle specifies the portion of the frame buffer used as the destination of the video images obtained from the video rectangle. The video should be scaled to fit within the frame buffer rectangle. The rectangle is specified in frame buffer coordinates. The default rectangle is the full frame buffer. Specifying this rectangle lets the device scale the image as it digitizes the data. Devices that cannot scale the image reject this command with MCIERR_UNSUPPORTED_FUNCTION. You can use the MCI_GETDEVCAPS_CAN_STRETCH flag with the MCI_GETDEVCAPS command to determine if a device scales the image. A device returns FALSE if it cannot scale the image. */ static char *sStatusItem(DWORD dwItem) { char *s; switch(dwItem){ case MCI_STATUS_LENGTH: s = "LENGTH"; break; case MCI_STATUS_POSITION: s = "POSITION"; break; case MCI_STATUS_NUMBER_OF_TRACKS: s = "NUMBER_OF_TRACKS"; break; case MCI_STATUS_MODE: s = "MODE"; break; case MCI_STATUS_MEDIA_PRESENT: s = "MEDIA_PRESENT"; break; case MCI_STATUS_TIME_FORMAT: s = "TIME_FORMAT"; break; case MCI_STATUS_READY: s = "READY"; break; case MCI_STATUS_CURRENT_TRACK: s = "CURRENT_TRACK"; break; default: s = "???"; break; } return s; } static char *sDeviceType(DWORD dt) { char *s; switch(dt){ case MCI_ALL_DEVICE_ID: s="ALL_DEVICE_ID"; break; case MCI_DEVTYPE_VCR: s="VCR"; break; case MCI_DEVTYPE_VIDEODISC: s="VIDEODISC"; break; case MCI_DEVTYPE_OVERLAY: s="OVERLAY"; break; case MCI_DEVTYPE_CD_AUDIO: s="CD_AUDIO"; break; case MCI_DEVTYPE_DAT: s="DAT"; break; case MCI_DEVTYPE_SCANNER: s="SCANNER"; break; case MCI_DEVTYPE_ANIMATION: s="ANIMATION"; break; case MCI_DEVTYPE_DIGITAL_VIDEO: s="DIGITAL_VIDEO"; break; case MCI_DEVTYPE_OTHER: s="OTHER"; break; case MCI_DEVTYPE_WAVEFORM_AUDIO: s="WAVEFORM_AUDIO"; break; case MCI_DEVTYPE_SEQUENCER: s="SEQUENCER"; break; default: s="unknown"; break; } return s; } static char *sTimeFormat(DWORD tf) { char *s; switch(tf){ case MCI_FORMAT_MILLISECONDS: s="MILLISECONDS"; break; case MCI_FORMAT_HMS: s="HMS"; break; case MCI_FORMAT_MSF: s="MSF"; break; case MCI_FORMAT_FRAMES: s="FRAMES"; break; case MCI_FORMAT_SMPTE_24: s="SMPTE_24"; break; case MCI_FORMAT_SMPTE_25: s="SMPTE_25"; break; case MCI_FORMAT_SMPTE_30: s="SMPTE_30"; break; case MCI_FORMAT_SMPTE_30DROP: s="SMPTE_30DROP"; break; case MCI_FORMAT_BYTES: s="BYTES"; break; case MCI_FORMAT_SAMPLES: s="SAMPLES"; break; case MCI_FORMAT_TMSF: s="TMSF"; break; default: s="unknown"; break; } return s; } static void DumpMciMessage(char *label, BOOL isAnsi, UINT uMsg, DWORD_PTR fdwCommand, DWORD_PTR dwParam) { char *api="mciSendCommand"; switch(uMsg){ case MCI_BREAK: { LPMCI_BREAK_PARMS lpBreak = (LPMCI_BREAK_PARMS)dwParam; OutTrace("%s%s: MCI_BREAK cb=%x virtkey=%d hwndbreak=%x\n", api, label, lpBreak->dwCallback, lpBreak->nVirtKey, lpBreak->hwndBreak); } break; case MCI_INFO: { LPMCI_INFO_PARMS lpInfo = (LPMCI_INFO_PARMS)dwParam; OutTrace("%s%s: MCI_INFO cb=%x retsize=%x\n", api, label, lpInfo->dwCallback, lpInfo->dwRetSize); } break; case MCI_PLAY: { LPMCI_PLAY_PARMS lpPlay = (LPMCI_PLAY_PARMS)dwParam; OutTrace("%s%s: MCI_PLAY cb=%x from=%x to=%x\n", api, label, lpPlay->dwCallback, lpPlay->dwFrom, lpPlay->dwTo); } break; case MCI_GETDEVCAPS: { LPMCI_GETDEVCAPS_PARMS lpDevCaps = (LPMCI_GETDEVCAPS_PARMS)dwParam; OutTrace("%s%s: MCI_GETDEVCAPS cb=%x ret=%x item=%x\n", api, label, lpDevCaps->dwCallback, lpDevCaps->dwReturn, lpDevCaps->dwItem); } break; case MCI_OPEN: { DWORD dwFlags = (DWORD)fdwCommand; // how to dump LPMCI_OPEN_PARMS strings without crash? if(isAnsi){ LPMCI_OPEN_PARMSA lpOpen = (LPMCI_OPEN_PARMSA)dwParam; OutTrace("%s%s: MCI_OPEN %scb=%x devid=%x devtype=%s elementname=%s alias=%s\n", api, label, (dwFlags & MCI_OPEN_SHAREABLE) ? "OPEN_SHAREABLE " : "", lpOpen->dwCallback, lpOpen->wDeviceID, "", //(dwFlags & MCI_OPEN_TYPE) ? lpOpen->lpstrDeviceType : "", (dwFlags & MCI_OPEN_ELEMENT) ? lpOpen->lpstrElementName : "", (dwFlags & MCI_OPEN_ALIAS) ? lpOpen->lpstrAlias : ""); } else{ LPMCI_OPEN_PARMSW lpOpen = (LPMCI_OPEN_PARMSW)dwParam; OutTrace("%s%s: MCI_OPEN cb=%x devid=%x devtype=%ls elementname=%ls alias=%ls\n", api, label, (dwFlags & MCI_OPEN_SHAREABLE) ? "OPEN_SHAREABLE " : "", lpOpen->dwCallback, lpOpen->wDeviceID, L"", //(dwFlags & MCI_OPEN_TYPE) ? lpOpen->lpstrDeviceType : L"", (dwFlags & MCI_OPEN_ELEMENT) ? lpOpen->lpstrElementName : L"", (dwFlags & MCI_OPEN_ALIAS) ? lpOpen->lpstrAlias : L""); } } break; case MCI_STATUS: { LPMCI_STATUS_PARMS lpStatus = (LPMCI_STATUS_PARMS)dwParam; OutTrace("%s%s: MCI_STATUS cb=%x ret=%x item=%x(%s) track=%x\n", api, label, lpStatus->dwCallback, lpStatus->dwReturn, lpStatus->dwItem, sStatusItem(lpStatus->dwItem), lpStatus->dwTrack); } break; case MCI_SYSINFO: { LPMCI_SYSINFO_PARMS lpSysInfo = (LPMCI_SYSINFO_PARMS)dwParam; OutTrace("%s%s: MCI_SYSINFO cb=%x retsize=%x number=%x devtype=%x(%s)\n", api, label, lpSysInfo->dwCallback, lpSysInfo->dwRetSize, lpSysInfo->dwNumber, lpSysInfo->wDeviceType, sDeviceType(lpSysInfo->wDeviceType)); } break; case MCI_SET: { LPMCI_SET_PARMS lpSetInfo = (LPMCI_SET_PARMS)dwParam; OutTrace("%s%s: MCI_SET cb=%x audio=%x timeformat=%x(%s)\n", api, label, lpSetInfo->dwCallback, lpSetInfo->dwAudio, lpSetInfo->dwTimeFormat, sTimeFormat(lpSetInfo->dwTimeFormat)); } break; default: { LPMCI_GENERIC_PARMS lpGeneric = (LPMCI_GENERIC_PARMS)dwParam; if(lpGeneric) OutTrace("%s%s: %s cb=%x\n", api, label, ExplainMCICommands(uMsg), lpGeneric->dwCallback); else OutTrace("%s%s: %s params=(NULL)\n", api, label, ExplainMCICommands(uMsg)); } break; } } MCIERROR WINAPI extmciSendCommand(BOOL isAnsi, mciSendCommand_Type pmciSendCommand, MCIDEVICEID IDDevice, UINT uMsg, DWORD_PTR fdwCommand, DWORD_PTR dwParam) { RECT saverect; MCIERROR ret; LPMCI_ANIM_RECT_PARMS pr; LPMCI_OVLY_WINDOW_PARMSA pw; LPMCI_OPEN_PARMSA po; OutTraceDW("mciSendCommand%c: IDDevice=%x msg=%x(%s) Command=%x(%s)\n", isAnsi ? 'A' : 'W', IDDevice, uMsg, ExplainMCICommands(uMsg), fdwCommand, ExplainMCIFlags(uMsg, fdwCommand)); if(IsDebug) DumpMciMessage(">>", isAnsi, uMsg, fdwCommand, dwParam); if(dxw.dwFlags6 & BYPASSMCI){ //MCI_OPEN_PARMS *op; MCI_STATUS_PARMS *sp; ret = 0; switch(uMsg){ case MCI_OPEN: po = (MCI_OPEN_PARMSA *)dwParam; po->wDeviceID = 1; break; case MCI_STATUS: if(fdwCommand & MCI_STATUS_ITEM){ // fix for Tie Fighter 95: when bypassing, let the caller know you have no CD tracks // otherwise you risk an almost endless loop going through the unassigned returned // number of ghost tracks // fix for "Emperor of the Fading Suns": the MCI_STATUS_ITEM is set in .or. with // MCI_TRACK sp = (MCI_STATUS_PARMS *)dwParam; switch(fdwCommand){ case MCI_TRACK: sp->dwReturn = 1; break; default: sp->dwTrack = 0; if(sp->dwItem == MCI_STATUS_CURRENT_TRACK) sp->dwTrack = 1; if(sp->dwItem == MCI_STATUS_NUMBER_OF_TRACKS) sp->dwTrack = 1; if(sp->dwItem == MCI_STATUS_LENGTH) sp->dwTrack = 200; if(sp->dwItem == MCI_STATUS_MEDIA_PRESENT) sp->dwTrack = 1; sp->dwReturn = 0; break; } } break; default: break; } if(IsDebug) DumpMciMessage("<<", isAnsi, uMsg, fdwCommand, dwParam); return ret; } if(dxw.IsFullScreen()){ switch(uMsg){ case MCI_WINDOW: pw = (MCI_OVLY_WINDOW_PARMSA *)dwParam; OutTraceB("mciSendCommand: hwnd=%x CmdShow=%x\n", pw->hWnd, pw->nCmdShow); if(dxw.IsRealDesktop(pw->hWnd)) { pw->hWnd = dxw.GethWnd(); OutTraceB("mciSendCommand: REDIRECT hwnd=%x\n", pw->hWnd); } // attempt to stretch "Wizardry Chronicle" intro movie, but it doesn't work ... //if(1){ // fdwCommand &= ~MCI_OVLY_WINDOW_DISABLE_STRETCH; // fdwCommand |= MCI_OVLY_WINDOW_ENABLE_STRETCH; // fdwCommand |= MCI_ANIM_WINDOW_HWND; // OutTraceB("mciSendCommand: STRETCH flags=%x hwnd=%x\n", fdwCommand, pw->hWnd); //} break; case MCI_PUT: RECT client; pr = (MCI_ANIM_RECT_PARMS *)dwParam; OutTraceB("mciSendCommand: rect=(%d,%d),(%d,%d)\n", pr->rc.left, pr->rc.top, pr->rc.right, pr->rc.bottom); (*pGetClientRect)(dxw.GethWnd(), &client); //fdwCommand |= MCI_ANIM_PUT_DESTINATION; fdwCommand |= MCI_ANIM_RECT; saverect=pr->rc; pr->rc.top = (pr->rc.top * client.bottom) / dxw.GetScreenHeight(); pr->rc.bottom = (pr->rc.bottom * client.bottom) / dxw.GetScreenHeight(); pr->rc.left = (pr->rc.left * client.right) / dxw.GetScreenWidth(); pr->rc.right = (pr->rc.right * client.right) / dxw.GetScreenWidth(); OutTraceB("mciSendCommand: fixed rect=(%d,%d),(%d,%d)\n", pr->rc.left, pr->rc.top, pr->rc.right, pr->rc.bottom); break; case MCI_PLAY: if(dxw.dwFlags6 & NOMOVIES) return 0; // ??? break; case MCI_OPEN: if(dxw.dwFlags6 & NOMOVIES) return 275; // quite brutal, but working .... break; case MCI_STOP: if(dxw.dwFlags6 & NOMOVIES) return 0; // ??? break; case MCI_CLOSE: if(dxw.dwFlags6 & NOMOVIES) return 0; // ??? break; } } #if 0 LPMCI_GENERIC_PARMS lpGeneric = (LPMCI_GENERIC_PARMS)dwParam; if(HIWORD(lpGeneric->dwCallback) == NULL) { lpGeneric->dwCallback = MAKELONG(dxw.GethWnd(),0); OutTraceB("mciSendCommand: REDIRECT dwCallback=%x\n", dxw.GethWnd()); } #endif ret=(*pmciSendCommand)(IDDevice, uMsg, fdwCommand, dwParam); if(IsDebug) DumpMciMessage("<<", isAnsi, uMsg, fdwCommand, dwParam); if(ret == 0){ switch(uMsg){ case MCI_STATUS: MCI_STATUS_PARMS *p = (MCI_STATUS_PARMS *)dwParam; OutTraceDW("mciSendCommand: Item=%d Track=%d return=%x\n", p->dwItem, p->dwTrack, p->dwReturn); break; } } if(dxw.IsFullScreen() && uMsg==MCI_PUT) pr->rc=saverect; if (ret) OutTraceE("mciSendCommand: ERROR res=%d\n", ret); return ret; } MCIERROR WINAPI extmciSendCommandA(MCIDEVICEID IDDevice, UINT uMsg, DWORD_PTR fdwCommand, DWORD_PTR dwParam) { return extmciSendCommand(TRUE, pmciSendCommandA, IDDevice, uMsg, fdwCommand, dwParam); } MCIERROR WINAPI extmciSendCommandW(MCIDEVICEID IDDevice, UINT uMsg, DWORD_PTR fdwCommand, DWORD_PTR dwParam) { return extmciSendCommand(FALSE, pmciSendCommandW, IDDevice, uMsg, fdwCommand, dwParam); } MCIERROR WINAPI extmciSendStringA(LPCTSTR lpszCommand, LPTSTR lpszReturnString, UINT cchReturn, HANDLE hwndCallback) { MCIERROR ret; if(IsWithinMCICall) return(*pmciSendStringA)(lpszCommand, lpszReturnString, cchReturn, hwndCallback); // just proxy ... OutTraceDW("mciSendStringA: Command=\"%s\" Return=%x Callback=%x\n", lpszCommand, cchReturn, hwndCallback); char sMovieNickName[81]; char sTail[81]; RECT rect; sTail[0]=0; if (sscanf(lpszCommand, "put %s destination at %ld %ld %ld %ld %s", sMovieNickName, &(rect.left), &(rect.top), &(rect.right), &(rect.bottom), sTail)>=5){ char NewCommand[256]; // v2.03.19 height / width fix rect.right += rect.left; // convert width to position rect.bottom += rect.top; // convert height to position rect=dxw.MapClientRect(&rect); rect.right -= rect.left; // convert position to width rect.bottom -= rect.top; // convert position to height sprintf(NewCommand, "put %s destination at %d %d %d %d %s", sMovieNickName, rect.left, rect.top, rect.right, rect.bottom, sTail); lpszCommand=NewCommand; OutTraceDW("mciSendStringA: replaced Command=\"%s\"\n", lpszCommand); } IsWithinMCICall=TRUE; ret=(*pmciSendStringA)(lpszCommand, lpszReturnString, cchReturn, hwndCallback); IsWithinMCICall=FALSE; if(ret) OutTraceDW("mciSendStringA ERROR: ret=%x\n", ret); OutTraceDW("mciSendStringA: RetString=\"%s\"\n", lpszReturnString); return ret; } MCIERROR WINAPI extmciSendStringW(LPCWSTR lpszCommand, LPWSTR lpszReturnString, UINT cchReturn, HANDLE hwndCallback) { MCIERROR ret; WCHAR *target=L"put movie destination at "; if(IsWithinMCICall) return(*pmciSendStringW)(lpszCommand, lpszReturnString, cchReturn, hwndCallback); // just proxy ... OutTraceDW("mciSendStringW: Command=\"%ls\" Return=%x Callback=%x\n", lpszCommand, cchReturn, hwndCallback); WCHAR sMovieNickName[81]; RECT rect; if (swscanf(lpszCommand, L"put %ls destination at %ld %ld %ld %ld", sMovieNickName, &(rect.left), &(rect.top), &(rect.right), &(rect.bottom))==5){ WCHAR NewCommand[256]; // v2.03.19 height / width fix rect.right += rect.left; // convert width to position rect.bottom += rect.top; // convert height to position rect=dxw.MapClientRect(&rect); rect.right -= rect.left; // convert position to width rect.bottom -= rect.top; // convert position to height swprintf(NewCommand, L"put %ls destination at %d %d %d %d", sMovieNickName, rect.left, rect.top, rect.right, rect.bottom); lpszCommand=NewCommand; OutTraceDW("mciSendStringW: replaced Command=\"%ls\"\n", lpszCommand); } IsWithinMCICall=TRUE; ret=(*pmciSendStringW)(lpszCommand, lpszReturnString, cchReturn, hwndCallback); IsWithinMCICall=FALSE; if(ret) OutTraceDW("mciSendStringW ERROR: ret=%x\n", ret); OutTraceDW("mciSendStringW: RetString=\"%ls\"\n", lpszReturnString); return ret; } MCIDEVICEID WINAPI extmciGetDeviceIDA(LPCTSTR lpszDevice) { MCIDEVICEID ret; ret = (*pmciGetDeviceIDA)(lpszDevice); OutTraceDW("mciGetDeviceIDA: device=\"%s\" ret=%x\n", lpszDevice, ret); return ret; } MCIDEVICEID WINAPI extmciGetDeviceIDW(LPCWSTR lpszDevice) { MCIDEVICEID ret; ret = (*pmciGetDeviceIDW)(lpszDevice); OutTraceDW("mciGetDeviceIDW: device=\"%ls\" ret=%x\n", lpszDevice, ret); return ret; } DWORD WINAPI extjoyGetNumDevs(void) { OutTraceDW("joyGetNumDevs: emulate joystick ret=1\n"); return 1; } #define XSPAN 128 #define YSPAN 128 static void ShowJoystick(LONG, LONG, DWORD); MMRESULT WINAPI extjoyGetDevCapsA(DWORD uJoyID, LPJOYCAPS pjc, UINT cbjc) { OutTraceDW("joyGetDevCaps: joyid=%d size=%d\n", uJoyID, cbjc); if((uJoyID != -1) && (uJoyID != 0)) { OutTraceDW("joyGetDevCaps: ERROR joyid=%d ret=MMSYSERR_NODRIVER\n", uJoyID, cbjc); return MMSYSERR_NODRIVER; } if(cbjc != sizeof(JOYCAPS)) { OutTraceDW("joyGetDevCaps: ERROR joyid=%d size=%d ret=MMSYSERR_INVALPARAM\n", uJoyID, cbjc); return MMSYSERR_INVALPARAM; } uJoyID = 0; // always first (unique) one ... // set Joystick capability structure memset(pjc, 0, sizeof(JOYCAPS)); strncpy(pjc->szPname, "DxWnd Joystick Emulator", MAXPNAMELEN); pjc->wXmin = -XSPAN; pjc->wXmax = XSPAN; pjc->wYmin = -YSPAN; pjc->wYmax = YSPAN; pjc->wNumButtons = 2; pjc->wMaxButtons = 2; pjc->wPeriodMin = 60; pjc->wPeriodMax = 600; pjc->wCaps = 0; pjc->wMaxAxes = 2; pjc->wNumAxes = 2; return JOYERR_NOERROR; } BOOL JoyProcessMouseWheelMessage(WPARAM wParam, LPARAM lParam) { int zDelta; DWORD dwSensivity = GetHookInfo()->VJoySensivity; DWORD dwJoyStatus = GetHookInfo()->VJoyStatus; if(!(dwJoyStatus & VJMOUSEWHEEL)) return FALSE; if(!dwSensivity) dwSensivity=100; //fwKeys = GET_KEYSTATE_WPARAM(wParam); zDelta = GET_WHEEL_DELTA_WPARAM(wParam); if(zDelta > 4 * WHEEL_DELTA) zDelta = 4 * WHEEL_DELTA; if(zDelta < -4 * WHEEL_DELTA) zDelta = -4 * WHEEL_DELTA; if(zDelta > 0) dwSensivity = (dwSensivity * 110 * zDelta) / (100 * WHEEL_DELTA); if(zDelta < 0) dwSensivity = (dwSensivity * 100 * -zDelta) / (110 * WHEEL_DELTA); if(dwSensivity < 32) dwSensivity = 32; if(dwSensivity > 250) dwSensivity = 250; GetHookInfo()->VJoySensivity = dwSensivity; return TRUE; } static MMRESULT GetJoy(char *apiname, DWORD uJoyID, LPJOYINFO lpj) { OutTraceC("%s: joyid=%d\n", apiname, uJoyID); if(uJoyID != 0) return JOYERR_PARMS; LONG x, y, CenterX, CenterY; HWND hwnd; DWORD dwButtons; static BOOL bJoyLock = FALSE; static DWORD dwLastClick = 0; extern DXWNDSTATUS *pStatus; DWORD dwVJoyStatus; dwVJoyStatus = GetHookInfo()->VJoyStatus; if(!(dwVJoyStatus & VJOYENABLED)) { lpj->wXpos = 0; lpj->wYpos = 0; lpj->wZpos = 0; pStatus->joyposx = (short)0; pStatus->joyposy = (short)0; return JOYERR_NOERROR; } dwButtons = 0; if ((GetKeyState(VK_LBUTTON) < 0) || (dwVJoyStatus & B1AUTOFIRE)) dwButtons |= JOY_BUTTON1; if ((GetKeyState(VK_RBUTTON) < 0) || (dwVJoyStatus & B2AUTOFIRE)) dwButtons |= JOY_BUTTON2; if (GetKeyState(VK_MBUTTON) < 0) dwButtons |= JOY_BUTTON3; OutTraceB("%s: Virtual Joystick buttons=%x\n", apiname, dwButtons); if(dwButtons == JOY_BUTTON3){ if(((*pGetTickCount)() - dwLastClick) > 200){ bJoyLock = !bJoyLock; dwButtons &= ~JOY_BUTTON3; dwLastClick = (*pGetTickCount)(); } } // default: centered position x=0; y=0; // get cursor position and map it to virtual joystick x,y axis if(hwnd=dxw.GethWnd()){ POINT pt; RECT client; POINT upleft = {0,0}; (*pGetClientRect)(hwnd, &client); (*pClientToScreen)(hwnd, &upleft); (*pGetCursorPos)(&pt); pt.x -= upleft.x; pt.y -= upleft.y; if(bJoyLock || !dxw.bActive){ // when the joystick is "locked" (bJoyLock) or when the window lost focus // (dxw.bActive == FALSE) place the joystick in the central position OutTraceB("%s: CENTERED lock=%x active=%x\n", apiname, bJoyLock, dxw.bActive); x=0; y=0; pt.x = client.right >> 1; pt.y = client.bottom >> 1; dwButtons = JOY_BUTTON3; } else{ OutTraceB("%s: ACTIVE mouse=(%d,%d)\n", apiname, pt.x, pt.y); CenterX = (client.right - client.left) >> 1; CenterY = (client.bottom - client.top) >> 1; if(dwVJoyStatus & VJMOUSEMAP){ if(pt.x < client.left) pt.x = client.left; if(pt.x > client.right) pt.x = client.right; if(pt.y < client.top) pt.y = client.top; if(pt.y > client.bottom) pt.y = client.bottom; x = ((pt.x - CenterX) * XSPAN) / client.right; y = ((pt.y - CenterY) * YSPAN) / client.bottom; if(dwVJoyStatus & VJAUTOCENTER) { // autocenter: each time, moves 1/20 distance toward centered 0,0 position // 1/20 = 0.05, changing value changes the autocenter speed (must be >0.0 and <1.0) int x1, y1; x1 = (int)(pt.x + upleft.x - ((pt.x - CenterX) * 0.05)); y1 = (int)(pt.y + upleft.y - ((pt.y - CenterY) * 0.05)); if((x1 != pt.x+upleft.x) || (y1 != pt.y+upleft.y)) (*pSetCursorPos)(x1, y1); } } if(dwVJoyStatus & VJKEYBOARDMAP){ if (GetKeyState(VK_LEFT) < 0) x = -XSPAN/2; if (GetKeyState(VK_RIGHT) < 0) x = +XSPAN/2; if (GetKeyState(VK_UP) < 0) y = -YSPAN/2; if (GetKeyState(VK_DOWN) < 0) y = +YSPAN/2; if (GetKeyState(VK_SPACE) < 0) dwButtons |= JOY_BUTTON1; if (GetKeyState(VK_LCONTROL) < 0) dwButtons |= JOY_BUTTON2; } if(dwVJoyStatus & INVERTXAXIS) x = -x; if(dwVJoyStatus & INVERTYAXIS) y = -y; //if(dwVJoyStatus & VJSENSIVITY){ { DWORD dwSensivity = GetHookInfo()->VJoySensivity; if(dwSensivity){ x = (x * (LONG)dwSensivity) / 100; y = (y * (LONG)dwSensivity) / 100; if(x > +XSPAN) x = +XSPAN; if(x < -XSPAN) x = -XSPAN; if(y > +YSPAN) y = +YSPAN; if(y < -YSPAN) y = -YSPAN; } } } if (dwVJoyStatus & CROSSENABLED) { int jx, jy; jx = CenterX + (x * client.right) / XSPAN; jy = CenterY + (y * client.bottom) / YSPAN; ShowJoystick(jx, jy, dwButtons); } } lpj->wXpos = x; lpj->wYpos = y; lpj->wZpos = 0; lpj->wButtons = dwButtons; OutTraceC("%s: joyid=%d pos=(%d,%d)\n", apiname, uJoyID, lpj->wXpos, lpj->wYpos); pStatus->joyposx = (short)x; pStatus->joyposy = (short)y; return JOYERR_NOERROR; } MMRESULT WINAPI extjoyGetPosEx(DWORD uJoyID, LPJOYINFOEX pji) { MMRESULT res; JOYINFO jinfo; res=GetJoy("joyGetPosEx", uJoyID, &jinfo); // set Joystick JOYINFOEX info structure memset(pji, 0, sizeof(JOYINFOEX)); pji->dwSize = sizeof(JOYINFOEX); pji->dwFlags = 0; pji->dwXpos = jinfo.wXpos; pji->dwYpos = jinfo.wYpos; pji->dwButtons = jinfo.wButtons; pji->dwFlags = JOY_RETURNX|JOY_RETURNY|JOY_RETURNBUTTONS; return res; } MMRESULT WINAPI extjoyGetPos(DWORD uJoyID, LPJOYINFO pji) { MMRESULT res; res=GetJoy("joyGetPos", uJoyID, pji); return res; } static void ShowJoystick(LONG x, LONG y, DWORD dwButtons) { static BOOL JustOnce=FALSE; extern HMODULE hInst; BITMAP bm; HDC hClientDC; static HBITMAP g_hbmJoyCross; static HBITMAP g_hbmJoyFire1; static HBITMAP g_hbmJoyFire2; static HBITMAP g_hbmJoyFire3; static HBITMAP g_hbmJoyCenter; HBITMAP g_hbmJoy; RECT client; RECT win; POINT PrevViewPort; //return; // don't show when system cursor is visible CURSORINFO ci; ci.cbSize = sizeof(CURSORINFO); GetCursorInfo(&ci); if(ci.flags == CURSOR_SHOWING) return; hClientDC=(*pGDIGetDC)(dxw.GethWnd()); (*pGetClientRect)(dxw.GethWnd(), &client); if(!JustOnce){ g_hbmJoyCross = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_CROSS)); g_hbmJoyFire1 = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_FIRE1)); g_hbmJoyFire2 = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_FIRE2)); g_hbmJoyFire3 = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_FIRE3)); g_hbmJoyCenter = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_JOYCENTER)); JustOnce=TRUE; } HDC hdcMem = CreateCompatibleDC(hClientDC); switch(dwButtons){ case 0: g_hbmJoy = g_hbmJoyCross; break; case JOY_BUTTON1: g_hbmJoy = g_hbmJoyFire1; break; case JOY_BUTTON2: g_hbmJoy = g_hbmJoyFire2; break; case JOY_BUTTON1|JOY_BUTTON2: g_hbmJoy = g_hbmJoyFire3; break; case JOY_BUTTON3: g_hbmJoy = g_hbmJoyCenter; break; default: g_hbmJoy = NULL; break; } if(g_hbmJoy == NULL) return; // show nothing ... HBITMAP hbmOld = (HBITMAP)(*pSelectObject)(hdcMem, g_hbmJoy); GetObject(g_hbmJoy, sizeof(bm), &bm); (*pGetWindowRect)(dxw.GethWnd(), &win); (*pSetViewportOrgEx)(hClientDC, 0, 0, &PrevViewPort); int w, h; w=bm.bmWidth; h=bm.bmHeight; (*pGDIBitBlt)(hClientDC, x-(w>>1), y-(h>>1), w, h, hdcMem, 0, 0, SRCPAINT); (*pSetViewportOrgEx)(hClientDC, PrevViewPort.x, PrevViewPort.y, NULL); (*pSelectObject)(hdcMem, hbmOld); DeleteDC(hdcMem); } MMRESULT WINAPI extauxGetNumDevs(void) { UINT ret; ret = (*pauxGetNumDevs)(); OutTrace("auxGetNumDevs: ret=%d\n", ret); return ret; } BOOL WINAPI extmciGetErrorStringA(DWORD fdwError, LPCSTR lpszErrorText, UINT cchErrorText) { BOOL ret; ret = (*pmciGetErrorStringA)(fdwError, lpszErrorText, cchErrorText); OutTrace("mciGetErrorStringA: ret=%x err=%d text=(%d)\"%s\"\n", ret, fdwError, cchErrorText, lpszErrorText); return ret; } MMRESULT WINAPI extmixerGetLineControlsA(HMIXEROBJ hmxobj, LPMIXERLINECONTROLS pmxlc, DWORD fdwControls) { MMRESULT ret; ret = (*pmixerGetLineControlsA)(hmxobj, pmxlc, fdwControls); OutTrace("mixerGetLineControlsA: ret=%x hmxobj=%x Controls=%x\n", ret, hmxobj, fdwControls); return ret; } UINT WINAPI extwaveOutGetNumDevs(void) { UINT ret; ret = (*pwaveOutGetNumDevs)(); OutTrace("waveOutGetNumDevs: ret=%d\n", ret); return ret; } UINT WINAPI extmixerGetNumDevs(void) { UINT ret; ret = (*pmixerGetNumDevs)(); OutTrace("mixerGetNumDevs: ret=%d\n", ret); return ret; } ================================================ FILE: dll/winproc.cpp ================================================ #define _WIN32_WINNT 0x0600 #define WIN32_LEAN_AND_MEAN #define _CRT_SECURE_NO_DEPRECATE 1 #include #include #include #include "dxwnd.h" #include "dxwcore.hpp" #include "dxhelper.h" extern void SuppressIMEWindow(); extern void RecoverScreenMode(); extern void dx_FullScreenToggle(HWND); extern void dx_DesktopToggle(HWND, BOOL); extern BOOL JoyProcessMouseWheelMessage(WPARAM, LPARAM); static void dx_ToggleLogging() { // toggle LOGGING if(dxw.dwTFlags & OUTTRACE){ OutTraceDW("Toggle logging OFF\n"); dxw.dwTFlags &= ~OUTTRACE; } else { dxw.dwTFlags |= OUTTRACE; OutTraceDW("Toggle logging ON\n"); } GetHookInfo()->isLogging=(dxw.dwTFlags & OUTTRACE); } LRESULT CALLBACK extDialogWindowProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) { static int i=0; static WINDOWPOS *wp; WNDPROC pWindowProc; LRESULT res; static int t = -1; static int iRecursion = 0; if(iRecursion) { iRecursion=0; return NULL; } iRecursion++; if (t == -1) t = (*pGetTickCount)(); int tn = (*pGetTickCount)(); OutTraceW("DEBUG: DialogWinMsg hwnd=%x msg=[0x%x]%s(%x,%x)\n", hwnd, message, ExplainWinMessage(message), wparam, lparam); // optimization: don't invalidate too often! // 200mSec seems a good compromise. if (tn-t > 200) { t=tn; (*pInvalidateRect)(hwnd, NULL, TRUE); } pWindowProc=dxwws.GetProc(hwnd); if(pWindowProc) { res =(*pCallWindowProcA)(pWindowProc, hwnd, message, wparam, lparam); } else { char *sMsg="ASSERT: DialogWinMsg pWindowProc=NULL !!!\n"; OutTraceDW(sMsg); if (IsAssertEnabled) MessageBox(0, sMsg, "WindowProc", MB_OK | MB_ICONEXCLAMATION); res = NULL; } iRecursion=0; return res; } LRESULT CALLBACK extChildWindowProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) { static int i=0; static WINDOWPOS *wp; WNDPROC pWindowProc; OutTraceW("DEBUG: ChildWinMsg hwnd=%x msg=[0x%x]%s(%x,%x)\n", hwnd, message, ExplainWinMessage(message), wparam, lparam); if(dxw.Windowize){ switch(message){ // Cybermercs: it seems that all game menus are conveniently handled by the WindowProc routine, // while the action screen get messages processed by the ChildWindowProc, that needs some different // setting .......... // Beware: Cybermercs handles some static info about cursor position handling, so that if you resize // a menu it doesn't work correctly until you don't change screen. case WM_MOUSEMOVE: case WM_MOUSEWHEEL: case WM_LBUTTONDOWN: case WM_LBUTTONUP: case WM_LBUTTONDBLCLK: case WM_RBUTTONDOWN: case WM_RBUTTONUP: case WM_RBUTTONDBLCLK: case WM_MBUTTONDOWN: case WM_MBUTTONUP: case WM_MBUTTONDBLCLK: // if(dxw.dwFlags1 & MODIFYMOUSE){ // mouse processing //if((dxw.dwFlags1 & MODIFYMOUSE) && !(dxw.dwFlags6 & NOMOUSEPROC)){ // mouse processing if((dxw.dwFlags1 & MODIFYMOUSE) && !(dxw.dwFlags1 & MESSAGEPROC)){ // mouse processing POINT prev, curr; // scale mouse coordinates prev.x = LOWORD(lparam); prev.y = HIWORD(lparam); curr = prev; if(message == WM_MOUSEWHEEL){ // v2.02.33 mousewheel fix POINT upleft={0,0}; (*pClientToScreen)(dxw.GethWnd(), &upleft); curr = dxw.SubCoordinates(curr, upleft); } //OutTraceC("ChildWindowProc: hwnd=%x pos XY prev=(%d,%d)\n", hwnd, prev.x, prev.y); curr=dxw.FixCursorPos(curr); // Warn! the correction must refer to the main window hWnd, not the current hwnd one !!! lparam = MAKELPARAM(curr.x, curr.y); OutTraceC("ChildWindowProc: hwnd=%x pos XY=(%d,%d)->(%d,%d)\n", hwnd, prev.x, prev.y, curr.x, curr.y); } break; default: break; } } pWindowProc=dxwws.GetProc(hwnd); // v2.02.82: use CallWindowProc that handles WinProc handles if(pWindowProc) return(*pCallWindowProcA)(pWindowProc, hwnd, message, wparam, lparam); // should never get here .... OutTraceDW("ChildWindowProc: no WndProc for CHILD hwnd=%x\n", hwnd); return DefWindowProc(hwnd, message, wparam, lparam); } static void dx_UpdatePositionLock(HWND hwnd) { RECT rect; POINT p={0,0}; (*pGetClientRect)(hwnd,&rect); (*pClientToScreen)(hwnd,&p); dxw.dwFlags1 |= LOCKWINPOS; OutTraceDW("Toggle position lock ON\n"); dxw.InitWindowPos(p.x, p.y, rect.right-rect.left, rect.bottom-rect.top); } static void dx_TogglePositionLock(HWND hwnd) { // toggle position locking if(dxw.dwFlags1 & LOCKWINPOS){ // unlock OutTraceDW("Toggle position lock OFF\n"); dxw.dwFlags1 &= ~LOCKWINPOS; } else { OutTraceDW("Toggle position lock ON\n"); dxw.dwFlags1 |= LOCKWINPOS; dx_UpdatePositionLock(hwnd); } } static void dx_ToggleFPS() { if(dxw.dwFlags2 & SHOWFPS){ dxw.dwFlags2 &= ~SHOWFPS; OutTrace("ToggleFPS: SHOWFPS mode OFF\n"); } else { dxw.dwFlags2 |= SHOWFPS; OutTrace("ToggleFPS: SHOWFPS mode ON\n"); } } static void dx_Cornerize(HWND hwnd) { static BOOL bCornerized = FALSE; static RECT WinRect = {0, 0, 0, 0}; static DWORD OldStyle, OldExtStyle; if (bCornerized){ // toggle .... OutTraceDW("DxWnd: exiting corner mode\n"); (*pSetWindowLong)(hwnd, GWL_STYLE, OldStyle); (*pSetWindowLong)(hwnd, GWL_EXSTYLE, OldExtStyle); (*pMoveWindow)(hwnd, WinRect.left, WinRect.top, WinRect.right, WinRect.bottom, TRUE); memset(&WinRect, 0, sizeof(WinRect)); } else { OutTraceDW("DxWnd: entering corner mode\n"); (*pGetWindowRect)(hwnd, &WinRect); OldStyle = (*pGetWindowLong)(hwnd, GWL_STYLE); OldExtStyle = (*pGetWindowLong)(hwnd, GWL_EXSTYLE); (*pSetWindowLong)(hwnd, GWL_STYLE, WS_VISIBLE|WS_CLIPSIBLINGS|WS_OVERLAPPED); (*pSetWindowLong)(hwnd, GWL_EXSTYLE, 0); (*pMoveWindow)(hwnd, 0, 0, dxw.GetScreenWidth(), dxw.GetScreenHeight(), TRUE); } bCornerized = !bCornerized; // switch toggle (*pUpdateWindow)(hwnd); dxw.ScreenRefresh(); } LRESULT LastCursorPos; void SetIdlePriority(BOOL idle) { OutTrace("Setting priority class to %s\n", idle ? "IDLE_PRIORITY_CLASS" : "NORMAL_PRIORITY_CLASS"); if(!SetPriorityClass(GetCurrentProcess(), idle ? IDLE_PRIORITY_CLASS : NORMAL_PRIORITY_CLASS)) OutTraceE("SetPriorityClass ERROR: err=%d at %d\n", GetLastError(), __LINE__); } void ExplainMsg(char *ApiName, HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam) { char sPos[321]; sPos[320]=0; sPos[0]=0; switch(Msg){ case WM_WINDOWPOSCHANGING: case WM_WINDOWPOSCHANGED: LPWINDOWPOS wp; wp = (LPWINDOWPOS)lParam; sprintf_s(sPos, 320, " pos=(%d,%d) size=(%dx%d) flags=%x(%s)", wp->x, wp->y, wp->cx, wp->cy, wp->flags, ExplainWPFlags(wp->flags)); break; case WM_MOVE: sprintf_s(sPos, 320, " pos=(%d,%d)", HIWORD(lParam), LOWORD(lParam)); break; case WM_STYLECHANGING: case WM_STYLECHANGED: LPSTYLESTRUCT style; style = (LPSTYLESTRUCT)lParam; if(wParam == GWL_STYLE) sprintf_s(sPos, 320, "style=%x(%s)->%x(%s)", style->styleOld, ExplainStyle(style->styleOld), style->styleNew, ExplainStyle(style->styleNew)); if(wParam == GWL_EXSTYLE) sprintf_s(sPos, 320, "exstyle=%x(%s)->%x(%s)", style->styleOld, ExplainExStyle(style->styleOld), style->styleNew, ExplainExStyle(style->styleNew)); break; case WM_SIZE: static char *modes[5]={"RESTORED", "MINIMIZED", "MAXIMIZED", "MAXSHOW", "MAXHIDE"}; sprintf_s(sPos, 320, " mode=SIZE_%s size=(%dx%d)", modes[wParam % 5], HIWORD(lParam), LOWORD(lParam)); break; } OutTrace("%s[%x]: WinMsg=[0x%x]%s(%x,%x) %s\n", ApiName, hwnd, Msg, ExplainWinMessage(Msg), wParam, lParam, sPos); } static BOOL IsWindowMovingMessage(int msg) { switch(msg){ // minimum set for win move/resize on Win10 case WM_NCLBUTTONDOWN: case WM_NCLBUTTONUP: case WM_WINDOWPOSCHANGED: case WM_WINDOWPOSCHANGING: case WM_STYLECHANGING: case WM_STYLECHANGED: return TRUE; break; } return FALSE; } LRESULT CALLBACK extWindowProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) { POINT prev, curr; RECT rect; static int i=0; WNDPROC pWindowProc; extern void dxwFixWindowPos(char *, HWND, LPARAM); extern LPRECT lpClipRegion; static BOOL DoOnce = TRUE; static BOOL IsToBeLocked; static int LastTimeShift; static int SaveTimeShift; static BOOL TimeShiftToggle=TRUE; extern void DDrawScreenShot(int); if(DoOnce){ DoOnce=FALSE; IsToBeLocked=(dxw.dwFlags1 & LOCKWINPOS); LastTimeShift=SaveTimeShift=dxw.TimeShift; } // v2.1.93: adjust clipping region if(IsTraceW) ExplainMsg("WindowProc", hwnd, message, wparam, lparam); if(dxw.dwFlags3 & (FILTERMESSAGES|DEFAULTMESSAGES)){ switch(message){ case WM_NCMOUSELEAVE: case WM_NCMOUSEMOVE: case WM_NCLBUTTONDOWN: case WM_NCLBUTTONUP: case WM_NCLBUTTONDBLCLK: case WM_NCRBUTTONDOWN: case WM_NCRBUTTONUP: case WM_NCRBUTTONDBLCLK: case WM_NCMBUTTONDOWN: case WM_NCMBUTTONUP: case WM_NCMBUTTONDBLCLK: case WM_MOVE: case WM_MOVING: if(dxw.dwFlags3 & FILTERMESSAGES){ OutTraceDW("WindowProc[%x]: SUPPRESS WinMsg=[0x%x]%s(%x,%x)\n", hwnd, message, ExplainWinMessage(message), wparam, lparam); return 0; } else { OutTraceDW("WindowProc[%x]: DEFAULT WinMsg=[0x%x]%s(%x,%x)\n", hwnd, message, ExplainWinMessage(message), wparam, lparam); return (*pDefWindowProcA)(hwnd, message, wparam, lparam); } } } // v2.04.11: the processing of al least WM_WINPOSCHANG-ING/ED for "Man TT Superbike" must be placed // here, before and avoiding the call to the original callback because of the AdjustWindowRect that // is inside the callback and would keep the position fixed. if(dxw.dwFlags2 & FORCEWINRESIZE){ //ExplainMsg("WindowProc", hwnd, message, wparam, lparam); if(IsWindowMovingMessage(message)){ return (*pDefWindowProcA)(hwnd, message, wparam, lparam); } } if(LastTimeShift != dxw.TimeShift){ extern void SetVSyncDelays(int, LPDIRECTDRAW); extern LPDIRECTDRAW lpPrimaryDD; extern int iBakBufferVersion; if(dxw.dwFlags4 & STRETCHTIMERS) dxw.RenewTimers(); if(lpPrimaryDD) SetVSyncDelays(iBakBufferVersion, lpPrimaryDD); LastTimeShift=dxw.TimeShift; } switch(message){ // v2.02.13: added WM_GETMINMAXINFO/WM_NCCALCSIZE interception - (see Actua Soccer 3 problems...) //case WM_NCDESTROY: // return 0; case WM_GETMINMAXINFO: if(dxw.dwFlags1 & LOCKWINPOS){ extern void dxwFixMinMaxInfo(char *, HWND, LPARAM); dxwFixMinMaxInfo("WindowProc", hwnd, lparam); return 0; } break; case WM_NCCALCSIZE: case WM_NCPAINT: // v2.02.30: don't alter child and other windows.... // v2.04.09: comment inconsistent with code. Added '!' to if expression .... if(!((dxw.dwFlags1 & LOCKWINPOS) && (hwnd == dxw.GethWnd()) && dxw.IsFullScreen())){ OutTraceDW("WindowProc: %s wparam=%x\n", ExplainWinMessage(message), wparam); return (*pDefWindowProcA)(hwnd, message, wparam, lparam); } break; case WM_NCCREATE: if(dxw.dwFlags2 & SUPPRESSIME) SuppressIMEWindow(); break; case WM_IME_SETCONTEXT: case WM_IME_NOTIFY: case WM_IME_CONTROL: case WM_IME_COMPOSITIONFULL: case WM_IME_SELECT: case WM_IME_CHAR: case WM_IME_REQUEST: case WM_IME_KEYDOWN: case WM_IME_KEYUP: if(dxw.dwFlags2 & SUPPRESSIME){ OutTraceDW("WindowProc[%x]: SUPPRESS IME WinMsg=[0x%x]%s(%x,%x)\n", hwnd, message, ExplainWinMessage(message), wparam, lparam); return 0; } break; case WM_NCHITTEST: // which one is good ? if((dxw.dwFlags2 & FIXNCHITTEST) && (dxw.dwFlags1 & MODIFYMOUSE)){ // mouse processing //if((dxw.dwFlags2 & FIXNCHITTEST) && (dxw.dwFlags1 & MODIFYMOUSE) && !(dxw.dwFlags1 & MESSAGEPROC)){ // mouse processing POINT cursor; LRESULT ret; ret=(*pDefWindowProcA)(hwnd, message, wparam, lparam); if (ret==HTCLIENT) { cursor.x=LOWORD(lparam); cursor.y=HIWORD(lparam); dxw.FixNCHITCursorPos(&cursor); lparam = MAKELPARAM(cursor.x, cursor.y); OutTraceC("WindowProc[%x]: fixed WM_NCHITTEST pt=(%d,%d)\n", hwnd, cursor.x, cursor.y); } else return ret; } break; case WM_ERASEBKGND: // v2.03.97: fix for Adrenix lost backgrounds, thanks to Riitaoja hunt! if(dxw.Windowize && dxw.IsRealDesktop(hwnd)){ OutTraceDW("WindowProc: WM_ERASEBKGND(%x,%x) - suppressed\n", wparam, lparam); return 1; // 1 == OK, erased } break; case WM_DISPLAYCHANGE: if (dxw.Windowize && (dxw.dwFlags1 & LOCKWINPOS) && dxw.IsFullScreen()){ OutTraceDW("WindowProc: prevent WM_DISPLAYCHANGE depth=%d size=(%d,%d)\n", wparam, LOWORD(lparam), HIWORD(lparam)); // v2.02.43: unless EMULATESURFACE is set, lock the screen resolution only, but not the color depth! if(dxw.dwFlags1 & EMULATESURFACE) return 0; // let rparam (color depth) change, but override lparam (screen width & height.) lparam = MAKELPARAM((LONG)dxw.GetScreenWidth(), (LONG)dxw.GetScreenHeight()); //return 0; } break; case WM_STYLECHANGING: case WM_STYLECHANGED: if(dxw.dwFlags1 & LOCKWINSTYLE) { OutTraceDW("WindowProc: %s - suppressed\n", message==WM_STYLECHANGING ? "WM_STYLECHANGING" : "WM_STYLECHANGED"); return 1; } break; case WM_WINDOWPOSCHANGING: case WM_WINDOWPOSCHANGED: if(dxw.Windowize && dxw.IsFullScreen()){ LPWINDOWPOS wp = (LPWINDOWPOS)lparam; extern HWND hControlParentWnd; if(dxw.dwFlags5 & NOWINPOSCHANGES){ OutTraceDW("WindowProc: %s - suppressed\n", message==WM_WINDOWPOSCHANGED ? "WM_WINDOWPOSCHANGED" : "WM_WINDOWPOSCHANGING"); return 0; } wp = (LPWINDOWPOS)lparam; dxwFixWindowPos("WindowProc", hwnd, lparam); OutTraceDW("WindowProc: %s fixed size=(%d,%d)\n", (message == WM_WINDOWPOSCHANGED) ? "WM_WINDOWPOSCHANGED" : "WM_WINDOWPOSCHANGING", wp->cx, wp->cy); if(message==WM_WINDOWPOSCHANGED) { // try to lock main wind & control parent together if(dxw.IsDesktop(hwnd) && hControlParentWnd) { POINT fo = dxw.GetFrameOffset(); (*pMoveWindow)(hControlParentWnd, wp->x+fo.x, wp->y+fo.y, wp->cx, wp->cy, TRUE); } // v2.03.30: in window mode, it seems that the WM_ACTIVATEAPP message is not sent to the main win. // this PostMessage call recovers "Thorgal" block at the end of intro movie and "Championship Manager 03 04" cursor if (dxw.dwFlags6 & ACTIVATEAPP){ PostMessage(hwnd, WM_ACTIVATEAPP, 1, 0); } // v2.03.91.fx4: keep position coordinates updated! if(!(wp->flags & (SWP_NOMOVE|SWP_NOSIZE))) dxw.UpdateDesktopCoordinates(); } } break; case WM_ENTERSIZEMOVE: if(IsToBeLocked){ dxw.dwFlags1 &= ~LOCKWINPOS; } while((*pShowCursor)(1) < 0); if ( ((dxw.dwFlags1 & CLIPCURSOR) && !(dxw.dwFlags8 & CLIPLOCKED)) || (dxw.dwFlags1 & DISABLECLIPPING)) { dxw.EraseClipCursor(); } break; case WM_EXITSIZEMOVE: if(IsToBeLocked){ dxw.dwFlags1 |= LOCKWINPOS; dx_UpdatePositionLock(hwnd); } if((dxw.dwFlags1 & HIDEHWCURSOR) && dxw.IsFullScreen()) while((*pShowCursor)(0) >= 0); if(dxw.dwFlags2 & SHOWHWCURSOR) while((*pShowCursor)(1) < 0); if(dxw.dwFlags1 & DISABLECLIPPING) extClipCursor(lpClipRegion); if(dxw.dwFlags2 & REFRESHONRESIZE) dxw.ScreenRefresh(); if(dxw.dwFlags4 & HIDEDESKTOP) dxw.HideDesktop(dxw.GethWnd()); if(dxw.dwFlags5 & CENTERTOWIN) { HDC thdc; HWND w = dxw.GethWnd(); RECT client; (*pGetClientRect)(w, &client); thdc=(*pGDIGetDC)(w); if(thdc) (*pGDIBitBlt)(thdc, client.left, client.top, client.right, client.bottom, 0, 0, 0, BLACKNESS); } dxw.UpdateDesktopCoordinates(); break; case WM_ACTIVATE: // turn DirectInput bActive flag on & off ..... dxw.bActive = (LOWORD(wparam) == WA_ACTIVE || LOWORD(wparam) == WA_CLICKACTIVE) ? 1 : 0; case WM_NCACTIVATE: // turn DirectInput bActive flag on & off ..... if(message == WM_NCACTIVATE) dxw.bActive = wparam; if(dxw.bActive) (*pSetWindowPos)(hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); if(dxw.dwFlags6 & UNACQUIRE){ ToggleAcquiredDevices(dxw.bActive); } if(dxw.dwFlags1 & UNNOTIFY){ DefWindowProc(hwnd, message, wparam, lparam); return false; } break; case WM_NCMOUSEMOVE: // Posted to a window when the cursor is moved within the nonclient area of the window. // This message is posted to the window that contains the cursor. // If a window has captured the mouse, this message is not posted. // V2.1.90: on nonclient areas the cursor is always shown. while((*pShowCursor)(1) < 0); break; case WM_MOUSEMOVE: if(dxw.Windowize){ prev.x = LOWORD(lparam); prev.y = HIWORD(lparam); if(dxw.IsFullScreen()){ if (dxw.dwFlags1 & HIDEHWCURSOR){ (*pGetClientRect)(hwnd, &rect); if(prev.x >= 0 && prev.x < rect.right && prev.y >= 0 && prev.y < rect.bottom) while((*pShowCursor)(0) >= 0); else while((*pShowCursor)(1) < 0); } if (dxw.dwFlags1 & SHOWHWCURSOR){ while((*pShowCursor)(1) < 0); } } if((dxw.dwFlags1 & MODIFYMOUSE) && !(dxw.dwFlags1 & MESSAGEPROC)){ // mouse processing // scale mouse coordinates curr=dxw.FixCursorPos(prev); //v2.02.30 lparam = MAKELPARAM(curr.x, curr.y); OutTraceC("WindowProc: hwnd=%x pos XY=(%d,%d)->(%d,%d)\n", hwnd, prev.x, prev.y, curr.x, curr.y); } GetHookInfo()->CursorX=LOWORD(lparam); GetHookInfo()->CursorY=HIWORD(lparam); } break; // fall through cases: case WM_MOUSEWHEEL: if(dxw.dwFlags6 & VIRTUALJOYSTICK) { if(dxw.Windowize && (dxw.dwFlags1 & CLIPCURSOR) && !dxw.IsClipCursorActive()) dxw.SetClipCursor(); if (JoyProcessMouseWheelMessage(wparam, lparam)) return 0; } // fall through case WM_LBUTTONDOWN: case WM_LBUTTONUP: case WM_LBUTTONDBLCLK: case WM_RBUTTONDOWN: case WM_RBUTTONUP: case WM_RBUTTONDBLCLK: case WM_MBUTTONDOWN: case WM_MBUTTONUP: case WM_MBUTTONDBLCLK: if(dxw.Windowize){ if((dxw.dwFlags1 & CLIPCURSOR) && !dxw.IsClipCursorActive()) { dxw.SetClipCursor(); } if((dxw.dwFlags1 & MODIFYMOUSE) && !(dxw.dwFlags1 & MESSAGEPROC)){ // mouse processing // scale mouse coordinates prev.x = LOWORD(lparam); prev.y = HIWORD(lparam); curr = prev; if(message == WM_MOUSEWHEEL){ // v2.02.33 mousewheel fix POINT upleft={0,0}; (*pClientToScreen)(dxw.GethWnd(), &upleft); curr = dxw.SubCoordinates(curr, upleft); } curr=dxw.FixCursorPos(curr); //v2.02.30 lparam = MAKELPARAM(curr.x, curr.y); OutTraceC("WindowProc: hwnd=%x pos XY=(%d,%d)->(%d,%d)\n", hwnd, prev.x, prev.y, curr.x, curr.y); } GetHookInfo()->CursorX=LOWORD(lparam); GetHookInfo()->CursorY=HIWORD(lparam); } break; case WM_SETFOCUS: OutTraceDW("WindowProc: hwnd=%x GOT FOCUS\n", hwnd); if(dxw.dwFlags1 & CLIPCURSOR) { dxw.SetClipCursor(); } if (dxw.dwFlags1 & DISABLECLIPPING) extClipCursor(lpClipRegion); if (dxw.dwFlags8 & BACKGROUNDPRIORITY) SetIdlePriority(FALSE); break; case WM_KILLFOCUS: OutTraceDW("WindowProc: hwnd=%x LOST FOCUS\n", hwnd); if ( ((dxw.dwFlags1 & CLIPCURSOR) && !(dxw.dwFlags8 & CLIPLOCKED)) || (dxw.dwFlags1 & DISABLECLIPPING)){ dxw.EraseClipCursor(); } if (dxw.dwFlags8 & BACKGROUNDPRIORITY) SetIdlePriority(TRUE); break; case WM_SYSCOMMAND: // v2.03.56.fix1 by FunkyFr3sh: ensure that "C&C Red Alert 2" receives the WM_SYSCOMMAND / SC_CLOSE message // that likely is filtered by the application logic // v2.03.91: from msdn - In WM_SYSCOMMAND messages, the four low-order bits of the wParam parameter are used // internally by the system. To obtain the correct result when testing the value of wParam, an application // must combine the value 0xFFF0 with the wParam value by using the bitwise AND operator. if(dxw.Windowize && ((wparam & 0xFFF0)== SC_CLOSE) && (dxw.dwFlags6 & TERMINATEONCLOSE)) { LRESULT lres; lres = (*pDefWindowProcA)(hwnd, message, wparam, lparam); return lres; } if(dxw.Windowize){ static int iLastX, iLastY, iLastW, iLastH; switch(wparam & 0xFFF0){ case SC_MINIMIZE: dxw.IsVisible = FALSE; iLastX = dxw.iPosX; iLastY = dxw.iPosY; iLastW = dxw.iSizX; iLastH = dxw.iSizY; dxw.iPosX = dxw.iPosY = dxw.iSizX = dxw.iSizY = 0; break; case SC_RESTORE: dxw.IsVisible = TRUE; dxw.iPosX = iLastX; dxw.iPosY = iLastY; dxw.iSizX = iLastW; dxw.iSizY = iLastH; break; case SC_MAXIMIZE: dxw.IsVisible = TRUE; break; } } break; case WM_CLOSE: // Beware: closing main window does not always mean that the program is about to terminate!!! extern void gShowHideTaskBar(BOOL); if(dxw.dwFlags6 & CONFIRMONCLOSE){ OutTraceDW("WindowProc: WM_CLOSE - terminating process?\n"); if (MessageBoxA(NULL, "Do you really want to exit the game?", "DxWnd", MB_YESNO | MB_TASKMODAL) != IDYES) return FALSE; } if(dxw.dwFlags6 & HIDETASKBAR) gShowHideTaskBar(FALSE); if(dxw.dwFlags3 & FORCE16BPP) RecoverScreenMode(); if(dxw.dwFlags6 & TERMINATEONCLOSE) TerminateProcess(GetCurrentProcess(),0); break; case WM_SYSKEYDOWN: if ((dxw.dwFlags1 & HANDLEALTF4) && (wparam == VK_F4)) { OutTraceDW("WindowProc: WM_SYSKEYDOWN(ALT-F4) - terminating process\n"); TerminateProcess(GetCurrentProcess(),0); } // fall through case WM_KEYDOWN: if(!(dxw.dwFlags4 & ENABLEHOTKEYS)) break; OutTraceW("event %s wparam=%x lparam=%x\n", (message==WM_SYSKEYDOWN)?"WM_SYSKEYDOWN":"WM_KEYDOWN", wparam, lparam); UINT DxWndKey; DxWndKey=dxw.MapKeysConfig(message, lparam, wparam); switch (DxWndKey){ case DXVK_CLIPTOGGLE: OutTraceDW("WindowProc: WM_SYSKEYDOWN key=%x clipper=%x\n", wparam, dxw.IsClipCursorActive()); dxw.IsClipCursorActive() ? dxw.EraseClipCursor() : dxw.SetClipCursor(); break; case DXVK_REFRESH: dxw.ScreenRefresh(); break; case DXVK_LOGTOGGLE: dx_ToggleLogging(); break; case DXVK_PLOCKTOGGLE: dx_TogglePositionLock(hwnd); break; case DXVK_FPSTOGGLE: dx_ToggleFPS(); break; //case DXVK_FREEZETIME: // dxw.ToggleFreezedTime(); // break; case DXVK_TIMEFAST: case DXVK_TIMESLOW: if (dxw.dwFlags2 & TIMESTRETCH) { if (DxWndKey == DXVK_TIMESLOW && (dxw.TimeShift < 8)) dxw.TimeShift++; if (DxWndKey == DXVK_TIMEFAST && (dxw.TimeShift > -8)) dxw.TimeShift--; GetHookInfo()->TimeShift=dxw.TimeShift; OutTrace("Time Stretch: shift=%d speed=%s\n", dxw.TimeShift, dxw.GetTSCaption()); } break; case DXVK_TIMETOGGLE: if (dxw.dwFlags2 & TIMESTRETCH) { if(TimeShiftToggle){ SaveTimeShift=dxw.TimeShift; dxw.TimeShift=0; } else{ dxw.TimeShift=SaveTimeShift; } TimeShiftToggle = !TimeShiftToggle; GetHookInfo()->TimeShift=dxw.TimeShift; } break; case DXVK_ALTF4: if (dxw.dwFlags1 & HANDLEALTF4) { OutTraceDW("WindowProc: WM_SYSKEYDOWN(virtual Alt-F4) - terminating process\n"); TerminateProcess(GetCurrentProcess(),0); } break; case DXVK_PRINTSCREEN: DDrawScreenShot(dxw.dwDDVersion); break; case DXVK_CORNERIZE: dx_Cornerize(hwnd); break; case DXVK_FULLSCREEN: dx_FullScreenToggle(hwnd); break; case DXVK_FAKEDESKTOP: dx_DesktopToggle(hwnd, FALSE); break; case DXVK_FAKEWORKAREA: dx_DesktopToggle(hwnd, TRUE); default: break; } default: break; } if (dxw.dwFlags1 & AUTOREFRESH) dxw.ScreenRefresh(); pWindowProc=dxwws.GetProc(hwnd); //OutTraceB("WindowProc: pWindowProc=%x extWindowProc=%x message=%x(%s) wparam=%x lparam=%x\n", // (*pWindowProc), extWindowProc, message, ExplainWinMessage(message), wparam, lparam); if(pWindowProc) { LRESULT ret; // v2.02.36: use CallWindowProc that handles WinProc handles ret=(*pCallWindowProcA)(pWindowProc, hwnd, message, wparam, lparam); switch(message){ case WM_SIZE: //case WM_WINDOWPOSCHANGED: - no good!!!! // update new coordinates if (dxw.IsFullScreen()) dxw.UpdateDesktopCoordinates(); break; case WM_NCHITTEST: // save last NCHITTEST cursor position for use with KEEPASPECTRATIO scaling LastCursorPos=ret; break; } // v2.1.89: if FORCEWINRESIZE add standard processing for the missing WM_NC* messages if(dxw.dwFlags2 & FORCEWINRESIZE){ switch(message){ //case WM_NCHITTEST: //case WM_NCPAINT: //case WM_NCMOUSEMOVE: //case WM_NCCALCSIZE: //case WM_NCACTIVATE: case WM_SETCURSOR: // shows a different cursor when moving on borders case WM_NCLBUTTONDOWN: // intercepts mouse down on borders case WM_NCLBUTTONUP: // intercepts mouse up on borders ret=(*pDefWindowProcA)(hwnd, message, wparam, lparam); break; } } return ret; } //OutTraceDW("ASSERT: WindowProc mismatch hwnd=%x\n", hwnd); // ??? maybe it's a normal condition, whenever you don't have a WindowProc routine // like in Commandos 2. Flag it? char sMsg[81]; sprintf(sMsg,"ASSERT: WindowProc mismatch hwnd=%x\n", hwnd); OutTraceDW(sMsg); if (IsAssertEnabled) MessageBox(0, sMsg, "WindowProc", MB_OK | MB_ICONEXCLAMATION); return (*pDefWindowProcA)(hwnd, message, wparam, lparam); } ================================================ FILE: dll/wintrust.cpp ================================================ #include #include "dxwnd.h" #include "dxwcore.hpp" #include "syslibs.h" #include "dxhook.h" #include "dxhelper.h" typedef LONG (WINAPI *WinVerifyTrust_Type)(HWND, GUID *, LPVOID); WinVerifyTrust_Type pWinVerifyTrust; extern LONG WINAPI extWinVerifyTrust(HWND, GUID *, LPVOID); static HookEntryEx_Type Hooks[]={ {HOOK_IAT_CANDIDATE, 0, "WinVerifyTrust", NULL, (FARPROC *)&pWinVerifyTrust, (FARPROC)extWinVerifyTrust}, {HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator }; void HookTrust(HMODULE module) { HookLibraryEx(module, Hooks, "wintrust.dll"); } FARPROC Remap_trust_ProcAddress(LPCSTR proc, HMODULE hModule) { FARPROC addr; if (addr=RemapLibraryEx(proc, hModule, Hooks)) return addr; return NULL;} LONG WINAPI extWinVerifyTrust(HWND hWnd, GUID *pgActionID, LPVOID pWVTData) { LONG ret; OutTraceDW("WinVerifyTrust: hwnd=%x pgActionID=%x pWVTData=%x\n", hWnd, pgActionID, pWVTData); ret = (*pWinVerifyTrust)(hWnd, pgActionID, pWVTData); OutTraceDW("WinVerifyTrust: ret=%x\n", ret); return ret; } ================================================ FILE: filter/bilinear16_555.cpp ================================================ #include #include #include static int* g_px1a = NULL; static int* g_px1c = NULL; static int g_px1a_w = 0; static int* g_px1ab = NULL; static int g_px1ab_w = 0; void WINAPI Resize_HQ_2ch555( unsigned char* src, RECT *srcrect, int srcpitch, unsigned char* dest, RECT *destrect, int destpitch) { // Both buffers must be in RGB 565 format. int w1, w2, h1, h2; w1 = srcrect->right - srcrect->left; h1 = srcrect->bottom - srcrect->top; w2 = destrect->right - destrect->left; h2 = destrect->bottom - destrect->top; if(!srcpitch) srcpitch=w1<<1; if(!destpitch) destpitch=w1<<1; // GHO addiction: new variables // p1, p2: pitch offsets of source and dest surfaces in DWORD offset, that is pitch / sizeof(DWORD) // beware: current version can operate on displaced source rect, but assumes the dest rect is always the full surface!! USHORT p1 = srcpitch >> 1; USHORT p2 = destpitch >> 1; USHORT *dsrc = (USHORT *)src + (srcrect->top * p1) + srcrect->left; USHORT *ddest = (USHORT *)dest; // arbitrary resize. bool bUpsampleX = (w1 < w2); bool bUpsampleY = (h1 < h2); // If too many input pixels map to one output pixel, our 32-bit accumulation values // could overflow - so, if we have huge mappings like that, cut down the weights: // 256 max color value // *256 weight_x // *256 weight_y // *256 (16*16) maximum # of input pixels (x,y) - unless we cut the weights down... int weight_shift = 0; //gsky916: weight_shift calculation in bUpsampleX && bUpsampleY cases are not necessary. //Move to else block to reduce floating point calculations. float fh = 256*h1/(float)h2; float fw = 256*w1/(float)w2; if (bUpsampleX && bUpsampleY) { // faster to just do 2x2 bilinear interp here // cache x1a, x1b for all the columns: // ...and your OS better have garbage collection on process exit :) //gsky916: also cache x1c for better performance if (g_px1a_w < w2) { if (g_px1a) delete [] g_px1a; if (g_px1c) delete [] g_px1c; g_px1a = new int[w2*2 * 1]; g_px1c = new int[w2*2 * 1]; g_px1a_w = w2*2; } for (int x2=0; x2> 8; g_px1a[x2] = x1a & 0xFF; } // FOR EVERY OUTPUT PIXEL // gsky916: Use OpenMP to speed up nested for loops (Enable OpenMP support in compiler). #pragma omp parallel for schedule(dynamic) for (int y2=0; y2> 8; int y1cp = y1c * p1; y1a = y1a & 0xFF; USHORT *ddest = &((USHORT *)dest)[y2*p2 + 0]; for (int x2=0; x2> 5) & 0x1F; UINT b_src = (c>>10) & 0x1F; UINT w = (weight_x * weight_y); r += r_src * w; g += g_src * w; b += b_src * w; UINT weight_x1 = x1a; c = (UINT)dsrc2[1]; // GHO r_src = (c ) & 0x1F; g_src = (c>> 5) & 0x1F; b_src = (c>>10) & 0x1F; w = (weight_x1 * weight_y); r += r_src * w; g += g_src * w; b += b_src * w; UINT weight_y1 = y1a; c = (UINT)dsrc2[p1]; // GHO r_src = (c ) & 0x1F; g_src = (c>> 5) & 0x1F; b_src = (c>>10) & 0x1F; w = (weight_x * weight_y1); r += r_src * w; g += g_src * w; b += b_src * w; c = (UINT)dsrc2[p1+1]; // GHO r_src = (c ) & 0x1F; g_src = (c>> 5) & 0x1F; b_src = (c>>10) & 0x1F; w = (weight_x1 * weight_y1); r += r_src * w; g += g_src * w; b += b_src * w; UINT cc = ((r>>16) & 0x1F) | ((g>>(16-5)) & 0x3E0) | ((b>>(16-10)) & 0x7C00); *ddest++ = (USHORT)cc; } } } else // either downscale on vertical or horizontal direction ... { //gsky916: weight_shift calculation moved here. float source_texels_per_out_pixel = ( (w1/(float)w2 + 1) * (h1/(float)h2 + 1) ); float weight_per_pixel = source_texels_per_out_pixel * 256 * 256; //weight_x * weight_y float accum_per_pixel = weight_per_pixel*256; //color value is 0-255 float weight_div = accum_per_pixel / 4294967000.0f; if (weight_div > 1) weight_shift = (int)ceilf( logf((float)weight_div)/logf(2.0f) ); weight_shift = min(15, weight_shift); // this could go to 15 and still be ok. // cache x1a, x1b for all the columns: // ...and your OS better have garbage collection on process exit :) if (g_px1ab_w < w2) { if (g_px1ab) delete [] g_px1ab; g_px1ab = new int[w2*2 * 2]; g_px1ab_w = w2*2; } for (int x2=0; x2 we want to interpolate between two pixels! x1b = x1a + 256; x1b = min(x1b, 256*w1 - 1); g_px1ab[x2*2+0] = x1a; g_px1ab[x2*2+1] = x1b; } // FOR EVERY OUTPUT PIXEL for (int y2=0; y2 we want to interpolate between two pixels! y1b = y1a + 256; y1b = min(y1b, 256*h1 - 1); int y1c = y1a >> 8; int y1d = y1b >> 8; ddest = &((USHORT *)dest)[y2*p2 + 0]; for (int x2=0; x2> 8; int x1d = x1b >> 8; // ADD UP ALL INPUT PIXELS CONTRIBUTING TO THIS OUTPUT PIXEL: UINT r=0, g=0, b=0, a=0; for (int y=y1c; y<=y1d; y++) { UINT weight_y = 256; if (y1c != y1d) { if (y==y1c) weight_y = 256 - (y1a & 0xFF); else if (y==y1d) weight_y = (y1b & 0xFF); } USHORT *dsrc2 = &dsrc[y*p1 + x1c]; // GHO for (int x=x1c; x<=x1d; x++) { UINT weight_x = 256; if (x1c != x1d) { if (x==x1c) weight_x = 256 - (x1a & 0xFF); else if (x==x1d) weight_x = (x1b & 0xFF); } UINT c = dsrc[y*p1 + x]; UINT r_src = (c ) & 0x1F; UINT g_src = (c>> 5) & 0x1F; UINT b_src = (c>>10) & 0x1F; UINT w = (weight_x * weight_y) >> weight_shift; r += r_src * w; g += g_src * w; b += b_src * w; a += w; } } // write results UINT c = ((r/a) & 0x1F) | (((g/a) << 5) & 0x3E0) | (((b/a) << 10) & 0x7C00); *ddest++ = c; } } } } ================================================ FILE: filter/bilinear16_565.cpp ================================================ #include #include #include static int* g_px1a = NULL; static int* g_px1c = NULL; static int g_px1a_w = 0; static int* g_px1ab = NULL; static int g_px1ab_w = 0; void WINAPI Resize_HQ_2ch565( unsigned char* src, RECT *srcrect, int srcpitch, unsigned char* dest, RECT *destrect, int destpitch) { // Both buffers must be in RGB 565 format. int w1, w2, h1, h2; w1 = srcrect->right - srcrect->left; h1 = srcrect->bottom - srcrect->top; w2 = destrect->right - destrect->left; h2 = destrect->bottom - destrect->top; if(!srcpitch) srcpitch=w1<<1; if(!destpitch) destpitch=w1<<1; // GHO addiction: new variables // p1, p2: pitch offsets of source and dest surfaces in DWORD offset, that is pitch / sizeof(DWORD) // beware: current version can operate on displaced source rect, but assumes the dest rect is always the full surface!! USHORT p1 = srcpitch >> 1; USHORT p2 = destpitch >> 1; USHORT *dsrc = (USHORT *)src + (srcrect->top * p1) + srcrect->left; USHORT *ddest = (USHORT *)dest; // arbitrary resize. bool bUpsampleX = (w1 < w2); bool bUpsampleY = (h1 < h2); // If too many input pixels map to one output pixel, our 32-bit accumulation values // could overflow - so, if we have huge mappings like that, cut down the weights: // 256 max color value // *256 weight_x // *256 weight_y // *256 (16*16) maximum # of input pixels (x,y) - unless we cut the weights down... int weight_shift = 0; //gsky916: weight_shift calculation in bUpsampleX && bUpsampleY cases are not necessary. //Move to else block to reduce floating point calculations. float fh = 256*h1/(float)h2; float fw = 256*w1/(float)w2; if (bUpsampleX && bUpsampleY) { // faster to just do 2x2 bilinear interp here // cache x1a, x1b for all the columns: // ...and your OS better have garbage collection on process exit :) //gsky916: also cache x1c for better performance if (g_px1a_w < w2) { if (g_px1a) delete [] g_px1a; if (g_px1c) delete [] g_px1c; g_px1a = new int[w2*2 * 1]; g_px1c = new int[w2*2 * 1]; g_px1a_w = w2*2; } for (int x2=0; x2> 8; g_px1a[x2] = x1a & 0xFF; } // FOR EVERY OUTPUT PIXEL // gsky916: Use OpenMP to speed up nested for loops (Enable OpenMP support in compiler). #pragma omp parallel for schedule(dynamic) for (int y2=0; y2> 8; int y1cp = y1c * p1; y1a = y1a & 0xFF; USHORT *ddest = &((USHORT *)dest)[y2*p2 + 0]; for (int x2=0; x2> 5) & 0x3F; UINT b_src = (c>>11) & 0x1F; UINT w = (weight_x * weight_y); r += r_src * w; g += g_src * w; b += b_src * w; UINT weight_x1 = x1a; c = (UINT)dsrc2[1]; // GHO r_src = (c ) & 0x1F; g_src = (c>> 5) & 0x3F; b_src = (c>>11) & 0x1F; w = (weight_x1 * weight_y); r += r_src * w; g += g_src * w; b += b_src * w; UINT weight_y1 = y1a; c = (UINT)dsrc2[p1]; // GHO r_src = (c ) & 0x1F; g_src = (c>> 5) & 0x3F; b_src = (c>>11) & 0x1F; w = (weight_x * weight_y1); r += r_src * w; g += g_src * w; b += b_src * w; c = (UINT)dsrc2[p1+1]; // GHO r_src = (c ) & 0x1F; g_src = (c>> 5) & 0x3F; b_src = (c>>11) & 0x1F; w = (weight_x1 * weight_y1); r += r_src * w; g += g_src * w; b += b_src * w; UINT cc = ((r>>16) & 0x1F) | ((g>>(16-5)) & 0x7E0) | ((b>>(16-11)) & 0xF800); *ddest++ = (USHORT)cc; } } } else // either downscale on vertical or horizontal direction ... { //gsky916: weight_shift calculation moved here. float source_texels_per_out_pixel = ( (w1/(float)w2 + 1) * (h1/(float)h2 + 1) ); float weight_per_pixel = source_texels_per_out_pixel * 256 * 256; //weight_x * weight_y float accum_per_pixel = weight_per_pixel*256; //color value is 0-255 float weight_div = accum_per_pixel / 4294967000.0f; if (weight_div > 1) weight_shift = (int)ceilf( logf((float)weight_div)/logf(2.0f) ); weight_shift = min(15, weight_shift); // this could go to 15 and still be ok. // cache x1a, x1b for all the columns: // ...and your OS better have garbage collection on process exit :) if (g_px1ab_w < w2) { if (g_px1ab) delete [] g_px1ab; g_px1ab = new int[w2*2 * 2]; g_px1ab_w = w2*2; } for (int x2=0; x2 we want to interpolate between two pixels! x1b = x1a + 256; x1b = min(x1b, 256*w1 - 1); g_px1ab[x2*2+0] = x1a; g_px1ab[x2*2+1] = x1b; } // FOR EVERY OUTPUT PIXEL for (int y2=0; y2 we want to interpolate between two pixels! y1b = y1a + 256; y1b = min(y1b, 256*h1 - 1); int y1c = y1a >> 8; int y1d = y1b >> 8; ddest = &((USHORT *)dest)[y2*p2 + 0]; for (int x2=0; x2> 8; int x1d = x1b >> 8; // ADD UP ALL INPUT PIXELS CONTRIBUTING TO THIS OUTPUT PIXEL: UINT r=0, g=0, b=0, a=0; for (int y=y1c; y<=y1d; y++) { UINT weight_y = 256; if (y1c != y1d) { if (y==y1c) weight_y = 256 - (y1a & 0xFF); else if (y==y1d) weight_y = (y1b & 0xFF); } USHORT *dsrc2 = &dsrc[y*p1 + x1c]; // GHO for (int x=x1c; x<=x1d; x++) { UINT weight_x = 256; if (x1c != x1d) { if (x==x1c) weight_x = 256 - (x1a & 0xFF); else if (x==x1d) weight_x = (x1b & 0xFF); } UINT c = dsrc[y*p1 + x]; UINT r_src = (c ) & 0x1F; UINT g_src = (c>> 5) & 0x3F; UINT b_src = (c>>11) & 0x1F; UINT w = (weight_x * weight_y) >> weight_shift; r += r_src * w; g += g_src * w; b += b_src * w; a += w; } } // write results UINT c = ((r/a) & 0x1F) | (((g/a) << 5) & 0x7E0) | (((b/a) << 11) & 0xF800); *ddest++ = c; } } } } ================================================ FILE: filter/bilinear32.cpp ================================================ /* ============================================================================= Source Code for Smooth Image Resampling (Resizing) in C/C++ (Visual Studio) by Ryan Geiss - 3 July 2008 The code below performs a fairly-well-optimized high-quality resample (smooth resize) of a 3-channel image that is padded to 4 bytes per pixel. The pixel format is assumed to be ARGB. If you want to make it handle an alpha channel, the changes should be very straightforward. In general, if the image is being enlarged, bilinear interpolation is used; if the image is being downsized, all input pixels are weighed appropriately to produce the correct result. In order to be efficient, it actually performs 1 of 4 routines. First, if you are cutting the image size *exactly* in half (common when generating mipmap levels), it will use a specialized routine to do just that. There are actually two versions of this routine - an MMX one and a non-MMX one. It detects if MMX is present and chooses the right one. If you're not cutting the image perfectly in half, it executes one of two general resize routines. If upsampling (increasing width and height) on both X and Y, then it executes a faster resize algorithm that just performs a 2x2 bilinear interpolation of the appropriate input pixels, for each output pixel. If downsampling on either X or Y (or both), though, the general-purpose routine gets run. It iterates over every output pixel, and for each one, it iterates over the input pixels that map to that output pixel [there will usually be more than 1 in this case]. Each input pixel is properly weighted to produce exactly the right image. There's a little bit of extra bookkeeping, but in general, it's pretty efficient. Note that on extreme downsizing (2,800 x 2,800 -> 1x1 or greater ratio), the colors can overflow. If you want to fix this lazily, just break your resize into two passes. Also note that when your program exits, or when you are done using this function, you should delete [] g_px1a and g_px1ab if they have been allocated. I posted this here because this is pretty common code that is a bit of a pain to write; I've written it several times over the years, and I really don't feel like writing it again. So - here it is - for my reference, and for yours. Enjoy! /* ========================================================================== */ //***********Here DxWnd only adapted general resize routines*************// #include #include static int* g_px1a = NULL; static int* g_px1c = NULL; static int g_px1a_w = 0; static int* g_px1ab = NULL; static int g_px1ab_w = 0; void WINAPI Resize_HQ_4ch( unsigned char* src, RECT *srcrect, int srcpitch, unsigned char* dest, RECT *destrect, int destpitch) { // Both buffers must be in ARGB format, and a scanline should be w*4 bytes. // NOTE: THIS WILL OVERFLOW for really major downsizing (2800x2800 to 1x1 or more) // (2800 ~ sqrt(2^23)) - for a lazy fix, just call this in two passes. int w1, w2, h1, h2; w1 = srcrect->right - srcrect->left; h1 = srcrect->bottom - srcrect->top; w2 = destrect->right - destrect->left; h2 = destrect->bottom - destrect->top; if(!srcpitch) srcpitch=w1<<2; if(!destpitch) destpitch=w1<<2; // GHO addiction: new variables // p1, p2: pitch offsets of source and dest surfaces in DWORD offset, that is pitch / sizeof(DWORD) // beware: current version can operate on displaced source rect, but assumes the dest rect is always the full surface!! UINT p1 = srcpitch >> 2; UINT p2 = destpitch >> 2; UINT *dsrc = (UINT *)src + (srcrect->top * p1) + srcrect->left; UINT *ddest = (UINT *)dest; // arbitrary resize. bool bUpsampleX = (w1 < w2); bool bUpsampleY = (h1 < h2); // If too many input pixels map to one output pixel, our 32-bit accumulation values // could overflow - so, if we have huge mappings like that, cut down the weights: // 256 max color value // *256 weight_x // *256 weight_y // *256 (16*16) maximum # of input pixels (x,y) - unless we cut the weights down... int weight_shift = 0; //gsky916: weight_shift calculation in bUpsampleX && bUpsampleY cases are not necessary. //Move to else block to reduce floating point calculations. float fh = 256*h1/(float)h2; float fw = 256*w1/(float)w2; if (bUpsampleX && bUpsampleY) { // faster to just do 2x2 bilinear interp here // cache x1a, x1b for all the columns: // ...and your OS better have garbage collection on process exit :) //gsky916: also cache x1c for better performance if (g_px1a_w < w2) { if (g_px1a) delete [] g_px1a; if (g_px1c) delete [] g_px1c; g_px1a = new int[w2*2 * 1]; g_px1c = new int[w2*2 * 1]; g_px1a_w = w2*2; } for (int x2=0; x2> 8; g_px1a[x2] = x1a & 0xFF; } // FOR EVERY OUTPUT PIXEL // gsky916: Use OpenMP to speed up nested for loops (Enable OpenMP support in compiler). #pragma omp parallel for schedule(dynamic) for (int y2=0; y2> 8; int y1cp = y1c * p1; y1a = y1a & 0xFF; UINT *ddest = &((UINT *)dest)[y2*p2]; for (int x2=0; x2>16) & 0xFF; UINT w = (weight_x * weight_y); r += r_src * w; g += g_src * w; b += b_src * w; UINT weight_x1 = x1a; c = dsrc2[1]; // GHO r_src = c & 0xFF; g_src = c & 0xFF00; b_src = (c>>16) & 0xFF; w = (weight_x1 * weight_y); r += r_src * w; g += g_src * w; b += b_src * w; UINT weight_y1 = y1a; c = dsrc2[p1]; // GHO r_src = c & 0xFF; g_src = c & 0xFF00; b_src = (c>>16) & 0xFF; w = (weight_x * weight_y1); r += r_src * w; g += g_src * w; b += b_src * w; c = dsrc2[p1 + 1]; // GHO r_src = c & 0xFF; g_src = c & 0xFF00; b_src = (c>>16) & 0xFF; w = (weight_x1 * weight_y1); r += r_src * w; g += g_src * w; b += b_src * w; UINT cc = ((r>>16)) | ((g>>16) & 0xFF00) | (b & 0xFF0000); *ddest++ = cc; } } } else // either downscale on vertical or horizontal direction ... { //gsky916: weight_shift calculation moved here. float source_texels_per_out_pixel = ( (w1/(float)w2 + 1) * (h1/(float)h2 + 1) ); float weight_per_pixel = source_texels_per_out_pixel * 256 * 256; //weight_x * weight_y float accum_per_pixel = weight_per_pixel*256; //color value is 0-255 float weight_div = accum_per_pixel / 4294967000.0f; if (weight_div > 1) weight_shift = (int)ceilf( logf((float)weight_div)/logf(2.0f) ); weight_shift = min(15, weight_shift); // this could go to 15 and still be ok. // cache x1a, x1b for all the columns: // ...and your OS better have garbage collection on process exit :) if (g_px1ab_w < w2) { if (g_px1ab) delete [] g_px1ab; g_px1ab = new int[w2*2 * 2]; g_px1ab_w = w2*2; } for (int x2=0; x2 we want to interpolate between two pixels! x1b = x1a + 256; x1b = min(x1b, 256*w1 - 1); g_px1ab[x2*2+0] = x1a; g_px1ab[x2*2+1] = x1b; } // FOR EVERY OUTPUT PIXEL for (int y2=0; y2 we want to interpolate between two pixels! y1b = y1a + 256; y1b = min(y1b, 256*h1 - 1); int y1c = y1a >> 8; int y1d = y1b >> 8; ddest = &((UINT *)dest)[y2*p2 + 0]; for (int x2=0; x2> 8; int x1d = x1b >> 8; // ADD UP ALL INPUT PIXELS CONTRIBUTING TO THIS OUTPUT PIXEL: UINT r=0, g=0, b=0, a=0; for (int y=y1c; y<=y1d; y++) { UINT weight_y = 256; if (y1c != y1d) { if (y==y1c) weight_y = 256 - (y1a & 0xFF); else if (y==y1d) weight_y = (y1b & 0xFF); } //UINT *dsrc2 = &dsrc[y*w1 + x1c]; UINT *dsrc2 = &dsrc[y*p1 + x1c]; // GHO for (int x=x1c; x<=x1d; x++) { UINT weight_x = 256; if (x1c != x1d) { if (x==x1c) weight_x = 256 - (x1a & 0xFF); else if (x==x1d) weight_x = (x1b & 0xFF); } //UINT c = *dsrc2++;//dsrc[y*w1 + x]; UINT c = dsrc[y*p1 + x]; UINT r_src = (c ) & 0xFF; UINT g_src = (c>> 8) & 0xFF; UINT b_src = (c>>16) & 0xFF; UINT w = (weight_x * weight_y) >> weight_shift; r += r_src * w; g += g_src * w; b += b_src * w; a += w; } } // write results UINT c = ((r/a)) | ((g/a)<<8) | ((b/a)<<16); //*ddest++ = c;//ddest[y2*w2 + x2] = c; *ddest++ = c; //ddest+=(w2-p2); } } } } ================================================ FILE: filter/filter.def ================================================ LIBRARY filter EXPORTS Resize_HQ_4ch @1 Resize_HQ_2ch565 @2 Resize_HQ_2ch555 @3 ================================================ FILE: filter/filter.sln ================================================  Microsoft Visual Studio Solution File, Format Version 10.00 # Visual Studio 2008 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "filter", "filter.vcproj", "{F3E96EF0-AF9C-43C2-8E3E-0DD10B66E0FC}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Release|Win32 = Release|Win32 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {F3E96EF0-AF9C-43C2-8E3E-0DD10B66E0FC}.Debug|Win32.ActiveCfg = Debug|Win32 {F3E96EF0-AF9C-43C2-8E3E-0DD10B66E0FC}.Debug|Win32.Build.0 = Debug|Win32 {F3E96EF0-AF9C-43C2-8E3E-0DD10B66E0FC}.Release|Win32.ActiveCfg = Release|Win32 {F3E96EF0-AF9C-43C2-8E3E-0DD10B66E0FC}.Release|Win32.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal ================================================ FILE: filter/filter.vcproj ================================================  ================================================ FILE: host/CDragEdit.cpp ================================================ #include "stdafx.h" #include "CDragEdit.h" CDragEdit::CDragEdit() { } CDragEdit::~CDragEdit() { } BOOL CDragEdit::OnInitDialog() { DragAcceptFiles(); return TRUE; } void CDragEdit::OnDropFiles(HDROP dropInfo) { CString sFile; DWORD nBuffer = 0; // Get number of files UINT nFilesDropped = DragQueryFile(dropInfo, 0xFFFFFFFF, NULL, 0); if(nFilesDropped > 0){ nBuffer = DragQueryFile(dropInfo, 0, NULL, 0); DragQueryFile(dropInfo, 0, sFile.GetBuffer(nBuffer+1), nBuffer+1); SetWindowTextA(sFile.GetBuffer()); sFile.ReleaseBuffer(); } DragFinish(dropInfo); } BEGIN_MESSAGE_MAP(CDragEdit, CEdit) ON_WM_DROPFILES() END_MESSAGE_MAP() ================================================ FILE: host/CDragEdit.h ================================================ // CDragEdit class: inherited by DEdit, adds drag & drop of file pathnames // within the text field. class CDragEdit : public CEdit { public: CDragEdit(); virtual ~CDragEdit(); BOOL OnInitDialog(); private: afx_msg void OnDropFiles(HDROP hDropInfo); DECLARE_MESSAGE_MAP() }; ================================================ FILE: host/CGlobalSettings.cpp ================================================ // CGlobalSettings.cpp : implementation file // #include "stdafx.h" #include "dxwndhost.h" //#include "dxwndhostView.h" #include "CGlobalSettings.h" extern char gInitPath[]; extern BOOL gbDebug; extern BOOL gAutoHideMode; extern BOOL gWarnOnExit; Key_Type FKeys[] = { {IDC_KEY_LABEL1, "Time toggle", IDC_KEY_COMBO1, "timetoggle", 0}, {IDC_KEY_LABEL2, "Time fast", IDC_KEY_COMBO2, "timefast", 0}, {IDC_KEY_LABEL3, "Time slow", IDC_KEY_COMBO3, "timeslow", 0}, {IDC_KEY_LABEL4, "Alt-F4", IDC_KEY_COMBO4, "altf4", 0}, {IDC_KEY_LABEL5, "Clip toggle", IDC_KEY_COMBO5, "cliptoggle", 0}, {IDC_KEY_LABEL6, "Refresh", IDC_KEY_COMBO6, "refresh", 0}, {IDC_KEY_LABEL7, "Log toggle", IDC_KEY_COMBO7, "logtoggle", 0}, {IDC_KEY_LABEL8, "Position t.", IDC_KEY_COMBO8, "plogtoggle", 0}, {IDC_KEY_LABEL9, "FPS toggle", IDC_KEY_COMBO9, "fpstoggle", 0}, {IDC_KEY_LABEL10, "Print screen", IDC_KEY_COMBO10, "printscreen", 0}, {IDC_KEY_LABEL11, "Corner tog.", IDC_KEY_COMBO11, "corner", 0}, {IDC_KEY_LABEL12, "Time freeze", IDC_KEY_COMBO12, "freezetime", 0}, {IDC_KEY_LABEL13, "Fullscr. t.", IDC_KEY_COMBO13, "fullscreen", 0}, {IDC_KEY_LABEL14, "Work area t.", IDC_KEY_COMBO14, "workarea", 0}, {IDC_KEY_LABEL15, "Desktop t.", IDC_KEY_COMBO15, "desktop", 0}, {0, "", 0, 0} }; Key_Type HKeys[] = { {IDC_HKEY_LABEL1, "Minimize", IDC_HKEY_COMBO1, "minimize", 0}, {IDC_HKEY_LABEL2, "Restore", IDC_HKEY_COMBO2, "restore", 0}, {IDC_HKEY_LABEL3, "Kill proc.", IDC_HKEY_COMBO3, "kill", 0}, {0, "", 0, 0} }; KeyCombo_Type FKeyCombo[] = { {-1, "--"}, {VK_F1, "F1"}, {VK_F2, "F2"}, {VK_F3, "F3"}, {VK_F5, "F5"}, {VK_F6, "F6"}, {VK_F7, "F7"}, {VK_F8, "F8"}, {VK_F9, "F9"}, {VK_F10, "F10"}, {VK_F11, "F11"}, {VK_F12, "F12"}, {0, ""} }; KeyCombo_Type HKeyCombo[] = { {-1, "--"}, {VK_END, "END"}, {VK_HOME, "HOME"}, {VK_DELETE, "DEL"}, {VK_ESCAPE, "ESC"}, {VK_F1, "F1"}, {VK_F2, "F2"}, {VK_F3, "F3"}, {VK_F5, "F5"}, {VK_F6, "F6"}, {VK_F7, "F7"}, {VK_F8, "F8"}, {VK_F9, "F9"}, {VK_F10, "F10"}, {VK_F11, "F11"}, {VK_F12, "F12"}, {0, ""} }; // CGlobalSettings dialog IMPLEMENT_DYNAMIC(CGlobalSettings, CDialog) CGlobalSettings::CGlobalSettings(CWnd* pParent /*=NULL*/) : CDialog(CGlobalSettings::IDD, pParent) { //m_DebugMode = GetPrivateProfileInt("window", "debug", 0, gInitPath); m_AutoHideMode = GetPrivateProfileInt("window", "autohide", 0, gInitPath); m_CheckAdminRights = GetPrivateProfileInt("window", "checkadmin", 0, gInitPath); m_NameFromFolder = GetPrivateProfileInt("window", "namefromfolder", 0, gInitPath); m_MultiHooks = GetPrivateProfileInt("window", "multiprocesshook", 0, gInitPath); m_WarnOnExit = GetPrivateProfileInt("window", "warnonexit", 0, gInitPath); m_UpdatePaths = GetPrivateProfileInt("window", "updatepaths", 1, gInitPath); // texture limits m_TexMinX = GetPrivateProfileInt("texture", "MinTexX", 0, gInitPath); m_TexMinY = GetPrivateProfileInt("texture", "MinTexY", 0, gInitPath); m_TexMaxX = GetPrivateProfileInt("texture", "MaxTexX", 0, gInitPath); m_TexMaxY = GetPrivateProfileInt("texture", "MaxTexY", 0, gInitPath); // defaults m_DefaultCoordinates = GetPrivateProfileInt("window", "defaultcoord", 0, gInitPath); m_DefaultPosX = GetPrivateProfileInt("window", "defaultposx", 50, gInitPath); m_DefaultPosY = GetPrivateProfileInt("window", "defaultposy", 50, gInitPath); m_DefaultSizX = GetPrivateProfileInt("window", "defaultsizx", 800, gInitPath); m_DefaultSizY = GetPrivateProfileInt("window", "defaultsizy", 600, gInitPath); } CGlobalSettings::~CGlobalSettings() { } void CGlobalSettings::DoDataExchange(CDataExchange* pDX) { //char msg[80]; //sprintf(msg, "DoDataExchange(1) defposx = %d", m_DefaultPosX); //MessageBox(msg, "debug", 0); CString sDefaultPosX, sDefaultPosY; sDefaultPosX.Format("%d", m_DefaultPosX); sDefaultPosY.Format("%d", m_DefaultPosY); //DDX_Check(pDX, IDC_CONFIG_DEBUGMODE, m_DebugMode); DDX_Check(pDX, IDC_CONFIG_AUTOHIDE, m_AutoHideMode); DDX_Check(pDX, IDC_CONFIG_CHECKADMIN, m_CheckAdminRights); DDX_Check(pDX, IDC_CONFIG_NAMEFROMFOLDER, m_NameFromFolder); DDX_Check(pDX, IDC_CONFIG_MULTIHOOKS, m_MultiHooks); DDX_Check(pDX, IDC_CONFIG_WARNONEXIT, m_WarnOnExit); DDX_Check(pDX, IDC_CONFIG_SAVEPATHS, m_UpdatePaths); DDX_Text (pDX, IDC_TEX_MINX, m_TexMinX); DDX_Text (pDX, IDC_TEX_MINY, m_TexMinY); DDX_Text (pDX, IDC_TEX_MAXX, m_TexMaxX); DDX_Text (pDX, IDC_TEX_MAXY, m_TexMaxY); DDX_Radio(pDX, IDC_DEFAULTCOORDINATES, m_DefaultCoordinates); DDX_Text(pDX, IDC_DEFAULTPOSX, sDefaultPosX); DDX_Text(pDX, IDC_DEFAULTPOSY, sDefaultPosY); DDX_Text(pDX, IDC_DEFAULTSIZX, m_DefaultSizX); DDX_Text(pDX, IDC_DEFAULTSIZY, m_DefaultSizY); m_DefaultPosX = atoi(sDefaultPosX); m_DefaultPosY = atoi(sDefaultPosY); CDialog::DoDataExchange(pDX); //sprintf(msg, "DoDataExchange(2) defposx = %d", m_DefaultPosX); //MessageBox(msg, "debug", 0); } BEGIN_MESSAGE_MAP(CGlobalSettings, CDialog) END_MESSAGE_MAP() BOOL CGlobalSettings::OnInitDialog() { IFormat *m_pRelIntegerFormat = new(RelIntegerFormat); m_EditPosX.SubclassDlgItem(IDC_DEFAULTPOSX, this); m_EditPosY.SubclassDlgItem(IDC_DEFAULTPOSY, this); m_EditPosX.SetFormatter(m_pRelIntegerFormat); m_EditPosY.SetFormatter(m_pRelIntegerFormat); CDialog::OnInitDialog(); for(int i=0; FKeys[i].iLabelResourceId; i++){ int iCursor = 0; DWORD dwKey; dwKey = GetPrivateProfileInt("keymapping", FKeys[i].sIniLabel, -1, gInitPath); SetDlgItemText(FKeys[i].iLabelResourceId,FKeys[i].sLabel); CComboBox *pCombo=(CComboBox *)GetDlgItem(FKeys[i].iComboResourceId); pCombo->Clear(); for(int j=0; FKeyCombo[j].dwVKeyCode; j++) { pCombo->AddString(FKeyCombo[j].sVKeyLabel); if(dwKey == FKeyCombo[j].dwVKeyCode) iCursor=j; } pCombo->SetCurSel(iCursor); } for(int i=0; HKeys[i].iLabelResourceId; i++){ int iCursor = 0; DWORD dwKey; dwKey = GetPrivateProfileInt("keymapping", HKeys[i].sIniLabel, -1, gInitPath); SetDlgItemText(HKeys[i].iLabelResourceId,HKeys[i].sLabel); CComboBox *pCombo=(CComboBox *)GetDlgItem(HKeys[i].iComboResourceId); pCombo->Clear(); for(int j=0; HKeyCombo[j].dwVKeyCode; j++) { pCombo->AddString(HKeyCombo[j].sVKeyLabel); if(dwKey == HKeyCombo[j].dwVKeyCode) iCursor=j; } pCombo->SetCurSel(iCursor); } return TRUE; // return TRUE unless you set the focus to a control } void CGlobalSettings::OnOK() { char val[32]; CDialog::OnOK(); // boolean flags //sprintf_s(val, sizeof(val), "%i", m_DebugMode); //WritePrivateProfileString("window", "debug", val, gInitPath); sprintf_s(val, sizeof(val), "%i", m_AutoHideMode); WritePrivateProfileString("window", "autohide", val, gInitPath); sprintf_s(val, sizeof(val), "%i", m_CheckAdminRights); WritePrivateProfileString("window", "checkadmin", val, gInitPath); sprintf_s(val, sizeof(val), "%i", m_NameFromFolder); WritePrivateProfileString("window", "namefromfolder", val, gInitPath); sprintf_s(val, sizeof(val), "%i", m_MultiHooks); WritePrivateProfileString("window", "multiprocesshook", val, gInitPath); sprintf_s(val, sizeof(val), "%i", m_WarnOnExit); WritePrivateProfileString("window", "warnonexit", val, gInitPath); sprintf_s(val, sizeof(val), "%i", m_UpdatePaths); WritePrivateProfileString("window", "updatepaths", val, gInitPath); // texture limits sprintf_s(val, sizeof(val), "%i", m_TexMinX); WritePrivateProfileString("texture", "MinTexX", val, gInitPath); sprintf_s(val, sizeof(val), "%i", m_TexMinY); WritePrivateProfileString("texture", "MinTexY", val, gInitPath); sprintf_s(val, sizeof(val), "%i", m_TexMaxX); WritePrivateProfileString("texture", "MaxTexX", val, gInitPath); sprintf_s(val, sizeof(val), "%i", m_TexMaxY); WritePrivateProfileString("texture", "MaxTexY", val, gInitPath); // defaults sprintf_s(val, sizeof(val), "%i", m_DefaultCoordinates); WritePrivateProfileString("window", "defaultcoord", val, gInitPath); sprintf_s(val, sizeof(val), "%i", m_DefaultPosX); WritePrivateProfileString("window", "defaultposx", val, gInitPath); sprintf_s(val, sizeof(val), "%i", m_DefaultPosY); WritePrivateProfileString("window", "defaultposy", val, gInitPath); sprintf_s(val, sizeof(val), "%i", m_DefaultSizX); WritePrivateProfileString("window", "defaultsizx", val, gInitPath); sprintf_s(val, sizeof(val), "%i", m_DefaultSizY); WritePrivateProfileString("window", "defaultsizy", val, gInitPath); // fkeys for(int i=0; FKeys[i].iLabelResourceId; i++){ int iCursor = 0; DWORD dwKey; CComboBox *pCombo=(CComboBox *)GetDlgItem(FKeys[i].iComboResourceId); dwKey = FKeyCombo[pCombo->GetCurSel()].dwVKeyCode; if(dwKey != -1) { char sKNum[20]; sprintf_s(sKNum, sizeof(sKNum), "%i", dwKey); WritePrivateProfileString("keymapping", FKeys[i].sIniLabel, sKNum, gInitPath); } else WritePrivateProfileString("keymapping", FKeys[i].sIniLabel, "", gInitPath); } // hot keys for(int i=0; HKeys[i].iLabelResourceId; i++){ int iCursor = 0; DWORD dwKey; CComboBox *pCombo=(CComboBox *)GetDlgItem(HKeys[i].iComboResourceId); dwKey = HKeyCombo[pCombo->GetCurSel()].dwVKeyCode; if(dwKey != -1) { char sKNum[20]; sprintf_s(sKNum, sizeof(sKNum), "%i", dwKey); WritePrivateProfileString("keymapping", HKeys[i].sIniLabel, sKNum, gInitPath); } else WritePrivateProfileString("keymapping", HKeys[i].sIniLabel, "", gInitPath); } //(CDxwndhostView *)(this->GetParent())->UpdateHotKeys(); //gbDebug = m_DebugMode; gAutoHideMode = m_AutoHideMode; gWarnOnExit = m_WarnOnExit; } ================================================ FILE: host/CGlobalSettings.h ================================================ #include "specialedit.h" #pragma once typedef struct { int iLabelResourceId; char *sLabel; int iComboResourceId; char *sIniLabel; int iComboSelection; } Key_Type; typedef struct { DWORD dwVKeyCode; char *sVKeyLabel; } KeyCombo_Type; // CGlobalSettings dialog class CGlobalSettings : public CDialog { DECLARE_DYNAMIC(CGlobalSettings) public: CGlobalSettings(CWnd* pParent = NULL); // standard constructor virtual ~CGlobalSettings(); // Dialog Data enum { IDD = IDD_GLOBAL_CONFIG }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //BOOL m_DebugMode; BOOL m_UpdatePaths; BOOL m_AutoHideMode; BOOL m_CheckAdminRights; BOOL m_NameFromFolder; BOOL m_MultiHooks; BOOL m_WarnOnExit; int m_TexMinX; int m_TexMinY; int m_TexMaxX; int m_TexMaxY; int m_DefaultCoordinates; int m_DefaultPosX; int m_DefaultPosY; int m_DefaultSizX; int m_DefaultSizY; DECLARE_MESSAGE_MAP() public: public: virtual BOOL OnInitDialog(); protected: CSpecialEdit m_EditPosX; CSpecialEdit m_EditPosY; virtual void OnOK(); }; ================================================ FILE: host/CoolUtils.cpp ================================================ #include "stdafx.h" #include "CoolUtils.h" /**************************************************************************** * Function Name : gShowHideTaskBar() * * Parameters : BOOL bHide (flag to toggle Show/Hide of Taskbar) * * Return type : void * * Purpose : Function is used to Show/Hide the TaskBar * * Author : Ashutosh R. Bhatikar (ARB) * * Date written : 20th December 2000 * * Modification History : * * Date of modification Reason * * 25th December 2000 Added methods to Show/Hide menu * ****************************************************************************/ void gShowHideTaskBar(BOOL bHide /*=FALSE*/) { CRect rectWorkArea = CRect(0,0,0,0); CRect rectTaskBar = CRect(0,0,0,0); static HMENU hMenu = NULL; CWnd *pWnd = CWnd::FindWindow("Shell_TrayWnd", ""); //CWnd *pDesktopWnd = CWnd::GetDesktopWindow(); CWnd *pStart; pStart = NULL; if( bHide ) { // Code to Hide the System Task Bar SystemParametersInfo(SPI_GETWORKAREA, 0, (LPVOID)&rectWorkArea, 0); if( pWnd ) { pWnd->GetWindowRect(rectTaskBar); rectWorkArea.bottom += rectTaskBar.Height(); SystemParametersInfo(SPI_SETWORKAREA, 0, (LPVOID)&rectWorkArea, 0); pWnd->ShowWindow(SW_HIDE); //This will retrieve the Handle of Start Button using the above // handle and class name of start Button. // v2.03.52 fix: Win10 has no such a button! pStart = pWnd->FindWindow("Button", NULL); if(pStart) pStart->ShowWindow(SW_HIDE); } } else { // Code to Show the System Task Bar SystemParametersInfo(SPI_GETWORKAREA, 0, (LPVOID)&rectWorkArea, 0); if( pWnd ) { pWnd->GetWindowRect(rectTaskBar); rectWorkArea.bottom -= rectTaskBar.Height(); SystemParametersInfo(SPI_SETWORKAREA, 0, (LPVOID)&rectWorkArea, 0); pWnd->ShowWindow(SW_SHOW); //This will retrieve the Handle of Start Button using the above // handle and class name of start Button. // v2.03.52 fix: Win10 has no such a button! pStart = pWnd->FindWindow("Button", NULL); if(pStart) pStart->ShowWindow(SW_SHOW); } } } /**************************************************************************** * Function Name : gHideMenu() * * Parameters : CWnd* pWnd (Window associated with the menu) * * Return type : HMENU * * Purpose : Function hides the menu associated with pWnd * * Author : Ashutosh R. Bhatikar (ARB) * * Date written : 25nd December 2000 * * Modification History : * * Date of modification Reason * ****************************************************************************/ HMENU gHideMenu(/*in*/CWnd* pWnd) { HMENU hMenu = ::GetMenu(pWnd->GetSafeHwnd()); if (hMenu != NULL) { // Invalidate before SetMenu since we are going to replace // the frame's client area anyway pWnd->Invalidate(); pWnd->SetMenu(NULL); if( pWnd->IsKindOf(RUNTIME_CLASS(CFrameWnd)) ) { CFrameWnd* pFrameWnd = (CFrameWnd*)pWnd; // avoid any idle menu processing pFrameWnd->m_nIdleFlags &= ~CFrameWnd::idleMenu; } return hMenu; } return NULL; } /**************************************************************************** * Function Name : gShowMenuBack() * * Parameters : HMENU hMenu (Handle of the menu which was hidden) * * CWnd* pWnd (Window associated with the menu) * * Return type : BOOL * * Purpose : Function shows back the menu associated with pWnd * * Author : Ashutosh R. Bhatikar (ARB) * * Date written : 25nd December 2000 * * Modification History : * * Date of modification Reason * ****************************************************************************/ BOOL gShowMenuBack(/*in*/HMENU hMenu, /*in*/CWnd* pWnd) { // put the menu back in place if it was removed before if (hMenu != NULL) { // Invalidate before SetMenu since we are going to replace // the frame's client area anyway pWnd->Invalidate(); ::SetMenu(pWnd->GetSafeHwnd(), hMenu); return TRUE; } return FALSE; } ================================================ FILE: host/CoolUtils.h ================================================ #ifndef __COOLUTILS_H #define __COOLUTILS_H #include "stdafx.h" void gShowHideTaskBar(/*in*/BOOL bHide = FALSE); HMENU gHideMenu(/*in*/CWnd* pWnd); BOOL gShowMenuBack(/*in*/HMENU hMenu, /*in*/CWnd* pWnd); #endif ================================================ FILE: host/CppUACSelfElevation.cpp ================================================ /****************************** Module Header ******************************\ Module Name: CppUACSelfElevation.cpp Project: CppUACSelfElevation Copyright (c) Microsoft Corporation. User Account Control (UAC) is a new security component in Windows Vista and newer operating systems. With UAC fully enabled, interactive administrators normally run with least user privileges. This example demonstrates how to check the privilege level of the current process, and how to self-elevate the process by giving explicit consent with the Consent UI. This source is subject to the Microsoft Public License. See http://www.microsoft.com/en-us/openness/resources/licenses.aspx#MPL. All other rights reserved. THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE. \***************************************************************************/ #pragma region Includes and Manifest Dependencies #include "stdafx.h" #include #include #include #include #include #include "Resource.h" #include // Enable Visual Style #if defined _M_IX86 #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"") #elif defined _M_IA64 #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='ia64' publicKeyToken='6595b64144ccf1df' language='*'\"") #elif defined _M_X64 #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"") #else #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"") #endif #pragma endregion #pragma region "Helper Functions for Admin Privileges and Elevation Status" // // FUNCTION: IsUserInAdminGroup() // // PURPOSE: The function checks whether the primary access token of the // process belongs to user account that is a member of the local // Administrators group, even if it currently is not elevated. // // RETURN VALUE: Returns TRUE if the primary access token of the process // belongs to user account that is a member of the local Administrators // group. Returns FALSE if the token does not. // // EXCEPTION: If this function fails, it throws a C++ DWORD exception which // contains the Win32 error code of the failure. // // EXAMPLE CALL: // try // { // if (IsUserInAdminGroup()) // wprintf (L"User is a member of the Administrators group\n"); // else // wprintf (L"User is not a member of the Administrators group\n"); // } // catch (DWORD dwError) // { // wprintf(L"IsUserInAdminGroup failed w/err %lu\n", dwError); // } // BOOL IsUserInAdminGroup() { BOOL fInAdminGroup = FALSE; DWORD dwError = ERROR_SUCCESS; HANDLE hToken = NULL; HANDLE hTokenToCheck = NULL; DWORD cbSize = 0; OSVERSIONINFO osver = { sizeof(osver) }; // Open the primary access token of the process for query and duplicate. if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY | TOKEN_DUPLICATE, &hToken)) { dwError = GetLastError(); goto Cleanup; } // Determine whether system is running Windows Vista or later operating // systems (major version >= 6) because they support linked tokens, but // previous versions (major version < 6) do not. if (!GetVersionEx(&osver)) { dwError = GetLastError(); goto Cleanup; } if (osver.dwMajorVersion >= 6) { // Running Windows Vista or later (major version >= 6). // Determine token type: limited, elevated, or default. TOKEN_ELEVATION_TYPE elevType; if (!GetTokenInformation(hToken, TokenElevationType, &elevType, sizeof(elevType), &cbSize)) { dwError = GetLastError(); goto Cleanup; } // If limited, get the linked elevated token for further check. if (TokenElevationTypeLimited == elevType) { if (!GetTokenInformation(hToken, TokenLinkedToken, &hTokenToCheck, sizeof(hTokenToCheck), &cbSize)) { dwError = GetLastError(); goto Cleanup; } } } // CheckTokenMembership requires an impersonation token. If we just got a // linked token, it already is an impersonation token. If we did not get // a linked token, duplicate the original into an impersonation token for // CheckTokenMembership. if (!hTokenToCheck) { if (!DuplicateToken(hToken, SecurityIdentification, &hTokenToCheck)) { dwError = GetLastError(); goto Cleanup; } } // Create the SID corresponding to the Administrators group. BYTE adminSID[SECURITY_MAX_SID_SIZE]; cbSize = sizeof(adminSID); if (!CreateWellKnownSid(WinBuiltinAdministratorsSid, NULL, &adminSID, &cbSize)) { dwError = GetLastError(); goto Cleanup; } // Check if the token to be checked contains admin SID. // http://msdn.microsoft.com/en-us/library/aa379596(VS.85).aspx: // To determine whether a SID is enabled in a token, that is, whether it // has the SE_GROUP_ENABLED attribute, call CheckTokenMembership. if (!CheckTokenMembership(hTokenToCheck, &adminSID, &fInAdminGroup)) { dwError = GetLastError(); goto Cleanup; } Cleanup: // Centralized cleanup for all allocated resources. if (hToken) { CloseHandle(hToken); hToken = NULL; } if (hTokenToCheck) { CloseHandle(hTokenToCheck); hTokenToCheck = NULL; } // Throw the error if something failed in the function. if (ERROR_SUCCESS != dwError) { throw dwError; } return fInAdminGroup; } // // FUNCTION: IsRunAsAdmin() // // PURPOSE: The function checks whether the current process is run as // administrator. In other words, it dictates whether the primary access // token of the process belongs to user account that is a member of the // local Administrators group and it is elevated. // // RETURN VALUE: Returns TRUE if the primary access token of the process // belongs to user account that is a member of the local Administrators // group and it is elevated. Returns FALSE if the token does not. // // EXCEPTION: If this function fails, it throws a C++ DWORD exception which // contains the Win32 error code of the failure. // // EXAMPLE CALL: // try // { // if (IsRunAsAdmin()) // wprintf (L"Process is run as administrator\n"); // else // wprintf (L"Process is not run as administrator\n"); // } // catch (DWORD dwError) // { // wprintf(L"IsRunAsAdmin failed w/err %lu\n", dwError); // } // BOOL IsRunAsAdmin() { BOOL fIsRunAsAdmin = FALSE; DWORD dwError = ERROR_SUCCESS; PSID pAdministratorsGroup = NULL; // Allocate and initialize a SID of the administrators group. SID_IDENTIFIER_AUTHORITY NtAuthority = SECURITY_NT_AUTHORITY; if (!AllocateAndInitializeSid( &NtAuthority, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, &pAdministratorsGroup)) { dwError = GetLastError(); goto Cleanup; } // Determine whether the SID of administrators group is enabled in // the primary access token of the process. if (!CheckTokenMembership(NULL, pAdministratorsGroup, &fIsRunAsAdmin)) { dwError = GetLastError(); goto Cleanup; } Cleanup: // Centralized cleanup for all allocated resources. if (pAdministratorsGroup) { FreeSid(pAdministratorsGroup); pAdministratorsGroup = NULL; } // Throw the error if something failed in the function. if (ERROR_SUCCESS != dwError) { throw dwError; } return fIsRunAsAdmin; } // // FUNCTION: IsProcessElevated() // // PURPOSE: The function gets the elevation information of the current // process. It dictates whether the process is elevated or not. Token // elevation is only available on Windows Vista and newer operating // systems, thus IsProcessElevated throws a C++ exception if it is called // on systems prior to Windows Vista. It is not appropriate to use this // function to determine whether a process is run as administartor. // // RETURN VALUE: Returns TRUE if the process is elevated. Returns FALSE if // it is not. // // EXCEPTION: If this function fails, it throws a C++ DWORD exception // which contains the Win32 error code of the failure. For example, if // IsProcessElevated is called on systems prior to Windows Vista, the error // code will be ERROR_INVALID_PARAMETER. // // NOTE: TOKEN_INFORMATION_CLASS provides TokenElevationType to check the // elevation type (TokenElevationTypeDefault / TokenElevationTypeLimited / // TokenElevationTypeFull) of the process. It is different from // TokenElevation in that, when UAC is turned off, elevation type always // returns TokenElevationTypeDefault even though the process is elevated // (Integrity Level == High). In other words, it is not safe to say if the // process is elevated based on elevation type. Instead, we should use // TokenElevation. // // EXAMPLE CALL: // try // { // if (IsProcessElevated()) // wprintf (L"Process is elevated\n"); // else // wprintf (L"Process is not elevated\n"); // } // catch (DWORD dwError) // { // wprintf(L"IsProcessElevated failed w/err %lu\n", dwError); // } // BOOL IsProcessElevated() { BOOL fIsElevated = FALSE; DWORD dwError = ERROR_SUCCESS; HANDLE hToken = NULL; // Open the primary access token of the process with TOKEN_QUERY. if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hToken)) { dwError = GetLastError(); goto Cleanup; } // Retrieve token elevation information. TOKEN_ELEVATION elevation; DWORD dwSize; if (!GetTokenInformation(hToken, TokenElevation, &elevation, sizeof(elevation), &dwSize)) { // When the process is run on operating systems prior to Windows // Vista, GetTokenInformation returns FALSE with the // ERROR_INVALID_PARAMETER error code because TokenElevation is // not supported on those operating systems. dwError = GetLastError(); goto Cleanup; } fIsElevated = elevation.TokenIsElevated; Cleanup: // Centralized cleanup for all allocated resources. if (hToken) { CloseHandle(hToken); hToken = NULL; } // Throw the error if something failed in the function. if (ERROR_SUCCESS != dwError) { throw dwError; } return fIsElevated; } // // FUNCTION: GetProcessIntegrityLevel() // // PURPOSE: The function gets the integrity level of the current process. // Integrity level is only available on Windows Vista and newer operating // systems, thus GetProcessIntegrityLevel throws a C++ exception if it is // called on systems prior to Windows Vista. // // RETURN VALUE: Returns the integrity level of the current process. It is // usually one of these values: // // SECURITY_MANDATORY_UNTRUSTED_RID (SID: S-1-16-0x0) // Means untrusted level. It is used by processes started by the // Anonymous group. Blocks most write access. // // SECURITY_MANDATORY_LOW_RID (SID: S-1-16-0x1000) // Means low integrity level. It is used by Protected Mode Internet // Explorer. Blocks write acess to most objects (such as files and // registry keys) on the system. // // SECURITY_MANDATORY_MEDIUM_RID (SID: S-1-16-0x2000) // Means medium integrity level. It is used by normal applications // being launched while UAC is enabled. // // SECURITY_MANDATORY_HIGH_RID (SID: S-1-16-0x3000) // Means high integrity level. It is used by administrative applications // launched through elevation when UAC is enabled, or normal // applications if UAC is disabled and the user is an administrator. // // SECURITY_MANDATORY_SYSTEM_RID (SID: S-1-16-0x4000) // Means system integrity level. It is used by services and other // system-level applications (such as Wininit, Winlogon, Smss, etc.) // // EXCEPTION: If this function fails, it throws a C++ DWORD exception // which contains the Win32 error code of the failure. For example, if // GetProcessIntegrityLevel is called on systems prior to Windows Vista, // the error code will be ERROR_INVALID_PARAMETER. // // EXAMPLE CALL: // try // { // DWORD dwIntegrityLevel = GetProcessIntegrityLevel(); // } // catch (DWORD dwError) // { // wprintf(L"GetProcessIntegrityLevel failed w/err %lu\n", dwError); // } // DWORD GetProcessIntegrityLevel() { DWORD dwIntegrityLevel = 0; DWORD dwError = ERROR_SUCCESS; HANDLE hToken = NULL; DWORD cbTokenIL = 0; PTOKEN_MANDATORY_LABEL pTokenIL = NULL; // Open the primary access token of the process with TOKEN_QUERY. if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hToken)) { dwError = GetLastError(); goto Cleanup; } // Query the size of the token integrity level information. Note that // we expect a FALSE result and the last error ERROR_INSUFFICIENT_BUFFER // from GetTokenInformation because we have given it a NULL buffer. On // exit cbTokenIL will tell the size of the integrity level information. if (!GetTokenInformation(hToken, TokenIntegrityLevel, NULL, 0, &cbTokenIL)) { if (ERROR_INSUFFICIENT_BUFFER != GetLastError()) { // When the process is run on operating systems prior to Windows // Vista, GetTokenInformation returns FALSE with the // ERROR_INVALID_PARAMETER error code because TokenElevation // is not supported on those operating systems. dwError = GetLastError(); goto Cleanup; } } // Now we allocate a buffer for the integrity level information. pTokenIL = (TOKEN_MANDATORY_LABEL *)LocalAlloc(LPTR, cbTokenIL); if (pTokenIL == NULL) { dwError = GetLastError(); goto Cleanup; } // Retrieve token integrity level information. if (!GetTokenInformation(hToken, TokenIntegrityLevel, pTokenIL, cbTokenIL, &cbTokenIL)) { dwError = GetLastError(); goto Cleanup; } // Integrity Level SIDs are in the form of S-1-16-0xXXXX. (e.g. // S-1-16-0x1000 stands for low integrity level SID). There is one and // only one subauthority. dwIntegrityLevel = *GetSidSubAuthority(pTokenIL->Label.Sid, 0); Cleanup: // Centralized cleanup for all allocated resources. if (hToken) { CloseHandle(hToken); hToken = NULL; } if (pTokenIL) { LocalFree(pTokenIL); pTokenIL = NULL; cbTokenIL = 0; } // Throw the error if something failed in the function. if (ERROR_SUCCESS != dwError) { throw dwError; } return dwIntegrityLevel; } #pragma endregion // // FUNCTION: ReportError(LPWSTR, DWORD) // // PURPOSE: Display an error dialog for the failure of a certain function. // // PARAMETERS: // * pszFunction - the name of the function that failed. // * dwError - the Win32 error code. Its default value is the calling // thread's last-error code value. // // NOTE: The failing function must be immediately followed by the call of // ReportError if you do not explicitly specify the dwError parameter of // ReportError. This is to ensure that the calling thread's last-error code // value is not overwritten by any calls of API between the failing // function and ReportError. // void ReportError(LPCWSTR pszFunction, DWORD dwError = GetLastError()) { char szMessage[200]; if (SUCCEEDED(StringCchPrintf(szMessage, ARRAYSIZE(szMessage), "%s failed w/err 0x%08lx", pszFunction, dwError))) { MessageBox(NULL, szMessage, "Error", MB_ICONERROR); } } ================================================ FILE: host/DesktopDialog.cpp ================================================ // DesktopDialog.cpp : implementation file // #include "stdafx.h" #include "dxwndhost.h" #include "DesktopDialog.h" // CDesktopDialog dialog IMPLEMENT_DYNAMIC(CDesktopDialog, CDialog) CDesktopDialog::CDesktopDialog(CWnd* pParent /*=NULL*/) : CDialog(CDesktopDialog::IDD, pParent) { } CDesktopDialog::~CDesktopDialog() { } void CDesktopDialog::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CDesktopDialog, CDialog) ON_WM_TIMER() END_MESSAGE_MAP() #define IDDesktopTIMER 2 // CDesktopDialog message handlers void CDesktopDialog::OnTimer(UINT_PTR nIDEvent) { char sMsg[1024]; CDialog::OnTimer(nIDEvent); RECT desktop; HDC hDC; // Get a handle to the desktop window const CWnd *hDesktop = GetDesktopWindow(); // Get the size of screen to the variable desktop hDesktop->GetWindowRect(&desktop); // The top left corner will have coordinates (0,0) // and the bottom right corner will have coordinates // (horizontal, vertical) hDC = ::GetDC(::GetDesktopWindow()); int iBPP = GetDeviceCaps(hDC, BITSPIXEL); PIXELFORMATDESCRIPTOR pfd; int iPixelFormat; // get the current pixel format index #if 0 ::DescribePixelFormat(hDC, 1, sizeof(PIXELFORMATDESCRIPTOR), &pfd); HMODULE ogl; //ogl=LoadLibrary("opengl32"); ogl=LoadLibrary("gdi32"); typedef BOOL (WINAPI *wglGetPixelFormat_Type)(HDC); wglGetPixelFormat_Type pwglGetPixelFormat; //pwglGetPixelFormat = (wglGetPixelFormat_Type)GetProcAddress(ogl, "wglGetPixelFormat"); pwglGetPixelFormat = (wglGetPixelFormat_Type)GetProcAddress(ogl, "GetPixelFormat"); iPixelFormat = (*pwglGetPixelFormat)(hDC); iPixelFormat = (*pwglGetPixelFormat)(NULL); //iPixelFormat = ::GetPixelFormat(NULL); #endif iPixelFormat = ::GetPixelFormat(hDC); if(!iPixelFormat) iPixelFormat=1; // why returns 0??? if(iPixelFormat){ // obtain a detailed description of that pixel format ::DescribePixelFormat(hDC, iPixelFormat, sizeof(PIXELFORMATDESCRIPTOR), &pfd); sprintf_s(sMsg, 1024, "Desktop size (W x H)=(%d x %d)\n" "Color depth = %d (color bits = %d)\n" "Pixel format = %d\n" "Color bits (RGBA)=(%d,%d,%d,%d)\n" "Color shift (RGBA)=(%d,%d,%d,%d)\n" , desktop.right, desktop.bottom, iBPP, pfd.cColorBits, iPixelFormat, pfd.cRedBits, pfd.cGreenBits, pfd.cBlueBits, pfd.cAlphaBits, pfd.cRedShift, pfd.cGreenShift, pfd.cBlueShift, pfd.cAlphaShift ); } else{ sprintf_s(sMsg, 1024, "error %d", GetLastError()); } this->SetDlgItemTextA(IDC_DESKTOPINFO, sMsg); } BOOL CDesktopDialog::OnInitDialog() { CDialog::OnInitDialog(); SetTimer(IDDesktopTIMER, 1000, NULL); // TODO: Add extra initialization here return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CDesktopDialog::OnOK() { // TODO: Add your specialized code here and/or call the base class KillTimer(IDDesktopTIMER); // stop timer CDialog::OnOK(); } ================================================ FILE: host/DesktopDialog.h ================================================ #pragma once // CDesktopDialog dialog class CDesktopDialog : public CDialog { DECLARE_DYNAMIC(CDesktopDialog) public: CDesktopDialog(CWnd* pParent = NULL); // standard constructor virtual ~CDesktopDialog(); // Dialog Data enum { IDD = IDD_DESKTOP }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support DECLARE_MESSAGE_MAP() public: afx_msg void OnTimer(UINT_PTR nIDEvent); public: virtual BOOL OnInitDialog(); protected: virtual void OnOK(); }; ================================================ FILE: host/KillProc.cpp ================================================ // Exam28.cpp // 9/21/2000 (rk) // Last modified: 3/10/2002 (RK) // test the routine KILL_PROC_BY_NAME to terminate a process #include "stdafx.h" #include #include int KillProcByName(char *sProcessTail, BOOL bKill, BOOL bKillAll) // Created: 6/23/2000 (RK) // Last modified: 3/10/2002 (RK) // Please report any problems or bugs to kochhar@physiology.wisc.edu // The latest version of this routine can be found at: // http://www.neurophys.wisc.edu/ravi/software/killproc/ // Terminate the process "sProcessTail" if it is currently running // This works for Win/95/98/ME and also Win/NT/2000/XP // The process name is case-insensitive, i.e. "notepad.exe" and "NOTEPAD.EXE" // will both work (for sProcessTail) // Return codes are as follows: // 0 = Process was successfully terminated // 603 = Process was not currently running // 604 = No permission to terminate process // 605 = Unable to load PSAPI.DLL // 602 = Unable to terminate process for some other reason // 606 = Unable to identify system type // 607 = Unsupported OS // 632 = Invalid process name // 700 = Unable to get procedure address from PSAPI.DLL // 701 = Unable to get process list, EnumProcesses failed // 702 = Unable to load KERNEL32.DLL // 703 = Unable to get procedure address from KERNEL32.DLL // 704 = CreateToolhelp32Snapshot failed // Change history: // modified 3/8/2002 - Borland-C compatible if BORLANDC is defined as // suggested by Bob Christensen // modified 3/10/2002 - Removed memory leaks as suggested by // Jonathan Richard-Brochu (handles to Proc and Snapshot // were not getting closed properly in some cases) { BOOL bResult; int iLen,iLenP,indx; OSVERSIONINFO osvi; char szToTermUpper[MAX_PATH]; DWORD iFound=0; HINSTANCE hInstLib; // Transfer Process name into "szToTermUpper" and // convert it to upper case iLenP=strlen(sProcessTail); if(iLenP<1 || iLenP>MAX_PATH) return 632; for(indx=0;indx=VER_PLATFORM_WIN32_NT){ // Win/NT or 2000 or XP or greater // PSAPI Function Pointers. BOOL (WINAPI *lpfEnumProcesses)( DWORD *, DWORD cb, DWORD * ); BOOL (WINAPI *lpfEnumProcessModules)( HANDLE, HMODULE *, DWORD, LPDWORD ); DWORD (WINAPI *lpfGetModuleBaseName)( HANDLE, HMODULE, LPTSTR, DWORD ); DWORD aiPID[1000],iCb=1000,iNumProc,iV2000=0; DWORD iCbneeded,i; char szName[MAX_PATH]; HANDLE hProc; HMODULE hMod; // Load library and get the procedures explicitly. We do // this so that we don't have to worry about modules using // this code failing to load under Windows 9x, because // it can't resolve references to the PSAPI.DLL. hInstLib = LoadLibraryA("PSAPI.DLL"); if(hInstLib == NULL) return 605; // Get procedure addresses. lpfEnumProcesses = (BOOL(WINAPI *)(DWORD *,DWORD,DWORD*))GetProcAddress( hInstLib, "EnumProcesses"); lpfEnumProcessModules = (BOOL(WINAPI *)(HANDLE, HMODULE *, DWORD, LPDWORD))GetProcAddress( hInstLib, "EnumProcessModules"); lpfGetModuleBaseName =(DWORD (WINAPI *)(HANDLE, HMODULE, LPTSTR, DWORD )) GetProcAddress( hInstLib, "GetModuleBaseNameA"); if (lpfEnumProcesses == NULL || lpfEnumProcessModules == NULL || lpfGetModuleBaseName == NULL){ FreeLibrary(hInstLib); return 700; } bResult=lpfEnumProcesses(aiPID,iCb,&iCbneeded); if(!bResult){ // Unable to get process list, EnumProcesses failed FreeLibrary(hInstLib); return 701; } // How many processes are there? iNumProc=iCbneeded/sizeof(DWORD); // Get and match the name of each process for(i=0;iMAX_PATH) return FALSE; for(indx=0;indx=VER_PLATFORM_WIN32_NT) { // Win/NT or 2000 or XP or greater // Load library and get the procedures explicitly. We do // this so that we don't have to worry about modules using // this code failing to load under Windows 9x, because // it can't resolve references to the PSAPI.DLL. hInstLib = LoadLibraryA("PSAPI.DLL"); if(hInstLib == NULL) return 605; // Get procedure addresses. lpfEnumProcesses = (BOOL(WINAPI *)(DWORD *,DWORD,DWORD*)) GetProcAddress( hInstLib, "EnumProcesses" ) ; lpfEnumProcessModules = (BOOL(WINAPI *)(HANDLE, HMODULE *, DWORD, LPDWORD)) GetProcAddress( hInstLib, "EnumProcessModules" ) ; lpfGetModuleBaseName =(DWORD (WINAPI *)(HANDLE, HMODULE, LPTSTR, DWORD )) GetProcAddress( hInstLib, "GetModuleBaseNameA" ) ; lpfGetModuleFileName =(DWORD (WINAPI *)(HANDLE, HMODULE, LPTSTR, DWORD )) GetProcAddress( hInstLib, "GetModuleFileNameExA" ) ; if(lpfEnumProcesses == NULL || lpfEnumProcessModules == NULL || lpfGetModuleBaseName == NULL || lpfGetModuleFileName == NULL) { FreeLibrary(hInstLib); return 700; } bResult=lpfEnumProcesses(aiPID,iCb,&iCbneeded); if(!bResult) { // Unable to get process list, EnumProcesses failed FreeLibrary(hInstLib); return 701; } // How many processes are there? iNumProc=iCbneeded/sizeof(DWORD); // Get and match the name of each process for(i=0;i #include void KillProcessTree(DWORD myprocID) { BOOL bRet = TRUE; PROCESSENTRY32 pe; memset(&pe, 0, sizeof(PROCESSENTRY32)); pe.dwSize = sizeof(PROCESSENTRY32); HANDLE hSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if (::Process32First(hSnap, &pe)){ do { // recursion if (pe.th32ParentProcessID == myprocID) KillProcessTree(pe.th32ProcessID); } while(::Process32Next(hSnap, &pe)); } // kill the main process HANDLE hProc = ::OpenProcess(PROCESS_ALL_ACCESS, FALSE, myprocID); if (hProc){ ::TerminateProcess(hProc, 1); ::CloseHandle(hProc); } } ================================================ FILE: host/MainFrm.cpp ================================================ /* DXWnd/dxwnd.cpp DirectX Hook Module Copyright(C) 2004-2011 SFB7/GHO 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 3 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, see . */ // MainFrm.cpp : CMainFrame defines the class behavior. // #include "stdafx.h" #include "dxwndhost.h" #include "MainFrm.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif #define MULTIMONITOR TRUE ///////////////////////////////////////////////////////////////////////////// // CMainFrame IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd) BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) //{{AFX_MSG_MAP(CMainFrame) ON_WM_CREATE() ON_WM_MOVE() ON_WM_SIZE() ON_WM_CLOSE() //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CMainFrame class constructor / destructor HANDLE GlobalLocker; CMainFrame::CMainFrame() { // form constructor starts the service thread responsible to mantain a fixed screen settings // see above .... // duplicate activation check GlobalLocker=CreateSemaphore(NULL, 0, 1, "DxWnd LOCKER"); if(GlobalLocker==NULL){ MessageBoxLang(DXW_STRING_SEMAPHORE, DXW_STRING_WARNING, MB_OK | MB_ICONEXCLAMATION); return; } if(GetLastError()==ERROR_ALREADY_EXISTS){ MessageBoxLang(DXW_STRING_DXWRUNNING, DXW_STRING_WARNING, MB_OK | MB_ICONEXCLAMATION); exit(1); } } CMainFrame::~CMainFrame() { char val[32]; // when in icon tray, skip... if (!cx || !cy) return; // adjust client win coordinates RECT rect; rect.top = y; rect.bottom = y + cy; rect.left = x; rect.right = x + cx; AdjustWindowRect(&rect, WS_OVERLAPPEDWINDOW, 1); x = rect.left; y = rect.top; cx = rect.right - rect.left; cy = rect.bottom - rect.top; // save window rect sprintf_s(val, sizeof(val), "%i", x); WritePrivateProfileString("window", "posx", val, gInitPath); sprintf_s(val, sizeof(val), "%i", y); WritePrivateProfileString("window", "posy", val, gInitPath); sprintf_s(val, sizeof(val), "%i", cx); WritePrivateProfileString("window", "sizx", val, gInitPath); sprintf_s(val, sizeof(val), "%i", cy); WritePrivateProfileString("window", "sizy", val, gInitPath); } int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CFrameWnd::OnCreate(lpCreateStruct) == -1) return -1; return 0; } BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) { char InitPath[MAX_PATH]; int iMaxX, iMaxY, iMinX, iMinY; GetCurrentDirectory(MAX_PATH, InitPath); strcat_s(InitPath, sizeof(InitPath), "\\dxwnd.ini"); cs.x = GetPrivateProfileInt("window", "posx", 50, InitPath); cs.y = GetPrivateProfileInt("window", "posy", 50, InitPath); cs.cx = GetPrivateProfileInt("window", "sizx", 320, InitPath); cs.cy = GetPrivateProfileInt("window", "sizy", 200, InitPath); // keep window inside desktop boundaries #ifdef MULTIMONITOR iMinX = ::GetSystemMetrics(SM_XVIRTUALSCREEN); iMinY = ::GetSystemMetrics(SM_YVIRTUALSCREEN); iMaxX = iMinX + ::GetSystemMetrics(SM_CXVIRTUALSCREEN); iMaxY = iMinY + ::GetSystemMetrics(SM_CYVIRTUALSCREEN); #else RECT DesktopRect; ::GetWindowRect(::GetDesktopWindow(), &DesktopRect); iMaxX = DesktopRect.right; iMaxY = DesktopRect.bottom; #endif if(cs.cx < 320) cs.cx = 320; if(cs.cy < 200) cs.cy = 200; if(cs.x < iMinX) cs.x = iMinX; if(cs.y < iMinY) cs.y = iMinY; if(cs.x+cs.cx > iMaxX) cs.x = iMaxX - cs.cx; if(cs.y+cs.cy > iMaxY) cs.y = iMaxY - cs.cy; if( !CFrameWnd::PreCreateWindow(cs) ) return FALSE; return TRUE; } void CMainFrame::OnMove(int x, int y) { CFrameWnd::OnMove(x, y); WINDOWPLACEMENT wndpl; wndpl.length = sizeof(wndpl); this->GetWindowPlacement(&wndpl); if(wndpl.showCmd != SW_SHOWNORMAL) return; this->x=x; this->y=y; } void CMainFrame::OnSize(UINT nType, int cx, int cy) { CFrameWnd::OnSize(nType, cx, cy); WINDOWPLACEMENT wndpl; wndpl.length = sizeof(wndpl); this->GetWindowPlacement(&wndpl); if(wndpl.showCmd != SW_SHOWNORMAL) return; this->cx=cx; this->cy=cy; } void CMainFrame::OnClose() { extern BOOL gTransientMode; extern BOOL gQuietMode; extern BOOL gWarnOnExit; if(gTransientMode || gQuietMode) CFrameWnd::OnClose(); // check for running apps .... if (GetHookStatus(NULL)==DXW_RUNNING){ if (MessageBoxLang(DXW_STRING_EXIT_BUSY, DXW_STRING_WARNING, MB_OKCANCEL | MB_ICONQUESTION)!=IDOK) return; CFrameWnd::OnClose(); } if(gWarnOnExit){ if(MessageBoxLang(DXW_STRING_EXIT_OK, DXW_STRING_WARNING, MB_OKCANCEL)==IDOK) CFrameWnd::OnClose(); } else CFrameWnd::OnClose(); } ///////////////////////////////////////////////////////////////////////////// // CMainFrame Diagnostic Class #ifdef _DEBUG void CMainFrame::AssertValid() const { CFrameWnd::AssertValid(); } void CMainFrame::Dump(CDumpContext& dc) const { CFrameWnd::Dump(dc); } #endif //_DEBUG ///////////////////////////////////////////////////////////////////////////// // CMainFrame Message Handler ================================================ FILE: host/MainFrm.h ================================================ // MainFrm.h : CMainFrame class definition and interface declarations. // ///////////////////////////////////////////////////////////////////////////// #if !defined(AFX_MAINFRM_H__B2E9EA08_683A_47A3_ADA1_C6EE97866607__INCLUDED_) #define AFX_MAINFRM_H__B2E9EA08_683A_47A3_ADA1_C6EE97866607__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 class CMainFrame : public CFrameWnd { protected: // Create from serialization only features. CMainFrame(); DECLARE_DYNCREATE(CMainFrame) // Attributes public: // Operation public: // Override // ClassWizard Generates a virtual function overrides. //{{AFX_VIRTUAL(CMainFrame) virtual BOOL PreCreateWindow(CREATESTRUCT& cs); //}}AFX_VIRTUAL // Implementation public: virtual ~CMainFrame(); int x, y, cx, cy; #ifdef _DEBUG virtual void AssertValid() const; virtual void Dump(CDumpContext& dc) const; #endif // Generated message map functions protected: //{{AFX_MSG(CMainFrame) afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); afx_msg void OnMove(int, int); afx_msg void OnSize(UINT, int, int); afx_msg void OnClose(void); //}}AFX_MSG DECLARE_MESSAGE_MAP() }; ///////////////////////////////////////////////////////////////////////////// //{{AFX_INSERT_LOCATION}} // Microsoft Visual C++ Will insert additional declarations immediately before the previous line. #endif // !defined(AFX_MAINFRM_H__B2E9EA08_683A_47A3_ADA1_C6EE97866607__INCLUDED_) ================================================ FILE: host/MessageBox.cpp ================================================ #include "stdafx.h" #include #include extern BOOL gQuietMode; int MessageBoxLang(UINT iText, UINT iCaption, UINT uType) { WCHAR sBuffer[1024+1]; WCHAR sCaption[48+1]; if (gQuietMode) return MB_OK; LoadStringW(AfxGetResourceHandle(), iText, (LPWSTR)&sBuffer, sizeof(sBuffer)); LoadStringW(AfxGetResourceHandle(), iCaption, (LPWSTR)&sCaption, sizeof(sCaption)); return MessageBoxExW(NULL, sBuffer, sCaption, uType, NULL); } int MessageBoxLangArg(UINT iText, UINT iCaption, UINT uType, ...) { va_list al; WCHAR sBuffer[1024+1]; WCHAR sFormat[1024+1]; WCHAR sCaption[48+1]; if (gQuietMode) return MB_OK; LoadStringW(AfxGetResourceHandle(), iText, (LPWSTR)&sFormat, sizeof(sFormat)); LoadStringW(AfxGetResourceHandle(), iCaption, (LPWSTR)&sCaption, sizeof(sCaption)); va_start(al, uType); vswprintf(sBuffer, 1024, sFormat, al); va_end(al); return MessageBoxExW(NULL, sBuffer, sCaption, uType, NULL); } ================================================ FILE: host/OutTrace.cpp ================================================ #include "stdafx.h" #define DXWMAXLOGSIZE 4096 void OutTrace(const char *format, ...) { va_list al; static char path[MAX_PATH]; static FILE *fp=NULL; // GHO: thread safe??? char sBuf[DXWMAXLOGSIZE+1]; extern BOOL gbDebug; if (!gbDebug) return; if (fp == NULL) fp = fopen(".\\dxwnd.log", "w+"); va_start(al, format); vsprintf_s(sBuf, DXWMAXLOGSIZE, format, al); sBuf[DXWMAXLOGSIZE]=0; // just in case of log truncation va_end(al); fputs(sBuf, fp); fflush(fp); } ================================================ FILE: host/PaletteDialog.cpp ================================================ // StatusDialog.cpp : implementation file // #include "stdafx.h" #include "dxwndhost.h" #include "PaletteDialog.h" #include "bmpext.h" // CPaletteDialog dialog IMPLEMENT_DYNAMIC(CPaletteDialog, CDialog) CPaletteDialog::CPaletteDialog(CWnd* pParent /*=NULL*/) : CDialog(CPaletteDialog::IDD, pParent) { } CPaletteDialog::~CPaletteDialog() { } void CPaletteDialog::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CPaletteDialog, CDialog) ON_WM_TIMER() END_MESSAGE_MAP() #define IDPaletteTIMER 2 // CPaletteDialog message handlers CDib dib; CWnd *myWin; void CPaletteDialog::OnTimer(UINT_PTR nIDEvent) { DXWNDSTATUS DxWndStatus; int DxStatus; //extern PRIVATEMAP *pTitles; extern TARGETMAP *pTargets; RECT Rect; int h, w; static BOOL PaletteUpdated = FALSE; DxStatus=GetHookStatus(&DxWndStatus); myWin->GetClientRect(&Rect); h=Rect.bottom - Rect.top; w=Rect.right - Rect.left; if((h==0) || (w==0)) return; if(DxStatus==DXW_RUNNING){ for(int row=0; row<16; row++){ for(int col=0; col<16; col++){ PALETTEENTRY *pe = &DxWndStatus.Palette[16*row+col]; RGBQUAD rgbq; rgbq.rgbBlue=pe->peBlue; rgbq.rgbGreen=pe->peGreen; rgbq.rgbRed=pe->peRed; rgbq.rgbReserved=0; dib.SetPixel(col, row, rgbq); } } PaletteUpdated = TRUE; } else{ if (PaletteUpdated) dib.ReadFromResource(IDB_PALETTE); PaletteUpdated = FALSE; } CDC *dc; dc=this->GetDC(); if(dc) dib.Draw(dc, CRect(0, 0, w, h), CRect(0, 0, 16, 16)); this->ReleaseDC(dc); } BOOL CPaletteDialog::OnInitDialog() { CDC *myDC; CDialog::OnInitDialog(); if((myDC=this->GetDC())==NULL) return FALSE; if((myWin=myDC->GetWindow())==NULL) return FALSE; dib.ReadFromResource(IDB_PALETTE); SetTimer(IDPaletteTIMER, 200, NULL); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CPaletteDialog::OnOK() { // TODO: Add your specialized code here and/or call the base class // stop timer KillTimer(IDPaletteTIMER); // delete(dib); CDialog::OnOK(); } ================================================ FILE: host/PaletteDialog.h ================================================ #pragma once // CPaletteDialog dialog class CPaletteDialog : public CDialog { DECLARE_DYNAMIC(CPaletteDialog) public: CPaletteDialog(CWnd* pParent = NULL); // standard constructor virtual ~CPaletteDialog(); // Dialog Data enum { IDD = IDD_PALETTE }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support DECLARE_MESSAGE_MAP() public: afx_msg void OnTimer(UINT_PTR nIDEvent); public: virtual BOOL OnInitDialog(); protected: virtual void OnOK(); }; ================================================ FILE: host/ShimsDialog.cpp ================================================ // ShimsDialog.cpp : implementation file // #include "stdafx.h" #include "dxwndhost.h" #include "ShimsDialog.h" // http://msdn2.microsoft.com/en-us/library/bb432457 // HSDB WINAPI SdbOpenDatabase( // LPCTSTR pwszPath, // PATH_TYPE eType //); // What is HSDB!? Assuming it is a pointer to somewhere => "void*" typedef void* HSDB; // http://msdn2.microsoft.com/en-us/library/bb432389.aspx typedef enum _PATH_TYPE { DOS_PATH, NT_PATH }PATH_TYPE; // http://msdn2.microsoft.com/en-us/library/bb432488 typedef DWORD TAGID; #define TAGID_NULL (0) #define TAGID_ROOT (0) // TAG !? typedef DWORD TAG; // http://msdn2.microsoft.com/en-us/library/bb432489 typedef DWORD TAGREF; #define TAGREF_NULL (0) #define TAGREF_ROOT (0) // http://msdn2.microsoft.com/en-us/library/bb432490 // TAG-Types: #define TAG_TYPE_NULL 0x1000 #define TAG_TYPE_BYTE 0x2000 #define TAG_TYPE_WORD 0x3000 #define TAG_TYPE_DWORD 0x4000 #define TAG_TYPE_QWORD 0x5000 #define TAG_TYPE_STRINGREF 0x6000 #define TAG_TYPE_LIST 0x7000 #define TAG_TYPE_STRING 0x8000 #define TAG_TYPE_BINARY 0x9000 // It seems that this type is "masked" #define TAG_TYPE_MASK 0xF000 // http://msdn2.microsoft.com/en-us/library/bb432487 #define TAG_APP_NAME_RC_ID (0x24 | TAG_TYPE_DWORD) #define TAG_VENDOR_NAME_RC_ID (0x25 | TAG_TYPE_DWORD) #define TAG_SUMMARY_MSG_RC_ID (0x26 | TAG_TYPE_DWORD) #define TAG_DESCRIPTION_RC_ID (0x28 | TAG_TYPE_DWORD) #define TAG_PARAMETER1_RC_ID (0x29 | TAG_TYPE_DWORD) #define TAG_EXE_ID (0x4 | TAG_TYPE_BINARY) #define TAG_DATABASE_ID (0x7 | TAG_TYPE_BINARY) #define TAG_FIX_ID (0x10 | TAG_TYPE_BINARY) #define TAG_APP_ID (0x11 | TAG_TYPE_BINARY) #define CONTEXT_PLATFORM_ID (0x8 | TAG_TYPE_BINARY) #define HID_DOS_PATHS 0x00000001 #define HID_DATABASE_FULLPATH 0x00000002 #define HID_NO_DATABASE 0x00000004 #define HID_DATABASE_TYPE_MASK 0xF00F0000 #define SDB_DATABASE_MAIN_SHIM 0x80030000 #define SDB_DATABASE_MAIN_MSI 0x80020000 #define SDB_DATABASE_MAIN_DRIVERS 0x80040000 typedef struct TAG_RC_Entry { DWORD tag; LPCWSTR szName; } TAG_RC_Entry; // The following tags returns an reference to an resource... (Vista and later) static TAG_RC_Entry s_TagRcEntries[] = { {TAG_APP_NAME_RC_ID, L"APP_NAME_RC_ID"}, {TAG_VENDOR_NAME_RC_ID, L"VENDOR_NAME_RC_ID"}, {TAG_SUMMARY_MSG_RC_ID, L"SUMMARY_MSG_RC_ID"}, {TAG_DESCRIPTION_RC_ID, L"DESCRIPTION_RC_ID"}, // at least for this one, MS forgot to add the mapping from TAG to name (SdbTagToString) {TAG_PARAMETER1_RC_ID, L"PARAMETER1_RC_ID"}, }; // The following Tags could be displayed as GUIDs (if the len is 0x10) static DWORD s_TagGuids[] = { TAG_EXE_ID, TAG_DATABASE_ID, TAG_FIX_ID, TAG_APP_ID, CONTEXT_PLATFORM_ID, }; // APIs: // http://msdn.microsoft.com/en-us/library/bb432457.aspx //HSDB WINAPI SdbOpenDatabase( // __in LPCTSTR pwszPath, // __in PATH_TYPE eType //); typedef HSDB (WINAPI *PSdbOpenDatabase)( LPCTSTR pwszPath, // Docu wrong? LPCTSTR shouldn't it be LPCWSTR!? PATH_TYPE eType ); PSdbOpenDatabase pSdbOpenDatabase = NULL; // http://msdn.microsoft.com/en-us/library/bb432452.aspx //HSDB WINAPI SdbInitDatabase( // __in DWORD dwFlags, // __in LPCTSTR pszDatabasePath //); typedef HSDB (WINAPI *PSdbInitDatabase)( DWORD dwFlags, LPCTSTR pszDatabasePath ); PSdbInitDatabase pSdbInitDatabase = NULL; // http://msdn.microsoft.com/en-us/library/cc895520 //void WINAPI SdbCloseDatabase( // __inout HSDB pdb //); typedef VOID (WINAPI *PSdbCloseDatabase)( HSDB handle // assuming the passed handle... ); PSdbCloseDatabase pSdbCloseDatabase = NULL; // http://msdn2.microsoft.com/en-us/library/bb432446 //TAGID WINAPI SdbGetFirstChild( // HSDB pdb, // TAGID tiParent //); typedef TAGID (WINAPI *PSdbGetFirstChild)( HSDB pdb, TAGID tiParent ); PSdbGetFirstChild pSdbGetFirstChild = NULL; // http://msdn2.microsoft.com/en-us/library/bb432449 //TAGID WINAPI SdbGetNextChild( // HSDB pdb, // TAGID tiParent, // TAGID tiPrev //); typedef TAGID (WINAPI *PSdbGetNextChild)( HSDB pdb, TAGID tiParent, TAGID tiPrev ); PSdbGetNextChild pSdbGetNextChild = NULL; // http://msdn2.microsoft.com/en-us/library/bb432451 //TAG WINAPI SdbGetTagFromTagID( // HSDB pdb, // TAGID tiWhich //); typedef TAG (WINAPI *PSdbGetTagFromTagID)( HSDB pdb, TAGID tiWhich ); PSdbGetTagFromTagID pSdbGetTagFromTagID = NULL; // http://msdn2.microsoft.com/en-us/library/bb432470 //LPCTSTR WINAPI SdbTagToString( // TAG tag //); typedef LPCWSTR (WINAPI *PSdbTagToString)( // LPCTSTR => LPCWSTR !? TAG tag ); PSdbTagToString pSdbTagToString = NULL; // http://msdn2.microsoft.com/en-us/library/bb432464 //BOOL WINAPI SdbReadStringTag( // HSDB pdb, // TAGID tiWhich, // LPTSTR pwszBuffer, // DWORD cchBufferSize //); typedef BOOL (WINAPI *PSdbReadStringTag)( HSDB pdb, TAGID tiWhich, LPTSTR pwszBuffer, DWORD cchBufferSize ); PSdbReadStringTag pSdbReadStringTag = NULL; // http://msdn2.microsoft.com/en-us/library/bb432450.aspx //LPWSTR WINAPI SdbGetStringTagPtr( // HSDB pdb, // TAGID tiWhich //); typedef LPWSTR (WINAPI *PSdbGetStringTagPtr)( HSDB pdb, TAGID tiWhich ); PSdbGetStringTagPtr pSdbGetStringTagPtr = NULL; // http://msdn2.microsoft.com/en-us/library/bb432462.aspx //DWORD WINAPI SdbReadDWORDTag( // HSDB pdb, // TAGID tiWhich, // DWORD dwDefault //); typedef DWORD (WINAPI *PSdbReadDWORDTag)( HSDB pdb, TAGID tiWhich, DWORD dwDefault ); PSdbReadDWORDTag pSdbReadDWORDTag = NULL; // http://msdn2.microsoft.com/en-us/library/bb432463.aspx //ULONGLONG WINAPI SdbReadQWORDTag( // HSDB pdb, // TAGID tiWhich, // ULONGLONG qwDefault //); typedef ULONGLONG (WINAPI *PSdbReadQWORDTag)( HSDB pdb, TAGID tiWhich, ULONGLONG qwDefault ); PSdbReadQWORDTag pSdbReadQWORDTag = NULL; // http://msdn2.microsoft.com/en-us/library/bb432455 //HSDB WINAPI SdbOpenApphelpDetailsDatabase( // LPCWSTR pwsDetailsDatabasePath //); typedef HSDB (WINAPI *PSdbOpenApphelpDetailsDatabase)( LPCWSTR pwsDetailsDatabasePath ); PSdbOpenApphelpDetailsDatabase pSdbOpenApphelpDetailsDatabase = NULL; // http://msdn2.microsoft.com/en-us/library/bb432456 //HMODULE WINAPI SdbOpenApphelpResourceFile( // LPCWSTR pwszACResourceFile //); typedef HMODULE (WINAPI *PSdbOpenApphelpResourceFile)( LPCWSTR pwszACResourceFile ); PSdbOpenApphelpResourceFile pSdbOpenApphelpResourceFile = NULL; // http://msdn.microsoft.com/en-us/library/bb432443 //PVOID WINAPI SdbGetBinaryTagData( // __in HSDB pdb, // __in TAGID tiWhich //); typedef PVOID (WINAPI *PSdbGetBinaryTagData)( HSDB pdb, TAGID tiWhich ); PSdbGetBinaryTagData pSdbGetBinaryTagData = NULL; // ??? //DWORD WINAPI SdbGetTagDataSize( // __in HSDB pdb, // __in TAGID tiWhich //); typedef DWORD (WINAPI *PSdbGetTagDataSize)( HSDB pdb, TAGID tiWhich ); PSdbGetTagDataSize pSdbGetTagDataSize = NULL; // http://msdn.microsoft.com/en-us/library/bb432459 #define SDB_MAX_EXES 16 #define SDB_MAX_LAYERS 8 #define SDB_MAX_SDBS 16 typedef struct tagSDBQUERYRESULT { TAGREF atrExes[SDB_MAX_EXES]; DWORD adwExeFlags[SDB_MAX_EXES]; TAGREF atrLayers[SDB_MAX_LAYERS]; DWORD dwLayerFlags; TAGREF trApphelp; DWORD dwExeCount; DWORD dwLayerCount; GUID guidID; DWORD dwFlags; DWORD dwCustomSDBMap; GUID rgGuidDB[SDB_MAX_SDBS]; } SDBQUERYRESULT, *PSDBQUERYRESULT; // http://msdn.microsoft.com/en-us/library/bb432448 typedef BOOL (WINAPI *PSdbGetMatchingExe)( HSDB hSDB, LPCWSTR szPath, LPCWSTR szModuleName, LPCWSTR pszEnvironment, DWORD dwFlags, PSDBQUERYRESULT pQueryResult ); PSdbGetMatchingExe pSdbGetMatchingExe = NULL; #define SDBGMEF_IGNORE_ENVIRONMENT 1 #define SHIMREG_DISABLE_SHIM 0x1 #define SHIMREG_DISABLE_APPHELP 0x2 #define SHIMREG_APPHELP_NOUI 0x4 #define SHIMREG_APPHELP_CANCEL 0x10000000 #define SHIMREG_DISABLE_SXS 0x10 #define SHIMREG_DISABLE_LAYER 0x20 #define SHIMREG_DISABLE_DRIVER 0x40 typedef void (WINAPI* PSdbReleaseMatchingExe)( HSDB hSDB, TAGREF trExe ); PSdbReleaseMatchingExe pSdbReleaseMatchingExe = NULL; // CShimsDialog dialog IMPLEMENT_DYNAMIC(CShimsDialog, CDialog) CShimsDialog::CShimsDialog(CWnd* pParent /*=NULL*/, char *path) : CDialog(CShimsDialog::IDD, pParent) { //ExePath = (LPWSTR)malloc((strlen(path)+1)*sizeof(WCHAR)); //MultiByteToWideChar(CP_ACP, 0, path, -1, ExePath, strlen(path)); ExePath = path; } CShimsDialog::~CShimsDialog() { free(ExePath); ExePath=NULL; } void CShimsDialog::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CShimsDialog, CDialog) END_MESSAGE_MAP() #define IDStatusTIMER 1 // CShimsDialog message handlers BOOL CShimsDialog::OnInitDialog() { CDialog::OnInitDialog(); char *MatchExe(char *); this->SetDlgItemText(IDC_STATUSINFO, MatchExe(ExePath)); return TRUE; // return TRUE unless you set the focus to a control } void CShimsDialog::OnOK() { CDialog::OnOK(); } void Flags2String(DWORD dwFlags, char *szFlags, size_t flagsLen) { szFlags[0] = 0; if (dwFlags & SHIMREG_DISABLE_SHIM) strcat_s(szFlags, flagsLen, "Disable-Shim,"); if (dwFlags & SHIMREG_DISABLE_APPHELP) strcat_s(szFlags, flagsLen, "Disable-Apphelp,"); if (dwFlags & SHIMREG_APPHELP_NOUI) strcat_s(szFlags, flagsLen, "Apphelp-NoUI,"); if (dwFlags & SHIMREG_APPHELP_CANCEL) strcat_s(szFlags, flagsLen, "Apphelp-Cancel,"); if (dwFlags & SHIMREG_DISABLE_SXS) strcat_s(szFlags, flagsLen, "Disable-SxS,"); if (dwFlags & SHIMREG_DISABLE_LAYER) strcat_s(szFlags, flagsLen, "Disable-Layer,"); if (dwFlags & SHIMREG_DISABLE_DRIVER) strcat_s(szFlags, flagsLen, "Disable-Driver,"); if (szFlags[strlen(szFlags)-1]==',') szFlags[strlen(szFlags)-1]=0; } char * MatchExe(char *FileName) { SDBQUERYRESULT result; static char sBuf[10000]; LPWSTR szFileName = (LPWSTR)malloc((strlen(FileName)+1)*sizeof(WCHAR)); MultiByteToWideChar(CP_ACP, 0, FileName, -1, szFileName, strlen(FileName)); BOOL bRet; HSDB hSDB; HINSTANCE hAppHelp = LoadLibrary(_T("apphelp.dll")); if(!hAppHelp){ sprintf(sBuf, "error %d loading apphelp.dll\n", GetLastError()); return sBuf; } pSdbOpenDatabase = (PSdbOpenDatabase) GetProcAddress(hAppHelp, "SdbOpenDatabase"); pSdbInitDatabase = (PSdbInitDatabase) GetProcAddress(hAppHelp, "SdbInitDatabase"); pSdbCloseDatabase = (PSdbCloseDatabase) GetProcAddress(hAppHelp, "SdbCloseDatabase"); pSdbGetFirstChild = (PSdbGetFirstChild) GetProcAddress(hAppHelp, "SdbGetFirstChild"); pSdbGetNextChild = (PSdbGetNextChild) GetProcAddress(hAppHelp, "SdbGetNextChild"); pSdbGetTagFromTagID = (PSdbGetTagFromTagID) GetProcAddress(hAppHelp, "SdbGetTagFromTagID"); pSdbTagToString = (PSdbTagToString) GetProcAddress(hAppHelp, "SdbTagToString"); pSdbGetStringTagPtr = (PSdbGetStringTagPtr) GetProcAddress(hAppHelp, "SdbGetStringTagPtr"); //pSdbReadStringTag = (PSdbReadStringTag) GetProcAddress(hAppHelp, "SdbReadStringTag"); pSdbReadDWORDTag = (PSdbReadDWORDTag) GetProcAddress(hAppHelp, "SdbReadDWORDTag"); pSdbReadQWORDTag = (PSdbReadQWORDTag) GetProcAddress(hAppHelp, "SdbReadQWORDTag"); //pSdbOpenApphelpDetailsDatabase = (PSdbOpenApphelpDetailsDatabase) GetProcAddress(hAppHelp, "SdbOpenApphelpDetailsDatabase"); pSdbOpenApphelpResourceFile = (PSdbOpenApphelpResourceFile) GetProcAddress(hAppHelp, "SdbOpenApphelpResourceFile"); pSdbGetBinaryTagData = (PSdbGetBinaryTagData) GetProcAddress(hAppHelp, "SdbGetBinaryTagData"); pSdbGetTagDataSize = (PSdbGetTagDataSize) GetProcAddress(hAppHelp, "SdbGetTagDataSize"); pSdbGetMatchingExe = (PSdbGetMatchingExe) GetProcAddress(hAppHelp, "SdbGetMatchingExe"); pSdbReleaseMatchingExe = (PSdbReleaseMatchingExe) GetProcAddress(hAppHelp, "SdbReleaseMatchingExe"); if(pSdbGetMatchingExe == NULL){ // rough protection: we assume that if this is found, then all fpointers are there. sprintf(sBuf, "Unsupported Shim DB\n", FileName); FreeLibrary(hAppHelp); return sBuf; } //hSDB = pSdbInitDatabase(HID_DATABASE_TYPE_MASK|SDB_DATABASE_MAIN_SHIM, NULL); hSDB = pSdbInitDatabase(SDB_DATABASE_MAIN_SHIM, NULL); if(!hSDB){ sprintf(sBuf, "Can't initialize shims database\n"); return (sBuf); } bRet = pSdbGetMatchingExe(NULL, (LPCWSTR)szFileName, NULL, NULL, 0, &result); if(!bRet){ sprintf(sBuf, "No Shim found for file: %s\n", FileName); FreeLibrary(hAppHelp); return (sBuf); } sprintf(sBuf, "Shim found for file: %s\n", FileName); const size_t flagsLen = 1024; char szFlagsStr[flagsLen]; Flags2String(result.dwFlags, szFlagsStr, flagsLen); sprintf(sBuf, "%sFlags: 0x%x: %s\n", sBuf, result.dwFlags, szFlagsStr); if (result.trApphelp != TAGREF_NULL) sprintf(sBuf, "%sAppHelp-Message: 0x%x\n", sBuf, result.trApphelp); for(DWORD i=0; i #include #include #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif BaseFormat::BaseFormat() { } BaseFormat::~BaseFormat() { } void BaseFormat::SetAllowedChars(std::vector chars) { m_listChars = chars; } void BaseFormat::SetAllowedChars(LPCTSTR chars, int size) { m_listChars.erase(m_listChars.begin(), m_listChars.end()); m_listChars.reserve(size); m_listChars.assign(chars, chars+size); } RelIntegerFormat::RelIntegerFormat() { LPCTSTR format = _T("-+0123456789"); SetAllowedChars(format, _tcslen(format)); } RelIntegerFormat::~RelIntegerFormat() { } bool BaseFormat::IsCharAllowed(TCHAR nChar) { std::vector::iterator pos = std::find(m_listChars.begin(), m_listChars.end(), nChar); return (pos != m_listChars.end()); } CSpecialEdit::CSpecialEdit() { m_formatter = NULL; } CSpecialEdit::~CSpecialEdit() { } BEGIN_MESSAGE_MAP(CSpecialEdit, CEdit) //{{AFX_MSG_MAP(CSpecialEdit) ON_WM_CHAR() //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CSpecialEdit message handlers void CSpecialEdit::SetFormatter(IFormat *formatter) { ASSERT(formatter != NULL); m_formatter = formatter; } bool CSpecialEdit::IsCharAllowed(TCHAR nChar) { switch(nChar){ case _T('\b'): case 10: case 13: return true; } ASSERT(m_formatter != NULL); return m_formatter->IsCharAllowed(nChar); } bool CSpecialEdit::IsClipboardOK() { bool isOK = true; COleDataObject obj; if (obj.AttachClipboard()) { HGLOBAL hmem = NULL; TCHAR *pUniText = NULL; DWORD dwLen = 0; bool bText = false; if (obj.IsDataAvailable(CF_TEXT)){ hmem = obj.GetGlobalData(CF_TEXT); char *pCharText = (char*)::GlobalLock(hmem); #ifdef UNICODE int lenA = strlen(pCharText); int lenW = MultiByteToWideChar(CP_ACP, 0, pCharText, lenA, 0, 0); if (lenW > 0){ pUniText = ::SysAllocStringLen(0, lenW); MultiByteToWideChar(CP_ACP, 0, pCharText, lenA, pUniText, lenW); bText = true; } else{ ::GlobalUnlock(hmem); return false; } #else pUniText = pCharText; #endif } #ifdef UNICODE else if(obj.IsDataAvailable(CF_UNICODETEXT)){ hmem = obj.GetGlobalData(CF_UNICODETEXT); pUniText = (TCHAR*)::GlobalLock(hmem); } #endif if(hmem){ DWORD dwLen = _tcslen(pUniText); for(DWORD i=0; i class IFormat { public: virtual ~IFormat(); virtual bool IsCharAllowed(TCHAR nChar) = 0; }; class BaseFormat : public IFormat { protected: std::vector m_listChars; BaseFormat(); virtual ~BaseFormat(); public: void SetAllowedChars(std::vector chars); void SetAllowedChars(LPCTSTR chars, int size); virtual bool IsCharAllowed(TCHAR nChar); }; class RelIntegerFormat : public BaseFormat { public: RelIntegerFormat(); virtual ~RelIntegerFormat(); }; class CSpecialEdit : public CEdit { IFormat *m_formatter; bool IsClipboardOK(); bool IsCharAllowed(TCHAR nChar); public: CSpecialEdit(); virtual ~CSpecialEdit(); void SetFormatter(IFormat *formatter); protected: // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CSpecialEdit) virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam); //}}AFX_VIRTUAL //{{AFX_MSG(CSpecialEdit) afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags); //}}AFX_MSG DECLARE_MESSAGE_MAP() }; ================================================ FILE: host/StatusDialog.cpp ================================================ // StatusDialog.cpp : implementation file // #include "stdafx.h" #include "dxwndhost.h" #include "StatusDialog.h" // CStatusDialog dialog IMPLEMENT_DYNAMIC(CStatusDialog, CDialog) CStatusDialog::CStatusDialog(CWnd* pParent /*=NULL*/) : CDialog(CStatusDialog::IDD, pParent) { } CStatusDialog::~CStatusDialog() { } void CStatusDialog::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CStatusDialog, CDialog) ON_WM_TIMER() END_MESSAGE_MAP() #define IDStatusTIMER 1 // CStatusDialog message handlers void CStatusDialog::OnTimer(UINT_PTR nIDEvent) { int DxStatus; int IconId; LPCSTR Status; char sMsg[1024]; char sMsg2[1024]; char DllVersion[21]; DXWNDSTATUS DxWndStatus; extern PRIVATEMAP *pTitles; extern TARGETMAP *pTargets; TARGETMAP *Target; extern char *GetTSCaption(int); CDialog::OnTimer(nIDEvent); GetDllVersion(DllVersion); DxStatus=GetHookStatus(&DxWndStatus); switch (DxStatus){ case DXW_IDLE: IconId=IDI_DXIDLE; Status="DISABLED"; break; case DXW_ACTIVE: IconId=IDI_DXWAIT; Status="READY"; break; case DXW_RUNNING: IconId=IDI_DXRUN; Status="RUNNING"; break; default: IconId=IDI_DXIDLE; Status="???"; break; } sprintf_s(sMsg, 1024, "DxWnd %s\n" "Hook status: %s", DllVersion, Status); if(DxStatus==DXW_RUNNING){ Target=&pTargets[DxWndStatus.TaskIdx]; sprintf_s(sMsg2, 1024, "\nTask=(%d): %s\n" "pid=%x\n" "Screen = (%dx%d) Color BPP=%d\n" "FullScreen = %s\nDX version = %d\n" "Logging = %s\n" "Cursor = (%d,%d)", (DxWndStatus.OrigIdx+1), pTitles[DxWndStatus.OrigIdx].title, DxWndStatus.dwPid, DxWndStatus.Width, DxWndStatus.Height, DxWndStatus.ColorDepth, DxWndStatus.IsFullScreen ? "Yes":"No", DxWndStatus.DXVersion, DxWndStatus.isLogging?"ON":"OFF", DxWndStatus.CursorX, DxWndStatus.CursorY); strcat(sMsg, sMsg2); if(DxWndStatus.pfd.dwFlags & DDPF_FOURCC){ char *fcc; fcc = (char *)&(DxWndStatus.pfd.dwFourCC); sprintf_s(sMsg2, 1024, "\nFourCC = %x (%c%c%c%c)", DxWndStatus.pfd.dwFourCC, isprint(fcc[0])?fcc[0]:'.', isprint(fcc[1])?fcc[1]:'.', isprint(fcc[2])?fcc[2]:'.', isprint(fcc[3])?fcc[3]:'.' ); strcat(sMsg, sMsg2); } if(DxWndStatus.pfd.dwSize){ sprintf_s(sMsg2, 1024, "\nPixel format=%s%s%s%s%s%s", (DxWndStatus.pfd.dwFlags & DDPF_ALPHAPIXELS) ? "ALPHAPIXELS ":"", (DxWndStatus.pfd.dwFlags & DDPF_ALPHA) ? "ALPHA ":"", (DxWndStatus.pfd.dwFlags & DDPF_FOURCC) ? "FOURCC ":"", (DxWndStatus.pfd.dwFlags & (DDPF_PALETTEINDEXED4|DDPF_PALETTEINDEXEDTO8|DDPF_PALETTEINDEXED8)) ? "PALETTEINDEXED ":"", (DxWndStatus.pfd.dwFlags & DDPF_RGB) ? "RGB ":"", (DxWndStatus.pfd.dwFlags & DDPF_YUV) ? "YUV ":"" ); strcat(sMsg, sMsg2); } if(DxWndStatus.pfd.dwFlags & DDPF_RGB){ sprintf_s(sMsg2, 1024, "\nColor mask (RGBA)=(%x,%x,%x,%x)", DxWndStatus.pfd.dwRBitMask, DxWndStatus.pfd.dwGBitMask, DxWndStatus.pfd.dwBBitMask, DxWndStatus.pfd.dwRGBAlphaBitMask ); strcat(sMsg, sMsg2); } if(Target->flags2 & (SHOWFPS|SHOWFPSOVERLAY)){ sprintf(sMsg2, "\nFPS = %d", DxWndStatus.FPSCount); strcat(sMsg, sMsg2); } if(Target->flags2 & TIMESTRETCH){ if(DxWndStatus.TimeShift>=-8 && DxWndStatus.TimeShift<=8){ sprintf(sMsg2, "\nTime speed %s", GetTSCaption(DxWndStatus.TimeShift)); strcat(sMsg, sMsg2); } } } this->SetDlgItemTextA(IDC_STATUSINFO, sMsg); } BOOL CStatusDialog::OnInitDialog() { CDialog::OnInitDialog(); SetTimer(IDStatusTIMER, 1000, NULL); // TODO: Add extra initialization here return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CStatusDialog::OnOK() { // TODO: Add your specialized code here and/or call the base class KillTimer(IDStatusTIMER); // stop timer CDialog::OnOK(); } ================================================ FILE: host/StatusDialog.h ================================================ #pragma once // CStatusDialog dialog class CStatusDialog : public CDialog { DECLARE_DYNAMIC(CStatusDialog) public: CStatusDialog(CWnd* pParent = NULL); // standard constructor virtual ~CStatusDialog(); // Dialog Data enum { IDD = IDD_STATUS }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support DECLARE_MESSAGE_MAP() public: afx_msg void OnTimer(UINT_PTR nIDEvent); public: virtual BOOL OnInitDialog(); protected: virtual void OnOK(); }; ================================================ FILE: host/StdAfx.cpp ================================================ // stdafx.cpp : Source file containing the standard include // dxwndhost.pch : generated precompiled header // stdafx.obj : generated precompiled type information #include "stdafx.h" ================================================ FILE: host/StdAfx.h ================================================ // stdafx.h : include file for standard system, // reference number, and rarely changes // Write the project specific include files. // #define _CRT_SECURE_NO_DEPRECATE #if !defined(AFX_STDAFX_H__9139BF92_2E61_4CBC_AB58_646DE772409F__INCLUDED_) #define AFX_STDAFX_H__9139BF92_2E61_4CBC_AB58_646DE772409F__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #define VC_EXTRALEAN // used to exclude most Windows stuff from the header. #include // MFC Core and standard components #include // MFC extension #include #include // MFC Automation Class #include // MFC Internet Explorer 4 Common control support #ifndef _AFX_NO_AFXCMN_SUPPORT #include // MFC Windows Common control support #endif // _AFX_NO_AFXCMN_SUPPORT #include #include #include "dxwnd.h" //{{AFX_INSERT_LOCATION}} // Microsoft Visual C++ Will insert additional declarations immediately before the previous line. #endif // !defined(AFX_STDAFX_H__9139BF92_2E61_4CBC_AB58_646DE772409F__INCLUDED_) ================================================ FILE: host/SystemTray.cpp ================================================ ///////////////////////////////////////////////////////////////////////////// // SystemTray.cpp : implementation file // // MFC VERSION // // This is a conglomeration of ideas from the MSJ "Webster" application, // sniffing round the online docs, and from other implementations such // as PJ Naughter's "CTrayNotifyIcon" (http://indigo.ie/~pjn/ntray.html) // especially the "CSystemTray::OnTrayNotification" member function. // Joerg Koenig suggested the icon animation stuff // // This class is a light wrapper around the windows system tray stuff. It // adds an icon to the system tray with the specified ToolTip text and // callback notification value, which is sent back to the Parent window. // // The tray icon can be instantiated using either the constructor or by // declaring the object and creating (and displaying) it later on in the // program. eg. // // CSystemTray m_SystemTray; // Member variable of some class // // ... // // in some member function maybe... // m_SystemTray.Create(pParentWnd, WM_MY_NOTIFY, "Click here", // hIcon, nSystemTrayID); // // Written by Chris Maunder (cmaunder@mail.com) // Copyright (c) 1998-2003. // // Updated: 25 Jul 1998 - Added icon animation, and derived class // from CWnd in order to handle messages. (CJM) // (icon animation suggested by Joerg Koenig. // Added API to set default menu item. Code provided // by Enrico Lelina. // // Updated: 6 June 1999 - SetIcon can now load non-standard sized icons (Chip Calvert) // Added "bHidden" parameter when creating icon // (Thanks to Michael Gombar for these suggestions) // Restricted tooltip text to 64 characters. // // Updated: 9 Nov 1999 - Now works in WindowsCE. // Fix for use in NT services (Thomas Mooney, TeleProc, Inc) // Added W2K stuff by Michael Dunn // // Updated: 1 Jan 2000 - Added tray minimisation stuff. // // Updated: 21 Sep 2000 - Added GetDoWndAnimation - animation only occurs if the system // settings allow it (Matthew Ellis). Updated the GetTrayWndRect // function to include more fallback logic (Matthew Ellis) // NOTE: Signature of GetTrayWndRect has changed! // // Updated: 4 Aug 2003 - Fixed bug that was stopping icon from being recreated when // Explorer crashed // Fixed resource leak in SetIcon // Animate() now checks for empty icon list - Anton Treskunov // Added the virutal CustomizeMenu() method - Anton Treskunov // // // This code may be used in compiled form in any way you desire. This // file may be redistributed unmodified by any means PROVIDING it is // not sold for profit without the authors written consent, and // providing that this notice and the authors name is included. If // the source code in this file is used in any commercial application // then acknowledgement must be made to the author of this file // (in whatever form you wish). // // This file is provided "as is" with no expressed or implied warranty. // The author accepts no liability for any damage caused through use. // // Expect bugs. // // Please use and enjoy. Please let me know of any bugs/mods/improvements // that you have found/implemented and I will fix/incorporate them into this // file. // ///////////////////////////////////////////////////////////////////////////// #include "stdafx.h" #include "SystemTray.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif #ifndef _WIN32_WCE // Use C++ exception handling instead of structured. #undef TRY #undef CATCH #undef END_CATCH #define TRY try #define CATCH(ex_class, ex_object) catch(ex_class* ex_object) #define END_CATCH #endif // _WIN32_WCE #ifndef _countof #define _countof(x) ( sizeof(x) / sizeof(x[0]) ) #endif IMPLEMENT_DYNAMIC(CSystemTray, CWnd) const UINT CSystemTray::m_nTimerID = 4567; UINT CSystemTray::m_nMaxTooltipLength = SYSTRAY_TIPMSGSIZE; // This may change... const UINT CSystemTray::m_nTaskbarCreatedMsg = ::RegisterWindowMessage(_T("TaskbarCreated")); CWnd CSystemTray::m_wndInvisible; ///////////////////////////////////////////////////////////////////////////// // CSystemTray construction/creation/destruction CSystemTray::CSystemTray() { Initialise(); } CSystemTray::CSystemTray(CWnd* pParent, // The window that will recieve tray notifications UINT uCallbackMessage, // the callback message to send to parent LPCTSTR szToolTip, // tray icon tooltip HICON icon, // Handle to icon UINT uID, // Identifier of tray icon BOOL bHidden /*=FALSE*/, // Hidden on creation? LPCTSTR szBalloonTip /*=NULL*/, // Ballon tip (w2k only) LPCTSTR szBalloonTitle /*=NULL*/, // Balloon tip title (w2k) DWORD dwBalloonIcon /*=NIIF_NONE*/,// Ballon tip icon (w2k) UINT uBalloonTimeout /*=10*/) // Balloon timeout (w2k) { Initialise(); Create(pParent, uCallbackMessage, szToolTip, icon, uID, bHidden, szBalloonTip, szBalloonTitle, dwBalloonIcon, uBalloonTimeout); } void CSystemTray::Initialise() { memset(&m_tnd, 0, sizeof(m_tnd)); m_bEnabled = FALSE; m_bHidden = TRUE; m_bRemoved = TRUE; m_DefaultMenuItemID = 0; m_DefaultMenuItemByPos = TRUE; m_bShowIconPending = FALSE; m_uIDTimer = 0; m_hSavedIcon = NULL; m_pTargetWnd = NULL; m_uCreationFlags = 0; #ifdef SYSTEMTRAY_USEW2K OSVERSIONINFO os = { sizeof(os) }; GetVersionEx(&os); m_bWin2K = ( VER_PLATFORM_WIN32_NT == os.dwPlatformId && os.dwMajorVersion >= 5 ); #else m_bWin2K = FALSE; #endif } // update by Michael Dunn, November 1999 // // New version of Create() that handles new features in Win 2K. // // Changes: // szTip: Same as old, but can be 128 characters instead of 64. // szBalloonTip: Text for a balloon tooltip that is shown when the icon // is first added to the tray. Pass "" if you don't want // a balloon. // szBalloonTitle: Title text for the balloon tooltip. This text is shown // in bold above the szBalloonTip text. Pass "" if you // don't want a title. // dwBalloonIcon: Specifies which icon will appear in the balloon. Legal // values are: // NIIF_NONE: No icon // NIIF_INFO: Information // NIIF_WARNING: Exclamation // NIIF_ERROR: Critical error (red circle with X) // uBalloonTimeout: Number of seconds for the balloon to remain visible. // Must be between 10 and 30 inclusive. BOOL CSystemTray::Create(CWnd* pParent, UINT uCallbackMessage, LPCTSTR szToolTip, HICON icon, UINT uID, BOOL bHidden /*=FALSE*/, LPCTSTR szBalloonTip /*=NULL*/, LPCTSTR szBalloonTitle /*=NULL*/, DWORD dwBalloonIcon /*=NIIF_NONE*/, UINT uBalloonTimeout /*=10*/) { #ifdef _WIN32_WCE m_bEnabled = TRUE; #else // this is only for Windows 95 (or higher) m_bEnabled = (GetVersion() & 0xff) >= 4; if (!m_bEnabled) { ASSERT(FALSE); return FALSE; } #endif m_nMaxTooltipLength = _countof(m_tnd.szTip); // Make sure we avoid conflict with other messages ASSERT(uCallbackMessage >= WM_APP); // Tray only supports tooltip text up to m_nMaxTooltipLength) characters ASSERT(AfxIsValidString(szToolTip)); ASSERT(_tcslen(szToolTip) <= m_nMaxTooltipLength); // Create an invisible window CWnd::CreateEx(0, AfxRegisterWndClass(0), _T(""), WS_POPUP, 0,0,0,0, NULL, 0); // load up the NOTIFYICONDATA structure m_tnd.cbSize = sizeof(NOTIFYICONDATA); m_tnd.hWnd = pParent->GetSafeHwnd()? pParent->GetSafeHwnd() : m_hWnd; m_tnd.uID = uID; m_tnd.hIcon = icon; m_tnd.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP; m_tnd.uCallbackMessage = uCallbackMessage; //_tcsncpy(m_tnd.szTip, szToolTip, m_nMaxTooltipLength-1); _tcsncpy_s(m_tnd.szTip, sizeof(m_tnd.szTip)-1, szToolTip, m_nMaxTooltipLength-1); #ifdef SYSTEMTRAY_USEW2K if (m_bWin2K && szBalloonTip) { // The balloon tooltip text can be up to 255 chars long. ASSERT(AfxIsValidString(szBalloonTip)); ASSERT(lstrlen(szBalloonTip) < 256); // The balloon title text can be up to 63 chars long. if (szBalloonTitle) { ASSERT(AfxIsValidString(szBalloonTitle)); ASSERT(lstrlen(szBalloonTitle) < SYSTRAY_TIPMSGSIZE); } // dwBalloonIcon must be valid. ASSERT(NIIF_NONE == dwBalloonIcon || NIIF_INFO == dwBalloonIcon || NIIF_WARNING == dwBalloonIcon || NIIF_ERROR == dwBalloonIcon); // The timeout must be between 10 and 30 seconds. ASSERT(uBalloonTimeout >= 10 && uBalloonTimeout <= 30); m_tnd.uFlags |= NIF_INFO; //_tcsncpy(m_tnd.szInfo, szBalloonTip, 255); _tcsncpy_s(m_tnd.szInfo, sizeof(m_tnd.szInfo)-1, szBalloonTip, 255); if (szBalloonTitle){ //_tcsncpy(m_tnd.szInfoTitle, szBalloonTitle, 63); _tcsncpy_s(m_tnd.szInfoTitle, sizeof(m_tnd.szInfoTitle)-1, szBalloonTitle, SYSTRAY_TIPMSGSIZE-1); m_tnd.szInfoTitle[SYSTRAY_TIPMSGSIZE-1] = _T('\0'); } else m_tnd.szInfoTitle[0] = _T('\0'); m_tnd.uTimeout = uBalloonTimeout * 1000; // convert time to ms m_tnd.dwInfoFlags = dwBalloonIcon; } #endif m_bHidden = bHidden; #ifdef SYSTEMTRAY_USEW2K if (m_bWin2K && m_bHidden) { m_tnd.uFlags = NIF_STATE; m_tnd.dwState = NIS_HIDDEN; m_tnd.dwStateMask = NIS_HIDDEN; } #endif m_uCreationFlags = m_tnd.uFlags; // Store in case we need to recreate in OnTaskBarCreate BOOL bResult = TRUE; if (!m_bHidden || m_bWin2K) { bResult = Shell_NotifyIcon(NIM_ADD, &m_tnd); m_bShowIconPending = m_bHidden = m_bRemoved = !bResult; } #ifdef SYSTEMTRAY_USEW2K if (m_bWin2K && szBalloonTip) { // Zero out the balloon text string so that later operations won't redisplay // the balloon. m_tnd.szInfo[0] = _T('\0'); } #endif return bResult; } CSystemTray::~CSystemTray() { RemoveIcon(); m_IconList.RemoveAll(); DestroyWindow(); } ///////////////////////////////////////////////////////////////////////////// // CSystemTray icon manipulation ////////////////////////////////////////////////////////////////////////// // // Function: SetFocus() // // Description: // Sets the focus to the tray icon. Microsoft's Win 2K UI guidelines // say you should do this after the user dismisses the icon's context // menu. // // Input: // Nothing. // // Returns: // Nothing. // ////////////////////////////////////////////////////////////////////////// // Added by Michael Dunn, November, 1999 ////////////////////////////////////////////////////////////////////////// void CSystemTray::SetFocus() { #ifdef SYSTEMTRAY_USEW2K Shell_NotifyIcon ( NIM_SETFOCUS, &m_tnd ); #endif } BOOL CSystemTray::MoveToRight() { RemoveIcon(); return AddIcon(); } BOOL CSystemTray::AddIcon() { if (!m_bRemoved) RemoveIcon(); if (m_bEnabled) { m_tnd.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP; if (!Shell_NotifyIcon(NIM_ADD, &m_tnd)) m_bShowIconPending = TRUE; else m_bRemoved = m_bHidden = FALSE; } return (m_bRemoved == FALSE); } BOOL CSystemTray::RemoveIcon() { m_bShowIconPending = FALSE; if (!m_bEnabled || m_bRemoved) return TRUE; m_tnd.uFlags = 0; if (Shell_NotifyIcon(NIM_DELETE, &m_tnd)) m_bRemoved = m_bHidden = TRUE; return (m_bRemoved == TRUE); } BOOL CSystemTray::HideIcon() { if (!m_bEnabled || m_bRemoved || m_bHidden) return TRUE; #ifdef SYSTEMTRAY_USEW2K if (m_bWin2K) { m_tnd.uFlags = NIF_STATE; m_tnd.dwState = NIS_HIDDEN; m_tnd.dwStateMask = NIS_HIDDEN; m_bHidden = Shell_NotifyIcon( NIM_MODIFY, &m_tnd); } else #endif RemoveIcon(); return (m_bHidden == TRUE); } BOOL CSystemTray::ShowIcon() { if (m_bRemoved) return AddIcon(); if (!m_bHidden) return TRUE; #ifdef SYSTEMTRAY_USEW2K if (m_bWin2K) { m_tnd.uFlags = NIF_STATE; m_tnd.dwState = 0; m_tnd.dwStateMask = NIS_HIDDEN; Shell_NotifyIcon ( NIM_MODIFY, &m_tnd ); m_bHidden = FALSE; } else #endif AddIcon(); return (m_bHidden == FALSE); } BOOL CSystemTray::SetIcon(HICON hIcon) { if (!m_bEnabled) return FALSE; m_tnd.uFlags = NIF_ICON; m_tnd.hIcon = hIcon; if (m_bHidden) return TRUE; else return Shell_NotifyIcon(NIM_MODIFY, &m_tnd); } BOOL CSystemTray::SetIcon(LPCTSTR lpszIconName) { HICON hIcon = (HICON) ::LoadImage(AfxGetResourceHandle(), lpszIconName, IMAGE_ICON, 0, 0, LR_DEFAULTCOLOR); if (!hIcon) return FALSE; BOOL bSuccess = SetIcon(hIcon); ::DestroyIcon(hIcon); return bSuccess; } BOOL CSystemTray::SetIcon(UINT nIDResource) { return SetIcon(MAKEINTRESOURCE(nIDResource)); } BOOL CSystemTray::SetStandardIcon(LPCTSTR lpIconName) { HICON hIcon = LoadIcon(NULL, lpIconName); return SetIcon(hIcon); } BOOL CSystemTray::SetStandardIcon(UINT nIDResource) { return SetStandardIcon(MAKEINTRESOURCE(nIDResource)); } HICON CSystemTray::GetIcon() const { return (m_bEnabled)? m_tnd.hIcon : NULL; } BOOL CSystemTray::SetIconList(UINT uFirstIconID, UINT uLastIconID) { if (uFirstIconID > uLastIconID) return FALSE; const CWinApp* pApp = AfxGetApp(); if (!pApp) { ASSERT(FALSE); return FALSE; } m_IconList.RemoveAll(); TRY { for (UINT i = uFirstIconID; i <= uLastIconID; i++) m_IconList.Add(pApp->LoadIcon(i)); } CATCH(CMemoryException, e) { e->ReportError(); e->Delete(); m_IconList.RemoveAll(); return FALSE; } END_CATCH return TRUE; } BOOL CSystemTray::SetIconList(HICON* pHIconList, UINT nNumIcons) { m_IconList.RemoveAll(); TRY { for (UINT i = 0; i < nNumIcons; i++) m_IconList.Add(pHIconList[i]); } CATCH (CMemoryException, e) { e->ReportError(); e->Delete(); m_IconList.RemoveAll(); return FALSE; } END_CATCH return TRUE; } BOOL CSystemTray::Animate(UINT nDelayMilliSeconds, int nNumSeconds /*=-1*/) { if (m_IconList.IsEmpty()) return FALSE; StopAnimation(); m_nCurrentIcon = 0; m_StartTime = COleDateTime::GetCurrentTime(); m_nAnimationPeriod = nNumSeconds; m_hSavedIcon = GetIcon(); // Setup a timer for the animation m_uIDTimer = SetTimer(m_nTimerID, nDelayMilliSeconds, NULL); return (m_uIDTimer != 0); } BOOL CSystemTray::StepAnimation() { if (!m_IconList.GetSize()) return FALSE; m_nCurrentIcon++; if (m_nCurrentIcon >= m_IconList.GetSize()) m_nCurrentIcon = 0; return SetIcon(m_IconList[m_nCurrentIcon]); } BOOL CSystemTray::StopAnimation() { BOOL bResult = FALSE; if (m_uIDTimer) bResult = KillTimer(m_uIDTimer); m_uIDTimer = 0; if (m_hSavedIcon) SetIcon(m_hSavedIcon); m_hSavedIcon = NULL; return bResult; } ///////////////////////////////////////////////////////////////////////////// // CSystemTray tooltip text manipulation BOOL CSystemTray::SetTooltipText(LPCTSTR pszTip) { ASSERT(AfxIsValidString(pszTip)); // (md) if(_tcslen(pszTip) >= m_nMaxTooltipLength) ((char *)pszTip)[m_nMaxTooltipLength]=(char)0; // V2.1.74: string trimming ASSERT(_tcslen(pszTip) < m_nMaxTooltipLength); if (!m_bEnabled) return FALSE; m_tnd.uFlags = NIF_TIP; _tcsncpy_s(m_tnd.szTip, sizeof(m_tnd.szTip), pszTip, m_nMaxTooltipLength-1); if (m_bHidden) return TRUE; else return Shell_NotifyIcon(NIM_MODIFY, &m_tnd); } BOOL CSystemTray::SetTooltipText(UINT nID) { CString strText; VERIFY(strText.LoadString(nID)); return SetTooltipText(strText); } CString CSystemTray::GetTooltipText() const { CString strText; if (m_bEnabled) strText = m_tnd.szTip; return strText; } ///////////////////////////////////////////////////////////////////////////// // CSystemTray support for Win 2K features. ////////////////////////////////////////////////////////////////////////// // // Function: ShowBalloon // // Description: // Shows a balloon tooltip over the tray icon. // // Input: // szText: [in] Text for the balloon tooltip. // szTitle: [in] Title for the balloon. This text is shown in bold above // the tooltip text (szText). Pass "" if you don't want a title. // dwIcon: [in] Specifies an icon to appear in the balloon. Legal values are: // NIIF_NONE: No icon // NIIF_INFO: Information // NIIF_WARNING: Exclamation // NIIF_ERROR: Critical error (red circle with X) // uTimeout: [in] Number of seconds for the balloon to remain visible. Can // be between 10 and 30 inclusive. // // Returns: // TRUE if successful, FALSE if not. // ////////////////////////////////////////////////////////////////////////// // Added by Michael Dunn, November 1999 ////////////////////////////////////////////////////////////////////////// BOOL CSystemTray::ShowBalloon(LPCTSTR szText, LPCTSTR szTitle /*=NULL*/, DWORD dwIcon /*=NIIF_NONE*/, UINT uTimeout /*=10*/ ) { #ifndef SYSTEMTRAY_USEW2K return FALSE; #else // Bail out if we're not on Win 2K. if (!m_bWin2K) return FALSE; // Verify input parameters. // The balloon tooltip text can be up to 255 chars long. ASSERT(AfxIsValidString(szText)); ASSERT(lstrlen(szText) < 256); // The balloon title text can be up to 63 chars long. if (szTitle) { ASSERT(AfxIsValidString( szTitle)); ASSERT(lstrlen(szTitle) < SYSTRAY_TIPMSGSIZE); } // dwBalloonIcon must be valid. ASSERT(NIIF_NONE == dwIcon || NIIF_INFO == dwIcon || NIIF_WARNING == dwIcon || NIIF_ERROR == dwIcon); // The timeout must be between 10 and 30 seconds. ASSERT(uTimeout >= 10 && uTimeout <= 30); m_tnd.uFlags = NIF_INFO; //_tcsncpy(m_tnd.szInfo, szText, 256); _tcsncpy_s(m_tnd.szInfo, sizeof(m_tnd.szInfo)-1, szText, 256); if (szTitle){ //_tcsncpy(m_tnd.szInfoTitle, szTitle, 64); _tcsncpy_s(m_tnd.szInfoTitle, sizeof(m_tnd.szInfoTitle)-1, szTitle, SYSTRAY_TIPMSGSIZE); m_tnd.szInfoTitle[SYSTRAY_TIPMSGSIZE-1] = _T('\0'); } else m_tnd.szInfoTitle[0] = _T('\0'); m_tnd.dwInfoFlags = dwIcon; m_tnd.uTimeout = uTimeout * 1000; // convert time to ms BOOL bSuccess = Shell_NotifyIcon (NIM_MODIFY, &m_tnd); // Zero out the balloon text string so that later operations won't redisplay // the balloon. m_tnd.szInfo[0] = _T('\0'); return bSuccess; #endif } ///////////////////////////////////////////////////////////////////////////// // CSystemTray notification window stuff BOOL CSystemTray::SetNotificationWnd(CWnd* pWnd) { if (!m_bEnabled) return FALSE; // Make sure Notification window is valid if (!pWnd || !::IsWindow(pWnd->GetSafeHwnd())) { ASSERT(FALSE); return FALSE; } m_tnd.hWnd = pWnd->GetSafeHwnd(); m_tnd.uFlags = 0; if (m_bHidden) return TRUE; else return Shell_NotifyIcon(NIM_MODIFY, &m_tnd); } CWnd* CSystemTray::GetNotificationWnd() const { return CWnd::FromHandle(m_tnd.hWnd); } // Hatr added // Hatr added // Change or retrive the window to send menu commands to BOOL CSystemTray::SetTargetWnd(CWnd* pTargetWnd) { m_pTargetWnd = pTargetWnd; return TRUE; } // CSystemTray::SetTargetWnd() CWnd* CSystemTray::GetTargetWnd() const { if (m_pTargetWnd) return m_pTargetWnd; else return AfxGetMainWnd(); } // CSystemTray::GetTargetWnd() ///////////////////////////////////////////////////////////////////////////// // CSystemTray notification message stuff BOOL CSystemTray::SetCallbackMessage(UINT uCallbackMessage) { if (!m_bEnabled) return FALSE; // Make sure we avoid conflict with other messages ASSERT(uCallbackMessage >= WM_APP); m_tnd.uCallbackMessage = uCallbackMessage; m_tnd.uFlags = NIF_MESSAGE; if (m_bHidden) return TRUE; else return Shell_NotifyIcon(NIM_MODIFY, &m_tnd); } UINT CSystemTray::GetCallbackMessage() const { return m_tnd.uCallbackMessage; } ///////////////////////////////////////////////////////////////////////////// // CSystemTray menu manipulation BOOL CSystemTray::SetMenuDefaultItem(UINT uItem, BOOL bByPos) { #ifdef _WIN32_WCE return FALSE; #else if ((m_DefaultMenuItemID == uItem) && (m_DefaultMenuItemByPos == bByPos)) return TRUE; m_DefaultMenuItemID = uItem; m_DefaultMenuItemByPos = bByPos; CMenu menu, *pSubMenu; if (!menu.LoadMenu(m_tnd.uID)) return FALSE; pSubMenu = menu.GetSubMenu(0); if (!pSubMenu) return FALSE; ::SetMenuDefaultItem(pSubMenu->m_hMenu, m_DefaultMenuItemID, m_DefaultMenuItemByPos); return TRUE; #endif } void CSystemTray::GetMenuDefaultItem(UINT& uItem, BOOL& bByPos) { uItem = m_DefaultMenuItemID; bByPos = m_DefaultMenuItemByPos; } ///////////////////////////////////////////////////////////////////////////// // CSystemTray message handlers BEGIN_MESSAGE_MAP(CSystemTray, CWnd) //{{AFX_MSG_MAP(CSystemTray) ON_WM_TIMER() //}}AFX_MSG_MAP #ifndef _WIN32_WCE ON_WM_SETTINGCHANGE() #endif ON_REGISTERED_MESSAGE(CSystemTray::m_nTaskbarCreatedMsg, OnTaskbarCreated) END_MESSAGE_MAP() void CSystemTray::OnTimer(UINT nIDEvent) { if (nIDEvent != m_uIDTimer) { //ASSERT(FALSE); GHO, v.2.1.69 return; } COleDateTime CurrentTime = COleDateTime::GetCurrentTime(); COleDateTimeSpan period = CurrentTime - m_StartTime; if (m_nAnimationPeriod > 0 && m_nAnimationPeriod < period.GetTotalSeconds()) { StopAnimation(); return; } StepAnimation(); } // This is called whenever the taskbar is created (eg after explorer crashes // and restarts. Please note that the WM_TASKBARCREATED message is only passed // to TOP LEVEL windows (like WM_QUERYNEWPALETTE) LRESULT CSystemTray::OnTaskbarCreated(WPARAM /*wParam*/, LPARAM /*lParam*/) { m_bShowIconPending = TRUE; // !m_bHidden; InstallIconPending(); return 0L; } #ifndef _WIN32_WCE void CSystemTray::OnSettingChange(UINT uFlags, LPCTSTR lpszSection) { CWnd::OnSettingChange(uFlags, lpszSection); if (uFlags == SPI_SETWORKAREA) { m_bShowIconPending = !m_bHidden; InstallIconPending(); } } #endif LRESULT CSystemTray::OnTrayNotification(UINT wParam, LONG lParam) { //Return quickly if its not for this tray icon if (wParam != m_tnd.uID) return 0L; CMenu menu, *pSubMenu; CWnd *pTargetWnd = GetTargetWnd(); if (!pTargetWnd) return 0L; // Clicking with right button brings up a context menu #if defined(_WIN32_WCE) //&& _WIN32_WCE < 211 BOOL bAltPressed = ((GetKeyState(VK_MENU) & (1 << (sizeof(SHORT)*8-1))) != 0); if (LOWORD(lParam) == WM_LBUTTONUP && bAltPressed) #else if (LOWORD(lParam) == WM_RBUTTONUP) #endif { if (!menu.LoadMenu(m_tnd.uID)) return 0; pSubMenu = menu.GetSubMenu(0); if (!pSubMenu) return 0; #ifndef _WIN32_WCE // Make chosen menu item the default (bold font) ::SetMenuDefaultItem(pSubMenu->m_hMenu, m_DefaultMenuItemID, m_DefaultMenuItemByPos); #endif CustomizeMenu(pSubMenu); // Display and track the popup menu CPoint pos; #ifdef _WIN32_WCE pos = CPoint(GetMessagePos()); #else GetCursorPos(&pos); #endif pTargetWnd->SetForegroundWindow(); #ifndef _WIN32_WCE ::TrackPopupMenu(pSubMenu->m_hMenu, 0, pos.x, pos.y, 0, pTargetWnd->GetSafeHwnd(), NULL); #else pSubMenu->TrackPopupMenu(TPM_LEFTALIGN, pos.x, pos.y, pTargetWnd, NULL); #endif // BUGFIX: See "PRB: Menus for Notification Icons Don't Work Correctly" pTargetWnd->PostMessage(WM_NULL, 0, 0); menu.DestroyMenu(); } #if defined(_WIN32_WCE) //&& _WIN32_WCE < 211 if (LOWORD(lParam) == WM_LBUTTONDBLCLK && bAltPressed) #else else if (LOWORD(lParam) == WM_LBUTTONDBLCLK) #endif { // double click received, the default action is to execute default menu item pTargetWnd->SetForegroundWindow(); UINT uItem; if (m_DefaultMenuItemByPos) { if (!menu.LoadMenu(m_tnd.uID)) return 0; pSubMenu = menu.GetSubMenu(0); if (!pSubMenu) return 0; uItem = pSubMenu->GetMenuItemID(m_DefaultMenuItemID); menu.DestroyMenu(); } else uItem = m_DefaultMenuItemID; pTargetWnd->PostMessage(WM_COMMAND, uItem, 0); } return 1; } LRESULT CSystemTray::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) { if (message == m_tnd.uCallbackMessage) return OnTrayNotification(wParam, lParam); return CWnd::WindowProc(message, wParam, lParam); } void CSystemTray::InstallIconPending() { // Is the icon display pending, and it's not been set as "hidden"? if (!m_bShowIconPending || m_bHidden) return; // Reset the flags to what was used at creation m_tnd.uFlags = m_uCreationFlags; // Try and recreate the icon m_bHidden = !Shell_NotifyIcon(NIM_ADD, &m_tnd); // If it's STILL hidden, then have another go next time... m_bShowIconPending = m_bHidden; // ASSERT(m_bHidden == FALSE); GHO v.2.1.69 } ///////////////////////////////////////////////////////////////////////////// // For minimising/maximising from system tray BOOL CALLBACK FindTrayWnd(HWND hwnd, LPARAM lParam) { TCHAR szClassName[256]; GetClassName(hwnd, szClassName, 255); // Did we find the Main System Tray? If so, then get its size and keep going if (_tcscmp(szClassName, _T("TrayNotifyWnd")) == 0) { CRect *pRect = (CRect*) lParam; ::GetWindowRect(hwnd, pRect); return TRUE; } // Did we find the System Clock? If so, then adjust the size of the rectangle // we have and quit (clock will be found after the system tray) if (_tcscmp(szClassName, _T("TrayClockWClass")) == 0) { CRect *pRect = (CRect*) lParam; CRect rectClock; ::GetWindowRect(hwnd, rectClock); // if clock is above system tray adjust accordingly if (rectClock.bottom < pRect->bottom-5) // 10 = random fudge factor. pRect->top = rectClock.bottom; else pRect->right = rectClock.left; return FALSE; } return TRUE; } #ifndef _WIN32_WCE // enhanced version by Matthew Ellis void CSystemTray::GetTrayWndRect(LPRECT lprect) { #define DEFAULT_RECT_WIDTH 150 #define DEFAULT_RECT_HEIGHT 30 HWND hShellTrayWnd = ::FindWindow(_T("Shell_TrayWnd"), NULL); if (hShellTrayWnd) { ::GetWindowRect(hShellTrayWnd, lprect); EnumChildWindows(hShellTrayWnd, FindTrayWnd, (LPARAM)lprect); return; } // OK, we failed to get the rect from the quick hack. Either explorer isn't // running or it's a new version of the shell with the window class names // changed (how dare Microsoft change these undocumented class names!) So, we // try to find out what side of the screen the taskbar is connected to. We // know that the system tray is either on the right or the bottom of the // taskbar, so we can make a good guess at where to minimize to APPBARDATA appBarData; appBarData.cbSize=sizeof(appBarData); if (SHAppBarMessage(ABM_GETTASKBARPOS,&appBarData)) { // We know the edge the taskbar is connected to, so guess the rect of the // system tray. Use various fudge factor to make it look good switch(appBarData.uEdge) { case ABE_LEFT: case ABE_RIGHT: // We want to minimize to the bottom of the taskbar lprect->top = appBarData.rc.bottom-100; lprect->bottom = appBarData.rc.bottom-16; lprect->left = appBarData.rc.left; lprect->right = appBarData.rc.right; break; case ABE_TOP: case ABE_BOTTOM: // We want to minimize to the right of the taskbar lprect->top = appBarData.rc.top; lprect->bottom = appBarData.rc.bottom; lprect->left = appBarData.rc.right-100; lprect->right = appBarData.rc.right-16; break; } return; } // Blimey, we really aren't in luck. It's possible that a third party shell // is running instead of explorer. This shell might provide support for the // system tray, by providing a Shell_TrayWnd window (which receives the // messages for the icons) So, look for a Shell_TrayWnd window and work out // the rect from that. Remember that explorer's taskbar is the Shell_TrayWnd, // and stretches either the width or the height of the screen. We can't rely // on the 3rd party shell's Shell_TrayWnd doing the same, in fact, we can't // rely on it being any size. The best we can do is just blindly use the // window rect, perhaps limiting the width and height to, say 150 square. // Note that if the 3rd party shell supports the same configuraion as // explorer (the icons hosted in NotifyTrayWnd, which is a child window of // Shell_TrayWnd), we would already have caught it above if (hShellTrayWnd) { ::GetWindowRect(hShellTrayWnd, lprect); if (lprect->right - lprect->left > DEFAULT_RECT_WIDTH) lprect->left = lprect->right - DEFAULT_RECT_WIDTH; if (lprect->bottom - lprect->top > DEFAULT_RECT_HEIGHT) lprect->top = lprect->bottom - DEFAULT_RECT_HEIGHT; return; } // OK. Haven't found a thing. Provide a default rect based on the current work // area SystemParametersInfo(SPI_GETWORKAREA,0, lprect, 0); lprect->left = lprect->right - DEFAULT_RECT_WIDTH; lprect->top = lprect->bottom - DEFAULT_RECT_HEIGHT; } // Check to see if the animation has been disabled (Matthew Ellis ) BOOL CSystemTray::GetDoWndAnimation() { ANIMATIONINFO ai; ai.cbSize=sizeof(ai); SystemParametersInfo(SPI_GETANIMATION,sizeof(ai),&ai,0); return ai.iMinAnimate?TRUE:FALSE; } #endif BOOL CSystemTray::RemoveTaskbarIcon(CWnd* pWnd) { LPCTSTR pstrOwnerClass = AfxRegisterWndClass(0); // Create static invisible window if (!::IsWindow(m_wndInvisible.m_hWnd)) { if (!m_wndInvisible.CreateEx(0, pstrOwnerClass, _T(""), WS_POPUP, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, 0)) return FALSE; } pWnd->SetParent(&m_wndInvisible); return TRUE; } void CSystemTray::MinimiseToTray(CWnd* pWnd, BOOL bForceAnimation /*= FALSE*/) { #ifndef _WIN32_WCE if (bForceAnimation || GetDoWndAnimation()) { CRect rectFrom, rectTo; pWnd->GetWindowRect(rectFrom); GetTrayWndRect(rectTo); ::DrawAnimatedRects(pWnd->m_hWnd, IDANI_CAPTION, rectFrom, rectTo); } RemoveTaskbarIcon(pWnd); pWnd->ModifyStyle(WS_VISIBLE, 0); #endif } void CSystemTray::MaximiseFromTray(CWnd* pWnd, BOOL bForceAnimation /*= TRUE*/) { #ifndef _WIN32_WCE if (bForceAnimation || GetDoWndAnimation()) { CRect rectTo; pWnd->GetWindowRect(rectTo); CRect rectFrom; GetTrayWndRect(rectFrom); pWnd->SetParent(NULL); ::DrawAnimatedRects(pWnd->m_hWnd, IDANI_CAPTION, rectFrom, rectTo); } else pWnd->SetParent(NULL); pWnd->ModifyStyle(0, WS_VISIBLE); pWnd->RedrawWindow(NULL, NULL, RDW_UPDATENOW | RDW_ALLCHILDREN | RDW_FRAME | RDW_INVALIDATE | RDW_ERASE); // Move focus away and back again to ensure taskbar icon is recreated if (::IsWindow(m_wndInvisible.m_hWnd)) m_wndInvisible.SetActiveWindow(); pWnd->SetActiveWindow(); pWnd->SetForegroundWindow(); #endif } ================================================ FILE: host/SystemTray.h ================================================ ///////////////////////////////////////////////////////////////////////////// // SystemTray.h : header file // // Written by Chris Maunder (cmaunder@mail.com) // Copyright (c) 1998. // // This code may be used in compiled form in any way you desire. This // file may be redistributed unmodified by any means PROVIDING it is // not sold for profit without the authors written consent, and // providing that this notice and the authors name is included. If // the source code in this file is used in any commercial application // then acknowledgement must be made to the author of this file // (in whatever form you wish). // // This file is provided "as is" with no expressed or implied warranty. // // Expect bugs. // // Please use and enjoy. Please let me know of any bugs/mods/improvements // that you have found/implemented and I will fix/incorporate them into this // file. #ifndef _INCLUDED_SYSTEMTRAY_H_ #define _INCLUDED_SYSTEMTRAY_H_ #ifdef NOTIFYICONDATA_V1_SIZE // If NOTIFYICONDATA_V1_SIZE, then we can use fun stuff #define SYSTEMTRAY_USEW2K #else #define NIIF_NONE 0 #endif // #include #include #include // COleDateTime #define SYSTRAY_TIPMSGSIZE 128 ///////////////////////////////////////////////////////////////////////////// // CSystemTray window class CSystemTray : public CWnd { // Construction/destruction public: CSystemTray(); CSystemTray(CWnd* pWnd, UINT uCallbackMessage, LPCTSTR szTip, HICON icon, UINT uID, BOOL bhidden = FALSE, LPCTSTR szBalloonTip = NULL, LPCTSTR szBalloonTitle = NULL, DWORD dwBalloonIcon = NIIF_NONE, UINT uBalloonTimeout = 10); virtual ~CSystemTray(); DECLARE_DYNAMIC(CSystemTray) // Operations public: BOOL Enabled() { return m_bEnabled; } BOOL Visible() { return !m_bHidden; } // Create the tray icon BOOL Create(CWnd* pParent, UINT uCallbackMessage, LPCTSTR szTip, HICON icon, UINT uID, BOOL bHidden = FALSE, LPCTSTR szBalloonTip = NULL, LPCTSTR szBalloonTitle = NULL, DWORD dwBalloonIcon = NIIF_NONE, UINT uBalloonTimeout = 10); // Change or retrieve the Tooltip text BOOL SetTooltipText(LPCTSTR pszTooltipText); BOOL SetTooltipText(UINT nID); CString GetTooltipText() const; // Change or retrieve the icon displayed BOOL SetIcon(HICON hIcon); BOOL SetIcon(LPCTSTR lpszIconName); BOOL SetIcon(UINT nIDResource); BOOL SetStandardIcon(LPCTSTR lpIconName); BOOL SetStandardIcon(UINT nIDResource); HICON GetIcon() const; void SetFocus(); BOOL HideIcon(); BOOL ShowIcon(); BOOL AddIcon(); BOOL RemoveIcon(); BOOL MoveToRight(); BOOL ShowBalloon(LPCTSTR szText, LPCTSTR szTitle = NULL, DWORD dwIcon = NIIF_NONE, UINT uTimeout = 10); // For icon animation BOOL SetIconList(UINT uFirstIconID, UINT uLastIconID); BOOL SetIconList(HICON* pHIconList, UINT nNumIcons); BOOL Animate(UINT nDelayMilliSeconds, int nNumSeconds = -1); BOOL StepAnimation(); BOOL StopAnimation(); // Change menu default item void GetMenuDefaultItem(UINT& uItem, BOOL& bByPos); BOOL SetMenuDefaultItem(UINT uItem, BOOL bByPos); // Change or retrieve the window to send notification messages to BOOL SetNotificationWnd(CWnd* pNotifyWnd); CWnd* GetNotificationWnd() const; // Change or retrieve the window to send menu commands to BOOL SetTargetWnd(CWnd* pTargetWnd); CWnd* GetTargetWnd() const; // Change or retrieve notification messages sent to the window BOOL SetCallbackMessage(UINT uCallbackMessage); UINT GetCallbackMessage() const; UINT_PTR GetTimerID() const { return m_nTimerID; } // Static functions public: static void MinimiseToTray(CWnd* pWnd, BOOL bForceAnimation = FALSE); static void MaximiseFromTray(CWnd* pWnd, BOOL bForceAnimation = FALSE); public: // Default handler for tray notification message virtual LRESULT OnTrayNotification(WPARAM uID, LPARAM lEvent); // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CSystemTray) protected: virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam); //}}AFX_VIRTUAL // Implementation protected: void Initialise(); void InstallIconPending(); virtual void CustomizeMenu(CMenu*) {} // Used for customizing the menu // Implementation protected: NOTIFYICONDATA m_tnd; BOOL m_bEnabled; // does O/S support tray icon? BOOL m_bHidden; // Has the icon been hidden? BOOL m_bRemoved; // Has the icon been removed? BOOL m_bShowIconPending; // Show the icon once tha taskbar has been created BOOL m_bWin2K; // Use new W2K features? CWnd* m_pTargetWnd; // Window that menu commands are sent CArray m_IconList; UINT_PTR m_uIDTimer; INT_PTR m_nCurrentIcon; COleDateTime m_StartTime; UINT m_nAnimationPeriod; HICON m_hSavedIcon; UINT m_DefaultMenuItemID; BOOL m_DefaultMenuItemByPos; UINT m_uCreationFlags; // Static data protected: static BOOL RemoveTaskbarIcon(CWnd* pWnd); static const UINT m_nTimerID; static UINT m_nMaxTooltipLength; static const UINT m_nTaskbarCreatedMsg; static CWnd m_wndInvisible; static BOOL GetW2K(); #ifndef _WIN32_WCE static void GetTrayWndRect(LPRECT lprect); static BOOL GetDoWndAnimation(); #endif // Generated message map functions protected: //{{AFX_MSG(CSystemTray) afx_msg void OnTimer(UINT nIDEvent); //}}AFX_MSG #ifndef _WIN32_WCE afx_msg void OnSettingChange(UINT uFlags, LPCTSTR lpszSection); #endif LRESULT OnTaskbarCreated(WPARAM wParam, LPARAM lParam); DECLARE_MESSAGE_MAP() }; #endif ///////////////////////////////////////////////////////////////////////////// ================================================ FILE: host/TabColor.cpp ================================================ // TabLogs.cpp : implementation file // #include "stdafx.h" #include "TargetDlg.h" #include "TabColor.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CTabColor dialog CTabColor::CTabColor(CWnd* pParent /*=NULL*/) : CDialog(CTabColor::IDD, pParent) { //{{AFX_DATA_INIT(CTabColor) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT } void CTabColor::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); CTargetDlg *cTarget = ((CTargetDlg *)(this->GetParent()->GetParent())); DDX_Check(pDX, IDC_INIT8BPP, cTarget->m_Init8BPP); DDX_Check(pDX, IDC_INIT16BPP, cTarget->m_Init16BPP); DDX_Check(pDX, IDC_DISABLEGAMMARAMP, cTarget->m_DisableGammaRamp); DDX_Check(pDX, IDC_FORCE16BPP, cTarget->m_Force16BPP); DDX_Check(pDX, IDC_WIREFRAME, cTarget->m_WireFrame); DDX_Check(pDX, IDC_BLACKWHITE, cTarget->m_BlackWhite); DDX_Check(pDX, IDC_USERGB565, cTarget->m_UseRGB565); DDX_Check(pDX, IDC_LOCKSYSCOLORS, cTarget->m_LockSysColors); } BEGIN_MESSAGE_MAP(CTabColor, CDialog) //{{AFX_MSG_MAP(CTabColor) // NOTE: the ClassWizard will add message map macros here //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CTabColor message handlers ================================================ FILE: host/TabColor.h ================================================ #if !defined(AFX_TABLOGS_H__7E062B52_3B6E_44C4_B58E_AAD73592C888__INCLUDED_) #define AFX_TABLOGS_H__7E062B52_3B6E_44C4_B58E_AAD73592C888__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 // TabColor.h : header file // #include "resource.h" ///////////////////////////////////////////////////////////////////////////// // CTabLogs dialog class CTabColor : public CDialog { // Construction public: CTabColor(CWnd* pParent = NULL); // standard constructor // Dialog Data //{{AFX_DATA(CTabLogs) enum { IDD = IDD_TAB_LOG }; // NOTE: the ClassWizard will add data members here //}}AFX_DATA // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CTabLogs) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Implementation protected: // Generated message map functions //{{AFX_MSG(CTabLogs) // NOTE: the ClassWizard will add member functions here //}}AFX_MSG DECLARE_MESSAGE_MAP() }; //{{AFX_INSERT_LOCATION}} // Microsoft Visual C++ will insert additional declarations immediately before the previous line. #endif ================================================ FILE: host/TabCompat.cpp ================================================ // TabDirectX.cpp : implementation file // #include "stdafx.h" #include "TargetDlg.h" #include "TabCompat.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CTabCompat dialog CTabCompat::CTabCompat(CWnd* pParent /*=NULL*/) // : CTargetDlg(pParent) : CDialog(CTabCompat::IDD, pParent) { //{{AFX_DATA_INIT(CTabCompat) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT } void CTabCompat::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); CTargetDlg *cTarget = ((CTargetDlg *)(this->GetParent()->GetParent())); DDX_Check(pDX, IDC_FAKEVERSION, cTarget->m_FakeVersion); DDX_LBIndex(pDX, IDC_LISTFAKE, cTarget->m_FakeVersionId); DDX_Check(pDX, IDC_SINGLEPROCAFFINITY, cTarget->m_SingleProcAffinity); DDX_Check(pDX, IDC_USELASTCORE, cTarget->m_UseLastCore); DDX_Check(pDX, IDC_HANDLEEXCEPTIONS, cTarget->m_HandleExceptions); DDX_Check(pDX, IDC_VIRTUALHEAP, cTarget->m_VirtualHeap); DDX_Check(pDX, IDC_LIMITRESOURCES, cTarget->m_LimitResources); DDX_Check(pDX, IDC_CDROMDRIVETYPE, cTarget->m_CDROMDriveType); DDX_Check(pDX, IDC_FONTBYPASS, cTarget->m_FontBypass); DDX_Check(pDX, IDC_BUFFEREDIOFIX, cTarget->m_BufferedIOFix); DDX_Check(pDX, IDC_NOPERFCOUNTER, cTarget->m_NoPerfCounter); DDX_Check(pDX, IDC_HIDECDROMEMPTY, cTarget->m_HideCDROMEmpty); DDX_Check(pDX, IDC_DIABLOTWEAK, cTarget->m_DiabloTweak); DDX_Check(pDX, IDC_EASPORTSHACK, cTarget->m_EASportsHack); DDX_Check(pDX, IDC_LEGACYALLOC, cTarget->m_LegacyAlloc); DDX_Check(pDX, IDC_DISABLEMAXWINMODE, cTarget->m_DisableMaxWinMode); DDX_Check(pDX, IDC_DISABLEDISABLEALTTAB, cTarget->m_DisableDisableAltTab); DDX_Check(pDX, IDC_NOIMAGEHLP, cTarget->m_NoImagehlp); DDX_Check(pDX, IDC_REPLACEPRIVOPS, cTarget->m_ReplacePrivOps); DDX_Check(pDX, IDC_BLOCKPRIORITYCLASS, cTarget->m_BlockPriorityClass); DDX_Check(pDX, IDC_COLORFIX, cTarget->m_ColorFix); DDX_Check(pDX, IDC_FIXGLOBALUNLOCK, cTarget->m_FixGlobalUnlock); DDX_Check(pDX, IDC_FIXFREELIBRARY, cTarget->m_FixFreeLibrary); DDX_Check(pDX, IDC_LOADLIBRARYERR, cTarget->m_LoadLibraryErr); DDX_Check(pDX, IDC_FIXADJUSTWINRECT, cTarget->m_FixAdjustWinRect); DDX_Check(pDX, IDC_PRETENDVISIBLE, cTarget->m_PretendVisible); DDX_Check(pDX, IDC_WININSULATION, cTarget->m_WinInsulation); // GOG patches DDX_Check(pDX, IDC_HOOKGOGLIBS, cTarget->m_HookGOGLibs); DDX_Check(pDX, IDC_BYPASSGOGLIBS, cTarget->m_BypassGOGLibs); } BEGIN_MESSAGE_MAP(CTabCompat, CDialog) //{{AFX_MSG_MAP(CTabCompat) // NOTE: the ClassWizard will add message map macros here //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CTabCompat message handlers static struct {char bMajor; char bMinor; char *sName;} WinVersions[9]= { {4, 0, "Windows 95"}, {4,10, "Windows 98/SE"}, {4,90, "Windows ME"}, {5, 0, "Windows 2000"}, {5, 1, "Windows XP"}, {5, 2, "Windows Server 2003"}, {6, 0, "Windows Vista"}, {6, 1, "Windows 7"}, {6, 2, "Windows 8"} }; BOOL CTabCompat::OnInitDialog() { AfxEnableControlContainer(); CListBox *List; CTargetDlg *cTarget = ((CTargetDlg *)(this->GetParent()->GetParent())); int i; List=(CListBox *)this->GetDlgItem(IDC_LISTFAKE); List->ResetContent(); for(i=0; i<9; i++) List->AddString(WinVersions[i].sName); List->SetCurSel(cTarget->m_FakeVersion); CDialog::OnInitDialog(); return TRUE; } ================================================ FILE: host/TabCompat.h ================================================ #if !defined(AFX_TABCOMPAT_H__798A9124_C906_446C_822D_322B5AB6C4C4__INCLUDED_) #define AFX_TABCOMPAT_H__798A9124_C906_446C_822D_322B5AB6C4C4__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 // TabDirectX.h : header file // #include "resource.h" #include "TargetDlg.h" ///////////////////////////////////////////////////////////////////////////// // CTabDirectX dialog //class CTabCompat : public CTargetDlg class CTabCompat : public CDialog { // Construction public: CTabCompat(CWnd* pParent = NULL); // standard constructor // Dialog Data //{{AFX_DATA(CTabDirectX) enum { IDD = IDD_TAB_COMPAT }; // NOTE: the ClassWizard will add data members here //}}AFX_DATA // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CTabDirectX) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Implementation protected: BOOL OnInitDialog(); // Generated message map functions //{{AFX_MSG(CTabDirectX) // NOTE: the ClassWizard will add member functions here //}}AFX_MSG DECLARE_MESSAGE_MAP() }; //{{AFX_INSERT_LOCATION}} // Microsoft Visual C++ will insert additional declarations immediately before the previous line. #endif // !defined(AFX_TABTHREE_H__798A9124_C906_446C_822D_322B5AB6C4C4__INCLUDED_) ================================================ FILE: host/TabDebug.cpp ================================================ // TabDebug.cpp : implementation file // #include "stdafx.h" #include "TargetDlg.h" #include "TabDebug.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CTabCompat dialog CTabDebug::CTabDebug(CWnd* pParent /*=NULL*/) // : CTargetDlg(pParent) : CDialog(CTabDebug::IDD, pParent) { //{{AFX_DATA_INIT(CTabDebug) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT } void CTabDebug::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); CTargetDlg *cTarget = ((CTargetDlg *)(this->GetParent()->GetParent())); DDX_Check(pDX, IDC_ASSERT, cTarget->m_AssertDialog); DDX_Check(pDX, IDC_MARKBLIT, cTarget->m_MarkBlit); DDX_Check(pDX, IDC_MARKLOCK, cTarget->m_MarkLock); DDX_Check(pDX, IDC_MARKWING32, cTarget->m_MarkWinG32); DDX_Check(pDX, IDC_MARKGDI32, cTarget->m_MarkGDI32); DDX_Check(pDX, IDC_DUMPDIBSECTION, cTarget->m_DumpDIBSection); DDX_Check(pDX, IDC_DUMPDEVCONTEXT, cTarget->m_DumpDevContext); DDX_Check(pDX, IDC_NOBLT, cTarget->m_NoBlt); DDX_Check(pDX, IDC_FASTBLT, cTarget->m_FastBlt); DDX_Check(pDX, IDC_GDICOLORCONV, cTarget->m_GDIColorConv); DDX_Check(pDX, IDC_ANALYTICMODE, cTarget->m_AnalyticMode); DDX_Check(pDX, IDC_SURFACEWARN, cTarget->m_SurfaceWarn); DDX_Check(pDX, IDC_CAPMASK, cTarget->m_CapMask); DDX_Check(pDX, IDC_NOWINDOWHOOKS, cTarget->m_NoWindowHooks); DDX_Check(pDX, IDC_NODDRAWBLT, cTarget->m_NoDDRAWBlt); DDX_Check(pDX, IDC_NODDRAWFLIP, cTarget->m_NoDDRAWFlip); DDX_Check(pDX, IDC_NOGDIBLT, cTarget->m_NoGDIBlt); DDX_Check(pDX, IDC_ZBUFFERALWAYS, cTarget->m_ZBufferAlways); DDX_Check(pDX, IDC_HOTPATCHALWAYS, cTarget->m_HotPatchAlways); DDX_Check(pDX, IDC_FREEZEINJECTEDSON, cTarget->m_FreezeInjectedSon); DDX_Check(pDX, IDC_STRESSRESOURCES, cTarget->m_StressResources); DDX_Check(pDX, IDC_FULLRECTBLT, cTarget->m_FullRectBlt); DDX_Check(pDX, IDC_CENTERTOWIN, cTarget->m_CenterToWin); // DDX_Check(pDX, IDC_NOSYSTEMMEMORY, cTarget->m_NoSystemMemory); } BEGIN_MESSAGE_MAP(CTabDebug, CDialog) //{{AFX_MSG_MAP(CTabCompat) // NOTE: the ClassWizard will add message map macros here //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CTabCompat message handlers ================================================ FILE: host/TabDebug.h ================================================ #if !defined(AFX_TABCOMPAT_H__12345678_C906_446C_822D_322B5AB6C4C4__INCLUDED_) #define AFX_TABCOMPAT_H__12345678_C906_446C_822D_322B5AB6C4C4__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 // TabDirectX.h : header file // #include "resource.h" #include "TargetDlg.h" ///////////////////////////////////////////////////////////////////////////// // CTabDirectX dialog //class CTabCompat : public CTargetDlg class CTabDebug : public CDialog { // Construction public: CTabDebug(CWnd* pParent = NULL); // standard constructor // Dialog Data //{{AFX_DATA(CTabDirectX) enum { IDD = IDD_TAB_DEBUG }; // NOTE: the ClassWizard will add data members here //}}AFX_DATA // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CTabDirectX) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Implementation protected: //BOOL OnInitDialog(); // Generated message map functions //{{AFX_MSG(CTabDirectX) // NOTE: the ClassWizard will add member functions here //}}AFX_MSG DECLARE_MESSAGE_MAP() public: }; //{{AFX_INSERT_LOCATION}} // Microsoft Visual C++ will insert additional declarations immediately before the previous line. #endif // !defined(AFX_TABTHREE_H__798A9124_C906_446C_822D_322B5AB6C4C4__INCLUDED_) ================================================ FILE: host/TabDirect3D.cpp ================================================ // TabDirect3D.cpp : implementation file // #include "stdafx.h" #include "TargetDlg.h" #include "TabDirect3D.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CTabDirect3D dialog CTabDirect3D::CTabDirect3D(CWnd* pParent /*=NULL*/) : CDialog(CTabDirect3D::IDD, pParent) { //{{AFX_DATA_INIT(CTabDirect3D) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT } void CTabDirect3D::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); CTargetDlg *cTarget = ((CTargetDlg *)(this->GetParent()->GetParent())); // Direct3D tweaks DDX_Check(pDX, IDC_ZBUFFERCLEAN, cTarget->m_ZBufferClean); DDX_Check(pDX, IDC_ZBUFFER0CLEAN, cTarget->m_ZBuffer0Clean); DDX_Check(pDX, IDC_DYNAMICZCLEAN, cTarget->m_DynamicZClean); DDX_Check(pDX, IDC_ZBUFFERHARDCLEAN, cTarget->m_ZBufferHardClean); DDX_Check(pDX, IDC_NOPOWER2FIX, cTarget->m_NoPower2Fix); DDX_Check(pDX, IDC_NOD3DRESET, cTarget->m_NoD3DReset); DDX_Check(pDX, IDC_SUPPRESSD3DEXT, cTarget->m_SuppressD3DExt); DDX_Check(pDX, IDC_ENUM16BITMODES, cTarget->m_Enum16bitModes); DDX_Check(pDX, IDC_TRIMTEXTUREFORMATS, cTarget->m_TrimTextureFormats); // Direct3D window tweaks DDX_Check(pDX, IDC_FIXD3DFRAME, cTarget->m_FixD3DFrame); DDX_Check(pDX, IDC_NOWINDOWMOVE, cTarget->m_NoWindowMove); // Texture management DDX_Radio(pDX, IDC_TEXTURENONE, cTarget->m_TextureHandling); DDX_Radio(pDX, IDC_BMPFORMAT, cTarget->m_TextureFileFormat); // 3D Effects DDX_Check(pDX, IDC_NOTEXTURES, cTarget->m_NoTextures); DDX_Check(pDX, IDC_WIREFRAME, cTarget->m_WireFrame); DDX_Check(pDX, IDC_DISABLEFOGGING, cTarget->m_DisableFogging); DDX_Check(pDX, IDC_CLEARTARGET, cTarget->m_ClearTarget); // Swap Effect DDX_Check(pDX, IDC_FORCESWAPEFFECT, cTarget->m_ForcesSwapEffect); DDX_Radio(pDX, IDC_SWAP_DISCARD, cTarget->m_SwapEffect); // Emulations .... DDX_Check(pDX, IDC_D3D8BACK16, cTarget->m_D3D8Back16); } BEGIN_MESSAGE_MAP(CTabDirect3D, CDialog) //{{AFX_MSG_MAP(CTabDirect3D) // NOTE: the ClassWizard will add message map macros here //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CTabDirect3D message handlers ================================================ FILE: host/TabDirect3D.h ================================================ #if !defined(AFX_TabDirect3D_H__798A9124_C906_446C_822D_322B5AB6C4C4__INCLUDED_) #define AFX_TabDirect3D_H__798A9124_C906_446C_822D_322B5AB6C4C4__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 // TabDirect3D.h : header file // #include "resource.h" ///////////////////////////////////////////////////////////////////////////// // CTabDirect3D dialog class CTabDirect3D : public CDialog { // Construction public: CTabDirect3D(CWnd* pParent = NULL); // standard constructor // Dialog Data //{{AFX_DATA(CTabDirect3D) enum { IDD = IDD_TAB_DIRECTX }; // NOTE: the ClassWizard will add data members here //}}AFX_DATA // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CTabDirect3D) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Implementation protected: // Generated message map functions //{{AFX_MSG(CTabDirect3D) // NOTE: the ClassWizard will add member functions here //}}AFX_MSG DECLARE_MESSAGE_MAP() public: }; //{{AFX_INSERT_LOCATION}} // Microsoft Visual C++ will insert additional declarations immediately before the previous line. #endif ================================================ FILE: host/TabDirectX.cpp ================================================ // TabDirectX.cpp : implementation file // #include "stdafx.h" #include "TargetDlg.h" #include "TabDirectX.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CTabDirectX dialog CTabDirectX::CTabDirectX(CWnd* pParent /*=NULL*/) : CDialog(CTabDirectX::IDD, pParent) { //{{AFX_DATA_INIT(CTabDirectX) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT } void CTabDirectX::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); CTargetDlg *cTarget = ((CTargetDlg *)(this->GetParent()->GetParent())); DDX_Radio(pDX, IDC_AUTO, cTarget->m_DXVersion); DDX_Radio(pDX, IDC_NOEMULATESURFACE, cTarget->m_DxEmulationMode); DDX_Radio(pDX, IDC_DDRAWFILTER, cTarget->m_DxFilterMode); DDX_Check(pDX, IDC_BLITFROMBACKBUFFER, cTarget->m_BlitFromBackBuffer); DDX_Check(pDX, IDC_AUTOREFRESH, cTarget->m_AutoRefresh); DDX_Check(pDX, IDC_INDEPENDENTREFRESH, cTarget->m_IndependentRefresh); DDX_Check(pDX, IDC_TEXTUREFORMAT, cTarget->m_TextureFormat); DDX_Check(pDX, IDC_SUPPRESSRELEASE, cTarget->m_SuppressRelease); DDX_Check(pDX, IDC_VIDEOTOSYSTEMMEM, cTarget->m_VideoToSystemMem); DDX_Check(pDX, IDC_SUPPRESSDXERRORS, cTarget->m_SuppressDXErrors); DDX_Check(pDX, IDC_NOPALETTEUPDATE, cTarget->m_NoPaletteUpdate); DDX_Check(pDX, IDC_NOPIXELFORMAT, cTarget->m_NoPixelFormat); DDX_Check(pDX, IDC_NOALPHACHANNEL, cTarget->m_NoAlphaChannel); DDX_Check(pDX, IDC_NOFLIPEMULATION, cTarget->m_NoFlipEmulation); DDX_Check(pDX, IDC_OFFSCREENZBUFFER, cTarget->m_OffscreenZBuffer); DDX_Check(pDX, IDC_FLIPEMULATION, cTarget->m_FlipEmulation); DDX_Check(pDX, IDC_SETCOMPATIBILITY, cTarget->m_SetCompatibility); DDX_Check(pDX, IDC_AEROBOOST, cTarget->m_AEROBoost); DDX_Check(pDX, IDC_LOCKCOLORDEPTH, cTarget->m_LockColorDepth); } BEGIN_MESSAGE_MAP(CTabDirectX, CDialog) //{{AFX_MSG_MAP(CTabDirectX) // NOTE: the ClassWizard will add message map macros here //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CTabDirectX message handlers ================================================ FILE: host/TabDirectX.h ================================================ #if !defined(AFX_TABDIRECTX_H__798A9124_C906_446C_822D_322B5AB6C4C4__INCLUDED_) #define AFX_TABDIRECTX_H__798A9124_C906_446C_822D_322B5AB6C4C4__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 // TabDirectX.h : header file // #include "resource.h" ///////////////////////////////////////////////////////////////////////////// // CTabDirectX dialog class CTabDirectX : public CDialog { // Construction public: CTabDirectX(CWnd* pParent = NULL); // standard constructor // Dialog Data //{{AFX_DATA(CTabDirectX) enum { IDD = IDD_TAB_DIRECTX }; // NOTE: the ClassWizard will add data members here //}}AFX_DATA // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CTabDirectX) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Implementation protected: // Generated message map functions //{{AFX_MSG(CTabDirectX) // NOTE: the ClassWizard will add member functions here //}}AFX_MSG DECLARE_MESSAGE_MAP() public: }; //{{AFX_INSERT_LOCATION}} // Microsoft Visual C++ will insert additional declarations immediately before the previous line. #endif ================================================ FILE: host/TabDirectX2.cpp ================================================ // TabDirectX2.cpp : implementation file // #include "stdafx.h" #include "TargetDlg.h" #include "TabDirectX2.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CTabDirectX2 dialog CTabDirectX2::CTabDirectX2(CWnd* pParent /*=NULL*/) : CDialog(CTabDirectX2::IDD, pParent) { //{{AFX_DATA_INIT(CTabDirectX2) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT } void CTabDirectX2::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); CTargetDlg *cTarget = ((CTargetDlg *)(this->GetParent()->GetParent())); // Ddraw tweaks DDX_Check(pDX, IDC_NOSYSMEMPRIMARY, cTarget->m_NoSysMemPrimary); DDX_Check(pDX, IDC_NOSYSMEMBACKBUF, cTarget->m_NoSysMemBackBuf); DDX_Check(pDX, IDC_FIXPITCH, cTarget->m_FixPitch); DDX_Check(pDX, IDC_POWER2WIDTH, cTarget->m_Power2Width); DDX_Check(pDX, IDC_FIXREFCOUNTER, cTarget->m_FixRefCounter); DDX_Check(pDX, IDC_RETURNNULLREF, cTarget->m_ReturnNullRef); DDX_Check(pDX, IDC_FORCESHEL, cTarget->m_ForcesHEL); DDX_Check(pDX, IDC_NOHALDEVICE, cTarget->m_NoHALDevice); DDX_Check(pDX, IDC_MINIMALCAPS, cTarget->m_MinimalCaps); DDX_Check(pDX, IDC_SETZBUFFERBITDEPTHS, cTarget->m_SetZBufferBitDepths); DDX_Check(pDX, IDC_DEINTERLACE, cTarget->m_Deinterlace); DDX_Check(pDX, IDC_LIMITDDRAW, cTarget->m_LimitDdraw); DDX_Check(pDX, IDC_SUPPRESSOVERLAY, cTarget->m_SuppressOverlay); DDX_Check(pDX, IDC_BLACKWHITE, cTarget->m_BlackWhite); DDX_Check(pDX, IDC_USERGB565, cTarget->m_UseRGB565); DDX_CBIndex(pDX, IDC_DDWAWLIMITCOMBO, cTarget->m_MaxDdrawInterface); DDX_Check(pDX, IDC_BACKBUFATTACH, cTarget->m_BackBufAttach); DDX_Check(pDX, IDC_CLEARTEXTUREFOURCC, cTarget->m_ClearTextureFourCC); DDX_Check(pDX, IDC_NODDEXCLUSIVEMODE, cTarget->m_NoDDExclusiveMode); DDX_Check(pDX, IDC_CREATEDESKTOP, cTarget->m_CreateDesktop); DDX_Check(pDX, IDC_ALLOWSYSMEMON3DDEV, cTarget->m_AllowSysmemOn3DDev); // Vsync //DDX_Check(pDX, IDC_SAVELOAD, cTarget->m_SaveLoad); //DDX_Check(pDX, IDC_FORCEVSYNC, cTarget->m_ForceVSync); //DDX_Check(pDX, IDC_FORCENOVSYNC, cTarget->m_ForceNoVSync); //DDX_Check(pDX, IDC_FORCEWAIT, cTarget->m_ForceWait); //DDX_Check(pDX, IDC_FORCENOWAIT, cTarget->m_ForceNoWait); DDX_Radio(pDX, IDC_VSYNCDEFAULT, cTarget->m_VSyncMode); DDX_Radio(pDX, IDC_WAITDEFAULT, cTarget->m_WaitMode); DDX_Radio(pDX, IDC_VSYNCHW, cTarget->m_VSyncImpl); DDX_Text(pDX, IDC_SCANLINE, cTarget->m_ScanLine); // Clipper DDX_Radio(pDX, IDC_CLIPPERNONE, cTarget->m_ClipperMode); } BEGIN_MESSAGE_MAP(CTabDirectX2, CDialog) //{{AFX_MSG_MAP(CTabDirectX2) // NOTE: the ClassWizard will add message map macros here //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CTabDirectX2 message handlers ================================================ FILE: host/TabDirectX2.h ================================================ #if !defined(AFX_TabDirectX2_H__798A9124_C906_446C_822D_322B5AB6C4C4__INCLUDED_) #define AFX_TabDirectX2_H__798A9124_C906_446C_822D_322B5AB6C4C4__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 // TabDirect3D.h : header file // #include "resource.h" ///////////////////////////////////////////////////////////////////////////// // CTabDirectX2 dialog class CTabDirectX2 : public CDialog { // Construction public: CTabDirectX2(CWnd* pParent = NULL); // standard constructor // Dialog Data //{{AFX_DATA(CTabDirectX2) enum { IDD = IDD_TAB_DIRECTX }; // NOTE: the ClassWizard will add data members here //}}AFX_DATA // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CTabDirectX2) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Implementation protected: // Generated message map functions //{{AFX_MSG(CTabDirectX2) // NOTE: the ClassWizard will add member functions here //}}AFX_MSG DECLARE_MESSAGE_MAP() public: }; //{{AFX_INSERT_LOCATION}} // Microsoft Visual C++ will insert additional declarations immediately before the previous line. #endif ================================================ FILE: host/TabHook.cpp ================================================ // TabHook.cpp : implementation file // #include "stdafx.h" #include "TargetDlg.h" #include "TabHook.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CTabHook dialog CTabHook::CTabHook(CWnd* pParent /*=NULL*/) // : CTargetDlg(pParent) : CDialog(CTabHook::IDD, pParent) { //{{AFX_DATA_INIT(CTabHook) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT } void CTabHook::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); CTargetDlg *cTarget = ((CTargetDlg *)(this->GetParent()->GetParent())); DDX_Text(pDX, IDC_MODULE, cTarget->m_Module); DDX_Text(pDX, IDC_STARTFOLDER, cTarget->m_StartFolder); DDX_Check(pDX, IDC_HOOKENABLED, cTarget->m_HookEnabled); DDX_Radio(pDX, IDC_INJECT_WINDOWSHOOK, cTarget->m_InjectionMode); DDX_Check(pDX, IDC_HOTPATCH, cTarget->m_HotPatch); DDX_Check(pDX, IDC_HOOKDLLS, cTarget->m_HookDLLs); DDX_Check(pDX, IDC_ANSIWIDE, cTarget->m_AnsiWide); DDX_Check(pDX, IDC_HOOKNORUN, cTarget->m_HookNoRun); DDX_Check(pDX, IDC_COPYNOSHIMS, cTarget->m_CopyNoShims); DDX_Check(pDX, IDC_HOOKNOUPDATE, cTarget->m_HookNoUpdate); DDX_Check(pDX, IDC_SEQUENCEDIAT, cTarget->m_SequencedIAT); DDX_Check(pDX, IDC_HOOKCHILDWIN, cTarget->m_HookChildWin); DDX_Check(pDX, IDC_HOOKDLGWIN, cTarget->m_HookDlgWin); // Kernel32 DDX_Radio(pDX, IDC_SONDEFAULT, cTarget->m_SonProcessMode); // additional hooks DDX_Check(pDX, IDC_HOOKDIRECTSOUND, cTarget->m_HookDirectSound); DDX_Check(pDX, IDC_HOOKWING32, cTarget->m_HookWinG32); DDX_Check(pDX, IDC_HOOKGLIDE, cTarget->m_HookGlide); } BEGIN_MESSAGE_MAP(CTabHook, CDialog) //{{AFX_MSG_MAP(CTabHook) // NOTE: the ClassWizard will add message map macros here //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CTabHook message handlers ================================================ FILE: host/TabHook.h ================================================ #if !defined(AFX_TABMOUSE_H__12345678_C906_446C_822D_322B5AB6C4C4__INCLUDED_) #define AFX_TABMOUSE_H__12345678_C906_446C_822D_322B5AB6C4C4__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 // TabHook.h : header file // #include "resource.h" #include "TargetDlg.h" ///////////////////////////////////////////////////////////////////////////// // CTabHook dialog //class CTabHook : public CTargetDlg class CTabHook : public CDialog { // Construction public: CTabHook(CWnd* pParent = NULL); // standard constructor // Dialog Data //{{AFX_DATA(CTabDirectX) enum { IDD = IDD_TAB_HOOK }; // NOTE: the ClassWizard will add data members here //}}AFX_DATA // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CTabDirectX) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Implementation protected: // Generated message map functions //{{AFX_MSG(CTabDirectX) // NOTE: the ClassWizard will add member functions here //}}AFX_MSG DECLARE_MESSAGE_MAP() }; //{{AFX_INSERT_LOCATION}} // Microsoft Visual C++ will insert additional declarations immediately before the previous line. #endif // !defined(AFX_TABTHREE_H__798A9124_C906_446C_822D_322B5AB6C4C4__INCLUDED_) ================================================ FILE: host/TabInput.cpp ================================================ // TabInput.cpp : implementation file // #include "stdafx.h" #include "TargetDlg.h" #include "TabInput.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CTabInput dialog CTabInput::CTabInput(CWnd* pParent /*=NULL*/) // : CTargetDlg(pParent) : CDialog(CTabInput::IDD, pParent) { //{{AFX_DATA_INIT(CTabInput) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT } void CTabInput::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); CTargetDlg *cTarget = ((CTargetDlg *)(this->GetParent()->GetParent())); // Cursor Visibility DDX_Radio(pDX, IDC_CURSORAUTOMATIC, cTarget->m_MouseVisibility); // Cursor Handling DDX_Check(pDX, IDC_MODIFYMOUSE, cTarget->m_ModifyMouse); //DDX_Check(pDX, IDC_DISABLECLIPPING, cTarget->m_EnableClipping); //DDX_Check(pDX, IDC_CLIPCURSOR, cTarget->m_CursorClipping); DDX_Check(pDX, IDC_KEEPCURSORWITHIN, cTarget->m_KeepCursorWithin); DDX_Check(pDX, IDC_KEEPCURSORFIXED, cTarget->m_KeepCursorFixed); DDX_Check(pDX, IDC_MESSAGEPROC, cTarget->m_MessageProc); DDX_Check(pDX, IDC_FIXMOUSEHOOK, cTarget->m_FixMouseHook); DDX_Check(pDX, IDC_FIXNCHITTEST, cTarget->m_FixNCHITTEST); DDX_Check(pDX, IDC_SLOW, cTarget->m_SlowDown); DDX_Check(pDX, IDC_RELEASEMOUSE, cTarget->m_ReleaseMouse); DDX_Check(pDX, IDC_VIRTUALJOYSTICK, cTarget->m_VirtualJoystick); // Cursor Clipper DDX_Radio(pDX, IDC_CLIPPERAUTO, cTarget->m_MouseClipper); DDX_Check(pDX, IDC_CLIPMENU, cTarget->m_ClipMenu); // DirectInput DDX_Check(pDX, IDC_HOOKDI, cTarget->m_HookDI); DDX_Check(pDX, IDC_HOOKDI8, cTarget->m_HookDI8); DDX_Check(pDX, IDC_UNACQUIRE, cTarget->m_Unacquire); DDX_Check(pDX, IDC_EMULATERELMOUSE, cTarget->m_EmulateRelMouse); DDX_Check(pDX, IDC_SKIPDEVTYPEHID, cTarget->m_SkipDevTypeHID); DDX_Check(pDX, IDC_SUPPRESSDIERRORS, cTarget->m_SuppressDIErrors); DDX_Check(pDX, IDC_SHAREDKEYBOARD, cTarget->m_SharedKeyboard); // Message processing DDX_Radio(pDX, IDC_PROCESSALLMESSAGES, cTarget->m_OffendingMessages); //DDX_Check(pDX, IDC_FILTERMESSAGES, cTarget->m_FilterMessages); DDX_Check(pDX, IDC_PEEKALLMESSAGES, cTarget->m_PeekAllMessages); DDX_Check(pDX, IDC_NOWINPOSCHANGES, cTarget->m_NoWinPosChanges); DDX_Check(pDX, IDC_MESSAGEPUMP, cTarget->m_MessagePump); // Keyboard handling DDX_Check(pDX, IDC_ENABLEHOTKEYS, cTarget->m_EnableHotKeys); DDX_Check(pDX, IDC_HANDLEALTF4, cTarget->m_HandleAltF4); } BEGIN_MESSAGE_MAP(CTabInput, CDialog) //{{AFX_MSG_MAP(CTabInput) // NOTE: the ClassWizard will add message map macros here //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CTabInput message handlers ================================================ FILE: host/TabInput.h ================================================ #if !defined(AFX_TABMOUSE_H__798A9124_C906_446C_822D_322B5AB6C4C4__INCLUDED_) #define AFX_TABMOUSE_H__798A9124_C906_446C_822D_322B5AB6C4C4__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 // TabDirectX.h : header file // #include "resource.h" #include "TargetDlg.h" ///////////////////////////////////////////////////////////////////////////// // CTabDirectX dialog //class CTabInput : public CTargetDlg class CTabInput : public CDialog { // Construction public: CTabInput(CWnd* pParent = NULL); // standard constructor // Dialog Data //{{AFX_DATA(CTabDirectX) enum { IDD = IDD_TAB_INPUT }; // NOTE: the ClassWizard will add data members here //}}AFX_DATA // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CTabDirectX) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Implementation protected: // Generated message map functions //{{AFX_MSG(CTabDirectX) // NOTE: the ClassWizard will add member functions here //}}AFX_MSG DECLARE_MESSAGE_MAP() }; //{{AFX_INSERT_LOCATION}} // Microsoft Visual C++ will insert additional declarations immediately before the previous line. #endif // !defined(AFX_TABTHREE_H__798A9124_C906_446C_822D_322B5AB6C4C4__INCLUDED_) ================================================ FILE: host/TabLogs.cpp ================================================ // TabLogs.cpp : implementation file // #include "stdafx.h" #include "TargetDlg.h" #include "TabLogs.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CTabLogs dialog CTabLogs::CTabLogs(CWnd* pParent /*=NULL*/) : CDialog(CTabLogs::IDD, pParent) { //{{AFX_DATA_INIT(CTabLogs) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT } //BOOL CTabLogs::OnInitDialog() //{ // extern BOOL gbDebug; // CDialog::OnInitDialog(); // (CButton *)(this->GetDlgItem(IDC_ASSERT))->EnableWindow(gbDebug ? TRUE : FALSE); // return TRUE; //} void CTabLogs::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); CTargetDlg *cTarget = ((CTargetDlg *)(this->GetParent()->GetParent())); //extern BOOL gbDebug; DDX_Radio(pDX, IDC_LOG_NONE, cTarget->m_LogMode); DDX_Check(pDX, IDC_OUTD3DTRACE, cTarget->m_OutD3DTrace); DDX_Check(pDX, IDC_OUTDDRAWTRACE, cTarget->m_OutDDRAWTrace); DDX_Check(pDX, IDC_OUTDEBUG, cTarget->m_OutDebug); DDX_Check(pDX, IDC_CURSORTRACE, cTarget->m_CursorTrace); //DDX_Check(pDX, IDC_LOGENABLED, cTarget->m_LogEnabled); DDX_Check(pDX, IDC_OUTDEBUGSTRING, cTarget->m_OutDebugString); //DDX_Check(pDX, IDC_ERASELOGFILE, cTarget->m_EraseLogFile); DDX_Check(pDX, IDC_ADDTIMESTAMP, cTarget->m_AddTimeStamp); DDX_Check(pDX, IDC_ADDRELATIVETIME, cTarget->m_AddRelativeTime); DDX_Check(pDX, IDC_OUTWINMESSAGES, cTarget->m_OutWinMessages); DDX_Check(pDX, IDC_OUTDWTRACE, cTarget->m_OutDWTrace); DDX_Check(pDX, IDC_IMPORTTABLE, cTarget->m_ImportTable); DDX_Check(pDX, IDC_OUTREGISTRY, cTarget->m_RegistryOp); DDX_Check(pDX, IDC_TRACEHOOKS, cTarget->m_TraceHooks); DDX_Check(pDX, IDC_OUTOGLTRACE, cTarget->m_OutOGLTrace); DDX_Check(pDX, IDC_OUTWGTRACE, cTarget->m_OutWGTrace); DDX_Check(pDX, IDC_OUTHEXTRACE, cTarget->m_OutHexTrace); } BEGIN_MESSAGE_MAP(CTabLogs, CDialog) //{{AFX_MSG_MAP(CTabLogs) // NOTE: the ClassWizard will add message map macros here //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CTabLogs message handlers ================================================ FILE: host/TabLogs.h ================================================ #if !defined(AFX_TABLOGS_H__7E062B52_3B6E_44C4_B58E_AAD73592C8E3__INCLUDED_) #define AFX_TABLOGS_H__7E062B52_3B6E_44C4_B58E_AAD73592C8E3__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 // TabLogs.h : header file // #include "resource.h" ///////////////////////////////////////////////////////////////////////////// // CTabLogs dialog class CTabLogs : public CDialog { // Construction public: CTabLogs(CWnd* pParent = NULL); // standard constructor //virtual BOOL OnInitDialog(); // Dialog Data //{{AFX_DATA(CTabLogs) enum { IDD = IDD_TAB_LOG }; // NOTE: the ClassWizard will add data members here //}}AFX_DATA // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CTabLogs) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Implementation protected: // Generated message map functions //{{AFX_MSG(CTabLogs) // NOTE: the ClassWizard will add member functions here //}}AFX_MSG DECLARE_MESSAGE_MAP() }; //{{AFX_INSERT_LOCATION}} // Microsoft Visual C++ will insert additional declarations immediately before the previous line. #endif ================================================ FILE: host/TabNotes.cpp ================================================ // TabNotes.cpp : implementation file // #include "stdafx.h" #include "TargetDlg.h" #include "TabNotes.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CTabNotes dialog CTabNotes::CTabNotes(CWnd* pParent /*=NULL*/) // : CTargetDlg(pParent) : CDialog(CTabNotes::IDD, pParent) { //{{AFX_DATA_INIT(CTabNotes) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT } void CTabNotes::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); CTargetDlg *cTarget = ((CTargetDlg *)(this->GetParent()->GetParent())); DDX_Text(pDX, IDC_NOTES, cTarget->m_Notes); } BEGIN_MESSAGE_MAP(CTabNotes, CDialog) //{{AFX_MSG_MAP(CTabNotes) // NOTE: the ClassWizard will add message map macros here //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CTabNotes message handlers //BOOL CTabNotes::OnInitDialog() //{ // AfxEnableControlContainer(); // CListBox *List; // CTargetDlg *cTarget = ((CTargetDlg *)(this->GetParent()->GetParent())); // int i; // List=(CListBox *)this->GetDlgItem(IDC_LISTFAKE); // List->ResetContent(); // for(i=0; i<9; i++) List->AddString(WinVersions[i].sName); // List->SetCurSel(cTarget->m_FakeVersion); // CDialog::OnInitDialog(); // return TRUE; //} ================================================ FILE: host/TabNotes.h ================================================ #if !defined(AFX_TABNOTES_H__798A9124_C906_446C_822D_322B5AB6C4C4__INCLUDED_) #define AFX_TABNOTES_H__798A9124_C906_446C_822D_322B5AB6C4C4__INCLUDED_ #include "resource.h" #include "TargetDlg.h" ///////////////////////////////////////////////////////////////////////////// // CTabNotes dialog //class CTabNotes : public CTargetDlg class CTabNotes : public CDialog { // Construction public: CTabNotes(CWnd* pParent = NULL); // standard constructor // Dialog Data //{{AFX_DATA(CTabDirectX) enum { IDD = IDD_TAB_NOTES }; // NOTE: the ClassWizard will add data members here //}}AFX_DATA // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CTabDirectX) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Implementation protected: //BOOL OnInitDialog(); // Generated message map functions //{{AFX_MSG(CTabDirectX) // NOTE: the ClassWizard will add member functions here //}}AFX_MSG DECLARE_MESSAGE_MAP() }; //{{AFX_INSERT_LOCATION}} // Microsoft Visual C++ will insert additional declarations immediately before the previous line. #endif // !defined(AFX_TABTHREE_H__798A9124_C906_446C_822D_322B5AB6C4C4__INCLUDED_) ================================================ FILE: host/TabOpenGL.cpp ================================================ // TabOpenGL.cpp : implementation file // #include "stdafx.h" #include "TargetDlg.h" #include "TabOpenGL.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CTabOpenGL dialog CTabOpenGL::CTabOpenGL(CWnd* pParent /*=NULL*/) : CDialog(CTabOpenGL::IDD, pParent) { //{{AFX_DATA_INIT(CTabOpenGL) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT } void CTabOpenGL::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); CTargetDlg *cTarget = ((CTargetDlg *)(this->GetParent()->GetParent())); DDX_Check(pDX, IDC_HOOKOPENGL, cTarget->m_HookOpenGL); DDX_Check(pDX, IDC_FORCEHOOKOPENGL, cTarget->m_ForceHookOpenGL); DDX_Text(pDX, IDC_OPENGLLIB, cTarget->m_OpenGLLib); } BOOL CTabOpenGL::OnInitDialog() { AfxEnableControlContainer(); CDialog::OnInitDialog(); return TRUE; } BEGIN_MESSAGE_MAP(CTabOpenGL, CDialog) //{{AFX_MSG_MAP(CTabOpenGL) // NOTE: the ClassWizard will add message map macros here //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CTabOpenGL message handlers ================================================ FILE: host/TabOpenGL.h ================================================ #if !defined(AFX_TABOPENGL_H__798A9124_C906_446C_822D_322B5AB6C4C4__INCLUDED_) #define AFX_TABOPENGL_H__798A9124_C906_446C_822D_322B5AB6C4C4__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 // TabOpenGL.h : header file // #include "resource.h" ///////////////////////////////////////////////////////////////////////////// // CTabOpenGL dialog class CTabOpenGL : public CDialog { // Construction public: CTabOpenGL(CWnd* pParent = NULL); // standard constructor BOOL OnInitDialog(); // Dialog Data //{{AFX_DATA(CTabOpenGL) enum { IDD = IDD_TAB_SYSLIBS }; // NOTE: the ClassWizard will add data members here //}}AFX_DATA // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CTabOpenGL) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Implementation protected: // Generated message map functions //{{AFX_MSG(CTabOpenGL) // NOTE: the ClassWizard will add member functions here //}}AFX_MSG DECLARE_MESSAGE_MAP() }; //{{AFX_INSERT_LOCATION}} // Microsoft Visual C++ will insert additional declarations immediately before the previous line. #endif ================================================ FILE: host/TabProgram.cpp ================================================ // TabProgram.cpp : implementation file // #include "stdafx.h" #include "shlwapi.h" #include "TargetDlg.h" #include "TabProgram.h" #include "dxwndhost.h" #include "specialedit.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif // return TRUE if the path is a valid existing directory, FALSE otherwise static BOOL dirExists(char *path) { DWORD ftyp = GetFileAttributesA(path); if (ftyp == INVALID_FILE_ATTRIBUTES) return FALSE; //something is wrong with your path! if (ftyp & FILE_ATTRIBUTE_DIRECTORY) return TRUE; // this is a directory! return false; // this is not a directory! } // Restores the window highlighted by HighlightFoundWindow static long RefreshWindow(HWND hwndWindowToBeRefreshed) { long lRet = 0; InvalidateRect (hwndWindowToBeRefreshed, NULL, TRUE); UpdateWindow (hwndWindowToBeRefreshed); RedrawWindow (hwndWindowToBeRefreshed, NULL, NULL, RDW_FRAME | RDW_INVALIDATE | RDW_UPDATENOW | RDW_ALLCHILDREN); return lRet; } // Performs a highlighting of a found window. static long HighlightFoundWindow (HWND hwndFoundWindow) { HDC hWindowDC = NULL; // The DC of the found window. HGDIOBJ hPrevPen = NULL; // Handle of the existing pen in the DC of the found window. HGDIOBJ hPrevBrush = NULL; // Handle of the existing brush in the DC of the found window. RECT rect; // Rectangle area of the found window. long lRet = 0; static HPEN g_hRectanglePen = NULL; // Get the screen coordinates of the rectangle of the found window. GetWindowRect (hwndFoundWindow, &rect); // Get the window DC of the found window. hWindowDC = GetWindowDC (hwndFoundWindow); if (g_hRectanglePen == NULL){ g_hRectanglePen = CreatePen(PS_SOLID, 5, RGB(255,0,0)); } if (hWindowDC){ // Select our created pen into the DC and backup the previous pen. hPrevPen = SelectObject (hWindowDC, g_hRectanglePen); // Select a transparent brush into the DC and backup the previous brush. hPrevBrush = SelectObject (hWindowDC, GetStockObject(HOLLOW_BRUSH)); //hPrevBrush = SelectObject (hWindowDC, GetStockObject(LTGRAY_BRUSH)); // Draw a rectangle in the DC covering the entire window area of the found window. Rectangle (hWindowDC, 0, 0, rect.right - rect.left, rect.bottom - rect.top); // Reinsert the previous pen and brush into the found window's DC. SelectObject (hWindowDC, hPrevPen); SelectObject (hWindowDC, hPrevBrush); // Finally release the DC. ReleaseDC (hwndFoundWindow, hWindowDC); } return lRet; } ///////////////////////////////////////////////////////////////////////////// // CTabProgram dialog CTabProgram::CTabProgram(CWnd* pParent /*=NULL*/) : CDialog(CTabProgram::IDD, pParent) { //{{AFX_DATA_INIT(CTabProgram) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT } void CTabProgram::DoDataExchange(CDataExchange* pDX) { CString sPosX, sPosY; CDialog::DoDataExchange(pDX); CTargetDlg *cTarget = ((CTargetDlg *)(this->GetParent()->GetParent())); sPosX.Format("%d", cTarget->m_PosX); sPosY.Format("%d", cTarget->m_PosY); DDX_Radio(pDX, IDC_COORDINATES, cTarget->m_Coordinates); DDX_Control(pDX, IDC_FILE, cTarget->m_File); DDX_Control(pDX, IDC_LAUNCH, cTarget->m_Launch); DDX_Text(pDX, IDC_FILE, cTarget->m_FilePath); DDX_Text(pDX, IDC_LAUNCH, cTarget->m_LaunchPath); DDX_Text(pDX, IDC_TITLE, cTarget->m_Title); DDX_Check(pDX, IDC_NEEDADMINCAPS, cTarget->m_NeedAdminCaps); DDX_Check(pDX, IDC_UNNOTIFY, cTarget->m_UnNotify); DDX_Check(pDX, IDC_WINDOWIZE, cTarget->m_Windowize); DDX_Check(pDX, IDC_CONFIRMONCLOSE, cTarget->m_ConfirmOnClose); DDX_Check(pDX, IDC_TERMINATEONCLOSE, cTarget->m_TerminateOnClose); DDX_Check(pDX, IDC_FULLSCREENONLY, cTarget->m_FullScreenOnly); DDX_Check(pDX, IDC_SHOWHINTS, cTarget->m_ShowHints); DDX_Check(pDX, IDC_BACKGROUNDPRIORITY, cTarget->m_BackgroundPriority); DDX_Check(pDX, IDC_KEEPASPECTRATIO, cTarget->m_KeepAspectRatio); DDX_Check(pDX, IDC_NOBANNER, cTarget->m_NoBanner); DDX_Check(pDX, IDC_HIDEDESKTOP, cTarget->m_HideDesktop); DDX_CBIndex(pDX, IDC_MONITOR_ID, cTarget->m_MonitorId); DDX_Text(pDX, IDC_POSX, sPosX); DDX_Text(pDX, IDC_POSY, sPosY); DDX_Text(pDX, IDC_SIZX, cTarget->m_SizX); DDX_Text(pDX, IDC_SIZY, cTarget->m_SizY); cTarget->m_PosX = atoi(sPosX); cTarget->m_PosY = atoi(sPosY); } BEGIN_MESSAGE_MAP(CTabProgram, CDialog) //{{AFX_MSG_MAP(CTabProgram) // NOTE: the ClassWizard will add message map macros here ON_BN_CLICKED(IDC_OPEN, OnOpen) ON_BN_CLICKED(IDC_OPENLAUNCH, OnOpenLaunch) ON_WM_DROPFILES() //}}AFX_MSG_MAP ON_STN_CLICKED(IDC_REGISTRY, &CTabProgram::OnStnClickedRegistry) ON_STN_CLICKED(IDC_NOTES, &CTabProgram::OnStnClickedNotes) ON_STN_CLICKED(IDC_XYPICK, &CTabProgram::OnStnClickedXYPick) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CTabProgram message handlers extern void GetFolderFromPath(char *); BOOL IsWinXP() { OSVERSIONINFO osvi; ZeroMemory(&osvi, sizeof(OSVERSIONINFO)); osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&osvi); return osvi.dwMajorVersion == 5; } void CTabProgram::OnOpen() { char path[MAX_PATH]; CTargetDlg *cTarget = ((CTargetDlg *)(this->GetParent()->GetParent())); cTarget->m_File.GetWindowText(path, MAX_PATH); GetPrivateProfileString("window", "exepath", NULL, path, MAX_PATH, gInitPath); if(!dirExists(path)) strcpy(path, ""); // XP fix: path must end with '\.' if(IsWinXP()) if((strlen(path) > 2) && (path[strlen(path)-1] == '\\')) strcat(path, "."); while(TRUE){ int ret; CFileDialog dlg( TRUE, "*.*", path, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "Program (*.exe)|*.exe|All Files (*.*)|*.*||", this); ret = dlg.DoModal(); //char debug[512]; //sprintf(debug, "ret=%x path=%s", ret, path); //MessageBox(debug, "debug", MB_OK); if(ret==IDOK){ cTarget->m_File.SetWindowText(dlg.GetPathName()); if(GetPrivateProfileInt("window", "updatepaths", 1, gInitPath)){ strcpy(path, dlg.GetPathName()); GetFolderFromPath(path); WritePrivateProfileString("window", "exepath", path, gInitPath); } break; } if(ret==IDCANCEL) break; //else strcpy(path,""); } } void CTabProgram::OnOpenLaunch() { char path[MAX_PATH]; CTargetDlg *cTarget = ((CTargetDlg *)(this->GetParent()->GetParent())); cTarget->m_File.GetWindowText(path, MAX_PATH); GetPrivateProfileString("window", "exepath", NULL, path, MAX_PATH, gInitPath); if(!dirExists(path)) strcpy(path, ""); // XP fix: path must end with '\.' if(IsWinXP()) if((strlen(path) > 2) && (path[strlen(path)-1] == '\\')) strcat(path, "."); while(TRUE){ int ret; CFileDialog dlg( TRUE, "*.*", path, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "Program (*.exe)|*.exe|All Files (*.*)|*.*||", this); ret = dlg.DoModal(); //char debug[512]; //sprintf(debug, "ret=%x path=%s", ret, path); //MessageBox(debug, "debug", MB_OK); if(ret==IDOK){ cTarget->m_Launch.SetWindowText(dlg.GetPathName()); if(GetPrivateProfileInt("window", "updatepaths", 1, gInitPath)){ strcpy(path, dlg.GetPathName()); GetFolderFromPath(path); WritePrivateProfileString("window", "exepath", path, gInitPath); } break; } if(ret==IDCANCEL) break; //else strcpy(path,""); } } void CTabProgram::OnDropFiles(HDROP dropInfo) { CString sFile; DWORD nBuffer = 0; // Get number of files UINT nFilesDropped = DragQueryFile(dropInfo, 0xFFFFFFFF, NULL, 0); if(nFilesDropped > 0){ nBuffer = DragQueryFile(dropInfo, 0, NULL, 0); DragQueryFile(dropInfo, 0, sFile.GetBuffer(nBuffer+1), nBuffer+1); //CTargetDlg *pDlg = (CTargetDlg *)this->GetParent()->GetParent(); //pDlg->m_FilePath = sFile; CDragEdit *pEditFile = (CDragEdit *)this->GetDlgItem(IDC_FILE); pEditFile->SetWindowTextA(sFile.GetBuffer()); //MessageBox(sFile.GetBuffer(), "debug", 0); sFile.ReleaseBuffer(); } DragFinish(dropInfo); } #include #include #include void _tmain(int argc, TCHAR *argv[]) { WIN32_FIND_DATA FindFileData; HANDLE hFind; if( argc != 2 ) { _tprintf(TEXT("Usage: %s [target_file]\n"), argv[0]); return; } _tprintf (TEXT("Target file is %s\n"), argv[1]); hFind = FindFirstFile(argv[1], &FindFileData); if (hFind == INVALID_HANDLE_VALUE) { printf ("FindFirstFile failed (%d)\n", GetLastError()); return; } else { _tprintf (TEXT("The first file found is %s\n"), FindFileData.cFileName); FindClose(hFind); } } BOOL CTabProgram::OnInitDialog() { HINSTANCE Hinst; HICON Icon, PrevIcon; CStatic *IconBox; IFormat *m_pRelIntegerFormat = new(RelIntegerFormat); DragAcceptFiles(); CDragEdit *pEditFile; pEditFile = (CDragEdit *)this->GetDlgItem(IDC_FILE); pEditFile->DragAcceptFiles(); pEditFile = (CDragEdit *)this->GetDlgItem(IDC_LAUNCH); pEditFile->DragAcceptFiles(); //m_File.DragAcceptFiles(); //m_Launch.DragAcceptFiles(); CDialog::OnInitDialog(); CTargetDlg *cTarget = ((CTargetDlg *)(this->GetParent()->GetParent())); IconBox=(CStatic *)this->GetDlgItem(IDC_STATIC_ICON); Hinst = ::LoadLibrary(cTarget->m_FilePath); if(Hinst){ Icon = ::ExtractIcon(Hinst, cTarget->m_FilePath, 0); if(Icon){ PrevIcon = IconBox->SetIcon(Icon); if (IconBox->GetIcon() == NULL) IconBox->SetIcon(::LoadIcon(NULL, IDI_ERROR)); } else{ WIN32_FIND_DATA FindFileData; HANDLE hFind; char SearchPath[MAX_PATH]; strcpy(SearchPath, cTarget->m_FilePath); PathRemoveFileSpec(SearchPath); strcat(SearchPath, "\\*.ico"); //MessageBox(SearchPath, "debug", 0); hFind = FindFirstFile(SearchPath, &FindFileData); if ((hFind != INVALID_HANDLE_VALUE) && (hFind != (HANDLE)ERROR_FILE_NOT_FOUND)){ strcpy(SearchPath, cTarget->m_FilePath); PathRemoveFileSpec(SearchPath); strcat(SearchPath, "\\"); strcat(SearchPath, FindFileData.cFileName); //MessageBox(SearchPath, "debug", 0); Icon = ::ExtractIcon(NULL, SearchPath, 0); PrevIcon = IconBox->SetIcon(Icon); if (IconBox->GetIcon() == NULL) IconBox->SetIcon(::LoadIcon(NULL, IDI_ERROR)); FindClose(hFind); } ::FreeLibrary(Hinst); } if(PrevIcon) ::DestroyIcon(PrevIcon); } IconBox=(CStatic *)this->GetDlgItem(IDC_NOTES); if(cTarget->m_Notes.IsEmpty()) IconBox->SetBitmap(NULL); IconBox=(CStatic *)this->GetDlgItem(IDC_REGISTRY); if(cTarget->m_Registry.IsEmpty()) IconBox->SetBitmap(NULL); CComboBox *cScreens = (CComboBox *)this->GetDlgItem(IDC_MONITOR_ID); cScreens->ResetContent(); int iMonitorCount = ::GetSystemMetrics(SM_CMONITORS); cScreens->AddString("def."); for (int i=1; i<=iMonitorCount; i++){ char sMonitorId[16]; sprintf(sMonitorId, "%d", i); cScreens->AddString(sMonitorId); } cScreens->SetCurSel(cTarget->m_MonitorId); m_EditPosX.SubclassDlgItem(IDC_POSX, this); m_EditPosY.SubclassDlgItem(IDC_POSY, this); m_EditPosX.SetFormatter(m_pRelIntegerFormat); m_EditPosY.SetFormatter(m_pRelIntegerFormat); return TRUE; } void CTabProgram::OnStnClickedRegistry() { // TODO: Add your control notification handler code here CDXTabCtrl *cTab = (CDXTabCtrl *)this->GetParent(); cTab->SwitchToTab(11); } void CTabProgram::OnStnClickedNotes() { // TODO: Add your control notification handler code here CDXTabCtrl *cTab = (CDXTabCtrl *)this->GetParent(); cTab->SwitchToTab(12); } void CTabProgram::OnStnClickedXYPick() { //return; HCURSOR hPrevCursor; HCURSOR hViewFinder; BOOL Looping = TRUE; BOOL Picked = FALSE; BOOL bMoved = FALSE; HWND TargethWnd; HWND LastHighlightedhWnd = (HWND)-1; RECT TargetRect = {0, 0, 0, 0}; POINT UpLeft = {0, 0}; char sMessage[81]; hViewFinder=LoadCursor(NULL, IDC_CROSS); //hViewFinder=LoadCursor(NULL, IDC_SIZE); hPrevCursor=SetCursor(hViewFinder); ShowCursor(TRUE); this->SetCapture(); //MessageBox("Pick window coordinates", "DxWnd", 0); while(TRUE){ POINT pt; MSG Msg; GetMessage(&Msg, NULL, 0, 0); //if(GetAsyncKeyState(VK_LBUTTON) & 0x8000){ if(Msg.message == WM_LBUTTONUP){ if(bMoved){ ::GetClientRect(TargethWnd, &TargetRect); ::ClientToScreen(TargethWnd, &UpLeft); OffsetRect(&TargetRect, UpLeft.x, UpLeft.y); Picked = TRUE; } ReleaseCapture(); if(LastHighlightedhWnd != (HWND)-1) RefreshWindow(LastHighlightedhWnd); break; } if(Msg.message == WM_LBUTTONDOWN) break; if(Msg.message == WM_MOUSEMOVE) { bMoved = TRUE; pt = Msg.pt; TargethWnd=::WindowFromPoint(pt); if(LastHighlightedhWnd != TargethWnd){ HighlightFoundWindow (TargethWnd); if(LastHighlightedhWnd != (HWND)-1) RefreshWindow(LastHighlightedhWnd); LastHighlightedhWnd = TargethWnd; } } } if(!Picked) return; sprintf(sMessage, "Pick rect=(%d,%d)-(%d,%d) ?", TargetRect.left, TargetRect.top, TargetRect.right, TargetRect.bottom); if(MessageBox(sMessage, "DxWnd", MB_OKCANCEL)!=IDCANCEL ){ this->SetDlgItemInt(IDC_POSX, TargetRect.left, TRUE); this->SetDlgItemInt(IDC_POSY, TargetRect.top, TRUE); this->SetDlgItemInt(IDC_SIZX, TargetRect.right - TargetRect.left, TRUE); this->SetDlgItemInt(IDC_SIZY, TargetRect.bottom - TargetRect.top, TRUE); } } ================================================ FILE: host/TabProgram.h ================================================ #if !defined(AFX_TABPROGRAM_H__4F1DD92C_C67D_48AE_A73F_02D7EDA0580E__INCLUDED_) #define AFX_TABPROGRAM_H__4F1DD92C_C67D_48AE_A73F_02D7EDA0580E__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 // TabProgram.h : header file // #include "resource.h" #include "afxwin.h" #include "specialedit.h" ///////////////////////////////////////////////////////////////////////////// // CTabProgram dialog class CTabProgram : public CDialog { // Construction public: CTabProgram(CWnd* pParent = NULL); // standard constructor void OnOpen(void); void OnOpenLaunch(void); // Dialog Data //{{AFX_DATA(CTabProgram) enum { IDD = IDD_TAB_PROGRAM }; // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CTabProgram) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Implementation protected: // Generated message map functions //{{AFX_MSG(CTabProgram) // NOTE: the ClassWizard will add member functions here //}}AFX_MSG DECLARE_MESSAGE_MAP() public: BOOL OnInitDialog(); protected: CSpecialEdit m_EditPosX; CSpecialEdit m_EditPosY; afx_msg void OnDropFiles(HDROP hDropInfo); public: afx_msg void OnStnClickedRegistry(); afx_msg void OnStnClickedNotes(); afx_msg void OnStnClickedXYPick(); }; //{{AFX_INSERT_LOCATION}} // Microsoft Visual C++ will insert additional declarations immediately before the previous line. #endif ================================================ FILE: host/TabRegistry.cpp ================================================ // TabRegistry.cpp : implementation file // #include "stdafx.h" #include "TargetDlg.h" #include "TabRegistry.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CTabRegistry dialog CTabRegistry::CTabRegistry(CWnd* pParent /*=NULL*/) // : CTargetDlg(pParent) : CDialog(CTabRegistry::IDD, pParent) { //{{AFX_DATA_INIT(CTabRegistry) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT } void CTabRegistry::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); CTargetDlg *cTarget = ((CTargetDlg *)(this->GetParent()->GetParent())); // Registry management DDX_Check(pDX, IDC_EMULATEREGISTRY, cTarget->m_EmulateRegistry); DDX_Check(pDX, IDC_OVERRIDEREGISTRY, cTarget->m_OverrideRegistry); DDX_Check(pDX, IDC_WOW64REGISTRY, cTarget->m_Wow64Registry); DDX_Check(pDX, IDC_WOW32REGISTRY, cTarget->m_Wow32Registry); DDX_Text(pDX, IDC_REGISTRY, cTarget->m_Registry); } BEGIN_MESSAGE_MAP(CTabRegistry, CDialog) //{{AFX_MSG_MAP(CTabRegistry) // NOTE: the ClassWizard will add message map macros here //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CTabRegistry message handlers ================================================ FILE: host/TabRegistry.h ================================================ #if !defined(AFX_TABNOTES_H__798A9124_C906_446C_822D_322B5AB6F1F1__INCLUDED_) #define AFX_TABNOTES_H__798A9124_C906_446C_822D_322B5AB6F1F1__INCLUDED_ #include "resource.h" #include "TargetDlg.h" ///////////////////////////////////////////////////////////////////////////// // CTabRegistry dialog //class CTabRegistry : public CTargetDlg class CTabRegistry : public CDialog { // Construction public: CTabRegistry(CWnd* pParent = NULL); // standard constructor // Dialog Data //{{AFX_DATA(CTabDirectX) enum { IDD = IDD_TAB_REGISTRY }; // NOTE: the ClassWizard will add data members here //}}AFX_DATA // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CTabDirectX) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Implementation protected: //BOOL OnInitDialog(); // Generated message map functions //{{AFX_MSG(CTabDirectX) // NOTE: the ClassWizard will add member functions here //}}AFX_MSG DECLARE_MESSAGE_MAP() }; //{{AFX_INSERT_LOCATION}} // Microsoft Visual C++ will insert additional declarations immediately before the previous line. #endif // !defined(AFX_TABTHREE_H__798A9124_C906_446C_822D_322B5AB6C4C4__INCLUDED_) ================================================ FILE: host/TabSysLibs.cpp ================================================ // TabGDI.cpp : implementation file // #include "stdafx.h" #include "TargetDlg.h" #include "TabSysLibs.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CTabLogs dialog CTabSysLibs::CTabSysLibs(CWnd* pParent /*=NULL*/) : CDialog(CTabSysLibs::IDD, pParent) { //{{AFX_DATA_INIT(CTabSysLibs) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT } void CTabSysLibs::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); CTargetDlg *cTarget = ((CTargetDlg *)(this->GetParent()->GetParent())); // GDI DDX_Check(pDX, IDC_CLIENTREMAPPING, cTarget->m_ClientRemapping); DDX_Radio(pDX, IDC_GDINONE, cTarget->m_DCEmulationMode); DDX_Check(pDX, IDC_FIXTEXTOUT, cTarget->m_FixTextOut); DDX_Check(pDX, IDC_QUALITYFONTS, cTarget->m_QualityFonts); DDX_Check(pDX, IDC_NOFILLRECT, cTarget->m_NoFillRect); DDX_Check(pDX, IDC_FIXCLIPPERAREA, cTarget->m_FixClipperArea); DDX_Check(pDX, IDC_SHAREDDCHYBRID, cTarget->m_SharedDCHybrid); DDX_Check(pDX, IDC_SYNCPALETTE, cTarget->m_SyncPalette); DDX_Check(pDX, IDC_NOWINERRORS, cTarget->m_NoWinErrors); // OpenGL DDX_Check(pDX, IDC_HOOKOPENGL, cTarget->m_HookOpenGL); // duplicated DDX_Check(pDX, IDC_FORCEHOOKOPENGL, cTarget->m_ForceHookOpenGL); DDX_Check(pDX, IDC_FIXPIXELZOOM, cTarget->m_FixPixelZoom); DDX_Check(pDX, IDC_FIXBINDTEXTURE, cTarget->m_FixBindTexture); DDX_Check(pDX, IDC_HOOKGLUT32, cTarget->m_HookGlut32); DDX_Text(pDX, IDC_OPENGLLIB, cTarget->m_OpenGLLib); // MCI DDX_Check(pDX, IDC_REMAPMCI, cTarget->m_RemapMCI); DDX_Check(pDX, IDC_NOMOVIES, cTarget->m_NoMovies); DDX_Check(pDX, IDC_STRETCHMOVIES, cTarget->m_StretchMovies); DDX_Check(pDX, IDC_FIXMOVIESCOLOR, cTarget->m_FixMoviesColor); DDX_Check(pDX, IDC_BYPASSMCI, cTarget->m_BypassMCI); // SmackW32 DDX_Check(pDX, IDC_HOOKSMACKW32, cTarget->m_HookSmackW32); DDX_Check(pDX, IDC_FIXSMACKLOOP, cTarget->m_FixSmackLoop); } BEGIN_MESSAGE_MAP(CTabSysLibs, CDialog) //{{AFX_MSG_MAP(CTabLogs) // NOTE: the ClassWizard will add message map macros here //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CTabLogs message handlers ================================================ FILE: host/TabSysLibs.h ================================================ #if !defined(AFX_TABGDI_H__7E062B52_3B6E_44C4_B58E_AAD73592C8E3__INCLUDED_) #define AFX_TABGDI_H__7E062B52_3B6E_44C4_B58E_AAD73592C8E3__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 // TabLogs.h : header file // #include "resource.h" ///////////////////////////////////////////////////////////////////////////// // CTabLogs dialog class CTabSysLibs : public CDialog { // Construction public: CTabSysLibs(CWnd* pParent = NULL); // standard constructor // Dialog Data //{{AFX_DATA(CTabLogs) enum { IDD = IDD_TAB_SYSLIBS }; // NOTE: the ClassWizard will add data members here //}}AFX_DATA // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CTabLogs) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Implementation protected: // Generated message map functions //{{AFX_MSG(CTabLogs) // NOTE: the ClassWizard will add member functions here //}}AFX_MSG DECLARE_MESSAGE_MAP() }; //{{AFX_INSERT_LOCATION}} // Microsoft Visual C++ will insert additional declarations immediately before the previous line. #endif ================================================ FILE: host/TabTiming.cpp ================================================ // TabDirectX.cpp : implementation file // #include "stdafx.h" #include "TargetDlg.h" #include "TabTiming.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CTabTiming dialog CTabTiming::CTabTiming(CWnd* pParent /*=NULL*/) : CDialog(CTabTiming::IDD, pParent) { //{{AFX_DATA_INIT(CTabTiming) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT } void CTabTiming::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); CTargetDlg *cTarget = ((CTargetDlg *)(this->GetParent()->GetParent())); DDX_Check(pDX, IDC_LIMITFPS, cTarget->m_LimitFPS); DDX_Check(pDX, IDC_SKIPFPS, cTarget->m_SkipFPS); DDX_Check(pDX, IDC_SHOWFPS, cTarget->m_ShowFPS); DDX_Check(pDX, IDC_SHOWFPSOVERLAY, cTarget->m_ShowFPSOverlay); DDX_Check(pDX, IDC_SHOWTIMESTRETCH, cTarget->m_ShowTimeStretch); DDX_Check(pDX, IDC_TIMESTRETCH, cTarget->m_TimeStretch); DDX_Check(pDX, IDC_INTERCEPTRDTSC, cTarget->m_InterceptRDTSC); DDX_Check(pDX, IDC_STRETCHTIMERS, cTarget->m_StretchTimers); DDX_Check(pDX, IDC_NORMALIZEPERFCOUNT, cTarget->m_NormalizePerfCount); DDX_Check(pDX, IDC_CPUSLOWDOWN, cTarget->m_CPUSlowDown); DDX_Check(pDX, IDC_CPUMAXUSAGE, cTarget->m_CPUMaxUsage); DDX_Check(pDX, IDC_QUARTERBLT, cTarget->m_QuarterBlt); DDX_Check(pDX, IDC_FINETIMING, cTarget->m_FineTiming); DDX_Check(pDX, IDC_TIMEFREEZE, cTarget->m_EnableTimeFreeze); DDX_Text(pDX, IDC_MAXFPS, cTarget->m_MaxFPS); DDX_Text(pDX, IDC_SLOWRATIO, cTarget->m_SlowRatio); DDX_LBIndex(pDX, IDC_LISTTS, cTarget->m_InitTS); //{{AFX_DATA_MAP(CTabTiming) // NOTE: the ClassWizard will add DDX and DDV calls here //}}AFX_DATA_MAP } BOOL CTabTiming::OnInitDialog() { AfxEnableControlContainer(); CListBox *List; CDialog::OnInitDialog(); int i; extern char *GetTSCaption(int); List=(CListBox *)this->GetDlgItem(IDC_LISTTS); List->ResetContent(); for(i=-8; i<=8; i++) List->AddString(GetTSCaption(i)); CTargetDlg *cTarget = ((CTargetDlg *)(this->GetParent()->GetParent())); List->SetCurSel(cTarget->m_InitTS); return TRUE; } BEGIN_MESSAGE_MAP(CTabTiming, CDialog) //{{AFX_MSG_MAP(CTabTiming) // NOTE: the ClassWizard will add message map macros here //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CTabTiming message handlers ================================================ FILE: host/TabTiming.h ================================================ #if !defined(AFX_TABTIMING_H__798A9124_C906_446C_822D_322B5AB6C4C4__INCLUDED_) #define AFX_TABTIMING_H__798A9124_C906_446C_822D_322B5AB6C4C4__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 // TabTiming.h : header file // #include "resource.h" ///////////////////////////////////////////////////////////////////////////// // CTabDirectX dialog class CTabTiming : public CDialog { // Construction public: CTabTiming(CWnd* pParent = NULL); // standard constructor BOOL OnInitDialog(); // Dialog Data //{{AFX_DATA(CTabDirectX) enum { IDD = IDD_TAB_TIMING }; // NOTE: the ClassWizard will add data members here //}}AFX_DATA // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CTabDirectX) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Implementation protected: // Generated message map functions //{{AFX_MSG(CTabDirectX) // NOTE: the ClassWizard will add member functions here //}}AFX_MSG DECLARE_MESSAGE_MAP() }; //{{AFX_INSERT_LOCATION}} // Microsoft Visual C++ will insert additional declarations immediately before the previous line. #endif // !defined(AFX_TABTHREE_H__798A9124_C906_446C_822D_322B5AB6C4C4__INCLUDED_) ================================================ FILE: host/TabWindow.cpp ================================================ // TabOpenGL.cpp : implementation file // #include "stdafx.h" #include "TargetDlg.h" #include "TabWindow.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CTabWindow dialog CTabWindow::CTabWindow(CWnd* pParent /*=NULL*/) : CDialog(CTabWindow::IDD, pParent) { //{{AFX_DATA_INIT(CTabWindow) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT } void CTabWindow::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); CTargetDlg *cTarget = ((CTargetDlg *)(this->GetParent()->GetParent())); // window style DDX_Radio(pDX, IDC_DEFAULTSTYLE, cTarget->m_WindowStyle); DDX_Check(pDX, IDC_LOCKWINSTYLE, cTarget->m_LockWinStyle); // window management //DDX_Check(pDX, IDC_FIXWINFRAME, cTarget->m_FixWinFrame); DDX_Check(pDX, IDC_PREVENTMAXIMIZE, cTarget->m_PreventMaximize); DDX_Check(pDX, IDC_FIXPARENTWIN, cTarget->m_FixParentWin); //DDX_Check(pDX, IDC_MODALSTYLE, cTarget->m_ModalStyle); DDX_Check(pDX, IDC_FORCEWINRESIZE, cTarget->m_ForceWinResize); DDX_Check(pDX, IDC_HIDEMULTIMONITOR, cTarget->m_HideMultiMonitor); DDX_Check(pDX, IDC_RECOVERSCREENMODE, cTarget->m_RecoverScreenMode); DDX_Check(pDX, IDC_REFRESHONRESIZE, cTarget->m_RefreshOnResize); DDX_Check(pDX, IDC_HIDETASKBAR, cTarget->m_HideTaskbar); DDX_Check(pDX, IDC_UNLOCKZORDER, cTarget->m_UnlockZOrder); DDX_Check(pDX, IDC_NODESTROYWINDOW, cTarget->m_NoDestroyWindow); DDX_Check(pDX, IDC_ACTIVATEAPP, cTarget->m_ActivateApp); DDX_Check(pDX, IDC_SUPPRESSIME, cTarget->m_SuppressIME); DDX_Radio(pDX, IDC_FREEMOVE, cTarget->m_WinMovementType); // color management DDX_Radio(pDX, IDC_COLORCURRENT, cTarget->m_InitColorDepth); DDX_Check(pDX, IDC_DISABLEGAMMARAMP, cTarget->m_DisableGammaRamp); //DDX_Check(pDX, IDC_FORCE16BPP, cTarget->m_Force16BPP); DDX_Check(pDX, IDC_LOCKSYSCOLORS, cTarget->m_LockSysColors); DDX_Check(pDX, IDC_LOCKRESERVEDPALETTE, cTarget->m_LockReservedPalette); // screen resolution management DDX_Check(pDX, IDC_LIMITSCREENRES, cTarget->m_LimitScreenRes); DDX_LBIndex(pDX, IDC_LISTRES, cTarget->m_MaxScreenRes); DDX_Radio(pDX, IDC_SUPPORTSVGA, cTarget->m_ResTypes); DDX_Check(pDX, IDC_INITIALRES, cTarget->m_InitialRes); DDX_Check(pDX, IDC_MAXIMUMRES, cTarget->m_MaximumRes); DDX_Text(pDX, IDC_INITW, cTarget->m_InitResW); DDX_Text(pDX, IDC_INITH, cTarget->m_InitResH); } static char *Resolutions[]={ "unlimited", "320x200", "400x300", "640x480", "800x600", "1024x768", "1280x960", "1280x1024", "" // terminator }; char UnlimitedString[20+1]; BOOL CTabWindow::OnInitDialog() { AfxEnableControlContainer(); CListBox *List; CTargetDlg *cTarget = ((CTargetDlg *)(this->GetParent()->GetParent())); int i; List=(CListBox *)this->GetDlgItem(IDC_LISTRES); List->ResetContent(); if(LoadString(AfxGetResourceHandle(), DXW_STRING_UNLIMITED, UnlimitedString, sizeof(UnlimitedString))){ Resolutions[0]=UnlimitedString; } for(i=0; strlen(Resolutions[i]); i++) List->AddString(Resolutions[i]); List->SetCurSel(cTarget->m_MaxScreenRes); CDialog::OnInitDialog(); return TRUE; } BEGIN_MESSAGE_MAP(CTabWindow, CDialog) //{{AFX_MSG_MAP(CTabWindow) // NOTE: the ClassWizard will add message map macros here //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CTabWindow message handlers ================================================ FILE: host/TabWindow.h ================================================ #if !defined(AFX_TABWINDOW_H__798A9124_C906_446C_822D_322B5AB6C4C4__INCLUDED_) #define AFX_TABWINDOW_H__798A9124_C906_446C_822D_322B5AB6C4C4__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 // TabTiming.h : header file // #include "resource.h" ///////////////////////////////////////////////////////////////////////////// // CTabWindow dialog class CTabWindow : public CDialog { // Construction public: CTabWindow(CWnd* pParent = NULL); // standard constructor BOOL OnInitDialog(); // Dialog Data //{{AFX_DATA(CTabWindow) enum { IDD = IDD_TAB_OUTPUT }; // NOTE: the ClassWizard will add data members here //}}AFX_DATA // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CTabWindow) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Implementation protected: // Generated message map functions //{{AFX_MSG(CTabWindow) // NOTE: the ClassWizard will add member functions here //}}AFX_MSG DECLARE_MESSAGE_MAP() }; //{{AFX_INSERT_LOCATION}} // Microsoft Visual C++ will insert additional declarations immediately before the previous line. #endif ================================================ FILE: host/TargetDlg.cpp ================================================ // TargetDlg.cpp : Implementation // #include "stdafx.h" #include "shlwapi.h" #include "dxwndhost.h" #include "TargetDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif extern BOOL KillProcByName(char *, BOOL, BOOL); extern BOOL gbDebug; ///////////////////////////////////////////////////////////////////////////// // CTargetDlg Dialog CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/) : CDialog(CTargetDlg::IDD, pParent) { //{{AFX_DATA_INIT(CTargetDlg) m_DXVersion = 0; m_MonitorId = 0; // default: the first one, of course .... m_MaxDdrawInterface = 6; m_SlowRatio = 2; m_Coordinates = 0; m_InitColorDepth = 0; // default: current color depth m_DxEmulationMode = 3; // default: emulated m_DxFilterMode = 0; // default: ddraw filtering m_DCEmulationMode = 0; // default: no emulation m_MouseVisibility = 0; m_MouseClipper = 0; m_OffendingMessages = 0; m_TextureHandling = 0; m_HookDI = FALSE; m_HookDI8 = FALSE; m_EmulateRelMouse = FALSE; // ?? m_SkipDevTypeHID = FALSE; m_ModifyMouse = TRUE; // default true !! m_VirtualJoystick = FALSE; m_Unacquire = FALSE; //m_LogEnabled = FALSE; m_OutDebug = FALSE; m_RegistryOp = FALSE; m_CursorTrace = FALSE; m_OutWinMessages = FALSE; m_OutDWTrace = FALSE; m_OutOGLTrace = FALSE; m_OutHexTrace = FALSE; m_OutWGTrace = FALSE; m_OutD3DTrace = FALSE; m_OutDDRAWTrace = FALSE; m_OutDebugString = FALSE; //m_EraseLogFile = FALSE; m_AddTimeStamp = FALSE; m_AddRelativeTime = FALSE; m_ImportTable = FALSE; m_TraceHooks = FALSE; m_HandleExceptions = FALSE; m_VirtualHeap = FALSE; m_SuppressIME = FALSE; m_SuppressD3DExt = FALSE; m_Enum16bitModes = FALSE; m_TrimTextureFormats = FALSE; m_D3D8Back16 = FALSE; m_NoHALDevice = FALSE; //m_RawFormat = FALSE; m_TextureFileFormat = 0; m_SetCompatibility = TRUE; // default true !! m_AEROBoost = TRUE; // default true !! m_DiabloTweak = FALSE; m_HookDirectSound = FALSE; m_HookWinG32 = FALSE; m_HookSmackW32 = FALSE; m_FixSmackLoop = FALSE; m_BlockPriorityClass = FALSE; m_EASportsHack = FALSE; m_LegacyAlloc = FALSE; m_DisableMaxWinMode = FALSE; m_DisableDisableAltTab = FALSE; m_NoImagehlp = FALSE; m_ReplacePrivOps = FALSE; m_ForcesHEL = FALSE; m_MinimalCaps = FALSE; m_SetZBufferBitDepths = FALSE; m_ForcesSwapEffect = FALSE; m_ColorFix = FALSE; m_FixGlobalUnlock = FALSE; m_FixFreeLibrary = FALSE; m_LoadLibraryErr = FALSE; m_FixAdjustWinRect = FALSE; m_NoPixelFormat = FALSE; m_NoAlphaChannel = FALSE; m_FixRefCounter = TRUE; // default true !! m_ReturnNullRef = FALSE; m_NoD3DReset = FALSE; m_HideDesktop = FALSE; m_HideTaskbar = FALSE; m_ActivateApp = FALSE; m_UnlockZOrder = FALSE; m_NoDestroyWindow = FALSE; m_LockSysColors = FALSE; m_LockReservedPalette = FALSE; m_LimitScreenRes = FALSE; m_SingleProcAffinity = FALSE; m_UseLastCore = FALSE; m_LimitResources = FALSE; m_CDROMDriveType = FALSE; m_HideCDROMEmpty = FALSE; m_HookGOGLibs = FALSE; m_BypassGOGLibs = FALSE; m_FontBypass = FALSE; m_BufferedIOFix = FALSE; m_ZBufferClean = FALSE; m_ZBuffer0Clean = FALSE; m_DynamicZClean = FALSE; m_ZBufferHardClean = FALSE; m_ZBufferAlways = FALSE; m_HotPatchAlways = FALSE; m_FreezeInjectedSon = FALSE; m_StressResources = FALSE; m_DisableFogging = FALSE; m_Power2Width = FALSE; m_ClearTarget = FALSE; m_FixPitch = FALSE, m_NoPower2Fix = FALSE; m_NoPerfCounter = FALSE; m_UnNotify = FALSE; m_Windowize = TRUE; // default true !! m_HotPatch = FALSE; m_HookDLLs = TRUE; // default true !! m_AnsiWide = FALSE; m_HookNoRun = FALSE; m_CopyNoShims = FALSE; m_HookNoUpdate = FALSE; m_SequencedIAT = FALSE; m_TerminateOnClose = FALSE; m_ConfirmOnClose = FALSE; m_HookEnabled = TRUE; // default true !! m_NeedAdminCaps = FALSE; m_EmulateRegistry = FALSE; m_OverrideRegistry = FALSE; m_Wow64Registry = FALSE; m_Wow32Registry = FALSE; m_FullScreenOnly = FALSE; m_ShowHints = FALSE; m_BackgroundPriority = FALSE; m_PeekAllMessages = FALSE; m_NoWinPosChanges = FALSE; m_MessagePump = FALSE; m_ClipMenu = FALSE; m_NoBanner = FALSE; m_FilePath = _T(""); m_Module = _T(""); m_SlowDown = FALSE; m_BlitFromBackBuffer = FALSE; m_NoFlipEmulation = FALSE; m_OffscreenZBuffer = FALSE; m_LockColorDepth = FALSE; m_DisableGammaRamp = FALSE; m_AutoRefresh = FALSE; m_IndependentRefresh = FALSE; m_TextureFormat = FALSE; //m_FixWinFrame = FALSE; m_VideoToSystemMem = FALSE; m_FixTextOut = FALSE; m_SharedDC = FALSE; m_HookGlide = FALSE; m_RemapMCI = TRUE; m_NoMovies = FALSE; m_FixMoviesColor = FALSE; m_StretchMovies = FALSE; m_BypassMCI = FALSE; m_SuppressRelease = FALSE; m_KeepCursorWithin = FALSE; m_KeepCursorFixed = FALSE; m_UseRGB565 = TRUE; // seems the default for 16bit video mode m_SuppressDXErrors = FALSE; m_FlipEmulation = TRUE; // better set true default, since this mode is more compatible m_MarkBlit = FALSE; m_MarkLock = FALSE; m_MarkWinG32 = FALSE; m_MarkGDI32 = FALSE; m_DumpDIBSection = FALSE; m_DumpDevContext = FALSE; m_NoSysMemPrimary = FALSE; m_NoSysMemBackBuf = FALSE; m_NoBlt = FALSE; m_BilinearBlt = FALSE; m_FastBlt = FALSE; m_GDIColorConv = FALSE; m_PreventMaximize = FALSE; m_ClientRemapping = TRUE; // default true !! m_LockWinStyle = FALSE; m_FixParentWin = FALSE; //m_ModalStyle = FALSE; m_KeepAspectRatio = FALSE; m_ForceWinResize = FALSE; m_HideMultiMonitor = FALSE; m_FixD3DFrame = FALSE; m_NoWindowMove = FALSE; m_HookChildWin = FALSE; m_HookDlgWin = FALSE; m_MessageProc = FALSE; m_FixMouseHook = FALSE; m_FixNCHITTEST = FALSE; m_RecoverScreenMode = FALSE; m_RefreshOnResize = FALSE; m_Init8BPP = FALSE; m_Init16BPP = FALSE; m_BackBufAttach = FALSE; m_ClearTextureFourCC = FALSE; m_NoDDExclusiveMode = FALSE; m_CreateDesktop = FALSE; m_AllowSysmemOn3DDev = FALSE; m_VSyncMode = 0; m_VSyncImpl = 0; m_WaitMode = 0; m_HandleAltF4 = FALSE; m_LimitFPS = FALSE; m_SkipFPS = FALSE; m_ShowFPS = FALSE; m_ShowFPSOverlay = FALSE; m_ShowTimeStretch = FALSE; m_TimeStretch = FALSE; m_StretchTimers = FALSE; m_NormalizePerfCount = FALSE; m_CPUSlowDown = FALSE; m_CPUMaxUsage = FALSE; m_QuarterBlt = FALSE; m_FineTiming = FALSE; m_EnableTimeFreeze = FALSE; m_ReleaseMouse = FALSE; m_EnableHotKeys = TRUE; // default true !! m_InterceptRDTSC = FALSE; m_HookOpenGL = FALSE; m_ForceHookOpenGL = FALSE; m_FixPixelZoom = FALSE; m_FixBindTexture = FALSE; m_HookGlut32 = FALSE; m_FakeVersion = FALSE; m_FullRectBlt = FALSE; m_CenterToWin = FALSE; m_Deinterlace = FALSE; m_LimitDdraw = FALSE; m_SuppressOverlay = FALSE; m_SurfaceWarn = FALSE; m_CapMask = FALSE; m_NoWindowHooks = FALSE; m_NoDDRAWBlt = FALSE; m_NoDDRAWFlip = FALSE; m_NoGDIBlt = FALSE; m_NoFillRect = FALSE; m_FixClipperArea = FALSE; // ?? m_SharedDCHybrid = FALSE; // ?? m_SyncPalette = FALSE; m_NoWinErrors = FALSE; m_PretendVisible = FALSE; m_WinInsulation = FALSE; m_QualityFonts = FALSE; m_AnalyticMode = FALSE; m_NoPaletteUpdate = FALSE; m_WireFrame = FALSE; m_NoTextures = FALSE; m_BlackWhite = FALSE; m_AssertDialog = FALSE; m_InitialRes = FALSE; m_MaximumRes = FALSE; m_ClipperMode = 0; m_PosX = 50; m_PosY = 50; m_SizX = 800; m_SizY = 600; m_InitResW = 800; m_InitResH = 600; m_MaxFPS = 0; m_InitTS = 8; m_SwapEffect = 0; m_InjectionMode = 0; m_WinMovementType = 1; // "Floating" position mode, better than "Free"! m_ScanLine = 0; //}}AFX_DATA_INIT } BOOL CTargetDlg::OnInitDialog() { int i=0; AfxEnableControlContainer(); CDialog::OnInitDialog(); char sCaption[48+1]; LoadString(AfxGetResourceHandle(), DXW_TAB_MAIN, sCaption, sizeof(sCaption)); m_tabdxTabCtrl.InsertItem(i++, _T(sCaption)); LoadString(AfxGetResourceHandle(), DXW_TAB_HOOK, sCaption, sizeof(sCaption)); m_tabdxTabCtrl.InsertItem(i++, _T(sCaption)); LoadString(AfxGetResourceHandle(), DXW_TAB_VIDEO, sCaption, sizeof(sCaption)); m_tabdxTabCtrl.InsertItem(i++, _T(sCaption)); LoadString(AfxGetResourceHandle(), DXW_TAB_INPUT, sCaption, sizeof(sCaption)); m_tabdxTabCtrl.InsertItem(i++, _T(sCaption)); LoadString(AfxGetResourceHandle(), DXW_TAB_DIRECTX, sCaption, sizeof(sCaption)); m_tabdxTabCtrl.InsertItem(i++, _T(sCaption)); LoadString(AfxGetResourceHandle(), DXW_TAB_DIRECTX2, sCaption, sizeof(sCaption)); m_tabdxTabCtrl.InsertItem(i++, _T(sCaption)); LoadString(AfxGetResourceHandle(), DXW_TAB_D3D, sCaption, sizeof(sCaption)); m_tabdxTabCtrl.InsertItem(i++, _T(sCaption)); LoadString(AfxGetResourceHandle(), DXW_TAB_TIMING, sCaption, sizeof(sCaption)); m_tabdxTabCtrl.InsertItem(i++, _T(sCaption)); LoadString(AfxGetResourceHandle(), DXW_TAB_LOGS, sCaption, sizeof(sCaption)); m_tabdxTabCtrl.InsertItem(i++, _T(sCaption)); LoadString(AfxGetResourceHandle(), DXW_TAB_LIBS, sCaption, sizeof(sCaption)); m_tabdxTabCtrl.InsertItem(i++, _T(sCaption)); LoadString(AfxGetResourceHandle(), DXW_TAB_COMPAT, sCaption, sizeof(sCaption)); m_tabdxTabCtrl.InsertItem(i++, _T(sCaption)); LoadString(AfxGetResourceHandle(), DXW_TAB_REGISTRY, sCaption, sizeof(sCaption)); m_tabdxTabCtrl.InsertItem(i++, _T(sCaption)); LoadString(AfxGetResourceHandle(), DXW_TAB_NOTES, sCaption, sizeof(sCaption)); m_tabdxTabCtrl.InsertItem(i++, _T(sCaption)); LoadString(AfxGetResourceHandle(), DXW_TAB_DEBUG, sCaption, sizeof(sCaption)); if (gbDebug) m_tabdxTabCtrl.InsertItem(i++, _T(sCaption)); m_tabdxTabCtrl.Init(); return TRUE; } void CTargetDlg::OnOK() { m_tabdxTabCtrl.OnOK(); CDialog::OnOK(); } void CTargetDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CTargetDlg) DDX_Control(pDX, IDC_TABPANEL, m_tabdxTabCtrl); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CTargetDlg, CDialog) //{{AFX_MSG_MAP(CTargetDlg) //}}AFX_MSG_MAP ON_BN_CLICKED(IDTRY, &CTargetDlg::OnBnClickedTry) ON_BN_CLICKED(IDKILL, &CTargetDlg::OnBnClickedKill) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CTargetDlg Message Handler void CTargetDlg::OnBnClickedTry() { #if 0 NMHDR nmh; nmh.code = ID_PRUN; nmh.idFrom = NULL; nmh.hwndFrom = NULL; this->GetParent()->SendMessage(WM_NOTIFY, 0, (LPARAM)&nmh); #else char path[MAX_PATH+1]; char fullpath[MAX_PATH+1]; int iHookStatus; TARGETMAP RestrictedMaps[2]; extern void SetTargetFromDlg(TARGETMAP *, CTargetDlg *); extern BOOL CheckStatus(void); STARTUPINFO sinfo; PROCESS_INFORMATION pinfo; char sMsg[81]; TARGETMAP TargetMap; PRIVATEMAP PrivateMap; ThreadInfo_Type ThreadInfo; static BOOL IsLocked = FALSE; if(IsLocked) return; if (CheckStatus()) return; // don't try when status is active IsLocked = TRUE; m_tabdxTabCtrl.OnOK(); SetTargetFromDlg(&RestrictedMaps[0], this); memset(&RestrictedMaps[1], 0, sizeof(TARGETMAP)); strcpy_s(path, sizeof(path), m_FilePath.GetBuffer()); PathRemoveFileSpec(path); SetTarget(NULL, RestrictedMaps); iHookStatus=GetHookStatus(NULL); if(iHookStatus == DXW_IDLE) StartHook(); switch(m_InjectionMode){ case 1: extern DWORD WINAPI StartDebug(void *); strcpy(TargetMap.path, m_FilePath); strcpy(PrivateMap.launchpath, m_LaunchPath); ThreadInfo.TM=&TargetMap; ThreadInfo.PM=&PrivateMap; CloseHandle(CreateThread( NULL, 0, StartDebug, &ThreadInfo, 0, NULL)); break; case 2: extern void InjectSuspended(char *, char *); strcpy(TargetMap.path, m_FilePath); strcpy(PrivateMap.launchpath, m_LaunchPath); ThreadInfo.TM=&TargetMap; ThreadInfo.PM=&PrivateMap; InjectSuspended((strlen(PrivateMap.launchpath)>0) ? PrivateMap.launchpath: TargetMap.path, path); break; case 0: default: ZeroMemory(&sinfo, sizeof(sinfo)); sinfo.cb = sizeof(sinfo); strncpy(fullpath, m_LaunchPath.IsEmpty() ? m_FilePath.GetBuffer() : m_LaunchPath.GetBuffer(), MAX_PATH); if(!CreateProcess(NULL, fullpath, 0, 0, false, CREATE_DEFAULT_ERROR_MODE, NULL, path, &sinfo, &pinfo)){ sprintf(sMsg, "CreateProcess ERROR %d", GetLastError()); MessageBox(sMsg, "Error", MB_ICONEXCLAMATION); } CloseHandle(pinfo.hProcess); // no longer needed, avoid handle leakage CloseHandle(pinfo.hThread); // no longer needed, avoid handle leakage break; } // wait & recover Sleep(5000); //SetTarget(CDxwndhostView::TargetMaps); if(iHookStatus == DXW_IDLE) EndHook(); IsLocked = FALSE; #endif } void CTargetDlg::OnBnClickedKill() { char FilePath[MAX_PATH+1]; char *lpProcName, *lpNext; HRESULT res; strncpy(FilePath, m_FilePath.GetBuffer(), MAX_PATH); lpProcName=FilePath; while (lpNext=strchr(lpProcName,'\\')) lpProcName=lpNext+1; if(!KillProcByName(lpProcName, FALSE, FALSE)){ wchar_t *wcstring = new wchar_t[48+1]; mbstowcs_s(NULL, wcstring, 48, lpProcName, _TRUNCATE); res=MessageBoxLangArg(DXW_STRING_KILLTASK, DXW_STRING_WARNING, MB_YESNO | MB_ICONQUESTION, wcstring); if(res!=IDYES) return; KillProcByName(lpProcName, TRUE, FALSE); } else{ MessageBoxLang(DXW_STRING_NOKILLTASK, DXW_STRING_INFO, MB_ICONEXCLAMATION); } } ================================================ FILE: host/TargetDlg.h ================================================ #if !defined(AFX_TARGETDLG_H__683E529D_7282_484C_A403_367A6A90CC57__INCLUDED_) #define AFX_TARGETDLG_H__683E529D_7282_484C_A403_367A6A90CC57__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 // TargetDlg.h : Header file // #include "dxTabCtrl.h" #include "SpecialEdit.h" #include "CDragEdit.h" ///////////////////////////////////////////////////////////////////////////// // CTargetDlg Dialog class CTargetDlg : public CDialog { // Constructor public: CTargetDlg(CWnd* pParent = NULL); // Standard constructor void OnOK(); // Dialog Data //{{AFX_DATA(CTargetDlg) enum { IDD = IDD_TARGET }; CDXTabCtrl m_tabdxTabCtrl; CDragEdit m_File; CDragEdit m_Launch; int m_DXVersion; int m_Coordinates; int m_InitColorDepth; int m_DxEmulationMode; int m_DxFilterMode; int m_DCEmulationMode; int m_MouseVisibility; int m_MouseClipper; int m_OffendingMessages; int m_TextureHandling; int m_SonProcessMode; int m_MaxDdrawInterface; int m_SlowRatio; int m_LogMode; int m_MonitorId; int m_WinMovementType; int m_WindowStyle; BOOL m_HookDI; BOOL m_HookDI8; BOOL m_EmulateRelMouse; BOOL m_SkipDevTypeHID; BOOL m_SuppressDIErrors; BOOL m_SharedKeyboard; BOOL m_ModifyMouse; BOOL m_VirtualJoystick; BOOL m_Unacquire; BOOL m_OutDebug; BOOL m_CursorTrace; // BOOL m_LogEnabled; // BOOL m_EraseLogFile; BOOL m_AddTimeStamp; BOOL m_AddRelativeTime; BOOL m_OutDebugString; BOOL m_OutWinMessages; BOOL m_OutDWTrace; BOOL m_OutOGLTrace; BOOL m_OutHexTrace; BOOL m_OutWGTrace; BOOL m_OutD3DTrace; BOOL m_OutDDRAWTrace; BOOL m_AssertDialog; BOOL m_ImportTable; BOOL m_RegistryOp; BOOL m_TraceHooks; BOOL m_UnNotify; BOOL m_Windowize; BOOL m_HotPatch; BOOL m_HookDLLs; BOOL m_AnsiWide; BOOL m_HookNoRun; BOOL m_CopyNoShims; BOOL m_HookNoUpdate; BOOL m_SequencedIAT; BOOL m_TerminateOnClose; BOOL m_ConfirmOnClose; BOOL m_EmulateRegistry; BOOL m_OverrideRegistry; BOOL m_Wow64Registry; BOOL m_Wow32Registry; BOOL m_FullScreenOnly; BOOL m_ShowHints; BOOL m_BackgroundPriority; BOOL m_NeedAdminCaps; BOOL m_PeekAllMessages; BOOL m_NoWinPosChanges; BOOL m_MessagePump; BOOL m_ClipMenu; BOOL m_NoBanner; int m_InjectionMode; BOOL m_HookEnabled; BOOL m_ReplacePrivOps; CString m_FilePath; CString m_LaunchPath; CString m_StartFolder; CString m_Module; CString m_Title; CString m_OpenGLLib; CString m_Notes; CString m_Registry; BOOL m_SlowDown; BOOL m_BlitFromBackBuffer; BOOL m_NoFlipEmulation; BOOL m_OffscreenZBuffer; BOOL m_LockColorDepth; BOOL m_DisableGammaRamp; BOOL m_AutoRefresh; BOOL m_IndependentRefresh; BOOL m_TextureFormat; //BOOL m_FixWinFrame; BOOL m_VideoToSystemMem; BOOL m_FixTextOut; BOOL m_SharedDC; BOOL m_HookGlide; BOOL m_RemapMCI; BOOL m_NoMovies; BOOL m_FixMoviesColor; BOOL m_StretchMovies; BOOL m_BypassMCI; BOOL m_SuppressRelease; BOOL m_KeepCursorWithin; BOOL m_KeepCursorFixed; BOOL m_UseRGB565; BOOL m_SuppressDXErrors; BOOL m_FlipEmulation; BOOL m_MarkBlit; BOOL m_MarkLock; BOOL m_MarkWinG32; BOOL m_MarkGDI32; BOOL m_DumpDIBSection; BOOL m_DumpDevContext; BOOL m_NoSysMemPrimary; BOOL m_NoSysMemBackBuf; BOOL m_NoBlt; BOOL m_BilinearBlt; BOOL m_FastBlt; BOOL m_GDIColorConv; BOOL m_PreventMaximize; BOOL m_ClientRemapping; BOOL m_LockWinStyle; BOOL m_FixParentWin; //BOOL m_ModalStyle; BOOL m_KeepAspectRatio; BOOL m_ForceWinResize; BOOL m_HideMultiMonitor; BOOL m_FixD3DFrame; BOOL m_NoWindowMove; BOOL m_HookChildWin; BOOL m_HookDlgWin; BOOL m_MessageProc; BOOL m_FixMouseHook; BOOL m_FixNCHITTEST; BOOL m_RecoverScreenMode; BOOL m_RefreshOnResize; BOOL m_Init8BPP; BOOL m_Init16BPP; BOOL m_BackBufAttach; BOOL m_ClearTextureFourCC; BOOL m_NoDDExclusiveMode; BOOL m_CreateDesktop; BOOL m_AllowSysmemOn3DDev; BOOL m_HandleAltF4; BOOL m_HandleExceptions; BOOL m_VirtualHeap; BOOL m_SkipFPS; BOOL m_LimitFPS; BOOL m_ShowFPS; BOOL m_ShowFPSOverlay; BOOL m_ShowTimeStretch; BOOL m_TimeStretch; BOOL m_StretchTimers; BOOL m_NormalizePerfCount; BOOL m_CPUSlowDown; BOOL m_CPUMaxUsage; BOOL m_QuarterBlt; BOOL m_FineTiming; BOOL m_EnableTimeFreeze; BOOL m_ReleaseMouse; BOOL m_EnableHotKeys; BOOL m_InterceptRDTSC; BOOL m_HookOpenGL; BOOL m_ForceHookOpenGL; BOOL m_FixPixelZoom; BOOL m_FixBindTexture; BOOL m_HookGlut32; BOOL m_FakeVersion; BOOL m_FullRectBlt; BOOL m_CenterToWin; BOOL m_Deinterlace; BOOL m_LimitDdraw; BOOL m_SuppressOverlay; BOOL m_SurfaceWarn; BOOL m_CapMask; BOOL m_NoWindowHooks; BOOL m_NoDDRAWBlt; BOOL m_NoDDRAWFlip; BOOL m_NoGDIBlt; BOOL m_NoFillRect; BOOL m_FixClipperArea; BOOL m_SharedDCHybrid; BOOL m_SyncPalette; BOOL m_NoWinErrors; BOOL m_PretendVisible; BOOL m_WinInsulation; BOOL m_QualityFonts; BOOL m_AnalyticMode; BOOL m_NoPaletteUpdate; BOOL m_LimitResources; BOOL m_CDROMDriveType; BOOL m_HideCDROMEmpty; BOOL m_HookGOGLibs; BOOL m_BypassGOGLibs; BOOL m_FontBypass; BOOL m_BufferedIOFix; BOOL m_ZBufferClean; BOOL m_ZBuffer0Clean; BOOL m_DynamicZClean; BOOL m_ZBufferHardClean; BOOL m_ZBufferAlways; BOOL m_HotPatchAlways; BOOL m_FreezeInjectedSon; BOOL m_StressResources; BOOL m_NoPower2Fix; BOOL m_NoPerfCounter; BOOL m_DisableFogging; BOOL m_ClearTarget; BOOL m_FixPitch; BOOL m_Power2Width; BOOL m_SuppressIME; BOOL m_SetCompatibility; BOOL m_AEROBoost; BOOL m_DiabloTweak; BOOL m_HookDirectSound; BOOL m_HookWinG32; BOOL m_HookSmackW32; BOOL m_FixSmackLoop; BOOL m_BlockPriorityClass; BOOL m_EASportsHack; BOOL m_LegacyAlloc; BOOL m_DisableMaxWinMode; BOOL m_DisableDisableAltTab; BOOL m_NoImagehlp; BOOL m_ForcesHEL; BOOL m_NoHALDevice; BOOL m_MinimalCaps; BOOL m_SetZBufferBitDepths; BOOL m_ForcesSwapEffect; BOOL m_ColorFix; BOOL m_FixGlobalUnlock; BOOL m_FixFreeLibrary; BOOL m_LoadLibraryErr; BOOL m_FixAdjustWinRect; BOOL m_NoPixelFormat; BOOL m_NoAlphaChannel; BOOL m_FixRefCounter; BOOL m_ReturnNullRef; BOOL m_NoD3DReset; BOOL m_HideDesktop; BOOL m_HideTaskbar; BOOL m_ActivateApp; BOOL m_UnlockZOrder; BOOL m_NoDestroyWindow; BOOL m_LockSysColors; BOOL m_LockReservedPalette; BOOL m_SingleProcAffinity; BOOL m_UseLastCore; BOOL m_WireFrame; BOOL m_NoTextures; BOOL m_BlackWhite; BOOL m_SuppressD3DExt; BOOL m_Enum16bitModes; BOOL m_TrimTextureFormats; BOOL m_D3D8Back16; //BOOL m_RawFormat; BOOL m_LimitScreenRes; BOOL m_InitialRes; BOOL m_MaximumRes; int m_VSyncMode; int m_VSyncImpl; int m_WaitMode; int m_PosX; int m_PosY; int m_SizX; int m_SizY; int m_InitResW; int m_InitResH; int m_MaxFPS; int m_InitTS; int m_FakeVersionId; int m_MaxScreenRes; int m_ResTypes; int m_SwapEffect; int m_ClipperMode; int m_ScanLine; int m_TextureFileFormat; //}}AFX_DATA // Override // ClassWizard Generates an overriding virtual function. //{{AFX_VIRTUAL(CTargetDlg) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV Support //}}AFX_VIRTUAL // Implementation protected: // Generated message map functions //{{AFX_MSG(CTargetDlg) afx_msg void OnOpen(); afx_msg void OnOpenLaunch(); //}}AFX_MSG DECLARE_MESSAGE_MAP() public: virtual BOOL OnInitDialog(); afx_msg void OnBnClickedTry(); afx_msg void OnBnClickedKill(); }; //{{AFX_INSERT_LOCATION}} // Microsoft Visual C++ Will insert additional declarations immediately before the previous line. #endif ================================================ FILE: host/TimeSliderDialog.h ================================================ #pragma once // CTimeSlider dialog class CTimeSliderDialog : public CDialog { DECLARE_DYNAMIC(CTimeSliderDialog) public: CTimeSliderDialog(CWnd* pParent = NULL); // standard constructor virtual ~CTimeSliderDialog(); //~CTimeSliderDialog(); // Dialog Data enum { IDD = IDD_TIMESLIDER }; //CSliderCtrl m_TimeSlider; int i_TimeSlider; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support DECLARE_MESSAGE_MAP() public: afx_msg void OnTimer(UINT_PTR nIDEvent); public: virtual BOOL OnInitDialog(); protected: virtual void OnOK(); private: char IdleString[20+1]; }; ================================================ FILE: host/TimeSliderDlg.cpp ================================================ // TimeSliderDialog.cpp : implementation file // #include "stdafx.h" #include "dxwndhost.h" #include "TimeSliderDialog.h" // CTimeSliderDialog dialog IMPLEMENT_DYNAMIC(CTimeSliderDialog, CDialog) CTimeSliderDialog::CTimeSliderDialog(CWnd* pParent /*=NULL*/) : CDialog(CTimeSliderDialog::IDD, pParent) { LoadString(AfxGetResourceHandle(), DXW_STRING_IDLE, IdleString, sizeof(IdleString)); } CTimeSliderDialog::~CTimeSliderDialog() { MessageBoxEx(0, "Time Slider destructor", "Warning", MB_OK | MB_ICONEXCLAMATION, NULL); //CTimeSliderDialog::OnOK(); // kill timer.... } void CTimeSliderDialog::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CTargetDlg) DDX_Slider(pDX, IDC_TIMESLIDER, i_TimeSlider); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CTimeSliderDialog, CDialog) ON_WM_TIMER() END_MESSAGE_MAP() #define IDTimeSiderTIMER 2 // CTimeSliderDialog message handlers void CTimeSliderDialog::OnTimer(UINT_PTR nIDEvent) { CSliderCtrl *Slider; CStatic *Text; char sMsg[81]; static int iLastPos=-1; extern char *GetTSCaption(int); Slider=(CSliderCtrl *)this->GetDlgItem(IDC_TIMESLIDER); Text=(CStatic *)this->GetDlgItem(IDC_TIMESPEED); CDialog::OnTimer(nIDEvent); i_TimeSlider=Slider->GetPos(); if(GetHookStatus(NULL)!=DXW_RUNNING) { Slider->SetPos(0); Text->SetWindowTextA(IdleString); return; } if(i_TimeSlider==iLastPos){ // no change, check for keyboard input changes i_TimeSlider=GetHookInfo()->TimeShift; if(i_TimeSlider != iLastPos) Slider->SetPos(i_TimeSlider); } else { // slider position changed, set the new value if (i_TimeSlider < -8) i_TimeSlider=-8; if (i_TimeSlider > 8) i_TimeSlider= 8; GetHookInfo()->TimeShift=i_TimeSlider; } iLastPos = i_TimeSlider; sprintf(sMsg, "Time speed %s", GetTSCaption(i_TimeSlider)); Text->SetWindowTextA(sMsg); } BOOL CTimeSliderDialog::OnInitDialog() { CSliderCtrl *Slider; CDialog::OnInitDialog(); Slider=(CSliderCtrl *)this->GetDlgItem(IDC_TIMESLIDER); Slider->SetRange(-8, +8, 0); Slider->SetTicFreq(1); Slider->SetPos(GetHookInfo()->TimeShift); SetTimer(IDTimeSiderTIMER, 1000, NULL); // TODO: Add extra initialization here return TRUE; // return TRUE unless you set the focus to a control } void CTimeSliderDialog::OnOK() { // TODO: Add your specialized code here and/or call the base class // stop timer // MessageBoxEx(0, "Stopping Time Slider dialog", "Warning", MB_OK | MB_ICONEXCLAMATION, NULL); KillTimer(IDTimeSiderTIMER); GetHookInfo()->TimeShift=i_TimeSlider; CDialog::OnOK(); } ================================================ FILE: host/TlHelp32.h ================================================ /*****************************************************************************\ * * * tlhelp32.h - WIN32 tool help functions, types, and definitions * * * * Version 1.0 * * * * NOTE: windows.h/winbase.h must be #included first * * * * Copyright (c) Microsoft Corp. All rights reserved. * * * \*****************************************************************************/ #ifndef _INC_TOOLHELP32 #define _INC_TOOLHELP32 #if _MSC_VER > 1000 #pragma once #endif #ifdef __cplusplus extern "C" { /* Assume C declarations for C++ */ #endif /* __cplusplus */ #define MAX_MODULE_NAME32 255 /****** Shapshot function **********************************************/ HANDLE WINAPI CreateToolhelp32Snapshot( DWORD dwFlags, DWORD th32ProcessID ); // // The th32ProcessID argument is only used if TH32CS_SNAPHEAPLIST or // TH32CS_SNAPMODULE is specified. th32ProcessID == 0 means the current // process. // // NOTE that all of the snapshots are global except for the heap and module // lists which are process specific. To enumerate the heap or module // state for all WIN32 processes call with TH32CS_SNAPALL and the // current process. Then for each process in the TH32CS_SNAPPROCESS // list that isn't the current process, do a call with just // TH32CS_SNAPHEAPLIST and/or TH32CS_SNAPMODULE. // // dwFlags // #define TH32CS_SNAPHEAPLIST 0x00000001 #define TH32CS_SNAPPROCESS 0x00000002 #define TH32CS_SNAPTHREAD 0x00000004 #define TH32CS_SNAPMODULE 0x00000008 #define TH32CS_SNAPMODULE32 0x00000010 #define TH32CS_SNAPALL (TH32CS_SNAPHEAPLIST | TH32CS_SNAPPROCESS | TH32CS_SNAPTHREAD | TH32CS_SNAPMODULE) #define TH32CS_INHERIT 0x80000000 // // Use CloseHandle to destroy the snapshot // /****** heap walking ***************************************************/ typedef struct tagHEAPLIST32 { SIZE_T dwSize; DWORD th32ProcessID; // owning process ULONG_PTR th32HeapID; // heap (in owning process's context!) DWORD dwFlags; } HEAPLIST32; typedef HEAPLIST32 * PHEAPLIST32; typedef HEAPLIST32 * LPHEAPLIST32; // // dwFlags // #define HF32_DEFAULT 1 // process's default heap #define HF32_SHARED 2 // is shared heap BOOL WINAPI Heap32ListFirst( HANDLE hSnapshot, LPHEAPLIST32 lphl ); BOOL WINAPI Heap32ListNext( HANDLE hSnapshot, LPHEAPLIST32 lphl ); typedef struct tagHEAPENTRY32 { SIZE_T dwSize; HANDLE hHandle; // Handle of this heap block ULONG_PTR dwAddress; // Linear address of start of block SIZE_T dwBlockSize; // Size of block in bytes DWORD dwFlags; DWORD dwLockCount; DWORD dwResvd; DWORD th32ProcessID; // owning process ULONG_PTR th32HeapID; // heap block is in } HEAPENTRY32; typedef HEAPENTRY32 * PHEAPENTRY32; typedef HEAPENTRY32 * LPHEAPENTRY32; // // dwFlags // #define LF32_FIXED 0x00000001 #define LF32_FREE 0x00000002 #define LF32_MOVEABLE 0x00000004 BOOL WINAPI Heap32First( LPHEAPENTRY32 lphe, DWORD th32ProcessID, ULONG_PTR th32HeapID ); BOOL WINAPI Heap32Next( LPHEAPENTRY32 lphe ); BOOL WINAPI Toolhelp32ReadProcessMemory( DWORD th32ProcessID, LPCVOID lpBaseAddress, LPVOID lpBuffer, SIZE_T cbRead, SIZE_T *lpNumberOfBytesRead ); /***** Process walking *************************************************/ typedef struct tagPROCESSENTRY32W { DWORD dwSize; DWORD cntUsage; DWORD th32ProcessID; // this process ULONG_PTR th32DefaultHeapID; DWORD th32ModuleID; // associated exe DWORD cntThreads; DWORD th32ParentProcessID; // this process's parent process LONG pcPriClassBase; // Base priority of process's threads DWORD dwFlags; WCHAR szExeFile[MAX_PATH]; // Path } PROCESSENTRY32W; typedef PROCESSENTRY32W * PPROCESSENTRY32W; typedef PROCESSENTRY32W * LPPROCESSENTRY32W; BOOL WINAPI Process32FirstW( HANDLE hSnapshot, LPPROCESSENTRY32W lppe ); BOOL WINAPI Process32NextW( HANDLE hSnapshot, LPPROCESSENTRY32W lppe ); typedef struct tagPROCESSENTRY32 { DWORD dwSize; DWORD cntUsage; DWORD th32ProcessID; // this process ULONG_PTR th32DefaultHeapID; DWORD th32ModuleID; // associated exe DWORD cntThreads; DWORD th32ParentProcessID; // this process's parent process LONG pcPriClassBase; // Base priority of process's threads DWORD dwFlags; CHAR szExeFile[MAX_PATH]; // Path } PROCESSENTRY32; typedef PROCESSENTRY32 * PPROCESSENTRY32; typedef PROCESSENTRY32 * LPPROCESSENTRY32; BOOL WINAPI Process32First( HANDLE hSnapshot, LPPROCESSENTRY32 lppe ); BOOL WINAPI Process32Next( HANDLE hSnapshot, LPPROCESSENTRY32 lppe ); #ifdef UNICODE #define Process32First Process32FirstW #define Process32Next Process32NextW #define PROCESSENTRY32 PROCESSENTRY32W #define PPROCESSENTRY32 PPROCESSENTRY32W #define LPPROCESSENTRY32 LPPROCESSENTRY32W #endif // !UNICODE /***** Thread walking **************************************************/ typedef struct tagTHREADENTRY32 { DWORD dwSize; DWORD cntUsage; DWORD th32ThreadID; // this thread DWORD th32OwnerProcessID; // Process this thread is associated with LONG tpBasePri; LONG tpDeltaPri; DWORD dwFlags; } THREADENTRY32; typedef THREADENTRY32 * PTHREADENTRY32; typedef THREADENTRY32 * LPTHREADENTRY32; BOOL WINAPI Thread32First( HANDLE hSnapshot, LPTHREADENTRY32 lpte ); BOOL WINAPI Thread32Next( HANDLE hSnapshot, LPTHREADENTRY32 lpte ); /***** Module walking *************************************************/ typedef struct tagMODULEENTRY32W { DWORD dwSize; DWORD th32ModuleID; // This module DWORD th32ProcessID; // owning process DWORD GlblcntUsage; // Global usage count on the module DWORD ProccntUsage; // Module usage count in th32ProcessID's context BYTE * modBaseAddr; // Base address of module in th32ProcessID's context DWORD modBaseSize; // Size in bytes of module starting at modBaseAddr HMODULE hModule; // The hModule of this module in th32ProcessID's context WCHAR szModule[MAX_MODULE_NAME32 + 1]; WCHAR szExePath[MAX_PATH]; } MODULEENTRY32W; typedef MODULEENTRY32W * PMODULEENTRY32W; typedef MODULEENTRY32W * LPMODULEENTRY32W; BOOL WINAPI Module32FirstW( HANDLE hSnapshot, LPMODULEENTRY32W lpme ); BOOL WINAPI Module32NextW( HANDLE hSnapshot, LPMODULEENTRY32W lpme ); typedef struct tagMODULEENTRY32 { DWORD dwSize; DWORD th32ModuleID; // This module DWORD th32ProcessID; // owning process DWORD GlblcntUsage; // Global usage count on the module DWORD ProccntUsage; // Module usage count in th32ProcessID's context BYTE * modBaseAddr; // Base address of module in th32ProcessID's context DWORD modBaseSize; // Size in bytes of module starting at modBaseAddr HMODULE hModule; // The hModule of this module in th32ProcessID's context char szModule[MAX_MODULE_NAME32 + 1]; char szExePath[MAX_PATH]; } MODULEENTRY32; typedef MODULEENTRY32 * PMODULEENTRY32; typedef MODULEENTRY32 * LPMODULEENTRY32; // // NOTE CAREFULLY that the modBaseAddr and hModule fields are valid ONLY // in th32ProcessID's process context. // BOOL WINAPI Module32First( HANDLE hSnapshot, LPMODULEENTRY32 lpme ); BOOL WINAPI Module32Next( HANDLE hSnapshot, LPMODULEENTRY32 lpme ); #ifdef UNICODE #define Module32First Module32FirstW #define Module32Next Module32NextW #define MODULEENTRY32 MODULEENTRY32W #define PMODULEENTRY32 PMODULEENTRY32W #define LPMODULEENTRY32 LPMODULEENTRY32W #endif // !UNICODE #ifdef __cplusplus } #endif #endif // _INC_TOOLHELP32 ================================================ FILE: host/VJoyDialog.cpp ================================================ // VJoyDialog.cpp : implementation file // #include "stdafx.h" #include "dxwndhost.h" #include "VJoyDialog.h" #include #define XSPAN 128 #define YSPAN 128 /* // calculates the closest m_Slider value int pos, delta, lastdelta; lastdelta=200; for(pos=-10; pos<=10; pos++){ int s; s = (int)(100 * pow(TICKMULTIPLIER, (float)pos)); delta = abs(s - this->m_VJoySensivity); if(delta > lastdelta) break; lastdelta = delta; } this->m_Slider = pos-1; */ int CVJoyDialog::GetSliderPos(int sensivity) { int pos; int delta, lastdelta; lastdelta = 400; // initial value big enough ... for(pos=-20; pos<=20; pos++){ delta = abs(Multipliers[20+pos] - sensivity); if(delta > lastdelta) break; lastdelta = delta; } return pos-1; } int CVJoyDialog::SetSensivity(int slider) { if(slider < -20) slider = -20; if(slider > 20) slider = 20; return Multipliers[20+slider]; } void CVJoyDialog::InitSensivity(void) { int Multiplier; int pos; for(Multiplier = 100, pos=-1; pos>=-20; pos--) Multipliers[20+pos] = Multiplier = (Multiplier * 100) / 105; for(Multiplier = 100, pos= 1; pos<= 20; pos++) Multipliers[20+pos] = Multiplier = (Multiplier * 105) / 100; Multipliers[20] = 100; } // CVJoyDialog dialog IMPLEMENT_DYNAMIC(CVJoyDialog, CDialog) CVJoyDialog::CVJoyDialog(CWnd* pParent /*=NULL*/) : CDialog(CVJoyDialog::IDD, pParent) { //MessageBoxEx(0, "VJoy constructor", "Warning", MB_OK | MB_ICONEXCLAMATION, NULL); } CVJoyDialog::~CVJoyDialog() { //MessageBoxEx(0, "VJoy destructor", "Warning", MB_OK | MB_ICONEXCLAMATION, NULL); //CVJoyDialog::OnOK(); // kill timer.... } void CVJoyDialog::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CTargetDlg) DDX_Check(pDX, IDC_VJOYENABLED, this->m_VJoyEnabled); DDX_Check(pDX, IDC_CROSSENABLED, this->m_CrossEnabled); DDX_Check(pDX, IDC_INVERTXAXIS, this->m_InvertXAxis); DDX_Check(pDX, IDC_INVERTYAXIS, this->m_InvertYAxis); DDX_Check(pDX, IDC_B1AUTOFIRE, this->m_B1AutoFire); DDX_Check(pDX, IDC_B2AUTOFIRE, this->m_B2AutoFire); DDX_Check(pDX, IDC_VJAUTOCENTER, this->m_VJAutoCenter); DDX_Check(pDX, IDC_VJMOUSEWHEEL, this->m_VJMouseWheel); DDX_Radio(pDX, IDC_VJ_USEMOUSE, this->m_UseMode); DDX_Slider(pDX, IDC_SENSIVITY_SLIDER, this->m_Slider); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CVJoyDialog, CDialog) ON_WM_TIMER() END_MESSAGE_MAP() #define IDVJoyTIMER 3 #define FINDERSIZE 5 #define CROSSSIZE 20 #define TICKMULTIPLIER 1.05f // CVJoyDialog message handlers void CVJoyDialog::OnTimer(UINT_PTR nIDEvent) { // IDC_VJOYPOSITION int x, y; DWORD dwVJoyStatus; DWORD dwSensivity; CString text; static DWORD dwLastSensivity = 0; // takes care of external updates of sensivity by mouse wheel dwSensivity = GetHookInfo()->VJoySensivity; if(dwLastSensivity && (dwSensivity != dwLastSensivity)){ CSliderCtrl *Slider; this->m_Slider = this->GetSliderPos(dwSensivity); Slider=(CSliderCtrl *)this->GetDlgItem(IDC_SENSIVITY_SLIDER); Slider->SetPos(this->m_Slider); } CDialog::UpdateData(); // calls DoDataExchange this->m_VJoySensivity = this->SetSensivity(m_Slider); dwLastSensivity = this->m_VJoySensivity; dwVJoyStatus = GetHookInfo()->VJoyStatus; this->m_VJoyPresent = (dwVJoyStatus & VJOYPRESENT) ? 1 : 0; dwVJoyStatus &= VJOYPRESENT; // clear all BUT VJOYPRESENT! if(this->m_VJoyEnabled) dwVJoyStatus |= VJOYENABLED; if(this->m_CrossEnabled) dwVJoyStatus |= CROSSENABLED; if(this->m_InvertYAxis) dwVJoyStatus |= INVERTYAXIS; if(this->m_InvertXAxis) dwVJoyStatus |= INVERTXAXIS; if(this->m_B1AutoFire) dwVJoyStatus |= B1AUTOFIRE; if(this->m_B2AutoFire) dwVJoyStatus |= B2AUTOFIRE; if(this->m_VJAutoCenter) dwVJoyStatus |= VJAUTOCENTER; if(this->m_VJMouseWheel) dwVJoyStatus |= VJMOUSEWHEEL; switch(this->m_UseMode){ case 0: dwVJoyStatus |= VJMOUSEMAP; break; case 1: dwVJoyStatus |= VJKEYBOARDMAP; break; case 2: dwVJoyStatus |= (VJKEYBOARDMAP|VJMOUSEMAP); break; } if(this->m_VJoyEnabled && this->m_VJoyPresent){ CWnd *JoyPos = this->GetDlgItem(IDC_VJOYPOSITION); CDC *dc = JoyPos->GetDC(); RECT client; JoyPos->GetClientRect(&client); x = (client.right/2) + ((GetHookInfo()->joyposx * client.right) / XSPAN); y = (client.bottom/2) + ((GetHookInfo()->joyposy * client.bottom) / YSPAN); // clear whole square area dc->FillRect(&client, Background); // draw sensivity circle dc->SelectObject(SensivityPen); dc->Ellipse( (client.right)*(250-dwSensivity)/500, (client.bottom)*(250-dwSensivity)/500, (client.right)*(250+dwSensivity)/500, (client.bottom)*(250+dwSensivity)/500); // draw center crossfinder dc->SelectObject(CenterPen); dc->MoveTo((client.right/2)-CROSSSIZE,(client.bottom/2)); dc->LineTo((client.right/2)+CROSSSIZE,(client.bottom/2)); dc->MoveTo((client.right/2),(client.bottom/2)-CROSSSIZE); dc->LineTo((client.right/2),(client.bottom/2)+CROSSSIZE); // draw joystick crossfinder dc->SelectObject(FinderPen); int x0, y0; if(xclient.right) x = client.right; if(yclient.bottom) y = client.bottom; x0 = (x-FINDERSIZE)MoveTo(x0,y); x0 = (x+FINDERSIZE)>client.right ? client.right : x+FINDERSIZE; dc->LineTo(x0,y); y0 = (y-FINDERSIZE)MoveTo(x,y0); y0 = (y+FINDERSIZE)>client.bottom ? client.bottom : y+FINDERSIZE; dc->LineTo(x,y0); //dc->MoveTo(20,20); text.Format("%d,%d", GetHookInfo()->joyposx, GetHookInfo()->joyposy); dc->TextOutA(5, 5, text); text.Format("x%d%%", GetHookInfo()->VJoySensivity); dc->TextOutA(5, 200, text); dc->DeleteDC(); } GetHookInfo()->VJoyStatus = dwVJoyStatus; GetHookInfo()->VJoySensivity = this->m_VJoySensivity; dwLastSensivity = this->m_VJoySensivity; } BOOL CVJoyDialog::OnInitDialog() { DWORD dwVJoyStatus; CSliderCtrl *Slider; // TODO: Add extra initialization here Background = new(CBrush); Background->CreateSolidBrush(RGB(255, 255, 255)); // white CenterPen = new(CPen); CenterPen->CreatePen(PS_DOT, 1, RGB(255, 0, 0)); // red FinderPen = new(CPen); FinderPen->CreatePen(PS_SOLID, 1, RGB(0, 0, 0)); // black SensivityPen = new(CPen); SensivityPen->CreatePen(PS_DOT, 1, RGB(127, 127, 255)); // clear blue dwVJoyStatus = GetHookInfo()->VJoyStatus; this->m_VJoyPresent = (dwVJoyStatus & VJOYPRESENT) ? 1 : 0; this->m_VJoyEnabled = (dwVJoyStatus & VJOYENABLED) ? 1 : 0; this->m_CrossEnabled = (dwVJoyStatus & CROSSENABLED) ? 1 : 0; this->m_InvertYAxis = (dwVJoyStatus & INVERTYAXIS) ? 1 : 0; this->m_InvertXAxis = (dwVJoyStatus & INVERTXAXIS) ? 1 : 0; this->m_B1AutoFire = (dwVJoyStatus & B1AUTOFIRE) ? 1 : 0; this->m_B2AutoFire = (dwVJoyStatus & B2AUTOFIRE) ? 1 : 0; this->m_VJAutoCenter = (dwVJoyStatus & VJAUTOCENTER) ? 1 : 0; this->m_VJMouseWheel = (dwVJoyStatus & VJMOUSEWHEEL) ? 1 : 0; this->m_UseMode = (dwVJoyStatus & VJKEYBOARDMAP) ? ((dwVJoyStatus & VJMOUSEMAP) ? 2 : 1) : 0; this->m_VJoySensivity = GetHookInfo()->VJoySensivity; // calculates the m_Slider values this->InitSensivity(); this->m_Slider = this->GetSliderPos(this->m_VJoySensivity); Slider=(CSliderCtrl *)this->GetDlgItem(IDC_SENSIVITY_SLIDER); Slider->SetRange(-20, 20, 1); CDialog::OnInitDialog(); SetTimer(IDVJoyTIMER, 40, NULL); return TRUE; // return TRUE unless you set the focus to a control } void CVJoyDialog::OnOK() { char val[80]; DWORD dwVJoyStatus; // stop timer KillTimer(IDVJoyTIMER); // update joystick flags CDialog::UpdateData(); // calls DoDataExchange dwVJoyStatus = GetHookInfo()->VJoyStatus; dwVJoyStatus &= VJOYPRESENT; // clear all BUT VJOYPRESENT! if(this->m_VJoyEnabled) dwVJoyStatus |= VJOYENABLED; if(this->m_CrossEnabled) dwVJoyStatus |= CROSSENABLED; if(this->m_InvertYAxis) dwVJoyStatus |= INVERTYAXIS; if(this->m_InvertXAxis) dwVJoyStatus |= INVERTXAXIS; if(this->m_B1AutoFire) dwVJoyStatus |= B1AUTOFIRE; if(this->m_B2AutoFire) dwVJoyStatus |= B2AUTOFIRE; if(this->m_VJAutoCenter) dwVJoyStatus |= VJAUTOCENTER; if(this->m_VJMouseWheel) dwVJoyStatus |= VJMOUSEWHEEL; switch(this->m_UseMode){ case 0: dwVJoyStatus |= VJMOUSEMAP; break; case 1: dwVJoyStatus |= VJKEYBOARDMAP; break; case 2: dwVJoyStatus |= (VJKEYBOARDMAP|VJMOUSEMAP); break; } this->m_VJoySensivity = (int)(100 * pow(TICKMULTIPLIER, (float)this->m_Slider)); sprintf_s(val, sizeof(val), "%i", dwVJoyStatus); WritePrivateProfileString("joystick", "flags", val, gInitPath); sprintf_s(val, sizeof(val), "%i", this->m_VJoySensivity); WritePrivateProfileString("joystick", "sensivity", val, gInitPath); GetHookInfo()->VJoyStatus = dwVJoyStatus; CDialog::OnOK(); } ================================================ FILE: host/VJoyDialog.h ================================================ #pragma once // CTimeSlider dialog class CVJoyDialog : public CDialog { DECLARE_DYNAMIC(CVJoyDialog) public: CVJoyDialog(CWnd* pParent = NULL); // standard constructor virtual ~CVJoyDialog(); //~VJoyDialog(); // Dialog Data enum { IDD = IDD_VJOYDIALOG }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support DECLARE_MESSAGE_MAP() public: afx_msg void OnTimer(UINT_PTR nIDEvent); public: virtual BOOL OnInitDialog(); protected: virtual void OnOK(); //virtual void OnCancel(); private: int GetSliderPos(int); int SetSensivity(int); void InitSensivity(void); BOOL m_VJoyPresent; BOOL m_VJoyEnabled; BOOL m_CrossEnabled; BOOL m_InvertYAxis; BOOL m_InvertXAxis; BOOL m_B1AutoFire; BOOL m_B2AutoFire; BOOL m_VJAutoCenter; BOOL m_VJMouseWheel; int m_UseMode; int m_VJoySensivity; int m_Slider; CBrush *Background; CPen *CenterPen; CPen *FinderPen; CPen *SensivityPen; int Multipliers[41]; }; ================================================ FILE: host/ViewFlagsDialog.cpp ================================================ // ViewFlagsDialog.cpp : implementation file // #include "stdafx.h" #include "dxwndhost.h" #include "ViewFlagsDialog.h" // CViewFlagsDialog dialog IMPLEMENT_DYNAMIC(CViewFlagsDialog, CDialog) CViewFlagsDialog::CViewFlagsDialog(CWnd* pParent /*=NULL*/) : CDialog(CViewFlagsDialog::IDD, pParent) { } CViewFlagsDialog::~CViewFlagsDialog() { } void CViewFlagsDialog::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CViewFlagsDialog, CDialog) END_MESSAGE_MAP() // CViewFlagsDialog message handlers BOOL CViewFlagsDialog::OnInitDialog() { CDialog::OnInitDialog(); // TODO: Add extra initialization here CString sflags; extern TARGETMAP *ViewTarget; // dirty !!!! int i; TARGETMAP *t; DWORD dword; t = ViewTarget; sflags.Append("Flags1: "); for(i=0, dword = t->flags ; i<32; i++, dword>>=1) if(dword & 0x1) sflags.AppendFormat("%s ", GetFlagCaption(0,i)); sflags.Append("\nFlags2: "); for(i=0, dword = t->flags2; i<32; i++, dword>>=1) if(dword & 0x1) sflags.AppendFormat("%s ", GetFlagCaption(1,i)); sflags.Append("\nFlags3: "); for(i=0, dword = t->flags3; i<32; i++, dword>>=1) if(dword & 0x1) sflags.AppendFormat("%s ", GetFlagCaption(2,i)); sflags.Append("\nFlags4: "); for(i=0, dword = t->flags4; i<32; i++, dword>>=1) if(dword & 0x1) sflags.AppendFormat("%s ", GetFlagCaption(3,i)); sflags.Append("\nFlags5: "); for(i=0, dword = t->flags5; i<32; i++, dword>>=1) if(dword & 0x1) sflags.AppendFormat("%s ", GetFlagCaption(4,i)); sflags.Append("\nFlags6: "); for(i=0, dword = t->flags6; i<32; i++, dword>>=1) if(dword & 0x1) sflags.AppendFormat("%s ", GetFlagCaption(5,i)); sflags.Append("\nFlags7: "); for(i=0, dword = t->flags7; i<32; i++, dword>>=1) if(dword & 0x1) sflags.AppendFormat("%s ", GetFlagCaption(6,i)); sflags.Append("\nFlags8: "); for(i=0, dword = t->flags8; i<32; i++, dword>>=1) if(dword & 0x1) sflags.AppendFormat("%s ", GetFlagCaption(7,i)); sflags.Append("\nFlags9: "); for(i=0, dword = t->flags8; i<32; i++, dword>>=1) if(dword & 0x1) sflags.AppendFormat("%s ", GetFlagCaption(8,i)); sflags.Append("\nFlags10: "); for(i=0, dword = t->flags8; i<32; i++, dword>>=1) if(dword & 0x1) sflags.AppendFormat("%s ", GetFlagCaption(9,i)); sflags.Append("\nTFlags: "); for(i=0, dword = t->tflags; i<32; i++, dword>>=1) if(dword & 0x1) sflags.AppendFormat("%s ", GetFlagCaption(10,i)); this->SetDlgItemTextA(IDC_DESKTOPINFO, sflags); this->SetWindowTextA(t->path); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CViewFlagsDialog::OnOK() { // TODO: Add your specialized code here and/or call the base class CDialog::OnOK(); } ================================================ FILE: host/ViewFlagsDialog.h ================================================ #pragma once // CViewFlagsDialog dialog class CViewFlagsDialog : public CDialog { DECLARE_DYNAMIC(CViewFlagsDialog) public: CViewFlagsDialog(CWnd* pParent = NULL); // standard constructor virtual ~CViewFlagsDialog(); // Dialog Data enum { IDD = IDD_VIEWFLAGS }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support DECLARE_MESSAGE_MAP() public: public: virtual BOOL OnInitDialog(); protected: virtual void OnOK(); }; ================================================ FILE: host/bmpext.h ================================================ #pragma once #include "afxtempl.h" //MakeRgn helper data definition typedef CTypedPtrList< CPtrList, LPRECT > RECTLIST; ////////////////////////////////////////////////////////////////////////// // DD Bitmap draw extensions class class AFX_EXT_CLASS CDDBDrawEx { public: CDDBDrawEx(CDC* pDC, CBitmap* pbmSrc, CBitmap* pbmBack = NULL); virtual ~CDDBDrawEx(); void Fill(CRect& rDest); void Draw(CRect& rDest, CPoint& pntSrc); void DrawTransparent(CRect& rDest, CPoint& pntSrc, COLORREF crMask ); HRGN MakeRgn(COLORREF cTransparentColor = 0, COLORREF cTolerance = 0x101010); private: CDC* m_pDC; CBitmap* m_pbmSrc; CBitmap* m_pbmBack; LPRGNDATA RectList2RGNDATA( RECTLIST& rl, RECT& rBound, int& iByteCount ); }; /////////////////////////////////////////////////////////////////////////// // DIB support classes class CDibException { public: //exception types: not enough memory, operation not supported, invalid pixel position enum {E_NOMEM, E_NOTSUPP, E_INVPOS}; CDibException( int iReason ) : m_iReason(iReason) {} static void Throw( int iReason ){ throw new CDibException(iReason); } public: int m_iReason; }; class AFX_EXT_CLASS CDib { // Constructors public: CDib(); virtual ~CDib(); // Attributes protected: LPBYTE m_pBits; LPBITMAPINFO m_pBMI; public: CPalette* m_pPalette; public: DWORD Width() const; DWORD Height() const; WORD NumColors( BITMAPINFOHEADER& bmiHeader ) const; BOOL IsValid() const; void SetPixel( int iX, int iY, RGBQUAD& rgbPixel ); RGBQUAD GetPixel(int iX, int iY); private: void AssertPosition( int iX, int iY ); DWORD PaletteSize() const; // Operations public: BOOL Draw(CDC*, CRect& rectDC, CRect& rectDIB) const; DWORD Save(CFile& file) const; DWORD Read(CFile& file, BOOL bFromResource = FALSE ); DWORD ReadFromResource(UINT nResID); void Invalidate(); // Implementation protected: BOOL CreatePalette(); void Free(); public: HBITMAP CreateDDBitmap(CDC* pDC); HBITMAP CreateDDBitmap( HDC hDC ); BOOL Compress(CDC* pDC, BOOL bCompress ); protected: CDib& operator = (CDib& dib); }; ================================================ FILE: host/cdib.cpp ================================================ // cdib.cpp // new version for WIN32 #include "stdafx.h" #include "cdib.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif IMPLEMENT_SERIAL(CDib, CObject, 0); CDib::CDib() { m_hFile = NULL; m_hBitmap = NULL; m_hPalette = NULL; m_nBmihAlloc = m_nImageAlloc = noAlloc; Empty(); } CDib::CDib(CSize size, int nBitCount) { m_hFile = NULL; m_hBitmap = NULL; m_hPalette = NULL; m_nBmihAlloc = m_nImageAlloc = noAlloc; Empty(); ComputePaletteSize(nBitCount); m_lpBMIH = (LPBITMAPINFOHEADER) new char[sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * m_nColorTableEntries]; m_nBmihAlloc = crtAlloc; m_lpBMIH->biSize = sizeof(BITMAPINFOHEADER); m_lpBMIH->biWidth = size.cx; m_lpBMIH->biHeight = size.cy; m_lpBMIH->biPlanes = 1; m_lpBMIH->biBitCount = nBitCount; m_lpBMIH->biCompression = BI_RGB; m_lpBMIH->biSizeImage = 0; m_lpBMIH->biXPelsPerMeter = 0; m_lpBMIH->biYPelsPerMeter = 0; m_lpBMIH->biClrUsed = m_nColorTableEntries; m_lpBMIH->biClrImportant = m_nColorTableEntries; ComputeMetrics(); memset(m_lpvColorTable, 0, sizeof(RGBQUAD) * m_nColorTableEntries); m_lpImage = NULL; // no data yet } CDib::~CDib() { Empty(); } CSize CDib::GetDimensions() { if(m_lpBMIH == NULL) return CSize(0, 0); return CSize((int) m_lpBMIH->biWidth, (int) m_lpBMIH->biHeight); } BOOL CDib::AttachMapFile(const char* strPathname, BOOL bShare) // for reading { // if we open the same file twice, Windows treats it as 2 separate files // doesn't work with rare BMP files where # palette entries > biClrUsed HANDLE hFile = ::CreateFile(strPathname, GENERIC_WRITE | GENERIC_READ, bShare ? FILE_SHARE_READ : 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); ASSERT(hFile != INVALID_HANDLE_VALUE); DWORD dwFileSize = ::GetFileSize(hFile, NULL); HANDLE hMap = ::CreateFileMapping(hFile, NULL, PAGE_READWRITE, 0, 0, NULL); DWORD dwErr = ::GetLastError(); if(hMap == NULL) { AfxMessageBox("Empty bitmap file"); return FALSE; } LPVOID lpvFile = ::MapViewOfFile(hMap, FILE_MAP_WRITE, 0, 0, 0); // map whole file ASSERT(lpvFile != NULL); if(((LPBITMAPFILEHEADER) lpvFile)->bfType != 0x4d42) { AfxMessageBox("Invalid bitmap file"); DetachMapFile(); return FALSE; } AttachMemory((LPBYTE) lpvFile + sizeof(BITMAPFILEHEADER)); m_lpvFile = lpvFile; m_hFile = hFile; m_hMap = hMap; return TRUE; } BOOL CDib::CopyToMapFile(const char* strPathname) { // copies DIB to a new file, releases prior pointers // if you previously used CreateSection, the HBITMAP will be NULL (and unusable) BITMAPFILEHEADER bmfh; bmfh.bfType = 0x4d42; // 'BM' bmfh.bfSize = m_dwSizeImage + sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * m_nColorTableEntries + sizeof(BITMAPFILEHEADER); // meaning of bfSize open to interpretation bmfh.bfReserved1 = bmfh.bfReserved2 = 0; bmfh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * m_nColorTableEntries; HANDLE hFile = ::CreateFile(strPathname, GENERIC_WRITE | GENERIC_READ, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); ASSERT(hFile != INVALID_HANDLE_VALUE); int nSize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * m_nColorTableEntries + m_dwSizeImage; HANDLE hMap = ::CreateFileMapping(hFile, NULL, PAGE_READWRITE, 0, nSize, NULL); DWORD dwErr = ::GetLastError(); ASSERT(hMap != NULL); LPVOID lpvFile = ::MapViewOfFile(hMap, FILE_MAP_WRITE, 0, 0, 0); // map whole file ASSERT(lpvFile != NULL); LPBYTE lpbCurrent = (LPBYTE) lpvFile; memcpy(lpbCurrent, &bmfh, sizeof(BITMAPFILEHEADER)); // file header lpbCurrent += sizeof(BITMAPFILEHEADER); LPBITMAPINFOHEADER lpBMIH = (LPBITMAPINFOHEADER) lpbCurrent; memcpy(lpbCurrent, m_lpBMIH, sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * m_nColorTableEntries); // info lpbCurrent += sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * m_nColorTableEntries; memcpy(lpbCurrent, m_lpImage, m_dwSizeImage); // bit image DWORD dwSizeImage = m_dwSizeImage; Empty(); m_dwSizeImage = dwSizeImage; m_nBmihAlloc = m_nImageAlloc = noAlloc; m_lpBMIH = lpBMIH; m_lpImage = lpbCurrent; m_hFile = hFile; m_hMap = hMap; m_lpvFile = lpvFile; ComputePaletteSize(m_lpBMIH->biBitCount); ComputeMetrics(); MakePalette(); return TRUE; } BOOL CDib::AttachMemory(LPVOID lpvMem, BOOL bMustDelete, HGLOBAL hGlobal) { // assumes contiguous BITMAPINFOHEADER, color table, image color table could be zero length Empty(); m_hGlobal = hGlobal; if(bMustDelete == FALSE) { m_nBmihAlloc = noAlloc; } else { m_nBmihAlloc = ((hGlobal == NULL) ? crtAlloc : heapAlloc); } try { m_lpBMIH = (LPBITMAPINFOHEADER) lpvMem; ComputeMetrics(); ComputePaletteSize(m_lpBMIH->biBitCount); m_lpImage = (LPBYTE) m_lpvColorTable + sizeof(RGBQUAD) * m_nColorTableEntries; MakePalette(); } catch(CException* pe) { AfxMessageBox("AttachMemory error"); pe->Delete(); return FALSE; } return TRUE; } UINT CDib::UsePalette(CDC* pDC, BOOL bBackground /* = FALSE */) { if(m_hPalette == NULL) return 0; HDC hdc = pDC->GetSafeHdc(); ::SelectPalette(hdc, m_hPalette, bBackground); return ::RealizePalette(hdc); } BOOL CDib::Draw(CDC* pDC, CPoint origin, CSize size) { if(m_lpBMIH == NULL) return FALSE; if(m_hPalette != NULL) { ::SelectPalette(pDC->GetSafeHdc(), m_hPalette, TRUE); } pDC->SetStretchBltMode(COLORONCOLOR); ::StretchDIBits(pDC->GetSafeHdc(), origin.x, origin.y, size.cx, size.cy, 0, 0, m_lpBMIH->biWidth, m_lpBMIH->biHeight, m_lpImage, (LPBITMAPINFO) m_lpBMIH, DIB_RGB_COLORS, SRCCOPY); return TRUE; } HBITMAP CDib::CreateSection(CDC* pDC /* = NULL */) { if(m_lpBMIH == NULL) return NULL; if(m_lpImage != NULL) return NULL; // can only do this if image doesn't exist m_hBitmap = ::CreateDIBSection(pDC->GetSafeHdc(), (LPBITMAPINFO) m_lpBMIH, DIB_RGB_COLORS, (LPVOID*) &m_lpImage, NULL, 0); ASSERT(m_lpImage != NULL); return m_hBitmap; } BOOL CDib::MakePalette() { // makes a logical palette (m_hPalette) from the DIB's color table // this palette will be selected and realized prior to drawing the DIB if(m_nColorTableEntries == 0) return FALSE; if(m_hPalette != NULL) ::DeleteObject(m_hPalette); TRACE("CDib::MakePalette -- m_nColorTableEntries = %d\n", m_nColorTableEntries); LPLOGPALETTE pLogPal = (LPLOGPALETTE) new char[2 * sizeof(WORD) + m_nColorTableEntries * sizeof(PALETTEENTRY)]; pLogPal->palVersion = 0x300; pLogPal->palNumEntries = m_nColorTableEntries; LPRGBQUAD pDibQuad = (LPRGBQUAD) m_lpvColorTable; for(int i = 0; i < m_nColorTableEntries; i++) { pLogPal->palPalEntry[i].peRed = pDibQuad->rgbRed; pLogPal->palPalEntry[i].peGreen = pDibQuad->rgbGreen; pLogPal->palPalEntry[i].peBlue = pDibQuad->rgbBlue; pLogPal->palPalEntry[i].peFlags = 0; pDibQuad++; } m_hPalette = ::CreatePalette(pLogPal); delete pLogPal; return TRUE; } BOOL CDib::SetSystemPalette(CDC* pDC) { // if the DIB doesn't have a color table, we can use the system's halftone palette if(m_nColorTableEntries != 0) return FALSE; m_hPalette = ::CreateHalftonePalette(pDC->GetSafeHdc()); return TRUE; } HBITMAP CDib::CreateBitmap(CDC* pDC) { if (m_dwSizeImage == 0) return NULL; HBITMAP hBitmap = ::CreateDIBitmap(pDC->GetSafeHdc(), m_lpBMIH, CBM_INIT, m_lpImage, (LPBITMAPINFO) m_lpBMIH, DIB_RGB_COLORS); ASSERT(hBitmap != NULL); return hBitmap; } BOOL CDib::Compress(CDC* pDC, BOOL bCompress /* = TRUE */) { // 1. makes GDI bitmap from existing DIB // 2. makes a new DIB from GDI bitmap with compression // 3. cleans up the original DIB // 4. puts the new DIB in the object if((m_lpBMIH->biBitCount != 4) && (m_lpBMIH->biBitCount != 8)) return FALSE; // compression supported only for 4 bpp and 8 bpp DIBs if(m_hBitmap) return FALSE; // can't compress a DIB Section! TRACE("Compress: original palette size = %d\n", m_nColorTableEntries); HDC hdc = pDC->GetSafeHdc(); HPALETTE hOldPalette = ::SelectPalette(hdc, m_hPalette, FALSE); HBITMAP hBitmap; // temporary if((hBitmap = CreateBitmap(pDC)) == NULL) return FALSE; int nSize = sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * m_nColorTableEntries; LPBITMAPINFOHEADER lpBMIH = (LPBITMAPINFOHEADER) new char[nSize]; memcpy(lpBMIH, m_lpBMIH, nSize); // new header if(bCompress) { switch (lpBMIH->biBitCount) { case 4: lpBMIH->biCompression = BI_RLE4; break; case 8: lpBMIH->biCompression = BI_RLE8; break; default: ASSERT(FALSE); } // calls GetDIBits with null data pointer to get size of compressed DIB if(!::GetDIBits(pDC->GetSafeHdc(), hBitmap, 0, (UINT) lpBMIH->biHeight, NULL, (LPBITMAPINFO) lpBMIH, DIB_RGB_COLORS)) { AfxMessageBox("Unable to compress this DIB"); // probably a problem with the color table ::DeleteObject(hBitmap); delete [] lpBMIH; ::SelectPalette(hdc, hOldPalette, FALSE); return FALSE; } if (lpBMIH->biSizeImage == 0) { AfxMessageBox("Driver can't do compression"); ::DeleteObject(hBitmap); delete [] lpBMIH; ::SelectPalette(hdc, hOldPalette, FALSE); return FALSE; } else { m_dwSizeImage = lpBMIH->biSizeImage; } } else { lpBMIH->biCompression = BI_RGB; // decompress // figure the image size from the bitmap width and height DWORD dwBytes = ((DWORD) lpBMIH->biWidth * lpBMIH->biBitCount) / 32; if(((DWORD) lpBMIH->biWidth * lpBMIH->biBitCount) % 32) { dwBytes++; } dwBytes *= 4; m_dwSizeImage = dwBytes * lpBMIH->biHeight; // no compression lpBMIH->biSizeImage = m_dwSizeImage; } // second GetDIBits call to make DIB LPBYTE lpImage = (LPBYTE) new char[m_dwSizeImage]; VERIFY(::GetDIBits(pDC->GetSafeHdc(), hBitmap, 0, (UINT) lpBMIH->biHeight, lpImage, (LPBITMAPINFO) lpBMIH, DIB_RGB_COLORS)); TRACE("dib successfully created - height = %d\n", lpBMIH->biHeight); ::DeleteObject(hBitmap); Empty(); m_nBmihAlloc = m_nImageAlloc = crtAlloc; m_lpBMIH = lpBMIH; m_lpImage = lpImage; ComputeMetrics(); ComputePaletteSize(m_lpBMIH->biBitCount); MakePalette(); ::SelectPalette(hdc, hOldPalette, FALSE); TRACE("Compress: new palette size = %d\n", m_nColorTableEntries); return TRUE; } BOOL CDib::Read(CFile* pFile) { // 1. read file header to get size of info hdr + color table // 2. read info hdr (to get image size) and color table // 3. read image // can't use bfSize in file header Empty(); int nCount, nSize; BITMAPFILEHEADER bmfh; try { nCount = pFile->Read((LPVOID) &bmfh, sizeof(BITMAPFILEHEADER)); //if(nCount != sizeof(BITMAPFILEHEADER)) { // throw new CException; //} //if(bmfh.bfType != 0x4d42) { // throw new CException; //} nSize = bmfh.bfOffBits - sizeof(BITMAPFILEHEADER); m_lpBMIH = (LPBITMAPINFOHEADER) new char[nSize]; m_nBmihAlloc = m_nImageAlloc = crtAlloc; nCount = pFile->Read(m_lpBMIH, nSize); // info hdr & color table ComputeMetrics(); ComputePaletteSize(m_lpBMIH->biBitCount); MakePalette(); m_lpImage = (LPBYTE) new char[m_dwSizeImage]; nCount = pFile->Read(m_lpImage, m_dwSizeImage); // image only } catch(CException* pe) { AfxMessageBox("Read error"); pe->Delete(); return FALSE; } return TRUE; } BOOL CDib::ReadSection(CFile* pFile, CDC* pDC /* = NULL */) { // new function reads BMP from disk and creates a DIB section // allows modification of bitmaps from disk // 1. read file header to get size of info hdr + color table // 2. read info hdr (to get image size) and color table // 3. create DIB section based on header parms // 4. read image into memory that CreateDibSection allocates Empty(); int nCount, nSize; BITMAPFILEHEADER bmfh; try { nCount = pFile->Read((LPVOID) &bmfh, sizeof(BITMAPFILEHEADER)); //if(nCount != sizeof(BITMAPFILEHEADER)) { // throw new CException; //} //if(bmfh.bfType != 0x4d42) { // throw new CException; //} nSize = bmfh.bfOffBits - sizeof(BITMAPFILEHEADER); m_lpBMIH = (LPBITMAPINFOHEADER) new char[nSize]; m_nBmihAlloc = crtAlloc; m_nImageAlloc = noAlloc; nCount = pFile->Read(m_lpBMIH, nSize); // info hdr & color table //if(m_lpBMIH->biCompression != BI_RGB) { // throw new CException; //} ComputeMetrics(); ComputePaletteSize(m_lpBMIH->biBitCount); MakePalette(); UsePalette(pDC); m_hBitmap = ::CreateDIBSection(pDC->GetSafeHdc(), (LPBITMAPINFO) m_lpBMIH, DIB_RGB_COLORS, (LPVOID*) &m_lpImage, NULL, 0); ASSERT(m_lpImage != NULL); nCount = pFile->Read(m_lpImage, m_dwSizeImage); // image only } catch(CException* pe) { AfxMessageBox("ReadSection error"); pe->Delete(); return FALSE; } return TRUE; } BOOL CDib::Write(CFile* pFile) { BITMAPFILEHEADER bmfh; bmfh.bfType = 0x4d42; // 'BM' int nSizeHdr = sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * m_nColorTableEntries; bmfh.bfSize = 0; // bmfh.bfSize = sizeof(BITMAPFILEHEADER) + nSizeHdr + m_dwSizeImage; // meaning of bfSize open to interpretation (bytes, words, dwords?) -- we won't use it bmfh.bfReserved1 = bmfh.bfReserved2 = 0; bmfh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * m_nColorTableEntries; try { pFile->Write((LPVOID) &bmfh, sizeof(BITMAPFILEHEADER)); pFile->Write((LPVOID) m_lpBMIH, nSizeHdr); pFile->Write((LPVOID) m_lpImage, m_dwSizeImage); } catch(CException* pe) { pe->Delete(); AfxMessageBox("write error"); return FALSE; } return TRUE; } void CDib::Serialize(CArchive& ar) { DWORD dwPos; dwPos = ar.GetFile()->GetPosition(); TRACE("CDib::Serialize -- pos = %d\n", dwPos); ar.Flush(); dwPos = ar.GetFile()->GetPosition(); TRACE("CDib::Serialize -- pos = %d\n", dwPos); if(ar.IsStoring()) { Write(ar.GetFile()); } else { Read(ar.GetFile()); } } // helper functions void CDib::ComputePaletteSize(int nBitCount) { if((m_lpBMIH == NULL) || (m_lpBMIH->biClrUsed == 0)) { switch(nBitCount) { case 1: m_nColorTableEntries = 2; break; case 4: m_nColorTableEntries = 16; break; case 8: m_nColorTableEntries = 256; break; case 16: case 24: case 32: m_nColorTableEntries = 0; break; default: ASSERT(FALSE); } } else { m_nColorTableEntries = m_lpBMIH->biClrUsed; } ASSERT((m_nColorTableEntries >= 0) && (m_nColorTableEntries <= 256)); } void CDib::ComputeMetrics() { //if(m_lpBMIH->biSize != sizeof(BITMAPINFOHEADER)) { // TRACE("Not a valid Windows bitmap -- probably an OS/2 bitmap\n"); // throw new CException; //} m_dwSizeImage = m_lpBMIH->biSizeImage; if(m_dwSizeImage == 0) { DWORD dwBytes = ((DWORD) m_lpBMIH->biWidth * m_lpBMIH->biBitCount) / 32; if(((DWORD) m_lpBMIH->biWidth * m_lpBMIH->biBitCount) % 32) { dwBytes++; } dwBytes *= 4; m_dwSizeImage = dwBytes * m_lpBMIH->biHeight; // no compression } m_lpvColorTable = (LPBYTE) m_lpBMIH + sizeof(BITMAPINFOHEADER); } void CDib::Empty() { // this is supposed to clean up whatever is in the DIB DetachMapFile(); if(m_nBmihAlloc == crtAlloc) { delete [ ] m_lpBMIH; } else if(m_nBmihAlloc == heapAlloc) { ::GlobalUnlock(m_hGlobal); ::GlobalFree(m_hGlobal); } if(m_nImageAlloc == crtAlloc) delete [] m_lpImage; if(m_hPalette != NULL) ::DeleteObject(m_hPalette); if(m_hBitmap != NULL) ::DeleteObject(m_hBitmap); m_nBmihAlloc = m_nImageAlloc = noAlloc; m_hGlobal = NULL; m_lpBMIH = NULL; m_lpImage = NULL; m_lpvColorTable = NULL; m_nColorTableEntries = 0; m_dwSizeImage = 0; m_lpvFile = NULL; m_hMap = NULL; m_hFile = NULL; m_hBitmap = NULL; m_hPalette = NULL; } void CDib::DetachMapFile() { if(m_hFile == NULL) return; ::UnmapViewOfFile(m_lpvFile); ::CloseHandle(m_hMap); ::CloseHandle(m_hFile); m_hFile = NULL; } ================================================ FILE: host/cdib.h ================================================ #ifndef _INSIDE_VISUAL_CPP_CDIB #define _INSIDE_VISUAL_CPP_CDIB class CDib : public CObject { enum Alloc {noAlloc, crtAlloc, heapAlloc}; // applies to BITMAPINFOHEADER DECLARE_SERIAL(CDib) public: LPVOID m_lpvColorTable; HBITMAP m_hBitmap; LPBYTE m_lpImage; // starting address of DIB bits LPBITMAPINFOHEADER m_lpBMIH; // buffer containing the BITMAPINFOHEADER private: HGLOBAL m_hGlobal; // for external windows we need to free; could be allocated by this class or allocated externally Alloc m_nBmihAlloc; Alloc m_nImageAlloc; DWORD m_dwSizeImage; // of bitsnot BITMAPINFOHEADER or BITMAPFILEHEADER int m_nColorTableEntries; HANDLE m_hFile; HANDLE m_hMap; LPVOID m_lpvFile; HPALETTE m_hPalette; public: CDib(); CDib(CSize size, int nBitCount); // builds BITMAPINFOHEADER ~CDib(); int GetSizeImage() {return m_dwSizeImage;} int GetSizeHeader() {return sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * m_nColorTableEntries;} CSize GetDimensions(); BOOL AttachMapFile(const char* strPathname, BOOL bShare = FALSE); BOOL CopyToMapFile(const char* strPathname); BOOL AttachMemory(LPVOID lpvMem, BOOL bMustDelete = FALSE, HGLOBAL hGlobal = NULL); BOOL Draw(CDC* pDC, CPoint origin, CSize size); // until we implement CreateDibSection HBITMAP CreateSection(CDC* pDC = NULL); UINT UsePalette(CDC* pDC, BOOL bBackground = FALSE); BOOL MakePalette(); BOOL SetSystemPalette(CDC* pDC); BOOL Compress(CDC* pDC, BOOL bCompress = TRUE); // FALSE means decompress HBITMAP CreateBitmap(CDC* pDC); BOOL Read(CFile* pFile); BOOL ReadSection(CFile* pFile, CDC* pDC = NULL); BOOL Write(CFile* pFile); void Serialize(CArchive& ar); void Empty(); private: void DetachMapFile(); void ComputePaletteSize(int nBitCount); void ComputeMetrics(); }; #endif // _INSIDE_VISUAL_CPP_CDIB ================================================ FILE: host/dib.cpp ================================================ #include "stdafx.h" #include "bmpext.h" ////////////////////////////////////////////////////////////////////////// // DIB support defines #define BMIH_SIZE sizeof BITMAPINFOHEADER #define BMIF_SIZE sizeof BITMAPFILEHEADER /* DIB constants */ #define PALVERSION 0x300 /* Dib Header Marker - used in writing DIBs to files */ #define DIB_HEADER_MARKER ((WORD) ('M' << 8) | 'B') // WIDTHBYTES performs DWORD-aligning of DIB scanlines. The "bits" // parameter is the bit count for the scanline (biWidth * biBitCount), // and this macro returns the number of DWORD-aligned bytes needed // to hold those bits. #define WIDTHBYTES(bits) (((bits) + 31) / 32 * 4) ///////////////////////////////////////////////////////////////////////////// //CDib implementation CDib::CDib() : m_pBMI(0), m_pBits(0), m_pPalette(0) {} CDib::~CDib() { Free(); } DWORD CDib::Width() const { if (!m_pBMI) return 0; /* return the DIB width */ return m_pBMI->bmiHeader.biWidth; } DWORD CDib::Height() const { if (!m_pBMI) return 0; /* return the DIB height */ return m_pBMI->bmiHeader.biHeight; } WORD CDib::NumColors( BITMAPINFOHEADER& bmiHeader ) const { if ( bmiHeader.biClrUsed != 0) return (WORD)bmiHeader.biClrUsed; switch ( bmiHeader.biBitCount ) { case 1: return 2; case 4: return 16; case 8: return 256; default: return 0; } } BOOL CDib::IsValid() const { return (m_pBits != NULL); } DWORD CDib::PaletteSize() const { return NumColors( m_pBMI->bmiHeader ) * sizeof(RGBQUAD); } BOOL CDib::Draw(CDC* pDC, CRect& rectDC, CRect& rectDIB) const { if ( !IsValid() ) return FALSE; CPalette* pOldPal = NULL; // Previous palette // Get the DIB's palette, then select it into DC if (m_pPalette != NULL) { // Select as background since we have // already realized in forground if needed pOldPal = pDC->SelectPalette( m_pPalette, TRUE); } /* Make sure to use the stretching mode best for color pictures */ pDC->SetStretchBltMode( COLORONCOLOR ); /* Determine whether to call StretchDIBits() or SetDIBitsToDevice() */ BOOL bSuccess; if( ( rectDC.Width() == rectDIB.Width() ) && ( rectDC.Height() == rectDIB.Height() ) ) bSuccess = ::SetDIBitsToDevice(pDC->m_hDC, // hDC rectDC.left, // DestX rectDC.top, // DestY rectDC.Width(), // nDestWidth rectDC.Height(), // nDestHeight rectDIB.left, // SrcX (int)Height() - rectDIB.top - rectDIB.Height(), // SrcY 0, // nStartScan (WORD)Height(), // nNumScans m_pBits, // lpBits m_pBMI, // lpBitsInfo DIB_RGB_COLORS); // wUsage else bSuccess = ::StretchDIBits(pDC->m_hDC, // hDC rectDC.left, // DestX rectDC.top, // DestY rectDC.Width(), // nDestWidth rectDC.Height(), // nDestHeight rectDIB.left, // SrcX rectDIB.top, // SrcY rectDIB.Width(), // wSrcWidth rectDIB.Height(), // wSrcHeight m_pBits, // lpBits m_pBMI, // lpBitsInfo DIB_RGB_COLORS, // wUsage SRCCOPY); // dwROP /* Reselect old palette */ if (pOldPal != NULL) { pDC->SelectPalette( pOldPal, TRUE); } return bSuccess; } void CDib::AssertPosition(int iX, int iY) { if( (iX < 0) || (iX > m_pBMI->bmiHeader.biWidth - 1) || (iY < 0) || (iY > m_pBMI->bmiHeader.biHeight - 1) ) { //invalid image pixel position CDibException::Throw( CDibException::E_INVPOS ); } } RGBQUAD CDib::GetPixel(int iX, int iY) { RGBQUAD rgbResult; WORD wDummy; //takeinto account that DIBit raws are reversed vertically iY = (m_pBMI->bmiHeader.biHeight - 1) - iY; // GHO fix //iY = m_pBMI->bmiHeader.biHeight - iY; //assert pixel position AssertPosition( iX, iY ); //access the destination pixel int nRowBytes = m_pBMI->bmiHeader.biWidth * m_pBMI->bmiHeader.biBitCount; nRowBytes = ( (nRowBytes + 31) & (~31) ) / 8; switch( m_pBMI->bmiHeader.biBitCount ) { case 1: //Monochrome rgbResult = m_pBMI->bmiColors[ *(m_pBits + nRowBytes*iY + iX/8) & (0x80 >> iX%8) ]; break; case 4: rgbResult = m_pBMI->bmiColors[ *(m_pBits + nRowBytes*iY + iX/2) & ((iX&1) ? 0x0f : 0xf0) ]; break; case 8: rgbResult = m_pBMI->bmiColors[ *(m_pBits + nRowBytes*iY + iX) ]; break; case 16: wDummy = *(LPWORD)(m_pBits + nRowBytes*iY + iX*2); rgbResult.rgbBlue = (BYTE)(0x001F & wDummy); rgbResult.rgbGreen = (BYTE)(0x001F & (wDummy >> 5)); rgbResult.rgbRed = (BYTE)(0x001F & wDummy >> 10 ); break; case 24: rgbResult = *(LPRGBQUAD)(m_pBits + nRowBytes*iY + iX*3); break; case 32: rgbResult = *(LPRGBQUAD)(m_pBits + nRowBytes*iY + iX*4); break; } return rgbResult; } void CDib::SetPixel(int iX, int iY, RGBQUAD &rgbPixel) { WORD wDummy; //takeinto account that DIBit raws are reversed vertically iY = (m_pBMI->bmiHeader.biHeight - 1) - iY; // GHO fix //iY = m_pBMI->bmiHeader.biHeight - iY; //assert pixel position AssertPosition( iX, iY ); //access the destination pixel int nRowBytes = m_pBMI->bmiHeader.biWidth * m_pBMI->bmiHeader.biBitCount; nRowBytes = ( (nRowBytes + 31) & (~31) ) / 8; switch( m_pBMI->bmiHeader.biBitCount ) { case 1: case 4: case 8: //do not support this operation; CDibException::Throw( CDibException::E_NOTSUPP ); break; case 16: wDummy = rgbPixel.rgbRed; wDummy = wDummy << 5; wDummy |= rgbPixel.rgbGreen; wDummy = wDummy << 5; wDummy |= rgbPixel.rgbBlue; *(LPWORD)(m_pBits + nRowBytes*iY + iX*2) = wDummy; break; case 24: *(LPRGBQUAD)(m_pBits + nRowBytes*iY + iX*3) = rgbPixel; break; case 32: *(LPRGBQUAD)(m_pBits + nRowBytes*iY + iX*4) = rgbPixel; break; } } DWORD CDib::Save(CFile& file) const { BITMAPFILEHEADER bmfHdr; // Header for Bitmap file DWORD dwDIBSize; if (m_pBMI == NULL) return 0; // Fill in the fields of the file header // Fill in file type (first 2 bytes must be "BM" for a bitmap) bmfHdr.bfType = DIB_HEADER_MARKER; // "BM" // Calculating the size of the DIB is a bit tricky (if we want to // do it right). The easiest way to do this is to call GlobalSize() // on our global handle, but since the size of our global memory may have // been padded a few bytes, we may end up writing out a few too // many bytes to the file (which may cause problems with some apps). // // So, instead let's calculate the size manually (if we can) // // First, find size of header plus size of color table. Since the // first DWORD in both BITMAPINFOHEADER and BITMAPCOREHEADER conains // the size of the structure, let's use this. dwDIBSize = m_pBMI->bmiHeader.biSize + PaletteSize(); // Partial Calculation // Now calculate the size of the image if ((m_pBMI->bmiHeader.biCompression == BI_RLE8) || (m_pBMI->bmiHeader.biCompression == BI_RLE4)) { // It's an RLE bitmap, we can't calculate size, so trust the // biSizeImage field dwDIBSize += m_pBMI->bmiHeader.biSizeImage; } else { DWORD dwBmBitsSize; // Size of Bitmap Bits only // It's not RLE, so size is Width (DWORD aligned) * Height dwBmBitsSize = WIDTHBYTES((m_pBMI->bmiHeader.biWidth)*((DWORD)m_pBMI->bmiHeader.biBitCount)) * m_pBMI->bmiHeader.biHeight; dwDIBSize += dwBmBitsSize; // Now, since we have calculated the correct size, why don't we // fill in the biSizeImage field (this will fix any .BMP files which // have this field incorrect). m_pBMI->bmiHeader.biSizeImage = dwBmBitsSize; } // Calculate the file size by adding the DIB size to sizeof(BITMAPFILEHEADER) bmfHdr.bfSize = dwDIBSize + BMIF_SIZE; bmfHdr.bfReserved1 = 0; bmfHdr.bfReserved2 = 0; /* * Now, calculate the offset the actual bitmap bits will be in * the file -- It's the Bitmap file header plus the DIB header, * plus the size of the color table. */ bmfHdr.bfOffBits = BMIF_SIZE + m_pBMI->bmiHeader.biSize + PaletteSize(); // Write the file header file.Write( (LPSTR)&bmfHdr, BMIF_SIZE ); DWORD dwBytesSaved = BMIF_SIZE; // Write the DIB header UINT nCount = sizeof(BITMAPINFO) + PaletteSize(); dwBytesSaved += nCount; file.Write(m_pBMI, nCount); // Write the DIB bits DWORD dwBytes = m_pBMI->bmiHeader.biBitCount * Width(); // Calculate the number of bytes per line if (dwBytes%32 == 0) dwBytes /= 8; else dwBytes = dwBytes/8 + (32-dwBytes%32)/8 + (((32-dwBytes%32)%8 > 0) ? 1 : 0); nCount = dwBytes * Height(); dwBytesSaved += nCount; //file.WriteHuge(m_pBits, nCount); file.Write(m_pBits, nCount); return dwBytesSaved; } DWORD CDib::Read(CFile& file, BOOL bFromResource) { DWORD dwReadBytes = 0; DWORD dwLength = (DWORD)file.GetLength(); // Ensures no memory leaks will occur Free(); BITMAPFILEHEADER bmfHeader; BITMAPINFOHEADER bmiHeader; if( !bFromResource ) { // Go read the DIB file header and check if it's valid. if( (dwReadBytes = file.Read((LPSTR)&bmfHeader, BMIF_SIZE)) != BMIF_SIZE) return 0; if(bmfHeader.bfType != DIB_HEADER_MARKER) return 0; } // Read DIB header. if( file.Read( &bmiHeader, BMIH_SIZE ) != BMIH_SIZE ) return 0; dwReadBytes += BMIH_SIZE; DWORD dwPalSize = NumColors( bmiHeader ) * sizeof RGBQUAD; m_pBMI = (LPBITMAPINFO) new BYTE[BMIH_SIZE + dwPalSize]; memcpy( m_pBMI, &bmiHeader, BMIH_SIZE ); // read palette data if( file.Read( m_pBMI->bmiColors, dwPalSize ) != dwPalSize ) return 0; dwReadBytes += dwPalSize; CreatePalette(); // Go read the bits. m_pBits = new BYTE[ dwLength - dwReadBytes + 0x200]; // GHO fix: you need some more space who knows why...? if (m_pBits == 0) return 0; if (file.Read( m_pBits, dwLength - dwReadBytes ) != (dwLength - dwReadBytes)) { delete m_pBMI; m_pBMI = NULL; delete m_pBits; m_pBits = NULL; return 0; } dwReadBytes = dwLength; return dwReadBytes; } DWORD CDib::ReadFromResource(UINT nResID) { DWORD dwResult = 0; // Load from resource HRSRC hbmres = FindResource( NULL, MAKEINTRESOURCE(nResID), RT_BITMAP ); CMemFile file; HGLOBAL hGlob; if (hbmres) { DWORD dwResSize = SizeofResource( NULL, hbmres ); file.Attach( (LPBYTE)LockResource( hGlob = LoadResource(NULL, hbmres) ), dwResSize ); dwResult = Read(file, TRUE); file.Detach(); DeleteObject( hGlob ); } return dwResult; } void CDib::Invalidate() { Free(); } BOOL CDib::CreatePalette() { if ( !IsValid() ) return FALSE; //get the number of colors in the DIB WORD wNumColors = NumColors( m_pBMI->bmiHeader ); BOOL bResult = TRUE; if (wNumColors != 0) { // allocate memory block for logical palette LPLOGPALETTE pLogPal = (LPLOGPALETTE) new BYTE[ sizeof(LOGPALETTE) + sizeof(PALETTEENTRY)*wNumColors ]; // if not enough memory, clean up and return NULL if( pLogPal == 0 ) return FALSE; // set version and number of palette entries pLogPal->palVersion = PALVERSION; pLogPal->palNumEntries = wNumColors; for (WORD i = 0; i < wNumColors; i++) { pLogPal->palPalEntry[i].peRed = m_pBMI->bmiColors[i].rgbRed; pLogPal->palPalEntry[i].peGreen = m_pBMI->bmiColors[i].rgbGreen; pLogPal->palPalEntry[i].peBlue = m_pBMI->bmiColors[i].rgbBlue; pLogPal->palPalEntry[i].peFlags = 0; } // create the palette and get handle to it if (m_pPalette) { m_pPalette->DeleteObject(); delete m_pPalette; } m_pPalette = new CPalette; bResult = m_pPalette->CreatePalette( pLogPal ); delete pLogPal; } return bResult; } void CDib::Free() { // Make sure all member data that might have been allocated is freed. if(m_pBMI) { delete m_pBMI; m_pBMI = NULL; } if(m_pBits) { delete m_pBits; m_pBits = NULL; } if(m_pPalette) { m_pPalette->DeleteObject(); delete m_pPalette; m_pPalette = NULL; } } HBITMAP CDib::CreateDDBitmap( HDC hDC ) { HBITMAP hBitmap = ::CreateDIBitmap( hDC, &m_pBMI->bmiHeader, CBM_INIT, m_pBits, (LPBITMAPINFO)m_pBMI, DIB_RGB_COLORS); ASSERT(hBitmap); return hBitmap; } HBITMAP CDib::CreateDDBitmap(CDC* pDC) { return CreateDDBitmap( pDC->GetSafeHdc() ); } BOOL CDib::Compress(CDC* pDC, BOOL bCompress ) { // 1. makes GDI bitmap from existing DIB // 2. makes a new DIB from GDI bitmap with compression // 3. cleans up the original DIB // 4. puts the new DIB in the object if((m_pBMI->bmiHeader.biBitCount != 4) && (m_pBMI->bmiHeader.biBitCount != 8)) return FALSE; // compression supported only for 4 bpp and 8 bpp DIBs TRACE(_T("Compress: original palette size = %d\n"), NumColors(m_pBMI->bmiHeader) ); HDC hdc = pDC->GetSafeHdc(); CPalette* pOldPalette = pDC->SelectPalette( m_pPalette, TRUE); HBITMAP hBitmap; // temporary if((hBitmap = CreateDDBitmap(pDC)) == NULL) return FALSE; int nSize = BMIF_SIZE + PaletteSize(); LPBITMAPINFO pBMI = (LPBITMAPINFO) new char[nSize]; memcpy(pBMI, &m_pBMI->bmiHeader, nSize); // new header if(bCompress) { switch (pBMI->bmiHeader.biBitCount) { case 4: pBMI->bmiHeader.biCompression = BI_RLE4; break; case 8: pBMI->bmiHeader.biCompression = BI_RLE8; break; default: ASSERT(FALSE); } // calls GetDIBits with null data pointer to get size of compressed DIB if(!::GetDIBits(pDC->m_hDC, hBitmap, 0, (UINT) pBMI->bmiHeader.biHeight, NULL, pBMI, DIB_RGB_COLORS)) { AfxMessageBox(_T("Unable to compress this DIB")); // probably a problem with the color table ::DeleteObject(hBitmap); delete[] pBMI; pDC->SelectPalette( pOldPalette, TRUE); return FALSE; } if (pBMI->bmiHeader.biSizeImage == 0) { AfxMessageBox(_T("Driver can't do compression")); ::DeleteObject(hBitmap); delete[] pBMI; pDC->SelectPalette( pOldPalette, TRUE); return FALSE; } else { m_pBMI->bmiHeader.biSizeImage = pBMI->bmiHeader.biSizeImage; } } else { pBMI->bmiHeader.biCompression = BI_RGB; // decompress // figure the image size from the bitmap width and height DWORD dwBytes = ((DWORD) pBMI->bmiHeader.biWidth * pBMI->bmiHeader.biBitCount) / 32; if(((DWORD) pBMI->bmiHeader.biWidth * pBMI->bmiHeader.biBitCount) % 32) { dwBytes++; } dwBytes *= 4; m_pBMI->bmiHeader.biSizeImage = dwBytes * pBMI->bmiHeader.biHeight; // no compression pBMI->bmiHeader.biSizeImage = m_pBMI->bmiHeader.biSizeImage; } // second GetDIBits call to make DIB LPBYTE lpImage = (LPBYTE) new char[m_pBMI->bmiHeader.biSizeImage]; VERIFY(::GetDIBits(pDC->m_hDC, hBitmap, 0, (UINT) pBMI->bmiHeader.biHeight, lpImage, pBMI, DIB_RGB_COLORS)); TRACE(_T("dib successfully created - height = %d\n"), pBMI->bmiHeader.biHeight); ::DeleteObject(hBitmap); Free(); m_pBMI = pBMI; m_pBits = lpImage; CreatePalette(); pDC->SelectPalette( pOldPalette, TRUE ); TRACE(_T("Compress: new palette size = %d\n"), NumColors(m_pBMI->bmiHeader) ); return TRUE; } ================================================ FILE: host/dxTabCtrl.cpp ================================================ // dxTabCtrl.cpp : implementation file // ///////////////////////////////////////////////////// // This class is provided as is and Ben Hill takes no // responsibility for any loss of any kind in connection // to this code. ///////////////////////////////////////////////////// // Is is meant purely as a educational tool and may // contain bugs. ///////////////////////////////////////////////////// // ben@shido.fsnet.co.uk // http://www.shido.fsnet.co.uk ///////////////////////////////////////////////////// // Thanks to a mystery poster in the C++ forum on // www.codeguru.com I can't find your name to say thanks // for your Control drawing code. If you are that person // thank you very much. I have been able to use some of // you ideas to produce this sample application. ///////////////////////////////////////////////////// #include "stdafx.h" #include "dxTabCtrl.h" #include "TabProgram.h" #include "TabHook.h" #include "TabDirectX.h" #include "TabDirectX2.h" #include "TabDirect3D.h" #include "TabInput.h" #include "TabTiming.h" #include "TabWindow.h" #include "TabOpenGL.h" #include "TabCompat.h" #include "TabColor.h" #include "TabLogs.h" #include "TabRegistry.h" #include "TabNotes.h" #include "TabSysLibs.h" #include "TabDebug.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif extern BOOL gbDebug; ///////////////////////////////////////////////////////////////////////////// // CDXTabCtrl CDXTabCtrl::CDXTabCtrl() { int i=0; m_tabPages[i++]=new CTabProgram; m_tabPages[i++]=new CTabHook; m_tabPages[i++]=new CTabWindow; m_tabPages[i++]=new CTabInput; m_tabPages[i++]=new CTabDirectX; m_tabPages[i++]=new CTabDirectX2; m_tabPages[i++]=new CTabDirect3D; m_tabPages[i++]=new CTabTiming; m_tabPages[i++]=new CTabLogs; m_tabPages[i++]=new CTabSysLibs; m_tabPages[i++]=new CTabCompat; m_tabPages[i++]=new CTabRegistry; m_tabPages[i++]=new CTabNotes; if (gbDebug) m_tabPages[i++]=new CTabDebug; m_nNumberOfPages=i; } CDXTabCtrl::~CDXTabCtrl() { for(int nCount=0; nCount < m_nNumberOfPages; nCount++){ delete m_tabPages[nCount]; } } void CDXTabCtrl::Init() { int i = 0; m_tabCurrent=0; m_tabPages[i++]->Create(IDD_TAB_PROGRAM, this); m_tabPages[i++]->Create(IDD_TAB_HOOK, this); m_tabPages[i++]->Create(IDD_TAB_OUTPUT, this); m_tabPages[i++]->Create(IDD_TAB_INPUT, this); m_tabPages[i++]->Create(IDD_TAB_DIRECTX, this); m_tabPages[i++]->Create(IDD_TAB_DIRECTX2, this); m_tabPages[i++]->Create(IDD_TAB_D3D, this); m_tabPages[i++]->Create(IDD_TAB_TIMING, this); m_tabPages[i++]->Create(IDD_TAB_LOG, this); m_tabPages[i++]->Create(IDD_TAB_SYSLIBS, this); m_tabPages[i++]->Create(IDD_TAB_COMPAT, this); m_tabPages[i++]->Create(IDD_TAB_REGISTRY, this); m_tabPages[i++]->Create(IDD_TAB_NOTES, this); if (gbDebug) m_tabPages[i++]->Create(IDD_TAB_DEBUG, this); for(int nCount=0; nCount < m_nNumberOfPages; nCount++){ m_tabPages[nCount]->ShowWindow(nCount ? SW_HIDE:SW_SHOW); } SetRectangle(); } void CDXTabCtrl::SetRectangle() { CRect tabRect, itemRect; int nX, nY, nXc, nYc; GetClientRect(&tabRect); GetItemRect(0, &itemRect); nX=itemRect.left; nY=itemRect.bottom+1; nXc=tabRect.right-itemRect.left-1; nYc=tabRect.bottom-nY-1; m_tabPages[0]->SetWindowPos(&wndTop, nX, nY, nXc, nYc, SWP_SHOWWINDOW); for(int nCount=1; nCount < m_nNumberOfPages; nCount++){ m_tabPages[nCount]->SetWindowPos(&wndTop, nX, nY, nXc, nYc, SWP_HIDEWINDOW); } } BEGIN_MESSAGE_MAP(CDXTabCtrl, CTabCtrl) //{{AFX_MSG_MAP(CDXTabCtrl) ON_WM_LBUTTONDOWN() //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CDXTabCtrl message handlers void CDXTabCtrl::OnLButtonDown(UINT nFlags, CPoint point) { CTabCtrl::OnLButtonDown(nFlags, point); if(m_tabCurrent != GetCurFocus()){ m_tabPages[m_tabCurrent]->ShowWindow(SW_HIDE); m_tabCurrent=GetCurFocus(); m_tabPages[m_tabCurrent]->ShowWindow(SW_SHOW); m_tabPages[m_tabCurrent]->SetFocus(); } } void CDXTabCtrl::SwitchToTab(int pos) { m_tabPages[m_tabCurrent]->ShowWindow(SW_HIDE); SetCurSel(pos); m_tabPages[pos]->ShowWindow(SW_SHOW); m_tabPages[pos]->SetFocus(); m_tabCurrent=GetCurFocus(); } void CDXTabCtrl::OnOK() { for(int nCount=0; nCount < m_nNumberOfPages; nCount++){ m_tabPages[nCount]->UpdateData(TRUE); } } ================================================ FILE: host/dxTabCtrl.h ================================================ #if !defined(AFX_MYTABCTRL_H__F3E8650F_019C_479F_9E0F_60FE1181F49F__INCLUDED_) #define AFX_MYTABCTRL_H__F3E8650F_019C_479F_9E0F_60FE1181F49F__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 // dxTabCtrl.h : header file // #include "resource.h" ///////////////////////////////////////////////////////////////////////////// // CDXTabCtrl window class CDXTabCtrl : public CTabCtrl { // Construction public: CDXTabCtrl(); CDialog *m_tabPages[14]; // this must match the total number of tab elements! int m_tabCurrent; int m_nNumberOfPages; enum { IDD = IDC_TABPANEL }; // Attributes public: // Operations public: void Init(); void SetRectangle(); void SwitchToTab(int); // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CDXTabCtrl) //}}AFX_VIRTUAL // Implementation public: virtual ~CDXTabCtrl(); void OnOK(); // Generated message map functions protected: //{{AFX_MSG(CDXTabCtrl) afx_msg void OnLButtonDown(UINT nFlags, CPoint point); //}}AFX_MSG DECLARE_MESSAGE_MAP() }; ///////////////////////////////////////////////////////////////////////////// //{{AFX_INSERT_LOCATION}} // Microsoft Visual C++ will insert additional declarations immediately before the previous line. #endif // !defined(AFX_MYTABCTRL_H__F3E8650F_019C_479F_9E0F_60FE1181F49F__INCLUDED_) ================================================ FILE: host/dxelevate.cpp ================================================ #include "stdafx.h" #include "dxwndhost.h" #include "MainFrm.h" #include "dxwndhostDoc.h" #include "dxwndhostView.h" extern BOOL IsProcessElevated(); extern BOOL IsUserInAdminGroup(); BOOL DxSelfElevate(CDxwndhostView *view) { BOOL const fInAdminGroup = IsUserInAdminGroup(); if(!fInAdminGroup) return TRUE; // Get and display the process elevation information. BOOL const fIsElevated = IsProcessElevated(); BOOL MustRestart; if(fIsElevated) return TRUE; MustRestart=MessageBoxLang(DXW_STRING_ADMINCAP, DXW_STRING_WARNING, MB_OKCANCEL | MB_ICONQUESTION); if(MustRestart==IDOK){ extern HANDLE GlobalLocker; // Autoelevation at startup has no HostView yet, but nothing to save either if (view && view->isUpdated){ if (MessageBoxLang(DXW_STRING_LISTUPDATE, DXW_STRING_WARNING, MB_YESNO | MB_ICONQUESTION)==IDYES) view->SaveConfigFile(); } CloseHandle(GlobalLocker); char szPath[MAX_PATH]; if (GetModuleFileName(NULL, szPath, ARRAYSIZE(szPath))) { // Launch itself as administrator. SHELLEXECUTEINFO sei = { sizeof(sei) }; char CurrentDir[MAX_PATH+1]; CString args; sei.lpVerb = "runas"; sei.lpFile = szPath; ::GetCurrentDirectory(MAX_PATH, CurrentDir); sei.lpDirectory = CurrentDir; //sei.hwnd = (HWND)this->GetMainWnd(); sei.hwnd = (HWND)NULL; // set to NULL to force the confirmation dialog on top of everything... sei.nShow = SW_NORMAL; args = ""; for(int i=1; i<=__argc; i++) { args += (LPCSTR)(__argv[i]); args += " "; } sei.lpParameters = args; if (!ShellExecuteEx(&sei)){ DWORD dwError = GetLastError(); if (dwError == ERROR_CANCELLED){ // The user refused the elevation. // Do nothing ... } } else{ exit(0); // Quit itself } } } return TRUE; } ================================================ FILE: host/dxwnd.manifest ================================================ ================================================ FILE: host/dxwndhost.cpp ================================================ // dxwndhost.cpp : Application and class definitions // #include "stdafx.h" #include "dxwndhost.h" #include "MainFrm.h" #include "dxwndhostDoc.h" #include "dxwndhostView.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif extern int KillProcByName(char *, BOOL, BOOL); ///////////////////////////////////////////////////////////////////////////// // CDxwndhostApp BEGIN_MESSAGE_MAP(CDxwndhostApp, CWinApp) //{{AFX_MSG_MAP(CDxwndhostApp) ON_COMMAND(ID_APP_ABOUT, OnAppAbout) ON_COMMAND(ID_HELP_VIEWHELP, OnViewHelp) //}}AFX_MSG_MAP // Basic file command ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew) ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // custom command line parsing: // CNewCommandLineInfo Class constructor // too do: eliminate nasty global variables.... UINT m_StartToTray = FALSE; UINT m_InitialState = DXW_ACTIVE; BOOL gbDebug = FALSE; BOOL gWarnOnExit = FALSE; BOOL gTransientMode = FALSE; BOOL gAutoHideMode = FALSE; BOOL gQuietMode = FALSE; BOOL gMustDie = FALSE; int iProgIndex; DWORD SysColors[32]; //char m_ConfigFileName[MAX_PATH+1] = "dxwnd.ini"; class CNewCommandLineInfo : public CCommandLineInfo { //public: // UINT m_StartToTray; // UINT m_InitialState; void ParseParam(LPCTSTR lpszParam, BOOL bFlag, BOOL bLast); }; BOOL LangSelected=FALSE; char LangString[20+1] = {0}; void CNewCommandLineInfo::ParseParam(LPCTSTR lpszParam, BOOL bFlag, BOOL bLast) { // syntax: // /t -- start minimized in tray icon // /i -- start in idle state // /d -- start in debug mode // /lang= -- loads the language resources in Resources_.dll extension // /c: -- loads config file instead of default dxwnd.ini // /e -- terminates (Ends) the active dxwnd session // /r: -- run the n-th game in configuration and terminate together with it // /a -- auto-hide mode while a game is running // /q -- quiet mode, no error/message dialog boxes if(bFlag) { CString sParam(lpszParam); if (sParam.MakeLower() == "t"){ m_StartToTray=TRUE; return; } if (sParam.MakeLower() == "i"){ m_InitialState=DXW_IDLE; return; } if (sParam.MakeLower() == "a"){ gAutoHideMode=TRUE; return; } if (sParam.MakeLower() == "debug"){ gbDebug = TRUE; return; } if (sParam.MakeLower().Left(5) == "lang="){ HMODULE ResLib; CString Lang; Lang = sParam.MakeLower().Right(2); ResLib=LoadLibrary("Resources_"+Lang+".dll"); if(ResLib) { AfxSetResourceHandle(ResLib); LangSelected=TRUE; } else MessageBoxEx(NULL, "Missing language \""+Lang+"\"\nUsing default language \"en\"", "Warning", MB_OK, NULL); //strcpy(LangString, sParam.MakeLower().Mid(5)); return; } if (sParam.Left(2).MakeLower() == "c:"){ strcpy_s(gInitPath, sizeof(gInitPath)-1, sParam.Mid(2,sizeof(gInitPath)-1)); return; } if (sParam.MakeLower() == "e"){ // Exit (kill) existing DxWnd session KillProcByName("DxWnd.exe", TRUE, FALSE); exit(0); } if (sParam.Left(2).MakeLower() == "r:"){ gTransientMode = TRUE; m_StartToTray=TRUE; char *p = (char *)sParam.GetString(); iProgIndex = atoi(&p[2]); return; } if (sParam.MakeLower() == "q"){ // (Q)uiet mode: no message dialogs on screen gQuietMode = TRUE; } } // Call the base class to ensure proper command line processing CCommandLineInfo::ParseParam(lpszParam, bFlag, bLast); } ///////////////////////////////////////////////////////////////////////////// // CDxwndhostApp Class constructor CDxwndhostApp::CDxwndhostApp() { } ///////////////////////////////////////////////////////////////////////////// // The only CDxwndhostApp object CDxwndhostApp theApp; ///////////////////////////////////////////////////////////////////////////// // CDxwndhostApp Class initialization BOOL CDxwndhostApp::InitInstance() { char InitPath[MAX_PATH]; AfxEnableControlContainer(); // standard initialization // DDE file open: Parse command line for standard shell commands and so on. // Parse command line for standard shell commands, DDE, file open // and user-defined flags. The CCommandLine class has been replaced CNewCommandLineInfo cmdInfo; ParseCommandLine(cmdInfo); GetCurrentDirectory(MAX_PATH, InitPath); strcat_s(InitPath, sizeof(InitPath), "\\dxwnd.ini"); //CompatibilityMinLevel = GetPrivateProfileInt("window", "compatminlevel", 0, InitPath); if(!gbDebug) gbDebug = GetPrivateProfileInt("window", "debug", 0, InitPath); // debug flag set from config file if(!gAutoHideMode) gAutoHideMode = GetPrivateProfileInt("window", "autohide", 0, InitPath); // debug flag set from config file gWarnOnExit = GetPrivateProfileInt("window", "warnonexit", 0, InitPath); // WarnOnExit flag set from config file // Register the document template. CSingleDocTemplate* pDocTemplate; pDocTemplate = new CSingleDocTemplate( gbDebug ? IDR_MAINFRAME_EX : IDR_MAINFRAME, RUNTIME_CLASS(CDxwndhostDoc), RUNTIME_CLASS(CMainFrame), // SDI main frame window RUNTIME_CLASS(CDxwndhostView)); AddDocTemplate(pDocTemplate); if(!LangSelected){ LANGID LangId; char LangString[20+1]; GetPrivateProfileString("window", "lang", "", LangString, 20+1, InitPath); if(!strcmp(LangString, "default") || !strlen(LangString)){ // if no specification, or lang=default // do nothing } if(!strcmp(LangString, "automatic")){ // lang=automatic HMODULE ResLib; LangId=GetUserDefaultUILanguage(); // other codes to be implemented: // 409 (2-9): english (default) // 411 (2-11): japanese switch(LangId & 0x1FF){ case 0x04: // chinese family ResLib=LoadLibrary("Resources_CN.dll"); if(ResLib) AfxSetResourceHandle(ResLib); else MessageBoxEx(NULL, "Missing language \"CN\"\nUsing default language \"en\"", "Warning", MB_OK, NULL); break; case 0x10: // 410 - italian, 810 - switzerland italian ResLib=LoadLibrary("Resources_IT.dll"); if(ResLib) AfxSetResourceHandle(ResLib); else MessageBoxEx(NULL, "Missing language \"IT\"\nUsing default language \"en\"", "Warning", MB_OK, NULL); break; case 0x19: // 419 - russian ResLib=LoadLibrary("Resources_RU.dll"); if(ResLib) AfxSetResourceHandle(ResLib); else MessageBoxEx(NULL, "Missing language \"RU\"\nUsing default language \"en\"", "Warning", MB_OK, NULL); break; default: //char sBuf[81]; //sprintf(sBuf, "Got Lang=%x(%x-%x)", LangId, LangId>>9, (LangId & 0x1FF)); //MessageBox(NULL, sBuf, "LangId", MB_OK); break; } } if(strcmp(LangString, "automatic") && strcmp(LangString, "default") && strlen(LangString)) { // lang=something different from both automatic and default HMODULE ResLib; CString Lang; Lang.SetString(LangString); ResLib=LoadLibrary("Resources_"+Lang+".dll"); if(ResLib) AfxSetResourceHandle(ResLib); else MessageBoxEx(NULL, "Missing language \""+Lang+"\"\nUsing default language \"en\"", "Warning", MB_OK, NULL); } } // Dispatch commands specified on the command line. if (!ProcessShellCommand(cmdInfo)) return FALSE; m_pMainWnd->SetWindowText("DXWnd"); RECT rect; m_pMainWnd->GetWindowRect(&rect); rect.right = rect.left + 320; rect.bottom = rect.top + 200; //m_pMainWnd->MoveWindow(&rect, TRUE); m_pMainWnd->ShowWindow(SW_SHOW); m_pMainWnd->UpdateWindow(); BOOL bCheckAdminRights = GetPrivateProfileInt("window", "checkadmin", 0, InitPath); extern BOOL DxSelfElevate(CDxwndhostView *); OSVERSIONINFO osver = { sizeof(osver) }; // self elevation at start if configured for the whole DxWnd session if (bCheckAdminRights && (GetVersionEx(&osver)) && (osver.dwMajorVersion >= 6)){ DxSelfElevate((CDxwndhostView *)NULL); } // save system colors for later recovery for(int index=COLOR_SCROLLBAR; index<=COLOR_MENUBAR; index++) SysColors[index]=0; // initialize for(int index=COLOR_SCROLLBAR; index<=COLOR_MENUBAR; index++) SysColors[index]=::GetSysColor(index); return TRUE; } ///////////////////////////////////////////////////////////////////////////// // Used in application version information dialog CAboutDlg class CAboutDlg : public CDialog { public: CAboutDlg(); virtual BOOL OnInitDialog(); // Data Dialog //{{AFX_DATA(CAboutDlg) enum { IDD = IDD_ABOUTBOX }; CString m_Version; CString m_Thanks; //}}AFX_DATA // ClassWizard generated virtual function overrides. //{{AFX_VIRTUAL(CAboutDlg) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV Support virtual void OnTimer(UINT_PTR); //}}AFX_VIRTUAL // Implementation protected: //{{AFX_MSG(CAboutDlg) // There is no message handler. //}}AFX_MSG DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) { //{{AFX_DATA_INIT(CAboutDlg) m_Version = _T(""); //}}AFX_DATA_INIT } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CAboutDlg) DDX_Text(pDX, IDC_VERSION, m_Version); DDX_Text(pDX, IDC_THANKS, m_Thanks); //}}AFX_DATA_MAP } #define ID_HELP_SCROLL 999 BOOL CAboutDlg::OnInitDialog() { CDialog::OnInitDialog(); SetTimer(ID_HELP_SCROLL, 600, NULL); return TRUE; // return TRUE unless you set the focus to a control } CString Thanks[] = { "Aqrit for proxies, many tweaks & hot patching schema", "AxXxB and Old-Games.ru teammates for ZBUFFER fix", "Fabian \"ryg\" Giesen & others for DXT1/5 compression", "FunkyFr3sh for fixes in proxy dll", "Gsky916 for chinese translation", "Jari Kommpa for ddraw wrapper source and d3d hints", "Jiri Dvorak for his d3d8 wrapper with 16bpp emulation", "Luigi Auriemma for injection syncronization", "Michael Koch for d3d9 proxy dll", "Narzoul for sharing DC handling code", "Olly (www.ollydbg.de) for OllyDBG & disasm lib", "RomSteady for his kind encouragement", "Ryan Geiss for his bilinear filter code", "TigerhawkT3 for html manual pages", "Tsuda Kageyu for MinHook dll", ""}; #define THANKSKOUNT 15 void CAboutDlg::OnTimer(UINT_PTR nIDEvent) { static int i=0; int j; CString RolledThanks; for(j=i; jSetDlgItemTextA(IDC_THANKS, RolledThanks); i=(i+1)%THANKSKOUNT; } BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) ON_WM_TIMER() END_MESSAGE_MAP() // The application command to run the dialog void CDxwndhostApp::OnAppAbout() { char tmp[32], ver[32]; CAboutDlg aboutDlg; GetDllVersion(tmp); sprintf(ver, "DLL version %s", tmp); aboutDlg.m_Version = ver; aboutDlg.m_Thanks = ""; // aboutDlg.m_Thanks = "\ //Aqrit for proxies, many tweaks & hot patching schema\n\ //AxXxB and Old-Games.ru teammates for ZBUFFER fix\n\ //Fabian \"ryg\" Giesen & others for DXT1/5 compression\n\ //FunkyFr3sh for fixes in proxy dll\n\ //Gsky916 for chinese translation\n\ //Jari Kommpa for ddraw wrapper source and d3d hints\n\ //Jiri Dvorak for his d3d8 wrapper with 16bpp emulation\n\ //Luigi Auriemma for injection syncronization\n\ //Michael Koch for d3d9 proxy dll\n\ //Narzoul for sharing DC handling code\n\ //Olly (www.ollydbg.de) for OllyDBG & disasm lib\n\ //RomSteady for his kind encouragement\n\ //Ryan Geiss for his bilinear filter code\n\ //TigerhawkT3 for html manual pages\n\ //Tsuda Kageyu for MinHook dll\n\ //"; aboutDlg.DoModal(); aboutDlg.KillTimer(ID_HELP_SCROLL); } void CDxwndhostApp::OnViewHelp() { HINSTANCE ret; char sHelpPath[MAX_PATH]; GetPrivateProfileString("window", "help", ".\\help\\DxWnd.html", sHelpPath, MAX_PATH, gInitPath); ret=ShellExecute(NULL, "open", sHelpPath, NULL, NULL, SW_SHOWNORMAL); if((DWORD)ret<=32){ char *m; switch((DWORD)ret){ case 0: m="Out of memory resources"; break; case ERROR_BAD_FORMAT: m="Invalid .exe file"; break; case SE_ERR_ACCESSDENIED: m="Access denied"; break; case SE_ERR_ASSOCINCOMPLETE: m="File name association incomplete or invalid"; break; case SE_ERR_DDEBUSY: m="DDE busy"; break; case SE_ERR_DDEFAIL: m="DDE failed"; break; case SE_ERR_DDETIMEOUT: m="DDE timed out"; break; case SE_ERR_DLLNOTFOUND: m="DLL not found"; break; case SE_ERR_FNF: m="File not found"; break; case SE_ERR_NOASSOC: m="No association with file extension"; break; case SE_ERR_OOM: m="Not enough memory"; break; case SE_ERR_PNF: m="Path not found"; break; case SE_ERR_SHARE: m="Sharing violation"; break; default: m="Unknown error"; break; } MessageBox(0, m, "DxWnd error", MB_ICONEXCLAMATION|MB_OK); } } ///////////////////////////////////////////////////////////////////////////// // CDxwndhostApp Message Handler char *GetTSCaption(int shift) { static char *sTSCaption[17]={ "x16","x12","x8","x6", "x4","x3","x2","x1.5", "x1", ":1.5",":2",":3",":4", ":6",":8",":12",":16"}; if (shift<-8 || shift>8) return "???"; return sTSCaption[shift+8]; } ================================================ FILE: host/dxwndhost.h ================================================ // dxwndhost.h : DXWNDHOST Application's main header file // #if !defined(AFX_DXWNDHOST_H__C68B92A2_C45F_4B59_986D_5BBC6BAD3AD8__INCLUDED_) #define AFX_DXWNDHOST_H__C68B92A2_C45F_4B59_986D_5BBC6BAD3AD8__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #ifndef __AFXWIN_H__ #error include 'stdafx.h' before including this file for PCH #endif #include "resource.h" // Main symbols extern int MessageBoxLang(UINT, UINT, UINT); extern int MessageBoxLangArg(UINT, UINT, UINT, ...); // DxWnd host app private data // fields here are associated to TARGETMAP records, but need not to be passed // to the dxwnd hook callback, so they are left in a separate array to save // the (limited) IPC space and allow for more record entryes (currently 255). #define MAX_NOTES 1024 #define MAX_REGISTRY 2048 #define MAX_TITLE 80 typedef struct PRIVATEMAP { char title[MAX_TITLE+1]; char launchpath[MAX_PATH+1]; char startfolder[MAX_PATH+1]; char *notes; char *registry; }PRIVATEMAP; typedef struct { TARGETMAP *TM; PRIVATEMAP *PM; char *ExePath; } ThreadInfo_Type; ThreadInfo_Type; extern char gInitPath[MAX_PATH+1]; extern void OutTrace(const char *, ...); ///////////////////////////////////////////////////////////////////////////// // CDxwndhostApp: // For the definition of this class action please see the file dxwndhost.cpp. // class CDxwndhostApp : public CWinApp { public: CDxwndhostApp(); // Override // ClassWizard Generates a virtual function overrides. //{{AFX_VIRTUAL(CDxwndhostApp) public: virtual BOOL InitInstance(); //}}AFX_VIRTUAL // Implementation //{{AFX_MSG(CDxwndhostApp) afx_msg void OnAppAbout(); afx_msg void OnViewHelp(); //}}AFX_MSG DECLARE_MESSAGE_MAP() }; ///////////////////////////////////////////////////////////////////////////// //{{AFX_INSERT_LOCATION}} // Microsoft Visual C++ Will insert additional declarations immediately before the previous line. #endif // !defined(AFX_DXWNDHOST_H__C68B92A2_C45F_4B59_986D_5BBC6BAD3AD8__INCLUDED_) ================================================ FILE: host/dxwndhost.vs2008.sln ================================================  Microsoft Visual Studio Solution File, Format Version 10.00 # Visual Studio 2008 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dxwndhost", "dxwndhost.vs2008.vcproj", "{FD0B0234-8EC5-43C0-A384-1B881DD3D925}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Release|Win32 = Release|Win32 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {FD0B0234-8EC5-43C0-A384-1B881DD3D925}.Debug|Win32.ActiveCfg = Debug|Win32 {FD0B0234-8EC5-43C0-A384-1B881DD3D925}.Debug|Win32.Build.0 = Debug|Win32 {FD0B0234-8EC5-43C0-A384-1B881DD3D925}.Release|Win32.ActiveCfg = Release|Win32 {FD0B0234-8EC5-43C0-A384-1B881DD3D925}.Release|Win32.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal ================================================ FILE: host/dxwndhost.vs2008.vcproj ================================================ ================================================ FILE: host/dxwndhostDoc.cpp ================================================ // dxwndhostDoc.cpp : CDxwndhostDoc Define the behavior of the class. // #include "stdafx.h" #include "dxwndhost.h" #include "dxwndhostDoc.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CDxwndhostDoc IMPLEMENT_DYNCREATE(CDxwndhostDoc, CDocument) BEGIN_MESSAGE_MAP(CDxwndhostDoc, CDocument) //{{AFX_MSG_MAP(CDxwndhostDoc) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CDxwndhostDoc class constructor / destructor CDxwndhostDoc::CDxwndhostDoc() { } CDxwndhostDoc::~CDxwndhostDoc() { } BOOL CDxwndhostDoc::OnNewDocument() { if (!CDocument::OnNewDocument()) return FALSE; return TRUE; } ///////////////////////////////////////////////////////////////////////////// // CDxwndhostDoc Serialization void CDxwndhostDoc::Serialize(CArchive& ar) { if (ar.IsStoring()) { } else { } } ///////////////////////////////////////////////////////////////////////////// // CDxwndhostDoc Diagnostic Class #ifdef _DEBUG void CDxwndhostDoc::AssertValid() const { CDocument::AssertValid(); } void CDxwndhostDoc::Dump(CDumpContext& dc) const { CDocument::Dump(dc); } #endif //_DEBUG ///////////////////////////////////////////////////////////////////////////// // CDxwndhostDoc Command ================================================ FILE: host/dxwndhostDoc.h ================================================ // dxwndhostDoc.h : CDxwndhostDoc class definitions and interface declarations. // ///////////////////////////////////////////////////////////////////////////// #if !defined(AFX_DXWNDHOSTDOC_H__07C9FF34_8B9B_49CC_BE82_B76813FE88FE__INCLUDED_) #define AFX_DXWNDHOSTDOC_H__07C9FF34_8B9B_49CC_BE82_B76813FE88FE__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 class CDxwndhostDoc : public CDocument { protected: // Create from serialization only features. CDxwndhostDoc(); DECLARE_DYNCREATE(CDxwndhostDoc) // Attributes public: // Operation public: //Override // ClassWizard Generates a virtual function overrides. //{{AFX_VIRTUAL(CDxwndhostDoc) public: virtual BOOL OnNewDocument(); virtual void Serialize(CArchive& ar); //}}AFX_VIRTUAL // Implementation public: virtual ~CDxwndhostDoc(); #ifdef _DEBUG virtual void AssertValid() const; virtual void Dump(CDumpContext& dc) const; #endif protected: // Generated message map functions protected: //{{AFX_MSG(CDxwndhostDoc) //}}AFX_MSG DECLARE_MESSAGE_MAP() }; ///////////////////////////////////////////////////////////////////////////// //{{AFX_INSERT_LOCATION}} // Microsoft Visual C++ will insert additional declarations immediately before the previous line. #endif // !defined(AFX_DXWNDHOSTDOC_H__07C9FF34_8B9B_49CC_BE82_B76813FE88FE__INCLUDED_) ================================================ FILE: host/dxwndhostView.cpp ================================================ // dxwndhostView.cpp : CDxwndhostView Define the behavior of the class. // #include "stdafx.h" #include "shlwapi.h" #include "TlHelp32.h" #include "CoolUtils.h" #include "dxwndhost.h" #include "dxwndhostDoc.h" #include "dxwndhostView.h" #include "TargetDlg.h" #include "SystemTray.h" #include "StatusDialog.h" #include "DesktopDialog.h" #include "PaletteDialog.h" #include "TimeSliderDialog.h" #include "VJoyDialog.h" #include "ShimsDialog.h" #include "ViewFlagsDialog.h" #include "CGlobalSettings.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif #define WM_ICON_NOTIFY WM_APP+10 #define strcasecmp lstrcmpi extern UINT m_StartToTray; extern UINT m_InitialState; //extern char m_ConfigFileName[MAX_PATH+1]; extern BOOL Inject(DWORD, const char *); extern int KillProcByName(char *, BOOL, BOOL); extern BOOL gTransientMode; extern BOOL gAutoHideMode; extern BOOL gbDebug; extern BOOL gMustDie; extern int iProgIndex; PRIVATEMAP *pTitles; // global ptr: get rid of it!! TARGETMAP *pTargets; // idem. #define LOCKINJECTIONTHREADS char gInitPath[MAX_PATH+1] = ""; // don't put it into the class because it must be used after destructor char gExportPath[MAX_PATH+1]; CWnd *pParent; // beware: it must operate upon count+1 sized arrays char *strnncpy(char *dest, char *src, size_t count) { dest[count]=0; return strncpy(dest, src, count); } static char *Escape(char *s, char **dest) { if(!*dest) *dest=(char *)malloc(strlen(s)+100); else *dest=(char *)realloc(*dest, strlen(s)+100); char *t = *dest; for(; *s; s++){ switch(*s){ case '\n': *t++ = '\\'; *t++ = 'n'; break; case '\r': break; default: *t++ = *s; break; } } *t=0; return *dest; } static char *Unescape(char *s, char **dest) { if(!*dest) *dest=(char *)malloc(strlen(s)+100); else *dest=(char *)realloc(*dest, strlen(s)+100); char *t = *dest; for(; *s; s++){ if((*s=='\\') && (*(s+1)=='n')){ *t++ = '\r'; *t++ = '\n'; s++; } else{ *t++ = *s; } } *t=0; return *dest; } void GetFolderFromPath(char *path) { for(char *c=&path[strlen(path)-1]; (c>path) && (*c!='\\'); c--) *c=0; } ///////////////////////////////////////////////////////////////////////////// // CDxwndhostView IMPLEMENT_DYNCREATE(CDxwndhostView, CListView) BEGIN_MESSAGE_MAP(CDxwndhostView, CListView) //{{AFX_MSG_MAP(CDxwndhostView) ON_NOTIFY_REFLECT(NM_DBLCLK, OnDblclk) ON_COMMAND(ID_EXPLORE, OnExplore) ON_COMMAND(ID_LOG_VIEW, OnViewLog) ON_COMMAND(ID_LOG_DELETE, OnDeleteLog) ON_COMMAND(ID_TASK_KILL, OnKill) ON_COMMAND(ID_TASK_PAUSE, OnPause) ON_COMMAND(ID_TASK_RESUME, OnResume) ON_COMMAND(ID_WINDOW_MINIMIZE, OnWindowMinimize) ON_COMMAND(ID_WINDOW_RESTORE, OnWindowRestore) ON_COMMAND(ID_WINDOW_CLOSE, OnWindowClose) ON_COMMAND(ID_WINDOW_MINIMIZE, OnWindowMinimize) ON_COMMAND(ID_TASKBAR_HIDE, OnTaskbarHide) ON_COMMAND(ID_TASKBAR_SHOW, OnTaskbarShow) ON_COMMAND(ID_MODIFY, OnModify) ON_COMMAND(ID_ADD, OnAdd) ON_COMMAND(ID_PDUPLICATE, OnDuplicate) ON_COMMAND(ID_PEXPORT, OnExport) ON_COMMAND(ID_PKILL, OnProcessKill) ON_COMMAND(ID_PKILLALL, OnProcessKillAll) ON_COMMAND(ID_FILE_IMPORT, OnImport) ON_COMMAND(ID_DELETE, OnDelete) ON_COMMAND(ID_FILE_SORTPROGRAMSLIST, OnSort) ON_COMMAND(ID_EDIT_GLOBALSETTINGS, OnGlobalSettings) ON_COMMAND(ID_OPTIONS_EXPERTMODE, OnExpertModeToggle) ON_COMMAND(ID_FILE_CLEARALLLOGS, OnClearAllLogs) ON_COMMAND(ID_FILE_GOTOTRAYICON, OnGoToTrayIcon) ON_COMMAND(ID_FILE_SAVE, OnSaveFile) ON_COMMAND(ID_HOOK_START, OnHookStart) ON_COMMAND(ID_HOOK_STOP, OnHookStop) ON_COMMAND(ID_DXAPP_EXIT, OnExit) ON_COMMAND(ID_RUN, OnRun) ON_COMMAND(ID_TRAY_RESTORE, OnTrayRestore) ON_COMMAND(ID_VIEW_STATUS, OnViewStatus) ON_COMMAND(ID_VIEW_SHIMS, OnViewShims) ON_COMMAND(ID_VIEW_DESKTOP, OnViewDesktop) ON_COMMAND(ID_VIEW_PALETTE, OnViewPalette) ON_COMMAND(ID_VIEW_TIMESLIDER, OnViewTimeSlider) ON_COMMAND(ID_VIEW_VIRTUALJOYSTICK, OnViewVirtualJoystick) ON_COMMAND(ID_DESKTOPCOLORDEPTH_8BPP, OnDesktopcolordepth8bpp) ON_COMMAND(ID_DESKTOPCOLORDEPTH_16BPP, OnDesktopcolordepth16bpp) ON_COMMAND(ID_DESKTOPCOLORDEPTH_24BPP, OnDesktopcolordepth24bpp) ON_COMMAND(ID_DESKTOPCOLORDEPTH_32BPP, OnDesktopcolordepth32bpp) ON_COMMAND(ID_TOOLS_RECOVERSCREENMODE, OnRecoverScreenMode) ON_COMMAND(ID_TOOLS_CLEARCOMPATIBILITYFLAGS, OnClearCompatibilityFlags) ON_COMMAND(ID_TOOLS_RECOVERSYSTEMCOLORS, OnRecoverSystemColors) ON_COMMAND(ID_MOVE_TOP, OnMoveTop) ON_COMMAND(ID_MOVE_UP, OnMoveUp) ON_COMMAND(ID_MOVE_DOWN, OnMoveDown) ON_COMMAND(ID_MOVE_BOTTOM, OnMoveBottom) ON_COMMAND(ID_VIEW_FLAGS, OnViewFlags) ON_WM_RBUTTONDOWN() ON_WM_HOTKEY() ON_WM_DROPFILES() //}}AFX_MSG_MAP END_MESSAGE_MAP() // v2.1.68: dialog box for status check. BOOL CheckStatus() { if(GetHookStatus(NULL)==DXW_RUNNING){ MessageBoxLang(DXW_STRING_WAITTASK, DXW_STRING_WARNING, MB_OK | MB_ICONEXCLAMATION); return TRUE; } return FALSE; } // v2.1.78: recover desktop settings. static void RevertScreenChanges(DEVMODE *InitDevMode) { DEVMODE CurDevMode; EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &CurDevMode); if ((CurDevMode.dmPelsHeight != InitDevMode->dmPelsHeight) || (CurDevMode.dmPelsWidth != InitDevMode->dmPelsWidth) || (CurDevMode.dmBitsPerPel != InitDevMode->dmBitsPerPel)){ if (MessageBoxLang(DXW_STRING_RESTORE, DXW_STRING_WARNING, MB_YESNO | MB_ICONQUESTION)==IDYES) ChangeDisplaySettings(InitDevMode, 0); } } void SetTargetFromDlg(TARGETMAP *t, CTargetDlg *dlg) { strcpy_s(t->path, sizeof(t->path), dlg->m_FilePath); strcpy_s(t->module, sizeof(t->module), dlg->m_Module); strcpy_s(t->OpenGLLib, sizeof(t->OpenGLLib), dlg->m_OpenGLLib); if(dlg->m_DXVersion > 1) dlg->m_DXVersion += 5; t->dxversion = dlg->m_DXVersion; t->monitorid = (dlg->m_MonitorId == -1) ? -1 : dlg->m_MonitorId - 1; t->MaxDdrawInterface = dlg->m_MaxDdrawInterface+1; t->SlowRatio = dlg->m_SlowRatio; t->coordinates = dlg->m_Coordinates; t->flags = 0; t->flags2 = 0; t->flags3 = 0; t->flags4 = 0; t->flags5 = 0; t->flags6 = 0; t->flags7 = 0; t->flags8 = 0; t->flags9 = 0; t->flags10 = 0; t->tflags = 0; t->dflags = 0; if(dlg->m_UnNotify) t->flags |= UNNOTIFY; if(dlg->m_Windowize) t->flags2 |= WINDOWIZE; if(dlg->m_HookDLLs) t->flags3 |= HOOKDLLS; if(dlg->m_AnsiWide) t->flags5 |= ANSIWIDE; if(dlg->m_HookNoRun) t->flags7 |= HOOKNORUN; if(dlg->m_CopyNoShims) t->flags7 |= COPYNOSHIMS; if(dlg->m_HookNoUpdate) t->flags7 |= HOOKNOUPDATE; if(dlg->m_SequencedIAT) t->flags8 |= SEQUENCEDIAT; if(dlg->m_TerminateOnClose) t->flags6 |= TERMINATEONCLOSE; if(dlg->m_ConfirmOnClose) t->flags6 |= CONFIRMONCLOSE; if(dlg->m_EmulateRegistry) t->flags3 |= EMULATEREGISTRY; if(dlg->m_OverrideRegistry) t->flags4 |= OVERRIDEREGISTRY; if(dlg->m_Wow64Registry) t->flags6 |= WOW64REGISTRY; if(dlg->m_Wow32Registry) t->flags6 |= WOW32REGISTRY; if(dlg->m_HookEnabled) t->flags3 |= HOOKENABLED; if(dlg->m_NeedAdminCaps) t->flags |= NEEDADMINCAPS; if(dlg->m_NoBanner) t->flags2 |= NOBANNER; if(dlg->m_HotPatch) t->flags4 |= HOTPATCH; if(dlg->m_FullScreenOnly) t->flags3 |= FULLSCREENONLY; if(dlg->m_ShowHints) t->flags7 |= SHOWHINTS; if(dlg->m_BackgroundPriority) t->flags8 |= BACKGROUNDPRIORITY; if(dlg->m_PeekAllMessages) t->flags3 |= PEEKALLMESSAGES; if(dlg->m_NoWinPosChanges) t->flags5 |= NOWINPOSCHANGES; if(dlg->m_MessagePump) t->flags5 |= MESSAGEPUMP; if(dlg->m_ClipMenu) t->flags8 |= CLIPMENU; switch(dlg->m_InjectionMode){ case 0: break; case 1: t->flags2 |= STARTDEBUG; break; case 2: t->flags7 |= INJECTSUSPENDED; break; } switch(dlg->m_DxEmulationMode){ case 0: break; case 1: t->flags |= EMULATEBUFFER; break; case 2: t->flags |= LOCKEDSURFACE; break; case 3: t->flags |= EMULATESURFACE; break; case 4: t->flags5 |= HYBRIDMODE; break; case 5: t->flags5 |= GDIMODE; break; } switch(dlg->m_InitColorDepth){ case 0: break; case 1: t->flags2 |= INIT8BPP; break; case 2: t->flags2 |= INIT16BPP; break; case 3: t->flags7 |= INIT24BPP; break; case 4: t->flags7 |= INIT32BPP; break; } switch(dlg->m_DxFilterMode){ case 0: break; case 1: t->flags4 |= BILINEAR2XFILTER; break; case 2: t->flags5 |= BILINEARFILTER; break; } switch(dlg->m_DCEmulationMode){ case 0: break; case 1: t->flags2 |= GDISTRETCHED; break; case 2: t->flags3 |= GDIEMULATEDC; break; case 3: t->flags6 |= SHAREDDC; break; } switch(dlg->m_ResTypes){ case 0: t->flags4 |= SUPPORTSVGA; break; case 1: t->flags4 |= SUPPORTHDTV; break; case 2: t->flags4 |= NATIVERES; break; } switch(dlg->m_MouseVisibility){ case 0: break; case 1: t->flags |= HIDEHWCURSOR; break; case 2: t->flags2 |= SHOWHWCURSOR; break; } switch(dlg->m_MouseClipper){ case 0: break; case 1: t->flags |= DISABLECLIPPING; break; case 2: t->flags |= CLIPCURSOR; break; case 3: t->flags |= CLIPCURSOR; t->flags8 |= CLIPLOCKED; break; } switch(dlg->m_OffendingMessages){ case 0: break; case 1: t->flags3 |= FILTERMESSAGES; break; case 2: t->flags3 |= DEFAULTMESSAGES; break; } switch(dlg->m_TextureHandling){ case 0: break; case 1: t->flags5 |= TEXTUREHIGHLIGHT; break; case 2: t->flags5 |= TEXTUREDUMP; break; case 3: t->flags5 |= TEXTUREHACK; break; case 4: t->flags5 |= TEXTURETRANSP; break; } switch(dlg->m_SonProcessMode){ case 0: break; case 1: t->flags4 |= SUPPRESSCHILD; break; case 2: t->flags5 |= ENABLESONHOOK; break; case 3: t->flags5 |= INJECTSON; break; } switch(dlg->m_LogMode){ case 0: break; case 1: t->tflags |= (OUTTRACE|ERASELOGFILE); break; case 2: t->tflags |= OUTTRACE; break; case 3: t->tflags |= (OUTTRACE|OUTSEPARATED); break; } switch(dlg->m_WinMovementType){ case 0: break; case 1: t->flags |= LOCKWINPOS; break; case 2: t->flags |= LOCKWINPOS; t->flags2 |= LOCKEDSIZE; break; case 3: t->flags |= LOCKWINPOS; t->flags7 |= ANCHORED; break; } switch(dlg->m_VSyncMode){ case 0: break; case 1: t->flags8 |= FORCEVSYNC; break; case 2: t->flags8 |= FORCENOVSYNC; break; } switch(dlg->m_VSyncImpl){ case 0: break; case 1: t->flags8 |= VSYNCSCANLINE; break; case 2: t->flags |= SAVELOAD; break; } switch(dlg->m_WaitMode){ case 0: break; case 1: t->flags8 |= FORCEWAIT; break; case 2: t->flags8 |= FORCENOWAIT; break; } switch(dlg->m_ClipperMode){ case 0: break; case 1: t->flags3 |= FORCECLIPPER; break; case 2: t->flags |= SUPPRESSCLIPPING; break; } switch(dlg->m_TextureFileFormat){ case 0: break; case 1: t->flags8 |= RAWFORMAT; break; case 2: t->flags8 |= DDSFORMAT; break; } switch(dlg->m_WindowStyle){ case 0: break; case 1: t->flags2 |= MODALSTYLE; break; case 2: t->flags |= FIXWINFRAME; break; case 3: t->flags9 |= FIXTHINFRAME; break; } if(dlg->m_HookDI) t->flags |= HOOKDI; if(dlg->m_HookDI8) t->flags |= HOOKDI8; if(dlg->m_EmulateRelMouse) t->flags6 |= EMULATERELMOUSE; if(dlg->m_SkipDevTypeHID) t->flags7 |= SKIPDEVTYPEHID; if(dlg->m_SuppressDIErrors) t->flags7 |= SUPPRESSDIERRORS; if(dlg->m_SharedKeyboard) t->flags7 |= SHAREDKEYBOARD; if(dlg->m_ModifyMouse) t->flags |= MODIFYMOUSE; if(dlg->m_VirtualJoystick) t->flags6 |= VIRTUALJOYSTICK; if(dlg->m_Unacquire) t->flags6 |= UNACQUIRE; if(dlg->m_OutDebug) t->tflags |= OUTDEBUG; if(dlg->m_CursorTrace) t->tflags |= OUTCURSORTRACE; if(dlg->m_OutDebugString) t->tflags |= OUTDEBUGSTRING; if(dlg->m_AddTimeStamp) t->tflags |= ADDTIMESTAMP; if(dlg->m_AddRelativeTime) t->tflags |= ADDRELATIVETIME; if(dlg->m_OutWinMessages) t->tflags |= OUTWINMESSAGES; if(dlg->m_OutDWTrace) t->tflags |= OUTDXWINTRACE; if(dlg->m_OutOGLTrace) t->tflags |= OUTOGLTRACE; if(dlg->m_OutHexTrace) t->tflags |= OUTHEXTRACE; if(dlg->m_OutWGTrace) t->tflags |= OUTWINGTRACE; if(dlg->m_OutDDRAWTrace) t->tflags |= OUTDDRAWTRACE; if(dlg->m_OutD3DTrace) t->tflags |= OUTD3DTRACE; if(dlg->m_AssertDialog) t->tflags |= ASSERTDIALOG; if(dlg->m_ImportTable) t->tflags |= OUTIMPORTTABLE; if(dlg->m_RegistryOp) t->tflags |= OUTREGISTRY; if(dlg->m_TraceHooks) t->tflags |= TRACEHOOKS; if(dlg->m_HandleExceptions) t->flags |= HANDLEEXCEPTIONS; if(dlg->m_VirtualHeap) t->flags8 |= VIRTUALHEAP; if(dlg->m_LimitResources) t->flags2 |= LIMITRESOURCES; if(dlg->m_CDROMDriveType) t->flags3 |= CDROMDRIVETYPE; if(dlg->m_HideCDROMEmpty) t->flags4 |= HIDECDROMEMPTY; if(dlg->m_HookGOGLibs) t->flags6 |= HOOKGOGLIBS; if(dlg->m_BypassGOGLibs) t->flags6 |= BYPASSGOGLIBS; if(dlg->m_FontBypass) t->flags3 |= FONTBYPASS; if(dlg->m_BufferedIOFix) t->flags3 |= BUFFEREDIOFIX; if(dlg->m_ZBufferClean) t->flags4 |= ZBUFFERCLEAN; if(dlg->m_ZBuffer0Clean) t->flags4 |= ZBUFFER0CLEAN; if(dlg->m_DynamicZClean) t->flags8 |= DYNAMICZCLEAN; if(dlg->m_ZBufferHardClean) t->flags8 |= ZBUFFERHARDCLEAN; if(dlg->m_ZBufferAlways) t->flags4 |= ZBUFFERALWAYS; if(dlg->m_HotPatchAlways) t->flags4 |= HOTPATCHALWAYS; if(dlg->m_FreezeInjectedSon) t->flags5 |= FREEZEINJECTEDSON; if(dlg->m_StressResources) t->flags5 |= STRESSRESOURCES; if(dlg->m_NoPower2Fix) t->flags4 |= NOPOWER2FIX; if(dlg->m_NoPerfCounter) t->flags4 |= NOPERFCOUNTER; if(dlg->m_DisableFogging) t->flags4 |= DISABLEFOGGING; if(dlg->m_ClearTarget) t->flags5 |= CLEARTARGET; if(dlg->m_FixPitch) t->flags6 |= FIXPITCH; if(dlg->m_Power2Width) t->flags6 |= POWER2WIDTH; if(dlg->m_SuppressIME) t->flags2 |= SUPPRESSIME; if(dlg->m_SuppressD3DExt) t->flags3 |= SUPPRESSD3DEXT; if(dlg->m_Enum16bitModes) t->flags7 |= ENUM16BITMODES; if(dlg->m_TrimTextureFormats) t->flags8 |= TRIMTEXTUREFORMATS; if(dlg->m_D3D8Back16) t->flags8 |= D3D8BACK16; if(dlg->m_SetCompatibility) t->flags2 |= SETCOMPATIBILITY; if(dlg->m_AEROBoost) t->flags5 |= AEROBOOST; if(dlg->m_DiabloTweak) t->flags5 |= DIABLOTWEAK; if(dlg->m_HookDirectSound) t->flags7 |= HOOKDIRECTSOUND; if(dlg->m_HookWinG32) t->flags8 |= HOOKWING32; if(dlg->m_HookSmackW32) t->flags7 |= HOOKSMACKW32; if(dlg->m_FixSmackLoop) t->flags7 |= FIXSMACKLOOP; if(dlg->m_BlockPriorityClass) t->flags7 |= BLOCKPRIORITYCLASS; if(dlg->m_EASportsHack) t->flags5 |= EASPORTSHACK; if(dlg->m_LegacyAlloc) t->flags6 |= LEGACYALLOC; if(dlg->m_DisableMaxWinMode) t->flags6 |= DISABLEMAXWINMODE; if(dlg->m_DisableDisableAltTab) t->flags7 |= DISABLEDISABLEALTTAB; if(dlg->m_NoImagehlp) t->flags5 |= NOIMAGEHLP; if(dlg->m_ForcesHEL) t->flags3 |= FORCESHEL; if(dlg->m_NoHALDevice) t->flags8 |= NOHALDEVICE; if(dlg->m_MinimalCaps) t->flags3 |= MINIMALCAPS; if(dlg->m_SetZBufferBitDepths) t->flags6 |= SETZBUFFERBITDEPTHS; if(dlg->m_ForcesSwapEffect) t->flags6 |= FORCESWAPEFFECT; if(dlg->m_ColorFix) t->flags3 |= COLORFIX; if(dlg->m_FixGlobalUnlock) t->flags7 |= FIXGLOBALUNLOCK; if(dlg->m_FixFreeLibrary) t->flags7 |= FIXFREELIBRARY; if(dlg->m_LoadLibraryErr) t->flags8 |= LOADLIBRARYERR; if(dlg->m_FixAdjustWinRect) t->flags8 |= FIXADJUSTWINRECT; if(dlg->m_NoPixelFormat) t->flags3 |= NOPIXELFORMAT; if(dlg->m_NoAlphaChannel) t->flags4 |= NOALPHACHANNEL; if(dlg->m_FixRefCounter) t->flags4 |= FIXREFCOUNTER; if(dlg->m_ReturnNullRef) t->flags4 |= RETURNNULLREF; if(dlg->m_NoD3DReset) t->flags4 |= NOD3DRESET; if(dlg->m_HideDesktop) t->flags4 |= HIDEDESKTOP; if(dlg->m_HideTaskbar) t->flags6 |= HIDETASKBAR; if(dlg->m_ActivateApp) t->flags6 |= ACTIVATEAPP; if(dlg->m_UnlockZOrder) t->flags5 |= UNLOCKZORDER; if(dlg->m_NoDestroyWindow) t->flags6 |= NODESTROYWINDOW; if(dlg->m_LockSysColors) t->flags3 |= LOCKSYSCOLORS; if(dlg->m_LockReservedPalette) t->flags5 |= LOCKRESERVEDPALETTE; if(dlg->m_LimitScreenRes) t->flags4 |= LIMITSCREENRES; if(dlg->m_SingleProcAffinity) t->flags3 |= SINGLEPROCAFFINITY; if(dlg->m_UseLastCore) t->flags5 |= USELASTCORE; if(dlg->m_SlowDown) t->flags |= SLOWDOWN; if(dlg->m_BlitFromBackBuffer) t->flags |= BLITFROMBACKBUFFER; if(dlg->m_NoFlipEmulation) t->flags4 |= NOFLIPEMULATION; if(dlg->m_OffscreenZBuffer) t->flags8 |= OFFSCREENZBUFFER; if(dlg->m_LockColorDepth) t->flags7 |= LOCKCOLORDEPTH; if(dlg->m_DisableGammaRamp) t->flags2 |= DISABLEGAMMARAMP; if(dlg->m_AutoRefresh) t->flags |= AUTOREFRESH; if(dlg->m_IndependentRefresh) t->flags2 |= INDEPENDENTREFRESH; if(dlg->m_TextureFormat) t->flags5 |= TEXTUREFORMAT; //if(dlg->m_FixWinFrame) t->flags |= FIXWINFRAME; if(dlg->m_VideoToSystemMem) t->flags |= SWITCHVIDEOMEMORY; if(dlg->m_FixTextOut) t->flags |= FIXTEXTOUT; if(dlg->m_HookGlide) t->flags4 |= HOOKGLIDE; if(dlg->m_RemapMCI) t->flags5 |= REMAPMCI; if(dlg->m_NoMovies) t->flags6 |= NOMOVIES; if(dlg->m_FixMoviesColor) t->flags6 |= FIXMOVIESCOLOR; if(dlg->m_StretchMovies) t->flags6 |= STRETCHMOVIES; if(dlg->m_BypassMCI) t->flags6 |= BYPASSMCI; if(dlg->m_SuppressRelease) t->flags6 |= SUPPRESSRELEASE; if(dlg->m_KeepCursorWithin) t->flags |= KEEPCURSORWITHIN; if(dlg->m_KeepCursorFixed) t->flags2 |= KEEPCURSORFIXED; if(dlg->m_UseRGB565) t->flags |= USERGB565; if(dlg->m_SuppressDXErrors) t->flags |= SUPPRESSDXERRORS; if(dlg->m_FlipEmulation) t->flags6 |= FLIPEMULATION; if(dlg->m_MarkBlit) t->flags3 |= MARKBLIT; if(dlg->m_MarkLock) t->flags3 |= MARKLOCK; if(dlg->m_MarkWinG32) t->flags8 |= MARKWING32; if(dlg->m_MarkGDI32) t->flags8 |= MARKGDI32; if(dlg->m_DumpDIBSection) t->flags8 |= DUMPDIBSECTION; if(dlg->m_DumpDevContext) t->flags8 |= DUMPDEVCONTEXT; if(dlg->m_NoSysMemPrimary) t->flags6 |= NOSYSMEMPRIMARY; if(dlg->m_NoSysMemBackBuf) t->flags6 |= NOSYSMEMBACKBUF; if(dlg->m_NoBlt) t->flags5 |= NOBLT; if(dlg->m_FastBlt) t->flags5 |= DOFASTBLT; if(dlg->m_GDIColorConv) t->flags5 |= GDICOLORCONV; if(dlg->m_PreventMaximize) t->flags |= PREVENTMAXIMIZE; if(dlg->m_ClientRemapping) t->flags |= CLIENTREMAPPING; if(dlg->m_LockWinStyle) t->flags |= LOCKWINSTYLE; if(dlg->m_FixParentWin) t->flags |= FIXPARENTWIN; //if(dlg->m_ModalStyle) t->flags2 |= MODALSTYLE; if(dlg->m_KeepAspectRatio) t->flags2 |= KEEPASPECTRATIO; if(dlg->m_ForceWinResize) t->flags2 |= FORCEWINRESIZE; if(dlg->m_HideMultiMonitor) t->flags2 |= HIDEMULTIMONITOR; if(dlg->m_FixD3DFrame) t->flags3 |= FIXD3DFRAME; if(dlg->m_NoWindowMove) t->flags3 |= NOWINDOWMOVE; if(dlg->m_HookChildWin) t->flags |= HOOKCHILDWIN; if(dlg->m_HookDlgWin) t->flags8 |= HOOKDLGWIN; if(dlg->m_MessageProc) t->flags |= MESSAGEPROC; if(dlg->m_FixMouseHook) t->flags8 |= FIXMOUSEHOOK; if(dlg->m_FixNCHITTEST) t->flags2 |= FIXNCHITTEST; if(dlg->m_RecoverScreenMode) t->flags2 |= RECOVERSCREENMODE; if(dlg->m_RefreshOnResize) t->flags2 |= REFRESHONRESIZE; if(dlg->m_BackBufAttach) t->flags2 |= BACKBUFATTACH; if(dlg->m_ClearTextureFourCC) t->flags7 |= CLEARTEXTUREFOURCC; if(dlg->m_NoDDExclusiveMode) t->flags7 |= NODDEXCLUSIVEMODE; if(dlg->m_CreateDesktop) t->flags6 |= CREATEDESKTOP; if(dlg->m_AllowSysmemOn3DDev) t->flags8 |= ALLOWSYSMEMON3DDEV; if(dlg->m_HandleAltF4) t->flags |= HANDLEALTF4; if(dlg->m_LimitFPS) t->flags2 |= LIMITFPS; if(dlg->m_SkipFPS) t->flags2 |= SKIPFPS; if(dlg->m_ShowFPS) t->flags2 |= SHOWFPS; if(dlg->m_ShowFPSOverlay) t->flags2 |= SHOWFPSOVERLAY; if(dlg->m_ShowTimeStretch) t->flags4 |= SHOWTIMESTRETCH; if(dlg->m_TimeStretch) t->flags2 |= TIMESTRETCH; if(dlg->m_StretchTimers) t->flags4 |= STRETCHTIMERS; if(dlg->m_NormalizePerfCount) t->flags5 |= NORMALIZEPERFCOUNT; if(dlg->m_CPUSlowDown) t->flags7 |= CPUSLOWDOWN; if(dlg->m_CPUMaxUsage) t->flags7 |= CPUMAXUSAGE; if(dlg->m_QuarterBlt) t->flags5 |= QUARTERBLT; if(dlg->m_FineTiming) t->flags4 |= FINETIMING; if(dlg->m_ReleaseMouse) t->flags4 |= RELEASEMOUSE; if(dlg->m_EnableTimeFreeze) t->flags4 |= ENABLETIMEFREEZE; if(dlg->m_EnableHotKeys) t->flags4 |= ENABLEHOTKEYS; if(dlg->m_InterceptRDTSC) t->flags4 |= INTERCEPTRDTSC; if(dlg->m_HookOpenGL) t->flags2 |= HOOKOPENGL; if(dlg->m_ForceHookOpenGL) t->flags3 |= FORCEHOOKOPENGL; if(dlg->m_FixPixelZoom) t->flags6 |= FIXPIXELZOOM; if(dlg->m_FixBindTexture) t->flags7 |= FIXBINDTEXTURE; if(dlg->m_HookGlut32) t->flags7 |= HOOKGLUT32; if(dlg->m_WireFrame) t->flags2 |= WIREFRAME; if(dlg->m_NoTextures) t->flags4 |= NOTEXTURES; if(dlg->m_BlackWhite) t->flags3 |= BLACKWHITE; if(dlg->m_FakeVersion) t->flags2 |= FAKEVERSION; if(dlg->m_FullRectBlt) t->flags2 |= FULLRECTBLT; if(dlg->m_CenterToWin) t->flags5 |= CENTERTOWIN; if(dlg->m_Deinterlace) t->flags5 |= DEINTERLACE; if(dlg->m_LimitDdraw) t->flags7 |= LIMITDDRAW; if(dlg->m_SuppressOverlay) t->flags7 |= SUPPRESSOVERLAY; if(dlg->m_NoPaletteUpdate) t->flags2 |= NOPALETTEUPDATE; if(dlg->m_SurfaceWarn) t->flags3 |= SURFACEWARN; if(dlg->m_CapMask) t->flags3 |= CAPMASK; if(dlg->m_NoWindowHooks) t->flags6 |= NOWINDOWHOOKS; if(dlg->m_NoDDRAWBlt) t->flags3 |= NODDRAWBLT; if(dlg->m_NoDDRAWFlip) t->flags3 |= NODDRAWFLIP; if(dlg->m_NoGDIBlt) t->flags3 |= NOGDIBLT; if(dlg->m_NoFillRect) t->flags4 |= NOFILLRECT; if(dlg->m_FixClipperArea) t->flags7 |= FIXCLIPPERAREA; if(dlg->m_SharedDCHybrid) t->flags8 |= SHAREDDCHYBRID; if(dlg->m_SyncPalette) t->flags6 |= SYNCPALETTE; if(dlg->m_NoWinErrors) t->flags7 |= NOWINERRORS; if(dlg->m_PretendVisible) t->flags8 |= PRETENDVISIBLE; if(dlg->m_WinInsulation) t->flags8 |= WININSULATION; if(dlg->m_QualityFonts) t->flags8 |= QUALITYFONTS; if(dlg->m_AnalyticMode) t->flags3 |= ANALYTICMODE; if(dlg->m_ReplacePrivOps) t->flags5 |= REPLACEPRIVOPS; if(dlg->m_InitialRes) t->flags7 |= INITIALRES; if(dlg->m_MaximumRes) t->flags7 |= MAXIMUMRES; t->posx = dlg->m_PosX; t->posy = dlg->m_PosY; t->sizx = dlg->m_SizX; t->sizy = dlg->m_SizY; t->ScanLine = dlg->m_ScanLine; t->MaxFPS = dlg->m_MaxFPS; t->InitTS = dlg->m_InitTS-8; t->FakeVersionId = dlg->m_FakeVersionId; t->MaxScreenRes = dlg->m_MaxScreenRes; t->SwapEffect = dlg->m_SwapEffect; t->resw = dlg->m_InitResW; t->resh = dlg->m_InitResH; strcpy_s(t->module, sizeof(t->module), dlg->m_Module); strcpy_s(t->OpenGLLib, sizeof(t->OpenGLLib), dlg->m_OpenGLLib); } static void SetDlgFromTarget(TARGETMAP *t, CTargetDlg *dlg) { dlg->m_DXVersion = t->dxversion; dlg->m_MonitorId = t->monitorid + 1; dlg->m_MaxDdrawInterface = t->MaxDdrawInterface-1; dlg->m_SlowRatio = t->SlowRatio; if(dlg->m_DXVersion > 6) dlg->m_DXVersion -= 5; dlg->m_Coordinates = t->coordinates; dlg->m_FilePath = t->path; dlg->m_Module = t->module; dlg->m_OpenGLLib = t->OpenGLLib; dlg->m_UnNotify = t->flags & UNNOTIFY ? 1 : 0; dlg->m_Windowize = t->flags2 & WINDOWIZE ? 1 : 0; dlg->m_HotPatch = t->flags4 & HOTPATCH ? 1 : 0; dlg->m_HookDLLs = t->flags3 & HOOKDLLS ? 1 : 0; dlg->m_AnsiWide = t->flags5 & ANSIWIDE ? 1 : 0; dlg->m_HookNoRun = t->flags7 & HOOKNORUN ? 1 : 0; dlg->m_CopyNoShims = t->flags7 & COPYNOSHIMS ? 1 : 0; dlg->m_HookNoUpdate = t->flags7 & HOOKNOUPDATE ? 1 : 0; dlg->m_SequencedIAT = t->flags8 & SEQUENCEDIAT ? 1 : 0; dlg->m_TerminateOnClose = t->flags6 & TERMINATEONCLOSE ? 1 : 0; dlg->m_ConfirmOnClose = t->flags6 & CONFIRMONCLOSE ? 1 : 0; dlg->m_EmulateRegistry = t->flags3 & EMULATEREGISTRY ? 1 : 0; dlg->m_OverrideRegistry = t->flags4 & OVERRIDEREGISTRY ? 1 : 0; dlg->m_Wow64Registry = t->flags6 & WOW64REGISTRY ? 1 : 0; dlg->m_Wow32Registry = t->flags6 & WOW32REGISTRY ? 1 : 0; dlg->m_HookEnabled = t->flags3 & HOOKENABLED ? 1 : 0; dlg->m_NeedAdminCaps = t->flags & NEEDADMINCAPS ? 1 : 0; dlg->m_NoBanner = t->flags2 & NOBANNER ? 1 : 0; dlg->m_FullScreenOnly = t->flags3 & FULLSCREENONLY ? 1 : 0; dlg->m_ShowHints = t->flags7 & SHOWHINTS ? 1 : 0; dlg->m_BackgroundPriority = t->flags8 & BACKGROUNDPRIORITY ? 1 : 0; dlg->m_PeekAllMessages = t->flags3 & PEEKALLMESSAGES ? 1 : 0; dlg->m_NoWinPosChanges = t->flags5 & NOWINPOSCHANGES ? 1 : 0; dlg->m_MessagePump = t->flags5 & MESSAGEPUMP ? 1 : 0; dlg->m_ClipMenu = t->flags8 & CLIPMENU ? 1 : 0; dlg->m_InjectionMode = 0; if(t->flags2 & STARTDEBUG) dlg->m_InjectionMode = 1; if(t->flags7 & INJECTSUSPENDED) dlg->m_InjectionMode = 2; dlg->m_DxEmulationMode = 0; // none if(t->flags & EMULATEBUFFER) dlg->m_DxEmulationMode = 1; if(t->flags & LOCKEDSURFACE) dlg->m_DxEmulationMode = 2; if(t->flags & EMULATESURFACE) dlg->m_DxEmulationMode = 3; if(t->flags5 & HYBRIDMODE) dlg->m_DxEmulationMode = 4; if(t->flags5 & GDIMODE) dlg->m_DxEmulationMode = 5; dlg->m_DxFilterMode = 0; if(t->flags4 & BILINEAR2XFILTER) dlg->m_DxFilterMode = 1; if(t->flags5 & BILINEARFILTER) dlg->m_DxFilterMode = 2; dlg->m_DCEmulationMode = 0; if(t->flags2 & GDISTRETCHED) dlg->m_DCEmulationMode = 1; if(t->flags3 & GDIEMULATEDC) dlg->m_DCEmulationMode = 2; if(t->flags6 & SHAREDDC ) dlg->m_DCEmulationMode = 3; dlg->m_ResTypes = 0; if(t->flags4 & SUPPORTSVGA) dlg->m_ResTypes = 0; if(t->flags4 & SUPPORTHDTV) dlg->m_ResTypes = 1; if(t->flags4 & NATIVERES) dlg->m_ResTypes = 2; dlg->m_MouseVisibility = 0; if(t->flags & HIDEHWCURSOR) dlg->m_MouseVisibility = 1; if(t->flags2 & SHOWHWCURSOR) dlg->m_MouseVisibility = 2; dlg->m_MouseClipper = 0; if(t->flags & DISABLECLIPPING) dlg->m_MouseClipper = 1; if(t->flags & CLIPCURSOR) dlg->m_MouseClipper = 2; if(t->flags8 & CLIPLOCKED) dlg->m_MouseClipper = 3; dlg->m_OffendingMessages = 0; if(t->flags3 & FILTERMESSAGES) dlg->m_OffendingMessages = 1; if(t->flags3 & DEFAULTMESSAGES) dlg->m_OffendingMessages = 2; dlg->m_TextureHandling = 0; if(t->flags5 & TEXTUREHIGHLIGHT) dlg->m_TextureHandling = 1; if(t->flags5 & TEXTUREDUMP) dlg->m_TextureHandling = 2; if(t->flags5 & TEXTUREHACK) dlg->m_TextureHandling = 3; if(t->flags5 & TEXTURETRANSP) dlg->m_TextureHandling = 4; dlg->m_SonProcessMode = 0; if(t->flags4 & SUPPRESSCHILD) dlg->m_SonProcessMode = 1; if(t->flags5 & ENABLESONHOOK) dlg->m_SonProcessMode = 2; if(t->flags5 & INJECTSON) dlg->m_SonProcessMode = 3; dlg->m_InitColorDepth = 0; if(t->flags2 & INIT8BPP) dlg->m_InitColorDepth = 1; if(t->flags2 & INIT16BPP) dlg->m_InitColorDepth = 2; if(t->flags7 & INIT24BPP) dlg->m_InitColorDepth = 3; if(t->flags7 & INIT32BPP) dlg->m_InitColorDepth = 4; dlg->m_LogMode = 0; if(t->tflags & OUTTRACE) dlg->m_LogMode = 2; // must be first one .... if(t->tflags & ERASELOGFILE) dlg->m_LogMode = 1; if(t->tflags & OUTSEPARATED) dlg->m_LogMode = 3; dlg->m_WinMovementType = 0; if(t->flags & LOCKWINPOS) dlg->m_WinMovementType = 1; if(t->flags2 & LOCKEDSIZE) dlg->m_WinMovementType = 2; if(t->flags7 & ANCHORED) dlg->m_WinMovementType = 3; dlg->m_VSyncMode = 0; if(t->flags8 & FORCEVSYNC) dlg->m_VSyncMode = 1; if(t->flags8 & FORCENOVSYNC) dlg->m_VSyncMode = 2; dlg->m_VSyncImpl = 0; if(t->flags8 & VSYNCSCANLINE) dlg->m_VSyncImpl = 1; if(t->flags & SAVELOAD) dlg->m_VSyncImpl = 2; dlg->m_WaitMode = 0; if(t->flags8 & FORCEWAIT) dlg->m_WaitMode = 1; if(t->flags8 & FORCENOWAIT) dlg->m_WaitMode = 2; dlg->m_ClipperMode = 0; if (t->flags3 & FORCECLIPPER) dlg->m_ClipperMode = 1; if (t->flags & SUPPRESSCLIPPING) dlg->m_ClipperMode = 2; dlg->m_TextureFileFormat = 0; if( t->flags8 & RAWFORMAT) dlg->m_TextureFileFormat = 1; if( t->flags8 & DDSFORMAT) dlg->m_TextureFileFormat = 2; dlg->m_WindowStyle = 0; if(t->flags2 & MODALSTYLE) dlg->m_WindowStyle = 1; if(t->flags & FIXWINFRAME) dlg->m_WindowStyle = 2; if(t->flags9 & FIXTHINFRAME) dlg->m_WindowStyle = 3; dlg->m_HookDI = t->flags & HOOKDI ? 1 : 0; dlg->m_HookDI8 = t->flags & HOOKDI8 ? 1 : 0; dlg->m_EmulateRelMouse = t->flags6 & EMULATERELMOUSE ? 1 : 0; dlg->m_SkipDevTypeHID = t->flags7 & SKIPDEVTYPEHID ? 1 : 0; dlg->m_SuppressDIErrors = t->flags7 & SUPPRESSDIERRORS ? 1 : 0; dlg->m_SharedKeyboard = t->flags7 & SHAREDKEYBOARD ? 1 : 0; dlg->m_ModifyMouse = t->flags & MODIFYMOUSE ? 1 : 0; dlg->m_VirtualJoystick = t->flags6 & VIRTUALJOYSTICK ? 1 : 0; dlg->m_Unacquire = t->flags6 & UNACQUIRE ? 1 : 0; dlg->m_OutDebug = t->tflags & OUTDEBUG ? 1 : 0; dlg->m_CursorTrace = t->tflags & OUTCURSORTRACE ? 1 : 0; dlg->m_OutDebugString = t->tflags & OUTDEBUGSTRING ? 1 : 0; dlg->m_AddTimeStamp = t->tflags & ADDTIMESTAMP ? 1 : 0; dlg->m_AddRelativeTime = t->tflags & ADDRELATIVETIME ? 1 : 0; dlg->m_OutWinMessages = t->tflags & OUTWINMESSAGES ? 1 : 0; dlg->m_OutDWTrace = t->tflags & OUTDXWINTRACE ? 1 : 0; dlg->m_OutOGLTrace = t->tflags & OUTOGLTRACE ? 1 : 0; dlg->m_OutHexTrace = t->tflags & OUTHEXTRACE ? 1 : 0; dlg->m_OutWGTrace = t->tflags & OUTWINGTRACE ? 1 : 0; dlg->m_OutD3DTrace = t->tflags & OUTD3DTRACE ? 1 : 0; dlg->m_OutDDRAWTrace = t->tflags & OUTDDRAWTRACE ? 1 : 0; dlg->m_AssertDialog = t->tflags & ASSERTDIALOG ? 1 : 0; dlg->m_ImportTable = t->tflags & OUTIMPORTTABLE ? 1 : 0; dlg->m_RegistryOp = t->tflags & OUTREGISTRY ? 1 : 0; dlg->m_TraceHooks = t->tflags & TRACEHOOKS ? 1 : 0; dlg->m_HandleExceptions = t->flags & HANDLEEXCEPTIONS ? 1 : 0; dlg->m_VirtualHeap = t->flags8 & VIRTUALHEAP ? 1 : 0; dlg->m_SuppressIME = t->flags2 & SUPPRESSIME ? 1 : 0; dlg->m_SuppressD3DExt = t->flags3 & SUPPRESSD3DEXT ? 1 : 0; dlg->m_Enum16bitModes = t->flags7 & ENUM16BITMODES ? 1 : 0; dlg->m_TrimTextureFormats = t->flags8 & TRIMTEXTUREFORMATS ? 1 : 0; dlg->m_D3D8Back16 = t->flags8 & D3D8BACK16 ? 1 : 0; dlg->m_SetCompatibility = t->flags2 & SETCOMPATIBILITY ? 1 : 0; dlg->m_AEROBoost = t->flags5 & AEROBOOST ? 1 : 0; dlg->m_DiabloTweak = t->flags5 & DIABLOTWEAK ? 1 : 0; dlg->m_HookDirectSound = t->flags7 & HOOKDIRECTSOUND ? 1 : 0; dlg->m_HookWinG32 = t->flags8 & HOOKWING32 ? 1 : 0; dlg->m_HookSmackW32 = t->flags7 & HOOKSMACKW32 ? 1 : 0; dlg->m_FixSmackLoop = t->flags7 & FIXSMACKLOOP ? 1 : 0; dlg->m_BlockPriorityClass = t->flags7 & BLOCKPRIORITYCLASS ? 1 : 0; dlg->m_EASportsHack = t->flags5 & EASPORTSHACK ? 1 : 0; dlg->m_LegacyAlloc = t->flags6 & LEGACYALLOC ? 1 : 0; dlg->m_DisableMaxWinMode = t->flags6 & DISABLEMAXWINMODE ? 1 : 0; dlg->m_DisableDisableAltTab = t->flags7 & DISABLEDISABLEALTTAB ? 1 : 0; dlg->m_NoImagehlp = t->flags5 & NOIMAGEHLP ? 1 : 0; dlg->m_ForcesHEL = t->flags3 & FORCESHEL ? 1 : 0; dlg->m_NoHALDevice = t->flags8 & NOHALDEVICE ? 1 : 0; dlg->m_MinimalCaps = t->flags3 & MINIMALCAPS ? 1 : 0; dlg->m_SetZBufferBitDepths = t->flags6 & SETZBUFFERBITDEPTHS ? 1 : 0; dlg->m_ForcesSwapEffect = t->flags6 & FORCESWAPEFFECT ? 1 : 0; dlg->m_ColorFix = t->flags3 & COLORFIX ? 1 : 0; dlg->m_FixGlobalUnlock = t->flags7 & FIXGLOBALUNLOCK ? 1 : 0; dlg->m_FixFreeLibrary = t->flags7 & FIXFREELIBRARY ? 1 : 0; dlg->m_LoadLibraryErr = t->flags8 & LOADLIBRARYERR ? 1 : 0; dlg->m_FixAdjustWinRect = t->flags8 & FIXADJUSTWINRECT ? 1 : 0; dlg->m_NoPixelFormat = t->flags3 & NOPIXELFORMAT ? 1 : 0; dlg->m_NoAlphaChannel = t->flags4 & NOALPHACHANNEL ? 1 : 0; dlg->m_FixRefCounter = t->flags4 & FIXREFCOUNTER ? 1 : 0; dlg->m_ReturnNullRef = t->flags4 & RETURNNULLREF ? 1 : 0; dlg->m_NoD3DReset = t->flags4 & NOD3DRESET ? 1 : 0; dlg->m_HideDesktop = t->flags4 & HIDEDESKTOP ? 1 : 0; dlg->m_HideTaskbar = t->flags6 & HIDETASKBAR ? 1 : 0; dlg->m_ActivateApp = t->flags6 & ACTIVATEAPP ? 1 : 0; dlg->m_UnlockZOrder = t->flags5 & UNLOCKZORDER ? 1 : 0; dlg->m_NoDestroyWindow = t->flags6 & NODESTROYWINDOW ? 1 : 0; dlg->m_LockSysColors = t->flags3 & LOCKSYSCOLORS ? 1 : 0; dlg->m_LockReservedPalette = t->flags5 & LOCKRESERVEDPALETTE ? 1 : 0; dlg->m_LimitScreenRes = t->flags4 & LIMITSCREENRES ? 1 : 0; dlg->m_SingleProcAffinity = t->flags3 & SINGLEPROCAFFINITY ? 1 : 0; dlg->m_UseLastCore = t->flags5 & USELASTCORE ? 1 : 0; dlg->m_LimitResources = t->flags2 & LIMITRESOURCES ? 1 : 0; dlg->m_CDROMDriveType = t->flags3 & CDROMDRIVETYPE ? 1 : 0; dlg->m_HideCDROMEmpty = t->flags4 & HIDECDROMEMPTY ? 1 : 0; dlg->m_HookGOGLibs = t->flags6 & HOOKGOGLIBS ? 1 : 0; dlg->m_BypassGOGLibs = t->flags6 & BYPASSGOGLIBS ? 1 : 0; dlg->m_FontBypass = t->flags3 & FONTBYPASS ? 1 : 0; dlg->m_BufferedIOFix = t->flags3 & BUFFEREDIOFIX ? 1 : 0; dlg->m_ZBufferClean = t->flags4 & ZBUFFERCLEAN ? 1 : 0; dlg->m_ZBuffer0Clean = t->flags4 & ZBUFFER0CLEAN ? 1 : 0; dlg->m_DynamicZClean = t->flags8 & DYNAMICZCLEAN ? 1 : 0; dlg->m_ZBufferHardClean = t->flags8 & ZBUFFERHARDCLEAN ? 1 : 0; dlg->m_ZBufferAlways = t->flags4 & ZBUFFERALWAYS ? 1 : 0; dlg->m_HotPatchAlways = t->flags4 & HOTPATCHALWAYS ? 1 : 0; dlg->m_FreezeInjectedSon = t->flags5 & FREEZEINJECTEDSON ? 1 : 0; dlg->m_StressResources = t->flags5 & STRESSRESOURCES ? 1 : 0; dlg->m_NoPower2Fix = t->flags4 & NOPOWER2FIX ? 1 : 0; dlg->m_NoPerfCounter = t->flags4 & NOPERFCOUNTER ? 1 : 0; dlg->m_DisableFogging = t->flags4 & DISABLEFOGGING ? 1 : 0; dlg->m_ClearTarget = t->flags5 & CLEARTARGET ? 1 : 0; dlg->m_FixPitch = t->flags6 & FIXPITCH ? 1 : 0; dlg->m_Power2Width = t->flags6 & POWER2WIDTH ? 1 : 0; dlg->m_SlowDown = t->flags & SLOWDOWN ? 1 : 0; dlg->m_BlitFromBackBuffer = t->flags & BLITFROMBACKBUFFER ? 1 : 0; dlg->m_NoFlipEmulation = t->flags4 & NOFLIPEMULATION ? 1 : 0; dlg->m_OffscreenZBuffer = t->flags8 & OFFSCREENZBUFFER ? 1 : 0; dlg->m_LockColorDepth = t->flags7 & LOCKCOLORDEPTH ? 1 : 0; dlg->m_DisableGammaRamp = t->flags2 & DISABLEGAMMARAMP ? 1 : 0; dlg->m_AutoRefresh = t->flags & AUTOREFRESH ? 1 : 0; dlg->m_IndependentRefresh = t->flags2 & INDEPENDENTREFRESH ? 1 : 0; dlg->m_TextureFormat = t->flags5 & TEXTUREFORMAT ? 1 : 0; //dlg->m_FixWinFrame = t->flags & FIXWINFRAME ? 1 : 0; dlg->m_VideoToSystemMem = t->flags & SWITCHVIDEOMEMORY ? 1 : 0; dlg->m_FixTextOut = t->flags & FIXTEXTOUT ? 1 : 0; dlg->m_SharedDC = t->flags6 & SHAREDDC ? 1 : 0; dlg->m_HookGlide = t->flags4 & HOOKGLIDE ? 1 : 0; dlg->m_RemapMCI = t->flags5 & REMAPMCI ? 1 : 0; dlg->m_NoMovies = t->flags6 & NOMOVIES ? 1 : 0; dlg->m_FixMoviesColor = t->flags6 & FIXMOVIESCOLOR ? 1 : 0; dlg->m_StretchMovies = t->flags6 & STRETCHMOVIES ? 1 : 0; dlg->m_BypassMCI = t->flags6 & BYPASSMCI ? 1 : 0; dlg->m_SuppressRelease = t->flags6 & SUPPRESSRELEASE ? 1 : 0; dlg->m_KeepCursorWithin = t->flags & KEEPCURSORWITHIN ? 1 : 0; dlg->m_KeepCursorFixed = t->flags2 & KEEPCURSORFIXED ? 1 : 0; dlg->m_UseRGB565 = t->flags & USERGB565 ? 1 : 0; dlg->m_SuppressDXErrors = t->flags & SUPPRESSDXERRORS ? 1 : 0; dlg->m_FlipEmulation = t->flags6 & FLIPEMULATION ? 1 : 0; dlg->m_MarkBlit = t->flags3 & MARKBLIT ? 1 : 0; dlg->m_MarkLock = t->flags3 & MARKLOCK ? 1 : 0; dlg->m_MarkWinG32 = t->flags8 & MARKWING32 ? 1 : 0; dlg->m_MarkGDI32 = t->flags8 & MARKGDI32 ? 1 : 0; dlg->m_DumpDIBSection = t->flags8 & DUMPDIBSECTION ? 1 : 0; dlg->m_DumpDevContext = t->flags8 & DUMPDEVCONTEXT ? 1 : 0; dlg->m_NoSysMemPrimary = t->flags6 & NOSYSMEMPRIMARY ? 1 : 0; dlg->m_NoSysMemBackBuf = t->flags6 & NOSYSMEMBACKBUF ? 1 : 0; dlg->m_NoBlt = t->flags5 & NOBLT ? 1 : 0; dlg->m_FastBlt = t->flags5 & DOFASTBLT ? 1 : 0; dlg->m_GDIColorConv = t->flags5 & GDICOLORCONV ? 1 : 0; dlg->m_PreventMaximize = t->flags & PREVENTMAXIMIZE ? 1 : 0; dlg->m_ClientRemapping = t->flags & CLIENTREMAPPING ? 1 : 0; dlg->m_LockWinStyle = t->flags & LOCKWINSTYLE ? 1 : 0; dlg->m_FixParentWin = t->flags & FIXPARENTWIN ? 1 : 0; //dlg->m_ModalStyle = t->flags2 & MODALSTYLE ? 1 : 0; dlg->m_KeepAspectRatio = t->flags2 & KEEPASPECTRATIO ? 1 : 0; dlg->m_ForceWinResize = t->flags2 & FORCEWINRESIZE ? 1 : 0; dlg->m_HideMultiMonitor = t->flags2 & HIDEMULTIMONITOR ? 1 : 0; dlg->m_FixD3DFrame = t->flags3 & FIXD3DFRAME ? 1 : 0; dlg->m_NoWindowMove = t->flags3 & NOWINDOWMOVE ? 1 : 0; dlg->m_HookChildWin = t->flags & HOOKCHILDWIN ? 1 : 0; dlg->m_HookDlgWin = t->flags8 & HOOKDLGWIN ? 1 : 0; dlg->m_MessageProc = t->flags & MESSAGEPROC ? 1 : 0; dlg->m_FixMouseHook = t->flags8 & FIXMOUSEHOOK ? 1 : 0; dlg->m_FixNCHITTEST = t->flags2 & FIXNCHITTEST ? 1 : 0; dlg->m_RecoverScreenMode = t->flags2 & RECOVERSCREENMODE ? 1 : 0; dlg->m_RefreshOnResize = t->flags2 & REFRESHONRESIZE ? 1 : 0; dlg->m_BackBufAttach = t->flags2 & BACKBUFATTACH ? 1 : 0; dlg->m_ClearTextureFourCC = t->flags7 & CLEARTEXTUREFOURCC ? 1 : 0; dlg->m_NoDDExclusiveMode = t->flags7 & NODDEXCLUSIVEMODE ? 1 : 0; dlg->m_CreateDesktop = t->flags6 & CREATEDESKTOP ? 1 : 0; dlg->m_AllowSysmemOn3DDev = t->flags8 & ALLOWSYSMEMON3DDEV ? 1 : 0; dlg->m_HandleAltF4 = t->flags & HANDLEALTF4 ? 1 : 0; dlg->m_LimitFPS = t->flags2 & LIMITFPS ? 1 : 0; dlg->m_SkipFPS = t->flags2 & SKIPFPS ? 1 : 0; dlg->m_ShowFPS = t->flags2 & SHOWFPS ? 1 : 0; dlg->m_ShowFPSOverlay = t->flags2 & SHOWFPSOVERLAY ? 1 : 0; dlg->m_ShowTimeStretch = t->flags4 & SHOWTIMESTRETCH ? 1 : 0; dlg->m_TimeStretch = t->flags2 & TIMESTRETCH ? 1 : 0; dlg->m_StretchTimers = t->flags4 & STRETCHTIMERS ? 1 : 0; dlg->m_NormalizePerfCount = t->flags5 & NORMALIZEPERFCOUNT ? 1 : 0; dlg->m_CPUSlowDown = t->flags7 & CPUSLOWDOWN ? 1 : 0; dlg->m_CPUMaxUsage = t->flags7 & CPUMAXUSAGE ? 1 : 0; dlg->m_QuarterBlt = t->flags5 & QUARTERBLT ? 1 : 0; dlg->m_FineTiming = t->flags4 & FINETIMING ? 1 : 0; dlg->m_ReleaseMouse = t->flags4 & RELEASEMOUSE ? 1 : 0; dlg->m_EnableTimeFreeze = t->flags4 & ENABLETIMEFREEZE ? 1 : 0; dlg->m_EnableHotKeys = t->flags4 & ENABLEHOTKEYS ? 1 : 0; dlg->m_InterceptRDTSC = t->flags4 & INTERCEPTRDTSC ? 1 : 0; dlg->m_HookOpenGL = t->flags2 & HOOKOPENGL ? 1 : 0; dlg->m_ForceHookOpenGL = t->flags3 & FORCEHOOKOPENGL ? 1 : 0; dlg->m_FixPixelZoom = t->flags6 & FIXPIXELZOOM ? 1 : 0; dlg->m_FixBindTexture = t->flags7 & FIXBINDTEXTURE ? 1 : 0; dlg->m_HookGlut32 = t->flags7 & HOOKGLUT32 ? 1 : 0; dlg->m_WireFrame = t->flags2 & WIREFRAME ? 1 : 0; dlg->m_NoTextures = t->flags4 & NOTEXTURES ? 1 : 0; dlg->m_BlackWhite = t->flags3 & BLACKWHITE ? 1 : 0; dlg->m_FakeVersion = t->flags2 & FAKEVERSION ? 1 : 0; dlg->m_FullRectBlt = t->flags2 & FULLRECTBLT ? 1 : 0; dlg->m_CenterToWin = t->flags5 & CENTERTOWIN ? 1 : 0; dlg->m_Deinterlace = t->flags5 & DEINTERLACE ? 1 : 0; dlg->m_LimitDdraw = t->flags7 & LIMITDDRAW ? 1 : 0; dlg->m_SuppressOverlay = t->flags7 & SUPPRESSOVERLAY ? 1 : 0; dlg->m_NoPaletteUpdate = t->flags2 & NOPALETTEUPDATE ? 1 : 0; dlg->m_SurfaceWarn = t->flags3 & SURFACEWARN ? 1 : 0; dlg->m_CapMask = t->flags3 & CAPMASK ? 1 : 0; dlg->m_NoWindowHooks = t->flags6 & NOWINDOWHOOKS ? 1 : 0; dlg->m_NoDDRAWBlt = t->flags3 & NODDRAWBLT ? 1 : 0; dlg->m_NoDDRAWFlip = t->flags3 & NODDRAWFLIP ? 1 : 0; dlg->m_NoGDIBlt = t->flags3 & NOGDIBLT ? 1 : 0; dlg->m_NoFillRect = t->flags4 & NOFILLRECT ? 1 : 0; dlg->m_FixClipperArea = t->flags7 & FIXCLIPPERAREA ? 1 : 0; dlg->m_SharedDCHybrid = t->flags8 & SHAREDDCHYBRID ? 1 : 0; dlg->m_SyncPalette = t->flags6 & SYNCPALETTE ? 1 : 0; dlg->m_NoWinErrors = t->flags7 & NOWINERRORS ? 1 : 0; dlg->m_PretendVisible = t->flags8 & PRETENDVISIBLE ? 1 : 0; dlg->m_WinInsulation = t->flags8 & WININSULATION ? 1 : 0; dlg->m_QualityFonts = t->flags8 & QUALITYFONTS ? 1 : 0; dlg->m_AnalyticMode = t->flags3 & ANALYTICMODE ? 1 : 0; dlg->m_ReplacePrivOps = t->flags5 & REPLACEPRIVOPS ? 1 : 0; dlg->m_InitialRes = t->flags7 & INITIALRES ? 1 : 0; dlg->m_MaximumRes = t->flags7 & MAXIMUMRES ? 1 : 0; dlg->m_PosX = t->posx; dlg->m_PosY = t->posy; dlg->m_SizX = t->sizx; dlg->m_SizY = t->sizy; dlg->m_ScanLine = t->ScanLine; dlg->m_MaxFPS = t->MaxFPS; dlg->m_InitTS = t->InitTS+8; dlg->m_FakeVersionId = t->FakeVersionId; dlg->m_MaxScreenRes = t->MaxScreenRes; dlg->m_InitResW = t->resw; dlg->m_InitResH = t->resh; dlg->m_SwapEffect = t->SwapEffect; } static void SaveConfigItem(TARGETMAP *TargetMap, PRIVATEMAP *PrivateMap, int i, char *InitPath) { char key[32], val[32]; char *EscBuf = NULL; sprintf_s(key, sizeof(key), "title%i", i); WritePrivateProfileString("target", key, PrivateMap->title, InitPath); // ------- sprintf_s(key, sizeof(key), "path%i", i); WritePrivateProfileString("target", key, TargetMap->path, InitPath); // ------- sprintf_s(key, sizeof(key), "startfolder%i", i); WritePrivateProfileString("target", key, PrivateMap->startfolder, InitPath); // ------- sprintf_s(key, sizeof(key), "launchpath%i", i); WritePrivateProfileString("target", key, PrivateMap->launchpath, InitPath); // ------- sprintf_s(key, sizeof(key), "module%i", i); WritePrivateProfileString("target", key, TargetMap->module, InitPath); // ------- sprintf_s(key, sizeof(key), "opengllib%i", i); WritePrivateProfileString("target", key, TargetMap->OpenGLLib, InitPath); // ------- sprintf_s(key, sizeof(key), "notes%i", i); WritePrivateProfileString("target", key, Escape(PrivateMap->notes, &EscBuf), InitPath); // ------- sprintf_s(key, sizeof(key), "registry%i", i); WritePrivateProfileString("target", key, Escape(PrivateMap->registry, &EscBuf), InitPath); // ------- sprintf_s(key, sizeof(key), "ver%i", i); sprintf_s(val, sizeof(val), "%i", TargetMap->dxversion); WritePrivateProfileString("target", key, val, InitPath); // ------- sprintf_s(key, sizeof(key), "monitorid%i", i); sprintf_s(val, sizeof(val), "%i", TargetMap->monitorid); WritePrivateProfileString("target", key, val, InitPath); // ------- sprintf_s(key, sizeof(key), "coord%i", i); sprintf_s(val, sizeof(val), "%i", TargetMap->coordinates); WritePrivateProfileString("target", key, val, InitPath); // ------- sprintf_s(key, sizeof(key), "flag%i", i); sprintf_s(val, sizeof(val), "%i", TargetMap->flags); WritePrivateProfileString("target", key, val, InitPath); // ------- sprintf_s(key, sizeof(key), "flagg%i", i); sprintf_s(val, sizeof(val), "%i", TargetMap->flags2); WritePrivateProfileString("target", key, val, InitPath); // ------- sprintf_s(key, sizeof(key), "flagh%i", i); sprintf_s(val, sizeof(val), "%i", TargetMap->flags3); WritePrivateProfileString("target", key, val, InitPath); // ------- sprintf_s(key, sizeof(key), "flagi%i", i); sprintf_s(val, sizeof(val), "%i", TargetMap->flags4); WritePrivateProfileString("target", key, val, InitPath); // ------- sprintf_s(key, sizeof(key), "flagj%i", i); sprintf_s(val, sizeof(val), "%i", TargetMap->flags5); WritePrivateProfileString("target", key, val, InitPath); // ------- sprintf_s(key, sizeof(key), "flagk%i", i); sprintf_s(val, sizeof(val), "%i", TargetMap->flags6); WritePrivateProfileString("target", key, val, InitPath); // ------- sprintf_s(key, sizeof(key), "flagl%i", i); sprintf_s(val, sizeof(val), "%i", TargetMap->flags7); WritePrivateProfileString("target", key, val, InitPath); // ------- sprintf_s(key, sizeof(key), "flagm%i", i); sprintf_s(val, sizeof(val), "%i", TargetMap->flags8); WritePrivateProfileString("target", key, val, InitPath); // ------- sprintf_s(key, sizeof(key), "flagn%i", i); sprintf_s(val, sizeof(val), "%i", TargetMap->flags9); WritePrivateProfileString("target", key, val, InitPath); // ------- sprintf_s(key, sizeof(key), "flago%i", i); sprintf_s(val, sizeof(val), "%i", TargetMap->flags10); WritePrivateProfileString("target", key, val, InitPath); // ------- sprintf_s(key, sizeof(key), "tflag%i", i); sprintf_s(val, sizeof(val), "%i", TargetMap->tflags); WritePrivateProfileString("target", key, val, InitPath); // ------- sprintf_s(key, sizeof(key), "dflag%i", i); sprintf_s(val, sizeof(val), "%i", TargetMap->dflags); WritePrivateProfileString("target", key, val, InitPath); // ------- sprintf_s(key, sizeof(key), "posx%i", i); sprintf_s(val, sizeof(val), "%i", TargetMap->posx); WritePrivateProfileString("target", key, val, InitPath); // ------- sprintf_s(key, sizeof(key), "posy%i", i); sprintf_s(val, sizeof(val), "%i", TargetMap->posy); WritePrivateProfileString("target", key, val, InitPath); // ------- sprintf_s(key, sizeof(key), "sizx%i", i); sprintf_s(val, sizeof(val), "%i", TargetMap->sizx); WritePrivateProfileString("target", key, val, InitPath); // ------- sprintf_s(key, sizeof(key), "sizy%i", i); sprintf_s(val, sizeof(val), "%i", TargetMap->sizy); WritePrivateProfileString("target", key, val, InitPath); // ------- sprintf_s(key, sizeof(key), "maxfps%i", i); sprintf_s(val, sizeof(val), "%i", TargetMap->MaxFPS); WritePrivateProfileString("target", key, val, InitPath); // ------- sprintf_s(key, sizeof(key), "initts%i", i); sprintf_s(val, sizeof(val), "%i", TargetMap->InitTS); WritePrivateProfileString("target", key, val, InitPath); // ------- sprintf_s(key, sizeof(key), "winver%i", i); sprintf_s(val, sizeof(val), "%i", TargetMap->FakeVersionId); WritePrivateProfileString("target", key, val, InitPath); // ------- sprintf_s(key, sizeof(key), "maxres%i", i); sprintf_s(val, sizeof(val), "%i", TargetMap->MaxScreenRes); WritePrivateProfileString("target", key, val, InitPath); // ------- sprintf_s(key, sizeof(key), "swapeffect%i", i); sprintf_s(val, sizeof(val), "%i", TargetMap->SwapEffect); WritePrivateProfileString("target", key, val, InitPath); // ------- sprintf_s(key, sizeof(key), "maxddinterface%i", i); sprintf_s(val, sizeof(val), "%i", TargetMap->MaxDdrawInterface); WritePrivateProfileString("target", key, val, InitPath); // ------- sprintf_s(key, sizeof(key), "slowratio%i", i); sprintf_s(val, sizeof(val), "%i", TargetMap->SlowRatio); WritePrivateProfileString("target", key, val, InitPath); // ------- sprintf_s(key, sizeof(key), "scanline%i", i); sprintf_s(val, sizeof(val), "%i", TargetMap->ScanLine); WritePrivateProfileString("target", key, val, InitPath); // ------- sprintf_s(key, sizeof(key), "initresw%i", i); sprintf_s(val, sizeof(val), "%i", TargetMap->resw); WritePrivateProfileString("target", key, val, InitPath); // ------- sprintf_s(key, sizeof(key), "initresh%i", i); sprintf_s(val, sizeof(val), "%i", TargetMap->resh); WritePrivateProfileString("target", key, val, InitPath); free(EscBuf); EscBuf = NULL; } static void SaveExportStamp(char *InitPath) { char val[32]; GetDllVersion(val); time_t _tm = time(NULL); struct tm *curtime = localtime(& _tm); WritePrivateProfileString("stamp", "version", val, InitPath); WritePrivateProfileString("stamp", "time", asctime(curtime), InitPath); } static void ClearTarget(int i, char *InitPath) { char key[32]; sprintf_s(key, sizeof(key), "path%i", i); WritePrivateProfileString("target", key, 0, InitPath); sprintf_s(key, sizeof(key), "launchpath%i", i); WritePrivateProfileString("target", key, 0, InitPath); sprintf_s(key, sizeof(key), "startfolder%i", i); WritePrivateProfileString("target", key, 0, InitPath); sprintf_s(key, sizeof(key), "ver%i", i); WritePrivateProfileString("target", key, 0, InitPath); sprintf_s(key, sizeof(key), "coord%i", i); WritePrivateProfileString("target", key, 0, InitPath); sprintf_s(key, sizeof(key), "flag%i", i); WritePrivateProfileString("target", key, 0, InitPath); sprintf_s(key, sizeof(key), "flagg%i", i); WritePrivateProfileString("target", key, 0, InitPath); sprintf_s(key, sizeof(key), "flagh%i", i); WritePrivateProfileString("target", key, 0, InitPath); sprintf_s(key, sizeof(key), "flagi%i", i); WritePrivateProfileString("target", key, 0, InitPath); sprintf_s(key, sizeof(key), "flagj%i", i); WritePrivateProfileString("target", key, 0, InitPath); sprintf_s(key, sizeof(key), "flagk%i", i); WritePrivateProfileString("target", key, 0, InitPath); sprintf_s(key, sizeof(key), "flagl%i", i); WritePrivateProfileString("target", key, 0, InitPath); sprintf_s(key, sizeof(key), "flagm%i", i); WritePrivateProfileString("target", key, 0, InitPath); sprintf_s(key, sizeof(key), "flagn%i", i); WritePrivateProfileString("target", key, 0, InitPath); sprintf_s(key, sizeof(key), "flago%i", i); WritePrivateProfileString("target", key, 0, InitPath); sprintf_s(key, sizeof(key), "tflag%i", i); WritePrivateProfileString("target", key, 0, InitPath); sprintf_s(key, sizeof(key), "initx%i", i); WritePrivateProfileString("target", key, 0, InitPath); sprintf_s(key, sizeof(key), "inity%i", i); WritePrivateProfileString("target", key, 0, InitPath); sprintf_s(key, sizeof(key), "minx%i", i); WritePrivateProfileString("target", key, 0, InitPath); sprintf_s(key, sizeof(key), "miny%i", i); WritePrivateProfileString("target", key, 0, InitPath); sprintf_s(key, sizeof(key), "maxx%i", i); WritePrivateProfileString("target", key, 0, InitPath); sprintf_s(key, sizeof(key), "maxy%i", i); WritePrivateProfileString("target", key, 0, InitPath); sprintf_s(key, sizeof(key), "posx%i", i); WritePrivateProfileString("target", key, 0, InitPath); sprintf_s(key, sizeof(key), "posy%i", i); WritePrivateProfileString("target", key, 0, InitPath); sprintf_s(key, sizeof(key), "sizx%i", i); WritePrivateProfileString("target", key, 0, InitPath); sprintf_s(key, sizeof(key), "sizy%i", i); WritePrivateProfileString("target", key, 0, InitPath); sprintf_s(key, sizeof(key), "maxfps%i", i); WritePrivateProfileString("target", key, 0, InitPath); sprintf_s(key, sizeof(key), "swapeffect%i", i); WritePrivateProfileString("target", key, 0, InitPath); sprintf_s(key, sizeof(key), "initts%i", i); WritePrivateProfileString("target", key, 0, InitPath); sprintf_s(key, sizeof(key), "winver%i", i); WritePrivateProfileString("target", key, 0, InitPath); sprintf_s(key, sizeof(key), "maxres%i", i); WritePrivateProfileString("target", key, 0, InitPath); sprintf_s(key, sizeof(key), "notes%i", i); WritePrivateProfileString("target", key, 0, InitPath); sprintf_s(key, sizeof(key), "registry%i", i); WritePrivateProfileString("target", key, 0, InitPath); sprintf_s(key, sizeof(key), "maxddinterface%i", i); WritePrivateProfileString("target", key, 0, InitPath); sprintf_s(key, sizeof(key), "slowratio%i", i); WritePrivateProfileString("target", key, 0, InitPath); } static int LoadConfigItem(TARGETMAP *TargetMap, PRIVATEMAP *PrivateMap, int i, char *InitPath) { char key[32]; char *EscBuf = NULL; char *sBuf; sBuf = (char *)malloc(1000000); extern BOOL gbDebug; TargetMap->index = i; // ------- sprintf_s(key, sizeof(key), "path%i", i); GetPrivateProfileString("target", key, "", TargetMap->path, MAX_PATH, InitPath); if(!TargetMap->path[0]) return FALSE; // ------- sprintf_s(key, sizeof(key), "launchpath%i", i); GetPrivateProfileString("target", key, "", PrivateMap->launchpath, MAX_PATH, InitPath); // ------- sprintf_s(key, sizeof(key), "startfolder%i", i); GetPrivateProfileString("target", key, "", PrivateMap->startfolder, MAX_PATH, InitPath); // ------- sprintf_s(key, sizeof(key), "title%i", i); GetPrivateProfileString("target", key, "", PrivateMap->title, sizeof(PRIVATEMAP)-1, InitPath); // ------- sprintf_s(key, sizeof(key), "module%i", i); GetPrivateProfileString("target", key, "", TargetMap->module, sizeof(TargetMap->module)-1, InitPath); // ------- sprintf_s(key, sizeof(key), "opengllib%i", i); GetPrivateProfileString("target", key, "", TargetMap->OpenGLLib, sizeof(TargetMap->OpenGLLib)-1, InitPath); // ------- sprintf_s(key, sizeof(key), "notes%i", i); GetPrivateProfileString("target", key, "", sBuf, 1000000, InitPath); Unescape(sBuf, &EscBuf); PrivateMap->notes = (char *)malloc(strlen(EscBuf)+1); strcpy(PrivateMap->notes, EscBuf); // ------- sprintf_s(key, sizeof(key), "registry%i", i); GetPrivateProfileString("target", key, "", sBuf, 1000000, InitPath); Unescape(sBuf, &EscBuf); PrivateMap->registry = (char *)malloc(strlen(EscBuf)+1); strcpy(PrivateMap->registry, EscBuf); // ------- sprintf_s(key, sizeof(key), "ver%i", i); TargetMap->dxversion = GetPrivateProfileInt("target", key, 0, InitPath); // ------- sprintf_s(key, sizeof(key), "monitorid%i", i); TargetMap->monitorid = GetPrivateProfileInt("target", key, 0, InitPath); // ------- sprintf_s(key, sizeof(key), "coord%i", i); TargetMap->coordinates = GetPrivateProfileInt("target", key, 0, InitPath); // ------- sprintf_s(key, sizeof(key), "flag%i", i); TargetMap->flags = GetPrivateProfileInt("target", key, 0, InitPath); // ------- sprintf_s(key, sizeof(key), "flagg%i", i); TargetMap->flags2 = GetPrivateProfileInt("target", key, 0, InitPath); // ------- sprintf_s(key, sizeof(key), "flagh%i", i); TargetMap->flags3 = GetPrivateProfileInt("target", key, 0, InitPath); // ------- sprintf_s(key, sizeof(key), "flagi%i", i); TargetMap->flags4 = GetPrivateProfileInt("target", key, 0, InitPath); // ------- sprintf_s(key, sizeof(key), "flagj%i", i); TargetMap->flags5 = GetPrivateProfileInt("target", key, 0, InitPath); // ------- sprintf_s(key, sizeof(key), "flagk%i", i); TargetMap->flags6 = GetPrivateProfileInt("target", key, 0, InitPath); // ------- sprintf_s(key, sizeof(key), "flagl%i", i); TargetMap->flags7 = GetPrivateProfileInt("target", key, 0, InitPath); // ------- sprintf_s(key, sizeof(key), "flagm%i", i); TargetMap->flags8 = GetPrivateProfileInt("target", key, 0, InitPath); // ------- sprintf_s(key, sizeof(key), "flagn%i", i); TargetMap->flags9 = GetPrivateProfileInt("target", key, 0, InitPath); // ------- sprintf_s(key, sizeof(key), "flago%i", i); TargetMap->flags10= GetPrivateProfileInt("target", key, 0, InitPath); // ------- sprintf_s(key, sizeof(key), "tflag%i", i); TargetMap->tflags = GetPrivateProfileInt("target", key, 0, InitPath); // ------- sprintf_s(key, sizeof(key), "dflag%i", i); TargetMap->dflags = GetPrivateProfileInt("target", key, 0, InitPath); // ------- sprintf_s(key, sizeof(key), "posx%i", i); TargetMap->posx = GetPrivateProfileInt("target", key, 0, InitPath); // ------- sprintf_s(key, sizeof(key), "posy%i", i); TargetMap->posy = GetPrivateProfileInt("target", key, 0, InitPath); // ------- sprintf_s(key, sizeof(key), "sizx%i", i); TargetMap->sizx = GetPrivateProfileInt("target", key, 0, InitPath); // ------- sprintf_s(key, sizeof(key), "sizy%i", i); TargetMap->sizy = GetPrivateProfileInt("target", key, 0, InitPath); // ------- sprintf_s(key, sizeof(key), "maxfps%i", i); TargetMap->MaxFPS = GetPrivateProfileInt("target", key, 0, InitPath); // ------- sprintf_s(key, sizeof(key), "initts%i", i); TargetMap->InitTS = GetPrivateProfileInt("target", key, 0, InitPath); // ------- sprintf_s(key, sizeof(key), "swapeffect%i", i); TargetMap->SwapEffect = GetPrivateProfileInt("target", key, 0, InitPath); // ------- sprintf_s(key, sizeof(key), "winver%i", i); TargetMap->FakeVersionId = GetPrivateProfileInt("target", key, 0, InitPath); // ------- sprintf_s(key, sizeof(key), "maxres%i", i); TargetMap->MaxScreenRes = GetPrivateProfileInt("target", key, 0, InitPath); // ------- sprintf_s(key, sizeof(key), "maxddinterface%i", i); TargetMap->MaxDdrawInterface = GetPrivateProfileInt("target", key, 7, InitPath); // ------- sprintf_s(key, sizeof(key), "slowratio%i", i); TargetMap->SlowRatio = GetPrivateProfileInt("target", key, 1, InitPath); // ------- sprintf_s(key, sizeof(key), "scanline%i", i); TargetMap->ScanLine = GetPrivateProfileInt("target", key, 1, InitPath); // ------- sprintf_s(key, sizeof(key), "initresw%i", i); TargetMap->resw = GetPrivateProfileInt("target", key, 0, InitPath); // ------- sprintf_s(key, sizeof(key), "initresh%i", i); TargetMap->resh = GetPrivateProfileInt("target", key, 0, InitPath); if (!gbDebug){ // clear debug flags TargetMap->flags &= ~(0); TargetMap->flags3 &= ~(SURFACEWARN|ANALYTICMODE|NODDRAWBLT|NODDRAWFLIP|NOGDIBLT); } free(EscBuf); EscBuf = NULL; free(sBuf); return TRUE; } static int SetTargetIcon(TARGETMAP tm) { FILE *target; target = fopen(tm.path, "r"); if (target==NULL) return 3; fclose(target); if (tm.flags7 & HOOKNORUN) return 5; if (tm.flags3 & HOOKENABLED) return ((tm.flags2 & STARTDEBUG)||(tm.flags7 & INJECTSUSPENDED)) ? 2 : 1; return 0; } ///////////////////////////////////////////////////////////////////////////// // CDxwndhostView class constructor / destructor CDxwndhostView::CDxwndhostView() { EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &this->InitDevMode); } void CDxwndhostView::SaveConfigFile() { int i; for(i = 0; i < MAXTARGETS; i ++){ if(!TargetMaps[i].path[0]) break; SaveConfigItem(&TargetMaps[i], &PrivateMaps[i], i, gInitPath); } for(; i < MAXTARGETS; i ++) ClearTarget(i, gInitPath); this->isUpdated=FALSE; this->isRegistryUpdated=FALSE; } CDxwndhostView::~CDxwndhostView() { EndHook(); RevertScreenChanges(&this->InitDevMode); if (this->isUpdated){ if (MessageBoxLang(DXW_STRING_LISTUPDATE, DXW_STRING_WARNING, MB_YESNO | MB_ICONQUESTION)==IDYES) this->SaveConfigFile(); } if(this->SystemTray.Enabled()){ this->SystemTray.StopAnimation(); this->SystemTray.HideIcon(); } } void CDxwndhostView::OnExit() { // check for running apps .... if (GetHookStatus(NULL)==DXW_RUNNING){ if (MessageBoxLang(DXW_STRING_EXIT_BUSY, DXW_STRING_WARNING, MB_OKCANCEL | MB_ICONQUESTION)==IDCANCEL) return; } delete(this->GetParent()); } BOOL CDxwndhostView::PreCreateWindow(CREATESTRUCT& cs) { cs.style |= LVS_REPORT | LVS_SINGLESEL | LVS_NOCOLUMNHEADER; return CListView::PreCreateWindow(cs); } ///////////////////////////////////////////////////////////////////////////// // CDxwndhostView Drawing Classes void CDxwndhostView::OnDraw(CDC* pDC) { CDxwndhostDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); } void CDxwndhostView::OnHotKey(UINT nHotKeyId, UINT nKey1, UINT nKey2) { switch(nHotKeyId){ case 0: // minimize this->OnWindowMinimize(); break; case 1: // restore this->OnWindowRestore(); break; case 2: // kill this->OnProcessKill(); break; } } void VKeyError(char *key) { char Msg[81]; sprintf(Msg, "RegisterHotKey(%s) failed err=%d", key, GetLastError()); MessageBox(NULL, Msg, "DxWnd error", MB_OK+MB_ICONWARNING); } void CDxwndhostView::UpdateHotKeys() { // Hot Keys DWORD dwKey; extern Key_Type HKeys[]; extern KeyCombo_Type HKeyCombo[]; // MessageBox("update global settings", "debug", MB_OK); for(int i=0; HKeys[i].iLabelResourceId; i++){ dwKey = GetPrivateProfileInt("keymapping", HKeys[i].sIniLabel, 0, gInitPath); if(dwKey) { UnregisterHotKey(this->GetSafeHwnd(), i); if(!RegisterHotKey(this->GetSafeHwnd(), i, MOD_ALT+MOD_SHIFT+MOD_CONTROL, dwKey)) VKeyError(HKeys[i].sIniLabel); } } } void CDxwndhostView::OnInitialUpdate() { CListView::OnInitialUpdate(); CListCtrl& listctrl = GetListCtrl(); LV_COLUMN listcol; LV_ITEM listitem; int i; DXWNDSTATUS StatusMap; typedef BOOL (WINAPI *ChangeWindowMessageFilter_Type)(UINT, DWORD); ChangeWindowMessageFilter_Type pChangeWindowMessageFilter; DragAcceptFiles(); // the ChangeWindowMessageFilter is not available, nor necessary, on XP HMODULE hUser32; hUser32 = GetModuleHandle("user32.dll"); pChangeWindowMessageFilter = (ChangeWindowMessageFilter_Type)GetProcAddress(hUser32, "ChangeWindowMessageFilter"); if(pChangeWindowMessageFilter){ (*pChangeWindowMessageFilter)(WM_DROPFILES, MSGFLT_ADD); (*pChangeWindowMessageFilter)(WM_COPYDATA, MSGFLT_ADD); (*pChangeWindowMessageFilter)(0x0049, MSGFLT_ADD); } // Create 256 color image lists HIMAGELIST hList = ImageList_Create(32,32, ILC_COLOR8 |ILC_MASK , 6, 1); m_cImageListNormal.Attach(hList); hList = ImageList_Create(16, 16, ILC_COLOR8 | ILC_MASK, 6, 1); m_cImageListSmall.Attach(hList); // Load the large icons CBitmap cBmp; cBmp.LoadBitmap(IDB_BIGICONS); m_cImageListNormal.Add(&cBmp, RGB(255,0, 255)); cBmp.DeleteObject(); // Load the small icons cBmp.LoadBitmap(IDB_SMALLICONS); m_cImageListSmall.Add(&cBmp, RGB(255,0, 255)); // Attach them listctrl.SetImageList(&m_cImageListNormal, LVSIL_NORMAL); listctrl.SetImageList(&m_cImageListSmall, LVSIL_SMALL); listcol.mask = LVCF_WIDTH; listcol.cx = 100; listctrl.InsertColumn(0, &listcol); if(!strlen(gInitPath)){ GetCurrentDirectory(MAX_PATH, gInitPath); strcat_s(gInitPath, sizeof(gInitPath), "\\"); strcat_s(gInitPath, sizeof(gInitPath), "dxwnd.ini"); } listctrl.InsertColumn(0, &listcol); StatusMap.VJoyStatus = GetPrivateProfileInt("joystick", "flags", VJOYENABLED|CROSSENABLED|INVERTYAXIS|VJMOUSEMAP|VJKEYBOARDMAP, gInitPath); StatusMap.VJoySensivity = GetPrivateProfileInt("joystick", "sensivity", 100, gInitPath); for(i = 0; i < MAXTARGETS; i ++){ if (!LoadConfigItem(&TargetMaps[i], &PrivateMaps[i], i, gInitPath)) break; listitem.mask = LVIF_TEXT | LVIF_IMAGE; listitem.iItem = i; listitem.iSubItem = 0; listitem.pszText = PrivateMaps[i].title; listitem.iImage = SetTargetIcon(TargetMaps[i]); listctrl.InsertItem(&listitem); } for(; i < MAXTARGETS; i ++) { TargetMaps[i].path[0] = 0; PrivateMaps[i].title[0] = 0; } Resize(); SetTarget(&StatusMap, TargetMaps); if(m_InitialState == DXW_ACTIVE) this->OnHookStart(); else this->OnHookStop(); if(m_StartToTray) this->OnGoToTrayIcon(); this->isUpdated=FALSE; this->isRegistryUpdated=FALSE; pTitles = &PrivateMaps[0]; pTargets= &TargetMaps[0]; UpdateHotKeys(); // Transient mode if(gTransientMode){ this->OnRun(); } } ///////////////////////////////////////////////////////////////////////////// // CDxwndhostView Diagnostic Class #ifdef _DEBUG void CDxwndhostView::AssertValid() const { CListView::AssertValid(); } void CDxwndhostView::Dump(CDumpContext& dc) const { CListView::Dump(dc); } CDxwndhostDoc* CDxwndhostView::GetDocument() // Non-debug version is inline. { ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CDxwndhostDoc))); return (CDxwndhostDoc*)m_pDocument; } #endif //_DEBUG void CDxwndhostView::OnDblclk(NMHDR* pNMHDR, LRESULT* pResult) { // TODO: Please add your control notification handler code here. OnRun(); *pResult = 0; } //static char ImportExportPath[4096] = {0}; void CDxwndhostView::OnExport() { int i; char path[MAX_PATH]; CListCtrl& listctrl = GetListCtrl(); POSITION pos; if(!listctrl.GetSelectedCount()) return; pos = listctrl.GetFirstSelectedItemPosition(); i = listctrl.GetNextSelectedItem(pos); GetPrivateProfileString("window", "exportpath", NULL, path, MAX_PATH, gInitPath); //strcat_s(path, MAX_PATH, "\\"); strcat_s(path, MAX_PATH, PrivateMaps[i].title); CFileDialog dlg( FALSE, "*.dxw", path, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "dxwnd task config (*.dxw)|*.dxw|All Files (*.*)|*.*||", this); if( dlg.DoModal() == IDOK) { DWORD TFlags; TARGETMAP *TargetMap; strcpy(path, dlg.GetPathName().GetBuffer()); // XP fix: if(strlen(path)>4){ char *p; p = &path[strlen(path)-4]; if(strcasecmp(p, ".dxw")) strcat(path, ".dxw"); } else strcat(path, ".dxw"); //MessageBox(path, "PathName", MB_OK); // export with no trace flags active TargetMap = &TargetMaps[i]; TFlags = TargetMap->tflags; TargetMap->tflags = 0; SaveConfigItem(&TargetMaps[i], &PrivateMaps[i], 0, path); SaveExportStamp(path); TargetMap->tflags = TFlags; if(GetPrivateProfileInt("window", "updatepaths", 1, gInitPath)) { GetFolderFromPath(path); WritePrivateProfileString("window", "exportpath", path, gInitPath); } } } BOOL CDxwndhostView::OnImport(CString sFilePath) { LV_ITEM listitem; int i; for (i=0; strlen(TargetMaps[i].path) && iisUpdated=TRUE; this->isRegistryUpdated=TRUE; return TRUE; } void CDxwndhostView::OnImport() { LV_ITEM listitem; int i; char path[MAX_PATH]; char ImportExportPath[4096] = {0}; for (i=0; strlen(TargetMaps[i].path) && iisUpdated=TRUE; this->isRegistryUpdated=TRUE; } } void CDxwndhostView::OnModify() { int i; CTargetDlg dlg; POSITION pos; LV_ITEM listitem; CListCtrl& listctrl = GetListCtrl(); if(!listctrl.GetSelectedCount()) return; pos = listctrl.GetFirstSelectedItemPosition(); i = listctrl.GetNextSelectedItem(pos); dlg.m_Title = PrivateMaps[i].title; dlg.m_Notes = CString(PrivateMaps[i].notes); dlg.m_Registry = CString(PrivateMaps[i].registry); dlg.m_LaunchPath = PrivateMaps[i].launchpath; dlg.m_StartFolder = PrivateMaps[i].startfolder; SetDlgFromTarget(&TargetMaps[i], &dlg); if(dlg.DoModal() == IDOK && dlg.m_FilePath.GetLength()){ strnncpy(PrivateMaps[i].title, (char *)dlg.m_Title.GetString(), MAX_TITLE); PrivateMaps[i].notes = (char *)realloc(PrivateMaps[i].notes, strlen(dlg.m_Notes.GetString())+1); strcpy(PrivateMaps[i].notes, (char *)dlg.m_Notes.GetString()); if(strcmp((char *)dlg.m_Registry.GetString(), PrivateMaps[i].registry)) this->isRegistryUpdated=TRUE; PrivateMaps[i].registry = (char *)realloc(PrivateMaps[i].registry, strlen(dlg.m_Registry.GetString())+1); strcpy(PrivateMaps[i].registry, (char *)dlg.m_Registry.GetString()); strnncpy(PrivateMaps[i].launchpath, (char *)dlg.m_LaunchPath.GetString(), MAX_PATH); strnncpy(PrivateMaps[i].startfolder, (char *)dlg.m_StartFolder.GetString(), MAX_PATH); SetTargetFromDlg(&TargetMaps[i], &dlg); CListCtrl& listctrl = GetListCtrl(); listitem.mask = LVIF_TEXT | LVIF_IMAGE; listitem.iItem = i; listitem.iSubItem = 0; listitem.iImage = SetTargetIcon(TargetMaps[i]); listitem.pszText = PrivateMaps[i].title; listctrl.SetItem(&listitem); Resize(); SetTarget(NULL, TargetMaps); this->isUpdated=TRUE; } } void CDxwndhostView::OnExplore() { int i; CTargetDlg dlg; POSITION pos; int len; CString FilePath; HINSTANCE ret; CListCtrl& listctrl = GetListCtrl(); if(!listctrl.GetSelectedCount()) return; pos = listctrl.GetFirstSelectedItemPosition(); i = listctrl.GetNextSelectedItem(pos); FilePath = TargetMaps[i].path; len=FilePath.ReverseFind('\\'); if (len==0) return; FilePath.Truncate(len); //MessageBox(FilePath, "path", 0); extern BOOL IsWinXP(void); ret = ShellExecute(NULL, IsWinXP() ? "open" : "explore", FilePath, NULL, NULL, SW_SHOW); if((int)ret <= 32){ char message[MAX_PATH]; sprintf(message, "ShellExecute(\"%s\", \"%s\") failed.\nerror=%d", IsWinXP() ? "open" : "explore", FilePath, ret); MessageBox(message, "error", 0); } } void CDxwndhostView::OnViewLog() { int i; CTargetDlg dlg; POSITION pos; int len; CString FilePath; CListCtrl& listctrl = GetListCtrl(); if(!listctrl.GetSelectedCount()) return; pos = listctrl.GetFirstSelectedItemPosition(); i = listctrl.GetNextSelectedItem(pos); if(PrivateMaps[i].startfolder[0]){ FilePath = PrivateMaps[i].startfolder; FilePath.Append("\\dxwnd.log"); } else { FilePath = TargetMaps[i].path; len=FilePath.ReverseFind('\\'); if (len==0) return; FilePath.Truncate(len); FilePath.Append("\\dxwnd.log"); } ShellExecute(NULL, "open", FilePath, NULL, NULL, SW_SHOW); } void CDxwndhostView::OnDeleteLog() { int i; CTargetDlg dlg; POSITION pos; int len; CString FilePath; HRESULT res; FILE *logfp; CListCtrl& listctrl = GetListCtrl(); if(!listctrl.GetSelectedCount()) return; pos = listctrl.GetFirstSelectedItemPosition(); i = listctrl.GetNextSelectedItem(pos); FilePath = TargetMaps[i].path; len=FilePath.ReverseFind('\\'); if (len==0) return; FilePath.Truncate(len); FilePath.Append("\\dxwnd.log"); if((logfp=fopen(FilePath,"rb"))!=NULL){ // if the file exists .... fclose(logfp); // ... ask confirmation. res=MessageBoxLang(DXW_STRING_CLEARLOG, DXW_STRING_WARNING, MB_YESNO | MB_ICONQUESTION); if(res!=IDYES) return; } _unlink(FilePath); } void CDxwndhostView::OnDebugView() { PROCESS_INFORMATION pinfo; STARTUPINFO sinfo; char exepath[MAX_PATH+1]; char folderpath[MAX_PATH+1]; ZeroMemory(&sinfo, sizeof(sinfo)); sinfo.cb = sizeof(sinfo); GetPrivateProfileString("window", "debugview", "DbgView.exe", exepath, MAX_PATH, gInitPath); strcpy_s(folderpath, sizeof(folderpath), exepath); PathRemoveFileSpec(folderpath); if(strlen(folderpath)==0) strcpy(folderpath, ".\\"); if(!CreateProcessA(NULL, exepath, 0, 0, false, CREATE_DEFAULT_ERROR_MODE, NULL, folderpath, &sinfo, &pinfo)){ char sInfo[81]; sprintf(sInfo, "Error %d starting DebugView", GetLastError()); MessageBox(sInfo, "Error", MB_ICONERROR|MB_OK); return; } CloseHandle(pinfo.hProcess); CloseHandle(pinfo.hThread); } void CDxwndhostView::OnSetPath() { int i; CTargetDlg dlg; POSITION pos; char *lpProcName, *lpNext; extern BOOL GetProcByName(char *, char *); char FullPath[MAX_PATH+1]; char sMessage[1000]; CListCtrl& listctrl = GetListCtrl(); if(!listctrl.GetSelectedCount()) return; pos = listctrl.GetFirstSelectedItemPosition(); i = listctrl.GetNextSelectedItem(pos); //if(TargetMaps[i].path[0] != '*') return; lpProcName = &(TargetMaps[i].path[1]); while (lpNext=strchr(lpProcName,'\\')) lpProcName=lpNext+1; strcpy(FullPath,""); if(GetProcByName(lpProcName, FullPath)==0){ int res; if(strcmp(TargetMaps[i].path, FullPath)){ sprintf(sMessage, "Found replacement for \"%s\", " "full path = \"%s\", " "do you want to update the configuration?", lpProcName, FullPath); res = MessageBox(sMessage, "DxWnd set path", MB_YESNO); if(res!=IDYES) return; strcpy(TargetMaps[i].path, FullPath); this->isUpdated=TRUE; } else { sprintf(sMessage, "Path \"%s\" was already set.", FullPath); MessageBox(sMessage, "DxWnd set path", MB_OK); } } else{ sprintf(sMessage, "Replacement for \"%s\" not found, run the game!", lpProcName); MessageBox(sMessage, "DxWnd set path", MB_ICONEXCLAMATION); } } void CDxwndhostView::OnSetRegistry() { int i; CTargetDlg dlg; POSITION pos; char *Registry; FILE *regfp; CListCtrl& listctrl = GetListCtrl(); if(!listctrl.GetSelectedCount()) return; pos = listctrl.GetFirstSelectedItemPosition(); i = listctrl.GetNextSelectedItem(pos); Registry = PrivateMaps[i].registry; regfp=fopen("dxwnd.reg", "w"); if(regfp==NULL){ MessageBoxLang(DXW_STRING_VREG_ERROR, DXW_STRING_ERROR, MB_ICONERROR|MB_OK); return; } fwrite(Registry, strlen(Registry), 1, regfp); fputs("\n", regfp); fclose(regfp); } void CDxwndhostView::OnSort() { int i, itemcount; TARGETMAP MapEntry; PRIVATEMAP TitEntry; BOOL swapped; HRESULT res; CListCtrl& listctrl = GetListCtrl(); // find list entries number and ignore the command when less than 2 for(i=0; i0){ // swap entries MapEntry=TargetMaps[i]; TargetMaps[i]=TargetMaps[i+1]; TargetMaps[i+1]=MapEntry; TitEntry=PrivateMaps[i]; PrivateMaps[i]=PrivateMaps[i+1]; PrivateMaps[i+1]=TitEntry; swapped=1; } } } listctrl.DeleteAllItems(); for(i=0; iisUpdated=TRUE; this->isRegistryUpdated=TRUE; } BOOL PauseResumeThreadList(DWORD dwOwnerPID, bool bResumeThread) { HANDLE hThreadSnap = NULL; BOOL bRet = FALSE; THREADENTRY32 te32 = {0}; // Take a snapshot of all threads currently in the system. hThreadSnap = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0); if (hThreadSnap == INVALID_HANDLE_VALUE) return (FALSE); // Fill in the size of the structure before using it. te32.dwSize = sizeof(THREADENTRY32); // Walk the thread snapshot to find all threads of the process. // If the thread belongs to the process, add its information // to the display list. if (Thread32First(hThreadSnap, &te32)){ do{ if (te32.th32OwnerProcessID == dwOwnerPID){ HANDLE hThread = OpenThread(THREAD_SUSPEND_RESUME, FALSE, te32.th32ThreadID); if (bResumeThread) ResumeThread(hThread); else SuspendThread(hThread); CloseHandle(hThread); } } while (Thread32Next(hThreadSnap, &te32)); bRet = TRUE; } else bRet = FALSE; // could not walk the list of threads // Do not forget to clean up the snapshot object. CloseHandle (hThreadSnap); return (bRet); } void CDxwndhostView::OnPause() { CTargetDlg dlg; HRESULT res; DXWNDSTATUS DxWndStatus; if ((GetHookStatus(&DxWndStatus) != DXW_RUNNING) /*|| (DxWndStatus.hWnd==NULL)*/ ) { MessageBoxLang(DXW_STRING_NOPAUSETASK, DXW_STRING_INFO, MB_ICONEXCLAMATION); } else { wchar_t *wcstring = new wchar_t[48+1]; mbstowcs_s(NULL, wcstring, 48, PrivateMaps[DxWndStatus.OrigIdx].title, _TRUNCATE); res=MessageBoxLangArg(DXW_STRING_PAUSETASK, DXW_STRING_INFO, MB_YESNO | MB_ICONQUESTION, wcstring); if(res!=IDYES) return; PauseResumeThreadList(DxWndStatus.dwPid, FALSE); } } void CDxwndhostView::OnResume() { CTargetDlg dlg; HRESULT res; DXWNDSTATUS DxWndStatus; if ((GetHookStatus(&DxWndStatus) != DXW_RUNNING) /*|| (DxWndStatus.hWnd==NULL)*/) { MessageBoxLang(DXW_STRING_NORESUMETASK, DXW_STRING_INFO, MB_ICONEXCLAMATION); } else { wchar_t *wcstring = new wchar_t[48+1]; mbstowcs_s(NULL, wcstring, 48, PrivateMaps[DxWndStatus.OrigIdx].title, _TRUNCATE); res=MessageBoxLangArg(DXW_STRING_RESUMETASK, DXW_STRING_WARNING, MB_YESNO | MB_ICONQUESTION, wcstring); if(res!=IDYES) return; PauseResumeThreadList(DxWndStatus.dwPid, TRUE); } } extern HWND find_main_window(unsigned long); static void SendMessageToHookedWin(DWORD message) { DXWNDSTATUS DxWndStatus; HWND TargethWnd; if (GetHookStatus(&DxWndStatus) == DXW_RUNNING){ TargethWnd = (DxWndStatus.hWnd) ? DxWndStatus.hWnd : find_main_window(DxWndStatus.dwPid); ::PostMessage(TargethWnd, WM_SYSCOMMAND, message, 0); } } void CDxwndhostView::OnWindowMinimize() { SendMessageToHookedWin(SC_MINIMIZE); } void CDxwndhostView::OnWindowRestore() { SendMessageToHookedWin(SC_RESTORE); } void CDxwndhostView::OnWindowClose() { SendMessageToHookedWin(SC_CLOSE); } void CDxwndhostView::OnTaskbarHide() { gShowHideTaskBar(TRUE); } void CDxwndhostView::OnTaskbarShow() { gShowHideTaskBar(FALSE); } void CDxwndhostView::OnKill() { CTargetDlg dlg; HRESULT res; HANDLE TargetHandle; DXWNDSTATUS DxWndStatus; if ((GetHookStatus(&DxWndStatus) != DXW_RUNNING) /*|| (DxWndStatus.hWnd==NULL)*/) { MessageBoxLang(DXW_STRING_NOKILLTASK, DXW_STRING_INFO, MB_ICONEXCLAMATION); } else { wchar_t *wcstring = new wchar_t[48+1]; mbstowcs_s(NULL, wcstring, 48, PrivateMaps[DxWndStatus.OrigIdx].title, _TRUNCATE); res=MessageBoxLangArg(DXW_STRING_KILLTASK, DXW_STRING_WARNING, MB_YESNO | MB_ICONQUESTION, wcstring); if(res!=IDYES) return; DxWndStatus.dwPid; TargetHandle = OpenProcess(PROCESS_TERMINATE, FALSE, DxWndStatus.dwPid); if(!TargetHandle){ MessageBoxLangArg(DXW_STRING_OPENPROCESS, DXW_STRING_ERROR, MB_ICONEXCLAMATION, DxWndStatus.dwPid, GetLastError()); return; } if(!TerminateProcess(TargetHandle, 0)){ MessageBoxLangArg(DXW_STRING_TERMINATE, DXW_STRING_ERROR, MB_ICONEXCLAMATION, TargetHandle, GetLastError()); return; } CloseHandle(TargetHandle); ClipCursor(NULL); } RevertScreenChanges(&this->InitDevMode); } // void CDxwndhostView::OnProcessKill(BOOL bAll): kills one instance (bAll==FALSE) or all instances (bAll==TRUE) // of the process whose name corresponds to the selected program's list entry. void CDxwndhostView::OnProcessKill(BOOL bAll) { int i; POSITION pos; CListCtrl& listctrl = GetListCtrl(); char FilePath[MAX_PATH+1]; char *lpProcName, *lpNext; HRESULT res; if(!listctrl.GetSelectedCount()) return ; pos = listctrl.GetFirstSelectedItemPosition(); i = listctrl.GetNextSelectedItem(pos); strnncpy(FilePath, TargetMaps[i].path, MAX_PATH); lpProcName=FilePath; while (lpNext=strchr(lpProcName,'\\')) lpProcName=lpNext+1; if(TargetMaps[i].flags7 & COPYNOSHIMS){ strcat(lpProcName, ".noshim"); } if(!KillProcByName(lpProcName, FALSE, FALSE)){ wchar_t *wcstring = new wchar_t[48+1]; mbstowcs_s(NULL, wcstring, 48, PrivateMaps[i].title, _TRUNCATE); res=MessageBoxLangArg(DXW_STRING_KILLTASK, DXW_STRING_WARNING, MB_YESNO | MB_ICONQUESTION, wcstring); if(res!=IDYES) return; KillProcByName(lpProcName, TRUE, bAll); } else{ MessageBoxLang(DXW_STRING_NOKILLTASK, DXW_STRING_INFO, MB_ICONEXCLAMATION); } ClipCursor(NULL); RevertScreenChanges(&this->InitDevMode); } void CDxwndhostView::OnProcessKill() { OnProcessKill(FALSE); } void CDxwndhostView::OnProcessKillAll() { OnProcessKill(TRUE); } void CDxwndhostView::OnAdd() { OnAdd(NULL); } void CDxwndhostView::OnAdd(char *sInitialPath) { // TODO: Please add a command handler code here. int i; CTargetDlg dlg; LV_ITEM listitem; for(i = 0; i < MAXTARGETS; i ++) if(!TargetMaps[i].path[0]) break; if(i>=MAXTARGETS){ MessageBoxLang(DXW_STRING_MAXENTRIES, DXW_STRING_WARNING, MB_OK | MB_ICONEXCLAMATION); return; } memset(&TargetMaps[i],0,sizeof(TARGETMAP)); // clean up, just in case.... if(sInitialPath) dlg.m_FilePath = CString(sInitialPath); dlg.m_Coordinates = GetPrivateProfileInt("window", "defaultcoord", 0, gInitPath); dlg.m_PosX = GetPrivateProfileInt("window", "defaultposx", 50, gInitPath); dlg.m_PosY = GetPrivateProfileInt("window", "defaultposy", 50, gInitPath); dlg.m_SizX = GetPrivateProfileInt("window", "defaultsizx", 800, gInitPath); dlg.m_SizY = GetPrivateProfileInt("window", "defaultsizy", 600, gInitPath); dlg.m_LogMode = 0; // ??? if(dlg.DoModal() == IDOK && dlg.m_FilePath.GetLength()){ strnncpy(PrivateMaps[i].title, (char *)dlg.m_Title.GetString(), MAX_TITLE); PrivateMaps[i].notes = (char *)malloc(strlen(dlg.m_Notes.GetString())+1); strcpy(PrivateMaps[i].notes, (char *)dlg.m_Notes.GetString()); PrivateMaps[i].registry = (char *)malloc(strlen(dlg.m_Registry.GetString())+1); strcpy(PrivateMaps[i].registry, (char *)dlg.m_Registry.GetString()); strnncpy(PrivateMaps[i].launchpath, (char *)dlg.m_LaunchPath.GetString(), MAX_PATH); strnncpy(PrivateMaps[i].startfolder, (char *)dlg.m_StartFolder.GetString(), MAX_PATH); SetTargetFromDlg(&TargetMaps[i], &dlg); CListCtrl& listctrl = GetListCtrl(); listitem.mask = LVIF_TEXT | LVIF_IMAGE; listitem.iItem = i; listitem.iSubItem = 0; listitem.iImage = SetTargetIcon(TargetMaps[i]); if (strlen(PrivateMaps[i].title)==0){ int len; CString FilePath; FilePath=TargetMaps[i].path; len=FilePath.ReverseFind('\\'); if(GetPrivateProfileInt("window", "namefromfolder", 0, gInitPath)){ FilePath=FilePath.Left(len); len=FilePath.ReverseFind('\\'); } FilePath=FilePath.Right(FilePath.GetLength()-len-1); strncpy_s(PrivateMaps[i].title, sizeof(PrivateMaps[i].title), FilePath.GetString(), sizeof(PrivateMaps[i].title)-1); } TargetMaps[i].index = i; listitem.pszText = PrivateMaps[i].title; listctrl.InsertItem(&listitem); Resize(); SetTarget(NULL, TargetMaps); this->isUpdated=TRUE; this->isRegistryUpdated=TRUE; } } void CDxwndhostView::OnDuplicate() { POSITION pos; int i; CListCtrl& listctrl = GetListCtrl(); if(!(pos = listctrl.GetFirstSelectedItemPosition())) return; i = listctrl.GetNextSelectedItem(pos); if (listctrl.GetItemCount()>=MAXTARGETS-1) return; // too many entries to duplicate one! for(int j=listctrl.GetItemCount(); j>i; j--){ TargetMaps[j+1]=TargetMaps[j]; PrivateMaps[j+1]=PrivateMaps[j]; } TargetMaps[i+1] = TargetMaps[i]; PrivateMaps[i+1] = PrivateMaps[i]; listctrl.DeleteAllItems(); for(i=0; TargetMaps[i].path[0]; i++) { LV_ITEM listitem; listitem.mask = LVIF_TEXT | LVIF_IMAGE; listitem.iItem = i; listitem.iSubItem = 0; listitem.iImage = SetTargetIcon(TargetMaps[i]); listitem.pszText = PrivateMaps[i].title; listctrl.SetItem(&listitem); listctrl.InsertItem(&listitem); TargetMaps[i].index = i; } SetTarget(NULL, TargetMaps); this->isUpdated=TRUE; this->isRegistryUpdated=TRUE; } void CDxwndhostView::OnMoveTop() { TARGETMAP MapEntry; PRIVATEMAP TitEntry; POSITION pos; int i; CListCtrl& listctrl = GetListCtrl(); if(!(pos = listctrl.GetFirstSelectedItemPosition())) return; i = listctrl.GetNextSelectedItem(pos); if (i==0)return; MapEntry=TargetMaps[i]; TitEntry=PrivateMaps[i]; for(int j=i; j; j--){ TargetMaps[j]=TargetMaps[j-1]; PrivateMaps[j]=PrivateMaps[j-1]; } TargetMaps[0]=MapEntry; PrivateMaps[0]=TitEntry; listctrl.DeleteAllItems(); for(i=0; TargetMaps[i].path[0]; i++) { LV_ITEM listitem; listitem.mask = LVIF_TEXT | LVIF_IMAGE; listitem.iItem = i; listitem.iSubItem = 0; listitem.iImage = SetTargetIcon(TargetMaps[i]); listitem.pszText = PrivateMaps[i].title; listctrl.SetItem(&listitem); listctrl.InsertItem(&listitem); } SetTarget(NULL, TargetMaps); this->isUpdated=TRUE; this->isRegistryUpdated=TRUE; } void CDxwndhostView::OnMoveUp() { TARGETMAP MapEntry; PRIVATEMAP TitEntry; POSITION pos; int i; CListCtrl& listctrl = GetListCtrl(); if(!(pos = listctrl.GetFirstSelectedItemPosition())) return; i = listctrl.GetNextSelectedItem(pos); if (i==0)return; MapEntry=TargetMaps[i-1]; TargetMaps[i-1]=TargetMaps[i]; TargetMaps[i]=MapEntry; TitEntry=PrivateMaps[i-1]; PrivateMaps[i-1]=PrivateMaps[i]; PrivateMaps[i]=TitEntry; listctrl.DeleteAllItems(); for(i=0; TargetMaps[i].path[0]; i++) { LV_ITEM listitem; listitem.mask = LVIF_TEXT | LVIF_IMAGE; listitem.iItem = i; listitem.iSubItem = 0; listitem.iImage = SetTargetIcon(TargetMaps[i]); listitem.pszText = PrivateMaps[i].title; listctrl.SetItem(&listitem); listctrl.InsertItem(&listitem); } SetTarget(NULL, TargetMaps); this->isUpdated=TRUE; this->isRegistryUpdated=TRUE; } void CDxwndhostView::OnMoveDown() { TARGETMAP MapEntry; PRIVATEMAP TitEntry; POSITION pos; int i; CListCtrl& listctrl = GetListCtrl(); if(!(pos = listctrl.GetFirstSelectedItemPosition())) return; i = listctrl.GetNextSelectedItem(pos); if (i==listctrl.GetItemCount()-1)return; MapEntry=TargetMaps[i+1]; TargetMaps[i+1]=TargetMaps[i]; TargetMaps[i]=MapEntry; TitEntry=PrivateMaps[i+1]; PrivateMaps[i+1]=PrivateMaps[i]; PrivateMaps[i]=TitEntry; listctrl.DeleteAllItems(); for(i=0; TargetMaps[i].path[0]; i++) { LV_ITEM listitem; listitem.mask = LVIF_TEXT | LVIF_IMAGE; listitem.iItem = i; listitem.iSubItem = 0; listitem.iImage = SetTargetIcon(TargetMaps[i]); listitem.pszText = PrivateMaps[i].title; listctrl.SetItem(&listitem); listctrl.InsertItem(&listitem); } SetTarget(NULL, TargetMaps); this->isUpdated=TRUE; this->isRegistryUpdated=TRUE; } void CDxwndhostView::OnMoveBottom() { TARGETMAP MapEntry; PRIVATEMAP TitEntry; POSITION pos; int i, last; CListCtrl& listctrl = GetListCtrl(); if(!(pos = listctrl.GetFirstSelectedItemPosition())) return; i = listctrl.GetNextSelectedItem(pos); last = listctrl.GetItemCount()-1; if (i==last)return; MapEntry=TargetMaps[i]; TitEntry=PrivateMaps[i]; for(int j=i; jisUpdated=TRUE; this->isRegistryUpdated=TRUE; } void CDxwndhostView::OnDelete() { int i, len; POSITION pos; CListCtrl& listctrl = GetListCtrl(); CString FilePath; HRESULT res; if(!listctrl.GetSelectedCount()) return ; pos = listctrl.GetFirstSelectedItemPosition(); i = listctrl.GetNextSelectedItem(pos); FilePath=PrivateMaps[i].title; if (FilePath.GetLength()==0){ FilePath = TargetMaps[i].path; len=FilePath.ReverseFind('\\'); if (len==0) return; FilePath=FilePath.Right(FilePath.GetLength()-len-1); } wchar_t *wcstring = new wchar_t[MAX_PATH+1]; mbstowcs_s(NULL, wcstring, MAX_PATH, FilePath, _TRUNCATE); res=MessageBoxLangArg(DXW_STRING_DELENTRY, DXW_STRING_WARNING, MB_YESNO | MB_ICONQUESTION, wcstring); if(res!=IDYES) return; listctrl.DeleteItem(i); for(; i < MAXTARGETS - 1; i ++) { PrivateMaps[i] = PrivateMaps[i + 1]; // V2.1.74 fix TargetMaps[i] = TargetMaps[i + 1]; } TargetMaps[i].path[0]=0; // clear last one, in case there were MAXTARGETS entries Resize(); SetTarget(NULL, TargetMaps); this->isUpdated=TRUE; this->isRegistryUpdated=TRUE; } void CDxwndhostView::OnHookStart() { CMenu *menu; menu = this->GetParent()->GetMenu(); menu->CheckMenuItem(ID_HOOK_START, MF_CHECKED); menu->CheckMenuItem(ID_HOOK_STOP , MF_UNCHECKED); StartHook(); if(this->SystemTray.Enabled()) { UINT IdResource=IDI_DXWAIT; this->SystemTray.SetIcon(IdResource); } } void CDxwndhostView::OnHookStop() { CMenu *menu; // v.68: status control!! if (CheckStatus()) return; menu = this->GetParent()->GetMenu(); menu->CheckMenuItem(ID_HOOK_START, MF_UNCHECKED); menu->CheckMenuItem(ID_HOOK_STOP , MF_CHECKED); EndHook(); if(this->SystemTray.Enabled()) { UINT IdResource=IDI_DXIDLE; this->SystemTray.SetIcon(IdResource); } } void CDxwndhostView::OnClearAllLogs() { // TODO: Please add a command handler code here. int i, len; CListCtrl& listctrl = GetListCtrl(); CString FilePath; HRESULT res; res=MessageBoxLang(DXW_STRING_CLEARALL, DXW_STRING_WARNING, MB_YESNO | MB_ICONQUESTION); if(res!=IDYES) return; for(i = 0; i < MAXTARGETS; i ++) { if(!TargetMaps[i].path[0]) break; TargetMaps[i].tflags &= ~OUTTRACE; FilePath = TargetMaps[i].path; len=FilePath.ReverseFind('\\'); if (len==0) continue; FilePath.Truncate(len); FilePath.Append("\\dxwnd.log"); _unlink(FilePath); } // v2.1.92: clean %TEMP% folder FilePath = getenv("TEMP"); FilePath.Append("\\dxwnd.log"); _unlink(FilePath); } DWORD WINAPI WaitForDeath(LPVOID arg) { while(!gMustDie) Sleep(1000); exit(0); } DWORD WINAPI TrayIconUpdate(CSystemTray *Tray) { int DxStatus, PrevDxStatus; UINT IconId; char sMsg[1024]; char *Status; char DllVersion[21]; int TickCount, IdleCount; PrevDxStatus=-1; // a different one... TickCount=0; IdleCount=0; while (TRUE) { // once a second ... Sleep(1000); if(gTransientMode && gMustDie) { Tray->HideIcon(); delete(Tray->GetAncestor(GA_ROOTOWNER)); exit(0); } DxStatus=GetHookStatus(NULL); switch (DxStatus){ case DXW_IDLE: IconId=IDI_DXIDLE; Status="DISABLED"; break; case DXW_ACTIVE: IconId=IDI_DXWAIT; Status="READY"; break; case DXW_RUNNING: IconId=IDI_DXRUN; Status="RUNNING"; break; default: IconId=IDI_DXIDLE; Status="???"; break; } if (DxStatus != DXW_RUNNING){ TickCount=0; Tray->StopAnimation(); Tray->SetIcon(IconId); IdleCount++; if(IdleCount == 2) { if(gAutoHideMode) { Tray->MaximiseFromTray(pParent, FALSE); } } } else { // animation state machine .... TickCount++; IdleCount=0; if (DxStatus!=PrevDxStatus) { Tray->SetIcon(IconId); } if(TickCount > 4){ Tray->SetIconList(IDI_RUN1, IDI_RUN6); Tray->Animate(50,-1); } if(TickCount > 6){ TickCount=0; Tray->StopAnimation(); Tray->SetIcon(IDI_RUN0); } } DXWNDSTATUS DxWndStatus; GetDllVersion(DllVersion); DxWndStatus.Status=DxStatus; if(DxStatus==DXW_RUNNING){ GetHookStatus(&DxWndStatus); sprintf_s(sMsg, 1024, "Running \"%s\"\nScreen = (%dx%d) %dBPP\nFullScreen = %s\nDX version = %d", pTitles[DxWndStatus.OrigIdx].title, DxWndStatus.Width, DxWndStatus.Height, DxWndStatus.ColorDepth, DxWndStatus.IsFullScreen ? "Yes":"No", DxWndStatus.DXVersion); } else sprintf_s(sMsg, 1024, "DxWnd %s\nHook status: %s", DllVersion, Status); Tray->SetTooltipText(sMsg); PrevDxStatus=DxStatus; } } void CDxwndhostView::OnGoToTrayIcon() { CMenu *menu = this->GetParent()->GetMenu(); UINT IconId; pParent = this->GetParent(); if(!this->SystemTray.Enabled()){ HANDLE StatusThread; DWORD dwThrdId; // Create the tray icon if(!this->SystemTray.Create(NULL, WM_ICON_NOTIFY, "DxWnd", NULL, IDR_MENU_SYSTRAY, FALSE, m_StartToTray ? NULL : "DxWnd DirectDraw windowizer", // NULL inhibits the Tray banner "DxWnd", NIIF_INFO, 10)){ MessageBoxLang(DXW_STRING_TRAYFAIL, DXW_STRING_ERROR, MB_OK); // error path: if can't create a system tray icon, transient logic must be silently placed here if(gTransientMode) StatusThread= CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)WaitForDeath, (LPVOID)NULL, 0, &dwThrdId); return; } IconId=(menu->GetMenuState(ID_HOOK_START, MF_BYCOMMAND)==MF_CHECKED)?IDI_DXWAIT:IDI_DXIDLE; if(!this->SystemTray.SetIcon(IconId)){ MessageBoxLang(DXW_STRING_ICONFAIL, DXW_STRING_ERROR, MB_OK); return; } StatusThread= CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)TrayIconUpdate, (LPVOID)&this->SystemTray, 0, &dwThrdId); } this->SystemTray.ShowIcon(); this->SystemTray.SetMenuDefaultItem(0, TRUE); this->SystemTray.SetTargetWnd(pParent); // Send all menu messages here. this->SystemTray.MinimiseToTray(pParent, FALSE); } void CDxwndhostView::OnSaveFile() { if (this->isUpdated) if (MessageBoxLang(DXW_STRING_SAVELIST, DXW_STRING_WARNING, MB_YESNO | MB_ICONQUESTION)==IDYES) this->SaveConfigFile(); } void CDxwndhostView::OnTrayRestore() { CWnd *pParent = this->GetParent(); this->SystemTray.MaximiseFromTray(pParent, FALSE); } void CDxwndhostView::OnViewStatus() { CStatusDialog *pDlg = new CStatusDialog(); BOOL ret = pDlg->Create(CStatusDialog::IDD, this); pDlg->ShowWindow(SW_SHOW); } void CDxwndhostView::OnViewShims() { POSITION pos; int i; char *ExePath; CListCtrl& listctrl = GetListCtrl(); if(!(pos = listctrl.GetFirstSelectedItemPosition())) return; i = listctrl.GetNextSelectedItem(pos); ExePath = TargetMaps[i].path; CShimsDialog *pDlg = new CShimsDialog(NULL, ExePath); BOOL ret = pDlg->Create(CShimsDialog::IDD, this); pDlg->ShowWindow(SW_SHOW); } TARGETMAP *ViewTarget; // dirty !!!! void CDxwndhostView::OnViewFlags() { int i; CTargetDlg dlg; POSITION pos; CListCtrl& listctrl = GetListCtrl(); if(!listctrl.GetSelectedCount()) return; pos = listctrl.GetFirstSelectedItemPosition(); i = listctrl.GetNextSelectedItem(pos); ViewTarget = &TargetMaps[i]; CViewFlagsDialog *pDlg = new CViewFlagsDialog(); BOOL ret = pDlg->Create(CViewFlagsDialog::IDD, this); pDlg->ShowWindow(SW_SHOW); } void CDxwndhostView::OnViewDesktop() { CDesktopDialog *pDlg = new CDesktopDialog(); BOOL ret = pDlg->Create(CDesktopDialog::IDD, this); pDlg->ShowWindow(SW_SHOW); } void CDxwndhostView::OnViewPalette() { CPaletteDialog *pDlg = new CPaletteDialog(); BOOL ret = pDlg->Create(CPaletteDialog::IDD, this); pDlg->ShowWindow(SW_SHOW); } void CDxwndhostView::OnGlobalSettings() { CGlobalSettings *pDlg = new CGlobalSettings(); BOOL ret = pDlg->Create(CGlobalSettings::IDD, this); pDlg->ShowWindow(SW_SHOW); } void CDxwndhostView::OnExpertModeToggle() { CMenu *menu; gbDebug = !gbDebug; menu = this->GetParent()->GetMenu(); ::DestroyMenu(menu->GetSafeHmenu()); menu->LoadMenu(gbDebug ? IDR_MAINFRAME_EX : IDR_MAINFRAME); this->GetParent()->SetMenu(menu); menu->CheckMenuItem(ID_OPTIONS_EXPERTMODE, gbDebug ? MF_CHECKED : MF_UNCHECKED); WritePrivateProfileString("window", "debug", (gbDebug ? "1" : "0"), gInitPath); } void CDxwndhostView::OnViewTimeSlider() { CTimeSliderDialog *pDlg = new CTimeSliderDialog(); BOOL ret = pDlg->Create(CTimeSliderDialog::IDD, this); pDlg->ShowWindow(SW_SHOW); } void CDxwndhostView::OnViewVirtualJoystick() { CVJoyDialog *pDlg = new CVJoyDialog(); BOOL ret = pDlg->Create(CVJoyDialog::IDD, this); pDlg->ShowWindow(SW_SHOW); } void CDxwndhostView::Resize() { CListCtrl& listctrl = GetListCtrl(); LV_COLUMN listcol; int i, tmp, size = 0; for(i = 0; i < MAXTARGETS; i ++){ TargetMaps[i].index = i; // renumber the items if(strlen(TargetMaps[i].path) == 0) break; tmp = listctrl.GetStringWidth(PrivateMaps[i].title); if(size < tmp) size = tmp; } listcol.mask = LVCF_WIDTH; listcol.cx = size + 32; listctrl.SetColumn(0, &listcol); } void CDxwndhostView::OnRButtonDown(UINT nFlags, CPoint point) { CMenu popup; int res; ClientToScreen(&point); popup.LoadMenu(gbDebug ? IDR_MENU_POPUP_EX : IDR_MENU_POPUP); res = popup.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN | TPM_TOPALIGN | TPM_LEFTBUTTON | TPM_RETURNCMD, point.x, point.y, this); switch(res){ case ID_PRUN: OnRun(); break; case ID_RUNUNHOOKED: OnRun(TRUE); break; case ID_PMODIFY: OnModify(); break; case ID_PDELETE: OnDelete(); break; case ID_PADD: OnAdd(); break; case ID_PDUPLICATE: OnDuplicate(); break; case ID_PEXPLORE: OnExplore(); break; case ID_PLOG_VIEW: OnViewLog(); break; case ID_PLOG_DELETE: OnDeleteLog(); break; case ID_PLOG_DEBUGVIEW: OnDebugView(); break; case ID_SETREGISTRY: OnSetRegistry(); break; case ID_SETPATH: OnSetPath(); break; case ID_TASK_KILL: OnKill(); break; case ID_PKILL: OnProcessKill(); break; case ID_PKILLALL: OnProcessKillAll(); break; case ID_TASK_PAUSE: OnPause(); break; case ID_TASK_RESUME: OnResume(); break; case ID_PEXPORT: OnExport(); break; case ID_FILE_IMPORT: OnImport(); break; case ID_DESKTOPCOLORDEPTH_8BPP: OnDesktopcolordepth8bpp(); break; case ID_DESKTOPCOLORDEPTH_16BPP: OnDesktopcolordepth16bpp(); break; case ID_DESKTOPCOLORDEPTH_24BPP: OnDesktopcolordepth24bpp(); break; case ID_DESKTOPCOLORDEPTH_32BPP: OnDesktopcolordepth32bpp(); break; case ID_TOOLS_RECOVERSCREENMODE: OnRecoverScreenMode(); break; case ID_TOOLS_CLEARCOMPATIBILITYFLAGS: OnClearCompatibilityFlags(); break; case ID_TOOLS_RECOVERSYSTEMCOLORS: OnRecoverSystemColors(); break; case ID_MOVE_TOP: OnMoveTop(); break; case ID_MOVE_UP: OnMoveUp(); break; case ID_MOVE_DOWN: OnMoveDown(); break; case ID_MOVE_BOTTOM: OnMoveBottom(); break; case ID_VIEW_FLAGS: OnViewFlags(); break; } CListView::OnRButtonDown(nFlags, point); } typedef struct { char *path; char *launch; } PROCESSMAP; static DWORD WINAPI TransientWaitForChildDeath(void *p) { PROCESSMAP *ProcessMap = (PROCESSMAP *)p; BOOL bIsSomeoneAlive; int ret; char sPath[MAX_PATH]; char sLaunch[MAX_PATH]; char sTemp[MAX_PATH]; char *lpProcName, *lpNext; // strip full pathname and keep executable name only strcpy(sPath, ""); if(ProcessMap->path[0]){ strncpy(sTemp, ProcessMap->path, MAX_PATH); lpProcName=sTemp; while (lpNext=strchr(lpProcName,'\\')) lpProcName=lpNext+1; strncpy(sPath, lpProcName, MAX_PATH); } strcpy(sLaunch, ""); if(ProcessMap->launch[0]){ strncpy(sTemp, ProcessMap->launch, MAX_PATH); lpProcName=sTemp; while (lpNext=strchr(lpProcName,'\\')) lpProcName=lpNext+1; strncpy(sLaunch, lpProcName, MAX_PATH); } Sleep(3000); // Wait for process creation - necessary? while(TRUE){ Sleep(2000); bIsSomeoneAlive = FALSE; if(sPath[0]) { if (!(ret=KillProcByName(sPath, FALSE, FALSE))) bIsSomeoneAlive = TRUE; } if(sLaunch[0]) { if (!(ret=KillProcByName(sLaunch, FALSE, FALSE))) bIsSomeoneAlive = TRUE; } if(!bIsSomeoneAlive) { break; } } gMustDie = TRUE; return 0; } static char *ExceptionCaption(DWORD ec) { char *c; switch(ec){ case EXCEPTION_ACCESS_VIOLATION: c="Access Violation"; break; case EXCEPTION_DATATYPE_MISALIGNMENT: c="Datatype Misalignment"; break; case EXCEPTION_BREAKPOINT: c="Breakpoint"; break; case EXCEPTION_SINGLE_STEP: c="Single Step"; break; case EXCEPTION_ARRAY_BOUNDS_EXCEEDED: c="Array Bouds Exceeded"; break; case EXCEPTION_FLT_DENORMAL_OPERAND: c="Float Denormal Operand"; break; case EXCEPTION_FLT_DIVIDE_BY_ZERO: c="Divide by Zero"; break; case EXCEPTION_FLT_INEXACT_RESULT: c="Inexact Result"; break; case EXCEPTION_FLT_INVALID_OPERATION: c="Invalid Operation"; break; case EXCEPTION_FLT_OVERFLOW: c="Float Overflow"; break; case EXCEPTION_FLT_STACK_CHECK: c="Float Stack Check"; break; case EXCEPTION_FLT_UNDERFLOW: c="Float Undeflow"; break; case EXCEPTION_INT_DIVIDE_BY_ZERO: c="Integer Divide by Zero"; break; case EXCEPTION_INT_OVERFLOW: c="Integer Overflow"; break; case EXCEPTION_PRIV_INSTRUCTION: c="Priviliged Instruction"; break; case EXCEPTION_IN_PAGE_ERROR: c="In Page Error"; break; case EXCEPTION_ILLEGAL_INSTRUCTION: c="Illegal Instruction"; break; case EXCEPTION_NONCONTINUABLE_EXCEPTION:c="Non-continuable exception"; break; case EXCEPTION_STACK_OVERFLOW: c="Stack Overflow"; break; case EXCEPTION_INVALID_DISPOSITION: c="Invalid Disposition"; break; case EXCEPTION_GUARD_PAGE: c="Guard Page Violation"; break; case EXCEPTION_INVALID_HANDLE: c="Invalid Handle"; break; //case EXCEPTION_POSSIBLE_DEADLOCK: c="Possible Deadlock"; break; default: c="unknown"; break; } return c; } static char *sEventCode(DWORD ec) { char *c; switch(ec){ case EXCEPTION_DEBUG_EVENT: c="exception"; break; case CREATE_THREAD_DEBUG_EVENT: c="create thread"; break; case CREATE_PROCESS_DEBUG_EVENT: c="create process"; break; case EXIT_THREAD_DEBUG_EVENT: c="exit thread"; break; case EXIT_PROCESS_DEBUG_EVENT: c="exit process"; break; case LOAD_DLL_DEBUG_EVENT: c="load dll"; break; case UNLOAD_DLL_DEBUG_EVENT: c="unload dll"; break; case OUTPUT_DEBUG_STRING_EVENT: c="out debug"; break; case RIP_EVENT: c="rip"; break; default: c="unknown"; break; } return c; } // For thread messaging #define DEBUG_EVENT_MESSAGE WM_APP + 0x100 DWORD WINAPI StartDebug(void *p) { ThreadInfo_Type *ThInfo; STARTUPINFO sinfo; PROCESS_INFORMATION pinfo; char path[MAX_PATH]; extern char *GetFileNameFromHandle(HANDLE); char *sRunTargetPath; #ifdef DXWDEBUGSTEPPING PROCESS_INFORMATION *pi; CREATE_THREAD_DEBUG_INFO *ti; LOAD_DLL_DEBUG_INFO *li; UNLOAD_DLL_DEBUG_INFO *ui; EXCEPTION_DEBUG_INFO *ei; EXIT_PROCESS_DEBUG_INFO *xpi; EXIT_THREAD_DEBUG_INFO *xti; int res; BOOL step=TRUE; // initialize to TRUE to enable BOOL stepdll=FALSE; // initialize to TRUE to enable #endif #ifdef LOCKINJECTIONTHREADS DWORD StartingCode; LPVOID StartAddress = 0; HANDLE TargetHandle = NULL; #endif bool bContinueDebugging; char DebugMessage[256+1]; ThInfo = (ThreadInfo_Type *)p; ZeroMemory(&sinfo, sizeof(sinfo)); sinfo.cb = sizeof(sinfo); sRunTargetPath = ThInfo->ExePath; strcpy_s(path, sizeof(path), sRunTargetPath); PathRemoveFileSpec(path); if(!CreateProcess(NULL, sRunTargetPath, 0, 0, false, DEBUG_PROCESS|DEBUG_ONLY_THIS_PROCESS, NULL, path, &sinfo, &pinfo)){ DWORD dwLastErr = GetLastError(); switch (dwLastErr){ case 740: sprintf(DebugMessage, "Create process error=%d: DxWnd must run as administrator", dwLastErr); MessageBoxEx(0, DebugMessage, "ERROR", MB_ICONEXCLAMATION|MB_OK, NULL); if(gbDebug) OutTrace("%s\n", DebugMessage); break; default: sprintf(DebugMessage, "CREATE PROCESS error=%d", dwLastErr); MessageBoxEx(0, DebugMessage, "ERROR", MB_ICONEXCLAMATION|MB_OK, NULL); if(gbDebug) OutTrace("%s\n", DebugMessage); break; } } if(gbDebug) OutTrace("create process: path=\"%s\"\n", path); CString strEventMessage; DEBUG_EVENT debug_event ={0}; bContinueDebugging = true; DWORD dwContinueStatus = DBG_CONTINUE; while(bContinueDebugging) { dwContinueStatus = DBG_EXCEPTION_NOT_HANDLED; if (!WaitForDebugEvent(&debug_event, INFINITE)) { sprintf(DebugMessage, "Injection error: WaitForDebugEvent error=%d", GetLastError()); MessageBoxEx(0, DebugMessage, "Injection", MB_ICONEXCLAMATION|MB_OK, NULL); if(gbDebug) OutTrace("%s\n", DebugMessage); break; // must release pinfo handles } //OutTrace("Injection: WaitForDebugEvent code=%d(%s)\n", debug_event.dwDebugEventCode, sEventCode(debug_event.dwDebugEventCode)); switch(debug_event.dwDebugEventCode){ case EXIT_PROCESS_DEBUG_EVENT: if(gbDebug) OutTrace("exit process\n", DebugMessage); bContinueDebugging=false; break; case CREATE_PROCESS_DEBUG_EVENT: if (gbDebug) OutTrace("create process: base=0x%X path=\"%s\"\n", debug_event.u.CreateProcessInfo.lpBaseOfImage, GetFileNameFromHandle(debug_event.u.CreateProcessInfo.hFile)); GetFullPathName("dxwnd.dll", MAX_PATH, path, NULL); if(!Inject(pinfo.dwProcessId, path)){ // DXW_STRING_INJECTION sprintf(DebugMessage,"Injection error: pid=%x dll=%s", pinfo.dwProcessId, path); MessageBoxEx(0, DebugMessage, "Injection", MB_ICONEXCLAMATION|MB_OK, NULL); if (gbDebug) OutTrace("%s\n", DebugMessage); } #ifdef LOCKINJECTIONTHREADS extern LPVOID GetThreadStartAddress(HANDLE); DWORD EndlessLoop; EndlessLoop=0x9090FEEB; // careful: it's BIG ENDIAN: EB FE 90 90 SIZE_T BytesCount; TargetHandle = OpenProcess(PROCESS_QUERY_INFORMATION|PROCESS_VM_OPERATION|PROCESS_VM_READ|PROCESS_VM_WRITE, FALSE, pinfo.dwProcessId); if(TargetHandle){ StartAddress = GetThreadStartAddress(pinfo.hThread); if(StartAddress){ if(!ReadProcessMemory(pinfo.hProcess, StartAddress, &StartingCode, 4, &BytesCount)){ sprintf(DebugMessage,"ReadProcessMemory error=%d", GetLastError()); MessageBoxEx(0, DebugMessage, "Injection", MB_ICONEXCLAMATION|MB_OK, NULL); if (gbDebug) OutTrace("%s\n", DebugMessage); } if(!WriteProcessMemory(pinfo.hProcess, StartAddress, &EndlessLoop, 4, &BytesCount)){ sprintf(DebugMessage,"WriteProcessMemory error=%d", GetLastError()); MessageBoxEx(0, DebugMessage, "Injection", MB_ICONEXCLAMATION|MB_OK, NULL); if (gbDebug) OutTrace("%s\n", DebugMessage); } } } #endif CloseHandle(debug_event.u.CreateProcessInfo.hProcess); CloseHandle(debug_event.u.CreateProcessInfo.hThread); CloseHandle(debug_event.u.CreateProcessInfo.hFile); break; case CREATE_THREAD_DEBUG_EVENT: if (gbDebug) OutTrace("create thread: th=0x%X base=0x%X start=0x%X\n", debug_event.u.CreateThread.hThread, debug_event.u.CreateThread.lpThreadLocalBase, debug_event.u.CreateThread.lpStartAddress); //SuspendThread(debug_event.u.CreateThread.hThread); CloseHandle(debug_event.u.CreateThread.hThread); break; case EXIT_THREAD_DEBUG_EVENT: if (gbDebug) OutTrace("exit thread: exitcode=0x%X\n", debug_event.u.ExitThread.dwExitCode); #ifdef LOCKINJECTIONTHREADS if(TargetHandle && StartAddress){ if(!WriteProcessMemory(pinfo.hProcess, StartAddress, &StartingCode, 4, &BytesCount)){ sprintf(DebugMessage,"WriteProcessMemory error=%d", GetLastError()); MessageBoxEx(0, DebugMessage, "Injection", MB_ICONEXCLAMATION|MB_OK, NULL); if (gbDebug) OutTrace("%s\n", DebugMessage); } } if(TargetHandle) CloseHandle((HANDLE)TargetHandle); #endif // commented out: apparently, there must be some previous thread that starts before the hooker // bContinueDebugging=false; break; case LOAD_DLL_DEBUG_EVENT: if (gbDebug) OutTrace("load dll: base=0x%X path=\"%s\"\n", debug_event.u.LoadDll.lpBaseOfDll, GetFileNameFromHandle(debug_event.u.LoadDll.hFile)); CloseHandle(debug_event.u.LoadDll.hFile); break; case UNLOAD_DLL_DEBUG_EVENT: if (gbDebug) OutTrace("unload dll: base=0x%X\n", debug_event.u.UnloadDll.lpBaseOfDll); break; case OUTPUT_DEBUG_STRING_EVENT: if (gbDebug) OutTrace("output debug: len=%d unicode=%x\n", debug_event.u.DebugString.nDebugStringLength, debug_event.u.DebugString.fUnicode); break; case EXCEPTION_DEBUG_EVENT: //sprintf(DebugMessage, "Exception %x(%s) caught at addr=%x", // debug_event.u.Exception.ExceptionRecord.ExceptionCode, // ExceptionCaption(debug_event.u.Exception.ExceptionRecord.ExceptionCode), // debug_event.u.Exception.ExceptionRecord.ExceptionAddress); //MessageBoxEx(0, DebugMessage, "EXCEPTION", MB_ICONEXCLAMATION, NULL); if (gbDebug) OutTrace("exception: code=0x%X(%s) addr=0x%X first=%x\n", debug_event.u.Exception.ExceptionRecord.ExceptionCode, ExceptionCaption(debug_event.u.Exception.ExceptionRecord.ExceptionCode), debug_event.u.Exception.ExceptionRecord.ExceptionAddress, debug_event.u.Exception.dwFirstChance); break; default: sprintf(DebugMessage,"Unknown eventcode=%x", debug_event.dwDebugEventCode); MessageBoxEx(0, DebugMessage, "Injection", MB_ICONEXCLAMATION, NULL); if (gbDebug) OutTrace("%s\n", DebugMessage); break; } if(bContinueDebugging){ ContinueDebugEvent(debug_event.dwProcessId, debug_event.dwThreadId, dwContinueStatus); } else{ DebugSetProcessKillOnExit(FALSE); ContinueDebugEvent(debug_event.dwProcessId,debug_event.dwThreadId, DBG_CONTINUE); DebugActiveProcessStop(debug_event.dwProcessId); } } CloseHandle(pinfo.hThread); // no longer needed, avoid handle leakage CloseHandle(pinfo.hProcess); // no longer needed, avoid handle leakage return TRUE; } void InjectSuspended(char *exepath, char *dirpath) { STARTUPINFO sinfo; PROCESS_INFORMATION pinfo; char StartingCode[4]; DWORD EndlessLoop; EndlessLoop=0x9090FEEB; // careful: it's BIG ENDIAN: EB FE 90 90 DWORD BytesCount; char DebugMessage[1024]; DWORD OldProt; DWORD PEHeader[0x70]; char dllpath[MAX_PATH]; LPVOID StartAddress; HANDLE TargetHandle; FILE *fExe = NULL; BOOL bKillProcess = FALSE; OutTrace("InjectSuspended: exe=\"%s\" dir=\"%s\"\n",exepath, dirpath); ZeroMemory(&sinfo, sizeof(sinfo)); sinfo.cb = sizeof(sinfo); // attempt to load the specified target if (!CreateProcess(NULL, exepath, 0, 0, false, CREATE_SUSPENDED, NULL, dirpath, &sinfo, &pinfo)){ sprintf(DebugMessage,"CreateProcess \"%s\" error=%d", exepath, GetLastError()); MessageBoxEx(0, DebugMessage, "Injection", MB_ICONEXCLAMATION|MB_OK, NULL); if (gbDebug) OutTrace("%s\n", DebugMessage); } while(TRUE) { // fake loop bKillProcess = TRUE; // locate the entry point TargetHandle = OpenProcess( PROCESS_QUERY_INFORMATION|PROCESS_VM_OPERATION|PROCESS_VM_READ|PROCESS_VM_WRITE|PROCESS_SUSPEND_RESUME, FALSE, pinfo.dwProcessId); if (gbDebug) OutTrace("Target handle=%x\n", TargetHandle); FILE *fExe = fopen(exepath, "rb"); if(fExe==NULL){ sprintf(DebugMessage,"fopen %s error=%d", exepath, GetLastError()); MessageBoxEx(0, DebugMessage, "Injection", MB_ICONEXCLAMATION|MB_OK, NULL); if (gbDebug) OutTrace("%s\n", DebugMessage); break; } // read DOS header if(fread((void *)PEHeader, sizeof(DWORD), 0x10, fExe)!=0x10){ sprintf(DebugMessage,"fread error=%d", GetLastError()); MessageBoxEx(0, DebugMessage, "Injection", MB_ICONEXCLAMATION|MB_OK, NULL); if (gbDebug) OutTrace("%s\n", DebugMessage); break; } OutTrace("NT Header offset=%X\n", PEHeader[0xF]); fseek(fExe, PEHeader[0xF], 0); // read File header + Optional header if(fread((void *)PEHeader, sizeof(DWORD), 0x70, fExe)!=0x70){ sprintf(DebugMessage,"fread error=%d", GetLastError()); MessageBoxEx(0, DebugMessage, "Injection", MB_ICONEXCLAMATION|MB_OK, NULL); if (gbDebug) OutTrace("%s\n", DebugMessage); break; } OutTrace("AddressOfEntryPoint=%X ImageBase=%X\n", PEHeader[0xA], PEHeader[0xD]); StartAddress = (LPVOID)(PEHeader[0xA] + PEHeader[0xD]); if (gbDebug) OutTrace("Thread start address=%x\n", StartAddress); // patch the entry point with infinite loop if(!VirtualProtectEx(TargetHandle, StartAddress, 4, PAGE_EXECUTE_READWRITE, &OldProt )){ sprintf(DebugMessage,"VirtualProtectEx error=%d", GetLastError()); MessageBoxEx(0, DebugMessage, "Injection", MB_ICONEXCLAMATION|MB_OK, NULL); if (gbDebug) OutTrace("%s\n", DebugMessage); break; } if(!ReadProcessMemory(TargetHandle, StartAddress, &StartingCode, 4, &BytesCount)){ sprintf(DebugMessage,"ReadProcessMemory error=%d", GetLastError()); MessageBoxEx(0, DebugMessage, "Injection", MB_ICONEXCLAMATION|MB_OK, NULL); if (gbDebug) OutTrace("%s\n", DebugMessage); break; } if(!WriteProcessMemory(TargetHandle, StartAddress, &EndlessLoop, 4, &BytesCount)){ sprintf(DebugMessage,"WriteProcessMemory error=%d", GetLastError()); MessageBoxEx(0, DebugMessage, "Injection", MB_ICONEXCLAMATION|MB_OK, NULL); if (gbDebug) OutTrace("%s\n", DebugMessage); break; } if(!FlushInstructionCache(TargetHandle, StartAddress, 4)){ sprintf(DebugMessage,"FlushInstructionCache error=%d", GetLastError()); MessageBoxEx(0, DebugMessage, "Injection", MB_ICONEXCLAMATION|MB_OK, NULL); if (gbDebug) OutTrace("%s\n", DebugMessage); break; // error condition } // resume the main thread if(ResumeThread(pinfo.hThread)==(DWORD)-1){ sprintf(DebugMessage,"ResumeThread error=%d at:%d", GetLastError(), __LINE__); MessageBoxEx(0, DebugMessage, "Injection", MB_ICONEXCLAMATION|MB_OK, NULL); if (gbDebug) OutTrace("%s\n", DebugMessage); break; } // wait until the thread stuck at entry point CONTEXT context; context.Eip = (DWORD)0; // initialize to impossible value for ( unsigned int i = 0; i < 80 && context.Eip != (DWORD)StartAddress; ++i ){ // patience. Sleep(50); // read the thread context context.ContextFlags = CONTEXT_CONTROL; if(!GetThreadContext(pinfo.hThread, &context)){ sprintf(DebugMessage,"GetThreadContext error=%d", GetLastError()); MessageBoxEx(0, DebugMessage, "Injection", MB_ICONEXCLAMATION|MB_OK, NULL); if (gbDebug) OutTrace("%s\n", DebugMessage); break; } OutTrace("wait cycle %d eip=%x\n", i, context.Eip); } if (context.Eip != (DWORD)StartAddress){ // wait timed out sprintf(DebugMessage,"thread blocked eip=%x addr=%x", context.Eip, StartAddress); MessageBoxEx(0, DebugMessage, "Injection", MB_ICONEXCLAMATION|MB_OK, NULL); if (gbDebug) OutTrace("%s\n", DebugMessage); } // inject DLL payload into remote process GetFullPathName("dxwnd.dll", MAX_PATH, dllpath, NULL); if(!Inject(pinfo.dwProcessId, dllpath)){ // DXW_STRING_INJECTION sprintf(DebugMessage,"Injection error: pid=%x dll=%s", pinfo.dwProcessId, dllpath); MessageBoxEx(0, DebugMessage, "Injection", MB_ICONEXCLAMATION|MB_OK, NULL); if (gbDebug) OutTrace("%s\n", DebugMessage); } // pause if(SuspendThread(pinfo.hThread)==(DWORD)-1){ sprintf(DebugMessage,"SuspendThread error=%d", GetLastError()); MessageBoxEx(0, DebugMessage, "Injection", MB_ICONEXCLAMATION|MB_OK, NULL); if (gbDebug) OutTrace("%s\n", DebugMessage); break; } // restore original entry point if(!WriteProcessMemory(TargetHandle, StartAddress, &StartingCode, 4, &BytesCount)){ sprintf(DebugMessage,"WriteProcessMemory error=%d", GetLastError()); MessageBoxEx(0, DebugMessage, "Injection", MB_ICONEXCLAMATION|MB_OK, NULL); if (gbDebug) OutTrace("%s\n", DebugMessage); throw; } if(!FlushInstructionCache(TargetHandle, StartAddress, 4)){ sprintf(DebugMessage,"FlushInstructionCache error=%d", GetLastError()); MessageBoxEx(0, DebugMessage, "Injection", MB_ICONEXCLAMATION|MB_OK, NULL); if (gbDebug) OutTrace("%s\n", DebugMessage); break; // error condition } // you are ready to go // pause and restore original entry point if(ResumeThread(pinfo.hThread)==(DWORD)-1){ sprintf(DebugMessage,"ResumeThread error=%d at:%d", GetLastError(), __LINE__); MessageBoxEx(0, DebugMessage, "Injection", MB_ICONEXCLAMATION|MB_OK, NULL); if (gbDebug) OutTrace("%s\n", DebugMessage); break; } bKillProcess = FALSE; break; // exit fake loop } // cleanup .... if(fExe) fclose(fExe); if(TargetHandle) CloseHandle(TargetHandle); // terminate the newly spawned process if(bKillProcess){ if(!TerminateProcess( pinfo.hProcess, -1 )){ if (gbDebug) OutTrace("failed to kill hproc=%x err=%d\n", pinfo.hProcess, GetLastError()); } } } DWORD RecoverTargetMaps(LPVOID TargetMaps) { Sleep(5000); SetTarget(NULL, (TARGETMAP *)TargetMaps); return 0; } // from https://www.winehq.org/pipermail/wine-users/2002-April/007910.html // // There is no publicaly available version numbering for SafeDisc. However, it // seems that the version number is stored in the executable as 3 unsigned 32-bit // integers. Using an hexadecimal editor, locate the following byte pattern in // the wrapper (game.exe) // // > 426f475f 202a3930 2e302621 21202059 BoG_ *90.0&!! Y // > 793e0000 y>.. // // There should be 3 unsigned integers right after that, which are respectively // the version, subversion an revision number. // // On some versions of SafeDisc there are 3 null integers following the pattern, // before the version number. You'll then have to look at the 3 unsigned 32-bit // integers right after // // > 426f475f 202a3930 2e302621 21202059 BoG_ *90.0&!! Y // > 793e0000 00000000 00000000 00000000 y>.............. static void CheckSafeDiscVersion(char *path) { unsigned char opcode[44+1]; char sMessage[81]; DWORD dwVersion, dwSubversion, dwRevision; FILE *exe; long seekpos; exe=fopen(path, "rb"); if(!exe) return; while(TRUE) { seekpos=ftell(exe); if(fread(opcode, 1, 44, exe) != 44) break; //MessageBox(0, "check", "debug", 0); // fast way to make 20 char comparisons ..... if(*(DWORD *)opcode ==0x5F476F42) if(*(DWORD *)(opcode+4) ==0x30392A20) if(*(DWORD *)(opcode+8) ==0x2126302E) if(*(DWORD *)(opcode+12)==0x59202021) if(*(DWORD *)(opcode+16)==0x00003E79){ dwVersion = *(DWORD *)(opcode+20); dwSubversion = *(DWORD *)(opcode+24); dwRevision = *(DWORD *)(opcode+28); if(dwVersion == 0){ dwVersion = *(DWORD *)(opcode+32); dwSubversion = *(DWORD *)(opcode+36); dwRevision = *(DWORD *)(opcode+40); } sprintf(sMessage, "Safedisk version %d.%d.%d detected", dwVersion, dwSubversion, dwRevision); MessageBox(NULL, sMessage, "DxWnd hint", MB_OKCANCEL|MB_ICONWARNING|MB_TOPMOST); break; } if(fseek(exe, seekpos+4, SEEK_SET)) break; } fclose(exe); } #define FILECOPYBUFSIZE 1024 static void MakeHiddenFile(char *sTargetPath) { HANDLE hFile = INVALID_HANDLE_VALUE; HANDLE hTempFile = INVALID_HANDLE_VALUE; BOOL fSuccess = FALSE; DWORD dwRetVal = 0; UINT uRetVal = 0; DWORD dwBytesRead = 0; DWORD dwBytesWritten = 0; char chBuffer[FILECOPYBUFSIZE]; hFile = CreateFile(sTargetPath, // file name GENERIC_READ, // open for reading 0, // do not share NULL, // default security OPEN_EXISTING, // existing file only FILE_ATTRIBUTE_NORMAL, // normal file NULL); // no template if (hFile == INVALID_HANDLE_VALUE) { //PrintError(TEXT("First CreateFile failed")); return; } strcat(sTargetPath, ".noshim"); // Deletes last copy of the file, just in case it was updated (patched?) // DeleteFile(sTargetPath); // Creates the new file to write to for the upper-case version. hTempFile = CreateFile((LPTSTR) sTargetPath, // file name GENERIC_WRITE, // open for write 0, // do not share NULL, // default security CREATE_ALWAYS, // overwrite existing //FILE_ATTRIBUTE_HIDDEN, // hidden file FILE_ATTRIBUTE_NORMAL, // normal file NULL); // no template if (hTempFile == INVALID_HANDLE_VALUE) { char msg[120]; sprintf(msg, "Creation of hidden copy of target file with no SHIMs failed\nError=%d", GetLastError()); MessageBox(0, msg, "Warning", 0); //PrintError(TEXT("Second CreateFile failed")); if (!CloseHandle(hFile)){ sprintf(msg, "CloseHandle failed\nError=%d", GetLastError()); MessageBox(0, msg, "Error", 0); } return; } // Reads BUFSIZE blocks to the buffer and copy to the temporary // file. do { if (ReadFile(hFile, chBuffer, FILECOPYBUFSIZE, &dwBytesRead, NULL)) { fSuccess = WriteFile(hTempFile, chBuffer, dwBytesRead, &dwBytesWritten, NULL); if (!fSuccess) { //PrintError(TEXT("WriteFile failed")); break; } } else { //PrintError(TEXT("ReadFile failed")); break; } // Continues until the whole file is processed. } while (dwBytesRead == FILECOPYBUFSIZE); CloseHandle(hFile); CloseHandle(hTempFile); } PROCESSMAP pm; void CDxwndhostView::OnRun() { OnRun(FALSE); } void CDxwndhostView::OnRun(BOOL bForceNoHook) { CListCtrl& listctrl = GetListCtrl(); POSITION pos; int i; STARTUPINFO sinfo; PROCESS_INFORMATION pinfo; char folderpath[MAX_PATH+20]; // max + space for ".noshim" char exepath[MAX_PATH+20]; // max + space for ".noshim" TARGETMAP RestrictedMaps[2]; char *sRunTargetPath; if(gTransientMode){ i=iProgIndex-1; if(i<0) i=0; } else { if(!listctrl.GetSelectedCount()) return; pos = listctrl.GetFirstSelectedItemPosition(); i = listctrl.GetNextSelectedItem(pos); } sRunTargetPath = (strlen(PrivateMaps[i].launchpath)>0) ? PrivateMaps[i].launchpath : TargetMaps[i].path; ZeroMemory(&sinfo, sizeof(sinfo)); sinfo.cb = sizeof(sinfo); // create a virtually single entry in the targetmap array memcpy(&RestrictedMaps[0], &TargetMaps[i], sizeof(TARGETMAP)); memset(&RestrictedMaps[1], 0, sizeof(TARGETMAP)); if(!(PrivateMaps[i].startfolder[0])){ strcpy_s(folderpath, sizeof(folderpath), sRunTargetPath); strcpy_s(exepath, sizeof(exepath), sRunTargetPath); PathRemoveFileSpec(folderpath); }else{ strcpy_s(folderpath, sizeof(folderpath), PrivateMaps[i].startfolder); strcpy_s(exepath, sizeof(exepath), sRunTargetPath); } if(TargetMaps[i].flags7 & COPYNOSHIMS){ MakeHiddenFile(exepath); strncpy(RestrictedMaps[0].path, exepath, MAX_PATH); } if(bForceNoHook) RestrictedMaps[0].flags3 &= ~HOOKENABLED; SetTarget(NULL, RestrictedMaps); OutTrace("OnRun idx=%d prog=\"%s\" unhooked=%x\n", i, TargetMaps[i].path, bForceNoHook); if(TargetMaps[i].flags7 & HOOKNORUN){ MessageBoxLang(DXW_STRING_CANT_RUN, DXW_STRING_WARNING, MB_ICONERROR|MB_OK); return; } // self-elevation if configured and necessary if(TargetMaps[i].flags & NEEDADMINCAPS){ extern BOOL DxSelfElevate(CDxwndhostView *); OSVERSIONINFO osver = { sizeof(osver) }; if (GetVersionEx(&osver) && (osver.dwMajorVersion >= 6)){ OutTrace("self elevation\n"); DxSelfElevate(this); } } if((TargetMaps[i].flags3 & EMULATEREGISTRY) || (TargetMaps[i].flags4 & OVERRIDEREGISTRY)){ if(this->isRegistryUpdated){ if(MessageBoxLang(DXW_STRING_VREG_UPDATE,DXW_STRING_WARNING, MB_OKCANCEL|MB_ICONINFORMATION)==IDOK) this->SaveConfigFile(); } OutTrace("export virtual registry entry[%d]\n"); FILE *regfp; char *Registry; Registry = PrivateMaps[i].registry; regfp=fopen("dxwnd.reg", "w"); if(regfp==NULL)MessageBoxLang(DXW_STRING_VREG_ERROR, DXW_STRING_ERROR, MB_ICONERROR|MB_OK); fwrite(Registry, strlen(Registry), 1, regfp); fputs("\n", regfp); fclose(regfp); } if(TargetMaps[i].flags7 & SHOWHINTS){ OutTrace("checksafediscversion\n"); CheckSafeDiscVersion(TargetMaps[i].path); } // v2.04.04: fix - STARTDEBUG and INJECTSUSPENDED must take place only when HOOKENABLED if ((TargetMaps[i].flags2 & STARTDEBUG) && (TargetMaps[i].flags3 & HOOKENABLED)){ OutTrace("debugger mode\n"); ThreadInfo_Type ThreadInfo; ThreadInfo.TM=&TargetMaps[i]; ThreadInfo.PM=&PrivateMaps[i]; ThreadInfo.ExePath=exepath; CloseHandle(CreateThread( NULL, 0, StartDebug, &ThreadInfo, 0, NULL)); } else if ((TargetMaps[i].flags7 & INJECTSUSPENDED) && (TargetMaps[i].flags3 & HOOKENABLED)){ OutTrace("injectsuspended mode\n"); InjectSuspended(exepath, folderpath); } else{ OutTrace("setwindowshook mode\n"); CreateProcess(NULL, exepath, 0, 0, false, CREATE_DEFAULT_ERROR_MODE, NULL, folderpath, &sinfo, &pinfo); CloseHandle(pinfo.hProcess); // no longer needed, avoid handle leakage CloseHandle(pinfo.hThread); // no longer needed, avoid handle leakage } if(gTransientMode){ pm.launch = &(PrivateMaps[i].launchpath[0]); pm.path = &(TargetMaps[i].path[0]); CreateThread( NULL, 0, TransientWaitForChildDeath, &pm, 0, NULL); } // wait & recover CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)RecoverTargetMaps, (LPVOID)TargetMaps, 0, NULL); // go to tray icon mode when autohide is set, but only if hooking is enabled. If not enable it // is not possible to monitor the process status, so the window will never show automatically! if(gAutoHideMode && !bForceNoHook) this->OnGoToTrayIcon(); // not working: the file is opened, can't be deleted //if(TargetMaps[i].flags7 & COPYNOSHIMS){ // DeleteFile(exepath); //} } void SwitchToColorDepth(int bpp) { DEVMODE CurrentDevMode; BOOL res; EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &CurrentDevMode); if(MessageBoxLangArg(DXW_STRING_NEWCOLOR, DXW_STRING_WARNING, MB_OKCANCEL | MB_ICONQUESTION, CurrentDevMode.dmBitsPerPel, bpp)!=IDOK) return; //OutTraceDW("ChangeDisplaySettings: CURRENT wxh=(%dx%d) BitsPerPel=%d -> 16\n", // CurrentDevMode.dmPelsWidth, CurrentDevMode.dmPelsHeight, CurrentDevMode.dmBitsPerPel); CurrentDevMode.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT; CurrentDevMode.dmBitsPerPel = bpp; res=ChangeDisplaySettings(&CurrentDevMode, CDS_UPDATEREGISTRY); if(res!=DISP_CHANGE_SUCCESSFUL) { WCHAR *err; switch(res){ case DISP_CHANGE_BADDUALVIEW: err=L"BADDUALVIEW"; break; case DISP_CHANGE_BADFLAGS: err=L"BADFLAGS"; break; case DISP_CHANGE_BADMODE: err=L"BADMODE"; break; case DISP_CHANGE_BADPARAM: err=L"BADPARAM"; break; case DISP_CHANGE_FAILED: err=L"FAILED"; break; case DISP_CHANGE_NOTUPDATED: err=L"NOTUPDATED"; break; case DISP_CHANGE_RESTART: err=L"RESTART"; break; default: err=L"???"; break; } MessageBoxLangArg(DXW_STRING_ERRCOLOR, DXW_STRING_ERROR, MB_OK | MB_ICONEXCLAMATION, err, GetLastError()); } } void CDxwndhostView::OnDesktopcolordepth8bpp() { SwitchToColorDepth(8); } void CDxwndhostView::OnDesktopcolordepth16bpp() { SwitchToColorDepth(16); } void CDxwndhostView::OnDesktopcolordepth24bpp() { SwitchToColorDepth(24); } void CDxwndhostView::OnDesktopcolordepth32bpp() { SwitchToColorDepth(32); } void CDxwndhostView::OnRecoverScreenMode() { RevertScreenChanges(&this->InitDevMode); } void CDxwndhostView::OnRecoverSystemColors() { extern DWORD SysColors[]; //for(int index=COLOR_SCROLLBAR; index<=COLOR_MENUBAR; index++) { for(int index=COLOR_SCROLLBAR; index<=COLOR_BTNHIGHLIGHT; index++) { // don't mess with taskbar ... if(SysColors[index]) { INT colors[1]; colors[0]=index; ::SetSysColors(1, colors, &SysColors[index]); } } } void CDxwndhostView::OnClearCompatibilityFlags() { int i; POSITION pos; CListCtrl& listctrl = GetListCtrl(); CString FilePath; HRESULT res; char sMessage[500]; DWORD lKeyLength; LONG ret; if(!listctrl.GetSelectedCount()) return ; pos = listctrl.GetFirstSelectedItemPosition(); i = listctrl.GetNextSelectedItem(pos); //sprintf(sMessage, "Clear all compatibility flags for \"%s\"?", PrivateMaps[i].title); //res=MessageBox(sMessage, "DxWnd", MB_YESNO | MB_ICONQUESTION); res=MessageBoxLangArg(DXW_STRING_CLEAR_COMP, DXW_STRING_DXWND, MB_YESNO | MB_ICONQUESTION, PrivateMaps[i].title); if(res!=IDYES) return; FilePath=TargetMaps[i].path; if (FilePath.GetLength()==0) return; HKEY hk; lKeyLength = 0L; DWORD lType; ret=RegOpenKeyEx(HKEY_CURRENT_USER, "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Layers", 0, KEY_ALL_ACCESS, &hk); if(ret){ if(ret != ERROR_FILE_NOT_FOUND){ sprintf(sMessage, "error %ld in RegOpenKeyEx HKEY_CURRENT_USER", ret); MessageBox(sMessage, "DxWnd", MB_OK); } } else { ret=RegQueryValueEx(hk, TargetMaps[i].path, NULL, &lType, NULL, &lKeyLength); if(ret && (ret != ERROR_FILE_NOT_FOUND)){ sprintf(sMessage, "error %ld in RegQueryValue hk=%lx \"%s\"", ret, hk, TargetMaps[i].path); MessageBox(sMessage, "DxWnd", MB_OK); } if(lKeyLength > 0L) { MessageBox("Found compatibility flag in HKEY_CURRENT_USER", "DxWnd", MB_OK); if(ret = RegDeleteValue(hk, TargetMaps[i].path)) { sprintf(sMessage, "error %ld in RegDeleteValue hk=%lx \"%s\"", ret, hk, TargetMaps[i].path); MessageBox(sMessage, "DxWnd", MB_OK); } } RegCloseKey(hk); } hk=0L; lKeyLength = 0L; ret=RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Layers", 0, KEY_ALL_ACCESS, &hk); if(ret){ if(ret != ERROR_FILE_NOT_FOUND){ sprintf(sMessage, "error %ld in RegOpenKeyEx HKEY_LOCAL_MACHINE", ret); MessageBox(sMessage, "DxWnd", MB_OK); } } else{ ret=RegQueryValueEx(hk, TargetMaps[i].path, NULL, &lType, NULL, &lKeyLength); if(ret && (ret != ERROR_FILE_NOT_FOUND)){ sprintf(sMessage, "error %ld in RegQueryValue hk=%lx \"%s\"", ret, hk, TargetMaps[i].path); MessageBox(sMessage, "DxWnd", MB_OK); } if(lKeyLength > 0L) { MessageBox("Found compatibility flag in HKEY_LOCAL_MACHINE", "DxWnd", MB_OK); if(ret = RegDeleteValue(hk, TargetMaps[i].path)) { sprintf(sMessage, "error %ld in RegDeleteValue hk=%lx \"%s\"", ret, hk, TargetMaps[i].path); MessageBox(sMessage, "DxWnd", MB_OK); } } RegCloseKey(hk); } } void CDxwndhostView::OnDropFiles(HDROP dropInfo) { CString sFile; DWORD nBuffer = 0; char *p; // Get number of files UINT nFilesDropped = DragQueryFile(dropInfo, 0xFFFFFFFF, NULL, 0); if(nFilesDropped > 0){ nBuffer = DragQueryFile(dropInfo, 0, NULL, 0); DragQueryFile(dropInfo, 0, sFile.GetBuffer(nBuffer+1), nBuffer+1); p = (char *)sFile.GetString(); p += (strlen(p)-4); if(!_strnicmp(p, ".dxw", 4)){ for(UINT i=1; i<=nFilesDropped; i++){ if(!this->OnImport(sFile)) break; nBuffer = DragQueryFile(dropInfo, i, NULL, 0); DragQueryFile(dropInfo, i, sFile.GetBuffer(nBuffer+1), nBuffer+1); p = (char *)sFile.GetString(); p += (strlen(p)-4); if(_strnicmp(p, ".dxw", 4)) break; } } else { this->OnAdd(sFile.GetBuffer()); } sFile.ReleaseBuffer(); } DragFinish(dropInfo); } ================================================ FILE: host/dxwndhostView.h ================================================ // dxwndhostView.h : CDxwndhostView class definition and interface declarations. // ///////////////////////////////////////////////////////////////////////////// #include "SystemTray.h" #if !defined(AFX_DXWNDHOSTVIEW_H__E8E112CE_6FE9_4F01_AB94_D53F844D5A09__INCLUDED_) #define AFX_DXWNDHOSTVIEW_H__E8E112CE_6FE9_4F01_AB94_D53F844D5A09__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 class CDxwndhostView : public CListView { protected: // Create from serialization only features. CDxwndhostView(); afx_msg void OnHotKey(UINT, UINT, UINT); DECLARE_DYNCREATE(CDxwndhostView) BOOL isUpdated; BOOL isRegistryUpdated; void SaveConfigFile(); BOOL OnInitDialog(); private: void Resize(void); TARGETMAP TargetMaps[MAXTARGETS]; PRIVATEMAP PrivateMaps[MAXTARGETS]; DEVMODE InitDevMode; CSystemTray SystemTray; int LastX, LastY, LastCX, LastCY; CImageList m_cImageListNormal, m_cImageListSmall; // Attributes public: CDxwndhostDoc* GetDocument(); // Operation public: // Override // ClassWizard Generates a virtual function overrides. //{{AFX_VIRTUAL(CDxwndhostView) public: virtual void OnDraw(CDC* pDC); // Be overridden when rendering this view. virtual BOOL PreCreateWindow(CREATESTRUCT& cs); protected: virtual void OnInitialUpdate(); // Called once after the initial construction. void UpdateHotKeys(); //}}AFX_VIRTUAL // Implementation public: virtual ~CDxwndhostView(); #ifdef _DEBUG virtual void AssertValid() const; virtual void Dump(CDumpContext& dc) const; #endif protected: // Generated message map functions protected: //{{AFX_MSG(CDxwndhostView) afx_msg void OnDblclk(NMHDR* pNMHDR, LRESULT* pResult); afx_msg void OnAdd(); afx_msg void OnAdd(char *); afx_msg void OnDuplicate(); afx_msg void OnModify(); afx_msg void OnExport(); afx_msg void OnImport(); BOOL OnImport(CString); afx_msg void OnDelete(); afx_msg void OnExplore(); afx_msg void OnKill(); afx_msg void OnProcessKill(); afx_msg void OnProcessKill(BOOL); afx_msg void OnProcessKillAll(); afx_msg void OnPause(); afx_msg void OnResume(); afx_msg void OnWindowRestore(); afx_msg void OnWindowMinimize(); afx_msg void OnWindowClose(); afx_msg void OnTaskbarHide(); afx_msg void OnTaskbarShow(); afx_msg void OnSort(); afx_msg void OnGlobalSettings(); afx_msg void OnExpertModeToggle(); afx_msg void OnViewLog(); afx_msg void OnDeleteLog(); afx_msg void OnDebugView(); afx_msg void OnSetRegistry(); afx_msg void OnSetPath(); afx_msg void OnRButtonDown(UINT nFlags, CPoint point); afx_msg void OnRun(); afx_msg void OnRun(BOOL); afx_msg void OnClearAllLogs(); afx_msg void OnGoToTrayIcon(); afx_msg void OnSaveFile(); afx_msg void OnHookStart(); afx_msg void OnInitMenu(); afx_msg void OnHookStop(); afx_msg void OnTrayRestore(); afx_msg void OnViewStatus(); afx_msg void OnViewShims(); afx_msg void OnViewDesktop(); afx_msg void OnViewPalette(); afx_msg void OnViewTimeSlider(); afx_msg void OnViewVirtualJoystick(); afx_msg void OnExit(); afx_msg void OnDesktopcolordepth8bpp(); afx_msg void OnDesktopcolordepth16bpp(); afx_msg void OnDesktopcolordepth24bpp(); afx_msg void OnDesktopcolordepth32bpp(); afx_msg void OnRecoverScreenMode(); afx_msg void OnClearCompatibilityFlags(); afx_msg void OnRecoverSystemColors(); afx_msg void OnMoveTop(); afx_msg void OnMoveUp(); afx_msg void OnMoveDown(); afx_msg void OnMoveBottom(); afx_msg void OnDropFiles(HDROP hDropInfo); afx_msg void OnViewFlags(); //}}AFX_MSG DECLARE_MESSAGE_MAP() }; #ifndef _DEBUG // dxwndhostView.cpp for debugging environment. inline CDxwndhostDoc* CDxwndhostView::GetDocument() { return (CDxwndhostDoc*)m_pDocument; } #endif ///////////////////////////////////////////////////////////////////////////// //{{AFX_INSERT_LOCATION}} // Microsoft Visual C++ Will insert additional declarations immediately before the previous line. #endif // !defined(AFX_DXWNDHOSTVIEW_H__E8E112CE_6FE9_4F01_AB94_D53F844D5A09__INCLUDED_) ================================================ FILE: host/findwindow.cpp ================================================ #include #include "stdafx.h" struct handle_data { unsigned long process_id; HWND best_handle; }; static BOOL is_main_window(HWND handle) { return GetWindow(handle, GW_OWNER) == (HWND)0 && IsWindowVisible(handle); } static BOOL CALLBACK enum_windows_callback(HWND handle, LPARAM lParam) { handle_data& data = *(handle_data*)lParam; unsigned long process_id = 0; GetWindowThreadProcessId(handle, &process_id); if (data.process_id != process_id || !is_main_window(handle)) { return TRUE; } data.best_handle = handle; return FALSE; } HWND find_main_window(unsigned long process_id) { handle_data data; data.process_id = process_id; data.best_handle = 0; EnumWindows(enum_windows_callback, (LPARAM)&data); return data.best_handle; } ================================================ FILE: host/getfname.cpp ================================================ #include "stdafx.h" #include #include #include #include "shlwapi.h" #define BUFSIZE 512 //Cstring GetFileNameFromHandle(HANDLE hFile) char *GetFileNameFromHandle(HANDLE hFile) { BOOL bSuccess = FALSE; TCHAR pszFilename[MAX_PATH+1]; HANDLE hFileMap; //CString strFilename; static char strFilename[MAX_PATH+1]; // Get the file size. DWORD dwFileSizeHi = 0; DWORD dwFileSizeLo = GetFileSize(hFile, &dwFileSizeHi); if( dwFileSizeLo == 0 && dwFileSizeHi == 0 ) return FALSE; typedef DWORD (WINAPI *GetMappedFileName_Type)(HANDLE, LPVOID, LPTSTR, DWORD); static GetMappedFileName_Type pGetMappedFileName = NULL; if(!pGetMappedFileName) do { // fake loop HMODULE lib; // Psapi.dll (if PSAPI_VERSION=1) on Windows 7 and Windows Server 2008 R2; // Psapi.dll on Windows Server 2008, Windows Vista, Windows Server 2003, and Windows XP lib=LoadLibrary("Psapi.dll"); pGetMappedFileName=(GetMappedFileName_Type)GetProcAddress(lib,"GetMappedFileNameA"); if(pGetMappedFileName) break; // Kernel32.dll on Windows 7 and Windows Server 2008 R2; FreeLibrary(lib); lib=LoadLibrary("Kernel32.dll"); pGetMappedFileName=(GetMappedFileName_Type)GetProcAddress(lib,"GetMappedFileNameA"); if(!pGetMappedFileName) return NULL; } while(FALSE); // Create a file mapping object. hFileMap = CreateFileMapping(hFile, NULL, PAGE_READONLY, 0, 1, NULL); if (hFileMap) { // Create a file mapping to get the file name. void* pMem = MapViewOfFile(hFileMap, FILE_MAP_READ, 0, 0, 1); if (pMem) { if ((*pGetMappedFileName) (GetCurrentProcess(), pMem, pszFilename, MAX_PATH)){ // Translate path with device name to drive letters. TCHAR szTemp[BUFSIZE]; szTemp[0] = '\0'; if (GetLogicalDriveStrings(BUFSIZE-1, szTemp)) { TCHAR szName[MAX_PATH]; TCHAR szDrive[3] = TEXT(" :"); BOOL bFound = FALSE; TCHAR* p = szTemp; do { // Copy the drive letter to the template string *szDrive = *p; // Look up each device name if (QueryDosDevice(szDrive, szName, MAX_PATH)){ size_t uNameLen = _tcslen(szName); if (uNameLen < MAX_PATH) { bFound = _tcsnicmp(pszFilename, szName, uNameLen) == 0; //if (bFound) strFilename.Format(L"%s%s",szDrive, pszFilename+uNameLen); if (bFound) sprintf(strFilename, "%s%s", szDrive, pszFilename+uNameLen); } } // Go to the next NULL character. while (*p++); } while (!bFound && *p); // end of string } } bSuccess = TRUE; UnmapViewOfFile(pMem); } CloseHandle(hFileMap); } return(strFilename); } ================================================ FILE: host/host.rc ================================================ #include "afxres.rc" ================================================ FILE: host/res/dxwndhost.rc2 ================================================ // // DXWNDHOST.RC2 - this file is not editable by Microsoft Visual C++ // #ifdef APSTUDIO_INVOKED #error this file is not editable by Microsoft Visual C++ #endif //APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // If you want to edit your own resources, please add here... ///////////////////////////////////////////////////////////////////////////// ================================================ FILE: host/resource1.h ================================================ //{{NO_DEPENDENCIES}} // Microsoft Visual C++ generated include file. // Used by host.rc // Next default values for new objects // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 101 #define _APS_NEXT_COMMAND_VALUE 40001 #define _APS_NEXT_CONTROL_VALUE 1001 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif ================================================ FILE: locale/cn/Resources_Cn.sln ================================================  Microsoft Visual Studio Solution File, Format Version 10.00 # Visual Studio 2008 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Resources_CN", "Resources_CN.vcproj", "{F8D07BBB-A04B-4C0C-8AF8-7F839A152456}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Release|Win32 = Release|Win32 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {F8D07BBB-A04B-4C0C-8AF8-7F839A152456}.Debug|Win32.ActiveCfg = Debug|Win32 {F8D07BBB-A04B-4C0C-8AF8-7F839A152456}.Debug|Win32.Build.0 = Debug|Win32 {F8D07BBB-A04B-4C0C-8AF8-7F839A152456}.Release|Win32.ActiveCfg = Release|Win32 {F8D07BBB-A04B-4C0C-8AF8-7F839A152456}.Release|Win32.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal ================================================ FILE: locale/cn/Resources_Cn.vcproj ================================================ ================================================ FILE: locale/en/Resources_En.sln ================================================  Microsoft Visual Studio Solution File, Format Version 10.00 # Visual Studio 2008 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Resources_EN", "Resources_En.vcproj", "{F8D07BBB-A04B-4C0C-8AF8-7F839A152456}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Release|Win32 = Release|Win32 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {F8D07BBB-A04B-4C0C-8AF8-7F839A152456}.Debug|Win32.ActiveCfg = Debug|Win32 {F8D07BBB-A04B-4C0C-8AF8-7F839A152456}.Debug|Win32.Build.0 = Debug|Win32 {F8D07BBB-A04B-4C0C-8AF8-7F839A152456}.Release|Win32.ActiveCfg = Release|Win32 {F8D07BBB-A04B-4C0C-8AF8-7F839A152456}.Release|Win32.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal ================================================ FILE: locale/en/Resources_En.vcproj ================================================ ================================================ FILE: locale/it/Resources_It.sln ================================================  Microsoft Visual Studio Solution File, Format Version 10.00 # Visual Studio 2008 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Resources_IT", "Resources_It.vcproj", "{F8D07BBB-A04B-4C0C-8AF8-7F839A152456}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Release|Win32 = Release|Win32 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {F8D07BBB-A04B-4C0C-8AF8-7F839A152456}.Debug|Win32.ActiveCfg = Debug|Win32 {F8D07BBB-A04B-4C0C-8AF8-7F839A152456}.Debug|Win32.Build.0 = Debug|Win32 {F8D07BBB-A04B-4C0C-8AF8-7F839A152456}.Release|Win32.ActiveCfg = Release|Win32 {F8D07BBB-A04B-4C0C-8AF8-7F839A152456}.Release|Win32.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal ================================================ FILE: locale/it/Resources_It.vcproj ================================================ ================================================ FILE: locale/ru/Resources_Ru.sln ================================================  Microsoft Visual Studio Solution File, Format Version 10.00 # Visual Studio 2008 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Resources_RU", "Resources_Ru.vcproj", "{F8D07BBB-A04B-4C0C-8AF8-7F839A152456}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Release|Win32 = Release|Win32 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {F8D07BBB-A04B-4C0C-8AF8-7F839A152456}.Debug|Win32.ActiveCfg = Debug|Win32 {F8D07BBB-A04B-4C0C-8AF8-7F839A152456}.Debug|Win32.Build.0 = Debug|Win32 {F8D07BBB-A04B-4C0C-8AF8-7F839A152456}.Release|Win32.ActiveCfg = Release|Win32 {F8D07BBB-A04B-4C0C-8AF8-7F839A152456}.Release|Win32.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal ================================================ FILE: locale/ru/Resources_Ru.vcproj ================================================ ================================================ FILE: proxy/d3d8.cpp ================================================ //------------------------------------------------------------------------------ // Tiny DirectDraw Proxy DLL v1.0 [28.05.2010] // Copyright 2010 Evgeny Vrublevsky //------------------------------------------------------------------------------ #define APP_NAME "Tiny DirectDraw Proxy" #define APP_VERSION "1.0 [28.05.2010]" #define WIN32_LEAN_AND_MEAN #include #include void InitDxWnd(void); void DxWndEndHook(void); struct ddraw_dll { HMODULE dll; FARPROC Direct3DCreate8; FARPROC DebugSetMute; FARPROC ValidateVertexShader; FARPROC ValidatePixelShader; } d3d8; __declspec(naked) void FakeDirect3DCreate8() { _asm { jmp [d3d8.Direct3DCreate8] } } __declspec(naked) void FakeDebugSetMute() { _asm { jmp [d3d8.DebugSetMute] } } __declspec(naked) void FakeValidateVertexShader() { _asm { jmp [d3d8.ValidateVertexShader] } } __declspec(naked) void FakeValidatePixelShader() { _asm { jmp [d3d8.ValidatePixelShader] } } BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) { char path[MAX_PATH]; switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: { CopyMemory(path+GetSystemDirectory(path,MAX_PATH-10), "\\d3d8.dll",11); d3d8.dll = LoadLibrary(path); if (d3d8.dll == false) { MessageBox(0, "Cannot load original d3d8.dll library", APP_NAME, MB_ICONERROR); ExitProcess(0); } d3d8.Direct3DCreate8 = GetProcAddress(d3d8.dll, "Direct3DCreate8"); d3d8.DebugSetMute = GetProcAddress(d3d8.dll, "DebugSetMute"); d3d8.ValidateVertexShader = GetProcAddress(d3d8.dll, "ValidateVertexShader"); d3d8.ValidatePixelShader = GetProcAddress(d3d8.dll, "ValidatePixelShader"); InitDxWnd(); break; } case DLL_PROCESS_DETACH: { DxWndEndHook(); FreeLibrary(d3d8.dll); } break; } return TRUE; } ================================================ FILE: proxy/d3d8.def ================================================ LIBRARY "ddraw" EXPORTS ValidatePixelShader = FakeValidatePixelShader @1 ValidateVertexShader = FakeValidateVertexShader @2 DebugSetMute = FakeDebugSetMute @3 Direct3DCreate8 = FakeDirect3DCreate8 @4 ================================================ FILE: proxy/d3d8.sln ================================================  Microsoft Visual Studio Solution File, Format Version 10.00 # Visual Studio 2008 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "d3d8", "d3d8.vcproj", "{579E7FE7-2745-4100-A802-23511711FCDE}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Release|Win32 = Release|Win32 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {579E7FE7-2745-4100-A802-23511711FCDE}.Debug|Win32.ActiveCfg = Debug|Win32 {579E7FE7-2745-4100-A802-23511711FCDE}.Debug|Win32.Build.0 = Debug|Win32 {579E7FE7-2745-4100-A802-23511711FCDE}.Release|Win32.ActiveCfg = Release|Win32 {579E7FE7-2745-4100-A802-23511711FCDE}.Release|Win32.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal ================================================ FILE: proxy/d3d8.vcproj ================================================ ================================================ FILE: proxy/d3d9.cpp ================================================ //------------------------------------------------------------------------------ // Tiny DirectDraw Proxy DLL v1.0 [28.05.2010] // Copyright 2010 Evgeny Vrublevsky //------------------------------------------------------------------------------ #define APP_NAME "Tiny DirectDraw Proxy" #define APP_VERSION "1.0 [28.05.2010]" #define WIN32_LEAN_AND_MEAN #include #include void InitDxWnd(void); void DxWndEndHook(void); struct d3d9_dll { HMODULE dll; FARPROC Direct3DShaderValidatorCreate9; FARPROC PSGPError; FARPROC PSGPSampleTexture; FARPROC D3DPERF_BeginEvent; FARPROC D3DPERF_EndEvent; FARPROC D3DPERF_GetStatus; FARPROC D3DPERF_QueryRepeatFrame; FARPROC D3DPERF_SetMarker; FARPROC D3DPERF_SetOptions; FARPROC D3DPERF_SetRegion; FARPROC DebugSetLevel; FARPROC DebugSetMute; FARPROC Direct3DCreate9; FARPROC Direct3DCreate9Ex; } d3d9; __declspec(naked) void FakeDirect3DShaderValidatorCreate9() { _asm { jmp [d3d9.Direct3DShaderValidatorCreate9] } } __declspec(naked) void FakePSGPError() { _asm { jmp [d3d9.PSGPError] } } __declspec(naked) void FakePSGPSampleTexture() { _asm { jmp [d3d9.PSGPSampleTexture] } } __declspec(naked) void FakeD3DPERF_BeginEvent() { _asm { jmp [d3d9.D3DPERF_BeginEvent] } } __declspec(naked) void FakeD3DPERF_EndEvent() { _asm { jmp [d3d9.D3DPERF_EndEvent] } } __declspec(naked) void FakeD3DPERF_GetStatus() { _asm { jmp [d3d9.D3DPERF_GetStatus] } } __declspec(naked) void FakeD3DPERF_QueryRepeatFrame() { _asm { jmp [d3d9.D3DPERF_QueryRepeatFrame] } } __declspec(naked) void FakeD3DPERF_SetMarker() { _asm { jmp [d3d9.D3DPERF_SetMarker] } } __declspec(naked) void FakeD3DPERF_SetOptions() { _asm { jmp [d3d9.D3DPERF_SetOptions] } } __declspec(naked) void FakeD3DPERF_SetRegion() { _asm { jmp [d3d9.D3DPERF_SetRegion] } } __declspec(naked) void FakeDebugSetLevel() { _asm { jmp [d3d9.DebugSetLevel] } } __declspec(naked) void FakeDebugSetMute() { _asm { jmp [d3d9.DebugSetMute] } } __declspec(naked) void FakeDirect3DCreate9() { _asm { jmp [d3d9.Direct3DCreate9] } } __declspec(naked) void FakeDirect3DCreate9Ex() { _asm { jmp [d3d9.Direct3DCreate9Ex] } } BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) { char path[MAX_PATH]; switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: { CopyMemory(path+GetSystemDirectory(path,MAX_PATH-10), "\\d3d9.dll",11); d3d9.dll = LoadLibrary(path); if (d3d9.dll == false) { MessageBox(0, "Cannot load original d3d9.dll library", APP_NAME, MB_ICONERROR); ExitProcess(0); } d3d9.Direct3DShaderValidatorCreate9 = GetProcAddress(d3d9.dll, "Direct3DShaderValidatorCreate9"); d3d9.PSGPError = GetProcAddress(d3d9.dll, "PSGPError"); d3d9.PSGPSampleTexture = GetProcAddress(d3d9.dll, "PSGPSampleTexture"); d3d9.D3DPERF_BeginEvent = GetProcAddress(d3d9.dll, "D3DPERF_BeginEvent"); d3d9.D3DPERF_EndEvent = GetProcAddress(d3d9.dll, "D3DPERF_EndEvent"); d3d9.D3DPERF_GetStatus = GetProcAddress(d3d9.dll, "D3DPERF_GetStatus"); d3d9.D3DPERF_QueryRepeatFrame = GetProcAddress(d3d9.dll, "D3DPERF_QueryRepeatFrame"); d3d9.D3DPERF_SetMarker = GetProcAddress(d3d9.dll, "D3DPERF_SetMarker"); d3d9.D3DPERF_SetOptions = GetProcAddress(d3d9.dll, "D3DPERF_SetOptions"); d3d9.D3DPERF_SetRegion = GetProcAddress(d3d9.dll, "D3DPERF_SetRegion"); d3d9.DebugSetLevel = GetProcAddress(d3d9.dll, "DebugSetLevel"); d3d9.DebugSetMute = GetProcAddress(d3d9.dll, "DebugSetMute"); d3d9.Direct3DCreate9 = GetProcAddress(d3d9.dll, "Direct3DCreate9"); d3d9.Direct3DCreate9Ex = GetProcAddress(d3d9.dll, "Direct3DCreate9Ex"); InitDxWnd(); break; } case DLL_PROCESS_DETACH: { DxWndEndHook(); FreeLibrary(d3d9.dll); } break; } return TRUE; } ================================================ FILE: proxy/d3d9.def ================================================ LIBRARY "d3d9" EXPORTS Direct3DShaderValidatorCreate9 = FakeDirect3DShaderValidatorCreate9 @1 PSGPError = FakePSGPError @2 PSGPSampleTexture = FakePSGPSampleTexture @3 D3DPERF_BeginEvent = FakeD3DPERF_BeginEvent @4 D3DPERF_EndEvent = FakeD3DPERF_EndEvent @5 D3DPERF_GetStatus = FakeD3DPERF_GetStatus @6 D3DPERF_QueryRepeatFrame = FakeD3DPERF_QueryRepeatFrame @7 D3DPERF_SetMarker = FakeD3DPERF_SetMarker @8 D3DPERF_SetOptions = FakeD3DPERF_SetOptions @9 D3DPERF_SetRegion = FakeD3DPERF_SetRegion @10 DebugSetLevel = FakeDebugSetLevel @11 DebugSetMute = FakeDebugSetMute @12 Direct3DCreate9 = FakeDirect3DCreate9 @13 Direct3DCreate9Ex = FakeDirect3DCreate9Ex @14 ================================================ FILE: proxy/d3d9.sln ================================================  Microsoft Visual Studio Solution File, Format Version 10.00 # Visual Studio 2008 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "d3d9", "d3d9.vcproj", "{579E7FE7-2745-4100-A802-23511711FCDE}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Release|Win32 = Release|Win32 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {579E7FE7-2745-4100-A802-23511711FCDE}.Debug|Win32.ActiveCfg = Debug|Win32 {579E7FE7-2745-4100-A802-23511711FCDE}.Debug|Win32.Build.0 = Debug|Win32 {579E7FE7-2745-4100-A802-23511711FCDE}.Release|Win32.ActiveCfg = Release|Win32 {579E7FE7-2745-4100-A802-23511711FCDE}.Release|Win32.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal ================================================ FILE: proxy/d3d9.txt ================================================ Direct3DShaderValidatorCreate9 PSGPError PSGPSampleTexture D3DPERF_BeginEvent D3DPERF_EndEvent D3DPERF_GetStatus D3DPERF_QueryRepeatFrame D3DPERF_SetMarker D3DPERF_SetOptions D3DPERF_SetRegion DebugSetLevel DebugSetMute Direct3DCreate9 Direct3DCreate9Ex ================================================ FILE: proxy/d3d9.vcproj ================================================ ================================================ FILE: proxy/ddraw.cpp ================================================ //------------------------------------------------------------------------------ // Tiny DirectDraw Proxy DLL v1.0 [28.05.2010] // Copyright 2010 Evgeny Vrublevsky //------------------------------------------------------------------------------ #define APP_NAME "Tiny DirectDraw Proxy" #define APP_VERSION "1.0 [28.05.2010]" #define WIN32_LEAN_AND_MEAN #include #include void InitDxWnd(void); void DxWndEndHook(void); struct ddraw_dll { HMODULE dll; FARPROC AcquireDDThreadLock; FARPROC CheckFullscreen; FARPROC CompleteCreateSysmemSurface; FARPROC D3DParseUnknownCommand; FARPROC DDGetAttachedSurfaceLcl; FARPROC DDInternalLock; FARPROC DDInternalUnlock; FARPROC DSoundHelp; FARPROC DirectDrawCreate; FARPROC DirectDrawCreateClipper; FARPROC DirectDrawCreateEx; FARPROC DirectDrawEnumerateA; FARPROC DirectDrawEnumerateExA; FARPROC DirectDrawEnumerateExW; FARPROC DirectDrawEnumerateW; FARPROC DllCanUnloadNow; FARPROC DllGetClassObject; FARPROC GetDDSurfaceLocal; FARPROC GetOLEThunkData; FARPROC GetSurfaceFromDC; FARPROC RegisterSpecialCase; FARPROC ReleaseDDThreadLock; } ddraw; __declspec(naked) void FakeAcquireDDThreadLock() { _asm { jmp [ddraw.AcquireDDThreadLock] } } __declspec(naked) void FakeCheckFullscreen() { _asm { jmp [ddraw.CheckFullscreen] } } __declspec(naked) void FakeCompleteCreateSysmemSurface() { _asm { jmp [ddraw.CompleteCreateSysmemSurface] } } __declspec(naked) void FakeD3DParseUnknownCommand() { _asm { jmp [ddraw.D3DParseUnknownCommand] } } __declspec(naked) void FakeDDGetAttachedSurfaceLcl() { _asm { jmp [ddraw.DDGetAttachedSurfaceLcl] } } __declspec(naked) void FakeDDInternalLock() { _asm { jmp [ddraw.DDInternalLock] } } __declspec(naked) void FakeDDInternalUnlock() { _asm { jmp [ddraw.DDInternalUnlock] } } __declspec(naked) void FakeDSoundHelp() { _asm { jmp [ddraw.DSoundHelp] } } // HRESULT WINAPI DirectDrawCreate( GUID FAR *lpGUID, LPDIRECTDRAW FAR *lplpDD, IUnknown FAR *pUnkOuter ); __declspec(naked) void FakeDirectDrawCreate() { _asm { jmp [ddraw.DirectDrawCreate] } } // HRESULT WINAPI DirectDrawCreateClipper( DWORD dwFlags, LPDIRECTDRAWCLIPPER FAR *lplpDDClipper, IUnknown FAR *pUnkOuter ); __declspec(naked) void FakeDirectDrawCreateClipper() { _asm { jmp [ddraw.DirectDrawCreateClipper] } } // HRESULT WINAPI DirectDrawCreateEx( GUID FAR * lpGuid, LPVOID *lplpDD, REFIID iid,IUnknown FAR *pUnkOuter ); __declspec(naked) void FakeDirectDrawCreateEx() { _asm { jmp [ddraw.DirectDrawCreateEx] } } // HRESULT WINAPI DirectDrawEnumerateA( LPDDENUMCALLBACKA lpCallback, LPVOID lpContext ); __declspec(naked) void FakeDirectDrawEnumerateA() { _asm { jmp [ddraw.DirectDrawEnumerateA] } } // HRESULT WINAPI DirectDrawEnumerateExA( LPDDENUMCALLBACKEXA lpCallback, LPVOID lpContext, DWORD dwFlags ); __declspec(naked) void FakeDirectDrawEnumerateExA() { _asm { jmp [ddraw.DirectDrawEnumerateExA] } } // HRESULT WINAPI DirectDrawEnumerateExW( LPDDENUMCALLBACKEXW lpCallback, LPVOID lpContext, DWORD dwFlags ); __declspec(naked) void FakeDirectDrawEnumerateExW() { _asm { jmp [ddraw.DirectDrawEnumerateExW] } } // HRESULT WINAPI DirectDrawEnumerateW( LPDDENUMCALLBACKW lpCallback, LPVOID lpContext ); __declspec(naked) void FakeDirectDrawEnumerateW() { _asm { jmp [ddraw.DirectDrawEnumerateW] } } __declspec(naked) void FakeDllCanUnloadNow() { _asm { jmp [ddraw.DllCanUnloadNow] } } __declspec(naked) void FakeDllGetClassObject() { _asm { jmp [ddraw.DllGetClassObject] } } __declspec(naked) void FakeGetDDSurfaceLocal() { _asm { jmp [ddraw.GetDDSurfaceLocal] } } __declspec(naked) void FakeGetOLEThunkData() { _asm { jmp [ddraw.GetOLEThunkData] } } __declspec(naked) void FakeGetSurfaceFromDC() { _asm { jmp [ddraw.GetSurfaceFromDC] } } __declspec(naked) void FakeRegisterSpecialCase() { _asm { jmp [ddraw.RegisterSpecialCase] } } __declspec(naked) void FakeReleaseDDThreadLock() { _asm { jmp [ddraw.ReleaseDDThreadLock] } } BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) { char path[MAX_PATH]; switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: { CopyMemory(path+GetSystemDirectory(path,MAX_PATH-10), "\\ddraw.dll",11); ddraw.dll = LoadLibrary(path); if (ddraw.dll == false) { MessageBox(0, "Cannot load original ddraw.dll library", APP_NAME, MB_ICONERROR); ExitProcess(0); } ddraw.AcquireDDThreadLock = GetProcAddress(ddraw.dll, "AcquireDDThreadLock"); ddraw.CheckFullscreen = GetProcAddress(ddraw.dll, "CheckFullscreen"); ddraw.CompleteCreateSysmemSurface = GetProcAddress(ddraw.dll, "CompleteCreateSysmemSurface"); ddraw.D3DParseUnknownCommand = GetProcAddress(ddraw.dll, "D3DParseUnknownCommand"); ddraw.DDGetAttachedSurfaceLcl = GetProcAddress(ddraw.dll, "DDGetAttachedSurfaceLcl"); ddraw.DDInternalLock = GetProcAddress(ddraw.dll, "DDInternalLock"); ddraw.DDInternalUnlock = GetProcAddress(ddraw.dll, "DDInternalUnlock"); ddraw.DSoundHelp = GetProcAddress(ddraw.dll, "DSoundHelp"); ddraw.DirectDrawCreate = GetProcAddress(ddraw.dll, "DirectDrawCreate"); ddraw.DirectDrawCreateClipper = GetProcAddress(ddraw.dll, "DirectDrawCreateClipper"); ddraw.DirectDrawCreateEx = GetProcAddress(ddraw.dll, "DirectDrawCreateEx"); ddraw.DirectDrawEnumerateA = GetProcAddress(ddraw.dll, "DirectDrawEnumerateA"); ddraw.DirectDrawEnumerateExA = GetProcAddress(ddraw.dll, "DirectDrawEnumerateExA"); ddraw.DirectDrawEnumerateExW = GetProcAddress(ddraw.dll, "DirectDrawEnumerateExW"); ddraw.DirectDrawEnumerateW = GetProcAddress(ddraw.dll, "DirectDrawEnumerateW"); ddraw.DllCanUnloadNow = GetProcAddress(ddraw.dll, "DllCanUnloadNow"); ddraw.DllGetClassObject = GetProcAddress(ddraw.dll, "DllGetClassObject"); ddraw.GetDDSurfaceLocal = GetProcAddress(ddraw.dll, "GetDDSurfaceLocal"); ddraw.GetOLEThunkData = GetProcAddress(ddraw.dll, "GetOLEThunkData"); ddraw.GetSurfaceFromDC = GetProcAddress(ddraw.dll, "GetSurfaceFromDC"); ddraw.RegisterSpecialCase = GetProcAddress(ddraw.dll, "RegisterSpecialCase"); ddraw.ReleaseDDThreadLock = GetProcAddress(ddraw.dll, "ReleaseDDThreadLock"); InitDxWnd(); break; } case DLL_PROCESS_DETACH: { DxWndEndHook(); FreeLibrary(ddraw.dll); } break; } return TRUE; } ================================================ FILE: proxy/ddraw.def ================================================ LIBRARY "ddraw" EXPORTS AcquireDDThreadLock = FakeAcquireDDThreadLock @1 CheckFullscreen = FakeCheckFullscreen @2 CompleteCreateSysmemSurface = FakeCompleteCreateSysmemSurface @3 D3DParseUnknownCommand = FakeD3DParseUnknownCommand @4 DDGetAttachedSurfaceLcl = FakeDDGetAttachedSurfaceLcl @5 DDInternalLock = FakeDDInternalLock @6 DDInternalUnlock = FakeDDInternalUnlock @7 DSoundHelp = FakeDSoundHelp @8 DirectDrawCreate = FakeDirectDrawCreate @9 DirectDrawCreateClipper = FakeDirectDrawCreateClipper @10 DirectDrawCreateEx = FakeDirectDrawCreateEx @11 DirectDrawEnumerateA = FakeDirectDrawEnumerateA @12 DirectDrawEnumerateExA = FakeDirectDrawEnumerateExA @13 DirectDrawEnumerateExW = FakeDirectDrawEnumerateExW @14 DirectDrawEnumerateW = FakeDirectDrawEnumerateW @15 DllCanUnloadNow = FakeDllCanUnloadNow PRIVATE DllGetClassObject = FakeDllGetClassObject PRIVATE GetDDSurfaceLocal = FakeGetDDSurfaceLocal @18 GetOLEThunkData = FakeGetOLEThunkData @19 GetSurfaceFromDC = FakeGetSurfaceFromDC @20 RegisterSpecialCase = FakeRegisterSpecialCase @21 ReleaseDDThreadLock = FakeReleaseDDThreadLock @22 ================================================ FILE: proxy/ddraw.sln ================================================  Microsoft Visual Studio Solution File, Format Version 10.00 # Visual Studio 2008 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ddraw", "ddraw.vcproj", "{579E7FE7-2745-4100-A802-23511711FCDE}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Release|Win32 = Release|Win32 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {579E7FE7-2745-4100-A802-23511711FCDE}.Debug|Win32.ActiveCfg = Debug|Win32 {579E7FE7-2745-4100-A802-23511711FCDE}.Debug|Win32.Build.0 = Debug|Win32 {579E7FE7-2745-4100-A802-23511711FCDE}.Release|Win32.ActiveCfg = Release|Win32 {579E7FE7-2745-4100-A802-23511711FCDE}.Release|Win32.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal ================================================ FILE: proxy/ddraw.vcproj ================================================ ================================================ FILE: proxy/init.cpp ================================================ #include #include #include "dxwnd.h" typedef int (*StartHook_)(); typedef int (*EndHook_)(); typedef int (*SetTarget_)(TARGETMAP *); BOOL DxWndEnabled = FALSE; char DxWndIniPath[] = ".\\dxwnd.dxw"; static TARGETMAP target; static HMODULE hModule; static int GetIntEntry(char *tag, int default) { return GetPrivateProfileInt("target", tag, default, DxWndIniPath); } void InitDxWnd(void) { char DxWndPath[MAX_PATH]; GetPrivateProfileString("system", "dxwndpath", ".", DxWndPath, MAX_PATH, DxWndIniPath); //MessageBox(0, DxWndPath, "dxwnd", MB_ICONERROR); sprintf(DxWndPath, "%s\\dxwnd.dll", DxWndPath); //MessageBox(0, DxWndPath, "dxwnd", MB_ICONERROR); hModule = LoadLibraryA(DxWndPath); //hModule = LoadLibraryA("dxwnd.dll"); if (hModule) { StartHook_ startHook = (StartHook_)GetProcAddress(hModule, "StartHook"); SetTarget_ setTarget = (SetTarget_)GetProcAddress(hModule, "SetTarget"); if (startHook && setTarget) { // target.path must be set to current task pathname. GetModuleFileNameA(NULL, target.path, MAX_PATH); target.FakeVersionId = GetIntEntry("winver0", 0); target.flags = GetIntEntry("flag0", EMULATESURFACE|MODIFYMOUSE|USERGB565); target.flags2 = GetIntEntry("flagg0", WINDOWIZE|SETCOMPATIBILITY); target.flags3 = GetIntEntry("flagh0", HOOKDLLS|HOOKENABLED); target.flags4 = GetIntEntry("flagi0", SUPPORTSVGA); target.flags5 = GetIntEntry("flagj0", AEROBOOST|CENTERTOWIN); target.flags6 = GetIntEntry("flagk0", 0); target.flags7 = GetIntEntry("flagl0", 0); target.flags8 = GetIntEntry("flagm0", 0); target.flags9 = GetIntEntry("flagn0", 0); target.flags10 = GetIntEntry("flago0", 0); target.tflags = GetIntEntry("tflag0", 0); target.dflags = GetIntEntry("dflag0", 0); target.posx = GetIntEntry("posx0", 0); target.posy = GetIntEntry("posy0", 0); target.sizx = GetIntEntry("sizx0", 0); target.sizy = GetIntEntry("sizy0", 0); target.coordinates = GetIntEntry("coord0", 1); // centered to desktop target.MaxFPS = GetIntEntry("maxfps0", 0); target.dxversion = GetIntEntry("ver0", 0); if(target.dxversion > 1) target.dxversion += 5; target.FakeVersionId= GetIntEntry("winver0", 0); target.MaxScreenRes = GetIntEntry("maxres0", 0); target.SwapEffect = GetIntEntry("swapeffect0", 0); target.InitTS = GetIntEntry("initts0", 0); target.monitorid = GetIntEntry("monitorid0", -1); target.resw = GetIntEntry("initresw0", 800); target.resh = GetIntEntry("initresh0", 600); target.MaxDdrawInterface = GetIntEntry("maxddinterface0", 7); target.ScanLine = GetIntEntry("scanline0", 0); setTarget((TARGETMAP *)&target); startHook(); } } else MessageBox(0, "Cannot load dxwnd.dll library", "dxwnd", MB_ICONERROR); } void DxWndEndHook(void) { if (hModule) { EndHook_ endHook = (EndHook_)GetProcAddress(hModule, "EndHook"); if (endHook) endHook(); } } ================================================ FILE: proxy/wing32.cpp ================================================ //------------------------------------------------------------------------------ // Tiny WinG32 Proxy DLL v1.0 [30.01.2017] // Copyright 2010 Evgeny Vrublevsky , 2017 GHO //------------------------------------------------------------------------------ #define APP_NAME "Tiny WinG32 Proxy" #define APP_VERSION "1.0 [28.05.2010]" #define WIN32_LEAN_AND_MEAN #include #include void InitDxWnd(void); void DxWndEndHook(void); struct wing32_dll { HMODULE dll; FARPROC WinGCreateDC; FARPROC WinGCreateBitmap; FARPROC WinGBitBlt; FARPROC WinGStretchBlt; FARPROC WinGRecommendDIBFormat; FARPROC WinGGetDIBPointer; FARPROC WinGSetDIBColorTable; FARPROC WinGGetDIBColorTable; FARPROC WinGCreateHalftonePalette; FARPROC WinGCreateHalftoneBrush; } wing32; __declspec(naked) void FakeWinGCreateDC() { _asm { jmp [wing32.WinGCreateDC] } } __declspec(naked) void FakeWinGCreateBitmap() { _asm { jmp [wing32.WinGCreateBitmap] } } __declspec(naked) void FakeWinGBitBlt() { _asm { jmp [wing32.WinGBitBlt] } } __declspec(naked) void FakeWinGStretchBlt() { _asm { jmp [wing32.WinGStretchBlt] } } __declspec(naked) void FakeWinGRecommendDIBFormat() { _asm { jmp [wing32.WinGRecommendDIBFormat] } } __declspec(naked) void FakeWinGGetDIBPointer() { _asm { jmp [wing32.WinGGetDIBPointer] } } __declspec(naked) void FakeWinGSetDIBColorTable() { _asm { jmp [wing32.WinGSetDIBColorTable] } } __declspec(naked) void FakeWinGGetDIBColorTable() { _asm { jmp [wing32.WinGGetDIBColorTable] } } __declspec(naked) void FakeWinGCreateHalftonePalette() { _asm { jmp [wing32.WinGCreateHalftonePalette] } } __declspec(naked) void FakeWinGCreateHalftoneBrush() { _asm { jmp [wing32.WinGCreateHalftoneBrush] } } BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) { char path[MAX_PATH]; switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: { CopyMemory(path+GetSystemDirectory(path,MAX_PATH-10), "\\wing32.dll",11); wing32.dll = LoadLibrary(path); if (wing32.dll == false) { MessageBox(0, "Cannot load original wing32.dll library", APP_NAME, MB_ICONERROR); ExitProcess(0); } wing32.WinGCreateDC = GetProcAddress(wing32.dll, "WinGCreateDC"); wing32.WinGCreateBitmap = GetProcAddress(wing32.dll, "WinGCreateBitmap"); wing32.WinGBitBlt = GetProcAddress(wing32.dll, "WinGBitBlt"); wing32.WinGStretchBlt = GetProcAddress(wing32.dll, "WinGStretchBlt"); wing32.WinGRecommendDIBFormat = GetProcAddress(wing32.dll, "WinGRecommendDIBFormat"); wing32.WinGGetDIBPointer = GetProcAddress(wing32.dll, "WinGGetDIBPointer"); wing32.WinGSetDIBColorTable = GetProcAddress(wing32.dll, "WinGSetDIBColorTable"); wing32.WinGGetDIBColorTable = GetProcAddress(wing32.dll, "WinGGetDIBColorTable"); wing32.WinGCreateHalftonePalette = GetProcAddress(wing32.dll, "WinGCreateHalftonePalette"); wing32.WinGCreateHalftoneBrush = GetProcAddress(wing32.dll, "WinGCreateHalftoneBrush"); InitDxWnd(); break; } case DLL_PROCESS_DETACH: { DxWndEndHook(); FreeLibrary(wing32.dll); } break; } return TRUE; } ================================================ FILE: proxy/wing32.def ================================================ LIBRARY "wing32" EXPORTS WinGCreateDC = FakeWinGCreateDC @1 WinGCreateBitmap = FakeWinGCreateBitmap @2 WinGBitBlt = FakeWinGBitBlt @3 WinGStretchBlt = FakeWinGStretchBlt @4 WinGRecommendDIBFormat = FakeWinGRecommendDIBFormat @5 WinGGetDIBPointer = FakeWinGGetDIBPointer @6 WinGSetDIBColorTable = FakeWinGSetDIBColorTable @7 WinGGetDIBColorTable = FakeWinGGetDIBColorTable @8 WinGCreateHalftonePalette = FakeWinGCreateHalftonePalette @9 WinGCreateHalftoneBrush = FakeWinGCreateHalftoneBrush @10 ================================================ FILE: proxy/wing32.sln ================================================  Microsoft Visual Studio Solution File, Format Version 10.00 # Visual Studio 2008 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wing32", "wing32.vcproj", "{579E7FE7-2745-4100-A802-23511711FCDF}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Release|Win32 = Release|Win32 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {579E7FE7-2745-4100-A802-23511711FCDF}.Debug|Win32.ActiveCfg = Debug|Win32 {579E7FE7-2745-4100-A802-23511711FCDF}.Debug|Win32.Build.0 = Debug|Win32 {579E7FE7-2745-4100-A802-23511711FCDF}.Release|Win32.ActiveCfg = Release|Win32 {579E7FE7-2745-4100-A802-23511711FCDF}.Release|Win32.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal ================================================ FILE: proxy/wing32.vcproj ================================================ ================================================ FILE: wing/wing32.cpp ================================================ /* * WinG support * * Copyright 2007 Dmitry Timoshkov * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #define _CRT_SECURE_NO_WARNINGS #define GDIREMAPPED #include "windows.h" #include "windef.h" // === wrappers === #ifdef GDIREMAPPED HDC WINAPI WinGCreateDC(void) { return CreateCompatibleDC(0); } HBITMAP WINAPI WinGCreateBitmap(HDC hdc, BITMAPINFO *bmi, void **bits) { return CreateDIBSection(hdc, bmi, 0, bits, 0, 0); } BOOL WINAPI WinGBitBlt(HDC hdcDst, INT xDst, INT yDst, INT width, INT height, HDC hdcSrc, INT xSrc, INT ySrc) { return BitBlt(hdcDst, xDst, yDst, width, height, hdcSrc, xSrc, ySrc, SRCCOPY); } BOOL WINAPI WinGStretchBlt(HDC hdcDst, INT xDst, INT yDst, INT widthDst, INT heightDst, HDC hdcSrc, INT xSrc, INT ySrc, INT widthSrc, INT heightSrc) { INT old_blt_mode; BOOL ret; old_blt_mode = SetStretchBltMode(hdcDst, COLORONCOLOR); ret = StretchBlt(hdcDst, xDst, yDst, widthDst, heightDst, hdcSrc, xSrc, ySrc, widthSrc, heightSrc, SRCCOPY); SetStretchBltMode(hdcDst, old_blt_mode); return ret; } BOOL WINAPI WinGRecommendDIBFormat(BITMAPINFO *bmi) { if (!bmi) return FALSE; bmi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); bmi->bmiHeader.biWidth = 320; bmi->bmiHeader.biHeight = -1; bmi->bmiHeader.biPlanes = 1; bmi->bmiHeader.biBitCount = 8; bmi->bmiHeader.biCompression = BI_RGB; bmi->bmiHeader.biSizeImage = 0; bmi->bmiHeader.biXPelsPerMeter = 0; bmi->bmiHeader.biYPelsPerMeter = 0; bmi->bmiHeader.biClrUsed = 0; bmi->bmiHeader.biClrImportant = 0; return TRUE; } void * WINAPI WinGGetDIBPointer(HBITMAP hbmp, BITMAPINFO *bmi) { DIBSECTION ds; if (GetObjectW( hbmp, sizeof(ds), &ds ) == sizeof(ds)){ memcpy(&bmi->bmiHeader, &ds.dsBmih, sizeof(*bmi)); return ds.dsBm.bmBits; } return NULL; } UINT WINAPI WinGSetDIBColorTable(HDC hdc, UINT start, UINT end, RGBQUAD *colors) { return SetDIBColorTable(hdc, start, end, colors); } UINT WINAPI WinGGetDIBColorTable(HDC hdc, UINT start, UINT end, RGBQUAD *colors) { return GetDIBColorTable(hdc, start, end, colors); } HPALETTE WINAPI WinGCreateHalftonePalette(void) { HDC hdc; HPALETTE hpal; hdc = GetDC(0); hpal = CreateHalftonePalette(hdc); ReleaseDC(0, hdc); return hpal; } HBRUSH WINAPI WinGCreateHalftoneBrush(HDC hdc, COLORREF color, INT type) { return CreateSolidBrush(color); } #else HDC WINAPI WinGCreateDC(void) { return (HDC)0; } HBITMAP WINAPI WinGCreateBitmap(HDC hdc, BITMAPINFO *bmi, void **bits) { return (HBITMAP)0; } BOOL WINAPI WinGBitBlt(HDC hdcDst, INT xDst, INT yDst, INT width, INT height, HDC hdcSrc, INT xSrc, INT ySrc) { return (BOOL)0; } BOOL WINAPI WinGStretchBlt(HDC hdcDst, INT xDst, INT yDst, INT widthDst, INT heightDst, HDC hdcSrc, INT xSrc, INT ySrc, INT widthSrc, INT heightSrc) { return (BOOL)0; } BOOL WINAPI WinGRecommendDIBFormat(BITMAPINFO *bmi) { return TRUE; } void * WINAPI WinGGetDIBPointer(HBITMAP hbmp, BITMAPINFO *bmi) { return NULL; } UINT WINAPI WinGSetDIBColorTable(HDC hdc, UINT start, UINT end, RGBQUAD *colors) { return (UINT)0; } UINT WINAPI WinGGetDIBColorTable(HDC hdc, UINT start, UINT end, RGBQUAD *colors) { return (UINT)0; } HPALETTE WINAPI WinGCreateHalftonePalette(void) { return (HPALETTE)0; } HBRUSH WINAPI WinGCreateHalftoneBrush(HDC hdc, COLORREF color, INT type) { return (HBRUSH)0; } #endif ================================================ FILE: wing/wing32.def ================================================ LIBRARY "WinG32" EXPORTS WinGBitBlt = WinGBitBlt @1 WinGCreateBitmap = WinGCreateBitmap @2 WinGCreateDC = WinGCreateDC @3 WinGCreateHalftoneBrush = WinGCreateHalftoneBrush @4 WinGCreateHalftonePalette = WinGCreateHalftonePalette @5 WinGGetDIBColorTable = WinGGetDIBColorTable @6 WinGGetDIBPointer = WinGGetDIBPointer @7 WinGRecommendDIBFormat = WinGRecommendDIBFormat @8 WinGSetDIBColorTable = WinGSetDIBColorTable @9 WinGStretchBlt = WinGStretchBlt @10 ================================================ FILE: wing/wing32.sln ================================================  Microsoft Visual Studio Solution File, Format Version 10.00 # Visual Studio 2008 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wing32", "wing32.vcproj", "{579E7FE7-2745-4100-A802-23511711FFFF}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Release|Win32 = Release|Win32 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {579E7FE7-2745-4100-A802-23511711FFFF}.Debug|Win32.ActiveCfg = Debug|Win32 {579E7FE7-2745-4100-A802-23511711FFFF}.Debug|Win32.Build.0 = Debug|Win32 {579E7FE7-2745-4100-A802-23511711FFFF}.Release|Win32.ActiveCfg = Release|Win32 {579E7FE7-2745-4100-A802-23511711FFFF}.Release|Win32.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal ================================================ FILE: wing/wing32.vcproj ================================================